ui-thing 0.1.34 → 0.1.36

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ui-thing",
3
- "version": "0.1.34",
3
+ "version": "0.1.36",
4
4
  "description": "CLI used to add Nuxt 3 components to a project",
5
5
  "keywords": [
6
6
  "cli",
@@ -38,7 +38,7 @@
38
38
  "test": "vitest"
39
39
  },
40
40
  "dependencies": {
41
- "axios": "^1.7.7",
41
+ "axios": "^1.7.8",
42
42
  "boxen": "^8.0.1",
43
43
  "build": "^0.1.4",
44
44
  "c12": "^2.0.1",
@@ -49,7 +49,7 @@
49
49
  "fs-extra": "^11.2.0",
50
50
  "kleur": "^4.1.5",
51
51
  "lodash": "^4.17.21",
52
- "nypm": "^0.3.12",
52
+ "nypm": "^0.4.1",
53
53
  "ora": "^8.1.1",
54
54
  "prompts": "^2.4.2"
55
55
  },
@@ -59,13 +59,13 @@
59
59
  "@types/figlet": "^1.7.0",
60
60
  "@types/fs-extra": "^11.0.4",
61
61
  "@types/lodash": "^4.17.13",
62
- "@types/node": "^22.9.1",
62
+ "@types/node": "^22.10.1",
63
63
  "@types/prompts": "^2.4.9",
64
- "@vitest/coverage-v8": "^2.1.5",
64
+ "@vitest/coverage-v8": "^2.1.6",
65
65
  "magicast": "^0.3.5",
66
66
  "tsup": "^8.3.5",
67
- "typescript": "^5.6.3",
68
- "vitest": "^2.1.5"
67
+ "typescript": "^5.7.2",
68
+ "vitest": "^2.1.6"
69
69
  },
