@auronui/vue 1.4.1 → 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 -460
  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 -9
  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 +4 -4
@@ -4,18 +4,6 @@ import { computed, createBlock, createCommentVNode, createElementBlock, createEl
4
4
  import { avatarVariants } from "@auronui/styles";
5
5
  import { AvatarFallback, AvatarImage, AvatarRoot } from "reka-ui";
6
6
  //#region src/components/avatar/Avatar.vue?vue&type=script&setup=true&lang.ts
7
- var _hoisted_1 = {
8
- key: 0,
9
- class: /* @__PURE__ */ normalizeClass("avatar__name text-xs font-medium leading-none")
10
- };
11
- var _hoisted_2 = {
12
- key: 1,
13
- class: "avatar__icon size-4/5",
14
- "aria-hidden": "true",
15
- viewBox: "0 0 24 24",
16
- fill: "currentColor",
17
- xmlns: "http://www.w3.org/2000/svg"
18
- };
19
7
  var Avatar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
20
8
  __name: "Avatar",
21
9
  props: {
@@ -115,7 +103,17 @@ var Avatar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
115
103
  "delay-ms": props.delayMs,
116
104
  class: unref(composeClassName)(slotFns.value.fallback(), props.classNames?.fallback)
117
105
  }, props.src && !props.showFallback && props.delayMs === void 0 ? { "delay-ms": 600 } : {}), {
118
- default: withCtx(() => [renderSlot(_ctx.$slots, "fallback", {}, () => [initials.value ? (openBlock(), createElementBlock("span", _hoisted_1, toDisplayString(initials.value), 1)) : (openBlock(), createElementBlock("svg", _hoisted_2, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z" }, null, -1)])]))])]),
106
+ default: withCtx(() => [renderSlot(_ctx.$slots, "fallback", {}, () => [initials.value ? (openBlock(), createElementBlock("span", {
107
+ key: 0,
108
+ class: normalizeClass(unref(composeClassName)(slotFns.value.name(), "text-xs font-medium leading-none", props.classNames?.name))
109
+ }, toDisplayString(initials.value), 3)) : (openBlock(), createElementBlock("svg", {
110
+ key: 1,
111
+ class: normalizeClass(unref(composeClassName)(slotFns.value.icon(), "size-4/5", props.classNames?.icon)),
112
+ "aria-hidden": "true",
113
+ viewBox: "0 0 24 24",
114
+ fill: "currentColor",
115
+ xmlns: "http://www.w3.org/2000/svg"
116
+ }, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z" }, null, -1)])], 2))])]),
119
117
  _: 3
120
118
  }, 16, [
121
119
  "as",
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/avatar/Avatar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { AvatarRoot, AvatarImage, AvatarFallback } from 'reka-ui'\nimport { avatarVariants, type AvatarVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAvatarGroupInject } from './avatar-group.context'\n\nconst props = withDefaults(defineProps<{\n src?: string\n alt?: string\n name?: string\n size?: AvatarVariants['size']\n color?: AvatarVariants['color']\n variant?: AvatarVariants['variant']\n isBordered?: boolean\n isDisabled?: boolean\n showFallback?: boolean\n /** AvatarRoot props */\n as?: string\n asChild?: boolean\n /** AvatarImage props */\n referrerPolicy?: string\n crossOrigin?: string\n imageAs?: string\n imageAsChild?: boolean\n /** AvatarFallback props */\n delayMs?: number\n fallbackAs?: string\n fallbackAsChild?: boolean\n class?: ClassValue\n /** Per-slot class name overrides */\n classNames?: Partial<{\n base: ClassValue\n image: ClassValue\n fallback: ClassValue\n }>\n}>(), {\n isBordered: false,\n isDisabled: false,\n showFallback: false,\n})\n\nconst emit = defineEmits<{\n 'loading-status-change': [status: string]\n}>()\n\n// Inject AvatarGroup context with ref-based fallbacks (mirrors Button.vue pattern)\nconst groupCtx = useAvatarGroupInject({\n size: ref('md'),\n isBordered: ref(false),\n isDisabled: ref(false),\n isGrid: ref(false),\n isInGroup: ref(false),\n})\n\n// Prop precedence rules (matching ButtonGroup D-13):\n// - group disabled ALWAYS wins over child prop\n// - other props: child prop wins over group value (child ?? group)\nconst finalSize = computed(() => props.size ?? groupCtx.size.value)\nconst finalIsBordered = computed(() => props.isBordered || groupCtx.isBordered.value)\nconst isDisabled = computed(() => groupCtx.isDisabled.value || props.isDisabled)\nconst isInGroup = computed(() => groupCtx.isInGroup.value)\n\n// Compute initials from name: first letter of up to 2 words\nconst initials = computed(() => {\n if (!props.name) return ''\n const parts = props.name.trim().split(/\\s+/)\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase()\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase()\n})\n\nconst slotFns = computed(() =>\n avatarVariants({\n size: finalSize.value,\n color: props.color,\n variant: props.variant,\n })\n)\n\n// Border class applied manually since the styles don't have isBordered variant\nconst borderedClass = computed(() =>\n finalIsBordered.value ? 'ring-2 ring-offset-2 ring-default' : undefined\n)\n\n// InGroup class for negative margin overlap\nconst inGroupClass = computed(() =>\n isInGroup.value ? '-me-2' : undefined\n)\n</script>\n\n<template>\n <AvatarRoot\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), borderedClass, inGroupClass, props.class, props.classNames?.base)\"\n :data-disabled=\"isDisabled || undefined\"\n :data-bordered=\"finalIsBordered || undefined\"\n >\n <AvatarImage\n v-if=\"props.src && !props.showFallback\"\n :src=\"props.src\"\n :alt=\"props.alt ?? props.name ?? ''\"\n :as=\"props.imageAs\"\n :as-child=\"props.imageAsChild\"\n :referrer-policy=\"(props.referrerPolicy as any)\"\n :cross-origin=\"(props.crossOrigin as any)\"\n :class=\"composeClassName(slotFns.image(), props.classNames?.image)\"\n @loading-status-change=\"emit('loading-status-change', $event)\"\n />\n <!--\n delayMs: only pass a value when we have a src — Reka UI treats delayMs=undefined\n as \"show immediately\" (canRender starts true). Passing delayMs=0 is falsy but\n not undefined, so the timeout never fires and fallback stays hidden forever.\n -->\n <AvatarFallback\n :as=\"props.fallbackAs\"\n :as-child=\"props.fallbackAsChild\"\n :delay-ms=\"props.delayMs\"\n :class=\"composeClassName(slotFns.fallback(), props.classNames?.fallback)\"\n v-bind=\"props.src && !props.showFallback && props.delayMs === undefined ? { 'delay-ms': 600 } : {}\"\n >\n <slot name=\"fallback\">\n <span\n v-if=\"initials\"\n :class=\"'avatar__name text-xs font-medium leading-none'\"\n >{{ initials }}</span>\n <svg\n v-else\n class=\"avatar__icon size-4/5\"\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z\" />\n </svg>\n </slot>\n </AvatarFallback>\n </AvatarRoot>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOA,MAAM,QAAQ;EAmCd,MAAM,OAAO;EAKb,MAAM,WAAW,qBAAqB;GACpC,MAAM,IAAI,KAAK;GACf,YAAY,IAAI,MAAM;GACtB,YAAY,IAAI,MAAM;GACtB,QAAQ,IAAI,MAAM;GAClB,WAAW,IAAI,MAAM;GACtB,CAAA;EAKD,MAAM,YAAY,eAAe,MAAM,QAAQ,SAAS,KAAK,MAAK;EAClE,MAAM,kBAAkB,eAAe,MAAM,cAAc,SAAS,WAAW,MAAK;EACpF,MAAM,aAAa,eAAe,SAAS,WAAW,SAAS,MAAM,WAAU;EAC/E,MAAM,YAAY,eAAe,SAAS,UAAU,MAAK;EAGzD,MAAM,WAAW,eAAe;AAC9B,OAAI,CAAC,MAAM,KAAM,QAAO;GACxB,MAAM,QAAQ,MAAM,KAAK,MAAM,CAAC,MAAM,MAAK;AAC3C,OAAI,MAAM,WAAW,EAAG,QAAO,MAAM,GAAG,OAAO,EAAE,CAAC,aAAY;AAC9D,WAAQ,MAAM,GAAG,OAAO,EAAE,GAAG,MAAM,MAAM,SAAS,GAAG,OAAO,EAAE,EAAE,aAAY;IAC7E;EAED,MAAM,UAAU,eACd,eAAe;GACb,MAAM,UAAU;GAChB,OAAO,MAAM;GACb,SAAS,MAAM;GAChB,CAAA,CACH;EAGA,MAAM,gBAAgB,eACpB,gBAAgB,QAAQ,sCAAsC,KAAA,EAChE;EAGA,MAAM,eAAe,eACnB,UAAU,QAAQ,UAAU,KAAA,EAC9B;;uBAIE,YA+Ca,MAAA,WAAA,EAAA;IA9CV,IAAI,MAAM;IACV,YAAU,MAAM;IAChB,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,cAAA,OAAe,aAAA,OAAc,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;IACxG,iBAAe,WAAA,SAAc,KAAA;IAC7B,iBAAe,gBAAA,SAAmB,KAAA;;2BAYjC,CATM,MAAM,OAAG,CAAK,MAAM,gBAAA,WAAA,EAD5B,YAUE,MAAA,YAAA,EAAA;;KARC,KAAK,MAAM;KACX,KAAK,MAAM,OAAO,MAAM,QAAI;KAC5B,IAAI,MAAM;KACV,YAAU,MAAM;KAChB,mBAAkB,MAAM;KACxB,gBAAe,MAAM;KACrB,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,OAAK,EAAI,MAAM,YAAY,MAAK,CAAA;KAChE,uBAAqB,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,yBAA0B,OAAM;;;;;;;;;wCAO9D,YAuBiB,MAAA,eAAA,EAvBjB,WAuBiB;KAtBd,IAAI,MAAM;KACV,YAAU,MAAM;KAChB,YAAU,MAAM;KAChB,OAAO,MAAA,iBAAgB,CAAC,QAAA,MAAQ,UAAQ,EAAI,MAAM,YAAY,SAAQ;OAC/D,MAAM,OAAG,CAAK,MAAM,gBAAgB,MAAM,YAAY,KAAA,IAAS,EAAA,YAAA,KAAA,GAAA,EAAA,CAAA,EAAA;4BAiBhE,CAfP,WAeO,KAAA,QAAA,YAAA,EAAA,QAAA,CAbG,SAAA,SAAA,WAAA,EADR,mBAGsB,QAHtB,YAGsB,gBAAlB,SAAA,MAAQ,EAAA,EAAA,KAAA,WAAA,EACZ,mBASM,OATN,YASM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CADJ,mBAAyJ,QAAA,EAAnJ,GAAE,gJAA8I,EAAA,MAAA,GAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"Avatar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/avatar/Avatar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { AvatarRoot, AvatarImage, AvatarFallback } from 'reka-ui'\nimport { avatarVariants, type AvatarVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAvatarGroupInject } from './avatar-group.context'\n\nconst props = withDefaults(defineProps<{\n src?: string\n alt?: string\n name?: string\n size?: AvatarVariants['size']\n color?: AvatarVariants['color']\n variant?: AvatarVariants['variant']\n isBordered?: boolean\n isDisabled?: boolean\n showFallback?: boolean\n /** AvatarRoot props */\n as?: string\n asChild?: boolean\n /** AvatarImage props */\n referrerPolicy?: string\n crossOrigin?: string\n imageAs?: string\n imageAsChild?: boolean\n /** AvatarFallback props */\n delayMs?: number\n fallbackAs?: string\n fallbackAsChild?: boolean\n class?: ClassValue\n /** Per-slot class name overrides */\n classNames?: Partial<{\n base: ClassValue\n image: ClassValue\n fallback: ClassValue\n icon: ClassValue\n name: ClassValue\n }>\n}>(), {\n isBordered: false,\n isDisabled: false,\n showFallback: false,\n})\n\nconst emit = defineEmits<{\n 'loading-status-change': [status: string]\n}>()\n\n// Inject AvatarGroup context with ref-based fallbacks (mirrors Button.vue pattern)\nconst groupCtx = useAvatarGroupInject({\n size: ref('md'),\n isBordered: ref(false),\n isDisabled: ref(false),\n isGrid: ref(false),\n isInGroup: ref(false),\n})\n\n// Prop precedence rules (matching ButtonGroup D-13):\n// - group disabled ALWAYS wins over child prop\n// - other props: child prop wins over group value (child ?? group)\nconst finalSize = computed(() => props.size ?? groupCtx.size.value)\nconst finalIsBordered = computed(() => props.isBordered || groupCtx.isBordered.value)\nconst isDisabled = computed(() => groupCtx.isDisabled.value || props.isDisabled)\nconst isInGroup = computed(() => groupCtx.isInGroup.value)\n\n// Compute initials from name: first letter of up to 2 words\nconst initials = computed(() => {\n if (!props.name) return ''\n const parts = props.name.trim().split(/\\s+/)\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase()\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase()\n})\n\nconst slotFns = computed(() =>\n avatarVariants({\n size: finalSize.value,\n color: props.color,\n variant: props.variant,\n })\n)\n\n// Border class applied manually since the styles don't have isBordered variant\nconst borderedClass = computed(() =>\n finalIsBordered.value ? 'ring-2 ring-offset-2 ring-default' : undefined\n)\n\n// InGroup class for negative margin overlap\nconst inGroupClass = computed(() =>\n isInGroup.value ? '-me-2' : undefined\n)\n</script>\n\n<template>\n <AvatarRoot\n :as=\"props.as\"\n :as-child=\"props.asChild\"\n :class=\"composeClassName(slotFns.base(), borderedClass, inGroupClass, props.class, props.classNames?.base)\"\n :data-disabled=\"isDisabled || undefined\"\n :data-bordered=\"finalIsBordered || undefined\"\n >\n <AvatarImage\n v-if=\"props.src && !props.showFallback\"\n :src=\"props.src\"\n :alt=\"props.alt ?? props.name ?? ''\"\n :as=\"props.imageAs\"\n :as-child=\"props.imageAsChild\"\n :referrer-policy=\"(props.referrerPolicy as any)\"\n :cross-origin=\"(props.crossOrigin as any)\"\n :class=\"composeClassName(slotFns.image(), props.classNames?.image)\"\n @loading-status-change=\"emit('loading-status-change', $event)\"\n />\n <!--\n delayMs: only pass a value when we have a src — Reka UI treats delayMs=undefined\n as \"show immediately\" (canRender starts true). Passing delayMs=0 is falsy but\n not undefined, so the timeout never fires and fallback stays hidden forever.\n -->\n <AvatarFallback\n :as=\"props.fallbackAs\"\n :as-child=\"props.fallbackAsChild\"\n :delay-ms=\"props.delayMs\"\n :class=\"composeClassName(slotFns.fallback(), props.classNames?.fallback)\"\n v-bind=\"props.src && !props.showFallback && props.delayMs === undefined ? { 'delay-ms': 600 } : {}\"\n >\n <slot name=\"fallback\">\n <span\n v-if=\"initials\"\n :class=\"composeClassName(slotFns.name(), 'text-xs font-medium leading-none', props.classNames?.name)\"\n >{{ initials }}</span>\n <svg\n v-else\n :class=\"composeClassName(slotFns.icon(), 'size-4/5', props.classNames?.icon)\"\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z\" />\n </svg>\n </slot>\n </AvatarFallback>\n </AvatarRoot>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarGroup.js","names":[],"sources":["../../../src/components/avatar/AvatarGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, toRef, ref, h, Fragment, type VNode } from 'vue'\nimport { type AvatarVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useAvatarGroupProvide } from './avatar-group.context'\nimport Avatar from './Avatar.vue'\n\ntype AvatarShorthandItem = {\n src?: string\n alt?: string\n name?: string\n color?: AvatarVariants['color']\n variant?: AvatarVariants['variant']\n isBordered?: boolean\n isDisabled?: boolean\n showFallback?: boolean\n}\n\nconst props = withDefaults(defineProps<{\n size?: AvatarVariants['size']\n isBordered?: boolean\n isDisabled?: boolean\n isGrid?: boolean\n max?: number\n total?: number\n renderCount?: (count: number) => string\n class?: string\n /** Shorthand API: render avatars from an array instead of the compound slot API */\n avatars?: AvatarShorthandItem[]\n}>(), {\n size: 'md',\n\n isBordered: false,\n isDisabled: false,\n isGrid: false,\n})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n}>()\n\n// Provide context using toRef() for reactivity (canonical pattern from ButtonGroup)\nuseAvatarGroupProvide({\n size: toRef(props, 'size'),\n isBordered: toRef(props, 'isBordered'),\n isDisabled: toRef(props, 'isDisabled'),\n isGrid: toRef(props, 'isGrid'),\n isInGroup: ref(true),\n})\n\nconst containerClass = computed(() =>\n composeClassName('flex items-center flex-row', props.class)\n)\n\nconst visibleAvatars = computed(() => {\n if (!props.avatars) return []\n return props.max !== undefined ? props.avatars.slice(0, props.max) : props.avatars\n})\nconst avatarOverflowCount = computed(() => {\n if (!props.avatars || props.max === undefined) return 0\n const total = props.total ?? props.avatars.length\n return total - props.max\n})\nconst avatarOverflowLabel = computed(() => {\n if (avatarOverflowCount.value <= 0) return ''\n return props.renderCount ? props.renderCount(avatarOverflowCount.value) : `+${avatarOverflowCount.value}`\n})\n\n// Flatten slot vnodes (handles Fragments from v-for etc.)\nfunction flattenVNodes(vnodes: VNode[]): VNode[] {\n const result: VNode[] = []\n for (const vnode of vnodes) {\n if (vnode.type === Fragment && Array.isArray(vnode.children)) {\n result.push(...flattenVNodes(vnode.children as VNode[]))\n } else {\n result.push(vnode)\n }\n }\n return result\n}\n\n// Determine which vnodes to render when max is set\nfunction getSlicedNodes(): VNode[] {\n const defaultSlot = slots.default?.()\n if (!defaultSlot) return []\n\n const allNodes = flattenVNodes(defaultSlot)\n\n if (props.max === undefined) {\n return allNodes\n }\n\n const visibleNodes = allNodes.slice(0, props.max)\n const totalCount = props.total ?? allNodes.length\n const overflowCount = totalCount - props.max\n\n if (overflowCount <= 0) {\n return visibleNodes\n }\n\n const counterLabel = props.renderCount\n ? props.renderCount(overflowCount)\n : `+${overflowCount}`\n\n // Render counter avatar with a fallback slot so the full label string is shown\n const counterNode = h(Avatar, {}, {\n fallback: () => h('span', { class: 'avatar__name text-xs font-medium leading-none' }, counterLabel),\n })\n\n return [...visibleNodes, counterNode]\n}\n</script>\n\n<template>\n <div\n role=\"group\"\n :class=\"containerClass\"\n >\n <template v-if=\"props.avatars\">\n <Avatar\n v-for=\"(avatar, idx) in visibleAvatars\"\n :key=\"idx\"\n v-bind=\"avatar\"\n />\n <Avatar v-if=\"avatarOverflowCount > 0\">\n <template #fallback>\n <span class=\"avatar__name text-xs font-medium leading-none\">{{ avatarOverflowLabel }}</span>\n </template>\n </Avatar>\n </template>\n <template v-else-if=\"props.max !== undefined\">\n <!-- Use render function output for sliced vnodes -->\n <template\n v-for=\"(node, _i) in getSlicedNodes()\"\n :key=\"_i\"\n >\n <component :is=\"node\" />\n </template>\n </template>\n <template v-else>\n <slot />\n </template>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AvatarGroup.js","names":[],"sources":["../../../src/components/avatar/AvatarGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, toRef, ref, h, Fragment, type VNode } from 'vue'\nimport { avatarVariants, type AvatarVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAvatarGroupProvide } from './avatar-group.context'\nimport Avatar from './Avatar.vue'\n\ntype AvatarShorthandItem = {\n src?: string\n alt?: string\n name?: string\n color?: AvatarVariants['color']\n variant?: AvatarVariants['variant']\n isBordered?: boolean\n isDisabled?: boolean\n showFallback?: boolean\n}\n\nconst props = withDefaults(defineProps<{\n size?: AvatarVariants['size']\n isBordered?: boolean\n isDisabled?: boolean\n isGrid?: boolean\n max?: number\n total?: number\n renderCount?: (count: number) => string\n class?: string\n /** Shorthand API: render avatars from an array instead of the compound slot API */\n avatars?: AvatarShorthandItem[]\n /** Class overrides forwarded to each shorthand-rendered Avatar's own classNames slots */\n classNames?: Partial<{\n base: ClassValue\n image: ClassValue\n fallback: ClassValue\n icon: ClassValue\n name: ClassValue\n }>\n}>(), {\n size: 'md',\n\n isBordered: false,\n isDisabled: false,\n isGrid: false,\n})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n}>()\n\n// Provide context using toRef() for reactivity (canonical pattern from ButtonGroup)\nuseAvatarGroupProvide({\n size: toRef(props, 'size'),\n isBordered: toRef(props, 'isBordered'),\n isDisabled: toRef(props, 'isDisabled'),\n isGrid: toRef(props, 'isGrid'),\n isInGroup: ref(true),\n})\n\nconst containerClass = computed(() =>\n composeClassName('flex items-center flex-row', props.class)\n)\n\nconst nameSlotClass = computed(() =>\n composeClassName(avatarVariants({ size: props.size }).name(), 'text-xs font-medium leading-none')\n)\n\nconst visibleAvatars = computed(() => {\n if (!props.avatars) return []\n return props.max !== undefined ? props.avatars.slice(0, props.max) : props.avatars\n})\nconst avatarOverflowCount = computed(() => {\n if (!props.avatars || props.max === undefined) return 0\n const total = props.total ?? props.avatars.length\n return total - props.max\n})\nconst avatarOverflowLabel = computed(() => {\n if (avatarOverflowCount.value <= 0) return ''\n return props.renderCount ? props.renderCount(avatarOverflowCount.value) : `+${avatarOverflowCount.value}`\n})\n\n// Flatten slot vnodes (handles Fragments from v-for etc.)\nfunction flattenVNodes(vnodes: VNode[]): VNode[] {\n const result: VNode[] = []\n for (const vnode of vnodes) {\n if (vnode.type === Fragment && Array.isArray(vnode.children)) {\n result.push(...flattenVNodes(vnode.children as VNode[]))\n } else {\n result.push(vnode)\n }\n }\n return result\n}\n\n// Determine which vnodes to render when max is set\nfunction getSlicedNodes(): VNode[] {\n const defaultSlot = slots.default?.()\n if (!defaultSlot) return []\n\n const allNodes = flattenVNodes(defaultSlot)\n\n if (props.max === undefined) {\n return allNodes\n }\n\n const visibleNodes = allNodes.slice(0, props.max)\n const totalCount = props.total ?? allNodes.length\n const overflowCount = totalCount - props.max\n\n if (overflowCount <= 0) {\n return visibleNodes\n }\n\n const counterLabel = props.renderCount\n ? props.renderCount(overflowCount)\n : `+${overflowCount}`\n\n // Render counter avatar with a fallback slot so the full label string is shown\n const counterNode = h(Avatar, { classNames: props.classNames }, {\n fallback: () => h('span', { class: nameSlotClass.value }, counterLabel),\n })\n\n return [...visibleNodes, counterNode]\n}\n</script>\n\n<template>\n <div\n role=\"group\"\n :class=\"containerClass\"\n >\n <template v-if=\"props.avatars\">\n <Avatar\n v-for=\"(avatar, idx) in visibleAvatars\"\n :key=\"idx\"\n v-bind=\"avatar\"\n :class-names=\"props.classNames\"\n />\n <Avatar\n v-if=\"avatarOverflowCount > 0\"\n :class-names=\"props.classNames\"\n >\n <template #fallback>\n <span :class=\"nameSlotClass\">{{ avatarOverflowLabel }}</span>\n </template>\n </Avatar>\n </template>\n <template v-else-if=\"props.max !== undefined\">\n <!-- Use render function output for sliced vnodes -->\n <template\n v-for=\"(node, _i) in getSlicedNodes()\"\n :key=\"_i\"\n >\n <component :is=\"node\" />\n </template>\n </template>\n <template v-else>\n <slot />\n </template>\n </div>\n</template>\n"],"mappings":""}
@@ -2,9 +2,8 @@ import { composeClassName } from "../../utils/composeClassName.js";
2
2
  import { useAvatarGroupProvide } from "./avatar-group.context.js";
3
3
  import Avatar_default from "./Avatar.js";
4
4
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, h, mergeProps, normalizeClass, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, toRef, useSlots, withCtx } from "vue";
5
- import "@auronui/styles";
5
+ import { avatarVariants } from "@auronui/styles";
6
6
  //#region src/components/avatar/AvatarGroup.vue?vue&type=script&setup=true&lang.ts
7
- var _hoisted_1 = { class: "avatar__name text-xs font-medium leading-none" };
8
7
  var AvatarGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
9
8
  __name: "AvatarGroup",
10
9
  props: {
@@ -25,7 +24,8 @@ var AvatarGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
25
24
  total: {},
26
25
  renderCount: {},
27
26
  class: {},
28
- avatars: {}
27
+ avatars: {},
28
+ classNames: {}
29
29
  },
30
30
  setup(__props) {
31
31
  const props = __props;
@@ -38,6 +38,7 @@ var AvatarGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
38
38
  isInGroup: ref(true)
39
39
  });
40
40
  const containerClass = computed(() => composeClassName("flex items-center flex-row", props.class));
41
+ const nameSlotClass = computed(() => composeClassName(avatarVariants({ size: props.size }).name(), "text-xs font-medium leading-none"));
41
42
  const visibleAvatars = computed(() => {
42
43
  if (!props.avatars) return [];
43
44
  return props.max !== void 0 ? props.avatars.slice(0, props.max) : props.avatars;
@@ -65,7 +66,7 @@ var AvatarGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
65
66
  const overflowCount = (props.total ?? allNodes.length) - props.max;
66
67
  if (overflowCount <= 0) return visibleNodes;
67
68
  const counterLabel = props.renderCount ? props.renderCount(overflowCount) : `+${overflowCount}`;
68
- const counterNode = h(Avatar_default, {}, { fallback: () => h("span", { class: "avatar__name text-xs font-medium leading-none" }, counterLabel) });
69
+ const counterNode = h(Avatar_default, { classNames: props.classNames }, { fallback: () => h("span", { class: nameSlotClass.value }, counterLabel) });
69
70
  return [...visibleNodes, counterNode];
70
71
  }
71
72
  return (_ctx, _cache) => {
@@ -73,11 +74,14 @@ var AvatarGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
73
74
  role: "group",
74
75
  class: normalizeClass(containerClass.value)
75
76
  }, [props.avatars ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [(openBlock(true), createElementBlock(Fragment, null, renderList(visibleAvatars.value, (avatar, idx) => {
76
- return openBlock(), createBlock(Avatar_default, mergeProps({ key: idx }, { ref_for: true }, avatar), null, 16);
77
- }), 128)), avatarOverflowCount.value > 0 ? (openBlock(), createBlock(Avatar_default, { key: 0 }, {
78
- fallback: withCtx(() => [createElementVNode("span", _hoisted_1, toDisplayString(avatarOverflowLabel.value), 1)]),
77
+ return openBlock(), createBlock(Avatar_default, mergeProps({ key: idx }, { ref_for: true }, avatar, { "class-names": props.classNames }), null, 16, ["class-names"]);
78
+ }), 128)), avatarOverflowCount.value > 0 ? (openBlock(), createBlock(Avatar_default, {
79
+ key: 0,
80
+ "class-names": props.classNames
81
+ }, {
82
+ fallback: withCtx(() => [createElementVNode("span", { class: normalizeClass(nameSlotClass.value) }, toDisplayString(avatarOverflowLabel.value), 3)]),
79
83
  _: 1
80
- })) : createCommentVNode("", true)], 64)) : props.max !== void 0 ? (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(getSlicedNodes(), (node, _i) => {
84
+ }, 8, ["class-names"])) : createCommentVNode("", true)], 64)) : props.max !== void 0 ? (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(getSlicedNodes(), (node, _i) => {
81
85
  return openBlock(), createBlock(resolveDynamicComponent(node), { key: _i });
82
86
  }), 128)) : renderSlot(_ctx.$slots, "default", { key: 2 })], 2);
83
87
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarGroup.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/avatar/AvatarGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, toRef, ref, h, Fragment, type VNode } from 'vue'\nimport { type AvatarVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useAvatarGroupProvide } from './avatar-group.context'\nimport Avatar from './Avatar.vue'\n\ntype AvatarShorthandItem = {\n src?: string\n alt?: string\n name?: string\n color?: AvatarVariants['color']\n variant?: AvatarVariants['variant']\n isBordered?: boolean\n isDisabled?: boolean\n showFallback?: boolean\n}\n\nconst props = withDefaults(defineProps<{\n size?: AvatarVariants['size']\n isBordered?: boolean\n isDisabled?: boolean\n isGrid?: boolean\n max?: number\n total?: number\n renderCount?: (count: number) => string\n class?: string\n /** Shorthand API: render avatars from an array instead of the compound slot API */\n avatars?: AvatarShorthandItem[]\n}>(), {\n size: 'md',\n\n isBordered: false,\n isDisabled: false,\n isGrid: false,\n})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n}>()\n\n// Provide context using toRef() for reactivity (canonical pattern from ButtonGroup)\nuseAvatarGroupProvide({\n size: toRef(props, 'size'),\n isBordered: toRef(props, 'isBordered'),\n isDisabled: toRef(props, 'isDisabled'),\n isGrid: toRef(props, 'isGrid'),\n isInGroup: ref(true),\n})\n\nconst containerClass = computed(() =>\n composeClassName('flex items-center flex-row', props.class)\n)\n\nconst visibleAvatars = computed(() => {\n if (!props.avatars) return []\n return props.max !== undefined ? props.avatars.slice(0, props.max) : props.avatars\n})\nconst avatarOverflowCount = computed(() => {\n if (!props.avatars || props.max === undefined) return 0\n const total = props.total ?? props.avatars.length\n return total - props.max\n})\nconst avatarOverflowLabel = computed(() => {\n if (avatarOverflowCount.value <= 0) return ''\n return props.renderCount ? props.renderCount(avatarOverflowCount.value) : `+${avatarOverflowCount.value}`\n})\n\n// Flatten slot vnodes (handles Fragments from v-for etc.)\nfunction flattenVNodes(vnodes: VNode[]): VNode[] {\n const result: VNode[] = []\n for (const vnode of vnodes) {\n if (vnode.type === Fragment && Array.isArray(vnode.children)) {\n result.push(...flattenVNodes(vnode.children as VNode[]))\n } else {\n result.push(vnode)\n }\n }\n return result\n}\n\n// Determine which vnodes to render when max is set\nfunction getSlicedNodes(): VNode[] {\n const defaultSlot = slots.default?.()\n if (!defaultSlot) return []\n\n const allNodes = flattenVNodes(defaultSlot)\n\n if (props.max === undefined) {\n return allNodes\n }\n\n const visibleNodes = allNodes.slice(0, props.max)\n const totalCount = props.total ?? allNodes.length\n const overflowCount = totalCount - props.max\n\n if (overflowCount <= 0) {\n return visibleNodes\n }\n\n const counterLabel = props.renderCount\n ? props.renderCount(overflowCount)\n : `+${overflowCount}`\n\n // Render counter avatar with a fallback slot so the full label string is shown\n const counterNode = h(Avatar, {}, {\n fallback: () => h('span', { class: 'avatar__name text-xs font-medium leading-none' }, counterLabel),\n })\n\n return [...visibleNodes, counterNode]\n}\n</script>\n\n<template>\n <div\n role=\"group\"\n :class=\"containerClass\"\n >\n <template v-if=\"props.avatars\">\n <Avatar\n v-for=\"(avatar, idx) in visibleAvatars\"\n :key=\"idx\"\n v-bind=\"avatar\"\n />\n <Avatar v-if=\"avatarOverflowCount > 0\">\n <template #fallback>\n <span class=\"avatar__name text-xs font-medium leading-none\">{{ avatarOverflowLabel }}</span>\n </template>\n </Avatar>\n </template>\n <template v-else-if=\"props.max !== undefined\">\n <!-- Use render function output for sliced vnodes -->\n <template\n v-for=\"(node, _i) in getSlicedNodes()\"\n :key=\"_i\"\n >\n <component :is=\"node\" />\n </template>\n </template>\n <template v-else>\n <slot />\n </template>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBA,MAAM,QAAQ;EAmBd,MAAM,QAAQ,UAAA;AAKd,wBAAsB;GACpB,MAAM,MAAM,OAAO,OAAO;GAC1B,YAAY,MAAM,OAAO,aAAa;GACtC,YAAY,MAAM,OAAO,aAAa;GACtC,QAAQ,MAAM,OAAO,SAAS;GAC9B,WAAW,IAAI,KAAK;GACrB,CAAA;EAED,MAAM,iBAAiB,eACrB,iBAAiB,8BAA8B,MAAM,MAAK,CAC5D;EAEA,MAAM,iBAAiB,eAAe;AACpC,OAAI,CAAC,MAAM,QAAS,QAAO,EAAC;AAC5B,UAAO,MAAM,QAAQ,KAAA,IAAY,MAAM,QAAQ,MAAM,GAAG,MAAM,IAAI,GAAG,MAAM;IAC5E;EACD,MAAM,sBAAsB,eAAe;AACzC,OAAI,CAAC,MAAM,WAAW,MAAM,QAAQ,KAAA,EAAW,QAAO;AAEtD,WADc,MAAM,SAAS,MAAM,QAAQ,UAC5B,MAAM;IACtB;EACD,MAAM,sBAAsB,eAAe;AACzC,OAAI,oBAAoB,SAAS,EAAG,QAAO;AAC3C,UAAO,MAAM,cAAc,MAAM,YAAY,oBAAoB,MAAM,GAAG,IAAI,oBAAoB;IACnG;EAGD,SAAS,cAAc,QAA0B;GAC/C,MAAM,SAAkB,EAAC;AACzB,QAAK,MAAM,SAAS,OAClB,KAAI,MAAM,SAAS,YAAY,MAAM,QAAQ,MAAM,SAAS,CAC1D,QAAO,KAAK,GAAG,cAAc,MAAM,SAAoB,CAAA;OAEvD,QAAO,KAAK,MAAK;AAGrB,UAAO;;EAIT,SAAS,iBAA0B;GACjC,MAAM,cAAc,MAAM,WAAU;AACpC,OAAI,CAAC,YAAa,QAAO,EAAC;GAE1B,MAAM,WAAW,cAAc,YAAW;AAE1C,OAAI,MAAM,QAAQ,KAAA,EAChB,QAAO;GAGT,MAAM,eAAe,SAAS,MAAM,GAAG,MAAM,IAAG;GAEhD,MAAM,iBADa,MAAM,SAAS,SAAS,UACR,MAAM;AAEzC,OAAI,iBAAiB,EACnB,QAAO;GAGT,MAAM,eAAe,MAAM,cACvB,MAAM,YAAY,cAAa,GAC/B,IAAI;GAGR,MAAM,cAAc,EAAE,gBAAQ,EAAE,EAAE,EAChC,gBAAgB,EAAE,QAAQ,EAAE,OAAO,iDAAiD,EAAE,aAAa,EACpG,CAAA;AAED,UAAO,CAAC,GAAG,cAAc,YAAW;;;uBAKpC,mBA4BM,OAAA;IA3BJ,MAAK;IACJ,OAAK,eAAE,eAAA,MAAc;OAEN,MAAM,WAAA,WAAA,EAAtB,mBAWW,UAAA,EAAA,KAAA,GAAA,EAAA,EAAA,UAAA,KAAA,EAVT,mBAIE,UAAA,MAAA,WAHwB,eAAA,QAAhB,QAAQ,QAAG;wBADrB,YAIE,gBAJF,WAIE,EAFC,KAAK,KAAG,EAAA,EAAA,SAAA,MAAA,EACD,OAAM,EAAA,MAAA,GAAA;cAEF,oBAAA,QAAmB,KAAA,WAAA,EAAjC,YAIS,gBAAA,EAAA,KAAA,GAAA,EAAA;IAHI,UAAQ,cAC2E,CAA5F,mBAA4F,QAA5F,YAA4F,gBAA7B,oBAAA,MAAmB,EAAA,EAAA,CAAA,CAAA;;+CAInE,MAAM,QAAQ,KAAA,KAAA,UAAA,KAAA,EAEjC,mBAKW,UAAA,EAAA,KAAA,GAAA,EAAA,WAJY,gBAAc,GAA3B,MAAM,OAAE;wBAGhB,YAAwB,wBAAR,KAAI,EAAA,EAAA,KAFd,IAAE,CAAA;eAMV,WAAQ,KAAA,QAAA,WAAA,EAAA,KAAA,GAAA,CAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"AvatarGroup.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/avatar/AvatarGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, toRef, ref, h, Fragment, type VNode } from 'vue'\nimport { avatarVariants, type AvatarVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useAvatarGroupProvide } from './avatar-group.context'\nimport Avatar from './Avatar.vue'\n\ntype AvatarShorthandItem = {\n src?: string\n alt?: string\n name?: string\n color?: AvatarVariants['color']\n variant?: AvatarVariants['variant']\n isBordered?: boolean\n isDisabled?: boolean\n showFallback?: boolean\n}\n\nconst props = withDefaults(defineProps<{\n size?: AvatarVariants['size']\n isBordered?: boolean\n isDisabled?: boolean\n isGrid?: boolean\n max?: number\n total?: number\n renderCount?: (count: number) => string\n class?: string\n /** Shorthand API: render avatars from an array instead of the compound slot API */\n avatars?: AvatarShorthandItem[]\n /** Class overrides forwarded to each shorthand-rendered Avatar's own classNames slots */\n classNames?: Partial<{\n base: ClassValue\n image: ClassValue\n fallback: ClassValue\n icon: ClassValue\n name: ClassValue\n }>\n}>(), {\n size: 'md',\n\n isBordered: false,\n isDisabled: false,\n isGrid: false,\n})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n}>()\n\n// Provide context using toRef() for reactivity (canonical pattern from ButtonGroup)\nuseAvatarGroupProvide({\n size: toRef(props, 'size'),\n isBordered: toRef(props, 'isBordered'),\n isDisabled: toRef(props, 'isDisabled'),\n isGrid: toRef(props, 'isGrid'),\n isInGroup: ref(true),\n})\n\nconst containerClass = computed(() =>\n composeClassName('flex items-center flex-row', props.class)\n)\n\nconst nameSlotClass = computed(() =>\n composeClassName(avatarVariants({ size: props.size }).name(), 'text-xs font-medium leading-none')\n)\n\nconst visibleAvatars = computed(() => {\n if (!props.avatars) return []\n return props.max !== undefined ? props.avatars.slice(0, props.max) : props.avatars\n})\nconst avatarOverflowCount = computed(() => {\n if (!props.avatars || props.max === undefined) return 0\n const total = props.total ?? props.avatars.length\n return total - props.max\n})\nconst avatarOverflowLabel = computed(() => {\n if (avatarOverflowCount.value <= 0) return ''\n return props.renderCount ? props.renderCount(avatarOverflowCount.value) : `+${avatarOverflowCount.value}`\n})\n\n// Flatten slot vnodes (handles Fragments from v-for etc.)\nfunction flattenVNodes(vnodes: VNode[]): VNode[] {\n const result: VNode[] = []\n for (const vnode of vnodes) {\n if (vnode.type === Fragment && Array.isArray(vnode.children)) {\n result.push(...flattenVNodes(vnode.children as VNode[]))\n } else {\n result.push(vnode)\n }\n }\n return result\n}\n\n// Determine which vnodes to render when max is set\nfunction getSlicedNodes(): VNode[] {\n const defaultSlot = slots.default?.()\n if (!defaultSlot) return []\n\n const allNodes = flattenVNodes(defaultSlot)\n\n if (props.max === undefined) {\n return allNodes\n }\n\n const visibleNodes = allNodes.slice(0, props.max)\n const totalCount = props.total ?? allNodes.length\n const overflowCount = totalCount - props.max\n\n if (overflowCount <= 0) {\n return visibleNodes\n }\n\n const counterLabel = props.renderCount\n ? props.renderCount(overflowCount)\n : `+${overflowCount}`\n\n // Render counter avatar with a fallback slot so the full label string is shown\n const counterNode = h(Avatar, { classNames: props.classNames }, {\n fallback: () => h('span', { class: nameSlotClass.value }, counterLabel),\n })\n\n return [...visibleNodes, counterNode]\n}\n</script>\n\n<template>\n <div\n role=\"group\"\n :class=\"containerClass\"\n >\n <template v-if=\"props.avatars\">\n <Avatar\n v-for=\"(avatar, idx) in visibleAvatars\"\n :key=\"idx\"\n v-bind=\"avatar\"\n :class-names=\"props.classNames\"\n />\n <Avatar\n v-if=\"avatarOverflowCount > 0\"\n :class-names=\"props.classNames\"\n >\n <template #fallback>\n <span :class=\"nameSlotClass\">{{ avatarOverflowLabel }}</span>\n </template>\n </Avatar>\n </template>\n <template v-else-if=\"props.max !== undefined\">\n <!-- Use render function output for sliced vnodes -->\n <template\n v-for=\"(node, _i) in getSlicedNodes()\"\n :key=\"_i\"\n >\n <component :is=\"node\" />\n </template>\n </template>\n <template v-else>\n <slot />\n </template>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumbs.js","names":[],"sources":["../../../src/components/breadcrumbs/Breadcrumbs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, cloneVNode, type VNode } from 'vue'\nimport { breadcrumbsVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useBreadcrumbsProvide } from './breadcrumbs.context'\nimport BreadcrumbItem from './BreadcrumbItem.vue'\n\ntype BreadcrumbShorthandItem = { label: string; href?: string }\n\nconst props = withDefaults(defineProps<{\n maxItems?: number\n class?: ClassValue\n /** Override classes on any named slot. */\n classNames?: Partial<{\n base: ClassValue\n item: ClassValue\n }>\n /** Shorthand API: render breadcrumb items from an array instead of the compound slot API */\n items?: BreadcrumbShorthandItem[]\n}>(), {})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n separator?(): VNode;\n}>();\n\nconst slotFns = computed(() => breadcrumbsVariants({}))\n\n// Flatten default slot children into an array of VNodes we can iterate.\nfunction flattenChildren(nodes: VNode[] | undefined): VNode[] {\n if (!nodes) return []\n const out: VNode[] = []\n for (const n of nodes) {\n // Skip comment / text whitespace nodes; detect Fragment by string representation\n if (typeof n.type === 'symbol' && String(n.type) === 'Symbol(v-fgt)') {\n out.push(...flattenChildren((n.children as VNode[]) ?? []))\n } else if (n.type && typeof n.type !== 'symbol') {\n out.push(n)\n }\n }\n return out\n}\n\nconst renderedChildren = computed(() => {\n const raw = slots.default?.() ?? []\n const items = flattenChildren(raw as VNode[])\n const max = props.maxItems\n let list = items\n if (max && items.length > max && max >= 2) {\n const first = items[0]\n const last = items.slice(items.length - (max - 2))\n const ellipsis = h(\n 'li',\n { class: composeClassName(slotFns.value.item(), props.classNames?.item), 'aria-hidden': 'true' },\n '…'\n )\n list = [first, ellipsis, ...last]\n }\n // Clone the last BreadcrumbItem VNode with isLast prop set\n if (list.length > 0) {\n const lastIdx = list.length - 1\n list = list.map((vnode, idx) =>\n idx === lastIdx ? cloneVNode(vnode, { isLast: true }) : vnode\n )\n }\n return list\n})\n\nconst total = computed(() => renderedChildren.value.length)\n\nconst renderedItems = computed((): BreadcrumbShorthandItem[] => {\n if (!props.items) return []\n const max = props.maxItems\n if (!max || props.items.length <= max || max < 2) return props.items\n const first = props.items[0]\n const tail = props.items.slice(props.items.length - (max - 2))\n return [first, { label: '…' }, ...tail]\n})\n\nuseBreadcrumbsProvide({\n slotFns,\n total,\n separatorSlot: slots.separator,\n})\n</script>\n\n<template>\n <nav\n aria-label=\"Breadcrumb\"\n :class=\"props.class\"\n >\n <ol :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\">\n <template v-if=\"props.items\">\n <BreadcrumbItem\n v-for=\"(item, idx) in renderedItems\"\n :key=\"idx\"\n :href=\"item.href\"\n :is-last=\"idx === renderedItems.length - 1\"\n >{{ item.label }}</BreadcrumbItem>\n </template>\n <template v-else>\n <component\n :is=\"child\"\n v-for=\"(child, idx) in renderedChildren\"\n :key=\"idx\"\n />\n </template>\n </ol>\n </nav>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"Breadcrumbs.js","names":[],"sources":["../../../src/components/breadcrumbs/Breadcrumbs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, cloneVNode, type VNode } from 'vue'\nimport { breadcrumbsVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useBreadcrumbsProvide } from './breadcrumbs.context'\nimport BreadcrumbItem from './BreadcrumbItem.vue'\n\ntype BreadcrumbShorthandItem = { label: string; href?: string }\n\nconst props = withDefaults(defineProps<{\n maxItems?: number\n class?: ClassValue\n /** Override classes on any named slot. */\n classNames?: Partial<{\n base: ClassValue\n item: ClassValue\n link: ClassValue\n separator: ClassValue\n }>\n /** Shorthand API: render breadcrumb items from an array instead of the compound slot API */\n items?: BreadcrumbShorthandItem[]\n}>(), {})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n separator?(): VNode;\n}>();\n\nconst slotFns = computed(() => breadcrumbsVariants({}))\n\n// Flatten default slot children into an array of VNodes we can iterate.\nfunction flattenChildren(nodes: VNode[] | undefined): VNode[] {\n if (!nodes) return []\n const out: VNode[] = []\n for (const n of nodes) {\n // Skip comment / text whitespace nodes; detect Fragment by string representation\n if (typeof n.type === 'symbol' && String(n.type) === 'Symbol(v-fgt)') {\n out.push(...flattenChildren((n.children as VNode[]) ?? []))\n } else if (n.type && typeof n.type !== 'symbol') {\n out.push(n)\n }\n }\n return out\n}\n\nconst renderedChildren = computed(() => {\n const raw = slots.default?.() ?? []\n const items = flattenChildren(raw as VNode[])\n const max = props.maxItems\n let list = items\n if (max && items.length > max && max >= 2) {\n const first = items[0]\n const last = items.slice(items.length - (max - 2))\n const ellipsis = h(\n 'li',\n { class: composeClassName(slotFns.value.item(), props.classNames?.item), 'aria-hidden': 'true' },\n '…'\n )\n list = [first, ellipsis, ...last]\n }\n // Clone the last BreadcrumbItem VNode with isLast prop set\n if (list.length > 0) {\n const lastIdx = list.length - 1\n list = list.map((vnode, idx) =>\n idx === lastIdx ? cloneVNode(vnode, { isLast: true }) : vnode\n )\n }\n return list\n})\n\nconst total = computed(() => renderedChildren.value.length)\n\nconst renderedItems = computed((): BreadcrumbShorthandItem[] => {\n if (!props.items) return []\n const max = props.maxItems\n if (!max || props.items.length <= max || max < 2) return props.items\n const first = props.items[0]\n const tail = props.items.slice(props.items.length - (max - 2))\n return [first, { label: '…' }, ...tail]\n})\n\nuseBreadcrumbsProvide({\n slotFns,\n total,\n separatorSlot: slots.separator,\n})\n</script>\n\n<template>\n <nav\n aria-label=\"Breadcrumb\"\n :class=\"props.class\"\n >\n <ol :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\">\n <template v-if=\"props.items\">\n <BreadcrumbItem\n v-for=\"(item, idx) in renderedItems\"\n :key=\"idx\"\n :href=\"item.href\"\n :is-last=\"idx === renderedItems.length - 1\"\n :class-names=\"{ item: props.classNames?.item, link: props.classNames?.link, separator: props.classNames?.separator }\"\n >{{ item.label }}</BreadcrumbItem>\n </template>\n <template v-else>\n <component\n :is=\"child\"\n v-for=\"(child, idx) in renderedChildren\"\n :key=\"idx\"\n />\n </template>\n </ol>\n </nav>\n</template>\n"],"mappings":""}
@@ -75,11 +75,20 @@ var Breadcrumbs_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
75
75
  return openBlock(), createBlock(BreadcrumbItem_default, {
76
76
  key: idx,
77
77
  href: item.href,
78
- "is-last": idx === renderedItems.value.length - 1
78
+ "is-last": idx === renderedItems.value.length - 1,
79
+ "class-names": {
80
+ item: props.classNames?.item,
81
+ link: props.classNames?.link,
82
+ separator: props.classNames?.separator
83
+ }
79
84
  }, {
80
85
  default: withCtx(() => [createTextVNode(toDisplayString(item.label), 1)]),
81
86
  _: 2
82
- }, 1032, ["href", "is-last"]);
87
+ }, 1032, [
88
+ "href",
89
+ "is-last",
90
+ "class-names"
91
+ ]);
83
92
  }), 128)) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(renderedChildren.value, (child, idx) => {
84
93
  return openBlock(), createBlock(resolveDynamicComponent(child), { key: idx });
85
94
  }), 128))], 2)], 2);
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumbs.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/breadcrumbs/Breadcrumbs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, cloneVNode, type VNode } from 'vue'\nimport { breadcrumbsVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useBreadcrumbsProvide } from './breadcrumbs.context'\nimport BreadcrumbItem from './BreadcrumbItem.vue'\n\ntype BreadcrumbShorthandItem = { label: string; href?: string }\n\nconst props = withDefaults(defineProps<{\n maxItems?: number\n class?: ClassValue\n /** Override classes on any named slot. */\n classNames?: Partial<{\n base: ClassValue\n item: ClassValue\n }>\n /** Shorthand API: render breadcrumb items from an array instead of the compound slot API */\n items?: BreadcrumbShorthandItem[]\n}>(), {})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n separator?(): VNode;\n}>();\n\nconst slotFns = computed(() => breadcrumbsVariants({}))\n\n// Flatten default slot children into an array of VNodes we can iterate.\nfunction flattenChildren(nodes: VNode[] | undefined): VNode[] {\n if (!nodes) return []\n const out: VNode[] = []\n for (const n of nodes) {\n // Skip comment / text whitespace nodes; detect Fragment by string representation\n if (typeof n.type === 'symbol' && String(n.type) === 'Symbol(v-fgt)') {\n out.push(...flattenChildren((n.children as VNode[]) ?? []))\n } else if (n.type && typeof n.type !== 'symbol') {\n out.push(n)\n }\n }\n return out\n}\n\nconst renderedChildren = computed(() => {\n const raw = slots.default?.() ?? []\n const items = flattenChildren(raw as VNode[])\n const max = props.maxItems\n let list = items\n if (max && items.length > max && max >= 2) {\n const first = items[0]\n const last = items.slice(items.length - (max - 2))\n const ellipsis = h(\n 'li',\n { class: composeClassName(slotFns.value.item(), props.classNames?.item), 'aria-hidden': 'true' },\n '…'\n )\n list = [first, ellipsis, ...last]\n }\n // Clone the last BreadcrumbItem VNode with isLast prop set\n if (list.length > 0) {\n const lastIdx = list.length - 1\n list = list.map((vnode, idx) =>\n idx === lastIdx ? cloneVNode(vnode, { isLast: true }) : vnode\n )\n }\n return list\n})\n\nconst total = computed(() => renderedChildren.value.length)\n\nconst renderedItems = computed((): BreadcrumbShorthandItem[] => {\n if (!props.items) return []\n const max = props.maxItems\n if (!max || props.items.length <= max || max < 2) return props.items\n const first = props.items[0]\n const tail = props.items.slice(props.items.length - (max - 2))\n return [first, { label: '…' }, ...tail]\n})\n\nuseBreadcrumbsProvide({\n slotFns,\n total,\n separatorSlot: slots.separator,\n})\n</script>\n\n<template>\n <nav\n aria-label=\"Breadcrumb\"\n :class=\"props.class\"\n >\n <ol :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\">\n <template v-if=\"props.items\">\n <BreadcrumbItem\n v-for=\"(item, idx) in renderedItems\"\n :key=\"idx\"\n :href=\"item.href\"\n :is-last=\"idx === renderedItems.length - 1\"\n >{{ item.label }}</BreadcrumbItem>\n </template>\n <template v-else>\n <component\n :is=\"child\"\n v-for=\"(child, idx) in renderedChildren\"\n :key=\"idx\"\n />\n </template>\n </ol>\n </nav>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EASA,MAAM,QAAQ;EAYd,MAAM,QAAQ,UAGV;EAEJ,MAAM,UAAU,eAAe,oBAAoB,EAAE,CAAC,CAAA;EAGtD,SAAS,gBAAgB,OAAqC;AAC5D,OAAI,CAAC,MAAO,QAAO,EAAC;GACpB,MAAM,MAAe,EAAC;AACtB,QAAK,MAAM,KAAK,MAEd,KAAI,OAAO,EAAE,SAAS,YAAY,OAAO,EAAE,KAAK,KAAK,gBACnD,KAAI,KAAK,GAAG,gBAAiB,EAAE,YAAwB,EAAE,CAAC,CAAA;YACjD,EAAE,QAAQ,OAAO,EAAE,SAAS,SACrC,KAAI,KAAK,EAAC;AAGd,UAAO;;EAGT,MAAM,mBAAmB,eAAe;GAEtC,MAAM,QAAQ,gBADF,MAAM,WAAW,IAAI,EAAC,CACU;GAC5C,MAAM,MAAM,MAAM;GAClB,IAAI,OAAO;AACX,OAAI,OAAO,MAAM,SAAS,OAAO,OAAO,GAAG;IACzC,MAAM,QAAQ,MAAM;IACpB,MAAM,OAAO,MAAM,MAAM,MAAM,UAAU,MAAM,GAAE;AAMjD,WAAO;KAAC;KALS,EACf,MACA;MAAE,OAAO,iBAAiB,QAAQ,MAAM,MAAM,EAAE,MAAM,YAAY,KAAK;MAAE,eAAe;MAAQ,EAChG,IACF;KACyB,GAAG;KAAI;;AAGlC,OAAI,KAAK,SAAS,GAAG;IACnB,MAAM,UAAU,KAAK,SAAS;AAC9B,WAAO,KAAK,KAAK,OAAO,QACtB,QAAQ,UAAU,WAAW,OAAO,EAAE,QAAQ,MAAM,CAAC,GAAG,MAC1D;;AAEF,UAAO;IACR;EAED,MAAM,QAAQ,eAAe,iBAAiB,MAAM,OAAM;EAE1D,MAAM,gBAAgB,eAA0C;AAC9D,OAAI,CAAC,MAAM,MAAO,QAAO,EAAC;GAC1B,MAAM,MAAM,MAAM;AAClB,OAAI,CAAC,OAAO,MAAM,MAAM,UAAU,OAAO,MAAM,EAAG,QAAO,MAAM;AAG/D,UAAO;IAFO,MAAM,MAAM;IAEX,EAAE,OAAO,KAAK;IAAE,GADlB,MAAM,MAAM,MAAM,MAAM,MAAM,UAAU,MAAM,GAAE;IACvB;IACvC;AAED,wBAAsB;GACpB;GACA;GACA,eAAe,MAAM;GACtB,CAAA;;uBAIC,mBAqBM,OAAA;IApBJ,cAAW;IACV,OAAK,eAAE,MAAM,MAAK;OAEnB,mBAgBK,MAAA,EAhBA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA,EAAA,EAAA,CAC9D,MAAM,SAAA,UAAA,KAAA,EACpB,mBAKkC,UAAA,EAAA,KAAA,GAAA,EAAA,WAJV,cAAA,QAAd,MAAM,QAAG;wBADnB,YAKkC,wBAAA;KAH/B,KAAK;KACL,MAAM,KAAK;KACX,WAAS,QAAQ,cAAA,MAAc,SAAM;;4BACvB,CAAA,gBAAA,gBAAb,KAAK,MAAK,EAAA,EAAA,CAAA,CAAA;;;iCAGd,mBAIE,UAAA,EAAA,KAAA,GAAA,EAAA,WAFuB,iBAAA,QAAf,OAAO,QAAG;wBAFpB,YAIE,wBAHK,MAAK,EAAA,EAET,KAAK,KAAG,CAAA"}
1
+ {"version":3,"file":"Breadcrumbs.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/breadcrumbs/Breadcrumbs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, cloneVNode, type VNode } from 'vue'\nimport { breadcrumbsVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useBreadcrumbsProvide } from './breadcrumbs.context'\nimport BreadcrumbItem from './BreadcrumbItem.vue'\n\ntype BreadcrumbShorthandItem = { label: string; href?: string }\n\nconst props = withDefaults(defineProps<{\n maxItems?: number\n class?: ClassValue\n /** Override classes on any named slot. */\n classNames?: Partial<{\n base: ClassValue\n item: ClassValue\n link: ClassValue\n separator: ClassValue\n }>\n /** Shorthand API: render breadcrumb items from an array instead of the compound slot API */\n items?: BreadcrumbShorthandItem[]\n}>(), {})\n\nconst slots = defineSlots<{\n default?(): VNode[];\n separator?(): VNode;\n}>();\n\nconst slotFns = computed(() => breadcrumbsVariants({}))\n\n// Flatten default slot children into an array of VNodes we can iterate.\nfunction flattenChildren(nodes: VNode[] | undefined): VNode[] {\n if (!nodes) return []\n const out: VNode[] = []\n for (const n of nodes) {\n // Skip comment / text whitespace nodes; detect Fragment by string representation\n if (typeof n.type === 'symbol' && String(n.type) === 'Symbol(v-fgt)') {\n out.push(...flattenChildren((n.children as VNode[]) ?? []))\n } else if (n.type && typeof n.type !== 'symbol') {\n out.push(n)\n }\n }\n return out\n}\n\nconst renderedChildren = computed(() => {\n const raw = slots.default?.() ?? []\n const items = flattenChildren(raw as VNode[])\n const max = props.maxItems\n let list = items\n if (max && items.length > max && max >= 2) {\n const first = items[0]\n const last = items.slice(items.length - (max - 2))\n const ellipsis = h(\n 'li',\n { class: composeClassName(slotFns.value.item(), props.classNames?.item), 'aria-hidden': 'true' },\n '…'\n )\n list = [first, ellipsis, ...last]\n }\n // Clone the last BreadcrumbItem VNode with isLast prop set\n if (list.length > 0) {\n const lastIdx = list.length - 1\n list = list.map((vnode, idx) =>\n idx === lastIdx ? cloneVNode(vnode, { isLast: true }) : vnode\n )\n }\n return list\n})\n\nconst total = computed(() => renderedChildren.value.length)\n\nconst renderedItems = computed((): BreadcrumbShorthandItem[] => {\n if (!props.items) return []\n const max = props.maxItems\n if (!max || props.items.length <= max || max < 2) return props.items\n const first = props.items[0]\n const tail = props.items.slice(props.items.length - (max - 2))\n return [first, { label: '…' }, ...tail]\n})\n\nuseBreadcrumbsProvide({\n slotFns,\n total,\n separatorSlot: slots.separator,\n})\n</script>\n\n<template>\n <nav\n aria-label=\"Breadcrumb\"\n :class=\"props.class\"\n >\n <ol :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\">\n <template v-if=\"props.items\">\n <BreadcrumbItem\n v-for=\"(item, idx) in renderedItems\"\n :key=\"idx\"\n :href=\"item.href\"\n :is-last=\"idx === renderedItems.length - 1\"\n :class-names=\"{ item: props.classNames?.item, link: props.classNames?.link, separator: props.classNames?.separator }\"\n >{{ item.label }}</BreadcrumbItem>\n </template>\n <template v-else>\n <component\n :is=\"child\"\n v-for=\"(child, idx) in renderedChildren\"\n :key=\"idx\"\n />\n </template>\n </ol>\n </nav>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EASA,MAAM,QAAQ;EAcd,MAAM,QAAQ,UAGV;EAEJ,MAAM,UAAU,eAAe,oBAAoB,EAAE,CAAC,CAAA;EAGtD,SAAS,gBAAgB,OAAqC;AAC5D,OAAI,CAAC,MAAO,QAAO,EAAC;GACpB,MAAM,MAAe,EAAC;AACtB,QAAK,MAAM,KAAK,MAEd,KAAI,OAAO,EAAE,SAAS,YAAY,OAAO,EAAE,KAAK,KAAK,gBACnD,KAAI,KAAK,GAAG,gBAAiB,EAAE,YAAwB,EAAE,CAAC,CAAA;YACjD,EAAE,QAAQ,OAAO,EAAE,SAAS,SACrC,KAAI,KAAK,EAAC;AAGd,UAAO;;EAGT,MAAM,mBAAmB,eAAe;GAEtC,MAAM,QAAQ,gBADF,MAAM,WAAW,IAAI,EAAC,CACU;GAC5C,MAAM,MAAM,MAAM;GAClB,IAAI,OAAO;AACX,OAAI,OAAO,MAAM,SAAS,OAAO,OAAO,GAAG;IACzC,MAAM,QAAQ,MAAM;IACpB,MAAM,OAAO,MAAM,MAAM,MAAM,UAAU,MAAM,GAAE;AAMjD,WAAO;KAAC;KALS,EACf,MACA;MAAE,OAAO,iBAAiB,QAAQ,MAAM,MAAM,EAAE,MAAM,YAAY,KAAK;MAAE,eAAe;MAAQ,EAChG,IACF;KACyB,GAAG;KAAI;;AAGlC,OAAI,KAAK,SAAS,GAAG;IACnB,MAAM,UAAU,KAAK,SAAS;AAC9B,WAAO,KAAK,KAAK,OAAO,QACtB,QAAQ,UAAU,WAAW,OAAO,EAAE,QAAQ,MAAM,CAAC,GAAG,MAC1D;;AAEF,UAAO;IACR;EAED,MAAM,QAAQ,eAAe,iBAAiB,MAAM,OAAM;EAE1D,MAAM,gBAAgB,eAA0C;AAC9D,OAAI,CAAC,MAAM,MAAO,QAAO,EAAC;GAC1B,MAAM,MAAM,MAAM;AAClB,OAAI,CAAC,OAAO,MAAM,MAAM,UAAU,OAAO,MAAM,EAAG,QAAO,MAAM;AAG/D,UAAO;IAFO,MAAM,MAAM;IAEX,EAAE,OAAO,KAAK;IAAE,GADlB,MAAM,MAAM,MAAM,MAAM,MAAM,UAAU,MAAM,GAAE;IACvB;IACvC;AAED,wBAAsB;GACpB;GACA;GACA,eAAe,MAAM;GACtB,CAAA;;uBAIC,mBAsBM,OAAA;IArBJ,cAAW;IACV,OAAK,eAAE,MAAM,MAAK;OAEnB,mBAiBK,MAAA,EAjBA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA,EAAA,EAAA,CAC9D,MAAM,SAAA,UAAA,KAAA,EACpB,mBAMkC,UAAA,EAAA,KAAA,GAAA,EAAA,WALV,cAAA,QAAd,MAAM,QAAG;wBADnB,YAMkC,wBAAA;KAJ/B,KAAK;KACL,MAAM,KAAK;KACX,WAAS,QAAQ,cAAA,MAAc,SAAM;KACrC,eAAW;MAAA,MAAU,MAAM,YAAY;MAAI,MAAQ,MAAM,YAAY;MAAI,WAAa,MAAM,YAAY;MAAS;;4BACnG,CAAA,gBAAA,gBAAb,KAAK,MAAK,EAAA,EAAA,CAAA,CAAA;;;;;;;iCAGd,mBAIE,UAAA,EAAA,KAAA,GAAA,EAAA,WAFuB,iBAAA,QAAf,OAAO,QAAG;wBAFpB,YAIE,wBAHK,MAAK,EAAA,EAET,KAAK,KAAG,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonGroup.js","names":[],"sources":["../../../src/components/button/ButtonGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, toRef } from 'vue'\nimport { buttonGroupVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useButtonGroupProvide } from './button-group.context'\nimport type { ButtonGroupSelectionMode, ButtonGroupValue } from './button-group.context'\nimport type { ButtonVariants } from '@auronui/styles'\nimport Button from './Button.vue'\nimport { useDeprecatedBooleanProp } from '../../composables/useDeprecatedBooleanProp'\n\ntype ButtonShorthandItem = {\n label: string\n value?: string | number\n disabled?: boolean\n isLoading?: boolean\n variant?: ButtonVariants['variant']\n color?: ButtonVariants['color']\n class?: string\n}\n\nconst props = withDefaults(defineProps<{\n variant?: ButtonVariants['variant']\n color?: ButtonVariants['color']\n size?: ButtonVariants['size']\n isDisabled?: boolean\n /** @deprecated Use isDisabled instead. */\n disabled?: boolean\n fullWidth?: boolean\n orientation?: 'horizontal' | 'vertical'\n class?: ClassValue\n /** Per-slot class overrides */\n classNames?: Partial<{\n base: ClassValue\n }>\n selectionMode?: ButtonGroupSelectionMode\n modelValue?: ButtonGroupValue\n /** Shorthand API: render buttons from an array instead of the compound slot API */\n buttons?: ButtonShorthandItem[]\n}>(), {\n variant: 'solid',\n color: 'primary',\n size: 'md',\n isDisabled: undefined,\n disabled: undefined,\n fullWidth: false,\n orientation: 'horizontal',\n selectionMode: 'single',\n modelValue: undefined,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: ButtonGroupValue]\n}>()\n\n// Selected value: controlled if modelValue prop is provided, otherwise uncontrolled.\n// Single mode: scalar (string|number|null). Multiple mode: array of scalars.\nconst internalSelected = ref<ButtonGroupValue>(props.selectionMode === 'multiple' ? [] : null)\nconst selectedValue = computed<ButtonGroupValue>({\n get: () => (props.modelValue !== undefined ? props.modelValue : internalSelected.value),\n set: (v) => {\n if (props.modelValue === undefined) internalSelected.value = v\n emit('update:modelValue', v)\n },\n})\n\nfunction isValueSelected(value: string | number | undefined): boolean {\n if (value === undefined) return false\n const current = selectedValue.value\n if (Array.isArray(current)) return current.includes(value)\n return current === value\n}\n\nfunction selectValue(value: string | number) {\n if (props.selectionMode === 'multiple') {\n const current = Array.isArray(selectedValue.value) ? selectedValue.value : []\n selectedValue.value = current.includes(value)\n ? current.filter((v) => v !== value)\n : [...current, value]\n } else {\n // Single mode: clicking the already-selected button deselects it\n selectedValue.value = selectedValue.value === value ? null : value\n }\n}\n\nconst isDisabled = useDeprecatedBooleanProp(\n 'ButtonGroup', 'isDisabled', () => props.isDisabled, 'disabled', () => props.disabled,\n)\n\n// Provide context using toRef() for reactivity (D-11)\nuseButtonGroupProvide({\n variant: toRef(props, 'variant'),\n color: toRef(props, 'color'),\n size: toRef(props, 'size'),\n disabled: isDisabled,\n fullWidth: toRef(props, 'fullWidth'),\n orientation: toRef(props, 'orientation'),\n selectionMode: toRef(props, 'selectionMode'),\n selectedValue,\n isValueSelected,\n selectValue,\n})\n\nconst slotFns = computed(() =>\n buttonGroupVariants({\n fullWidth: props.fullWidth,\n orientation: props.orientation,\n })\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :data-orientation=\"props.orientation\"\n role=\"group\"\n >\n <template v-if=\"props.buttons\">\n <Button\n v-for=\"(btn, idx) in props.buttons\"\n :key=\"idx\"\n :value=\"btn.value\"\n :is-disabled=\"btn.disabled\"\n :is-loading=\"btn.isLoading\"\n :variant=\"btn.variant\"\n :color=\"btn.color\"\n :class=\"btn.class\"\n >{{ btn.label }}</Button>\n </template>\n <slot v-else />\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ButtonGroup.js","names":[],"sources":["../../../src/components/button/ButtonGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, toRef } from 'vue'\nimport { buttonGroupVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useButtonGroupProvide } from './button-group.context'\nimport type { ButtonGroupSelectionMode, ButtonGroupValue } from './button-group.context'\nimport type { ButtonVariants } from '@auronui/styles'\nimport Button from './Button.vue'\nimport { useDeprecatedBooleanProp } from '../../composables/useDeprecatedBooleanProp'\n\ntype ButtonShorthandItem = {\n label: string\n value?: string | number\n disabled?: boolean\n isLoading?: boolean\n variant?: ButtonVariants['variant']\n color?: ButtonVariants['color']\n class?: string\n classNames?: Partial<{\n base: ClassValue\n startContent: ClassValue\n label: ClassValue\n endContent: ClassValue\n spinner: ClassValue\n }>\n}\n\nconst props = withDefaults(defineProps<{\n variant?: ButtonVariants['variant']\n color?: ButtonVariants['color']\n size?: ButtonVariants['size']\n isDisabled?: boolean\n /** @deprecated Use isDisabled instead. */\n disabled?: boolean\n fullWidth?: boolean\n orientation?: 'horizontal' | 'vertical'\n class?: ClassValue\n /** Per-slot class overrides */\n classNames?: Partial<{\n base: ClassValue\n }>\n selectionMode?: ButtonGroupSelectionMode\n modelValue?: ButtonGroupValue\n /** Shorthand API: render buttons from an array instead of the compound slot API */\n buttons?: ButtonShorthandItem[]\n}>(), {\n variant: 'solid',\n color: 'primary',\n size: 'md',\n isDisabled: undefined,\n disabled: undefined,\n fullWidth: false,\n orientation: 'horizontal',\n selectionMode: 'single',\n modelValue: undefined,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: ButtonGroupValue]\n}>()\n\n// Selected value: controlled if modelValue prop is provided, otherwise uncontrolled.\n// Single mode: scalar (string|number|null). Multiple mode: array of scalars.\nconst internalSelected = ref<ButtonGroupValue>(props.selectionMode === 'multiple' ? [] : null)\nconst selectedValue = computed<ButtonGroupValue>({\n get: () => (props.modelValue !== undefined ? props.modelValue : internalSelected.value),\n set: (v) => {\n if (props.modelValue === undefined) internalSelected.value = v\n emit('update:modelValue', v)\n },\n})\n\nfunction isValueSelected(value: string | number | undefined): boolean {\n if (value === undefined) return false\n const current = selectedValue.value\n if (Array.isArray(current)) return current.includes(value)\n return current === value\n}\n\nfunction selectValue(value: string | number) {\n if (props.selectionMode === 'multiple') {\n const current = Array.isArray(selectedValue.value) ? selectedValue.value : []\n selectedValue.value = current.includes(value)\n ? current.filter((v) => v !== value)\n : [...current, value]\n } else {\n // Single mode: clicking the already-selected button deselects it\n selectedValue.value = selectedValue.value === value ? null : value\n }\n}\n\nconst isDisabled = useDeprecatedBooleanProp(\n 'ButtonGroup', 'isDisabled', () => props.isDisabled, 'disabled', () => props.disabled,\n)\n\n// Provide context using toRef() for reactivity (D-11)\nuseButtonGroupProvide({\n variant: toRef(props, 'variant'),\n color: toRef(props, 'color'),\n size: toRef(props, 'size'),\n disabled: isDisabled,\n fullWidth: toRef(props, 'fullWidth'),\n orientation: toRef(props, 'orientation'),\n selectionMode: toRef(props, 'selectionMode'),\n selectedValue,\n isValueSelected,\n selectValue,\n})\n\nconst slotFns = computed(() =>\n buttonGroupVariants({\n fullWidth: props.fullWidth,\n orientation: props.orientation,\n })\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :data-orientation=\"props.orientation\"\n role=\"group\"\n >\n <template v-if=\"props.buttons\">\n <Button\n v-for=\"(btn, idx) in props.buttons\"\n :key=\"idx\"\n :value=\"btn.value\"\n :is-disabled=\"btn.disabled\"\n :is-loading=\"btn.isLoading\"\n :variant=\"btn.variant\"\n :color=\"btn.color\"\n :class=\"btn.class\"\n :class-names=\"btn.classNames\"\n >{{ btn.label }}</Button>\n </template>\n <slot v-else />\n </div>\n</template>\n"],"mappings":""}
@@ -91,7 +91,8 @@ var ButtonGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
91
91
  "is-loading": btn.isLoading,
92
92
  variant: btn.variant,
93
93
  color: btn.color,
94
- class: normalizeClass(btn.class)
94
+ class: normalizeClass(btn.class),
95
+ "class-names": btn.classNames
95
96
  }, {
96
97
  default: withCtx(() => [createTextVNode(toDisplayString(btn.label), 1)]),
97
98
  _: 2
@@ -101,7 +102,8 @@ var ButtonGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
101
102
  "is-loading",
102
103
  "variant",
103
104
  "color",
104
- "class"
105
+ "class",
106
+ "class-names"
105
107
  ]);
