@auronui/vue 1.0.14 → 1.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/dist/cjs/index.cjs +1031 -430
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/components/accordion/Accordion.js.map +1 -1
  4. package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js +9 -2
  5. package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
  6. package/dist/components/accordion/AccordionContent.js.map +1 -1
  7. package/dist/components/accordion/AccordionContent.vue_vue_type_script_setup_true_lang.js +12 -3
  8. package/dist/components/accordion/AccordionContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  9. package/dist/components/accordion/AccordionHeader.js.map +1 -1
  10. package/dist/components/accordion/AccordionHeader.vue_vue_type_script_setup_true_lang.js +11 -2
  11. package/dist/components/accordion/AccordionHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  12. package/dist/components/accordion/AccordionItem.js.map +1 -1
  13. package/dist/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js +9 -2
  14. package/dist/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  15. package/dist/components/accordion/AccordionTrigger.js.map +1 -1
  16. package/dist/components/accordion/AccordionTrigger.vue_vue_type_script_setup_true_lang.js +12 -3
  17. package/dist/components/accordion/AccordionTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  18. package/dist/components/alert-dialog/AlertDialogAction.js.map +1 -1
  19. package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js +9 -2
  20. package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js.map +1 -1
  21. package/dist/components/alert-dialog/AlertDialogCancel.js.map +1 -1
  22. package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js +9 -2
  23. package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  24. package/dist/components/aspect-ratio/AspectRatio.js.map +1 -1
  25. package/dist/components/aspect-ratio/AspectRatio.vue_vue_type_script_setup_true_lang.js +12 -2
  26. package/dist/components/aspect-ratio/AspectRatio.vue_vue_type_script_setup_true_lang.js.map +1 -1
  27. package/dist/components/autocomplete/Autocomplete.js.map +1 -1
  28. package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js +14 -7
  29. package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  30. package/dist/components/avatar/Avatar.js.map +1 -1
  31. package/dist/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js +11 -4
  32. package/dist/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/components/badge/Badge.js.map +1 -1
  34. package/dist/components/badge/Badge.vue_vue_type_script_setup_true_lang.js +9 -2
  35. package/dist/components/badge/Badge.vue_vue_type_script_setup_true_lang.js.map +1 -1
  36. package/dist/components/breadcrumbs/BreadcrumbItem.js.map +1 -1
  37. package/dist/components/breadcrumbs/BreadcrumbItem.vue_vue_type_script_setup_true_lang.js +13 -5
  38. package/dist/components/breadcrumbs/BreadcrumbItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  39. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -1
  40. package/dist/components/breadcrumbs/Breadcrumbs.vue_vue_type_script_setup_true_lang.js +10 -3
  41. package/dist/components/breadcrumbs/Breadcrumbs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/components/button/Button.js.map +1 -1
  43. package/dist/components/button/Button.vue_vue_type_script_setup_true_lang.js +13 -6
  44. package/dist/components/button/Button.vue_vue_type_script_setup_true_lang.js.map +1 -1
  45. package/dist/components/button/ButtonGroup.js.map +1 -1
  46. package/dist/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js +9 -2
  47. package/dist/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/components/button/ToggleButtonGroup.js.map +1 -1
  49. package/dist/components/button/ToggleButtonGroup.vue_vue_type_script_setup_true_lang.js +9 -2
  50. package/dist/components/button/ToggleButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  51. package/dist/components/calendar/Calendar.js.map +1 -1
  52. package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js +38 -31
  53. package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  54. package/dist/components/calendar-year-picker/CalendarYearPicker.js.map +1 -1
  55. package/dist/components/calendar-year-picker/CalendarYearPicker.vue_vue_type_script_setup_true_lang.js +19 -12
  56. package/dist/components/calendar-year-picker/CalendarYearPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  57. package/dist/components/card/Card.js.map +1 -1
  58. package/dist/components/card/Card.vue_vue_type_script_setup_true_lang.js +9 -2
  59. package/dist/components/card/Card.vue_vue_type_script_setup_true_lang.js.map +1 -1
  60. package/dist/components/card/CardBody.js.map +1 -1
  61. package/dist/components/card/CardBody.vue_vue_type_script_setup_true_lang.js +11 -2
  62. package/dist/components/card/CardBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/components/card/CardFooter.js.map +1 -1
  64. package/dist/components/card/CardFooter.vue_vue_type_script_setup_true_lang.js +9 -2
  65. package/dist/components/card/CardFooter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  66. package/dist/components/card/CardHeader.js.map +1 -1
  67. package/dist/components/card/CardHeader.vue_vue_type_script_setup_true_lang.js +9 -2
  68. package/dist/components/card/CardHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  69. package/dist/components/checkbox/Checkbox.js.map +1 -1
  70. package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js +11 -4
  71. package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  72. package/dist/components/chip/Chip.js.map +1 -1
  73. package/dist/components/chip/Chip.vue_vue_type_script_setup_true_lang.js +14 -7
  74. package/dist/components/chip/Chip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  75. package/dist/components/collapsible/Collapsible.js.map +1 -1
  76. package/dist/components/collapsible/Collapsible.vue_vue_type_script_setup_true_lang.js +9 -2
  77. package/dist/components/collapsible/Collapsible.vue_vue_type_script_setup_true_lang.js.map +1 -1
  78. package/dist/components/collapsible/CollapsibleContent.js.map +1 -1
  79. package/dist/components/collapsible/CollapsibleContent.vue_vue_type_script_setup_true_lang.js +13 -3
  80. package/dist/components/collapsible/CollapsibleContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  81. package/dist/components/collapsible/CollapsibleGroup.js.map +1 -1
  82. package/dist/components/collapsible/CollapsibleGroup.vue_vue_type_script_setup_true_lang.js +9 -2
  83. package/dist/components/collapsible/CollapsibleGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  84. package/dist/components/collapsible/CollapsibleTrigger.js.map +1 -1
  85. package/dist/components/collapsible/CollapsibleTrigger.vue_vue_type_script_setup_true_lang.js +12 -3
  86. package/dist/components/collapsible/CollapsibleTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  87. package/dist/components/combo-box/ComboBox.js.map +1 -1
  88. package/dist/components/combo-box/ComboBox.vue_vue_type_script_setup_true_lang.js +12 -2
  89. package/dist/components/combo-box/ComboBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  90. package/dist/components/date-input/DateInput.js.map +1 -1
  91. package/dist/components/date-input/DateInput.vue_vue_type_script_setup_true_lang.js +20 -13
  92. package/dist/components/date-input/DateInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  93. package/dist/components/date-picker/DatePicker.js.map +1 -1
  94. package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js +12 -5
  95. package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  96. package/dist/components/date-range-field/DateRangeField.js.map +1 -1
  97. package/dist/components/date-range-field/DateRangeField.vue_vue_type_script_setup_true_lang.js +23 -16
  98. package/dist/components/date-range-field/DateRangeField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  99. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
  100. package/dist/components/date-range-picker/DateRangePicker.vue_vue_type_script_setup_true_lang.js +12 -5
  101. package/dist/components/date-range-picker/DateRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  102. package/dist/components/date-time-picker/DateTimePicker.js.map +1 -1
  103. package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js +18 -11
  104. package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  105. package/dist/components/input/Input.js.map +1 -1
  106. package/dist/components/input/Input.vue_vue_type_script_setup_true_lang.js +21 -14
  107. package/dist/components/input/Input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  108. package/dist/components/input-otp/InputOTP.js.map +1 -1
  109. package/dist/components/input-otp/InputOTP.vue_vue_type_script_setup_true_lang.js +14 -4
  110. package/dist/components/input-otp/InputOTP.vue_vue_type_script_setup_true_lang.js.map +1 -1
  111. package/dist/components/kbd/Kbd.js.map +1 -1
  112. package/dist/components/kbd/Kbd.vue_vue_type_script_setup_true_lang.js +11 -4
  113. package/dist/components/kbd/Kbd.vue_vue_type_script_setup_true_lang.js.map +1 -1
  114. package/dist/components/link/Link.js.map +1 -1
  115. package/dist/components/link/Link.vue_vue_type_script_setup_true_lang.js +10 -3
  116. package/dist/components/link/Link.vue_vue_type_script_setup_true_lang.js.map +1 -1
  117. package/dist/components/list-box/ListBox.js.map +1 -1
  118. package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js +12 -2
  119. package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  120. package/dist/components/list-box/ListBoxItem.js.map +1 -1
  121. package/dist/components/list-box/ListBoxItem.vue_vue_type_script_setup_true_lang.js +13 -3
  122. package/dist/components/list-box/ListBoxItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  123. package/dist/components/meter/Meter.js.map +1 -1
  124. package/dist/components/meter/Meter.vue_vue_type_script_setup_true_lang.js +19 -12
  125. package/dist/components/meter/Meter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  126. package/dist/components/number-field/NumberField.js.map +1 -1
  127. package/dist/components/number-field/NumberField.vue_vue_type_script_setup_true_lang.js +13 -6
  128. package/dist/components/number-field/NumberField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  129. package/dist/components/progress-bar/ProgressBar.js.map +1 -1
  130. package/dist/components/progress-bar/ProgressBar.vue_vue_type_script_setup_true_lang.js +14 -7
  131. package/dist/components/progress-bar/ProgressBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  132. package/dist/components/progress-circle/ProgressCircle.js.map +1 -1
  133. package/dist/components/progress-circle/ProgressCircle.vue_vue_type_script_setup_true_lang.js +13 -6
  134. package/dist/components/progress-circle/ProgressCircle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  135. package/dist/components/radio/Radio.js.map +1 -1
  136. package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js +13 -3
  137. package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js.map +1 -1
  138. package/dist/components/range-calendar/RangeCalendar.js.map +1 -1
  139. package/dist/components/range-calendar/RangeCalendar.vue_vue_type_script_setup_true_lang.js +48 -41
  140. package/dist/components/range-calendar/RangeCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  141. package/dist/components/scroll-shadow/ScrollShadow.js.map +1 -1
  142. package/dist/components/scroll-shadow/ScrollShadow.vue_vue_type_script_setup_true_lang.js +9 -2
  143. package/dist/components/scroll-shadow/ScrollShadow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  144. package/dist/components/select/Select.js.map +1 -1
  145. package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js +14 -7
  146. package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js.map +1 -1
  147. package/dist/components/skeleton/Skeleton.js.map +1 -1
  148. package/dist/components/skeleton/Skeleton.vue_vue_type_script_setup_true_lang.js +9 -2
  149. package/dist/components/skeleton/Skeleton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  150. package/dist/components/slider/Slider.js.map +1 -1
  151. package/dist/components/slider/Slider.vue_vue_type_script_setup_true_lang.js +14 -7
  152. package/dist/components/slider/Slider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  153. package/dist/components/splitter/SplitterGroup.js.map +1 -1
  154. package/dist/components/splitter/SplitterGroup.vue_vue_type_script_setup_true_lang.js +12 -2
  155. package/dist/components/splitter/SplitterGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  156. package/dist/components/splitter/SplitterPanel.js.map +1 -1
  157. package/dist/components/splitter/SplitterPanel.vue_vue_type_script_setup_true_lang.js +12 -2
  158. package/dist/components/splitter/SplitterPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  159. package/dist/components/splitter/SplitterResizeHandle.js.map +1 -1
  160. package/dist/components/splitter/SplitterResizeHandle.vue_vue_type_script_setup_true_lang.js +13 -3
  161. package/dist/components/splitter/SplitterResizeHandle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  162. package/dist/components/stepper/Stepper.js.map +1 -1
  163. package/dist/components/stepper/Stepper.vue_vue_type_script_setup_true_lang.js +12 -2
  164. package/dist/components/stepper/Stepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  165. package/dist/components/stepper/StepperContent.js.map +1 -1
  166. package/dist/components/stepper/StepperContent.vue_vue_type_script_setup_true_lang.js +14 -2
  167. package/dist/components/stepper/StepperContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  168. package/dist/components/stepper/StepperDescription.js.map +1 -1
  169. package/dist/components/stepper/StepperDescription.vue_vue_type_script_setup_true_lang.js +14 -2
  170. package/dist/components/stepper/StepperDescription.vue_vue_type_script_setup_true_lang.js.map +1 -1
  171. package/dist/components/stepper/StepperIndicator.js.map +1 -1
  172. package/dist/components/stepper/StepperIndicator.vue_vue_type_script_setup_true_lang.js +14 -2
  173. package/dist/components/stepper/StepperIndicator.vue_vue_type_script_setup_true_lang.js.map +1 -1
  174. package/dist/components/stepper/StepperItem.js.map +1 -1
  175. package/dist/components/stepper/StepperItem.vue_vue_type_script_setup_true_lang.js +12 -2
  176. package/dist/components/stepper/StepperItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  177. package/dist/components/stepper/StepperSeparator.js.map +1 -1
  178. package/dist/components/stepper/StepperSeparator.vue_vue_type_script_setup_true_lang.js +14 -2
  179. package/dist/components/stepper/StepperSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -1
  180. package/dist/components/stepper/StepperTitle.js.map +1 -1
  181. package/dist/components/stepper/StepperTitle.vue_vue_type_script_setup_true_lang.js +14 -2
  182. package/dist/components/stepper/StepperTitle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  183. package/dist/components/switch/Switch.js.map +1 -1
  184. package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js +11 -4
  185. package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  186. package/dist/components/table/Table.js.map +1 -1
  187. package/dist/components/table/Table.vue_vue_type_script_setup_true_lang.js +4 -3
  188. package/dist/components/table/Table.vue_vue_type_script_setup_true_lang.js.map +1 -1
  189. package/dist/components/table/TableBody.js.map +1 -1
  190. package/dist/components/table/TableBody.vue_vue_type_script_setup_true_lang.js +6 -3
  191. package/dist/components/table/TableBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
  192. package/dist/components/table/TableCell.js.map +1 -1
  193. package/dist/components/table/TableCell.vue_vue_type_script_setup_true_lang.js +6 -3
  194. package/dist/components/table/TableCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  195. package/dist/components/table/TableFooter.js.map +1 -1
  196. package/dist/components/table/TableFooter.vue_vue_type_script_setup_true_lang.js +5 -2
  197. package/dist/components/table/TableFooter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  198. package/dist/components/table/TableHeader.js.map +1 -1
  199. package/dist/components/table/TableHeader.vue_vue_type_script_setup_true_lang.js +6 -3
  200. package/dist/components/table/TableHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  201. package/dist/components/table/TableHeaderCell.js.map +1 -1
  202. package/dist/components/table/TableHeaderCell.vue_vue_type_script_setup_true_lang.js +6 -3
  203. package/dist/components/table/TableHeaderCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  204. package/dist/components/table/TableRow.js.map +1 -1
  205. package/dist/components/table/TableRow.vue_vue_type_script_setup_true_lang.js +14 -2
  206. package/dist/components/table/TableRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  207. package/dist/components/table/TableVirtualBody.js.map +1 -1
  208. package/dist/components/table/TableVirtualBody.vue_vue_type_script_setup_true_lang.js +6 -4
  209. package/dist/components/table/TableVirtualBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
  210. package/dist/components/tabs/Tab.js.map +1 -1
  211. package/dist/components/tabs/Tab.vue_vue_type_script_setup_true_lang.js +9 -2
  212. package/dist/components/tabs/Tab.vue_vue_type_script_setup_true_lang.js.map +1 -1
  213. package/dist/components/tabs/TabIndicator.js.map +1 -1
  214. package/dist/components/tabs/TabIndicator.vue_vue_type_script_setup_true_lang.js +11 -2
  215. package/dist/components/tabs/TabIndicator.vue_vue_type_script_setup_true_lang.js.map +1 -1
  216. package/dist/components/tabs/TabList.js.map +1 -1
  217. package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js +11 -4
  218. package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  219. package/dist/components/tabs/TabPanel.js.map +1 -1
  220. package/dist/components/tabs/TabPanel.vue_vue_type_script_setup_true_lang.js +9 -2
  221. package/dist/components/tabs/TabPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  222. package/dist/components/tabs/Tabs.js.map +1 -1
  223. package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js +9 -2
  224. package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  225. package/dist/components/textarea/Textarea.js.map +1 -1
  226. package/dist/components/textarea/Textarea.vue_vue_type_script_setup_true_lang.js +20 -13
  227. package/dist/components/textarea/Textarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  228. package/dist/components/time-field/TimeField.js.map +1 -1
  229. package/dist/components/time-field/TimeField.vue_vue_type_script_setup_true_lang.js +20 -13
  230. package/dist/components/time-field/TimeField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  231. package/dist/components/tree/Tree.js.map +1 -1
  232. package/dist/components/tree/Tree.vue_vue_type_script_setup_true_lang.js +12 -2
  233. package/dist/components/tree/Tree.vue_vue_type_script_setup_true_lang.js.map +1 -1
  234. package/dist/components/tree/TreeItem.js.map +1 -1
  235. package/dist/components/tree/TreeItem.vue_vue_type_script_setup_true_lang.js +13 -3
  236. package/dist/components/tree/TreeItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  237. package/dist/components/tree/TreeItemToggle.js.map +1 -1
  238. package/dist/components/tree/TreeItemToggle.vue_vue_type_script_setup_true_lang.js +12 -2
  239. package/dist/components/tree/TreeItemToggle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  240. package/dist/index.d.ts +797 -173
  241. package/dist/utils/composeClassName.js +3 -3
  242. package/dist/utils/composeClassName.js.map +1 -1
  243. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/date-picker/DatePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport {\n DatePickerRoot,\n DatePickerTrigger,\n DatePickerContent,\n} from 'reka-ui'\nimport type { DateValue } from '@internationalized/date'\nimport type { CalendarDateTime, ZonedDateTime } from '@internationalized/date'\nimport { datePickerVariants, type DateInputVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport Calendar from '../calendar/Calendar.vue'\nimport DateInput from '../date-input/DateInput.vue'\n\nconst props = withDefaults(defineProps<{\n /* Field appearance — forwarded to DateInput */\n variant?: DateInputVariants['variant']\n size?: DateInputVariants['size']\n color?: DateInputVariants['color']\n labelPlacement?: DateInputVariants['labelPlacement']\n fullWidth?: boolean\n\n defaultValue?: DateValue\n defaultOpen?: boolean\n placeholderValue?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n isDateUnavailable?: (date: DateValue) => boolean\n isDateDisabled?: (date: DateValue) => boolean\n locale?: string\n granularity?: 'day' | 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n label?: string\n description?: string\n errorMessage?: string\n isInvalid?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n name?: string\n hideTimeZone?: boolean\n visibleMonths?: number\n pageBehavior?: 'visible' | 'single'\n closeOnSelect?: boolean\n modal?: boolean\n class?: string\n}>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n closeOnSelect: true,\n modal: false,\n visibleMonths: 1,\n defaultOpen: false,\n})\n\nconst modelValue = defineModel<DateValue | null | undefined>('modelValue')\nconst openModel = defineModel<boolean>('open')\n\nconst slotFns = computed(() => datePickerVariants())\n\n// Sync Calendar's `DateValue` v-model with DatePicker's `DateValue | null` model,\n// and close the popover on selection when closeOnSelect is enabled.\n// When the current value carries a time component (CalendarDateTime / ZonedDateTime),\n// preserve it so clicking a date in the calendar doesn't wipe out the time the user\n// typed into the field segments.\nconst calendarValue = computed<DateValue | undefined>({\n get: () => modelValue.value ?? undefined,\n set: (val) => {\n if (val != null && modelValue.value != null && 'hour' in modelValue.value) {\n const existing = modelValue.value as CalendarDateTime | ZonedDateTime\n modelValue.value = existing.set({ year: val.year, month: val.month, day: val.day })\n } else {\n modelValue.value = val ?? null\n }\n if (props.closeOnSelect && val != null) {\n openModel.value = false\n }\n },\n})\n</script>\n\n<template>\n <DatePickerRoot\n v-model=\"modelValue\"\n v-model:open=\"openModel\"\n :default-value=\"defaultValue\"\n :default-open=\"defaultOpen\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-unavailable=\"isDateUnavailable\"\n :is-date-disabled=\"isDateDisabled\"\n :locale=\"locale\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :number-of-months=\"visibleMonths\"\n :class=\"composeClassName(slotFns.base(), props.class)\"\n data-slot=\"date-picker\"\n >\n <!-- DateInput hosts label/helper/field; trigger sits in its endContent slot -->\n <DateInput\n v-model=\"modelValue\"\n :variant=\"variant\"\n :size=\"size\"\n :color=\"color\"\n :label-placement=\"labelPlacement\"\n :full-width=\"fullWidth\"\n :default-value=\"defaultValue\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :locale=\"locale\"\n :label=\"label\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :is-invalid=\"isInvalid\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n :is-required=\"isRequired\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n >\n <template #endContent>\n <DatePickerTrigger\n :class=\"slotFns.trigger()\"\n aria-label=\"Open date picker\"\n @mousedown.prevent\n >\n <slot name=\"selectorIcon\">\n <svg\n :class=\"slotFns.triggerIndicator()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n />\n <line\n x1=\"16\"\n y1=\"2\"\n x2=\"16\"\n y2=\"6\"\n />\n <line\n x1=\"8\"\n y1=\"2\"\n x2=\"8\"\n y2=\"6\"\n />\n <line\n x1=\"3\"\n y1=\"10\"\n x2=\"21\"\n y2=\"10\"\n />\n </svg>\n </slot>\n </DatePickerTrigger>\n </template>\n </DateInput>\n\n <!-- Popover (portaled + positioned by Reka) -->\n <DatePickerContent\n :class=\"slotFns.popover()\"\n data-slot=\"popover\"\n :side-offset=\"8\"\n >\n <slot name=\"calendarTopContent\" />\n\n <Calendar\n v-model=\"calendarValue\"\n :default-value=\"defaultValue\"\n :default-placeholder=\"placeholderValue ?? defaultValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-disabled=\"isDateDisabled\"\n :is-date-unavailable=\"isDateUnavailable\"\n :locale=\"locale\"\n :number-of-months=\"visibleMonths\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n />\n\n <slot name=\"calendarBottomContent\" />\n </DatePickerContent>\n </DatePickerRoot>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"DatePicker.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/date-picker/DatePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport {\n DatePickerRoot,\n DatePickerTrigger,\n DatePickerContent,\n} from 'reka-ui'\nimport type { DateValue } from '@internationalized/date'\nimport type { CalendarDateTime, ZonedDateTime } from '@internationalized/date'\nimport { datePickerVariants, type DateInputVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport Calendar from '../calendar/Calendar.vue'\nimport DateInput from '../date-input/DateInput.vue'\n\nconst props = withDefaults(defineProps<{\n /* Field appearance — forwarded to DateInput */\n variant?: DateInputVariants['variant']\n size?: DateInputVariants['size']\n color?: DateInputVariants['color']\n labelPlacement?: DateInputVariants['labelPlacement']\n fullWidth?: boolean\n\n defaultValue?: DateValue\n defaultOpen?: boolean\n placeholderValue?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n isDateUnavailable?: (date: DateValue) => boolean\n isDateDisabled?: (date: DateValue) => boolean\n locale?: string\n granularity?: 'day' | 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n label?: string\n description?: string\n errorMessage?: string\n isInvalid?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n name?: string\n hideTimeZone?: boolean\n visibleMonths?: number\n pageBehavior?: 'visible' | 'single'\n closeOnSelect?: boolean\n modal?: boolean\n class?: ClassValue\n /** Override classes for individual slots (base, trigger, triggerIndicator, popover) */\n classNames?: Partial<{\n base: ClassValue\n trigger: ClassValue\n triggerIndicator: ClassValue\n popover: ClassValue\n }>\n}>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n closeOnSelect: true,\n modal: false,\n visibleMonths: 1,\n defaultOpen: false,\n})\n\nconst modelValue = defineModel<DateValue | null | undefined>('modelValue')\nconst openModel = defineModel<boolean>('open')\n\nconst slotFns = computed(() => datePickerVariants())\n\n// Sync Calendar's `DateValue` v-model with DatePicker's `DateValue | null` model,\n// and close the popover on selection when closeOnSelect is enabled.\n// When the current value carries a time component (CalendarDateTime / ZonedDateTime),\n// preserve it so clicking a date in the calendar doesn't wipe out the time the user\n// typed into the field segments.\nconst calendarValue = computed<DateValue | undefined>({\n get: () => modelValue.value ?? undefined,\n set: (val) => {\n if (val != null && modelValue.value != null && 'hour' in modelValue.value) {\n const existing = modelValue.value as CalendarDateTime | ZonedDateTime\n modelValue.value = existing.set({ year: val.year, month: val.month, day: val.day })\n } else {\n modelValue.value = val ?? null\n }\n if (props.closeOnSelect && val != null) {\n openModel.value = false\n }\n },\n})\n</script>\n\n<template>\n <DatePickerRoot\n v-model=\"modelValue\"\n v-model:open=\"openModel\"\n :default-value=\"defaultValue\"\n :default-open=\"defaultOpen\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-unavailable=\"isDateUnavailable\"\n :is-date-disabled=\"isDateDisabled\"\n :locale=\"locale\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :number-of-months=\"visibleMonths\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n data-slot=\"date-picker\"\n >\n <!-- DateInput hosts label/helper/field; trigger sits in its endContent slot -->\n <DateInput\n v-model=\"modelValue\"\n :variant=\"variant\"\n :size=\"size\"\n :color=\"color\"\n :label-placement=\"labelPlacement\"\n :full-width=\"fullWidth\"\n :default-value=\"defaultValue\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :locale=\"locale\"\n :label=\"label\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :is-invalid=\"isInvalid\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n :is-required=\"isRequired\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n >\n <template #endContent>\n <DatePickerTrigger\n :class=\"composeClassName(slotFns.trigger(), props.classNames?.trigger)\"\n aria-label=\"Open date picker\"\n @mousedown.prevent\n >\n <slot name=\"selectorIcon\">\n <svg\n :class=\"composeClassName(slotFns.triggerIndicator(), props.classNames?.triggerIndicator)\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n />\n <line\n x1=\"16\"\n y1=\"2\"\n x2=\"16\"\n y2=\"6\"\n />\n <line\n x1=\"8\"\n y1=\"2\"\n x2=\"8\"\n y2=\"6\"\n />\n <line\n x1=\"3\"\n y1=\"10\"\n x2=\"21\"\n y2=\"10\"\n />\n </svg>\n </slot>\n </DatePickerTrigger>\n </template>\n </DateInput>\n\n <!-- Popover (portaled + positioned by Reka) -->\n <DatePickerContent\n :class=\"composeClassName(slotFns.popover(), props.classNames?.popover)\"\n data-slot=\"popover\"\n :side-offset=\"8\"\n >\n <slot name=\"calendarTopContent\" />\n\n <Calendar\n v-model=\"calendarValue\"\n :default-value=\"defaultValue\"\n :default-placeholder=\"placeholderValue ?? defaultValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-disabled=\"isDateDisabled\"\n :is-date-unavailable=\"isDateUnavailable\"\n :locale=\"locale\"\n :number-of-months=\"visibleMonths\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n />\n\n <slot name=\"calendarBottomContent\" />\n </DatePickerContent>\n </DatePickerRoot>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangeField.js","names":[],"sources":["../../../src/components/date-range-field/DateRangeField.vue"],"sourcesContent":["<!--\n DateRangeField — form-field mirror of DateInput.vue for a date range.\n\n Same prop surface, data-attribute contract, floating-label behavior,\n start/end content slots, and a11y wiring as DateInput. Renders TWO\n segment lists (start + end) separated by a visible \"–\" glyph.\n-->\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs, useId, watch } from 'vue'\nimport { DateRangeFieldRoot, DateRangeFieldInput } from 'reka-ui'\nimport type { DateValue } from '@internationalized/date'\nimport { dateRangeFieldVariants, type DateRangeFieldVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n})\n\nconst modelValue = defineModel<DateRange | null | undefined>()\n\nexport interface DateRange {\n start: DateValue\n end: DateValue\n}\n\ntype Props = {\n /** Visual style of the field. @default 'flat' */\n variant?: DateRangeFieldVariants['variant']\n /** Field height. @default 'md' */\n size?: DateRangeFieldVariants['size']\n /** Accent color applied to focus ring + floating label. @default 'default' */\n color?: DateRangeFieldVariants['color']\n /** Label placement relative to the field. @default 'inside' */\n labelPlacement?: DateRangeFieldVariants['labelPlacement']\n /** Stretches root wrapper to 100% width. @default false */\n fullWidth?: boolean\n /** Marks the field as invalid. @default false */\n isInvalid?: boolean\n /** Disables the field. @default false */\n isDisabled?: boolean\n /** Makes the field read-only. @default false */\n isReadOnly?: boolean\n /** Adds a required asterisk next to the label. @default false */\n isRequired?: boolean\n /** Field label. When omitted, floating-label behavior is skipped. */\n label?: string\n /** Helper text below the field. Suppressed when isInvalid && errorMessage is shown. */\n description?: string\n /** Error text below the field. Only rendered when isInvalid is true. */\n errorMessage?: string\n /** Extra classes merged onto the root wrapper. */\n class?: string\n\n /* ─── DateRangeField-specific ─────────────────────────────────── */\n defaultValue?: DateRange\n placeholderValue?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n granularity?: 'day' | 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n locale?: string\n name?: string\n hideTimeZone?: boolean\n}\n\nconst attrs = useAttrs()\nconst generatedId = useId()\nconst fieldId = computed(() => (attrs.id as string | undefined) ?? `${generatedId}-field`)\nconst labelId = computed(() => `${generatedId}-label`)\nconst descriptionId = computed(() => `${generatedId}-description`)\nconst errorMessageId = computed(() => `${generatedId}-error`)\n\nconst hasLabel = computed(() => !!props.label)\nconst isFilled = computed(() => modelValue.value?.start != null || modelValue.value?.end != null)\n\nconst showError = computed(() => props.isInvalid && !!props.errorMessage)\nconst showDescription = computed(() => !!props.description && !showError.value)\nconst hasHelper = computed(() => showError.value || showDescription.value)\nconst ariaDescribedBy = computed(() => {\n if (showError.value) return errorMessageId.value\n if (showDescription.value) return descriptionId.value\n return undefined\n})\n\nconst fieldRef = ref<HTMLElement | null>(null)\nconst fieldEl = computed<HTMLElement | null>(() => {\n const r = fieldRef.value as unknown as { $el?: HTMLElement } | HTMLElement | null\n if (!r) return null\n if (r instanceof HTMLElement) return r\n return r.$el ?? null\n})\n\n// `isFocused` tracks focus on a DATE SEGMENT specifically — not any descendant.\nconst isFocused = ref(false)\nfunction updateSegmentFocus() {\n const root = fieldEl.value\n if (!root) { isFocused.value = false; return }\n const active = (root.ownerDocument ?? document).activeElement as HTMLElement | null\n isFocused.value = !!active\n && root.contains(active)\n && active.hasAttribute('data-reka-date-field-segment')\n}\nfunction onDocFocusIn() { updateSegmentFocus() }\nfunction onDocFocusOut() { queueMicrotask(updateSegmentFocus) }\n\n// Guard against focus snap-back after an outside click.\nlet suppressSegmentFocusUntil = 0\nfunction onDocPointerDown(e: PointerEvent) {\n const root = fieldEl.value\n if (!root) return\n const target = e.target as Node | null\n if (!target || root.contains(target)) return\n suppressSegmentFocusUntil = performance.now() + 250\n const active = (root.ownerDocument ?? document).activeElement as HTMLElement | null\n if (active && root.contains(active) && active.hasAttribute('data-reka-date-field-segment')) {\n active.blur()\n }\n}\nfunction onDocFocusInGuard(e: FocusEvent) {\n if (performance.now() >= suppressSegmentFocusUntil) return\n const root = fieldEl.value\n if (!root) return\n const t = e.target as HTMLElement | null\n if (t && root.contains(t) && t.hasAttribute?.('data-reka-date-field-segment')) {\n t.blur()\n }\n}\n\nonMounted(() => {\n document.addEventListener('focusin', onDocFocusIn)\n document.addEventListener('focusout', onDocFocusOut)\n document.addEventListener('pointerdown', onDocPointerDown, true)\n document.addEventListener('focusin', onDocFocusInGuard, true)\n})\nonBeforeUnmount(() => {\n document.removeEventListener('focusin', onDocFocusIn)\n document.removeEventListener('focusout', onDocFocusOut)\n document.removeEventListener('pointerdown', onDocPointerDown, true)\n document.removeEventListener('focusin', onDocFocusInGuard, true)\n})\n\n// Track data-filled by sniffing rendered segments across BOTH segment lists.\nconst segmentsFilled = ref(false)\nfunction recomputeFilled() {\n const root = fieldEl.value\n if (!root || typeof root.querySelectorAll !== 'function') {\n segmentsFilled.value = false\n return\n }\n const segs = root.querySelectorAll('[data-reka-date-field-segment]:not([data-reka-date-field-segment=\"literal\"])')\n let anyFilled = false\n segs.forEach((el) => {\n if ((el as HTMLElement).dataset.placeholder === 'false') anyFilled = true\n })\n segmentsFilled.value = anyFilled\n}\nwatch([modelValue, () => props.defaultValue, () => props.granularity], () => {\n queueMicrotask(recomputeFilled)\n}, { immediate: true })\n\nconst effectiveFilled = computed(() => isFilled.value || segmentsFilled.value)\n\nfunction handleFieldMousedown(e: MouseEvent) {\n const target = e.target as HTMLElement | null\n if (!target) return\n if (target.closest('[data-reka-date-field-segment]')) return\n if (target.closest('[data-slot=\"start-content\"]')) return\n if (target.closest('[data-slot=\"end-content\"]')) return\n if (target.closest('button, [role=\"button\"]')) return\n const root = fieldEl.value\n if (!root) return\n const active = (root.ownerDocument ?? document).activeElement as HTMLElement | null\n if (active && root.contains(active) && active.hasAttribute('data-reka-date-field-segment')) {\n return\n }\n const first = root.querySelector<HTMLElement>(\n '[data-reka-date-field-segment]:not([data-reka-date-field-segment=\"literal\"])',\n )\n if (first) {\n e.preventDefault()\n first.focus()\n }\n}\n\nconst slotFns = computed(() =>\n dateRangeFieldVariants({\n variant: props.variant,\n size: props.size,\n color: props.color,\n fullWidth: props.fullWidth,\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n isReadonly: props.isReadOnly,\n hasLabel: hasLabel.value,\n labelPlacement: props.labelPlacement,\n }),\n)\n\nconst showOutsideLabel = computed(\n () => hasLabel.value && props.labelPlacement !== 'inside',\n)\nconst showInsideLabel = computed(\n () => hasLabel.value && props.labelPlacement === 'inside',\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class)\"\n :data-invalid=\"isInvalid || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-readonly=\"isReadOnly || undefined\"\n :data-required=\"isRequired || undefined\"\n :data-has-label=\"hasLabel || undefined\"\n :data-has-helper=\"hasHelper || undefined\"\n data-slot=\"date-range-field\"\n >\n <label\n v-if=\"showOutsideLabel\"\n :id=\"labelId\"\n :for=\"fieldId\"\n :class=\"slotFns.label()\"\n >{{ label }}<span\n v-if=\"isRequired\"\n aria-hidden=\"true\"\n > *</span></label>\n\n <div :class=\"slotFns.mainWrapper()\">\n <DateRangeFieldRoot\n :id=\"fieldId\"\n ref=\"fieldRef\"\n v-model=\"modelValue\"\n :default-value=\"defaultValue\"\n :placeholder=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :locale=\"locale\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n :aria-labelledby=\"hasLabel ? labelId : undefined\"\n :aria-describedby=\"ariaDescribedBy\"\n :aria-required=\"isRequired || undefined\"\n :aria-invalid=\"isInvalid || undefined\"\n :class=\"slotFns.inputWrapper()\"\n :data-filled=\"hasLabel ? (effectiveFilled || undefined) : undefined\"\n :data-focused=\"isFocused || undefined\"\n :data-invalid=\"isInvalid || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-readonly=\"isReadOnly || undefined\"\n @mousedown=\"handleFieldMousedown\"\n >\n <template #default=\"{ segments }\">\n <label\n v-if=\"showInsideLabel\"\n :id=\"labelId\"\n :for=\"fieldId\"\n :class=\"slotFns.label()\"\n >{{ label }}<span\n v-if=\"isRequired\"\n aria-hidden=\"true\"\n > *</span></label>\n\n <span\n v-if=\"$slots.startContent\"\n :class=\"slotFns.startContent()\"\n data-slot=\"start-content\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <div\n :class=\"slotFns.segmentList()\"\n data-slot=\"segment-list\"\n data-type=\"start\"\n >\n <template\n v-for=\"(segment, _i) in segments.start\"\n :key=\"`start-${_i}`\"\n >\n <DateRangeFieldInput\n :part=\"segment.part\"\n type=\"start\"\n :class=\"slotFns.segment()\"\n >\n {{ segment.value }}\n </DateRangeFieldInput>\n </template>\n </div>\n\n <span\n :class=\"slotFns.separator()\"\n aria-hidden=\"true\"\n data-slot=\"separator\"\n >–</span>\n\n <div\n :class=\"slotFns.segmentList()\"\n data-slot=\"segment-list\"\n data-type=\"end\"\n >\n <template\n v-for=\"(segment, _i) in segments.end\"\n :key=\"`end-${_i}`\"\n >\n <DateRangeFieldInput\n :part=\"segment.part\"\n type=\"end\"\n :class=\"slotFns.segment()\"\n >\n {{ segment.value }}\n </DateRangeFieldInput>\n </template>\n </div>\n\n <span\n v-if=\"$slots.endContent\"\n :class=\"slotFns.endContent()\"\n data-slot=\"end-content\"\n >\n <slot name=\"endContent\" />\n </span>\n </template>\n </DateRangeFieldRoot>\n\n <div\n v-if=\"hasHelper\"\n :class=\"slotFns.helperWrapper()\"\n >\n <div\n v-if=\"showError\"\n :id=\"errorMessageId\"\n :class=\"slotFns.errorMessage()\"\n role=\"alert\"\n >\n {{ errorMessage }}\n </div>\n <div\n v-else-if=\"showDescription\"\n :id=\"descriptionId\"\n :class=\"slotFns.description()\"\n >\n {{ description }}\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"DateRangeField.js","names":[],"sources":["../../../src/components/date-range-field/DateRangeField.vue"],"sourcesContent":["<!--\n DateRangeField — form-field mirror of DateInput.vue for a date range.\n\n Same prop surface, data-attribute contract, floating-label behavior,\n start/end content slots, and a11y wiring as DateInput. Renders TWO\n segment lists (start + end) separated by a visible \"–\" glyph.\n-->\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs, useId, watch } from 'vue'\nimport { DateRangeFieldRoot, DateRangeFieldInput } from 'reka-ui'\nimport type { DateValue } from '@internationalized/date'\nimport { dateRangeFieldVariants, type DateRangeFieldVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n})\n\nconst modelValue = defineModel<DateRange | null | undefined>()\n\nexport interface DateRange {\n start: DateValue\n end: DateValue\n}\n\ntype Props = {\n /** Visual style of the field. @default 'flat' */\n variant?: DateRangeFieldVariants['variant']\n /** Field height. @default 'md' */\n size?: DateRangeFieldVariants['size']\n /** Accent color applied to focus ring + floating label. @default 'default' */\n color?: DateRangeFieldVariants['color']\n /** Label placement relative to the field. @default 'inside' */\n labelPlacement?: DateRangeFieldVariants['labelPlacement']\n /** Stretches root wrapper to 100% width. @default false */\n fullWidth?: boolean\n /** Marks the field as invalid. @default false */\n isInvalid?: boolean\n /** Disables the field. @default false */\n isDisabled?: boolean\n /** Makes the field read-only. @default false */\n isReadOnly?: boolean\n /** Adds a required asterisk next to the label. @default false */\n isRequired?: boolean\n /** Field label. When omitted, floating-label behavior is skipped. */\n label?: string\n /** Helper text below the field. Suppressed when isInvalid && errorMessage is shown. */\n description?: string\n /** Error text below the field. Only rendered when isInvalid is true. */\n errorMessage?: string\n /** Extra classes merged onto the root wrapper. */\n class?: ClassValue\n /** Per-slot class overrides. Merged with tailwind-variants styles. */\n classNames?: Partial<{\n base: ClassValue\n label: ClassValue\n mainWrapper: ClassValue\n inputWrapper: ClassValue\n startContent: ClassValue\n segmentList: ClassValue\n segment: ClassValue\n separator: ClassValue\n endContent: ClassValue\n helperWrapper: ClassValue\n errorMessage: ClassValue\n description: ClassValue\n }>\n\n /* ─── DateRangeField-specific ─────────────────────────────────── */\n defaultValue?: DateRange\n placeholderValue?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n granularity?: 'day' | 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n locale?: string\n name?: string\n hideTimeZone?: boolean\n}\n\nconst attrs = useAttrs()\nconst generatedId = useId()\nconst fieldId = computed(() => (attrs.id as string | undefined) ?? `${generatedId}-field`)\nconst labelId = computed(() => `${generatedId}-label`)\nconst descriptionId = computed(() => `${generatedId}-description`)\nconst errorMessageId = computed(() => `${generatedId}-error`)\n\nconst hasLabel = computed(() => !!props.label)\nconst isFilled = computed(() => modelValue.value?.start != null || modelValue.value?.end != null)\n\nconst showError = computed(() => props.isInvalid && !!props.errorMessage)\nconst showDescription = computed(() => !!props.description && !showError.value)\nconst hasHelper = computed(() => showError.value || showDescription.value)\nconst ariaDescribedBy = computed(() => {\n if (showError.value) return errorMessageId.value\n if (showDescription.value) return descriptionId.value\n return undefined\n})\n\nconst fieldRef = ref<HTMLElement | null>(null)\nconst fieldEl = computed<HTMLElement | null>(() => {\n const r = fieldRef.value as unknown as { $el?: HTMLElement } | HTMLElement | null\n if (!r) return null\n if (r instanceof HTMLElement) return r\n return r.$el ?? null\n})\n\n// `isFocused` tracks focus on a DATE SEGMENT specifically — not any descendant.\nconst isFocused = ref(false)\nfunction updateSegmentFocus() {\n const root = fieldEl.value\n if (!root) { isFocused.value = false; return }\n const active = (root.ownerDocument ?? document).activeElement as HTMLElement | null\n isFocused.value = !!active\n && root.contains(active)\n && active.hasAttribute('data-reka-date-field-segment')\n}\nfunction onDocFocusIn() { updateSegmentFocus() }\nfunction onDocFocusOut() { queueMicrotask(updateSegmentFocus) }\n\n// Guard against focus snap-back after an outside click.\nlet suppressSegmentFocusUntil = 0\nfunction onDocPointerDown(e: PointerEvent) {\n const root = fieldEl.value\n if (!root) return\n const target = e.target as Node | null\n if (!target || root.contains(target)) return\n suppressSegmentFocusUntil = performance.now() + 250\n const active = (root.ownerDocument ?? document).activeElement as HTMLElement | null\n if (active && root.contains(active) && active.hasAttribute('data-reka-date-field-segment')) {\n active.blur()\n }\n}\nfunction onDocFocusInGuard(e: FocusEvent) {\n if (performance.now() >= suppressSegmentFocusUntil) return\n const root = fieldEl.value\n if (!root) return\n const t = e.target as HTMLElement | null\n if (t && root.contains(t) && t.hasAttribute?.('data-reka-date-field-segment')) {\n t.blur()\n }\n}\n\nonMounted(() => {\n document.addEventListener('focusin', onDocFocusIn)\n document.addEventListener('focusout', onDocFocusOut)\n document.addEventListener('pointerdown', onDocPointerDown, true)\n document.addEventListener('focusin', onDocFocusInGuard, true)\n})\nonBeforeUnmount(() => {\n document.removeEventListener('focusin', onDocFocusIn)\n document.removeEventListener('focusout', onDocFocusOut)\n document.removeEventListener('pointerdown', onDocPointerDown, true)\n document.removeEventListener('focusin', onDocFocusInGuard, true)\n})\n\n// Track data-filled by sniffing rendered segments across BOTH segment lists.\nconst segmentsFilled = ref(false)\nfunction recomputeFilled() {\n const root = fieldEl.value\n if (!root || typeof root.querySelectorAll !== 'function') {\n segmentsFilled.value = false\n return\n }\n const segs = root.querySelectorAll('[data-reka-date-field-segment]:not([data-reka-date-field-segment=\"literal\"])')\n let anyFilled = false\n segs.forEach((el) => {\n if ((el as HTMLElement).dataset.placeholder === 'false') anyFilled = true\n })\n segmentsFilled.value = anyFilled\n}\nwatch([modelValue, () => props.defaultValue, () => props.granularity], () => {\n queueMicrotask(recomputeFilled)\n}, { immediate: true })\n\nconst effectiveFilled = computed(() => isFilled.value || segmentsFilled.value)\n\nfunction handleFieldMousedown(e: MouseEvent) {\n const target = e.target as HTMLElement | null\n if (!target) return\n if (target.closest('[data-reka-date-field-segment]')) return\n if (target.closest('[data-slot=\"start-content\"]')) return\n if (target.closest('[data-slot=\"end-content\"]')) return\n if (target.closest('button, [role=\"button\"]')) return\n const root = fieldEl.value\n if (!root) return\n const active = (root.ownerDocument ?? document).activeElement as HTMLElement | null\n if (active && root.contains(active) && active.hasAttribute('data-reka-date-field-segment')) {\n return\n }\n const first = root.querySelector<HTMLElement>(\n '[data-reka-date-field-segment]:not([data-reka-date-field-segment=\"literal\"])',\n )\n if (first) {\n e.preventDefault()\n first.focus()\n }\n}\n\nconst slotFns = computed(() =>\n dateRangeFieldVariants({\n variant: props.variant,\n size: props.size,\n color: props.color,\n fullWidth: props.fullWidth,\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n isReadonly: props.isReadOnly,\n hasLabel: hasLabel.value,\n labelPlacement: props.labelPlacement,\n }),\n)\n\nconst showOutsideLabel = computed(\n () => hasLabel.value && props.labelPlacement !== 'inside',\n)\nconst showInsideLabel = computed(\n () => hasLabel.value && props.labelPlacement === 'inside',\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :data-invalid=\"isInvalid || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-readonly=\"isReadOnly || undefined\"\n :data-required=\"isRequired || undefined\"\n :data-has-label=\"hasLabel || undefined\"\n :data-has-helper=\"hasHelper || undefined\"\n data-slot=\"date-range-field\"\n >\n <label\n v-if=\"showOutsideLabel\"\n :id=\"labelId\"\n :for=\"fieldId\"\n :class=\"composeClassName(slotFns.label(), props.classNames?.label)\"\n >{{ label }}<span\n v-if=\"isRequired\"\n aria-hidden=\"true\"\n > *</span></label>\n\n <div :class=\"composeClassName(slotFns.mainWrapper(), props.classNames?.mainWrapper)\">\n <DateRangeFieldRoot\n :id=\"fieldId\"\n ref=\"fieldRef\"\n v-model=\"modelValue\"\n :default-value=\"defaultValue\"\n :placeholder=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :locale=\"locale\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n :aria-labelledby=\"hasLabel ? labelId : undefined\"\n :aria-describedby=\"ariaDescribedBy\"\n :aria-required=\"isRequired || undefined\"\n :aria-invalid=\"isInvalid || undefined\"\n :class=\"composeClassName(slotFns.inputWrapper(), props.classNames?.inputWrapper)\"\n :data-filled=\"hasLabel ? (effectiveFilled || undefined) : undefined\"\n :data-focused=\"isFocused || undefined\"\n :data-invalid=\"isInvalid || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-readonly=\"isReadOnly || undefined\"\n @mousedown=\"handleFieldMousedown\"\n >\n <template #default=\"{ segments }\">\n <label\n v-if=\"showInsideLabel\"\n :id=\"labelId\"\n :for=\"fieldId\"\n :class=\"composeClassName(slotFns.label(), props.classNames?.label)\"\n >{{ label }}<span\n v-if=\"isRequired\"\n aria-hidden=\"true\"\n > *</span></label>\n\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n data-slot=\"start-content\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <div\n :class=\"composeClassName(slotFns.segmentList(), props.classNames?.segmentList)\"\n data-slot=\"segment-list\"\n data-type=\"start\"\n >\n <template\n v-for=\"(segment, _i) in segments.start\"\n :key=\"`start-${_i}`\"\n >\n <DateRangeFieldInput\n :part=\"segment.part\"\n type=\"start\"\n :class=\"composeClassName(slotFns.segment(), props.classNames?.segment)\"\n >\n {{ segment.value }}\n </DateRangeFieldInput>\n </template>\n </div>\n\n <span\n :class=\"composeClassName(slotFns.separator(), props.classNames?.separator)\"\n aria-hidden=\"true\"\n data-slot=\"separator\"\n >–</span>\n\n <div\n :class=\"composeClassName(slotFns.segmentList(), props.classNames?.segmentList)\"\n data-slot=\"segment-list\"\n data-type=\"end\"\n >\n <template\n v-for=\"(segment, _i) in segments.end\"\n :key=\"`end-${_i}`\"\n >\n <DateRangeFieldInput\n :part=\"segment.part\"\n type=\"end\"\n :class=\"composeClassName(slotFns.segment(), props.classNames?.segment)\"\n >\n {{ segment.value }}\n </DateRangeFieldInput>\n </template>\n </div>\n\n <span\n v-if=\"$slots.endContent\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n data-slot=\"end-content\"\n >\n <slot name=\"endContent\" />\n </span>\n </template>\n </DateRangeFieldRoot>\n\n <div\n v-if=\"hasHelper\"\n :class=\"composeClassName(slotFns.helperWrapper(), props.classNames?.helperWrapper)\"\n >\n <div\n v-if=\"showError\"\n :id=\"errorMessageId\"\n :class=\"composeClassName(slotFns.errorMessage(), props.classNames?.errorMessage)\"\n role=\"alert\"\n >\n {{ errorMessage }}\n </div>\n <div\n v-else-if=\"showDescription\"\n :id=\"descriptionId\"\n :class=\"composeClassName(slotFns.description(), props.classNames?.description)\"\n >\n {{ description }}\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -54,7 +54,14 @@ var DateRangeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
