adminforth 1.1.31 → 1.1.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/index.js +9 -0
  2. package/dist/modules/codeInjector.js +19 -7
  3. package/dist/modules/styles.js +2 -2
  4. package/dist/spa/index.html +4 -4
  5. package/dist/spa/package-lock.json +206 -5
  6. package/dist/spa/package.json +8 -2
  7. package/dist/spa/src/App.vue +171 -72
  8. package/dist/spa/src/assets/logo.svg +19 -1
  9. package/dist/spa/src/components/AcceptModal.vue +3 -10
  10. package/dist/spa/src/components/BreadcrumbsWithButtons.vue +1 -1
  11. package/dist/spa/src/components/CustomDatePicker.vue +19 -6
  12. package/dist/spa/src/components/CustomDateRangePicker.vue +14 -5
  13. package/dist/spa/src/components/Dropdown.vue +19 -5
  14. package/dist/spa/src/components/Filters.vue +91 -37
  15. package/dist/spa/src/components/MenuLink.vue +2 -2
  16. package/dist/spa/src/components/ResourceForm.vue +163 -103
  17. package/dist/spa/src/components/ValueRenderer.vue +22 -6
  18. package/dist/spa/src/main.ts +1 -1
  19. package/dist/spa/src/router/index.ts +30 -19
  20. package/dist/spa/src/stores/core.ts +65 -59
  21. package/dist/spa/src/stores/modal.ts +13 -3
  22. package/dist/spa/src/utils.ts +65 -8
  23. package/dist/spa/src/views/CreateView.vue +76 -16
  24. package/dist/spa/src/views/EditView.vue +76 -14
  25. package/dist/spa/src/views/ListView.vue +88 -360
  26. package/dist/spa/src/views/LoginView.vue +17 -5
  27. package/dist/spa/src/views/ResourceParent.vue +1 -1
  28. package/dist/spa/src/views/ShowView.vue +114 -19
  29. package/dist/spa/tailwind.config.js +5 -2
  30. package/dist/spa/vite.config.ts +6 -0
  31. package/index.ts +11 -0
  32. package/modules/codeInjector.ts +19 -1
  33. package/modules/styles.ts +2 -2
  34. package/package.json +1 -1
  35. package/spa/index.html +1 -1
  36. package/spa/src/App.vue +3 -2
  37. package/spa/src/components/ResourceForm.vue +1 -1
  38. package/types/AdminForthConfig.ts +15 -0
  39. package/dist/plugins/AccessControl/index.js +0 -13
  40. package/dist/plugins/AccessControl/types.js +0 -1
  41. package/dist/plugins/plugins/ForeignInlineListPlugin/custom/InlineList.vue +0 -248
  42. package/dist/spa/public/favicon.ico +0 -0
  43. package/dist/spa/spa/.eslintrc.cjs +0 -14
  44. package/dist/spa/spa/.vscode/extensions.json +0 -6
  45. package/dist/spa/spa/README.md +0 -39
  46. package/dist/spa/spa/env.d.ts +0 -1
  47. package/dist/spa/spa/index.html +0 -23
  48. package/dist/spa/spa/package-lock.json +0 -4359
  49. package/dist/spa/spa/package.json +0 -47
  50. package/dist/spa/spa/postcss.config.js +0 -6
  51. package/dist/spa/spa/public/favicon.ico +0 -0
  52. package/dist/spa/spa/src/App.vue +0 -270
  53. package/dist/spa/spa/src/assets/base.css +0 -0
  54. package/dist/spa/spa/src/assets/logo.svg +0 -19
  55. package/dist/spa/spa/src/components/AcceptModal.vue +0 -45
  56. package/dist/spa/spa/src/components/Breadcrumbs.vue +0 -40
  57. package/dist/spa/spa/src/components/BreadcrumbsWithButtons.vue +0 -26
  58. package/dist/spa/spa/src/components/CustomDatePicker.vue +0 -174
  59. package/dist/spa/spa/src/components/CustomDateRangePicker.vue +0 -218
  60. package/dist/spa/spa/src/components/Dropdown.vue +0 -168
  61. package/dist/spa/spa/src/components/Filters.vue +0 -211
  62. package/dist/spa/spa/src/components/HelloWorld.vue +0 -17
  63. package/dist/spa/spa/src/components/MenuLink.vue +0 -24
  64. package/dist/spa/spa/src/components/ResourceForm.vue +0 -265
  65. package/dist/spa/spa/src/components/ShowTableItem.vue +0 -14
  66. package/dist/spa/spa/src/components/SingleSkeletLoader.vue +0 -13
  67. package/dist/spa/spa/src/components/ValueRenderer.vue +0 -60
  68. package/dist/spa/spa/src/components/icons/IconCalendar.vue +0 -5
  69. package/dist/spa/spa/src/components/icons/IconCommunity.vue +0 -7
  70. package/dist/spa/spa/src/components/icons/IconDocumentation.vue +0 -7
  71. package/dist/spa/spa/src/components/icons/IconEcosystem.vue +0 -7
  72. package/dist/spa/spa/src/components/icons/IconSupport.vue +0 -7
  73. package/dist/spa/spa/src/components/icons/IconTime.vue +0 -5
  74. package/dist/spa/spa/src/components/icons/IconTooling.vue +0 -19
  75. package/dist/spa/spa/src/index.scss +0 -26
  76. package/dist/spa/spa/src/main.ts +0 -18
  77. package/dist/spa/spa/src/router/index.ts +0 -64
  78. package/dist/spa/spa/src/stores/core.ts +0 -144
  79. package/dist/spa/spa/src/stores/modal.ts +0 -48
  80. package/dist/spa/spa/src/utils.ts +0 -101
  81. package/dist/spa/spa/src/views/CreateView.vue +0 -163
  82. package/dist/spa/spa/src/views/EditView.vue +0 -165
  83. package/dist/spa/spa/src/views/HomeView.vue +0 -8
  84. package/dist/spa/spa/src/views/ListView.vue +0 -257
  85. package/dist/spa/spa/src/views/LoginView.vue +0 -134
  86. package/dist/spa/spa/src/views/ResourceParent.vue +0 -18
  87. package/dist/spa/spa/src/views/ShowView.vue +0 -188
  88. package/dist/spa/spa/tailwind.config.js +0 -15
  89. package/dist/spa/spa/tsconfig.app.json +0 -14
  90. package/dist/spa/spa/tsconfig.json +0 -11
  91. package/dist/spa/spa/tsconfig.node.json +0 -19
  92. package/dist/spa/spa/vite.config.ts +0 -49
  93. package/dist/spa/src/views/HomeView.vue +0 -8
  94. package/dist/types.js +0 -30
  95. /package/dist/spa/{spa/public → public/assets}/favicon.png +0 -0
  96. /package/dist/spa/{spa/src → src}/components/CustomRangePicker.vue +0 -0
  97. /package/dist/spa/{spa/src → src}/components/ResourceListTable.vue +0 -0
  98. /package/dist/spa/{spa/src → src}/components/Toast.vue +0 -0
  99. /package/dist/spa/{spa/src → src}/composables/useFrontendApi.ts +0 -0
  100. /package/dist/spa/{spa/src → src}/composables/useStores.ts +0 -0
  101. /package/dist/spa/{spa/src → src}/spa_types/core.ts +0 -0
  102. /package/dist/spa/{spa/src → src}/stores/filters.ts +0 -0
  103. /package/dist/spa/{spa/src → src}/stores/toast.ts +0 -0
  104. /package/dist/spa/{spa/src → src}/stores/user.ts +0 -0
  105. /package/spa/public/{favicon.png → assets/favicon.png} +0 -0