106
108
  }), 128)) : renderSlot(_ctx.$slots, "default", { key: 1 })], 10, _hoisted_1);
107
109
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonGroup.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/button/ButtonGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, toRef } from 'vue'\nimport { buttonGroupVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useButtonGroupProvide } from './button-group.context'\nimport type { ButtonGroupSelectionMode, ButtonGroupValue } from './button-group.context'\nimport type { ButtonVariants } from '@auronui/styles'\nimport Button from './Button.vue'\nimport { useDeprecatedBooleanProp } from '../../composables/useDeprecatedBooleanProp'\n\ntype ButtonShorthandItem = {\n label: string\n value?: string | number\n disabled?: boolean\n isLoading?: boolean\n variant?: ButtonVariants['variant']\n color?: ButtonVariants['color']\n class?: string\n}\n\nconst props = withDefaults(defineProps<{\n variant?: ButtonVariants['variant']\n color?: ButtonVariants['color']\n size?: ButtonVariants['size']\n isDisabled?: boolean\n /** @deprecated Use isDisabled instead. */\n disabled?: boolean\n fullWidth?: boolean\n orientation?: 'horizontal' | 'vertical'\n class?: ClassValue\n /** Per-slot class overrides */\n classNames?: Partial<{\n base: ClassValue\n }>\n selectionMode?: ButtonGroupSelectionMode\n modelValue?: ButtonGroupValue\n /** Shorthand API: render buttons from an array instead of the compound slot API */\n buttons?: ButtonShorthandItem[]\n}>(), {\n variant: 'solid',\n color: 'primary',\n size: 'md',\n isDisabled: undefined,\n disabled: undefined,\n fullWidth: false,\n orientation: 'horizontal',\n selectionMode: 'single',\n modelValue: undefined,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: ButtonGroupValue]\n}>()\n\n// Selected value: controlled if modelValue prop is provided, otherwise uncontrolled.\n// Single mode: scalar (string|number|null). Multiple mode: array of scalars.\nconst internalSelected = ref<ButtonGroupValue>(props.selectionMode === 'multiple' ? [] : null)\nconst selectedValue = computed<ButtonGroupValue>({\n get: () => (props.modelValue !== undefined ? props.modelValue : internalSelected.value),\n set: (v) => {\n if (props.modelValue === undefined) internalSelected.value = v\n emit('update:modelValue', v)\n },\n})\n\nfunction isValueSelected(value: string | number | undefined): boolean {\n if (value === undefined) return false\n const current = selectedValue.value\n if (Array.isArray(current)) return current.includes(value)\n return current === value\n}\n\nfunction selectValue(value: string | number) {\n if (props.selectionMode === 'multiple') {\n const current = Array.isArray(selectedValue.value) ? selectedValue.value : []\n selectedValue.value = current.includes(value)\n ? current.filter((v) => v !== value)\n : [...current, value]\n } else {\n // Single mode: clicking the already-selected button deselects it\n selectedValue.value = selectedValue.value === value ? null : value\n }\n}\n\nconst isDisabled = useDeprecatedBooleanProp(\n 'ButtonGroup', 'isDisabled', () => props.isDisabled, 'disabled', () => props.disabled,\n)\n\n// Provide context using toRef() for reactivity (D-11)\nuseButtonGroupProvide({\n variant: toRef(props, 'variant'),\n color: toRef(props, 'color'),\n size: toRef(props, 'size'),\n disabled: isDisabled,\n fullWidth: toRef(props, 'fullWidth'),\n orientation: toRef(props, 'orientation'),\n selectionMode: toRef(props, 'selectionMode'),\n selectedValue,\n isValueSelected,\n selectValue,\n})\n\nconst slotFns = computed(() =>\n buttonGroupVariants({\n fullWidth: props.fullWidth,\n orientation: props.orientation,\n })\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :data-orientation=\"props.orientation\"\n role=\"group\"\n >\n <template v-if=\"props.buttons\">\n <Button\n v-for=\"(btn, idx) in props.buttons\"\n :key=\"idx\"\n :value=\"btn.value\"\n :is-disabled=\"btn.disabled\"\n :is-loading=\"btn.isLoading\"\n :variant=\"btn.variant\"\n :color=\"btn.color\"\n :class=\"btn.class\"\n >{{ btn.label }}</Button>\n </template>\n <slot v-else />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBA,MAAM,QAAQ;EA8Bd,MAAM,OAAO;EAMb,MAAM,mBAAmB,IAAsB,MAAM,kBAAkB,aAAa,EAAE,GAAG,KAAI;EAC7F,MAAM,gBAAgB,SAA2B;GAC/C,WAAY,MAAM,eAAe,KAAA,IAAY,MAAM,aAAa,iBAAiB;GACjF,MAAM,MAAM;AACV,QAAI,MAAM,eAAe,KAAA,EAAW,kBAAiB,QAAQ;AAC7D,SAAK,qBAAqB,EAAC;;GAE9B,CAAA;EAED,SAAS,gBAAgB,OAA6C;AACpE,OAAI,UAAU,KAAA,EAAW,QAAO;GAChC,MAAM,UAAU,cAAc;AAC9B,OAAI,MAAM,QAAQ,QAAQ,CAAE,QAAO,QAAQ,SAAS,MAAK;AACzD,UAAO,YAAY;;EAGrB,SAAS,YAAY,OAAwB;AAC3C,OAAI,MAAM,kBAAkB,YAAY;IACtC,MAAM,UAAU,MAAM,QAAQ,cAAc,MAAM,GAAG,cAAc,QAAQ,EAAC;AAC5E,kBAAc,QAAQ,QAAQ,SAAS,MAAK,GACxC,QAAQ,QAAQ,MAAM,MAAM,MAAK,GACjC,CAAC,GAAG,SAAS,MAAK;SAGtB,eAAc,QAAQ,cAAc,UAAU,QAAQ,OAAO;;EAIjE,MAAM,aAAa,yBACjB,eAAe,oBAAoB,MAAM,YAAY,kBAAkB,MAAM,SAC/E;AAGA,wBAAsB;GACpB,SAAS,MAAM,OAAO,UAAU;GAChC,OAAO,MAAM,OAAO,QAAQ;GAC5B,MAAM,MAAM,OAAO,OAAO;GAC1B,UAAU;GACV,WAAW,MAAM,OAAO,YAAY;GACpC,aAAa,MAAM,OAAO,cAAc;GACxC,eAAe,MAAM,OAAO,gBAAgB;GAC5C;GACA;GACA;GACD,CAAA;EAED,MAAM,UAAU,eACd,oBAAoB;GAClB,WAAW,MAAM;GACjB,aAAa,MAAM;GACpB,CAAA,CACH;;uBAIE,mBAkBM,OAAA;IAjBH,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;IAC3E,oBAAkB,MAAM;IACzB,MAAK;OAEW,MAAM,WAAA,UAAA,KAAA,EACpB,mBASyB,UAAA,EAAA,KAAA,GAAA,EAAA,WARF,MAAM,UAAnB,KAAK,QAAG;wBADlB,YASyB,gBAAA;KAPtB,KAAK;KACL,OAAO,IAAI;KACX,eAAa,IAAI;KACjB,cAAY,IAAI;KAChB,SAAS,IAAI;KACb,OAAO,IAAI;KACX,OAAK,eAAE,IAAI,MAAK;;4BACH,CAAA,gBAAA,gBAAZ,IAAI,MAAK,EAAA,EAAA,CAAA,CAAA;;;;;;;;;;eAEf,WAAe,KAAA,QAAA,WAAA,EAAA,KAAA,GAAA,CAAA,CAAA,EAAA,IAAA,WAAA"}
1
+ {"version":3,"file":"ButtonGroup.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/button/ButtonGroup.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, toRef } from 'vue'\nimport { buttonGroupVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useButtonGroupProvide } from './button-group.context'\nimport type { ButtonGroupSelectionMode, ButtonGroupValue } from './button-group.context'\nimport type { ButtonVariants } from '@auronui/styles'\nimport Button from './Button.vue'\nimport { useDeprecatedBooleanProp } from '../../composables/useDeprecatedBooleanProp'\n\ntype ButtonShorthandItem = {\n label: string\n value?: string | number\n disabled?: boolean\n isLoading?: boolean\n variant?: ButtonVariants['variant']\n color?: ButtonVariants['color']\n class?: string\n classNames?: Partial<{\n base: ClassValue\n startContent: ClassValue\n label: ClassValue\n endContent: ClassValue\n spinner: ClassValue\n }>\n}\n\nconst props = withDefaults(defineProps<{\n variant?: ButtonVariants['variant']\n color?: ButtonVariants['color']\n size?: ButtonVariants['size']\n isDisabled?: boolean\n /** @deprecated Use isDisabled instead. */\n disabled?: boolean\n fullWidth?: boolean\n orientation?: 'horizontal' | 'vertical'\n class?: ClassValue\n /** Per-slot class overrides */\n classNames?: Partial<{\n base: ClassValue\n }>\n selectionMode?: ButtonGroupSelectionMode\n modelValue?: ButtonGroupValue\n /** Shorthand API: render buttons from an array instead of the compound slot API */\n buttons?: ButtonShorthandItem[]\n}>(), {\n variant: 'solid',\n color: 'primary',\n size: 'md',\n isDisabled: undefined,\n disabled: undefined,\n fullWidth: false,\n orientation: 'horizontal',\n selectionMode: 'single',\n modelValue: undefined,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: ButtonGroupValue]\n}>()\n\n// Selected value: controlled if modelValue prop is provided, otherwise uncontrolled.\n// Single mode: scalar (string|number|null). Multiple mode: array of scalars.\nconst internalSelected = ref<ButtonGroupValue>(props.selectionMode === 'multiple' ? [] : null)\nconst selectedValue = computed<ButtonGroupValue>({\n get: () => (props.modelValue !== undefined ? props.modelValue : internalSelected.value),\n set: (v) => {\n if (props.modelValue === undefined) internalSelected.value = v\n emit('update:modelValue', v)\n },\n})\n\nfunction isValueSelected(value: string | number | undefined): boolean {\n if (value === undefined) return false\n const current = selectedValue.value\n if (Array.isArray(current)) return current.includes(value)\n return current === value\n}\n\nfunction selectValue(value: string | number) {\n if (props.selectionMode === 'multiple') {\n const current = Array.isArray(selectedValue.value) ? selectedValue.value : []\n selectedValue.value = current.includes(value)\n ? current.filter((v) => v !== value)\n : [...current, value]\n } else {\n // Single mode: clicking the already-selected button deselects it\n selectedValue.value = selectedValue.value === value ? null : value\n }\n}\n\nconst isDisabled = useDeprecatedBooleanProp(\n 'ButtonGroup', 'isDisabled', () => props.isDisabled, 'disabled', () => props.disabled,\n)\n\n// Provide context using toRef() for reactivity (D-11)\nuseButtonGroupProvide({\n variant: toRef(props, 'variant'),\n color: toRef(props, 'color'),\n size: toRef(props, 'size'),\n disabled: isDisabled,\n fullWidth: toRef(props, 'fullWidth'),\n orientation: toRef(props, 'orientation'),\n selectionMode: toRef(props, 'selectionMode'),\n selectedValue,\n isValueSelected,\n selectValue,\n})\n\nconst slotFns = computed(() =>\n buttonGroupVariants({\n fullWidth: props.fullWidth,\n orientation: props.orientation,\n })\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :data-orientation=\"props.orientation\"\n role=\"group\"\n >\n <template v-if=\"props.buttons\">\n <Button\n v-for=\"(btn, idx) in props.buttons\"\n :key=\"idx\"\n :value=\"btn.value\"\n :is-disabled=\"btn.disabled\"\n :is-loading=\"btn.isLoading\"\n :variant=\"btn.variant\"\n :color=\"btn.color\"\n :class=\"btn.class\"\n :class-names=\"btn.classNames\"\n >{{ btn.label }}</Button>\n </template>\n <slot v-else />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BA,MAAM,QAAQ;EA8Bd,MAAM,OAAO;EAMb,MAAM,mBAAmB,IAAsB,MAAM,kBAAkB,aAAa,EAAE,GAAG,KAAI;EAC7F,MAAM,gBAAgB,SAA2B;GAC/C,WAAY,MAAM,eAAe,KAAA,IAAY,MAAM,aAAa,iBAAiB;GACjF,MAAM,MAAM;AACV,QAAI,MAAM,eAAe,KAAA,EAAW,kBAAiB,QAAQ;AAC7D,SAAK,qBAAqB,EAAC;;GAE9B,CAAA;EAED,SAAS,gBAAgB,OAA6C;AACpE,OAAI,UAAU,KAAA,EAAW,QAAO;GAChC,MAAM,UAAU,cAAc;AAC9B,OAAI,MAAM,QAAQ,QAAQ,CAAE,QAAO,QAAQ,SAAS,MAAK;AACzD,UAAO,YAAY;;EAGrB,SAAS,YAAY,OAAwB;AAC3C,OAAI,MAAM,kBAAkB,YAAY;IACtC,MAAM,UAAU,MAAM,QAAQ,cAAc,MAAM,GAAG,cAAc,QAAQ,EAAC;AAC5E,kBAAc,QAAQ,QAAQ,SAAS,MAAK,GACxC,QAAQ,QAAQ,MAAM,MAAM,MAAK,GACjC,CAAC,GAAG,SAAS,MAAK;SAGtB,eAAc,QAAQ,cAAc,UAAU,QAAQ,OAAO;;EAIjE,MAAM,aAAa,yBACjB,eAAe,oBAAoB,MAAM,YAAY,kBAAkB,MAAM,SAC/E;AAGA,wBAAsB;GACpB,SAAS,MAAM,OAAO,UAAU;GAChC,OAAO,MAAM,OAAO,QAAQ;GAC5B,MAAM,MAAM,OAAO,OAAO;GAC1B,UAAU;GACV,WAAW,MAAM,OAAO,YAAY;GACpC,aAAa,MAAM,OAAO,cAAc;GACxC,eAAe,MAAM,OAAO,gBAAgB;GAC5C;GACA;GACA;GACD,CAAA;EAED,MAAM,UAAU,eACd,oBAAoB;GAClB,WAAW,MAAM;GACjB,aAAa,MAAM;GACpB,CAAA,CACH;;uBAIE,mBAmBM,OAAA;IAlBH,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;IAC3E,oBAAkB,MAAM;IACzB,MAAK;OAEW,MAAM,WAAA,UAAA,KAAA,EACpB,mBAUyB,UAAA,EAAA,KAAA,GAAA,EAAA,WATF,MAAM,UAAnB,KAAK,QAAG;wBADlB,YAUyB,gBAAA;KARtB,KAAK;KACL,OAAO,IAAI;KACX,eAAa,IAAI;KACjB,cAAY,IAAI;KAChB,SAAS,IAAI;KACb,OAAO,IAAI;KACX,OAAK,eAAE,IAAI,MAAK;KAChB,eAAa,IAAI;;4BACJ,CAAA,gBAAA,gBAAZ,IAAI,MAAK,EAAA,EAAA,CAAA,CAAA;;;;;;;;;;;eAEf,WAAe,KAAA,QAAA,WAAA,EAAA,KAAA,GAAA,CAAA,CAAA,EAAA,IAAA,WAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.js","names":[],"sources":["../../../src/components/calendar/Calendar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, shallowRef } from 'vue'\nimport {\n CalendarRoot,\n CalendarHeader,\n CalendarHeading,\n CalendarGrid,\n CalendarGridHead,\n CalendarGridRow,\n CalendarHeadCell,\n CalendarGridBody,\n CalendarCell,\n CalendarCellTrigger,\n CalendarNext,\n CalendarPrev,\n MonthPickerRoot,\n MonthPickerHeader,\n MonthPickerHeading,\n MonthPickerPrev,\n MonthPickerNext,\n MonthPickerGrid,\n MonthPickerGridBody,\n MonthPickerGridRow,\n MonthPickerCell,\n MonthPickerCellTrigger,\n} from 'reka-ui'\nimport { today, getLocalTimeZone, type DateValue } from '@internationalized/date'\nimport { calendarVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useDeprecatedBooleanProp } from '../../composables/useDeprecatedBooleanProp'\nimport CalendarYearPicker from '../calendar-year-picker/CalendarYearPicker.vue'\n\nconst props = withDefaults(defineProps<{\n defaultValue?: DateValue\n defaultPlaceholder?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n isDateDisabled?: (date: DateValue) => boolean\n isDateUnavailable?: (date: DateValue) => boolean\n locale?: string\n weekdayFormat?: 'narrow' | 'short' | 'long'\n fixedWeeks?: boolean\n numberOfMonths?: number\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n pagedNavigation?: boolean\n preventDeselect?: boolean\n isReadOnly?: boolean\n /** @deprecated Use isReadOnly instead. */\n readonly?: boolean\n isDisabled?: boolean\n /** @deprecated Use isDisabled instead. */\n disabled?: boolean\n calendarLabel?: string\n /** Initial focus state. */\n initialFocus?: boolean\n /** Text direction. */\n dir?: 'ltr' | 'rtl'\n /** Navigate to next page. */\n nextPage?: (placeholder: DateValue) => DateValue\n /** Navigate to previous page. */\n prevPage?: (placeholder: DateValue) => DateValue\n /** Allow multiple date selections. */\n multiple?: boolean\n /** Disable days outside the current view. */\n disableDaysOutsideCurrentView?: boolean\n /** Render as a different element or component. */\n as?: string\n /** Render child as root element. */\n asChild?: boolean\n /** MonthPicker: disable specific months. */\n isMonthDisabled?: (date: DateValue) => boolean\n /** MonthPicker: mark specific months as unavailable. */\n isMonthUnavailable?: (date: DateValue) => boolean\n class?: ClassValue\n /** Override classes on any named slot */\n classNames?: Partial<{\n base: ClassValue\n header: ClassValue\n navButton: ClassValue\n navButtonIcon: ClassValue\n heading: ClassValue\n headingButton: ClassValue\n grid: ClassValue\n gridHeader: ClassValue\n gridRow: ClassValue\n headerCell: ClassValue\n gridBody: ClassValue\n cell: ClassValue\n cellButton: ClassValue\n monthGrid: ClassValue\n monthGridBody: ClassValue\n monthGridRow: ClassValue\n monthCell: ClassValue\n }>\n}>(), {\n weekdayFormat: 'narrow',\n fixedWeeks: false,\n numberOfMonths: 1,\n pagedNavigation: false,\n preventDeselect: false,\n isReadOnly: undefined,\n readonly: undefined,\n isDisabled: undefined,\n disabled: undefined,\n})\n\nconst modelValue = defineModel<DateValue>()\n\nconst isReadOnly = useDeprecatedBooleanProp(\n 'Calendar', 'isReadOnly', () => props.isReadOnly, 'readonly', () => props.readonly,\n)\n\nconst isDisabled = useDeprecatedBooleanProp(\n 'Calendar', 'isDisabled', () => props.isDisabled, 'disabled', () => props.disabled,\n)\n\nconst slotFns = computed(() => calendarVariants())\n\n// View-switcher state: 'date' (default 7-col calendar), 'month' (3x4 months), 'year' (3x4 years)\ntype View = 'date' | 'month' | 'year'\nconst view = ref<View>('date')\n\n// Shared placeholder synced with CalendarRoot/MonthPickerRoot/YearPickerRoot.\n// NOTE: shallowRef preserves reka-ui's `DateValue` discriminated-union without\n// deep reactive unwrapping that would break structural type matching on bind sites.\nconst placeholder = shallowRef<DateValue>(\n (props.defaultValue ?? props.defaultPlaceholder ?? today(getLocalTimeZone())) as DateValue\n)\n\nfunction cycleView(): void {\n view.value = view.value === 'date' ? 'month' : view.value === 'month' ? 'year' : 'date'\n}\n\nfunction onMonthSelect(val: DateValue | DateValue[] | undefined): void {\n if (!val) return\n const next = Array.isArray(val) ? val[val.length - 1] : val\n if (!next) return\n placeholder.value = next\n view.value = 'date'\n}\n\nfunction onYearSelect(val: DateValue | DateValue[] | undefined): void {\n if (!val) return\n const next = Array.isArray(val) ? val[val.length - 1] : val\n if (!next) return\n placeholder.value = next\n view.value = 'month'\n}\n\nconst nextViewLabel = computed(() =>\n view.value === 'date' ? 'month' : view.value === 'month' ? 'year' : 'date'\n)\n</script>\n\n<template>\n <CalendarRoot\n v-model=\"modelValue\"\n v-model:placeholder=\"placeholder\"\n :default-value=\"defaultValue\"\n :default-placeholder=\"defaultPlaceholder\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-disabled=\"isDateDisabled\"\n :is-date-unavailable=\"isDateUnavailable\"\n :locale=\"locale\"\n :weekday-format=\"weekdayFormat\"\n :fixed-weeks=\"fixedWeeks\"\n :number-of-months=\"numberOfMonths\"\n :week-starts-on=\"weekStartsOn\"\n :paged-navigation=\"pagedNavigation\"\n :prevent-deselect=\"preventDeselect\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n :calendar-label=\"calendarLabel\"\n :initial-focus=\"initialFocus\"\n :dir=\"dir\"\n :next-page=\"nextPage\"\n :prev-page=\"prevPage\"\n :multiple=\"multiple\"\n :disable-days-outside-current-view=\"disableDaysOutsideCurrentView\"\n :as=\"as\"\n :as-child=\"asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <template #default=\"{ grid, weekDays }\">\n <template v-if=\"view === 'date'\">\n <CalendarHeader :class=\"composeClassName(slotFns.header(), props.classNames?.header)\">\n <CalendarPrev\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Previous month\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"15 18 9 12 15 6\" />\n </svg>\n </CalendarPrev>\n\n <CalendarHeading\n v-slot=\"{ headingValue }\"\n :class=\"composeClassName(slotFns.heading(), props.classNames?.heading)\"\n >\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.headingButton(), props.classNames?.headingButton)\"\n :aria-label=\"`Switch to ${nextViewLabel} view`\"\n @click=\"cycleView\"\n >\n {{ headingValue }}\n </button>\n </CalendarHeading>\n\n <CalendarNext\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Next month\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"9 18 15 12 9 6\" />\n </svg>\n </CalendarNext>\n </CalendarHeader>\n\n <CalendarGrid\n v-for=\"month in grid\"\n :key=\"month.value.toString()\"\n :class=\"composeClassName(slotFns.grid(), props.classNames?.grid)\"\n >\n <CalendarGridHead :class=\"composeClassName(slotFns.gridHeader(), props.classNames?.gridHeader)\">\n <CalendarGridRow :class=\"composeClassName(slotFns.gridRow(), props.classNames?.gridRow)\">\n <CalendarHeadCell\n v-for=\"day in weekDays\"\n :key=\"day\"\n :class=\"composeClassName(slotFns.headerCell(), props.classNames?.headerCell)\"\n >\n {{ day }}\n </CalendarHeadCell>\n </CalendarGridRow>\n </CalendarGridHead>\n <CalendarGridBody :class=\"composeClassName(slotFns.gridBody(), props.classNames?.gridBody)\">\n <CalendarGridRow\n v-for=\"(week, weekIndex) in month.rows\"\n :key=\"weekIndex\"\n :class=\"composeClassName(slotFns.gridRow(), props.classNames?.gridRow)\"\n >\n <CalendarCell\n v-for=\"day in week\"\n :key=\"day.toString()\"\n :date=\"day\"\n :class=\"composeClassName(slotFns.cell(), props.classNames?.cell)\"\n >\n <CalendarCellTrigger\n :day=\"day\"\n :month=\"month.value\"\n :class=\"composeClassName(slotFns.cellButton(), props.classNames?.cellButton)\"\n />\n </CalendarCell>\n </CalendarGridRow>\n </CalendarGridBody>\n </CalendarGrid>\n </template>\n </template>\n </CalendarRoot>\n\n <MonthPickerRoot\n v-if=\"view === 'month'\"\n :placeholder=\"placeholder\"\n :locale=\"locale\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n :initial-focus=\"initialFocus\"\n :dir=\"dir\"\n :next-page=\"nextPage\"\n :prev-page=\"prevPage\"\n :multiple=\"multiple\"\n :is-month-disabled=\"isMonthDisabled\"\n :is-month-unavailable=\"isMonthUnavailable\"\n :as=\"as\"\n :as-child=\"asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n @update:model-value=\"onMonthSelect\"\n @update:placeholder=\"(val: DateValue | undefined) => { if (val) placeholder = val }\"\n >\n <template #default=\"{ grid: monthGrid }\">\n <MonthPickerHeader :class=\"composeClassName(slotFns.header(), props.classNames?.header)\">\n <MonthPickerPrev\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Previous year\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"15 18 9 12 15 6\" />\n </svg>\n </MonthPickerPrev>\n\n <MonthPickerHeading\n v-slot=\"{ headingValue }\"\n :class=\"composeClassName(slotFns.heading(), props.classNames?.heading)\"\n >\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.headingButton(), props.classNames?.headingButton)\"\n :aria-label=\"`Switch to ${nextViewLabel} view`\"\n @click=\"cycleView\"\n >\n {{ headingValue }}\n </button>\n </MonthPickerHeading>\n\n <MonthPickerNext\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Next year\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"9 18 15 12 9 6\" />\n </svg>\n </MonthPickerNext>\n </MonthPickerHeader>\n\n <MonthPickerGrid :class=\"composeClassName(slotFns.monthGrid(), props.classNames?.monthGrid)\">\n <MonthPickerGridBody :class=\"composeClassName(slotFns.monthGridBody(), props.classNames?.monthGridBody)\">\n <MonthPickerGridRow\n v-for=\"(row, i) in monthGrid.rows\"\n :key=\"i\"\n :class=\"composeClassName(slotFns.monthGridRow(), props.classNames?.monthGridRow)\"\n >\n <MonthPickerCell\n v-for=\"monthValue in row\"\n :key=\"monthValue.toString()\"\n :date=\"monthValue\"\n >\n <MonthPickerCellTrigger\n :month=\"monthValue\"\n as=\"button\"\n :class=\"composeClassName(slotFns.monthCell(), props.classNames?.monthCell)\"\n />\n </MonthPickerCell>\n </MonthPickerGridRow>\n </MonthPickerGridBody>\n </MonthPickerGrid>\n </template>\n </MonthPickerRoot>\n\n <CalendarYearPicker\n v-if=\"view === 'year'\"\n v-model:placeholder=\"placeholder\"\n :locale=\"locale\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-read-only=\"isReadOnly\"\n :is-disabled=\"isDisabled\"\n :class=\"composeClassName(props.class, props.classNames?.base)\"\n @update:model-value=\"onYearSelect\"\n >\n <template #heading=\"{ headingValue }\">\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.headingButton(), props.classNames?.headingButton)\"\n :aria-label=\"`Switch to ${nextViewLabel} view`\"\n @click=\"cycleView\"\n >\n {{ headingValue }}\n </button>\n </template>\n </CalendarYearPicker>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"Calendar.js","names":[],"sources":["../../../src/components/calendar/Calendar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, shallowRef } from 'vue'\nimport {\n CalendarRoot,\n CalendarHeader,\n CalendarHeading,\n CalendarGrid,\n CalendarGridHead,\n CalendarGridRow,\n CalendarHeadCell,\n CalendarGridBody,\n CalendarCell,\n CalendarCellTrigger,\n CalendarNext,\n CalendarPrev,\n MonthPickerRoot,\n MonthPickerHeader,\n MonthPickerHeading,\n MonthPickerPrev,\n MonthPickerNext,\n MonthPickerGrid,\n MonthPickerGridBody,\n MonthPickerGridRow,\n MonthPickerCell,\n MonthPickerCellTrigger,\n} from 'reka-ui'\nimport { today, getLocalTimeZone, type DateValue } from '@internationalized/date'\nimport { calendarVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useDeprecatedBooleanProp } from '../../composables/useDeprecatedBooleanProp'\nimport CalendarYearPicker from '../calendar-year-picker/CalendarYearPicker.vue'\n\nconst props = withDefaults(defineProps<{\n defaultValue?: DateValue\n defaultPlaceholder?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n isDateDisabled?: (date: DateValue) => boolean\n isDateUnavailable?: (date: DateValue) => boolean\n locale?: string\n weekdayFormat?: 'narrow' | 'short' | 'long'\n fixedWeeks?: boolean\n numberOfMonths?: number\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n pagedNavigation?: boolean\n preventDeselect?: boolean\n isReadOnly?: boolean\n /** @deprecated Use isReadOnly instead. */\n readonly?: boolean\n isDisabled?: boolean\n /** @deprecated Use isDisabled instead. */\n disabled?: boolean\n calendarLabel?: string\n /** Initial focus state. */\n initialFocus?: boolean\n /** Text direction. */\n dir?: 'ltr' | 'rtl'\n /** Navigate to next page. */\n nextPage?: (placeholder: DateValue) => DateValue\n /** Navigate to previous page. */\n prevPage?: (placeholder: DateValue) => DateValue\n /** Allow multiple date selections. */\n multiple?: boolean\n /** Disable days outside the current view. */\n disableDaysOutsideCurrentView?: boolean\n /** Render as a different element or component. */\n as?: string\n /** Render child as root element. */\n asChild?: boolean\n /** MonthPicker: disable specific months. */\n isMonthDisabled?: (date: DateValue) => boolean\n /** MonthPicker: mark specific months as unavailable. */\n isMonthUnavailable?: (date: DateValue) => boolean\n class?: ClassValue\n /** Override classes on any named slot */\n classNames?: Partial<{\n base: ClassValue\n header: ClassValue\n navButton: ClassValue\n navButtonIcon: ClassValue\n heading: ClassValue\n headingButton: ClassValue\n grid: ClassValue\n gridHeader: ClassValue\n gridRow: ClassValue\n headerCell: ClassValue\n gridBody: ClassValue\n cell: ClassValue\n cellButton: ClassValue\n monthGrid: ClassValue\n monthGridBody: ClassValue\n monthGridRow: ClassValue\n monthCell: ClassValue\n yearView: Partial<{\n header: ClassValue\n navButton: ClassValue\n navButtonIcon: ClassValue\n heading: ClassValue\n yearGrid: ClassValue\n yearGridBody: ClassValue\n yearGridRow: ClassValue\n yearCell: ClassValue\n }>\n }>\n}>(), {\n weekdayFormat: 'narrow',\n fixedWeeks: false,\n numberOfMonths: 1,\n pagedNavigation: false,\n preventDeselect: false,\n isReadOnly: undefined,\n readonly: undefined,\n isDisabled: undefined,\n disabled: undefined,\n})\n\nconst modelValue = defineModel<DateValue>()\n\nconst isReadOnly = useDeprecatedBooleanProp(\n 'Calendar', 'isReadOnly', () => props.isReadOnly, 'readonly', () => props.readonly,\n)\n\nconst isDisabled = useDeprecatedBooleanProp(\n 'Calendar', 'isDisabled', () => props.isDisabled, 'disabled', () => props.disabled,\n)\n\nconst slotFns = computed(() => calendarVariants())\n\n// View-switcher state: 'date' (default 7-col calendar), 'month' (3x4 months), 'year' (3x4 years)\ntype View = 'date' | 'month' | 'year'\nconst view = ref<View>('date')\n\n// Shared placeholder synced with CalendarRoot/MonthPickerRoot/YearPickerRoot.\n// NOTE: shallowRef preserves reka-ui's `DateValue` discriminated-union without\n// deep reactive unwrapping that would break structural type matching on bind sites.\nconst placeholder = shallowRef<DateValue>(\n (props.defaultValue ?? props.defaultPlaceholder ?? today(getLocalTimeZone())) as DateValue\n)\n\nfunction cycleView(): void {\n view.value = view.value === 'date' ? 'month' : view.value === 'month' ? 'year' : 'date'\n}\n\nfunction onMonthSelect(val: DateValue | DateValue[] | undefined): void {\n if (!val) return\n const next = Array.isArray(val) ? val[val.length - 1] : val\n if (!next) return\n placeholder.value = next\n view.value = 'date'\n}\n\nfunction onYearSelect(val: DateValue | DateValue[] | undefined): void {\n if (!val) return\n const next = Array.isArray(val) ? val[val.length - 1] : val\n if (!next) return\n placeholder.value = next\n view.value = 'month'\n}\n\nconst nextViewLabel = computed(() =>\n view.value === 'date' ? 'month' : view.value === 'month' ? 'year' : 'date'\n)\n</script>\n\n<template>\n <CalendarRoot\n v-model=\"modelValue\"\n v-model:placeholder=\"placeholder\"\n :default-value=\"defaultValue\"\n :default-placeholder=\"defaultPlaceholder\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-disabled=\"isDateDisabled\"\n :is-date-unavailable=\"isDateUnavailable\"\n :locale=\"locale\"\n :weekday-format=\"weekdayFormat\"\n :fixed-weeks=\"fixedWeeks\"\n :number-of-months=\"numberOfMonths\"\n :week-starts-on=\"weekStartsOn\"\n :paged-navigation=\"pagedNavigation\"\n :prevent-deselect=\"preventDeselect\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n :calendar-label=\"calendarLabel\"\n :initial-focus=\"initialFocus\"\n :dir=\"dir\"\n :next-page=\"nextPage\"\n :prev-page=\"prevPage\"\n :multiple=\"multiple\"\n :disable-days-outside-current-view=\"disableDaysOutsideCurrentView\"\n :as=\"as\"\n :as-child=\"asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <template #default=\"{ grid, weekDays }\">\n <template v-if=\"view === 'date'\">\n <CalendarHeader :class=\"composeClassName(slotFns.header(), props.classNames?.header)\">\n <CalendarPrev\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Previous month\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"15 18 9 12 15 6\" />\n </svg>\n </CalendarPrev>\n\n <CalendarHeading\n v-slot=\"{ headingValue }\"\n :class=\"composeClassName(slotFns.heading(), props.classNames?.heading)\"\n >\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.headingButton(), props.classNames?.headingButton)\"\n :aria-label=\"`Switch to ${nextViewLabel} view`\"\n @click=\"cycleView\"\n >\n {{ headingValue }}\n </button>\n </CalendarHeading>\n\n <CalendarNext\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Next month\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"9 18 15 12 9 6\" />\n </svg>\n </CalendarNext>\n </CalendarHeader>\n\n <CalendarGrid\n v-for=\"month in grid\"\n :key=\"month.value.toString()\"\n :class=\"composeClassName(slotFns.grid(), props.classNames?.grid)\"\n >\n <CalendarGridHead :class=\"composeClassName(slotFns.gridHeader(), props.classNames?.gridHeader)\">\n <CalendarGridRow :class=\"composeClassName(slotFns.gridRow(), props.classNames?.gridRow)\">\n <CalendarHeadCell\n v-for=\"day in weekDays\"\n :key=\"day\"\n :class=\"composeClassName(slotFns.headerCell(), props.classNames?.headerCell)\"\n >\n {{ day }}\n </CalendarHeadCell>\n </CalendarGridRow>\n </CalendarGridHead>\n <CalendarGridBody :class=\"composeClassName(slotFns.gridBody(), props.classNames?.gridBody)\">\n <CalendarGridRow\n v-for=\"(week, weekIndex) in month.rows\"\n :key=\"weekIndex\"\n :class=\"composeClassName(slotFns.gridRow(), props.classNames?.gridRow)\"\n >\n <CalendarCell\n v-for=\"day in week\"\n :key=\"day.toString()\"\n :date=\"day\"\n :class=\"composeClassName(slotFns.cell(), props.classNames?.cell)\"\n >\n <CalendarCellTrigger\n :day=\"day\"\n :month=\"month.value\"\n :class=\"composeClassName(slotFns.cellButton(), props.classNames?.cellButton)\"\n />\n </CalendarCell>\n </CalendarGridRow>\n </CalendarGridBody>\n </CalendarGrid>\n </template>\n </template>\n </CalendarRoot>\n\n <MonthPickerRoot\n v-if=\"view === 'month'\"\n :placeholder=\"placeholder\"\n :locale=\"locale\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n :initial-focus=\"initialFocus\"\n :dir=\"dir\"\n :next-page=\"nextPage\"\n :prev-page=\"prevPage\"\n :multiple=\"multiple\"\n :is-month-disabled=\"isMonthDisabled\"\n :is-month-unavailable=\"isMonthUnavailable\"\n :as=\"as\"\n :as-child=\"asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n @update:model-value=\"onMonthSelect\"\n @update:placeholder=\"(val: DateValue | undefined) => { if (val) placeholder = val }\"\n >\n <template #default=\"{ grid: monthGrid }\">\n <MonthPickerHeader :class=\"composeClassName(slotFns.header(), props.classNames?.header)\">\n <MonthPickerPrev\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Previous year\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"15 18 9 12 15 6\" />\n </svg>\n </MonthPickerPrev>\n\n <MonthPickerHeading\n v-slot=\"{ headingValue }\"\n :class=\"composeClassName(slotFns.heading(), props.classNames?.heading)\"\n >\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.headingButton(), props.classNames?.headingButton)\"\n :aria-label=\"`Switch to ${nextViewLabel} view`\"\n @click=\"cycleView\"\n >\n {{ headingValue }}\n </button>\n </MonthPickerHeading>\n\n <MonthPickerNext\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Next year\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"9 18 15 12 9 6\" />\n </svg>\n </MonthPickerNext>\n </MonthPickerHeader>\n\n <MonthPickerGrid :class=\"composeClassName(slotFns.monthGrid(), props.classNames?.monthGrid)\">\n <MonthPickerGridBody :class=\"composeClassName(slotFns.monthGridBody(), props.classNames?.monthGridBody)\">\n <MonthPickerGridRow\n v-for=\"(row, i) in monthGrid.rows\"\n :key=\"i\"\n :class=\"composeClassName(slotFns.monthGridRow(), props.classNames?.monthGridRow)\"\n >\n <MonthPickerCell\n v-for=\"monthValue in row\"\n :key=\"monthValue.toString()\"\n :date=\"monthValue\"\n >\n <MonthPickerCellTrigger\n :month=\"monthValue\"\n as=\"button\"\n :class=\"composeClassName(slotFns.monthCell(), props.classNames?.monthCell)\"\n />\n </MonthPickerCell>\n </MonthPickerGridRow>\n </MonthPickerGridBody>\n </MonthPickerGrid>\n </template>\n </MonthPickerRoot>\n\n <CalendarYearPicker\n v-if=\"view === 'year'\"\n v-model:placeholder=\"placeholder\"\n :locale=\"locale\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-read-only=\"isReadOnly\"\n :is-disabled=\"isDisabled\"\n :class=\"composeClassName(props.class, props.classNames?.base)\"\n :class-names=\"props.classNames?.yearView\"\n @update:model-value=\"onYearSelect\"\n >\n <template #heading=\"{ headingValue }\">\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.headingButton(), props.classNames?.headingButton)\"\n :aria-label=\"`Switch to ${nextViewLabel} view`\"\n @click=\"cycleView\"\n >\n {{ headingValue }}\n </button>\n </template>\n </CalendarYearPicker>\n</template>\n"],"mappings":""}
@@ -395,6 +395,7 @@ var Calendar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
395
395
  "is-read-only": unref(isReadOnly),
396
396
  "is-disabled": unref(isDisabled),
397
397
  class: normalizeClass(unref(composeClassName)(props.class, props.classNames?.base)),
398
+ "class-names": props.classNames?.yearView,
398
399
  "onUpdate:modelValue": onYearSelect
399
400
  }, {
400
401
  heading: withCtx(({ headingValue }) => [createElementVNode("button", {
@@ -411,7 +412,8 @@ var Calendar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
411
412
  "max-value",
412
413
  "is-read-only",
413
414
  "is-disabled",
414
- "class"
415
+ "class",
416
+ "class-names"
415
417
  ])) : createCommentVNode("", true)
416
418
  ], 64);
