@auronui/vue 1.2.2 → 1.4.0

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 (440) hide show
  1. package/ai-rules.md +165 -1
  2. package/dist/cjs/index.cjs +18335 -13786
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/components/_shared/FieldLabel.js +7 -0
  5. package/dist/components/_shared/FieldLabel.js.map +1 -0
  6. package/dist/components/_shared/FieldLabel.vue_vue_type_script_setup_true_lang.js +38 -0
  7. package/dist/components/_shared/FieldLabel.vue_vue_type_script_setup_true_lang.js.map +1 -0
  8. package/dist/components/_shared/FormFieldHelper.js +7 -0
  9. package/dist/components/_shared/FormFieldHelper.js.map +1 -0
  10. package/dist/components/_shared/FormFieldHelper.vue_vue_type_script_setup_true_lang.js +59 -0
  11. package/dist/components/_shared/FormFieldHelper.vue_vue_type_script_setup_true_lang.js.map +1 -0
  12. package/dist/components/_shared/TimeScroller.js +7 -0
  13. package/dist/components/_shared/TimeScroller.js.map +1 -0
  14. package/dist/components/{date-time-picker/DateTimePickerTimeScroller.vue_vue_type_script_setup_true_lang.js → _shared/TimeScroller.vue_vue_type_script_setup_true_lang.js} +5 -6
  15. package/dist/components/_shared/TimeScroller.vue_vue_type_script_setup_true_lang.js.map +1 -0
  16. package/dist/components/accordion/Accordion.js.map +1 -1
  17. package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js +10 -4
  18. package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/components/accordion/AccordionItem.js.map +1 -1
  20. package/dist/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js +11 -2
  21. package/dist/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  22. package/dist/components/alert-dialog/AlertDialogAction.js.map +1 -1
  23. package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js.map +1 -1
  24. package/dist/components/alert-dialog/AlertDialogCancel.js.map +1 -1
  25. package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/dist/components/autocomplete/Autocomplete.js.map +1 -1
  27. package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js +60 -53
  28. package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  29. package/dist/components/autocomplete/AutocompleteCreateItem.js.map +1 -1
  30. package/dist/components/autocomplete/AutocompleteCreateItem.vue_vue_type_script_setup_true_lang.js +8 -2
  31. package/dist/components/autocomplete/AutocompleteCreateItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  32. package/dist/components/autocomplete/AutocompleteInput.js.map +1 -1
  33. package/dist/components/autocomplete/AutocompleteInput.vue_vue_type_script_setup_true_lang.js +17 -8
  34. package/dist/components/autocomplete/AutocompleteInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  35. package/dist/components/autocomplete/AutocompleteItem.js.map +1 -1
  36. package/dist/components/autocomplete/AutocompleteItem.vue_vue_type_script_setup_true_lang.js +4 -2
  37. package/dist/components/autocomplete/AutocompleteItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  38. package/dist/components/avatar/AvatarGroup.js.map +1 -1
  39. package/dist/components/avatar/AvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  40. package/dist/components/button/Button.js.map +1 -1
  41. package/dist/components/button/Button.vue_vue_type_script_setup_true_lang.js +10 -4
  42. package/dist/components/button/Button.vue_vue_type_script_setup_true_lang.js.map +1 -1
  43. package/dist/components/button/ButtonGroup.js.map +1 -1
  44. package/dist/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js +10 -4
  45. package/dist/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  46. package/dist/components/button/CloseButton.js.map +1 -1
  47. package/dist/components/button/CloseButton.vue_vue_type_script_setup_true_lang.js +10 -4
  48. package/dist/components/button/CloseButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  49. package/dist/components/button/ToggleButton.js.map +1 -1
  50. package/dist/components/button/ToggleButton.vue_vue_type_script_setup_true_lang.js +17 -6
  51. package/dist/components/button/ToggleButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  52. package/dist/components/button/ToggleButtonGroup.js.map +1 -1
  53. package/dist/components/button/ToggleButtonGroup.vue_vue_type_script_setup_true_lang.js +10 -4
  54. package/dist/components/button/ToggleButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  55. package/dist/components/calendar/Calendar.js.map +1 -1
  56. package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js +21 -10
  57. package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  58. package/dist/components/calendar-year-picker/CalendarYearPicker.js.map +1 -1
  59. package/dist/components/calendar-year-picker/CalendarYearPicker.vue_vue_type_script_setup_true_lang.js +15 -4
  60. package/dist/components/calendar-year-picker/CalendarYearPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  61. package/dist/components/checkbox/Checkbox.js.map +1 -1
  62. package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js +16 -5
  63. package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  64. package/dist/components/checkbox/CheckboxGroup.js.map +1 -1
  65. package/dist/components/checkbox/CheckboxGroup.vue_vue_type_script_setup_true_lang.js +10 -4
  66. package/dist/components/checkbox/CheckboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  67. package/dist/components/chip/Chip.js.map +1 -1
  68. package/dist/components/chip/Chip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  69. package/dist/components/collapsible/Collapsible.js.map +1 -1
  70. package/dist/components/collapsible/Collapsible.vue_vue_type_script_setup_true_lang.js +8 -2
  71. package/dist/components/collapsible/Collapsible.vue_vue_type_script_setup_true_lang.js.map +1 -1
  72. package/dist/components/collapsible/CollapsibleGroup.js.map +1 -1
  73. package/dist/components/collapsible/CollapsibleGroup.vue_vue_type_script_setup_true_lang.js +2 -2
  74. package/dist/components/collapsible/CollapsibleGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  75. package/dist/components/color-area/ColorArea.js.map +1 -1
  76. package/dist/components/color-area/ColorArea.vue_vue_type_script_setup_true_lang.js +15 -4
  77. package/dist/components/color-area/ColorArea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  78. package/dist/components/color-field/ColorField.js.map +1 -1
  79. package/dist/components/color-field/ColorField.vue_vue_type_script_setup_true_lang.js +22 -6
  80. package/dist/components/color-field/ColorField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  81. package/dist/components/color-input-group/ColorInputGroup.js.map +1 -1
  82. package/dist/components/color-input-group/ColorInputGroup.vue_vue_type_script_setup_true_lang.js +22 -6
  83. package/dist/components/color-input-group/ColorInputGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  84. package/dist/components/color-picker/ColorPicker.js.map +1 -1
  85. package/dist/components/color-picker/ColorPicker.vue_vue_type_script_setup_true_lang.js +15 -9
  86. package/dist/components/color-picker/ColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  87. package/dist/components/color-slider/ColorSlider.js.map +1 -1
  88. package/dist/components/color-slider/ColorSlider.vue_vue_type_script_setup_true_lang.js +15 -4
  89. package/dist/components/color-slider/ColorSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  90. package/dist/components/color-swatch-picker/ColorSwatchPicker.js.map +1 -1
  91. package/dist/components/color-swatch-picker/ColorSwatchPicker.vue_vue_type_script_setup_true_lang.js +15 -4
  92. package/dist/components/color-swatch-picker/ColorSwatchPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  93. package/dist/components/combo-box/ComboBoxInput.js.map +1 -1
  94. package/dist/components/combo-box/ComboBoxInput.vue_vue_type_script_setup_true_lang.js +7 -1
  95. package/dist/components/combo-box/ComboBoxInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  96. package/dist/components/combo-box/ComboBoxItem.js.map +1 -1
  97. package/dist/components/combo-box/ComboBoxItem.vue_vue_type_script_setup_true_lang.js +4 -2
  98. package/dist/components/combo-box/ComboBoxItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  99. package/dist/components/context-menu/ContextMenu.js +7 -0
  100. package/dist/components/context-menu/ContextMenu.js.map +1 -0
  101. package/dist/components/context-menu/ContextMenu.vue_vue_type_script_setup_true_lang.js +38 -0
  102. package/dist/components/context-menu/ContextMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  103. package/dist/components/context-menu/ContextMenuCheckboxItem.js +7 -0
  104. package/dist/components/context-menu/ContextMenuCheckboxItem.js.map +1 -0
  105. package/dist/components/context-menu/ContextMenuCheckboxItem.vue_vue_type_script_setup_true_lang.js +91 -0
  106. package/dist/components/context-menu/ContextMenuCheckboxItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  107. package/dist/components/context-menu/ContextMenuContent.js +7 -0
  108. package/dist/components/context-menu/ContextMenuContent.js.map +1 -0
  109. package/dist/components/context-menu/ContextMenuContent.vue_vue_type_script_setup_true_lang.js +135 -0
  110. package/dist/components/context-menu/ContextMenuContent.vue_vue_type_script_setup_true_lang.js.map +1 -0
  111. package/dist/components/context-menu/ContextMenuItem.js +7 -0
  112. package/dist/components/context-menu/ContextMenuItem.js.map +1 -0
  113. package/dist/components/context-menu/ContextMenuItem.vue_vue_type_script_setup_true_lang.js +74 -0
  114. package/dist/components/context-menu/ContextMenuItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  115. package/dist/components/context-menu/ContextMenuRadioGroup.js +7 -0
  116. package/dist/components/context-menu/ContextMenuRadioGroup.js.map +1 -0
  117. package/dist/components/context-menu/ContextMenuRadioGroup.vue_vue_type_script_setup_true_lang.js +40 -0
  118. package/dist/components/context-menu/ContextMenuRadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  119. package/dist/components/context-menu/ContextMenuRadioItem.js +7 -0
  120. package/dist/components/context-menu/ContextMenuRadioItem.js.map +1 -0
  121. package/dist/components/context-menu/ContextMenuRadioItem.vue_vue_type_script_setup_true_lang.js +77 -0
  122. package/dist/components/context-menu/ContextMenuRadioItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  123. package/dist/components/context-menu/ContextMenuSection.js +7 -0
  124. package/dist/components/context-menu/ContextMenuSection.js.map +1 -0
  125. package/dist/components/context-menu/ContextMenuSection.vue_vue_type_script_setup_true_lang.js +55 -0
  126. package/dist/components/context-menu/ContextMenuSection.vue_vue_type_script_setup_true_lang.js.map +1 -0
  127. package/dist/components/context-menu/ContextMenuSub.js +7 -0
  128. package/dist/components/context-menu/ContextMenuSub.js.map +1 -0
  129. package/dist/components/context-menu/ContextMenuSub.vue_vue_type_script_setup_true_lang.js +35 -0
  130. package/dist/components/context-menu/ContextMenuSub.vue_vue_type_script_setup_true_lang.js.map +1 -0
  131. package/dist/components/context-menu/ContextMenuSubContent.js +7 -0
  132. package/dist/components/context-menu/ContextMenuSubContent.js.map +1 -0
  133. package/dist/components/context-menu/ContextMenuSubContent.vue_vue_type_script_setup_true_lang.js +155 -0
  134. package/dist/components/context-menu/ContextMenuSubContent.vue_vue_type_script_setup_true_lang.js.map +1 -0
  135. package/dist/components/context-menu/ContextMenuSubTrigger.js +7 -0
  136. package/dist/components/context-menu/ContextMenuSubTrigger.js.map +1 -0
  137. package/dist/components/context-menu/ContextMenuSubTrigger.vue_vue_type_script_setup_true_lang.js +66 -0
  138. package/dist/components/context-menu/ContextMenuSubTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
  139. package/dist/components/context-menu/ContextMenuTrigger.js +7 -0
  140. package/dist/components/context-menu/ContextMenuTrigger.js.map +1 -0
  141. package/dist/components/context-menu/ContextMenuTrigger.vue_vue_type_script_setup_true_lang.js +44 -0
  142. package/dist/components/context-menu/ContextMenuTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
  143. package/dist/components/date-input/DateInput.js.map +1 -1
  144. package/dist/components/date-input/DateInput.vue_vue_type_script_setup_true_lang.js +61 -60
  145. package/dist/components/date-input/DateInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  146. package/dist/components/date-range-field/DateRangeField.js.map +1 -1
  147. package/dist/components/date-range-field/DateRangeField.vue_vue_type_script_setup_true_lang.js +61 -61
  148. package/dist/components/date-range-field/DateRangeField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  149. package/dist/components/date-time-picker/DateTimePicker.js.map +1 -1
  150. package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js +13 -13
  151. package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  152. package/dist/components/dropdown/DropdownCheckboxItem.js.map +1 -1
  153. package/dist/components/dropdown/DropdownCheckboxItem.vue_vue_type_script_setup_true_lang.js +4 -2
  154. package/dist/components/dropdown/DropdownCheckboxItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  155. package/dist/components/dropdown/DropdownItem.js.map +1 -1
  156. package/dist/components/dropdown/DropdownItem.vue_vue_type_script_setup_true_lang.js +4 -2
  157. package/dist/components/dropdown/DropdownItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  158. package/dist/components/dropdown/DropdownRadioItem.js.map +1 -1
  159. package/dist/components/dropdown/DropdownRadioItem.vue_vue_type_script_setup_true_lang.js +4 -2
  160. package/dist/components/dropdown/DropdownRadioItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  161. package/dist/components/dropdown/DropdownSubTrigger.js.map +1 -1
  162. package/dist/components/dropdown/DropdownSubTrigger.vue_vue_type_script_setup_true_lang.js +4 -2
  163. package/dist/components/dropdown/DropdownSubTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  164. package/dist/components/dropdown/DropdownTrigger.js.map +1 -1
  165. package/dist/components/dropdown/DropdownTrigger.vue_vue_type_script_setup_true_lang.js +7 -1
  166. package/dist/components/dropdown/DropdownTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  167. package/dist/components/editable/Editable.js +7 -0
  168. package/dist/components/editable/Editable.js.map +1 -0
  169. package/dist/components/editable/Editable.vue_vue_type_script_setup_true_lang.js +128 -0
  170. package/dist/components/editable/Editable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  171. package/dist/components/editable/EditableArea.js +7 -0
  172. package/dist/components/editable/EditableArea.js.map +1 -0
  173. package/dist/components/editable/EditableArea.vue_vue_type_script_setup_true_lang.js +41 -0
  174. package/dist/components/editable/EditableArea.vue_vue_type_script_setup_true_lang.js.map +1 -0
  175. package/dist/components/editable/EditableCancelTrigger.js +7 -0
  176. package/dist/components/editable/EditableCancelTrigger.js.map +1 -0
  177. package/dist/components/editable/EditableCancelTrigger.vue_vue_type_script_setup_true_lang.js +63 -0
  178. package/dist/components/editable/EditableCancelTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
  179. package/dist/components/editable/EditableEditTrigger.js +7 -0
  180. package/dist/components/editable/EditableEditTrigger.js.map +1 -0
  181. package/dist/components/editable/EditableEditTrigger.vue_vue_type_script_setup_true_lang.js +53 -0
  182. package/dist/components/editable/EditableEditTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
  183. package/dist/components/editable/EditableInput.js +7 -0
  184. package/dist/components/editable/EditableInput.js.map +1 -0
  185. package/dist/components/editable/EditableInput.vue_vue_type_script_setup_true_lang.js +38 -0
  186. package/dist/components/editable/EditableInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  187. package/dist/components/editable/EditablePreview.js +7 -0
  188. package/dist/components/editable/EditablePreview.js.map +1 -0
  189. package/dist/components/editable/EditablePreview.vue_vue_type_script_setup_true_lang.js +38 -0
  190. package/dist/components/editable/EditablePreview.vue_vue_type_script_setup_true_lang.js.map +1 -0
  191. package/dist/components/editable/EditableSubmitTrigger.js +7 -0
  192. package/dist/components/editable/EditableSubmitTrigger.js.map +1 -0
  193. package/dist/components/editable/EditableSubmitTrigger.vue_vue_type_script_setup_true_lang.js +53 -0
  194. package/dist/components/editable/EditableSubmitTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
  195. package/dist/components/fieldset/Fieldset.js.map +1 -1
  196. package/dist/components/fieldset/Fieldset.vue_vue_type_script_setup_true_lang.js +8 -2
  197. package/dist/components/fieldset/Fieldset.vue_vue_type_script_setup_true_lang.js.map +1 -1
  198. package/dist/components/form/Form.js.map +1 -1
  199. package/dist/components/form/Form.vue_vue_type_script_setup_true_lang.js +32 -156
  200. package/dist/components/form/Form.vue_vue_type_script_setup_true_lang.js.map +1 -1
  201. package/dist/components/form/FormField.js.map +1 -1
  202. package/dist/components/form/FormField.vue_vue_type_script_setup_true_lang.js +44 -23
  203. package/dist/components/form/FormField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  204. package/dist/components/form/form.context.js.map +1 -1
  205. package/dist/components/form/form.state.js +166 -0
  206. package/dist/components/form/form.state.js.map +1 -0
  207. package/dist/components/form/useField.js +112 -0
  208. package/dist/components/form/useField.js.map +1 -0
  209. package/dist/components/form/useForm.js +17 -0
  210. package/dist/components/form/useForm.js.map +1 -0
  211. package/dist/components/hover-card/HoverCard.js +7 -0
  212. package/dist/components/hover-card/HoverCard.js.map +1 -0
  213. package/dist/components/hover-card/HoverCard.vue_vue_type_script_lang.js +52 -0
  214. package/dist/components/hover-card/HoverCard.vue_vue_type_script_lang.js.map +1 -0
  215. package/dist/components/hover-card/HoverCardArrow.js +7 -0
  216. package/dist/components/hover-card/HoverCardArrow.js.map +1 -0
  217. package/dist/components/hover-card/HoverCardArrow.vue_vue_type_script_setup_true_lang.js +35 -0
  218. package/dist/components/hover-card/HoverCardArrow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  219. package/dist/components/hover-card/HoverCardContent.js +7 -0
  220. package/dist/components/hover-card/HoverCardContent.js.map +1 -0
  221. package/dist/components/hover-card/HoverCardContent.vue_vue_type_script_setup_true_lang.js +104 -0
  222. package/dist/components/hover-card/HoverCardContent.vue_vue_type_script_setup_true_lang.js.map +1 -0
  223. package/dist/components/hover-card/HoverCardTrigger.js +7 -0
  224. package/dist/components/hover-card/HoverCardTrigger.js.map +1 -0
  225. package/dist/components/hover-card/HoverCardTrigger.vue_vue_type_script_setup_true_lang.js +26 -0
  226. package/dist/components/hover-card/HoverCardTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
  227. package/dist/components/input/Input.js.map +1 -1
  228. package/dist/components/input/Input.vue_vue_type_script_setup_true_lang.js +76 -71
  229. package/dist/components/input/Input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  230. package/dist/components/input-otp/InputOTP.js.map +1 -1
  231. package/dist/components/input-otp/InputOTP.vue_vue_type_script_setup_true_lang.js +15 -4
  232. package/dist/components/input-otp/InputOTP.vue_vue_type_script_setup_true_lang.js.map +1 -1
  233. package/dist/components/link/Link.js.map +1 -1
  234. package/dist/components/link/Link.vue_vue_type_script_setup_true_lang.js +8 -2
  235. package/dist/components/link/Link.vue_vue_type_script_setup_true_lang.js.map +1 -1
  236. package/dist/components/list-box/ListBox.js.map +1 -1
  237. package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js +7 -1
  238. package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  239. package/dist/components/menubar/Menubar.js +7 -0
  240. package/dist/components/menubar/Menubar.js.map +1 -0
  241. package/dist/components/menubar/Menubar.vue_vue_type_script_setup_true_lang.js +58 -0
  242. package/dist/components/menubar/Menubar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  243. package/dist/components/menubar/MenubarCheckboxItem.js +7 -0
  244. package/dist/components/menubar/MenubarCheckboxItem.js.map +1 -0
  245. package/dist/components/menubar/MenubarCheckboxItem.vue_vue_type_script_setup_true_lang.js +91 -0
  246. package/dist/components/menubar/MenubarCheckboxItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  247. package/dist/components/menubar/MenubarContent.js +7 -0
  248. package/dist/components/menubar/MenubarContent.js.map +1 -0
  249. package/dist/components/menubar/MenubarContent.vue_vue_type_script_setup_true_lang.js +162 -0
  250. package/dist/components/menubar/MenubarContent.vue_vue_type_script_setup_true_lang.js.map +1 -0
  251. package/dist/components/menubar/MenubarItem.js +7 -0
  252. package/dist/components/menubar/MenubarItem.js.map +1 -0
  253. package/dist/components/menubar/MenubarItem.vue_vue_type_script_setup_true_lang.js +74 -0
  254. package/dist/components/menubar/MenubarItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  255. package/dist/components/menubar/MenubarMenu.js +7 -0
  256. package/dist/components/menubar/MenubarMenu.js.map +1 -0
  257. package/dist/components/menubar/MenubarMenu.vue_vue_type_script_setup_true_lang.js +20 -0
  258. package/dist/components/menubar/MenubarMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  259. package/dist/components/menubar/MenubarRadioGroup.js +7 -0
  260. package/dist/components/menubar/MenubarRadioGroup.js.map +1 -0
  261. package/dist/components/menubar/MenubarRadioGroup.vue_vue_type_script_setup_true_lang.js +40 -0
  262. package/dist/components/menubar/MenubarRadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  263. package/dist/components/menubar/MenubarRadioItem.js +7 -0
  264. package/dist/components/menubar/MenubarRadioItem.js.map +1 -0
  265. package/dist/components/menubar/MenubarRadioItem.vue_vue_type_script_setup_true_lang.js +77 -0
  266. package/dist/components/menubar/MenubarRadioItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  267. package/dist/components/menubar/MenubarSection.js +7 -0
  268. package/dist/components/menubar/MenubarSection.js.map +1 -0
  269. package/dist/components/menubar/MenubarSection.vue_vue_type_script_setup_true_lang.js +55 -0
  270. package/dist/components/menubar/MenubarSection.vue_vue_type_script_setup_true_lang.js.map +1 -0
  271. package/dist/components/menubar/MenubarSub.js +7 -0
  272. package/dist/components/menubar/MenubarSub.js.map +1 -0
  273. package/dist/components/menubar/MenubarSub.vue_vue_type_script_setup_true_lang.js +35 -0
  274. package/dist/components/menubar/MenubarSub.vue_vue_type_script_setup_true_lang.js.map +1 -0
  275. package/dist/components/menubar/MenubarSubContent.js +7 -0
  276. package/dist/components/menubar/MenubarSubContent.js.map +1 -0
  277. package/dist/components/menubar/MenubarSubContent.vue_vue_type_script_setup_true_lang.js +155 -0
  278. package/dist/components/menubar/MenubarSubContent.vue_vue_type_script_setup_true_lang.js.map +1 -0
  279. package/dist/components/menubar/MenubarSubTrigger.js +7 -0
  280. package/dist/components/menubar/MenubarSubTrigger.js.map +1 -0
  281. package/dist/components/menubar/MenubarSubTrigger.vue_vue_type_script_setup_true_lang.js +66 -0
  282. package/dist/components/menubar/MenubarSubTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
  283. package/dist/components/menubar/MenubarTrigger.js +7 -0
  284. package/dist/components/menubar/MenubarTrigger.js.map +1 -0
  285. package/dist/components/menubar/MenubarTrigger.vue_vue_type_script_setup_true_lang.js +59 -0
  286. package/dist/components/menubar/MenubarTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
  287. package/dist/components/meter/Meter.js.map +1 -1
  288. package/dist/components/meter/Meter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  289. package/dist/components/month-picker/MonthPicker.js +7 -0
  290. package/dist/components/month-picker/MonthPicker.js.map +1 -0
  291. package/dist/components/month-picker/MonthPicker.vue_vue_type_script_setup_true_lang.js +196 -0
  292. package/dist/components/month-picker/MonthPicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  293. package/dist/components/month-range-picker/MonthRangePicker.js +7 -0
  294. package/dist/components/month-range-picker/MonthRangePicker.js.map +1 -0
  295. package/dist/components/month-range-picker/MonthRangePicker.vue_vue_type_script_setup_true_lang.js +207 -0
  296. package/dist/components/month-range-picker/MonthRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  297. package/dist/components/navigation-menu/NavigationMenu.js +7 -0
  298. package/dist/components/navigation-menu/NavigationMenu.js.map +1 -0
  299. package/dist/components/navigation-menu/NavigationMenu.vue_vue_type_script_setup_true_lang.js +85 -0
  300. package/dist/components/navigation-menu/NavigationMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  301. package/dist/components/navigation-menu/NavigationMenuContent.js +7 -0
  302. package/dist/components/navigation-menu/NavigationMenuContent.js.map +1 -0
  303. package/dist/components/navigation-menu/NavigationMenuContent.vue_vue_type_script_setup_true_lang.js +70 -0
  304. package/dist/components/navigation-menu/NavigationMenuContent.vue_vue_type_script_setup_true_lang.js.map +1 -0
  305. package/dist/components/navigation-menu/NavigationMenuIndicator.js +7 -0
  306. package/dist/components/navigation-menu/NavigationMenuIndicator.js.map +1 -0
  307. package/dist/components/navigation-menu/NavigationMenuIndicator.vue_vue_type_script_setup_true_lang.js +53 -0
  308. package/dist/components/navigation-menu/NavigationMenuIndicator.vue_vue_type_script_setup_true_lang.js.map +1 -0
  309. package/dist/components/navigation-menu/NavigationMenuItem.js +7 -0
  310. package/dist/components/navigation-menu/NavigationMenuItem.js.map +1 -0
  311. package/dist/components/navigation-menu/NavigationMenuItem.vue_vue_type_script_setup_true_lang.js +20 -0
  312. package/dist/components/navigation-menu/NavigationMenuItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  313. package/dist/components/navigation-menu/NavigationMenuLink.js +7 -0
  314. package/dist/components/navigation-menu/NavigationMenuLink.js.map +1 -0
  315. package/dist/components/navigation-menu/NavigationMenuLink.vue_vue_type_script_setup_true_lang.js +70 -0
  316. package/dist/components/navigation-menu/NavigationMenuLink.vue_vue_type_script_setup_true_lang.js.map +1 -0
  317. package/dist/components/navigation-menu/NavigationMenuList.js +7 -0
  318. package/dist/components/navigation-menu/NavigationMenuList.js.map +1 -0
  319. package/dist/components/navigation-menu/NavigationMenuList.vue_vue_type_script_setup_true_lang.js +47 -0
  320. package/dist/components/navigation-menu/NavigationMenuList.vue_vue_type_script_setup_true_lang.js.map +1 -0
  321. package/dist/components/navigation-menu/NavigationMenuSub.js +7 -0
  322. package/dist/components/navigation-menu/NavigationMenuSub.js.map +1 -0
  323. package/dist/components/navigation-menu/NavigationMenuSub.vue_vue_type_script_setup_true_lang.js +37 -0
  324. package/dist/components/navigation-menu/NavigationMenuSub.vue_vue_type_script_setup_true_lang.js.map +1 -0
  325. package/dist/components/navigation-menu/NavigationMenuTrigger.js +7 -0
  326. package/dist/components/navigation-menu/NavigationMenuTrigger.js.map +1 -0
  327. package/dist/components/navigation-menu/NavigationMenuTrigger.vue_vue_type_script_setup_true_lang.js +72 -0
  328. package/dist/components/navigation-menu/NavigationMenuTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
  329. package/dist/components/navigation-menu/NavigationMenuViewport.js +7 -0
  330. package/dist/components/navigation-menu/NavigationMenuViewport.js.map +1 -0
  331. package/dist/components/navigation-menu/NavigationMenuViewport.vue_vue_type_script_setup_true_lang.js +53 -0
  332. package/dist/components/navigation-menu/NavigationMenuViewport.vue_vue_type_script_setup_true_lang.js.map +1 -0
  333. package/dist/components/number-field/NumberField.js.map +1 -1
  334. package/dist/components/number-field/NumberField.vue_vue_type_script_setup_true_lang.js +19 -5
  335. package/dist/components/number-field/NumberField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  336. package/dist/components/pagination/Pagination.js.map +1 -1
  337. package/dist/components/pagination/Pagination.vue_vue_type_script_setup_true_lang.js +9 -3
  338. package/dist/components/pagination/Pagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  339. package/dist/components/popover/PopoverClose.js.map +1 -1
  340. package/dist/components/popover/PopoverClose.vue_vue_type_script_setup_true_lang.js +11 -2
  341. package/dist/components/popover/PopoverClose.vue_vue_type_script_setup_true_lang.js.map +1 -1
  342. package/dist/components/progress-bar/ProgressBar.js.map +1 -1
  343. package/dist/components/progress-bar/ProgressBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  344. package/dist/components/progress-circle/ProgressCircle.js.map +1 -1
  345. package/dist/components/progress-circle/ProgressCircle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  346. package/dist/components/radio/Radio.js.map +1 -1
  347. package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js +16 -5
  348. package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js.map +1 -1
  349. package/dist/components/radio/RadioGroup.js.map +1 -1
  350. package/dist/components/radio/RadioGroup.vue_vue_type_script_setup_true_lang.js +18 -7
  351. package/dist/components/radio/RadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  352. package/dist/components/range-calendar/RangeCalendar.js.map +1 -1
  353. package/dist/components/range-calendar/RangeCalendar.vue_vue_type_script_setup_true_lang.js +19 -8
  354. package/dist/components/range-calendar/RangeCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  355. package/dist/components/select/Select.js.map +1 -1
  356. package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js +55 -51
  357. package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js.map +1 -1
  358. package/dist/components/select/SelectItem.js.map +1 -1
  359. package/dist/components/select/SelectItem.vue_vue_type_script_setup_true_lang.js +4 -2
  360. package/dist/components/select/SelectItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  361. package/dist/components/select/SelectTrigger.js.map +1 -1
  362. package/dist/components/select/SelectTrigger.vue_vue_type_script_setup_true_lang.js +18 -9
  363. package/dist/components/select/SelectTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  364. package/dist/components/slider/Slider.js.map +1 -1
  365. package/dist/components/slider/Slider.vue_vue_type_script_setup_true_lang.js +16 -5
  366. package/dist/components/slider/Slider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  367. package/dist/components/splitter/SplitterResizeHandle.js.map +1 -1
  368. package/dist/components/splitter/SplitterResizeHandle.vue_vue_type_script_setup_true_lang.js +8 -2
  369. package/dist/components/splitter/SplitterResizeHandle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  370. package/dist/components/switch/Switch.js.map +1 -1
  371. package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js +16 -5
  372. package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  373. package/dist/components/switch/SwitchGroup.js.map +1 -1
  374. package/dist/components/switch/SwitchGroup.vue_vue_type_script_setup_true_lang.js +10 -4
  375. package/dist/components/switch/SwitchGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  376. package/dist/components/table/Table.js.map +1 -1
  377. package/dist/components/table/Table.vue_vue_type_script_setup_true_lang.js.map +1 -1
  378. package/dist/components/table/TableBody.js.map +1 -1
  379. package/dist/components/table/TableBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
  380. package/dist/components/table/TableCheckboxCell.js.map +1 -1
  381. package/dist/components/table/TableCheckboxCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  382. package/dist/components/table/TableVirtualBody.js.map +1 -1
  383. package/dist/components/table/TableVirtualBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
  384. package/dist/components/table/table.context.js.map +1 -1
  385. package/dist/components/tabs/Tab.js.map +1 -1
  386. package/dist/components/tabs/Tab.vue_vue_type_script_setup_true_lang.js +11 -2
  387. package/dist/components/tabs/Tab.vue_vue_type_script_setup_true_lang.js.map +1 -1
  388. package/dist/components/tabs/TabList.js.map +1 -1
  389. package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js +2 -2
  390. package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  391. package/dist/components/tabs/Tabs.js.map +1 -1
  392. package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js +2 -2
  393. package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  394. package/dist/components/textarea/Textarea.js.map +1 -1
  395. package/dist/components/textarea/Textarea.vue_vue_type_script_setup_true_lang.js +70 -65
  396. package/dist/components/textarea/Textarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  397. package/dist/components/time-field/TimeField.js.map +1 -1
  398. package/dist/components/time-field/TimeField.vue_vue_type_script_setup_true_lang.js +61 -60
  399. package/dist/components/time-field/TimeField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  400. package/dist/components/time-picker/TimePicker.js +7 -0
  401. package/dist/components/time-picker/TimePicker.js.map +1 -0
  402. package/dist/components/time-picker/TimePicker.vue_vue_type_script_setup_true_lang.js +320 -0
  403. package/dist/components/time-picker/TimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  404. package/dist/components/time-range-field/TimeRangeField.js +7 -0
  405. package/dist/components/time-range-field/TimeRangeField.js.map +1 -0
  406. package/dist/components/time-range-field/TimeRangeField.vue_vue_type_script_setup_true_lang.js +364 -0
  407. package/dist/components/time-range-field/TimeRangeField.vue_vue_type_script_setup_true_lang.js.map +1 -0
  408. package/dist/components/toolbar/ToolbarButton.js.map +1 -1
  409. package/dist/components/toolbar/ToolbarButton.vue_vue_type_script_setup_true_lang.js +11 -2
  410. package/dist/components/toolbar/ToolbarButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  411. package/dist/components/toolbar/ToolbarToggleGroup.js.map +1 -1
  412. package/dist/components/toolbar/ToolbarToggleGroup.vue_vue_type_script_setup_true_lang.js +23 -6
  413. package/dist/components/toolbar/ToolbarToggleGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  414. package/dist/components/toolbar/ToolbarToggleItem.js.map +1 -1
  415. package/dist/components/toolbar/ToolbarToggleItem.vue_vue_type_script_setup_true_lang.js +11 -2
  416. package/dist/components/toolbar/ToolbarToggleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  417. package/dist/components/tooltip/TooltipProvider.js.map +1 -1
  418. package/dist/components/tooltip/TooltipProvider.vue_vue_type_script_setup_true_lang.js +8 -2
  419. package/dist/components/tooltip/TooltipProvider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  420. package/dist/components/tree/Tree.js.map +1 -1
  421. package/dist/components/tree/Tree.vue_vue_type_script_setup_true_lang.js +11 -2
  422. package/dist/components/tree/Tree.vue_vue_type_script_setup_true_lang.js.map +1 -1
  423. package/dist/components/year-range-picker/YearRangePicker.js +7 -0
  424. package/dist/components/year-range-picker/YearRangePicker.js.map +1 -0
  425. package/dist/components/year-range-picker/YearRangePicker.vue_vue_type_script_setup_true_lang.js +210 -0
  426. package/dist/components/year-range-picker/YearRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  427. package/dist/composables/useDeprecatedBooleanProp.js +43 -0
  428. package/dist/composables/useDeprecatedBooleanProp.js.map +1 -0
  429. package/dist/composables/useFormField.js +50 -0
  430. package/dist/composables/useFormField.js.map +1 -0
  431. package/dist/index.d.ts +5855 -3093
  432. package/dist/index.js +51 -1
  433. package/dist/packages/styles/dist/components/hover-card/hover-card.styles.js +10 -0
  434. package/dist/packages/styles/dist/components/hover-card/hover-card.styles.js.map +1 -0
  435. package/dist/utils/warnDeprecated.js +2 -1
  436. package/dist/utils/warnDeprecated.js.map +1 -1
  437. package/package.json +4 -4
  438. package/dist/components/date-time-picker/DateTimePickerTimeScroller.js +0 -7
  439. package/dist/components/date-time-picker/DateTimePickerTimeScroller.js.map +0 -1
  440. package/dist/components/date-time-picker/DateTimePickerTimeScroller.vue_vue_type_script_setup_true_lang.js.map +0 -1
