@auronui/vue 1.0.15 → 1.0.16
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/dist/cjs/index.cjs +562 -73
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordion/AccordionContent.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/accordion/AccordionContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordion/AccordionHeader.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/accordion/AccordionHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordion/AccordionTrigger.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/accordion/AccordionTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/aspect-ratio/AspectRatio.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/aspect-ratio/AspectRatio.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/badge/Badge.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/badge/Badge.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/breadcrumbs/BreadcrumbItem.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/breadcrumbs/BreadcrumbItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/breadcrumbs/Breadcrumbs.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/breadcrumbs/Breadcrumbs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/button/Button.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/button/Button.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/button/ToggleButtonGroup.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/button/ToggleButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/calendar-year-picker/CalendarYearPicker.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/calendar-year-picker/CalendarYearPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/card/Card.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/card/Card.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/card/CardBody.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/card/CardBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/card/CardFooter.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/card/CardFooter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/card/CardHeader.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/card/CardHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/chip/Chip.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/chip/Chip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapsible/Collapsible.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/collapsible/Collapsible.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapsible/CollapsibleContent.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/collapsible/CollapsibleContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapsible/CollapsibleGroup.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/collapsible/CollapsibleGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapsible/CollapsibleTrigger.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/collapsible/CollapsibleTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/combo-box/ComboBox.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/combo-box/ComboBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-input/DateInput.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/date-input/DateInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-range-field/DateRangeField.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/date-range-field/DateRangeField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/date-range-picker/DateRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/input/Input.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/input/Input.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/input-otp/InputOTP.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/input-otp/InputOTP.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/kbd/Kbd.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/kbd/Kbd.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/link/Link.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/link/Link.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/list-box/ListBox.js.map +1 -1
- package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/list-box/ListBoxItem.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/list-box/ListBoxItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/meter/Meter.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/meter/Meter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/number-field/NumberField.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/number-field/NumberField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/progress-bar/ProgressBar.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/progress-bar/ProgressBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/progress-circle/ProgressCircle.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/progress-circle/ProgressCircle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/range-calendar/RangeCalendar.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/range-calendar/RangeCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/scroll-shadow/ScrollShadow.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/scroll-shadow/ScrollShadow.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/skeleton/Skeleton.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/skeleton/Skeleton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/slider/Slider.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/slider/Slider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/splitter/SplitterGroup.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/splitter/SplitterGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/splitter/SplitterPanel.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/splitter/SplitterPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/splitter/SplitterResizeHandle.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/splitter/SplitterResizeHandle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/Stepper.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/stepper/Stepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/StepperContent.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/stepper/StepperContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/StepperDescription.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/stepper/StepperDescription.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/StepperIndicator.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/stepper/StepperIndicator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/StepperItem.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/stepper/StepperItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/StepperSeparator.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/stepper/StepperSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/stepper/StepperTitle.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/stepper/StepperTitle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TableRow.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/table/TableRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/Tab.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/tabs/Tab.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/TabIndicator.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/tabs/TabIndicator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/TabPanel.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/tabs/TabPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/textarea/Textarea.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/textarea/Textarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/time-field/TimeField.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/time-field/TimeField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tree/Tree.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/tree/Tree.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tree/TreeItem.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/tree/TreeItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tree/TreeItemToggle.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/tree/TreeItemToggle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/index.d.ts +18 -18
- package/dist/utils/composeClassName.js.map +1 -1
- package/package.json +2 -2
|
@@ -20,7 +20,13 @@ var Accordion_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
|
|
|
20
20
|
},
|
|
21
21
|
variant: { default: "default" },
|
|
22
22
|
size: { default: "md" },
|
|
23
|
-
class: {
|
|
23
|
+
class: { type: [
|
|
24
|
+
String,
|
|
25
|
+
Boolean,
|
|
26
|
+
null,
|
|
27
|
+
Object,
|
|
28
|
+
Array
|
|
29
|
+
] },
|
|
24
30
|
classNames: {}
|
|
25
31
|
},
|
|
26
32
|
emits: ["update:modelValue"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/accordion/Accordion.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { AccordionRoot } from 'reka-ui'\nimport { accordionVariants, type AccordionVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAccordionProvide } from './accordion.context'\n\ntype SingleValue = string\ntype MultipleValue = string[]\n\nconst props = withDefaults(defineProps<{\n type: 'single' | 'multiple'\n modelValue?: SingleValue | MultipleValue\n defaultValue?: SingleValue | MultipleValue\n collapsible?: boolean\n disabled?: boolean\n variant?: AccordionVariants['variant']\n size?: AccordionVariants['size']\n class?: ClassValue\n /** Override classes for any slot */\n classNames?: Partial<{\n base: ClassValue\n }>\n}>(), {\n collapsible: true,\n disabled: false,\n variant: 'default',\n size: 'md',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: SingleValue | MultipleValue]\n}>()\n\nconst slotFns = computed(() => accordionVariants({ variant: props.variant, size: props.size }))\n\nuseAccordionProvide({ slotFns })\n</script>\n\n<template>\n <AccordionRoot\n :type=\"props.type\"\n :model-value=\"props.modelValue\"\n :default-value=\"props.defaultValue\"\n :collapsible=\"props.collapsible\"\n :disabled=\"props.disabled\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n @update:model-value=\"(v: SingleValue | MultipleValue | undefined) => { if (v !== undefined) emit('update:modelValue', v) }\"\n >\n <slot />\n </AccordionRoot>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Accordion.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/accordion/Accordion.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { AccordionRoot } from 'reka-ui'\nimport { accordionVariants, type AccordionVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAccordionProvide } from './accordion.context'\n\ntype SingleValue = string\ntype MultipleValue = string[]\n\nconst props = withDefaults(defineProps<{\n type: 'single' | 'multiple'\n modelValue?: SingleValue | MultipleValue\n defaultValue?: SingleValue | MultipleValue\n collapsible?: boolean\n disabled?: boolean\n variant?: AccordionVariants['variant']\n size?: AccordionVariants['size']\n class?: ClassValue\n /** Override classes for any slot */\n classNames?: Partial<{\n base: ClassValue\n }>\n}>(), {\n collapsible: true,\n disabled: false,\n variant: 'default',\n size: 'md',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: SingleValue | MultipleValue]\n}>()\n\nconst slotFns = computed(() => accordionVariants({ variant: props.variant, size: props.size }))\n\nuseAccordionProvide({ slotFns })\n</script>\n\n<template>\n <AccordionRoot\n :type=\"props.type\"\n :model-value=\"props.modelValue\"\n :default-value=\"props.defaultValue\"\n :collapsible=\"props.collapsible\"\n :disabled=\"props.disabled\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n @update:model-value=\"(v: SingleValue | MultipleValue | undefined) => { if (v !== undefined) emit('update:modelValue', v) }\"\n >\n <slot />\n </AccordionRoot>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUA,MAAM,QAAQ;EAoBd,MAAM,OAAO;EAIb,MAAM,UAAU,eAAe,kBAAkB;GAAE,SAAS,MAAM;GAAS,MAAM,MAAM;GAAM,CAAC,CAAA;AAE9F,sBAAoB,EAAE,SAAS,CAAA;;uBAI7B,YAUgB,MAAA,cAAA,EAAA;IATb,MAAM,MAAM;IACZ,eAAa,MAAM;IACnB,iBAAe,MAAM;IACrB,aAAa,MAAM;IACnB,UAAU,MAAM;IAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;IAC3E,uBAAkB,OAAA,OAAA,OAAA,MAAG,MAA0C;AAAA,SAAW,MAAM,KAAA,EAAW,MAAI,qBAAsB,EAAC;;;2BAE/G,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
|
|
@@ -7,7 +7,13 @@ import { AccordionContent, injectAccordionItemContext } from "reka-ui";
|
|
|
7
7
|
var AccordionContent_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
8
8
|
__name: "AccordionContent",
|
|
9
9
|
props: {
|
|
10
|
-
class: {
|
|
10
|
+
class: { type: [
|
|
11
|
+
String,
|
|
12
|
+
Boolean,
|
|
13
|
+
null,
|
|
14
|
+
Object,
|
|
15
|
+
Array
|
|
16
|
+
] },
|
|
11
17
|
classNames: {}
|
|
12
18
|
},
|
|
13
19
|
setup(__props) {
|
package/dist/components/accordion/AccordionContent.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionContent.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/accordion/AccordionContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AccordionContent as RekaAccordionContent, injectAccordionItemContext } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAccordionInject } from './accordion.context'\nimport { motion } from '../../utils/motion'\n\nconst props = defineProps<{\n class?: ClassValue\n /** Per-slot class overrides */\n classNames?: Partial<{\n body: ClassValue\n bodyInner: ClassValue\n }>\n}>()\nconst ctx = useAccordionInject()\nconst rekaItem = injectAccordionItemContext()\n</script>\n\n<template>\n <RekaAccordionContent\n :force-mount=\"true\"\n :class=\"composeClassName(ctx.slotFns.value.body(), props.class, props.classNames?.body)\"\n >\n <motion.div\n :initial=\"false\"\n :animate=\"rekaItem.open.value ? { height: 'auto', opacity: 1 } : { height: 0, opacity: 0 }\"\n :transition=\"{ duration: 0.2, ease: [0.4, 0, 0.2, 1] }\"\n style=\"overflow: hidden;\"\n >\n <div :class=\"composeClassName(ctx.slotFns.value.bodyInner(), props.classNames?.bodyInner)\">\n <slot />\n </div>\n </motion.div>\n </RekaAccordionContent>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"AccordionContent.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/accordion/AccordionContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AccordionContent as RekaAccordionContent, injectAccordionItemContext } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAccordionInject } from './accordion.context'\nimport { motion } from '../../utils/motion'\n\nconst props = defineProps<{\n class?: ClassValue\n /** Per-slot class overrides */\n classNames?: Partial<{\n body: ClassValue\n bodyInner: ClassValue\n }>\n}>()\nconst ctx = useAccordionInject()\nconst rekaItem = injectAccordionItemContext()\n</script>\n\n<template>\n <RekaAccordionContent\n :force-mount=\"true\"\n :class=\"composeClassName(ctx.slotFns.value.body(), props.class, props.classNames?.body)\"\n >\n <motion.div\n :initial=\"false\"\n :animate=\"rekaItem.open.value ? { height: 'auto', opacity: 1 } : { height: 0, opacity: 0 }\"\n :transition=\"{ duration: 0.2, ease: [0.4, 0, 0.2, 1] }\"\n style=\"overflow: hidden;\"\n >\n <div :class=\"composeClassName(ctx.slotFns.value.bodyInner(), props.classNames?.bodyInner)\">\n <slot />\n </div>\n </motion.div>\n </RekaAccordionContent>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAMA,MAAM,QAAQ;EAQd,MAAM,MAAM,oBAAmB;EAC/B,MAAM,WAAW,4BAA2B;;uBAI1C,YAcuB,MAAA,iBAAA,EAAA;IAbpB,eAAa;IACb,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;;2BAWzE,CATb,YASa,MAAA,OAAA,CAAA,KAAA;KARV,SAAS;KACT,SAAS,MAAA,SAAQ,CAAC,KAAK,QAAK;MAAA,QAAA;MAAA,SAAA;MAAA,GAAA;MAAA,QAAA;MAAA,SAAA;MAAA;KAC5B,YAAY;MAAA,UAAA;MAAA,MAAA;OAAA;OAAA;OAAA;OAAA;OAAA;MAAyC;KACtD,OAAA,EAAA,YAAA,UAAyB;;4BAInB,CAFN,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,WAAS,EAAI,MAAM,YAAY,UAAS,CAAA,EAAA,EAAA,CACtF,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA,CAAA,CAAA"}
|
|
@@ -6,7 +6,13 @@ import { AccordionHeader } from "reka-ui";
|
|
|
6
6
|
var AccordionHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
7
7
|
__name: "AccordionHeader",
|
|
8
8
|
props: {
|
|
9
|
-
class: {
|
|
9
|
+
class: { type: [
|
|
10
|
+
String,
|
|
11
|
+
Boolean,
|
|
12
|
+
null,
|
|
13
|
+
Object,
|
|
14
|
+
Array
|
|
15
|
+
] },
|
|
10
16
|
classNames: {}
|
|
11
17
|
},
|
|
12
18
|
setup(__props) {
|
package/dist/components/accordion/AccordionHeader.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionHeader.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/accordion/AccordionHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AccordionHeader as RekaAccordionHeader } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAccordionInject } from './accordion.context'\n\nconst props = defineProps<{\n /** Override classes on specific slots */\n class?: ClassValue\n classNames?: Partial<{\n heading: ClassValue\n }>\n}>()\nconst ctx = useAccordionInject()\n</script>\n\n<template>\n <RekaAccordionHeader :class=\"composeClassName(ctx.slotFns.value.heading(), props.class, props.classNames?.heading)\">\n <slot />\n </RekaAccordionHeader>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"AccordionHeader.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/accordion/AccordionHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AccordionHeader as RekaAccordionHeader } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAccordionInject } from './accordion.context'\n\nconst props = defineProps<{\n /** Override classes on specific slots */\n class?: ClassValue\n classNames?: Partial<{\n heading: ClassValue\n }>\n}>()\nconst ctx = useAccordionInject()\n</script>\n\n<template>\n <RekaAccordionHeader :class=\"composeClassName(ctx.slotFns.value.heading(), props.class, props.classNames?.heading)\">\n <slot />\n </RekaAccordionHeader>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAKA,MAAM,QAAQ;EAOd,MAAM,MAAM,oBAAmB;;uBAI7B,YAEsB,MAAA,gBAAA,EAAA,EAFA,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,SAAO,EAAI,MAAM,OAAO,MAAM,YAAY,QAAO,CAAA,EAAA,EAAA;2BACvG,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
|
|
@@ -9,7 +9,13 @@ var AccordionItem_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
|
|
|
9
9
|
props: {
|
|
10
10
|
value: {},
|
|
11
11
|
disabled: { type: Boolean },
|
|
12
|
-
class: {
|
|
12
|
+
class: { type: [
|
|
13
|
+
String,
|
|
14
|
+
Boolean,
|
|
15
|
+
null,
|
|
16
|
+
Object,
|
|
17
|
+
Array
|
|
18
|
+
] },
|
|
13
19
|
classNames: {}
|
|
14
20
|
},
|
|
15
21
|
setup(__props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionItem.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/accordion/AccordionItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue'\nimport { AccordionItem as RekaAccordionItem } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAccordionInject } from './accordion.context'\nimport { useAccordionItemProvide } from './accordion-item.context'\n\nconst props = defineProps<{\n value: string\n disabled?: boolean\n class?: ClassValue\n /** Override classes on named slots */\n classNames?: Partial<{\n item: ClassValue\n }>\n}>()\n\nconst ctx = useAccordionInject()\n\n// Capture Reka's exposed per-item `open` ComputedRef via template ref and\n// re-provide it downward so AccordionContent can drive its animation from\n// synchronous Vue reactivity — no MutationObserver, no CSS-var race.\nconst rekaRef = useTemplateRef<{ open: { value: boolean } } | null>('reka')\nconst open = computed(() => rekaRef.value?.open?.value ?? false)\nuseAccordionItemProvide({ open })\n</script>\n\n<template>\n <RekaAccordionItem\n ref=\"reka\"\n :value=\"props.value\"\n :disabled=\"props.disabled\"\n :class=\"composeClassName(ctx.slotFns.value.item(), props.class, props.classNames?.item)\"\n >\n <slot />\n </RekaAccordionItem>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"AccordionItem.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/accordion/AccordionItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue'\nimport { AccordionItem as RekaAccordionItem } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAccordionInject } from './accordion.context'\nimport { useAccordionItemProvide } from './accordion-item.context'\n\nconst props = defineProps<{\n value: string\n disabled?: boolean\n class?: ClassValue\n /** Override classes on named slots */\n classNames?: Partial<{\n item: ClassValue\n }>\n}>()\n\nconst ctx = useAccordionInject()\n\n// Capture Reka's exposed per-item `open` ComputedRef via template ref and\n// re-provide it downward so AccordionContent can drive its animation from\n// synchronous Vue reactivity — no MutationObserver, no CSS-var race.\nconst rekaRef = useTemplateRef<{ open: { value: boolean } } | null>('reka')\nconst open = computed(() => rekaRef.value?.open?.value ?? false)\nuseAccordionItemProvide({ open })\n</script>\n\n<template>\n <RekaAccordionItem\n ref=\"reka\"\n :value=\"props.value\"\n :disabled=\"props.disabled\"\n :class=\"composeClassName(ctx.slotFns.value.item(), props.class, props.classNames?.item)\"\n >\n <slot />\n </RekaAccordionItem>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAOA,MAAM,QAAQ;EAUd,MAAM,MAAM,oBAAmB;EAK/B,MAAM,UAAU,eAAoD,OAAM;AAE1E,0BAAwB,EAAE,MADb,eAAe,QAAQ,OAAO,MAAM,SAAS,MAAK,EAC/B,CAAA;;uBAI9B,YAOoB,MAAA,cAAA,EAAA;IANlB,KAAI;IACH,OAAO,MAAM;IACb,UAAU,MAAM;IAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;;2BAE9E,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
|
|
@@ -7,7 +7,13 @@ import { AccordionTrigger } from "reka-ui";
|
|
|
7
7
|
var AccordionTrigger_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
8
8
|
__name: "AccordionTrigger",
|
|
9
9
|
props: {
|
|
10
|
-
class: {
|
|
10
|
+
class: { type: [
|
|
11
|
+
String,
|
|
12
|
+
Boolean,
|
|
13
|
+
null,
|
|
14
|
+
Object,
|
|
15
|
+
Array
|
|
16
|
+
] },
|
|
11
17
|
classNames: {}
|
|
12
18
|
},
|
|
13
19
|
setup(__props) {
|
package/dist/components/accordion/AccordionTrigger.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionTrigger.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/accordion/AccordionTrigger.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AccordionTrigger as RekaAccordionTrigger } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAccordionInject } from './accordion.context'\nimport { useAccordionItemInject } from './accordion-item.context'\n\nconst props = defineProps<{\n class?: ClassValue\n /** Per-slot class overrides. */\n classNames?: Partial<{\n trigger: ClassValue\n indicator: ClassValue\n }>\n}>()\nconst ctx = useAccordionInject()\nconst item = useAccordionItemInject()\n</script>\n\n<template>\n <RekaAccordionTrigger :class=\"composeClassName(ctx.slotFns.value.trigger(), props.class, props.classNames?.trigger)\">\n <slot />\n <!--\n Indicator slot. Users can replace the chevron with any icon.\n The wrapper keeps the rotation + color transition, so users only\n need to supply the icon contents. For full control (custom rotation\n behaviour etc.), spread the slot's `open` prop.\n -->\n <span\n :class=\"composeClassName(ctx.slotFns.value.indicator(), props.classNames?.indicator)\"\n aria-hidden=\"true\"\n >\n <slot\n name=\"indicator\"\n :open=\"item.open.value\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n focusable=\"false\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </slot>\n </span>\n </RekaAccordionTrigger>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"AccordionTrigger.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/accordion/AccordionTrigger.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AccordionTrigger as RekaAccordionTrigger } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAccordionInject } from './accordion.context'\nimport { useAccordionItemInject } from './accordion-item.context'\n\nconst props = defineProps<{\n class?: ClassValue\n /** Per-slot class overrides. */\n classNames?: Partial<{\n trigger: ClassValue\n indicator: ClassValue\n }>\n}>()\nconst ctx = useAccordionInject()\nconst item = useAccordionItemInject()\n</script>\n\n<template>\n <RekaAccordionTrigger :class=\"composeClassName(ctx.slotFns.value.trigger(), props.class, props.classNames?.trigger)\">\n <slot />\n <!--\n Indicator slot. Users can replace the chevron with any icon.\n The wrapper keeps the rotation + color transition, so users only\n need to supply the icon contents. For full control (custom rotation\n behaviour etc.), spread the slot's `open` prop.\n -->\n <span\n :class=\"composeClassName(ctx.slotFns.value.indicator(), props.classNames?.indicator)\"\n aria-hidden=\"true\"\n >\n <slot\n name=\"indicator\"\n :open=\"item.open.value\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n focusable=\"false\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </slot>\n </span>\n </RekaAccordionTrigger>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAMA,MAAM,QAAQ;EAQd,MAAM,MAAM,oBAAmB;EAC/B,MAAM,OAAO,wBAAuB;;uBAIlC,YAgCuB,MAAA,iBAAA,EAAA,EAhCA,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,SAAO,EAAI,MAAM,OAAO,MAAM,YAAY,QAAO,CAAA,EAAA,EAAA;2BACxG,CAAR,WAAQ,KAAA,QAAA,UAAA,EAOR,mBAuBO,QAAA;KAtBJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,WAAS,EAAI,MAAM,YAAY,UAAS,CAAA;KACnF,eAAY;QAEZ,WAkBO,KAAA,QAAA,aAAA,EAhBJ,MAAM,MAAA,KAAI,CAAC,KAAK,OAAA,QAgBZ,CAAA,OAAA,OAAA,OAAA,KAdL,mBAaM,OAAA;KAZJ,OAAM;KACN,OAAM;KACN,QAAO;KACP,SAAQ;KACR,MAAK;KACL,QAAO;KACP,gBAAa;KACb,kBAAe;KACf,mBAAgB;KAChB,WAAU;QAEV,mBAAoC,YAAA,EAA1B,QAAO,kBAAgB,CAAA,CAAA,EAAA,GAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA"}
|
package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -17,7 +17,13 @@ var AlertDialogAction_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
17
17
|
props: {
|
|
18
18
|
variant: { default: "danger" },
|
|
19
19
|
size: { default: "md" },
|
|
20
|
-
class: {
|
|
20
|
+
class: { type: [
|
|
21
|
+
String,
|
|
22
|
+
Boolean,
|
|
23
|
+
null,
|
|
24
|
+
Object,
|
|
25
|
+
Array
|
|
26
|
+
] },
|
|
21
27
|
classNames: {},
|
|
22
28
|
asChild: {
|
|
23
29
|
type: Boolean,
|
package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlertDialogAction.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/alert-dialog/AlertDialogAction.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertDialogAction } from 'reka-ui'\nimport { buttonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\n/**\n * AlertDialogAction — confirm button for destructive flows.\n *\n * Wraps reka-ui AlertDialogAction which renders <button type=\"button\"> by default\n * (confirmed: AlertDialogAction uses DialogClose which sets type=\"button\" when as=\"button\").\n *\n * D-04: Do NOT override the button type — reka-ui's default `type=\"button\"` is intentional\n * and prevents accidental form submission / Enter-key propagation.\n */\nconst props = withDefaults(defineProps<{\n variant?: 'danger' | 'danger-soft' | 'primary' | 'secondary' | 'ghost' | 'outline' | 'success' | 'success-soft' | 'warning' | 'warning-soft' | 'tertiary'\n size?: 'sm' | 'md' | 'lg'\n class?: ClassValue\n /** Override default classes for any slot. Keys correspond to slot names (e.g., base). */\n classNames?: Partial<{\n base: ClassValue\n }>\n asChild?: boolean\n}>(), {\n variant: 'danger',\n size: 'md',\n asChild: false,\n})\n\nconst slotFns = buttonVariants({ variant: props.variant, size: props.size })\n</script>\n\n<template>\n <AlertDialogAction\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <slot />\n </AlertDialogAction>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"AlertDialogAction.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/alert-dialog/AlertDialogAction.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertDialogAction } from 'reka-ui'\nimport { buttonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\n/**\n * AlertDialogAction — confirm button for destructive flows.\n *\n * Wraps reka-ui AlertDialogAction which renders <button type=\"button\"> by default\n * (confirmed: AlertDialogAction uses DialogClose which sets type=\"button\" when as=\"button\").\n *\n * D-04: Do NOT override the button type — reka-ui's default `type=\"button\"` is intentional\n * and prevents accidental form submission / Enter-key propagation.\n */\nconst props = withDefaults(defineProps<{\n variant?: 'danger' | 'danger-soft' | 'primary' | 'secondary' | 'ghost' | 'outline' | 'success' | 'success-soft' | 'warning' | 'warning-soft' | 'tertiary'\n size?: 'sm' | 'md' | 'lg'\n class?: ClassValue\n /** Override default classes for any slot. Keys correspond to slot names (e.g., base). */\n classNames?: Partial<{\n base: ClassValue\n }>\n asChild?: boolean\n}>(), {\n variant: 'danger',\n size: 'md',\n asChild: false,\n})\n\nconst slotFns = buttonVariants({ variant: props.variant, size: props.size })\n</script>\n\n<template>\n <AlertDialogAction\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <slot />\n </AlertDialogAction>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcA,MAAM,QAAQ;EAed,MAAM,UAAU,eAAe;GAAE,SAAS,MAAM;GAAS,MAAM,MAAM;GAAM,CAAA;;uBAIzE,YAKoB,MAAA,kBAAA,EAAA;IAJjB,YAAU,MAAM;IAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,QAAO,CAAC,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;;2BAEpE,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
|
package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -12,7 +12,13 @@ var AlertDialogCancel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
12
12
|
props: {
|
|
13
13
|
variant: { default: "secondary" },
|
|
14
14
|
size: { default: "md" },
|
|
15
|
-
class: {
|
|
15
|
+
class: { type: [
|
|
16
|
+
String,
|
|
17
|
+
Boolean,
|
|
18
|
+
null,
|
|
19
|
+
Object,
|
|
20
|
+
Array
|
|
21
|
+
] },
|
|
16
22
|
classNames: {},
|
|
17
23
|
asChild: {
|
|
18
24
|
type: Boolean,
|
package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlertDialogCancel.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/alert-dialog/AlertDialogCancel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertDialogCancel } from 'reka-ui'\nimport { buttonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\n/**\n * AlertDialogCancel — dismiss button for alert dialogs.\n * Wraps reka-ui AlertDialogCancel which renders <button type=\"button\"> by default.\n */\nconst props = withDefaults(defineProps<{\n variant?: 'danger' | 'danger-soft' | 'primary' | 'secondary' | 'ghost' | 'outline' | 'success' | 'success-soft' | 'warning' | 'warning-soft' | 'tertiary'\n size?: 'sm' | 'md' | 'lg'\n class?: ClassValue\n /** Per-slot class name overrides */\n classNames?: Partial<{ base: ClassValue }>\n asChild?: boolean\n}>(), {\n variant: 'secondary',\n size: 'md',\n asChild: false,\n})\n\nconst slotFns = buttonVariants({ variant: props.variant, size: props.size })\n</script>\n\n<template>\n <AlertDialogCancel\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <slot />\n </AlertDialogCancel>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"AlertDialogCancel.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/alert-dialog/AlertDialogCancel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AlertDialogCancel } from 'reka-ui'\nimport { buttonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\n/**\n * AlertDialogCancel — dismiss button for alert dialogs.\n * Wraps reka-ui AlertDialogCancel which renders <button type=\"button\"> by default.\n */\nconst props = withDefaults(defineProps<{\n variant?: 'danger' | 'danger-soft' | 'primary' | 'secondary' | 'ghost' | 'outline' | 'success' | 'success-soft' | 'warning' | 'warning-soft' | 'tertiary'\n size?: 'sm' | 'md' | 'lg'\n class?: ClassValue\n /** Per-slot class name overrides */\n classNames?: Partial<{ base: ClassValue }>\n asChild?: boolean\n}>(), {\n variant: 'secondary',\n size: 'md',\n asChild: false,\n})\n\nconst slotFns = buttonVariants({ variant: props.variant, size: props.size })\n</script>\n\n<template>\n <AlertDialogCancel\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <slot />\n </AlertDialogCancel>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EASA,MAAM,QAAQ;EAad,MAAM,UAAU,eAAe;GAAE,SAAS,MAAM;GAAS,MAAM,MAAM;GAAM,CAAA;;uBAIzE,YAKoB,MAAA,kBAAA,EAAA;IAJjB,YAAU,MAAM;IAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,QAAO,CAAC,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;;2BAEpE,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
|
|
@@ -7,7 +7,16 @@ var AspectRatio_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
7
7
|
__name: "AspectRatio",
|
|
8
8
|
props: {
|
|
9
9
|
ratio: { default: 1 },
|
|
10
|
-
class: {
|
|
10
|
+
class: {
|
|
11
|
+
type: [
|
|
12
|
+
String,
|
|
13
|
+
Boolean,
|
|
14
|
+
null,
|
|
15
|
+
Object,
|
|
16
|
+
Array
|
|
17
|
+
],
|
|
18
|
+
default: void 0
|
|
19
|
+
},
|
|
11
20
|
classNames: {}
|
|
12
21
|
},
|
|
13
22
|
setup(__props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AspectRatio.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/aspect-ratio/AspectRatio.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { AspectRatio } from 'reka-ui'\nimport { aspectRatioVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\nconst props = withDefaults(defineProps<{\n ratio?: number\n class?: ClassValue\n /** Override classes for individual slots */\n classNames?: Partial<{\n base: ClassValue\n }>\n}>(), {\n ratio: 1,\n class: undefined,\n})\n\nconst slotFns = computed(() => aspectRatioVariants())\n</script>\n\n<template>\n <AspectRatio\n :ratio=\"ratio\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n data-slot=\"aspect-ratio\"\n >\n <slot />\n </AspectRatio>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"AspectRatio.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/aspect-ratio/AspectRatio.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { AspectRatio } from 'reka-ui'\nimport { aspectRatioVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\nconst props = withDefaults(defineProps<{\n ratio?: number\n class?: ClassValue\n /** Override classes for individual slots */\n classNames?: Partial<{\n base: ClassValue\n }>\n}>(), {\n ratio: 1,\n class: undefined,\n})\n\nconst slotFns = computed(() => aspectRatioVariants())\n</script>\n\n<template>\n <AspectRatio\n :ratio=\"ratio\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n data-slot=\"aspect-ratio\"\n >\n <slot />\n </AspectRatio>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAMA,MAAM,QAAQ;EAYd,MAAM,UAAU,eAAe,qBAAqB,CAAA;;uBAIlD,YAMc,MAAA,YAAA,EAAA;IALX,OAAO,QAAA;IACP,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;IAC5E,aAAU;;2BAEF,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
|
|
@@ -56,7 +56,13 @@ var Autocomplete_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ d
|
|
|
56
56
|
label: {},
|
|
57
57
|
description: {},
|
|
58
58
|
errorMessage: {},
|
|
59
|
-
class: {
|
|
59
|
+
class: { type: [
|
|
60
|
+
String,
|
|
61
|
+
Boolean,
|
|
62
|
+
null,
|
|
63
|
+
Object,
|
|
64
|
+
Array
|
|
65
|
+
] },
|
|
60
66
|
classNames: {},
|
|
61
67
|
modelValue: { default: void 0 },
|
|
62
68
|
defaultValue: { default: void 0 },
|
package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Autocomplete.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/autocomplete/Autocomplete.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref, toRef, useAttrs, useId, watch, useSlots } from 'vue'\nimport { AutocompleteRoot } from 'reka-ui'\nimport { autocompleteVariants, type AutocompleteVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAutocompleteProvide } from './Autocomplete.context'\nimport { hasSlotComponent } from '../../utils/hasSlotComponent'\nimport AutocompleteInput from './AutocompleteInput.vue'\nimport AutocompleteContent from './AutocompleteContent.vue'\nimport AutocompleteItem from './AutocompleteItem.vue'\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadonly: false,\n isRequired: false,\n multiple: false,\n multipleOverflow: 'wrap',\n modelValue: undefined,\n defaultValue: undefined,\n open: undefined,\n defaultOpen: undefined,\n items: () => [],\n loadItems: undefined,\n debounceMs: 200,\n filterOnOpen: false,\n truncateItems: true,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | string[]]\n 'update:open': [value: boolean]\n /** Fired when the user creates a new value via `creatable` or `<AutocompleteCreateItem>`. */\n 'create': [value: string]\n}>()\n\nexport interface AutocompleteItem {\n value: string\n label?: string\n textValue?: string\n isDisabled?: boolean\n}\n\ntype Props = {\n /** Visual style of the field. @default 'flat' */\n variant?: AutocompleteVariants['variant']\n /** Field height. @default 'md' */\n size?: AutocompleteVariants['size']\n /** Accent color applied to focus ring + floating label. @default 'default' */\n color?: AutocompleteVariants['color']\n /**\n * Where the `label` is rendered relative to the field.\n * - `inside`: floats above the trigger (shrinks when focused/filled)\n * - `outside`: sits above the field, static\n * - `outside-left`: sits to the left, horizontal layout\n * @default 'inside'\n */\n labelPlacement?: AutocompleteVariants['labelPlacement']\n /** Stretches root wrapper to 100% width. @default false */\n fullWidth?: boolean\n /** Marks the field as invalid. Triggers danger styling and enables `errorMessage`. @default false */\n isInvalid?: boolean\n /** Disables the field. @default false */\n isDisabled?: boolean\n /** Makes the field read-only. @default false */\n isReadonly?: boolean\n /** Adds a required asterisk next to the label. @default false */\n isRequired?: boolean\n /** Placeholder shown when empty. */\n placeholder?: string\n /** Form field name, for native form submission. */\n name?: string\n /** Field label. When omitted, the floating-label behavior is skipped. */\n label?: string\n /** Helper text displayed below the field. Suppressed when `isInvalid && errorMessage` is shown. */\n description?: string\n /** Error text displayed below the field. Only rendered when `isInvalid` is also true. */\n errorMessage?: string\n /** Extra classes merged onto the root wrapper via `composeClassName`. */\n class?: ClassValue\n /** Per-slot class overrides. Keys correspond to internal slot names (`base`, `label`, `mainWrapper`, `helperWrapper`, `errorMessage`, `description`). */\n classNames?: Partial<{\n base: ClassValue\n label: ClassValue\n mainWrapper: ClassValue\n helperWrapper: ClassValue\n errorMessage: ClassValue\n description: ClassValue\n }>\n\n /* ─── Autocomplete-specific ─────────────────────────────────────── */\n /** Two-way bound selected value. string in single mode, string[] in multiple mode. */\n modelValue?: string | string[]\n /** Initial selected value (uncontrolled). */\n defaultValue?: string | string[]\n /** Allow selecting multiple values. modelValue becomes string[]. @default false */\n multiple?: boolean\n /**\n * Controls how chips overflow in multiple mode.\n * - `wrap`: trigger grows in height, chips wrap to new lines (default)\n * - `collapse`: fixed height, overflowing chips are hidden behind \"+N more\"\n * @default 'wrap'\n */\n multipleOverflow?: 'wrap' | 'collapse'\n /** Controls open state of the dropdown. */\n open?: boolean\n /** Initial open state of the dropdown (uncontrolled). */\n defaultOpen?: boolean\n /** Static items list — used when no loadItems is provided. */\n items?: AutocompleteItem[]\n /** Async data source: called on every query change. */\n loadItems?: (query: string) => Promise<AutocompleteItem[]>\n /** Debounce delay for loadItems calls (ms). 0 = no debounce. */\n debounceMs?: number\n /** Apply filter immediately on open (default: false — show all items until user types). */\n filterOnOpen?: boolean\n /**\n * Truncate item text with an ellipsis when it overflows the dropdown width.\n * Set to `false` to show full text — the dropdown will widen to fit.\n * @default true\n */\n truncateItems?: boolean\n}\n\nconst attrs = useAttrs()\nconst generatedId = useId()\nconst inputId = computed(() => (attrs.id as string | undefined) ?? generatedId)\n\nconst hasLabel = computed(() => !!props.label)\n\nconst slots = useSlots()\n// Compound chrome present → pass slot through (advanced). Otherwise render the\n// input/content/items internally (short-form).\nconst usesCustomChrome = computed(() =>\n hasSlotComponent(slots.default?.(), [AutocompleteInput, AutocompleteContent]),\n)\n\n// Registry for slot-rendered items: value → label (populated by AutocompleteItem at mount).\n// Replaced with a new Map instance on each mutation so Vue's ref() reactivity tracks changes.\nconst slotItemRegistry = ref(new Map<string, string>())\n\nfunction registerItem(value: string, label: string) {\n const next = new Map(slotItemRegistry.value)\n next.set(value, label)\n slotItemRegistry.value = next\n}\n\nfunction unregisterItem(value: string) {\n const next = new Map(slotItemRegistry.value)\n next.delete(value)\n slotItemRegistry.value = next\n}\n\n// Internal async state\nconst isLoading = ref(false)\nconst internalItems = ref<AutocompleteItem[]>([...props.items])\n\n// ── Multiple-mode state ────────────────────────────────────────────────────\n// Tracks selected values as an array. Only meaningful when props.multiple=true.\nconst selectedValues = ref<string[]>(\n props.multiple && Array.isArray(props.modelValue) ? [...props.modelValue] : [],\n)\n\n// Controlled open state used in multiple mode to prevent the dropdown closing\n// after each item selection (Reka would normally close on selection).\nconst internalOpen = ref(props.defaultOpen ?? false)\n\n// Flag set by onMultipleSelect so handleOpenChange can distinguish item\n// selection from Escape/outside-click close.\nlet selectingItem = false\n\n// ── Open-state tracking ────────────────────────────────────────────────────\nconst isOpen = ref(props.defaultOpen ?? false)\nconst termAtOpen = ref('')\nconst isUserTyping = ref(false)\n// Controlled open state for single mode (mirrors multiple mode's internalOpen).\n// Driving open ourselves lets handleOpenChange gate spurious reopens — e.g. the\n// focus bounce caused when a create handler mutates the items list.\nconst singleOpen = ref(props.open ?? props.defaultOpen ?? false)\n// When true, handleOpenChange ignores open=true requests. Set briefly after a\n// single-mode create so the post-create re-render can't reopen the menu.\nlet blockReopen = false\nlet blockReopenTimer: ReturnType<typeof setTimeout> | undefined\nconst effectiveIgnoreFilter = computed(() => {\n if (props.loadItems) return true\n if (!props.filterOnOpen && isOpen.value && !isUserTyping.value) return true\n return false\n})\n\n// ── Label/value bridge ─────────────────────────────────────────────────────\n// Priority: items prop entry > slot registry > identity fallback\nfunction labelFor(value: string | undefined): string {\n if (value == null || value === '') return ''\n const match = internalItems.value.find((i) => i.value === value)\n if (match) return match.label ?? match.textValue ?? value\n return slotItemRegistry.value.get(value) ?? value\n}\nfunction valueFor(displayed: string): string {\n if (!displayed) return ''\n const match = internalItems.value.find(\n (i) => (i.label ?? i.textValue ?? i.value) === displayed,\n )\n if (match) return match.value\n for (const [value, label] of slotItemRegistry.value) {\n if (label === displayed) return value\n }\n return displayed\n}\n\nconst singleModelValue = computed(() =>\n props.multiple ? undefined : (props.modelValue as string | undefined),\n)\n\nconst searchTerm = ref(labelFor(singleModelValue.value))\n\nconst isFilled = computed(() =>\n props.multiple\n ? selectedValues.value.length > 0 || !!searchTerm.value\n : !!searchTerm.value,\n)\nconst hasItems = computed(() => internalItems.value.length > 0)\n\nconst selectedLabels = computed(() =>\n selectedValues.value.map(v => ({ value: v, label: labelFor(v) || v })),\n)\n\n// ── Helpers ────────────────────────────────────────────────────────────────\nconst descriptionId = computed(() => `${inputId.value}-description`)\nconst errorMessageId = computed(() => `${inputId.value}-error`)\nconst showError = computed(() => props.isInvalid && !!props.errorMessage)\nconst showDescription = computed(() => !!props.description && !showError.value)\nconst hasHelper = computed(() => showError.value || showDescription.value)\nconst ariaDescribedBy = computed(() => {\n if (showError.value) return errorMessageId.value\n if (showDescription.value) return descriptionId.value\n return undefined\n})\n\n// ── Watchers ───────────────────────────────────────────────────────────────\n\n// Parent → internal: sync controlled modelValue into local state\nwatch(() => props.modelValue, (val) => {\n if (props.multiple) {\n if (Array.isArray(val)) selectedValues.value = [...val]\n } else {\n const next = labelFor(val as string | undefined)\n if (searchTerm.value !== next) searchTerm.value = next\n }\n})\n\n// Parent → internal: sync consumer-controlled open into our single-mode state\nwatch(() => props.open, (val) => {\n if (!props.multiple && val !== undefined) singleOpen.value = val\n})\n\n// Internal → parent: single mode only — multiple mode emits inside onMultipleSelect\nwatch(searchTerm, (displayed) => {\n if (props.multiple) {\n if (isOpen.value && displayed !== termAtOpen.value) isUserTyping.value = true\n return\n }\n const next = valueFor(displayed)\n if (next !== (singleModelValue.value ?? '')) emit('update:modelValue', next)\n if (isOpen.value && displayed !== termAtOpen.value) isUserTyping.value = true\n})\n\nfunction handleOpenChange(val: boolean) {\n if (props.multiple) {\n isOpen.value = val\n // Suppress close when triggered by item selection; allow Escape/outside-click\n internalOpen.value = (!val && selectingItem) ? true : val\n selectingItem = false\n if (val) { termAtOpen.value = searchTerm.value; isUserTyping.value = false }\n else { isUserTyping.value = false }\n emit('update:open', val)\n return\n }\n\n // Single mode: ignore spurious reopen requests right after a create — the\n // create handler's re-render bounces focus back to the input, which would\n // otherwise reopen the menu via openOnFocus.\n if (val && blockReopen) return\n\n isOpen.value = val\n singleOpen.value = val\n if (val) { termAtOpen.value = searchTerm.value; isUserTyping.value = false }\n else { isUserTyping.value = false }\n emit('update:open', val)\n}\n\n// ── Multiple-mode actions ──────────────────────────────────────────────────\n\nfunction onMultipleSelect(value: string) {\n selectingItem = true\n const idx = selectedValues.value.indexOf(value)\n selectedValues.value = idx === -1\n ? [...selectedValues.value, value]\n : selectedValues.value.filter((_, i) => i !== idx)\n // Clear the input and drop out of \"typing\" mode so the filter is ignored and\n // the full list shows again (effectiveIgnoreFilter depends on !isUserTyping).\n searchTerm.value = ''\n isUserTyping.value = false\n emit('update:modelValue', selectedValues.value)\n}\n\nfunction removeValue(value: string) {\n selectedValues.value = selectedValues.value.filter(v => v !== value)\n emit('update:modelValue', selectedValues.value)\n}\n\nfunction clearAll() {\n selectedValues.value = []\n emit('update:modelValue', [])\n}\n\nfunction isSelected(value: string): boolean {\n return selectedValues.value.includes(value)\n}\n\n// ── Creatable ──────────────────────────────────────────────────────────────\n\nconst hasExactMatch = computed(() => {\n const term = searchTerm.value.trim().toLowerCase()\n if (!term) return false\n const inItems = internalItems.value.some(\n i => (i.label ?? i.textValue ?? i.value).toLowerCase() === term,\n )\n if (inItems) return true\n for (const label of slotItemRegistry.value.values()) {\n if (label.toLowerCase() === term) return true\n }\n return false\n})\n\nfunction onCreateValue(value: string) {\n const trimmed = value.trim()\n if (!trimmed) return\n if (props.multiple) {\n // We own selection state; add the value, then reset input + filter for the\n // next entry (dropdown is kept open and refocused by AutocompleteCreateItem).\n if (!selectedValues.value.includes(trimmed)) {\n selectingItem = true\n selectedValues.value = [...selectedValues.value, trimmed]\n emit('update:modelValue', selectedValues.value)\n }\n searchTerm.value = ''\n isUserTyping.value = false\n } else {\n // Single mode: set the value ourselves and close the (controlled) dropdown.\n searchTerm.value = trimmed\n emit('update:modelValue', trimmed)\n isOpen.value = false\n singleOpen.value = false\n // The create handler (parent @create) typically mutates the items list, which\n // re-renders and bounces focus back to the input — that fires openOnFocus and\n // would reopen the menu. Block reopen requests briefly so the close sticks.\n blockReopen = true\n clearTimeout(blockReopenTimer)\n blockReopenTimer = setTimeout(() => { blockReopen = false }, 300)\n }\n emit('create', trimmed)\n}\n\n// ── Async loading ──────────────────────────────────────────────────────────\nlet debounceTimer: ReturnType<typeof setTimeout> | undefined\n\nasync function runLoadItems(query: string) {\n if (!props.loadItems) return\n isLoading.value = true\n try {\n internalItems.value = await props.loadItems(query)\n } finally {\n isLoading.value = false\n }\n}\n\nfunction scheduleLoad(query: string) {\n if (!props.loadItems) return\n clearTimeout(debounceTimer)\n if (props.debounceMs === 0) {\n void runLoadItems(query)\n } else {\n debounceTimer = setTimeout(() => void runLoadItems(query), props.debounceMs)\n }\n}\n\nonMounted(() => {\n if (props.loadItems) void runLoadItems(searchTerm.value)\n})\n\nwatch(searchTerm, (q) => {\n if (props.loadItems) scheduleLoad(q)\n})\n\nwatch(() => props.items, (newItems) => {\n if (!props.loadItems) internalItems.value = [...newItems]\n})\n\nwatch(internalItems, () => {\n if (props.multiple) return\n const next = labelFor(singleModelValue.value)\n if (next && searchTerm.value !== next && valueFor(searchTerm.value) === (singleModelValue.value ?? '')) {\n searchTerm.value = next\n }\n})\n\nwatch(slotItemRegistry, () => {\n if (props.multiple) return\n const next = labelFor(singleModelValue.value)\n if (next && searchTerm.value !== next && valueFor(searchTerm.value) === (singleModelValue.value ?? '')) {\n searchTerm.value = next\n }\n})\n\n// ── Styles / context ───────────────────────────────────────────────────────\n\nconst slotFns = computed(() =>\n autocompleteVariants({\n variant: props.variant,\n size: props.size,\n color: props.color,\n fullWidth: props.fullWidth,\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n isReadonly: props.isReadonly,\n hasLabel: hasLabel.value,\n labelPlacement: props.labelPlacement,\n }),\n)\n\nconst showOutsideLabel = computed(\n () => hasLabel.value && props.labelPlacement !== 'inside',\n)\n\nuseAutocompleteProvide({\n isDisabled: toRef(props, 'isDisabled'),\n isInvalid: toRef(props, 'isInvalid'),\n isReadonly: toRef(props, 'isReadonly'),\n isRequired: toRef(props, 'isRequired'),\n isLoading,\n isFilled,\n fullWidth: toRef(props, 'fullWidth'),\n hasLabel,\n labelPlacement: toRef(props, 'labelPlacement'),\n inputId,\n label: toRef(props, 'label'),\n ariaDescribedBy,\n truncateItems: toRef(props, 'truncateItems'),\n hasItems,\n slots: slotFns,\n multiple: toRef(props, 'multiple'),\n multipleOverflow: toRef(props, 'multipleOverflow'),\n selectedValues,\n selectedLabels,\n onMultipleSelect,\n removeValue,\n clearAll,\n isSelected,\n registerItem,\n unregisterItem,\n searchTerm,\n hasExactMatch,\n onCreateValue,\n})\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :data-invalid=\"isInvalid || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-readonly=\"isReadonly || undefined\"\n :data-required=\"isRequired || undefined\"\n :data-has-label=\"hasLabel || undefined\"\n :data-has-helper=\"hasHelper || undefined\"\n >\n <label\n v-if=\"showOutsideLabel\"\n :for=\"inputId\"\n :class=\"composeClassName(slotFns.label(), props.classNames?.label)\"\n >{{ label }}<span\n v-if=\"isRequired\"\n aria-hidden=\"true\"\n > *</span></label>\n\n <div :class=\"composeClassName(slotFns.mainWrapper(), props.classNames?.mainWrapper)\">\n <AutocompleteRoot\n v-model:model-value=\"searchTerm\"\n :open=\"props.multiple ? internalOpen : singleOpen\"\n :disabled=\"props.isDisabled\"\n :required=\"props.isRequired\"\n :ignore-filter=\"effectiveIgnoreFilter\"\n :open-on-focus=\"true\"\n @update:open=\"handleOpenChange\"\n >\n <slot\n v-if=\"usesCustomChrome\"\n :is-loading=\"isLoading\"\n :items=\"internalItems\"\n />\n <template v-else>\n <AutocompleteInput :placeholder=\"props.placeholder\" />\n <AutocompleteContent>\n <AutocompleteItem\n v-for=\"item in internalItems\"\n :key=\"item.value\"\n :value=\"item.value\"\n :is-disabled=\"item.isDisabled\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n >{{ item.label ?? item.textValue ?? item.value }}</slot>\n </AutocompleteItem>\n </AutocompleteContent>\n </template>\n </AutocompleteRoot>\n\n <div\n v-if=\"hasHelper\"\n :class=\"composeClassName(slotFns.helperWrapper(), props.classNames?.helperWrapper)\"\n >\n <div\n v-if=\"showError\"\n :id=\"errorMessageId\"\n :class=\"composeClassName(slotFns.errorMessage(), props.classNames?.errorMessage)\"\n >\n {{ errorMessage }}\n </div>\n <div\n v-else-if=\"showDescription\"\n :id=\"descriptionId\"\n :class=\"composeClassName(slotFns.description(), props.classNames?.description)\"\n >\n {{ description }}\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaA,MAAM,QAAQ;EAuBd,MAAM,OAAO;EA+Fb,MAAM,QAAQ,UAAS;EACvB,MAAM,cAAc,OAAM;EAC1B,MAAM,UAAU,eAAgB,MAAM,MAA6B,YAAW;EAE9E,MAAM,WAAW,eAAe,CAAC,CAAC,MAAM,MAAK;EAE7C,MAAM,QAAQ,UAAS;EAGvB,MAAM,mBAAmB,eACvB,iBAAiB,MAAM,WAAW,EAAE,CAAC,2BAAmB,4BAAoB,CAAC,CAC/E;EAIA,MAAM,mBAAmB,oBAAI,IAAI,KAAqB,CAAA;EAEtD,SAAS,aAAa,OAAe,OAAe;GAClD,MAAM,OAAO,IAAI,IAAI,iBAAiB,MAAK;AAC3C,QAAK,IAAI,OAAO,MAAK;AACrB,oBAAiB,QAAQ;;EAG3B,SAAS,eAAe,OAAe;GACrC,MAAM,OAAO,IAAI,IAAI,iBAAiB,MAAK;AAC3C,QAAK,OAAO,MAAK;AACjB,oBAAiB,QAAQ;;EAI3B,MAAM,YAAY,IAAI,MAAK;EAC3B,MAAM,gBAAgB,IAAwB,CAAC,GAAG,MAAM,MAAM,CAAA;EAI9D,MAAM,iBAAiB,IACrB,MAAM,YAAY,MAAM,QAAQ,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,WAAW,GAAG,EAAE,CAChF;EAIA,MAAM,eAAe,IAAI,MAAM,eAAe,MAAK;EAInD,IAAI,gBAAgB;EAGpB,MAAM,SAAS,IAAI,MAAM,eAAe,MAAK;EAC7C,MAAM,aAAa,IAAI,GAAE;EACzB,MAAM,eAAe,IAAI,MAAK;EAI9B,MAAM,aAAa,IAAI,MAAM,QAAQ,MAAM,eAAe,MAAK;EAG/D,IAAI,cAAc;EAClB,IAAI;EACJ,MAAM,wBAAwB,eAAe;AAC3C,OAAI,MAAM,UAAW,QAAO;AAC5B,OAAI,CAAC,MAAM,gBAAgB,OAAO,SAAS,CAAC,aAAa,MAAO,QAAO;AACvE,UAAO;IACR;EAID,SAAS,SAAS,OAAmC;AACnD,OAAI,SAAS,QAAQ,UAAU,GAAI,QAAO;GAC1C,MAAM,QAAQ,cAAc,MAAM,MAAM,MAAM,EAAE,UAAU,MAAK;AAC/D,OAAI,MAAO,QAAO,MAAM,SAAS,MAAM,aAAa;AACpD,UAAO,iBAAiB,MAAM,IAAI,MAAM,IAAI;;EAE9C,SAAS,SAAS,WAA2B;AAC3C,OAAI,CAAC,UAAW,QAAO;GACvB,MAAM,QAAQ,cAAc,MAAM,MAC/B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,UACjD;AACA,OAAI,MAAO,QAAO,MAAM;AACxB,QAAK,MAAM,CAAC,OAAO,UAAU,iBAAiB,MAC5C,KAAI,UAAU,UAAW,QAAO;AAElC,UAAO;;EAGT,MAAM,mBAAmB,eACvB,MAAM,WAAW,KAAA,IAAa,MAAM,WACtC;EAEA,MAAM,aAAa,IAAI,SAAS,iBAAiB,MAAM,CAAA;EAEvD,MAAM,WAAW,eACf,MAAM,WACF,eAAe,MAAM,SAAS,KAAK,CAAC,CAAC,WAAW,QAChD,CAAC,CAAC,WAAW,MACnB;EACA,MAAM,WAAW,eAAe,cAAc,MAAM,SAAS,EAAC;EAE9D,MAAM,iBAAiB,eACrB,eAAe,MAAM,KAAI,OAAM;GAAE,OAAO;GAAG,OAAO,SAAS,EAAE,IAAI;GAAG,EAAE,CACxE;EAGA,MAAM,gBAAgB,eAAe,GAAG,QAAQ,MAAM,cAAa;EACnE,MAAM,iBAAiB,eAAe,GAAG,QAAQ,MAAM,QAAO;EAC9D,MAAM,YAAY,eAAe,MAAM,aAAa,CAAC,CAAC,MAAM,aAAY;EACxE,MAAM,kBAAkB,eAAe,CAAC,CAAC,MAAM,eAAe,CAAC,UAAU,MAAK;EAC9E,MAAM,YAAY,eAAe,UAAU,SAAS,gBAAgB,MAAK;EACzE,MAAM,kBAAkB,eAAe;AACrC,OAAI,UAAU,MAAO,QAAO,eAAe;AAC3C,OAAI,gBAAgB,MAAO,QAAO,cAAc;IAEjD;AAKD,cAAY,MAAM,aAAa,QAAQ;AACrC,OAAI,MAAM;QACJ,MAAM,QAAQ,IAAI,CAAE,gBAAe,QAAQ,CAAC,GAAG,IAAG;UACjD;IACL,MAAM,OAAO,SAAS,IAAyB;AAC/C,QAAI,WAAW,UAAU,KAAM,YAAW,QAAQ;;IAErD;AAGD,cAAY,MAAM,OAAO,QAAQ;AAC/B,OAAI,CAAC,MAAM,YAAY,QAAQ,KAAA,EAAW,YAAW,QAAQ;IAC9D;AAGD,QAAM,aAAa,cAAc;AAC/B,OAAI,MAAM,UAAU;AAClB,QAAI,OAAO,SAAS,cAAc,WAAW,MAAO,cAAa,QAAQ;AACzE;;GAEF,MAAM,OAAO,SAAS,UAAS;AAC/B,OAAI,UAAU,iBAAiB,SAAS,IAAK,MAAK,qBAAqB,KAAI;AAC3E,OAAI,OAAO,SAAS,cAAc,WAAW,MAAO,cAAa,QAAQ;IAC1E;EAED,SAAS,iBAAiB,KAAc;AACtC,OAAI,MAAM,UAAU;AAClB,WAAO,QAAQ;AAEf,iBAAa,QAAS,CAAC,OAAO,gBAAiB,OAAO;AACtD,oBAAgB;AAChB,QAAI,KAAK;AAAE,gBAAW,QAAQ,WAAW;AAAO,kBAAa,QAAQ;UAC9D,cAAa,QAAQ;AAC5B,SAAK,eAAe,IAAG;AACvB;;AAMF,OAAI,OAAO,YAAa;AAExB,UAAO,QAAQ;AACf,cAAW,QAAQ;AACnB,OAAI,KAAK;AAAE,eAAW,QAAQ,WAAW;AAAO,iBAAa,QAAQ;SAC9D,cAAa,QAAQ;AAC5B,QAAK,eAAe,IAAG;;EAKzB,SAAS,iBAAiB,OAAe;AACvC,mBAAgB;GAChB,MAAM,MAAM,eAAe,MAAM,QAAQ,MAAK;AAC9C,kBAAe,QAAQ,QAAQ,KAC3B,CAAC,GAAG,eAAe,OAAO,MAAK,GAC/B,eAAe,MAAM,QAAQ,GAAG,MAAM,MAAM,IAAG;AAGnD,cAAW,QAAQ;AACnB,gBAAa,QAAQ;AACrB,QAAK,qBAAqB,eAAe,MAAK;;EAGhD,SAAS,YAAY,OAAe;AAClC,kBAAe,QAAQ,eAAe,MAAM,QAAO,MAAK,MAAM,MAAK;AACnE,QAAK,qBAAqB,eAAe,MAAK;;EAGhD,SAAS,WAAW;AAClB,kBAAe,QAAQ,EAAC;AACxB,QAAK,qBAAqB,EAAE,CAAA;;EAG9B,SAAS,WAAW,OAAwB;AAC1C,UAAO,eAAe,MAAM,SAAS,MAAK;;EAK5C,MAAM,gBAAgB,eAAe;GACnC,MAAM,OAAO,WAAW,MAAM,MAAM,CAAC,aAAY;AACjD,OAAI,CAAC,KAAM,QAAO;AAIlB,OAHgB,cAAc,MAAM,MAClC,OAAM,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,aAAa,KAAK,KAC7D,CACa,QAAO;AACpB,QAAK,MAAM,SAAS,iBAAiB,MAAM,QAAQ,CACjD,KAAI,MAAM,aAAa,KAAK,KAAM,QAAO;AAE3C,UAAO;IACR;EAED,SAAS,cAAc,OAAe;GACpC,MAAM,UAAU,MAAM,MAAK;AAC3B,OAAI,CAAC,QAAS;AACd,OAAI,MAAM,UAAU;AAGlB,QAAI,CAAC,eAAe,MAAM,SAAS,QAAQ,EAAE;AAC3C,qBAAgB;AAChB,oBAAe,QAAQ,CAAC,GAAG,eAAe,OAAO,QAAO;AACxD,UAAK,qBAAqB,eAAe,MAAK;;AAEhD,eAAW,QAAQ;AACnB,iBAAa,QAAQ;UAChB;AAEL,eAAW,QAAQ;AACnB,SAAK,qBAAqB,QAAO;AACjC,WAAO,QAAQ;AACf,eAAW,QAAQ;AAInB,kBAAc;AACd,iBAAa,iBAAgB;AAC7B,uBAAmB,iBAAiB;AAAE,mBAAc;OAAS,IAAG;;AAElE,QAAK,UAAU,QAAO;;EAIxB,IAAI;EAEJ,eAAe,aAAa,OAAe;AACzC,OAAI,CAAC,MAAM,UAAW;AACtB,aAAU,QAAQ;AAClB,OAAI;AACF,kBAAc,QAAQ,MAAM,MAAM,UAAU,MAAK;aACzC;AACR,cAAU,QAAQ;;;EAItB,SAAS,aAAa,OAAe;AACnC,OAAI,CAAC,MAAM,UAAW;AACtB,gBAAa,cAAa;AAC1B,OAAI,MAAM,eAAe,EAClB,cAAa,MAAK;OAEvB,iBAAgB,iBAAiB,KAAK,aAAa,MAAM,EAAE,MAAM,WAAU;;AAI/E,kBAAgB;AACd,OAAI,MAAM,UAAgB,cAAa,WAAW,MAAK;IACxD;AAED,QAAM,aAAa,MAAM;AACvB,OAAI,MAAM,UAAW,cAAa,EAAC;IACpC;AAED,cAAY,MAAM,QAAQ,aAAa;AACrC,OAAI,CAAC,MAAM,UAAW,eAAc,QAAQ,CAAC,GAAG,SAAQ;IACzD;AAED,QAAM,qBAAqB;AACzB,OAAI,MAAM,SAAU;GACpB,MAAM,OAAO,SAAS,iBAAiB,MAAK;AAC5C,OAAI,QAAQ,WAAW,UAAU,QAAQ,SAAS,WAAW,MAAM,MAAM,iBAAiB,SAAS,IACjG,YAAW,QAAQ;IAEtB;AAED,QAAM,wBAAwB;AAC5B,OAAI,MAAM,SAAU;GACpB,MAAM,OAAO,SAAS,iBAAiB,MAAK;AAC5C,OAAI,QAAQ,WAAW,UAAU,QAAQ,SAAS,WAAW,MAAM,MAAM,iBAAiB,SAAS,IACjG,YAAW,QAAQ;IAEtB;EAID,MAAM,UAAU,eACd,qBAAqB;GACnB,SAAS,MAAM;GACf,MAAM,MAAM;GACZ,OAAO,MAAM;GACb,WAAW,MAAM;GACjB,WAAW,MAAM;GACjB,YAAY,MAAM;GAClB,YAAY,MAAM;GAClB,UAAU,SAAS;GACnB,gBAAgB,MAAM;GACvB,CAAC,CACJ;EAEA,MAAM,mBAAmB,eACjB,SAAS,SAAS,MAAM,mBAAmB,SACnD;AAEA,yBAAuB;GACrB,YAAY,MAAM,OAAO,aAAa;GACtC,WAAW,MAAM,OAAO,YAAY;GACpC,YAAY,MAAM,OAAO,aAAa;GACtC,YAAY,MAAM,OAAO,aAAa;GACtC;GACA;GACA,WAAW,MAAM,OAAO,YAAY;GACpC;GACA,gBAAgB,MAAM,OAAO,iBAAiB;GAC9C;GACA,OAAO,MAAM,OAAO,QAAQ;GAC5B;GACA,eAAe,MAAM,OAAO,gBAAgB;GAC5C;GACA,OAAO;GACP,UAAU,MAAM,OAAO,WAAW;GAClC,kBAAkB,MAAM,OAAO,mBAAmB;GAClD;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAA;;uBAIC,mBAuEM,OAAA;IAtEH,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;IAC3E,gBAAc,QAAA,aAAa,KAAA;IAC3B,iBAAe,QAAA,cAAc,KAAA;IAC7B,iBAAe,QAAA,cAAc,KAAA;IAC7B,iBAAe,QAAA,cAAc,KAAA;IAC7B,kBAAgB,SAAA,SAAY,KAAA;IAC5B,mBAAiB,UAAA,SAAa,KAAA;OAGvB,iBAAA,SAAA,WAAA,EADR,mBAOkB,SAAA;;IALf,KAAK,QAAA;IACL,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,OAAK,EAAI,MAAM,YAAY,MAAK,CAAA;uCAC/D,QAAA,MAAK,EAAA,EAAA,EACD,QAAA,cAAA,WAAA,EADI,mBAGF,QAHE,YAGX,KAAE,IAAA,mBAAA,IAAA,KAAA,CAAA,EAAA,IAAA,WAAA,IAAA,mBAAA,IAAA,KAAA,EAEH,mBAoDM,OAAA,EApDA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,aAAW,EAAI,MAAM,YAAY,YAAW,CAAA,EAAA,EAAA,CAChF,YA8BmB,MAAA,iBAAA,EAAA;IA7BT,eAAa,WAAA;4EAAU,QAAA;IAC9B,MAAM,MAAM,WAAW,aAAA,QAAe,WAAA;IACtC,UAAU,MAAM;IAChB,UAAU,MAAM;IAChB,iBAAe,sBAAA;IACf,iBAAe;IACf,iBAAa;;2BAMZ,CAHM,iBAAA,QADR,WAIE,KAAA,QAAA,WAAA;;KAFC,WAAY,UAAA;KACZ,OAAO,cAAA;uBAEV,mBAeW,UAAA,EAAA,KAAA,GAAA,EAAA,CAdT,YAAsD,2BAAA,EAAlC,aAAa,MAAM,aAAA,EAAA,MAAA,GAAA,CAAA,cAAA,CAAA,EACvC,YAYsB,6BAAA,MAAA;4BAVW,EAAA,UAAA,KAAA,EAD/B,mBAUmB,UAAA,MAAA,WATF,cAAA,QAAR,SAAI;0BADb,YAUmB,0BAAA;OARhB,KAAK,KAAK;OACV,OAAO,KAAK;OACZ,eAAa,KAAK;;8BAKqC,CAHxD,WAGwD,KAAA,QAAA,QAAA,EAD/C,MAAI,QAC2C,CAAA,gBAAA,gBAApD,KAAK,SAAS,KAAK,aAAa,KAAK,MAAK,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;OAO9C,UAAA,SAAA,WAAA,EADR,mBAkBM,OAAA;;IAhBH,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,eAAa,EAAI,MAAM,YAAY,cAAa,CAAA;OAGzE,UAAA,SAAA,WAAA,EADR,mBAMM,OAAA;;IAJH,IAAI,eAAA;IACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,cAAY,EAAI,MAAM,YAAY,aAAY,CAAA;sBAE5E,QAAA,aAAY,EAAA,IAAA,WAAA,IAGJ,gBAAA,SAAA,WAAA,EADb,mBAMM,OAAA;;IAJH,IAAI,cAAA;IACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,aAAW,EAAI,MAAM,YAAY,YAAW,CAAA;sBAE1E,QAAA,YAAW,EAAA,IAAA,WAAA,IAAA,mBAAA,IAAA,KAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA,CAAA,EAAA,EAAA,CAAA,EAAA,IAAA,WAAA"}
|
|
1
|
+
{"version":3,"file":"Autocomplete.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/autocomplete/Autocomplete.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref, toRef, useAttrs, useId, watch, useSlots } from 'vue'\nimport { AutocompleteRoot } from 'reka-ui'\nimport { autocompleteVariants, type AutocompleteVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAutocompleteProvide } from './Autocomplete.context'\nimport { hasSlotComponent } from '../../utils/hasSlotComponent'\nimport AutocompleteInput from './AutocompleteInput.vue'\nimport AutocompleteContent from './AutocompleteContent.vue'\nimport AutocompleteItem from './AutocompleteItem.vue'\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadonly: false,\n isRequired: false,\n multiple: false,\n multipleOverflow: 'wrap',\n modelValue: undefined,\n defaultValue: undefined,\n open: undefined,\n defaultOpen: undefined,\n items: () => [],\n loadItems: undefined,\n debounceMs: 200,\n filterOnOpen: false,\n truncateItems: true,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | string[]]\n 'update:open': [value: boolean]\n /** Fired when the user creates a new value via `creatable` or `<AutocompleteCreateItem>`. */\n 'create': [value: string]\n}>()\n\nexport interface AutocompleteItem {\n value: string\n label?: string\n textValue?: string\n isDisabled?: boolean\n}\n\ntype Props = {\n /** Visual style of the field. @default 'flat' */\n variant?: AutocompleteVariants['variant']\n /** Field height. @default 'md' */\n size?: AutocompleteVariants['size']\n /** Accent color applied to focus ring + floating label. @default 'default' */\n color?: AutocompleteVariants['color']\n /**\n * Where the `label` is rendered relative to the field.\n * - `inside`: floats above the trigger (shrinks when focused/filled)\n * - `outside`: sits above the field, static\n * - `outside-left`: sits to the left, horizontal layout\n * @default 'inside'\n */\n labelPlacement?: AutocompleteVariants['labelPlacement']\n /** Stretches root wrapper to 100% width. @default false */\n fullWidth?: boolean\n /** Marks the field as invalid. Triggers danger styling and enables `errorMessage`. @default false */\n isInvalid?: boolean\n /** Disables the field. @default false */\n isDisabled?: boolean\n /** Makes the field read-only. @default false */\n isReadonly?: boolean\n /** Adds a required asterisk next to the label. @default false */\n isRequired?: boolean\n /** Placeholder shown when empty. */\n placeholder?: string\n /** Form field name, for native form submission. */\n name?: string\n /** Field label. When omitted, the floating-label behavior is skipped. */\n label?: string\n /** Helper text displayed below the field. Suppressed when `isInvalid && errorMessage` is shown. */\n description?: string\n /** Error text displayed below the field. Only rendered when `isInvalid` is also true. */\n errorMessage?: string\n /** Extra classes merged onto the root wrapper via `composeClassName`. */\n class?: ClassValue\n /** Per-slot class overrides. Keys correspond to internal slot names (`base`, `label`, `mainWrapper`, `helperWrapper`, `errorMessage`, `description`). */\n classNames?: Partial<{\n base: ClassValue\n label: ClassValue\n mainWrapper: ClassValue\n helperWrapper: ClassValue\n errorMessage: ClassValue\n description: ClassValue\n }>\n\n /* ─── Autocomplete-specific ─────────────────────────────────────── */\n /** Two-way bound selected value. string in single mode, string[] in multiple mode. */\n modelValue?: string | string[]\n /** Initial selected value (uncontrolled). */\n defaultValue?: string | string[]\n /** Allow selecting multiple values. modelValue becomes string[]. @default false */\n multiple?: boolean\n /**\n * Controls how chips overflow in multiple mode.\n * - `wrap`: trigger grows in height, chips wrap to new lines (default)\n * - `collapse`: fixed height, overflowing chips are hidden behind \"+N more\"\n * @default 'wrap'\n */\n multipleOverflow?: 'wrap' | 'collapse'\n /** Controls open state of the dropdown. */\n open?: boolean\n /** Initial open state of the dropdown (uncontrolled). */\n defaultOpen?: boolean\n /** Static items list — used when no loadItems is provided. */\n items?: AutocompleteItem[]\n /** Async data source: called on every query change. */\n loadItems?: (query: string) => Promise<AutocompleteItem[]>\n /** Debounce delay for loadItems calls (ms). 0 = no debounce. */\n debounceMs?: number\n /** Apply filter immediately on open (default: false — show all items until user types). */\n filterOnOpen?: boolean\n /**\n * Truncate item text with an ellipsis when it overflows the dropdown width.\n * Set to `false` to show full text — the dropdown will widen to fit.\n * @default true\n */\n truncateItems?: boolean\n}\n\nconst attrs = useAttrs()\nconst generatedId = useId()\nconst inputId = computed(() => (attrs.id as string | undefined) ?? generatedId)\n\nconst hasLabel = computed(() => !!props.label)\n\nconst slots = useSlots()\n// Compound chrome present → pass slot through (advanced). Otherwise render the\n// input/content/items internally (short-form).\nconst usesCustomChrome = computed(() =>\n hasSlotComponent(slots.default?.(), [AutocompleteInput, AutocompleteContent]),\n)\n\n// Registry for slot-rendered items: value → label (populated by AutocompleteItem at mount).\n// Replaced with a new Map instance on each mutation so Vue's ref() reactivity tracks changes.\nconst slotItemRegistry = ref(new Map<string, string>())\n\nfunction registerItem(value: string, label: string) {\n const next = new Map(slotItemRegistry.value)\n next.set(value, label)\n slotItemRegistry.value = next\n}\n\nfunction unregisterItem(value: string) {\n const next = new Map(slotItemRegistry.value)\n next.delete(value)\n slotItemRegistry.value = next\n}\n\n// Internal async state\nconst isLoading = ref(false)\nconst internalItems = ref<AutocompleteItem[]>([...props.items])\n\n// ── Multiple-mode state ────────────────────────────────────────────────────\n// Tracks selected values as an array. Only meaningful when props.multiple=true.\nconst selectedValues = ref<string[]>(\n props.multiple && Array.isArray(props.modelValue) ? [...props.modelValue] : [],\n)\n\n// Controlled open state used in multiple mode to prevent the dropdown closing\n// after each item selection (Reka would normally close on selection).\nconst internalOpen = ref(props.defaultOpen ?? false)\n\n// Flag set by onMultipleSelect so handleOpenChange can distinguish item\n// selection from Escape/outside-click close.\nlet selectingItem = false\n\n// ── Open-state tracking ────────────────────────────────────────────────────\nconst isOpen = ref(props.defaultOpen ?? false)\nconst termAtOpen = ref('')\nconst isUserTyping = ref(false)\n// Controlled open state for single mode (mirrors multiple mode's internalOpen).\n// Driving open ourselves lets handleOpenChange gate spurious reopens — e.g. the\n// focus bounce caused when a create handler mutates the items list.\nconst singleOpen = ref(props.open ?? props.defaultOpen ?? false)\n// When true, handleOpenChange ignores open=true requests. Set briefly after a\n// single-mode create so the post-create re-render can't reopen the menu.\nlet blockReopen = false\nlet blockReopenTimer: ReturnType<typeof setTimeout> | undefined\nconst effectiveIgnoreFilter = computed(() => {\n if (props.loadItems) return true\n if (!props.filterOnOpen && isOpen.value && !isUserTyping.value) return true\n return false\n})\n\n// ── Label/value bridge ─────────────────────────────────────────────────────\n// Priority: items prop entry > slot registry > identity fallback\nfunction labelFor(value: string | undefined): string {\n if (value == null || value === '') return ''\n const match = internalItems.value.find((i) => i.value === value)\n if (match) return match.label ?? match.textValue ?? value\n return slotItemRegistry.value.get(value) ?? value\n}\nfunction valueFor(displayed: string): string {\n if (!displayed) return ''\n const match = internalItems.value.find(\n (i) => (i.label ?? i.textValue ?? i.value) === displayed,\n )\n if (match) return match.value\n for (const [value, label] of slotItemRegistry.value) {\n if (label === displayed) return value\n }\n return displayed\n}\n\nconst singleModelValue = computed(() =>\n props.multiple ? undefined : (props.modelValue as string | undefined),\n)\n\nconst searchTerm = ref(labelFor(singleModelValue.value))\n\nconst isFilled = computed(() =>\n props.multiple\n ? selectedValues.value.length > 0 || !!searchTerm.value\n : !!searchTerm.value,\n)\nconst hasItems = computed(() => internalItems.value.length > 0)\n\nconst selectedLabels = computed(() =>\n selectedValues.value.map(v => ({ value: v, label: labelFor(v) || v })),\n)\n\n// ── Helpers ────────────────────────────────────────────────────────────────\nconst descriptionId = computed(() => `${inputId.value}-description`)\nconst errorMessageId = computed(() => `${inputId.value}-error`)\nconst showError = computed(() => props.isInvalid && !!props.errorMessage)\nconst showDescription = computed(() => !!props.description && !showError.value)\nconst hasHelper = computed(() => showError.value || showDescription.value)\nconst ariaDescribedBy = computed(() => {\n if (showError.value) return errorMessageId.value\n if (showDescription.value) return descriptionId.value\n return undefined\n})\n\n// ── Watchers ───────────────────────────────────────────────────────────────\n\n// Parent → internal: sync controlled modelValue into local state\nwatch(() => props.modelValue, (val) => {\n if (props.multiple) {\n if (Array.isArray(val)) selectedValues.value = [...val]\n } else {\n const next = labelFor(val as string | undefined)\n if (searchTerm.value !== next) searchTerm.value = next\n }\n})\n\n// Parent → internal: sync consumer-controlled open into our single-mode state\nwatch(() => props.open, (val) => {\n if (!props.multiple && val !== undefined) singleOpen.value = val\n})\n\n// Internal → parent: single mode only — multiple mode emits inside onMultipleSelect\nwatch(searchTerm, (displayed) => {\n if (props.multiple) {\n if (isOpen.value && displayed !== termAtOpen.value) isUserTyping.value = true\n return\n }\n const next = valueFor(displayed)\n if (next !== (singleModelValue.value ?? '')) emit('update:modelValue', next)\n if (isOpen.value && displayed !== termAtOpen.value) isUserTyping.value = true\n})\n\nfunction handleOpenChange(val: boolean) {\n if (props.multiple) {\n isOpen.value = val\n // Suppress close when triggered by item selection; allow Escape/outside-click\n internalOpen.value = (!val && selectingItem) ? true : val\n selectingItem = false\n if (val) { termAtOpen.value = searchTerm.value; isUserTyping.value = false }\n else { isUserTyping.value = false }\n emit('update:open', val)\n return\n }\n\n // Single mode: ignore spurious reopen requests right after a create — the\n // create handler's re-render bounces focus back to the input, which would\n // otherwise reopen the menu via openOnFocus.\n if (val && blockReopen) return\n\n isOpen.value = val\n singleOpen.value = val\n if (val) { termAtOpen.value = searchTerm.value; isUserTyping.value = false }\n else { isUserTyping.value = false }\n emit('update:open', val)\n}\n\n// ── Multiple-mode actions ──────────────────────────────────────────────────\n\nfunction onMultipleSelect(value: string) {\n selectingItem = true\n const idx = selectedValues.value.indexOf(value)\n selectedValues.value = idx === -1\n ? [...selectedValues.value, value]\n : selectedValues.value.filter((_, i) => i !== idx)\n // Clear the input and drop out of \"typing\" mode so the filter is ignored and\n // the full list shows again (effectiveIgnoreFilter depends on !isUserTyping).\n searchTerm.value = ''\n isUserTyping.value = false\n emit('update:modelValue', selectedValues.value)\n}\n\nfunction removeValue(value: string) {\n selectedValues.value = selectedValues.value.filter(v => v !== value)\n emit('update:modelValue', selectedValues.value)\n}\n\nfunction clearAll() {\n selectedValues.value = []\n emit('update:modelValue', [])\n}\n\nfunction isSelected(value: string): boolean {\n return selectedValues.value.includes(value)\n}\n\n// ── Creatable ──────────────────────────────────────────────────────────────\n\nconst hasExactMatch = computed(() => {\n const term = searchTerm.value.trim().toLowerCase()\n if (!term) return false\n const inItems = internalItems.value.some(\n i => (i.label ?? i.textValue ?? i.value).toLowerCase() === term,\n )\n if (inItems) return true\n for (const label of slotItemRegistry.value.values()) {\n if (label.toLowerCase() === term) return true\n }\n return false\n})\n\nfunction onCreateValue(value: string) {\n const trimmed = value.trim()\n if (!trimmed) return\n if (props.multiple) {\n // We own selection state; add the value, then reset input + filter for the\n // next entry (dropdown is kept open and refocused by AutocompleteCreateItem).\n if (!selectedValues.value.includes(trimmed)) {\n selectingItem = true\n selectedValues.value = [...selectedValues.value, trimmed]\n emit('update:modelValue', selectedValues.value)\n }\n searchTerm.value = ''\n isUserTyping.value = false\n } else {\n // Single mode: set the value ourselves and close the (controlled) dropdown.\n searchTerm.value = trimmed\n emit('update:modelValue', trimmed)\n isOpen.value = false\n singleOpen.value = false\n // The create handler (parent @create) typically mutates the items list, which\n // re-renders and bounces focus back to the input — that fires openOnFocus and\n // would reopen the menu. Block reopen requests briefly so the close sticks.\n blockReopen = true\n clearTimeout(blockReopenTimer)\n blockReopenTimer = setTimeout(() => { blockReopen = false }, 300)\n }\n emit('create', trimmed)\n}\n\n// ── Async loading ──────────────────────────────────────────────────────────\nlet debounceTimer: ReturnType<typeof setTimeout> | undefined\n\nasync function runLoadItems(query: string) {\n if (!props.loadItems) return\n isLoading.value = true\n try {\n internalItems.value = await props.loadItems(query)\n } finally {\n isLoading.value = false\n }\n}\n\nfunction scheduleLoad(query: string) {\n if (!props.loadItems) return\n clearTimeout(debounceTimer)\n if (props.debounceMs === 0) {\n void runLoadItems(query)\n } else {\n debounceTimer = setTimeout(() => void runLoadItems(query), props.debounceMs)\n }\n}\n\nonMounted(() => {\n if (props.loadItems) void runLoadItems(searchTerm.value)\n})\n\nwatch(searchTerm, (q) => {\n if (props.loadItems) scheduleLoad(q)\n})\n\nwatch(() => props.items, (newItems) => {\n if (!props.loadItems) internalItems.value = [...newItems]\n})\n\nwatch(internalItems, () => {\n if (props.multiple) return\n const next = labelFor(singleModelValue.value)\n if (next && searchTerm.value !== next && valueFor(searchTerm.value) === (singleModelValue.value ?? '')) {\n searchTerm.value = next\n }\n})\n\nwatch(slotItemRegistry, () => {\n if (props.multiple) return\n const next = labelFor(singleModelValue.value)\n if (next && searchTerm.value !== next && valueFor(searchTerm.value) === (singleModelValue.value ?? '')) {\n searchTerm.value = next\n }\n})\n\n// ── Styles / context ───────────────────────────────────────────────────────\n\nconst slotFns = computed(() =>\n autocompleteVariants({\n variant: props.variant,\n size: props.size,\n color: props.color,\n fullWidth: props.fullWidth,\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n isReadonly: props.isReadonly,\n hasLabel: hasLabel.value,\n labelPlacement: props.labelPlacement,\n }),\n)\n\nconst showOutsideLabel = computed(\n () => hasLabel.value && props.labelPlacement !== 'inside',\n)\n\nuseAutocompleteProvide({\n isDisabled: toRef(props, 'isDisabled'),\n isInvalid: toRef(props, 'isInvalid'),\n isReadonly: toRef(props, 'isReadonly'),\n isRequired: toRef(props, 'isRequired'),\n isLoading,\n isFilled,\n fullWidth: toRef(props, 'fullWidth'),\n hasLabel,\n labelPlacement: toRef(props, 'labelPlacement'),\n inputId,\n label: toRef(props, 'label'),\n ariaDescribedBy,\n truncateItems: toRef(props, 'truncateItems'),\n hasItems,\n slots: slotFns,\n multiple: toRef(props, 'multiple'),\n multipleOverflow: toRef(props, 'multipleOverflow'),\n selectedValues,\n selectedLabels,\n onMultipleSelect,\n removeValue,\n clearAll,\n isSelected,\n registerItem,\n unregisterItem,\n searchTerm,\n hasExactMatch,\n onCreateValue,\n})\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :data-invalid=\"isInvalid || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-readonly=\"isReadonly || undefined\"\n :data-required=\"isRequired || undefined\"\n :data-has-label=\"hasLabel || undefined\"\n :data-has-helper=\"hasHelper || undefined\"\n >\n <label\n v-if=\"showOutsideLabel\"\n :for=\"inputId\"\n :class=\"composeClassName(slotFns.label(), props.classNames?.label)\"\n >{{ label }}<span\n v-if=\"isRequired\"\n aria-hidden=\"true\"\n > *</span></label>\n\n <div :class=\"composeClassName(slotFns.mainWrapper(), props.classNames?.mainWrapper)\">\n <AutocompleteRoot\n v-model:model-value=\"searchTerm\"\n :open=\"props.multiple ? internalOpen : singleOpen\"\n :disabled=\"props.isDisabled\"\n :required=\"props.isRequired\"\n :ignore-filter=\"effectiveIgnoreFilter\"\n :open-on-focus=\"true\"\n @update:open=\"handleOpenChange\"\n >\n <slot\n v-if=\"usesCustomChrome\"\n :is-loading=\"isLoading\"\n :items=\"internalItems\"\n />\n <template v-else>\n <AutocompleteInput :placeholder=\"props.placeholder\" />\n <AutocompleteContent>\n <AutocompleteItem\n v-for=\"item in internalItems\"\n :key=\"item.value\"\n :value=\"item.value\"\n :is-disabled=\"item.isDisabled\"\n >\n <slot\n name=\"item\"\n :item=\"item\"\n >{{ item.label ?? item.textValue ?? item.value }}</slot>\n </AutocompleteItem>\n </AutocompleteContent>\n </template>\n </AutocompleteRoot>\n\n <div\n v-if=\"hasHelper\"\n :class=\"composeClassName(slotFns.helperWrapper(), props.classNames?.helperWrapper)\"\n >\n <div\n v-if=\"showError\"\n :id=\"errorMessageId\"\n :class=\"composeClassName(slotFns.errorMessage(), props.classNames?.errorMessage)\"\n >\n {{ errorMessage }}\n </div>\n <div\n v-else-if=\"showDescription\"\n :id=\"descriptionId\"\n :class=\"composeClassName(slotFns.description(), props.classNames?.description)\"\n >\n {{ description }}\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -37,7 +37,13 @@ var Avatar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
37
37
|
type: Boolean,
|
|
38
38
|
default: false
|
|
39
39
|
},
|
|
40
|
-
class: {
|
|
40
|
+
class: { type: [
|
|
41
|
+
String,
|
|
42
|
+
Boolean,
|
|
43
|
+
null,
|
|
44
|
+
Object,
|
|
45
|
+
Array
|
|
46
|
+
] },
|
|
41
47
|
classNames: {}
|
|
42
48
|
},
|
|
43
49
|
setup(__props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/avatar/Avatar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { AvatarRoot, AvatarImage, AvatarFallback } from 'reka-ui'\nimport { avatarVariants, type AvatarVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAvatarGroupInject } from './avatar-group.context'\n\nconst props = withDefaults(defineProps<{\n src?: string\n alt?: string\n name?: string\n size?: AvatarVariants['size']\n color?: AvatarVariants['color']\n variant?: AvatarVariants['variant']\n isBordered?: boolean\n isDisabled?: boolean\n showFallback?: boolean\n class?: ClassValue\n /** Per-slot class name overrides */\n classNames?: Partial<{\n base: ClassValue\n image: ClassValue\n fallback: ClassValue\n }>\n}>(), {\n isBordered: false,\n isDisabled: false,\n showFallback: false,\n})\n\n// Inject AvatarGroup context with ref-based fallbacks (mirrors Button.vue pattern)\nconst groupCtx = useAvatarGroupInject({\n size: ref('md'),\n isBordered: ref(false),\n isDisabled: ref(false),\n isGrid: ref(false),\n isInGroup: ref(false),\n})\n\n// Prop precedence rules (matching ButtonGroup D-13):\n// - group disabled ALWAYS wins over child prop\n// - other props: child prop wins over group value (child ?? group)\nconst finalSize = computed(() => props.size ?? groupCtx.size.value)\nconst finalIsBordered = computed(() => props.isBordered || groupCtx.isBordered.value)\nconst isDisabled = computed(() => groupCtx.isDisabled.value || props.isDisabled)\nconst isInGroup = computed(() => groupCtx.isInGroup.value)\n\n// Compute initials from name: first letter of up to 2 words\nconst initials = computed(() => {\n if (!props.name) return ''\n const parts = props.name.trim().split(/\\s+/)\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase()\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase()\n})\n\nconst slotFns = computed(() =>\n avatarVariants({\n size: finalSize.value,\n color: props.color,\n variant: props.variant,\n })\n)\n\n// Border class applied manually since the styles don't have isBordered variant\nconst borderedClass = computed(() =>\n finalIsBordered.value ? 'ring-2 ring-offset-2 ring-default' : undefined\n)\n\n// InGroup class for negative margin overlap\nconst inGroupClass = computed(() =>\n isInGroup.value ? '-me-2' : undefined\n)\n</script>\n\n<template>\n <AvatarRoot\n :class=\"composeClassName(slotFns.base(), borderedClass, inGroupClass, props.class, props.classNames?.base)\"\n :data-disabled=\"isDisabled || undefined\"\n :data-bordered=\"finalIsBordered || undefined\"\n >\n <AvatarImage\n v-if=\"props.src && !props.showFallback\"\n :src=\"props.src\"\n :alt=\"props.alt ?? props.name ?? ''\"\n :class=\"composeClassName(slotFns.image(), props.classNames?.image)\"\n />\n <!--\n delayMs: only pass a value when we have a src — Reka UI treats delayMs=undefined\n as \"show immediately\" (canRender starts true). Passing delayMs=0 is falsy but\n not undefined, so the timeout never fires and fallback stays hidden forever.\n -->\n <AvatarFallback\n :class=\"composeClassName(slotFns.fallback(), props.classNames?.fallback)\"\n v-bind=\"props.src && !props.showFallback ? { 'delay-ms': 600 } : {}\"\n >\n <slot name=\"fallback\">\n <span\n v-if=\"initials\"\n :class=\"'avatar__name text-xs font-medium leading-none'\"\n >{{ initials }}</span>\n <svg\n v-else\n class=\"avatar__icon size-4/5\"\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z\" />\n </svg>\n </slot>\n </AvatarFallback>\n </AvatarRoot>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Avatar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/avatar/Avatar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { AvatarRoot, AvatarImage, AvatarFallback } from 'reka-ui'\nimport { avatarVariants, type AvatarVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAvatarGroupInject } from './avatar-group.context'\n\nconst props = withDefaults(defineProps<{\n src?: string\n alt?: string\n name?: string\n size?: AvatarVariants['size']\n color?: AvatarVariants['color']\n variant?: AvatarVariants['variant']\n isBordered?: boolean\n isDisabled?: boolean\n showFallback?: boolean\n class?: ClassValue\n /** Per-slot class name overrides */\n classNames?: Partial<{\n base: ClassValue\n image: ClassValue\n fallback: ClassValue\n }>\n}>(), {\n isBordered: false,\n isDisabled: false,\n showFallback: false,\n})\n\n// Inject AvatarGroup context with ref-based fallbacks (mirrors Button.vue pattern)\nconst groupCtx = useAvatarGroupInject({\n size: ref('md'),\n isBordered: ref(false),\n isDisabled: ref(false),\n isGrid: ref(false),\n isInGroup: ref(false),\n})\n\n// Prop precedence rules (matching ButtonGroup D-13):\n// - group disabled ALWAYS wins over child prop\n// - other props: child prop wins over group value (child ?? group)\nconst finalSize = computed(() => props.size ?? groupCtx.size.value)\nconst finalIsBordered = computed(() => props.isBordered || groupCtx.isBordered.value)\nconst isDisabled = computed(() => groupCtx.isDisabled.value || props.isDisabled)\nconst isInGroup = computed(() => groupCtx.isInGroup.value)\n\n// Compute initials from name: first letter of up to 2 words\nconst initials = computed(() => {\n if (!props.name) return ''\n const parts = props.name.trim().split(/\\s+/)\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase()\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase()\n})\n\nconst slotFns = computed(() =>\n avatarVariants({\n size: finalSize.value,\n color: props.color,\n variant: props.variant,\n })\n)\n\n// Border class applied manually since the styles don't have isBordered variant\nconst borderedClass = computed(() =>\n finalIsBordered.value ? 'ring-2 ring-offset-2 ring-default' : undefined\n)\n\n// InGroup class for negative margin overlap\nconst inGroupClass = computed(() =>\n isInGroup.value ? '-me-2' : undefined\n)\n</script>\n\n<template>\n <AvatarRoot\n :class=\"composeClassName(slotFns.base(), borderedClass, inGroupClass, props.class, props.classNames?.base)\"\n :data-disabled=\"isDisabled || undefined\"\n :data-bordered=\"finalIsBordered || undefined\"\n >\n <AvatarImage\n v-if=\"props.src && !props.showFallback\"\n :src=\"props.src\"\n :alt=\"props.alt ?? props.name ?? ''\"\n :class=\"composeClassName(slotFns.image(), props.classNames?.image)\"\n />\n <!--\n delayMs: only pass a value when we have a src — Reka UI treats delayMs=undefined\n as \"show immediately\" (canRender starts true). Passing delayMs=0 is falsy but\n not undefined, so the timeout never fires and fallback stays hidden forever.\n -->\n <AvatarFallback\n :class=\"composeClassName(slotFns.fallback(), props.classNames?.fallback)\"\n v-bind=\"props.src && !props.showFallback ? { 'delay-ms': 600 } : {}\"\n >\n <slot name=\"fallback\">\n <span\n v-if=\"initials\"\n :class=\"'avatar__name text-xs font-medium leading-none'\"\n >{{ initials }}</span>\n <svg\n v-else\n class=\"avatar__icon size-4/5\"\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z\" />\n </svg>\n </slot>\n </AvatarFallback>\n </AvatarRoot>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOA,MAAM,QAAQ;EAwBd,MAAM,WAAW,qBAAqB;GACpC,MAAM,IAAI,KAAK;GACf,YAAY,IAAI,MAAM;GACtB,YAAY,IAAI,MAAM;GACtB,QAAQ,IAAI,MAAM;GAClB,WAAW,IAAI,MAAM;GACtB,CAAA;EAKD,MAAM,YAAY,eAAe,MAAM,QAAQ,SAAS,KAAK,MAAK;EAClE,MAAM,kBAAkB,eAAe,MAAM,cAAc,SAAS,WAAW,MAAK;EACpF,MAAM,aAAa,eAAe,SAAS,WAAW,SAAS,MAAM,WAAU;EAC/E,MAAM,YAAY,eAAe,SAAS,UAAU,MAAK;EAGzD,MAAM,WAAW,eAAe;AAC9B,OAAI,CAAC,MAAM,KAAM,QAAO;GACxB,MAAM,QAAQ,MAAM,KAAK,MAAM,CAAC,MAAM,MAAK;AAC3C,OAAI,MAAM,WAAW,EAAG,QAAO,MAAM,GAAG,OAAO,EAAE,CAAC,aAAY;AAC9D,WAAQ,MAAM,GAAG,OAAO,EAAE,GAAG,MAAM,MAAM,SAAS,GAAG,OAAO,EAAE,EAAE,aAAY;IAC7E;EAED,MAAM,UAAU,eACd,eAAe;GACb,MAAM,UAAU;GAChB,OAAO,MAAM;GACb,SAAS,MAAM;GAChB,CAAA,CACH;EAGA,MAAM,gBAAgB,eACpB,gBAAgB,QAAQ,sCAAsC,KAAA,EAChE;EAGA,MAAM,eAAe,eACnB,UAAU,QAAQ,UAAU,KAAA,EAC9B;;uBAIE,YAqCa,MAAA,WAAA,EAAA;IApCV,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,cAAA,OAAe,aAAA,OAAc,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;IACxG,iBAAe,WAAA,SAAc,KAAA;IAC7B,iBAAe,gBAAA,SAAmB,KAAA;;2BAOjC,CAJM,MAAM,OAAG,CAAK,MAAM,gBAAA,WAAA,EAD5B,YAKE,MAAA,YAAA,EAAA;;KAHC,KAAK,MAAM;KACX,KAAK,MAAM,OAAO,MAAM,QAAI;KAC5B,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,OAAK,EAAI,MAAM,YAAY,MAAK,CAAA;;;;;wCAOnE,YAoBiB,MAAA,eAAA,EApBjB,WAoBiB,EAnBd,OAAO,MAAA,iBAAgB,CAAC,QAAA,MAAQ,UAAQ,EAAI,MAAM,YAAY,SAAQ,EAAA,EAC/D,MAAM,OAAG,CAAK,MAAM,eAAY,EAAA,YAAA,KAAA,GAAA,EAAA,CAAA,EAAA;4BAiBjC,CAfP,WAeO,KAAA,QAAA,YAAA,EAAA,QAAA,CAbG,SAAA,SAAA,WAAA,EADR,mBAGsB,QAHtB,YAGsB,gBAAlB,SAAA,MAAQ,EAAA,EAAA,KAAA,WAAA,EACZ,mBASM,OATN,YASM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CADJ,mBAAyJ,QAAA,EAAnJ,GAAE,gJAA8I,EAAA,MAAA,GAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
|
|
@@ -9,7 +9,13 @@ var Badge_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
|
|
|
9
9
|
size: { default: "md" },
|
|
10
10
|
variant: { default: "primary" },
|
|
11
11
|
placement: { default: "top-right" },
|
|
12
|
-
class: {
|
|
12
|
+
class: { type: [
|
|
13
|
+
String,
|
|
14
|
+
Boolean,
|
|
15
|
+
null,
|
|
16
|
+
Object,
|
|
17
|
+
Array
|
|
18
|
+
] },
|
|
13
19
|
classNames: {}
|
|
14
20
|
},
|
|
15
21
|
setup(__props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/badge/Badge.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { badgeVariants, type BadgeVariants } from \"@auronui/styles\";\nimport { composeClassName , type ClassValue} from \"../../utils/composeClassName\";\n\nconst props = withDefaults(\n defineProps<{\n color?: BadgeVariants[\"color\"];\n size?: BadgeVariants[\"size\"];\n variant?: BadgeVariants[\"variant\"];\n placement?: BadgeVariants[\"placement\"];\n class?: ClassValue;\n /** Per-slot class name overrides. */\n classNames?: Partial<{\n anchor: ClassValue;\n base: ClassValue;\n label: ClassValue;\n }>;\n }>(),\n {\n color: \"default\",\n size: \"md\",\n variant: \"primary\",\n placement: \"top-right\",\n }\n);\n\nconst slotFns = computed(() =>\n badgeVariants({\n color: props.color,\n size: props.size,\n variant: props.variant,\n placement: props.placement,\n })\n);\n</script>\n\n<template>\n <div :class=\"composeClassName(slotFns.anchor(), props.classNames?.anchor)\">\n <slot />\n <span :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\">\n <span :class=\"composeClassName(slotFns.label(), props.classNames?.label)\">\n <slot name=\"label\" />\n </span>\n </span>\n </div>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Badge.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/badge/Badge.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { badgeVariants, type BadgeVariants } from \"@auronui/styles\";\nimport { composeClassName , type ClassValue} from \"../../utils/composeClassName\";\n\nconst props = withDefaults(\n defineProps<{\n color?: BadgeVariants[\"color\"];\n size?: BadgeVariants[\"size\"];\n variant?: BadgeVariants[\"variant\"];\n placement?: BadgeVariants[\"placement\"];\n class?: ClassValue;\n /** Per-slot class name overrides. */\n classNames?: Partial<{\n anchor: ClassValue;\n base: ClassValue;\n label: ClassValue;\n }>;\n }>(),\n {\n color: \"default\",\n size: \"md\",\n variant: \"primary\",\n placement: \"top-right\",\n }\n);\n\nconst slotFns = computed(() =>\n badgeVariants({\n color: props.color,\n size: props.size,\n variant: props.variant,\n placement: props.placement,\n })\n);\n</script>\n\n<template>\n <div :class=\"composeClassName(slotFns.anchor(), props.classNames?.anchor)\">\n <slot />\n <span :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\">\n <span :class=\"composeClassName(slotFns.label(), props.classNames?.label)\">\n <slot name=\"label\" />\n </span>\n </span>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAKA,MAAM,QAAQ;EAsBd,MAAM,UAAU,eACd,cAAc;GACZ,OAAO,MAAM;GACb,MAAM,MAAM;GACZ,SAAS,MAAM;GACf,WAAW,MAAM;GAClB,CAAA,CACF;;uBAIC,mBAOM,OAAA,EAPA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,QAAM,EAAI,MAAM,YAAY,OAAM,CAAA,EAAA,EAAA,CACtE,WAAQ,KAAA,QAAA,UAAA,EACR,mBAIO,QAAA,EAJA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA,EAAA,EAAA,CAChF,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,OAAK,EAAI,MAAM,YAAY,MAAK,CAAA,EAAA,EAAA,CACrE,WAAqB,KAAA,QAAA,QAAA,CAAA,EAAA,EAAA,CAAA,EAAA,EAAA,CAAA,EAAA,EAAA"}
|
|
@@ -23,7 +23,13 @@ var BreadcrumbItem_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
|
|
|
23
23
|
type: Boolean,
|
|
24
24
|
default: false
|
|
25
25
|
},
|
|
26
|
-
class: {
|
|
26
|
+
class: { type: [
|
|
27
|
+
String,
|
|
28
|
+
Boolean,
|
|
29
|
+
null,
|
|
30
|
+
Object,
|
|
31
|
+
Array
|
|
32
|
+
] },
|
|
27
33
|
classNames: {}
|
|
28
34
|
},
|
|
29
35
|
setup(__props) {
|
package/dist/components/breadcrumbs/BreadcrumbItem.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BreadcrumbItem.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/breadcrumbs/BreadcrumbItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h } from 'vue'\nimport { useBreadcrumbsInject } from './breadcrumbs.context'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\nconst props = withDefaults(defineProps<{\n href?: string\n isLast?: boolean\n class?: ClassValue\n /**\n * Per-slot class overrides. Each key maps to a named slot in the component;\n * the value is merged with the generated variant classes via `composeClassName`.\n */\n classNames?: Partial<{\n item: ClassValue\n link: ClassValue\n separator: ClassValue\n }>\n}>(), {\n isLast: false,\n})\n\nconst ctx = useBreadcrumbsInject()\n\n// Wrap the separator slot in a functional component so arbitrary VNodes\n// (including text nodes) render correctly inside a <template> block.\nconst SeparatorRenderer = computed(() =>\n ctx.separatorSlot\n ? () => h(() => (ctx.separatorSlot as () => ReturnType<typeof h>[])())\n : null\n)\n</script>\n\n<template>\n <li\n :class=\"composeClassName(ctx.slotFns.value.item(), props.class, props.classNames?.item)\"\n :aria-current=\"props.isLast ? 'page' : undefined\"\n >\n <a\n v-if=\"props.href && !props.isLast\"\n :href=\"props.href\"\n :class=\"composeClassName(ctx.slotFns.value.link(), props.classNames?.link)\"\n >\n <slot />\n </a>\n <span\n v-else\n :class=\"composeClassName(ctx.slotFns.value.link(), props.classNames?.link)\"\n >\n <slot />\n </span>\n <span\n v-if=\"!props.isLast\"\n :class=\"composeClassName(ctx.slotFns.value.separator(), props.classNames?.separator)\"\n aria-hidden=\"true\"\n >\n <component\n :is=\"SeparatorRenderer\"\n v-if=\"SeparatorRenderer\"\n />\n <svg\n v-else\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n focusable=\"false\"\n >\n <polyline points=\"9 6 15 12 9 18\" />\n </svg>\n </span>\n </li>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"BreadcrumbItem.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/breadcrumbs/BreadcrumbItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h } from 'vue'\nimport { useBreadcrumbsInject } from './breadcrumbs.context'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\nconst props = withDefaults(defineProps<{\n href?: string\n isLast?: boolean\n class?: ClassValue\n /**\n * Per-slot class overrides. Each key maps to a named slot in the component;\n * the value is merged with the generated variant classes via `composeClassName`.\n */\n classNames?: Partial<{\n item: ClassValue\n link: ClassValue\n separator: ClassValue\n }>\n}>(), {\n isLast: false,\n})\n\nconst ctx = useBreadcrumbsInject()\n\n// Wrap the separator slot in a functional component so arbitrary VNodes\n// (including text nodes) render correctly inside a <template> block.\nconst SeparatorRenderer = computed(() =>\n ctx.separatorSlot\n ? () => h(() => (ctx.separatorSlot as () => ReturnType<typeof h>[])())\n : null\n)\n</script>\n\n<template>\n <li\n :class=\"composeClassName(ctx.slotFns.value.item(), props.class, props.classNames?.item)\"\n :aria-current=\"props.isLast ? 'page' : undefined\"\n >\n <a\n v-if=\"props.href && !props.isLast\"\n :href=\"props.href\"\n :class=\"composeClassName(ctx.slotFns.value.link(), props.classNames?.link)\"\n >\n <slot />\n </a>\n <span\n v-else\n :class=\"composeClassName(ctx.slotFns.value.link(), props.classNames?.link)\"\n >\n <slot />\n </span>\n <span\n v-if=\"!props.isLast\"\n :class=\"composeClassName(ctx.slotFns.value.separator(), props.classNames?.separator)\"\n aria-hidden=\"true\"\n >\n <component\n :is=\"SeparatorRenderer\"\n v-if=\"SeparatorRenderer\"\n />\n <svg\n v-else\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n focusable=\"false\"\n >\n <polyline points=\"9 6 15 12 9 18\" />\n </svg>\n </span>\n </li>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKA,MAAM,QAAQ;EAiBd,MAAM,MAAM,sBAAqB;EAIjC,MAAM,oBAAoB,eACxB,IAAI,sBACM,QAAS,IAAI,eAAgD,CAAA,GACnE,KACN;;uBAIE,mBAwCK,MAAA;IAvCF,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;IACrF,gBAAc,MAAM,SAAM,SAAY,KAAA;OAG/B,MAAM,QAAI,CAAK,MAAM,UAAA,WAAA,EAD7B,mBAMI,KAAA;;IAJD,MAAM,MAAM;IACZ,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,MAAI,EAAI,MAAM,YAAY,KAAI,CAAA;OAEzE,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,IAAA,WAAA,KAAA,WAAA,EAEV,mBAKO,QAAA;;IAHJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,MAAI,EAAI,MAAM,YAAY,KAAI,CAAA;OAEzE,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA,GAAA,CAGD,MAAM,UAAA,WAAA,EADf,mBAsBO,QAAA;;IApBJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,WAAS,EAAI,MAAM,YAAY,UAAS,CAAA;IACnF,eAAY;OAIJ,kBAAA,SAAA,WAAA,EAFR,YAGE,wBAFK,kBAAA,MAAiB,EAAA,EAAA,KAAA,GAAA,CAAA,KAAA,WAAA,EAGxB,mBAYM,OAZN,YAYM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CADJ,mBAAoC,YAAA,EAA1B,QAAO,kBAAgB,EAAA,MAAA,GAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA,CAAA,EAAA,IAAA,WAAA"}
|
|
@@ -7,7 +7,13 @@ var Breadcrumbs_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
7
7
|
__name: "Breadcrumbs",
|
|
8
8
|
props: {
|
|
9
9
|
maxItems: {},
|
|
10
|
-
class: {
|
|
10
|
+
class: { type: [
|
|
11
|
+
String,
|
|
12
|
+
Boolean,
|
|
13
|
+
null,
|
|
14
|
+
Object,
|
|
15
|
+
Array
|
|
16
|
+
] },
|
|
11
17
|
classNames: {}
|
|
12
18
|
},
|
|
13
19
|
setup(__props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumbs.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/breadcrumbs/Breadcrumbs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, cloneVNode, type VNode } from 'vue'\nimport { breadcrumbsVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useBreadcrumbsProvide } from './breadcrumbs.context'\n\nconst props = withDefaults(defineProps<{\n maxItems?: number\n class?: ClassValue\n /** Override classes on any named slot. */\n classNames?: Partial<{\n base: ClassValue\n item: ClassValue\n }>\n}>(), {})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n separator?(): VNode;\n}>();\n\nconst slotFns = computed(() => breadcrumbsVariants({}))\n\n// Flatten default slot children into an array of VNodes we can iterate.\nfunction flattenChildren(nodes: VNode[] | undefined): VNode[] {\n if (!nodes) return []\n const out: VNode[] = []\n for (const n of nodes) {\n // Skip comment / text whitespace nodes; detect Fragment by string representation\n if (typeof n.type === 'symbol' && String(n.type) === 'Symbol(v-fgt)') {\n out.push(...flattenChildren((n.children as VNode[]) ?? []))\n } else if (n.type && typeof n.type !== 'symbol') {\n out.push(n)\n }\n }\n return out\n}\n\nconst renderedChildren = computed(() => {\n const raw = slots.default?.() ?? []\n const items = flattenChildren(raw as VNode[])\n const max = props.maxItems\n let list = items\n if (max && items.length > max && max >= 2) {\n const first = items[0]\n const last = items.slice(items.length - (max - 2))\n const ellipsis = h(\n 'li',\n { class: composeClassName(slotFns.value.item(), props.classNames?.item), 'aria-hidden': 'true' },\n '…'\n )\n list = [first, ellipsis, ...last]\n }\n // Clone the last BreadcrumbItem VNode with isLast prop set\n if (list.length > 0) {\n const lastIdx = list.length - 1\n list = list.map((vnode, idx) =>\n idx === lastIdx ? cloneVNode(vnode, { isLast: true }) : vnode\n )\n }\n return list\n})\n\nconst total = computed(() => renderedChildren.value.length)\n\nuseBreadcrumbsProvide({\n slotFns,\n total,\n separatorSlot: slots.separator,\n})\n</script>\n\n<template>\n <nav\n aria-label=\"Breadcrumb\"\n :class=\"props.class\"\n >\n <ol :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\">\n <component\n :is=\"child\"\n v-for=\"(child, idx) in renderedChildren\"\n :key=\"idx\"\n />\n </ol>\n </nav>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/breadcrumbs/Breadcrumbs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, cloneVNode, type VNode } from 'vue'\nimport { breadcrumbsVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useBreadcrumbsProvide } from './breadcrumbs.context'\n\nconst props = withDefaults(defineProps<{\n maxItems?: number\n class?: ClassValue\n /** Override classes on any named slot. */\n classNames?: Partial<{\n base: ClassValue\n item: ClassValue\n }>\n}>(), {})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n separator?(): VNode;\n}>();\n\nconst slotFns = computed(() => breadcrumbsVariants({}))\n\n// Flatten default slot children into an array of VNodes we can iterate.\nfunction flattenChildren(nodes: VNode[] | undefined): VNode[] {\n if (!nodes) return []\n const out: VNode[] = []\n for (const n of nodes) {\n // Skip comment / text whitespace nodes; detect Fragment by string representation\n if (typeof n.type === 'symbol' && String(n.type) === 'Symbol(v-fgt)') {\n out.push(...flattenChildren((n.children as VNode[]) ?? []))\n } else if (n.type && typeof n.type !== 'symbol') {\n out.push(n)\n }\n }\n return out\n}\n\nconst renderedChildren = computed(() => {\n const raw = slots.default?.() ?? []\n const items = flattenChildren(raw as VNode[])\n const max = props.maxItems\n let list = items\n if (max && items.length > max && max >= 2) {\n const first = items[0]\n const last = items.slice(items.length - (max - 2))\n const ellipsis = h(\n 'li',\n { class: composeClassName(slotFns.value.item(), props.classNames?.item), 'aria-hidden': 'true' },\n '…'\n )\n list = [first, ellipsis, ...last]\n }\n // Clone the last BreadcrumbItem VNode with isLast prop set\n if (list.length > 0) {\n const lastIdx = list.length - 1\n list = list.map((vnode, idx) =>\n idx === lastIdx ? cloneVNode(vnode, { isLast: true }) : vnode\n )\n }\n return list\n})\n\nconst total = computed(() => renderedChildren.value.length)\n\nuseBreadcrumbsProvide({\n slotFns,\n total,\n separatorSlot: slots.separator,\n})\n</script>\n\n<template>\n <nav\n aria-label=\"Breadcrumb\"\n :class=\"props.class\"\n >\n <ol :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\">\n <component\n :is=\"child\"\n v-for=\"(child, idx) in renderedChildren\"\n :key=\"idx\"\n />\n </ol>\n </nav>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAMA,MAAM,QAAQ;EAUd,MAAM,QAAQ,UAGV;EAEJ,MAAM,UAAU,eAAe,oBAAoB,EAAE,CAAC,CAAA;EAGtD,SAAS,gBAAgB,OAAqC;AAC5D,OAAI,CAAC,MAAO,QAAO,EAAC;GACpB,MAAM,MAAe,EAAC;AACtB,QAAK,MAAM,KAAK,MAEd,KAAI,OAAO,EAAE,SAAS,YAAY,OAAO,EAAE,KAAK,KAAK,gBACnD,KAAI,KAAK,GAAG,gBAAiB,EAAE,YAAwB,EAAE,CAAC,CAAA;YACjD,EAAE,QAAQ,OAAO,EAAE,SAAS,SACrC,KAAI,KAAK,EAAC;AAGd,UAAO;;EAGT,MAAM,mBAAmB,eAAe;GAEtC,MAAM,QAAQ,gBADF,MAAM,WAAW,IAAI,EAAC,CACU;GAC5C,MAAM,MAAM,MAAM;GAClB,IAAI,OAAO;AACX,OAAI,OAAO,MAAM,SAAS,OAAO,OAAO,GAAG;IACzC,MAAM,QAAQ,MAAM;IACpB,MAAM,OAAO,MAAM,MAAM,MAAM,UAAU,MAAM,GAAE;AAMjD,WAAO;KAAC;KALS,EACf,MACA;MAAE,OAAO,iBAAiB,QAAQ,MAAM,MAAM,EAAE,MAAM,YAAY,KAAK;MAAE,eAAe;MAAQ,EAChG,IACF;KACyB,GAAG;KAAI;;AAGlC,OAAI,KAAK,SAAS,GAAG;IACnB,MAAM,UAAU,KAAK,SAAS;AAC9B,WAAO,KAAK,KAAK,OAAO,QACtB,QAAQ,UAAU,WAAW,OAAO,EAAE,QAAQ,MAAM,CAAC,GAAG,MAC1D;;AAEF,UAAO;IACR;AAID,wBAAsB;GACpB;GACA,OAJY,eAAe,iBAAiB,MAAM,OAAM;GAKxD,eAAe,MAAM;GACtB,CAAA;;uBAIC,mBAWM,OAAA;IAVJ,cAAW;IACV,OAAK,eAAE,MAAM,MAAK;OAEnB,mBAMK,MAAA,EANA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA,EAAA,EAAA,EAAA,UAAA,KAAA,EAC9E,mBAIE,UAAA,MAAA,WAFuB,iBAAA,QAAf,OAAO,QAAG;wBAFpB,YAIE,wBAHK,MAAK,EAAA,EAET,KAAK,KAAG,CAAA"}
|
|
@@ -28,7 +28,13 @@ var Button_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
28
28
|
default: false
|
|
29
29
|
},
|
|
30
30
|
as: { default: "button" },
|
|
31
|
-
class: {
|
|
31
|
+
class: { type: [
|
|
32
|
+
String,
|
|
33
|
+
Boolean,
|
|
34
|
+
null,
|
|
35
|
+
Object,
|
|
36
|
+
Array
|
|
37
|
+
] },
|
|
32
38
|
classNames: {},
|
|
33
39
|
value: { default: void 0 }
|
|
34
40
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../src/components/button/Button.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { Primitive } from 'reka-ui'\nimport { buttonVariants, type ButtonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useButtonGroupInject } from './button-group.context'\nimport Spinner from '../spinner/Spinner.vue'\n\nconst props = withDefaults(defineProps<{\n variant?: ButtonVariants['variant']\n size?: ButtonVariants['size']\n radius?: ButtonVariants['radius']\n isIconOnly?: boolean\n fullWidth?: boolean\n disabled?: boolean\n isLoading?: boolean\n as?: string | object\n class?: ClassValue\n /** Override classes for individual slots (base, startContent, label, endContent, spinner) */\n classNames?: Partial<{\n base: ClassValue\n startContent: ClassValue\n label: ClassValue\n endContent: ClassValue\n spinner: ClassValue\n }>\n value?: string | number\n}>(), {\n variant: undefined,\n size: undefined,\n radius: undefined,\n isIconOnly: false,\n fullWidth: false,\n disabled: false,\n isLoading: false,\n as: 'button',\n value: undefined,\n})\n\n// Inject ButtonGroup context unconditionally with fallback defaults (D-12)\n// When no ButtonGroup is present, inject returns these fallback values (no-op)\nconst groupCtx = useButtonGroupInject({\n variant: ref('primary'),\n size: ref('md'),\n disabled: ref(false),\n fullWidth: ref(false),\n orientation: ref('horizontal'),\n selectionMode: ref('single'),\n selectedValue: ref(null),\n isValueSelected: () => false,\n selectValue: () => {},\n})\n\nconst isSelected = computed(() => groupCtx.isValueSelected(props.value))\n\nfunction handleClick() {\n if (props.value !== undefined) groupCtx.selectValue(props.value)\n}\n\n// Prop precedence rules (D-13):\n// - group disabled ALWAYS wins over child prop\n// - all other props: child prop wins over group value (child ?? group)\nconst isDisabled = computed(() => groupCtx.disabled.value || props.disabled)\nconst finalVariant = computed(() => props.variant ?? groupCtx.variant.value)\nconst finalSize = computed(() => props.size ?? groupCtx.size.value)\nconst finalFullWidth = computed(() => props.fullWidth || groupCtx.fullWidth.value)\n\nconst slotFns = computed(() =>\n buttonVariants({\n variant: finalVariant.value,\n size: finalSize.value,\n radius: props.radius,\n isIconOnly: props.isIconOnly,\n fullWidth: finalFullWidth.value,\n isLoading: props.isLoading,\n })\n)\n\n// Spinner size scales with button size\nconst spinnerSize = computed(() => {\n if (finalSize.value === 'xs' || finalSize.value === 'sm') return 'sm' as const\n if (finalSize.value === 'lg' || finalSize.value === 'xl') return 'lg' as const\n return 'md' as const\n})\n</script>\n\n<template>\n <Primitive\n :as=\"props.as\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :disabled=\"isDisabled || props.isLoading || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-loading=\"props.isLoading || undefined\"\n :data-orientation=\"groupCtx.orientation.value\"\n :data-selected=\"isSelected || undefined\"\n v-bind=\"$attrs\"\n @click=\"handleClick\"\n >\n <!-- startContent named slot -->\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <!-- default (label) slot -->\n <span :class=\"composeClassName(slotFns.label(), props.classNames?.label)\">\n <slot />\n </span>\n\n <!-- endContent named slot -->\n <span\n v-if=\"$slots.endContent\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n >\n <slot name=\"endContent\" />\n </span>\n\n <!-- Loading spinner: absolute-centered, only rendered when isLoading=true (D-08, D-09) -->\n <!-- color=\"current\" inherits --button-fg so spinner contrasts with the button background -->\n <span\n v-if=\"props.isLoading\"\n :class=\"composeClassName(slotFns.spinner(), props.classNames?.spinner)\"\n aria-hidden=\"true\"\n data-slot=\"spinner\"\n >\n <Spinner\n :size=\"spinnerSize\"\n color=\"current\"\n />\n </span>\n </Primitive>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Button.vue_vue_type_script_setup_true_lang.js","names":["$attrs","$slots"],"sources":["../../../src/components/button/Button.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { Primitive } from 'reka-ui'\nimport { buttonVariants, type ButtonVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useButtonGroupInject } from './button-group.context'\nimport Spinner from '../spinner/Spinner.vue'\n\nconst props = withDefaults(defineProps<{\n variant?: ButtonVariants['variant']\n size?: ButtonVariants['size']\n radius?: ButtonVariants['radius']\n isIconOnly?: boolean\n fullWidth?: boolean\n disabled?: boolean\n isLoading?: boolean\n as?: string | object\n class?: ClassValue\n /** Override classes for individual slots (base, startContent, label, endContent, spinner) */\n classNames?: Partial<{\n base: ClassValue\n startContent: ClassValue\n label: ClassValue\n endContent: ClassValue\n spinner: ClassValue\n }>\n value?: string | number\n}>(), {\n variant: undefined,\n size: undefined,\n radius: undefined,\n isIconOnly: false,\n fullWidth: false,\n disabled: false,\n isLoading: false,\n as: 'button',\n value: undefined,\n})\n\n// Inject ButtonGroup context unconditionally with fallback defaults (D-12)\n// When no ButtonGroup is present, inject returns these fallback values (no-op)\nconst groupCtx = useButtonGroupInject({\n variant: ref('primary'),\n size: ref('md'),\n disabled: ref(false),\n fullWidth: ref(false),\n orientation: ref('horizontal'),\n selectionMode: ref('single'),\n selectedValue: ref(null),\n isValueSelected: () => false,\n selectValue: () => {},\n})\n\nconst isSelected = computed(() => groupCtx.isValueSelected(props.value))\n\nfunction handleClick() {\n if (props.value !== undefined) groupCtx.selectValue(props.value)\n}\n\n// Prop precedence rules (D-13):\n// - group disabled ALWAYS wins over child prop\n// - all other props: child prop wins over group value (child ?? group)\nconst isDisabled = computed(() => groupCtx.disabled.value || props.disabled)\nconst finalVariant = computed(() => props.variant ?? groupCtx.variant.value)\nconst finalSize = computed(() => props.size ?? groupCtx.size.value)\nconst finalFullWidth = computed(() => props.fullWidth || groupCtx.fullWidth.value)\n\nconst slotFns = computed(() =>\n buttonVariants({\n variant: finalVariant.value,\n size: finalSize.value,\n radius: props.radius,\n isIconOnly: props.isIconOnly,\n fullWidth: finalFullWidth.value,\n isLoading: props.isLoading,\n })\n)\n\n// Spinner size scales with button size\nconst spinnerSize = computed(() => {\n if (finalSize.value === 'xs' || finalSize.value === 'sm') return 'sm' as const\n if (finalSize.value === 'lg' || finalSize.value === 'xl') return 'lg' as const\n return 'md' as const\n})\n</script>\n\n<template>\n <Primitive\n :as=\"props.as\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :disabled=\"isDisabled || props.isLoading || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-loading=\"props.isLoading || undefined\"\n :data-orientation=\"groupCtx.orientation.value\"\n :data-selected=\"isSelected || undefined\"\n v-bind=\"$attrs\"\n @click=\"handleClick\"\n >\n <!-- startContent named slot -->\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <!-- default (label) slot -->\n <span :class=\"composeClassName(slotFns.label(), props.classNames?.label)\">\n <slot />\n </span>\n\n <!-- endContent named slot -->\n <span\n v-if=\"$slots.endContent\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n >\n <slot name=\"endContent\" />\n </span>\n\n <!-- Loading spinner: absolute-centered, only rendered when isLoading=true (D-08, D-09) -->\n <!-- color=\"current\" inherits --button-fg so spinner contrasts with the button background -->\n <span\n v-if=\"props.isLoading\"\n :class=\"composeClassName(slotFns.spinner(), props.classNames?.spinner)\"\n aria-hidden=\"true\"\n data-slot=\"spinner\"\n >\n <Spinner\n :size=\"spinnerSize\"\n color=\"current\"\n />\n </span>\n </Primitive>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQA,MAAM,QAAQ;EAiCd,MAAM,WAAW,qBAAqB;GACpC,SAAS,IAAI,UAAU;GACvB,MAAM,IAAI,KAAK;GACf,UAAU,IAAI,MAAM;GACpB,WAAW,IAAI,MAAM;GACrB,aAAa,IAAI,aAAa;GAC9B,eAAe,IAAI,SAAS;GAC5B,eAAe,IAAI,KAAK;GACxB,uBAAuB;GACvB,mBAAmB;GACpB,CAAA;EAED,MAAM,aAAa,eAAe,SAAS,gBAAgB,MAAM,MAAM,CAAA;EAEvE,SAAS,cAAc;AACrB,OAAI,MAAM,UAAU,KAAA,EAAW,UAAS,YAAY,MAAM,MAAK;;EAMjE,MAAM,aAAa,eAAe,SAAS,SAAS,SAAS,MAAM,SAAQ;EAC3E,MAAM,eAAe,eAAe,MAAM,WAAW,SAAS,QAAQ,MAAK;EAC3E,MAAM,YAAY,eAAe,MAAM,QAAQ,SAAS,KAAK,MAAK;EAClE,MAAM,iBAAiB,eAAe,MAAM,aAAa,SAAS,UAAU,MAAK;EAEjF,MAAM,UAAU,eACd,eAAe;GACb,SAAS,aAAa;GACtB,MAAM,UAAU;GAChB,QAAQ,MAAM;GACd,YAAY,MAAM;GAClB,WAAW,eAAe;GAC1B,WAAW,MAAM;GAClB,CAAA,CACH;EAGA,MAAM,cAAc,eAAe;AACjC,OAAI,UAAU,UAAU,QAAQ,UAAU,UAAU,KAAM,QAAO;AACjE,OAAI,UAAU,UAAU,QAAQ,UAAU,UAAU,KAAM,QAAO;AACjE,UAAO;IACR;;uBAIC,YA6CY,MAAA,UAAA,EA7CZ,WA6CY;IA5CT,IAAI,MAAM;IACV,OAAO,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI;IAC3E,UAAU,WAAA,SAAc,MAAM,aAAa,KAAA;IAC3C,iBAAe,WAAA,SAAc,KAAA;IAC7B,gBAAc,MAAM,aAAa,KAAA;IACjC,oBAAkB,MAAA,SAAQ,CAAC,YAAY;IACvC,iBAAe,WAAA,SAAc,KAAA;MACtBA,KAAAA,QAAM,EACb,SAAO,aAAW,CAAA,EAAA;2BAQZ;KAJCC,KAAAA,OAAO,gBAAA,WAAA,EADf,mBAKO,QAAA;;MAHJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,cAAY,EAAI,MAAM,YAAY,aAAY,CAAA;SAE/E,WAA4B,KAAA,QAAA,eAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;KAI9B,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,OAAK,EAAI,MAAM,YAAY,MAAK,CAAA,EAAA,EAAA,CACrE,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA;KAKFA,KAAAA,OAAO,cAAA,WAAA,EADf,mBAKO,QAAA;;MAHJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,YAAU,EAAI,MAAM,YAAY,WAAU,CAAA;SAE3E,WAA0B,KAAA,QAAA,aAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA;KAMpB,MAAM,aAAA,WAAA,EADd,mBAUO,QAAA;;MARJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,SAAO,EAAI,MAAM,YAAY,QAAO,CAAA;MACrE,eAAY;MACZ,aAAU;SAEV,YAGE,iBAAA;MAFC,MAAM,YAAA;MACP,OAAM"}
|