ui-thing 0.1.9 → 0.1.11

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.
package/CHANGELOG.md CHANGED
@@ -1,18 +1,46 @@
1
1
  # Changelog
2
2
 
3
- ## v0.1.9
3
+ ## v0.1.11
4
4
 
5
- [compare changes](https://github.com/BayBreezy/ui-thing-cli/compare/v0.1.8...v0.1.9)
5
+ [compare changes](https://github.com/BayBreezy/ui-thing-cli/compare/v0.1.10...v0.1.11)
6
6
 
7
7
  ### 🏡 Chore
8
8
 
9
- - **form-elements:** Use nuxt's `useId` composable instead of the one from radix-vue ([17a952e](https://github.com/BayBreezy/ui-thing-cli/commit/17a952e))
10
- - Bump deps ([557e58c](https://github.com/BayBreezy/ui-thing-cli/commit/557e58c))
9
+ - Update component array ([7e94f02](https://github.com/BayBreezy/ui-thing-cli/commit/7e94f02))
11
10
 
12
11
  ### ❤️ Contributors
13
12
 
14
13
  - Behon Baker <behon.baker@yahoo.com>
15
14
 
15
+ ## v0.1.10
16
+
17
+ [compare changes](https://github.com/BayBreezy/ui-thing-cli/compare/v0.1.9...v0.1.10)
18
+
19
+ ### 🚀 Enhancements
20
+
21
+ - Add currency-input component ([bc0f75b](https://github.com/BayBreezy/ui-thing-cli/commit/bc0f75b))
22
+
23
+ ### 🏡 Chore
24
+
25
+ - Bump deps ([6e6dcf6](https://github.com/BayBreezy/ui-thing-cli/commit/6e6dcf6))
26
+
27
+ ### ❤️ Contributors
28
+
29
+ - BayBreezy <behon.baker@yahoo.com>
30
+
31
+ ## v0.1.9
32
+
33
+ [compare changes](https://github.com/BayBreezy/ui-thing-cli/compare/v0.1.8...v0.1.9)
34
+
35
+ ### 🏡 Chore
36
+
37
+ - **form-elements:** Use nuxt's `useId` composable instead of the one from radix-vue ([17a952e](https://github.com/BayBreezy/ui-thing-cli/commit/17a952e))
38
+ - Bump deps ([557e58c](https://github.com/BayBreezy/ui-thing-cli/commit/557e58c))
39
+
40
+ ### ❤️ Contributors
41
+
42
+ - Behon Baker <behon.baker@yahoo.com>
43
+
16
44
  ## v0.1.8
17
45
 
18
46
  [compare changes](https://github.com/BayBreezy/ui-thing-cli/compare/v0.1.7...v0.1.8)
package/dist/index.js CHANGED
@@ -2329,6 +2329,39 @@ export const buttonStyles = tv({
2329
2329
 
2330
2330
  const props = defineProps<ContextMenuTriggerProps>();
2331
2331
  </script>
2332
+ `}],utils:[],composables:[],plugins:[]},{name:"Currency Input",value:"currency-input",deps:["vue-currency-input"],files:[{fileName:"CurrencyInput.vue",dirPath:"components/UI",fileContent:`<template>\r
2333
+ <input ref="inputRef" type="text" :class="styles({ class: props.class })" v-bind="props" />\r
2334
+ </template>\r
2335
+ \r
2336
+ <script lang="ts" setup>\r
2337
+ import { defu } from "defu";\r
2338
+ import { useCurrencyInput } from "vue-currency-input";\r
2339
+ import type { CurrencyInputOptions } from "vue-currency-input";\r
2340
+ \r
2341
+ const props = defineProps<{\r
2342
+ class?: any;\r
2343
+ id?: string;\r
2344
+ name?: string;\r
2345
+ placeholder?: string;\r
2346
+ disabled?: boolean;\r
2347
+ required?: boolean;\r
2348
+ modelValue?: any;\r
2349
+ options?: CurrencyInputOptions;\r
2350
+ }>();\r
2351
+ \r
2352
+ const { inputRef } = useCurrencyInput(\r
2353
+ defu({}, props.options, {\r
2354
+ currency: "USD",\r
2355
+ locale: "en-US",\r
2356
+ hideCurrencySymbolOnFocus: false,\r
2357
+ hideGroupingSeparatorOnFocus: false,\r
2358
+ })\r
2359
+ );\r
2360
+ \r
2361
+ const styles = tv({\r
2362
+ base: "h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-[16px] ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground file:hover:cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:text-sm",\r
2363
+ });\r
2364
+ </script>\r
2332
2365
  `}],utils:[],composables:[],plugins:[]},{name:"DataTables.net",value:"datatable",deps:["datatables.net-buttons-dt","datatables.net-responsive-dt","datatables.net-searchbuilder-dt","datatables.net-select-dt","datatables.net-vue3","jszip"],plugins:[{fileName:"datatables.client.ts",dirPath:"plugins",fileContent:`import DataTablesCore from "datatables.net";
2333
2366
  import DataTable from "datatables.net-vue3";
2334
2367
  import JSZip from "jszip";
@@ -3414,57 +3447,57 @@ export default defineNuxtPlugin((nuxtApp) => {
3414
3447
  }\r
3415
3448
  }\r
3416
3449
  </style>\r
3417
- `}],utils:[],composables:[]},{name:"Date Field",value:"date-field",devDeps:["@internationalized/date"],files:[{fileName:"DateField.vue",dirPath:"components/UI",fileContent:`<template>
3418
- <DateFieldRoot
3419
- v-slot="{ segments, modelValue, isInvalid }"
3420
- :class="styles({ class: props.class })"
3421
- v-bind="props"
3422
- v-model="localModel"
3423
- >
3424
- <template v-for="item in segments" :key="item.part">
3425
- <DateFieldInput
3426
- v-if="item.part === 'literal'"
3427
- :part="item.part"
3428
- class="flex items-center justify-center text-muted-foreground"
3429
- >
3430
- <Icon :name="separatorIcon" class="text-muted-foreground" v-if="separatorIcon" />
3431
- <span class="mx-1 text-muted-foreground" v-else-if="separator">{{ separator }}</span>
3432
- </DateFieldInput>
3433
- <DateFieldInput
3434
- v-else
3435
- :part="item.part"
3436
- class="flex cursor-text items-center rounded px-1 transition focus:outline-none focus:ring-1 focus:ring-ring aria-[valuetext=Empty]:text-muted-foreground"
3437
- >
3438
- {{ item.value }}
3439
- </DateFieldInput>
3440
- </template>
3441
- </DateFieldRoot>
3442
- </template>
3443
-
3444
- <script lang="ts" setup>
3445
- import { type DateValue } from "@internationalized/date";
3446
- import { DateFieldInput, DateFieldRoot } from "radix-vue";
3447
- import type { DateFieldRootEmits, DateFieldRootProps } from "radix-vue";
3448
-
3449
- const props = withDefaults(
3450
- defineProps<
3451
- DateFieldRootProps & {
3452
- class?: any;
3453
- separator?: string;
3454
- separatorIcon?: string;
3455
- }
3456
- >(),
3457
- {
3458
- separator: "/",
3459
- }
3460
- );
3461
- const emits = defineEmits<DateFieldRootEmits>();
3462
- const localModel = defineModel<DateValue>();
3463
-
3464
- const styles = tv({
3465
- base: "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-[16px] ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground file:hover:cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 data-[disabled]:cursor-not-allowed data-[invalid]:border-destructive data-[disabled]:opacity-50 sm:text-sm",
3466
- });
3467
- </script>
3450
+ `}],utils:[],composables:[]},{name:"Date Field",value:"date-field",devDeps:["@internationalized/date"],files:[{fileName:"DateField.vue",dirPath:"components/UI",fileContent:`<template>\r
3451
+ <DateFieldRoot\r
3452
+ v-slot="{ segments, modelValue, isInvalid }"\r
3453
+ :class="styles({ class: props.class })"\r
3454
+ v-bind="props"\r
3455
+ v-model="localModel"\r
3456
+ >\r
3457
+ <template v-for="item in segments" :key="item.part">\r
3458
+ <DateFieldInput\r
3459
+ v-if="item.part === 'literal'"\r
3460
+ :part="item.part"\r
3461
+ class="flex items-center justify-center text-muted-foreground"\r
3462
+ >\r
3463
+ <Icon :name="separatorIcon" class="text-muted-foreground" v-if="separatorIcon" />\r
3464
+ <span class="mx-1 text-muted-foreground" v-else-if="separator">{{ separator }}</span>\r
3465
+ </DateFieldInput>\r
3466
+ <DateFieldInput\r
3467
+ v-else\r
3468
+ :part="item.part"\r
3469
+ class="flex cursor-text items-center rounded px-1 transition focus:outline-none focus:ring-1 focus:ring-ring aria-[valuetext=Empty]:text-muted-foreground"\r
3470
+ >\r
3471
+ {{ item.value }}\r
3472
+ </DateFieldInput>\r
3473
+ </template>\r
3474
+ </DateFieldRoot>\r
3475
+ </template>\r
3476
+ \r
3477
+ <script lang="ts" setup>\r
3478
+ import { type DateValue } from "@internationalized/date";\r
3479
+ import { DateFieldInput, DateFieldRoot } from "radix-vue";\r
3480
+ import type { DateFieldRootEmits, DateFieldRootProps } from "radix-vue";\r
3481
+ \r
3482
+ const props = withDefaults(\r
3483
+ defineProps<\r
3484
+ DateFieldRootProps & {\r
3485
+ class?: any;\r
3486
+ separator?: string;\r
3487
+ separatorIcon?: string;\r
3488
+ }\r
3489
+ >(),\r
3490
+ {\r
3491
+ separator: "/",\r
3492
+ }\r
3493
+ );\r
3494
+ const emits = defineEmits<DateFieldRootEmits>();\r
3495
+ const localModel = defineModel<DateValue>();\r
3496
+ \r
3497
+ const styles = tv({\r
3498
+ base: "h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-[16px] ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground file:hover:cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 data-[disabled]:cursor-not-allowed data-[invalid]:border-destructive data-[disabled]:opacity-50 sm:text-sm",\r
3499
+ });\r
3500
+ </script>\r
3468
3501
  `}],utils:[],composables:[],plugins:[]},{name:"Datepicker",value:"datepicker",devDeps:["@samk-dev/nuxt-vcalendar"],nuxtModules:["@samk-dev/nuxt-vcalendar"],instructions:["You can customize the datepicker by adding options to your nuxt.config.js file"],files:[{fileName:"Datepicker.vue",dirPath:"components/UI",fileContent:`<template>
3469
3502
  <ClientOnly>
3470
3503
  <VDatePicker
@@ -4891,33 +4924,33 @@ export function useFormField() {
4891
4924
  defineOptions({ inheritAttrs: false });
4892
4925
  const props = defineProps<HoverCardTriggerProps>();
4893
4926
  </script>
4894
- `}],utils:[],composables:[],plugins:[]},{name:"Input",value:"input",devDeps:["@vueuse/core"],files:[{fileName:"Input.vue",dirPath:"components/UI",fileContent:`<template>
4895
- <input :class="styles({ class: props.class })" v-bind="props" v-model="localModel" />
4896
- </template>
4897
-
4898
- <script lang="ts" setup>
4899
- const props = withDefaults(
4900
- defineProps<{
4901
- class?: any;
4902
- id?: string;
4903
- name?: string;
4904
- placeholder?: string;
4905
- disabled?: boolean;
4906
- required?: boolean;
4907
- type?: string;
4908
- modelValue?: any;
4909
- }>(),
4910
- { type: "text" }
4911
- );
4912
- const emits = defineEmits<{
4913
- "update:modelValue": [value: any];
4914
- }>();
4915
- const localModel = useVModel(props, "modelValue", emits);
4916
-
4917
- const styles = tv({
4918
- base: "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-[16px] ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground file:hover:cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:text-sm",
4919
- });
4920
- </script>
4927
+ `}],utils:[],composables:[],plugins:[]},{name:"Input",value:"input",devDeps:["@vueuse/core"],files:[{fileName:"Input.vue",dirPath:"components/UI",fileContent:`<template>\r
4928
+ <input :class="styles({ class: props.class })" v-bind="props" v-model="localModel" />\r
4929
+ </template>\r
4930
+ \r
4931
+ <script lang="ts" setup>\r
4932
+ const props = withDefaults(\r
4933
+ defineProps<{\r
4934
+ class?: any;\r
4935
+ id?: string;\r
4936
+ name?: string;\r
4937
+ placeholder?: string;\r
4938
+ disabled?: boolean;\r
4939
+ required?: boolean;\r
4940
+ type?: string;\r
4941
+ modelValue?: any;\r
4942
+ }>(),\r
4943
+ { type: "text" }\r
4944
+ );\r
4945
+ const emits = defineEmits<{\r
4946
+ "update:modelValue": [value: any];\r
4947
+ }>();\r
4948
+ const localModel = useVModel(props, "modelValue", emits);\r
4949
+ \r
4950
+ const styles = tv({\r
4951
+ base: "h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-[16px] ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground file:hover:cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:text-sm",\r
4952
+ });\r
4953
+ </script>\r
4921
4954
  `}],utils:[],composables:[],plugins:[]},{name:"Keyboard Key",value:"kbd",files:[{fileName:"Kbd.vue",dirPath:"components/UI",fileContent:`<template>
4922
4955
  <Primitive
4923
4956
  :class="styles({ size, class: props.class })"
@@ -5591,64 +5624,64 @@ export function useFormField() {
5591
5624
  base: "flex cursor-pointer select-none items-center rounded-sm px-3 py-1.5 text-sm font-medium outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-[highlighted]:bg-accent data-[state=open]:bg-accent data-[highlighted]:text-accent-foreground data-[state=open]:text-accent-foreground",
5592
5625
  });
5593
5626
  </script>
5594
- `}],utils:[],composables:[],plugins:[]},{name:"Native Select",value:"native-select",devDeps:["@vueuse/core"],files:[{fileName:"NativeSelect.vue",dirPath:"components/UI",fileContent:`<template>
5595
- <div class="relative">
5596
- <select
5597
- ref="select"
5598
- :multiple="multiple"
5599
- :name="name"
5600
- :size="size"
5601
- :id="id"
5602
- :placeholder="placeholder"
5603
- :disabled="disabled"
5604
- :required="required"
5605
- v-model="localModel"
5606
- :class="styles({ class: props.class })"
5607
- >
5608
- <slot></slot>
5609
- </select>
5610
- <span class="pointer-events-none absolute inset-y-0 right-3 flex items-center justify-center">
5611
- <slot name="trailingIcon">
5612
- <Icon
5613
- :name="trailingIcon || 'lucide:chevrons-up-down'"
5614
- class="h-4 w-4 text-muted-foreground"
5615
- />
5616
- </slot>
5617
- </span>
5618
- </div>
5619
- </template>
5620
-
5621
- <script lang="ts" setup>
5622
- const props = defineProps<{
5623
- class?: any;
5624
- id?: string;
5625
- name?: string;
5626
- placeholder?: string;
5627
- disabled?: boolean;
5628
- required?: boolean;
5629
- modelValue?: any;
5630
- multiple?: boolean;
5631
- size?: number;
5632
- autofocus?: boolean;
5633
- trailingIcon?: string;
5634
- }>();
5635
- const styles = tv({
5636
- base: "flex h-10 w-full appearance-none rounded-md border border-input bg-background px-3 py-2 pr-10 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:text-sm",
5637
- });
5638
-
5639
- const select = ref<HTMLSelectElement | null>(null);
5640
- const emits = defineEmits<{
5641
- "update:modelValue": [value: any];
5642
- }>();
5643
-
5644
- const localModel = useVModel(props, "modelValue", emits);
5645
-
5646
- onMounted(() => {
5647
- if (props.autofocus) {
5648
- select.value?.focus();
5649
- }
5650
- });
5651
- </script>
5627
+ `}],utils:[],composables:[],plugins:[]},{name:"Native Select",value:"native-select",devDeps:["@vueuse/core"],files:[{fileName:"NativeSelect.vue",dirPath:"components/UI",fileContent:`<template>\r
5628
+ <div class="relative">\r
5629
+ <select\r
5630
+ ref="select"\r
5631
+ :multiple="multiple"\r
5632
+ :name="name"\r
5633
+ :size="size"\r
5634
+ :id="id"\r
5635
+ :placeholder="placeholder"\r
5636
+ :disabled="disabled"\r
5637
+ :required="required"\r
5638
+ v-model="localModel"\r
5639
+ :class="styles({ class: props.class })"\r
5640
+ >\r
5641
+ <slot></slot>\r
5642
+ </select>\r
5643
+ <span class="pointer-events-none absolute inset-y-0 right-3 flex items-center justify-center">\r
5644
+ <slot name="trailingIcon">\r
5645
+ <Icon\r
5646
+ :name="trailingIcon || 'lucide:chevrons-up-down'"\r
5647
+ class="h-4 w-4 text-muted-foreground"\r
5648
+ />\r
5649
+ </slot>\r
5650
+ </span>\r
5651
+ </div>\r
5652
+ </template>\r
5653
+ \r
5654
+ <script lang="ts" setup>\r
5655
+ const props = defineProps<{\r
5656
+ class?: any;\r
5657
+ id?: string;\r
5658
+ name?: string;\r
5659
+ placeholder?: string;\r
5660
+ disabled?: boolean;\r
5661
+ required?: boolean;\r
5662
+ modelValue?: any;\r
5663
+ multiple?: boolean;\r
5664
+ size?: number;\r
5665
+ autofocus?: boolean;\r
5666
+ trailingIcon?: string;\r
5667
+ }>();\r
5668
+ const styles = tv({\r
5669
+ base: "h-10 w-full appearance-none rounded-md border border-input bg-background px-3 py-2 pr-10 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:text-sm",\r
5670
+ });\r
5671
+ \r
5672
+ const select = ref<HTMLSelectElement | null>(null);\r
5673
+ const emits = defineEmits<{\r
5674
+ "update:modelValue": [value: any];\r
5675
+ }>();\r
5676
+ \r
5677
+ const localModel = useVModel(props, "modelValue", emits);\r
5678
+ \r
5679
+ onMounted(() => {\r
5680
+ if (props.autofocus) {\r
5681
+ select.value?.focus();\r
5682
+ }\r
5683
+ });\r
5684
+ </script>\r
5652
5685
  `}],utils:[],composables:[],plugins:[]},{name:"Navbar",value:"navbar",files:[{fileName:"Navbar.vue",dirPath:"components/UI",fileContent:`<template>
5653
5686
  <Primitive :class="styles({ sticky, class: props.class })" v-bind="reactiveOmit(props, 'class')">
5654
5687
  <slot> </slot>
@@ -8917,6 +8950,75 @@ export { toast, useToast };
8917
8950
  }
8918
8951
  );
8919
8952
  </script>
8953
+ `}],utils:[],composables:[],plugins:[]},{name:"VeeCurrencyInput",value:"vee-currency-input",deps:["@vee-validate/nuxt","@morev/vue-transitions"],askValidator:!0,nuxtModules:["@vee-validate/nuxt","@morev/vue-transitions/nuxt"],components:["currency-input","label"],files:[{fileName:"Vee/CurrencyInput.vue",dirPath:"components/UI",fileContent:`<template>\r
8954
+ <div class="w-full">\r
8955
+ <UiLabel\r
8956
+ :for="inputId"\r
8957
+ v-if="label"\r
8958
+ :hint="labelHint"\r
8959
+ :class="[disabled && 'text-muted-foreground', errorMessage && 'text-destructive', 'mb-2']"\r
8960
+ >{{ label }}</UiLabel\r
8961
+ >\r
8962
+ <div class="relative">\r
8963
+ <slot name="icon">\r
8964
+ <span v-if="hasIcon" class="absolute inset-y-0 left-3 flex items-center justify-center">\r
8965
+ <Icon :name="icon" v-if="icon" class="h-4 w-4 text-muted-foreground/70" />\r
8966
+ </span>\r
8967
+ </slot>\r
8968
+ <UiCurrencyInput\r
8969
+ type="text"\r
8970
+ v-model="value"\r
8971
+ :id="inputId"\r
8972
+ :name="name"\r
8973
+ :disabled="disabled"\r
8974
+ v-bind="$attrs"\r
8975
+ :class="[hasIcon && 'pl-9']"\r
8976
+ :placeholder="placeholder"\r
8977
+ :options="options"\r
8978
+ />\r
8979
+ </div>\r
8980
+ <TransitionSlide group tag="div">\r
8981
+ <p key="hint" class="mt-1.5 text-sm text-muted-foreground" v-if="hint && !errorMessage">\r
8982
+ {{ hint }}\r
8983
+ </p>\r
8984
+ \r
8985
+ <p key="errorMessage" class="mt-1.5 text-sm text-destructive" v-if="errorMessage">\r
8986
+ {{ errorMessage }}\r
8987
+ </p>\r
8988
+ </TransitionSlide>\r
8989
+ </div>\r
8990
+ </template>\r
8991
+ \r
8992
+ <script lang="ts" setup>\r
8993
+ import type { CurrencyInputOptions } from "vue-currency-input";\r
8994
+ \r
8995
+ const props = defineProps<{\r
8996
+ label?: string;\r
8997
+ labelHint?: string;\r
8998
+ icon?: string;\r
8999
+ hint?: string;\r
9000
+ disabled?: boolean;\r
9001
+ modelValue?: string;\r
9002
+ name?: string;\r
9003
+ id?: string;\r
9004
+ rules?: any;\r
9005
+ validateOnMount?: boolean;\r
9006
+ type?: string;\r
9007
+ placeholder?: string;\r
9008
+ options?: CurrencyInputOptions;\r
9009
+ }>();\r
9010
+ \r
9011
+ const inputId = useId();\r
9012
+ \r
9013
+ const hasIcon = computed(() => Boolean(props.icon) || Boolean(useSlots().icon));\r
9014
+ \r
9015
+ const { errorMessage, value } = useField(() => props.name || inputId, props.rules, {\r
9016
+ initialValue: props.modelValue,\r
9017
+ label: props.label,\r
9018
+ validateOnMount: props.validateOnMount,\r
9019
+ syncVModel: true,\r
9020
+ });\r
9021
+ </script>\r
8920
9022
  `}],utils:[],composables:[],plugins:[]},{name:"VeeDatepicker",value:"vee-datepicker",deps:["@vee-validate/nuxt","@morev/vue-transitions"],askValidator:!0,nuxtModules:["@vee-validate/nuxt","@morev/vue-transitions/nuxt"],components:["datepicker","label","input"],files:[{fileName:"Vee/Datepicker.vue",dirPath:"components/UI",fileContent:`<template>
8921
9023
  <div class="w-full">
8922
9024
  <UiLabel