@@ -1,28 +1,14 @@
1
1
  import { composeClassName } from "../../utils/composeClassName.js";
2
- import { computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeClass, openBlock, renderSlot, toDisplayString, toRef, unref, useAttrs, useId, useModel, useTemplateRef, vModelText, withDirectives } from "vue";
2
+ import { useDeprecatedBooleanProp } from "../../composables/useDeprecatedBooleanProp.js";
3
+ import { useFormField } from "../../composables/useFormField.js";
4
+ import FieldLabel_default from "../_shared/FieldLabel.js";
5
+ import FormFieldHelper_default from "../_shared/FormFieldHelper.js";
6
+ import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeClass, openBlock, renderSlot, toRef, unref, useAttrs, useId, useModel, useTemplateRef, vModelText, withDirectives } from "vue";
3
7
  import { useTextareaAutosize } from "@vueuse/core";
4
8
  import { textAreaVariants } from "@auronui/styles";
5
9
  //#region src/components/textarea/Textarea.vue?vue&type=script&setup=true&lang.ts
6
- var _hoisted_1 = [
7
- "data-invalid",
8
- "data-disabled",
9
- "data-readonly",
10
- "data-required",
11
- "data-has-label",
12
- "data-has-helper"
13
- ];
14
- var _hoisted_2 = ["for"];
15
- var _hoisted_3 = {
16
- key: 0,
17
- "aria-hidden": "true"
18
- };
19
- var _hoisted_4 = ["data-filled"];
20
- var _hoisted_5 = ["for"];
21
- var _hoisted_6 = {
22
- key: 0,
23
- "aria-hidden": "true"
24
- };
25
- var _hoisted_7 = [
10
+ var _hoisted_1 = ["data-filled"];
11
+ var _hoisted_2 = [
26
12
  "id",
27
13
  "rows",
28
14
  "placeholder",
@@ -33,8 +19,6 @@ var _hoisted_7 = [
33
19
  "aria-invalid",
34
20
  "aria-describedby"
35
21
  ];
36
- var _hoisted_8 = ["id"];
37
- var _hoisted_9 = ["id"];
38
22
  var Textarea_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
39
23
  inheritAttrs: false,
40
24
  __name: "Textarea",
@@ -55,9 +39,13 @@ var Textarea_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
55
39
  type: Boolean,
56
40
  default: false
57
41
  },
42
+ isReadOnly: {
43
+ type: Boolean,
44
+ default: void 0
45
+ },
58
46
  isReadonly: {
59
47
  type: Boolean,
60
- default: false
48
+ default: void 0
61
49
  },
62
50
  isRequired: {
63
51
  type: Boolean,
@@ -99,22 +87,24 @@ var Textarea_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
99
87
  const inputId = computed(() => attrs.id ?? generatedId);
100
88
  const inputAttrs = computed(() => Object.fromEntries(Object.entries(attrs).filter(([k]) => k !== "id")));
101
89
  const textareaEl = useTemplateRef("textareaEl");
90
+ const isReadOnly = useDeprecatedBooleanProp("Textarea", "isReadOnly", () => props.isReadOnly, "isReadonly", () => props.isReadonly);
102
91
  if (props.autoResize) useTextareaAutosize({
103
92
  element: textareaEl,
104
93
  input: toRef(modelValue)
105
94
  });
106
- const hasLabel = computed(() => !!props.label);
107
95
  const isFilled = computed(() => modelValue.value != null && String(modelValue.value) !== "");
108
- const descriptionId = computed(() => `${inputId.value}-description`);
109
- const errorMessageId = computed(() => `${inputId.value}-error`);
110
- const showError = computed(() => props.isInvalid && !!props.errorMessage);
111
- const showDescription = computed(() => !!props.description && !showError.value);
112
- const hasHelper = computed(() => showError.value || showDescription.value);
113
- const ariaDescribedBy = computed(() => {
114
- if (showError.value) return errorMessageId.value;
115
- if (showDescription.value) return descriptionId.value;
96
+ const { descriptionId, errorMessageId, showError, showDescription, hasHelper, ariaDescribedBy, hasLabel, showOutsideLabel, showInsideLabel, rootDataAttrs } = useFormField({
97
+ fieldId: () => inputId.value,
98
+ label: () => props.label,
99
+ description: () => props.description,
100
+ errorMessage: () => props.errorMessage,
101
+ isInvalid: () => props.isInvalid,
102
+ isDisabled: () => props.isDisabled,
103
+ isReadOnly: () => isReadOnly.value,
104
+ isRequired: () => props.isRequired,
105
+ labelPlacement: () => props.labelPlacement
116
106
  });
117
- const isInteractive = computed(() => !props.isDisabled && !props.isReadonly);
107
+ const isInteractive = computed(() => !props.isDisabled && !isReadOnly.value);
118
108
  const showClearButton = computed(() => props.isClearable && isFilled.value && isInteractive.value);
119
109
  function handleClear() {
120
110
  modelValue.value = "";
@@ -128,34 +118,38 @@ var Textarea_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
128
118
  fullWidth: props.fullWidth,
129
119
  isInvalid: props.isInvalid,
130
120
  isDisabled: props.isDisabled,
131
- isReadonly: props.isReadonly,
121
+ isReadonly: isReadOnly.value,
132
122
  hasLabel: hasLabel.value,
133
123
  labelPlacement: props.labelPlacement
134
124
  }));
135
- const showOutsideLabel = computed(() => hasLabel.value && props.labelPlacement !== "inside");
136
- const showInsideLabel = computed(() => hasLabel.value && props.labelPlacement === "inside");
137
125
  return (_ctx, _cache) => {
138
- return openBlock(), createElementBlock("div", {
139
- class: normalizeClass(unref(composeClassName)(slotFns.value.base(), props.class, props.classNames?.base)),
140
- "data-invalid": __props.isInvalid || void 0,
141
- "data-disabled": __props.isDisabled || void 0,
142
- "data-readonly": __props.isReadonly || void 0,
143
- "data-required": __props.isRequired || void 0,
144
- "data-has-label": hasLabel.value || void 0,
145
- "data-has-helper": hasHelper.value || void 0
146
- }, [showOutsideLabel.value ? (openBlock(), createElementBlock("label", {
126
+ return openBlock(), createElementBlock("div", mergeProps({ class: unref(composeClassName)(slotFns.value.base(), props.class, props.classNames?.base) }, unref(rootDataAttrs)), [unref(showOutsideLabel) ? (openBlock(), createBlock(FieldLabel_default, {
147
127
  key: 0,
148
128
  for: inputId.value,
129
+ label: __props.label,
130
+ "is-required": __props.isRequired,
149
131
  class: normalizeClass(unref(composeClassName)(slotFns.value.label(), props.classNames?.label))
150
- }, [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)) }, [createElementVNode("div", {
132
+ }, null, 8, [
133
+ "for",
134
+ "label",
135
+ "is-required",
136
+ "class"
137
+ ])) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(unref(composeClassName)(slotFns.value.mainWrapper(), props.classNames?.mainWrapper)) }, [createElementVNode("div", {
151
138
  class: normalizeClass(unref(composeClassName)(slotFns.value.inputWrapper(), props.classNames?.inputWrapper)),
152
- "data-filled": hasLabel.value ? isFilled.value || void 0 : void 0
139
+ "data-filled": unref(hasLabel) ? isFilled.value || void 0 : void 0
153
140
  }, [
154
- showInsideLabel.value ? (openBlock(), createElementBlock("label", {
141
+ unref(showInsideLabel) ? (openBlock(), createBlock(FieldLabel_default, {
155
142
  key: 0,
156
143
  for: inputId.value,
144
+ label: __props.label,
145
+ "is-required": __props.isRequired,
157
146
  class: normalizeClass(unref(composeClassName)(slotFns.value.label(), props.classNames?.label))
158
- }, [createTextVNode(toDisplayString(__props.label), 1), __props.isRequired ? (openBlock(), createElementBlock("span", _hoisted_6, " *")) : createCommentVNode("", true)], 10, _hoisted_5)) : createCommentVNode("", true),
147
+ }, null, 8, [
148
+ "for",
149
+ "label",
150
+ "is-required",
151
+ "class"
152
+ ])) : createCommentVNode("", true),
159
153
  _ctx.$slots.startContent ? (openBlock(), createElementBlock("span", {
160
154
  key: 1,
161
155
  class: normalizeClass(unref(composeClassName)(slotFns.value.startContent(), props.classNames?.startContent))
@@ -169,12 +163,12 @@ var Textarea_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
169
163
  placeholder: __props.placeholder,
170
164
  name: __props.name,
171
165
  disabled: __props.isDisabled || void 0,
172
- readonly: __props.isReadonly || void 0,
166
+ readonly: unref(isReadOnly) || void 0,
173
167
  required: __props.isRequired || void 0,
174
168
  "aria-invalid": __props.isInvalid || void 0,
175
- "aria-describedby": ariaDescribedBy.value,
169
+ "aria-describedby": unref(ariaDescribedBy),
176
170
  class: unref(composeClassName)(slotFns.value.input(), props.classNames?.input)
177
- }), null, 16, _hoisted_7), [[vModelText, modelValue.value]]),
171
+ }), null, 16, _hoisted_2), [[vModelText, modelValue.value]]),
178
172
  _ctx.$slots.endContent ? (openBlock(), createElementBlock("span", {
179
173
  key: 2,
180
174
  class: normalizeClass(unref(composeClassName)(slotFns.value.endContent(), props.classNames?.endContent))
@@ -214,18 +208,29 @@ var Textarea_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
214
208
  y2: "15"
215
209
  })
216
210
  ], -1)])], 2)) : createCommentVNode("", true)
217
- ], 10, _hoisted_4), hasHelper.value ? (openBlock(), createElementBlock("div", {
218
- key: 0,
219
- class: normalizeClass(unref(composeClassName)(slotFns.value.helperWrapper(), props.classNames?.helperWrapper))
220
- }, [showError.value ? (openBlock(), createElementBlock("div", {
221
- key: 0,
222
- id: errorMessageId.value,
223
- class: normalizeClass(unref(composeClassName)(slotFns.value.errorMessage(), props.classNames?.errorMessage))
224
- }, toDisplayString(__props.errorMessage), 11, _hoisted_8)) : showDescription.value ? (openBlock(), createElementBlock("div", {
225
- key: 1,
226
- id: descriptionId.value,
227
- class: normalizeClass(unref(composeClassName)(slotFns.value.description(), props.classNames?.description))
228
- }, toDisplayString(__props.description), 11, _hoisted_9)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)], 2)], 10, _hoisted_1);
211
+ ], 10, _hoisted_1), createVNode(FormFieldHelper_default, {
212
+ "has-helper": unref(hasHelper),
213
+ "show-error": unref(showError),
214
+ "show-description": unref(showDescription),
215
+ "error-message": __props.errorMessage,
216
+ description: __props.description,
217
+ "error-message-id": unref(errorMessageId),
218
+ "description-id": unref(descriptionId),
219
+ "wrapper-class": unref(composeClassName)(slotFns.value.helperWrapper(), props.classNames?.helperWrapper),
220
+ "error-class": unref(composeClassName)(slotFns.value.errorMessage(), props.classNames?.errorMessage),
221
+ "description-class": unref(composeClassName)(slotFns.value.description(), props.classNames?.description)
222
+ }, null, 8, [
223
+ "has-helper",
224
+ "show-error",
225
+ "show-description",
226
+ "error-message",
227
+ "description",
228
+ "error-message-id",
229
+ "description-id",
230
+ "wrapper-class",
231
+ "error-class",
232
+ "description-class"
233
+ ])], 2)], 16);
229
234
  };
