@povio/ui 5.0.0-rc.8 → 6.0.0-rc.1

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 (554) hide show
  1. package/MIGRATION.md +645 -0
  2. package/README.md +247 -21
  3. package/dist/{Accordion-BzwO4_ml.js → Accordion-DQRdeDs1.js} +5 -5
  4. package/dist/{Alert-DfiJbKH0.d.ts → Alert-Cee_nKWj.d.ts} +3 -3
  5. package/dist/{AlertDialog-OWTbR4km.d.ts → AlertDialog-uNDUIyng.d.ts} +3 -3
  6. package/dist/Autocomplete-CWU9Ev3J.js +142 -0
  7. package/dist/Autocomplete-D_4gEL7D.d.ts +23 -0
  8. package/dist/Autocomplete.bound-CqhZtdd8.d.ts +9 -0
  9. package/dist/Autocomplete.bound-D0pgmsHB.js +28 -0
  10. package/dist/{Badge-CBNpj823.d.ts → Badge-C4HI9XX4.d.ts} +2 -2
  11. package/dist/{BadgeButton-Ccgt3oGO.d.ts → BadgeButton-h3MeQYcp.d.ts} +2 -2
  12. package/dist/{BottomSheet-DbQuzfAB.d.ts → BottomSheet-BQXSdxoX.d.ts} +1 -1
  13. package/dist/{BottomSheet-BXLE3161.js → BottomSheet-z5brMtDt.js} +6 -80
  14. package/dist/{BottomSheet.lazy-D9LCEo7s.d.ts → BottomSheet.lazy-BzvLg8Ea.d.ts} +1 -1
  15. package/dist/{Breadcrumbs-FF8hMfXd.js → Breadcrumbs-AbUBqBTq.js} +9 -9
  16. package/dist/{Breadcrumbs-CUV6CU8Q.d.ts → Breadcrumbs-B9O0_VSN.d.ts} +1 -1
  17. package/dist/{Button-D6KlWSFL.js → Button-C1YB5dOw.js} +3 -3
  18. package/dist/Button-DER_6cxv.js +16 -0
  19. package/dist/Button-f7FPTaiN.d.ts +13 -0
  20. package/dist/ButtonBase-CYTFS-xK.d.ts +32 -0
  21. package/dist/{Button-BPTvffuk.js → ButtonBase-CeFSNcVs.js} +9 -9
  22. package/dist/{Calendar-BxtOuqIM.js → Calendar-DRQ536wk.js} +20 -16
  23. package/dist/{Checkbox-DYxXYfKL.js → Checkbox-BI3DQPLa.js} +19 -37
  24. package/dist/{Checkbox-DVTWaMKa.d.ts → Checkbox-CCvC7OVT.d.ts} +9 -8
  25. package/dist/Checkbox.bound-CMZnF2_d.js +33 -0
  26. package/dist/Checkbox.bound-DBt33Inx.d.ts +9 -0
  27. package/dist/{CheckboxCheckmark-D_uc9pon.js → CheckboxCheckmark-BzT6MwH5.js} +9 -6
  28. package/dist/CheckboxGroup-DQw4hsFa.js +139 -0
  29. package/dist/CheckboxGroup-MJ6crCZk.d.ts +30 -0
  30. package/dist/CheckboxGroup.bound-CTCdezUN.js +32 -0
  31. package/dist/CheckboxGroup.bound-j2Sc8QtU.d.ts +9 -0
  32. package/dist/ComboBox-DFlz6HJ8.js +212 -0
  33. package/dist/{DatePicker-wulRNGyL.js → DatePicker-CSm9c37c.js} +38 -48
  34. package/dist/{DatePicker-8xSs_jNd.d.ts → DatePicker-umTISfvn.d.ts} +21 -10
  35. package/dist/DatePicker.bound-KLyoWNcX.d.ts +9 -0
  36. package/dist/DatePicker.bound-Yqckg7Mk.js +36 -0
  37. package/dist/{DatePickerInput-BB_vPlKu.js → DatePickerInput-Cs9RwZfy.js} +41 -29
  38. package/dist/{DatePickerInput-D81ZJ3fT.d.ts → DatePickerInput-DwHQvLzi.d.ts} +3 -3
  39. package/dist/{DateRangePicker-Bfq-yDm7.d.ts → DateRangePicker-hV_U1IK0.d.ts} +30 -10
  40. package/dist/{DateRangePicker-B0tMVREG.js → DateRangePicker-s_4n-F_P.js} +75 -64
  41. package/dist/DateRangePicker.bound-C1klxYW0.js +35 -0
  42. package/dist/DateRangePicker.bound-D-GPENNe.d.ts +9 -0
  43. package/dist/{DateTimePicker-WGMr0bEH.js → DateTimePicker-411pU7VF.js} +38 -42
  44. package/dist/{DateTimePicker-D4lHyf6P.d.ts → DateTimePicker-wgV0SUeZ.d.ts} +21 -11
  45. package/dist/DateTimePicker.bound-BDyUzidV.js +32 -0
  46. package/dist/DateTimePicker.bound-cF2X_ncj.d.ts +9 -0
  47. package/dist/{Dialog-9manOgMA.js → Dialog-DSl1Fkqi.js} +10 -7
  48. package/dist/Dialog-V-2cgGk1.d.ts +21 -0
  49. package/dist/{Dialog-CKLkS00H.js → Dialog-lFYX-7Ax.js} +22 -27
  50. package/dist/DropdownMenu-Bl_C5W_E.d.ts +25 -0
  51. package/dist/{DropdownMenu-5jmtgLXd.js → DropdownMenu-DH7E2aXb.js} +6 -6
  52. package/dist/{DropdownMenuDesktop-Cl9gZVq0.js → DropdownMenuDesktop-nMoCa6N5.js} +3 -3
  53. package/dist/{FileInput-DP105Iy9.js → FileInput-CqRrQRM-.js} +25 -39
  54. package/dist/{FileInput-C4CE5kuP.d.ts → FileInput-Q72yXorH.d.ts} +24 -20
  55. package/dist/FileInput.bound-BZ7-g-dq.js +30 -0
  56. package/dist/FileInput.bound-CG2G5E2K.d.ts +8 -0
  57. package/dist/{FileTrigger-Cthk5_Wp.js → FileTrigger-DBX1Io6E.js} +36 -7
  58. package/dist/FileUpload-B4ibHWQn.d.ts +11 -0
  59. package/dist/{FileUpload-CgNDIvzg.js → FileUpload-CG60c6wM.js} +251 -140
  60. package/dist/FileUpload.bound-C-Zy1n5Y.d.ts +16 -0
  61. package/dist/FileUpload.bound-DQ6uuH2W.js +30 -0
  62. package/dist/{FileUploadContainer-042ztsaL.d.ts → FileUploadContainer-CtUhDntB.d.ts} +1 -1
  63. package/dist/{Form-DlQcyN1f.js → Form-CqF1SaVw.js} +2 -2
  64. package/dist/{FormField-Byiehm9y.d.ts → FormField-BIRMlgu4.d.ts} +4 -2
  65. package/dist/{FormField-AY25LzbW.js → FormField-D7KKJ6kG.js} +12 -10
  66. package/dist/{FormFieldError-BVAO5p7H.js → FormFieldError-Bqjg9cMb.js} +1 -1
  67. package/dist/FormFieldHeaderTooltip-k8Snf_oM.js +47 -0
  68. package/dist/{Heading-nI1_VOaE.js → Heading-D4XFYv__.js} +2 -2
  69. package/dist/IconButton-BM2DUNtN.d.ts +25 -0
  70. package/dist/{InlineTooltipWrapper-BpApaGXV.js → InlineTooltipWrapper-DBuQX2yo.js} +1 -1
  71. package/dist/{Input-BsbLZDtC.js → Input-BG0Xjw5X.js} +2 -2
  72. package/dist/{Input-DOanwj3l.d.ts → Input-BX3sZBEp.d.ts} +13 -9
  73. package/dist/Input-CG4Irgae.js +229 -0
  74. package/dist/Input.bound-BE-espm0.d.ts +9 -0
  75. package/dist/Input.bound-jZx8gJro.js +31 -0
  76. package/dist/{InputContent-CXuP1ghQ.d.ts → InputContent-DDFr0kml.d.ts} +4 -4
  77. package/dist/{useFieldAccessibility-CcBTgGfm.js → InputContent-KhD4_YvO.js} +12 -25
  78. package/dist/{Label-B2-B-uFY.js → Label-BGvF9vWx.js} +2 -2
  79. package/dist/{Link-Ow9H7kNv.d.ts → Link-Bw2m9W4B.d.ts} +3 -3
  80. package/dist/{Link-FupWOW1f.js → Link-Chux-Clm.js} +2 -2
  81. package/dist/{ListBox-CL8Ar4Q_.js → ListBox-CoUk0kkt.js} +10 -11
  82. package/dist/{MenuItem-DHyqOqln.d.ts → MenuItem-DPZzOqp2.d.ts} +1 -1
  83. package/dist/{Modal-w60dVQcb.js → Modal-B4p1zFqi.js} +58 -20
  84. package/dist/NumberField-CxwTlqud.js +225 -0
  85. package/dist/{NumberField-Cb9Gf6QJ.d.ts → NumberField-qjvHhCfN.d.ts} +13 -9
  86. package/dist/NumberField.bound-DXPGF5YK.d.ts +9 -0
  87. package/dist/NumberField.bound-zySl-v_q.js +32 -0
  88. package/dist/{NumberFormatter-CLDS_LRZ.js → NumberFormatter-DYarfm5F.js} +2 -36
  89. package/dist/{NumberRangeInput-B_sMIpP1.js → NumberRangeInput-BrW03wC6.js} +15 -43
  90. package/dist/{NumberRangeInput-BfbJQqzn.d.ts → NumberRangeInput-CS4Kn427.d.ts} +13 -8
  91. package/dist/NumberRangeInput.bound-C8I7m1cW.d.ts +9 -0
  92. package/dist/NumberRangeInput.bound-CKywKEKI.js +32 -0
  93. package/dist/{OverlayArrow-D8z7cCsw.js → OverlayArrow-DF0jMwul.js} +2 -2
  94. package/dist/{Pagination-CwQu5Py8.d.ts → Pagination-DkpAg2x6.d.ts} +1 -1
  95. package/dist/{PaginationList-DMRUGtf8.d.ts → PaginationList-DNmZRcS6.d.ts} +1 -1
  96. package/dist/{PaginationList-DptMNpNs.js → PaginationList-PjOxNQwB.js} +93 -94
  97. package/dist/PasswordInput-BHPFkVbM.d.ts +11 -0
  98. package/dist/PasswordInput.bound-CrXKvfil.js +23 -0
  99. package/dist/{PasswordInput-CLwFUgl0.d.ts → PasswordInput.bound-DC57m4NT.d.ts} +5 -6
  100. package/dist/{Popover-BTHPteIh.d.ts → Popover-pjd0Hu61.d.ts} +2 -2
  101. package/dist/{Progress-CjWOR38H.d.ts → Progress-1WGRZE8l.d.ts} +3 -3
  102. package/dist/{Progress-Du30L4_s.js → Progress-De76pCfX.js} +1 -1
  103. package/dist/{RadioGroup-CUGNSJql.js → RadioGroup-BPSvcre6.js} +12 -37
  104. package/dist/RadioGroup-DEwQ6B1F.d.ts +26 -0
  105. package/dist/RadioGroup.bound-CN4K9dV2.js +32 -0
  106. package/dist/RadioGroup.bound-Dj6CEG6M.d.ts +9 -0
  107. package/dist/{RichTextEditor-VDOpj7sk.js → RichTextEditor-BYIQW8QA.js} +147 -78
  108. package/dist/RichTextEditor-hJtuB7Y6.d.ts +28 -0
  109. package/dist/{staticSelect.utils-CzlnLPPd.js → Select-Br_3eecr.js} +194 -235
  110. package/dist/{SelectBase-Omiq2D3M.d.ts → Select-DHYddedn.d.ts} +32 -11
  111. package/dist/Select.bound-CJ-tCsmX.d.ts +17 -0
  112. package/dist/Select.bound-CgLKMzLn.js +34 -0
  113. package/dist/{SelectionIndicator-JblvLKCu.js → SelectionIndicator-B7C5Y0JM.js} +1 -1
  114. package/dist/{SharedElementTransition-Da1c_cOO.js → SharedElementTransition-DJ9CCbEa.js} +1 -1
  115. package/dist/{Slider-EYlGCLWe.d.ts → Slider-CcoNTFVN.d.ts} +9 -8
  116. package/dist/{Slider-Clc1szFY.js → Slider-CqB2TPTR.js} +12 -35
  117. package/dist/Slider.bound-8B5qzQ-8.d.ts +9 -0
  118. package/dist/Slider.bound-Bp7Zrs9_.js +31 -0
  119. package/dist/{Spinner-DbXeDOa2.d.ts → Spinner-B-crRcdG.d.ts} +2 -2
  120. package/dist/{SplitButton-D9ngY1rJ.d.ts → SplitButton-BzhbtpFA.d.ts} +3 -3
  121. package/dist/{Stepper-Cp5vbL5g.js → Stepper-CMw6QnCu.js} +2 -2
  122. package/dist/{Stepper-TATlHZhQ.d.ts → Stepper-LORgYAJr.d.ts} +8 -8
  123. package/dist/Switch-CSitpm4o.d.ts +24 -0
  124. package/dist/{Switch-CimmMqEk.js → Switch-R0kAicgM.js} +7 -32
  125. package/dist/Switch.bound-DVjqsum1.d.ts +9 -0
  126. package/dist/Switch.bound-Dk-BmxJd.js +33 -0
  127. package/dist/{Tag-AHfV_XSf.d.ts → Tag-CoqCTZRm.d.ts} +6 -6
  128. package/dist/{Text-D2MPZ3sY.js → Text-D72yc4S6.js} +1 -1
  129. package/dist/{TextArea-B3teIhsJ.js → TextArea-DCnqXuHC.js} +29 -30
  130. package/dist/{TextArea-l_keyLK7.d.ts → TextArea-e8sQm205.d.ts} +11 -9
  131. package/dist/TextArea.bound-BJZ9m_FE.js +28 -0
  132. package/dist/TextArea.bound-DEZuRYm_.d.ts +9 -0
  133. package/dist/{TimePicker-CU_yL2sY.js → TimePicker-BwF-Crbg.js} +54 -46
  134. package/dist/TimePicker-Zi7B6VTr.d.ts +45 -0
  135. package/dist/TimePicker.bound-B-BVLNbk.js +32 -0
  136. package/dist/TimePicker.bound-Bxtb6uJL.d.ts +9 -0
  137. package/dist/{Toast-ruXqONDA.d.ts → Toast-Dl6KMa58.d.ts} +1 -1
  138. package/dist/{ToastContainer-qgpzMFD4.js → ToastContainer-BDvta6st.js} +3 -3
  139. package/dist/ToggleButton-Cce9bnBw.d.ts +17 -0
  140. package/dist/{ToggleButton-BW1ensey.js → ToggleButton-DUQ8nwKY.js} +5 -5
  141. package/dist/{toggleGroup.types-Bp43zbSQ.d.ts → ToggleGroup-BJ8cqXaO.d.ts} +14 -13
  142. package/dist/{ToggleGroup-BULVwErp.js → ToggleGroup-s5sDSB6l.js} +132 -158
  143. package/dist/ToggleGroup.bound-Cv09n91n.d.ts +9 -0
  144. package/dist/ToggleGroup.bound-DEc7rdNF.js +67 -0
  145. package/dist/Tooltip-BiS7isYB.d.ts +16 -0
  146. package/dist/{Tooltip-CpG1nz7Y.js → Tooltip-CMigoyri.js} +42 -7
  147. package/dist/{TooltipWrapper-3jyN0Wss.js → TooltipWrapper-D7HUZLsP.js} +6 -6
  148. package/dist/{Typography-XljT9s02.d.ts → Typography-D2FfZr7a.d.ts} +1 -1
  149. package/dist/{accordion.cva-CL1bVscW.js → accordion.cva-CeBWV9EO.js} +6 -6
  150. package/dist/{badgeButton.cva-B2bgCQP6.d.ts → badgeButton.cva-B8EQLwPv.d.ts} +3 -3
  151. package/dist/{badgeButton.cva-CvN4CTx5.js → badgeButton.cva-BPyVejxO.js} +66 -66
  152. package/dist/{breadcrumbs.cva-7zzdDhVR.js → breadcrumbs.cva-DPwJJK_D.js} +4 -4
  153. package/dist/{button.cva-C7kEhgoA.d.ts → button.cva-CBckM91c.d.ts} +3 -3
  154. package/dist/{button.cva-rv5Uq4aW.js → button.cva-vO0fPUTn.js} +25 -25
  155. package/dist/{buttonContent.cva-DPIlROA9.d.ts → buttonContent.cva-DG-4lRz4.d.ts} +2 -2
  156. package/dist/{checkbox.cva-t1Ox50hy.d.ts → checkbox.cva-CJy87xUo.d.ts} +5 -5
  157. package/dist/{checkbox.cva-IfOByVLA.js → checkbox.cva-D-D9Qgaf.js} +3 -3
  158. package/dist/components/accordion.js +1 -1
  159. package/dist/components/alert-dialog.d.ts +1 -1
  160. package/dist/components/alert-dialog.js +93 -86
  161. package/dist/components/alert.d.ts +1 -1
  162. package/dist/components/alert.js +1 -1
  163. package/dist/components/autocomplete.d.ts +2 -2
  164. package/dist/components/autocomplete.js +1 -134
  165. package/dist/components/badge-button.d.ts +1 -1
  166. package/dist/components/badge-button.js +3 -3
  167. package/dist/components/badge.d.ts +1 -1
  168. package/dist/components/badge.js +4 -4
  169. package/dist/components/bottom-sheet-header.d.ts +16 -0
  170. package/dist/components/bottom-sheet-header.js +79 -0
  171. package/dist/components/bottom-sheet.d.ts +2 -2
  172. package/dist/components/bottom-sheet.js +2 -2
  173. package/dist/components/breadcrumb/react-aria.js +1 -1
  174. package/dist/components/breadcrumbs.d.ts +1 -1
  175. package/dist/components/breadcrumbs.js +1 -1
  176. package/dist/components/button-group.d.ts +12 -0
  177. package/dist/components/button-group.js +46 -0
  178. package/dist/components/button.d.ts +2 -2
  179. package/dist/components/button.js +1 -1
  180. package/dist/components/checkbox-group.d.ts +2 -2
  181. package/dist/components/checkbox-group.js +1 -163
  182. package/dist/components/checkbox.d.ts +2 -2
  183. package/dist/components/checkbox.js +2 -2
  184. package/dist/components/combo-box/react-aria.js +1 -1
  185. package/dist/components/date-picker/react-aria.js +1 -1
  186. package/dist/components/date-picker.d.ts +2 -2
  187. package/dist/components/date-picker.js +1 -1
  188. package/dist/components/date-range-picker/react-aria.js +1 -1
  189. package/dist/components/date-range-picker.d.ts +2 -2
  190. package/dist/components/date-range-picker.js +1 -1
  191. package/dist/components/date-time-picker.d.ts +2 -2
  192. package/dist/components/date-time-picker.js +1 -1
  193. package/dist/components/dialog-trigger/react-aria.js +1 -1
  194. package/dist/components/dialog.d.ts +1 -1
  195. package/dist/components/dialog.js +1 -1
  196. package/dist/components/drawer.js +3 -3
  197. package/dist/components/dropdown-menu.d.ts +2 -2
  198. package/dist/components/dropdown-menu.js +2 -2
  199. package/dist/components/file-input.d.ts +2 -2
  200. package/dist/components/file-input.js +1 -1
  201. package/dist/components/file-upload-container.d.ts +2 -2
  202. package/dist/components/file-upload-container.js +1 -1
  203. package/dist/components/file-upload.d.ts +3 -3
  204. package/dist/components/file-upload.js +1 -1
  205. package/dist/components/form-field.d.ts +1 -1
  206. package/dist/components/form-field.js +1 -1
  207. package/dist/components/icon-button.d.ts +1 -1
  208. package/dist/components/icon-button.js +17 -15
  209. package/dist/components/icon-slot.d.ts +1 -1
  210. package/dist/components/input-frame.d.ts +93 -0
  211. package/dist/{useStaticInputHandoff-kkQrc6DA.js → components/input-frame.js} +42 -91
  212. package/dist/components/input.d.ts +2 -2
  213. package/dist/components/input.js +1 -241
  214. package/dist/components/link.d.ts +1 -1
  215. package/dist/components/link.js +2 -2
  216. package/dist/components/menu-trigger/react-aria.js +1 -1
  217. package/dist/components/modal/react-aria.js +1 -1
  218. package/dist/components/modal-overlay/react-aria.js +1 -1
  219. package/dist/components/number-field.d.ts +2 -2
  220. package/dist/components/number-field.js +1 -245
  221. package/dist/components/number-range-input.d.ts +2 -2
  222. package/dist/components/number-range-input.js +1 -1
  223. package/dist/components/pagination-list.d.ts +1 -1
  224. package/dist/components/pagination-list.js +1 -1
  225. package/dist/components/pagination.d.ts +1 -1
  226. package/dist/components/pagination.js +10 -6
  227. package/dist/components/password-input.d.ts +2 -2
  228. package/dist/components/password-input.js +22 -1
  229. package/dist/components/popover/react-aria.js +1 -1
  230. package/dist/components/popover.d.ts +1 -1
  231. package/dist/components/popover.js +38 -30
  232. package/dist/components/progress.d.ts +1 -1
  233. package/dist/components/progress.js +1 -1
  234. package/dist/components/radio-group.d.ts +2 -2
  235. package/dist/components/radio-group.js +1 -1
  236. package/dist/components/select/react-aria.js +1 -1
  237. package/dist/components/select.d.ts +2 -3
  238. package/dist/components/select.js +1 -1
  239. package/dist/components/slider.d.ts +2 -2
  240. package/dist/components/slider.js +1 -1
  241. package/dist/components/spinner.d.ts +1 -1
  242. package/dist/components/split-button.d.ts +1 -1
  243. package/dist/components/split-button.js +2 -2
  244. package/dist/components/stepper.d.ts +1 -1
  245. package/dist/components/stepper.js +1 -1
  246. package/dist/components/style-definitions.d.ts +3 -0
  247. package/dist/components/style-definitions.js +121 -0
  248. package/dist/components/submenu-trigger/react-aria.js +1 -1
  249. package/dist/components/switch.d.ts +2 -2
  250. package/dist/components/switch.js +1 -1
  251. package/dist/components/tag.d.ts +1 -1
  252. package/dist/components/tag.js +4 -4
  253. package/dist/components/text-area.d.ts +2 -2
  254. package/dist/components/text-area.js +1 -1
  255. package/dist/components/time-picker.d.ts +2 -2
  256. package/dist/components/time-picker.js +1 -1
  257. package/dist/components/toast.d.ts +2 -2
  258. package/dist/components/toast.js +2 -2
  259. package/dist/components/toggle-button.d.ts +1 -1
  260. package/dist/components/toggle-button.js +17 -30
  261. package/dist/components/toggle-group.d.ts +2 -3
  262. package/dist/components/toggle-group.js +1 -1
  263. package/dist/components/tooltip-ellipsis.js +1 -1
  264. package/dist/components/tooltip.d.ts +1 -1
  265. package/dist/components/tooltip.js +1 -1
  266. package/dist/components/typography.d.ts +2 -2
  267. package/dist/components/use-toast.d.ts +1 -1
  268. package/dist/components/use-toast.js +2 -2
  269. package/dist/config/component-configuration.d.ts +30 -0
  270. package/dist/config/component-configuration.js +69 -0
  271. package/dist/config/confirmation.d.ts +1 -1
  272. package/dist/config/confirmation.js +1 -1
  273. package/dist/config/link-context.d.ts +2 -2
  274. package/dist/config/resources.d.ts +1 -1
  275. package/dist/config/resources.js +1 -1
  276. package/dist/config/ui-config.d.ts +2 -2
  277. package/dist/config/ui-config.js +1 -1
  278. package/dist/config/ui-overrides.d.ts +1 -1
  279. package/dist/{confirmation.context-BOeEVczb.d.ts → confirmation.context-B2z9A1v3.d.ts} +1 -1
  280. package/dist/{confirmation.context-BuzgCfYl.js → confirmation.context-BSn1s-ip.js} +1 -1
  281. package/dist/{datePickerValue.utils-CIFHjKwv.js → datePickerValue.utils-OAQBDk1R.js} +18 -10
  282. package/dist/{dialog.cva-COhDZaVl.js → dialog.cva-sioU_5R7.js} +1 -1
  283. package/dist/{dist-CAdwxJbe.js → dist-CAFUM34b.js} +53 -1
  284. package/dist/{dom.utils-D1AopHx9.js → dom.utils-BbfrA6RP.js} +1 -1
  285. package/dist/{dropdownMenu.cva-DvEmX0bs.js → dropdownMenu.cva-Bi3a21lO.js} +4 -4
  286. package/dist/{PasswordInput-DYwUZ4-k.js → eye-BA4nRlMX.js} +1 -22
  287. package/dist/{fileUpload.types-n5FxK_F-.d.ts → fileUpload.types-BT8P1o7a.d.ts} +17 -17
  288. package/dist/form.binding-B-2id68q.js +49 -0
  289. package/dist/form.types-C8P4sznq.d.ts +22 -0
  290. package/dist/{formFieldError.cva-CsXaQRHX.js → formFieldError.cva-CTl0VeyG.js} +1 -1
  291. package/dist/{formFieldHelper.cva-B8F9LmsE.js → formFieldHelper.cva-CxAmrG2H.js} +9 -8
  292. package/dist/hooks/use-async-list.d.ts +2 -0
  293. package/dist/hooks/use-async-list.js +2 -0
  294. package/dist/hooks/use-filters.js +1 -1
  295. package/dist/{i18n-CX1vFM9r.d.ts → i18n-2z5on9No.d.ts} +18 -0
  296. package/dist/{i18n-CX2EjhJI.js → i18n-BjNKHh_D.js} +20 -2
  297. package/dist/{iconSlot.cva-CnpFzAOR.d.ts → iconSlot.cva-BA9NahZH.d.ts} +2 -1
  298. package/dist/icons.d.ts +1 -1
  299. package/dist/index.d.ts +95 -91
  300. package/dist/index.js +79 -82
  301. package/dist/{input.cva-BsHgYa-L.d.ts → input.cva-L7jKDv6q.d.ts} +3 -3
  302. package/dist/{input.cva-DJA8ovm_.js → input.cva-w7ZEVQAM.js} +60 -41
  303. package/dist/{intlStrings-chfsan9H.js → intlStrings-Cu1YN1tA.js} +35 -35
  304. package/dist/isEqual-LFw0W5rU.js +97 -0
  305. package/dist/{link.context-D5qyz9Rf.d.ts → link.context-C4fE_aMo.d.ts} +1 -1
  306. package/dist/{link.cva-DMTHZiJG.js → link.cva-D3XRgcAv.js} +1 -1
  307. package/dist/{numberStatic.utils-BX50PSee.js → numberStatic.utils-BIyZuILs.js} +5 -5
  308. package/dist/{progress.cva-WQB8BGbk.js → progress.cva-D7iiX6Lh.js} +2 -2
  309. package/dist/{radio.cva-DGbvTymp.js → radio.cva-Ctdop1xV.js} +1 -1
  310. package/dist/{radio.cva-DN9VQ3Kb.d.ts → radio.cva-DO3UEac-.d.ts} +3 -3
  311. package/dist/rich-text-editor.d.ts +2 -2
  312. package/dist/rich-text-editor.js +1 -1
  313. package/dist/{routing.utils-UTQonIhB.js → routing.utils-DfxEt0_Y.js} +5 -0
  314. package/dist/selectDesktop.cva-RzxvSBkd.js +14 -0
  315. package/dist/{selectDesktop.cva-CHAMxhfO.js → selectItem.cva-BWfEkNs_.js} +3 -36
  316. package/dist/{staticDateTimeSegments-sf_ND7zL.js → staticDateTimeSegments-Bt5wCZvg.js} +58 -54
  317. package/dist/{status.cva-6HxNR4EP.js → status.cva-BFGMKZO_.js} +14 -14
  318. package/dist/{stepper.cva-CZ0Kj-s7.js → stepper.cva-CpRi0fGb.js} +10 -10
  319. package/dist/{configuration.context-f_FSPWhQ.d.ts → style-definitions-_RXJdSk-.d.ts} +183 -86
  320. package/dist/styles/editor.css +1 -1
  321. package/dist/styles/input.d.ts +1 -1
  322. package/dist/{switch.cva-BX3HOxbL.js → switch.cva-BsJ4iAFl.js} +1 -1
  323. package/dist/{switch.cva-CWNzmdRc.d.ts → switch.cva-psw67dK9.d.ts} +3 -3
  324. package/dist/table.cva-CmfeWLyW.d.ts +84 -0
  325. package/dist/table.cva-DFQM8VbM.js +111 -0
  326. package/dist/{tag.cva-B3MudLeC.js → tag.cva-BCCH7ku3.js} +12 -12
  327. package/dist/tanstack/autocomplete.d.ts +3 -2
  328. package/dist/tanstack/autocomplete.js +1 -1
  329. package/dist/tanstack/checkbox-group.d.ts +3 -2
  330. package/dist/tanstack/checkbox-group.js +1 -1
  331. package/dist/tanstack/checkbox.d.ts +3 -2
  332. package/dist/tanstack/checkbox.js +2 -2
  333. package/dist/tanstack/date-picker.d.ts +3 -2
  334. package/dist/tanstack/date-picker.js +1 -1
  335. package/dist/tanstack/date-range-picker.d.ts +3 -2
  336. package/dist/tanstack/date-range-picker.js +1 -1
  337. package/dist/tanstack/date-time-picker.d.ts +3 -2
  338. package/dist/tanstack/date-time-picker.js +1 -1
  339. package/dist/tanstack/file-input.d.ts +3 -2
  340. package/dist/tanstack/file-input.js +1 -1
  341. package/dist/tanstack/file-upload.d.ts +4 -3
  342. package/dist/tanstack/file-upload.js +1 -1
  343. package/dist/tanstack/form.d.ts +3 -3
  344. package/dist/tanstack/form.js +3 -3
  345. package/dist/tanstack/input.d.ts +3 -2
  346. package/dist/tanstack/input.js +1 -1
  347. package/dist/tanstack/number-field.d.ts +3 -2
  348. package/dist/tanstack/number-field.js +1 -1
  349. package/dist/tanstack/number-range-input.d.ts +3 -2
  350. package/dist/tanstack/number-range-input.js +1 -1
  351. package/dist/tanstack/password-input.d.ts +1 -1
  352. package/dist/tanstack/password-input.js +1 -1
  353. package/dist/tanstack/radio-group.d.ts +3 -2
  354. package/dist/tanstack/radio-group.js +1 -1
  355. package/dist/tanstack/rich-text-editor.d.ts +9 -2
  356. package/dist/tanstack/rich-text-editor.js +27 -1
  357. package/dist/tanstack/select.d.ts +3 -2
  358. package/dist/tanstack/select.js +1 -1
  359. package/dist/tanstack/slider.d.ts +3 -2
  360. package/dist/tanstack/slider.js +1 -1
  361. package/dist/tanstack/switch.d.ts +3 -2
  362. package/dist/tanstack/switch.js +1 -1
  363. package/dist/tanstack/table.d.ts +3 -2
  364. package/dist/tanstack/table.js +2 -3
  365. package/dist/tanstack/text-area.d.ts +3 -2
  366. package/dist/tanstack/text-area.js +1 -1
  367. package/dist/tanstack/time-picker.d.ts +3 -2
  368. package/dist/tanstack/time-picker.js +1 -1
  369. package/dist/tanstack/toggle-group.d.ts +3 -3
  370. package/dist/tanstack/toggle-group.js +1 -1
  371. package/dist/tanstack-DQu9PNjn.d.ts +469 -0
  372. package/dist/tanstack.d.ts +79 -78
  373. package/dist/tanstack.js +79 -83
  374. package/dist/{toast.cva-By5lvAfr.d.ts → toast.cva-L0k_TBiW.d.ts} +7 -7
  375. package/dist/{toast.cva-C_L_RffH.js → toast.cva-aC4NMpLb.js} +14 -14
  376. package/dist/{toast.runtime-Zf-XyAC3.js → toast.runtime-DKOeUnk6.js} +1 -2
  377. package/dist/{toggleGroup.cva-MbpaEBg1.js → toggleGroup.cva-CEhjMT4j.js} +1 -1
  378. package/dist/{tooltip.cva-BIzlOXHH.js → tooltip.cva-ClcaR72U.js} +4 -4
  379. package/dist/tw-ui-plugin.js +5 -1
  380. package/dist/{typography.cva-D1JOEYl-.d.ts → typography.cva-GpC6QQNx.d.ts} +2 -2
  381. package/dist/{uiConfig.context-DeBX2beU.d.ts → uiConfig.context-CQU9Tzq_.d.ts} +12 -20
  382. package/dist/{uiConfig.context-BS3r_kTS.js → uiConfig.context-CT9EVqC5.js} +3 -109
  383. package/dist/{uiOverrides.context-DEp139He.d.ts → uiOverrides.context-Dmev7iRS.d.ts} +44 -6
  384. package/dist/useAsyncList-Cu-Y8If2.d.ts +9 -0
  385. package/dist/useAsyncList-yHz7twsj.js +445 -0
  386. package/dist/{useBreakpoint-DQoMN-BG.js → useBreakpoint-BzYqQEBO.js} +1 -1
  387. package/dist/{useControlledState-CzXkZCX8.js → useControlledState-CuU1VIh1.js} +2 -2
  388. package/dist/useFieldAccessibility-eZIMECmG.js +19 -0
  389. package/dist/{useFilters-XNH27Md2.js → useFilters-HIngImwn.js} +1 -1
  390. package/dist/{form.binding-DVJ5F0JE.d.ts → useForm-I6z23FXf.d.ts} +15 -15
  391. package/dist/{form.binding-CG1RPv6o.js → useForm-eW4KpH1u.js} +79 -42
  392. package/dist/useFormAutosave-BBLm3Ujo.d.ts +34 -0
  393. package/dist/useFormAutosave-XEQqk1lK.js +216 -0
  394. package/dist/useStaticInputHandoff-DyYxfwv6.js +77 -0
  395. package/dist/useTableColumnConfig-CUINwVTR.js +1348 -0
  396. package/dist/{useTableNav-Ckj5PBRk.d.ts → useTableNav-rU9WmCj6.d.ts} +34 -96
  397. package/dist/{useToast-yreVCUer.d.ts → useToast-DfQif03I.d.ts} +1 -1
  398. package/dist/{utils-Czcqspm7.js → utils-BkLF-JA3.js} +1 -1
  399. package/package.json +69 -227
  400. package/.rulesync/rules/ui-buttons-and-content.md +0 -56
  401. package/.rulesync/rules/ui-inputs-and-forms.md +0 -62
  402. package/.rulesync/rules/ui-overlays-navigation-and-styling.md +0 -49
  403. package/.rulesync/rules/ui-overview.md +0 -33
  404. package/dist/Autocomplete-BwNHp8fy.d.ts +0 -15
  405. package/dist/Button-D-4qb0IR.d.ts +0 -42
  406. package/dist/CheckboxGroup-DGF12cmB.d.ts +0 -28
  407. package/dist/ComponentGallery-Da70Y4_Q.js +0 -3513
  408. package/dist/Dialog-CW93T9X1.d.ts +0 -56
  409. package/dist/DropdownMenu-JNpYT4-3.d.ts +0 -62
  410. package/dist/FileUpload-CR7bZxV1.d.ts +0 -7
  411. package/dist/Form-DbEWnCKc.d.ts +0 -49
  412. package/dist/FormFieldHeaderTooltip-BV2Ju4oB.js +0 -17
  413. package/dist/IconButton-D4thBurp.d.ts +0 -16
  414. package/dist/InlineIconButton-BeJCjl-q.d.ts +0 -15
  415. package/dist/InputItem-ZeN-aIz8.js +0 -63
  416. package/dist/Inputs-BC5q5Cvj.js +0 -17
  417. package/dist/Inputs-O84btFJL.d.ts +0 -13
  418. package/dist/QuerySelect-BGxb6Y0K.d.ts +0 -24
  419. package/dist/RadioGroup-CZg2kIMk.d.ts +0 -24
  420. package/dist/RichTextEditor-YxuRUlI7.d.ts +0 -26
  421. package/dist/Select-B2pAfwRk.js +0 -154
  422. package/dist/Select-pHbyJdZJ.d.ts +0 -15
  423. package/dist/Switch-s_EPn0Jz.d.ts +0 -22
  424. package/dist/Table-CqepqSfe.js +0 -637
  425. package/dist/TextButton-XUhV_1s0.d.ts +0 -15
  426. package/dist/TimePicker-B1POvGWs.d.ts +0 -33
  427. package/dist/Toast-DPbnLlBi.js +0 -53
  428. package/dist/ToggleButton-7aP8Jb11.d.ts +0 -11
  429. package/dist/ToggleGroup-CRFDIPGZ.d.ts +0 -7
  430. package/dist/Tooltip-DHv6vAqW.d.ts +0 -57
  431. package/dist/autocomplete-DeERHN8W.d.ts +0 -16
  432. package/dist/checkbox-DxIPDTK5.d.ts +0 -9
  433. package/dist/checkbox-group-B3BOVshI.d.ts +0 -9
  434. package/dist/chevron-left-Dgo_b9wJ.js +0 -20
  435. package/dist/chevron-up-D_Gqpb5M.js +0 -20
  436. package/dist/components/inline-icon-button.d.ts +0 -2
  437. package/dist/components/inline-icon-button.js +0 -40
  438. package/dist/components/query-autocomplete.d.ts +0 -8
  439. package/dist/components/query-autocomplete.js +0 -134
  440. package/dist/components/query-select.d.ts +0 -2
  441. package/dist/components/query-select.js +0 -147
  442. package/dist/components/text-button.d.ts +0 -2
  443. package/dist/components/text-button.js +0 -35
  444. package/dist/config/app-canvas.d.ts +0 -79
  445. package/dist/config/app-canvas.js +0 -2253
  446. package/dist/config/ui-configurator-theme.d.ts +0 -2
  447. package/dist/config/ui-configurator-theme.js +0 -2
  448. package/dist/config/ui-configurator-vite.d.ts +0 -10
  449. package/dist/config/ui-configurator-vite.js +0 -174
  450. package/dist/config/ui-configurator.d.ts +0 -15
  451. package/dist/config/ui-configurator.js +0 -5384
  452. package/dist/date-picker-DnxDmlOW.d.ts +0 -9
  453. package/dist/date-range-picker-DHDOSvHN.d.ts +0 -9
  454. package/dist/date-time-picker-UkTa0OJ8.d.ts +0 -9
  455. package/dist/date.transforms-DLg-eFcE.js +0 -15
  456. package/dist/dynamicInputs-ByVMnx4Z.d.ts +0 -772
  457. package/dist/dynamicInputs-CRMWIpHA.js +0 -194
  458. package/dist/dynamicInputs-m_DQu5q0.js +0 -214
  459. package/dist/fieldAdapter-C4sDFC8f.d.ts +0 -9
  460. package/dist/fieldAdapter-DjYls12j.js +0 -63
  461. package/dist/file-input-DkbkdI7l.d.ts +0 -9
  462. package/dist/file-upload-CTsPhxJk.d.ts +0 -10
  463. package/dist/form.types-CecYaerF.d.ts +0 -13
  464. package/dist/form.types-ZNGbcqJS.d.ts +0 -13
  465. package/dist/grip-vertical-BVxcjdfr.js +0 -54
  466. package/dist/info-iUmX3uDk.js +0 -32
  467. package/dist/input-CdQNCPgH.d.ts +0 -8
  468. package/dist/inspection-model-LuI36xTg.js +0 -1339
  469. package/dist/number-field-CUDbenNV.d.ts +0 -8
  470. package/dist/number-range-input-DZGrcvjL.d.ts +0 -8
  471. package/dist/password-input-fYN20cQO.d.ts +0 -8
  472. package/dist/query-autocomplete-CfuQeiYG.d.ts +0 -14
  473. package/dist/query-select-CuT_sE6a.d.ts +0 -15
  474. package/dist/queryAutocomplete.types-tl3r6iaY.d.ts +0 -27
  475. package/dist/radio-group-B3ccPf0p.d.ts +0 -9
  476. package/dist/rhf/autocomplete.d.ts +0 -3
  477. package/dist/rhf/autocomplete.js +0 -8
  478. package/dist/rhf/checkbox-group.d.ts +0 -3
  479. package/dist/rhf/checkbox-group.js +0 -8
  480. package/dist/rhf/checkbox.d.ts +0 -3
  481. package/dist/rhf/checkbox.js +0 -8
  482. package/dist/rhf/date-picker.d.ts +0 -3
  483. package/dist/rhf/date-picker.js +0 -9
  484. package/dist/rhf/date-range-picker.d.ts +0 -3
  485. package/dist/rhf/date-range-picker.js +0 -9
  486. package/dist/rhf/date-time-picker.d.ts +0 -3
  487. package/dist/rhf/date-time-picker.js +0 -9
  488. package/dist/rhf/file-input.d.ts +0 -3
  489. package/dist/rhf/file-input.js +0 -6
  490. package/dist/rhf/file-upload.d.ts +0 -3
  491. package/dist/rhf/file-upload.js +0 -6
  492. package/dist/rhf/input.d.ts +0 -3
  493. package/dist/rhf/input.js +0 -6
  494. package/dist/rhf/inputs.d.ts +0 -4
  495. package/dist/rhf/inputs.js +0 -2
  496. package/dist/rhf/number-field.d.ts +0 -3
  497. package/dist/rhf/number-field.js +0 -6
  498. package/dist/rhf/number-range-input.d.ts +0 -3
  499. package/dist/rhf/number-range-input.js +0 -6
  500. package/dist/rhf/password-input.d.ts +0 -3
  501. package/dist/rhf/password-input.js +0 -6
  502. package/dist/rhf/query-autocomplete.d.ts +0 -2
  503. package/dist/rhf/query-autocomplete.js +0 -8
  504. package/dist/rhf/query-select.d.ts +0 -2
  505. package/dist/rhf/query-select.js +0 -8
  506. package/dist/rhf/radio-group.d.ts +0 -3
  507. package/dist/rhf/radio-group.js +0 -8
  508. package/dist/rhf/rich-text-editor.d.ts +0 -3
  509. package/dist/rhf/rich-text-editor.js +0 -6
  510. package/dist/rhf/select.d.ts +0 -3
  511. package/dist/rhf/select.js +0 -8
  512. package/dist/rhf/slider.d.ts +0 -3
  513. package/dist/rhf/slider.js +0 -6
  514. package/dist/rhf/switch.d.ts +0 -3
  515. package/dist/rhf/switch.js +0 -8
  516. package/dist/rhf/text-area.d.ts +0 -3
  517. package/dist/rhf/text-area.js +0 -6
  518. package/dist/rhf/time-picker.d.ts +0 -3
  519. package/dist/rhf/time-picker.js +0 -9
  520. package/dist/rhf/toggle-group.d.ts +0 -3
  521. package/dist/rhf/toggle-group.js +0 -6
  522. package/dist/rhf-t348TCCL.js +0 -256
  523. package/dist/rhf.d.ts +0 -106
  524. package/dist/rhf.js +0 -117
  525. package/dist/rich-text-editor-B-Onl7T8.d.ts +0 -8
  526. package/dist/select-B4a52eWW.d.ts +0 -16
  527. package/dist/slider-dNj9jruO.d.ts +0 -8
  528. package/dist/style-merge.util-zLimKwt6.d.ts +0 -40
  529. package/dist/styles/app-canvas.css +0 -733
  530. package/dist/styles/configurator.css +0 -3280
  531. package/dist/switch-C--iWnY8.d.ts +0 -9
  532. package/dist/table.cva-DlMT-zLD.js +0 -48
  533. package/dist/tanstack/inputs.d.ts +0 -5
  534. package/dist/tanstack/inputs.js +0 -3
  535. package/dist/tanstack/query-autocomplete.d.ts +0 -2
  536. package/dist/tanstack/query-autocomplete.js +0 -2
  537. package/dist/tanstack/query-select.d.ts +0 -2
  538. package/dist/tanstack/query-select.js +0 -2
  539. package/dist/text-area-DQAtpOQp.d.ts +0 -8
  540. package/dist/theme-model-DtYPxNvH.js +0 -406
  541. package/dist/theme-model-T1zIdBg8.d.ts +0 -12
  542. package/dist/time-picker-DoGfbil6.d.ts +0 -9
  543. package/dist/toggle-group-C1nMDOwz.d.ts +0 -9
  544. package/dist/underline-66hmELxa.js +0 -81
  545. package/dist/upload-CXU83BJ4.js +0 -30
  546. package/dist/useFormAutosave-BD_TFqDF.js +0 -198
  547. package/dist/useQueryAutocomplete-CraXvRm_.js +0 -152
  548. package/dist/useTableColumnConfig-aVUWC2Mp.js +0 -892
  549. package/dist/zod.utils-DrrPDT9v.js +0 -24
  550. package/rulesync.jsonc +0 -11
  551. package/scripts/generate-rules.mjs +0 -34
  552. package/src/configurator/README.md +0 -77
  553. package/dist/{import-BE0r63d8.js → import-D_3dPATF.js} +2 -2
  554. /package/dist/{queries.utils-CmbhAoHU.js → tanstack-CmbhAoHU.js} +0 -0
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  UI Components that match Povio's Atlas Design System.
4
4
 
