theme.astro 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  1. ---
  2. import Head from "@components/_head.astro";
  3. import Footer from "@components/dashboard/_footer.astro";
  4. import Topbar from "@components/dashboard/_topbar.astro";
  5. import Scripts from "@components/_scripts.astro";
  6. import { convertPathToHtml } from "../../../utils/index.js";
  7. const title = "AdminLTE 4 | Theme Customize";
  8. const path = "../../../dist";
  9. const htmlPath = convertPathToHtml(path);
  10. ---
  11. <!doctype html>
  12. <html lang="en">
  13. <!--begin::Head-->
  14. <head>
  15. <Head title={title} path={path} />
  16. </head>
  17. <!--end::Head-->
  18. <!--begin::Body-->
  19. <body class="sidebar-expand-lg bg-body-tertiary">
  20. <!--begin::App Wrapper-->
  21. <div class="app-wrapper">
  22. <Topbar path={path} />
  23. <!--begin::Sidebar-->
  24. <aside class="app-sidebar bg-primary shadow" data-bs-theme="dark">
  25. <!--begin::Sidebar Brand-->
  26. <div class="sidebar-brand">
  27. <!--begin::Brand Link-->
  28. <a href={htmlPath + "/index.html"} class="brand-link">
  29. <!--begin::Brand Image-->
  30. <img
  31. src={path + "/assets/img/AdminLTELogo.png"}
  32. alt="AdminLTE Logo"
  33. class="brand-image opacity-75 shadow"
  34. />
  35. <!--end::Brand Image-->
  36. <!--begin::Brand Text-->
  37. <span class="brand-text fw-light">AdminLTE 4</span>
  38. <!--end::Brand Text-->
  39. </a>
  40. <!--end::Brand Link-->
  41. </div>
  42. <!--end::Sidebar Brand-->
  43. <!--begin::Sidebar Wrapper-->
  44. <div class="sidebar-wrapper">
  45. <nav class="mt-2">
  46. <!--begin::Sidebar Menu-->
  47. <ul
  48. class="nav sidebar-menu flex-column"
  49. data-lte-toggle="treeview"
  50. role="menu"
  51. data-accordion="false"
  52. >
  53. <li class="nav-header">MULTI LEVEL EXAMPLE</li>
  54. <li class="nav-item">
  55. <a href="#" class="nav-link">
  56. <i class="nav-icon bi bi-circle-fill"></i>
  57. <p>Level 1</p>
  58. </a>
  59. </li>
  60. <li class="nav-item">
  61. <a href="#" class="nav-link">
  62. <i class="nav-icon bi bi-circle-fill"></i>
  63. <p>
  64. Level 1
  65. <i class="nav-arrow bi bi-chevron-right"></i>
  66. </p>
  67. </a>
  68. <ul class="nav nav-treeview">
  69. <li class="nav-item">
  70. <a href="#" class="nav-link">
  71. <i class="nav-icon bi bi-circle"></i>
  72. <p>Level 2</p>
  73. </a>
  74. </li>
  75. <li class="nav-item">
  76. <a href="#" class="nav-link">
  77. <i class="nav-icon bi bi-circle"></i>
  78. <p>
  79. Level 2
  80. <i class="nav-arrow bi bi-chevron-right"></i>
  81. </p>
  82. </a>
  83. <ul class="nav nav-treeview">
  84. <li class="nav-item">
  85. <a href="#" class="nav-link">
  86. <i class="nav-icon bi bi-record-circle-fill"></i>
  87. <p>Level 3</p>
  88. </a>
  89. </li>
  90. <li class="nav-item">
  91. <a href="#" class="nav-link">
  92. <i class="nav-icon bi bi-record-circle-fill"></i>
  93. <p>Level 3</p>
  94. </a>
  95. </li>
  96. <li class="nav-item">
  97. <a href="#" class="nav-link">
  98. <i class="nav-icon bi bi-record-circle-fill"></i>
  99. <p>Level 3</p>
  100. </a>
  101. </li>
  102. </ul>
  103. </li>
  104. <li class="nav-item">
  105. <a href="#" class="nav-link">
  106. <i class="nav-icon bi bi-circle"></i>
  107. <p>Level 2</p>
  108. </a>
  109. </li>
  110. </ul>
  111. </li>
  112. <li class="nav-item">
  113. <a href="#" class="nav-link">
  114. <i class="nav-icon bi bi-circle-fill"></i>
  115. <p>Level 1</p>
  116. </a>
  117. </li>
  118. </ul>
  119. <!--end::Sidebar Menu-->
  120. </nav>
  121. </div>
  122. <!--end::Sidebar Wrapper-->
  123. </aside>
  124. <!--end::Sidebar-->
  125. <!--begin::App Main-->
  126. <main class="app-main">
  127. <!--begin::App Content Header-->
  128. <div class="app-content-header">
  129. <!--begin::Container-->
  130. <div class="container-fluid">
  131. <!--begin::Row-->
  132. <div class="row">
  133. <!--begin::Col-->
  134. <div class="col-sm-6">
  135. <h3 class="mb-0">Theme Customize</h3>
  136. </div>
  137. <!--end::Col-->
  138. <!--begin::Col-->
  139. <div class="col-sm-6">
  140. <ol class="breadcrumb float-sm-end">
  141. <li class="breadcrumb-item"><a href="#">Home</a></li>
  142. <li class="breadcrumb-item active" aria-current="page">
  143. Theme Customize
  144. </li>
  145. </ol>
  146. </div>
  147. <!--end::Col-->
  148. </div>
  149. <!--end::Row-->
  150. </div>
  151. <!--end::Container-->
  152. </div>
  153. <!--end::App Content Header-->
  154. <!--begin::App Content-->
  155. <div class="app-content">
  156. <!--begin::Container-->
  157. <div class="container-fluid">
  158. <!--begin::Row-->
  159. <div class="row">
  160. <!--begin::Col-->
  161. <div class="col-12">
  162. <!--begin::Card-->
  163. <div class="card">
  164. <!--begin::Card Header-->
  165. <div class="card-header">
  166. <!--begin::Card Title-->
  167. <h3 class="card-title">Sidebar Theme</h3>
  168. <!--end::Card Title-->
  169. <!--begin::Card Toolbar-->
  170. <div class="card-tools">
  171. <button
  172. type="button"
  173. class="btn btn-tool"
  174. data-lte-toggle="card-collapse"
  175. >
  176. <i data-lte-icon="expand" class="bi bi-plus-lg"></i>
  177. <i data-lte-icon="collapse" class="bi bi-dash-lg"></i>
  178. </button>
  179. <button
  180. type="button"
  181. class="btn btn-tool"
  182. data-lte-toggle="card-remove"
  183. title="Remove"
  184. >
  185. <i class="bi bi-x-lg"></i>
  186. </button>
  187. </div>
  188. <!--end::Card Toolbar-->
  189. </div>
  190. <!--end::Card Header-->
  191. <!--begin::Card Body-->
  192. <div class="card-body">
  193. <!--begin::Row-->
  194. <div class="row">
  195. <!--begin::Col-->
  196. <div class="col-md-3">
  197. <select
  198. id="sidebar-color-modes"
  199. class="form-select form-select-lg"
  200. aria-label="Sidebar Color Mode Select"
  201. >
  202. <option value="">---Select---</option>
  203. <option value="dark">Dark</option>
  204. <option value="light">Light</option>
  205. </select>
  206. </div>
  207. <!--end::Col-->
  208. <!--begin::Col-->
  209. <div class="col-md-3">
  210. <select
  211. id="sidebar-color"
  212. class="form-select form-select-lg"
  213. aria-label="Sidebar Color Select"
  214. >
  215. <option value="">---Select---</option>
  216. </select>
  217. </div>
  218. <!--end::Col-->
  219. <!--begin::Col-->
  220. <div class="col-md-6">
  221. <div id="sidebar-color-code" class="w-100"></div>
  222. </div>
  223. <!--end::Col-->
  224. </div>
  225. <!--end::Row-->
  226. </div>
  227. <!--end::Card Body-->
  228. <!--begin::Card Footer-->
  229. <div class="card-footer">
  230. Check more color in
  231. <a
  232. href="https://getbootstrap.com/docs/5.3/utilities/background/"
  233. target="_blank"
  234. class="link-primary">Bootstrap Background Colors</a
  235. >
  236. </div>
  237. <!--end::Card Footer-->
  238. </div>
  239. <!--end::Card-->
  240. <!--begin::Card-->
  241. <div class="card mt-4">
  242. <!--begin::Card Header-->
  243. <div class="card-header">
  244. <!--begin::Card Title-->
  245. <h3 class="card-title">Navbar Theme</h3>
  246. <!--end::Card Title-->
  247. <!--begin::Card Toolbar-->
  248. <div class="card-tools">
  249. <button
  250. type="button"
  251. class="btn btn-tool"
  252. data-lte-toggle="card-collapse"
  253. >
  254. <i data-lte-icon="expand" class="bi bi-plus-lg"></i>
  255. <i data-lte-icon="collapse" class="bi bi-dash-lg"></i>
  256. </button>
  257. <button
  258. type="button"
  259. class="btn btn-tool"
  260. data-lte-toggle="card-remove"
  261. title="Remove"
  262. >
  263. <i class="bi bi-x-lg"></i>
  264. </button>
  265. </div>
  266. <!--end::Card Toolbar-->
  267. </div>
  268. <!--end::Card Header-->
  269. <!--begin::Card Body-->
  270. <div class="card-body">
  271. <!--begin::Row-->
  272. <div class="row">
  273. <!--begin::Col-->
  274. <div class="col-md-3">
  275. <select
  276. id="navbar-color-modes"
  277. class="form-select form-select-lg"
  278. aria-label="Navbar Color Mode Select"
  279. >
  280. <option value="">---Select---</option>
  281. <option value="dark">Dark</option>
  282. <option value="light">Light</option>
  283. </select>
  284. </div>
  285. <!--end::Col-->
  286. <!--begin::Col-->
  287. <div class="col-md-3">
  288. <select
  289. id="navbar-color"
  290. class="form-select form-select-lg"
  291. aria-label="Navbar Color Select"
  292. >
  293. <option value="">---Select---</option>
  294. </select>
  295. </div>
  296. <!--end::Col-->
  297. <!--begin::Col-->
  298. <div class="col-md-6">
  299. <div id="navbar-color-code" class="w-100"></div>
  300. </div>
  301. <!--end::Col-->
  302. </div>
  303. <!--end::Row-->
  304. </div>
  305. <!--end::Card Body-->
  306. <!--begin::Card Footer-->
  307. <div class="card-footer">
  308. Check more color in
  309. <a
  310. href="https://getbootstrap.com/docs/5.3/utilities/background/"
  311. target="_blank"
  312. class="link-primary">Bootstrap Background Colors</a
  313. >
  314. </div>
  315. <!--end::Card Footer-->
  316. </div>
  317. <!--end::Card-->
  318. </div>
  319. <!--end::Col-->
  320. </div>
  321. <!--end::Row-->
  322. </div>
  323. <!--end::Container-->
  324. </div>
  325. <!--end::App Content-->
  326. </main>
  327. <!--end::App Main-->
  328. <Footer />
  329. </div>
  330. <!--end::App Wrapper-->
  331. <!--begin::Script-->
  332. <Scripts path={path} />
  333. <script is:inline>
  334. document.addEventListener("DOMContentLoaded", () => {
  335. const appSidebar = document.querySelector(".app-sidebar");
  336. const sidebarColorModes = document.querySelector(
  337. "#sidebar-color-modes",
  338. );
  339. const sidebarColor = document.querySelector("#sidebar-color");
  340. const sidebarColorCode = document.querySelector("#sidebar-color-code");
  341. const themeBg = [
  342. "bg-primary",
  343. "bg-primary-subtle",
  344. "bg-secondary",
  345. "bg-secondary-subtle",
  346. "bg-success",
  347. "bg-success-subtle",
  348. "bg-danger",
  349. "bg-danger-subtle",
  350. "bg-warning",
  351. "bg-warning-subtle",
  352. "bg-info",
  353. "bg-info-subtle",
  354. "bg-light",
  355. "bg-light-subtle",
  356. "bg-dark",
  357. "bg-dark-subtle",
  358. "bg-body-secondary",
  359. "bg-body-tertiary",
  360. "bg-body",
  361. "bg-black",
  362. "bg-white",
  363. "bg-transparent",
  364. ];
  365. // loop through each option themeBg array
  366. document.querySelector("#sidebar-color").innerHTML = themeBg.map(
  367. (bg) => {
  368. // return option element with value and text
  369. return `<option value="${bg}" class="text-${bg}">${bg}</option>`;
  370. },
  371. );
  372. let sidebarColorMode = "";
  373. let sidebarBg = "";
  374. function updateSidebar() {
  375. appSidebar.setAttribute("data-bs-theme", sidebarColorMode);
  376. sidebarColorCode.innerHTML = `<pre><code class="language-html">&lt;aside class="app-sidebar ${sidebarBg}" data-bs-theme="${sidebarColorMode}"&gt;...&lt;/aside&gt;</code></pre>`;
  377. }
  378. sidebarColorModes.addEventListener("input", (event) => {
  379. sidebarColorMode = event.target.value;
  380. updateSidebar();
  381. });
  382. sidebarColor.addEventListener("input", (event) => {
  383. sidebarBg = event.target.value;
  384. themeBg.forEach((className) => {
  385. appSidebar.classList.remove(className);
  386. });
  387. if (themeBg.includes(sidebarBg)) {
  388. appSidebar.classList.add(sidebarBg);
  389. }
  390. updateSidebar();
  391. });
  392. });
  393. document.addEventListener("DOMContentLoaded", () => {
  394. const appNavbar = document.querySelector(".app-header");
  395. const navbarColorModes = document.querySelector("#navbar-color-modes");
  396. const navbarColor = document.querySelector("#navbar-color");
  397. const navbarColorCode = document.querySelector("#navbar-color-code");
  398. const themeBg = [
  399. "bg-primary",
  400. "bg-primary-subtle",
  401. "bg-secondary",
  402. "bg-secondary-subtle",
  403. "bg-success",
  404. "bg-success-subtle",
  405. "bg-danger",
  406. "bg-danger-subtle",
  407. "bg-warning",
  408. "bg-warning-subtle",
  409. "bg-info",
  410. "bg-info-subtle",
  411. "bg-light",
  412. "bg-light-subtle",
  413. "bg-dark",
  414. "bg-dark-subtle",
  415. "bg-body-secondary",
  416. "bg-body-tertiary",
  417. "bg-body",
  418. "bg-black",
  419. "bg-white",
  420. "bg-transparent",
  421. ];
  422. // loop through each option themeBg array
  423. document.querySelector("#navbar-color").innerHTML = themeBg.map(
  424. (bg) => {
  425. // return option element with value and text
  426. return `<option value="${bg}" class="text-${bg}">${bg}</option>`;
  427. },
  428. );
  429. let navbarColorMode = "";
  430. let navbarBg = "";
  431. function updateNavbar() {
  432. appNavbar.setAttribute("data-bs-theme", navbarColorMode);
  433. navbarColorCode.innerHTML = `<pre><code class="language-html">&lt;nav class="app-header navbar navbar-expand ${navbarBg}" data-bs-theme="${navbarColorMode}"&gt;...&lt;/nav&gt;</code></pre>`;
  434. }
  435. navbarColorModes.addEventListener("input", (event) => {
  436. navbarColorMode = event.target.value;
  437. updateNavbar();
  438. });
  439. navbarColor.addEventListener("input", (event) => {
  440. navbarBg = event.target.value;
  441. themeBg.forEach((className) => {
  442. appNavbar.classList.remove(className);
  443. });
  444. if (themeBg.includes(navbarBg)) {
  445. appNavbar.classList.add(navbarBg);
  446. }
  447. updateNavbar();
  448. });
  449. });
  450. </script>
  451. <!--end::Script-->
  452. </body><!--end::Body-->
  453. </html>