54
54
  label: {},
55
55
  description: {},
56
56
  errorMessage: {},
57
- class: {},
57
+ class: { type: [
58
+ String,
59
+ Boolean,
60
+ null,
61
+ Object,
62
+ Array
63
+ ] },
64
+ classNames: {},
58
65
  defaultValue: {},
59
66
  placeholderValue: {},
60
67
  minValue: {},
@@ -196,7 +203,7 @@ var DateRangeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
196
203
  const showInsideLabel = computed(() => hasLabel.value && props.labelPlacement === "inside");
197
204
  return (_ctx, _cache) => {
198
205
  return openBlock(), createElementBlock("div", {
199
- class: normalizeClass(unref(composeClassName)(slotFns.value.base(), props.class)),
206
+ class: normalizeClass(unref(composeClassName)(slotFns.value.base(), props.class, props.classNames?.base)),
200
207
  "data-invalid": __props.isInvalid || void 0,
201
208
  "data-disabled": __props.isDisabled || void 0,
202
209
  "data-readonly": __props.isReadOnly || void 0,
@@ -208,8 +215,8 @@ var DateRangeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
208
215
  key: 0,
209
216
  id: labelId.value,
210
217
  for: fieldId.value,
211
- class: normalizeClass(slotFns.value.label())
212
- }, [createTextVNode(toDisplayString(__props.label), 1), __props.isRequired ? (openBlock(), createElementBlock("span", _hoisted_3, " *")) : createCommentVNode("", true)], 10, _hoisted_2)) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(slotFns.value.mainWrapper()) }, [createVNode(unref(DateRangeFieldRoot), {
218
+ class: normalizeClass(unref(composeClassName)(slotFns.value.label(), props.classNames?.label))
219
+ }, [createTextVNode(toDisplayString(__props.label), 1), __props.isRequired ? (openBlock(), createElementBlock("span", _hoisted_3, " *")) : createCommentVNode("", true)], 10, _hoisted_2)) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(unref(composeClassName)(slotFns.value.mainWrapper(), props.classNames?.mainWrapper)) }, [createVNode(unref(DateRangeFieldRoot), {
213
220
  id: fieldId.value,
214
221
  ref_key: "fieldRef",
215
222
  ref: fieldRef,
@@ -230,7 +237,7 @@ var DateRangeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
230
237
  "aria-describedby": ariaDescribedBy.value,
231
238
  "aria-required": __props.isRequired || void 0,
232
239
  "aria-invalid": __props.isInvalid || void 0,
233
- class: normalizeClass(slotFns.value.inputWrapper()),
240
+ class: normalizeClass(unref(composeClassName)(slotFns.value.inputWrapper(), props.classNames?.inputWrapper)),
234
241
  "data-filled": hasLabel.value ? effectiveFilled.value || void 0 : void 0,
235
242
  "data-focused": isFocused.value || void 0,
236
243
  "data-invalid": __props.isInvalid || void 0,
@@ -243,15 +250,15 @@ var DateRangeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
243
250
  key: 0,
244
251
  id: labelId.value,
245
252
  for: fieldId.value,
246
- class: normalizeClass(slotFns.value.label())
253
+ class: normalizeClass(unref(composeClassName)(slotFns.value.label(), props.classNames?.label))
247
254
  }, [createTextVNode(toDisplayString(__props.label), 1), __props.isRequired ? (openBlock(), createElementBlock("span", _hoisted_5, " *")) : createCommentVNode("", true)], 10, _hoisted_4)) : createCommentVNode("", true),