5
+ Upgrading an existing project? See the [migration guide](MIGRATION.md) for the web form, selection, upload, date/time, table, and page-builder changes.
6
+
5
7
  ## Installation
6
8
 
7
9
  `bun add @povio/ui`
@@ -14,17 +16,52 @@ Use component and feature subpaths in application code. Each subpath resolves to
14
16
  import { Button } from "@povio/ui/button";
15
17
  import { BadgeButton } from "@povio/ui/badge-button";
16
18
  import { Dialog } from "@povio/ui/dialog";
17
- import { Select } from "@povio/ui/tanstack/select";
19
+ import { Select } from "@povio/ui/select";
18
20
  import { useForm } from "@povio/ui/tanstack/form";
19
21
  import { Table } from "@povio/ui/tanstack/table";
20
22
  import { RichTextEditor } from "@povio/ui/rich-text-editor";
21
23
  ```
22
24
 
23
- Form inputs are available from matching integration paths, such as `@povio/ui/rhf/input` and `@povio/ui/tanstack/input`. Dynamic input builders are exposed from `@povio/ui/rhf/inputs` and `@povio/ui/tanstack/inputs`.
25
+ TanStack Form is the supported form integration. Import form inputs from `@povio/ui/tanstack/input` and other component subpaths, hooks from `@povio/ui/tanstack/form`.
26
+
27
+ Ordinary component subpaths expose standalone controls: `@povio/ui/input` accepts `value`/`onChange` or an uncontrolled `defaultValue`, and rejects `field`. The corresponding `@povio/ui/tanstack/input` requires `field={{ form, name }}` and rejects top-level values, change/blur handlers, and defaults; initialize values through `useForm({ defaultValues })`. Boolean controls use `isSelected`/`onChange` and `defaultSelected` when standalone. Date/time controls use string values and defaults; number controls use numbers or null. The broad root and TanStack barrels expose the bound versions.
28
+
29
+ Optional side effects belong inside the binding: `field={{ form, name: "name", onValueChange: value => ..., onBlur: () => ... }}`. Change callbacks receive the native control value after the raw form update; blur callbacks run after actual focus loss marks the field touched. Selection commits can validate/flush autosave without firing the blur callback. Form resets and programmatic setters do not call either callback.
30
+
31
+ `FileInput` binds native `File`/`File[]` values. `FileUpload` also binds files while managing upload progress, cancellation, and server IDs internally. Its standalone `value` accepts upload state records for existing uploads, while `onChange` emits selected native files; changes to supplied upload state are reflected in its display.
32
+
33
+ The broad `@povio/ui` and `@povio/ui/tanstack` entries remain for compatibility. They are not recommended for new application imports because they reconnect otherwise independent feature graphs.
34
+
35
+ Feature dependencies are optional peers. Install the matching packages when using date/calendar entries, `@povio/ui/tanstack/table`, TanStack Form inputs, or the rich text editor. Basic components such as Button, Typography, and Dialog do not require table, drag-and-drop, calendar, or TipTap packages.
36
+
37
+ ```tsx
38
+ import { useForm } from "@povio/ui/tanstack/form";
39
+ import { Input } from "@povio/ui/tanstack/input";
40
+ import { z } from "zod";
41
+
42
+ const schema = z.object({ name: z.string().min(1) });
43
+
44
+ function NameForm({ onSubmit }: { onSubmit: (values: z.output<typeof schema>) => void }) {
45
+ const form = useForm({ defaultValues: { name: "" }, zodSchema: schema });
46
+ return (
47
+ <form onSubmit={form.handleSubmit(onSubmit)}>
48
+ <Input
49
+ label="Name"
50
+ field={{ form, name: "name" }}
51
+ />
52
+ <button type="submit">Save</button>
53
+ </form>
54
+ );
55
+ }
56
+ ```
24
57
 
25
- The broad `@povio/ui`, `@povio/ui/rhf`, and `@povio/ui/tanstack` entries remain for compatibility. They are not recommended for new application imports because they reconnect otherwise independent feature graphs.
58
+ ### Migrating existing forms
26
59
 
27
- Feature dependencies are optional peers. Install the matching packages when using date/calendar entries, `@povio/ui/tanstack/table`, RHF/TanStack Form inputs, or the rich text editor. Basic components such as Button, Typography, and Dialog do not require table, drag-and-drop, calendar, or TipTap packages.
60
+ The web UI package no longer maintains React Hook Form (RHF) integration. The root entry now exports the TanStack barrel. Replace imports from `@povio/ui/rhf` and its subpaths with the TanStack paths above, and replace `formControl={{ control: form.control, name }}` with `field={{ form, name }}`. Keep component names such as `Input`. Compose fields explicitly in JSX and declare TanStack table columns directly.
61
+
62
+ Use `zodSchema` for validation and `form.handleSubmit(onSubmit, onInvalid)` for submission; the valid callback receives transformed schema values. Replace `form.watch(...)` with `useFormValue(form, values => values.name)` and form-state subscriptions with `useFormState(form, state => state.isSubmitting)`, both from `@povio/ui/tanstack/form`. Replace values through `form.reset(values)`, which clears dirty and touched state. Autosave hooks remain available from the TanStack barrel.
63
+
64
+ Standalone controls keep their existing `value` / `onChange` or `isSelected` / `onChange` props. Consumers can build an external RHF adapter using those props. Mobile and `@povio/rn-ui` retain their own RHF integrations.
28
65
 
29
66
  React Aria is an internal `@povio/ui` dependency and does not need to be installed separately. The build keeps `react-aria` and all its subpaths external so providers and Povio components share the installed module contexts. Component-scoped escape-hatch entries expose only the corresponding React Aria primitive and its types for custom implementations:
30
67
 
@@ -43,28 +80,112 @@ Each emitted entry is independently bundled and tree-shaken; it does not forward
43
80
 
44
81
  Use `Badge` for display content, `BadgeButton` for a compact, badge-styled action, and `ToggleButton` or `ToggleGroup` for selection. `BadgeButton` uses the theme's `badge-*` spacing and radius tokens; customize its recipe through `UIOverrides.badgeButton`.
45
82
 
83
+ ## Selection and text suggestions
84
+
85
+ Use `Select` to store an item ID, or an array of IDs with `selectionMode="multiple"`. Set `isSearchable` to filter the choices. Typing a search query does not change the selected ID.
86
+
87
+ Use `Autocomplete` to store free text. Its `value` and `onChange` use strings, selecting a suggestion emits its label, and clearing emits `""`. Text need not match a suggestion. Suggestion IDs identify rows; they are never the submitted value.
88
+
89
+ ```tsx
90
+ import { Select } from "@povio/ui/select";
91
+ import { Autocomplete } from "@povio/ui/autocomplete";
92
+
93
+ const cities = [{ id: "city-1", label: "Ljubljana" }];
94
+ // Choosing Ljubljana stores "city-1".
95
+ <Select
96
+ label="City"
97
+ items={cities}
98
+ value={cityId}
99
+ onChange={setCityId}
100
+ isSearchable
101
+ />;
102
+ // Choosing Ljubljana stores "Ljubljana"; arbitrary city names are also allowed.
103
+ <Autocomplete
104
+ label="City name"
105
+ items={cities}
106
+ value={cityName}
107
+ onChange={setCityName}
108
+ />;
109
+ ```
110
+
111
+ Migrate ID-valued autocomplete controls to `Select isSearchable`, including controls with multiple selections. Form bindings follow the same distinction: bind `Select` to an ID field and `Autocomplete` to a text field.
112
+
113
+ ### Async choices
114
+
115
+ Supply an explicit loader through `useAsyncList` and pass its result to `Select` as `list`. The loader controls the request, response mapping, cancellation, and pagination; it returns `{ items, cursor }`, with an omitted cursor for the last page. Each control should have its own list so searches remain independent.
116
+
117
+ ```tsx
118
+ import { Select } from "@povio/ui/select";
119
+ import { useAsyncList } from "@povio/ui/use-async-list";
120
+
121
+ const list = useAsyncList({
122
+ initialSelectedKeys: cityId ? [cityId] : [],
123
+ load: async ({ signal, filterText, cursor, selectedKeys }) => {
124
+ const page = await loadCities({ signal, search: filterText, cursor, selectedKeys });
125
+ return { items: page.items, cursor: page.nextCursor ?? undefined };
126
+ },
127
+ });
128
+
129
+ <Select
130
+ label="City"
131
+ value={cityId}
132
+ onChange={setCityId}
133
+ list={list}
134
+ isSearchable
135
+ />;
136
+ {
137
+ list.error && (
138
+ <div role="alert">
139
+ {list.error.message}
140
+ <button onClick={() => list.reload()}>Retry</button>
141
+ </div>
142
+ );
143
+ }
144
+ ```
145
+
146
+ The hook starts loading when mounted. The control forwards search changes and scroll pagination to the list and leaves server-ranked items unfiltered. Display `list.error` and a retry action beside the control; `list.reload()` retries the current filter. If a saved ID is outside the first page, supply its label through `initialSelection`, or resolve `selectedKeys` in your loader and merge the selected items with the page. Selecting still emits IDs, and selected labels remain visible when subsequent searches exclude those IDs. Use `field={{ form, name }}` with the bound `@povio/ui/tanstack/select` entry instead of value callbacks for a form field.
147
+
148
+ `QuerySelect`, `QueryAutocomplete`, and their query-hook adapters have been removed. Call regular API functions inside loaders; query hooks belong at component scope. Applications can retain their existing query cache, authorization checks, and response validation around those API calls, as the admin application's `useAsyncLabelList` does.
149
+
46
150
  ## Theme configurator
47
151
 
48
- The live theme editor ships separately as `@povio/ui/ui-configurator`, with its stylesheet at `@povio/ui/ui-configurator/styles`. It is independent of Storybook and is excluded from ordinary component imports. For only the `parseThemeCss` / `exportCss` helpers and token types, use the lightweight `@povio/ui/ui-configurator/theme` entry.
152
+ Install it as a development dependency with `bun add -d @povio/ui-configurator`. The live theme editor ships separately as `@povio/ui-configurator`, with its stylesheet at `@povio/ui-configurator/styles`. It is independent of Storybook and is excluded from ordinary component imports. For only the `parseThemeCss` / `exportCss` helpers and token types, use the lightweight `@povio/ui-configurator/theme` entry.
49
153
 
50
154
  To save its Tailwind CSS export directly to your app's theme during development, add the bundled Vite plugin:
51
155
 
52
156
  ```ts