230
235
  }
231
236
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/textarea/Textarea.vue"],"sourcesContent":["<!--\n Textarea — multi-line form-field component for @auronui/vue.\n\n Mirrors Input.vue's prop surface, slot architecture, and a11y contract.\n Textarea-specific additions: `rows` (initial visible rows) and `autoResize`\n (wires @vueuse/core useTextareaAutosize so height tracks content).\n\n ─── Anatomy ────────────────────────────────────────────────────────────\n base (.textarea-root)\n label [outside | outside-left]\n mainWrapper (.textarea__main-wrapper)\n inputWrapper (.textarea)\n label [inside]\n startContent (.textarea__start-content)\n <textarea ref=\"textareaEl\">\n endContent (.textarea__end-content)\n clearButton (.textarea__clear-button)\n helperWrapper (.textarea__helper-wrapper)\n errorMessage | description\n-->\n<script setup lang=\"ts\">\nimport { computed, nextTick, toRef, useAttrs, useId, useTemplateRef } from 'vue'\nimport { useTextareaAutosize } from '@vueuse/core'\nimport { textAreaVariants, type TextAreaVariants } 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 isClearable: false,\n rows: 3,\n autoResize: false,\n})\n\nconst emit = defineEmits<{\n clear: []\n}>()\n\nconst modelValue = defineModel<string>({ default: '' })\n\ntype Props = {\n /** Visual style of the field. @default 'flat' */\n variant?: TextAreaVariants['variant']\n /** Field size. @default 'md' */\n size?: TextAreaVariants['size']\n /** Accent color applied to focus ring + floating label. @default 'default' */\n color?: TextAreaVariants['color']\n /**\n * Where the `label` is rendered relative to the field.\n * @default 'inside'\n */\n labelPlacement?: TextAreaVariants['labelPlacement']\n /** Stretches root wrapper to 100% width. @default false */\n fullWidth?: boolean\n /** Marks the field as invalid. Enables `errorMessage`. @default false */\n isInvalid?: boolean\n /** Disables the field. @default false */\n isDisabled?: boolean\n /** Makes the field read-only. @default false */\n isReadonly?: boolean\n /** Adds a required asterisk next to the label and the `required` attribute. @default false */\n isRequired?: boolean\n /** Shows an × button that clears the value and refocuses the field. @default false */\n isClearable?: boolean\n /** Initial visible rows (native attribute). @default 3 */\n rows?: number\n /** Placeholder shown when empty. */\n placeholder?: string\n /** Form field name, for native form submission. */\n name?: string\n /** Field label. When omitted, the floating-label behavior is skipped. */\n label?: string\n /** Helper text displayed below the field. Suppressed when `isInvalid && errorMessage` is shown. */\n description?: string\n /** Error text displayed below the field. Only rendered when `isInvalid` is also true. */\n errorMessage?: string\n /** Auto-grow the textarea height to fit content (uses `useTextareaAutosize`). @default false */\n autoResize?: boolean\n /** Extra classes merged onto the root wrapper via `composeClassName`. */\n class?: ClassValue\n /** Per-slot class overrides. Each key accepts classes merged via `composeClassName`. */\n classNames?: Partial<{\n base: ClassValue\n label: ClassValue\n mainWrapper: ClassValue\n inputWrapper: ClassValue\n startContent: ClassValue\n input: ClassValue\n endContent: ClassValue\n clearButton: ClassValue\n helperWrapper: ClassValue\n errorMessage: ClassValue\n description: ClassValue\n }>\n}\n\nconst attrs = useAttrs()\nconst generatedId = useId()\nconst inputId = computed(() => (attrs.id as string | undefined) ?? generatedId)\nconst inputAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([k]) => k !== 'id'))\n)\n\nconst textareaEl = useTemplateRef<HTMLTextAreaElement>('textareaEl')\n\nif (props.autoResize) {\n useTextareaAutosize({\n element: textareaEl,\n input: toRef(modelValue),\n })\n}\n\nconst hasLabel = computed(() => !!props.label)\nconst isFilled = computed(() => modelValue.value != null && String(modelValue.value) !== '')\n\nconst descriptionId = computed(() => `${inputId.value}-description`)\nconst errorMessageId = computed(() => `${inputId.value}-error`)\nconst showError = computed(() => props.isInvalid && !!props.errorMessage)\nconst showDescription = computed(() => !!props.description && !showError.value)\nconst hasHelper = computed(() => showError.value || showDescription.value)\nconst ariaDescribedBy = computed(() => {\n if (showError.value) return errorMessageId.value\n if (showDescription.value) return descriptionId.value\n return undefined\n})\n\nconst isInteractive = computed(() => !props.isDisabled && !props.isReadonly)\nconst showClearButton = computed(\n () => props.isClearable && isFilled.value && isInteractive.value,\n)\n\nfunction handleClear() {\n modelValue.value = ''\n emit('clear')\n nextTick(() => textareaEl.value?.focus())\n}\n\nconst slotFns = computed(() =>\n textAreaVariants({\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 >\n <label\n v-if=\"showOutsideLabel\"\n :for=\"inputId\"\n :class=\"composeClassName(slotFns.label(), props.classNames?.label)\"\n >{{ label }}<span\n v-if=\"isRequired\"\n aria-hidden=\"true\"\n > *</span></label>\n\n <div :class=\"composeClassName(slotFns.mainWrapper(), props.classNames?.mainWrapper)\">\n <div\n :class=\"composeClassName(slotFns.inputWrapper(), props.classNames?.inputWrapper)\"\n :data-filled=\"hasLabel ? (isFilled || undefined) : undefined\"\n >\n <label\n v-if=\"showInsideLabel\"\n :for=\"inputId\"\n :class=\"composeClassName(slotFns.label(), props.classNames?.label)\"\n >{{ label }}<span\n v-if=\"isRequired\"\n aria-hidden=\"true\"\n > *</span></label>\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n >\n <slot name=\"startContent\" />\n </span>\n <textarea\n v-bind=\"inputAttrs\"\n :id=\"inputId\"\n ref=\"textareaEl\"\n v-model=\"modelValue\"\n :rows=\"rows\"\n :placeholder=\"placeholder\"\n :name=\"name\"\n :disabled=\"isDisabled || undefined\"\n :readonly=\"isReadonly || undefined\"\n :required=\"isRequired || undefined\"\n :aria-invalid=\"isInvalid || undefined\"\n :aria-describedby=\"ariaDescribedBy\"\n :class=\"composeClassName(slotFns.input(), props.classNames?.input)\"\n />\n <span\n v-if=\"$slots.endContent\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n >\n <slot name=\"endContent\" />\n </span>\n <button\n v-if=\"showClearButton\"\n type=\"button\"\n tabindex=\"-1\"\n :class=\"composeClassName(slotFns.clearButton(), props.classNames?.clearButton)\"\n aria-label=\"Clear textarea\"\n @click=\"handleClear\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n />\n <line\n x1=\"15\"\n y1=\"9\"\n x2=\"9\"\n y2=\"15\"\n />\n <line\n x1=\"9\"\n y1=\"9\"\n x2=\"15\"\n y2=\"15\"\n />\n </svg>\n </button>\n </div>\n\n <div\n v-if=\"hasHelper\"\n :class=\"composeClassName(slotFns.helperWrapper(), props.classNames?.helperWrapper)\"\n >\n <div\n v-if=\"showError\"\n :id=\"errorMessageId\"\n :class=\"composeClassName(slotFns.errorMessage(), props.classNames?.errorMessage)\"\n >\n {{ errorMessage }}\n </div>\n <div\n v-else-if=\"showDescription\"\n :id=\"descriptionId\"\n :class=\"composeClassName(slotFns.description(), props.classNames?.description)\"\n >\n {{ description }}\n </div>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"Textarea.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/textarea/Textarea.vue"],"sourcesContent":["<!--\n Textarea — multi-line form-field component for @auronui/vue.\n\n Mirrors Input.vue's prop surface, slot architecture, and a11y contract.\n Textarea-specific additions: `rows` (initial visible rows) and `autoResize`\n (wires @vueuse/core useTextareaAutosize so height tracks content).\n\n ─── Anatomy ────────────────────────────────────────────────────────────\n base (.textarea-root)\n label [outside | outside-left]\n mainWrapper (.textarea__main-wrapper)\n inputWrapper (.textarea)\n label [inside]\n startContent (.textarea__start-content)\n <textarea ref=\"textareaEl\">\n endContent (.textarea__end-content)\n clearButton (.textarea__clear-button)\n helperWrapper (.textarea__helper-wrapper)\n errorMessage | description\n-->\n<script setup lang=\"ts\">\nimport { computed, nextTick, toRef, useAttrs, useId, useTemplateRef } from 'vue'\nimport { useTextareaAutosize } from '@vueuse/core'\nimport { textAreaVariants, type TextAreaVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useDeprecatedBooleanProp } from '../../composables/useDeprecatedBooleanProp'\nimport { useFormField } from '../../composables/useFormField'\nimport FieldLabel from '../_shared/FieldLabel.vue'\nimport FormFieldHelper from '../_shared/FormFieldHelper.vue'\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: undefined,\n isReadonly: undefined,\n isRequired: false,\n isClearable: false,\n rows: 3,\n autoResize: false,\n})\n\nconst emit = defineEmits<{\n clear: []\n}>()\n\nconst modelValue = defineModel<string>({ default: '' })\n\ntype Props = {\n /** Visual style of the field. @default 'flat' */\n variant?: TextAreaVariants['variant']\n /** Field size. @default 'md' */\n size?: TextAreaVariants['size']\n /** Accent color applied to focus ring + floating label. @default 'default' */\n color?: TextAreaVariants['color']\n /**\n * Where the `label` is rendered relative to the field.\n * @default 'inside'\n */\n labelPlacement?: TextAreaVariants['labelPlacement']\n /** Stretches root wrapper to 100% width. @default false */\n fullWidth?: boolean\n /** Marks the field as invalid. Enables `errorMessage`. @default false */\n isInvalid?: boolean\n /** Disables the field. @default false */\n isDisabled?: boolean\n /** Makes the field read-only. @default false */\n isReadOnly?: boolean\n /** @deprecated Use isReadOnly instead. */\n isReadonly?: boolean\n /** Adds a required asterisk next to the label and the `required` attribute. @default false */\n isRequired?: boolean\n /** Shows an × button that clears the value and refocuses the field. @default false */\n isClearable?: boolean\n /** Initial visible rows (native attribute). @default 3 */\n rows?: number\n /** Placeholder shown when empty. */\n placeholder?: string\n /** Form field name, for native form submission. */\n name?: string\n /** Field label. When omitted, the floating-label behavior is skipped. */\n label?: string\n /** Helper text displayed below the field. Suppressed when `isInvalid && errorMessage` is shown. */\n description?: string\n /** Error text displayed below the field. Only rendered when `isInvalid` is also true. */\n errorMessage?: string\n /** Auto-grow the textarea height to fit content (uses `useTextareaAutosize`). @default false */\n autoResize?: boolean\n /** Extra classes merged onto the root wrapper via `composeClassName`. */\n class?: ClassValue\n /** Per-slot class overrides. Each key accepts classes merged via `composeClassName`. */\n classNames?: Partial<{\n base: ClassValue\n label: ClassValue\n mainWrapper: ClassValue\n inputWrapper: ClassValue\n startContent: ClassValue\n input: ClassValue\n endContent: ClassValue\n clearButton: ClassValue\n helperWrapper: ClassValue\n errorMessage: ClassValue\n description: ClassValue\n }>\n}\n\nconst attrs = useAttrs()\nconst generatedId = useId()\nconst inputId = computed(() => (attrs.id as string | undefined) ?? generatedId)\nconst inputAttrs = computed(() =>\n Object.fromEntries(Object.entries(attrs).filter(([k]) => k !== 'id'))\n)\n\nconst textareaEl = useTemplateRef<HTMLTextAreaElement>('textareaEl')\n\nconst isReadOnly = useDeprecatedBooleanProp(\n 'Textarea', 'isReadOnly', () => props.isReadOnly, 'isReadonly', () => props.isReadonly,\n)\n\nif (props.autoResize) {\n useTextareaAutosize({\n element: textareaEl,\n input: toRef(modelValue),\n })\n}\n\nconst isFilled = computed(() => modelValue.value != null && String(modelValue.value) !== '')\n\nconst {\n descriptionId,\n errorMessageId,\n showError,\n showDescription,\n hasHelper,\n ariaDescribedBy,\n hasLabel,\n showOutsideLabel,\n showInsideLabel,\n rootDataAttrs,\n} = useFormField({\n fieldId: () => inputId.value,\n label: () => props.label,\n description: () => props.description,\n errorMessage: () => props.errorMessage,\n isInvalid: () => props.isInvalid,\n isDisabled: () => props.isDisabled,\n isReadOnly: () => isReadOnly.value,\n isRequired: () => props.isRequired,\n labelPlacement: () => props.labelPlacement,\n})\n\nconst isInteractive = computed(() => !props.isDisabled && !isReadOnly.value)\nconst showClearButton = computed(\n () => props.isClearable && isFilled.value && isInteractive.value,\n)\n\nfunction handleClear() {\n modelValue.value = ''\n emit('clear')\n nextTick(() => textareaEl.value?.focus())\n}\n\nconst slotFns = computed(() =>\n textAreaVariants({\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: isReadOnly.value,\n hasLabel: hasLabel.value,\n labelPlacement: props.labelPlacement,\n }),\n)\n</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n v-bind=\"rootDataAttrs\"\n >\n <FieldLabel\n v-if=\"showOutsideLabel\"\n :for=\"inputId\"\n :label=\"label\"\n :is-required=\"isRequired\"\n :class=\"composeClassName(slotFns.label(), props.classNames?.label)\"\n />\n\n <div :class=\"composeClassName(slotFns.mainWrapper(), props.classNames?.mainWrapper)\">\n <div\n :class=\"composeClassName(slotFns.inputWrapper(), props.classNames?.inputWrapper)\"\n :data-filled=\"hasLabel ? (isFilled || undefined) : undefined\"\n >\n <FieldLabel\n v-if=\"showInsideLabel\"\n :for=\"inputId\"\n :label=\"label\"\n :is-required=\"isRequired\"\n :class=\"composeClassName(slotFns.label(), props.classNames?.label)\"\n />\n <span\n v-if=\"$slots.startContent\"\n :class=\"composeClassName(slotFns.startContent(), props.classNames?.startContent)\"\n >\n <slot name=\"startContent\" />\n </span>\n <textarea\n v-bind=\"inputAttrs\"\n :id=\"inputId\"\n ref=\"textareaEl\"\n v-model=\"modelValue\"\n :rows=\"rows\"\n :placeholder=\"placeholder\"\n :name=\"name\"\n :disabled=\"isDisabled || undefined\"\n :readonly=\"isReadOnly || undefined\"\n :required=\"isRequired || undefined\"\n :aria-invalid=\"isInvalid || undefined\"\n :aria-describedby=\"ariaDescribedBy\"\n :class=\"composeClassName(slotFns.input(), props.classNames?.input)\"\n />\n <span\n v-if=\"$slots.endContent\"\n :class=\"composeClassName(slotFns.endContent(), props.classNames?.endContent)\"\n >\n <slot name=\"endContent\" />\n </span>\n <button\n v-if=\"showClearButton\"\n type=\"button\"\n tabindex=\"-1\"\n :class=\"composeClassName(slotFns.clearButton(), props.classNames?.clearButton)\"\n aria-label=\"Clear textarea\"\n @click=\"handleClear\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n />\n <line\n x1=\"15\"\n y1=\"9\"\n x2=\"9\"\n y2=\"15\"\n />\n <line\n x1=\"9\"\n y1=\"9\"\n x2=\"15\"\n y2=\"15\"\n />\n </svg>\n </button>\n </div>\n\n <FormFieldHelper\n :has-helper=\"hasHelper\"\n :show-error=\"showError\"\n :show-description=\"showDescription\"\n :error-message=\"errorMessage\"\n :description=\"description\"\n :error-message-id=\"errorMessageId\"\n :description-id=\"descriptionId\"\n :wrapper-class=\"composeClassName(slotFns.helperWrapper(), props.classNames?.helperWrapper)\"\n :error-class=\"composeClassName(slotFns.errorMessage(), props.classNames?.errorMessage)\"\n :description-class=\"composeClassName(slotFns.description(), props.classNames?.description)\"\n />\n </div>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TimeField.js","names":[],"sources":["../../../src/components/time-field/TimeField.vue"],"sourcesContent":["<!--\n TimeField — form-field mirror of Input.vue for @internationalized/date Time values.\n\n Anatomy, data-attributes, floating-label behavior, start/end content\n slots, and a11y wiring all mirror Input.vue / DateInput.vue. See the\n Input.vue docblock for the canonical contract.\n-->\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs, useId, watch } from 'vue'\nimport { TimeFieldRoot, TimeFieldInput } from 'reka-ui'\nimport type { TimeValue } from 'reka-ui'\nimport { timeFieldVariants, type TimeFieldVariants } 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 granularity: 'minute',\n hideTimeZone: false,\n})\n\nconst modelValue = defineModel<TimeValue | null | undefined>()\n\ntype Props = {\n /** Visual style of the field. @default 'flat' */\n variant?: TimeFieldVariants['variant']\n /** Field height. @default 'md' */\n size?: TimeFieldVariants['size']\n /** Accent color applied to focus ring + floating label. @default 'default' */\n color?: TimeFieldVariants['color']\n /** Label placement relative to the field. @default 'inside' */\n labelPlacement?: TimeFieldVariants['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. */\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 endContent: ClassValue\n helperWrapper: ClassValue\n errorMessage: ClassValue\n description: ClassValue\n }>\n\n /* ─── TimeField-specific ──────────────────────────────────────── */\n defaultValue?: TimeValue\n defaultPlaceholder?: TimeValue\n placeholderValue?: TimeValue\n minValue?: TimeValue\n maxValue?: TimeValue\n granularity?: 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n /** Steps for segment keyboard navigation. */\n step?: Partial<Record<'hour' | 'minute' | 'second' | 'millisecond', number>>\n /** Enable step snapping behavior. */\n stepSnapping?: boolean\n locale?: string\n name?: string\n hideTimeZone?: boolean\n /** Marks the field as required for form submission. */\n required?: boolean\n /** Text direction for the field. */\n dir?: 'ltr' | 'rtl'\n /** Render root as a different element or component. */\n as?: string\n /** Render root child as root element. */\n asChild?: 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 != 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)\n// Reka components expose their root DOM node via $el — unwrap before using DOM APIs.\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 TIME SEGMENT specifically — not any descendant.\n// This prevents nested interactive children (e.g. a TimePickerTrigger button in\n// endContent) from flipping the field into the focused visual state.\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-time-field-segment')\n}\nfunction onDocFocusIn() { updateSegmentFocus() }\nfunction onDocFocusOut() { queueMicrotask(updateSegmentFocus) }\n\n// Guard against a focus snap-back after an outside click. When the user\n// clicks outside the field, we mark a short-lived \"suppress segment focus\"\n// window. Any focusin landing on a segment inside that window gets blurred\n// immediately — kills the two-click-to-blur UX regardless of which internal\n// mechanism (Reka VisuallyHidden, label-for, contenteditable selection\n// restoration) tried to restore the focus.\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-time-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-time-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 synchronously from the rendered segments — defaultValue +\n// isFilled from modelValue misses the uncontrolled case and the partially-typed\n// case. After each value/segment render, sniff any non-literal segment that\n// carries data-placeholder=\"false\".\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-time-field-segment]:not([data-reka-time-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, () => props.hourCycle], () => {\n queueMicrotask(recomputeFilled)\n}, { immediate: true })\n\nconst effectiveFilled = computed(() => isFilled.value || segmentsFilled.value)\n\n// Only intervene on the INITIAL click that enters the field. Once a segment\n// already holds focus, leave subsequent mousedowns alone so the user can\n// blur naturally (clicking elsewhere) without focus snapping back to a\n// segment and requiring a second click.\nfunction handleFieldMousedown(e: MouseEvent) {\n const target = e.target as HTMLElement | null\n if (!target) return\n if (target.closest('[data-reka-time-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-time-field-segment')) {\n return\n }\n const first = root.querySelector<HTMLElement>(\n '[data-reka-time-field-segment]:not([data-reka-time-field-segment=\"literal\"])',\n )\n if (first) {\n e.preventDefault()\n first.focus()\n }\n}\n\nconst slotFns = computed(() =>\n timeFieldVariants({\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 >\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 <TimeFieldRoot\n :id=\"fieldId\"\n ref=\"fieldRef\"\n v-model=\"modelValue\"\n :default-value=\"defaultValue\"\n :default-placeholder=\"defaultPlaceholder\"\n :placeholder=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :step=\"step\"\n :step-snapping=\"stepSnapping\"\n :locale=\"locale\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n :required=\"required\"\n :dir=\"dir\"\n :as=\"as\"\n :as-child=\"asChild\"\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 >\n <template\n v-for=\"(segment, _i) in segments\"\n :key=\"_i\"\n >\n <TimeFieldInput\n :part=\"segment.part\"\n :class=\"composeClassName(slotFns.segment(), props.classNames?.segment)\"\n >\n {{ segment.value }}\n </TimeFieldInput>\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 </TimeFieldRoot>\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":""}
1
+ {"version":3,"file":"TimeField.js","names":[],"sources":["../../../src/components/time-field/TimeField.vue"],"sourcesContent":["<!--\n TimeField — form-field mirror of Input.vue for @internationalized/date Time values.\n\n Anatomy, data-attributes, floating-label behavior, start/end content\n slots, and a11y wiring all mirror Input.vue / DateInput.vue. See the\n Input.vue docblock for the canonical contract.\n-->\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, useAttrs, useId, watch } from 'vue'\nimport { TimeFieldRoot, TimeFieldInput } from 'reka-ui'\nimport type { TimeValue } from 'reka-ui'\nimport { timeFieldVariants, type TimeFieldVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useFormField } from '../../composables/useFormField'\nimport FieldLabel from '../_shared/FieldLabel.vue'\nimport FormFieldHelper from '../_shared/FormFieldHelper.vue'\n\ndefineOptions({ inheritAttrs: false })\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'flat',\n size: 'md',\n color: 'default',\n labelPlacement: 'inside',\n fullWidth: false,\n isInvalid: false,\n isDisabled: false,\n isReadOnly: false,\n isRequired: false,\n granularity: 'minute',\n hideTimeZone: false,\n})\n\nconst modelValue = defineModel<TimeValue | null | undefined>()\n\ntype Props = {\n /** Visual style of the field. @default 'flat' */\n variant?: TimeFieldVariants['variant']\n /** Field height. @default 'md' */\n size?: TimeFieldVariants['size']\n /** Accent color applied to focus ring + floating label. @default 'default' */\n color?: TimeFieldVariants['color']\n /** Label placement relative to the field. @default 'inside' */\n labelPlacement?: TimeFieldVariants['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. */\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 endContent: ClassValue\n helperWrapper: ClassValue\n errorMessage: ClassValue\n description: ClassValue\n }>\n\n /* ─── TimeField-specific ──────────────────────────────────────── */\n defaultValue?: TimeValue\n defaultPlaceholder?: TimeValue\n placeholderValue?: TimeValue\n minValue?: TimeValue\n maxValue?: TimeValue\n granularity?: 'hour' | 'minute' | 'second'\n hourCycle?: 12 | 24\n /** Steps for segment keyboard navigation. */\n step?: Partial<Record<'hour' | 'minute' | 'second' | 'millisecond', number>>\n /** Enable step snapping behavior. */\n stepSnapping?: boolean\n locale?: string\n name?: string\n hideTimeZone?: boolean\n /** Marks the field as required for form submission. */\n required?: boolean\n /** Text direction for the field. */\n dir?: 'ltr' | 'rtl'\n /** Render root as a different element or component. */\n as?: string\n /** Render root child as root element. */\n asChild?: boolean\n}\n\nconst attrs = useAttrs()\nconst generatedId = useId()\nconst fieldId = computed(() => (attrs.id as string | undefined) ?? `${generatedId}-field`)\nconst labelId = computed(() => `${generatedId}-label`)\n\nconst isFilled = computed(() => modelValue.value != null)\n\nconst {\n descriptionId,\n errorMessageId,\n showError,\n showDescription,\n hasHelper,\n ariaDescribedBy,\n hasLabel,\n showOutsideLabel,\n showInsideLabel,\n rootDataAttrs,\n} = useFormField({\n fieldId: () => fieldId.value,\n label: () => props.label,\n description: () => props.description,\n errorMessage: () => props.errorMessage,\n isInvalid: () => props.isInvalid,\n isDisabled: () => props.isDisabled,\n isReadOnly: () => props.isReadOnly,\n isRequired: () => props.isRequired,\n labelPlacement: () => props.labelPlacement,\n})\n\nconst fieldRef = ref<HTMLElement | null>(null)\n// Reka components expose their root DOM node via $el — unwrap before using DOM APIs.\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 TIME SEGMENT specifically — not any descendant.\n// This prevents nested interactive children (e.g. a TimePickerTrigger button in\n// endContent) from flipping the field into the focused visual state.\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-time-field-segment')\n}\nfunction onDocFocusIn() { updateSegmentFocus() }\nfunction onDocFocusOut() { queueMicrotask(updateSegmentFocus) }\n\n// Guard against a focus snap-back after an outside click. When the user\n// clicks outside the field, we mark a short-lived \"suppress segment focus\"\n// window. Any focusin landing on a segment inside that window gets blurred\n// immediately — kills the two-click-to-blur UX regardless of which internal\n// mechanism (Reka VisuallyHidden, label-for, contenteditable selection\n// restoration) tried to restore the focus.\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-time-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-time-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 synchronously from the rendered segments — defaultValue +\n// isFilled from modelValue misses the uncontrolled case and the partially-typed\n// case. After each value/segment render, sniff any non-literal segment that\n// carries data-placeholder=\"false\".\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-time-field-segment]:not([data-reka-time-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, () => props.hourCycle], () => {\n queueMicrotask(recomputeFilled)\n}, { immediate: true })\n\nconst effectiveFilled = computed(() => isFilled.value || segmentsFilled.value)\n\n// Only intervene on the INITIAL click that enters the field. Once a segment\n// already holds focus, leave subsequent mousedowns alone so the user can\n// blur naturally (clicking elsewhere) without focus snapping back to a\n// segment and requiring a second click.\nfunction handleFieldMousedown(e: MouseEvent) {\n const target = e.target as HTMLElement | null\n if (!target) return\n if (target.closest('[data-reka-time-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-time-field-segment')) {\n return\n }\n const first = root.querySelector<HTMLElement>(\n '[data-reka-time-field-segment]:not([data-reka-time-field-segment=\"literal\"])',\n )\n if (first) {\n e.preventDefault()\n first.focus()\n }\n}\n\nconst slotFns = computed(() =>\n timeFieldVariants({\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</script>\n\n<template>\n <div\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n v-bind=\"rootDataAttrs\"\n >\n <FieldLabel\n v-if=\"showOutsideLabel\"\n :id=\"labelId\"\n :for=\"fieldId\"\n :label=\"label\"\n :is-required=\"isRequired\"\n :class=\"composeClassName(slotFns.label(), props.classNames?.label)\"\n />\n\n <div :class=\"composeClassName(slotFns.mainWrapper(), props.classNames?.mainWrapper)\">\n <TimeFieldRoot\n :id=\"fieldId\"\n ref=\"fieldRef\"\n v-model=\"modelValue\"\n :default-value=\"defaultValue\"\n :default-placeholder=\"defaultPlaceholder\"\n :placeholder=\"placeholderValue\"\n :min-value=\"minValue\"\n :max-value=\"maxValue\"\n :granularity=\"granularity\"\n :hour-cycle=\"hourCycle\"\n :step=\"step\"\n :step-snapping=\"stepSnapping\"\n :locale=\"locale\"\n :disabled=\"isDisabled\"\n :readonly=\"isReadOnly\"\n :name=\"name\"\n :hide-time-zone=\"hideTimeZone\"\n :required=\"required\"\n :dir=\"dir\"\n :as=\"as\"\n :as-child=\"asChild\"\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 <FieldLabel\n v-if=\"showInsideLabel\"\n :id=\"labelId\"\n :for=\"fieldId\"\n :label=\"label\"\n :is-required=\"isRequired\"\n :class=\"composeClassName(slotFns.label(), props.classNames?.label)\"\n />\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 >\n <template\n v-for=\"(segment, _i) in segments\"\n :key=\"_i\"\n >\n <TimeFieldInput\n :part=\"segment.part\"\n :class=\"composeClassName(slotFns.segment(), props.classNames?.segment)\"\n >\n {{ segment.value }}\n </TimeFieldInput>\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 </TimeFieldRoot>\n\n <FormFieldHelper\n :has-helper=\"hasHelper\"\n :show-error=\"showError\"\n :show-description=\"showDescription\"\n :error-message=\"errorMessage\"\n :description=\"description\"\n :error-message-id=\"errorMessageId\"\n :description-id=\"descriptionId\"\n error-role=\"alert\"\n :wrapper-class=\"composeClassName(slotFns.helperWrapper(), props.classNames?.helperWrapper)\"\n :error-class=\"composeClassName(slotFns.errorMessage(), props.classNames?.errorMessage)\"\n :description-class=\"composeClassName(slotFns.description(), props.classNames?.description)\"\n />\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -1,28 +1,11 @@
1
1
  import { composeClassName } from "../../utils/composeClassName.js";
2
- import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useAttrs, useId, useModel, watch, withCtx } from "vue";
2
+ import { useFormField } from "../../composables/useFormField.js";
3
+ import FieldLabel_default from "../_shared/FieldLabel.js";
4
+ import FormFieldHelper_default from "../_shared/FormFieldHelper.js";
5
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, mergeProps, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useAttrs, useId, useModel, watch, withCtx } from "vue";
3
6
  import { timeFieldVariants } from "@auronui/styles";
