@auronui/vue 1.4.0 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/cjs/index.cjs +719 -459
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/components/_shared/TimeScroller.js.map +1 -1
  4. package/dist/components/_shared/TimeScroller.vue_vue_type_script_setup_true_lang.js +11 -7
  5. package/dist/components/_shared/TimeScroller.vue_vue_type_script_setup_true_lang.js.map +1 -1
  6. package/dist/components/accordion/Accordion.js.map +1 -1
  7. package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js +17 -6
  8. package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
  9. package/dist/components/autocomplete/Autocomplete.js.map +1 -1
  10. package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js +23 -3
  11. package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  12. package/dist/components/autocomplete/AutocompleteCreateItem.js.map +1 -1
  13. package/dist/components/autocomplete/AutocompleteCreateItem.vue_vue_type_script_setup_true_lang.js +11 -7
  14. package/dist/components/autocomplete/AutocompleteCreateItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  15. package/dist/components/autocomplete/AutocompleteInput.js.map +1 -1
  16. package/dist/components/autocomplete/AutocompleteInput.vue_vue_type_script_setup_true_lang.js +23 -11
  17. package/dist/components/autocomplete/AutocompleteInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  18. package/dist/components/autocomplete/AutocompleteItem.js.map +1 -1
  19. package/dist/components/autocomplete/AutocompleteItem.vue_vue_type_script_setup_true_lang.js +25 -17
  20. package/dist/components/autocomplete/AutocompleteItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  21. package/dist/components/autocomplete/AutocompleteOverflowChips.js.map +1 -1
  22. package/dist/components/autocomplete/AutocompleteOverflowChips.vue_vue_type_script_setup_true_lang.js +11 -4
  23. package/dist/components/autocomplete/AutocompleteOverflowChips.vue_vue_type_script_setup_true_lang.js.map +1 -1
  24. package/dist/components/avatar/Avatar.js.map +1 -1
  25. package/dist/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js +11 -13
  26. package/dist/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  27. package/dist/components/avatar/AvatarGroup.js.map +1 -1
  28. package/dist/components/avatar/AvatarGroup.vue_vue_type_script_setup_true_lang.js +12 -8
  29. package/dist/components/avatar/AvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  30. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -1
  31. package/dist/components/breadcrumbs/Breadcrumbs.vue_vue_type_script_setup_true_lang.js +11 -2
  32. package/dist/components/breadcrumbs/Breadcrumbs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/components/button/ButtonGroup.js.map +1 -1
  34. package/dist/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js +4 -2
  35. package/dist/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  36. package/dist/components/calendar/Calendar.js.map +1 -1
  37. package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js +3 -1
  38. package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  39. package/dist/components/checkbox/CheckboxGroup.js.map +1 -1
  40. package/dist/components/checkbox/CheckboxGroup.vue_vue_type_script_setup_true_lang.js +32 -19
  41. package/dist/components/checkbox/CheckboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/components/collapsible/CollapsibleGroup.js.map +1 -1
  43. package/dist/components/collapsible/CollapsibleGroup.vue_vue_type_script_setup_true_lang.js +9 -3
  44. package/dist/components/collapsible/CollapsibleGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  45. package/dist/components/color-field/ColorField.js.map +1 -1
  46. package/dist/components/color-field/ColorField.vue_vue_type_script_setup_true_lang.js +17 -17
  47. package/dist/components/color-field/ColorField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/components/color-input-group/ColorInputGroup.js.map +1 -1
  49. package/dist/components/color-input-group/ColorInputGroup.vue_vue_type_script_setup_true_lang.js +16 -18
  50. package/dist/components/color-input-group/ColorInputGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  51. package/dist/components/combo-box/ComboBox.js.map +1 -1
  52. package/dist/components/combo-box/ComboBox.vue_vue_type_script_setup_true_lang.js +10 -2
  53. package/dist/components/combo-box/ComboBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  54. package/dist/components/combo-box/ComboBoxInput.js.map +1 -1
  55. package/dist/components/combo-box/ComboBoxInput.vue_vue_type_script_setup_true_lang.js +9 -4
  56. package/dist/components/combo-box/ComboBoxInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  57. package/dist/components/combo-box/ComboBoxItem.js.map +1 -1
  58. package/dist/components/combo-box/ComboBoxItem.vue_vue_type_script_setup_true_lang.js +15 -6
  59. package/dist/components/combo-box/ComboBoxItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  60. package/dist/components/date-picker/DatePicker.js.map +1 -1
  61. package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js +8 -4
  62. package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/components/date-time-picker/DateTimePicker.js.map +1 -1
  64. package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js +10 -4
  65. package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  66. package/dist/components/list-box/ListBox.js.map +1 -1
  67. package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js +14 -4
  68. package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  69. package/dist/components/modal/ModalContent.js.map +1 -1
  70. package/dist/components/modal/ModalContent.vue_vue_type_script_setup_true_lang.js +2 -3
  71. package/dist/components/modal/ModalContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  72. package/dist/components/radio/RadioGroup.js.map +1 -1
  73. package/dist/components/radio/RadioGroup.vue_vue_type_script_setup_true_lang.js +32 -19
  74. package/dist/components/radio/RadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  75. package/dist/components/scroll-area/ScrollArea.js.map +1 -1
  76. package/dist/components/scroll-area/ScrollArea.vue_vue_type_script_setup_true_lang.js +30 -13
  77. package/dist/components/scroll-area/ScrollArea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  78. package/dist/components/select/Select.js.map +1 -1
  79. package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js +21 -5
  80. package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js.map +1 -1
  81. package/dist/components/select/SelectItem.js.map +1 -1
  82. package/dist/components/select/SelectItem.vue_vue_type_script_setup_true_lang.js +11 -6
  83. package/dist/components/select/SelectItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  84. package/dist/components/select/SelectOverflowChips.js.map +1 -1
  85. package/dist/components/select/SelectOverflowChips.vue_vue_type_script_setup_true_lang.js +8 -5
  86. package/dist/components/select/SelectOverflowChips.vue_vue_type_script_setup_true_lang.js.map +1 -1
  87. package/dist/components/select/SelectTrigger.js.map +1 -1
  88. package/dist/components/select/SelectTrigger.vue_vue_type_script_setup_true_lang.js +7 -5
  89. package/dist/components/select/SelectTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  90. package/dist/components/select/SelectValue.js.map +1 -1
  91. package/dist/components/select/SelectValue.vue_vue_type_script_setup_true_lang.js +11 -4
  92. package/dist/components/select/SelectValue.vue_vue_type_script_setup_true_lang.js.map +1 -1
  93. package/dist/components/separator/Separator.js.map +1 -1
  94. package/dist/components/separator/Separator.vue_vue_type_script_setup_true_lang.js +9 -8
  95. package/dist/components/separator/Separator.vue_vue_type_script_setup_true_lang.js.map +1 -1
  96. package/dist/components/stepper/Stepper.js.map +1 -1
  97. package/dist/components/stepper/Stepper.vue_vue_type_script_setup_true_lang.js +20 -10
  98. package/dist/components/stepper/Stepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  99. package/dist/components/switch/SwitchGroup.js.map +1 -1
  100. package/dist/components/switch/SwitchGroup.vue_vue_type_script_setup_true_lang.js +29 -15
  101. package/dist/components/switch/SwitchGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  102. package/dist/components/table/Table.js.map +1 -1
  103. package/dist/components/table/Table.vue_vue_type_script_setup_true_lang.js +29 -8
  104. package/dist/components/table/Table.vue_vue_type_script_setup_true_lang.js.map +1 -1
  105. package/dist/components/tabs/TabList.js.map +1 -1
  106. package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js +18 -15
  107. package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  108. package/dist/components/tabs/Tabs.js.map +1 -1
  109. package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js +30 -7
  110. package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  111. package/dist/components/time-picker/TimePicker.js.map +1 -1
  112. package/dist/components/time-picker/TimePicker.vue_vue_type_script_setup_true_lang.js +6 -2
  113. package/dist/components/time-picker/TimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  114. package/dist/components/toast/ToastViewport.js.map +1 -1
  115. package/dist/components/toast/ToastViewport.vue_vue_type_script_setup_true_lang.js +19 -6
  116. package/dist/components/toast/ToastViewport.vue_vue_type_script_setup_true_lang.js.map +1 -1
  117. package/dist/index.d.ts +363 -0
  118. package/dist/packages/styles/dist/components/modal/modal.styles.js +2 -1
  119. package/dist/packages/styles/dist/components/modal/modal.styles.js.map +1 -1
  120. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"TimePicker.js","names":[],"sources":["../../../src/components/time-picker/TimePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, shallowRef, watch } from 'vue'\nimport { Time, getLocalTimeZone, now as internationalizedNow } from '@internationalized/date'\nimport { timePickerVariants, type TimeFieldVariants } from '@auronui/styles'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\nimport TimeField from '../time-field/TimeField.vue'\nimport TimeScroller from '../_shared/TimeScroller.vue'\nimport Popover from '../popover/Popover.vue'\nimport PopoverTrigger from '../popover/PopoverTrigger.vue'\nimport PopoverContent from '../popover/PopoverContent.vue'\nimport Button from '../button/Button.vue'\n\nconst props = withDefaults(defineProps<{\n /* Field appearance — forwarded to TimeField */\n variant?: TimeFieldVariants['variant']\n size?: TimeFieldVariants['size']\n color?: TimeFieldVariants['color']\n labelPlacement?: TimeFieldVariants['labelPlacement']\n fullWidth?: boolean\n\n defaultValue?: Time\n defaultOpen?: boolean\n defaultPlaceholder?: Time\n placeholderValue?: Time\n minValue?: Time\n maxValue?: Time\n locale?: string\n granularity?: 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n /** Steps for segment keyboard navigation. */\n step?: Partial<Record<'hour' | 'minute' | 'second' | 'millisecond', number>>\n stepSnapping?: boolean\n label?: string\n description?: string\n errorMessage?: string\n isInvalid?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n name?: string\n hideTimeZone?: boolean\n closeOnSelect?: boolean\n modal?: boolean\n /** Label for the footer button that closes the picker. */\n doneLabel?: string\n /** Text direction. */\n dir?: 'ltr' | 'rtl'\n required?: boolean\n /** Render trigger as a different element. */\n triggerAs?: string\n /** Render trigger child as root element. */\n triggerAsChild?: boolean\n side?: 'top' | 'right' | 'bottom' | 'left'\n sideOffset?: number\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 class?: ClassValue\n /** Override classes for individual slots (base, trigger, triggerIndicator, popover, panel, timeDone) */\n classNames?: Partial<{\n base: ClassValue\n trigger: ClassValue\n triggerIndicator: ClassValue\n popover: ClassValue\n panel: ClassValue\n timeDone: ClassValue\n }>\n}>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n granularity: 'minute',\n hourCycle: 24,\n defaultOpen: false,\n closeOnSelect: true,\n modal: false,\n doneLabel: 'Done',\n avoidCollisions: true,\n collisionPadding: 8,\n prioritizePosition: true,\n})\n\nconst modelValue = defineModel<Time | null | undefined>()\nconst openModel = defineModel<boolean>('open', { default: undefined })\n\n// Seed controlled open state from defaultOpen so portal renders in uncontrolled mode too\nif (props.defaultOpen && openModel.value === undefined) {\n openModel.value = true\n}\n\n// Internal working value — always a Time, never null/undefined, so both the\n// TimeField trigger and the TimeScroller panel always have something to render.\n// Mirrors DateTimePicker.vue's internalValue seeding pattern exactly.\nconst _now = internationalizedNow(getLocalTimeZone())\nconst internalValue = shallowRef<Time>(\n modelValue.value ?? props.defaultValue ?? new Time(_now.hour, _now.minute),\n)\n\n// Sync inbound: parent resets the value → update internalValue.\nwatch(modelValue, (v) => {\n if (v instanceof Time) internalValue.value = v\n})\n\n// Route segment edits from TimeField back to both internalValue and modelValue.\nfunction onFieldChange(v: Time | null | undefined) {\n if (!(v instanceof Time)) return\n internalValue.value = v\n modelValue.value = v\n}\n\n// Route wheel selections from TimeScroller back to both internalValue and modelValue.\nfunction onScrollerChange(v: Time) {\n internalValue.value = v\n modelValue.value = v\n if (props.closeOnSelect) {\n // Scroller selection is a single-field change (hour OR minute OR second),\n // not a \"done\" action — do NOT auto-close here. closeOnSelect exists for\n // parity with DateTimePicker's prop surface, matching its own behavior of\n // not auto-closing on a single time-field tap either.\n }\n}\n\nconst slotFns = computed(() =>\n timePickerVariants({\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n fullWidth: props.fullWidth,\n }),\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n data-slot=\"time-picker\"\n >\n <Popover\n v-model:open=\"openModel\"\n :default-open=\"defaultOpen\"\n :modal=\"modal\"\n >\n <TimeField\n :model-value=\"internalValue\"\n :variant=\"variant\"\n :size=\"size\"\n :color=\"color\"\n :label-placement=\"labelPlacement\"\n :full-width=\"fullWidth\"\n :default-value=\"defaultValue\"\n :default-placeholder=\"defaultPlaceholder\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :step=\"step\"\n :step-snapping=\"stepSnapping\"\n :locale=\"locale\"\n :label=\"label\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :is-invalid=\"isInvalid\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n :is-required=\"isRequired\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n :required=\"required\"\n :dir=\"dir\"\n @update:model-value=\"(val) => onFieldChange(val as Time | null | undefined)\"\n >\n <template #endContent>\n <PopoverTrigger\n :class=\"composeClassName(slotFns.trigger(), props.classNames?.trigger)\"\n :as=\"triggerAs\"\n :as-child=\"triggerAsChild\"\n aria-label=\"Open time picker\"\n @mousedown.prevent\n >\n <slot name=\"selectorIcon\">\n <svg\n :class=\"composeClassName(slotFns.triggerIndicator(), props.classNames?.triggerIndicator)\"\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 focusable=\"false\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n </slot>\n </PopoverTrigger>\n </template>\n </TimeField>\n\n <PopoverContent\n :class=\"composeClassName(slotFns.popover(), props.classNames?.popover)\"\n data-slot=\"popover\"\n :side-offset=\"sideOffset ?? 8\"\n :side=\"side\"\n :side-flip=\"sideFlip\"\n :align=\"align\"\n :align-offset=\"alignOffset\"\n :align-flip=\"alignFlip\"\n :avoid-collisions=\"avoidCollisions\"\n :collision-boundary=\"collisionBoundary\"\n :collision-padding=\"collisionPadding\"\n :arrow-padding=\"arrowPadding\"\n :hide-shifted-arrow=\"hideShiftedArrow\"\n :sticky=\"sticky\"\n :hide-when-detached=\"hideWhenDetached\"\n :position-strategy=\"positionStrategy\"\n :update-position-strategy=\"updatePositionStrategy\"\n :disable-update-on-layout-shift=\"disableUpdateOnLayoutShift\"\n :prioritize-position=\"prioritizePosition\"\n >\n <div\n :class=\"composeClassName(slotFns.panel(), props.classNames?.panel)\"\n data-slot=\"panel\"\n >\n <TimeScroller\n :model-value=\"internalValue\"\n :granularity=\"granularity === 'hour' ? 'minute' : granularity\"\n :hour-cycle=\"hourCycle\"\n @update:model-value=\"(val) => onScrollerChange(val as Time)\"\n />\n\n <div\n :class=\"composeClassName(slotFns.timeDone(), props.classNames?.timeDone)\"\n data-slot=\"time-done\"\n >\n <slot name=\"footer\" :close=\"() => { openModel = false }\">\n <Button\n size=\"sm\"\n color=\"primary\"\n data-slot=\"done-button\"\n @click=\"openModel = false\"\n >\n {{ doneLabel }}\n </Button>\n </slot>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TimePicker.js","names":[],"sources":["../../../src/components/time-picker/TimePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, shallowRef, watch } from 'vue'\nimport { Time, getLocalTimeZone, now as internationalizedNow } from '@internationalized/date'\nimport { timePickerVariants, type TimeFieldVariants } from '@auronui/styles'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\nimport TimeField from '../time-field/TimeField.vue'\nimport TimeScroller from '../_shared/TimeScroller.vue'\nimport Popover from '../popover/Popover.vue'\nimport PopoverTrigger from '../popover/PopoverTrigger.vue'\nimport PopoverContent from '../popover/PopoverContent.vue'\nimport Button from '../button/Button.vue'\n\nconst props = withDefaults(defineProps<{\n /* Field appearance — forwarded to TimeField */\n variant?: TimeFieldVariants['variant']\n size?: TimeFieldVariants['size']\n color?: TimeFieldVariants['color']\n labelPlacement?: TimeFieldVariants['labelPlacement']\n fullWidth?: boolean\n\n defaultValue?: Time\n defaultOpen?: boolean\n defaultPlaceholder?: Time\n placeholderValue?: Time\n minValue?: Time\n maxValue?: Time\n locale?: string\n granularity?: 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n /** Steps for segment keyboard navigation. */\n step?: Partial<Record<'hour' | 'minute' | 'second' | 'millisecond', number>>\n stepSnapping?: boolean\n label?: string\n description?: string\n errorMessage?: string\n isInvalid?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n name?: string\n hideTimeZone?: boolean\n closeOnSelect?: boolean\n modal?: boolean\n /** Label for the footer button that closes the picker. */\n doneLabel?: string\n /** Text direction. */\n dir?: 'ltr' | 'rtl'\n required?: boolean\n /** Render trigger as a different element. */\n triggerAs?: string\n /** Render trigger child as root element. */\n triggerAsChild?: boolean\n side?: 'top' | 'right' | 'bottom' | 'left'\n sideOffset?: number\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 class?: ClassValue\n /** Override classes for individual slots (base, trigger, triggerIndicator, popover, panel, timeDone) */\n classNames?: Partial<{\n base: ClassValue\n trigger: ClassValue\n triggerIndicator: ClassValue\n popover: ClassValue\n panel: ClassValue\n timeDone: ClassValue\n timeField: Partial<{\n label: ClassValue\n mainWrapper: ClassValue\n inputWrapper: ClassValue\n startContent: ClassValue\n segmentList: ClassValue\n segment: ClassValue\n endContent: ClassValue\n helperWrapper: ClassValue\n errorMessage: ClassValue\n description: ClassValue\n }>\n timeScroller: Partial<{\n scrollerWrap: ClassValue\n scrollerColumn: ClassValue\n scrollerItem: ClassValue\n }>\n }>\n}>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n granularity: 'minute',\n hourCycle: 24,\n defaultOpen: false,\n closeOnSelect: true,\n modal: false,\n doneLabel: 'Done',\n avoidCollisions: true,\n collisionPadding: 8,\n prioritizePosition: true,\n})\n\nconst modelValue = defineModel<Time | null | undefined>()\nconst openModel = defineModel<boolean>('open', { default: undefined })\n\n// Seed controlled open state from defaultOpen so portal renders in uncontrolled mode too\nif (props.defaultOpen && openModel.value === undefined) {\n openModel.value = true\n}\n\n// Internal working value — always a Time, never null/undefined, so both the\n// TimeField trigger and the TimeScroller panel always have something to render.\n// Mirrors DateTimePicker.vue's internalValue seeding pattern exactly.\nconst _now = internationalizedNow(getLocalTimeZone())\nconst internalValue = shallowRef<Time>(\n modelValue.value ?? props.defaultValue ?? new Time(_now.hour, _now.minute),\n)\n\n// Sync inbound: parent resets the value → update internalValue.\nwatch(modelValue, (v) => {\n if (v instanceof Time) internalValue.value = v\n})\n\n// Route segment edits from TimeField back to both internalValue and modelValue.\nfunction onFieldChange(v: Time | null | undefined) {\n if (!(v instanceof Time)) return\n internalValue.value = v\n modelValue.value = v\n}\n\n// Route wheel selections from TimeScroller back to both internalValue and modelValue.\nfunction onScrollerChange(v: Time) {\n internalValue.value = v\n modelValue.value = v\n if (props.closeOnSelect) {\n // Scroller selection is a single-field change (hour OR minute OR second),\n // not a \"done\" action — do NOT auto-close here. closeOnSelect exists for\n // parity with DateTimePicker's prop surface, matching its own behavior of\n // not auto-closing on a single time-field tap either.\n }\n}\n\nconst slotFns = computed(() =>\n timePickerVariants({\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n fullWidth: props.fullWidth,\n }),\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n data-slot=\"time-picker\"\n >\n <Popover\n v-model:open=\"openModel\"\n :default-open=\"defaultOpen\"\n :modal=\"modal\"\n >\n <TimeField\n :model-value=\"internalValue\"\n :variant=\"variant\"\n :size=\"size\"\n :color=\"color\"\n :label-placement=\"labelPlacement\"\n :full-width=\"fullWidth\"\n :default-value=\"defaultValue\"\n :default-placeholder=\"defaultPlaceholder\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :step=\"step\"\n :step-snapping=\"stepSnapping\"\n :locale=\"locale\"\n :label=\"label\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :is-invalid=\"isInvalid\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n :is-required=\"isRequired\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n :required=\"required\"\n :dir=\"dir\"\n :class-names=\"props.classNames?.timeField\"\n @update:model-value=\"(val) => onFieldChange(val as Time | null | undefined)\"\n >\n <template #endContent>\n <PopoverTrigger\n :class=\"composeClassName(slotFns.trigger(), props.classNames?.trigger)\"\n :as=\"triggerAs\"\n :as-child=\"triggerAsChild\"\n aria-label=\"Open time picker\"\n @mousedown.prevent\n >\n <slot name=\"selectorIcon\">\n <svg\n :class=\"composeClassName(slotFns.triggerIndicator(), props.classNames?.triggerIndicator)\"\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 focusable=\"false\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n </slot>\n </PopoverTrigger>\n </template>\n </TimeField>\n\n <PopoverContent\n :class=\"composeClassName(slotFns.popover(), props.classNames?.popover)\"\n data-slot=\"popover\"\n :side-offset=\"sideOffset ?? 8\"\n :side=\"side\"\n :side-flip=\"sideFlip\"\n :align=\"align\"\n :align-offset=\"alignOffset\"\n :align-flip=\"alignFlip\"\n :avoid-collisions=\"avoidCollisions\"\n :collision-boundary=\"collisionBoundary\"\n :collision-padding=\"collisionPadding\"\n :arrow-padding=\"arrowPadding\"\n :hide-shifted-arrow=\"hideShiftedArrow\"\n :sticky=\"sticky\"\n :hide-when-detached=\"hideWhenDetached\"\n :position-strategy=\"positionStrategy\"\n :update-position-strategy=\"updatePositionStrategy\"\n :disable-update-on-layout-shift=\"disableUpdateOnLayoutShift\"\n :prioritize-position=\"prioritizePosition\"\n >\n <div\n :class=\"composeClassName(slotFns.panel(), props.classNames?.panel)\"\n data-slot=\"panel\"\n >\n <TimeScroller\n :model-value=\"internalValue\"\n :granularity=\"granularity === 'hour' ? 'minute' : granularity\"\n :hour-cycle=\"hourCycle\"\n :class-names=\"props.classNames?.timeScroller\"\n @update:model-value=\"(val) => onScrollerChange(val as Time)\"\n />\n\n <div\n :class=\"composeClassName(slotFns.timeDone(), props.classNames?.timeDone)\"\n data-slot=\"time-done\"\n >\n <slot name=\"footer\" :close=\"() => { openModel = false }\">\n <Button\n size=\"sm\"\n color=\"primary\"\n data-slot=\"done-button\"\n @click=\"openModel = false\"\n >\n {{ doneLabel }}\n </Button>\n </slot>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n</template>\n"],"mappings":""}