248
255
  _ctx.$slots.startContent ? (openBlock(), createElementBlock("span", {
249
256
  key: 1,
250
- class: normalizeClass(slotFns.value.startContent()),
257
+ class: normalizeClass(unref(composeClassName)(slotFns.value.startContent(), props.classNames?.startContent)),
251
258
  "data-slot": "start-content"
252
259
  }, [renderSlot(_ctx.$slots, "startContent")], 2)) : createCommentVNode("", true),
253
260
  createElementVNode("div", {
254
- class: normalizeClass(slotFns.value.segmentList()),
261
+ class: normalizeClass(unref(composeClassName)(slotFns.value.segmentList(), props.classNames?.segmentList)),
255
262
  "data-slot": "segment-list",
256
263
  "data-type": "start"
257
264
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(segments.start, (segment, _i) => {
@@ -259,19 +266,19 @@ var DateRangeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
259
266
  key: `start-${_i}`,
260
267
  part: segment.part,
261
268
  type: "start",
262
- class: normalizeClass(slotFns.value.segment())
269
+ class: normalizeClass(unref(composeClassName)(slotFns.value.segment(), props.classNames?.segment))
263
270
  }, {
264
271
  default: withCtx(() => [createTextVNode(toDisplayString(segment.value), 1)]),
265
272
  _: 2
266
273
  }, 1032, ["part", "class"]);
267
274
  }), 128))], 2),