4
7
  import { TimeFieldInput, TimeFieldRoot } from "reka-ui";
5
8
  //#region src/components/time-field/TimeField.vue?vue&type=script&setup=true&lang.ts
6
- var _hoisted_1 = [
7
- "data-invalid",
8
- "data-disabled",
9
- "data-readonly",
10
- "data-required",
11
- "data-has-label",
12
- "data-has-helper"
13
- ];
14
- var _hoisted_2 = ["id", "for"];
15
- var _hoisted_3 = {
16
- key: 0,
17
- "aria-hidden": "true"
18
- };
19
- var _hoisted_4 = ["id", "for"];
20
- var _hoisted_5 = {
21
- key: 0,
22
- "aria-hidden": "true"
23
- };
24
- var _hoisted_6 = ["id"];
25
- var _hoisted_7 = ["id"];
26
9
  var TimeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
27
10
  inheritAttrs: false,
28
11
  __name: "TimeField",
@@ -93,16 +76,17 @@ var TimeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
93
76
  const generatedId = useId();
94
77
  const fieldId = computed(() => attrs.id ?? `${generatedId}-field`);
95
78
  const labelId = computed(() => `${generatedId}-label`);
96
- const descriptionId = computed(() => `${generatedId}-description`);
97
- const errorMessageId = computed(() => `${generatedId}-error`);
98
- const hasLabel = computed(() => !!props.label);
99
79
  const isFilled = computed(() => modelValue.value != null);