417
419
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/calendar/Calendar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, shallowRef } from 'vue'\nimport {\n CalendarRoot,\n CalendarHeader,\n CalendarHeading,\n CalendarGrid,\n CalendarGridHead,\n CalendarGridRow,\n CalendarHeadCell,\n CalendarGridBody,\n CalendarCell,\n CalendarCellTrigger,\n CalendarNext,\n CalendarPrev,\n MonthPickerRoot,\n MonthPickerHeader,\n MonthPickerHeading,\n MonthPickerPrev,\n MonthPickerNext,\n MonthPickerGrid,\n MonthPickerGridBody,\n MonthPickerGridRow,\n MonthPickerCell,\n MonthPickerCellTrigger,\n} from 'reka-ui'\nimport { today, getLocalTimeZone, type DateValue } from '@internationalized/date'\nimport { calendarVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useDeprecatedBooleanProp } from '../../composables/useDeprecatedBooleanProp'\nimport CalendarYearPicker from '../calendar-year-picker/CalendarYearPicker.vue'\n\nconst props = withDefaults(defineProps<{\n defaultValue?: DateValue\n defaultPlaceholder?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n isDateDisabled?: (date: DateValue) => boolean\n isDateUnavailable?: (date: DateValue) => boolean\n locale?: string\n weekdayFormat?: 'narrow' | 'short' | 'long'\n fixedWeeks?: boolean\n numberOfMonths?: number\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n pagedNavigation?: boolean\n preventDeselect?: boolean\n isReadOnly?: boolean\n /** @deprecated Use isReadOnly instead. */\n readonly?: boolean\n isDisabled?: boolean\n /** @deprecated Use isDisabled instead. */\n disabled?: boolean\n calendarLabel?: string\n /** Initial focus state. */\n initialFocus?: boolean\n /** Text direction. */\n dir?: 'ltr' | 'rtl'\n /** Navigate to next page. */\n nextPage?: (placeholder: DateValue) => DateValue\n /** Navigate to previous page. */\n prevPage?: (placeholder: DateValue) => DateValue\n /** Allow multiple date selections. */\n multiple?: boolean\n /** Disable days outside the current view. */\n disableDaysOutsideCurrentView?: boolean\n /** Render as a different element or component. */\n as?: string\n /** Render child as root element. */\n asChild?: boolean\n /** MonthPicker: disable specific months. */\n isMonthDisabled?: (date: DateValue) => boolean\n /** MonthPicker: mark specific months as unavailable. */\n isMonthUnavailable?: (date: DateValue) => boolean\n class?: ClassValue\n /** Override classes on any named slot */\n classNames?: Partial<{\n base: ClassValue\n header: ClassValue\n navButton: ClassValue\n navButtonIcon: ClassValue\n heading: ClassValue\n headingButton: ClassValue\n grid: ClassValue\n gridHeader: ClassValue\n gridRow: ClassValue\n headerCell: ClassValue\n gridBody: ClassValue\n cell: ClassValue\n cellButton: ClassValue\n monthGrid: ClassValue\n monthGridBody: ClassValue\n monthGridRow: ClassValue\n monthCell: ClassValue\n }>\n}>(), {\n weekdayFormat: 'narrow',\n fixedWeeks: false,\n numberOfMonths: 1,\n pagedNavigation: false,\n preventDeselect: false,\n isReadOnly: undefined,\n readonly: undefined,\n isDisabled: undefined,\n disabled: undefined,\n})\n\nconst modelValue = defineModel<DateValue>()\n\nconst isReadOnly = useDeprecatedBooleanProp(\n 'Calendar', 'isReadOnly', () => props.isReadOnly, 'readonly', () => props.readonly,\n)\n\nconst isDisabled = useDeprecatedBooleanProp(\n 'Calendar', 'isDisabled', () => props.isDisabled, 'disabled', () => props.disabled,\n)\n\nconst slotFns = computed(() => calendarVariants())\n\n// View-switcher state: 'date' (default 7-col calendar), 'month' (3x4 months), 'year' (3x4 years)\ntype View = 'date' | 'month' | 'year'\nconst view = ref<View>('date')\n\n// Shared placeholder synced with CalendarRoot/MonthPickerRoot/YearPickerRoot.\n// NOTE: shallowRef preserves reka-ui's `DateValue` discriminated-union without\n// deep reactive unwrapping that would break structural type matching on bind sites.\nconst placeholder = shallowRef<DateValue>(\n (props.defaultValue ?? props.defaultPlaceholder ?? today(getLocalTimeZone())) as DateValue\n)\n\nfunction cycleView(): void {\n view.value = view.value === 'date' ? 'month' : view.value === 'month' ? 'year' : 'date'\n}\n\nfunction onMonthSelect(val: DateValue | DateValue[] | undefined): void {\n if (!val) return\n const next = Array.isArray(val) ? val[val.length - 1] : val\n if (!next) return\n placeholder.value = next\n view.value = 'date'\n}\n\nfunction onYearSelect(val: DateValue | DateValue[] | undefined): void {\n if (!val) return\n const next = Array.isArray(val) ? val[val.length - 1] : val\n if (!next) return\n placeholder.value = next\n view.value = 'month'\n}\n\nconst nextViewLabel = computed(() =>\n view.value === 'date' ? 'month' : view.value === 'month' ? 'year' : 'date'\n)\n</script>\n\n<template>\n <CalendarRoot\n v-model=\"modelValue\"\n v-model:placeholder=\"placeholder\"\n :default-value=\"defaultValue\"\n :default-placeholder=\"defaultPlaceholder\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-disabled=\"isDateDisabled\"\n :is-date-unavailable=\"isDateUnavailable\"\n :locale=\"locale\"\n :weekday-format=\"weekdayFormat\"\n :fixed-weeks=\"fixedWeeks\"\n :number-of-months=\"numberOfMonths\"\n :week-starts-on=\"weekStartsOn\"\n :paged-navigation=\"pagedNavigation\"\n :prevent-deselect=\"preventDeselect\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n :calendar-label=\"calendarLabel\"\n :initial-focus=\"initialFocus\"\n :dir=\"dir\"\n :next-page=\"nextPage\"\n :prev-page=\"prevPage\"\n :multiple=\"multiple\"\n :disable-days-outside-current-view=\"disableDaysOutsideCurrentView\"\n :as=\"as\"\n :as-child=\"asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <template #default=\"{ grid, weekDays }\">\n <template v-if=\"view === 'date'\">\n <CalendarHeader :class=\"composeClassName(slotFns.header(), props.classNames?.header)\">\n <CalendarPrev\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Previous month\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"15 18 9 12 15 6\" />\n </svg>\n </CalendarPrev>\n\n <CalendarHeading\n v-slot=\"{ headingValue }\"\n :class=\"composeClassName(slotFns.heading(), props.classNames?.heading)\"\n >\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.headingButton(), props.classNames?.headingButton)\"\n :aria-label=\"`Switch to ${nextViewLabel} view`\"\n @click=\"cycleView\"\n >\n {{ headingValue }}\n </button>\n </CalendarHeading>\n\n <CalendarNext\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Next month\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"9 18 15 12 9 6\" />\n </svg>\n </CalendarNext>\n </CalendarHeader>\n\n <CalendarGrid\n v-for=\"month in grid\"\n :key=\"month.value.toString()\"\n :class=\"composeClassName(slotFns.grid(), props.classNames?.grid)\"\n >\n <CalendarGridHead :class=\"composeClassName(slotFns.gridHeader(), props.classNames?.gridHeader)\">\n <CalendarGridRow :class=\"composeClassName(slotFns.gridRow(), props.classNames?.gridRow)\">\n <CalendarHeadCell\n v-for=\"day in weekDays\"\n :key=\"day\"\n :class=\"composeClassName(slotFns.headerCell(), props.classNames?.headerCell)\"\n >\n {{ day }}\n </CalendarHeadCell>\n </CalendarGridRow>\n </CalendarGridHead>\n <CalendarGridBody :class=\"composeClassName(slotFns.gridBody(), props.classNames?.gridBody)\">\n <CalendarGridRow\n v-for=\"(week, weekIndex) in month.rows\"\n :key=\"weekIndex\"\n :class=\"composeClassName(slotFns.gridRow(), props.classNames?.gridRow)\"\n >\n <CalendarCell\n v-for=\"day in week\"\n :key=\"day.toString()\"\n :date=\"day\"\n :class=\"composeClassName(slotFns.cell(), props.classNames?.cell)\"\n >\n <CalendarCellTrigger\n :day=\"day\"\n :month=\"month.value\"\n :class=\"composeClassName(slotFns.cellButton(), props.classNames?.cellButton)\"\n />\n </CalendarCell>\n </CalendarGridRow>\n </CalendarGridBody>\n </CalendarGrid>\n </template>\n </template>\n </CalendarRoot>\n\n <MonthPickerRoot\n v-if=\"view === 'month'\"\n :placeholder=\"placeholder\"\n :locale=\"locale\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n :initial-focus=\"initialFocus\"\n :dir=\"dir\"\n :next-page=\"nextPage\"\n :prev-page=\"prevPage\"\n :multiple=\"multiple\"\n :is-month-disabled=\"isMonthDisabled\"\n :is-month-unavailable=\"isMonthUnavailable\"\n :as=\"as\"\n :as-child=\"asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n @update:model-value=\"onMonthSelect\"\n @update:placeholder=\"(val: DateValue | undefined) => { if (val) placeholder = val }\"\n >\n <template #default=\"{ grid: monthGrid }\">\n <MonthPickerHeader :class=\"composeClassName(slotFns.header(), props.classNames?.header)\">\n <MonthPickerPrev\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Previous year\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"15 18 9 12 15 6\" />\n </svg>\n </MonthPickerPrev>\n\n <MonthPickerHeading\n v-slot=\"{ headingValue }\"\n :class=\"composeClassName(slotFns.heading(), props.classNames?.heading)\"\n >\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.headingButton(), props.classNames?.headingButton)\"\n :aria-label=\"`Switch to ${nextViewLabel} view`\"\n @click=\"cycleView\"\n >\n {{ headingValue }}\n </button>\n </MonthPickerHeading>\n\n <MonthPickerNext\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Next year\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"9 18 15 12 9 6\" />\n </svg>\n </MonthPickerNext>\n </MonthPickerHeader>\n\n <MonthPickerGrid :class=\"composeClassName(slotFns.monthGrid(), props.classNames?.monthGrid)\">\n <MonthPickerGridBody :class=\"composeClassName(slotFns.monthGridBody(), props.classNames?.monthGridBody)\">\n <MonthPickerGridRow\n v-for=\"(row, i) in monthGrid.rows\"\n :key=\"i\"\n :class=\"composeClassName(slotFns.monthGridRow(), props.classNames?.monthGridRow)\"\n >\n <MonthPickerCell\n v-for=\"monthValue in row\"\n :key=\"monthValue.toString()\"\n :date=\"monthValue\"\n >\n <MonthPickerCellTrigger\n :month=\"monthValue\"\n as=\"button\"\n :class=\"composeClassName(slotFns.monthCell(), props.classNames?.monthCell)\"\n />\n </MonthPickerCell>\n </MonthPickerGridRow>\n </MonthPickerGridBody>\n </MonthPickerGrid>\n </template>\n </MonthPickerRoot>\n\n <CalendarYearPicker\n v-if=\"view === 'year'\"\n v-model:placeholder=\"placeholder\"\n :locale=\"locale\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-read-only=\"isReadOnly\"\n :is-disabled=\"isDisabled\"\n :class=\"composeClassName(props.class, props.classNames?.base)\"\n @update:model-value=\"onYearSelect\"\n >\n <template #heading=\"{ headingValue }\">\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.headingButton(), props.classNames?.headingButton)\"\n :aria-label=\"`Switch to ${nextViewLabel} view`\"\n @click=\"cycleView\"\n >\n {{ headingValue }}\n </button>\n </template>\n </CalendarYearPicker>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"Calendar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/calendar/Calendar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, shallowRef } from 'vue'\nimport {\n CalendarRoot,\n CalendarHeader,\n CalendarHeading,\n CalendarGrid,\n CalendarGridHead,\n CalendarGridRow,\n CalendarHeadCell,\n CalendarGridBody,\n CalendarCell,\n CalendarCellTrigger,\n CalendarNext,\n CalendarPrev,\n MonthPickerRoot,\n MonthPickerHeader,\n MonthPickerHeading,\n MonthPickerPrev,\n MonthPickerNext,\n MonthPickerGrid,\n MonthPickerGridBody,\n MonthPickerGridRow,\n MonthPickerCell,\n MonthPickerCellTrigger,\n} from 'reka-ui'\nimport { today, getLocalTimeZone, type DateValue } from '@internationalized/date'\nimport { calendarVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useDeprecatedBooleanProp } from '../../composables/useDeprecatedBooleanProp'\nimport CalendarYearPicker from '../calendar-year-picker/CalendarYearPicker.vue'\n\nconst props = withDefaults(defineProps<{\n defaultValue?: DateValue\n defaultPlaceholder?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n isDateDisabled?: (date: DateValue) => boolean\n isDateUnavailable?: (date: DateValue) => boolean\n locale?: string\n weekdayFormat?: 'narrow' | 'short' | 'long'\n fixedWeeks?: boolean\n numberOfMonths?: number\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n pagedNavigation?: boolean\n preventDeselect?: boolean\n isReadOnly?: boolean\n /** @deprecated Use isReadOnly instead. */\n readonly?: boolean\n isDisabled?: boolean\n /** @deprecated Use isDisabled instead. */\n disabled?: boolean\n calendarLabel?: string\n /** Initial focus state. */\n initialFocus?: boolean\n /** Text direction. */\n dir?: 'ltr' | 'rtl'\n /** Navigate to next page. */\n nextPage?: (placeholder: DateValue) => DateValue\n /** Navigate to previous page. */\n prevPage?: (placeholder: DateValue) => DateValue\n /** Allow multiple date selections. */\n multiple?: boolean\n /** Disable days outside the current view. */\n disableDaysOutsideCurrentView?: boolean\n /** Render as a different element or component. */\n as?: string\n /** Render child as root element. */\n asChild?: boolean\n /** MonthPicker: disable specific months. */\n isMonthDisabled?: (date: DateValue) => boolean\n /** MonthPicker: mark specific months as unavailable. */\n isMonthUnavailable?: (date: DateValue) => boolean\n class?: ClassValue\n /** Override classes on any named slot */\n classNames?: Partial<{\n base: ClassValue\n header: ClassValue\n navButton: ClassValue\n navButtonIcon: ClassValue\n heading: ClassValue\n headingButton: ClassValue\n grid: ClassValue\n gridHeader: ClassValue\n gridRow: ClassValue\n headerCell: ClassValue\n gridBody: ClassValue\n cell: ClassValue\n cellButton: ClassValue\n monthGrid: ClassValue\n monthGridBody: ClassValue\n monthGridRow: ClassValue\n monthCell: ClassValue\n yearView: Partial<{\n header: ClassValue\n navButton: ClassValue\n navButtonIcon: ClassValue\n heading: ClassValue\n yearGrid: ClassValue\n yearGridBody: ClassValue\n yearGridRow: ClassValue\n yearCell: ClassValue\n }>\n }>\n}>(), {\n weekdayFormat: 'narrow',\n fixedWeeks: false,\n numberOfMonths: 1,\n pagedNavigation: false,\n preventDeselect: false,\n isReadOnly: undefined,\n readonly: undefined,\n isDisabled: undefined,\n disabled: undefined,\n})\n\nconst modelValue = defineModel<DateValue>()\n\nconst isReadOnly = useDeprecatedBooleanProp(\n 'Calendar', 'isReadOnly', () => props.isReadOnly, 'readonly', () => props.readonly,\n)\n\nconst isDisabled = useDeprecatedBooleanProp(\n 'Calendar', 'isDisabled', () => props.isDisabled, 'disabled', () => props.disabled,\n)\n\nconst slotFns = computed(() => calendarVariants())\n\n// View-switcher state: 'date' (default 7-col calendar), 'month' (3x4 months), 'year' (3x4 years)\ntype View = 'date' | 'month' | 'year'\nconst view = ref<View>('date')\n\n// Shared placeholder synced with CalendarRoot/MonthPickerRoot/YearPickerRoot.\n// NOTE: shallowRef preserves reka-ui's `DateValue` discriminated-union without\n// deep reactive unwrapping that would break structural type matching on bind sites.\nconst placeholder = shallowRef<DateValue>(\n (props.defaultValue ?? props.defaultPlaceholder ?? today(getLocalTimeZone())) as DateValue\n)\n\nfunction cycleView(): void {\n view.value = view.value === 'date' ? 'month' : view.value === 'month' ? 'year' : 'date'\n}\n\nfunction onMonthSelect(val: DateValue | DateValue[] | undefined): void {\n if (!val) return\n const next = Array.isArray(val) ? val[val.length - 1] : val\n if (!next) return\n placeholder.value = next\n view.value = 'date'\n}\n\nfunction onYearSelect(val: DateValue | DateValue[] | undefined): void {\n if (!val) return\n const next = Array.isArray(val) ? val[val.length - 1] : val\n if (!next) return\n placeholder.value = next\n view.value = 'month'\n}\n\nconst nextViewLabel = computed(() =>\n view.value === 'date' ? 'month' : view.value === 'month' ? 'year' : 'date'\n)\n</script>\n\n<template>\n <CalendarRoot\n v-model=\"modelValue\"\n v-model:placeholder=\"placeholder\"\n :default-value=\"defaultValue\"\n :default-placeholder=\"defaultPlaceholder\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-disabled=\"isDateDisabled\"\n :is-date-unavailable=\"isDateUnavailable\"\n :locale=\"locale\"\n :weekday-format=\"weekdayFormat\"\n :fixed-weeks=\"fixedWeeks\"\n :number-of-months=\"numberOfMonths\"\n :week-starts-on=\"weekStartsOn\"\n :paged-navigation=\"pagedNavigation\"\n :prevent-deselect=\"preventDeselect\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n :calendar-label=\"calendarLabel\"\n :initial-focus=\"initialFocus\"\n :dir=\"dir\"\n :next-page=\"nextPage\"\n :prev-page=\"prevPage\"\n :multiple=\"multiple\"\n :disable-days-outside-current-view=\"disableDaysOutsideCurrentView\"\n :as=\"as\"\n :as-child=\"asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n >\n <template #default=\"{ grid, weekDays }\">\n <template v-if=\"view === 'date'\">\n <CalendarHeader :class=\"composeClassName(slotFns.header(), props.classNames?.header)\">\n <CalendarPrev\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Previous month\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"15 18 9 12 15 6\" />\n </svg>\n </CalendarPrev>\n\n <CalendarHeading\n v-slot=\"{ headingValue }\"\n :class=\"composeClassName(slotFns.heading(), props.classNames?.heading)\"\n >\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.headingButton(), props.classNames?.headingButton)\"\n :aria-label=\"`Switch to ${nextViewLabel} view`\"\n @click=\"cycleView\"\n >\n {{ headingValue }}\n </button>\n </CalendarHeading>\n\n <CalendarNext\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Next month\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"9 18 15 12 9 6\" />\n </svg>\n </CalendarNext>\n </CalendarHeader>\n\n <CalendarGrid\n v-for=\"month in grid\"\n :key=\"month.value.toString()\"\n :class=\"composeClassName(slotFns.grid(), props.classNames?.grid)\"\n >\n <CalendarGridHead :class=\"composeClassName(slotFns.gridHeader(), props.classNames?.gridHeader)\">\n <CalendarGridRow :class=\"composeClassName(slotFns.gridRow(), props.classNames?.gridRow)\">\n <CalendarHeadCell\n v-for=\"day in weekDays\"\n :key=\"day\"\n :class=\"composeClassName(slotFns.headerCell(), props.classNames?.headerCell)\"\n >\n {{ day }}\n </CalendarHeadCell>\n </CalendarGridRow>\n </CalendarGridHead>\n <CalendarGridBody :class=\"composeClassName(slotFns.gridBody(), props.classNames?.gridBody)\">\n <CalendarGridRow\n v-for=\"(week, weekIndex) in month.rows\"\n :key=\"weekIndex\"\n :class=\"composeClassName(slotFns.gridRow(), props.classNames?.gridRow)\"\n >\n <CalendarCell\n v-for=\"day in week\"\n :key=\"day.toString()\"\n :date=\"day\"\n :class=\"composeClassName(slotFns.cell(), props.classNames?.cell)\"\n >\n <CalendarCellTrigger\n :day=\"day\"\n :month=\"month.value\"\n :class=\"composeClassName(slotFns.cellButton(), props.classNames?.cellButton)\"\n />\n </CalendarCell>\n </CalendarGridRow>\n </CalendarGridBody>\n </CalendarGrid>\n </template>\n </template>\n </CalendarRoot>\n\n <MonthPickerRoot\n v-if=\"view === 'month'\"\n :placeholder=\"placeholder\"\n :locale=\"locale\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n :initial-focus=\"initialFocus\"\n :dir=\"dir\"\n :next-page=\"nextPage\"\n :prev-page=\"prevPage\"\n :multiple=\"multiple\"\n :is-month-disabled=\"isMonthDisabled\"\n :is-month-unavailable=\"isMonthUnavailable\"\n :as=\"as\"\n :as-child=\"asChild\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n @update:model-value=\"onMonthSelect\"\n @update:placeholder=\"(val: DateValue | undefined) => { if (val) placeholder = val }\"\n >\n <template #default=\"{ grid: monthGrid }\">\n <MonthPickerHeader :class=\"composeClassName(slotFns.header(), props.classNames?.header)\">\n <MonthPickerPrev\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Previous year\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"15 18 9 12 15 6\" />\n </svg>\n </MonthPickerPrev>\n\n <MonthPickerHeading\n v-slot=\"{ headingValue }\"\n :class=\"composeClassName(slotFns.heading(), props.classNames?.heading)\"\n >\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.headingButton(), props.classNames?.headingButton)\"\n :aria-label=\"`Switch to ${nextViewLabel} view`\"\n @click=\"cycleView\"\n >\n {{ headingValue }}\n </button>\n </MonthPickerHeading>\n\n <MonthPickerNext\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n aria-label=\"Next year\"\n >\n <svg\n :class=\"composeClassName(slotFns.navButtonIcon(), props.classNames?.navButtonIcon)\"\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=\"9 18 15 12 9 6\" />\n </svg>\n </MonthPickerNext>\n </MonthPickerHeader>\n\n <MonthPickerGrid :class=\"composeClassName(slotFns.monthGrid(), props.classNames?.monthGrid)\">\n <MonthPickerGridBody :class=\"composeClassName(slotFns.monthGridBody(), props.classNames?.monthGridBody)\">\n <MonthPickerGridRow\n v-for=\"(row, i) in monthGrid.rows\"\n :key=\"i\"\n :class=\"composeClassName(slotFns.monthGridRow(), props.classNames?.monthGridRow)\"\n >\n <MonthPickerCell\n v-for=\"monthValue in row\"\n :key=\"monthValue.toString()\"\n :date=\"monthValue\"\n >\n <MonthPickerCellTrigger\n :month=\"monthValue\"\n as=\"button\"\n :class=\"composeClassName(slotFns.monthCell(), props.classNames?.monthCell)\"\n />\n </MonthPickerCell>\n </MonthPickerGridRow>\n </MonthPickerGridBody>\n </MonthPickerGrid>\n </template>\n </MonthPickerRoot>\n\n <CalendarYearPicker\n v-if=\"view === 'year'\"\n v-model:placeholder=\"placeholder\"\n :locale=\"locale\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-read-only=\"isReadOnly\"\n :is-disabled=\"isDisabled\"\n :class=\"composeClassName(props.class, props.classNames?.base)\"\n :class-names=\"props.classNames?.yearView\"\n @update:model-value=\"onYearSelect\"\n >\n <template #heading=\"{ headingValue }\">\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.headingButton(), props.classNames?.headingButton)\"\n :aria-label=\"`Switch to ${nextViewLabel} view`\"\n @click=\"cycleView\"\n >\n {{ headingValue }}\n </button>\n </template>\n </CalendarYearPicker>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCA,MAAM,QAAQ;EAoFd,MAAM,aAAa,SAAsB,SAAA,aAAC;EAE1C,MAAM,aAAa,yBACjB,YAAY,oBAAoB,MAAM,YAAY,kBAAkB,MAAM,SAC5E;EAEA,MAAM,aAAa,yBACjB,YAAY,oBAAoB,MAAM,YAAY,kBAAkB,MAAM,SAC5E;EAEA,MAAM,UAAU,eAAe,kBAAkB,CAAA;EAIjD,MAAM,OAAO,IAAU,OAAM;EAK7B,MAAM,cAAc,WACjB,MAAM,gBAAgB,MAAM,sBAAsB,MAAM,kBAAkB,CAAC,CAC9E;EAEA,SAAS,YAAkB;AACzB,QAAK,QAAQ,KAAK,UAAU,SAAS,UAAU,KAAK,UAAU,UAAU,SAAS;;EAGnF,SAAS,cAAc,KAAgD;AACrE,OAAI,CAAC,IAAK;GACV,MAAM,OAAO,MAAM,QAAQ,IAAI,GAAG,IAAI,IAAI,SAAS,KAAK;AACxD,OAAI,CAAC,KAAM;AACX,eAAY,QAAQ;AACpB,QAAK,QAAQ;;EAGf,SAAS,aAAa,KAAgD;AACpE,OAAI,CAAC,IAAK;GACV,MAAM,OAAO,MAAM,QAAQ,IAAI,GAAG,IAAI,IAAI,SAAS,KAAK;AACxD,OAAI,CAAC,KAAM;AACX,eAAY,QAAQ;AACpB,QAAK,QAAQ;;EAGf,MAAM,gBAAgB,eACpB,KAAK,UAAU,SAAS,UAAU,KAAK,UAAU,UAAU,SAAS,OACtE;;;IAIE,YAgIe,MAAA,aAAA,EAAA;iBA/HJ,WAAA;6EAAU,QAAA;KACX,aAAa,YAAA;+EAAW,QAAA;KAC/B,iBAAe,QAAA;KACf,uBAAqB,QAAA;KACrB,aAAW,QAAA;KACX,aAAW,QAAA;KACX,oBAAkB,QAAA;KAClB,uBAAqB,QAAA;KACrB,QAAQ,QAAA;KACR,kBAAgB,QAAA;KAChB,eAAa,QAAA;KACb,oBAAkB,QAAA;KAClB,kBAAgB,QAAA;KAChB,oBAAkB,QAAA;KAClB,oBAAkB,QAAA;KAClB,UAAU,MAAA,WAAU;KACpB,UAAU,MAAA,WAAU;KACpB,kBAAgB,QAAA;KAChB,iBAAe,QAAA;KACf,KAAK,QAAA;KACL,aAAW,QAAA;KACX,aAAW,QAAA;KACX,UAAU,QAAA;KACV,qCAAmC,QAAA;KACnC,IAAI,QAAA;KACJ,YAAU,QAAA;KACV,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;;KAEjE,SAAO,SAiGL,EAjGS,MAAM,eAAQ,CAClB,KAAA,UAAI,UAAA,WAAA,EAApB,mBAgGW,UAAA,EAAA,KAAA,GAAA,EAAA,CA/FT,YAwDiB,MAAA,eAAA,EAAA,EAxDA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,QAAM,EAAI,MAAM,YAAY,OAAM,CAAA,EAAA,EAAA;6BAoBlE;OAnBf,YAmBe,MAAA,aAAA,EAAA;QAlBZ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,WAAS,EAAI,MAAM,YAAY,UAAS,CAAA;QACzE,cAAW;;+BAgBL,EAAA,WAAA,EAdN,mBAcM,OAAA;SAbH,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,eAAa,EAAI,MAAM,YAAY,cAAa,CAAA;SACjF,OAAM;SACN,OAAM;SACN,QAAO;SACP,SAAQ;SACR,MAAK;SACL,QAAO;SACP,gBAAa;SACb,kBAAe;SACf,mBAAgB;SAChB,eAAY;0CAEZ,mBAAqC,YAAA,EAA3B,QAAO,mBAAiB,EAAA,MAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,CAAA;;;OAItC,YAYkB,MAAA,gBAAA,EAAA,EAVf,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,SAAO,EAAI,MAAM,YAAY,QAAO,CAAA,EAAA,EAAA;0BAS5D,EAVC,mBAAY,CAGtB,mBAOS,UAAA;SANP,MAAK;SACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,eAAa,EAAI,MAAM,YAAY,cAAa,CAAA;SAChF,cAAU,aAAe,cAAA,MAAa;SACtC,SAAO;2BAEL,aAAY,EAAA,IAAA,WAAA,CAAA,CAAA;;;OAInB,YAmBe,MAAA,aAAA,EAAA;QAlBZ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,WAAS,EAAI,MAAM,YAAY,UAAS,CAAA;QACzE,cAAW;;+BAgBL,EAAA,WAAA,EAdN,mBAcM,OAAA;SAbH,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,eAAa,EAAI,MAAM,YAAY,cAAa,CAAA;SACjF,OAAM;SACN,OAAM;SACN,QAAO;SACP,SAAQ;SACR,MAAK;SACL,QAAO;SACP,gBAAa;SACb,kBAAe;SACf,mBAAgB;SAChB,eAAY;0CAEZ,mBAAoC,YAAA,EAA1B,QAAO,kBAAgB,EAAA,MAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,CAAA;;;;;yCAKvC,mBAoCe,UAAA,MAAA,WAnCG,OAAT,UAAK;0BADd,YAoCe,MAAA,aAAA,EAAA;OAlCZ,KAAK,MAAM,MAAM,UAAQ;OACzB,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,YAAY,KAAI,CAAA;;8BAY5C,CAVnB,YAUmB,MAAA,iBAAA,EAAA,EAVA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,YAAU,EAAI,MAAM,YAAY,WAAU,CAAA,EAAA,EAAA;+BASzE,CARlB,YAQkB,MAAA,gBAAA,EAAA,EARA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,SAAO,EAAI,MAAM,YAAY,QAAO,CAAA,EAAA,EAAA;gCAE3D,EAAA,UAAA,KAAA,EADzB,mBAMmB,UAAA,MAAA,WALH,WAAP,QAAG;8BADZ,YAMmB,MAAA,iBAAA,EAAA;WAJhB,KAAK;WACL,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,YAAU,EAAI,MAAM,YAAY,WAAU,CAAA;;kCAElE,CAAA,gBAAA,gBAAN,IAAG,EAAA,EAAA,CAAA,CAAA;;;;;;;4BAIZ,YAmBmB,MAAA,iBAAA,EAAA,EAnBA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,UAAQ,EAAI,MAAM,YAAY,SAAQ,CAAA,EAAA,EAAA;+BAE9C,EAAA,UAAA,KAAA,EADzC,mBAiBkB,UAAA,MAAA,WAhBY,MAAM,OAA1B,MAAM,cAAS;6BADzB,YAiBkB,MAAA,gBAAA,EAAA;UAff,KAAK;UACL,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,SAAO,EAAI,MAAM,YAAY,QAAO,CAAA;;iCAGhD,EAAA,UAAA,KAAA,EADrB,mBAWe,UAAA,MAAA,WAVC,OAAP,QAAG;+BADZ,YAWe,MAAA,aAAA,EAAA;YATZ,KAAK,IAAI,UAAQ;YACjB,MAAM;YACN,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,YAAY,KAAI,CAAA;;mCAM7D,CAJF,YAIE,MAAA,oBAAA,EAAA;aAHM;aACL,OAAO,MAAM;aACb,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,YAAU,EAAI,MAAM,YAAY,WAAU,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAWnF,KAAA,UAAI,WAAA,WAAA,EADZ,YAsGkB,MAAA,gBAAA,EAAA;;KApGf,aAAa,YAAA;KACb,QAAQ,QAAA;KACR,aAAW,QAAA;KACX,aAAW,QAAA;KACX,UAAU,MAAA,WAAU;KACpB,UAAU,MAAA,WAAU;KACpB,iBAAe,QAAA;KACf,KAAK,QAAA;KACL,aAAW,QAAA;KACX,aAAW,QAAA;KACX,UAAU,QAAA;KACV,qBAAmB,QAAA;KACnB,wBAAsB,QAAA;KACtB,IAAI,QAAA;KACJ,YAAU,QAAA;KACV,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;KAC3E,uBAAoB;KACpB,wBAAkB,OAAA,OAAA,OAAA,MAAG,QAA0B;AAAA,UAAW,IAAK,aAAA,QAAc;;;KAEnE,SAAO,SAyDI,EAAA,MAzDM,gBAAS,CACnC,YAwDoB,MAAA,kBAAA,EAAA,EAxDA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,QAAM,EAAI,MAAM,YAAY,OAAM,CAAA,EAAA,EAAA;6BAoBlE;OAnBlB,YAmBkB,MAAA,gBAAA,EAAA;QAlBf,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,WAAS,EAAI,MAAM,YAAY,UAAS,CAAA;QACzE,cAAW;;+BAgBL,EAAA,WAAA,EAdN,mBAcM,OAAA;SAbH,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,eAAa,EAAI,MAAM,YAAY,cAAa,CAAA;SACjF,OAAM;SACN,OAAM;SACN,QAAO;SACP,SAAQ;SACR,MAAK;SACL,QAAO;SACP,gBAAa;SACb,kBAAe;SACf,mBAAgB;SAChB,eAAY;0CAEZ,mBAAqC,YAAA,EAA3B,QAAO,mBAAiB,EAAA,MAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,CAAA;;;OAItC,YAYqB,MAAA,mBAAA,EAAA,EAVlB,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,SAAO,EAAI,MAAM,YAAY,QAAO,CAAA,EAAA,EAAA;0BAS5D,EAVC,mBAAY,CAGtB,mBAOS,UAAA;SANP,MAAK;SACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,eAAa,EAAI,MAAM,YAAY,cAAa,CAAA;SAChF,cAAU,aAAe,cAAA,MAAa;SACtC,SAAO;2BAEL,aAAY,EAAA,IAAA,WAAA,CAAA,CAAA;;;OAInB,YAmBkB,MAAA,gBAAA,EAAA;QAlBf,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,WAAS,EAAI,MAAM,YAAY,UAAS,CAAA;QACzE,cAAW;;+BAgBL,EAAA,WAAA,EAdN,mBAcM,OAAA;SAbH,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,eAAa,EAAI,MAAM,YAAY,cAAa,CAAA;SACjF,OAAM;SACN,OAAM;SACN,QAAO;SACP,SAAQ;SACR,MAAK;SACL,QAAO;SACP,gBAAa;SACb,kBAAe;SACf,mBAAgB;SAChB,eAAY;0CAEZ,mBAAoC,YAAA,EAA1B,QAAO,kBAAgB,EAAA,MAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,CAAA;;;;;uBAKvC,YAoBkB,MAAA,gBAAA,EAAA,EApBA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,WAAS,EAAI,MAAM,YAAY,UAAS,CAAA,EAAA,EAAA;6BAmBlE,CAlBtB,YAkBsB,MAAA,oBAAA,EAAA,EAlBA,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,eAAa,EAAI,MAAM,YAAY,cAAa,CAAA,EAAA,EAAA;8BAEhE,EAAA,UAAA,KAAA,EADpC,mBAgBqB,UAAA,MAAA,WAfA,UAAU,OAArB,KAAK,MAAC;4BADhB,YAgBqB,MAAA,mBAAA,EAAA;SAdlB,KAAK;SACL,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,cAAY,EAAI,MAAM,YAAY,aAAY,CAAA;;gCAGpD,EAAA,UAAA,KAAA,EAD3B,mBAUkB,UAAA,MAAA,WATK,MAAd,eAAU;8BADnB,YAUkB,MAAA,gBAAA,EAAA;WARf,KAAK,WAAW,UAAQ;WACxB,MAAM;;kCAML,CAJF,YAIE,MAAA,uBAAA,EAAA;YAHC,OAAO;YACR,IAAG;YACF,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,WAAS,EAAI,MAAM,YAAY,UAAS,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAU/E,KAAA,UAAI,UAAA,WAAA,EADZ,YAsBqB,4BAAA;;KApBX,aAAa,YAAA;+EAAW,QAAA;KAC/B,QAAQ,QAAA;KACR,aAAW,QAAA;KACX,aAAW,QAAA;KACX,gBAAc,MAAA,WAAU;KACxB,eAAa,MAAA,WAAU;KACvB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;KAC3D,eAAa,MAAM,YAAY;KAC/B,uBAAoB;;KAEV,SAAO,SAQP,EARW,mBAAY,CAChC,mBAOS,UAAA;MANP,MAAK;MACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,eAAa,EAAI,MAAM,YAAY,cAAa,CAAA;MAChF,cAAU,aAAe,cAAA,MAAa;MACtC,SAAO;wBAEL,aAAY,EAAA,IAAA,WAAA,CAAA,CAAA"}