268
275
  createElementVNode("span", {
269
- class: normalizeClass(slotFns.value.separator()),
276
+ class: normalizeClass(unref(composeClassName)(slotFns.value.separator(), props.classNames?.separator)),
270
277
  "aria-hidden": "true",
271
278
  "data-slot": "separator"
272
279
  }, "–", 2),
273
280
  createElementVNode("div", {
274
- class: normalizeClass(slotFns.value.segmentList()),
281
+ class: normalizeClass(unref(composeClassName)(slotFns.value.segmentList(), props.classNames?.segmentList)),
275
282
  "data-slot": "segment-list",
276
283
  "data-type": "end"
277
284
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(segments.end, (segment, _i) => {
@@ -279,7 +286,7 @@ var DateRangeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
279
286
  key: `end-${_i}`,
280
287
  part: segment.part,
281
288
  type: "end",
282
- class: normalizeClass(slotFns.value.segment())
289
+ class: normalizeClass(unref(composeClassName)(slotFns.value.segment(), props.classNames?.segment))
283
290
  }, {
284
291
  default: withCtx(() => [createTextVNode(toDisplayString(segment.value), 1)]),
285
292
  _: 2
@@ -287,7 +294,7 @@ var DateRangeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
287
294
  }), 128))], 2),
288
295
  _ctx.$slots.endContent ? (openBlock(), createElementBlock("span", {
289
296
  key: 2,
290
- class: normalizeClass(slotFns.value.endContent()),
297
+ class: normalizeClass(unref(composeClassName)(slotFns.value.endContent(), props.classNames?.endContent)),
291
298
  "data-slot": "end-content"
292
299
  }, [renderSlot(_ctx.$slots, "endContent")], 2)) : createCommentVNode("", true)
293
300
  ]),
@@ -318,16 +325,16 @@ var DateRangeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
318
325
  "data-readonly"
319
326
  ]), hasHelper.value ? (openBlock(), createElementBlock("div", {
320
327
  key: 0,
321
- class: normalizeClass(slotFns.value.helperWrapper())
328
+ class: normalizeClass(unref(composeClassName)(slotFns.value.helperWrapper(), props.classNames?.helperWrapper))
322
329
  }, [showError.value ? (openBlock(), createElementBlock("div", {
323
330
  key: 0,
324
331
  id: errorMessageId.value,
325
- class: normalizeClass(slotFns.value.errorMessage()),
332
+ class: normalizeClass(unref(composeClassName)(slotFns.value.errorMessage(), props.classNames?.errorMessage)),
326
333
  role: "alert"
327
334
  }, toDisplayString(__props.errorMessage), 11, _hoisted_6)) : showDescription.value ? (openBlock(), createElementBlock("div", {
328
335
  key: 1,
329
336
  id: descriptionId.value,
330
- class: normalizeClass(slotFns.value.description())
337
+ class: normalizeClass(unref(composeClassName)(slotFns.value.description(), props.classNames?.description))
331
338
  }, toDisplayString(__props.description), 11, _hoisted_7)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)], 2)], 10, _hoisted_1);
332
339
  };
