@auronui/vue 1.0.21 → 1.0.23
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 +4046 -745
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/components/accordion/Accordion.js.map +1 -1
- package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js +15 -0
- package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordion/AccordionContent.js.map +1 -1
- package/dist/components/accordion/AccordionContent.vue_vue_type_script_setup_true_lang.js +10 -2
- package/dist/components/accordion/AccordionContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordion/AccordionHeader.js.map +1 -1
- package/dist/components/accordion/AccordionHeader.vue_vue_type_script_setup_true_lang.js +13 -3
- package/dist/components/accordion/AccordionHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordion/AccordionItem.js.map +1 -1
- package/dist/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js +9 -0
- package/dist/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/accordion/AccordionTrigger.js.map +1 -1
- package/dist/components/accordion/AccordionTrigger.vue_vue_type_script_setup_true_lang.js +13 -3
- package/dist/components/accordion/AccordionTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogAction.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogCancel.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogContent.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogContent.vue_vue_type_script_setup_true_lang.js +42 -6
- package/dist/components/alert-dialog/AlertDialogContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogDescription.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogDescription.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/alert-dialog/AlertDialogDescription.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogOverlay.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogOverlay.vue_vue_type_script_setup_true_lang.js +23 -2
- package/dist/components/alert-dialog/AlertDialogOverlay.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogTitle.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogTitle.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/alert-dialog/AlertDialogTitle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogTrigger.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogTrigger.vue_vue_type_script_setup_true_lang.js +12 -6
- package/dist/components/alert-dialog/AlertDialogTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/aspect-ratio/AspectRatio.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.js.map +1 -1
- package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js +29 -4
- package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/autocomplete/AutocompleteContent.js.map +1 -1
- package/dist/components/autocomplete/AutocompleteContent.vue_vue_type_script_setup_true_lang.js +151 -9
- package/dist/components/autocomplete/AutocompleteContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/autocomplete/AutocompleteCreateItem.js.map +1 -1
- package/dist/components/autocomplete/AutocompleteCreateItem.vue_vue_type_script_setup_true_lang.js +24 -4
- package/dist/components/autocomplete/AutocompleteCreateItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/autocomplete/AutocompleteInput.js.map +1 -1
- package/dist/components/autocomplete/AutocompleteInput.vue_vue_type_script_setup_true_lang.js +75 -9
- package/dist/components/autocomplete/AutocompleteInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/autocomplete/AutocompleteItem.js.map +1 -1
- package/dist/components/autocomplete/AutocompleteItem.vue_vue_type_script_setup_true_lang.js +29 -5
- package/dist/components/autocomplete/AutocompleteItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/avatar/Avatar.js.map +1 -1
- package/dist/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js +39 -5
- package/dist/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/button/ToggleButton.js.map +1 -1
- package/dist/components/button/ToggleButton.vue_vue_type_script_setup_true_lang.js +16 -2
- package/dist/components/button/ToggleButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/calendar/Calendar.js.map +1 -1
- package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js +44 -0
- package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/calendar-year-picker/CalendarYearPicker.js.map +1 -1
- package/dist/components/calendar-year-picker/CalendarYearPicker.vue_vue_type_script_setup_true_lang.js +21 -0
- package/dist/components/calendar-year-picker/CalendarYearPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/checkbox/Checkbox.js.map +1 -1
- package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js +60 -3
- package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapsible/Collapsible.js.map +1 -1
- package/dist/components/collapsible/Collapsible.vue_vue_type_script_setup_true_lang.js +9 -0
- package/dist/components/collapsible/Collapsible.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapsible/CollapsibleContent.js.map +1 -1
- package/dist/components/collapsible/CollapsibleContent.vue_vue_type_script_setup_true_lang.js +15 -4
- package/dist/components/collapsible/CollapsibleContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/collapsible/CollapsibleTrigger.js.map +1 -1
- package/dist/components/collapsible/CollapsibleTrigger.vue_vue_type_script_setup_true_lang.js +13 -3
- package/dist/components/collapsible/CollapsibleTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-area/ColorArea.js.map +1 -1
- package/dist/components/color-area/ColorArea.vue_vue_type_script_setup_true_lang.js +34 -3
- package/dist/components/color-area/ColorArea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-field/ColorField.js.map +1 -1
- package/dist/components/color-field/ColorField.vue_vue_type_script_setup_true_lang.js +39 -2
- package/dist/components/color-field/ColorField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-input-group/ColorInputGroup.js.map +1 -1
- package/dist/components/color-input-group/ColorInputGroup.vue_vue_type_script_setup_true_lang.js +39 -2
- package/dist/components/color-input-group/ColorInputGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-slider/ColorSlider.js.map +1 -1
- package/dist/components/color-slider/ColorSlider.vue_vue_type_script_setup_true_lang.js +40 -3
- package/dist/components/color-slider/ColorSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-swatch/ColorSwatch.js.map +1 -1
- package/dist/components/color-swatch/ColorSwatch.vue_vue_type_script_setup_true_lang.js +9 -2
- package/dist/components/color-swatch/ColorSwatch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/color-swatch-picker/ColorSwatchPicker.js.map +1 -1
- package/dist/components/color-swatch-picker/ColorSwatchPicker.vue_vue_type_script_setup_true_lang.js +60 -4
- package/dist/components/color-swatch-picker/ColorSwatchPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/combo-box/ComboBox.js.map +1 -1
- package/dist/components/combo-box/ComboBox.vue_vue_type_script_setup_true_lang.js +74 -3
- package/dist/components/combo-box/ComboBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/combo-box/ComboBoxContent.js.map +1 -1
- package/dist/components/combo-box/ComboBoxContent.vue_vue_type_script_setup_true_lang.js +168 -10
- package/dist/components/combo-box/ComboBoxContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/combo-box/ComboBoxEmpty.js.map +1 -1
- package/dist/components/combo-box/ComboBoxEmpty.vue_vue_type_script_setup_true_lang.js +11 -1
- package/dist/components/combo-box/ComboBoxEmpty.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/combo-box/ComboBoxInput.js.map +1 -1
- package/dist/components/combo-box/ComboBoxInput.vue_vue_type_script_setup_true_lang.js +78 -11
- package/dist/components/combo-box/ComboBoxInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/combo-box/ComboBoxItem.js.map +1 -1
- package/dist/components/combo-box/ComboBoxItem.vue_vue_type_script_setup_true_lang.js +31 -7
- package/dist/components/combo-box/ComboBoxItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-input/DateInput.js.map +1 -1
- package/dist/components/date-input/DateInput.vue_vue_type_script_setup_true_lang.js +30 -3
- package/dist/components/date-input/DateInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-picker/DatePicker.js.map +1 -1
- package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js +140 -10
- package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-range-field/DateRangeField.js.map +1 -1
- package/dist/components/date-range-field/DateRangeField.vue_vue_type_script_setup_true_lang.js +24 -3
- 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.js.map +1 -1
- package/dist/components/date-range-picker/DateRangePicker.vue_vue_type_script_setup_true_lang.js +146 -9
- 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.js.map +1 -1
- package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js +201 -149
- package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/date-time-picker/DateTimePickerTimeScroller.js.map +1 -1
- package/dist/components/date-time-picker/DateTimePickerTimeScroller.vue_vue_type_script_setup_true_lang.js +49 -54
- package/dist/components/date-time-picker/DateTimePickerTimeScroller.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/drawer/DrawerClose.js.map +1 -1
- package/dist/components/drawer/DrawerClose.vue_vue_type_script_setup_true_lang.js +13 -3
- package/dist/components/drawer/DrawerClose.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/drawer/DrawerContent.js.map +1 -1
- package/dist/components/drawer/DrawerContent.vue_vue_type_script_setup_true_lang.js +68 -8
- package/dist/components/drawer/DrawerContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/drawer/DrawerOverlay.js.map +1 -1
- package/dist/components/drawer/DrawerOverlay.vue_vue_type_script_setup_true_lang.js +25 -1
- package/dist/components/drawer/DrawerOverlay.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/drawer/DrawerTitle.js.map +1 -1
- package/dist/components/drawer/DrawerTitle.vue_vue_type_script_setup_true_lang.js +27 -3
- package/dist/components/drawer/DrawerTitle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/drawer/DrawerTrigger.js.map +1 -1
- package/dist/components/drawer/DrawerTrigger.vue_vue_type_script_setup_true_lang.js +11 -7
- package/dist/components/drawer/DrawerTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/Dropdown.js.map +1 -1
- package/dist/components/dropdown/Dropdown.vue_vue_type_script_setup_true_lang.js +15 -5
- package/dist/components/dropdown/Dropdown.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/DropdownCheckboxItem.js.map +1 -1
- package/dist/components/dropdown/DropdownCheckboxItem.vue_vue_type_script_setup_true_lang.js +29 -7
- package/dist/components/dropdown/DropdownCheckboxItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/DropdownItem.js.map +1 -1
- package/dist/components/dropdown/DropdownItem.vue_vue_type_script_setup_true_lang.js +15 -2
- package/dist/components/dropdown/DropdownItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/DropdownMenu.js.map +1 -1
- package/dist/components/dropdown/DropdownMenu.vue_vue_type_script_setup_true_lang.js +121 -5
- package/dist/components/dropdown/DropdownMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/DropdownRadioGroup.js.map +1 -1
- package/dist/components/dropdown/DropdownRadioGroup.vue_vue_type_script_setup_true_lang.js +17 -4
- package/dist/components/dropdown/DropdownRadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/DropdownRadioItem.js.map +1 -1
- package/dist/components/dropdown/DropdownRadioItem.vue_vue_type_script_setup_true_lang.js +21 -5
- package/dist/components/dropdown/DropdownRadioItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/DropdownSection.js.map +1 -1
- package/dist/components/dropdown/DropdownSection.vue_vue_type_script_setup_true_lang.js +16 -3
- package/dist/components/dropdown/DropdownSection.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/DropdownSubContent.js.map +1 -1
- package/dist/components/dropdown/DropdownSubContent.vue_vue_type_script_setup_true_lang.js +125 -5
- package/dist/components/dropdown/DropdownSubContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/DropdownSubTrigger.js.map +1 -1
- package/dist/components/dropdown/DropdownSubTrigger.vue_vue_type_script_setup_true_lang.js +15 -2
- package/dist/components/dropdown/DropdownSubTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/dropdown/DropdownTrigger.js.map +1 -1
- package/dist/components/dropdown/DropdownTrigger.vue_vue_type_script_setup_true_lang.js +22 -2
- package/dist/components/dropdown/DropdownTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/input-otp/InputOTP.js.map +1 -1
- package/dist/components/input-otp/InputOTP.vue_vue_type_script_setup_true_lang.js +34 -1
- package/dist/components/input-otp/InputOTP.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/list-box/ListBox.context.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 +193 -28
- package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/list-box/ListBoxItem.js.map +1 -1
- package/dist/components/list-box/ListBoxItem.vue_vue_type_script_setup_true_lang.js +45 -9
- package/dist/components/list-box/ListBoxItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/list-box/ListBoxSection.js.map +1 -1
- package/dist/components/list-box/ListBoxSection.vue_vue_type_script_setup_true_lang.js +31 -4
- package/dist/components/list-box/ListBoxSection.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/modal/ModalClose.js.map +1 -1
- package/dist/components/modal/ModalClose.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/modal/ModalClose.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/modal/ModalContent.js.map +1 -1
- package/dist/components/modal/ModalContent.vue_vue_type_script_setup_true_lang.js +49 -5
- package/dist/components/modal/ModalContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/modal/ModalDescription.js.map +1 -1
- package/dist/components/modal/ModalDescription.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/modal/ModalDescription.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/modal/ModalOverlay.js.map +1 -1
- package/dist/components/modal/ModalOverlay.vue_vue_type_script_setup_true_lang.js +23 -2
- package/dist/components/modal/ModalOverlay.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/modal/ModalTitle.js.map +1 -1
- package/dist/components/modal/ModalTitle.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/modal/ModalTitle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/modal/ModalTrigger.js.map +1 -1
- package/dist/components/modal/ModalTrigger.vue_vue_type_script_setup_true_lang.js +12 -6
- package/dist/components/modal/ModalTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/number-field/NumberField.js.map +1 -1
- package/dist/components/number-field/NumberField.vue_vue_type_script_setup_true_lang.js +24 -4
- package/dist/components/number-field/NumberField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/pagination/Pagination.js.map +1 -1
- package/dist/components/pagination/Pagination.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/pagination/Pagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/pagination/PaginationContent.js.map +1 -1
- package/dist/components/pagination/PaginationContent.vue_vue_type_script_setup_true_lang.js +12 -2
- package/dist/components/pagination/PaginationContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/pagination/PaginationEllipsis.js.map +1 -1
- package/dist/components/pagination/PaginationEllipsis.vue_vue_type_script_setup_true_lang.js +12 -2
- package/dist/components/pagination/PaginationEllipsis.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/pagination/PaginationFirst.js.map +1 -1
- package/dist/components/pagination/PaginationFirst.vue_vue_type_script_setup_true_lang.js +9 -1
- package/dist/components/pagination/PaginationFirst.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/pagination/PaginationItem.js.map +1 -1
- package/dist/components/pagination/PaginationItem.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/pagination/PaginationItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/pagination/PaginationLast.js.map +1 -1
- package/dist/components/pagination/PaginationLast.vue_vue_type_script_setup_true_lang.js +9 -1
- package/dist/components/pagination/PaginationLast.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/pagination/PaginationNext.js.map +1 -1
- package/dist/components/pagination/PaginationNext.vue_vue_type_script_setup_true_lang.js +9 -1
- package/dist/components/pagination/PaginationNext.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/pagination/PaginationPrev.js.map +1 -1
- package/dist/components/pagination/PaginationPrev.vue_vue_type_script_setup_true_lang.js +9 -1
- package/dist/components/pagination/PaginationPrev.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/popover/PopoverContent.js.map +1 -1
- package/dist/components/popover/PopoverContent.vue_vue_type_script_setup_true_lang.js +6 -2
- package/dist/components/popover/PopoverContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/progress-bar/ProgressBar.js.map +1 -1
- package/dist/components/progress-bar/ProgressBar.vue_vue_type_script_setup_true_lang.js +37 -5
- package/dist/components/progress-bar/ProgressBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/progress-circle/ProgressCircle.js.map +1 -1
- package/dist/components/progress-circle/ProgressCircle.vue_vue_type_script_setup_true_lang.js +21 -0
- package/dist/components/progress-circle/ProgressCircle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/radio/Radio.js.map +1 -1
- package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js +46 -3
- package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/radio/RadioGroup.js.map +1 -1
- package/dist/components/radio/RadioGroup.vue_vue_type_script_setup_true_lang.js +24 -0
- package/dist/components/radio/RadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/range-calendar/RangeCalendar.js.map +1 -1
- package/dist/components/range-calendar/RangeCalendar.vue_vue_type_script_setup_true_lang.js +44 -11
- package/dist/components/range-calendar/RangeCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/scroll-area/ScrollArea.js.map +1 -1
- package/dist/components/scroll-area/ScrollArea.vue_vue_type_script_setup_true_lang.js +61 -8
- package/dist/components/scroll-area/ScrollArea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/select/Select.js.map +1 -1
- package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js +12 -0
- package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/select/SelectContent.js.map +1 -1
- package/dist/components/select/SelectContent.vue_vue_type_script_setup_true_lang.js +140 -8
- package/dist/components/select/SelectContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/select/SelectItem.js.map +1 -1
- package/dist/components/select/SelectItem.vue_vue_type_script_setup_true_lang.js +22 -6
- package/dist/components/select/SelectItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/select/SelectTrigger.js.map +1 -1
- package/dist/components/select/SelectTrigger.vue_vue_type_script_setup_true_lang.js +23 -2
- package/dist/components/select/SelectTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/select/SelectValue.js.map +1 -1
- package/dist/components/select/SelectValue.vue_vue_type_script_setup_true_lang.js +14 -2
- package/dist/components/select/SelectValue.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/slider/Slider.js.map +1 -1
- package/dist/components/slider/Slider.vue_vue_type_script_setup_true_lang.js +69 -6
- package/dist/components/slider/Slider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/splitter/SplitterGroup.js.map +1 -1
- package/dist/components/splitter/SplitterGroup.vue_vue_type_script_setup_true_lang.js +18 -3
- package/dist/components/splitter/SplitterGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/splitter/SplitterPanel.js.map +1 -1
- package/dist/components/splitter/SplitterPanel.vue_vue_type_script_setup_true_lang.js +20 -5
- package/dist/components/splitter/SplitterPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/splitter/SplitterResizeHandle.js.map +1 -1
- package/dist/components/splitter/SplitterResizeHandle.vue_vue_type_script_setup_true_lang.js +16 -1
- package/dist/components/splitter/SplitterResizeHandle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/switch/Switch.js.map +1 -1
- package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js +53 -2
- package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/Tab.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.js.map +1 -1
- package/dist/components/tabs/TabIndicator.vue_vue_type_script_setup_true_lang.js +12 -2
- package/dist/components/tabs/TabIndicator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/TabList.js.map +1 -1
- package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js +27 -4
- package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tabs/TabPanel.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.js.map +1 -1
- package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js +13 -1
- package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/time-field/TimeField.js.map +1 -1
- package/dist/components/time-field/TimeField.vue_vue_type_script_setup_true_lang.js +22 -1
- package/dist/components/time-field/TimeField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/toast/Toast.js.map +1 -1
- package/dist/components/toast/Toast.vue_vue_type_script_setup_true_lang.js +39 -4
- package/dist/components/toast/Toast.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/toast/ToastAction.js.map +1 -1
- package/dist/components/toast/ToastAction.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/components/toast/ToastAction.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/toast/ToastClose.js.map +1 -1
- package/dist/components/toast/ToastClose.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/components/toast/ToastClose.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/toast/ToastDescription.js.map +1 -1
- package/dist/components/toast/ToastDescription.vue_vue_type_script_setup_true_lang.js +15 -3
- package/dist/components/toast/ToastDescription.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/toast/ToastTitle.js.map +1 -1
- package/dist/components/toast/ToastTitle.vue_vue_type_script_setup_true_lang.js +15 -3
- package/dist/components/toast/ToastTitle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/toast/ToastViewport.js.map +1 -1
- package/dist/components/toast/ToastViewport.vue_vue_type_script_setup_true_lang.js +22 -3
- package/dist/components/toast/ToastViewport.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/toolbar/Toolbar.js.map +1 -1
- package/dist/components/toolbar/Toolbar.vue_vue_type_script_setup_true_lang.js +10 -1
- package/dist/components/toolbar/Toolbar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/toolbar/ToolbarButton.js.map +1 -1
- package/dist/components/toolbar/ToolbarButton.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/toolbar/ToolbarButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/toolbar/ToolbarLink.js.map +1 -1
- package/dist/components/toolbar/ToolbarLink.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/toolbar/ToolbarLink.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/toolbar/ToolbarSeparator.js.map +1 -1
- package/dist/components/toolbar/ToolbarSeparator.vue_vue_type_script_setup_true_lang.js +14 -2
- package/dist/components/toolbar/ToolbarSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/toolbar/ToolbarToggleGroup.js.map +1 -1
- package/dist/components/toolbar/ToolbarToggleGroup.vue_vue_type_script_setup_true_lang.js +22 -1
- package/dist/components/toolbar/ToolbarToggleGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/toolbar/ToolbarToggleItem.js.map +1 -1
- package/dist/components/toolbar/ToolbarToggleItem.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/toolbar/ToolbarToggleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tooltip/Tooltip.js.map +1 -1
- package/dist/components/tooltip/Tooltip.vue_vue_type_script_lang.js +20 -0
- package/dist/components/tooltip/Tooltip.vue_vue_type_script_lang.js.map +1 -1
- package/dist/components/tooltip/TooltipContent.js.map +1 -1
- package/dist/components/tooltip/TooltipContent.vue_vue_type_script_setup_true_lang.js +7 -2
- package/dist/components/tooltip/TooltipContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tooltip/TooltipProvider.js.map +1 -1
- package/dist/components/tooltip/TooltipProvider.vue_vue_type_script_setup_true_lang.js +24 -3
- package/dist/components/tooltip/TooltipProvider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tree/Tree.js.map +1 -1
- package/dist/components/tree/Tree.vue_vue_type_script_setup_true_lang.js +16 -1
- package/dist/components/tree/Tree.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/tree/TreeItem.js.map +1 -1
- package/dist/components/tree/TreeItem.vue_vue_type_script_setup_true_lang.js +7 -1
- package/dist/components/tree/TreeItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/index.d.ts +2419 -365
- package/package.json +4 -4
package/dist/components/autocomplete/AutocompleteContent.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -13,10 +13,92 @@ var AutocompleteContent_vue_vue_type_script_setup_true_lang_default = /* @__PURE
|
|
|
13
13
|
__name: "AutocompleteContent",
|
|
14
14
|
props: {
|
|
15
15
|
sideOffset: { default: 8 },
|
|
16
|
-
class: { default: void 0 }
|
|
16
|
+
class: { default: void 0 },
|
|
17
|
+
to: { default: void 0 },
|
|
18
|
+
disabled: {
|
|
19
|
+
type: Boolean,
|
|
20
|
+
default: void 0
|
|
21
|
+
},
|
|
22
|
+
defer: {
|
|
23
|
+
type: Boolean,
|
|
24
|
+
default: void 0
|
|
25
|
+
},
|
|
26
|
+
forceMount: {
|
|
27
|
+
type: Boolean,
|
|
28
|
+
default: void 0
|
|
29
|
+
},
|
|
30
|
+
position: { default: void 0 },
|
|
31
|
+
bodyLock: {
|
|
32
|
+
type: Boolean,
|
|
33
|
+
default: void 0
|
|
34
|
+
},
|
|
35
|
+
hideWhenEmpty: {
|
|
36
|
+
type: Boolean,
|
|
37
|
+
default: void 0
|
|
38
|
+
},
|
|
39
|
+
side: { default: void 0 },
|
|
40
|
+
sideFlip: {
|
|
41
|
+
type: Boolean,
|
|
42
|
+
default: void 0
|
|
43
|
+
},
|
|
44
|
+
align: { default: void 0 },
|
|
45
|
+
alignOffset: { default: void 0 },
|
|
46
|
+
alignFlip: {
|
|
47
|
+
type: Boolean,
|
|
48
|
+
default: void 0
|
|
49
|
+
},
|
|
50
|
+
avoidCollisions: {
|
|
51
|
+
type: Boolean,
|
|
52
|
+
default: void 0
|
|
53
|
+
},
|
|
54
|
+
collisionBoundary: { default: void 0 },
|
|
55
|
+
collisionPadding: { default: void 0 },
|
|
56
|
+
arrowPadding: { default: void 0 },
|
|
57
|
+
hideShiftedArrow: {
|
|
58
|
+
type: Boolean,
|
|
59
|
+
default: void 0
|
|
60
|
+
},
|
|
61
|
+
sticky: { default: void 0 },
|
|
62
|
+
hideWhenDetached: {
|
|
63
|
+
type: Boolean,
|
|
64
|
+
default: void 0
|
|
65
|
+
},
|
|
66
|
+
positionStrategy: { default: void 0 },
|
|
67
|
+
updatePositionStrategy: { default: void 0 },
|
|
68
|
+
disableUpdateOnLayoutShift: {
|
|
69
|
+
type: Boolean,
|
|
70
|
+
default: void 0
|
|
71
|
+
},
|
|
72
|
+
prioritizePosition: {
|
|
73
|
+
type: Boolean,
|
|
74
|
+
default: void 0
|
|
75
|
+
},
|
|
76
|
+
reference: { default: void 0 },
|
|
77
|
+
as: { default: void 0 },
|
|
78
|
+
asChild: {
|
|
79
|
+
type: Boolean,
|
|
80
|
+
default: void 0
|
|
81
|
+
},
|
|
82
|
+
disableOutsidePointerEvents: {
|
|
83
|
+
type: Boolean,
|
|
84
|
+
default: void 0
|
|
85
|
+
},
|
|
86
|
+
nonce: { default: void 0 },
|
|
87
|
+
viewportAs: { default: void 0 },
|
|
88
|
+
viewportAsChild: {
|
|
89
|
+
type: Boolean,
|
|
90
|
+
default: void 0
|
|
91
|
+
}
|
|
17
92
|
},
|
|
18
|
-
|
|
93
|
+
emits: [
|
|
94
|
+
"escape-key-down",
|
|
95
|
+
"pointer-down-outside",
|
|
96
|
+
"focus-outside",
|
|
97
|
+
"interact-outside"
|
|
98
|
+
],
|
|
99
|
+
setup(__props, { emit: __emit }) {
|
|
19
100
|
const props = __props;
|
|
101
|
+
const emit = __emit;
|
|
20
102
|
const ctx = useAutocompleteInject();
|
|
21
103
|
const rootContext = injectComboboxRootContext();
|
|
22
104
|
const slots = useSlots();
|
|
@@ -58,14 +140,44 @@ var AutocompleteContent_vue_vue_type_script_setup_true_lang_default = /* @__PURE
|
|
|
58
140
|
if (vnodes) walkAndRegister(vnodes);
|
|
59
141
|
});
|
|
60
142
|
return (_ctx, _cache) => {
|
|
61
|
-
return openBlock(), createBlock(unref(AutocompletePortal),
|
|
143
|
+
return openBlock(), createBlock(unref(AutocompletePortal), {
|
|
144
|
+
to: props.to,
|
|
145
|
+
disabled: props.disabled,
|
|
146
|
+
defer: props.defer,
|
|
147
|
+
"force-mount": props.forceMount
|
|
148
|
+
}, {
|
|
62
149
|
default: withCtx(() => [createVNode(unref(AnimatePresence_default), null, {
|
|
63
150
|
default: withCtx(() => [unref(rootContext).open.value && (unref(ctx).hasItems.value || unref(ctx).isFilled.value && !unref(ctx).isLoading.value) ? (openBlock(), createBlock(unref(AutocompleteContent), {
|
|
64
151
|
key: 0,
|
|
65
|
-
position: "popper",
|
|
152
|
+
position: props.position ?? "popper",
|
|
66
153
|
"side-offset": props.sideOffset,
|
|
67
|
-
"
|
|
68
|
-
"
|
|
154
|
+
"body-lock": props.bodyLock,
|
|
155
|
+
"hide-when-empty": props.hideWhenEmpty,
|
|
156
|
+
side: props.side,
|
|
157
|
+
"side-flip": props.sideFlip,
|
|
158
|
+
align: props.align,
|
|
159
|
+
"align-offset": props.alignOffset,
|
|
160
|
+
"align-flip": props.alignFlip,
|
|
161
|
+
"avoid-collisions": props.avoidCollisions,
|
|
162
|
+
"collision-boundary": props.collisionBoundary,
|
|
163
|
+
"collision-padding": props.collisionPadding,
|
|
164
|
+
"arrow-padding": props.arrowPadding,
|
|
165
|
+
"hide-shifted-arrow": props.hideShiftedArrow,
|
|
166
|
+
sticky: props.sticky,
|
|
167
|
+
"hide-when-detached": props.hideWhenDetached,
|
|
168
|
+
"position-strategy": props.positionStrategy,
|
|
169
|
+
"update-position-strategy": props.updatePositionStrategy,
|
|
170
|
+
"disable-update-on-layout-shift": props.disableUpdateOnLayoutShift,
|
|
171
|
+
"prioritize-position": props.prioritizePosition,
|
|
172
|
+
reference: props.reference,
|
|
173
|
+
as: props.as,
|
|
174
|
+
"as-child": props.asChild ?? true,
|
|
175
|
+
"disable-outside-pointer-events": props.disableOutsidePointerEvents,
|
|
176
|
+
"data-slot": "popover",
|
|
177
|
+
onEscapeKeyDown: _cache[0] || (_cache[0] = ($event) => emit("escape-key-down", $event)),
|
|
178
|
+
onPointerDownOutside: _cache[1] || (_cache[1] = ($event) => emit("pointer-down-outside", $event)),
|
|
179
|
+
onFocusOutside: _cache[2] || (_cache[2] = ($event) => emit("focus-outside", $event)),
|
|
180
|
+
onInteractOutside: _cache[3] || (_cache[3] = ($event) => emit("interact-outside", $event))
|
|
69
181
|
}, {
|
|
70
182
|
default: withCtx(() => [createVNode(unref(motion).div, {
|
|
71
183
|
class: normalizeClass(["autocomplete__popover", "relative"]),
|
|
@@ -98,7 +210,7 @@ var AutocompleteContent_vue_vue_type_script_setup_true_lang_default = /* @__PURE
|
|
|
98
210
|
class: "py-3 text-center text-sm text-default-400",
|
|
99
211
|
"data-slot": "empty-content"
|
|
100
212
|
}, {
|
|
101
|
-
default: withCtx(() => [renderSlot(_ctx.$slots, "empty", {}, () => [_cache[
|
|
213
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "empty", {}, () => [_cache[4] || (_cache[4] = createTextVNode(" No results found ", -1))])]),
|
|
102
214
|
_: 3
|
|
103
215
|
})) : createCommentVNode("", true)]),
|
|
104
216
|
_: 3
|
|
@@ -110,11 +222,41 @@ var AutocompleteContent_vue_vue_type_script_setup_true_lang_default = /* @__PURE
|
|
|
110
222
|
"aria-busy"
|
|
111
223
|
])]),
|
|
112
224
|
_: 3
|
|
113
|
-
}, 8, [
|
|
225
|
+
}, 8, [
|
|
226
|
+
"position",
|
|
227
|
+
"side-offset",
|
|
228
|
+
"body-lock",
|
|
229
|
+
"hide-when-empty",
|
|
230
|
+
"side",
|
|
231
|
+
"side-flip",
|
|
232
|
+
"align",
|
|
233
|
+
"align-offset",
|
|
234
|
+
"align-flip",
|
|
235
|
+
"avoid-collisions",
|
|
236
|
+
"collision-boundary",
|
|
237
|
+
"collision-padding",
|
|
238
|
+
"arrow-padding",
|
|
239
|
+
"hide-shifted-arrow",
|
|
240
|
+
"sticky",
|
|
241
|
+
"hide-when-detached",
|
|
242
|
+
"position-strategy",
|
|
243
|
+
"update-position-strategy",
|
|
244
|
+
"disable-update-on-layout-shift",
|
|
245
|
+
"prioritize-position",
|
|
246
|
+
"reference",
|
|
247
|
+
"as",
|
|
248
|
+
"as-child",
|
|
249
|
+
"disable-outside-pointer-events"
|
|
250
|
+
])) : createCommentVNode("", true)]),
|
|
114
251
|
_: 3
|
|
115
252
|
})]),
|
|
116
253
|
_: 3
|
|
117
|
-
}
|
|
254
|
+
}, 8, [
|
|
255
|
+
"to",
|
|
256
|
+
"disabled",
|
|
257
|
+
"defer",
|
|
258
|
+
"force-mount"
|
|
259
|
+
]);
|
|
118
260
|
};
|
|
119
261
|
}
|
|
120
262
|
});
|
package/dist/components/autocomplete/AutocompleteContent.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteContent.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/autocomplete/AutocompleteContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AutocompletePortal, AutocompleteContent, AutocompleteViewport, AutocompleteEmpty, injectComboboxRootContext } from 'reka-ui'\nimport { motion, AnimatePresence } from 'motion-v'\nimport { useSlots, watchEffect, type VNode } from 'vue'\nimport { useAutocompleteInject } from './Autocomplete.context'\n\nconst props = withDefaults(defineProps<{\n sideOffset?: number\n class?: string\n}>(), {\n sideOffset: 8,\n class: undefined,\n})\n\nconst ctx = useAutocompleteInject()\n// AutocompleteRoot internally provides the ComboboxRoot context\nconst rootContext = injectComboboxRootContext()\n\n// Pre-walk slot VNodes to extract value→label pairs synchronously.\n// This runs before the portal opens so the bridge can resolve labels on initial render.\nconst slots = useSlots()\n\nfunction extractNodeText(nodes: VNode[]): string {\n return nodes.map(n => {\n if (typeof n.children === 'string') return n.children\n if (Array.isArray(n.children)) return extractNodeText(n.children as VNode[])\n return ''\n }).join('')\n}\n\nfunction walkAndRegister(nodes: VNode[]) {\n for (const node of nodes) {\n // AutocompleteItem VNodes have a `value` prop; extract their text children\n if (node.props && typeof node.props.value === 'string') {\n const value = node.props.value as string\n const label = node.props.label as string | undefined\n if (label) {\n ctx.registerItem(value, label)\n } else {\n // Extract text from the default slot children of this VNode\n const children = node.children\n if (children && typeof children === 'object' && 'default' in children) {\n const slotFn = (children as Record<string, () => VNode[]>).default\n if (typeof slotFn === 'function') {\n const text = extractNodeText(slotFn()).trim()\n if (text) ctx.registerItem(value, text)\n }\n } else if (typeof children === 'string') {\n const text = children.trim()\n if (text) ctx.registerItem(value, text)\n } else if (Array.isArray(children)) {\n const text = extractNodeText(children as VNode[]).trim()\n if (text) ctx.registerItem(value, text)\n }\n }\n }\n // Recurse into children\n if (Array.isArray(node.children)) {\n walkAndRegister(node.children as VNode[])\n }\n }\n}\n\n// Run synchronously at setup time and whenever the slot content changes\nwatchEffect(() => {\n const vnodes = (slots.default as (() => VNode[]) | undefined)?.()\n if (vnodes) walkAndRegister(vnodes)\n})\n</script>\n\n<template>\n <AutocompletePortal>\n <AnimatePresence>\n <AutocompleteContent\n v-if=\"rootContext.open.value && (ctx.hasItems.value || (ctx.isFilled.value && !ctx.isLoading.value))\"\n position=\"popper\"\n :side-offset=\"props.sideOffset\"\n as-child\n data-slot=\"popover\"\n >\n <motion.div\n :class=\"['autocomplete__popover', 'relative']\"\n :data-loading=\"ctx.isLoading.value ? '' : undefined\"\n :data-truncate-items=\"ctx.truncateItems.value ? undefined : 'false'\"\n :aria-busy=\"ctx.isLoading.value || undefined\"\n :initial=\"{ opacity: 0, scale: 0.95 }\"\n :animate=\"{ opacity: 1, scale: 1 }\"\n :exit=\"{ opacity: 0, scale: 0.95 }\"\n :transition=\"{ duration: 0.15 }\"\n >\n <div\n :class=\"[\n 'transition-opacity duration-150',\n ctx.isLoading.value\n ? 'pointer-events-none opacity-50 grayscale cursor-not-allowed select-none'\n : '',\n ]\"\n :inert=\"ctx.isLoading.value || undefined\"\n :aria-disabled=\"ctx.isLoading.value || undefined\"\n :data-disabled=\"ctx.isLoading.value ? '' : undefined\"\n data-slot=\"list-wrapper\"\n >\n <AutocompleteViewport\n data-slot=\"list-box\"\n >\n <slot />\n <!-- Empty state: only show when the user has typed a query -->\n <AutocompleteEmpty\n v-if=\"ctx.isFilled.value && !ctx.isLoading.value\"\n class=\"py-3 text-center text-sm text-default-400\"\n data-slot=\"empty-content\"\n >\n <slot name=\"empty\">\n No results found\n </slot>\n </AutocompleteEmpty>\n </AutocompleteViewport>\n </div>\n </motion.div>\n </AutocompleteContent>\n </AnimatePresence>\n </AutocompletePortal>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AutocompleteContent.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/autocomplete/AutocompleteContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { AutocompletePortal, AutocompleteContent, AutocompleteViewport, AutocompleteEmpty, injectComboboxRootContext } from 'reka-ui'\nimport { motion, AnimatePresence } from 'motion-v'\nimport { useSlots, watchEffect, type VNode } from 'vue'\nimport { useAutocompleteInject } from './Autocomplete.context'\n\nconst props = withDefaults(defineProps<{\n sideOffset?: number\n class?: string\n // AutocompletePortal props\n to?: string | HTMLElement\n disabled?: boolean\n defer?: boolean\n forceMount?: boolean\n // AutocompleteContent props\n position?: 'inline' | 'popper'\n bodyLock?: boolean\n hideWhenEmpty?: boolean\n side?: 'top' | 'right' | 'bottom' | 'left'\n sideFlip?: boolean\n align?: 'start' | 'center' | 'end'\n alignOffset?: number\n alignFlip?: boolean\n avoidCollisions?: boolean\n collisionBoundary?: Element | null | Array<Element | null>\n collisionPadding?: number | Partial<Record<'top' | 'right' | 'bottom' | 'left', number>>\n arrowPadding?: number\n hideShiftedArrow?: boolean\n sticky?: 'partial' | 'always'\n hideWhenDetached?: boolean\n positionStrategy?: 'fixed' | 'absolute'\n updatePositionStrategy?: 'always' | 'optimized'\n disableUpdateOnLayoutShift?: boolean\n prioritizePosition?: boolean\n reference?: object | null\n as?: string\n asChild?: boolean\n disableOutsidePointerEvents?: boolean\n // AutocompleteViewport props\n nonce?: string\n viewportAs?: string\n viewportAsChild?: boolean\n}>(), {\n sideOffset: 8,\n class: undefined,\n to: undefined,\n disabled: undefined,\n defer: undefined,\n forceMount: undefined,\n position: undefined,\n bodyLock: undefined,\n hideWhenEmpty: undefined,\n side: undefined,\n sideFlip: undefined,\n align: undefined,\n alignOffset: undefined,\n alignFlip: undefined,\n avoidCollisions: undefined,\n collisionBoundary: undefined,\n collisionPadding: undefined,\n arrowPadding: undefined,\n hideShiftedArrow: undefined,\n sticky: undefined,\n hideWhenDetached: undefined,\n positionStrategy: undefined,\n updatePositionStrategy: undefined,\n disableUpdateOnLayoutShift: undefined,\n prioritizePosition: undefined,\n reference: undefined,\n as: undefined,\n asChild: undefined,\n disableOutsidePointerEvents: undefined,\n nonce: undefined,\n viewportAs: undefined,\n viewportAsChild: undefined,\n})\n\nconst emit = defineEmits<{\n 'escape-key-down': [event: KeyboardEvent]\n 'pointer-down-outside': [event: Event]\n 'focus-outside': [event: Event]\n 'interact-outside': [event: Event]\n}>()\n\nconst ctx = useAutocompleteInject()\n// AutocompleteRoot internally provides the ComboboxRoot context\nconst rootContext = injectComboboxRootContext()\n\n// Pre-walk slot VNodes to extract value→label pairs synchronously.\n// This runs before the portal opens so the bridge can resolve labels on initial render.\nconst slots = useSlots()\n\nfunction extractNodeText(nodes: VNode[]): string {\n return nodes.map(n => {\n if (typeof n.children === 'string') return n.children\n if (Array.isArray(n.children)) return extractNodeText(n.children as VNode[])\n return ''\n }).join('')\n}\n\nfunction walkAndRegister(nodes: VNode[]) {\n for (const node of nodes) {\n // AutocompleteItem VNodes have a `value` prop; extract their text children\n if (node.props && typeof node.props.value === 'string') {\n const value = node.props.value as string\n const label = node.props.label as string | undefined\n if (label) {\n ctx.registerItem(value, label)\n } else {\n // Extract text from the default slot children of this VNode\n const children = node.children\n if (children && typeof children === 'object' && 'default' in children) {\n const slotFn = (children as Record<string, () => VNode[]>).default\n if (typeof slotFn === 'function') {\n const text = extractNodeText(slotFn()).trim()\n if (text) ctx.registerItem(value, text)\n }\n } else if (typeof children === 'string') {\n const text = children.trim()\n if (text) ctx.registerItem(value, text)\n } else if (Array.isArray(children)) {\n const text = extractNodeText(children as VNode[]).trim()\n if (text) ctx.registerItem(value, text)\n }\n }\n }\n // Recurse into children\n if (Array.isArray(node.children)) {\n walkAndRegister(node.children as VNode[])\n }\n }\n}\n\n// Run synchronously at setup time and whenever the slot content changes\nwatchEffect(() => {\n const vnodes = (slots.default as (() => VNode[]) | undefined)?.()\n if (vnodes) walkAndRegister(vnodes)\n})\n</script>\n\n<template>\n <AutocompletePortal\n :to=\"props.to\"\n :disabled=\"props.disabled\"\n :defer=\"props.defer\"\n :force-mount=\"props.forceMount\"\n >\n <AnimatePresence>\n <AutocompleteContent\n v-if=\"rootContext.open.value && (ctx.hasItems.value || (ctx.isFilled.value && !ctx.isLoading.value))\"\n :position=\"props.position ?? 'popper'\"\n :side-offset=\"props.sideOffset\"\n :body-lock=\"props.bodyLock\"\n :hide-when-empty=\"props.hideWhenEmpty\"\n :side=\"props.side\"\n :side-flip=\"props.sideFlip\"\n :align=\"props.align\"\n :align-offset=\"props.alignOffset\"\n :align-flip=\"props.alignFlip\"\n :avoid-collisions=\"props.avoidCollisions\"\n :collision-boundary=\"props.collisionBoundary\"\n :collision-padding=\"props.collisionPadding\"\n :arrow-padding=\"props.arrowPadding\"\n :hide-shifted-arrow=\"props.hideShiftedArrow\"\n :sticky=\"props.sticky\"\n :hide-when-detached=\"props.hideWhenDetached\"\n :position-strategy=\"props.positionStrategy\"\n :update-position-strategy=\"props.updatePositionStrategy\"\n :disable-update-on-layout-shift=\"props.disableUpdateOnLayoutShift\"\n :prioritize-position=\"props.prioritizePosition\"\n :reference=\"(props.reference as any)\"\n :as=\"props.as\"\n :as-child=\"props.asChild ?? true\"\n :disable-outside-pointer-events=\"props.disableOutsidePointerEvents\"\n data-slot=\"popover\"\n @escape-key-down=\"emit('escape-key-down', $event)\"\n @pointer-down-outside=\"emit('pointer-down-outside', $event)\"\n @focus-outside=\"emit('focus-outside', $event)\"\n @interact-outside=\"emit('interact-outside', $event)\"\n >\n <motion.div\n :class=\"['autocomplete__popover', 'relative']\"\n :data-loading=\"ctx.isLoading.value ? '' : undefined\"\n :data-truncate-items=\"ctx.truncateItems.value ? undefined : 'false'\"\n :aria-busy=\"ctx.isLoading.value || undefined\"\n :initial=\"{ opacity: 0, scale: 0.95 }\"\n :animate=\"{ opacity: 1, scale: 1 }\"\n :exit=\"{ opacity: 0, scale: 0.95 }\"\n :transition=\"{ duration: 0.15 }\"\n >\n <div\n :class=\"[\n 'transition-opacity duration-150',\n ctx.isLoading.value\n ? 'pointer-events-none opacity-50 grayscale cursor-not-allowed select-none'\n : '',\n ]\"\n :inert=\"ctx.isLoading.value || undefined\"\n :aria-disabled=\"ctx.isLoading.value || undefined\"\n :data-disabled=\"ctx.isLoading.value ? '' : undefined\"\n data-slot=\"list-wrapper\"\n >\n <AutocompleteViewport\n data-slot=\"list-box\"\n >\n <slot />\n <!-- Empty state: only show when the user has typed a query -->\n <AutocompleteEmpty\n v-if=\"ctx.isFilled.value && !ctx.isLoading.value\"\n class=\"py-3 text-center text-sm text-default-400\"\n data-slot=\"empty-content\"\n >\n <slot name=\"empty\">\n No results found\n </slot>\n </AutocompleteEmpty>\n </AutocompleteViewport>\n </div>\n </motion.div>\n </AutocompleteContent>\n </AnimatePresence>\n </AutocompletePortal>\n</template>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteCreateItem.js","names":[],"sources":["../../../src/components/autocomplete/AutocompleteCreateItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { AutocompleteItem as RekaAutocompleteItem, injectComboboxRootContext } from 'reka-ui'\nimport { useAutocompleteInject } from './Autocomplete.context'\n\nconst props = withDefaults(defineProps<{\n /**\n * Label for the create item. Accepts a static string or a function receiving\n * the current search term. Defaults to `Create \"${term}\"`.\n */\n label?: string | ((term: string) => string)\n class?: string\n}>(), {\n label: undefined,\n class: undefined,\n})\n\nconst ctx = useAutocompleteInject()\n// Reka's combobox context (provided by AutocompleteRoot) — used to drive the\n// open state and input focus directly, since this item's value equals the\n// current search term and Reka's native select path is unreliable for it.\nconst comboboxCtx = injectComboboxRootContext()\n\nconst term = computed(() => ctx.searchTerm.value.trim())\n\nconst isVisible = computed(() => !!term.value && !ctx.hasExactMatch.value)\n\nconst displayLabel = computed(() => {\n if (typeof props.label === 'function') return props.label(term.value)\n return props.label ?? `Create \"${term.value}\"`\n})\n\nfunction handleSelect(event: Event) {\n // Always manage the creation ourselves — this item's value equals the current\n // search term, so Reka's native select (set-value + close) is unreliable here.\n event.preventDefault()\n ctx.onCreateValue(term.value)\n if (ctx.multiple.value) {\n // Keep the dropdown open for the next entry and restore input focus.\n comboboxCtx.inputElement.value?.focus()\n } else {\n // Single mode: close the dropdown, like selecting a regular item.\n comboboxCtx.onOpenChange(false)\n }\n}\n</script>\n\n<template>\n <RekaAutocompleteItem\n v-if=\"isVisible\"\n :key=\"term\"\n :value=\"term\"\n :text-value=\"term\"\n :class=\"['list-box-item list-box-item--default', props.class]\"\n data-slot=\"list-box-item\"\n data-create-item\n @select=\"handleSelect\"\n >\n <slot :term=\"term\">\n <span\n class=\"autocomplete-item__text\"\n data-slot=\"item-text\"\n >\n {{ displayLabel }}\n </span>\n </slot>\n </RekaAutocompleteItem>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"AutocompleteCreateItem.js","names":[],"sources":["../../../src/components/autocomplete/AutocompleteCreateItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { AutocompleteItem as RekaAutocompleteItem, injectComboboxRootContext } from 'reka-ui'\nimport { useAutocompleteInject } from './Autocomplete.context'\n\nconst props = withDefaults(defineProps<{\n /**\n * Label for the create item. Accepts a static string or a function receiving\n * the current search term. Defaults to `Create \"${term}\"`.\n */\n label?: string | ((term: string) => string)\n class?: string\n /** The value of this item when selected. Defaults to the current search term. */\n value?: string\n /** A string value that represents this item during typeahead navigation. */\n textValue?: string\n /** Whether this item is disabled. */\n disabled?: boolean\n /** Render as a different element or component. */\n as?: string\n /** Merge props onto child element instead of rendering a wrapper. */\n asChild?: boolean\n}>(), {\n label: undefined,\n class: undefined,\n value: undefined,\n textValue: undefined,\n disabled: false,\n as: undefined,\n asChild: false,\n})\n\nconst emit = defineEmits<{\n 'select': [event: Event]\n}>()\n\nconst ctx = useAutocompleteInject()\n// Reka's combobox context (provided by AutocompleteRoot) — used to drive the\n// open state and input focus directly, since this item's value equals the\n// current search term and Reka's native select path is unreliable for it.\nconst comboboxCtx = injectComboboxRootContext()\n\nconst term = computed(() => ctx.searchTerm.value.trim())\n\nconst isVisible = computed(() => !!term.value && !ctx.hasExactMatch.value)\n\nconst displayLabel = computed(() => {\n if (typeof props.label === 'function') return props.label(term.value)\n return props.label ?? `Create \"${term.value}\"`\n})\n\nfunction handleSelect(event: Event) {\n emit('select', event)\n // Always manage the creation ourselves — this item's value equals the current\n // search term, so Reka's native select (set-value + close) is unreliable here.\n event.preventDefault()\n ctx.onCreateValue(term.value)\n if (ctx.multiple.value) {\n // Keep the dropdown open for the next entry and restore input focus.\n comboboxCtx.inputElement.value?.focus()\n } else {\n // Single mode: close the dropdown, like selecting a regular item.\n comboboxCtx.onOpenChange(false)\n }\n}\n</script>\n\n<template>\n <RekaAutocompleteItem\n v-if=\"isVisible\"\n :key=\"term\"\n :value=\"props.value ?? term\"\n :text-value=\"props.textValue ?? term\"\n :disabled=\"props.disabled\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"['list-box-item list-box-item--default', props.class]\"\n data-slot=\"list-box-item\"\n data-create-item\n @select=\"handleSelect\"\n >\n <slot :term=\"term\">\n <span\n class=\"autocomplete-item__text\"\n data-slot=\"item-text\"\n >\n {{ displayLabel }}\n </span>\n </slot>\n </RekaAutocompleteItem>\n</template>\n"],"mappings":""}
|
package/dist/components/autocomplete/AutocompleteCreateItem.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -13,10 +13,23 @@ var AutocompleteCreateItem_vue_vue_type_script_setup_true_lang_default = /* @__P
|
|
|
13
13
|
type: [String, Function],
|
|
14
14
|
default: void 0
|
|
15
15
|
},
|
|
16
|
-
class: { default: void 0 }
|
|
16
|
+
class: { default: void 0 },
|
|
17
|
+
value: { default: void 0 },
|
|
18
|
+
textValue: { default: void 0 },
|
|
19
|
+
disabled: {
|
|
20
|
+
type: Boolean,
|
|
21
|
+
default: false
|
|
22
|
+
},
|
|
23
|
+
as: { default: void 0 },
|
|
24
|
+
asChild: {
|
|
25
|
+
type: Boolean,
|
|
26
|
+
default: false
|
|
27
|
+
}
|
|
17
28
|
},
|
|
18
|
-
|
|
29
|
+
emits: ["select"],
|
|
30
|
+
setup(__props, { emit: __emit }) {
|
|
19
31
|
const props = __props;
|
|
32
|
+
const emit = __emit;
|
|
20
33
|
const ctx = useAutocompleteInject();
|
|
21
34
|
const comboboxCtx = injectComboboxRootContext();
|
|
22
35
|
const term = computed(() => ctx.searchTerm.value.trim());
|
|
@@ -26,6 +39,7 @@ var AutocompleteCreateItem_vue_vue_type_script_setup_true_lang_default = /* @__P
|
|
|
26
39
|
return props.label ?? `Create "${term.value}"`;
|
|
27
40
|
});
|
|
28
41
|
function handleSelect(event) {
|
|
42
|
+
emit("select", event);
|
|
29
43
|
event.preventDefault();
|
|
30
44
|
ctx.onCreateValue(term.value);
|
|
31
45
|
if (ctx.multiple.value) comboboxCtx.inputElement.value?.focus();
|
|
@@ -34,8 +48,11 @@ var AutocompleteCreateItem_vue_vue_type_script_setup_true_lang_default = /* @__P
|
|
|
34
48
|
return (_ctx, _cache) => {
|
|
35
49
|
return isVisible.value ? (openBlock(), createBlock(unref(AutocompleteItem), {
|
|
36
50
|
key: term.value,
|
|
37
|
-
value: term.value,
|
|
38
|
-
"text-value": term.value,
|
|
51
|
+
value: props.value ?? term.value,
|
|
52
|
+
"text-value": props.textValue ?? term.value,
|
|
53
|
+
disabled: props.disabled,
|
|
54
|
+
as: props.as,
|
|
55
|
+
"as-child": props.asChild,
|
|
39
56
|
class: normalizeClass(["list-box-item list-box-item--default", props.class]),
|
|
40
57
|
"data-slot": "list-box-item",
|
|
41
58
|
"data-create-item": "",
|
|
@@ -46,6 +63,9 @@ var AutocompleteCreateItem_vue_vue_type_script_setup_true_lang_default = /* @__P
|
|
|
46
63
|
}, 8, [
|
|
47
64
|
"value",
|
|
48
65
|
"text-value",
|
|
66
|
+
"disabled",
|
|
67
|
+
"as",
|
|
68
|
+
"as-child",
|
|
49
69
|
"class"
|
|
50
70
|
])) : createCommentVNode("", true);
|
|
51
71
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteCreateItem.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/autocomplete/AutocompleteCreateItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { AutocompleteItem as RekaAutocompleteItem, injectComboboxRootContext } from 'reka-ui'\nimport { useAutocompleteInject } from './Autocomplete.context'\n\nconst props = withDefaults(defineProps<{\n /**\n * Label for the create item. Accepts a static string or a function receiving\n * the current search term. Defaults to `Create \"${term}\"`.\n */\n label?: string | ((term: string) => string)\n class?: string\n}>(), {\n label: undefined,\n class: undefined,\n})\n\nconst ctx = useAutocompleteInject()\n// Reka's combobox context (provided by AutocompleteRoot) — used to drive the\n// open state and input focus directly, since this item's value equals the\n// current search term and Reka's native select path is unreliable for it.\nconst comboboxCtx = injectComboboxRootContext()\n\nconst term = computed(() => ctx.searchTerm.value.trim())\n\nconst isVisible = computed(() => !!term.value && !ctx.hasExactMatch.value)\n\nconst displayLabel = computed(() => {\n if (typeof props.label === 'function') return props.label(term.value)\n return props.label ?? `Create \"${term.value}\"`\n})\n\nfunction handleSelect(event: Event) {\n // Always manage the creation ourselves — this item's value equals the current\n // search term, so Reka's native select (set-value + close) is unreliable here.\n event.preventDefault()\n ctx.onCreateValue(term.value)\n if (ctx.multiple.value) {\n // Keep the dropdown open for the next entry and restore input focus.\n comboboxCtx.inputElement.value?.focus()\n } else {\n // Single mode: close the dropdown, like selecting a regular item.\n comboboxCtx.onOpenChange(false)\n }\n}\n</script>\n\n<template>\n <RekaAutocompleteItem\n v-if=\"isVisible\"\n :key=\"term\"\n :value=\"term\"\n :text-value=\"term\"\n :class=\"['list-box-item list-box-item--default', props.class]\"\n data-slot=\"list-box-item\"\n data-create-item\n @select=\"handleSelect\"\n >\n <slot :term=\"term\">\n <span\n class=\"autocomplete-item__text\"\n data-slot=\"item-text\"\n >\n {{ displayLabel }}\n </span>\n </slot>\n </RekaAutocompleteItem>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"AutocompleteCreateItem.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/autocomplete/AutocompleteCreateItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { AutocompleteItem as RekaAutocompleteItem, injectComboboxRootContext } from 'reka-ui'\nimport { useAutocompleteInject } from './Autocomplete.context'\n\nconst props = withDefaults(defineProps<{\n /**\n * Label for the create item. Accepts a static string or a function receiving\n * the current search term. Defaults to `Create \"${term}\"`.\n */\n label?: string | ((term: string) => string)\n class?: string\n /** The value of this item when selected. Defaults to the current search term. */\n value?: string\n /** A string value that represents this item during typeahead navigation. */\n textValue?: string\n /** Whether this item is disabled. */\n disabled?: boolean\n /** Render as a different element or component. */\n as?: string\n /** Merge props onto child element instead of rendering a wrapper. */\n asChild?: boolean\n}>(), {\n label: undefined,\n class: undefined,\n value: undefined,\n textValue: undefined,\n disabled: false,\n as: undefined,\n asChild: false,\n})\n\nconst emit = defineEmits<{\n 'select': [event: Event]\n}>()\n\nconst ctx = useAutocompleteInject()\n// Reka's combobox context (provided by AutocompleteRoot) — used to drive the\n// open state and input focus directly, since this item's value equals the\n// current search term and Reka's native select path is unreliable for it.\nconst comboboxCtx = injectComboboxRootContext()\n\nconst term = computed(() => ctx.searchTerm.value.trim())\n\nconst isVisible = computed(() => !!term.value && !ctx.hasExactMatch.value)\n\nconst displayLabel = computed(() => {\n if (typeof props.label === 'function') return props.label(term.value)\n return props.label ?? `Create \"${term.value}\"`\n})\n\nfunction handleSelect(event: Event) {\n emit('select', event)\n // Always manage the creation ourselves — this item's value equals the current\n // search term, so Reka's native select (set-value + close) is unreliable here.\n event.preventDefault()\n ctx.onCreateValue(term.value)\n if (ctx.multiple.value) {\n // Keep the dropdown open for the next entry and restore input focus.\n comboboxCtx.inputElement.value?.focus()\n } else {\n // Single mode: close the dropdown, like selecting a regular item.\n comboboxCtx.onOpenChange(false)\n }\n}\n</script>\n\n<template>\n <RekaAutocompleteItem\n v-if=\"isVisible\"\n :key=\"term\"\n :value=\"props.value ?? term\"\n :text-value=\"props.textValue ?? term\"\n :disabled=\"props.disabled\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"['list-box-item list-box-item--default', props.class]\"\n data-slot=\"list-box-item\"\n data-create-item\n @select=\"handleSelect\"\n >\n <slot :term=\"term\">\n <span\n class=\"autocomplete-item__text\"\n data-slot=\"item-text\"\n >\n {{ displayLabel }}\n </span>\n </slot>\n </RekaAutocompleteItem>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKA,MAAM,QAAQ;EA2Bd,MAAM,OAAO;EAIb,MAAM,MAAM,uBAAsB;EAIlC,MAAM,cAAc,2BAA0B;EAE9C,MAAM,OAAO,eAAe,IAAI,WAAW,MAAM,MAAM,CAAA;EAEvD,MAAM,YAAY,eAAe,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,cAAc,MAAK;EAEzE,MAAM,eAAe,eAAe;AAClC,OAAI,OAAO,MAAM,UAAU,WAAY,QAAO,MAAM,MAAM,KAAK,MAAK;AACpE,UAAO,MAAM,SAAS,WAAW,KAAK,MAAM;IAC7C;EAED,SAAS,aAAa,OAAc;AAClC,QAAK,UAAU,MAAK;AAGpB,SAAM,gBAAe;AACrB,OAAI,cAAc,KAAK,MAAK;AAC5B,OAAI,IAAI,SAAS,MAEf,aAAY,aAAa,OAAO,OAAM;OAGtC,aAAY,aAAa,MAAK;;;UAOxB,UAAA,SAAA,WAAA,EADR,YAqBuB,MAAA,iBAAA,EAAA;IAnBpB,KAAK,KAAA;IACL,OAAO,MAAM,SAAS,KAAA;IACtB,cAAY,MAAM,aAAa,KAAA;IAC/B,UAAU,MAAM;IAChB,IAAI,MAAM;IACV,YAAU,MAAM;IAChB,OAAK,eAAA,CAAA,wCAA2C,MAAM,MAAK,CAAA;IAC5D,aAAU;IACV,oBAAA;IACC,UAAQ;;2BASF,CAPP,WAOO,KAAA,QAAA,WAAA,EAPA,MAAM,KAAA,OAAI,QAOV,CANL,mBAKO,QALP,YAKO,gBADF,aAAA,MAAY,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteInput.js","names":[],"sources":["../../../src/components/autocomplete/AutocompleteInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue'\nimport { useFocusWithin } from '@vueuse/core'\nimport { AutocompleteInput, AutocompleteTrigger, AutocompleteCancel, AutocompleteAnchor } from 'reka-ui'\nimport { useAutocompleteInject } from './Autocomplete.context'\nimport Chip from '../chip/Chip.vue'\nimport Spinner from '../spinner/Spinner.vue'\nimport AutocompleteOverflowChips from './AutocompleteOverflowChips.vue'\n\nconst props = withDefaults(defineProps<{\n placeholder?: string\n class?: string\n}>(), {\n placeholder: undefined,\n class: undefined,\n})\n\nconst ctx = useAutocompleteInject()\n\n// Track focused state via useFocusWithin (NOT manual @focus/@blur listeners) — the\n// inner Reka <AutocompleteInput> wraps the native <input>; useFocusWithin observes\n// the actual DOM subtree of the anchor, so isFocused flips reliably regardless of\n// how Reka forwards refs/attrs.\nconst anchorRef = useTemplateRef<HTMLElement>('anchor')\nconst { focused: isFocused } = useFocusWithin(anchorRef)\n\n// Render the inside-label only when (a) a label is set and (b) labelPlacement is 'inside'\nconst showInsideLabel = computed(\n () => ctx.hasLabel.value && ctx.labelPlacement.value === 'inside',\n)\n\n// In multiple mode, hide placeholder once chips are present\nconst effectivePlaceholder = computed(() =>\n ctx.multiple.value && ctx.selectedValues.value.length > 0 ? undefined : props.placeholder,\n)\n\nconst getLabel = (v: string) => ctx.selectedLabels.value.find(l => l.value === v)?.label ?? v\n</script>\n\n<template>\n <AutocompleteAnchor\n ref=\"anchor\"\n :class=\"ctx.slots.value.trigger()\"\n :data-filled=\"ctx.hasLabel.value ? (ctx.isFilled.value || undefined) : undefined\"\n :data-focused=\"isFocused || undefined\"\n :data-invalid=\"ctx.isInvalid.value || undefined\"\n :data-disabled=\"ctx.isDisabled.value || undefined\"\n :data-readonly=\"ctx.isReadonly.value || undefined\"\n :data-multiple-overflow=\"ctx.multiple.value ? ctx.multipleOverflow.value : undefined\"\n data-slot=\"trigger\"\n >\n <label\n v-if=\"showInsideLabel\"\n :for=\"ctx.inputId.value\"\n :class=\"ctx.slots.value.label()\"\n >{{ ctx.label.value }}<span\n v-if=\"ctx.isRequired.value\"\n aria-hidden=\"true\"\n > *</span></label>\n <span\n v-if=\"$slots.startContent\"\n :class=\"ctx.slots.value.startContent()\"\n data-slot=\"start-content\"\n >\n <slot name=\"startContent\" />\n </span>\n <!-- Multiple/collapse: overflow chip area with truncation -->\n <AutocompleteOverflowChips\n v-if=\"ctx.multiple.value && ctx.multipleOverflow.value === 'collapse' && ctx.selectedValues.value.length > 0\"\n :values=\"ctx.selectedValues.value\"\n :get-label=\"getLabel\"\n :remove-value=\"ctx.removeValue\"\n />\n <!-- Multiple/wrap: chips that wrap onto new lines -->\n <template v-else-if=\"ctx.multiple.value && ctx.multipleOverflow.value === 'wrap'\">\n <Chip\n v-for=\"item in ctx.selectedLabels.value\"\n :key=\"item.value\"\n size=\"sm\"\n is-closable\n :close-aria-label=\"`Remove ${item.label}`\"\n data-slot=\"selected-chip\"\n @close.stop=\"ctx.removeValue(item.value)\"\n >\n {{ item.label }}\n </Chip>\n </template>\n <AutocompleteInput\n :id=\"ctx.inputId.value\"\n :placeholder=\"effectivePlaceholder\"\n :disabled=\"ctx.isDisabled.value\"\n :readonly=\"ctx.isReadonly.value\"\n :required=\"ctx.isRequired.value\"\n :aria-invalid=\"ctx.isInvalid.value || undefined\"\n :aria-describedby=\"ctx.ariaDescribedBy.value\"\n :class=\"ctx.slots.value.input()\"\n :style=\"ctx.multiple.value && ctx.multipleOverflow.value === 'collapse' && ctx.selectedValues.value.length > 0\n ? { flex: '0 0 auto', minWidth: '80px', width: 'auto' }\n : undefined\"\n data-slot=\"input\"\n autocomplete=\"off\"\n />\n <!-- Clear button: only shown when filled and not in a readonly/disabled state.\n Reka's AutocompleteCancel does not set data-empty itself, so we drive it here.\n In multiple mode also clears selectedValues via ctx.clearAll(). -->\n <AutocompleteCancel\n :class=\"ctx.slots.value.clearButton()\"\n :data-empty=\"(!ctx.isFilled.value || ctx.isReadonly.value || ctx.isDisabled.value) ? 'true' : undefined\"\n data-slot=\"clear-button\"\n aria-label=\"Clear\"\n @click=\"ctx.multiple.value ? ctx.clearAll() : undefined\"\n >\n <slot name=\"clearIcon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n data-slot=\"autocomplete-clear-button-icon\"\n aria-hidden=\"true\"\n >\n <line\n x1=\"18\"\n y1=\"6\"\n x2=\"6\"\n y2=\"18\"\n />\n <line\n x1=\"6\"\n y1=\"6\"\n x2=\"18\"\n y2=\"18\"\n />\n </svg>\n </slot>\n </AutocompleteCancel>\n <!-- Inline loading spinner: replaces the dropdown indicator while loadItems is pending -->\n <span\n v-if=\"ctx.isLoading.value\"\n :class=\"ctx.slots.value.indicator()\"\n data-slot=\"autocomplete-loading-indicator\"\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading suggestions\"\n >\n <Spinner size=\"sm\" />\n </span>\n <!-- Dropdown trigger indicator (hidden while loading) -->\n <AutocompleteTrigger\n v-else\n :class=\"ctx.slots.value.indicator()\"\n data-slot=\"autocomplete-default-indicator\"\n aria-label=\"Toggle suggestions\"\n >\n <slot name=\"triggerIcon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\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 aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </slot>\n </AutocompleteTrigger>\n </AutocompleteAnchor>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"AutocompleteInput.js","names":[],"sources":["../../../src/components/autocomplete/AutocompleteInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue'\nimport { useFocusWithin } from '@vueuse/core'\nimport { AutocompleteInput, AutocompleteTrigger, AutocompleteCancel, AutocompleteAnchor } from 'reka-ui'\nimport { useAutocompleteInject } from './Autocomplete.context'\nimport Chip from '../chip/Chip.vue'\nimport Spinner from '../spinner/Spinner.vue'\nimport AutocompleteOverflowChips from './AutocompleteOverflowChips.vue'\n\nconst props = withDefaults(defineProps<{\n placeholder?: string\n class?: string\n /** Two-way bound search input value. */\n modelValue?: string\n /** Auto-focus the input on mount. */\n autoFocus?: boolean\n /** Disable the input. Falls back to context isDisabled. */\n disabled?: boolean\n /** Render the AutocompleteInput as a different element. */\n as?: string\n /** Merge props onto child element instead of rendering a wrapper. */\n asChild?: boolean\n /** Render the AutocompleteTrigger as a different element. */\n triggerAs?: string\n /** Merge trigger props onto child element. */\n triggerAsChild?: boolean\n /** Disable the trigger button. Falls back to context isDisabled. */\n triggerDisabled?: boolean\n /** Render the AutocompleteCancel as a different element. */\n cancelAs?: string\n /** Merge cancel props onto child element. */\n cancelAsChild?: boolean\n /** Custom reference element for the AutocompleteAnchor. */\n anchorReference?: object | null\n /** Render the AutocompleteAnchor as a different element. */\n anchorAs?: string\n /** Merge anchor props onto child element. */\n anchorAsChild?: boolean\n}>(), {\n placeholder: undefined,\n class: undefined,\n modelValue: undefined,\n autoFocus: false,\n disabled: undefined,\n as: undefined,\n asChild: false,\n triggerAs: undefined,\n triggerAsChild: false,\n triggerDisabled: undefined,\n cancelAs: undefined,\n cancelAsChild: false,\n anchorReference: undefined,\n anchorAs: undefined,\n anchorAsChild: false,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>()\n\nconst ctx = useAutocompleteInject()\n\n// Track focused state via useFocusWithin (NOT manual @focus/@blur listeners) — the\n// inner Reka <AutocompleteInput> wraps the native <input>; useFocusWithin observes\n// the actual DOM subtree of the anchor, so isFocused flips reliably regardless of\n// how Reka forwards refs/attrs.\nconst anchorRef = useTemplateRef<HTMLElement>('anchor')\nconst { focused: isFocused } = useFocusWithin(anchorRef)\n\n// Render the inside-label only when (a) a label is set and (b) labelPlacement is 'inside'\nconst showInsideLabel = computed(\n () => ctx.hasLabel.value && ctx.labelPlacement.value === 'inside',\n)\n\n// In multiple mode, hide placeholder once chips are present\nconst effectivePlaceholder = computed(() =>\n ctx.multiple.value && ctx.selectedValues.value.length > 0 ? undefined : props.placeholder,\n)\n\nconst getLabel = (v: string) => ctx.selectedLabels.value.find(l => l.value === v)?.label ?? v\n</script>\n\n<template>\n <AutocompleteAnchor\n ref=\"anchor\"\n :reference=\"(props.anchorReference as any)\"\n :as=\"props.anchorAs\"\n :as-child=\"props.anchorAsChild\"\n :class=\"ctx.slots.value.trigger()\"\n :data-filled=\"ctx.hasLabel.value ? (ctx.isFilled.value || undefined) : undefined\"\n :data-focused=\"isFocused || undefined\"\n :data-invalid=\"ctx.isInvalid.value || undefined\"\n :data-disabled=\"ctx.isDisabled.value || undefined\"\n :data-readonly=\"ctx.isReadonly.value || undefined\"\n :data-multiple-overflow=\"ctx.multiple.value ? ctx.multipleOverflow.value : undefined\"\n data-slot=\"trigger\"\n >\n <label\n v-if=\"showInsideLabel\"\n :for=\"ctx.inputId.value\"\n :class=\"ctx.slots.value.label()\"\n >{{ ctx.label.value }}<span\n v-if=\"ctx.isRequired.value\"\n aria-hidden=\"true\"\n > *</span></label>\n <span\n v-if=\"$slots.startContent\"\n :class=\"ctx.slots.value.startContent()\"\n data-slot=\"start-content\"\n >\n <slot name=\"startContent\" />\n </span>\n <!-- Multiple/collapse: overflow chip area with truncation -->\n <AutocompleteOverflowChips\n v-if=\"ctx.multiple.value && ctx.multipleOverflow.value === 'collapse' && ctx.selectedValues.value.length > 0\"\n :values=\"ctx.selectedValues.value\"\n :get-label=\"getLabel\"\n :remove-value=\"ctx.removeValue\"\n />\n <!-- Multiple/wrap: chips that wrap onto new lines -->\n <template v-else-if=\"ctx.multiple.value && ctx.multipleOverflow.value === 'wrap'\">\n <Chip\n v-for=\"item in ctx.selectedLabels.value\"\n :key=\"item.value\"\n size=\"sm\"\n is-closable\n :close-aria-label=\"`Remove ${item.label}`\"\n data-slot=\"selected-chip\"\n @close.stop=\"ctx.removeValue(item.value)\"\n >\n {{ item.label }}\n </Chip>\n </template>\n <AutocompleteInput\n :id=\"ctx.inputId.value\"\n :model-value=\"props.modelValue\"\n :auto-focus=\"props.autoFocus\"\n :placeholder=\"effectivePlaceholder\"\n :disabled=\"props.disabled ?? ctx.isDisabled.value\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :readonly=\"ctx.isReadonly.value\"\n :required=\"ctx.isRequired.value\"\n :aria-invalid=\"ctx.isInvalid.value || undefined\"\n :aria-describedby=\"ctx.ariaDescribedBy.value\"\n :class=\"ctx.slots.value.input()\"\n :style=\"ctx.multiple.value && ctx.multipleOverflow.value === 'collapse' && ctx.selectedValues.value.length > 0\n ? { flex: '0 0 auto', minWidth: '80px', width: 'auto' }\n : undefined\"\n data-slot=\"input\"\n autocomplete=\"off\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n />\n <!-- Clear button: only shown when filled and not in a readonly/disabled state.\n Reka's AutocompleteCancel does not set data-empty itself, so we drive it here.\n In multiple mode also clears selectedValues via ctx.clearAll(). -->\n <AutocompleteCancel\n :as=\"props.cancelAs\"\n :as-child=\"props.cancelAsChild\"\n :class=\"ctx.slots.value.clearButton()\"\n :data-empty=\"(!ctx.isFilled.value || ctx.isReadonly.value || ctx.isDisabled.value) ? 'true' : undefined\"\n data-slot=\"clear-button\"\n aria-label=\"Clear\"\n @click=\"ctx.multiple.value ? ctx.clearAll() : undefined\"\n >\n <slot name=\"clearIcon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n data-slot=\"autocomplete-clear-button-icon\"\n aria-hidden=\"true\"\n >\n <line\n x1=\"18\"\n y1=\"6\"\n x2=\"6\"\n y2=\"18\"\n />\n <line\n x1=\"6\"\n y1=\"6\"\n x2=\"18\"\n y2=\"18\"\n />\n </svg>\n </slot>\n </AutocompleteCancel>\n <!-- Inline loading spinner: replaces the dropdown indicator while loadItems is pending -->\n <span\n v-if=\"ctx.isLoading.value\"\n :class=\"ctx.slots.value.indicator()\"\n data-slot=\"autocomplete-loading-indicator\"\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading suggestions\"\n >\n <Spinner size=\"sm\" />\n </span>\n <!-- Dropdown trigger indicator (hidden while loading) -->\n <AutocompleteTrigger\n v-else\n :as=\"props.triggerAs\"\n :as-child=\"props.triggerAsChild\"\n :disabled=\"props.triggerDisabled\"\n :class=\"ctx.slots.value.indicator()\"\n data-slot=\"autocomplete-default-indicator\"\n aria-label=\"Toggle suggestions\"\n >\n <slot name=\"triggerIcon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\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 aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </slot>\n </AutocompleteTrigger>\n </AutocompleteAnchor>\n</template>\n"],"mappings":""}
|
package/dist/components/autocomplete/AutocompleteInput.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -15,10 +15,46 @@ var AutocompleteInput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
15
15
|
__name: "AutocompleteInput",
|
|
16
16
|
props: {
|
|
17
17
|
placeholder: { default: void 0 },
|
|
18
|
-
class: { default: void 0 }
|
|
18
|
+
class: { default: void 0 },
|
|
19
|
+
modelValue: { default: void 0 },
|
|
20
|
+
autoFocus: {
|
|
21
|
+
type: Boolean,
|
|
22
|
+
default: false
|
|
23
|
+
},
|
|
24
|
+
disabled: {
|
|
25
|
+
type: Boolean,
|
|
26
|
+
default: void 0
|
|
27
|
+
},
|
|
28
|
+
as: { default: void 0 },
|
|
29
|
+
asChild: {
|
|
30
|
+
type: Boolean,
|
|
31
|
+
default: false
|
|
32
|
+
},
|
|
33
|
+
triggerAs: { default: void 0 },
|
|
34
|
+
triggerAsChild: {
|
|
35
|
+
type: Boolean,
|
|
36
|
+
default: false
|
|
37
|
+
},
|
|
38
|
+
triggerDisabled: {
|
|
39
|
+
type: Boolean,
|
|
40
|
+
default: void 0
|
|
41
|
+
},
|
|
42
|
+
cancelAs: { default: void 0 },
|
|
43
|
+
cancelAsChild: {
|
|
44
|
+
type: Boolean,
|
|
45
|
+
default: false
|
|
46
|
+
},
|
|
47
|
+
anchorReference: { default: void 0 },
|
|
48
|
+
anchorAs: { default: void 0 },
|
|
49
|
+
anchorAsChild: {
|
|
50
|
+
type: Boolean,
|
|
51
|
+
default: false
|
|
52
|
+
}
|
|
19
53
|
},
|
|
20
|
-
|
|
54
|
+
emits: ["update:modelValue"],
|
|
55
|
+
setup(__props, { emit: __emit }) {
|
|
21
56
|
const props = __props;
|
|
57
|
+
const emit = __emit;
|
|
22
58
|
const ctx = useAutocompleteInject();
|
|
23
59
|
const { focused: isFocused } = useFocusWithin(useTemplateRef("anchor"));
|
|
24
60
|
const showInsideLabel = computed(() => ctx.hasLabel.value && ctx.labelPlacement.value === "inside");
|
|
@@ -27,6 +63,9 @@ var AutocompleteInput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
27
63
|
return (_ctx, _cache) => {
|
|
28
64
|
return openBlock(), createBlock(unref(AutocompleteAnchor), {
|
|
29
65
|
ref: "anchor",
|
|
66
|
+
reference: props.anchorReference,
|
|
67
|
+
as: props.anchorAs,
|
|
68
|
+
"as-child": props.anchorAsChild,
|
|
30
69
|
class: normalizeClass(unref(ctx).slots.value.trigger()),
|
|
31
70
|
"data-filled": unref(ctx).hasLabel.value ? unref(ctx).isFilled.value || void 0 : void 0,
|
|
32
71
|
"data-focused": unref(isFocused) || void 0,
|
|
@@ -67,8 +106,12 @@ var AutocompleteInput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
67
106
|
}), 128)) : createCommentVNode("", true),
|
|
68
107
|
createVNode(unref(AutocompleteInput), {
|
|
69
108
|
id: unref(ctx).inputId.value,
|
|
109
|
+
"model-value": props.modelValue,
|
|
110
|
+
"auto-focus": props.autoFocus,
|
|
70
111
|
placeholder: effectivePlaceholder.value,
|
|
71
|
-
disabled: unref(ctx).isDisabled.value,
|
|
112
|
+
disabled: props.disabled ?? unref(ctx).isDisabled.value,
|
|
113
|
+
as: props.as,
|
|
114
|
+
"as-child": props.asChild,
|
|
72
115
|
readonly: unref(ctx).isReadonly.value,
|
|
73
116
|
required: unref(ctx).isRequired.value,
|
|
74
117
|
"aria-invalid": unref(ctx).isInvalid.value || void 0,
|
|
@@ -80,11 +123,16 @@ var AutocompleteInput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
80
123
|
width: "auto"
|
|
81
124
|
} : void 0),
|
|
82
125
|
"data-slot": "input",
|
|
83
|
-
autocomplete: "off"
|
|
126
|
+
autocomplete: "off",
|
|
127
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("update:modelValue", $event))
|
|
84
128
|
}, null, 8, [
|
|
85
129
|
"id",
|
|
130
|
+
"model-value",
|
|
131
|
+
"auto-focus",
|
|
86
132
|
"placeholder",
|
|
87
133
|
"disabled",
|
|
134
|
+
"as",
|
|
135
|
+
"as-child",
|
|
88
136
|
"readonly",
|
|
89
137
|
"required",
|
|
90
138
|
"aria-invalid",
|
|
@@ -93,13 +141,15 @@ var AutocompleteInput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
93
141
|
"style"
|
|
94
142
|
]),
|
|
95
143
|
createVNode(unref(AutocompleteCancel), {
|
|
144
|
+
as: props.cancelAs,
|
|
145
|
+
"as-child": props.cancelAsChild,
|
|
96
146
|
class: normalizeClass(unref(ctx).slots.value.clearButton()),
|
|
97
147
|
"data-empty": !unref(ctx).isFilled.value || unref(ctx).isReadonly.value || unref(ctx).isDisabled.value ? "true" : void 0,
|
|
98
148
|
"data-slot": "clear-button",
|
|
99
149
|
"aria-label": "Clear",
|
|
100
|
-
onClick: _cache[
|
|
150
|
+
onClick: _cache[1] || (_cache[1] = ($event) => unref(ctx).multiple.value ? unref(ctx).clearAll() : void 0)
|
|
101
151
|
}, {
|
|
102
|
-
default: withCtx(() => [renderSlot(_ctx.$slots, "clearIcon", {}, () => [_cache[
|
|
152
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "clearIcon", {}, () => [_cache[2] || (_cache[2] = createElementVNode("svg", {
|
|
103
153
|
xmlns: "http://www.w3.org/2000/svg",
|
|
104
154
|
width: "10",
|
|
105
155
|
height: "10",
|
|
@@ -123,7 +173,12 @@ var AutocompleteInput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
123
173
|
y2: "18"
|
|
124
174
|
})], -1))])]),
|
|
125
175
|
_: 3
|
|
126
|
-
}, 8, [
|
|
176
|
+
}, 8, [
|
|
177
|
+
"as",
|
|
178
|
+
"as-child",
|
|
179
|
+
"class",
|
|
180
|
+
"data-empty"
|
|
181
|
+
]),
|
|
127
182
|
unref(ctx).isLoading.value ? (openBlock(), createElementBlock("span", {
|
|
128
183
|
key: 4,
|
|
129
184
|
class: normalizeClass(unref(ctx).slots.value.indicator()),
|
|
@@ -133,11 +188,14 @@ var AutocompleteInput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
133
188
|
"aria-label": "Loading suggestions"
|
|
134
189
|
}, [createVNode(Spinner_default, { size: "sm" })], 2)) : (openBlock(), createBlock(unref(AutocompleteTrigger), {
|
|
135
190
|
key: 5,
|
|
191
|
+
as: props.triggerAs,
|
|
192
|
+
"as-child": props.triggerAsChild,
|
|
193
|
+
disabled: props.triggerDisabled,
|
|
136
194
|
class: normalizeClass(unref(ctx).slots.value.indicator()),
|
|
137
195
|
"data-slot": "autocomplete-default-indicator",
|
|
138
196
|
"aria-label": "Toggle suggestions"
|
|
139
197
|
}, {
|
|
140
|
-
default: withCtx(() => [renderSlot(_ctx.$slots, "triggerIcon", {}, () => [_cache[
|
|
198
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "triggerIcon", {}, () => [_cache[3] || (_cache[3] = createElementVNode("svg", {
|
|
141
199
|
xmlns: "http://www.w3.org/2000/svg",
|
|
142
200
|
width: "16",
|
|
143
201
|
height: "16",
|
|
@@ -150,10 +208,18 @@ var AutocompleteInput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
|
|
|
150
208
|
"aria-hidden": "true"
|
|
151
209
|
}, [createElementVNode("polyline", { points: "6 9 12 15 18 9" })], -1))])]),
|
|
152
210
|
_: 3
|
|
153
|
-
}, 8, [
|
|
211
|
+
}, 8, [
|
|
212
|
+
"as",
|
|
213
|
+
"as-child",
|
|
214
|
+
"disabled",
|
|
215
|
+
"class"
|
|
216
|
+
]))
|
|
154
217
|
]),
|
|
155
218
|
_: 3
|
|
156
219
|
}, 8, [
|
|
220
|
+
"reference",
|
|
221
|
+
"as",
|
|
222
|
+
"as-child",
|
|
157
223
|
"class",
|
|
158
224
|
"data-filled",
|
|
159
225
|
"data-focused",
|
package/dist/components/autocomplete/AutocompleteInput.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteInput.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/autocomplete/AutocompleteInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue'\nimport { useFocusWithin } from '@vueuse/core'\nimport { AutocompleteInput, AutocompleteTrigger, AutocompleteCancel, AutocompleteAnchor } from 'reka-ui'\nimport { useAutocompleteInject } from './Autocomplete.context'\nimport Chip from '../chip/Chip.vue'\nimport Spinner from '../spinner/Spinner.vue'\nimport AutocompleteOverflowChips from './AutocompleteOverflowChips.vue'\n\nconst props = withDefaults(defineProps<{\n placeholder?: string\n class?: string\n}>(), {\n placeholder: undefined,\n class: undefined,\n})\n\nconst ctx = useAutocompleteInject()\n\n// Track focused state via useFocusWithin (NOT manual @focus/@blur listeners) — the\n// inner Reka <AutocompleteInput> wraps the native <input>; useFocusWithin observes\n// the actual DOM subtree of the anchor, so isFocused flips reliably regardless of\n// how Reka forwards refs/attrs.\nconst anchorRef = useTemplateRef<HTMLElement>('anchor')\nconst { focused: isFocused } = useFocusWithin(anchorRef)\n\n// Render the inside-label only when (a) a label is set and (b) labelPlacement is 'inside'\nconst showInsideLabel = computed(\n () => ctx.hasLabel.value && ctx.labelPlacement.value === 'inside',\n)\n\n// In multiple mode, hide placeholder once chips are present\nconst effectivePlaceholder = computed(() =>\n ctx.multiple.value && ctx.selectedValues.value.length > 0 ? undefined : props.placeholder,\n)\n\nconst getLabel = (v: string) => ctx.selectedLabels.value.find(l => l.value === v)?.label ?? v\n</script>\n\n<template>\n <AutocompleteAnchor\n ref=\"anchor\"\n :class=\"ctx.slots.value.trigger()\"\n :data-filled=\"ctx.hasLabel.value ? (ctx.isFilled.value || undefined) : undefined\"\n :data-focused=\"isFocused || undefined\"\n :data-invalid=\"ctx.isInvalid.value || undefined\"\n :data-disabled=\"ctx.isDisabled.value || undefined\"\n :data-readonly=\"ctx.isReadonly.value || undefined\"\n :data-multiple-overflow=\"ctx.multiple.value ? ctx.multipleOverflow.value : undefined\"\n data-slot=\"trigger\"\n >\n <label\n v-if=\"showInsideLabel\"\n :for=\"ctx.inputId.value\"\n :class=\"ctx.slots.value.label()\"\n >{{ ctx.label.value }}<span\n v-if=\"ctx.isRequired.value\"\n aria-hidden=\"true\"\n > *</span></label>\n <span\n v-if=\"$slots.startContent\"\n :class=\"ctx.slots.value.startContent()\"\n data-slot=\"start-content\"\n >\n <slot name=\"startContent\" />\n </span>\n <!-- Multiple/collapse: overflow chip area with truncation -->\n <AutocompleteOverflowChips\n v-if=\"ctx.multiple.value && ctx.multipleOverflow.value === 'collapse' && ctx.selectedValues.value.length > 0\"\n :values=\"ctx.selectedValues.value\"\n :get-label=\"getLabel\"\n :remove-value=\"ctx.removeValue\"\n />\n <!-- Multiple/wrap: chips that wrap onto new lines -->\n <template v-else-if=\"ctx.multiple.value && ctx.multipleOverflow.value === 'wrap'\">\n <Chip\n v-for=\"item in ctx.selectedLabels.value\"\n :key=\"item.value\"\n size=\"sm\"\n is-closable\n :close-aria-label=\"`Remove ${item.label}`\"\n data-slot=\"selected-chip\"\n @close.stop=\"ctx.removeValue(item.value)\"\n >\n {{ item.label }}\n </Chip>\n </template>\n <AutocompleteInput\n :id=\"ctx.inputId.value\"\n :placeholder=\"effectivePlaceholder\"\n :disabled=\"ctx.isDisabled.value\"\n :readonly=\"ctx.isReadonly.value\"\n :required=\"ctx.isRequired.value\"\n :aria-invalid=\"ctx.isInvalid.value || undefined\"\n :aria-describedby=\"ctx.ariaDescribedBy.value\"\n :class=\"ctx.slots.value.input()\"\n :style=\"ctx.multiple.value && ctx.multipleOverflow.value === 'collapse' && ctx.selectedValues.value.length > 0\n ? { flex: '0 0 auto', minWidth: '80px', width: 'auto' }\n : undefined\"\n data-slot=\"input\"\n autocomplete=\"off\"\n />\n <!-- Clear button: only shown when filled and not in a readonly/disabled state.\n Reka's AutocompleteCancel does not set data-empty itself, so we drive it here.\n In multiple mode also clears selectedValues via ctx.clearAll(). -->\n <AutocompleteCancel\n :class=\"ctx.slots.value.clearButton()\"\n :data-empty=\"(!ctx.isFilled.value || ctx.isReadonly.value || ctx.isDisabled.value) ? 'true' : undefined\"\n data-slot=\"clear-button\"\n aria-label=\"Clear\"\n @click=\"ctx.multiple.value ? ctx.clearAll() : undefined\"\n >\n <slot name=\"clearIcon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n data-slot=\"autocomplete-clear-button-icon\"\n aria-hidden=\"true\"\n >\n <line\n x1=\"18\"\n y1=\"6\"\n x2=\"6\"\n y2=\"18\"\n />\n <line\n x1=\"6\"\n y1=\"6\"\n x2=\"18\"\n y2=\"18\"\n />\n </svg>\n </slot>\n </AutocompleteCancel>\n <!-- Inline loading spinner: replaces the dropdown indicator while loadItems is pending -->\n <span\n v-if=\"ctx.isLoading.value\"\n :class=\"ctx.slots.value.indicator()\"\n data-slot=\"autocomplete-loading-indicator\"\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading suggestions\"\n >\n <Spinner size=\"sm\" />\n </span>\n <!-- Dropdown trigger indicator (hidden while loading) -->\n <AutocompleteTrigger\n v-else\n :class=\"ctx.slots.value.indicator()\"\n data-slot=\"autocomplete-default-indicator\"\n aria-label=\"Toggle suggestions\"\n >\n <slot name=\"triggerIcon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\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 aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </slot>\n </AutocompleteTrigger>\n </AutocompleteAnchor>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AutocompleteInput.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/autocomplete/AutocompleteInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from 'vue'\nimport { useFocusWithin } from '@vueuse/core'\nimport { AutocompleteInput, AutocompleteTrigger, AutocompleteCancel, AutocompleteAnchor } from 'reka-ui'\nimport { useAutocompleteInject } from './Autocomplete.context'\nimport Chip from '../chip/Chip.vue'\nimport Spinner from '../spinner/Spinner.vue'\nimport AutocompleteOverflowChips from './AutocompleteOverflowChips.vue'\n\nconst props = withDefaults(defineProps<{\n placeholder?: string\n class?: string\n /** Two-way bound search input value. */\n modelValue?: string\n /** Auto-focus the input on mount. */\n autoFocus?: boolean\n /** Disable the input. Falls back to context isDisabled. */\n disabled?: boolean\n /** Render the AutocompleteInput as a different element. */\n as?: string\n /** Merge props onto child element instead of rendering a wrapper. */\n asChild?: boolean\n /** Render the AutocompleteTrigger as a different element. */\n triggerAs?: string\n /** Merge trigger props onto child element. */\n triggerAsChild?: boolean\n /** Disable the trigger button. Falls back to context isDisabled. */\n triggerDisabled?: boolean\n /** Render the AutocompleteCancel as a different element. */\n cancelAs?: string\n /** Merge cancel props onto child element. */\n cancelAsChild?: boolean\n /** Custom reference element for the AutocompleteAnchor. */\n anchorReference?: object | null\n /** Render the AutocompleteAnchor as a different element. */\n anchorAs?: string\n /** Merge anchor props onto child element. */\n anchorAsChild?: boolean\n}>(), {\n placeholder: undefined,\n class: undefined,\n modelValue: undefined,\n autoFocus: false,\n disabled: undefined,\n as: undefined,\n asChild: false,\n triggerAs: undefined,\n triggerAsChild: false,\n triggerDisabled: undefined,\n cancelAs: undefined,\n cancelAsChild: false,\n anchorReference: undefined,\n anchorAs: undefined,\n anchorAsChild: false,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>()\n\nconst ctx = useAutocompleteInject()\n\n// Track focused state via useFocusWithin (NOT manual @focus/@blur listeners) — the\n// inner Reka <AutocompleteInput> wraps the native <input>; useFocusWithin observes\n// the actual DOM subtree of the anchor, so isFocused flips reliably regardless of\n// how Reka forwards refs/attrs.\nconst anchorRef = useTemplateRef<HTMLElement>('anchor')\nconst { focused: isFocused } = useFocusWithin(anchorRef)\n\n// Render the inside-label only when (a) a label is set and (b) labelPlacement is 'inside'\nconst showInsideLabel = computed(\n () => ctx.hasLabel.value && ctx.labelPlacement.value === 'inside',\n)\n\n// In multiple mode, hide placeholder once chips are present\nconst effectivePlaceholder = computed(() =>\n ctx.multiple.value && ctx.selectedValues.value.length > 0 ? undefined : props.placeholder,\n)\n\nconst getLabel = (v: string) => ctx.selectedLabels.value.find(l => l.value === v)?.label ?? v\n</script>\n\n<template>\n <AutocompleteAnchor\n ref=\"anchor\"\n :reference=\"(props.anchorReference as any)\"\n :as=\"props.anchorAs\"\n :as-child=\"props.anchorAsChild\"\n :class=\"ctx.slots.value.trigger()\"\n :data-filled=\"ctx.hasLabel.value ? (ctx.isFilled.value || undefined) : undefined\"\n :data-focused=\"isFocused || undefined\"\n :data-invalid=\"ctx.isInvalid.value || undefined\"\n :data-disabled=\"ctx.isDisabled.value || undefined\"\n :data-readonly=\"ctx.isReadonly.value || undefined\"\n :data-multiple-overflow=\"ctx.multiple.value ? ctx.multipleOverflow.value : undefined\"\n data-slot=\"trigger\"\n >\n <label\n v-if=\"showInsideLabel\"\n :for=\"ctx.inputId.value\"\n :class=\"ctx.slots.value.label()\"\n >{{ ctx.label.value }}<span\n v-if=\"ctx.isRequired.value\"\n aria-hidden=\"true\"\n > *</span></label>\n <span\n v-if=\"$slots.startContent\"\n :class=\"ctx.slots.value.startContent()\"\n data-slot=\"start-content\"\n >\n <slot name=\"startContent\" />\n </span>\n <!-- Multiple/collapse: overflow chip area with truncation -->\n <AutocompleteOverflowChips\n v-if=\"ctx.multiple.value && ctx.multipleOverflow.value === 'collapse' && ctx.selectedValues.value.length > 0\"\n :values=\"ctx.selectedValues.value\"\n :get-label=\"getLabel\"\n :remove-value=\"ctx.removeValue\"\n />\n <!-- Multiple/wrap: chips that wrap onto new lines -->\n <template v-else-if=\"ctx.multiple.value && ctx.multipleOverflow.value === 'wrap'\">\n <Chip\n v-for=\"item in ctx.selectedLabels.value\"\n :key=\"item.value\"\n size=\"sm\"\n is-closable\n :close-aria-label=\"`Remove ${item.label}`\"\n data-slot=\"selected-chip\"\n @close.stop=\"ctx.removeValue(item.value)\"\n >\n {{ item.label }}\n </Chip>\n </template>\n <AutocompleteInput\n :id=\"ctx.inputId.value\"\n :model-value=\"props.modelValue\"\n :auto-focus=\"props.autoFocus\"\n :placeholder=\"effectivePlaceholder\"\n :disabled=\"props.disabled ?? ctx.isDisabled.value\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :readonly=\"ctx.isReadonly.value\"\n :required=\"ctx.isRequired.value\"\n :aria-invalid=\"ctx.isInvalid.value || undefined\"\n :aria-describedby=\"ctx.ariaDescribedBy.value\"\n :class=\"ctx.slots.value.input()\"\n :style=\"ctx.multiple.value && ctx.multipleOverflow.value === 'collapse' && ctx.selectedValues.value.length > 0\n ? { flex: '0 0 auto', minWidth: '80px', width: 'auto' }\n : undefined\"\n data-slot=\"input\"\n autocomplete=\"off\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n />\n <!-- Clear button: only shown when filled and not in a readonly/disabled state.\n Reka's AutocompleteCancel does not set data-empty itself, so we drive it here.\n In multiple mode also clears selectedValues via ctx.clearAll(). -->\n <AutocompleteCancel\n :as=\"props.cancelAs\"\n :as-child=\"props.cancelAsChild\"\n :class=\"ctx.slots.value.clearButton()\"\n :data-empty=\"(!ctx.isFilled.value || ctx.isReadonly.value || ctx.isDisabled.value) ? 'true' : undefined\"\n data-slot=\"clear-button\"\n aria-label=\"Clear\"\n @click=\"ctx.multiple.value ? ctx.clearAll() : undefined\"\n >\n <slot name=\"clearIcon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n data-slot=\"autocomplete-clear-button-icon\"\n aria-hidden=\"true\"\n >\n <line\n x1=\"18\"\n y1=\"6\"\n x2=\"6\"\n y2=\"18\"\n />\n <line\n x1=\"6\"\n y1=\"6\"\n x2=\"18\"\n y2=\"18\"\n />\n </svg>\n </slot>\n </AutocompleteCancel>\n <!-- Inline loading spinner: replaces the dropdown indicator while loadItems is pending -->\n <span\n v-if=\"ctx.isLoading.value\"\n :class=\"ctx.slots.value.indicator()\"\n data-slot=\"autocomplete-loading-indicator\"\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading suggestions\"\n >\n <Spinner size=\"sm\" />\n </span>\n <!-- Dropdown trigger indicator (hidden while loading) -->\n <AutocompleteTrigger\n v-else\n :as=\"props.triggerAs\"\n :as-child=\"props.triggerAsChild\"\n :disabled=\"props.triggerDisabled\"\n :class=\"ctx.slots.value.indicator()\"\n data-slot=\"autocomplete-default-indicator\"\n aria-label=\"Toggle suggestions\"\n >\n <slot name=\"triggerIcon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\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 aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </slot>\n </AutocompleteTrigger>\n </AutocompleteAnchor>\n</template>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutocompleteItem.js","names":[],"sources":["../../../src/components/autocomplete/AutocompleteItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, onUnmounted, useSlots, type Slots, type VNode } from 'vue'\nimport { AutocompleteItem, ComboboxItemIndicator } from 'reka-ui'\nimport { useAutocompleteInject } from './Autocomplete.context'\n\nconst props = withDefaults(defineProps<{\n value: string\n isDisabled?: boolean\n class?: string\n}>(), {\n isDisabled: false,\n class: undefined,\n})\n\nconst slots: Slots = useSlots()\nconst ctx = useAutocompleteInject()\n\nfunction extractText(nodes: VNode[]): string {\n return nodes.map(n => {\n if (typeof n.children === 'string') return n.children\n if (Array.isArray(n.children)) return extractText(n.children as VNode[])\n return ''\n }).join('')\n}\n\nconst displayText = computed((): string => {\n const vnodes: VNode[] | undefined = (slots.default as (() => VNode[]) | undefined)?.()\n if (!vnodes) return props.value\n return extractText(vnodes).trim() || props.value\n})\n\n// In multiple mode, track whether this item is in the selected array\nconst isChecked = computed(() => ctx.multiple.value && ctx.isSelected(props.value))\n\nonMounted(() => {\n ctx.registerItem(props.value, displayText.value)\n})\n\nonUnmounted(() => {\n ctx.unregisterItem(props.value)\n})\n\nfunction handleSelect(event: Event) {\n if (ctx.multiple.value) {\n // Prevent Reka from overwriting the combobox value with the selected item's text.\n // Without this, Reka's internal handler fires after ours and sets searchTerm = displayText.\n event.preventDefault()\n ctx.onMultipleSelect(props.value)\n }\n}\n</script>\n\n<template>\n <AutocompleteItem\n :value=\"displayText\"\n :text-value=\"displayText\"\n :disabled=\"props.isDisabled\"\n :data-item-value=\"props.value\"\n :data-selected=\"isChecked || undefined\"\n class=\"list-box-item list-box-item--default\"\n data-slot=\"list-box-item\"\n @select=\"handleSelect\"\n >\n <slot name=\"startContent\" />\n <span\n class=\"autocomplete-item__text\"\n data-slot=\"item-text\"\n ><slot /></span>\n <!-- Single mode: Reka's ComboboxItemIndicator handles the checkmark natively -->\n <ComboboxItemIndicator\n v-if=\"!ctx.multiple.value\"\n class=\"list-box-item__indicator\"\n data-slot=\"list-box-item-indicator\"\n >\n <slot name=\"selectedIcon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n data-slot=\"list-box-item-indicator--checkmark\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </slot>\n </ComboboxItemIndicator>\n <!-- Multiple mode: check against our selectedValues array instead -->\n <span\n v-else-if=\"isChecked\"\n class=\"list-box-item__indicator\"\n data-slot=\"list-box-item-indicator\"\n >\n <slot name=\"selectedIcon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n data-slot=\"list-box-item-indicator--checkmark\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </slot>\n </span>\n <slot name=\"endContent\" />\n </AutocompleteItem>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"AutocompleteItem.js","names":[],"sources":["../../../src/components/autocomplete/AutocompleteItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, onUnmounted, useSlots, type Slots, type VNode } from 'vue'\nimport { AutocompleteItem, ComboboxItemIndicator } from 'reka-ui'\nimport { useAutocompleteInject } from './Autocomplete.context'\n\nconst props = withDefaults(defineProps<{\n value: string\n isDisabled?: boolean\n class?: string\n /** A string value for typeahead matching. Defaults to display text. */\n textValue?: string\n /** Whether the item is disabled. Alias for isDisabled. */\n disabled?: boolean\n /** Render as a different element or component. */\n as?: string\n /** Merge props onto child element instead of rendering a wrapper. */\n asChild?: boolean\n /** Render the ComboboxItemIndicator as a different element. */\n indicatorAs?: string\n /** Merge indicator props onto child element. */\n indicatorAsChild?: boolean\n}>(), {\n isDisabled: false,\n class: undefined,\n textValue: undefined,\n disabled: undefined,\n as: undefined,\n asChild: false,\n indicatorAs: undefined,\n indicatorAsChild: false,\n})\n\nconst emit = defineEmits<{\n 'select': [event: Event]\n}>()\n\nconst slots: Slots = useSlots()\nconst ctx = useAutocompleteInject()\n\nfunction extractText(nodes: VNode[]): string {\n return nodes.map(n => {\n if (typeof n.children === 'string') return n.children\n if (Array.isArray(n.children)) return extractText(n.children as VNode[])\n return ''\n }).join('')\n}\n\nconst displayText = computed((): string => {\n const vnodes: VNode[] | undefined = (slots.default as (() => VNode[]) | undefined)?.()\n if (!vnodes) return props.value\n return extractText(vnodes).trim() || props.value\n})\n\n// In multiple mode, track whether this item is in the selected array\nconst isChecked = computed(() => ctx.multiple.value && ctx.isSelected(props.value))\n\nonMounted(() => {\n ctx.registerItem(props.value, displayText.value)\n})\n\nonUnmounted(() => {\n ctx.unregisterItem(props.value)\n})\n\nfunction handleSelect(event: Event) {\n emit('select', event)\n if (ctx.multiple.value) {\n // Prevent Reka from overwriting the combobox value with the selected item's text.\n // Without this, Reka's internal handler fires after ours and sets searchTerm = displayText.\n event.preventDefault()\n ctx.onMultipleSelect(props.value)\n }\n}\n</script>\n\n<template>\n <AutocompleteItem\n :value=\"displayText\"\n :text-value=\"props.textValue ?? displayText\"\n :disabled=\"props.disabled ?? props.isDisabled\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :data-item-value=\"props.value\"\n :data-selected=\"isChecked || undefined\"\n class=\"list-box-item list-box-item--default\"\n data-slot=\"list-box-item\"\n @select=\"handleSelect\"\n >\n <slot name=\"startContent\" />\n <span\n class=\"autocomplete-item__text\"\n data-slot=\"item-text\"\n ><slot /></span>\n <!-- Single mode: Reka's ComboboxItemIndicator handles the checkmark natively -->\n <ComboboxItemIndicator\n v-if=\"!ctx.multiple.value\"\n :as=\"props.indicatorAs\"\n :as-child=\"props.indicatorAsChild\"\n class=\"list-box-item__indicator\"\n data-slot=\"list-box-item-indicator\"\n >\n <slot name=\"selectedIcon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n data-slot=\"list-box-item-indicator--checkmark\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </slot>\n </ComboboxItemIndicator>\n <!-- Multiple mode: check against our selectedValues array instead -->\n <span\n v-else-if=\"isChecked\"\n class=\"list-box-item__indicator\"\n data-slot=\"list-box-item-indicator\"\n >\n <slot name=\"selectedIcon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n data-slot=\"list-box-item-indicator--checkmark\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </slot>\n </span>\n <slot name=\"endContent\" />\n </AutocompleteItem>\n</template>\n"],"mappings":""}
|