53
- import { uiConfigurator } from "@povio/ui/ui-configurator/vite";
157
+ import { uiConfigurator } from "@povio/ui-configurator/vite";
54
158
 
55
159
  // In your Vite plugins array:
56
160
  uiConfigurator({ themeFile: "src/styles/theme.css" });
57
161
  ```
58
162
 
59
- The path defaults to `src/styles/theme.css` relative to this app's Vite root. **Advanced → Export → Tailwind CSS → Save theme** updates that file's token declarations and lets Vite reload the CSS. Each app writes only its own configured theme. Apply remains session-only; Cancel does not undo a file save. The plugin and save action are absent from builds and preview servers. See [the configurator guide](./src/configurator/README.md) for provider setup, preview behavior, and supported theme blocks.
163
+ The path defaults to `src/styles/theme.css` relative to this app's Vite root. **Advanced → Export → Tailwind CSS → Save theme** updates that file's token declarations and lets Vite reload the CSS. Each app writes only its own configured theme. Apply remains session-only; Cancel does not undo a file save. The plugin and save action are absent from builds and preview servers. See [the configurator guide](../ui-configurator/README.md) for provider setup, preview behavior, and supported theme blocks.
164
+
165
+ ## Choosing buttons
166
+
167
+ Choose a button by its interaction:
168
+
169
+ | Interaction | Component |
170
+ | -------------------------------------------------- | ------------------------------------------------------------------------------------------ |
171
+ | Action with a visible label, optionally with icons | `Button` from `@povio/ui/button` |
172
+ | Action displayed as an icon | `IconButton` from `@povio/ui/icon-button`, with an accessible name such as `label="Close"` |
173
+ | Persistent selected/unselected state | `ToggleButton` from `@povio/ui/toggle-button` |
174
+ | Primary action with a separate menu trigger | `SplitButton` from `@povio/ui/split-button` |
175
+
176
+ `BadgeButton` remains available for interactive badges, including its existing selection behavior. Use ordinary badge/status components for information without an action. An icon-only selected action uses `ToggleButton iconOnly` with an accessible name; `Button` itself does not accept `iconOnly`, `toggle`, or selection props.
177
+
178
+ Text appearance is `Button variant="text"`. For the former TextButton defaults, also specify `width="hug"`. The former InlineIconButton appearance is `IconButton variant="text" size="sm" width="hug" disableTooltip`; preserve any explicitly supplied size. `IconButton` provides a tooltip by default, so disable it when an enclosing tooltip already supplies one or when preserving the old inline appearance.
179
+
180
+ See the [button migration steps](./MIGRATION.md#13-choose-buttons-by-behavior) for removed exports and exact replacements.
60
181
 
61
182
  ## Button sizes
62
183
 
63
- `Button` supports `sm` (with `s` as an equivalent alias), `default`, and `none` (zero padding). Omitting `size` uses `default`. The same sizes apply to `IconButton`, `InlineIconButton`, `TextButton`, `ToggleButton`, and `SplitButton`.
184
+ `Button` supports `sm` (with `s` as an equivalent alias), `default`, and `none` (zero padding). Omitting `size` uses `default`. The same sizes apply to `IconButton`, `ToggleButton`, and `SplitButton`.
64
185
 
65
186
  When migrating, replace `xs` and `small` with `sm`; remove explicit `default`, `m`, `md`, `l`, and `lg` size props to use the default. `sm` uses the existing small spacing tokens, and `default` uses the medium spacing tokens.
66
187
 
67
- Use `<TextButton size="none">Read more</TextButton>` for a text action without button padding.
188
+ Use `<Button variant="text" width="hug" size="none">Read more</Button>` for a text action without button padding. The focused button cleanup preserves these sizes, spacing tokens, variants, and colors.
68
189
 
69
190
  ## Input sizes
70
191
 
@@ -72,27 +193,62 @@ Inputs support `size="small"` and `default`. Omit `size` for the default. This a
72
193
 
73
194
  Replace `size="extra-small"` with `size="small"`, and remove `size="large"` or `size="default"` to use the default. Small and default retain their existing spacing.
74
195
 
75
- ## Built-package tests
196
+ ## Date and time values
76
197
 
77
- From `packages/ui`, run `bun run test:package` to build the publishable package and run its Chromium regressions. The tests resolve public imports through `dist/package.json`, covering both date pickers with empty and populated values in static and editable modes, including locale switches without remounting.
198
+ The standalone date/time subpaths accept `value`/`onChange` or an initial `defaultValue`. Passing `null` clears a control; omitting `value` leaves it uncontrolled. TanStack versions take their values/defaults from the bound field, and `field.onValueChange` receives the same output after the form updates.
78
199
 
79
- ## Versioning
200
+ | Control | Input and output format | Empty output |
201
+ | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
202
+ | `DatePicker` | `fullIso=true` (default): UTC-calendar date, emitted as `YYYY-MM-DDT00:00:00.000Z`. `fullIso=false`: `YYYY-MM-DD`. | `null` |
203
+ | `DateRangePicker` | `{ start, end }`; `fullIso=true` (default) emits start at UTC `00:00:00.000Z` and end at UTC `23:59:59.999Z`. `fullIso=false` emits `YYYY-MM-DD` endpoints. | `null`; a null endpoint is allowed with `allowPartialRange` |
204
+ | `DateTimePicker` | Input ISO timestamp with `Z` or an explicit offset; output UTC instant as `YYYY-MM-DDTHH:mm:ss.sssZ`. | `null` |
205
+ | `TimePicker` | Input ISO timestamp with `Z` or an explicit offset; output edited clock time on the date anchor as `YYYY-MM-DDTHH:mm:ss.sssZ`. | `null` |
80
206
 
81
- `^2.1` still corresponds to Atlas 2.1. All versions after that currently target Atlas 2.2 and follow semantic versioning — breaking changes bump the major version.
207
+ `fullIso` is supported by `DatePicker` and `DateRangePicker`. Remove it from `DateTimePicker` and `TimePicker`: it previously had no effect, and their output always contains a full UTC timestamp.
82
208
 
83
- ## AI component rules
209
+ Date-only controls use UTC calendar fields for parsing and output. In full ISO mode, the UTC date of an input timestamp determines the selected day. Month granularity normalizes to the first of the month, and year granularity to January 1. Range outputs represent inclusive whole UTC days. Partial ranges emit `null` unless `allowPartialRange` is enabled (default: false). With relative mode enabled, `onRelativeChange` emits the preset key and `onChange` emits its resolved range in the selected `fullIso` format; clearing or switching modes resets both to `null`.
84
210
 
85
- The package ships RuleSync source rules in `.rulesync/` and `rulesync.jsonc`. They document the public component API, standard aliases, form contracts, accessibility expectations, and styling conventions for AI coding tools. Generated tool files are deliberately excluded from the published npm package.
211
+ `DateTimePicker` and `TimePicker` display and edit in `timeZone`, falling back to `UIConfig.dateInput.timeZone` (default: `"clientLocal"`, the browser's zone). Changing the zone changes displayed clock fields, while emitted timestamps remain UTC. For example, `2025-07-04T08:30:00.000Z` displays as 10:30 in `Europe/Ljubljana`; editing it to 11:30 emits `2025-07-04T09:30:00.000Z`. Display locale and `format` do not change the value format.
86
212
 
87
- To generate the UI rules into a consuming project's repository root, install [`rulesync`](https://github.com/dyoshikawa/rulesync) (`^8.15.0`) in that project, then run the executable bundled with `@povio/ui`:
213
+ `TimePicker` uses `date` as its calendar anchor: it parses that string as a JavaScript `Date` instant, converts it into the effective zone, then replaces the clock fields. Use an explicit offset or `Z` to avoid ambiguous local timestamps. For example, `date="2025-03-04T00:00:00.000Z"` falls on March 3 in `America/Los_Angeles`; entering 10:30 emits `2025-03-03T18:30:00.000Z`. Without `date` (or with `null`), edits use today's date in the effective zone, even if the supplied `value` has another date. Once the editable input is mounted, changing `date` re-emits the current clock time on the new anchor. `isTimeOptional` on `DateTimePicker` completes a date with midnight in the effective zone when time is omitted.
88
214
 
89
- ```bash
90
- bunx --package @povio/ui povio-ui-rules
215
+ ```tsx
216
+ import { DatePicker } from "@povio/ui/date-picker";
217
+ import { DateTimePicker } from "@povio/ui/date-time-picker";
218
+ import { TimePicker } from "@povio/ui/time-picker";
219
+
220
+ <DatePicker
221
+ label="Birthday"
222
+ fullIso={false}
223
+ defaultValue="2025-03-04"
224
+ />;
225
+ <DateTimePicker
226
+ label="Meeting"
227
+ timeZone="Europe/Ljubljana"
228
+ defaultValue="2025-07-04T08:30:00.000Z"
229
+ />;
230
+ <TimePicker
231
+ label="Departure"
232
+ timeZone="America/Los_Angeles"
233
+ date="2025-03-04T12:00:00.000Z"
234
+ />;
91
235
  ```