333
340
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangeField.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/date-range-field/DateRangeField.vue"],"sourcesContent":["<!--\n DateRangeField — form-field mirror of DateInput.vue for a date range.\n\n Same prop surface, data-attribute contract, floating-label behavior,\n start/end content slots, and a11y wiring as DateInput. Renders TWO\n segment lists (start + end) separated by a visible \"–\" glyph.\n-->\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs, useId, watch } from 'vue'\nimport { DateRangeFieldRoot, DateRangeFieldInput } from 'reka-ui'\nimport type { DateValue } from '@internationalized/date'\nimport { dateRangeFieldVariants, type DateRangeFieldVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n})\n\nconst modelValue = defineModel<DateRange | null | undefined>()\n\nexport interface DateRange {\n start: DateValue\n end: DateValue\n}\n\ntype Props = {\n /** Visual style of the field. @default 'flat' */\n variant?: DateRangeFieldVariants['variant']\n /** Field height. @default 'md' */\n size?: DateRangeFieldVariants['size']\n /** Accent color applied to focus ring + floating label. @default 'default' */\n color?: DateRangeFieldVariants['color']\n /** Label placement relative to the field. @default 'inside' */\n labelPlacement?: DateRangeFieldVariants['labelPlacement']\n /** Stretches root wrapper to 100% width. @default false */\n fullWidth?: boolean\n /** Marks the field as invalid. @default false */\n isInvalid?: boolean\n /** Disables the field. @default false */\n isDisabled?: boolean\n /** Makes the field read-only. @default false */\n isReadOnly?: boolean\n /** Adds a required asterisk next to the label. @default false */\n isRequired?: boolean\n /** Field label. When omitted, floating-label behavior is skipped. */\n label?: string\n /** Helper text below the field. Suppressed when isInvalid && errorMessage is shown. */\n description?: string\n /** Error text below the field. Only rendered when isInvalid is true. */\n errorMessage?: string\n /** Extra classes merged onto the root wrapper. */\n class?: string\n\n /* ─── DateRangeField-specific ─────────────────────────────────── */\n defaultValue?: DateRange\n placeholderValue?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n granularity?: 'day' | 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n locale?: string\n name?: string\n hideTimeZone?: boolean\n}\n\nconst attrs = useAttrs()\nconst generatedId = useId()\nconst fieldId = computed(() => (attrs.id as string | undefined) ?? `${generatedId}-field`)\nconst labelId = computed(() => `${generatedId}-label`)\nconst descriptionId = computed(() => `${generatedId}-description`)\nconst errorMessageId = computed(() => `${generatedId}-error`)\n\nconst hasLabel = computed(() => !!props.label)\nconst isFilled = computed(() => modelValue.value?.start != null || modelValue.value?.end != null)\n\nconst showError = computed(() => props.isInvalid && !!props.errorMessage)\nconst showDescription = computed(() => !!props.description && !showError.value)\nconst hasHelper = computed(() => showError.value || showDescription.value)\nconst ariaDescribedBy = computed(() => {\n if (showError.value) return errorMessageId.value\n if (showDescription.value) return descriptionId.value\n return undefined\n})\n\nconst fieldRef = ref<HTMLElement | null>(null)\nconst fieldEl = computed<HTMLElement | null>(() => {\n const r = fieldRef.value as unknown as { $el?: HTMLElement } | HTMLElement | null\n if (!r) return null\n if (r instanceof HTMLElement) return r\n return r.$el ?? null\n})\n\n// `isFocused` tracks focus on a DATE SEGMENT specifically — not any descendant.\nconst isFocused = ref(false)\nfunction updateSegmentFocus() {\n const root = fieldEl.value\n if (!root) { isFocused.value = false; return }\n const active = (root.ownerDocument ?? document).activeElement as HTMLElement | null\n isFocused.value = !!active\n && root.contains(active)\n && active.hasAttribute('data-reka-date-field-segment')\n}\nfunction onDocFocusIn() { updateSegmentFocus() }\nfunction onDocFocusOut() { queueMicrotask(updateSegmentFocus) }\n\n// Guard against focus snap-back after an outside click.\nlet suppressSegmentFocusUntil = 0\nfunction onDocPointerDown(e: PointerEvent) {\n const root = fieldEl.value\n if (!root) return\n const target = e.target as Node | null\n if (!target || root.contains(target)) return\n suppressSegmentFocusUntil = performance.now() + 250\n const active = (root.ownerDocument ?? document).activeElement as HTMLElement | null\n if (active && root.contains(active) && active.hasAttribute('data-reka-date-field-segment')) {\n active.blur()\n }\n}\nfunction onDocFocusInGuard(e: FocusEvent) {\n if (performance.now() >= suppressSegmentFocusUntil) return\n const root = fieldEl.value\n if (!root) return\n const t = e.target as HTMLElement | null\n if (t && root.contains(t) && t.hasAttribute?.('data-reka-date-field-segment')) {\n t.blur()\n }\n}\n\nonMounted(() => {\n document.addEventListener('focusin', onDocFocusIn)\n document.addEventListener('focusout', onDocFocusOut)\n document.addEventListener('pointerdown', onDocPointerDown, true)\n document.addEventListener('focusin', onDocFocusInGuard, true)\n})\nonBeforeUnmount(() => {\n document.removeEventListener('focusin', onDocFocusIn)\n document.removeEventListener('focusout', onDocFocusOut)\n document.removeEventListener('pointerdown', onDocPointerDown, true)\n document.removeEventListener('focusin', onDocFocusInGuard, true)\n})\n\n// Track data-filled by sniffing rendered segments across BOTH segment lists.\nconst segmentsFilled = ref(false)\nfunction recomputeFilled() {\n const root = fieldEl.value\n if (!root || typeof root.querySelectorAll !== 'function') {\n segmentsFilled.value = false\n return\n }\n const segs = root.querySelectorAll('[data-reka-date-field-segment]:not([data-reka-date-field-segment=\"literal\"])')\n let anyFilled = false\n segs.forEach((el) => {\n if ((el as HTMLElement).dataset.placeholder === 'false') anyFilled = true\n })\n segmentsFilled.value = anyFilled\n}\nwatch([modelValue, () => props.defaultValue, () => props.granularity], () => {\n queueMicrotask(recomputeFilled)\n}, { immediate: true })\n\nconst effectiveFilled = computed(() => isFilled.value || segmentsFilled.value)\n\nfunction handleFieldMousedown(e: MouseEvent) {\n const target = e.target as HTMLElement | null\n if (!target) return\n if (target.closest('[data-reka-date-field-segment]')) return\n if (target.closest('[data-slot=\"start-content\"]')) return\n if (target.closest('[data-slot=\"end-content\"]')) return\n if (target.closest('button, [role=\"button\"]')) return\n const root = fieldEl.value\n if (!root) return\n const active = (root.ownerDocument ?? document).activeElement as HTMLElement | null\n if (active && root.contains(active) && active.hasAttribute('data-reka-date-field-segment')) {\n return\n }\n const first = root.querySelector<HTMLElement>(\n '[data-reka-date-field-segment]:not([data-reka-date-field-segment=\"literal\"])',\n )\n if (first) {\n e.preventDefault()\n first.focus()\n }\n}\n\nconst slotFns = computed(() =>\n dateRangeFieldVariants({\n variant: props.variant,\n size: props.size,\n color: props.color,\n fullWidth: props.fullWidth,\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n isReadonly: props.isReadOnly,\n hasLabel: hasLabel.value,\n labelPlacement: props.labelPlacement,\n }),\n)\n\nconst showOutsideLabel = computed(\n () => hasLabel.value && props.labelPlacement !== 'inside',\n)\nconst showInsideLabel = computed(\n () => hasLabel.value && props.labelPlacement === 'inside',\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class)\"\n :data-invalid=\"isInvalid || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-readonly=\"isReadOnly || undefined\"\n :data-required=\"isRequired || undefined\"\n :data-has-label=\"hasLabel || undefined\"\n :data-has-helper=\"hasHelper || undefined\"\n data-slot=\"date-range-field\"\n >\n <label\n v-if=\"showOutsideLabel\"\n :id=\"labelId\"\n :for=\"fieldId\"\n :class=\"slotFns.label()\"\n >{{ label }}<span\n v-if=\"isRequired\"\n aria-hidden=\"true\"\n > *</span></label>\n\n <div :class=\"slotFns.mainWrapper()\">\n <DateRangeFieldRoot\n :id=\"fieldId\"\n ref=\"fieldRef\"\n v-model=\"modelValue\"\n :default-value=\"defaultValue\"\n :placeholder=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :locale=\"locale\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n :aria-labelledby=\"hasLabel ? labelId : undefined\"\n :aria-describedby=\"ariaDescribedBy\"\n :aria-required=\"isRequired || undefined\"\n :aria-invalid=\"isInvalid || undefined\"\n :class=\"slotFns.inputWrapper()\"\n :data-filled=\"hasLabel ? (effectiveFilled || undefined) : undefined\"\n :data-focused=\"isFocused || undefined\"\n :data-invalid=\"isInvalid || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-readonly=\"isReadOnly || undefined\"\n @mousedown=\"handleFieldMousedown\"\n >\n <template #default=\"{ segments }\">\n <label\n v-if=\"showInsideLabel\"\n :id=\"labelId\"\n :for=\"fieldId\"\n :class=\"slotFns.label()\"\n >{{ label }}<span\n v-if=\"isRequired\"\n aria-hidden=\"true\"\n > *</span></label>\n\n <span\n v-if=\"$slots.startContent\"\n :class=\"slotFns.startContent()\"\n data-slot=\"start-content\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <div\n :class=\"slotFns.segmentList()\"\n data-slot=\"segment-list\"\n data-type=\"start\"\n >\n <template\n v-for=\"(segment, _i) in segments.start\"\n :key=\"`start-${_i}`\"\n >\n <DateRangeFieldInput\n :part=\"segment.part\"\n type=\"start\"\n :class=\"slotFns.segment()\"\n >\n {{ segment.value }}\n </DateRangeFieldInput>\n </template>\n </div>\n\n <span\n :class=\"slotFns.separator()\"\n aria-hidden=\"true\"\n data-slot=\"separator\"\n >–</span>\n\n <div\n :class=\"slotFns.segmentList()\"\n data-slot=\"segment-list\"\n data-type=\"end\"\n >\n <template\n v-for=\"(segment, _i) in segments.end\"\n :key=\"`end-${_i}`\"\n >\n <DateRangeFieldInput\n :part=\"segment.part\"\n type=\"end\"\n :class=\"slotFns.segment()\"\n >\n {{ segment.value }}\n </DateRangeFieldInput>\n </template>\n </div>\n\n <span\n v-if=\"$slots.endContent\"\n :class=\"slotFns.endContent()\"\n data-slot=\"end-content\"\n >\n <slot name=\"endContent\" />\n </span>\n </template>\n </DateRangeFieldRoot>\n\n <div\n v-if=\"hasHelper\"\n :class=\"slotFns.helperWrapper()\"\n >\n <div\n v-if=\"showError\"\n :id=\"errorMessageId\"\n :class=\"slotFns.errorMessage()\"\n role=\"alert\"\n >\n {{ errorMessage }}\n </div>\n <div\n v-else-if=\"showDescription\"\n :id=\"descriptionId\"\n :class=\"slotFns.description()\"\n >\n {{ description }}\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"DateRangeField.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/date-range-field/DateRangeField.vue"],"sourcesContent":["<!--\n DateRangeField — form-field mirror of DateInput.vue for a date range.\n\n Same prop surface, data-attribute contract, floating-label behavior,\n start/end content slots, and a11y wiring as DateInput. Renders TWO\n segment lists (start + end) separated by a visible \"–\" glyph.\n-->\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs, useId, watch } from 'vue'\nimport { DateRangeFieldRoot, DateRangeFieldInput } from 'reka-ui'\nimport type { DateValue } from '@internationalized/date'\nimport { dateRangeFieldVariants, type DateRangeFieldVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n})\n\nconst modelValue = defineModel<DateRange | null | undefined>()\n\nexport interface DateRange {\n start: DateValue\n end: DateValue\n}\n\ntype Props = {\n /** Visual style of the field. @default 'flat' */\n variant?: DateRangeFieldVariants['variant']\n /** Field height. @default 'md' */\n size?: DateRangeFieldVariants['size']\n /** Accent color applied to focus ring + floating label. @default 'default' */\n color?: DateRangeFieldVariants['color']\n /** Label placement relative to the field. @default 'inside' */\n labelPlacement?: DateRangeFieldVariants['labelPlacement']\n /** Stretches root wrapper to 100% width. @default false */\n fullWidth?: boolean\n /** Marks the field as invalid. @default false */\n isInvalid?: boolean\n /** Disables the field. @default false */\n isDisabled?: boolean\n /** Makes the field read-only. @default false */\n isReadOnly?: boolean\n /** Adds a required asterisk next to the label. @default false */\n isRequired?: boolean\n /** Field label. When omitted, floating-label behavior is skipped. */\n label?: string\n /** Helper text below the field. Suppressed when isInvalid && errorMessage is shown. */\n description?: string\n /** Error text below the field. Only rendered when isInvalid is true. */\n errorMessage?: string\n /** Extra classes merged onto the root wrapper. */\n class?: ClassValue\n /** Per-slot class overrides. Merged with tailwind-variants styles. */\n classNames?: Partial<{\n base: ClassValue\n label: ClassValue\n mainWrapper: ClassValue\n inputWrapper: ClassValue\n startContent: ClassValue\n segmentList: ClassValue\n segment: ClassValue\n separator: ClassValue\n endContent: ClassValue\n helperWrapper: ClassValue\n errorMessage: ClassValue\n description: ClassValue\n }>\n\n /* ─── DateRangeField-specific ─────────────────────────────────── */\n defaultValue?: DateRange\n placeholderValue?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n granularity?: 'day' | 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n locale?: string\n name?: string\n hideTimeZone?: boolean\n}\n\nconst attrs = useAttrs()\nconst generatedId = useId()\nconst fieldId = computed(() => (attrs.id as string | undefined) ?? `${generatedId}-field`)\nconst labelId = computed(() => `${generatedId}-label`)\nconst descriptionId = computed(() => `${generatedId}-description`)\nconst errorMessageId = computed(() => `${generatedId}-error`)\n\nconst hasLabel = computed(() => !!props.label)\nconst isFilled = computed(() => modelValue.value?.start != null || modelValue.value?.end != null)\n\nconst showError = computed(() => props.isInvalid && !!props.errorMessage)\nconst showDescription = computed(() => !!props.description && !showError.value)\nconst hasHelper = computed(() => showError.value || showDescription.value)\nconst ariaDescribedBy = computed(() => {\n if (showError.value) return errorMessageId.value\n if (showDescription.value) return descriptionId.value\n return undefined\n})\n\nconst fieldRef = ref<HTMLElement | null>(null)\nconst fieldEl = computed<HTMLElement | null>(() => {\n const r = fieldRef.value as unknown as { $el?: HTMLElement } | HTMLElement | null\n if (!r) return null\n if (r instanceof HTMLElement) return r\n return r.$el ?? null\n})\n\n// `isFocused` tracks focus on a DATE SEGMENT specifically — not any descendant.\nconst isFocused = ref(false)\nfunction updateSegmentFocus() {\n const root = fieldEl.value\n if (!root) { isFocused.value = false; return }\n const active = (root.ownerDocument ?? document).activeElement as HTMLElement | null\n isFocused.value = !!active\n && root.contains(active)\n && active.hasAttribute('data-reka-date-field-segment')\n}\nfunction onDocFocusIn() { updateSegmentFocus() }\nfunction onDocFocusOut() { queueMicrotask(updateSegmentFocus) }\n\n// Guard against focus snap-back after an outside click.\nlet suppressSegmentFocusUntil = 0\nfunction onDocPointerDown(e: PointerEvent) {\n const root = fieldEl.value\n if (!root) return\n const target = e.target as Node | null\n if (!target || root.contains(target)) return\n suppressSegmentFocusUntil = performance.now() + 250\n const active = (root.ownerDocument ?? document).activeElement as HTMLElement | null\n if (active && root.contains(active) && active.hasAttribute('data-reka-date-field-segment')) {\n active.blur()\n }\n}\nfunction onDocFocusInGuard(e: FocusEvent) {\n if (performance.now() >= suppressSegmentFocusUntil) return\n const root = fieldEl.value\n if (!root) return\n const t = e.target as HTMLElement | null\n if (t && root.contains(t) && t.hasAttribute?.('data-reka-date-field-segment')) {\n t.blur()\n }\n}\n\nonMounted(() => {\n document.addEventListener('focusin', onDocFocusIn)\n document.addEventListener('focusout', onDocFocusOut)\n document.addEventListener('pointerdown', onDocPointerDown, true)\n document.addEventListener('focusin', onDocFocusInGuard, true)\n})\nonBeforeUnmount(() => {\n document.removeEventListener('focusin', onDocFocusIn)\n document.removeEventListener('focusout', onDocFocusOut)\n document.removeEventListener('pointerdown', onDocPointerDown, true)\n document.removeEventListener('focusin', onDocFocusInGuard, true)\n})\n\n// Track data-filled by sniffing rendered segments across BOTH segment lists.\nconst segmentsFilled = ref(false)\nfunction recomputeFilled() {\n const root = fieldEl.value\n if (!root || typeof root.querySelectorAll !== 'function') {\n segmentsFilled.value = false\n return\n }\n const segs = root.querySelectorAll('[data-reka-date-field-segment]:not([data-reka-date-field-segment=\"literal\"])')\n let anyFilled = false\n segs.forEach((el) => {\n if ((el as HTMLElement).dataset.placeholder === 'false') anyFilled = true\n })\n segmentsFilled.value = anyFilled\n}\nwatch([modelValue, () => props.defaultValue, () => props.granularity], () => {\n queueMicrotask(recomputeFilled)\n}, { immediate: true })\n\nconst effectiveFilled = computed(() => isFilled.value || segmentsFilled.value)\n\nfunction handleFieldMousedown(e: MouseEvent) {\n const target = e.target as HTMLElement | null\n if (!target) return\n if (target.closest('[data-reka-date-field-segment]')) return\n if (target.closest('[data-slot=\"start-content\"]')) return\n if (target.closest('[data-slot=\"end-content\"]')) return\n if (target.closest('button, [role=\"button\"]')) return\n const root = fieldEl.value\n if (!root) return\n const active = (root.ownerDocument ?? document).activeElement as HTMLElement | null\n if (active && root.contains(active) && active.hasAttribute('data-reka-date-field-segment')) {\n return\n }\n const first = root.querySelector<HTMLElement>(\n '[data-reka-date-field-segment]:not([data-reka-date-field-segment=\"literal\"])',\n )\n if (first) {\n e.preventDefault()\n first.focus()\n }\n}\n\nconst slotFns = computed(() =>\n dateRangeFieldVariants({\n variant: props.variant,\n size: props.size,\n color: props.color,\n fullWidth: props.fullWidth,\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n isReadonly: props.isReadOnly,\n hasLabel: hasLabel.value,\n labelPlacement: props.labelPlacement,\n }),\n)\n\nconst showOutsideLabel = computed(\n () => hasLabel.value && props.labelPlacement !== 'inside',\n)\nconst showInsideLabel = computed(\n () => hasLabel.value && props.labelPlacement === 'inside',\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :data-invalid=\"isInvalid || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-readonly=\"isReadOnly || undefined\"\n :data-required=\"isRequired || undefined\"\n :data-has-label=\"hasLabel || undefined\"\n :data-has-helper=\"hasHelper || undefined\"\n data-slot=\"date-range-field\"\n >\n <label\n v-if=\"showOutsideLabel\"\n :id=\"labelId\"\n :for=\"fieldId\"\n :class=\"composeClassName(slotFns.label(), props.classNames?.label)\"\n >{{ label }}<span\n v-if=\"isRequired\"\n aria-hidden=\"true\"\n > *</span></label>\n\n <div :class=\"composeClassName(slotFns.mainWrapper(), props.classNames?.mainWrapper)\">\n <DateRangeFieldRoot\n :id=\"fieldId\"\n ref=\"fieldRef\"\n v-model=\"modelValue\"\n :default-value=\"defaultValue\"\n :placeholder=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :locale=\"locale\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n :aria-labelledby=\"hasLabel ? labelId : undefined\"\n :aria-describedby=\"ariaDescribedBy\"\n :aria-required=\"isRequired || undefined\"\n :aria-invalid=\"isInvalid || undefined\"\n :class=\"composeClassName(slotFns.inputWrapper(), props.classNames?.inputWrapper)\"\n :data-filled=\"hasLabel ? (effectiveFilled || undefined) : undefined\"\n :data-focused=\"isFocused || undefined\"\n :data-invalid=\"isInvalid || undefined\"\n :data-disabled=\"isDisabled || undefined\"\n :data-readonly=\"isReadOnly || undefined\"\n @mousedown=\"handleFieldMousedown\"\n >\n <template #default=\"{ segments }\">\n <label\n v-if=\"showInsideLabel\"\n :id=\"labelId\"\n :for=\"fieldId\"\n :class=\"composeClassName(slotFns.label(), props.classNames?.label)\"\n >{{ label }}<span\n v-if=\"isRequired\"\n aria-hidden=\"true\"\n > *</span></label>\n\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n data-slot=\"start-content\"\n >\n <slot name=\"startContent\" />\n </span>\n\n <div\n :class=\"composeClassName(slotFns.segmentList(), props.classNames?.segmentList)\"\n data-slot=\"segment-list\"\n data-type=\"start\"\n >\n <template\n v-for=\"(segment, _i) in segments.start\"\n :key=\"`start-${_i}`\"\n >\n <DateRangeFieldInput\n :part=\"segment.part\"\n type=\"start\"\n :class=\"composeClassName(slotFns.segment(), props.classNames?.segment)\"\n >\n {{ segment.value }}\n </DateRangeFieldInput>\n </template>\n </div>\n\n <span\n :class=\"composeClassName(slotFns.separator(), props.classNames?.separator)\"\n aria-hidden=\"true\"\n data-slot=\"separator\"\n >–</span>\n\n <div\n :class=\"composeClassName(slotFns.segmentList(), props.classNames?.segmentList)\"\n data-slot=\"segment-list\"\n data-type=\"end\"\n >\n <template\n v-for=\"(segment, _i) in segments.end\"\n :key=\"`end-${_i}`\"\n >\n <DateRangeFieldInput\n :part=\"segment.part\"\n type=\"end\"\n :class=\"composeClassName(slotFns.segment(), props.classNames?.segment)\"\n >\n {{ segment.value }}\n </DateRangeFieldInput>\n </template>\n </div>\n\n <span\n v-if=\"$slots.endContent\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n data-slot=\"end-content\"\n >\n <slot name=\"endContent\" />\n </span>\n </template>\n </DateRangeFieldRoot>\n\n <div\n v-if=\"hasHelper\"\n :class=\"composeClassName(slotFns.helperWrapper(), props.classNames?.helperWrapper)\"\n >\n <div\n v-if=\"showError\"\n :id=\"errorMessageId\"\n :class=\"composeClassName(slotFns.errorMessage(), props.classNames?.errorMessage)\"\n role=\"alert\"\n >\n {{ errorMessage }}\n </div>\n <div\n v-else-if=\"showDescription\"\n :id=\"descriptionId\"\n :class=\"composeClassName(slotFns.description(), props.classNames?.description)\"\n >\n {{ description }}\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.js","names":[],"sources":["../../../src/components/date-range-picker/DateRangePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport {\n DateRangePickerRoot,\n DateRangePickerTrigger,\n DateRangePickerContent,\n} from 'reka-ui'\nimport type { DateValue } from '@internationalized/date'\nimport { dateRangePickerVariants, type DateRangeFieldVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport RangeCalendar from '../range-calendar/RangeCalendar.vue'\nimport DateRangeField from '../date-range-field/DateRangeField.vue'\n\nexport interface DateRange {\n start: DateValue\n end: DateValue\n}\n\nconst props = withDefaults(defineProps<{\n /* Field appearance — forwarded to DateRangeField */\n variant?: DateRangeFieldVariants['variant']\n size?: DateRangeFieldVariants['size']\n color?: DateRangeFieldVariants['color']\n labelPlacement?: DateRangeFieldVariants['labelPlacement']\n fullWidth?: boolean\n\n defaultValue?: DateRange\n defaultOpen?: boolean\n placeholderValue?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n isDateUnavailable?: (date: DateValue) => boolean\n isDateDisabled?: (date: DateValue) => boolean\n locale?: string\n granularity?: 'day' | 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n label?: string\n description?: string\n errorMessage?: string\n isInvalid?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n name?: string\n hideTimeZone?: boolean\n visibleMonths?: number\n pageBehavior?: 'visible' | 'single'\n closeOnSelect?: boolean\n modal?: boolean\n class?: string\n}>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n closeOnSelect: true,\n modal: false,\n visibleMonths: 1,\n defaultOpen: false,\n})\n\nconst modelValue = defineModel<DateRange | null | undefined>('modelValue')\nconst openModel = defineModel<boolean>('open')\n\nconst slotFns = computed(() => dateRangePickerVariants())\n\n// Sync RangeCalendar's `DateRange | null` v-model with DateRangePicker's model,\n// and close the popover when a complete range is selected (closeOnSelect).\nconst rangeValue = computed<DateRange | null>({\n get: () => modelValue.value ?? null,\n set: (val) => {\n modelValue.value = val ?? null\n if (props.closeOnSelect && val?.start && val?.end) {\n openModel.value = false\n }\n },\n})\n</script>\n\n<template>\n <DateRangePickerRoot\n v-model=\"modelValue\"\n v-model:open=\"openModel\"\n :default-value=\"defaultValue\"\n :default-open=\"defaultOpen\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-unavailable=\"isDateUnavailable\"\n :is-date-disabled=\"isDateDisabled\"\n :locale=\"locale\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :number-of-months=\"visibleMonths\"\n :class=\"composeClassName(slotFns.base(), props.class)\"\n data-slot=\"date-range-picker\"\n >\n <!-- DateRangeField hosts label/helper/field; trigger sits in its endContent slot -->\n <DateRangeField\n v-model=\"modelValue\"\n :variant=\"variant\"\n :size=\"size\"\n :color=\"color\"\n :label-placement=\"labelPlacement\"\n :full-width=\"fullWidth\"\n :default-value=\"defaultValue\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :locale=\"locale\"\n :label=\"label\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :is-invalid=\"isInvalid\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n :is-required=\"isRequired\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n >\n <template #endContent>\n <DateRangePickerTrigger\n :class=\"slotFns.trigger()\"\n aria-label=\"Open date range picker\"\n @mousedown.prevent\n >\n <slot name=\"selectorIcon\">\n <svg\n :class=\"slotFns.triggerIndicator()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n />\n <line\n x1=\"16\"\n y1=\"2\"\n x2=\"16\"\n y2=\"6\"\n />\n <line\n x1=\"8\"\n y1=\"2\"\n x2=\"8\"\n y2=\"6\"\n />\n <line\n x1=\"3\"\n y1=\"10\"\n x2=\"21\"\n y2=\"10\"\n />\n </svg>\n </slot>\n </DateRangePickerTrigger>\n </template>\n </DateRangeField>\n\n <!-- Popover (portaled + positioned by Reka) -->\n <DateRangePickerContent\n :class=\"slotFns.popover()\"\n data-slot=\"popover\"\n :side-offset=\"8\"\n >\n <slot name=\"calendarTopContent\" />\n\n <RangeCalendar\n v-model=\"rangeValue\"\n :default-placeholder=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-disabled=\"isDateDisabled\"\n :is-date-unavailable=\"isDateUnavailable\"\n :locale=\"locale\"\n :number-of-months=\"visibleMonths\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n />\n\n <slot name=\"calendarBottomContent\" />\n </DateRangePickerContent>\n </DateRangePickerRoot>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"DateRangePicker.js","names":[],"sources":["../../../src/components/date-range-picker/DateRangePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport {\n DateRangePickerRoot,\n DateRangePickerTrigger,\n DateRangePickerContent,\n} from 'reka-ui'\nimport type { DateValue } from '@internationalized/date'\nimport { dateRangePickerVariants, type DateRangeFieldVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport RangeCalendar from '../range-calendar/RangeCalendar.vue'\nimport DateRangeField from '../date-range-field/DateRangeField.vue'\n\nexport interface DateRange {\n start: DateValue\n end: DateValue\n}\n\nconst props = withDefaults(defineProps<{\n /* Field appearance — forwarded to DateRangeField */\n variant?: DateRangeFieldVariants['variant']\n size?: DateRangeFieldVariants['size']\n color?: DateRangeFieldVariants['color']\n labelPlacement?: DateRangeFieldVariants['labelPlacement']\n fullWidth?: boolean\n\n defaultValue?: DateRange\n defaultOpen?: boolean\n placeholderValue?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n isDateUnavailable?: (date: DateValue) => boolean\n isDateDisabled?: (date: DateValue) => boolean\n locale?: string\n granularity?: 'day' | 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n label?: string\n description?: string\n errorMessage?: string\n isInvalid?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n name?: string\n hideTimeZone?: boolean\n visibleMonths?: number\n pageBehavior?: 'visible' | 'single'\n closeOnSelect?: boolean\n modal?: boolean\n class?: ClassValue\n /** Per-slot class overrides */\n classNames?: Partial<{\n base: ClassValue\n trigger: ClassValue\n triggerIndicator: ClassValue\n popover: ClassValue\n }>\n}>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n closeOnSelect: true,\n modal: false,\n visibleMonths: 1,\n defaultOpen: false,\n})\n\nconst modelValue = defineModel<DateRange | null | undefined>('modelValue')\nconst openModel = defineModel<boolean>('open')\n\nconst slotFns = computed(() => dateRangePickerVariants())\n\n// Sync RangeCalendar's `DateRange | null` v-model with DateRangePicker's model,\n// and close the popover when a complete range is selected (closeOnSelect).\nconst rangeValue = computed<DateRange | null>({\n get: () => modelValue.value ?? null,\n set: (val) => {\n modelValue.value = val ?? null\n if (props.closeOnSelect && val?.start && val?.end) {\n openModel.value = false\n }\n },\n})\n</script>\n\n<template>\n <DateRangePickerRoot\n v-model=\"modelValue\"\n v-model:open=\"openModel\"\n :default-value=\"defaultValue\"\n :default-open=\"defaultOpen\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-unavailable=\"isDateUnavailable\"\n :is-date-disabled=\"isDateDisabled\"\n :locale=\"locale\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :number-of-months=\"visibleMonths\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n data-slot=\"date-range-picker\"\n >\n <!-- DateRangeField hosts label/helper/field; trigger sits in its endContent slot -->\n <DateRangeField\n v-model=\"modelValue\"\n :variant=\"variant\"\n :size=\"size\"\n :color=\"color\"\n :label-placement=\"labelPlacement\"\n :full-width=\"fullWidth\"\n :default-value=\"defaultValue\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :locale=\"locale\"\n :label=\"label\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :is-invalid=\"isInvalid\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n :is-required=\"isRequired\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n >\n <template #endContent>\n <DateRangePickerTrigger\n :class=\"composeClassName(slotFns.trigger(), props.classNames?.trigger)\"\n aria-label=\"Open date range picker\"\n @mousedown.prevent\n >\n <slot name=\"selectorIcon\">\n <svg\n :class=\"composeClassName(slotFns.triggerIndicator(), props.classNames?.triggerIndicator)\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n />\n <line\n x1=\"16\"\n y1=\"2\"\n x2=\"16\"\n y2=\"6\"\n />\n <line\n x1=\"8\"\n y1=\"2\"\n x2=\"8\"\n y2=\"6\"\n />\n <line\n x1=\"3\"\n y1=\"10\"\n x2=\"21\"\n y2=\"10\"\n />\n </svg>\n </slot>\n </DateRangePickerTrigger>\n </template>\n </DateRangeField>\n\n <!-- Popover (portaled + positioned by Reka) -->\n <DateRangePickerContent\n :class=\"composeClassName(slotFns.popover(), props.classNames?.popover)\"\n data-slot=\"popover\"\n :side-offset=\"8\"\n >\n <slot name=\"calendarTopContent\" />\n\n <RangeCalendar\n v-model=\"rangeValue\"\n :default-placeholder=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-disabled=\"isDateDisabled\"\n :is-date-unavailable=\"isDateUnavailable\"\n :locale=\"locale\"\n :number-of-months=\"visibleMonths\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n />\n\n <slot name=\"calendarBottomContent\" />\n </DateRangePickerContent>\n </DateRangePickerRoot>\n</template>\n"],"mappings":""}
@@ -63,7 +63,14 @@ var DateRangePicker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
63
63
  type: Boolean,
64
64
  default: false
65
65
  },