70
70
  "publishConfig": {
71
71
  "access": "public"
package/src/comps.ts CHANGED
@@ -2196,7 +2196,7 @@ export default [
2196
2196
  fileName: "Sidebar/Provider.vue",
2197
2197
  dirPath: "components/UI",
2198
2198
  fileContent:
2199
- '<template>\n <UiTooltipProvider :delay-duration="0">\n <div\n :style="{\n \'--sidebar-width\': SIDEBAR_WIDTH,\n \'--sidebar-width-icon\': SIDEBAR_WIDTH_ICON,\n }"\n :class="sideBarProviderStyles({ class: props.class })"\n >\n <slot />\n </div>\n </UiTooltipProvider>\n</template>\n\n<script lang="ts">\n import type { HTMLAttributes, Ref } from "vue";\n\n export const sideBarProviderStyles = tv({\n base: "group/sidebar-wrapper flex min-h-svh w-full text-sidebar-foreground has-[[data-variant=inset]]:bg-sidebar",\n });\n</script>\n\n<script setup lang="ts">\n const props = withDefaults(\n defineProps<{\n /**\n * Default open state of the sidebar.\n * @default true\n */\n defaultOpen?: boolean;\n /**\n * Open state of the sidebar (controlled).\n * @default undefined\n */\n open?: boolean;\n /**\n * Additional classes to apply to the parent element.\n */\n class?: HTMLAttributes["class"];\n }>(),\n {\n defaultOpen: true,\n open: undefined,\n }\n );\n\n // This sets the cookie to keep the sidebar state.\n const SIDEBAR_COOKIE = useCookie<boolean>(SIDEBAR_COOKIE_NAME, {\n path: "/",\n maxAge: SIDEBAR_COOKIE_MAX_AGE,\n default: () => false,\n });\n\n const emits = defineEmits<{\n "update:open": [open: boolean];\n }>();\n\n const isMobile = useMediaQuery("(max-width: 768px)");\n const openMobile = ref(false);\n\n const open = useVModel(props, "open", emits, {\n defaultValue: props.defaultOpen ? props.defaultOpen : SIDEBAR_COOKIE.value,\n passive: (props.open === undefined) as false,\n }) as Ref<boolean>;\n\n function setOpen(value: boolean) {\n open.value = value; // emits(\'update:open\', value)\n SIDEBAR_COOKIE.value = value;\n }\n\n function setOpenMobile(value: boolean) {\n openMobile.value = value;\n }\n\n // Helper to toggle the sidebar.\n function toggleSidebar() {\n return isMobile.value ? setOpenMobile(!openMobile.value) : setOpen(!open.value);\n }\n\n useEventListener("keydown", (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n });\n\n // We add a state so that we can do data-state="expanded" or "collapsed".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = computed(() => (open.value ? "expanded" : "collapsed"));\n\n provideSidebarContext({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n });\n</script>\n',
2199
+ '<template>\n <UiTooltipProvider :delay-duration="0">\n <div\n :style="{\n \'--sidebar-width\': SIDEBAR_WIDTH,\n \'--sidebar-width-icon\': SIDEBAR_WIDTH_ICON,\n }"\n :class="sideBarProviderStyles({ class: props.class })"\n >\n <slot v-bind="{ state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar }" />\n </div>\n </UiTooltipProvider>\n</template>\n\n<script lang="ts">\n import type { HTMLAttributes, Ref } from "vue";\n\n export const sideBarProviderStyles = tv({\n base: "group/sidebar-wrapper flex min-h-svh w-full text-sidebar-foreground has-[[data-variant=inset]]:bg-sidebar",\n });\n</script>\n\n<script setup lang="ts">\n const props = withDefaults(\n defineProps<{\n /**\n * Default open state of the sidebar.\n * @default true\n */\n defaultOpen?: boolean;\n /**\n * Open state of the sidebar (controlled).\n * @default undefined\n */\n open?: boolean;\n /**\n * Additional classes to apply to the parent element.\n */\n class?: HTMLAttributes["class"];\n }>(),\n {\n defaultOpen: true,\n open: undefined,\n }\n );\n\n // This sets the cookie to keep the sidebar state.\n const SIDEBAR_COOKIE = useCookie<boolean>(SIDEBAR_COOKIE_NAME, {\n path: "/",\n maxAge: SIDEBAR_COOKIE_MAX_AGE,\n default: () => false,\n });\n\n const emits = defineEmits<{\n "update:open": [open: boolean];\n }>();\n\n const isMobile = useMediaQuery("(max-width: 768px)");\n const openMobile = ref(false);\n\n const open = useVModel(props, "open", emits, {\n defaultValue: props.defaultOpen ? props.defaultOpen : SIDEBAR_COOKIE.value,\n passive: (props.open === undefined) as false,\n }) as Ref<boolean>;\n\n function setOpen(value: boolean) {\n open.value = value; // emits(\'update:open\', value)\n SIDEBAR_COOKIE.value = value;\n }\n\n function setOpenMobile(value: boolean) {\n openMobile.value = value;\n }\n\n // Helper to toggle the sidebar.\n function toggleSidebar() {\n return isMobile.value ? setOpenMobile(!openMobile.value) : setOpen(!open.value);\n }\n\n useEventListener("keydown", (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n });\n\n // We add a state so that we can do data-state="expanded" or "collapsed".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = computed(() => (open.value ? "expanded" : "collapsed"));\n\n provideSidebarContext({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n });\n</script>\n',
2200
2200
  },
2201
2201
  {
2202
2202
  fileName: "Sidebar/Rail.vue",
@@ -2736,7 +2736,7 @@ export default [
2736
2736
  plugins: [],
2737
2737
  },
2738
2738
  {
2739
- name: "VeeCheckbox",
2739
+ name: "Vee Checkbox",
2740
2740
  value: "vee-checkbox",
2741
2741
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions"],
2742
2742
  askValidator: true,
@@ -2755,7 +2755,7 @@ export default [
2755
2755
  plugins: [],
2756
2756
  },
2757
2757
  {
2758
- name: "VeeCurrencyInput",
2758
+ name: "Vee CurrencyInput",
2759
2759
  value: "vee-currency-input",
2760
2760
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions"],
2761
2761
  askValidator: true,
@@ -2774,7 +2774,7 @@ export default [
2774
2774
  plugins: [],
2775
2775
  },
2776
2776
  {
2777
- name: "VeeDateField",
2777
+ name: "Vee DateField",
2778
2778
  value: "vee-date-field",
2779
2779
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions", "@internationalized/date"],
2780
2780
  askValidator: true,
@@ -2793,7 +2793,7 @@ export default [
2793
2793
  plugins: [],
2794
2794
  },
2795
2795
  {
2796
- name: "VeeDatepicker",
2796
+ name: "Vee Datepicker",
2797
2797
  value: "vee-datepicker",
2798
2798
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions"],
2799
2799
  askValidator: true,
@@ -2812,7 +2812,7 @@ export default [
2812
2812
  plugins: [],
2813
2813
  },
2814
2814
  {
2815
- name: "VeeFileInput",
2815
+ name: "Vee FileInput",
2816
2816
  value: "vee-file-input",
2817
2817
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions"],
2818
2818
  askValidator: true,
@@ -2831,7 +2831,7 @@ export default [
2831
2831
  plugins: [],
2832
2832
  },
2833
2833
  {
2834
- name: "VeeInput",
2834
+ name: "Vee Input",
2835
2835
  value: "vee-input",
2836
2836
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions"],
2837
2837
  askValidator: true,
@@ -2850,7 +2850,7 @@ export default [
2850
2850
  plugins: [],
2851
2851
  },
2852
2852
  {
2853
- name: "VeeMultiSelect",
2853
+ name: "Vee MultiSelect",
2854
2854
  value: "vee-multi-select",
2855
2855
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions", "@vueform/multiselect"],
2856
2856
  askValidator: true,
@@ -2869,7 +2869,7 @@ export default [
2869
2869
  plugins: [],
2870
2870
  },
2871
2871
  {
2872
- name: "VeeNumberField",
2872
+ name: "Vee NumberField",
2873
2873
  value: "vee-number-field",
2874
2874
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions", "@internationalized/number"],
2875
2875
  askValidator: true,
@@ -2888,7 +2888,7 @@ export default [
2888
2888
  plugins: [],
2889
2889
  },
2890
2890
  {
2891
- name: "Vee Pin Input",
2891
+ name: "Vee Pin-Input",
2892
2892
  value: "vee-pin-input",
2893
2893
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions"],
2894
2894
  askValidator: true,
@@ -2907,7 +2907,7 @@ export default [
2907
2907
  plugins: [],
2908
2908
  },
2909
2909
  {
2910
- name: "VeeRadioGroup",
2910
+ name: "Vee RadioGroup",
2911
2911
  value: "vee-radio-group",
2912
2912
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions"],
2913
2913
  askValidator: true,
@@ -2926,7 +2926,7 @@ export default [
2926
2926
  plugins: [],
2927
2927
  },
2928
2928
  {
2929
- name: "VeeSelect",
2929
+ name: "Vee Select",
2930
2930
  value: "vee-select",
2931
2931
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions"],
2932
2932
  askValidator: true,
@@ -2945,7 +2945,7 @@ export default [
2945
2945
  plugins: [],
2946
2946
  },
2947
2947
  {
2948
- name: "VeeTagsInput",
2948
+ name: "Vee Tags-Input",
2949
2949
  value: "vee-tags-input",
2950
2950
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions"],
2951
2951
  askValidator: true,
@@ -2964,7 +2964,7 @@ export default [
2964
2964
  plugins: [],
2965
2965
  },
2966
2966
  {
2967
- name: "VeeTextarea",
2967
+ name: "Vee Textarea",
2968
2968
  value: "vee-textarea",
2969
2969
  deps: ["@vee-validate/nuxt", "@morev/vue-transitions"],
2970
2970
  askValidator: true,
@@ -2982,6 +2982,25 @@ export default [
2982
2982
  composables: [],
2983
2983
  plugins: [],
2984
2984
  },
2985
+ {
2986
+ name: "Vee VueFormSlider",
2987
+ value: "vee-vue-form-slider",
2988
+ deps: ["@vee-validate/nuxt", "@morev/vue-transitions", "@vueform/slider"],
2989
+ askValidator: true,
2990
+ nuxtModules: ["@vee-validate/nuxt", "@morev/vue-transitions/nuxt"],
2991
+ components: [],
2992
+ files: [
2993
+ {
2994
+ fileName: "Vee/VueFormSlider.vue",
2995
+ dirPath: "components/UI",
2996
+ fileContent:
2997
+ '<template>\n <Slider v-bind="{ ...forwarded, ...$attrs }" v-model="model" />\n <TransitionSlide group tag="div">\n <p v-if="hint && !errorMessage" key="hint" class="mt-1.5 text-sm text-muted-foreground">\n {{ hint }}\n </p>\n\n <p v-if="errorMessage" key="errorMessage" class="mt-1.5 text-sm text-destructive">\n {{ errorMessage }}\n </p>\n </TransitionSlide>\n</template>\n\n<script lang="ts">\n import Slider from "@vueform/slider";\n import { useForwardPropsEmits } from "radix-vue";\n\n export type SliderFormatObject = {\n /**\n * Prefix to prepend to the value.\n * @example "$"\n */\n prefix?: string;\n /**\n * Suffix to append to the value.\n * @example "USD"\n */\n suffix?: string;\n /**\n * Number of decimals to show.\n * @example 2\n */\n decimals?: number;\n /**\n * Character to use as thousand separator.\n * @example ","\n */\n thousand?: string;\n };\n\n export interface SliderProps {\n /**\n * The hint to display below the slider.\n */\n hint?: string;\n /**\n * The rules for the slider. Used with vee-validate for validation.\n */\n rules?: any;\n /**\n * Whether the slider should be validated on mount.\n */\n validateOnMount?: boolean;\n /**\n * The label of the slider. Used with vee-validate for error messages\n */\n label?: string;\n /**\n * The name we want to give this slider in the form.\n */\n name?: string;\n /**\n * The id attribute of slider container DOM.\n * @default "slider"\n */\n id?: string;\n /**\n * Whether to update v-model only when the slider value is set and not while dragging.\n *\n * If disabled you must not use inline objects as props (eg. format, options, classes) but outsource them to a data property.\n *\n * @default true\n */\n lazy?: boolean;\n /**\n * Whether the slider should be disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Minimum value of the slider.\n * @default 0\n */\n min?: number;\n /**\n * Maximum value of the slider.\n * @default 100\n */\n max?: number;\n /**\n * The jump between intervals. If `-1` it enables fractions (eg. `1.23`).\n * @default 1\n */\n step?: number;\n /**\n * Whether tooltips should show above handlers.\n * @default true\n */\n tooltips?: boolean;\n /**\n * When tooltips should be shown.\n * @default "always"\n */\n showTooltip?: "always" | "focus" | "drag";\n /**\n * The step distance between two handles when their tooltips should be merged (when step is `-1` then `1` is assumed).\n *\n * @example\n *\n * ```js\n * { merge: 5, step: 10 }\n * // values: 0, <=50 will merge\n * // values: 0, 60 will not merge\n *\n * { merge: 5, step: -1 }\n *\n * // values: 0, <=5 will merge\n * // values: 0, 5.01 will not merge\n *\n * ```\n * @default -1\n */\n merge?: number;\n /**\n * Formats the tooltip.\n *\n * It can be either a function that receives a `value` param and expects a string or number as return or an object with the following properties:\n *\n *\n * prefix - eg $ -> $100\n *\n * suffix - eg USD -> 100USD\n *\n * decimals - eg 2 -> 100.00\n *\n * thousand - eg , - 1,000\n */\n format?: SliderFormatObject | ((value: number) => string | number);\n /**\n * The orientation of the slider.\n * @default "horizontal"\n */\n orientation?: "horizontal" | "vertical";\n /**\n * The direction of the slider.\n *\n * By default value increases left-to-right and top-to-bottom, which is reversed when using `rtl`.\n *\n * @default "ltr"\n */\n direction?: "ltr" | "rtl";\n /**\n * The position of the slider tooltips.\n *\n * Possible values: `null` | `top` | `bottom` | `left` | `right` depending on orientation prop.\n *\n * When null it equals to orientation default (`top` for `horizontal` and `left` for `vertical`).\n * @default null\n */\n tooltipPosition?: null | "top" | "bottom" | "left" | "right";\n /**\n * An object containing aria attributes to be added for each handle.\n */\n aria?: Record<string, any>;\n /**\n * Sets the aria-labelledby attribute of handles.\n */\n ariaLabelledby?: string;\n /**\n * Additional options for noUiSlider.\n * @see https://refreshless.com/nouislider/slider-options/\n */\n options?: Record<string, any>;\n /**\n * Initial value of the slider.\n */\n modelValue?: any;\n value?: any;\n /**\n * An object of class names that gets merged with the default values\n */\n classes?: Record<string, any>;\n }\n\n export type SliderEmits = {\n /**\n * Emitted when dragging the slider is finished or it\'s value changed by clicking, keyboard or programmatically set.\n */\n change: [v: any];\n /**\n * Emitted in the same scenarios as in `@change`, but also when the slider is being dragged if `lazy` option is disabled.\n */\n update: [v: any];\n /**\n * Emitted in the same scenarios as in `@change`, but also when the slider\'s `.set()` method is called.\n */\n set: [v: any];\n /**\n * Emitted while the slider moves.\n */\n slide: [v: any];\n /**\n * Emitted the slider connect moves while dragging.\n */\n drag: [v: any];\n /**\n * Emitted when the handle is activated and dragging started.\n */\n start: [v: any];\n /**\n * Emitted when the dragging ended.\n */\n end: [v: any];\n };\n</script>\n<script lang="ts" setup>\n defineOptions({ inheritAttrs: false });\n const props = defineProps<SliderProps>();\n\n const emits = defineEmits<SliderEmits>();\n\n const forwarded = useForwardPropsEmits(props, emits);\n\n const { errorMessage, value: model } = useField(\n () => props.name || props.id || useId(),\n props.rules,\n {\n initialValue: props.modelValue,\n label: props.label,\n validateOnMount: props.validateOnMount,\n syncVModel: true,\n }\n );\n</script>\n\n<style src="@vueform/slider/themes/default.css"></style>\n\n<style>\n :root {\n --slider-bg: theme(colors.muted.DEFAULT);\n --slider-connect-bg: theme(colors.primary.DEFAULT);\n --slider-connect-bg-disabled: theme(colors.primary.DEFAULT/45%);\n --slider-height: 8px;\n --slider-vertical-height: 300px;\n --slider-radius: 999999px;\n\n --slider-handle-bg: #ffffff;\n --slider-handle-border: 0;\n --slider-handle-width: 20px;\n --slider-handle-height: 20px;\n --slider-handle-radius: 99999px;\n --slider-handle-shadow: 0.5px 0.5px 2px 1px rgba(0, 0, 0, 0.32);\n --slider-handle-shadow-active: 0.5px 0.5px 2px 1px rgba(0, 0, 0, 0.42);\n --slider-handle-ring-width: 3px;\n --slider-handle-ring-color: theme(colors.primary.DEFAULT/20%);\n\n --slider-tooltip-font-size: 0.875rem;\n --slider-tooltip-line-height: 1.25rem;\n --slider-tooltip-font-weight: 600;\n --slider-tooltip-min-width: 24px;\n --slider-tooltip-bg: theme(colors.primary.DEFAULT);\n --slider-tooltip-bg-disabled: theme(colors.primary.DEFAULT/90%);\n --slider-tooltip-color: theme(colors.primary.foreground);\n --slider-tooltip-radius: theme(borderRadius.sm);\n --slider-tooltip-py: 2px;\n --slider-tooltip-px: 6px;\n --slider-tooltip-arrow-size: 5px;\n --slider-tooltip-distance: 4px;\n }\n</style>\n',
2998
+ },
2999
+ ],
3000
+ utils: [],
3001
+ composables: [],
3002
+ plugins: [],
3003
+ },
2985
3004
  {
2986
3005
  name: "Vue Sonner",
2987
3006
  value: "vue-sonner",