@@ -175,6 +175,7 @@ var TimePicker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
175
175
  "hide-time-zone": __props.hideTimeZone,
176
176
  required: __props.required,
177
177
  dir: __props.dir,
178
+ "class-names": props.classNames?.timeField,
178
179
  "onUpdate:modelValue": _cache[1] || (_cache[1] = (val) => onFieldChange(val))
179
180
  }, {
180
181
  endContent: withCtx(() => [createVNode(PopoverTrigger_default, {
@@ -236,7 +237,8 @@ var TimePicker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
236
237
  "name",
237
238
  "hide-time-zone",
238
239
  "required",
239
- "dir"
240
+ "dir",
241
+ "class-names"
240
242
  ]), createVNode(PopoverContent_default, {
241
243
  class: normalizeClass(unref(composeClassName)(slotFns.value.popover(), props.classNames?.popover)),
242
244
  "data-slot": "popover",
@@ -265,11 +267,13 @@ var TimePicker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
265
267
  "model-value": internalValue.value,
266
268
  granularity: __props.granularity === "hour" ? "minute" : __props.granularity,
267
269
  "hour-cycle": __props.hourCycle,
270
+ "class-names": props.classNames?.timeScroller,
268
271
  "onUpdate:modelValue": _cache[2] || (_cache[2] = (val) => onScrollerChange(val))
269
272
  }, null, 8, [
270
273
  "model-value",
271
274
  "granularity",
272
- "hour-cycle"
275
+ "hour-cycle",
276
+ "class-names"
273
277
  ]), createElementVNode("div", {
274
278
  class: normalizeClass(unref(composeClassName)(slotFns.value.timeDone(), props.classNames?.timeDone)),
275
279
  "data-slot": "time-done"
@@ -1 +1 @@
1
- {"version":3,"file":"TimePicker.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/time-picker/TimePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, shallowRef, watch } from 'vue'\nimport { Time, getLocalTimeZone, now as internationalizedNow } from '@internationalized/date'\nimport { timePickerVariants, type TimeFieldVariants } from '@auronui/styles'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\nimport TimeField from '../time-field/TimeField.vue'\nimport TimeScroller from '../_shared/TimeScroller.vue'\nimport Popover from '../popover/Popover.vue'\nimport PopoverTrigger from '../popover/PopoverTrigger.vue'\nimport PopoverContent from '../popover/PopoverContent.vue'\nimport Button from '../button/Button.vue'\n\nconst props = withDefaults(defineProps<{\n /* Field appearance — forwarded to TimeField */\n variant?: TimeFieldVariants['variant']\n size?: TimeFieldVariants['size']\n color?: TimeFieldVariants['color']\n labelPlacement?: TimeFieldVariants['labelPlacement']\n fullWidth?: boolean\n\n defaultValue?: Time\n defaultOpen?: boolean\n defaultPlaceholder?: Time\n placeholderValue?: Time\n minValue?: Time\n maxValue?: Time\n locale?: string\n granularity?: 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n /** Steps for segment keyboard navigation. */\n step?: Partial<Record<'hour' | 'minute' | 'second' | 'millisecond', number>>\n stepSnapping?: boolean\n label?: string\n description?: string\n errorMessage?: string\n isInvalid?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n name?: string\n hideTimeZone?: boolean\n closeOnSelect?: boolean\n modal?: boolean\n /** Label for the footer button that closes the picker. */\n doneLabel?: string\n /** Text direction. */\n dir?: 'ltr' | 'rtl'\n required?: boolean\n /** Render trigger as a different element. */\n triggerAs?: string\n /** Render trigger child as root element. */\n triggerAsChild?: boolean\n side?: 'top' | 'right' | 'bottom' | 'left'\n sideOffset?: number\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 class?: ClassValue\n /** Override classes for individual slots (base, trigger, triggerIndicator, popover, panel, timeDone) */\n classNames?: Partial<{\n base: ClassValue\n trigger: ClassValue\n triggerIndicator: ClassValue\n popover: ClassValue\n panel: ClassValue\n timeDone: ClassValue\n }>\n}>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n granularity: 'minute',\n hourCycle: 24,\n defaultOpen: false,\n closeOnSelect: true,\n modal: false,\n doneLabel: 'Done',\n avoidCollisions: true,\n collisionPadding: 8,\n prioritizePosition: true,\n})\n\nconst modelValue = defineModel<Time | null | undefined>()\nconst openModel = defineModel<boolean>('open', { default: undefined })\n\n// Seed controlled open state from defaultOpen so portal renders in uncontrolled mode too\nif (props.defaultOpen && openModel.value === undefined) {\n openModel.value = true\n}\n\n// Internal working value — always a Time, never null/undefined, so both the\n// TimeField trigger and the TimeScroller panel always have something to render.\n// Mirrors DateTimePicker.vue's internalValue seeding pattern exactly.\nconst _now = internationalizedNow(getLocalTimeZone())\nconst internalValue = shallowRef<Time>(\n modelValue.value ?? props.defaultValue ?? new Time(_now.hour, _now.minute),\n)\n\n// Sync inbound: parent resets the value → update internalValue.\nwatch(modelValue, (v) => {\n if (v instanceof Time) internalValue.value = v\n})\n\n// Route segment edits from TimeField back to both internalValue and modelValue.\nfunction onFieldChange(v: Time | null | undefined) {\n if (!(v instanceof Time)) return\n internalValue.value = v\n modelValue.value = v\n}\n\n// Route wheel selections from TimeScroller back to both internalValue and modelValue.\nfunction onScrollerChange(v: Time) {\n internalValue.value = v\n modelValue.value = v\n if (props.closeOnSelect) {\n // Scroller selection is a single-field change (hour OR minute OR second),\n // not a \"done\" action — do NOT auto-close here. closeOnSelect exists for\n // parity with DateTimePicker's prop surface, matching its own behavior of\n // not auto-closing on a single time-field tap either.\n }\n}\n\nconst slotFns = computed(() =>\n timePickerVariants({\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n fullWidth: props.fullWidth,\n }),\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n data-slot=\"time-picker\"\n >\n <Popover\n v-model:open=\"openModel\"\n :default-open=\"defaultOpen\"\n :modal=\"modal\"\n >\n <TimeField\n :model-value=\"internalValue\"\n :variant=\"variant\"\n :size=\"size\"\n :color=\"color\"\n :label-placement=\"labelPlacement\"\n :full-width=\"fullWidth\"\n :default-value=\"defaultValue\"\n :default-placeholder=\"defaultPlaceholder\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :step=\"step\"\n :step-snapping=\"stepSnapping\"\n :locale=\"locale\"\n :label=\"label\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :is-invalid=\"isInvalid\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n :is-required=\"isRequired\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n :required=\"required\"\n :dir=\"dir\"\n @update:model-value=\"(val) => onFieldChange(val as Time | null | undefined)\"\n >\n <template #endContent>\n <PopoverTrigger\n :class=\"composeClassName(slotFns.trigger(), props.classNames?.trigger)\"\n :as=\"triggerAs\"\n :as-child=\"triggerAsChild\"\n aria-label=\"Open time picker\"\n @mousedown.prevent\n >\n <slot name=\"selectorIcon\">\n <svg\n :class=\"composeClassName(slotFns.triggerIndicator(), props.classNames?.triggerIndicator)\"\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 focusable=\"false\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n </slot>\n </PopoverTrigger>\n </template>\n </TimeField>\n\n <PopoverContent\n :class=\"composeClassName(slotFns.popover(), props.classNames?.popover)\"\n data-slot=\"popover\"\n :side-offset=\"sideOffset ?? 8\"\n :side=\"side\"\n :side-flip=\"sideFlip\"\n :align=\"align\"\n :align-offset=\"alignOffset\"\n :align-flip=\"alignFlip\"\n :avoid-collisions=\"avoidCollisions\"\n :collision-boundary=\"collisionBoundary\"\n :collision-padding=\"collisionPadding\"\n :arrow-padding=\"arrowPadding\"\n :hide-shifted-arrow=\"hideShiftedArrow\"\n :sticky=\"sticky\"\n :hide-when-detached=\"hideWhenDetached\"\n :position-strategy=\"positionStrategy\"\n :update-position-strategy=\"updatePositionStrategy\"\n :disable-update-on-layout-shift=\"disableUpdateOnLayoutShift\"\n :prioritize-position=\"prioritizePosition\"\n >\n <div\n :class=\"composeClassName(slotFns.panel(), props.classNames?.panel)\"\n data-slot=\"panel\"\n >\n <TimeScroller\n :model-value=\"internalValue\"\n :granularity=\"granularity === 'hour' ? 'minute' : granularity\"\n :hour-cycle=\"hourCycle\"\n @update:model-value=\"(val) => onScrollerChange(val as Time)\"\n />\n\n <div\n :class=\"composeClassName(slotFns.timeDone(), props.classNames?.timeDone)\"\n data-slot=\"time-done\"\n >\n <slot name=\"footer\" :close=\"() => { openModel = false }\">\n <Button\n size=\"sm\"\n color=\"primary\"\n data-slot=\"done-button\"\n @click=\"openModel = false\"\n >\n {{ doneLabel }}\n </Button>\n </slot>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"TimePicker.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/time-picker/TimePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, shallowRef, watch } from 'vue'\nimport { Time, getLocalTimeZone, now as internationalizedNow } from '@internationalized/date'\nimport { timePickerVariants, type TimeFieldVariants } from '@auronui/styles'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\nimport TimeField from '../time-field/TimeField.vue'\nimport TimeScroller from '../_shared/TimeScroller.vue'\nimport Popover from '../popover/Popover.vue'\nimport PopoverTrigger from '../popover/PopoverTrigger.vue'\nimport PopoverContent from '../popover/PopoverContent.vue'\nimport Button from '../button/Button.vue'\n\nconst props = withDefaults(defineProps<{\n /* Field appearance — forwarded to TimeField */\n variant?: TimeFieldVariants['variant']\n size?: TimeFieldVariants['size']\n color?: TimeFieldVariants['color']\n labelPlacement?: TimeFieldVariants['labelPlacement']\n fullWidth?: boolean\n\n defaultValue?: Time\n defaultOpen?: boolean\n defaultPlaceholder?: Time\n placeholderValue?: Time\n minValue?: Time\n maxValue?: Time\n locale?: string\n granularity?: 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n /** Steps for segment keyboard navigation. */\n step?: Partial<Record<'hour' | 'minute' | 'second' | 'millisecond', number>>\n stepSnapping?: boolean\n label?: string\n description?: string\n errorMessage?: string\n isInvalid?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n name?: string\n hideTimeZone?: boolean\n closeOnSelect?: boolean\n modal?: boolean\n /** Label for the footer button that closes the picker. */\n doneLabel?: string\n /** Text direction. */\n dir?: 'ltr' | 'rtl'\n required?: boolean\n /** Render trigger as a different element. */\n triggerAs?: string\n /** Render trigger child as root element. */\n triggerAsChild?: boolean\n side?: 'top' | 'right' | 'bottom' | 'left'\n sideOffset?: number\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 class?: ClassValue\n /** Override classes for individual slots (base, trigger, triggerIndicator, popover, panel, timeDone) */\n classNames?: Partial<{\n base: ClassValue\n trigger: ClassValue\n triggerIndicator: ClassValue\n popover: ClassValue\n panel: ClassValue\n timeDone: ClassValue\n timeField: Partial<{\n label: ClassValue\n mainWrapper: ClassValue\n inputWrapper: ClassValue\n startContent: ClassValue\n segmentList: ClassValue\n segment: ClassValue\n endContent: ClassValue\n helperWrapper: ClassValue\n errorMessage: ClassValue\n description: ClassValue\n }>\n timeScroller: Partial<{\n scrollerWrap: ClassValue\n scrollerColumn: ClassValue\n scrollerItem: ClassValue\n }>\n }>\n}>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n granularity: 'minute',\n hourCycle: 24,\n defaultOpen: false,\n closeOnSelect: true,\n modal: false,\n doneLabel: 'Done',\n avoidCollisions: true,\n collisionPadding: 8,\n prioritizePosition: true,\n})\n\nconst modelValue = defineModel<Time | null | undefined>()\nconst openModel = defineModel<boolean>('open', { default: undefined })\n\n// Seed controlled open state from defaultOpen so portal renders in uncontrolled mode too\nif (props.defaultOpen && openModel.value === undefined) {\n openModel.value = true\n}\n\n// Internal working value — always a Time, never null/undefined, so both the\n// TimeField trigger and the TimeScroller panel always have something to render.\n// Mirrors DateTimePicker.vue's internalValue seeding pattern exactly.\nconst _now = internationalizedNow(getLocalTimeZone())\nconst internalValue = shallowRef<Time>(\n modelValue.value ?? props.defaultValue ?? new Time(_now.hour, _now.minute),\n)\n\n// Sync inbound: parent resets the value → update internalValue.\nwatch(modelValue, (v) => {\n if (v instanceof Time) internalValue.value = v\n})\n\n// Route segment edits from TimeField back to both internalValue and modelValue.\nfunction onFieldChange(v: Time | null | undefined) {\n if (!(v instanceof Time)) return\n internalValue.value = v\n modelValue.value = v\n}\n\n// Route wheel selections from TimeScroller back to both internalValue and modelValue.\nfunction onScrollerChange(v: Time) {\n internalValue.value = v\n modelValue.value = v\n if (props.closeOnSelect) {\n // Scroller selection is a single-field change (hour OR minute OR second),\n // not a \"done\" action — do NOT auto-close here. closeOnSelect exists for\n // parity with DateTimePicker's prop surface, matching its own behavior of\n // not auto-closing on a single time-field tap either.\n }\n}\n\nconst slotFns = computed(() =>\n timePickerVariants({\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n fullWidth: props.fullWidth,\n }),\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n data-slot=\"time-picker\"\n >\n <Popover\n v-model:open=\"openModel\"\n :default-open=\"defaultOpen\"\n :modal=\"modal\"\n >\n <TimeField\n :model-value=\"internalValue\"\n :variant=\"variant\"\n :size=\"size\"\n :color=\"color\"\n :label-placement=\"labelPlacement\"\n :full-width=\"fullWidth\"\n :default-value=\"defaultValue\"\n :default-placeholder=\"defaultPlaceholder\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :step=\"step\"\n :step-snapping=\"stepSnapping\"\n :locale=\"locale\"\n :label=\"label\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :is-invalid=\"isInvalid\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n :is-required=\"isRequired\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n :required=\"required\"\n :dir=\"dir\"\n :class-names=\"props.classNames?.timeField\"\n @update:model-value=\"(val) => onFieldChange(val as Time | null | undefined)\"\n >\n <template #endContent>\n <PopoverTrigger\n :class=\"composeClassName(slotFns.trigger(), props.classNames?.trigger)\"\n :as=\"triggerAs\"\n :as-child=\"triggerAsChild\"\n aria-label=\"Open time picker\"\n @mousedown.prevent\n >\n <slot name=\"selectorIcon\">\n <svg\n :class=\"composeClassName(slotFns.triggerIndicator(), props.classNames?.triggerIndicator)\"\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 focusable=\"false\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n </slot>\n </PopoverTrigger>\n </template>\n </TimeField>\n\n <PopoverContent\n :class=\"composeClassName(slotFns.popover(), props.classNames?.popover)\"\n data-slot=\"popover\"\n :side-offset=\"sideOffset ?? 8\"\n :side=\"side\"\n :side-flip=\"sideFlip\"\n :align=\"align\"\n :align-offset=\"alignOffset\"\n :align-flip=\"alignFlip\"\n :avoid-collisions=\"avoidCollisions\"\n :collision-boundary=\"collisionBoundary\"\n :collision-padding=\"collisionPadding\"\n :arrow-padding=\"arrowPadding\"\n :hide-shifted-arrow=\"hideShiftedArrow\"\n :sticky=\"sticky\"\n :hide-when-detached=\"hideWhenDetached\"\n :position-strategy=\"positionStrategy\"\n :update-position-strategy=\"updatePositionStrategy\"\n :disable-update-on-layout-shift=\"disableUpdateOnLayoutShift\"\n :prioritize-position=\"prioritizePosition\"\n >\n <div\n :class=\"composeClassName(slotFns.panel(), props.classNames?.panel)\"\n data-slot=\"panel\"\n >\n <TimeScroller\n :model-value=\"internalValue\"\n :granularity=\"granularity === 'hour' ? 'minute' : granularity\"\n :hour-cycle=\"hourCycle\"\n :class-names=\"props.classNames?.timeScroller\"\n @update:model-value=\"(val) => onScrollerChange(val as Time)\"\n />\n\n <div\n :class=\"composeClassName(slotFns.timeDone(), props.classNames?.timeDone)\"\n data-slot=\"time-done\"\n >\n <slot name=\"footer\" :close=\"() => { openModel = false }\">\n <Button\n size=\"sm\"\n color=\"primary\"\n data-slot=\"done-button\"\n @click=\"openModel = false\"\n >\n {{ doneLabel }}\n </Button>\n </slot>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToastViewport.js","names":[],"sources":["../../../src/components/toast/ToastViewport.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * ToastViewport — Renders toasts for one screen position.\n *\n * Each viewport wraps its own RekaToastProvider so its ToastRoot children\n * teleport to THIS viewport, not a shared one. Without an isolated provider\n * per viewport, all ToastRoots teleport to whichever viewport mounted last.\n *\n * Usage:\n * ```vue\n * <ToastProvider>\n * <ToastViewport position=\"top-right\" />\n * <ToastViewport position=\"bottom-right\" />\n * </ToastProvider>\n * ```\n */\nimport { computed } from 'vue'\nimport { ToastProvider as RekaToastProvider, ToastViewport as RekaToastViewport } from 'reka-ui'\nimport { toastVariants } from '@auronui/styles'\nimport type { ToastVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useToast } from '../../composables/useToast'\nimport Toast from './Toast.vue'\nimport ToastTitle from './ToastTitle.vue'\nimport ToastDescription from './ToastDescription.vue'\nimport ToastAction from './ToastAction.vue'\nimport ToastClose from './ToastClose.vue'\n\ntype ToastPosition = 'top-right' | 'top-center' | 'top-left' | 'bottom-right' | 'bottom-center' | 'bottom-left'\n\nconst props = withDefaults(defineProps<{\n position?: ToastPosition\n class?: string\n hotkey?: string[]\n label?: string\n swipeDirection?: 'up' | 'down' | 'left' | 'right'\n /** Default duration for toasts in this provider (ms) */\n duration?: number\n /** Disable swipe gestures for all toasts in this provider */\n disableSwipe?: boolean\n /** Distance in pixels before a swipe is recognised */\n swipeThreshold?: number\n /** Render viewport as a different element */\n as?: string\n /** Merge viewport props onto child element */\n asChild?: boolean\n}>(), {\n position: 'bottom-right',\n hotkey: () => ['F8'],\n label: 'Notifications ({hotkey})',\n swipeDirection: 'right',\n})\n\nconst { toasts, dismiss, remove } = useToast()\n\nfunction handleOpenChange(id: string, open: boolean) {\n if (!open) {\n dismiss(id)\n setTimeout(() => remove(id), 250)\n }\n}\n\nconst placementVariant = computed<ToastVariants['placement']>(() => {\n const map: Record<ToastPosition, ToastVariants['placement']> = {\n 'top-right': 'top end',\n 'top-center': 'top',\n 'top-left': 'top start',\n 'bottom-right': 'bottom end',\n 'bottom-center': 'bottom',\n 'bottom-left': 'bottom start',\n }\n return map[props.position] ?? 'bottom end'\n})\n\nconst styles = computed(() => toastVariants({ placement: placementVariant.value }))\n\nconst viewportToasts = computed(() =>\n toasts.value.filter((t) => (t.position ?? 'bottom-right') === props.position),\n)\n</script>\n\n<template>\n <!-- Each viewport has its own isolated Reka provider so ToastRoot teleports here, not to a shared viewport -->\n <RekaToastProvider\n :swipe-direction=\"swipeDirection\"\n :duration=\"props.duration\"\n :disable-swipe=\"props.disableSwipe\"\n :swipe-threshold=\"props.swipeThreshold\"\n >\n <RekaToastViewport\n :hotkey=\"hotkey\"\n :label=\"label\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"composeClassName(styles.region(), props.class)\"\n >\n <Toast\n v-for=\"toast in viewportToasts\"\n :key=\"toast.id\"\n :open=\"toast.open\"\n :duration=\"toast.duration\"\n :position=\"toast.position\"\n :variant=\"toast.variant\"\n @update:open=\"(open) => handleOpenChange(toast.id, open)\"\n >\n <div :class=\"styles.content()\">\n <ToastTitle>{{ toast.title }}</ToastTitle>\n <ToastDescription v-if=\"toast.description\">\n {{ toast.description }}\n </ToastDescription>\n </div>\n <div class=\"flex shrink-0 items-center gap-1 ml-auto\">\n <ToastAction\n v-if=\"toast.action\"\n :alt-text=\"toast.action.label\"\n @click=\"toast.action!.onClick\"\n >\n {{ toast.action.label }}\n </ToastAction>\n <ToastClose @click=\"dismiss(toast.id)\" />\n </div>\n </Toast>\n <slot />\n </RekaToastViewport>\n </RekaToastProvider>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ToastViewport.js","names":[],"sources":["../../../src/components/toast/ToastViewport.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * ToastViewport — Renders toasts for one screen position.\n *\n * Each viewport wraps its own RekaToastProvider so its ToastRoot children\n * teleport to THIS viewport, not a shared one. Without an isolated provider\n * per viewport, all ToastRoots teleport to whichever viewport mounted last.\n *\n * Usage:\n * ```vue\n * <ToastProvider>\n * <ToastViewport position=\"top-right\" />\n * <ToastViewport position=\"bottom-right\" />\n * </ToastProvider>\n * ```\n */\nimport { computed } from 'vue'\nimport { ToastProvider as RekaToastProvider, ToastViewport as RekaToastViewport } from 'reka-ui'\nimport { toastVariants } from '@auronui/styles'\nimport type { ToastVariants } from '@auronui/styles'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\nimport { useToast } from '../../composables/useToast'\nimport Toast from './Toast.vue'\nimport ToastTitle from './ToastTitle.vue'\nimport ToastDescription from './ToastDescription.vue'\nimport ToastAction from './ToastAction.vue'\nimport ToastClose from './ToastClose.vue'\n\ntype ToastPosition = 'top-right' | 'top-center' | 'top-left' | 'bottom-right' | 'bottom-center' | 'bottom-left'\n\nconst props = withDefaults(defineProps<{\n position?: ToastPosition\n class?: string\n hotkey?: string[]\n label?: string\n swipeDirection?: 'up' | 'down' | 'left' | 'right'\n /** Default duration for toasts in this provider (ms) */\n duration?: number\n /** Disable swipe gestures for all toasts in this provider */\n disableSwipe?: boolean\n /** Distance in pixels before a swipe is recognised */\n swipeThreshold?: number\n /** Render viewport as a different element */\n as?: string\n /** Merge viewport props onto child element */\n asChild?: boolean\n /** Per-slot class name overrides */\n classNames?: Partial<{\n toast: ClassValue\n content: ClassValue\n title: ClassValue\n description: ClassValue\n actions: ClassValue\n action: ClassValue\n close: ClassValue\n }>\n}>(), {\n position: 'bottom-right',\n hotkey: () => ['F8'],\n label: 'Notifications ({hotkey})',\n swipeDirection: 'right',\n})\n\nconst { toasts, dismiss, remove } = useToast()\n\nfunction handleOpenChange(id: string, open: boolean) {\n if (!open) {\n dismiss(id)\n setTimeout(() => remove(id), 250)\n }\n}\n\nconst placementVariant = computed<ToastVariants['placement']>(() => {\n const map: Record<ToastPosition, ToastVariants['placement']> = {\n 'top-right': 'top end',\n 'top-center': 'top',\n 'top-left': 'top start',\n 'bottom-right': 'bottom end',\n 'bottom-center': 'bottom',\n 'bottom-left': 'bottom start',\n }\n return map[props.position] ?? 'bottom end'\n})\n\nconst styles = computed(() => toastVariants({ placement: placementVariant.value }))\n\nconst viewportToasts = computed(() =>\n toasts.value.filter((t) => (t.position ?? 'bottom-right') === props.position),\n)\n</script>\n\n<template>\n <!-- Each viewport has its own isolated Reka provider so ToastRoot teleports here, not to a shared viewport -->\n <RekaToastProvider\n :swipe-direction=\"swipeDirection\"\n :duration=\"props.duration\"\n :disable-swipe=\"props.disableSwipe\"\n :swipe-threshold=\"props.swipeThreshold\"\n >\n <RekaToastViewport\n :hotkey=\"hotkey\"\n :label=\"label\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"composeClassName(styles.region(), props.class)\"\n >\n <Toast\n v-for=\"toast in viewportToasts\"\n :key=\"toast.id\"\n :open=\"toast.open\"\n :duration=\"toast.duration\"\n :position=\"toast.position\"\n :variant=\"toast.variant\"\n :class=\"composeClassName(props.classNames?.toast)\"\n @update:open=\"(open) => handleOpenChange(toast.id, open)\"\n >\n <div :class=\"composeClassName(styles.content(), props.classNames?.content)\">\n <ToastTitle :class=\"composeClassName(props.classNames?.title)\">{{ toast.title }}</ToastTitle>\n <ToastDescription v-if=\"toast.description\" :class=\"composeClassName(props.classNames?.description)\">\n {{ toast.description }}\n </ToastDescription>\n </div>\n <div :class=\"composeClassName('flex shrink-0 items-center gap-1 ml-auto', props.classNames?.actions)\">\n <ToastAction\n v-if=\"toast.action\"\n :alt-text=\"toast.action.label\"\n :class=\"composeClassName(props.classNames?.action)\"\n @click=\"toast.action!.onClick\"\n >\n {{ toast.action.label }}\n </ToastAction>\n <ToastClose :class=\"composeClassName(props.classNames?.close)\" @click=\"dismiss(toast.id)\" />\n </div>\n </Toast>\n <slot />\n </RekaToastViewport>\n </RekaToastProvider>\n</template>\n"],"mappings":""}
@@ -9,7 +9,6 @@ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock
9
9
  import { toastVariants } from "@auronui/styles";
10
10
  import { ToastProvider, ToastViewport } from "reka-ui";
11
11
  //#region src/components/toast/ToastViewport.vue?vue&type=script&setup=true&lang.ts
12
- var _hoisted_1 = { class: "flex shrink-0 items-center gap-1 ml-auto" };
13
12
  var ToastViewport_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
14
13
  __name: "ToastViewport",
15
14
  props: {
@@ -22,7 +21,8 @@ var ToastViewport_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
22
21
  disableSwipe: { type: Boolean },
23
22
  swipeThreshold: {},
24
23
  as: {},
25
- asChild: { type: Boolean }
24
+ asChild: { type: Boolean },
25
+ classNames: {}
26
26
  },
27
27
  setup(__props) {
28
28
  /**
@@ -81,28 +81,41 @@ var ToastViewport_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
81
81
  duration: toast.duration,
82
82
  position: toast.position,
83
83
  variant: toast.variant,
84
+ class: normalizeClass(unref(composeClassName)(props.classNames?.toast)),
84
85
  "onUpdate:open": (open) => handleOpenChange(toast.id, open)
85
86
  }, {
86
- default: withCtx(() => [createElementVNode("div", { class: normalizeClass(styles.value.content()) }, [createVNode(ToastTitle_default, null, {
87
+ default: withCtx(() => [createElementVNode("div", { class: normalizeClass(unref(composeClassName)(styles.value.content(), props.classNames?.content)) }, [createVNode(ToastTitle_default, { class: normalizeClass(unref(composeClassName)(props.classNames?.title)) }, {
87
88
  default: withCtx(() => [createTextVNode(toDisplayString(toast.title), 1)]),
88
89
  _: 2
89
- }, 1024), toast.description ? (openBlock(), createBlock(ToastDescription_default, { key: 0 }, {
90
+ }, 1032, ["class"]), toast.description ? (openBlock(), createBlock(ToastDescription_default, {
91
+ key: 0,
92
+ class: normalizeClass(unref(composeClassName)(props.classNames?.description))
93
+ }, {
90
94
  default: withCtx(() => [createTextVNode(toDisplayString(toast.description), 1)]),
91
95
  _: 2
92
- }, 1024)) : createCommentVNode("", true)], 2), createElementVNode("div", _hoisted_1, [toast.action ? (openBlock(), createBlock(ToastAction_default, {
96
+ }, 1032, ["class"])) : createCommentVNode("", true)], 2), createElementVNode("div", { class: normalizeClass(unref(composeClassName)("flex shrink-0 items-center gap-1 ml-auto", props.classNames?.actions)) }, [toast.action ? (openBlock(), createBlock(ToastAction_default, {
93
97
  key: 0,
94
98
  "alt-text": toast.action.label,
99
+ class: normalizeClass(unref(composeClassName)(props.classNames?.action)),
95
100
  onClick: toast.action.onClick
96
101
  }, {
97
102
  default: withCtx(() => [createTextVNode(toDisplayString(toast.action.label), 1)]),
98
103
  _: 2
99
- }, 1032, ["alt-text", "onClick"])) : createCommentVNode("", true), createVNode(ToastClose_default, { onClick: ($event) => unref(dismiss)(toast.id) }, null, 8, ["onClick"])])]),
104
+ }, 1032, [
105
+ "alt-text",
106
+ "class",
107
+ "onClick"
108
+ ])) : createCommentVNode("", true), createVNode(ToastClose_default, {
109
+ class: normalizeClass(unref(composeClassName)(props.classNames?.close)),
110
+ onClick: ($event) => unref(dismiss)(toast.id)
111
+ }, null, 8, ["class", "onClick"])], 2)]),
100
112
  _: 2
101
113
  }, 1032, [
102
114
  "open",
103
115
  "duration",
104
116
  "position",
105
117
  "variant",
118
+ "class",
106
119
  "onUpdate:open"
107
120
  ]);
108
121
  }), 128)), renderSlot(_ctx.$slots, "default")]),
@@ -1 +1 @@
1
- {"version":3,"file":"ToastViewport.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/toast/ToastViewport.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * ToastViewport — Renders toasts for one screen position.\n *\n * Each viewport wraps its own RekaToastProvider so its ToastRoot children\n * teleport to THIS viewport, not a shared one. Without an isolated provider\n * per viewport, all ToastRoots teleport to whichever viewport mounted last.\n *\n * Usage:\n * ```vue\n * <ToastProvider>\n * <ToastViewport position=\"top-right\" />\n * <ToastViewport position=\"bottom-right\" />\n * </ToastProvider>\n * ```\n */\nimport { computed } from 'vue'\nimport { ToastProvider as RekaToastProvider, ToastViewport as RekaToastViewport } from 'reka-ui'\nimport { toastVariants } from '@auronui/styles'\nimport type { ToastVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useToast } from '../../composables/useToast'\nimport Toast from './Toast.vue'\nimport ToastTitle from './ToastTitle.vue'\nimport ToastDescription from './ToastDescription.vue'\nimport ToastAction from './ToastAction.vue'\nimport ToastClose from './ToastClose.vue'\n\ntype ToastPosition = 'top-right' | 'top-center' | 'top-left' | 'bottom-right' | 'bottom-center' | 'bottom-left'\n\nconst props = withDefaults(defineProps<{\n position?: ToastPosition\n class?: string\n hotkey?: string[]\n label?: string\n swipeDirection?: 'up' | 'down' | 'left' | 'right'\n /** Default duration for toasts in this provider (ms) */\n duration?: number\n /** Disable swipe gestures for all toasts in this provider */\n disableSwipe?: boolean\n /** Distance in pixels before a swipe is recognised */\n swipeThreshold?: number\n /** Render viewport as a different element */\n as?: string\n /** Merge viewport props onto child element */\n asChild?: boolean\n}>(), {\n position: 'bottom-right',\n hotkey: () => ['F8'],\n label: 'Notifications ({hotkey})',\n swipeDirection: 'right',\n})\n\nconst { toasts, dismiss, remove } = useToast()\n\nfunction handleOpenChange(id: string, open: boolean) {\n if (!open) {\n dismiss(id)\n setTimeout(() => remove(id), 250)\n }\n}\n\nconst placementVariant = computed<ToastVariants['placement']>(() => {\n const map: Record<ToastPosition, ToastVariants['placement']> = {\n 'top-right': 'top end',\n 'top-center': 'top',\n 'top-left': 'top start',\n 'bottom-right': 'bottom end',\n 'bottom-center': 'bottom',\n 'bottom-left': 'bottom start',\n }\n return map[props.position] ?? 'bottom end'\n})\n\nconst styles = computed(() => toastVariants({ placement: placementVariant.value }))\n\nconst viewportToasts = computed(() =>\n toasts.value.filter((t) => (t.position ?? 'bottom-right') === props.position),\n)\n</script>\n\n<template>\n <!-- Each viewport has its own isolated Reka provider so ToastRoot teleports here, not to a shared viewport -->\n <RekaToastProvider\n :swipe-direction=\"swipeDirection\"\n :duration=\"props.duration\"\n :disable-swipe=\"props.disableSwipe\"\n :swipe-threshold=\"props.swipeThreshold\"\n >\n <RekaToastViewport\n :hotkey=\"hotkey\"\n :label=\"label\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"composeClassName(styles.region(), props.class)\"\n >\n <Toast\n v-for=\"toast in viewportToasts\"\n :key=\"toast.id\"\n :open=\"toast.open\"\n :duration=\"toast.duration\"\n :position=\"toast.position\"\n :variant=\"toast.variant\"\n @update:open=\"(open) => handleOpenChange(toast.id, open)\"\n >\n <div :class=\"styles.content()\">\n <ToastTitle>{{ toast.title }}</ToastTitle>\n <ToastDescription v-if=\"toast.description\">\n {{ toast.description }}\n </ToastDescription>\n </div>\n <div class=\"flex shrink-0 items-center gap-1 ml-auto\">\n <ToastAction\n v-if=\"toast.action\"\n :alt-text=\"toast.action.label\"\n @click=\"toast.action!.onClick\"\n >\n {{ toast.action.label }}\n </ToastAction>\n <ToastClose @click=\"dismiss(toast.id)\" />\n </div>\n </Toast>\n <slot />\n </RekaToastViewport>\n </RekaToastProvider>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BA,MAAM,QAAQ;EAuBd,MAAM,EAAE,QAAQ,SAAS,WAAW,UAAS;EAE7C,SAAS,iBAAiB,IAAY,MAAe;AACnD,OAAI,CAAC,MAAM;AACT,YAAQ,GAAE;AACV,qBAAiB,OAAO,GAAG,EAAE,IAAG;;;EAIpC,MAAM,mBAAmB,eAA2C;AASlE,UAR+D;IAC7D,aAAa;IACb,cAAc;IACd,YAAY;IACZ,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;IACjB,CACW,MAAM,aAAa;IAC/B;EAED,MAAM,SAAS,eAAe,cAAc,EAAE,WAAW,iBAAiB,OAAO,CAAC,CAAA;EAElF,MAAM,iBAAiB,eACrB,OAAO,MAAM,QAAQ,OAAO,EAAE,YAAY,oBAAoB,MAAM,SAAS,CAC/E;;uBAKE,YAyCoB,MAAA,cAAA,EAAA;IAxCjB,mBAAiB,QAAA;IACjB,UAAU,MAAM;IAChB,iBAAe,MAAM;IACrB,mBAAiB,MAAM;;2BAoCJ,CAlCpB,YAkCoB,MAAA,cAAA,EAAA;KAjCjB,QAAQ,QAAA;KACR,OAAO,QAAA;KACP,IAAI,MAAM;KACV,YAAU,MAAM;KAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,OAAA,MAAO,QAAM,EAAI,MAAM,MAAK,CAAA;;4BAGpB,EAAA,UAAA,KAAA,EADjC,mBAyBQ,UAAA,MAAA,WAxBU,eAAA,QAAT,UAAK;0BADd,YAyBQ,eAAA;OAvBL,KAAK,MAAM;OACX,MAAM,MAAM;OACZ,UAAU,MAAM;OAChB,UAAU,MAAM;OAChB,SAAS,MAAM;OACf,kBAAc,SAAS,iBAAiB,MAAM,IAAI,KAAI;;8BAOjD,CALN,mBAKM,OAAA,EALA,OAAK,eAAE,OAAA,MAAO,SAAO,CAAA,EAAA,EAAA,CACzB,YAA0C,oBAAA,MAAA;+BAAb,CAAA,gBAAA,gBAAd,MAAM,MAAK,EAAA,EAAA,CAAA,CAAA;;iBACF,MAAM,eAAA,WAAA,EAA9B,YAEmB,0BAAA,EAAA,KAAA,GAAA,EAAA;+BADM,CAAA,gBAAA,gBAApB,MAAM,YAAW,EAAA,EAAA,CAAA,CAAA;;sDAGxB,mBASM,OATN,YASM,CAPI,MAAM,UAAA,WAAA,EADd,YAMc,qBAAA;;QAJX,YAAU,MAAM,OAAO;QACvB,SAAO,MAAM,OAAQ;;+BAEE,CAAA,gBAAA,gBAArB,MAAM,OAAO,MAAK,EAAA,EAAA,CAAA,CAAA;;0EAEvB,YAAyC,oBAAA,EAA5B,UAAK,WAAE,MAAA,QAAO,CAAC,MAAM,GAAE,EAAA,EAAA,MAAA,GAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;;;;;;;gBAGxC,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"ToastViewport.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/toast/ToastViewport.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * ToastViewport — Renders toasts for one screen position.\n *\n * Each viewport wraps its own RekaToastProvider so its ToastRoot children\n * teleport to THIS viewport, not a shared one. Without an isolated provider\n * per viewport, all ToastRoots teleport to whichever viewport mounted last.\n *\n * Usage:\n * ```vue\n * <ToastProvider>\n * <ToastViewport position=\"top-right\" />\n * <ToastViewport position=\"bottom-right\" />\n * </ToastProvider>\n * ```\n */\nimport { computed } from 'vue'\nimport { ToastProvider as RekaToastProvider, ToastViewport as RekaToastViewport } from 'reka-ui'\nimport { toastVariants } from '@auronui/styles'\nimport type { ToastVariants } from '@auronui/styles'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\nimport { useToast } from '../../composables/useToast'\nimport Toast from './Toast.vue'\nimport ToastTitle from './ToastTitle.vue'\nimport ToastDescription from './ToastDescription.vue'\nimport ToastAction from './ToastAction.vue'\nimport ToastClose from './ToastClose.vue'\n\ntype ToastPosition = 'top-right' | 'top-center' | 'top-left' | 'bottom-right' | 'bottom-center' | 'bottom-left'\n\nconst props = withDefaults(defineProps<{\n position?: ToastPosition\n class?: string\n hotkey?: string[]\n label?: string\n swipeDirection?: 'up' | 'down' | 'left' | 'right'\n /** Default duration for toasts in this provider (ms) */\n duration?: number\n /** Disable swipe gestures for all toasts in this provider */\n disableSwipe?: boolean\n /** Distance in pixels before a swipe is recognised */\n swipeThreshold?: number\n /** Render viewport as a different element */\n as?: string\n /** Merge viewport props onto child element */\n asChild?: boolean\n /** Per-slot class name overrides */\n classNames?: Partial<{\n toast: ClassValue\n content: ClassValue\n title: ClassValue\n description: ClassValue\n actions: ClassValue\n action: ClassValue\n close: ClassValue\n }>\n}>(), {\n position: 'bottom-right',\n hotkey: () => ['F8'],\n label: 'Notifications ({hotkey})',\n swipeDirection: 'right',\n})\n\nconst { toasts, dismiss, remove } = useToast()\n\nfunction handleOpenChange(id: string, open: boolean) {\n if (!open) {\n dismiss(id)\n setTimeout(() => remove(id), 250)\n }\n}\n\nconst placementVariant = computed<ToastVariants['placement']>(() => {\n const map: Record<ToastPosition, ToastVariants['placement']> = {\n 'top-right': 'top end',\n 'top-center': 'top',\n 'top-left': 'top start',\n 'bottom-right': 'bottom end',\n 'bottom-center': 'bottom',\n 'bottom-left': 'bottom start',\n }\n return map[props.position] ?? 'bottom end'\n})\n\nconst styles = computed(() => toastVariants({ placement: placementVariant.value }))\n\nconst viewportToasts = computed(() =>\n toasts.value.filter((t) => (t.position ?? 'bottom-right') === props.position),\n)\n</script>\n\n<template>\n <!-- Each viewport has its own isolated Reka provider so ToastRoot teleports here, not to a shared viewport -->\n <RekaToastProvider\n :swipe-direction=\"swipeDirection\"\n :duration=\"props.duration\"\n :disable-swipe=\"props.disableSwipe\"\n :swipe-threshold=\"props.swipeThreshold\"\n >\n <RekaToastViewport\n :hotkey=\"hotkey\"\n :label=\"label\"\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"composeClassName(styles.region(), props.class)\"\n >\n <Toast\n v-for=\"toast in viewportToasts\"\n :key=\"toast.id\"\n :open=\"toast.open\"\n :duration=\"toast.duration\"\n :position=\"toast.position\"\n :variant=\"toast.variant\"\n :class=\"composeClassName(props.classNames?.toast)\"\n @update:open=\"(open) => handleOpenChange(toast.id, open)\"\n >\n <div :class=\"composeClassName(styles.content(), props.classNames?.content)\">\n <ToastTitle :class=\"composeClassName(props.classNames?.title)\">{{ toast.title }}</ToastTitle>\n <ToastDescription v-if=\"toast.description\" :class=\"composeClassName(props.classNames?.description)\">\n {{ toast.description }}\n </ToastDescription>\n </div>\n <div :class=\"composeClassName('flex shrink-0 items-center gap-1 ml-auto', props.classNames?.actions)\">\n <ToastAction\n v-if=\"toast.action\"\n :alt-text=\"toast.action.label\"\n :class=\"composeClassName(props.classNames?.action)\"\n @click=\"toast.action!.onClick\"\n >\n {{ toast.action.label }}\n </ToastAction>\n <ToastClose :class=\"composeClassName(props.classNames?.close)\" @click=\"dismiss(toast.id)\" />\n </div>\n </Toast>\n <slot />\n </RekaToastViewport>\n </RekaToastProvider>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BA,MAAM,QAAQ;EAiCd,MAAM,EAAE,QAAQ,SAAS,WAAW,UAAS;EAE7C,SAAS,iBAAiB,IAAY,MAAe;AACnD,OAAI,CAAC,MAAM;AACT,YAAQ,GAAE;AACV,qBAAiB,OAAO,GAAG,EAAE,IAAG;;;EAIpC,MAAM,mBAAmB,eAA2C;AASlE,UAR+D;IAC7D,aAAa;IACb,cAAc;IACd,YAAY;IACZ,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;IACjB,CACW,MAAM,aAAa;IAC/B;EAED,MAAM,SAAS,eAAe,cAAc,EAAE,WAAW,iBAAiB,OAAO,CAAC,CAAA;EAElF,MAAM,iBAAiB,eACrB,OAAO,MAAM,QAAQ,OAAO,EAAE,YAAY,oBAAoB,MAAM,SAAS,CAC/E;;uBAKE,YA2CoB,MAAA,cAAA,EAAA;IA1CjB,mBAAiB,QAAA;IACjB,UAAU,MAAM;IAChB,iBAAe,MAAM;IACrB,mBAAiB,MAAM;;2BAsCJ,CApCpB,YAoCoB,MAAA,cAAA,EAAA;KAnCjB,QAAQ,QAAA;KACR,OAAO,QAAA;KACP,IAAI,MAAM;KACV,YAAU,MAAM;KAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,OAAA,MAAO,QAAM,EAAI,MAAM,MAAK,CAAA;;4BAGpB,EAAA,UAAA,KAAA,EADjC,mBA2BQ,UAAA,MAAA,WA1BU,eAAA,QAAT,UAAK;0BADd,YA2BQ,eAAA;OAzBL,KAAK,MAAM;OACX,MAAM,MAAM;OACZ,UAAU,MAAM;OAChB,UAAU,MAAM;OAChB,SAAS,MAAM;OACf,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAM,YAAY,MAAK,CAAA;OAC/C,kBAAc,SAAS,iBAAiB,MAAM,IAAI,KAAI;;8BAOjD,CALN,mBAKM,OAAA,EALA,OAAK,eAAE,MAAA,iBAAgB,CAAC,OAAA,MAAO,SAAO,EAAI,MAAM,YAAY,QAAO,CAAA,EAAA,EAAA,CACvE,YAA6F,oBAAA,EAAhF,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAM,YAAY,MAAK,CAAA,EAAA,EAAA;+BAAoB,CAAA,gBAAA,gBAAd,MAAM,MAAK,EAAA,EAAA,CAAA,CAAA;;4BACrD,MAAM,eAAA,WAAA,EAA9B,YAEmB,0BAAA;;QAFyB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAM,YAAY,YAAW,CAAA;;+BACxE,CAAA,gBAAA,gBAApB,MAAM,YAAW,EAAA,EAAA,CAAA,CAAA;;iEAGxB,mBAUM,OAAA,EAVA,OAAK,eAAE,MAAA,iBAAgB,CAAA,4CAA6C,MAAM,YAAY,QAAO,CAAA,EAAA,EAAA,CAEzF,MAAM,UAAA,WAAA,EADd,YAOc,qBAAA;;QALX,YAAU,MAAM,OAAO;QACvB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAM,YAAY,OAAM,CAAA;QAChD,SAAO,MAAM,OAAQ;;+BAEE,CAAA,gBAAA,gBAArB,MAAM,OAAO,MAAK,EAAA,EAAA,CAAA,CAAA;;;;;;2CAEvB,YAA4F,oBAAA;QAA/E,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAM,YAAY,MAAK,CAAA;QAAI,UAAK,WAAE,MAAA,QAAO,CAAC,MAAM,GAAE;;;;;;;;;;;gBAG3F,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}