66
- class: {}
66
+ class: { type: [
67
+ String,
68
+ Boolean,
69
+ null,
70
+ Object,
71
+ Array
72
+ ] },
73
+ classNames: {}
67
74
  }, {
68
75
  "modelValue": {},
69
76
  "modelModifiers": {},
@@ -103,7 +110,7 @@ var DateRangePicker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
103
110
  readonly: __props.isReadOnly,
104
111
  name: __props.name,
105
112
  "number-of-months": __props.visibleMonths,
106
- class: normalizeClass(unref(composeClassName)(slotFns.value.base(), props.class)),
113
+ class: normalizeClass(unref(composeClassName)(slotFns.value.base(), props.class, props.classNames?.base)),
107
114
  "data-slot": "date-range-picker"
108
115
  }, {
109
116
  default: withCtx(() => [createVNode(DateRangeField_default, {
@@ -132,12 +139,12 @@ var DateRangePicker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
132
139
  "hide-time-zone": __props.hideTimeZone
133
140
  }, {
134
141
  endContent: withCtx(() => [createVNode(unref(DateRangePickerTrigger), {
135
- class: normalizeClass(slotFns.value.trigger()),
142
+ class: normalizeClass(unref(composeClassName)(slotFns.value.trigger(), props.classNames?.trigger)),
136
143
  "aria-label": "Open date range picker",
137
144
  onMousedown: _cache[0] || (_cache[0] = withModifiers(() => {}, ["prevent"]))
138
145
  }, {
139
146
  default: withCtx(() => [renderSlot(_ctx.$slots, "selectorIcon", {}, () => [(openBlock(), createElementBlock("svg", {
140
- class: normalizeClass(slotFns.value.triggerIndicator()),
147
+ class: normalizeClass(unref(composeClassName)(slotFns.value.triggerIndicator(), props.classNames?.triggerIndicator)),
141
148
  xmlns: "http://www.w3.org/2000/svg",
142
149
  width: "16",
143
150
  height: "16",
@@ -204,7 +211,7 @@ var DateRangePicker_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
204
211
  "name",
205
212
  "hide-time-zone"
206
213
  ]), createVNode(unref(DateRangePickerContent), {
207
- class: normalizeClass(slotFns.value.popover()),
214
+ class: normalizeClass(unref(composeClassName)(slotFns.value.popover(), props.classNames?.popover)),
208
215
  "data-slot": "popover",
209
216
  "side-offset": 8
210
217
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/date-range-picker/DateRangePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport {\n DateRangePickerRoot,\n DateRangePickerTrigger,\n DateRangePickerContent,\n} from 'reka-ui'\nimport type { DateValue } from '@internationalized/date'\nimport { dateRangePickerVariants, type DateRangeFieldVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport RangeCalendar from '../range-calendar/RangeCalendar.vue'\nimport DateRangeField from '../date-range-field/DateRangeField.vue'\n\nexport interface DateRange {\n start: DateValue\n end: DateValue\n}\n\nconst props = withDefaults(defineProps<{\n /* Field appearance — forwarded to DateRangeField */\n variant?: DateRangeFieldVariants['variant']\n size?: DateRangeFieldVariants['size']\n color?: DateRangeFieldVariants['color']\n labelPlacement?: DateRangeFieldVariants['labelPlacement']\n fullWidth?: boolean\n\n defaultValue?: DateRange\n defaultOpen?: boolean\n placeholderValue?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n isDateUnavailable?: (date: DateValue) => boolean\n isDateDisabled?: (date: DateValue) => boolean\n locale?: string\n granularity?: 'day' | 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n label?: string\n description?: string\n errorMessage?: string\n isInvalid?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n name?: string\n hideTimeZone?: boolean\n visibleMonths?: number\n pageBehavior?: 'visible' | 'single'\n closeOnSelect?: boolean\n modal?: boolean\n class?: string\n}>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n closeOnSelect: true,\n modal: false,\n visibleMonths: 1,\n defaultOpen: false,\n})\n\nconst modelValue = defineModel<DateRange | null | undefined>('modelValue')\nconst openModel = defineModel<boolean>('open')\n\nconst slotFns = computed(() => dateRangePickerVariants())\n\n// Sync RangeCalendar's `DateRange | null` v-model with DateRangePicker's model,\n// and close the popover when a complete range is selected (closeOnSelect).\nconst rangeValue = computed<DateRange | null>({\n get: () => modelValue.value ?? null,\n set: (val) => {\n modelValue.value = val ?? null\n if (props.closeOnSelect && val?.start && val?.end) {\n openModel.value = false\n }\n },\n})\n</script>\n\n<template>\n <DateRangePickerRoot\n v-model=\"modelValue\"\n v-model:open=\"openModel\"\n :default-value=\"defaultValue\"\n :default-open=\"defaultOpen\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-unavailable=\"isDateUnavailable\"\n :is-date-disabled=\"isDateDisabled\"\n :locale=\"locale\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :number-of-months=\"visibleMonths\"\n :class=\"composeClassName(slotFns.base(), props.class)\"\n data-slot=\"date-range-picker\"\n >\n <!-- DateRangeField hosts label/helper/field; trigger sits in its endContent slot -->\n <DateRangeField\n v-model=\"modelValue\"\n :variant=\"variant\"\n :size=\"size\"\n :color=\"color\"\n :label-placement=\"labelPlacement\"\n :full-width=\"fullWidth\"\n :default-value=\"defaultValue\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :locale=\"locale\"\n :label=\"label\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :is-invalid=\"isInvalid\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n :is-required=\"isRequired\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n >\n <template #endContent>\n <DateRangePickerTrigger\n :class=\"slotFns.trigger()\"\n aria-label=\"Open date range picker\"\n @mousedown.prevent\n >\n <slot name=\"selectorIcon\">\n <svg\n :class=\"slotFns.triggerIndicator()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n />\n <line\n x1=\"16\"\n y1=\"2\"\n x2=\"16\"\n y2=\"6\"\n />\n <line\n x1=\"8\"\n y1=\"2\"\n x2=\"8\"\n y2=\"6\"\n />\n <line\n x1=\"3\"\n y1=\"10\"\n x2=\"21\"\n y2=\"10\"\n />\n </svg>\n </slot>\n </DateRangePickerTrigger>\n </template>\n </DateRangeField>\n\n <!-- Popover (portaled + positioned by Reka) -->\n <DateRangePickerContent\n :class=\"slotFns.popover()\"\n data-slot=\"popover\"\n :side-offset=\"8\"\n >\n <slot name=\"calendarTopContent\" />\n\n <RangeCalendar\n v-model=\"rangeValue\"\n :default-placeholder=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-disabled=\"isDateDisabled\"\n :is-date-unavailable=\"isDateUnavailable\"\n :locale=\"locale\"\n :number-of-months=\"visibleMonths\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n />\n\n <slot name=\"calendarBottomContent\" />\n </DateRangePickerContent>\n </DateRangePickerRoot>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"DateRangePicker.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/date-range-picker/DateRangePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport {\n DateRangePickerRoot,\n DateRangePickerTrigger,\n DateRangePickerContent,\n} from 'reka-ui'\nimport type { DateValue } from '@internationalized/date'\nimport { dateRangePickerVariants, type DateRangeFieldVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport RangeCalendar from '../range-calendar/RangeCalendar.vue'\nimport DateRangeField from '../date-range-field/DateRangeField.vue'\n\nexport interface DateRange {\n start: DateValue\n end: DateValue\n}\n\nconst props = withDefaults(defineProps<{\n /* Field appearance — forwarded to DateRangeField */\n variant?: DateRangeFieldVariants['variant']\n size?: DateRangeFieldVariants['size']\n color?: DateRangeFieldVariants['color']\n labelPlacement?: DateRangeFieldVariants['labelPlacement']\n fullWidth?: boolean\n\n defaultValue?: DateRange\n defaultOpen?: boolean\n placeholderValue?: DateValue\n minValue?: DateValue\n maxValue?: DateValue\n isDateUnavailable?: (date: DateValue) => boolean\n isDateDisabled?: (date: DateValue) => boolean\n locale?: string\n granularity?: 'day' | 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n label?: string\n description?: string\n errorMessage?: string\n isInvalid?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n name?: string\n hideTimeZone?: boolean\n visibleMonths?: number\n pageBehavior?: 'visible' | 'single'\n closeOnSelect?: boolean\n modal?: boolean\n class?: ClassValue\n /** Per-slot class overrides */\n classNames?: Partial<{\n base: ClassValue\n trigger: ClassValue\n triggerIndicator: ClassValue\n popover: ClassValue\n }>\n}>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n closeOnSelect: true,\n modal: false,\n visibleMonths: 1,\n defaultOpen: false,\n})\n\nconst modelValue = defineModel<DateRange | null | undefined>('modelValue')\nconst openModel = defineModel<boolean>('open')\n\nconst slotFns = computed(() => dateRangePickerVariants())\n\n// Sync RangeCalendar's `DateRange | null` v-model with DateRangePicker's model,\n// and close the popover when a complete range is selected (closeOnSelect).\nconst rangeValue = computed<DateRange | null>({\n get: () => modelValue.value ?? null,\n set: (val) => {\n modelValue.value = val ?? null\n if (props.closeOnSelect && val?.start && val?.end) {\n openModel.value = false\n }\n },\n})\n</script>\n\n<template>\n <DateRangePickerRoot\n v-model=\"modelValue\"\n v-model:open=\"openModel\"\n :default-value=\"defaultValue\"\n :default-open=\"defaultOpen\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-unavailable=\"isDateUnavailable\"\n :is-date-disabled=\"isDateDisabled\"\n :locale=\"locale\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :number-of-months=\"visibleMonths\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n data-slot=\"date-range-picker\"\n >\n <!-- DateRangeField hosts label/helper/field; trigger sits in its endContent slot -->\n <DateRangeField\n v-model=\"modelValue\"\n :variant=\"variant\"\n :size=\"size\"\n :color=\"color\"\n :label-placement=\"labelPlacement\"\n :full-width=\"fullWidth\"\n :default-value=\"defaultValue\"\n :placeholder-value=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :locale=\"locale\"\n :label=\"label\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :is-invalid=\"isInvalid\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n :is-required=\"isRequired\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n >\n <template #endContent>\n <DateRangePickerTrigger\n :class=\"composeClassName(slotFns.trigger(), props.classNames?.trigger)\"\n aria-label=\"Open date range picker\"\n @mousedown.prevent\n >\n <slot name=\"selectorIcon\">\n <svg\n :class=\"composeClassName(slotFns.triggerIndicator(), props.classNames?.triggerIndicator)\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n />\n <line\n x1=\"16\"\n y1=\"2\"\n x2=\"16\"\n y2=\"6\"\n />\n <line\n x1=\"8\"\n y1=\"2\"\n x2=\"8\"\n y2=\"6\"\n />\n <line\n x1=\"3\"\n y1=\"10\"\n x2=\"21\"\n y2=\"10\"\n />\n </svg>\n </slot>\n </DateRangePickerTrigger>\n </template>\n </DateRangeField>\n\n <!-- Popover (portaled + positioned by Reka) -->\n <DateRangePickerContent\n :class=\"composeClassName(slotFns.popover(), props.classNames?.popover)\"\n data-slot=\"popover\"\n :side-offset=\"8\"\n >\n <slot name=\"calendarTopContent\" />\n\n <RangeCalendar\n v-model=\"rangeValue\"\n :default-placeholder=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-disabled=\"isDateDisabled\"\n :is-date-unavailable=\"isDateUnavailable\"\n :locale=\"locale\"\n :number-of-months=\"visibleMonths\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n />\n\n <slot name=\"calendarBottomContent\" />\n </DateRangePickerContent>\n </DateRangePickerRoot>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimePicker.js","names":[],"sources":["../../../src/components/date-time-picker/DateTimePicker.vue"],"sourcesContent":["<!-- packages/vue/src/components/date-time-picker/DateTimePicker.vue -->\n<script setup lang=\"ts\">\nimport { computed, ref, shallowRef, watch } from 'vue'\nimport {\n DatePickerRoot,\n DatePickerTrigger,\n DatePickerContent,\n} from 'reka-ui'\nimport {\n type DateValue,\n CalendarDateTime,\n toCalendarDate,\n today,\n getLocalTimeZone,\n} from '@internationalized/date'\nimport { AnimatePresence, motion } from 'motion-v'\nimport { dateTimePickerVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport Calendar from '../calendar/Calendar.vue'\nimport DateInput from '../date-input/DateInput.vue'\nimport DateTimePickerTimeScroller from './DateTimePickerTimeScroller.vue'\n\ntype Step = 'date' | 'time'\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<{\n variant?: 'flat' | 'bordered' | 'faded' | 'underlined'\n size?: 'sm' | 'md' | 'lg'\n color?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger'\n labelPlacement?: 'inside' | 'outside' | 'outside-left'\n fullWidth?: boolean\n label?: string\n description?: string\n errorMessage?: string\n isInvalid?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n name?: string\n class?: string\n granularity?: 'minute' | 'second'\n hourCycle?: 12 | 24\n hideTimeZone?: boolean\n defaultOpen?: boolean\n closeOnSelect?: boolean\n locale?: string\n defaultValue?: CalendarDateTime\n minValue?: CalendarDateTime\n maxValue?: CalendarDateTime\n isDateUnavailable?: (date: DateValue) => boolean\n isDateDisabled?: (date: DateValue) => boolean\n}>(), {\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n granularity: 'minute',\n defaultOpen: false,\n closeOnSelect: true,\n})\n\nconst modelValue = defineModel<CalendarDateTime | null | undefined>('modelValue')\nconst openModel = defineModel<boolean>('open', { default: undefined })\n\nconst STEP_TITLES: Record<Step, string> = {\n date: 'Pick a date',\n time: 'Pick a time',\n}\nconst STEP_ORDER: Step[] = ['date', 'time']\n\n// Seed controlled open state from defaultOpen so portal renders in uncontrolled mode too\nif (props.defaultOpen && openModel.value === undefined) {\n openModel.value = true\n}\n\n// Seed controlled value from defaultValue so DateFieldRoot is always in controlled\n// mode from the start. Without this, an uncontrolled→controlled transition\n// happens mid-lifecycle and Reka's DateFieldRoot won't re-render segments.\nif (modelValue.value == null && props.defaultValue != null) {\n modelValue.value = props.defaultValue\n}\n\n// Internal working value — always a CalendarDateTime, never null/undefined.\nconst _today = today(getLocalTimeZone())\nconst internalValue = shallowRef<CalendarDateTime>(\n modelValue.value ?? props.defaultValue ?? new CalendarDateTime(_today.year, _today.month, _today.day, 0, 0),\n)\n\n// Sync inbound: parent resets the value → update internalValue.\n// Guard on CalendarDateTime: ignore CalendarDate emits (no time info).\nwatch(modelValue, (v) => {\n if (v instanceof CalendarDateTime) internalValue.value = v\n})\n\n// Route segment edits from DateInput back to both internalValue and modelValue.\n// DateInput is bound to internalValue (not modelValue) so this is the only place\n// that propagates user-typed changes outward.\nfunction onInputChange(v: DateValue | null | undefined) {\n if (!(v instanceof CalendarDateTime)) return\n internalValue.value = v\n modelValue.value = v\n}\n\n// ─── Step state ──────────────────────────────────────────────────────────\n\nconst activeStep = ref<Step>('date')\nconst direction = ref<1 | -1>(1)\n\nwatch(openModel, (open) => {\n if (open) activeStep.value = 'date'\n})\n\nfunction goTo(step: Step) {\n const from = STEP_ORDER.indexOf(activeStep.value)\n const to = STEP_ORDER.indexOf(step)\n direction.value = to > from ? 1 : -1\n activeStep.value = step\n}\n\nfunction goBack() {\n const idx = STEP_ORDER.indexOf(activeStep.value)\n if (idx > 0) goTo(STEP_ORDER[idx - 1])\n}\n\nfunction goForward() {\n const idx = STEP_ORDER.indexOf(activeStep.value)\n if (idx < STEP_ORDER.length - 1) {\n goTo(STEP_ORDER[idx + 1])\n } else if (props.closeOnSelect) {\n openModel.value = false\n }\n}\n\n// ─── Panel animation variants ────────────────────────────────────────────\n\nconst panelInitial = computed(() => ({ x: direction.value > 0 ? '100%' : '-100%', opacity: 0 }))\nconst panelAnimate = { x: '0%', opacity: 1 }\nconst panelExit = computed(() => ({ x: direction.value > 0 ? '-100%' : '100%', opacity: 0 }))\n\n// ─── Calendar value sync ─────────────────────────────────────────────────\n\nconst calendarValue = computed<DateValue | undefined>({\n // Pass CalendarDate to CalendarRoot — Reka always emits CalendarDate from\n // onDateChange. The setter reconstructs the full CalendarDateTime.\n get: () => toCalendarDate(internalValue.value),\n set: (val) => {\n if (!val) return\n internalValue.value = internalValue.value.set({\n year: val.year,\n month: val.month,\n day: val.day,\n })\n modelValue.value = internalValue.value\n goTo('time')\n },\n})\n\n// ─── Time update ─────────────────────────────────────────────────────────\n\nfunction onTimeUpdate(val: CalendarDateTime) {\n internalValue.value = val\n modelValue.value = val\n}\n\n// ─── Styles ──────────────────────────────────────────────────────────────\n\nconst slotFns = computed(() =>\n dateTimePickerVariants({\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n fullWidth: props.fullWidth,\n }),\n)\n</script>\n\n<template>\n <DatePickerRoot\n v-model=\"modelValue\"\n v-model:open=\"openModel\"\n :default-value=\"defaultValue\"\n :default-open=\"defaultOpen\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-unavailable=\"isDateUnavailable\"\n :is-date-disabled=\"isDateDisabled\"\n :locale=\"locale\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :class=\"composeClassName(slotFns.base(), props.class)\"\n data-slot=\"date-time-picker\"\n >\n <DateInput\n :model-value=\"internalValue\"\n :variant=\"variant\"\n :size=\"size\"\n :color=\"color\"\n :label-placement=\"labelPlacement\"\n :full-width=\"fullWidth\"\n :default-value=\"defaultValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :locale=\"locale\"\n :label=\"label\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :is-invalid=\"isInvalid\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n :is-required=\"isRequired\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n @update:model-value=\"onInputChange\"\n >\n <template #endContent>\n <DatePickerTrigger\n :class=\"slotFns.trigger()\"\n aria-label=\"Open date time picker\"\n @mousedown.prevent\n >\n <slot name=\"selectorIcon\">\n <svg\n :class=\"slotFns.triggerIndicator()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n />\n <line\n x1=\"16\"\n y1=\"2\"\n x2=\"16\"\n y2=\"6\"\n />\n <line\n x1=\"8\"\n y1=\"2\"\n x2=\"8\"\n y2=\"6\"\n />\n <line\n x1=\"3\"\n y1=\"10\"\n x2=\"21\"\n y2=\"10\"\n />\n </svg>\n </slot>\n </DatePickerTrigger>\n </template>\n </DateInput>\n\n <DatePickerContent\n :class=\"slotFns.popover()\"\n data-slot=\"popover\"\n :side-offset=\"8\"\n >\n <!-- Step header -->\n <div\n :class=\"slotFns.stepHeader()\"\n data-slot=\"step-header\"\n >\n <button\n type=\"button\"\n :class=\"slotFns.navButton()\"\n :data-hidden=\"activeStep === 'date' ? 'true' : undefined\"\n aria-label=\"Previous step\"\n data-slot=\"back-button\"\n @click=\"goBack\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n\n <span :class=\"slotFns.stepTitle()\">{{ STEP_TITLES[activeStep] }}</span>\n\n <button\n type=\"button\"\n :class=\"slotFns.navButton()\"\n :aria-label=\"activeStep === 'time' ? 'Done' : 'Next step'\"\n data-slot=\"forward-button\"\n @click=\"goForward\"\n >\n <span\n v-if=\"activeStep === 'time'\"\n :class=\"slotFns.doneLabel()\"\n >Done</span>\n <svg\n v-else\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </div>\n\n <!-- Sliding panels -->\n <div\n :class=\"slotFns.panelWrap()\"\n style=\"overflow: hidden;\"\n >\n <AnimatePresence mode=\"popLayout\">\n <motion.div\n v-if=\"activeStep === 'date'\"\n key=\"date\"\n :initial=\"panelInitial\"\n :animate=\"panelAnimate\"\n :exit=\"panelExit\"\n :transition=\"{ duration: 0.15 }\"\n class=\"px-3 pb-3\"\n data-slot=\"calendar-panel\"\n >\n <Calendar\n v-model=\"calendarValue\"\n :default-value=\"defaultValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-disabled=\"isDateDisabled\"\n :is-date-unavailable=\"isDateUnavailable\"\n :locale=\"locale\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n />\n </motion.div>\n\n <motion.div\n v-else-if=\"activeStep === 'time'\"\n key=\"time\"\n :initial=\"panelInitial\"\n :animate=\"panelAnimate\"\n :exit=\"panelExit\"\n :transition=\"{ duration: 0.15 }\"\n >\n <DateTimePickerTimeScroller\n :model-value=\"internalValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n @update:model-value=\"onTimeUpdate\"\n />\n </motion.div>\n </AnimatePresence>\n </div>\n </DatePickerContent>\n </DatePickerRoot>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"DateTimePicker.js","names":[],"sources":["../../../src/components/date-time-picker/DateTimePicker.vue"],"sourcesContent":["<!-- packages/vue/src/components/date-time-picker/DateTimePicker.vue -->\n<script setup lang=\"ts\">\nimport { computed, ref, shallowRef, watch } from 'vue'\nimport {\n DatePickerRoot,\n DatePickerTrigger,\n DatePickerContent,\n} from 'reka-ui'\nimport {\n type DateValue,\n CalendarDateTime,\n toCalendarDate,\n today,\n getLocalTimeZone,\n} from '@internationalized/date'\nimport { AnimatePresence, motion } from 'motion-v'\nimport { dateTimePickerVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport Calendar from '../calendar/Calendar.vue'\nimport DateInput from '../date-input/DateInput.vue'\nimport DateTimePickerTimeScroller from './DateTimePickerTimeScroller.vue'\n\ntype Step = 'date' | 'time'\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<{\n variant?: 'flat' | 'bordered' | 'faded' | 'underlined'\n size?: 'sm' | 'md' | 'lg'\n color?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger'\n labelPlacement?: 'inside' | 'outside' | 'outside-left'\n fullWidth?: boolean\n label?: string\n description?: string\n errorMessage?: string\n isInvalid?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n name?: string\n class?: ClassValue\n /** Override classes for individual slots */\n classNames?: Partial<{\n base: ClassValue\n trigger: ClassValue\n triggerIndicator: ClassValue\n popover: ClassValue\n stepHeader: ClassValue\n navButton: ClassValue\n stepTitle: ClassValue\n doneLabel: ClassValue\n panelWrap: ClassValue\n }>\n granularity?: 'minute' | 'second'\n hourCycle?: 12 | 24\n hideTimeZone?: boolean\n defaultOpen?: boolean\n closeOnSelect?: boolean\n locale?: string\n defaultValue?: CalendarDateTime\n minValue?: CalendarDateTime\n maxValue?: CalendarDateTime\n isDateUnavailable?: (date: DateValue) => boolean\n isDateDisabled?: (date: DateValue) => boolean\n}>(), {\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n hideTimeZone: false,\n granularity: 'minute',\n defaultOpen: false,\n closeOnSelect: true,\n})\n\nconst modelValue = defineModel<CalendarDateTime | null | undefined>('modelValue')\nconst openModel = defineModel<boolean>('open', { default: undefined })\n\nconst STEP_TITLES: Record<Step, string> = {\n date: 'Pick a date',\n time: 'Pick a time',\n}\nconst STEP_ORDER: Step[] = ['date', 'time']\n\n// Seed controlled open state from defaultOpen so portal renders in uncontrolled mode too\nif (props.defaultOpen && openModel.value === undefined) {\n openModel.value = true\n}\n\n// Seed controlled value from defaultValue so DateFieldRoot is always in controlled\n// mode from the start. Without this, an uncontrolled→controlled transition\n// happens mid-lifecycle and Reka's DateFieldRoot won't re-render segments.\nif (modelValue.value == null && props.defaultValue != null) {\n modelValue.value = props.defaultValue\n}\n\n// Internal working value — always a CalendarDateTime, never null/undefined.\nconst _today = today(getLocalTimeZone())\nconst internalValue = shallowRef<CalendarDateTime>(\n modelValue.value ?? props.defaultValue ?? new CalendarDateTime(_today.year, _today.month, _today.day, 0, 0),\n)\n\n// Sync inbound: parent resets the value → update internalValue.\n// Guard on CalendarDateTime: ignore CalendarDate emits (no time info).\nwatch(modelValue, (v) => {\n if (v instanceof CalendarDateTime) internalValue.value = v\n})\n\n// Route segment edits from DateInput back to both internalValue and modelValue.\n// DateInput is bound to internalValue (not modelValue) so this is the only place\n// that propagates user-typed changes outward.\nfunction onInputChange(v: DateValue | null | undefined) {\n if (!(v instanceof CalendarDateTime)) return\n internalValue.value = v\n modelValue.value = v\n}\n\n// ─── Step state ──────────────────────────────────────────────────────────\n\nconst activeStep = ref<Step>('date')\nconst direction = ref<1 | -1>(1)\n\nwatch(openModel, (open) => {\n if (open) activeStep.value = 'date'\n})\n\nfunction goTo(step: Step) {\n const from = STEP_ORDER.indexOf(activeStep.value)\n const to = STEP_ORDER.indexOf(step)\n direction.value = to > from ? 1 : -1\n activeStep.value = step\n}\n\nfunction goBack() {\n const idx = STEP_ORDER.indexOf(activeStep.value)\n if (idx > 0) goTo(STEP_ORDER[idx - 1])\n}\n\nfunction goForward() {\n const idx = STEP_ORDER.indexOf(activeStep.value)\n if (idx < STEP_ORDER.length - 1) {\n goTo(STEP_ORDER[idx + 1])\n } else if (props.closeOnSelect) {\n openModel.value = false\n }\n}\n\n// ─── Panel animation variants ────────────────────────────────────────────\n\nconst panelInitial = computed(() => ({ x: direction.value > 0 ? '100%' : '-100%', opacity: 0 }))\nconst panelAnimate = { x: '0%', opacity: 1 }\nconst panelExit = computed(() => ({ x: direction.value > 0 ? '-100%' : '100%', opacity: 0 }))\n\n// ─── Calendar value sync ─────────────────────────────────────────────────\n\nconst calendarValue = computed<DateValue | undefined>({\n // Pass CalendarDate to CalendarRoot — Reka always emits CalendarDate from\n // onDateChange. The setter reconstructs the full CalendarDateTime.\n get: () => toCalendarDate(internalValue.value),\n set: (val) => {\n if (!val) return\n internalValue.value = internalValue.value.set({\n year: val.year,\n month: val.month,\n day: val.day,\n })\n modelValue.value = internalValue.value\n goTo('time')\n },\n})\n\n// ─── Time update ─────────────────────────────────────────────────────────\n\nfunction onTimeUpdate(val: CalendarDateTime) {\n internalValue.value = val\n modelValue.value = val\n}\n\n// ─── Styles ──────────────────────────────────────────────────────────────\n\nconst slotFns = computed(() =>\n dateTimePickerVariants({\n isInvalid: props.isInvalid,\n isDisabled: props.isDisabled,\n fullWidth: props.fullWidth,\n }),\n)\n</script>\n\n<template>\n <DatePickerRoot\n v-model=\"modelValue\"\n v-model:open=\"openModel\"\n :default-value=\"defaultValue\"\n :default-open=\"defaultOpen\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-unavailable=\"isDateUnavailable\"\n :is-date-disabled=\"isDateDisabled\"\n :locale=\"locale\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n data-slot=\"date-time-picker\"\n >\n <DateInput\n :model-value=\"internalValue\"\n :variant=\"variant\"\n :size=\"size\"\n :color=\"color\"\n :label-placement=\"labelPlacement\"\n :full-width=\"fullWidth\"\n :default-value=\"defaultValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :locale=\"locale\"\n :label=\"label\"\n :description=\"description\"\n :error-message=\"errorMessage\"\n :is-invalid=\"isInvalid\"\n :is-disabled=\"isDisabled\"\n :is-read-only=\"isReadOnly\"\n :is-required=\"isRequired\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n @update:model-value=\"onInputChange\"\n >\n <template #endContent>\n <DatePickerTrigger\n :class=\"composeClassName(slotFns.trigger(), props.classNames?.trigger)\"\n aria-label=\"Open date time picker\"\n @mousedown.prevent\n >\n <slot name=\"selectorIcon\">\n <svg\n :class=\"composeClassName(slotFns.triggerIndicator(), props.classNames?.triggerIndicator)\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n />\n <line\n x1=\"16\"\n y1=\"2\"\n x2=\"16\"\n y2=\"6\"\n />\n <line\n x1=\"8\"\n y1=\"2\"\n x2=\"8\"\n y2=\"6\"\n />\n <line\n x1=\"3\"\n y1=\"10\"\n x2=\"21\"\n y2=\"10\"\n />\n </svg>\n </slot>\n </DatePickerTrigger>\n </template>\n </DateInput>\n\n <DatePickerContent\n :class=\"composeClassName(slotFns.popover(), props.classNames?.popover)\"\n data-slot=\"popover\"\n :side-offset=\"8\"\n >\n <!-- Step header -->\n <div\n :class=\"composeClassName(slotFns.stepHeader(), props.classNames?.stepHeader)\"\n data-slot=\"step-header\"\n >\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n :data-hidden=\"activeStep === 'date' ? 'true' : undefined\"\n aria-label=\"Previous step\"\n data-slot=\"back-button\"\n @click=\"goBack\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n\n <span :class=\"composeClassName(slotFns.stepTitle(), props.classNames?.stepTitle)\">{{ STEP_TITLES[activeStep] }}</span>\n\n <button\n type=\"button\"\n :class=\"composeClassName(slotFns.navButton(), props.classNames?.navButton)\"\n :aria-label=\"activeStep === 'time' ? 'Done' : 'Next step'\"\n data-slot=\"forward-button\"\n @click=\"goForward\"\n >\n <span\n v-if=\"activeStep === 'time'\"\n :class=\"composeClassName(slotFns.doneLabel(), props.classNames?.doneLabel)\"\n >Done</span>\n <svg\n v-else\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </button>\n </div>\n\n <!-- Sliding panels -->\n <div\n :class=\"composeClassName(slotFns.panelWrap(), props.classNames?.panelWrap)\"\n style=\"overflow: hidden;\"\n >\n <AnimatePresence mode=\"popLayout\">\n <motion.div\n v-if=\"activeStep === 'date'\"\n key=\"date\"\n :initial=\"panelInitial\"\n :animate=\"panelAnimate\"\n :exit=\"panelExit\"\n :transition=\"{ duration: 0.15 }\"\n class=\"px-3 pb-3\"\n data-slot=\"calendar-panel\"\n >\n <Calendar\n v-model=\"calendarValue\"\n :default-value=\"defaultValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :is-date-disabled=\"isDateDisabled\"\n :is-date-unavailable=\"isDateUnavailable\"\n :locale=\"locale\"\n :readonly=\"isReadOnly\"\n :disabled=\"isDisabled\"\n />\n </motion.div>\n\n <motion.div\n v-else-if=\"activeStep === 'time'\"\n key=\"time\"\n :initial=\"panelInitial\"\n :animate=\"panelAnimate\"\n :exit=\"panelExit\"\n :transition=\"{ duration: 0.15 }\"\n >\n <DateTimePickerTimeScroller\n :model-value=\"internalValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n @update:model-value=\"onTimeUpdate\"\n />\n </motion.div>\n </AnimatePresence>\n </div>\n </DatePickerContent>\n </DatePickerRoot>\n</template>\n"],"mappings":""}