package/dist/index.js CHANGED
@@ -123,12 +123,21 @@ class AdminForth {
123
123
  if (!this.config.baseUrl) {
124
124
  this.config.baseUrl = '';
125
125
  }
126
+ if (!this.config.baseUrl.endsWith('/')) {
127
+ this.baseUrlSlashed = this.config.baseUrl + '/';
128
+ }
129
+ else {
130
+ this.baseUrlSlashed = this.config.baseUrl;
131
+ }
126
132
  if (!((_b = this.config) === null || _b === void 0 ? void 0 : _b.customization.brandName)) {
127
133
  this.config.customization.brandName = 'AdminForth';
128
134
  }
129
135
  if (this.config.customization.brandLogo) {
130
136
  errors.push(...this.checkCustomFileExists(this.config.customization.brandLogo));
131
137
  }
138
+ if (!this.config.customization.favicon) {
139
+ errors.push(...this.checkCustomFileExists(this.config.customization.favicon));
140
+ }
132
141
  if (!this.config.customization.datesFormat) {
133
142
  this.config.customization.datesFormat = 'MMM D, YYYY HH:mm:ss';
134
143
  }
@@ -87,7 +87,7 @@ class CodeInjector {
87
87
  }
88
88
  prepareSources(_a) {
89
89
  return __awaiter(this, arguments, void 0, function* ({ filesUpdated, verbose = false }) {
90
- var _b, _c, _d, _e, _f, _g, _h, _j;
90
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
91
91
  // check SPA_TMP_PATH exists and create if not
92
92
  try {
93
93
  yield fs.promises.access(CodeInjector.SPA_TMP_PATH, fs.constants.F_OK);
@@ -191,6 +191,15 @@ class CodeInjector {
191
191
  if ((_b = this.adminforth.config.customization) === null || _b === void 0 ? void 0 : _b.customComponentsDir) {
192
192
  this.srcFoldersToSync[this.adminforth.config.customization.customComponentsDir] = './';
193
193
  }
194
+ // if this.adminforth.config.customization.favicon is set, copy it to assets
195
+ const customFav = (_c = this.adminforth.config.customization) === null || _c === void 0 ? void 0 : _c.favicon;
196
+ if (customFav) {
197
+ const faviconPath = path.join((_d = this.adminforth.config.customization) === null || _d === void 0 ? void 0 : _d.customComponentsDir, customFav.replace('@@/', ''));
198
+ const dest = path.join(CodeInjector.SPA_TMP_PATH, 'public', 'assets', customFav.replace('@@/', ''));
199
+ // make sure all folders in dest exist
200
+ yield fsExtra.ensureDir(path.dirname(dest));
201
+ yield fsExtra.copy(faviconPath, dest);
202
+ }
194
203
  for (const [src, dest] of Object.entries(this.srcFoldersToSync)) {
195
204
  const to = path.join(CodeInjector.SPA_TMP_PATH, 'src', 'custom', dest);
196
205
  if (process.env.HEAVY_DEBUG) {
@@ -278,7 +287,7 @@ class CodeInjector {
278
287
  }
279
288
  let imports = iconImports + '\n';
280
289
  imports += customComponentsImports + '\n';
281
- if ((_c = this.adminforth.config.customization) === null || _c === void 0 ? void 0 : _c.vueUsesFile) {
290
+ if ((_e = this.adminforth.config.customization) === null || _e === void 0 ? void 0 : _e.vueUsesFile) {
282
291
  imports += `import addCustomUses from '${this.adminforth.config.customization.vueUsesFile}';\n`;
283
292
  }
284
293
  // inject that code into spa_tmp/src/App.vue
@@ -286,13 +295,13 @@ class CodeInjector {
286
295
  let appVueContent = yield fs.promises.readFile(appVuePath, 'utf-8');
287
296
  appVueContent = appVueContent.replace('/* IMPORTANT:ADMINFORTH IMPORTS */', imports);
288
297
  appVueContent = appVueContent.replace('/* IMPORTANT:ADMINFORTH COMPONENT REGISTRATIONS */', iconComponents + '\n' + customComponentsComponents + '\n');
289
- if ((_d = this.adminforth.config.customization) === null || _d === void 0 ? void 0 : _d.vueUsesFile) {
298
+ if ((_f = this.adminforth.config.customization) === null || _f === void 0 ? void 0 : _f.vueUsesFile) {
290
299
  appVueContent = appVueContent.replace('/* IMPORTANT:ADMINFORTH CUSTOM USES */', 'addCustomUses(app);');
291
300
  }
292
301
  yield fs.promises.writeFile(appVuePath, appVueContent);
293
302
  // generate tailwind extend styles
294
- if ((_e = this.adminforth.config) === null || _e === void 0 ? void 0 : _e.styles) {
295
- const tailwindStyles = (_f = this.adminforth.config) === null || _f === void 0 ? void 0 : _f.styles;
303
+ if ((_g = this.adminforth.config) === null || _g === void 0 ? void 0 : _g.styles) {
304
+ const tailwindStyles = (_h = this.adminforth.config) === null || _h === void 0 ? void 0 : _h.styles;
296
305
  const stylesText = JSON.stringify(tailwindStyles, null, 2).slice(1, -1);
297
306
  let tailwindConfigPath = path.join(CodeInjector.SPA_TMP_PATH, 'tailwind.config.js');
298
307
  let tailwindConfigContent = yield fs.promises.readFile(tailwindConfigPath, 'utf-8');
@@ -312,14 +321,17 @@ class CodeInjector {
312
321
  const indexHtmlPath = path.join(CodeInjector.SPA_TMP_PATH, 'index.html');
313
322
  let indexHtmlContent = yield fs.promises.readFile(indexHtmlPath, 'utf-8');
314
323
  indexHtmlContent = indexHtmlContent.replace('/* IMPORTANT:ADMINFORTH TITLE */', `${this.adminforth.config.customization.title || 'AdminForth'}`);
324
+ indexHtmlContent = indexHtmlContent.replace('/* IMPORTANT:ADMINFORTH FAVICON */', ((_j = this.adminforth.config.customization.favicon) === null || _j === void 0 ? void 0 : _j.replace('@@/', `${this.adminforth.baseUrlSlashed}assets/`))
325
+ ||
326
+ `${this.adminforth.baseUrlSlashed}assets/favicon.png`);
315
327
  yield fs.promises.writeFile(indexHtmlPath, indexHtmlContent);
316
328
  /* generate custom routes */
317
329
  const homepageMenuItem = this.adminforth.config.menu.find((mi) => mi.homepage);
318
330
  let childrenHomePageMenuItem = this.adminforth.config.menu.find((mi) => { var _a; return mi.children && ((_a = mi.children) === null || _a === void 0 ? void 0 : _a.find((mi) => mi.homepage)); });
319
- let childrenHomepage = (_g = childrenHomePageMenuItem === null || childrenHomePageMenuItem === void 0 ? void 0 : childrenHomePageMenuItem.children) === null || _g === void 0 ? void 0 : _g.find((mi) => mi.homepage);
331
+ let childrenHomepage = (_k = childrenHomePageMenuItem === null || childrenHomePageMenuItem === void 0 ? void 0 : childrenHomePageMenuItem.children) === null || _k === void 0 ? void 0 : _k.find((mi) => mi.homepage);
320
332
  let homePagePath = (homepageMenuItem === null || homepageMenuItem === void 0 ? void 0 : homepageMenuItem.path) || `/resource/${childrenHomepage === null || childrenHomepage === void 0 ? void 0 : childrenHomepage.resourceId}`;
321
333
  if (!homePagePath) {
322
- homePagePath = ((_h = this.adminforth.config.menu.filter((mi) => mi.path)[0]) === null || _h === void 0 ? void 0 : _h.path) || `/resource/${(_j = this.adminforth.config.menu.filter((mi) => mi.children)[0]) === null || _j === void 0 ? void 0 : _j.resourceId}`;
334
+ homePagePath = ((_l = this.adminforth.config.menu.filter((mi) => mi.path)[0]) === null || _l === void 0 ? void 0 : _l.path) || `/resource/${(_m = this.adminforth.config.menu.filter((mi) => mi.children)[0]) === null || _m === void 0 ? void 0 : _m.resourceId}`;
323
335
  }
324
336
  routes += `{
325
337
  path: '/',
@@ -27,10 +27,10 @@ export const styles = () => `
27
27
 
28
28
  "list-view-bg": "#FFFFFF", // White background
29
29
  "list-view-table-bg": "#FFFFFF", // White table background
30
- "list-view-table-heading": "#F5F5F5", // Very light grey heading
30
+ "list-view-table-heading": "rgb(249 250 251)", // Very light grey heading
31
31
  "list-view-table-heading-text": "#333333", // Dark grey heading text
32
32
  "list-view-table-text": "#333333", // Dark grey text
33
- "list-view-table-row-hover": "#F0F0F0", // Very light grey row hover
33
+ "list-view-table-row-hover": "rgb(249 250 251)", // Very light grey row hover
34
34
  "list-view-bread-crumbs-text": "#666666", // Medium grey bread crumbs
35
35
  "list-view-border-color": "#DDDDDD", // Light grey border
36
36
 
@@ -2,9 +2,9 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
- <link rel="icon" href="/favicon.ico">
5
+ <link rel="icon" href="/* IMPORTANT:ADMINFORTH FAVICON */">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <title>Vite App</title>
7
+ <title>/* IMPORTANT:ADMINFORTH TITLE */</title>
8
8
  <!--
9
9
  <script>
10
10
  // On page load or when changing themes, best to add inline in `head` to avoid FOUC
@@ -16,8 +16,8 @@
16
16
  </script> -->
17
17
 
18
18
  </head>
19
- <body>
20
- <div id="app" class="min-h-screen dark:bg-gray-800"></div>
19
+ <body class=" ">
20
+ <div id="app" class="min-h-screen bg-html-bg dark:bg-gray-800"></div>
21
21
  <script type="module" src="/src/main.ts"></script>
22
22
  </body>
23
23
  </html>
@@ -9,12 +9,18 @@
9
9
  "version": "0.0.0",
10
10
  "dependencies": {
11
11
  "@iconify-prerendered/vue-flowbite": "^0.23.1714023977",
12
+ "@unhead/vue": "^1.9.12",
13
+ "@vueuse/core": "^10.10.0",
12
14
  "dayjs": "^1.11.11",
15
+ "debounce": "^2.1.0",
13
16
  "flowbite": "^2.3.0",
14
17
  "flowbite-datepicker": "^1.2.6",
15
18
  "pinia": "^2.1.7",
19
+ "unhead": "^1.9.12",
20
+ "uuid": "^10.0.0",
16
21
  "vue": "^3.4.21",
17
- "vue-router": "^4.3.0"
22
+ "vue-router": "^4.3.0",
23
+ "vue-slider-component": "^4.1.0-beta.7"
18
24
  },
19
25
  "devDependencies": {
20
26
  "@rushstack/eslint-patch": "^1.8.0",
@@ -31,7 +37,7 @@
31
37
  "sass": "^1.77.2",
32
38
  "tailwindcss": "^3.4.3",
33
39
  "typescript": "~5.4.0",
34
- "vite": "^5.2.12",
40
+ "vite": "^5.2.13",
35
41
  "vue-tsc": "^2.0.11"
36
42
  }
37
43
  },
@@ -950,6 +956,11 @@
950
956
  "undici-types": "~5.26.4"
951
957
  }
952
958
  },
959
+ "node_modules/@types/web-bluetooth": {
960
+ "version": "0.0.20",
961
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
962
+ "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="
963
+ },
953
964
  "node_modules/@typescript-eslint/eslint-plugin": {
954
965
  "version": "7.9.0",
955
966
  "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz",
@@ -1141,6 +1152,58 @@
1141
1152
  "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
1142
1153
  "dev": true
1143
1154
  },
1155
+ "node_modules/@unhead/dom": {
1156
+ "version": "1.9.12",
1157
+ "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.9.12.tgz",
1158
+ "integrity": "sha512-3MY1TbZmEjGNZapi3wvJW0vWNS2CLKHt7/m57sScDHCNvNBe1mTwrIOhtZFDgAndhml2EVQ68RMa0Vhum/M+cw==",
1159
+ "dependencies": {
1160
+ "@unhead/schema": "1.9.12",
1161
+ "@unhead/shared": "1.9.12"
1162
+ },
1163
+ "funding": {
1164
+ "url": "https://github.com/sponsors/harlan-zw"
1165
+ }
1166
+ },
1167
+ "node_modules/@unhead/schema": {
1168
+ "version": "1.9.12",
1169
+ "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.9.12.tgz",
1170
+ "integrity": "sha512-ue2FKyIZKsuZDpWJBMlBGwMm4s+vFeU3NUWsNt8Z+2JkOUIqO/VG43LxNgY1M595bOS71Gdxk+G9VtzfKJ5uEA==",
1171
+ "dependencies": {
1172
+ "hookable": "^5.5.3",
1173
+ "zhead": "^2.2.4"
1174
+ },
1175
+ "funding": {
1176
+ "url": "https://github.com/sponsors/harlan-zw"
1177
+ }
1178
+ },
1179
+ "node_modules/@unhead/shared": {
1180
+ "version": "1.9.12",
1181
+ "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.9.12.tgz",
1182
+ "integrity": "sha512-72wlLXG3FP3sXUrwd42Uv8jYpHSg4R6IFJcsl+QisRjKM89JnjOFSw1DqWO4IOftW5xOxS4J5v7SQyJ4NJo7Bw==",
1183
+ "dependencies": {
1184
+ "@unhead/schema": "1.9.12"
1185
+ },
1186
+ "funding": {
1187
+ "url": "https://github.com/sponsors/harlan-zw"
1188
+ }
1189
+ },
1190
+ "node_modules/@unhead/vue": {
1191
+ "version": "1.9.12",
1192
+ "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.9.12.tgz",
1193
+ "integrity": "sha512-keE4EuswgzCqVU7zmZprU+ToMvNWc3s8NoLreH5AtJd2u0FgBygD8sxRVyEnZw1KwFYOJ2C7yD2TChSKZioPGQ==",
1194
+ "dependencies": {
1195
+ "@unhead/schema": "1.9.12",
1196
+ "@unhead/shared": "1.9.12",
1197
+ "hookable": "^5.5.3",
1198
+ "unhead": "1.9.12"
1199
+ },
1200
+ "funding": {
1201
+ "url": "https://github.com/sponsors/harlan-zw"
1202
+ },
1203
+ "peerDependencies": {
1204
+ "vue": ">=2.7 || >=3"
1205
+ }
1206
+ },
1144
1207
  "node_modules/@vitejs/plugin-vue": {
1145
1208
  "version": "5.0.4",
1146
1209
  "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz",
@@ -1330,6 +1393,89 @@
1330
1393
  "integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==",
1331
1394
  "dev": true
1332
1395
  },
1396
+ "node_modules/@vueuse/core": {
1397
+ "version": "10.10.0",
1398
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.10.0.tgz",
1399
+ "integrity": "sha512-vexJ/YXYs2S42B783rI95lMt3GzEwkxzC8Hb0Ndpd8rD+p+Lk/Za4bd797Ym7yq4jXqdSyj3JLChunF/vyYjUw==",
1400
+ "dependencies": {
1401
+ "@types/web-bluetooth": "^0.0.20",
1402
+ "@vueuse/metadata": "10.10.0",
1403
+ "@vueuse/shared": "10.10.0",
1404
+ "vue-demi": ">=0.14.7"
1405
+ },
1406
+ "funding": {
1407
+ "url": "https://github.com/sponsors/antfu"
1408
+ }
1409
+ },
1410
+ "node_modules/@vueuse/core/node_modules/vue-demi": {
1411
+ "version": "0.14.8",
1412
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz",
1413
+ "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
1414
+ "hasInstallScript": true,
1415
+ "bin": {
1416
+ "vue-demi-fix": "bin/vue-demi-fix.js",
1417
+ "vue-demi-switch": "bin/vue-demi-switch.js"
1418
+ },
1419
+ "engines": {
1420
+ "node": ">=12"
1421
+ },
1422
+ "funding": {
1423
+ "url": "https://github.com/sponsors/antfu"
1424
+ },
1425
+ "peerDependencies": {
1426
+ "@vue/composition-api": "^1.0.0-rc.1",
1427
+ "vue": "^3.0.0-0 || ^2.6.0"
1428
+ },
1429
+ "peerDependenciesMeta": {
1430
+ "@vue/composition-api": {
1431
+ "optional": true
1432
+ }
1433
+ }
1434
+ },
1435
+ "node_modules/@vueuse/metadata": {
1436
+ "version": "10.10.0",
1437
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.10.0.tgz",
1438
+ "integrity": "sha512-UNAo2sTCAW5ge6OErPEHb5z7NEAg3XcO9Cj7OK45aZXfLLH1QkexDcZD77HBi5zvEiLOm1An+p/4b5K3Worpug==",
1439
+ "funding": {
1440
+ "url": "https://github.com/sponsors/antfu"
1441
+ }
1442
+ },
1443
+ "node_modules/@vueuse/shared": {
1444
+ "version": "10.10.0",
1445
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.10.0.tgz",
1446
+ "integrity": "sha512-2aW33Ac0Uk0U+9yo3Ypg9s5KcR42cuehRWl7vnUHadQyFvCktseyxxEPBi1Eiq4D2yBGACOnqLZpx1eMc7g5Og==",
1447
+ "dependencies": {
1448
+ "vue-demi": ">=0.14.7"
1449
+ },
1450
+ "funding": {
1451
+ "url": "https://github.com/sponsors/antfu"
1452
+ }
1453
+ },
1454
+ "node_modules/@vueuse/shared/node_modules/vue-demi": {
1455
+ "version": "0.14.8",
1456
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz",
1457
+ "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
1458
+ "hasInstallScript": true,
1459
+ "bin": {
1460
+ "vue-demi-fix": "bin/vue-demi-fix.js",
1461
+ "vue-demi-switch": "bin/vue-demi-switch.js"
1462
+ },
1463
+ "engines": {
1464
+ "node": ">=12"
1465
+ },
1466
+ "funding": {
1467
+ "url": "https://github.com/sponsors/antfu"
1468
+ },
1469
+ "peerDependencies": {
1470
+ "@vue/composition-api": "^1.0.0-rc.1",
1471
+ "vue": "^3.0.0-0 || ^2.6.0"
1472
+ },
1473
+ "peerDependenciesMeta": {
1474
+ "@vue/composition-api": {
1475
+ "optional": true
1476
+ }
1477
+ }
1478
+ },
1333
1479
  "node_modules/acorn": {
1334
1480
  "version": "8.11.3",
1335
1481
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
@@ -1716,6 +1862,17 @@
1716
1862
  "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
1717
1863
  "dev": true
1718
1864
  },
1865
+ "node_modules/debounce": {
1866
+ "version": "2.1.0",
1867
+ "resolved": "https://registry.npmjs.org/debounce/-/debounce-2.1.0.tgz",
1868
+ "integrity": "sha512-OkL3+0pPWCqoBc/nhO9u6TIQNTK44fnBnzuVtJAbp13Naxw9R6u21x+8tVTka87AhDZ3htqZ2pSSsZl9fqL2Wg==",
1869
+ "engines": {
1870
+ "node": ">=18"
1871
+ },
1872
+ "funding": {
1873
+ "url": "https://github.com/sponsors/sindresorhus"
1874
+ }
1875
+ },
1719
1876
  "node_modules/debug": {
1720
1877
  "version": "4.3.4",
1721
1878
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -2369,6 +2526,11 @@
2369
2526
  "he": "bin/he"
2370
2527
  }
2371
2528
  },
2529
+ "node_modules/hookable": {
2530
+ "version": "5.5.3",
2531
+ "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
2532
+ "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="
2533
+ },
2372
2534
  "node_modules/ignore": {
2373
2535
  "version": "5.3.1",
2374
2536
  "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
@@ -3812,6 +3974,20 @@
3812
3974
  "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
3813
3975
  "dev": true
3814
3976
  },
3977
+ "node_modules/unhead": {
3978
+ "version": "1.9.12",
3979
+ "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.9.12.tgz",
3980
+ "integrity": "sha512-s6VxcTV45hy8c/IioKQOonFnAO+kBOSpgDfqEHhnU0YVSQYaRPEp9pzW1qSPf0lx+bg9RKeOQyNNbSGGUP26aQ==",
3981
+ "dependencies": {
3982
+ "@unhead/dom": "1.9.12",
3983
+ "@unhead/schema": "1.9.12",
3984
+ "@unhead/shared": "1.9.12",
3985
+ "hookable": "^5.5.3"
3986
+ },
3987
+ "funding": {
3988
+ "url": "https://github.com/sponsors/harlan-zw"
3989
+ }
3990
+ },
3815
3991
  "node_modules/update-browserslist-db": {
3816
3992
  "version": "1.0.16",
3817
3993
  "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
@@ -3857,10 +4033,22 @@
3857
4033
  "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
3858
4034
  "dev": true
3859
4035
  },
4036
+ "node_modules/uuid": {
4037
+ "version": "10.0.0",
4038
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
4039
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
4040
+ "funding": [
4041
+ "https://github.com/sponsors/broofa",
4042
+ "https://github.com/sponsors/ctavan"
4043
+ ],
4044
+ "bin": {
4045
+ "uuid": "dist/bin/uuid"
4046
+ }
4047
+ },
3860
4048
  "node_modules/vite": {
3861
- "version": "5.2.12",
3862
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz",
3863
- "integrity": "sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==",
4049
+ "version": "5.2.13",
4050
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.13.tgz",
4051
+ "integrity": "sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==",
3864
4052
  "dev": true,
3865
4053
  "dependencies": {
3866
4054
  "esbuild": "^0.20.1",
@@ -3970,6 +4158,11 @@
3970
4158
  "vue": "^3.2.0"
3971
4159
  }
3972
4160
  },
4161
+ "node_modules/vue-slider-component": {
4162
+ "version": "4.1.0-beta.7",
4163
+ "resolved": "https://registry.npmjs.org/vue-slider-component/-/vue-slider-component-4.1.0-beta.7.tgz",
4164
+ "integrity": "sha512-Qb7K920ZG7PoQswoF6Ias+i3W2rd3k4fpk04JUl82kEUcN86Yg6et7bVSKWt/7VpQe8a5IT3BqCKSCOZ7AJgCA=="
4165
+ },
3973
4166
  "node_modules/vue-template-compiler": {
3974
4167
  "version": "2.7.16",
3975
4168
  "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
@@ -4153,6 +4346,14 @@
4153
4346
  "funding": {
4154
4347
  "url": "https://github.com/sponsors/sindresorhus"
4155
4348
  }
4349
+ },
4350
+ "node_modules/zhead": {
4351
+ "version": "2.2.4",
4352
+ "resolved": "https://registry.npmjs.org/zhead/-/zhead-2.2.4.tgz",
4353
+ "integrity": "sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==",
4354
+ "funding": {
4355
+ "url": "https://github.com/sponsors/harlan-zw"
4356
+ }
4156
4357
  }
4157
4358
  }
4158
4359
  }
@@ -13,12 +13,18 @@
13
13
  },
14
14
  "dependencies": {
15
15
  "@iconify-prerendered/vue-flowbite": "^0.23.1714023977",
16
+ "@unhead/vue": "^1.9.12",
17
+ "@vueuse/core": "^10.10.0",
16
18
  "dayjs": "^1.11.11",
19
+ "debounce": "^2.1.0",
17
20
  "flowbite": "^2.3.0",
18
21
  "flowbite-datepicker": "^1.2.6",
19
22
  "pinia": "^2.1.7",
23
+ "unhead": "^1.9.12",
24
+ "uuid": "^10.0.0",
20
25
  "vue": "^3.4.21",
21
- "vue-router": "^4.3.0"
26
+ "vue-router": "^4.3.0",
27
+ "vue-slider-component": "^4.1.0-beta.7"
22
28
  },
23
29
  "devDependencies": {
24
30
  "@rushstack/eslint-patch": "^1.8.0",
@@ -35,7 +41,7 @@
35
41
  "sass": "^1.77.2",
36
42
  "tailwindcss": "^3.4.3",
37
43
  "typescript": "~5.4.0",
38
- "vite": "^5.2.12",
44
+ "vite": "^5.2.13",
39
45
  "vue-tsc": "^2.0.11"
40
46
  }
41
47
  }