100
- const showError = computed(() => props.isInvalid && !!props.errorMessage);
101
- const showDescription = computed(() => !!props.description && !showError.value);
102
- const hasHelper = computed(() => showError.value || showDescription.value);
103
- const ariaDescribedBy = computed(() => {
104
- if (showError.value) return errorMessageId.value;
105
- if (showDescription.value) return descriptionId.value;
80
+ const { descriptionId, errorMessageId, showError, showDescription, hasHelper, ariaDescribedBy, hasLabel, showOutsideLabel, showInsideLabel, rootDataAttrs } = useFormField({
81
+ fieldId: () => fieldId.value,
82
+ label: () => props.label,
83
+ description: () => props.description,
84
+ errorMessage: () => props.errorMessage,
85
+ isInvalid: () => props.isInvalid,
86
+ isDisabled: () => props.isDisabled,
87
+ isReadOnly: () => props.isReadOnly,
88
+ isRequired: () => props.isRequired,
89
+ labelPlacement: () => props.labelPlacement
106
90
  });
107
91
  const fieldRef = ref(null);
108
92
  const fieldEl = computed(() => {
@@ -207,23 +191,21 @@ var TimeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
207
191
  hasLabel: hasLabel.value,
208
192
  labelPlacement: props.labelPlacement
209
193
  }));
210
- const showOutsideLabel = computed(() => hasLabel.value && props.labelPlacement !== "inside");
211
- const showInsideLabel = computed(() => hasLabel.value && props.labelPlacement === "inside");
212
194
  return (_ctx, _cache) => {
213
- return openBlock(), createElementBlock("div", {
214
- class: normalizeClass(unref(composeClassName)(slotFns.value.base(), props.class, props.classNames?.base)),
215
- "data-invalid": __props.isInvalid || void 0,
216
- "data-disabled": __props.isDisabled || void 0,
217
- "data-readonly": __props.isReadOnly || void 0,
218
- "data-required": __props.isRequired || void 0,
219
- "data-has-label": hasLabel.value || void 0,
220
- "data-has-helper": hasHelper.value || void 0
221
- }, [showOutsideLabel.value ? (openBlock(), createElementBlock("label", {
195
+ return openBlock(), createElementBlock("div", mergeProps({ class: unref(composeClassName)(slotFns.value.base(), props.class, props.classNames?.base) }, unref(rootDataAttrs)), [unref(showOutsideLabel) ? (openBlock(), createBlock(FieldLabel_default, {
222
196
  key: 0,
223
197
  id: labelId.value,
224
198
  for: fieldId.value,
199
+ label: __props.label,
200
+ "is-required": __props.isRequired,
225
201
  class: normalizeClass(unref(composeClassName)(slotFns.value.label(), props.classNames?.label))
226
- }, [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(TimeFieldRoot), {
202
+ }, null, 8, [
203
+ "id",
204
+ "for",
205
+ "label",
206
+ "is-required",
207
+ "class"
208
+ ])) : createCommentVNode("", true), createElementVNode("div", { class: normalizeClass(unref(composeClassName)(slotFns.value.mainWrapper(), props.classNames?.mainWrapper)) }, [createVNode(unref(TimeFieldRoot), {
227
209
  id: fieldId.value,
228
210
  ref_key: "fieldRef",
229
211
  ref: fieldRef,
@@ -247,12 +229,12 @@ var TimeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
247
229
  dir: __props.dir,
248
230
  as: __props.as,
249
231
  "as-child": __props.asChild,
250
- "aria-labelledby": hasLabel.value ? labelId.value : void 0,
251
- "aria-describedby": ariaDescribedBy.value,
232
+ "aria-labelledby": unref(hasLabel) ? labelId.value : void 0,
233
+ "aria-describedby": unref(ariaDescribedBy),
252
234
  "aria-required": __props.isRequired || void 0,
253
235
  "aria-invalid": __props.isInvalid || void 0,
254
236
  class: normalizeClass(unref(composeClassName)(slotFns.value.inputWrapper(), props.classNames?.inputWrapper)),
255
- "data-filled": hasLabel.value ? effectiveFilled.value || void 0 : void 0,
237
+ "data-filled": unref(hasLabel) ? effectiveFilled.value || void 0 : void 0,
256
238
  "data-focused": isFocused.value || void 0,
257
239
  "data-invalid": __props.isInvalid || void 0,
258
240
  "data-disabled": __props.isDisabled || void 0,
@@ -260,12 +242,20 @@ var TimeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
260
242
  onMousedown: handleFieldMousedown
261
243
  }, {
262
244
  default: withCtx(({ segments }) => [
263
- showInsideLabel.value ? (openBlock(), createElementBlock("label", {
245
+ unref(showInsideLabel) ? (openBlock(), createBlock(FieldLabel_default, {
264
246
  key: 0,
265
247
  id: labelId.value,
266
248
  for: fieldId.value,
249
+ label: __props.label,
250
+ "is-required": __props.isRequired,
267
251
  class: normalizeClass(unref(composeClassName)(slotFns.value.label(), props.classNames?.label))
268
- }, [createTextVNode(toDisplayString(__props.label), 1), __props.isRequired ? (openBlock(), createElementBlock("span", _hoisted_5, " *")) : createCommentVNode("", true)], 10, _hoisted_4)) : createCommentVNode("", true),
252
+ }, null, 8, [
253
+ "id",
254
+ "for",
255
+ "label",
256
+ "is-required",
257
+ "class"
258
+ ])) : createCommentVNode("", true),
269
259
  _ctx.$slots.startContent ? (openBlock(), createElementBlock("span", {
270
260
  key: 1,
271
261
  class: normalizeClass(unref(composeClassName)(slotFns.value.startContent(), props.classNames?.startContent)),
@@ -322,19 +312,30 @@ var TimeField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
322
312
  "data-invalid",
323
313
  "data-disabled",
324
314
  "data-readonly"
325
- ]), hasHelper.value ? (openBlock(), createElementBlock("div", {
326
- key: 0,
327
- class: normalizeClass(unref(composeClassName)(slotFns.value.helperWrapper(), props.classNames?.helperWrapper))
328
- }, [showError.value ? (openBlock(), createElementBlock("div", {
329
- key: 0,
330
- id: errorMessageId.value,
331
- class: normalizeClass(unref(composeClassName)(slotFns.value.errorMessage(), props.classNames?.errorMessage)),
332
- role: "alert"
333
- }, toDisplayString(__props.errorMessage), 11, _hoisted_6)) : showDescription.value ? (openBlock(), createElementBlock("div", {
334
- key: 1,
335
- id: descriptionId.value,
336
- class: normalizeClass(unref(composeClassName)(slotFns.value.description(), props.classNames?.description))
337
- }, toDisplayString(__props.description), 11, _hoisted_7)) : createCommentVNode("", true)], 2)) : createCommentVNode("", true)], 2)], 10, _hoisted_1);
315
+ ]), createVNode(FormFieldHelper_default, {
316
+ "has-helper": unref(hasHelper),
317
+ "show-error": unref(showError),
318
+ "show-description": unref(showDescription),
319
+ "error-message": __props.errorMessage,
320
+ description: __props.description,
321
+ "error-message-id": unref(errorMessageId),
322
+ "description-id": unref(descriptionId),
323
+ "error-role": "alert",
324
+ "wrapper-class": unref(composeClassName)(slotFns.value.helperWrapper(), props.classNames?.helperWrapper),
325
+ "error-class": unref(composeClassName)(slotFns.value.errorMessage(), props.classNames?.errorMessage),
326
+ "description-class": unref(composeClassName)(slotFns.value.description(), props.classNames?.description)
327
+ }, null, 8, [
328
+ "has-helper",
329
+ "show-error",
330
+ "show-description",
331
+ "error-message",
332
+ "description",
333
+ "error-message-id",
334
+ "description-id",
335
+ "wrapper-class",
336
+ "error-class",
337
+ "description-class"
338
+ ])], 2)], 16);
338
339
  };
339
340
  }
340
341
  });