92
236
 
93
- This generates the relevant Cursor, Claude Code, and Codex CLI files in the consuming repository. Add generated files to that repository's `.gitignore` unless they are intentionally versioned. Re-run the command after upgrading `@povio/ui`; verify without writing files by adding `--check` (for example, `bunx --package @povio/ui povio-ui-rules --check`).
237
+ ## Table selection
238
+
239
+ Table selection is internally managed by default. Supply `defaultSelectedRows` alone for an initial selection, or `onRowSelectionChange` alone to observe changes. Defaults are read only when mounted. When both props are supplied, selection is controlled: pass the current state through the legacy `defaultSelectedRows` prop and its React state setter through `onRowSelectionChange`. That callback receives TanStack selection values or updater functions. Use stable `getRowId` values for selection keys.
240
+
241
+ ## Pagination
94
242
 
95
- Within this monorepo, the equivalent package-local commands are `bun run --filter @povio/ui rules:gen` and `bun run --filter @povio/ui rules:check`.
243
+ `usePagination` from `@povio/ui/tanstack/table` returns zero-based table state, defaulting to `{ pageIndex: 0, pageSize: 20 }`. URL page numbers remain one-based: `?page=2` becomes `pageIndex: 1`, and the first page omits the `page` parameter. Explicit default state overrides URL initialization; URL values are otherwise read when mounted. PaginatedTable accepts that state directly. Standalone Pagination uses one-based `page`, so convert with `pageIndex + 1` and `page - 1` at its boundary. See the [pagination migration steps](MIGRATION.md#11-check-pagination-boundaries) for row slicing, URL behavior, and page-size resets.
244
+
245
+ ## Built-package tests
246
+
247
+ From `packages/ui`, run `bun run test:package` to build the publishable package and run its Chromium regressions. The tests resolve public imports through `dist/package.json`, covering both date pickers with empty and populated values in static and editable modes, including locale switches without remounting.
248
+
249
+ ## Versioning
250
+
251
+ `^2.1` still corresponds to Atlas 2.1. All versions after that currently target Atlas 2.2 and follow semantic versioning — breaking changes bump the major version.
96
252
 
97
253
  ## Publishing
98
254
 
@@ -146,6 +302,14 @@ We also use a custom tailwind plugin to shorten some selectors inside the @povio
146
302
  @plugin "@povio/ui/tw-ui-plugin";
147
303
  ```
148
304
 
305
+ ### Palette roles
306
+
307
+ Use the template's semantic palette for custom layouts. `surface-default-background` is the page surface, `surface-default-card` is the card/panel/popover surface, and `surface-default-sunken` is for recessed areas and filled inputs. Pair them with `text-content-primary`, `text-content-secondary`, or `text-content-muted` according to emphasis. The `content-inverted-*` roles are for inverted surfaces, while `fixed-black` and `fixed-white` retain the same literal color in both modes.
308
+
309
+ Use the theme's radius tokens for custom cards and layouts, such as `rounded-global-rounding-xs` (0.25rem), `rounded-global-rounding-s` (0.375rem), or `rounded-global-rounding-m` (0.5rem). The template resets Tailwind's default radii; bare `rounded`, `rounded-md`, and `rounded-lg` are not defined. Existing theme tokens such as `rounded-m` and component-specific rounding roles remain available.
310
+
311
+ Status treatments have explicit pairs: `bg-status-success-background text-status-success-foreground` for a contained treatment, or `bg-status-success-subtle-background text-status-success-subtle-foreground` for a subtle treatment. Equivalent roles exist for `warning` and `destructive`. Use `text-status-success-accent` or `border-status-success-accent` for standalone status content or boundaries. Destructive subtle colors preserve their existing distinct values; they are not a reversal of the contained pair. Action components continue using `interactive-*` colors. See the [palette migration mapping](MIGRATION.md#14-migrate-palette-roles) for exact replacements.
312
+
149
313
  ### State color utilities
150
314
 
151
315
  Import the color utilities in your application's Tailwind stylesheet. This import is required because `@povio/ui` components use these utilities:
@@ -184,7 +348,7 @@ import { IconSlot } from "@povio/ui/icon-slot";
184
348
  />;
185
349
  ```
186
350
 
187
- `IconSlot` is also exported from `@povio/ui`, `@povio/ui/rhf`, `@povio/ui/tanstack`, and `@povio/ui/icons`. `className` styles the outer slot; `iconClassName` styles the SVG. The slot controls SVG dimensions, including supplied SVGs with their own size classes. Use the inherited CSS variable `--icons-scale` to change the default ratio throughout a theme, or `scale` to override one slot. A 20px token at `0.8` produces a 16px SVG; a 24px token produces a 19.2px SVG. Stroke width continues to follow the icon's own configuration.
351
+ `IconSlot` is also exported from `@povio/ui`, `@povio/ui/tanstack`, and `@povio/ui/icons`. `className` styles the outer slot; `iconClassName` styles the SVG. The slot controls SVG dimensions, including supplied SVGs with their own size classes. Use the inherited CSS variable `--icons-scale` to change the default ratio throughout a theme, or `scale` to override one slot. A 20px token at `0.8` produces a 16px SVG; a 24px token produces a 19.2px SVG. Stroke width continues to follow the icon's own configuration.
188
352
 
189
353
  Override the shared recipe through `UIOverrides` at `iconSlot.cva`. Component-specific icon recipes, such as `button.iconSize`, now style the outer slot. An explicitly configured slot passed to a button or input keeps its configuration without nesting another slot.
190
354
 
@@ -268,3 +432,65 @@ We're using a helper class for flex, so make sure to add this into your base css
268
432
  flex: 1 0 0;
269
433
  }
