localize library cdn, remove approve button from transaction page, fix all fitur running datatable as well, fixing sortable datatable using new cdn, fix modal approve, add note to receiver mutations

This commit is contained in:
2025-06-16 15:01:08 +07:00
parent 9cfb566aee
commit 567e4aa5fc
45 changed files with 16202 additions and 365 deletions

View File

@@ -19,8 +19,13 @@ class MutationsController extends Controller
$menu = Menu::where('link','mutations.index')->first(); $menu = Menu::where('link','mutations.index')->first();
if ($request->ajax()) { if ($request->ajax()) {
$data = Mutation::with(['fromDealer', 'toDealer', 'requestedBy.role', 'approvedBy.role', 'receivedBy.role']) // Use a more specific query to avoid join conflicts
->select('mutations.*'); $data = Mutation::query()
->with(['fromDealer', 'toDealer', 'requestedBy.role', 'approvedBy.role', 'receivedBy.role'])
->select([
'mutations.*'
])
->orderBy('mutations.id', 'desc'); // Default order by ID desc
// Filter berdasarkan dealer jika user bukan admin // Filter berdasarkan dealer jika user bukan admin
if (auth()->user()->dealer_id) { if (auth()->user()->dealer_id) {
@@ -60,6 +65,65 @@ class MutationsController extends Controller
->addColumn('action', function($row) { ->addColumn('action', function($row) {
return view('warehouse_management.mutations._action', compact('row'))->render(); return view('warehouse_management.mutations._action', compact('row'))->render();
}) })
// Enhanced filtering
->filterColumn('mutation_number', function($query, $keyword) {
$query->where('mutations.mutation_number', 'like', "%{$keyword}%");
})
->filterColumn('from_dealer', function($query, $keyword) {
$query->whereHas('fromDealer', function($q) use ($keyword) {
$q->where('name', 'like', "%{$keyword}%");
});
})
->filterColumn('to_dealer', function($query, $keyword) {
$query->whereHas('toDealer', function($q) use ($keyword) {
$q->where('name', 'like', "%{$keyword}%");
});
})
->filterColumn('requested_by', function($query, $keyword) {
$query->whereHas('requestedBy', function($q) use ($keyword) {
$q->where('name', 'like', "%{$keyword}%");
});
})
->filterColumn('status', function($query, $keyword) {
$query->where('mutations.status', 'like', "%{$keyword}%");
})
->filterColumn('created_at', function($query, $keyword) {
$query->whereDate('mutations.created_at', 'like', "%{$keyword}%");
})
// Enhanced ordering - avoid join conflicts by using subqueries
->orderColumn('mutation_number', function($query, $order) {
$query->orderBy('mutations.mutation_number', $order);
})
->orderColumn('from_dealer', function($query, $order) {
$query->orderBy(
DB::raw('(SELECT name FROM dealers WHERE dealers.id = mutations.from_dealer_id)'),
$order
);
})
->orderColumn('to_dealer', function($query, $order) {
$query->orderBy(
DB::raw('(SELECT name FROM dealers WHERE dealers.id = mutations.to_dealer_id)'),
$order
);
})
->orderColumn('requested_by', function($query, $order) {
$query->orderBy(
DB::raw('(SELECT name FROM users WHERE users.id = mutations.requested_by)'),
$order
);
})
->orderColumn('total_items', function($query, $order) {
$query->orderBy(
DB::raw('(SELECT SUM(quantity_requested) FROM mutation_details WHERE mutation_details.mutation_id = mutations.id)'),
$order
);
})
->orderColumn('status', function($query, $order) {
$query->orderBy('mutations.status', $order);
})
->orderColumn('created_at', function($query, $order) {
$query->orderBy('mutations.created_at', $order);
})
->rawColumns(['status', 'action']) ->rawColumns(['status', 'action'])
->make(true); ->make(true);
} }
@@ -319,19 +383,26 @@ class MutationsController extends Controller
// Get mutations that need action from this dealer: // Get mutations that need action from this dealer:
// 1. 'sent' status where this dealer is the recipient (need to receive) // 1. 'sent' status where this dealer is the recipient (need to receive)
// 2. 'received' status where this dealer is the recipient (need to approve) - CORRECTED LOGIC // 2. 'received' status where this dealer is the recipient (show as waiting for admin approval)
// 3. 'approved' status where this dealer is the recipient (show as completed)
// 4. 'rejected' status where this dealer is the recipient (show as rejected)
$data = Mutation::with(['fromDealer', 'toDealer', 'requestedBy.role']) $data = Mutation::with(['fromDealer', 'toDealer', 'requestedBy.role'])
->where(function($query) use ($dealerId) { ->where(function($query) use ($dealerId) {
// Mutations sent to this dealer that need to be received // Mutations sent to this dealer that need to be received
$query->where('to_dealer_id', $dealerId) $query->where('to_dealer_id', $dealerId)
->where('status', 'sent'); ->where('status', 'sent');
// OR mutations received by this dealer that need approval from recipient // OR mutations received by this dealer (waiting for admin approval)
$query->orWhere(function($subQuery) use ($dealerId) { $query->orWhere(function($subQuery) use ($dealerId) {
$subQuery->where('to_dealer_id', $dealerId) $subQuery->where('to_dealer_id', $dealerId)
->where('status', 'received'); ->where('status', 'received');
}); });
// OR mutations approved/rejected for this dealer (historical data)
$query->orWhere(function($subQuery) use ($dealerId) {
$subQuery->where('to_dealer_id', $dealerId)
->whereIn('status', ['approved', 'rejected']);
});
}) })
->select('mutations.*'); ->orderBy('mutations.id', 'desc'); // Default order by ID desc
return DataTables::of($data) return DataTables::of($data)
->addIndexColumn() ->addIndexColumn()
@@ -345,21 +416,11 @@ class MutationsController extends Controller
return $row->toDealer->name ?? '-'; return $row->toDealer->name ?? '-';
}) })
->addColumn('status', function($row) { ->addColumn('status', function($row) {
$statusColor = $row->status_color; $status = $row->status instanceof MutationStatus ? $row->status : MutationStatus::from($row->status);
$statusLabel = $row->status_label; $textColorClass = $status->textColorClass();
$label = $status->label();
$textColorClass = match($statusColor) { return "<span class=\"font-weight-bold {$textColorClass}\">{$label}</span>";
'success' => 'text-success',
'warning' => 'text-warning',
'danger' => 'text-danger',
'info' => 'text-info',
'primary' => 'text-primary',
'brand' => 'text-primary',
'secondary' => 'text-muted',
default => 'text-dark'
};
return "<span class=\"font-weight-bold {$textColorClass}\">{$statusLabel}</span>";
}) })
->addColumn('total_items', function($row) { ->addColumn('total_items', function($row) {
return number_format($row->total_items, 0); return number_format($row->total_items, 0);
@@ -376,16 +437,23 @@ class MutationsController extends Controller
Detail & Terima Detail & Terima
</button>'; </button>';
} elseif ($row->status->value === 'received' && $row->to_dealer_id == $dealerId) { } elseif ($row->status->value === 'received' && $row->to_dealer_id == $dealerId) {
// For received mutations where current dealer is recipient - show approve/reject buttons // For received mutations where current dealer is recipient - only show detail (approval is admin only)
$buttons .= '<button type="button" class="btn btn-info btn-sm btn-detail mr-1" onclick="showMutationDetail('.$row->id.')"> $buttons .= '<button type="button" class="btn btn-info btn-sm btn-detail" onclick="showMutationDetail('.$row->id.')">
Detail Detail
</button>'; </button>';
$buttons .= '<button type="button" class="btn btn-success btn-sm btn-approve-mutation mr-1" data-id="'.$row->id.'"> $buttons .= '<div class="mt-1"><small class="text-muted">Menunggu persetujuan admin</small></div>';
Setujui } elseif ($row->status->value === 'approved' && $row->to_dealer_id == $dealerId) {
// For approved mutations - show detail only
$buttons .= '<button type="button" class="btn btn-info btn-sm btn-detail" onclick="showMutationDetail('.$row->id.')">
Detail
</button>'; </button>';
$buttons .= '<button type="button" class="btn btn-danger btn-sm btn-reject-mutation" data-id="'.$row->id.'"> $buttons .= '<div class="mt-1"><small class="text-success">Disetujui admin</small></div>';
Tolak } elseif ($row->status->value === 'rejected' && $row->to_dealer_id == $dealerId) {
// For rejected mutations - show detail only
$buttons .= '<button type="button" class="btn btn-info btn-sm btn-detail" onclick="showMutationDetail('.$row->id.')">
Detail
</button>'; </button>';
$buttons .= '<div class="mt-1"><small class="text-danger">Ditolak admin</small></div>';
} }
return $buttons; return $buttons;

View File

@@ -26,8 +26,10 @@ class ProductsController extends Controller
{ {
$menu = Menu::where('link','products.index')->first(); $menu = Menu::where('link','products.index')->first();
if($request->ajax()){ if($request->ajax()){
$data = Product::with(['category', 'stocks']) $data = Product::with(['category'])
->orderBy('id', 'desc'); ->select('products.*')
->leftJoin('product_categories', 'products.product_category_id', '=', 'product_categories.id');
return DataTables::of($data) return DataTables::of($data)
->addIndexColumn() ->addIndexColumn()
->addColumn('category_name', function ($row) { ->addColumn('category_name', function ($row) {
@@ -55,6 +57,12 @@ class ProductsController extends Controller
return $btn; return $btn;
}) })
->filterColumn('category_name', function($query, $keyword) {
$query->where('product_categories.name', 'like', "%{$keyword}%");
})
->orderColumn('category_name', function ($query, $order) {
$query->orderBy('product_categories.name', $order);
})
->rawColumns(['action']) ->rawColumns(['action'])
->make(true); ->make(true);
} }
@@ -196,7 +204,7 @@ class ProductsController extends Controller
public function all_products(){ public function all_products(){
try{ try{
$products = Product::where('is_active', true)->select('id','name')->get(); $products = Product::where('active', true)->select('id','name')->get();
return response()->json($products); return response()->json($products);
}catch(\Exception $ex){ }catch(\Exception $ex){
Log::error($ex->getMessage()); Log::error($ex->getMessage());

166
package-lock.json generated
View File

@@ -1,5 +1,5 @@
{ {
"name": "ckb", "name": "html",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
@@ -10,14 +10,21 @@
"bootstrap": "^5.1.3", "bootstrap": "^5.1.3",
"browser-sync": "^2.29.3", "browser-sync": "^2.29.3",
"browser-sync-webpack-plugin": "^2.3.0", "browser-sync-webpack-plugin": "^2.3.0",
"chart.js": "^4.3.0",
"chartjs-plugin-datalabels": "^2.2.0",
"concurrently": "^9.1.2", "concurrently": "^9.1.2",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"datatables.net": "^1.13.6",
"datatables.net-bs4": "^1.13.6",
"datatables.net-fixedcolumns": "^4.3.0",
"datatables.net-fixedcolumns-bs4": "^4.3.0",
"laravel-mix": "^6.0.49", "laravel-mix": "^6.0.49",
"lodash": "^4.17.19", "lodash": "^4.17.19",
"postcss": "^8.1.14", "postcss": "^8.1.14",
"resolve-url-loader": "^5.0.0", "resolve-url-loader": "^5.0.0",
"sass": "^1.32.11", "sass": "^1.32.11",
"sass-loader": "^11.0.1", "sass-loader": "^11.0.1",
"sweetalert2": "^11.0.0",
"webpack": "^5.99.9", "webpack": "^5.99.9",
"webpack-cli": "^6.0.1", "webpack-cli": "^6.0.1",
"webpack-dev-server": "^4.15.2" "webpack-dev-server": "^4.15.2"
@@ -1835,6 +1842,12 @@
"@jridgewell/sourcemap-codec": "^1.4.14" "@jridgewell/sourcemap-codec": "^1.4.14"
} }
}, },
"node_modules/@kurkle/color": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz",
"integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==",
"dev": true
},
"node_modules/@leichtgewicht/ip-codec": { "node_modules/@leichtgewicht/ip-codec": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
@@ -3622,6 +3635,27 @@
"node": "*" "node": "*"
} }
}, },
"node_modules/chart.js": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz",
"integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==",
"dev": true,
"dependencies": {
"@kurkle/color": "^0.3.0"
},
"engines": {
"pnpm": ">=8"
}
},
"node_modules/chartjs-plugin-datalabels": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-2.2.0.tgz",
"integrity": "sha512-14ZU30lH7n89oq+A4bWaJPnAG8a7ZTk7dKf48YAzMvJjQtjrgg5Dpk9f+LbjCF6bpx3RAGTeL13IXpKQYyRvlw==",
"dev": true,
"peerDependencies": {
"chart.js": ">=3.0.0"
}
},
"node_modules/chokidar": { "node_modules/chokidar": {
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -4450,6 +4484,46 @@
"node": ">=8.0.0" "node": ">=8.0.0"
} }
}, },
"node_modules/datatables.net": {
"version": "1.13.11",
"resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.13.11.tgz",
"integrity": "sha512-AE6RkMXziRaqzPcu/pl3SJXeRa6fmXQG/fVjuRESujvkzqDCYEeKTTpPMuVJSGYJpPi32WGSphVNNY1G4nSN/g==",
"dev": true,
"dependencies": {
"jquery": "1.8 - 4"
}
},
"node_modules/datatables.net-bs4": {
"version": "1.13.11",
"resolved": "https://registry.npmjs.org/datatables.net-bs4/-/datatables.net-bs4-1.13.11.tgz",
"integrity": "sha512-1LnxzQDFKpwvBETc8wtUtQ+pUXhs6NJomNST5pRzzHAccckkj9rZeOp3mevKDnDJKuNhBM1Y0rIeZGylJnqh9A==",
"dev": true,
"dependencies": {
"datatables.net": "1.13.11",
"jquery": "1.8 - 4"
}
},
"node_modules/datatables.net-fixedcolumns": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/datatables.net-fixedcolumns/-/datatables.net-fixedcolumns-4.3.1.tgz",
"integrity": "sha512-K5hEr5PIIHFMLd2sR9CBw3RRhf0nJbbsc5NHWnfjUUtnr9d808xbifuej3TpdKOtGeRJgAnRktiL9f30sM32CQ==",
"dev": true,
"dependencies": {
"datatables.net": "^1.13.0",
"jquery": ">=1.7"
}
},
"node_modules/datatables.net-fixedcolumns-bs4": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/datatables.net-fixedcolumns-bs4/-/datatables.net-fixedcolumns-bs4-4.3.1.tgz",
"integrity": "sha512-/JkG5vAil/KEB+FFvl0kcvqFMVHXZgq+6yzImlZaHE3NSApV8L5eWnyIQakShczPcxrU9iozGOxvtRRIFl0rqA==",
"dev": true,
"dependencies": {
"datatables.net-bs4": "^1.13.0",
"datatables.net-fixedcolumns": "4.3.1",
"jquery": ">=1.7"
}
},
"node_modules/debug": { "node_modules/debug": {
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -6468,6 +6542,12 @@
"url": "https://github.com/chalk/supports-color?sponsor=1" "url": "https://github.com/chalk/supports-color?sponsor=1"
} }
}, },
"node_modules/jquery": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
"dev": true
},
"node_modules/js-tokens": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -9760,6 +9840,16 @@
"node": ">=10.13.0" "node": ">=10.13.0"
} }
}, },
"node_modules/sweetalert2": {
"version": "11.22.0",
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.22.0.tgz",
"integrity": "sha512-pSMuRGDULhh+wrFkO22O0YsIXxs8yFE0O+WVYXcqc/sTa1oRnf0JlR+vfQIRY1QM1UeFfnCjyw6DYnG75/oxiQ==",
"dev": true,
"funding": {
"type": "individual",
"url": "https://github.com/sponsors/limonte"
}
},
"node_modules/tapable": { "node_modules/tapable": {
"version": "2.2.2", "version": "2.2.2",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
@@ -12134,6 +12224,12 @@
"@jridgewell/sourcemap-codec": "^1.4.14" "@jridgewell/sourcemap-codec": "^1.4.14"
} }
}, },
"@kurkle/color": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz",
"integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==",
"dev": true
},
"@leichtgewicht/ip-codec": { "@leichtgewicht/ip-codec": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
@@ -13549,6 +13645,22 @@
"integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
"dev": true "dev": true
}, },
"chart.js": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz",
"integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==",
"dev": true,
"requires": {
"@kurkle/color": "^0.3.0"
}
},
"chartjs-plugin-datalabels": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-2.2.0.tgz",
"integrity": "sha512-14ZU30lH7n89oq+A4bWaJPnAG8a7ZTk7dKf48YAzMvJjQtjrgg5Dpk9f+LbjCF6bpx3RAGTeL13IXpKQYyRvlw==",
"dev": true,
"requires": {}
},
"chokidar": { "chokidar": {
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -14175,6 +14287,46 @@
"css-tree": "^1.1.2" "css-tree": "^1.1.2"
} }
}, },
"datatables.net": {
"version": "1.13.11",
"resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.13.11.tgz",
"integrity": "sha512-AE6RkMXziRaqzPcu/pl3SJXeRa6fmXQG/fVjuRESujvkzqDCYEeKTTpPMuVJSGYJpPi32WGSphVNNY1G4nSN/g==",
"dev": true,
"requires": {
"jquery": "1.8 - 4"
}
},
"datatables.net-bs4": {
"version": "1.13.11",
"resolved": "https://registry.npmjs.org/datatables.net-bs4/-/datatables.net-bs4-1.13.11.tgz",
"integrity": "sha512-1LnxzQDFKpwvBETc8wtUtQ+pUXhs6NJomNST5pRzzHAccckkj9rZeOp3mevKDnDJKuNhBM1Y0rIeZGylJnqh9A==",
"dev": true,
"requires": {
"datatables.net": "1.13.11",
"jquery": "1.8 - 4"
}
},
"datatables.net-fixedcolumns": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/datatables.net-fixedcolumns/-/datatables.net-fixedcolumns-4.3.1.tgz",
"integrity": "sha512-K5hEr5PIIHFMLd2sR9CBw3RRhf0nJbbsc5NHWnfjUUtnr9d808xbifuej3TpdKOtGeRJgAnRktiL9f30sM32CQ==",
"dev": true,
"requires": {
"datatables.net": "^1.13.0",
"jquery": ">=1.7"
}
},
"datatables.net-fixedcolumns-bs4": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/datatables.net-fixedcolumns-bs4/-/datatables.net-fixedcolumns-bs4-4.3.1.tgz",
"integrity": "sha512-/JkG5vAil/KEB+FFvl0kcvqFMVHXZgq+6yzImlZaHE3NSApV8L5eWnyIQakShczPcxrU9iozGOxvtRRIFl0rqA==",
"dev": true,
"requires": {
"datatables.net-bs4": "^1.13.0",
"datatables.net-fixedcolumns": "4.3.1",
"jquery": ">=1.7"
}
},
"debug": { "debug": {
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -15603,6 +15755,12 @@
} }
} }
}, },
"jquery": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
"dev": true
},
"js-tokens": { "js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -17963,6 +18121,12 @@
"stable": "^0.1.8" "stable": "^0.1.8"
} }
}, },
"sweetalert2": {
"version": "11.22.0",
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.22.0.tgz",
"integrity": "sha512-pSMuRGDULhh+wrFkO22O0YsIXxs8yFE0O+WVYXcqc/sTa1oRnf0JlR+vfQIRY1QM1UeFfnCjyw6DYnG75/oxiQ==",
"dev": true
},
"tapable": { "tapable": {
"version": "2.2.2", "version": "2.2.2",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",

View File

@@ -15,14 +15,21 @@
"bootstrap": "^5.1.3", "bootstrap": "^5.1.3",
"browser-sync": "^2.29.3", "browser-sync": "^2.29.3",
"browser-sync-webpack-plugin": "^2.3.0", "browser-sync-webpack-plugin": "^2.3.0",
"chart.js": "^4.3.0",
"chartjs-plugin-datalabels": "^2.2.0",
"concurrently": "^9.1.2", "concurrently": "^9.1.2",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"datatables.net": "^1.13.6",
"datatables.net-bs4": "^1.13.6",
"datatables.net-fixedcolumns": "^4.3.0",
"datatables.net-fixedcolumns-bs4": "^4.3.0",
"laravel-mix": "^6.0.49", "laravel-mix": "^6.0.49",
"lodash": "^4.17.19", "lodash": "^4.17.19",
"postcss": "^8.1.14", "postcss": "^8.1.14",
"resolve-url-loader": "^5.0.0", "resolve-url-loader": "^5.0.0",
"sass": "^1.32.11", "sass": "^1.32.11",
"sass-loader": "^11.0.1", "sass-loader": "^11.0.1",
"sweetalert2": "^11.0.0",
"webpack": "^5.99.9", "webpack": "^5.99.9",
"webpack-cli": "^6.0.1", "webpack-cli": "^6.0.1",
"webpack-dev-server": "^4.15.2" "webpack-dev-server": "^4.15.2"

440
public/css/dataTables.bootstrap4.min.css vendored Normal file
View File

@@ -0,0 +1,440 @@
:root {
--dt-row-selected: 2, 117, 216;
--dt-row-selected-text: 255, 255, 255;
--dt-row-selected-link: 9, 10, 11;
--dt-row-stripe: 0, 0, 0;
--dt-row-hover: 0, 0, 0;
--dt-column-ordering: 0, 0, 0;
--dt-html-background: white;
}
:root.dark {
--dt-html-background: rgb(33, 37, 41);
}
table.dataTable td.dt-control {
text-align: center;
cursor: pointer;
}
table.dataTable td.dt-control:before {
display: inline-block;
color: rgba(0, 0, 0, 0.5);
content: "►";
}
table.dataTable tr.dt-hasChild td.dt-control:before {
content: "▼";
}
html.dark table.dataTable td.dt-control:before {
color: rgba(255, 255, 255, 0.5);
}
html.dark table.dataTable tr.dt-hasChild td.dt-control:before {
color: rgba(255, 255, 255, 0.5);
}
table.dataTable thead > tr > th.sorting,
table.dataTable thead > tr > th.sorting_asc,
table.dataTable thead > tr > th.sorting_desc,
table.dataTable thead > tr > th.sorting_asc_disabled,
table.dataTable thead > tr > th.sorting_desc_disabled,
table.dataTable thead > tr > td.sorting,
table.dataTable thead > tr > td.sorting_asc,
table.dataTable thead > tr > td.sorting_desc,
table.dataTable thead > tr > td.sorting_asc_disabled,
table.dataTable thead > tr > td.sorting_desc_disabled {
cursor: pointer;
position: relative;
padding-right: 26px;
}
table.dataTable thead > tr > th.sorting:before,
table.dataTable thead > tr > th.sorting:after,
table.dataTable thead > tr > th.sorting_asc:before,
table.dataTable thead > tr > th.sorting_asc:after,
table.dataTable thead > tr > th.sorting_desc:before,
table.dataTable thead > tr > th.sorting_desc:after,
table.dataTable thead > tr > th.sorting_asc_disabled:before,
table.dataTable thead > tr > th.sorting_asc_disabled:after,
table.dataTable thead > tr > th.sorting_desc_disabled:before,
table.dataTable thead > tr > th.sorting_desc_disabled:after,
table.dataTable thead > tr > td.sorting:before,
table.dataTable thead > tr > td.sorting:after,
table.dataTable thead > tr > td.sorting_asc:before,
table.dataTable thead > tr > td.sorting_asc:after,
table.dataTable thead > tr > td.sorting_desc:before,
table.dataTable thead > tr > td.sorting_desc:after,
table.dataTable thead > tr > td.sorting_asc_disabled:before,
table.dataTable thead > tr > td.sorting_asc_disabled:after,
table.dataTable thead > tr > td.sorting_desc_disabled:before,
table.dataTable thead > tr > td.sorting_desc_disabled:after {
position: absolute;
display: block;
opacity: 0.125;
right: 10px;
line-height: 9px;
font-size: 0.8em;
}
table.dataTable thead > tr > th.sorting:before,
table.dataTable thead > tr > th.sorting_asc:before,
table.dataTable thead > tr > th.sorting_desc:before,
table.dataTable thead > tr > th.sorting_asc_disabled:before,
table.dataTable thead > tr > th.sorting_desc_disabled:before,
table.dataTable thead > tr > td.sorting:before,
table.dataTable thead > tr > td.sorting_asc:before,
table.dataTable thead > tr > td.sorting_desc:before,
table.dataTable thead > tr > td.sorting_asc_disabled:before,
table.dataTable thead > tr > td.sorting_desc_disabled:before {
bottom: 50%;
content: "▲";
content: "▲"/"";
}
table.dataTable thead > tr > th.sorting:after,
table.dataTable thead > tr > th.sorting_asc:after,
table.dataTable thead > tr > th.sorting_desc:after,
table.dataTable thead > tr > th.sorting_asc_disabled:after,
table.dataTable thead > tr > th.sorting_desc_disabled:after,
table.dataTable thead > tr > td.sorting:after,
table.dataTable thead > tr > td.sorting_asc:after,
table.dataTable thead > tr > td.sorting_desc:after,
table.dataTable thead > tr > td.sorting_asc_disabled:after,
table.dataTable thead > tr > td.sorting_desc_disabled:after {
top: 50%;
content: "▼";
content: "▼"/"";
}
table.dataTable thead > tr > th.sorting_asc:before,
table.dataTable thead > tr > th.sorting_desc:after,
table.dataTable thead > tr > td.sorting_asc:before,
table.dataTable thead > tr > td.sorting_desc:after {
opacity: 0.6;
}
table.dataTable thead > tr > th.sorting_desc_disabled:after,
table.dataTable thead > tr > th.sorting_asc_disabled:before,
table.dataTable thead > tr > td.sorting_desc_disabled:after,
table.dataTable thead > tr > td.sorting_asc_disabled:before {
display: none;
}
table.dataTable thead > tr > th:active,
table.dataTable thead > tr > td:active {
outline: none;
}
div.dataTables_scrollBody > table.dataTable > thead > tr > th:before,
div.dataTables_scrollBody > table.dataTable > thead > tr > th:after,
div.dataTables_scrollBody > table.dataTable > thead > tr > td:before,
div.dataTables_scrollBody > table.dataTable > thead > tr > td:after {
display: none;
}
div.dataTables_processing {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
margin-left: -100px;
margin-top: -26px;
text-align: center;
padding: 2px;
}
div.dataTables_processing > div:last-child {
position: relative;
width: 80px;
height: 15px;
margin: 1em auto;
}
div.dataTables_processing > div:last-child > div {
position: absolute;
top: 0;
width: 13px;
height: 13px;
border-radius: 50%;
background: rgb(2, 117, 216);
background: rgb(var(--dt-row-selected));
animation-timing-function: cubic-bezier(0, 1, 1, 0);
}
div.dataTables_processing > div:last-child > div:nth-child(1) {
left: 8px;
animation: datatables-loader-1 0.6s infinite;
}
div.dataTables_processing > div:last-child > div:nth-child(2) {
left: 8px;
animation: datatables-loader-2 0.6s infinite;
}
div.dataTables_processing > div:last-child > div:nth-child(3) {
left: 32px;
animation: datatables-loader-2 0.6s infinite;
}
div.dataTables_processing > div:last-child > div:nth-child(4) {
left: 56px;
animation: datatables-loader-3 0.6s infinite;
}
@keyframes datatables-loader-1 {
0% {
transform: scale(0);
}
100% {
transform: scale(1);
}
}
@keyframes datatables-loader-3 {
0% {
transform: scale(1);
}
100% {
transform: scale(0);
}
}
@keyframes datatables-loader-2 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(24px, 0);
}
}
table.dataTable.nowrap th,
table.dataTable.nowrap td {
white-space: nowrap;
}
table.dataTable th.dt-left,
table.dataTable td.dt-left {
text-align: left;
}
table.dataTable th.dt-center,
table.dataTable td.dt-center,
table.dataTable td.dataTables_empty {
text-align: center;
}
table.dataTable th.dt-right,
table.dataTable td.dt-right {
text-align: right;
}
table.dataTable th.dt-justify,
table.dataTable td.dt-justify {
text-align: justify;
}
table.dataTable th.dt-nowrap,
table.dataTable td.dt-nowrap {
white-space: nowrap;
}
table.dataTable thead th,
table.dataTable thead td,
table.dataTable tfoot th,
table.dataTable tfoot td {
text-align: left;
}
table.dataTable thead th.dt-head-left,
table.dataTable thead td.dt-head-left,
table.dataTable tfoot th.dt-head-left,
table.dataTable tfoot td.dt-head-left {
text-align: left;
}
table.dataTable thead th.dt-head-center,
table.dataTable thead td.dt-head-center,
table.dataTable tfoot th.dt-head-center,
table.dataTable tfoot td.dt-head-center {
text-align: center;
}
table.dataTable thead th.dt-head-right,
table.dataTable thead td.dt-head-right,
table.dataTable tfoot th.dt-head-right,
table.dataTable tfoot td.dt-head-right {
text-align: right;
}
table.dataTable thead th.dt-head-justify,
table.dataTable thead td.dt-head-justify,
table.dataTable tfoot th.dt-head-justify,
table.dataTable tfoot td.dt-head-justify {
text-align: justify;
}
table.dataTable thead th.dt-head-nowrap,
table.dataTable thead td.dt-head-nowrap,
table.dataTable tfoot th.dt-head-nowrap,
table.dataTable tfoot td.dt-head-nowrap {
white-space: nowrap;
}
table.dataTable tbody th.dt-body-left,
table.dataTable tbody td.dt-body-left {
text-align: left;
}
table.dataTable tbody th.dt-body-center,
table.dataTable tbody td.dt-body-center {
text-align: center;
}
table.dataTable tbody th.dt-body-right,
table.dataTable tbody td.dt-body-right {
text-align: right;
}
table.dataTable tbody th.dt-body-justify,
table.dataTable tbody td.dt-body-justify {
text-align: justify;
}
table.dataTable tbody th.dt-body-nowrap,
table.dataTable tbody td.dt-body-nowrap {
white-space: nowrap;
}
table.dataTable {
clear: both;
margin-top: 6px !important;
margin-bottom: 6px !important;
max-width: none !important;
border-collapse: separate !important;
border-spacing: 0;
}
table.dataTable td,
table.dataTable th {
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
table.dataTable td.dataTables_empty,
table.dataTable th.dataTables_empty {
text-align: center;
}
table.dataTable.nowrap th,
table.dataTable.nowrap td {
white-space: nowrap;
}
table.dataTable.table-striped > tbody > tr:nth-of-type(2n + 1) {
background-color: transparent;
}
table.dataTable > tbody > tr {
background-color: transparent;
}
table.dataTable > tbody > tr.selected > * {
box-shadow: inset 0 0 0 9999px rgb(2, 117, 216);
box-shadow: inset 0 0 0 9999px rgb(var(--dt-row-selected));
color: rgb(255, 255, 255);
color: rgb(var(--dt-row-selected-text));
}
table.dataTable > tbody > tr.selected a {
color: rgb(9, 10, 11);
color: rgb(var(--dt-row-selected-link));
}
table.dataTable.table-striped > tbody > tr.odd > * {
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.05);
}
table.dataTable.table-striped > tbody > tr.odd.selected > * {
box-shadow: inset 0 0 0 9999px rgba(2, 117, 216, 0.95);
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.95);
}
table.dataTable.table-hover > tbody > tr:hover > * {
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.075);
}
table.dataTable.table-hover > tbody > tr.selected:hover > * {
box-shadow: inset 0 0 0 9999px rgba(2, 117, 216, 0.975);
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.975);
}
div.dataTables_wrapper div.dataTables_length label {
font-weight: normal;
text-align: left;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_length select {
width: auto;
display: inline-block;
}
div.dataTables_wrapper div.dataTables_filter {
text-align: right;
}
div.dataTables_wrapper div.dataTables_filter label {
font-weight: normal;
white-space: nowrap;
text-align: left;
}
div.dataTables_wrapper div.dataTables_filter input {
margin-left: 0.5em;
display: inline-block;
width: auto;
}
div.dataTables_wrapper div.dataTables_info {
padding-top: 0.85em;
}
div.dataTables_wrapper div.dataTables_paginate {
margin: 0;
white-space: nowrap;
text-align: right;
}
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
margin: 2px 0;
white-space: nowrap;
justify-content: flex-end;
}
div.dataTables_wrapper div.dataTables_processing {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
margin-left: -100px;
margin-top: -26px;
text-align: center;
padding: 1em 0;
}
div.dataTables_scrollHead table.dataTable {
margin-bottom: 0 !important;
}
div.dataTables_scrollBody > table {
border-top: none;
margin-top: 0 !important;
margin-bottom: 0 !important;
}
div.dataTables_scrollBody > table > thead .sorting:before,
div.dataTables_scrollBody > table > thead .sorting_asc:before,
div.dataTables_scrollBody > table > thead .sorting_desc:before,
div.dataTables_scrollBody > table > thead .sorting:after,
div.dataTables_scrollBody > table > thead .sorting_asc:after,
div.dataTables_scrollBody > table > thead .sorting_desc:after {
display: none;
}
div.dataTables_scrollBody > table > tbody tr:first-child th,
div.dataTables_scrollBody > table > tbody tr:first-child td {
border-top: none;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner {
box-sizing: content-box;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner > table {
margin-top: 0 !important;
border-top: none;
}
@media screen and (max-width: 767px) {
div.dataTables_wrapper div.dataTables_length,
div.dataTables_wrapper div.dataTables_filter,
div.dataTables_wrapper div.dataTables_info,
div.dataTables_wrapper div.dataTables_paginate {
text-align: center;
}
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
justify-content: center !important;
}
}
table.dataTable.table-sm > thead > tr > th:not(.sorting_disabled) {
padding-right: 20px;
}
table.table-bordered.dataTable {
border-right-width: 0;
}
table.table-bordered.dataTable th,
table.table-bordered.dataTable td {
border-left-width: 0;
}
table.table-bordered.dataTable th:last-child,
table.table-bordered.dataTable th:last-child,
table.table-bordered.dataTable td:last-child,
table.table-bordered.dataTable td:last-child {
border-right-width: 1px;
}
table.table-bordered.dataTable tbody th,
table.table-bordered.dataTable tbody td {
border-bottom-width: 0;
}
div.dataTables_scrollHead table.table-bordered {
border-bottom-width: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row {
margin: 0;
}
div.table-responsive
> div.dataTables_wrapper
> div.row
> div[class^="col-"]:first-child {
padding-left: 0;
}
div.table-responsive
> div.dataTables_wrapper
> div.row
> div[class^="col-"]:last-child {
padding-right: 0;
}

View File

@@ -0,0 +1,36 @@
table.dataTable thead tr > .dtfc-fixed-left,
table.dataTable thead tr > .dtfc-fixed-right,
table.dataTable tfoot tr > .dtfc-fixed-left,
table.dataTable tfoot tr > .dtfc-fixed-right {
top: 0;
bottom: 0;
z-index: 3;
background-color: white;
}
table.dataTable tbody tr > .dtfc-fixed-left,
table.dataTable tbody tr > .dtfc-fixed-right {
z-index: 1;
background-color: white;
}
div.dtfc-left-top-blocker,
div.dtfc-right-top-blocker {
background-color: white;
}
div.dtfc-right-top-blocker,
div.dtfc-left-top-blocker {
margin-top: 6px;
border-bottom: 0px solid #ddd !important;
}
table.dataTable.table-bordered.dtfc-has-left {
border-left: none;
}
div.dataTables_scroll.dtfc-has-left table.table-bordered {
border-left: none;
}
div.dataTables_scrollBody {
border-left: 1px solid #ddd !important;
}
div.dataTables_scrollFootInner table.table-bordered tr th:first-child,
div.dataTables_scrollHeadInner table.table-bordered tr th:first-child {
border-left: 1px solid #ddd !important;
}

835
public/css/google-font.css Normal file
View File

@@ -0,0 +1,835 @@
/* devanagari */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 300;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLDz8Z11lFc-K.woff2)
format("woff2");
unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0,
U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;
}
/* latin-ext */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 300;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLDz8Z1JlFc-K.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 300;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLDz8Z1xlFQ.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* devanagari */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJbecmNE.woff2)
format("woff2");
unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0,
U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;
}
/* latin-ext */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJnecmNE.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJfecg.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* devanagari */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 500;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLGT9Z11lFc-K.woff2)
format("woff2");
unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0,
U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;
}
/* latin-ext */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 500;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLGT9Z1JlFc-K.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 500;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLGT9Z1xlFQ.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* devanagari */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 600;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLEj6Z11lFc-K.woff2)
format("woff2");
unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0,
U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;
}
/* latin-ext */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 600;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLEj6Z1JlFc-K.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 600;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLEj6Z1xlFQ.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* devanagari */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 700;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLCz7Z11lFc-K.woff2)
format("woff2");
unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0,
U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;
}
/* latin-ext */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 700;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLCz7Z1JlFc-K.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 700;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLCz7Z1xlFQ.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2)
format("woff2");
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F,
U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2)
format("woff2");
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2)
format("woff2");
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2)
format("woff2");
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1,
U+03A3-03FF;
}
/* math */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2)
format("woff2");
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315,
U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A,
U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1,
U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C,
U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E,
U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115,
U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5,
U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310,
U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0,
U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA,
U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11,
U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF,
U+1EE00-1EEFF;
}
/* symbols */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2)
format("woff2");
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0,
U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF,
U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F,
U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981,
U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E,
U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E,
U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD,
U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C,
U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8,
U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0,
U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F,
U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E,
U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB,
U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6,
U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503,
U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA,
U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698,
U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7,
U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF,
U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887,
U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B,
U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C,
U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9,
U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2)
format("woff2");
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169,
U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323,
U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2)
format("woff2");
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F,
U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2)
format("woff2");
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2)
format("woff2");
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2)
format("woff2");
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1,
U+03A3-03FF;
}
/* math */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2)
format("woff2");
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315,
U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A,
U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1,
U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C,
U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E,
U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115,
U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5,
U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310,
U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0,
U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA,
U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11,
U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF,
U+1EE00-1EEFF;
}
/* symbols */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2)
format("woff2");
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0,
U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF,
U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F,
U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981,
U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E,
U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E,
U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD,
U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C,
U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8,
U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0,
U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F,
U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E,
U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB,
U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6,
U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503,
U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA,
U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698,
U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7,
U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF,
U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887,
U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B,
U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C,
U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9,
U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2)
format("woff2");
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169,
U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323,
U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2)
format("woff2");
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F,
U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2)
format("woff2");
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2)
format("woff2");
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2)
format("woff2");
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1,
U+03A3-03FF;
}
/* math */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2)
format("woff2");
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315,
U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A,
U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1,
U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C,
U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E,
U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115,
U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5,
U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310,
U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0,
U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA,
U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11,
U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF,
U+1EE00-1EEFF;
}
/* symbols */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2)
format("woff2");
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0,
U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF,
U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F,
U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981,
U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E,
U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E,
U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD,
U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C,
U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8,
U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0,
U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F,
U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E,
U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB,
U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6,
U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503,
U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA,
U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698,
U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7,
U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF,
U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887,
U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B,
U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C,
U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9,
U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2)
format("woff2");
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169,
U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323,
U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2)
format("woff2");
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F,
U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2)
format("woff2");
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2)
format("woff2");
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2)
format("woff2");
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1,
U+03A3-03FF;
}
/* math */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2)
format("woff2");
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315,
U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A,
U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1,
U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C,
U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E,
U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115,
U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5,
U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310,
U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0,
U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA,
U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11,
U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF,
U+1EE00-1EEFF;
}
/* symbols */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2)
format("woff2");
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0,
U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF,
U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F,
U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981,
U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E,
U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E,
U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD,
U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C,
U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8,
U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0,
U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F,
U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E,
U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB,
U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6,
U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503,
U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA,
U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698,
U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7,
U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF,
U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887,
U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B,
U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C,
U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9,
U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2)
format("woff2");
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169,
U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323,
U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2)
format("woff2");
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F,
U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2)
format("woff2");
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2)
format("woff2");
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2)
format("woff2");
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1,
U+03A3-03FF;
}
/* math */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2)
format("woff2");
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315,
U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A,
U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1,
U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C,
U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E,
U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115,
U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5,
U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310,
U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0,
U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA,
U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11,
U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF,
U+1EE00-1EEFF;
}
/* symbols */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2)
format("woff2");
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0,
U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF,
U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F,
U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981,
U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E,
U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E,
U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD,
U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C,
U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8,
U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0,
U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F,
U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E,
U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB,
U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6,
U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503,
U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA,
U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698,
U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7,
U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF,
U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887,
U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B,
U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C,
U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9,
U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2)
format("woff2");
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169,
U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323,
U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
table.dataTable thead tr>.dtfc-fixed-left,table.dataTable thead tr>.dtfc-fixed-right,table.dataTable tfoot tr>.dtfc-fixed-left,table.dataTable tfoot tr>.dtfc-fixed-right{top:0;bottom:0;z-index:3;background-color:white}table.dataTable tbody tr>.dtfc-fixed-left,table.dataTable tbody tr>.dtfc-fixed-right{z-index:1;background-color:white}div.dtfc-left-top-blocker,div.dtfc-right-top-blocker{background-color:white}html.dark table.dataTable thead tr>.dtfc-fixed-left,html.dark table.dataTable thead tr>.dtfc-fixed-right,html.dark table.dataTable tfoot tr>.dtfc-fixed-left,html.dark table.dataTable tfoot tr>.dtfc-fixed-right{background-color:var(--dt-html-background)}html.dark table.dataTable tbody tr>.dtfc-fixed-left,html.dark table.dataTable tbody tr>.dtfc-fixed-right{background-color:var(--dt-html-background)}html.dark div.dtfc-left-top-blocker,html.dark div.dtfc-right-top-blocker{background-color:var(--dt-html-background)}div.dtfc-right-top-blocker,div.dtfc-left-top-blocker{margin-top:6px;border-bottom:0px solid #ddd !important}table.dataTable.table-bordered.dtfc-has-left{border-left:none}div.dataTables_scroll.dtfc-has-left table.table-bordered{border-left:none}div.dataTables_scrollBody{border-left:1px solid #ddd !important}div.dataTables_scrollFootInner table.table-bordered tr th:first-child,div.dataTables_scrollHeadInner table.table-bordered tr th:first-child{border-left:1px solid #ddd !important}

1
public/css/vendor/sweetalert2.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,129 @@
/*! DataTables Bootstrap 4 integration
* ©2011-2017 SpryMedia Ltd - datatables.net/license
*/
!(function (t) {
var n, o;
"function" == typeof define && define.amd
? define(["jquery", "datatables.net"], function (e) {
return t(e, window, document);
})
: "object" == typeof exports
? ((n = require("jquery")),
(o = function (e, a) {
a.fn.dataTable || require("datatables.net")(e, a);
}),
"undefined" == typeof window
? (module.exports = function (e, a) {
return (
(e = e || window),
(a = a || n(e)),
o(e, a),
t(a, 0, e.document)
);
})
: (o(window, n),
(module.exports = t(n, window, window.document))))
: t(jQuery, window, document);
})(function (x, e, n, o) {
"use strict";
var r = x.fn.dataTable;
return (
x.extend(!0, r.defaults, {
dom: "<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
renderer: "bootstrap",
}),
x.extend(r.ext.classes, {
sWrapper: "dataTables_wrapper dt-bootstrap4",
sFilterInput: "form-control form-control-sm",
sLengthSelect:
"custom-select custom-select-sm form-control form-control-sm",
sProcessing: "dataTables_processing card",
sPageButton: "paginate_button page-item",
}),
(r.ext.renderer.pageButton.bootstrap = function (i, e, d, a, l, c) {
function u(e, a) {
for (
var t,
n,
o = function (e) {
e.preventDefault(),
x(e.currentTarget).hasClass("disabled") ||
m.page() == e.data.action ||
m.page(e.data.action).draw("page");
},
r = 0,
s = a.length;
r < s;
r++
)
if (((t = a[r]), Array.isArray(t))) u(e, t);
else {
switch (((f = p = ""), t)) {
case "ellipsis":
(p = "&#x2026;"), (f = "disabled");
break;
case "first":
(p = g.sFirst),
(f = t + (0 < l ? "" : " disabled"));
break;
case "previous":
(p = g.sPrevious),
(f = t + (0 < l ? "" : " disabled"));
break;
case "next":
(p = g.sNext),
(f = t + (l < c - 1 ? "" : " disabled"));
break;
case "last":
(p = g.sLast),
(f = t + (l < c - 1 ? "" : " disabled"));
break;
default:
(p = t + 1), (f = l === t ? "active" : "");
}
p &&
((n = -1 !== f.indexOf("disabled")),
(n = x("<li>", {
class: b.sPageButton + " " + f,
id:
0 === d && "string" == typeof t
? i.sTableId + "_" + t
: null,
})
.append(
x("<a>", {
href: n ? null : "#",
"aria-controls": i.sTableId,
"aria-disabled": n ? "true" : null,
"aria-label": w[t],
role: "link",
"aria-current":
"active" === f ? "page" : null,
"data-dt-idx": t,
tabindex: n ? -1 : i.iTabIndex,
class: "page-link",
}).html(p)
)
.appendTo(e)),
i.oApi._fnBindAction(n, { action: t }, o));
}
}
var p,
f,
t,
m = new r.Api(i),
b = i.oClasses,
g = i.oLanguage.oPaginate,
w = i.oLanguage.oAria.paginate || {};
try {
t = x(e).find(n.activeElement).data("dt-idx");
} catch (e) {}
u(x(e).empty().html('<ul class="pagination"/>').children("ul"), a),
t !== o &&
x(e)
.find("[data-dt-idx=" + t + "]")
.trigger("focus");
}),
r
);
});

View File

@@ -0,0 +1,415 @@
/*! FixedColumns 4.2.2
* © SpryMedia Ltd - datatables.net/license
*/
!(function (e) {
var i, l;
"function" == typeof define && define.amd
? define(["jquery", "datatables.net"], function (t) {
return e(t, window, document);
})
: "object" == typeof exports
? ((i = require("jquery")),
(l = function (t, s) {
s.fn.dataTable || require("datatables.net")(t, s);
}),
"undefined" != typeof window
? (module.exports = function (t, s) {
return (
(t = t || window),
(s = s || i(t)),
l(t, s),
e(s, 0, t.document)
);
})
: (l(window, i),
(module.exports = e(i, window, window.document))))
: e(jQuery, window, document);
})(function (l, t, s, F) {
"use strict";
var A,
i,
e,
o,
r = l.fn.dataTable;
function d(t, s) {
var e = this;
if (i && i.versionCheck && i.versionCheck("1.10.0"))
return (
(t = new i.Api(t)),
(this.classes = A.extend(!0, {}, d.classes)),
(this.c = A.extend(!0, {}, d.defaults, s)),
(s && s.left !== F) ||
this.c.leftColumns === F ||
(this.c.left = this.c.leftColumns),
(s && s.right !== F) ||
this.c.rightColumns === F ||
(this.c.right = this.c.rightColumns),
(this.s = {
barWidth: 0,
dt: t,
rtl: "rtl" === A("body").css("direction"),
}),
(s = {
bottom: "0px",
display: "block",
position: "absolute",
width: this.s.barWidth + 1 + "px",
}),
(this.dom = {
leftBottomBlocker: A("<div>")
.css(s)
.css("left", 0)
.addClass(this.classes.leftBottomBlocker),
leftTopBlocker: A("<div>")
.css(s)
.css({ left: 0, top: 0 })
.addClass(this.classes.leftTopBlocker),
rightBottomBlocker: A("<div>")
.css(s)
.css("right", 0)
.addClass(this.classes.rightBottomBlocker),
rightTopBlocker: A("<div>")
.css(s)
.css({ right: 0, top: 0 })
.addClass(this.classes.rightTopBlocker),
}),
this.s.dt.settings()[0]._bInitComplete
? (this._addStyles(), this._setKeyTableListener())
: t.one("init.dt", function () {
e._addStyles(), e._setKeyTableListener();
}),
t.on("column-sizing.dt", function () {
return e._addStyles();
}),
(t.settings()[0]._fixedColumns = this)
);
throw new Error("StateRestore requires DataTables 1.10 or newer");
}
function h(t, s) {
void 0 === s && (s = null);
(t = new r.Api(t)),
(s = s || t.init().fixedColumns || r.defaults.fixedColumns);
new e(t, s);
}
return (
(d.prototype.left = function (t) {
return (
t !== F && ((this.c.left = t), this._addStyles()), this.c.left
);
}),
(d.prototype.right = function (t) {
return (
t !== F && ((this.c.right = t), this._addStyles()), this.c.right
);
}),
(d.prototype._addStyles = function () {
this.s.dt.settings()[0].oScroll.sY &&
((s = A(this.s.dt.table().node()).closest(
"div.dataTables_scrollBody"
)[0]),
(e = this.s.dt.settings()[0].oBrowser.barWidth),
s.offsetWidth - s.clientWidth >= e
? (this.s.barWidth = e)
: (this.s.barWidth = 0),
this.dom.rightTopBlocker.css("width", this.s.barWidth + 1),
this.dom.leftTopBlocker.css("width", this.s.barWidth + 1),
this.dom.rightBottomBlocker.css("width", this.s.barWidth + 1),
this.dom.leftBottomBlocker.css("width", this.s.barWidth + 1));
for (
var t = null,
s = this.s.dt.column(0).header(),
e = null,
i =
(null !== s &&
((e = (s = A(s)).outerHeight() + 1),
(t = A(s.closest("div.dataTables_scroll")).css(
"position",
"relative"
))),
this.s.dt.column(0).footer()),
l = null,
o =
(null !== i &&
((l = (i = A(i)).outerHeight()), null === t) &&
(t = A(i.closest("div.dataTables_scroll")).css(
"position",
"relative"
)),
this.s.dt.columns().data().toArray().length),
r = 0,
d = 0,
h = A(this.s.dt.table().node())
.children("tbody")
.children("tr"),
n = 0,
a = new Map(),
c = 0;
c < o;
c++
) {
var f = this.s.dt.column(c);
if ((0 < c && a.set(c - 1, n), f.visible())) {
var u = A(f.header()),
g = A(f.footer());
if (c - n < this.c.left) {
if (
(A(this.s.dt.table().node()).addClass(
this.classes.tableFixedLeft
),
t.addClass(this.classes.tableFixedLeft),
0 < c - n)
)
for (var C = c; C + 1 < o; ) {
if (
(y = this.s.dt.column(C - 1, {
page: "current",
})).visible()
) {
(r += A(y.nodes()[0]).outerWidth()),
(d +=
y.header() || y.footer()
? A(y.header()).outerWidth()
: 0);
break;
}
C--;
}
for (var m = 0, p = h; m < p.length; m++) {
var x = p[m];
A(A(x).children()[c - n])
.css(this._getCellCSS(!1, r, "left"))
.addClass(this.classes.fixedLeft);
}
u
.css(this._getCellCSS(!0, d, "left"))
.addClass(this.classes.fixedLeft),
g
.css(this._getCellCSS(!0, d, "left"))
.addClass(this.classes.fixedLeft);
} else {
for (var b = 0, v = h; b < v.length; b++) {
x = v[b];
(R = A(A(x).children()[c - n])).hasClass(
this.classes.fixedLeft
) &&
R.css(this._clearCellCSS("left")).removeClass(
this.classes.fixedLeft
);
}
u.hasClass(this.classes.fixedLeft) &&
u
.css(this._clearCellCSS("left"))
.removeClass(this.classes.fixedLeft),
g.hasClass(this.classes.fixedLeft) &&
g
.css(this._clearCellCSS("left"))
.removeClass(this.classes.fixedLeft);
}
} else n++;
}
for (var B = 0, S = 0, _ = 0, c = o - 1; 0 <= c; c--)
if ((f = this.s.dt.column(c)).visible()) {
var u = A(f.header()),
g = A(f.footer()),
k = a.get(c);
if ((k === F && (k = n), c + _ >= o - this.c.right)) {
if (
(A(this.s.dt.table().node()).addClass(
this.classes.tableFixedRight
),
t.addClass(this.classes.tableFixedRight),
c + 1 + _ < o)
)
for (var y, C = c; C + 1 < o; ) {
if (
(y = this.s.dt.column(C + 1, {
page: "current",
})).visible()
) {
(B += A(y.nodes()[0]).outerWidth()),
(S +=
y.header() || y.footer()
? A(y.header()).outerWidth()
: 0);
break;
}
C++;
}
for (var w = 0, T = h; w < T.length; w++) {
x = T[w];
A(A(x).children()[c - k])
.css(this._getCellCSS(!1, B, "right"))
.addClass(this.classes.fixedRight);
}
u
.css(this._getCellCSS(!0, S, "right"))
.addClass(this.classes.fixedRight),
g
.css(this._getCellCSS(!0, S, "right"))
.addClass(this.classes.fixedRight);
} else {
for (var L = 0, W = h; L < W.length; L++) {
var R,
x = W[L];
(R = A(A(x).children()[c - k])).hasClass(
this.classes.fixedRight
) &&
R.css(this._clearCellCSS("right")).removeClass(
this.classes.fixedRight
);
}
u.hasClass(this.classes.fixedRight) &&
u
.css(this._clearCellCSS("right"))
.removeClass(this.classes.fixedRight),
g.hasClass(this.classes.fixedRight) &&
g
.css(this._clearCellCSS("right"))
.removeClass(this.classes.fixedRight);
}
} else _++;
s &&
(this.s.rtl
? (this.dom.leftTopBlocker.outerHeight(e),
t.append(this.dom.leftTopBlocker))
: (this.dom.rightTopBlocker.outerHeight(e),
t.append(this.dom.rightTopBlocker))),
i &&
(this.s.rtl
? (this.dom.leftBottomBlocker.outerHeight(l),
t.append(this.dom.leftBottomBlocker))
: (this.dom.rightBottomBlocker.outerHeight(l),
t.append(this.dom.rightBottomBlocker)));
}),
(d.prototype._getCellCSS = function (t, s, e) {
return "left" === e
? this.s.rtl
? { position: "sticky", right: s + "px" }
: { left: s + "px", position: "sticky" }
: this.s.rtl
? {
left: s + (t ? this.s.barWidth : 0) + "px",
position: "sticky",
}
: {
position: "sticky",
right: s + (t ? this.s.barWidth : 0) + "px",
};
}),
(d.prototype._clearCellCSS = function (t) {
return "left" === t
? this.s.rtl
? { position: "", right: "" }
: { left: "", position: "" }
: this.s.rtl
? { left: "", position: "" }
: { position: "", right: "" };
}),
(d.prototype._setKeyTableListener = function () {
var h = this;
this.s.dt.on("key-focus", function (t, s, e) {
var i,
l,
o,
r = A(e.node()).offset(),
d = A(
A(h.s.dt.table().node()).closest(
"div.dataTables_scrollBody"
)
);
0 < h.c.left &&
((i = (l = A(
h.s.dt.column(h.c.left - 1).header()
)).offset()),
(l = l.outerWidth()),
r.left < i.left + l) &&
((o = d.scrollLeft()),
d.scrollLeft(o - (i.left + l - r.left))),
0 < h.c.right &&
((i = h.s.dt.columns().data().toArray().length),
(l = A(e.node()).outerWidth()),
(e = A(h.s.dt.column(i - h.c.right).header()).offset()),
r.left + l > e.left) &&
((o = d.scrollLeft()),
d.scrollLeft(o - (e.left - (r.left + l))));
}),
this.s.dt.on("draw", function () {
h._addStyles();
}),
this.s.dt.on("column-reorder", function () {
h._addStyles();
}),
this.s.dt.on("column-visibility", function (t, s, e, i, l) {
l &&
!s.bDestroying &&
setTimeout(function () {
h._addStyles();
}, 50);
});
}),
(d.version = "4.2.2"),
(d.classes = {
fixedLeft: "dtfc-fixed-left",
fixedRight: "dtfc-fixed-right",
leftBottomBlocker: "dtfc-left-bottom-blocker",
leftTopBlocker: "dtfc-left-top-blocker",
rightBottomBlocker: "dtfc-right-bottom-blocker",
rightTopBlocker: "dtfc-right-top-blocker",
tableFixedLeft: "dtfc-has-left",
tableFixedRight: "dtfc-has-right",
}),
(d.defaults = { i18n: { button: "FixedColumns" }, left: 1, right: 0 }),
(e = d),
(i = (A = l).fn.dataTable),
(l.fn.dataTable.FixedColumns = e),
(l.fn.DataTable.FixedColumns = e),
(o = r.Api.register)("fixedColumns()", function () {
return this;
}),
o("fixedColumns().left()", function (t) {
var s = this.context[0];
return t !== F
? (s._fixedColumns.left(t), this)
: s._fixedColumns.left();
}),
o("fixedColumns().right()", function (t) {
var s = this.context[0];
return t !== F
? (s._fixedColumns.right(t), this)
: s._fixedColumns.right();
}),
(r.ext.buttons.fixedColumns = {
action: function (t, s, e, i) {
l(e).attr("active")
? (l(e).removeAttr("active").removeClass("active"),
s.fixedColumns().left(0),
s.fixedColumns().right(0))
: (l(e).attr("active", "true").addClass("active"),
s.fixedColumns().left(i.config.left),
s.fixedColumns().right(i.config.right));
},
config: { left: 1, right: 0 },
init: function (t, s, e) {
t.settings()[0]._fixedColumns === F && h(t.settings(), e),
l(s).attr("active", "true").addClass("active"),
t
.button(s)
.text(
e.text ||
t.i18n(
"buttons.fixedColumns",
t.settings()[0]._fixedColumns.c.i18n.button
)
);
},
text: null,
}),
l(s).on("plugin-init.dt", function (t, s) {
"dt" !== t.namespace ||
(!s.oInit.fixedColumns && !r.defaults.fixedColumns) ||
s._fixedColumns ||
h(s, null);
}),
r
);
});

5690
public/js/cdn/jquery.dataTables.min.js vendored Normal file

File diff suppressed because it is too large Load Diff

239
public/js/vendor.js Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,43 @@
/*!
* @kurkle/color v0.3.4
* https://github.com/kurkle/color#readme
* (c) 2024 Jukka Kurkela
* Released under the MIT License
*/
/*!
* Chart.js v4.5.0
* https://www.chartjs.org
* (c) 2025 Chart.js Contributors
* Released under the MIT License
*/
/*!
* chartjs-plugin-datalabels v2.2.0
* https://chartjs-plugin-datalabels.netlify.app
* (c) 2017-2022 chartjs-plugin-datalabels contributors
* Released under the MIT license
*/
/*!
* jQuery JavaScript Library v3.7.1
* https://jquery.com/
*
* Copyright OpenJS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2023-08-28T13:37Z
*/
/*! DataTables Bootstrap 4 integration
* ©2011-2017 SpryMedia Ltd - datatables.net/license
*/
/*! FixedColumns 4.3.0
* © SpryMedia Ltd - datatables.net/license
*/
/*! FixedColumns 4.3.0
* © SpryMedia Ltd - datatables.net/license
*/

1
public/js/vendor.js.map Normal file

File diff suppressed because one or more lines are too long

14
public/js/vendor/chart.umd.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,4 @@
/*! DataTables Bootstrap 4 integration
* ©2011-2017 SpryMedia Ltd - datatables.net/license
*/
!function(t){var n,o;"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(e){return t(e,window,document)}):"object"==typeof exports?(n=require("jquery"),o=function(e,a){a.fn.dataTable||require("datatables.net")(e,a)},"undefined"==typeof window?module.exports=function(e,a){return e=e||window,a=a||n(e),o(e,a),t(a,0,e.document)}:(o(window,n),module.exports=t(n,window,window.document))):t(jQuery,window,document)}(function(x,e,n,o){"use strict";var r=x.fn.dataTable;return x.extend(!0,r.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",renderer:"bootstrap"}),x.extend(r.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"}),r.ext.renderer.pageButton.bootstrap=function(i,e,d,a,l,c){function u(e,a){for(var t,n,o=function(e){e.preventDefault(),x(e.currentTarget).hasClass("disabled")||m.page()==e.data.action||m.page(e.data.action).draw("page")},r=0,s=a.length;r<s;r++)if(t=a[r],Array.isArray(t))u(e,t);else{switch(f=p="",t){case"ellipsis":p="&#x2026;",f="disabled";break;case"first":p=g.sFirst,f=t+(0<l?"":" disabled");break;case"previous":p=g.sPrevious,f=t+(0<l?"":" disabled");break;case"next":p=g.sNext,f=t+(l<c-1?"":" disabled");break;case"last":p=g.sLast,f=t+(l<c-1?"":" disabled");break;default:p=t+1,f=l===t?"active":""}p&&(n=-1!==f.indexOf("disabled"),n=x("<li>",{class:b.sPageButton+" "+f,id:0===d&&"string"==typeof t?i.sTableId+"_"+t:null}).append(x("<a>",{href:n?null:"#","aria-controls":i.sTableId,"aria-disabled":n?"true":null,"aria-label":w[t],role:"link","aria-current":"active"===f?"page":null,"data-dt-idx":t,tabindex:n?-1:i.iTabIndex,class:"page-link"}).html(p)).appendTo(e),i.oApi._fnBindAction(n,{action:t},o))}}var p,f,t,m=new r.Api(i),b=i.oClasses,g=i.oLanguage.oPaginate,w=i.oLanguage.oAria.paginate||{};try{t=x(e).find(n.activeElement).data("dt-idx")}catch(e){}u(x(e).empty().html('<ul class="pagination"/>').children("ul"),a),t!==o&&x(e).find("[data-dt-idx="+t+"]").trigger("focus")},r});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

5
public/js/vendor/sweetalert2.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,6 @@
{ {
"/js/app.js": "/js/app.js", "/js/app.js": "/js/app.js",
"/js/vendor.js": "/js/vendor.js",
"/js/warehouse_management/product_categories/index.js": "/js/warehouse_management/product_categories/index.js", "/js/warehouse_management/product_categories/index.js": "/js/warehouse_management/product_categories/index.js",
"/js/warehouse_management/products/index.js": "/js/warehouse_management/products/index.js", "/js/warehouse_management/products/index.js": "/js/warehouse_management/products/index.js",
"/js/warehouse_management/opnames/index.js": "/js/warehouse_management/opnames/index.js", "/js/warehouse_management/opnames/index.js": "/js/warehouse_management/opnames/index.js",
@@ -7,5 +8,20 @@
"/js/warehouse_management/opnames/detail.js": "/js/warehouse_management/opnames/detail.js", "/js/warehouse_management/opnames/detail.js": "/js/warehouse_management/opnames/detail.js",
"/js/warehouse_management/mutations/index.js": "/js/warehouse_management/mutations/index.js", "/js/warehouse_management/mutations/index.js": "/js/warehouse_management/mutations/index.js",
"/js/warehouse_management/mutations/create.js": "/js/warehouse_management/mutations/create.js", "/js/warehouse_management/mutations/create.js": "/js/warehouse_management/mutations/create.js",
"/css/app.css": "/css/app.css" "/css/app.css": "/css/app.css",
"/js/vendor/jquery.dataTables.min.js": "/js/vendor/jquery.dataTables.min.js",
"/js/vendor/dataTables.bootstrap4.min.js": "/js/vendor/dataTables.bootstrap4.min.js",
"/js/vendor/dataTables.fixedColumns.min.js": "/js/vendor/dataTables.fixedColumns.min.js",
"/js/vendor/sweetalert2.min.js": "/js/vendor/sweetalert2.min.js",
"/js/vendor/chart.umd.js": "/js/vendor/chart.umd.js",
"/js/vendor/chartjs-plugin-datalabels.min.js": "/js/vendor/chartjs-plugin-datalabels.min.js",
"/css/vendor/dataTables.bootstrap4.min.css": "/css/vendor/dataTables.bootstrap4.min.css",
"/css/vendor/fixedColumns.bootstrap4.min.css": "/css/vendor/fixedColumns.bootstrap4.min.css",
"/css/vendor/sweetalert2.min.css": "/css/vendor/sweetalert2.min.css",
"/js/cdn/dataTables.bootstrap4.min.js": "/js/cdn/dataTables.bootstrap4.min.js",
"/js/cdn/dataTables.fixedColumns.min.js": "/js/cdn/dataTables.fixedColumns.min.js",
"/js/cdn/jquery.dataTables.min.js": "/js/cdn/jquery.dataTables.min.js",
"/css/dataTables.bootstrap4.min.css": "/css/dataTables.bootstrap4.min.css",
"/css/fixedColumns.bootstrap4.min.css": "/css/fixedColumns.bootstrap4.min.css",
"/css/google-font.css": "/css/google-font.css"
} }

View File

@@ -0,0 +1,440 @@
:root {
--dt-row-selected: 2, 117, 216;
--dt-row-selected-text: 255, 255, 255;
--dt-row-selected-link: 9, 10, 11;
--dt-row-stripe: 0, 0, 0;
--dt-row-hover: 0, 0, 0;
--dt-column-ordering: 0, 0, 0;
--dt-html-background: white;
}
:root.dark {
--dt-html-background: rgb(33, 37, 41);
}
table.dataTable td.dt-control {
text-align: center;
cursor: pointer;
}
table.dataTable td.dt-control:before {
display: inline-block;
color: rgba(0, 0, 0, 0.5);
content: "►";
}
table.dataTable tr.dt-hasChild td.dt-control:before {
content: "▼";
}
html.dark table.dataTable td.dt-control:before {
color: rgba(255, 255, 255, 0.5);
}
html.dark table.dataTable tr.dt-hasChild td.dt-control:before {
color: rgba(255, 255, 255, 0.5);
}
table.dataTable thead > tr > th.sorting,
table.dataTable thead > tr > th.sorting_asc,
table.dataTable thead > tr > th.sorting_desc,
table.dataTable thead > tr > th.sorting_asc_disabled,
table.dataTable thead > tr > th.sorting_desc_disabled,
table.dataTable thead > tr > td.sorting,
table.dataTable thead > tr > td.sorting_asc,
table.dataTable thead > tr > td.sorting_desc,
table.dataTable thead > tr > td.sorting_asc_disabled,
table.dataTable thead > tr > td.sorting_desc_disabled {
cursor: pointer;
position: relative;
padding-right: 26px;
}
table.dataTable thead > tr > th.sorting:before,
table.dataTable thead > tr > th.sorting:after,
table.dataTable thead > tr > th.sorting_asc:before,
table.dataTable thead > tr > th.sorting_asc:after,
table.dataTable thead > tr > th.sorting_desc:before,
table.dataTable thead > tr > th.sorting_desc:after,
table.dataTable thead > tr > th.sorting_asc_disabled:before,
table.dataTable thead > tr > th.sorting_asc_disabled:after,
table.dataTable thead > tr > th.sorting_desc_disabled:before,
table.dataTable thead > tr > th.sorting_desc_disabled:after,
table.dataTable thead > tr > td.sorting:before,
table.dataTable thead > tr > td.sorting:after,
table.dataTable thead > tr > td.sorting_asc:before,
table.dataTable thead > tr > td.sorting_asc:after,
table.dataTable thead > tr > td.sorting_desc:before,
table.dataTable thead > tr > td.sorting_desc:after,
table.dataTable thead > tr > td.sorting_asc_disabled:before,
table.dataTable thead > tr > td.sorting_asc_disabled:after,
table.dataTable thead > tr > td.sorting_desc_disabled:before,
table.dataTable thead > tr > td.sorting_desc_disabled:after {
position: absolute;
display: block;
opacity: 0.125;
right: 10px;
line-height: 9px;
font-size: 0.8em;
}
table.dataTable thead > tr > th.sorting:before,
table.dataTable thead > tr > th.sorting_asc:before,
table.dataTable thead > tr > th.sorting_desc:before,
table.dataTable thead > tr > th.sorting_asc_disabled:before,
table.dataTable thead > tr > th.sorting_desc_disabled:before,
table.dataTable thead > tr > td.sorting:before,
table.dataTable thead > tr > td.sorting_asc:before,
table.dataTable thead > tr > td.sorting_desc:before,
table.dataTable thead > tr > td.sorting_asc_disabled:before,
table.dataTable thead > tr > td.sorting_desc_disabled:before {
bottom: 50%;
content: "▲";
content: "▲"/"";
}
table.dataTable thead > tr > th.sorting:after,
table.dataTable thead > tr > th.sorting_asc:after,
table.dataTable thead > tr > th.sorting_desc:after,
table.dataTable thead > tr > th.sorting_asc_disabled:after,
table.dataTable thead > tr > th.sorting_desc_disabled:after,
table.dataTable thead > tr > td.sorting:after,
table.dataTable thead > tr > td.sorting_asc:after,
table.dataTable thead > tr > td.sorting_desc:after,
table.dataTable thead > tr > td.sorting_asc_disabled:after,
table.dataTable thead > tr > td.sorting_desc_disabled:after {
top: 50%;
content: "▼";
content: "▼"/"";
}
table.dataTable thead > tr > th.sorting_asc:before,
table.dataTable thead > tr > th.sorting_desc:after,
table.dataTable thead > tr > td.sorting_asc:before,
table.dataTable thead > tr > td.sorting_desc:after {
opacity: 0.6;
}
table.dataTable thead > tr > th.sorting_desc_disabled:after,
table.dataTable thead > tr > th.sorting_asc_disabled:before,
table.dataTable thead > tr > td.sorting_desc_disabled:after,
table.dataTable thead > tr > td.sorting_asc_disabled:before {
display: none;
}
table.dataTable thead > tr > th:active,
table.dataTable thead > tr > td:active {
outline: none;
}
div.dataTables_scrollBody > table.dataTable > thead > tr > th:before,
div.dataTables_scrollBody > table.dataTable > thead > tr > th:after,
div.dataTables_scrollBody > table.dataTable > thead > tr > td:before,
div.dataTables_scrollBody > table.dataTable > thead > tr > td:after {
display: none;
}
div.dataTables_processing {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
margin-left: -100px;
margin-top: -26px;
text-align: center;
padding: 2px;
}
div.dataTables_processing > div:last-child {
position: relative;
width: 80px;
height: 15px;
margin: 1em auto;
}
div.dataTables_processing > div:last-child > div {
position: absolute;
top: 0;
width: 13px;
height: 13px;
border-radius: 50%;
background: rgb(2, 117, 216);
background: rgb(var(--dt-row-selected));
animation-timing-function: cubic-bezier(0, 1, 1, 0);
}
div.dataTables_processing > div:last-child > div:nth-child(1) {
left: 8px;
animation: datatables-loader-1 0.6s infinite;
}
div.dataTables_processing > div:last-child > div:nth-child(2) {
left: 8px;
animation: datatables-loader-2 0.6s infinite;
}
div.dataTables_processing > div:last-child > div:nth-child(3) {
left: 32px;
animation: datatables-loader-2 0.6s infinite;
}
div.dataTables_processing > div:last-child > div:nth-child(4) {
left: 56px;
animation: datatables-loader-3 0.6s infinite;
}
@keyframes datatables-loader-1 {
0% {
transform: scale(0);
}
100% {
transform: scale(1);
}
}
@keyframes datatables-loader-3 {
0% {
transform: scale(1);
}
100% {
transform: scale(0);
}
}
@keyframes datatables-loader-2 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(24px, 0);
}
}
table.dataTable.nowrap th,
table.dataTable.nowrap td {
white-space: nowrap;
}
table.dataTable th.dt-left,
table.dataTable td.dt-left {
text-align: left;
}
table.dataTable th.dt-center,
table.dataTable td.dt-center,
table.dataTable td.dataTables_empty {
text-align: center;
}
table.dataTable th.dt-right,
table.dataTable td.dt-right {
text-align: right;
}
table.dataTable th.dt-justify,
table.dataTable td.dt-justify {
text-align: justify;
}
table.dataTable th.dt-nowrap,
table.dataTable td.dt-nowrap {
white-space: nowrap;
}
table.dataTable thead th,
table.dataTable thead td,
table.dataTable tfoot th,
table.dataTable tfoot td {
text-align: left;
}
table.dataTable thead th.dt-head-left,
table.dataTable thead td.dt-head-left,
table.dataTable tfoot th.dt-head-left,
table.dataTable tfoot td.dt-head-left {
text-align: left;
}
table.dataTable thead th.dt-head-center,
table.dataTable thead td.dt-head-center,
table.dataTable tfoot th.dt-head-center,
table.dataTable tfoot td.dt-head-center {
text-align: center;
}
table.dataTable thead th.dt-head-right,
table.dataTable thead td.dt-head-right,
table.dataTable tfoot th.dt-head-right,
table.dataTable tfoot td.dt-head-right {
text-align: right;
}
table.dataTable thead th.dt-head-justify,
table.dataTable thead td.dt-head-justify,
table.dataTable tfoot th.dt-head-justify,
table.dataTable tfoot td.dt-head-justify {
text-align: justify;
}
table.dataTable thead th.dt-head-nowrap,
table.dataTable thead td.dt-head-nowrap,
table.dataTable tfoot th.dt-head-nowrap,
table.dataTable tfoot td.dt-head-nowrap {
white-space: nowrap;
}
table.dataTable tbody th.dt-body-left,
table.dataTable tbody td.dt-body-left {
text-align: left;
}
table.dataTable tbody th.dt-body-center,
table.dataTable tbody td.dt-body-center {
text-align: center;
}
table.dataTable tbody th.dt-body-right,
table.dataTable tbody td.dt-body-right {
text-align: right;
}
table.dataTable tbody th.dt-body-justify,
table.dataTable tbody td.dt-body-justify {
text-align: justify;
}
table.dataTable tbody th.dt-body-nowrap,
table.dataTable tbody td.dt-body-nowrap {
white-space: nowrap;
}
table.dataTable {
clear: both;
margin-top: 6px !important;
margin-bottom: 6px !important;
max-width: none !important;
border-collapse: separate !important;
border-spacing: 0;
}
table.dataTable td,
table.dataTable th {
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
table.dataTable td.dataTables_empty,
table.dataTable th.dataTables_empty {
text-align: center;
}
table.dataTable.nowrap th,
table.dataTable.nowrap td {
white-space: nowrap;
}
table.dataTable.table-striped > tbody > tr:nth-of-type(2n + 1) {
background-color: transparent;
}
table.dataTable > tbody > tr {
background-color: transparent;
}
table.dataTable > tbody > tr.selected > * {
box-shadow: inset 0 0 0 9999px rgb(2, 117, 216);
box-shadow: inset 0 0 0 9999px rgb(var(--dt-row-selected));
color: rgb(255, 255, 255);
color: rgb(var(--dt-row-selected-text));
}
table.dataTable > tbody > tr.selected a {
color: rgb(9, 10, 11);
color: rgb(var(--dt-row-selected-link));
}
table.dataTable.table-striped > tbody > tr.odd > * {
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.05);
}
table.dataTable.table-striped > tbody > tr.odd.selected > * {
box-shadow: inset 0 0 0 9999px rgba(2, 117, 216, 0.95);
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.95);
}
table.dataTable.table-hover > tbody > tr:hover > * {
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.075);
}
table.dataTable.table-hover > tbody > tr.selected:hover > * {
box-shadow: inset 0 0 0 9999px rgba(2, 117, 216, 0.975);
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.975);
}
div.dataTables_wrapper div.dataTables_length label {
font-weight: normal;
text-align: left;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_length select {
width: auto;
display: inline-block;
}
div.dataTables_wrapper div.dataTables_filter {
text-align: right;
}
div.dataTables_wrapper div.dataTables_filter label {
font-weight: normal;
white-space: nowrap;
text-align: left;
}
div.dataTables_wrapper div.dataTables_filter input {
margin-left: 0.5em;
display: inline-block;
width: auto;
}
div.dataTables_wrapper div.dataTables_info {
padding-top: 0.85em;
}
div.dataTables_wrapper div.dataTables_paginate {
margin: 0;
white-space: nowrap;
text-align: right;
}
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
margin: 2px 0;
white-space: nowrap;
justify-content: flex-end;
}
div.dataTables_wrapper div.dataTables_processing {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
margin-left: -100px;
margin-top: -26px;
text-align: center;
padding: 1em 0;
}
div.dataTables_scrollHead table.dataTable {
margin-bottom: 0 !important;
}
div.dataTables_scrollBody > table {
border-top: none;
margin-top: 0 !important;
margin-bottom: 0 !important;
}
div.dataTables_scrollBody > table > thead .sorting:before,
div.dataTables_scrollBody > table > thead .sorting_asc:before,
div.dataTables_scrollBody > table > thead .sorting_desc:before,
div.dataTables_scrollBody > table > thead .sorting:after,
div.dataTables_scrollBody > table > thead .sorting_asc:after,
div.dataTables_scrollBody > table > thead .sorting_desc:after {
display: none;
}
div.dataTables_scrollBody > table > tbody tr:first-child th,
div.dataTables_scrollBody > table > tbody tr:first-child td {
border-top: none;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner {
box-sizing: content-box;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner > table {
margin-top: 0 !important;
border-top: none;
}
@media screen and (max-width: 767px) {
div.dataTables_wrapper div.dataTables_length,
div.dataTables_wrapper div.dataTables_filter,
div.dataTables_wrapper div.dataTables_info,
div.dataTables_wrapper div.dataTables_paginate {
text-align: center;
}
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
justify-content: center !important;
}
}
table.dataTable.table-sm > thead > tr > th:not(.sorting_disabled) {
padding-right: 20px;
}
table.table-bordered.dataTable {
border-right-width: 0;
}
table.table-bordered.dataTable th,
table.table-bordered.dataTable td {
border-left-width: 0;
}
table.table-bordered.dataTable th:last-child,
table.table-bordered.dataTable th:last-child,
table.table-bordered.dataTable td:last-child,
table.table-bordered.dataTable td:last-child {
border-right-width: 1px;
}
table.table-bordered.dataTable tbody th,
table.table-bordered.dataTable tbody td {
border-bottom-width: 0;
}
div.dataTables_scrollHead table.table-bordered {
border-bottom-width: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row {
margin: 0;
}
div.table-responsive
> div.dataTables_wrapper
> div.row
> div[class^="col-"]:first-child {
padding-left: 0;
}
div.table-responsive
> div.dataTables_wrapper
> div.row
> div[class^="col-"]:last-child {
padding-right: 0;
}

View File

@@ -0,0 +1,36 @@
table.dataTable thead tr > .dtfc-fixed-left,
table.dataTable thead tr > .dtfc-fixed-right,
table.dataTable tfoot tr > .dtfc-fixed-left,
table.dataTable tfoot tr > .dtfc-fixed-right {
top: 0;
bottom: 0;
z-index: 3;
background-color: white;
}
table.dataTable tbody tr > .dtfc-fixed-left,
table.dataTable tbody tr > .dtfc-fixed-right {
z-index: 1;
background-color: white;
}
div.dtfc-left-top-blocker,
div.dtfc-right-top-blocker {
background-color: white;
}
div.dtfc-right-top-blocker,
div.dtfc-left-top-blocker {
margin-top: 6px;
border-bottom: 0px solid #ddd !important;
}
table.dataTable.table-bordered.dtfc-has-left {
border-left: none;
}
div.dataTables_scroll.dtfc-has-left table.table-bordered {
border-left: none;
}
div.dataTables_scrollBody {
border-left: 1px solid #ddd !important;
}
div.dataTables_scrollFootInner table.table-bordered tr th:first-child,
div.dataTables_scrollHeadInner table.table-bordered tr th:first-child {
border-left: 1px solid #ddd !important;
}

View File

@@ -0,0 +1,835 @@
/* devanagari */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 300;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLDz8Z11lFc-K.woff2)
format("woff2");
unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0,
U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;
}
/* latin-ext */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 300;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLDz8Z1JlFc-K.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 300;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLDz8Z1xlFQ.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* devanagari */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJbecmNE.woff2)
format("woff2");
unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0,
U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;
}
/* latin-ext */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJnecmNE.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 400;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiEyp8kv8JHgFVrJJfecg.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* devanagari */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 500;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLGT9Z11lFc-K.woff2)
format("woff2");
unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0,
U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;
}
/* latin-ext */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 500;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLGT9Z1JlFc-K.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 500;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLGT9Z1xlFQ.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* devanagari */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 600;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLEj6Z11lFc-K.woff2)
format("woff2");
unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0,
U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;
}
/* latin-ext */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 600;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLEj6Z1JlFc-K.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 600;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLEj6Z1xlFQ.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* devanagari */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 700;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLCz7Z11lFc-K.woff2)
format("woff2");
unicode-range: U+0900-097F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0,
U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09;
}
/* latin-ext */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 700;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLCz7Z1JlFc-K.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Poppins";
font-style: normal;
font-weight: 700;
src: url(https://fonts.gstatic.com/s/poppins/v23/pxiByp8kv8JHgFVrLCz7Z1xlFQ.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2)
format("woff2");
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F,
U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2)
format("woff2");
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2)
format("woff2");
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2)
format("woff2");
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1,
U+03A3-03FF;
}
/* math */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2)
format("woff2");
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315,
U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A,
U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1,
U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C,
U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E,
U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115,
U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5,
U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310,
U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0,
U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA,
U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11,
U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF,
U+1EE00-1EEFF;
}
/* symbols */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2)
format("woff2");
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0,
U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF,
U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F,
U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981,
U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E,
U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E,
U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD,
U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C,
U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8,
U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0,
U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F,
U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E,
U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB,
U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6,
U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503,
U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA,
U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698,
U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7,
U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF,
U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887,
U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B,
U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C,
U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9,
U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2)
format("woff2");
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169,
U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323,
U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 300;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2)
format("woff2");
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F,
U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2)
format("woff2");
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2)
format("woff2");
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2)
format("woff2");
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1,
U+03A3-03FF;
}
/* math */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2)
format("woff2");
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315,
U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A,
U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1,
U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C,
U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E,
U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115,
U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5,
U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310,
U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0,
U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA,
U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11,
U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF,
U+1EE00-1EEFF;
}
/* symbols */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2)
format("woff2");
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0,
U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF,
U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F,
U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981,
U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E,
U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E,
U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD,
U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C,
U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8,
U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0,
U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F,
U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E,
U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB,
U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6,
U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503,
U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA,
U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698,
U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7,
U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF,
U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887,
U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B,
U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C,
U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9,
U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2)
format("woff2");
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169,
U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323,
U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 400;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2)
format("woff2");
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F,
U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2)
format("woff2");
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2)
format("woff2");
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2)
format("woff2");
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1,
U+03A3-03FF;
}
/* math */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2)
format("woff2");
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315,
U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A,
U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1,
U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C,
U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E,
U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115,
U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5,
U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310,
U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0,
U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA,
U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11,
U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF,
U+1EE00-1EEFF;
}
/* symbols */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2)
format("woff2");
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0,
U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF,
U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F,
U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981,
U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E,
U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E,
U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD,
U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C,
U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8,
U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0,
U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F,
U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E,
U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB,
U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6,
U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503,
U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA,
U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698,
U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7,
U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF,
U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887,
U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B,
U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C,
U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9,
U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2)
format("woff2");
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169,
U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323,
U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 500;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2)
format("woff2");
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F,
U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2)
format("woff2");
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2)
format("woff2");
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2)
format("woff2");
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1,
U+03A3-03FF;
}
/* math */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2)
format("woff2");
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315,
U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A,
U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1,
U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C,
U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E,
U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115,
U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5,
U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310,
U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0,
U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA,
U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11,
U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF,
U+1EE00-1EEFF;
}
/* symbols */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2)
format("woff2");
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0,
U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF,
U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F,
U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981,
U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E,
U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E,
U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD,
U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C,
U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8,
U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0,
U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F,
U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E,
U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB,
U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6,
U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503,
U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA,
U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698,
U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7,
U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF,
U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887,
U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B,
U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C,
U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9,
U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2)
format("woff2");
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169,
U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323,
U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 600;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2)
format("woff2");
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F,
U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2)
format("woff2");
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2)
format("woff2");
unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2)
format("woff2");
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1,
U+03A3-03FF;
}
/* math */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2)
format("woff2");
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315,
U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A,
U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1,
U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C,
U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E,
U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115,
U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5,
U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310,
U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0,
U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA,
U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11,
U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF,
U+1EE00-1EEFF;
}
/* symbols */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2)
format("woff2");
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0,
U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF,
U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F,
U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981,
U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E,
U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E,
U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD,
U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C,
U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8,
U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0,
U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F,
U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E,
U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB,
U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6,
U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503,
U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA,
U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698,
U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7,
U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF,
U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887,
U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B,
U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C,
U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9,
U+1FAF0-1FAF8, U+1FB00-1FBFF;
}
/* vietnamese */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2)
format("woff2");
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169,
U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323,
U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2)
format("woff2");
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
U+A720-A7FF;
}
/* latin */
@font-face {
font-family: "Roboto";
font-style: normal;
font-weight: 700;
font-stretch: 100%;
src: url(https://fonts.gstatic.com/s/roboto/v48/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2)
format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

View File

@@ -0,0 +1,129 @@
/*! DataTables Bootstrap 4 integration
* ©2011-2017 SpryMedia Ltd - datatables.net/license
*/
!(function (t) {
var n, o;
"function" == typeof define && define.amd
? define(["jquery", "datatables.net"], function (e) {
return t(e, window, document);
})
: "object" == typeof exports
? ((n = require("jquery")),
(o = function (e, a) {
a.fn.dataTable || require("datatables.net")(e, a);
}),
"undefined" == typeof window
? (module.exports = function (e, a) {
return (
(e = e || window),
(a = a || n(e)),
o(e, a),
t(a, 0, e.document)
);
})
: (o(window, n),
(module.exports = t(n, window, window.document))))
: t(jQuery, window, document);
})(function (x, e, n, o) {
"use strict";
var r = x.fn.dataTable;
return (
x.extend(!0, r.defaults, {
dom: "<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
renderer: "bootstrap",
}),
x.extend(r.ext.classes, {
sWrapper: "dataTables_wrapper dt-bootstrap4",
sFilterInput: "form-control form-control-sm",
sLengthSelect:
"custom-select custom-select-sm form-control form-control-sm",
sProcessing: "dataTables_processing card",
sPageButton: "paginate_button page-item",
}),
(r.ext.renderer.pageButton.bootstrap = function (i, e, d, a, l, c) {
function u(e, a) {
for (
var t,
n,
o = function (e) {
e.preventDefault(),
x(e.currentTarget).hasClass("disabled") ||
m.page() == e.data.action ||
m.page(e.data.action).draw("page");
},
r = 0,
s = a.length;
r < s;
r++
)
if (((t = a[r]), Array.isArray(t))) u(e, t);
else {
switch (((f = p = ""), t)) {
case "ellipsis":
(p = "&#x2026;"), (f = "disabled");
break;
case "first":
(p = g.sFirst),
(f = t + (0 < l ? "" : " disabled"));
break;
case "previous":
(p = g.sPrevious),
(f = t + (0 < l ? "" : " disabled"));
break;
case "next":
(p = g.sNext),
(f = t + (l < c - 1 ? "" : " disabled"));
break;
case "last":
(p = g.sLast),
(f = t + (l < c - 1 ? "" : " disabled"));
break;
default:
(p = t + 1), (f = l === t ? "active" : "");
}
p &&
((n = -1 !== f.indexOf("disabled")),
(n = x("<li>", {
class: b.sPageButton + " " + f,
id:
0 === d && "string" == typeof t
? i.sTableId + "_" + t
: null,
})
.append(
x("<a>", {
href: n ? null : "#",
"aria-controls": i.sTableId,
"aria-disabled": n ? "true" : null,
"aria-label": w[t],
role: "link",
"aria-current":
"active" === f ? "page" : null,
"data-dt-idx": t,
tabindex: n ? -1 : i.iTabIndex,
class: "page-link",
}).html(p)
)
.appendTo(e)),
i.oApi._fnBindAction(n, { action: t }, o));
}
}
var p,
f,
t,
m = new r.Api(i),
b = i.oClasses,
g = i.oLanguage.oPaginate,
w = i.oLanguage.oAria.paginate || {};
try {
t = x(e).find(n.activeElement).data("dt-idx");
} catch (e) {}
u(x(e).empty().html('<ul class="pagination"/>').children("ul"), a),
t !== o &&
x(e)
.find("[data-dt-idx=" + t + "]")
.trigger("focus");
}),
r
);
});

View File

@@ -0,0 +1,415 @@
/*! FixedColumns 4.2.2
* © SpryMedia Ltd - datatables.net/license
*/
!(function (e) {
var i, l;
"function" == typeof define && define.amd
? define(["jquery", "datatables.net"], function (t) {
return e(t, window, document);
})
: "object" == typeof exports
? ((i = require("jquery")),
(l = function (t, s) {
s.fn.dataTable || require("datatables.net")(t, s);
}),
"undefined" != typeof window
? (module.exports = function (t, s) {
return (
(t = t || window),
(s = s || i(t)),
l(t, s),
e(s, 0, t.document)
);
})
: (l(window, i),
(module.exports = e(i, window, window.document))))
: e(jQuery, window, document);
})(function (l, t, s, F) {
"use strict";
var A,
i,
e,
o,
r = l.fn.dataTable;
function d(t, s) {
var e = this;
if (i && i.versionCheck && i.versionCheck("1.10.0"))
return (
(t = new i.Api(t)),
(this.classes = A.extend(!0, {}, d.classes)),
(this.c = A.extend(!0, {}, d.defaults, s)),
(s && s.left !== F) ||
this.c.leftColumns === F ||
(this.c.left = this.c.leftColumns),
(s && s.right !== F) ||
this.c.rightColumns === F ||
(this.c.right = this.c.rightColumns),
(this.s = {
barWidth: 0,
dt: t,
rtl: "rtl" === A("body").css("direction"),
}),
(s = {
bottom: "0px",
display: "block",
position: "absolute",
width: this.s.barWidth + 1 + "px",
}),
(this.dom = {
leftBottomBlocker: A("<div>")
.css(s)
.css("left", 0)
.addClass(this.classes.leftBottomBlocker),
leftTopBlocker: A("<div>")
.css(s)
.css({ left: 0, top: 0 })
.addClass(this.classes.leftTopBlocker),
rightBottomBlocker: A("<div>")
.css(s)
.css("right", 0)
.addClass(this.classes.rightBottomBlocker),
rightTopBlocker: A("<div>")
.css(s)
.css({ right: 0, top: 0 })
.addClass(this.classes.rightTopBlocker),
}),
this.s.dt.settings()[0]._bInitComplete
? (this._addStyles(), this._setKeyTableListener())
: t.one("init.dt", function () {
e._addStyles(), e._setKeyTableListener();
}),
t.on("column-sizing.dt", function () {
return e._addStyles();
}),
(t.settings()[0]._fixedColumns = this)
);
throw new Error("StateRestore requires DataTables 1.10 or newer");
}
function h(t, s) {
void 0 === s && (s = null);
(t = new r.Api(t)),
(s = s || t.init().fixedColumns || r.defaults.fixedColumns);
new e(t, s);
}
return (
(d.prototype.left = function (t) {
return (
t !== F && ((this.c.left = t), this._addStyles()), this.c.left
);
}),
(d.prototype.right = function (t) {
return (
t !== F && ((this.c.right = t), this._addStyles()), this.c.right
);
}),
(d.prototype._addStyles = function () {
this.s.dt.settings()[0].oScroll.sY &&
((s = A(this.s.dt.table().node()).closest(
"div.dataTables_scrollBody"
)[0]),
(e = this.s.dt.settings()[0].oBrowser.barWidth),
s.offsetWidth - s.clientWidth >= e
? (this.s.barWidth = e)
: (this.s.barWidth = 0),
this.dom.rightTopBlocker.css("width", this.s.barWidth + 1),
this.dom.leftTopBlocker.css("width", this.s.barWidth + 1),
this.dom.rightBottomBlocker.css("width", this.s.barWidth + 1),
this.dom.leftBottomBlocker.css("width", this.s.barWidth + 1));
for (
var t = null,
s = this.s.dt.column(0).header(),
e = null,
i =
(null !== s &&
((e = (s = A(s)).outerHeight() + 1),
(t = A(s.closest("div.dataTables_scroll")).css(
"position",
"relative"
))),
this.s.dt.column(0).footer()),
l = null,
o =
(null !== i &&
((l = (i = A(i)).outerHeight()), null === t) &&
(t = A(i.closest("div.dataTables_scroll")).css(
"position",
"relative"
)),
this.s.dt.columns().data().toArray().length),
r = 0,
d = 0,
h = A(this.s.dt.table().node())
.children("tbody")
.children("tr"),
n = 0,
a = new Map(),
c = 0;
c < o;
c++
) {
var f = this.s.dt.column(c);
if ((0 < c && a.set(c - 1, n), f.visible())) {
var u = A(f.header()),
g = A(f.footer());
if (c - n < this.c.left) {
if (
(A(this.s.dt.table().node()).addClass(
this.classes.tableFixedLeft
),
t.addClass(this.classes.tableFixedLeft),
0 < c - n)
)
for (var C = c; C + 1 < o; ) {
if (
(y = this.s.dt.column(C - 1, {
page: "current",
})).visible()
) {
(r += A(y.nodes()[0]).outerWidth()),
(d +=
y.header() || y.footer()
? A(y.header()).outerWidth()
: 0);
break;
}
C--;
}
for (var m = 0, p = h; m < p.length; m++) {
var x = p[m];
A(A(x).children()[c - n])
.css(this._getCellCSS(!1, r, "left"))
.addClass(this.classes.fixedLeft);
}
u
.css(this._getCellCSS(!0, d, "left"))
.addClass(this.classes.fixedLeft),
g
.css(this._getCellCSS(!0, d, "left"))
.addClass(this.classes.fixedLeft);
} else {
for (var b = 0, v = h; b < v.length; b++) {
x = v[b];
(R = A(A(x).children()[c - n])).hasClass(
this.classes.fixedLeft
) &&
R.css(this._clearCellCSS("left")).removeClass(
this.classes.fixedLeft
);
}
u.hasClass(this.classes.fixedLeft) &&
u
.css(this._clearCellCSS("left"))
.removeClass(this.classes.fixedLeft),
g.hasClass(this.classes.fixedLeft) &&
g
.css(this._clearCellCSS("left"))
.removeClass(this.classes.fixedLeft);
}
} else n++;
}
for (var B = 0, S = 0, _ = 0, c = o - 1; 0 <= c; c--)
if ((f = this.s.dt.column(c)).visible()) {
var u = A(f.header()),
g = A(f.footer()),
k = a.get(c);
if ((k === F && (k = n), c + _ >= o - this.c.right)) {
if (
(A(this.s.dt.table().node()).addClass(
this.classes.tableFixedRight
),
t.addClass(this.classes.tableFixedRight),
c + 1 + _ < o)
)
for (var y, C = c; C + 1 < o; ) {
if (
(y = this.s.dt.column(C + 1, {
page: "current",
})).visible()
) {
(B += A(y.nodes()[0]).outerWidth()),
(S +=
y.header() || y.footer()
? A(y.header()).outerWidth()
: 0);
break;
}
C++;
}
for (var w = 0, T = h; w < T.length; w++) {
x = T[w];
A(A(x).children()[c - k])
.css(this._getCellCSS(!1, B, "right"))
.addClass(this.classes.fixedRight);
}
u
.css(this._getCellCSS(!0, S, "right"))
.addClass(this.classes.fixedRight),
g
.css(this._getCellCSS(!0, S, "right"))
.addClass(this.classes.fixedRight);
} else {
for (var L = 0, W = h; L < W.length; L++) {
var R,
x = W[L];
(R = A(A(x).children()[c - k])).hasClass(
this.classes.fixedRight
) &&
R.css(this._clearCellCSS("right")).removeClass(
this.classes.fixedRight
);
}
u.hasClass(this.classes.fixedRight) &&
u
.css(this._clearCellCSS("right"))
.removeClass(this.classes.fixedRight),
g.hasClass(this.classes.fixedRight) &&
g
.css(this._clearCellCSS("right"))
.removeClass(this.classes.fixedRight);
}
} else _++;
s &&
(this.s.rtl
? (this.dom.leftTopBlocker.outerHeight(e),
t.append(this.dom.leftTopBlocker))
: (this.dom.rightTopBlocker.outerHeight(e),
t.append(this.dom.rightTopBlocker))),
i &&
(this.s.rtl
? (this.dom.leftBottomBlocker.outerHeight(l),
t.append(this.dom.leftBottomBlocker))
: (this.dom.rightBottomBlocker.outerHeight(l),
t.append(this.dom.rightBottomBlocker)));
}),
(d.prototype._getCellCSS = function (t, s, e) {
return "left" === e
? this.s.rtl
? { position: "sticky", right: s + "px" }
: { left: s + "px", position: "sticky" }
: this.s.rtl
? {
left: s + (t ? this.s.barWidth : 0) + "px",
position: "sticky",
}
: {
position: "sticky",
right: s + (t ? this.s.barWidth : 0) + "px",
};
}),
(d.prototype._clearCellCSS = function (t) {
return "left" === t
? this.s.rtl
? { position: "", right: "" }
: { left: "", position: "" }
: this.s.rtl
? { left: "", position: "" }
: { position: "", right: "" };
}),
(d.prototype._setKeyTableListener = function () {
var h = this;
this.s.dt.on("key-focus", function (t, s, e) {
var i,
l,
o,
r = A(e.node()).offset(),
d = A(
A(h.s.dt.table().node()).closest(
"div.dataTables_scrollBody"
)
);
0 < h.c.left &&
((i = (l = A(
h.s.dt.column(h.c.left - 1).header()
)).offset()),
(l = l.outerWidth()),
r.left < i.left + l) &&
((o = d.scrollLeft()),
d.scrollLeft(o - (i.left + l - r.left))),
0 < h.c.right &&
((i = h.s.dt.columns().data().toArray().length),
(l = A(e.node()).outerWidth()),
(e = A(h.s.dt.column(i - h.c.right).header()).offset()),
r.left + l > e.left) &&
((o = d.scrollLeft()),
d.scrollLeft(o - (e.left - (r.left + l))));
}),
this.s.dt.on("draw", function () {
h._addStyles();
}),
this.s.dt.on("column-reorder", function () {
h._addStyles();
}),
this.s.dt.on("column-visibility", function (t, s, e, i, l) {
l &&
!s.bDestroying &&
setTimeout(function () {
h._addStyles();
}, 50);
});
}),
(d.version = "4.2.2"),
(d.classes = {
fixedLeft: "dtfc-fixed-left",
fixedRight: "dtfc-fixed-right",
leftBottomBlocker: "dtfc-left-bottom-blocker",
leftTopBlocker: "dtfc-left-top-blocker",
rightBottomBlocker: "dtfc-right-bottom-blocker",
rightTopBlocker: "dtfc-right-top-blocker",
tableFixedLeft: "dtfc-has-left",
tableFixedRight: "dtfc-has-right",
}),
(d.defaults = { i18n: { button: "FixedColumns" }, left: 1, right: 0 }),
(e = d),
(i = (A = l).fn.dataTable),
(l.fn.dataTable.FixedColumns = e),
(l.fn.DataTable.FixedColumns = e),
(o = r.Api.register)("fixedColumns()", function () {
return this;
}),
o("fixedColumns().left()", function (t) {
var s = this.context[0];
return t !== F
? (s._fixedColumns.left(t), this)
: s._fixedColumns.left();
}),
o("fixedColumns().right()", function (t) {
var s = this.context[0];
return t !== F
? (s._fixedColumns.right(t), this)
: s._fixedColumns.right();
}),
(r.ext.buttons.fixedColumns = {
action: function (t, s, e, i) {
l(e).attr("active")
? (l(e).removeAttr("active").removeClass("active"),
s.fixedColumns().left(0),
s.fixedColumns().right(0))
: (l(e).attr("active", "true").addClass("active"),
s.fixedColumns().left(i.config.left),
s.fixedColumns().right(i.config.right));
},
config: { left: 1, right: 0 },
init: function (t, s, e) {
t.settings()[0]._fixedColumns === F && h(t.settings(), e),
l(s).attr("active", "true").addClass("active"),
t
.button(s)
.text(
e.text ||
t.i18n(
"buttons.fixedColumns",
t.settings()[0]._fixedColumns.c.i18n.button
)
);
},
text: null,
}),
l(s).on("plugin-init.dt", function (t, s) {
"dt" !== t.namespace ||
(!s.oInit.fixedColumns && !r.defaults.fixedColumns) ||
s._fixedColumns ||
h(s, null);
}),
r
);
});

5690
resources/js/cdn/jquery.dataTables.min.js vendored Normal file

File diff suppressed because it is too large Load Diff

16
resources/js/vendor.js Normal file
View File

@@ -0,0 +1,16 @@
// Import vendor libraries
import "datatables.net";
import "datatables.net-bs4";
import "datatables.net-fixedcolumns";
import "datatables.net-fixedcolumns-bs4";
import Swal from "sweetalert2";
import Chart from "chart.js/auto";
import ChartDataLabels from "chartjs-plugin-datalabels";
// Make libraries globally available
window.Swal = Swal;
window.Chart = Chart;
window.ChartDataLabels = ChartDataLabels;
// Register Chart.js plugin
Chart.register(ChartDataLabels);

View File

@@ -1,74 +1,96 @@
$(document).ready(function () { $(document).ready(function () {
console.log("Mutations index.js loaded");
// Check if DataTables is available
if (typeof $.fn.DataTable === "undefined") {
console.error("DataTables not available!");
return;
}
// Destroy existing table if any
if ($.fn.DataTable.isDataTable("#mutations-table")) {
$("#mutations-table").DataTable().destroy();
}
// Initialize DataTable // Initialize DataTable
var table = $("#mutations-table").DataTable({ var table = $("#mutations-table").DataTable({
processing: true, processing: true,
serverSide: true, serverSide: true,
destroy: true,
ajax: { ajax: {
url: $("#mutations-table").data("url"), url: $("#mutations-table").data("url"),
type: "GET", type: "GET",
error: function (xhr, error, code) {
console.error("DataTables AJAX error:", error, code);
}, },
columns: [ },
columnDefs: [
{ {
data: "DT_RowIndex", targets: 0, // No. column
name: "DT_RowIndex",
orderable: false, orderable: false,
searchable: false, searchable: false,
width: "5%", width: "5%",
}, },
{ {
data: "mutation_number", targets: [1, 2, 3, 4, 5, 6, 7], // All sortable columns
name: "mutation_number", orderable: true,
width: "12%", searchable: true,
}, },
{ {
data: "created_at", targets: 8, // Action column
name: "created_at",
width: "12%",
},
{
data: "from_dealer",
name: "fromDealer.name",
width: "13%",
},
{
data: "to_dealer",
name: "toDealer.name",
width: "13%",
},
{
data: "requested_by",
name: "requestedBy.name",
width: "12%",
},
{
data: "total_items",
name: "total_items",
width: "8%",
className: "text-center",
},
{
data: "status",
name: "status",
width: "12%",
className: "text-center",
},
{
data: "action",
name: "action",
orderable: false, orderable: false,
searchable: false, searchable: false,
width: "20%", width: "20%",
className: "text-center", className: "text-center",
}, },
{
targets: [6, 7], // Total Items and Status columns
className: "text-center",
},
], ],
order: [[2, "desc"]], // Order by created_at desc columns: [
{
data: "DT_RowIndex",
name: "DT_RowIndex",
},
{
data: "mutation_number",
name: "mutation_number",
},
{
data: "created_at",
name: "created_at",
},
{
data: "from_dealer",
name: "fromDealer.name",
},
{
data: "to_dealer",
name: "toDealer.name",
},
{
data: "requested_by",
name: "requestedBy.name",
},
{
data: "total_items",
name: "total_items",
},
{
data: "status",
name: "status",
},
{
data: "action",
name: "action",
},
],
order: [[1, "desc"]], // Order by mutation_number desc (which follows ID order)
pageLength: 10, pageLength: 10,
responsive: true, responsive: true,
}); });
// Modal event handlers are now handled by Bootstrap 5 data attributes
// No need for manual modal show/hide handlers
// Handle Cancel Button Click with SweetAlert // Handle Cancel Button Click with SweetAlert
$(document).on("click", ".btn-cancel", function () { $(document).on("click", ".btn-cancel", function () {
var mutationId = $(this).data("id"); var mutationId = $(this).data("id");

View File

@@ -3,26 +3,119 @@ $.ajaxSetup({
"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"), "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
}, },
}); });
let tableContainer = $("#products-table");
let url = tableContainer.data("url"); // Wait for DataTables to be available
let table = $("#products-table").DataTable({ function initializeDataTable() {
// Debug: Check if DataTables is loaded
console.log("DataTables available:", typeof $.fn.DataTable !== "undefined");
console.log("jQuery version:", $.fn.jquery);
if (typeof $.fn.DataTable === "undefined") {
console.error("DataTables is not loaded! Retrying in 1 second...");
setTimeout(initializeDataTable, 1000);
return;
}
let tableContainer = $("#products-table");
let url = tableContainer.data("url");
console.log("Table URL:", url);
console.log("Initializing DataTable...");
let table = $("#products-table").DataTable({
processing: true, processing: true,
serverSide: true, serverSide: true,
ajax: url, ajax: {
order: [[0, "desc"]], url: url,
error: function (xhr, error, thrown) {
console.error("DataTables Ajax Error:", error, thrown);
console.error("Response:", xhr.responseText);
},
},
order: [[0, "asc"]], // Order by first column (code) ascending
columns: [ columns: [
{ data: "code", name: "code" }, {
{ data: "name", name: "name" }, data: "code",
{ data: "category_name", name: "category.name" }, name: "code",
{ data: "unit", name: "unit" }, orderable: true,
searchable: true,
},
{
data: "name",
name: "name",
orderable: true,
searchable: true,
},
{
data: "category_name",
name: "category.name",
orderable: true,
searchable: true,
},
{
data: "unit",
name: "unit",
orderable: true,
searchable: true,
},
{ {
data: "total_stock", data: "total_stock",
name: "total_stock", name: "total_stock",
orderable: false, orderable: false,
searchable: false, searchable: false,
}, },
{ data: "action", name: "action", orderable: false, searchable: false }, {
data: "action",
name: "action",
orderable: false,
searchable: false,
},
], ],
columnDefs: [
{
targets: [4, 5], // total_stock and action columns
orderable: false,
},
],
initComplete: function (settings, json) {
console.log("DataTables initialized successfully");
console.log("Settings:", settings);
console.log(
"Column ordering enabled for:",
settings.aoColumns.map((col, index) => ({
index: index,
orderable: col.bSortable,
name: col.sName || col.mData,
}))
);
},
drawCallback: function (settings) {
console.log("DataTables draw completed");
},
headerCallback: function (thead, data, start, end, display) {
console.log("Header callback - sorting icons should be visible");
},
});
// Debug: Log table instance
console.log("DataTable instance:", table);
// Test column ordering programmatically
setTimeout(function () {
console.log("Testing column ordering...");
try {
table.order([1, "desc"]).draw();
console.log("Column ordering test successful");
} catch (e) {
console.error("Column ordering test failed:", e);
}
}, 2000);
}
// Initialize when document is ready
$(document).ready(function () {
console.log("Document ready, checking for DataTables...");
initializeDataTable();
}); });
$(document).on("click", ".btn-destroy-product", function () { $(document).on("click", ".btn-destroy-product", function () {
@@ -44,17 +137,22 @@ $(document).on("click", ".btn-destroy-product", function () {
_token: $('meta[name="csrf-token"]').attr("content"), _token: $('meta[name="csrf-token"]').attr("content"),
}, },
success: function () { success: function () {
alert("Produk berhasil dihapus."); Swal.fire(
"Berhasil!",
"Produk berhasil dihapus.",
"success"
);
$("#products-table").DataTable().ajax.reload(); $("#products-table").DataTable().ajax.reload();
}, },
error: function (xhr) { error: function (xhr) {
alert("Gagal menghapus produk."); Swal.fire("Error!", "Gagal menghapus produk.", "error");
console.error(xhr.responseText); console.error(xhr.responseText);
}, },
}); });
} }
}); });
}); });
$(document).on("click", ".btn-toggle-active", function () { $(document).on("click", ".btn-toggle-active", function () {
let button = $(this); let button = $(this);
let url = button.data("url"); let url = button.data("url");
@@ -79,16 +177,21 @@ $(document).on("click", ".btn-toggle-active", function () {
$("#products-table") $("#products-table")
.DataTable() .DataTable()
.ajax.reload(null, false); .ajax.reload(null, false);
alert(response.message); Swal.fire("Berhasil!", response.message, "success");
} }
}, },
error: function () { error: function () {
alert("Gagal mengubah status produk."); Swal.fire(
"Error!",
"Gagal mengubah status produk.",
"error"
);
}, },
}); });
} }
}); });
}); });
$(document).on("click", ".btn-product-stock-dealers", function () { $(document).on("click", ".btn-product-stock-dealers", function () {
const productId = $(this).data("id"); const productId = $(this).data("id");
const productName = $(this).data("name"); const productName = $(this).data("name");
@@ -99,7 +202,7 @@ $(document).on("click", ".btn-product-stock-dealers", function () {
// Initialize or reload DataTable inside modal // Initialize or reload DataTable inside modal
$("#dealer-stock-table").DataTable({ $("#dealer-stock-table").DataTable({
destroy: true, // reinit if exists destroy: true,
processing: true, processing: true,
serverSide: true, serverSide: true,
ajax: { ajax: {
@@ -109,14 +212,25 @@ $(document).on("click", ".btn-product-stock-dealers", function () {
}, },
}, },
columns: [ columns: [
{ data: "dealer_name", name: "dealer_name" }, {
{ data: "quantity", name: "quantity" }, data: "dealer_name",
name: "dealer_name",
orderable: true,
searchable: true,
},
{
data: "quantity",
name: "quantity",
orderable: true,
searchable: false,
},
], ],
initComplete: function () { initComplete: function () {
$("#dealerStockModal").modal("show"); $("#dealerStockModal").modal("show");
}, },
}); });
}); });
$(document).on("click", "#dealerStockModal .close", function () { $(document).on("click", "#dealerStockModal .close", function () {
$("#dealerStockModal").modal("hide"); $("#dealerStockModal").modal("hide");
}); });

View File

@@ -26,24 +26,23 @@ License: You must have a valid license purchased only from themeforest(the above
<meta name="csrf-token" content="{{ csrf_token() }}"> <meta name="csrf-token" content="{{ csrf_token() }}">
<!--begin::Fonts --> <!--begin::Fonts -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700|Roboto:300,400,500,600,700"> <link rel="stylesheet" href="{{ asset('css/google-font.css') }}">
<!--end::Fonts --> <!--end::Fonts -->
<!--begin::Global Theme Styles(used by all pages) --> <!--begin::Global Theme Styles(used by all pages) -->
<link href="{{ url('css/app.bundle.min.css') }}" rel="stylesheet" type="text/css" /> <link href="{{ asset('css/app.bundle.min.css') }}" rel="stylesheet" type="text/css" />
<!--end::Global Theme Styles --> <!--end::Global Theme Styles -->
<!--begin::Global Custom Styles(used by all pages) --> <!--begin::Global Custom Styles(used by all pages) -->
<link href="{{ url('css/custom-web.css') }}" rel="stylesheet" type="text/css" /> <link href="{{ asset('css/custom-web.css') }}" rel="stylesheet" type="text/css" />
<!--end::Global Custom Styles --> <!--end::Global Custom Styles -->
<link rel="shortcut icon" href="{{ asset('assets/media/logos/ckb.jpeg') }}" /> <link rel="shortcut icon" href="{{ asset('assets/media/logos/ckb.jpeg') }}" />
<!--begin::DataTables CSS --> <!--begin::DataTables CSS -->
<link href="https://cdn.datatables.net/1.13.6/css/dataTables.bootstrap4.min.css" rel="stylesheet" type="text/css" /> <link href="{{ asset('css/vendor/dataTables.bootstrap4.min.css') }}" rel="stylesheet" type="text/css" />
<link href="https://cdn.datatables.net/fixedcolumns/4.2.2/css/fixedColumns.bootstrap4.min.css" rel="stylesheet" type="text/css" /> <link href="{{ asset('css/vendor/fixedColumns.bootstrap4.min.css') }}" rel="stylesheet" type="text/css" />
<!--end::DataTables CSS --> <link href="{{ asset('css/vendor/sweetalert2.min.css') }}" rel="stylesheet" type="text/css" />
<!-- begin::Global Config(global config for global JS sciprts) --> <!-- begin::Global Config(global config for global JS sciprts) -->
<script> <script>
@@ -74,24 +73,12 @@ License: You must have a valid license purchased only from themeforest(the above
<!--end::Global Theme Bundle --> <!--end::Global Theme Bundle -->
<!--begin::DataTables --> <!--begin::DataTables -->
<script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script> <script src="{{ asset('js/vendor.js') }}"></script>
<script src="https://cdn.datatables.net/1.13.6/js/dataTables.bootstrap4.min.js"></script>
<script src="https://cdn.datatables.net/fixedcolumns/4.2.2/js/dataTables.fixedColumns.min.js"></script>
<!--end::DataTables -->
<!--begin::Common Script --> <!--begin::Common Script -->
<script src="{{ asset('js/init.js') }}" type="text/javascript"></script> <script src="{{ asset('js/init.js') }}" type="text/javascript"></script>
<!--end::Common Scripts --> <!--end::Common Scripts -->
<!--begin::SweetAlert2 -->
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<!--end::SweetAlert2 -->
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.3.0/dist/chart.umd.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2"></script>
@yield('styles') @yield('styles')
</head> </head>
<!-- end::Head --> <!-- end::Head -->

View File

@@ -27,8 +27,7 @@ License: You must have a valid license purchased only from themeforest(the above
<meta name="base-url" content="{{ url('/') }}"> <meta name="base-url" content="{{ url('/') }}">
<!--begin::Fonts --> <!--begin::Fonts -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700|Roboto:300,400,500,600,700"> <link rel="stylesheet" href="{{ asset('css/google-font.css') }}">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,500,600,700|Roboto:300,400,500,600,700">
<!--end::Fonts --> <!--end::Fonts -->
@@ -46,8 +45,8 @@ License: You must have a valid license purchased only from themeforest(the above
<link href="{{ asset('css/bootstrap-datepicker.min.css') }}" rel="stylesheet" type="text/css" /> <link href="{{ asset('css/bootstrap-datepicker.min.css') }}" rel="stylesheet" type="text/css" />
<!--begin::DataTables CSS --> <!--begin::DataTables CSS -->
<link href="https://cdn.datatables.net/1.13.6/css/dataTables.bootstrap4.min.css" rel="stylesheet" type="text/css" /> <link href="{{ asset('css/vendor/dataTables.bootstrap4.min.css') }}" rel="stylesheet" type="text/css" />
<link href="https://cdn.datatables.net/fixedcolumns/4.2.2/css/fixedColumns.bootstrap4.min.css" rel="stylesheet" type="text/css" /> <link href="{{ asset('css/vendor/fixedColumns.bootstrap4.min.css') }}" rel="stylesheet" type="text/css" />
<!--end::DataTables CSS --> <!--end::DataTables CSS -->
<style> <style>
@@ -125,7 +124,9 @@ License: You must have a valid license purchased only from themeforest(the above
<script src="//maps.google.com/maps/api/js?key=AIzaSyBTGnKT7dt597vo9QgeQ7BFhvSRP4eiMSM" type="text/javascript"></script> <script src="//maps.google.com/maps/api/js?key=AIzaSyBTGnKT7dt597vo9QgeQ7BFhvSRP4eiMSM" type="text/javascript"></script>
<!--end::Global Theme Bundle --> <!--end::Global Theme Bundle -->
<!--begin::DataTables --> <script src="{{ asset('js/vendor.js') }}"></script>
{{-- <!--begin::DataTables -->
<script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script> <script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.13.6/js/dataTables.bootstrap4.min.js"></script> <script src="https://cdn.datatables.net/1.13.6/js/dataTables.bootstrap4.min.js"></script>
<script src="https://cdn.datatables.net/fixedcolumns/4.2.2/js/dataTables.fixedColumns.min.js"></script> <script src="https://cdn.datatables.net/fixedcolumns/4.2.2/js/dataTables.fixedColumns.min.js"></script>
@@ -141,7 +142,7 @@ License: You must have a valid license purchased only from themeforest(the above
<!--end::Common Scripts --> <!--end::Common Scripts -->
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.3.0/dist/chart.umd.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/chart.js@4.3.0/dist/chart.umd.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2"></script> <script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2"></script> --}}
<script src="{{ asset('js/bootstrap-datepicker.min.js') }}" type="text/javascript"></script> <script src="{{ asset('js/bootstrap-datepicker.min.js') }}" type="text/javascript"></script>

View File

@@ -44,93 +44,6 @@
</li> </li>
@endcan @endcan
@if (Auth::user()->can('view', $menus['dealer.index']) || Auth::user()->can('view', $menus['category.index']) || Auth::user()->can('view', $menus['work.index']))
<li class="kt-menu__item kt-menu__item--submenu" aria-haspopup="true" data-ktmenu-submenu-toggle="hover">
<a href="javascript:;" class="kt-menu__link kt-menu__toggle">
<span class="kt-menu__link-icon">
<i class="fa fa-box"></i>
</span>
<span class="kt-menu__link-text">Data Master</span><i class="kt-menu__ver-arrow la la-angle-right"></i>
</a>
<div class="kt-menu__submenu "><span class="kt-menu__arrow"></span>
<ul class="kt-menu__subnav">
{{-- <li class="kt-menu__item kt-menu__item--parent" aria-haspopup="true"><span class="kt-menu__link"><span class="kt-menu__link-text">Kategori Pekerjaan</span></span></li> --}}
@can('view', $menus['dealer.index'])
<li class="kt-menu__item" aria-haspopup="true"><a href="{{ route('dealer.index') }}" class="kt-menu__link "><i class="fa fa-car" style="display: flex; align-items: center; margin-right: 10px;"><span></span></i><span class="kt-menu__link-text">Dealer</span></a></li>
@endcan
@can('view', $menus['category.index'])
<li class="kt-menu__item" aria-haspopup="true"><a href="{{ route('category.index') }}" class="kt-menu__link "><i class="fa fa-users" style="display: flex; align-items: center; margin-right: 10px;"><span></span></i><span class="kt-menu__link-text">Kategori Pekerjaan</span></a></li>
@endcan
@can('view', $menus['work.index'])
<li class="kt-menu__item" aria-haspopup="true"><a href="{{ route('work.index') }}" class="kt-menu__link "><i class="fa fa-list" style="display: flex; align-items: center; margin-right: 10px;"><span></span></i><span class="kt-menu__link-text">Pekerjaan</span></a></li>
@endcan
</ul>
</div>
</li>
@endif
@if (Auth::user()->can('view', $menus['user.index']) || Auth::user()->can('view', $menus['roleprivileges.index']))
<li class="kt-menu__item kt-menu__item--submenu" aria-haspopup="true" data-ktmenu-submenu-toggle="hover">
<a href="javascript:;" class="kt-menu__link kt-menu__toggle">
<span class="kt-menu__link-icon">
<i class="fa fa-box"></i>
</span>
<span class="kt-menu__link-text">Management User</span><i class="kt-menu__ver-arrow la la-angle-right"></i>
</a>
<div class="kt-menu__submenu "><span class="kt-menu__arrow"></span>
<ul class="kt-menu__subnav">
{{-- <li class="kt-menu__item kt-menu__item--parent" aria-haspopup="true"><span class="kt-menu__link"><span class="kt-menu__link-text">Kategori Pekerjaan</span></span></li> --}}
@can('view', $menus['user.index'])
<li class="kt-menu__item" aria-haspopup="true"><a href="{{ route('user.index') }}" class="kt-menu__link "><i class="fa fa-car" style="display: flex; align-items: center; margin-right: 10px;"><span></span></i><span class="kt-menu__link-text">User</span></a></li>
@endcan
@can('view', $menus['roleprivileges.index'])
<li class="kt-menu__item" aria-haspopup="true"><a href="{{ route('roleprivileges.index') }}" class="kt-menu__link "><i class="fa fa-users" style="display: flex; align-items: center; margin-right: 10px;"><span></span></i><span class="kt-menu__link-text">Role & Privileges</span></a></li>
@endcan
</ul>
</div>
</li>
@endcan
{{-- <li class="kt-menu__item kt-menu__item--submenu" aria-haspopup="true" data-ktmenu-submenu-toggle="hover">
<a href="{{ route('user.index') }}" class="kt-menu__link kt-menu__toggle">
<span class="kt-menu__link-icon">
<i class="fa fa-list"></i>
</span>
<span class="kt-menu__link-text">User</span>
</a>
</li> --}}
@if (Auth::user()->can('view', $menus['report.transaction']) || Auth::user()->can('view', $menus['report.transaction_sa']) || Auth::user()->can('view', $menus['report.transaction_dealer']))
<li class="kt-menu__item kt-menu__item--submenu" aria-haspopup="true" data-ktmenu-submenu-toggle="hover">
<a href="javascript:;" class="kt-menu__link kt-menu__toggle">
<span class="kt-menu__link-icon">
<i class="fa fa-box"></i>
</span>
<span class="kt-menu__link-text">Laporan</span><i class="kt-menu__ver-arrow la la-angle-right"></i>
</a>
<div class="kt-menu__submenu "><span class="kt-menu__arrow"></span>
<ul class="kt-menu__subnav">
{{-- <li class="kt-menu__item kt-menu__item--parent" aria-haspopup="true"><span class="kt-menu__link"><span class="kt-menu__link-text">Kategori Pekerjaan</span></span></li> --}}
@can('view', $menus['report.transaction'])
<li class="kt-menu__item" aria-haspopup="true">
<a href="{{ route('report.transaction') }}" class="kt-menu__link "><i class="fa fa-wrench" style="display: flex; align-items: center; margin-right: 10px;"><span></span></i><span class="kt-menu__link-text">Laporan Pekerjaan</span></a>
</li>
@endcan
@can('view', $menus['report.transaction_sa'])
<li class="kt-menu__item" aria-haspopup="true">
<a href="{{ route('report.transaction_sa') }}" class="kt-menu__link "><i class="fa fa-user" style="display: flex; align-items: center; margin-right: 10px;"><span></span></i><span class="kt-menu__link-text">Laporan Performa SA</span></a>
</li>
@endcan
@can('view', $menus['report.transaction_dealer'])
<li class="kt-menu__item" aria-haspopup="true">
<a href="{{ route('report.transaction_dealer') }}" class="kt-menu__link "><i class="fa fa-car" style="display: flex; align-items: center; margin-right: 10px;"><span></span></i><span class="kt-menu__link-text">Laporan Performa Dealer</span></a>
</li>
@endcan
</ul>
</div>
</li>
@endif
{{-- Section Header --}} {{-- Section Header --}}
<div class="kt-menu__section" style="padding: 10px 20px; font-weight: bold;"> <div class="kt-menu__section" style="padding: 10px 20px; font-weight: bold;">
<i class="kt-menu__section-icon fa fa-box"></i> <i class="kt-menu__section-icon fa fa-box"></i>

View File

@@ -1800,6 +1800,18 @@ use Illuminate\Support\Facades\Auth;
</div> </div>
</div> </div>
${mutation.shipping_notes ? `
<div class="row mb-3">
<div class="col-md-12">
<strong>Catatan dari Pengirim:</strong><br>
<div class="alert alert-info mb-0">
<i class="fa fa-info-circle mr-2"></i>
${mutation.shipping_notes}
</div>
</div>
</div>
` : ''}
<hr> <hr>
<h6 class="mb-3">Detail Produk & Penerimaan:</h6> <h6 class="mb-3">Detail Produk & Penerimaan:</h6>
@@ -1945,8 +1957,8 @@ use Illuminate\Support\Facades\Auth;
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<i class="fa fa-check-circle mr-2"></i> <i class="fa fa-check-circle mr-2"></i>
<div> <div>
<strong>Status:</strong> Mutasi telah diterima dan siap untuk disetujui. <strong>Status:</strong> Mutasi telah diterima dan menunggu persetujuan admin.
<br><small>Stock akan dipindahkan setelah Anda menyetujui mutasi ini.</small> <br><small>Stock akan dipindahkan setelah admin menyetujui mutasi ini.</small>
</div> </div>
</div> </div>
</div> </div>
@@ -2063,135 +2075,8 @@ use Illuminate\Support\Facades\Auth;
// Handle approve button click // Note: Approve and reject buttons removed from transaction page
$(document).on('click', '.btn-approve-mutation', function() { // These actions are now only available to admin users in the admin panel
var mutationId = $(this).data('id');
Swal.fire({
title: 'Konfirmasi Persetujuan Mutasi',
html: `
<div class="text-left">
<p class="mb-3">Dengan menyetujui mutasi ini:</p>
<ul class="text-muted mb-3" style="font-size: 14px;">
<li>Stock akan dipindahkan secara otomatis dari dealer asal ke dealer tujuan</li>
<li>Proses mutasi akan selesai dan tidak dapat dibatalkan</li>
<li>Perubahan stock akan tercatat dalam log sistem</li>
</ul>
<div class="form-group text-left">
<label for="approval-notes" class="font-weight-bold">Catatan Persetujuan:</label>
<textarea id="approval-notes" class="form-control" rows="3" placeholder="Masukkan catatan persetujuan (opsional)..."></textarea>
</div>
</div>
`,
icon: 'question',
showCancelButton: true,
confirmButtonColor: '#28a745',
cancelButtonColor: '#6c757d',
confirmButtonText: 'Ya, Setujui Mutasi',
cancelButtonText: 'Batal',
width: '500px',
preConfirm: () => {
return document.getElementById('approval-notes').value;
}
}).then((result) => {
if (result.isConfirmed) {
// Create form and submit
var form = $('<form>').attr({
method: 'POST',
action: '{{ route("mutations.approve", ":id") }}'.replace(':id', mutationId)
});
form.append($('<input>').attr({
type: 'hidden',
name: '_token',
value: $('meta[name="csrf-token"]').attr('content')
}));
form.append($('<input>').attr({
type: 'hidden',
name: 'from_transaction_page',
value: '1'
}));
if (result.value) {
form.append($('<input>').attr({
type: 'hidden',
name: 'approval_notes',
value: result.value
}));
}
$('body').append(form);
form.submit();
}
});
});
// Handle reject button click
$(document).on('click', '.btn-reject-mutation', function() {
var mutationId = $(this).data('id');
Swal.fire({
title: 'Konfirmasi Penolakan Mutasi',
html: `
<div class="text-left">
<div class="alert alert-warning mb-3">
<i class="fa fa-exclamation-triangle mr-2"></i>
<strong>Perhatian:</strong> Mutasi yang ditolak tidak dapat diubah lagi dan proses akan dihentikan.
</div>
<div class="form-group text-left">
<label for="rejection-reason" class="font-weight-bold">Alasan Penolakan: <span class="text-danger">*</span></label>
<textarea id="rejection-reason" class="form-control" rows="3" placeholder="Jelaskan alasan penolakan mutasi ini..." required></textarea>
<small class="text-muted">Alasan penolakan wajib diisi untuk dokumentasi.</small>
</div>
</div>
`,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#dc3545',
cancelButtonColor: '#6c757d',
confirmButtonText: 'Ya, Tolak Mutasi',
cancelButtonText: 'Batal',
width: '500px',
preConfirm: () => {
const reason = document.getElementById('rejection-reason').value;
if (!reason || reason.trim() === '') {
Swal.showValidationMessage('Alasan penolakan harus diisi!');
return false;
}
return reason;
}
}).then((result) => {
if (result.isConfirmed && result.value) {
// Create form and submit
var form = $('<form>').attr({
method: 'POST',
action: '{{ route("mutations.reject", ":id") }}'.replace(':id', mutationId)
});
form.append($('<input>').attr({
type: 'hidden',
name: '_token',
value: $('meta[name="csrf-token"]').attr('content')
}));
form.append($('<input>').attr({
type: 'hidden',
name: 'from_transaction_page',
value: '1'
}));
form.append($('<input>').attr({
type: 'hidden',
name: 'rejection_reason',
value: result.value
}));
$('body').append(form);
form.submit();
}
});
});
// Save active tab to localStorage // Save active tab to localStorage
$('.nav-link').on('click', function() { $('.nav-link').on('click', function() {

View File

@@ -53,7 +53,9 @@
@if($row->status->value === 'approved') @if($row->status->value === 'approved')
<!-- Stock has already been moved automatically after approval --> <!-- Stock has already been moved automatically after approval -->
<span class="badge badge-success">Stock Telah Dipindahkan</span> <div class="text-center">
<span class="btn btn-sm btn-success" style="cursor: default; pointer-events: none;">Selesai</span>
</div>
@endif @endif
</div> </div>

View File

@@ -48,6 +48,55 @@
</div> </div>
@endsection @endsection
@section('styles')
<style>
/* DataTables Sorting Icons */
table.dataTable thead .sorting:before,
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:before,
table.dataTable thead .sorting_desc:after {
font-family: 'Font Awesome 5 Free';
font-weight: 900;
opacity: 0.5;
}
table.dataTable thead .sorting:before {
content: "\f0dc";
}
table.dataTable thead .sorting_asc:before {
content: "\f0de";
opacity: 1;
}
table.dataTable thead .sorting_desc:before {
content: "\f0dd";
opacity: 1;
}
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after {
display: none;
}
/* Ensure column headers are clickable */
table.dataTable thead th {
cursor: pointer;
position: relative;
user-select: none;
}
table.dataTable thead th.sorting,
table.dataTable thead th.sorting_asc,
table.dataTable thead th.sorting_desc {
cursor: pointer;
}
</style>
@endsection
@section('javascripts') @section('javascripts')
<script src="{{ mix('js/warehouse_management/mutations/index.js') }}"></script> <script src="{{ mix('js/warehouse_management/mutations/index.js') }}"></script>
@endsection @endsection

View File

@@ -215,7 +215,7 @@
@if($mutation->status->value === 'received' && (auth()->user()->dealer_id == $mutation->from_dealer_id || auth()->user()->hasRole('admin'))) @if($mutation->status->value === 'received' && (auth()->user()->dealer_id == $mutation->from_dealer_id || auth()->user()->hasRole('admin')))
<!-- Approve Button for sender or admin --> <!-- Approve Button for sender or admin -->
<button type="button" class="btn btn-success btn-approve" data-id="{{ $mutation->id }}"> <button type="button" class="btn btn-success btn-approve" data-toggle="modal" data-target="#approveModal{{ $mutation->id }}" data-id="{{ $mutation->id }}">
Setujui Mutasi Setujui Mutasi
</button> </button>
<!-- Reject Button for sender or admin --> <!-- Reject Button for sender or admin -->
@@ -248,12 +248,12 @@
@if($mutation->status->value === 'sent' && auth()->user()->dealer_id == $mutation->to_dealer_id) @if($mutation->status->value === 'sent' && auth()->user()->dealer_id == $mutation->to_dealer_id)
<!-- Receive Modal --> <!-- Receive Modal -->
<div class="modal fade" id="receiveModal{{ $mutation->id }}" tabindex="-1" role="dialog"> <div class="modal fade" id="receiveModal{{ $mutation->id }}" tabindex="-1" role="dialog">
<div class="modal-dialog modal-lg" role="document"> <div class="modal-dialog modal-lg modal-dialog-centered" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Terima Mutasi</h5> <h5 class="modal-title">Terima Mutasi</h5>
<button type="button" class="close" data-dismiss="modal"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span>&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
</div> </div>
<form action="{{ route('mutations.receive', $mutation->id) }}" method="POST"> <form action="{{ route('mutations.receive', $mutation->id) }}" method="POST">
@@ -263,6 +263,16 @@
<strong>Konfirmasi!</strong> Anda akan menerima mutasi dari <strong>{{ $mutation->fromDealer->name }}</strong>. <strong>Konfirmasi!</strong> Anda akan menerima mutasi dari <strong>{{ $mutation->fromDealer->name }}</strong>.
</div> </div>
@if($mutation->shipping_notes)
<div class="form-group">
<label><strong>Catatan dari Pengirim:</strong></label>
<div class="alert alert-warning">
<i class="fa fa-info-circle mr-2"></i>
{{ $mutation->shipping_notes }}
</div>
</div>
@endif
<div class="form-group"> <div class="form-group">
<label>Catatan Penerimaan</label> <label>Catatan Penerimaan</label>
<textarea name="reception_notes" class="form-control" rows="3" placeholder="Catatan kondisi barang saat diterima (opsional)"></textarea> <textarea name="reception_notes" class="form-control" rows="3" placeholder="Catatan kondisi barang saat diterima (opsional)"></textarea>
@@ -320,13 +330,13 @@
@if($mutation->status->value === 'received' && (auth()->user()->dealer_id == $mutation->from_dealer_id || auth()->user()->hasRole('admin'))) @if($mutation->status->value === 'received' && (auth()->user()->dealer_id == $mutation->from_dealer_id || auth()->user()->hasRole('admin')))
<!-- Approve Modal --> <!-- Approve Modal -->
<div class="modal fade" id="approveModal{{ $mutation->id }}" tabindex="-1" role="dialog"> <div class="modal fade" id="approveModal{{ $mutation->id }}" tabindex="-1" role="dialog" aria-labelledby="approveModalLabel{{ $mutation->id }}" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document"> <div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Setujui Mutasi</h5> <h5 class="modal-title" id="approveModalLabel{{ $mutation->id }}">Setujui Mutasi</h5>
<button type="button" class="close" data-dismiss="modal"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span>&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
</div> </div>
<form action="{{ route('mutations.approve', $mutation->id) }}" method="POST" class="approve-form"> <form action="{{ route('mutations.approve', $mutation->id) }}" method="POST" class="approve-form">
@@ -389,12 +399,12 @@
<!-- Reject Modal --> <!-- Reject Modal -->
<div class="modal fade" id="rejectModal" tabindex="-1" role="dialog"> <div class="modal fade" id="rejectModal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document"> <div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Tolak Mutasi</h5> <h5 class="modal-title">Tolak Mutasi</h5>
<button type="button" class="close" data-dismiss="modal"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span>&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
</div> </div>
<form action="{{ route('mutations.reject', $mutation->id) }}" method="POST"> <form action="{{ route('mutations.reject', $mutation->id) }}" method="POST">
@@ -421,12 +431,12 @@
@if($mutation->canBeCancelled() && (auth()->user()->dealer_id == $mutation->from_dealer_id || auth()->user()->hasRole('admin'))) @if($mutation->canBeCancelled() && (auth()->user()->dealer_id == $mutation->from_dealer_id || auth()->user()->hasRole('admin')))
<!-- Cancel Modal --> <!-- Cancel Modal -->
<div class="modal fade" id="cancelModal" tabindex="-1" role="dialog"> <div class="modal fade" id="cancelModal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document"> <div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title">Batalkan Mutasi</h5> <h5 class="modal-title">Batalkan Mutasi</h5>
<button type="button" class="close" data-dismiss="modal"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span>&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
</div> </div>
<form action="{{ route('mutations.cancel', $mutation->id) }}" method="POST"> <form action="{{ route('mutations.cancel', $mutation->id) }}" method="POST">
@@ -472,6 +482,52 @@
.approve-form .form-control.text-center { .approve-form .form-control.text-center {
text-align: center; text-align: center;
} }
/* Ensure modal backdrop is properly removed */
.modal-backdrop {
z-index: 1040;
}
.modal {
z-index: 1050;
}
/* Force remove any blocking overlays */
body.modal-open {
overflow: hidden;
}
body:not(.modal-open) {
overflow: auto !important;
padding-right: 0 !important;
}
/* Ensure all modals are centered */
.modal-dialog-centered {
display: flex;
align-items: center;
min-height: calc(100% - 1rem);
}
.modal-dialog-centered::before {
display: block;
height: calc(100vh - 1rem);
content: "";
}
.modal-dialog-centered.modal-dialog-centered-sm {
min-height: calc(100% - 1rem);
}
@media (min-width: 576px) {
.modal-dialog-centered {
min-height: calc(100% - 3.5rem);
}
.modal-dialog-centered::before {
height: calc(100vh - 3.5rem);
}
}
</style> </style>
@endsection @endsection
@@ -484,6 +540,49 @@ $(document).ready(function() {
$('#approveModal' + mutationId).modal('show'); $('#approveModal' + mutationId).modal('show');
}); });
// Handle modal close events
$('.modal').on('hidden.bs.modal', function () {
// Reset form
if ($(this).find('form').length > 0) {
$(this).find('form')[0].reset();
}
// Remove modal backdrop manually if it exists
$('.modal-backdrop').remove();
// Ensure body is not blocked
$('body').removeClass('modal-open');
$('body').css('padding-right', '');
// Remove any overlay that might be blocking
$('.modal-backdrop, .fade.show').remove();
});
// Additional cleanup for approve modal specifically
$(document).on('click', '[data-dismiss="modal"]', function() {
var $modal = $(this).closest('.modal');
$modal.modal('hide');
setTimeout(function() {
$('.modal-backdrop').remove();
$('body').removeClass('modal-open');
$('body').css('padding-right', '');
// Force remove any remaining overlays
$('.modal-backdrop, .modal-open').remove();
$('body').removeClass('modal-open');
}, 300);
});
// Force cleanup on any modal hide
$(document).on('hide.bs.modal', '.modal', function() {
setTimeout(function() {
$('.modal-backdrop').remove();
$('body').removeClass('modal-open');
$('body').css('padding-right', '');
}, 100);
});
// Validate quantity approved in receive modal // Validate quantity approved in receive modal
$(document).on('input', 'input[name*="quantity_approved"]', function() { $(document).on('input', 'input[name*="quantity_approved"]', function() {
var maxValue = parseFloat($(this).attr('max')); var maxValue = parseFloat($(this).attr('max'));

View File

@@ -1,5 +1,34 @@
@extends('layouts.backapp') @extends('layouts.backapp')
@section('styles')
<style>
/* Ensure DataTables sorting icons are visible */
table.dataTable thead .sorting:before,
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:before,
table.dataTable thead .sorting_desc:after {
opacity: 0.5 !important;
}
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_desc:after {
opacity: 1 !important;
}
/* Make sure table headers are clickable */
table.dataTable thead th {
cursor: pointer;
}
table.dataTable thead th.sorting_disabled {
cursor: default;
}
</style>
@endsection
@section('content') @section('content')
<div class="kt-portlet kt-portlet--mobile" id="kt_blockui_datatable"> <div class="kt-portlet kt-portlet--mobile" id="kt_blockui_datatable">
<div class="kt-portlet__head kt-portlet__head--lg"> <div class="kt-portlet__head kt-portlet__head--lg">

View File

@@ -12,6 +12,7 @@ const mix = require("laravel-mix");
*/ */
mix.js("resources/js/app.js", "public/js") mix.js("resources/js/app.js", "public/js")
.js("resources/js/vendor.js", "public/js")
.sass("resources/sass/app.scss", "public/css") .sass("resources/sass/app.scss", "public/css")
.js( .js(
"resources/js/warehouse_management/product_categories/index.js", "resources/js/warehouse_management/product_categories/index.js",
@@ -41,6 +42,48 @@ mix.js("resources/js/app.js", "public/js")
"resources/js/warehouse_management/mutations/create.js", "resources/js/warehouse_management/mutations/create.js",
"public/js/warehouse_management/mutations" "public/js/warehouse_management/mutations"
) )
// Copy vendor libraries from node_modules
.copy(
"node_modules/datatables.net/js/jquery.dataTables.min.js",
"public/js/vendor"
)
.copy(
"node_modules/datatables.net-bs4/js/dataTables.bootstrap4.min.js",
"public/js/vendor"
)
.copy(
"node_modules/datatables.net-fixedcolumns/js/dataTables.fixedColumns.min.js",
"public/js/vendor"
)
.copy(
"node_modules/sweetalert2/dist/sweetalert2.min.js",
"public/js/vendor"
)
.copy("node_modules/chart.js/dist/chart.umd.js", "public/js/vendor")
.copy(
"node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.min.js",
"public/js/vendor"
)
// Copy CSS files
.copy(
"node_modules/datatables.net-bs4/css/dataTables.bootstrap4.min.css",
"public/css/vendor"
)
.copy(
"node_modules/datatables.net-fixedcolumns-bs4/css/fixedColumns.bootstrap4.min.css",
"public/css/vendor"
)
.copy(
"node_modules/sweetalert2/dist/sweetalert2.min.css",
"public/css/vendor"
)
// Keep existing manual files as backup
.copy("resources/js/cdn/dataTables.bootstrap4.min.js", "public/js/cdn")
.copy("resources/js/cdn/dataTables.fixedColumns.min.js", "public/js/cdn")
.copy("resources/js/cdn/jquery.dataTables.min.js", "public/js/cdn")
.copy("resources/css/dataTables.bootstrap4.min.css", "public/css")
.copy("resources/css/fixedColumns.bootstrap4.min.css", "public/css")
.copy("resources/css/google-font.css", "public/css")
.sourceMaps(); .sourceMaps();
mix.browserSync({ mix.browserSync({