270
434
  ```
435
+
436
+ ## App canvas page (`/_canvas`)
437
+
438
+ The separate `@povio/ui-configurator` package includes a ready-made page for inspecting all your TanStack Router pages. Install it as a development dependency alongside a compatible `@povio/ui` release, and retain your application's existing `@tanstack/react-router` dependency (an optional peer for this integration).
439
+
440
+ For file-based routing, create `src/routes/[_]canvas.tsx` (or use your configured routes directory). The brackets escape TanStack's pathless-layout underscore convention:
441
+
442
+ ```tsx
443
+ import "@povio/ui-configurator/app-canvas/styles";
444
+ import { appCanvasRouteOptions } from "@povio/ui-configurator/app-canvas/tanstack";
445
+ import { createFileRoute } from "@tanstack/react-router";
446
+
447
+ export const Route = createFileRoute("/_canvas")(appCanvasRouteOptions({ enabled: import.meta.env.DEV }));
448
+ ```
449
+
450
+ Mount `AppCanvasBridge` once beneath the existing router and `UIConfigurationProvider`, alongside the root `Outlet`. The provider must be shared by the canvas route and the normal application pages; keep its existing theme defaults and persistence. If the app does not yet have this provider, add one using `parseThemeCss` on its theme source.
451
+
452
+ ```tsx
453
+ import { isAppCanvasFrame } from "@povio/ui-configurator/app-canvas";
454
+ import { AppCanvasBridge, useIsAppCanvasPage } from "@povio/ui-configurator/app-canvas/tanstack";
455
+
456
+ // Inside the app's root component, under its UIConfigurationProvider:
457
+ const canvasPage = useIsAppCanvasPage();
458
+ return (
459
+ <>
460
+ <AppCanvasBridge />
461
+ <Outlet />
462
+ {!canvasPage && !isAppCanvasFrame() && <ExistingConfigurationLauncher />}
463
+ </>
464
+ );
465
+ ```
466
+
467
+ `ExistingConfigurationLauncher` represents your existing launcher/editor, if any. Do not render a second `UIConfigurationModal` on `/_canvas`: the supplied page includes its own draggable editor. Keep app-specific debug overlays out of canvas frames too.
468
+
469
+ For code-based routing, add the package route to the existing root's children **before** creating the router:
470
+
471
+ ```tsx
472
+ import "@povio/ui-configurator/app-canvas/styles";
473
+ import { createAppCanvasRoute } from "@povio/ui-configurator/app-canvas/tanstack";
474
+ const canvasRoute = createAppCanvasRoute({
475
+ getParentRoute: () => rootRoute,
476
+ enabled: import.meta.env.DEV,
477
+ canvas: { examples: { "/projects/$projectId": { params: { projectId: "example-id" } } } },
478
+ });
479
+ const routeTree = rootRoute.addChildren([homeRoute, projectsRoute, canvasRoute]);
480
+ ```
481
+
482
+ Then open `/_canvas` directly. `enabled` accepts a boolean or a synchronous predicate; false produces a not-found route. Apply your existing access policy if enabling it outside development. Normal page authentication and loaders still run inside the frames. The canvas excludes its own pathname, and dynamic pages without example parameters remain explicitly unresolved. The lower-level `AppCanvasPage` and `AppCanvas` components remain available from `@povio/ui-configurator/app-canvas` for custom integrations.
483
+
484
+ ### Canvas workspaces
485
+
486
+ The canvas supports named workspaces, enabled pages per workspace, and independent positions per breakpoint. The selected page's HTML layers expand directly beneath its row in the sidebar.
487
+
488
+ The existing `uiConfigurator` Vite plugin also saves canvas settings to `povio.canvas.json` in the app root. Configure an alternate file with `uiConfigurator({ canvasFile: "povio.canvas.json" })`, or disable this with `canvasFile: false`. No Git commands run: review and commit this file through the normal repository workflow. Conflicting writes from different sessions are rejected instead of silently overwriting settings. Without this development-server connection, settings stay in browser storage; export/import remains available.
489
+
490
+ ### Fontsource font families
491
+
492
+ In Configure UI, open Typography → Font families → Browse Fontsource. Search or filter the catalog, select a family to preview it, then choose Heading, Body, or Add to available fonts and click **Add font to app**. In development, this installs the verified Fontsource package with the application's existing package manager, updates its package.json and lockfile, and adds CSS imports. Variable families with a weight axis are preferred; static families load their supported weights and styles. Existing compatible packages and imports are reused.
493
+
494
+ The selected role changes the live preview. **Save changes** writes it to the app's theme CSS. Adding a font makes its assets available; role assignments are saved explicitly with the theme. Package installation scripts are disabled, and no Git commit or push is performed. Catalog browsing and temporary CDN previews also work without the development installer.
495
+
496
+ The Vite plugin uses `src/styles/globals.css` by default. For another CSS entrypoint, configure `uiConfigurator({ fontCssFile: "src/app.css" })`; it must exist inside the application's Vite root. Set `fontCssFile: false` to disable font installation. Restart Vite after adding or changing the plugin configuration.
@@ -2,11 +2,11 @@ import { t as ChevronDown } from "./chevron-down-B4Pr8bD3.js";
2
2
  import { t as clsx } from "./clsx-CnD0nOiA.js";
3
3
  import { t as UIOverrides } from "./uiOverrides.context-BTCH9y5a.js";
4
4
  import { t as IconSlot } from "./IconSlot-DSK7qNxc.js";
5
- import { n as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, o as $7230ffa83bc0c2cf$export$c62b8e45d58ddad9, r as $7230ffa83bc0c2cf$export$4d86445c2cf5e3, s as $7230ffa83bc0c2cf$export$df3a06d6289f983e, t as $7230ffa83bc0c2cf$export$2881499e37b75b9a } from "./utils-Czcqspm7.js";
6
- import { n as $7705c033048f6da7$export$353f5b6fc5456de1, t as $7705c033048f6da7$export$24d547caef80ccd1 } from "./Button-D6KlWSFL.js";
7
- import { t as $2ec61d1d4f780267$export$a8a3e93435678ff9 } from "./Heading-nI1_VOaE.js";
5
+ import { n as $7230ffa83bc0c2cf$export$29f1550f4b0d4415, o as $7230ffa83bc0c2cf$export$c62b8e45d58ddad9, r as $7230ffa83bc0c2cf$export$4d86445c2cf5e3, s as $7230ffa83bc0c2cf$export$df3a06d6289f983e, t as $7230ffa83bc0c2cf$export$2881499e37b75b9a } from "./utils-BkLF-JA3.js";
6
+ import { n as $7705c033048f6da7$export$353f5b6fc5456de1, t as $7705c033048f6da7$export$24d547caef80ccd1 } from "./Button-C1YB5dOw.js";
7
+ import { t as $2ec61d1d4f780267$export$a8a3e93435678ff9 } from "./Heading-D4XFYv__.js";
8
8
  import { t as Typography } from "./Typography-LU4z2pR1.js";
9
- import { a as accordionHeadingTitleDefinition, c as accordionPanelContentDefinition, i as accordionHeadingSubtitleDefinition, l as accordionPanelDefinition, n as accordionDefinition, o as accordionIconDefinition, r as accordionHeadingDefinition, s as accordionItemDefinition, t as accordionChevronDefinition, u as accordionTriggerDefinition } from "./accordion.cva-CL1bVscW.js";
9
+ import { a as accordionHeadingTitleDefinition, c as accordionPanelContentDefinition, i as accordionHeadingSubtitleDefinition, l as accordionPanelDefinition, n as accordionDefinition, o as accordionIconDefinition, r as accordionHeadingDefinition, s as accordionItemDefinition, t as accordionChevronDefinition, u as accordionTriggerDefinition } from "./accordion.cva-CeBWV9EO.js";
10
10
  import $ahdqC$react, { createContext, forwardRef, useContext } from "react";
11
11
  import { c } from "react/compiler-runtime";
12
12
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -18,7 +18,7 @@ import { useId as useId$1 } from "react-aria/useId";
18
18
  import { useDisclosure } from "react-aria/useDisclosure";
19
19
  import { useDisclosureGroupState } from "react-stately/useDisclosureGroupState";
20
20
  import { useDisclosureState } from "react-stately/useDisclosureState";
21
- //#region ../../node_modules/.bun/react-aria-components@1.21.1+67f6792bdf102c28/node_modules/react-aria-components/dist/private/Disclosure.mjs
21
+ //#region ../../node_modules/.bun/react-aria-components@1.22.1+67f6792bdf102c28/node_modules/react-aria-components/dist/private/Disclosure.mjs
22
22
  const $a3e16eab0ea4036c$export$1d40e3e0cc4d5de = /*#__PURE__*/ createContext(null);
23
23
  const $a3e16eab0ea4036c$export$944aceb4f8c89f10 = /*#__PURE__*/ forwardRef(function DisclosureGroup(props, ref) {
24
24
  let state = useDisclosureGroupState(props);
@@ -1,12 +1,12 @@
1
- import { t as StyleMergeUtils } from "./style-merge.util-zLimKwt6.js";
2
- import { t as UIOverrides } from "./uiOverrides.context-DEp139He.js";
1
+ import { n as StyleMergeUtils, t as UIOverrides } from "./uiOverrides.context-Dmev7iRS.js";
2
+ import "./style-definitions-_RXJdSk-.js";
3
3
  import { FC, ReactNode, SVGProps } from "react";
4
4
  //#region src/components/status/Alert/alert.cva.d.ts
5
5
  declare const alertDefinition: {
6
6
  base: string[];
7
7
  config: StyleMergeUtils.Config<{
8
8
  readonly variant: {
9
- readonly outlined: "border bg-surface-default-card text-surface-default-card-foreground";
9
+ readonly outlined: "border bg-surface-default-card text-content-primary";
10
10
  readonly contained: "";
11
11
  };
12
12
  readonly color: {
@@ -1,6 +1,6 @@
1
- import { n as ButtonVariantProps } from "./button.cva-C7kEhgoA.js";
2
- import { n as DialogProps } from "./Dialog-CW93T9X1.js";
3
- import { r as TypographyPropsCva } from "./Typography-XljT9s02.js";
1
+ import { n as ButtonVariantProps } from "./button.cva-CBckM91c.js";
2
+ import { n as DialogProps } from "./Dialog-V-2cgGk1.js";
3
+ import { r as TypographyPropsCva } from "./Typography-D2FfZr7a.js";
4
4
  //#region src/components/overlays/AlertDialog/AlertDialog.d.ts
5
5
  interface AlertDialogAction {
6
6
  label: string;
@@ -0,0 +1,142 @@
1
+ import { t as UIConfig } from "./uiConfig.context-CT9EVqC5.js";
2
+ import { t as clsx } from "./clsx-CnD0nOiA.js";
3
+ import { t as UIOverrides } from "./uiOverrides.context-BTCH9y5a.js";
4
+ import { l as $542a13ca2fa5b484$export$5b6b19405a83ff9d } from "./Dialog-lFYX-7Ax.js";
5
+ import { t as $dbdc5e6e7ce01b4b$export$72b9695b8216309a } from "./ComboBox-DFlz6HJ8.js";
6
+ import { n as $41fb335299a4a39e$export$f5b8910cec6cf069 } from "./Input-BG0Xjw5X.js";
7
+ import { i as $928221da08ecbc62$export$a11e76429ed99b4, t as $928221da08ecbc62$export$41f133550aa26f48 } from "./ListBox-CoUk0kkt.js";
8
+ import { r as $a8ea2faf2ebe4d2f$re_export$mergeRefs } from "./import-D_3dPATF.js";
9
+ import { t as useFieldAccessibility } from "./useFieldAccessibility-eZIMECmG.js";
10
+ import { t as FormField } from "./FormField-D7KKJ6kG.js";
11
+ import { t as inputBaseDefinition } from "./input.cva-w7ZEVQAM.js";
12
+ import { t as TooltipWrapper } from "./TooltipWrapper-D7HUZLsP.js";
13
+ import { t as popoverDefinition } from "./popover.cva-Bhud1wnp.js";
14
+ import { t as selectListBoxItemDefinition } from "./selectItem.cva-BWfEkNs_.js";
15
+ import { t as InputContent } from "./InputContent-KhD4_YvO.js";
16
+ import { memo, useId, useRef, useState } from "react";
17
+ import { jsx, jsxs } from "react/jsx-runtime";
18
+ //#region src/components/inputs/Selection/Autocomplete/Autocomplete.tsx
19
+ function AutocompleteInner({ items, ref, value, defaultValue = "", onChange, onBlur, isClientSearchDisabled, inputClassName, label, error: errorProp, errorMessage, helperText, className, tooltipText, isRequired: isRequiredProp, required, rightContent, headerClassName, errorClassName, isHeaderHidden, isDisabled: isDisabledProp, disabled, isReadOnly, isInvalid, validationBehavior, validate, isDirty, as: asProp, layout: layoutProp, hideLabel: hideLabelProp, variant: variantProp, size: sizeProp, isClearable: isClearableProp, isClearableIfDisabled, unit, isLoading, action, leadingIcon, trailingIcon, placeholder, ...rest }) {
20
+ const ui = UIConfig.useConfig();
21
+ const isDisabled = isDisabledProp ?? disabled;
22
+ const isRequired = isRequiredProp ?? required;
23
+ const error = errorMessage ?? errorProp;
24
+ const generatedId = useId();
25
+ const inputId = rest.id ?? generatedId;
26
+ const inputBaseCva = UIOverrides.useCva("input.baseCva", inputBaseDefinition);
27
+ const popoverCva = UIOverrides.useCva("popover.cva", popoverDefinition);
28
+ const itemCva = UIOverrides.useCva("select.listBoxItemCva", selectListBoxItemDefinition);
29
+ const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);
30
+ const inputValue = value ?? uncontrolledValue;
31
+ const inputRef = useRef(null);
32
+ const as = layoutProp ?? asProp ?? ui.input.as;
33
+ const hideLabel = hideLabelProp ?? ui.input.hideLabel;
34
+ const variant = variantProp ?? ui.input.variant;
35
+ const size = sizeProp ?? ui.input.size;
36
+ const isClearable = isClearableProp ?? ui.input.isClearable;
37
+ const { describedBy, errorMessageId, helperTextId } = useFieldAccessibility({
38
+ describedBy: rest["aria-describedby"],
39
+ error,
40
+ helperText
41
+ });
42
+ const changeText = (text) => {
43
+ if (isReadOnly || isDisabled) return;
44
+ if (value === void 0) setUncontrolledValue(text);
45
+ onChange?.(text);
46
+ };
47
+ const fieldProps = {
48
+ label,
49
+ error,
50
+ helperText,
51
+ tooltipText,
52
+ isRequired,
53
+ rightContent,
54
+ headerClassName,
55
+ errorClassName,
56
+ isDisabled,
57
+ hideLabel,
58
+ errorMessageId,
59
+ helperTextId,
60
+ labelProps: { htmlFor: inputId },
61
+ isHeaderHidden: isHeaderHidden || as === "inline" || as === "filter" || as === "floating"
62
+ };
63
+ return /* @__PURE__ */ jsxs($dbdc5e6e7ce01b4b$export$72b9695b8216309a, {
64
+ allowsCustomValue: true,
65
+ defaultItems: items,
66
+ ...isClientSearchDisabled ? { items } : {},
67
+ inputValue,
68
+ onInputChange: changeText,
69
+ isDisabled,
70
+ isReadOnly,
71
+ isRequired,
72
+ isInvalid: !!error || isInvalid,
73
+ validationBehavior,
74
+ validate: validate ? ({ inputValue }) => validate(inputValue) : void 0,
75
+ "aria-label": rest["aria-label"] ?? label,
76
+ className: clsx("group w-full", className),
77
+ children: [/* @__PURE__ */ jsx(TooltipWrapper, {
78
+ as,
79
+ error,
80
+ children: /* @__PURE__ */ jsx(FormField, {
81
+ ...fieldProps,
82
+ as,
83
+ children: /* @__PURE__ */ jsx("div", {
84
+ className: clsx("relative flex cursor-text has-disabled:cursor-default", inputBaseCva({
85
+ variant,
86
+ as
87
+ }), inputClassName),
88
+ "data-is-empty": !inputValue || void 0,
89
+ "data-is-disabled": isDisabled || void 0,
90
+ "data-is-required": isRequired || void 0,
91
+ children: /* @__PURE__ */ jsx(InputContent, {
92
+ unit,
93
+ isLoading,
94
+ isDisabled,
95
+ action,
96
+ leadingIcon,
97
+ trailingIcon,
98
+ isClearable: isClearable && !isReadOnly,
99
+ isClearableIfDisabled,
100
+ value: inputValue,
101
+ onChange: changeText,
102
+ headerProps: {
103
+ ...fieldProps,
104
+ isHeaderHidden: hideLabel || isHeaderHidden
105
+ },
106
+ as,
107
+ size,
108
+ children: /* @__PURE__ */ jsx($41fb335299a4a39e$export$f5b8910cec6cf069, {
109
+ ...rest,
110
+ id: inputId,
111
+ ref: $a8ea2faf2ebe4d2f$re_export$mergeRefs(ref, inputRef),
112
+ onBlur,
113
+ "aria-describedby": describedBy,
114
+ "aria-errormessage": errorMessageId,
115
+ placeholder: as === "floating" ? "\xA0" : placeholder,
116
+ "data-is-filled": !!inputValue || void 0,
117
+ "data-is-dirty": isDirty || void 0,
118
+ className: "min-w-0 w-full bg-transparent outline-none"
119
+ })
120
+ })
121
+ })
122
+ })
123
+ }), /* @__PURE__ */ jsx($542a13ca2fa5b484$export$5b6b19405a83ff9d, {
124
+ className: popoverCva({}),
125
+ style: { width: "var(--trigger-width)" },
126
+ children: /* @__PURE__ */ jsx($928221da08ecbc62$export$41f133550aa26f48, {
127
+ className: "max-h-72 overflow-auto outline-none",
128
+ children: (item) => /* @__PURE__ */ jsx($928221da08ecbc62$export$a11e76429ed99b4, {
129
+ id: item.id,
130
+ textValue: item.label,
131
+ isDisabled: item.isDisabled,
132
+ className: itemCva({ isSingle: true }),
133
+ children: item.label
134
+ })
135
+ })
136
+ })]
137
+ });
138
+ }
139
+ const AutocompleteComponent = (props) => /* @__PURE__ */ jsx(AutocompleteInner, { ...props });
140
+ const Autocomplete = memo(AutocompleteComponent);
141
+ //#endregion
142
+ export { AutocompleteInner as n, Autocomplete as t };
@@ -0,0 +1,23 @@
1
+ import { i as InputProps$1 } from "./Input-BX3sZBEp.js";
2
+ import { InputProps, Key } from "react-aria-components";
3
+ //#region src/components/inputs/Selection/Autocomplete/Autocomplete.d.ts
4
+ interface AutocompleteItem {
5
+ id: Key;
6
+ label: string;
7
+ isDisabled?: boolean;
8
+ }
9
+ /** Text entry with optional suggestions. Values are text, never suggestion IDs. */
10
+ interface AutocompleteProps extends Omit<InputProps$1, "type" | "renderStaticInput" | "autoFocusOnMount" | "spellCheck" | "validationState"> {
11
+ field?: never;
12
+ items: AutocompleteItem[];
13
+ spellCheck?: InputProps["spellCheck"];
14
+ /** Disable local filtering when suggestions are already filtered by a server. */
15
+ isClientSearchDisabled?: boolean;
16
+ }
17
+ declare function AutocompleteInner({ items, ref, value, defaultValue, onChange, onBlur, isClientSearchDisabled, inputClassName, label, error: errorProp, errorMessage, helperText, className, tooltipText, isRequired: isRequiredProp, required, rightContent, headerClassName, errorClassName, isHeaderHidden, isDisabled: isDisabledProp, disabled, isReadOnly, isInvalid, validationBehavior, validate, isDirty, as: asProp, layout: layoutProp, hideLabel: hideLabelProp, variant: variantProp, size: sizeProp, isClearable: isClearableProp, isClearableIfDisabled, unit, isLoading, action, leadingIcon, trailingIcon, placeholder, ...rest }: AutocompleteProps): import("react").JSX.Element;
18
+ declare const AutocompleteComponent: (props: AutocompleteProps & {
19
+ field?: never;
20
+ }) => import("react").JSX.Element;
21
+ declare const Autocomplete: import("react").MemoExoticComponent<typeof AutocompleteComponent>;
22
+ //#endregion
23
+ export { AutocompleteProps as a, AutocompleteItem as i, AutocompleteComponent as n, AutocompleteInner as r, Autocomplete as t };
@@ -0,0 +1,9 @@
1
+ import { a as AutocompleteProps$1 } from "./Autocomplete-D_4gEL7D.js";
2
+ import { n as FieldValues, t as FormControlProps } from "./form.types-C8P4sznq.js";
3
+ //#region src/components/inputs/Selection/Autocomplete/Autocomplete.bound.d.ts
4
+ type ControlledAutocompleteProps<TFieldValues extends FieldValues> = FormControlProps<AutocompleteProps$1, TFieldValues>;
5
+ type AutocompleteProps<TFieldValues extends FieldValues = FieldValues> = ControlledAutocompleteProps<TFieldValues>;
6
+ declare function AutocompleteComponent<TFieldValues extends FieldValues>(props: ControlledAutocompleteProps<TFieldValues>): import("react").JSX.Element;
7
+ declare const Autocomplete: typeof AutocompleteComponent;
8
+ //#endregion
9
+ export { AutocompleteProps as n, ControlledAutocompleteProps as r, Autocomplete as t };
@@ -0,0 +1,28 @@
1
+ import { r as $a8ea2faf2ebe4d2f$re_export$mergeRefs } from "./import-D_3dPATF.js";
2
+ import { t as FieldController } from "./form.binding-B-2id68q.js";
3
+ import { n as AutocompleteInner } from "./Autocomplete-CWU9Ev3J.js";
4
+ import { memo } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/components/inputs/Selection/Autocomplete/Autocomplete.bound.tsx
7
+ function AutocompleteComponent(props) {
8
+ const { field, ref, ...innerProps } = props;
9
+ return /* @__PURE__ */ jsx(FieldController, {
10
+ control: field.form,
11
+ name: field.name,
12
+ onValueChange: field.onValueChange,
13
+ onBlur: field.onBlur,
14
+ render: ({ field, fieldState: { error, isDirty } }) => /* @__PURE__ */ jsx(AutocompleteInner, {
15
+ ...innerProps,
16
+ ref: $a8ea2faf2ebe4d2f$re_export$mergeRefs(ref, field.ref),
17
+ value: field.value ?? "",
18
+ onChange: field.onChange,
19
+ onBlur: field.onBlur,
20
+ isDirty,
21
+ isDisabled: field.disabled || props.isDisabled,
22
+ error: props.error ?? error?.message
23
+ })
24
+ });
25
+ }
26
+ const Autocomplete = memo(AutocompleteComponent);
27
+ //#endregion
28
+ export { Autocomplete as t };