@persona/design-system 0.3.0 → 0.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 (507) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +3 -3
  3. package/dist/{Action-CnNf5T-l.d.mts → Action-CcAyQpYN.d.mts} +3 -3
  4. package/dist/Action.d.mts +1 -1
  5. package/dist/AdvancedFilterRuleRow.d.mts +5 -5
  6. package/dist/AdvancedFilterRulesPopover.d.mts +4 -4
  7. package/dist/ArrayValueControl.d.mts +1 -1
  8. package/dist/Attribute.d.mts +5 -5
  9. package/dist/AttributeGrid.d.mts +1 -1
  10. package/dist/{Badge-BqS6Nk4J.mjs → Badge-BL0J5oMa.mjs} +3 -3
  11. package/dist/{Badge-BqS6Nk4J.mjs.map → Badge-BL0J5oMa.mjs.map} +1 -1
  12. package/dist/Banner.d.mts +1 -1
  13. package/dist/BooleanValueControl.d.mts +1 -1
  14. package/dist/BottomPanel.d.mts +32 -0
  15. package/dist/{Breadcrumb-DEwZFJHF.d.mts → Breadcrumb-Df06cTnA.d.mts} +1 -1
  16. package/dist/Breadcrumb.d.mts +1 -1
  17. package/dist/{Breadcrumbs-0e_3v9FF.d.mts → Breadcrumbs-D_Gzd4_J.d.mts} +2 -2
  18. package/dist/{Breadcrumbs-CqKtnZqu.mjs → Breadcrumbs-Zi5p0HDR.mjs} +12 -12
  19. package/dist/{Breadcrumbs-CqKtnZqu.mjs.map → Breadcrumbs-Zi5p0HDR.mjs.map} +1 -1
  20. package/dist/Breadcrumbs.d.mts +1 -1
  21. package/dist/{Button-C0F0F2IL.d.mts → Button-BrI1s2-r.d.mts} +4 -4
  22. package/dist/Button.d.mts +1 -1
  23. package/dist/ButtonGroup.d.mts +1 -1
  24. package/dist/{Calendar-BvLNcHQM.d.mts → Calendar-DjnoZVcT.d.mts} +2 -2
  25. package/dist/Calendar.d.mts +1 -1
  26. package/dist/CalendarBase.d.mts +1 -1
  27. package/dist/{Card-BMCB9eFC.mjs → Card-CKrJtn1f.mjs} +4 -4
  28. package/dist/{Card-BMCB9eFC.mjs.map → Card-CKrJtn1f.mjs.map} +1 -1
  29. package/dist/{Card-BxNoIQWw.d.mts → Card-mZDNFaJy.d.mts} +4 -4
  30. package/dist/Card.d.mts +1 -1
  31. package/dist/Card2.d.mts +3 -3
  32. package/dist/{CardV2-B0ZweQYk.mjs → CardV2-CXxzl1EZ.mjs} +20 -20
  33. package/dist/{CardV2-B0ZweQYk.mjs.map → CardV2-CXxzl1EZ.mjs.map} +1 -1
  34. package/dist/{Checkbox-Bm8exUfH.d.mts → Checkbox-CwPXPLCi.d.mts} +1 -1
  35. package/dist/{Checkbox-DAvbgZgO.mjs → Checkbox-DxNHp59y.mjs} +8 -8
  36. package/dist/{Checkbox-DAvbgZgO.mjs.map → Checkbox-DxNHp59y.mjs.map} +1 -1
  37. package/dist/Checkbox.d.mts +1 -1
  38. package/dist/CheckboxGroupField.d.mts +2 -2
  39. package/dist/ChoicesValueControl.d.mts +1 -1
  40. package/dist/{Combobox-xBrxiUAu.mjs → Combobox-BUtqtzKl.mjs} +22 -22
  41. package/dist/Combobox-BUtqtzKl.mjs.map +1 -0
  42. package/dist/{Combobox-C8ue0cBP.d.mts → Combobox-C9QBItsc.d.mts} +3 -3
  43. package/dist/Combobox.d.mts +2 -2
  44. package/dist/{ComboboxBase-DJGTMf1_.d.mts → ComboboxBase-BkSpdmsT.d.mts} +8 -8
  45. package/dist/ComboboxBase.d.mts +1 -1
  46. package/dist/{ComboboxMultiSelect-D7A2bbWU.d.mts → ComboboxMultiSelect-DkVfwSKH.d.mts} +2 -2
  47. package/dist/ComboboxMultiSelect.d.mts +1 -1
  48. package/dist/{ComboboxSingleSelect-D1uzEyKj.d.mts → ComboboxSingleSelect-CpumBcDn.d.mts} +4 -4
  49. package/dist/ComboboxSingleSelect.d.mts +1 -1
  50. package/dist/{CompactBar-DMuvqaV5.d.mts → CompactBar-COxu_FDd.d.mts} +3 -3
  51. package/dist/CompactBar.d.mts +1 -1
  52. package/dist/{ConfigFormGroup-D2_sajXe.mjs → ConfigFormGroup-aSdn2r6Z.mjs} +4 -4
  53. package/dist/{ConfigFormGroup-D2_sajXe.mjs.map → ConfigFormGroup-aSdn2r6Z.mjs.map} +1 -1
  54. package/dist/{ControlBar-Dg8JeU8f.d.mts → ControlBar-DwAhPcb5.d.mts} +12 -2
  55. package/dist/ControlBar.d.mts +1 -1
  56. package/dist/DataTable.d.mts +5 -4
  57. package/dist/{DateField-Com9f2-j.d.mts → DateField-tOyrGcx1.d.mts} +2 -2
  58. package/dist/DateField.d.mts +1 -1
  59. package/dist/{DatePicker-BGO6doLx.d.mts → DatePicker-Bs9JODNg.d.mts} +2 -2
  60. package/dist/{DatePicker-BlnE2MBD.mjs → DatePicker-CLP-ajza.mjs} +95 -23
  61. package/dist/DatePicker-CLP-ajza.mjs.map +1 -0
  62. package/dist/DatePicker.d.mts +1 -1
  63. package/dist/{DateRangePicker-DfRBm9z4.d.mts → DateRangePicker-BT6-j8V7.d.mts} +24 -4
  64. package/dist/DateRangePicker.d.mts +2 -2
  65. package/dist/DateRangeValueControl.d.mts +8 -4
  66. package/dist/DateValueControl.d.mts +1 -1
  67. package/dist/{DropdownButton-CpWNRUma.mjs → DropdownButton-CCAfNZ9h.mjs} +3 -3
  68. package/dist/{DropdownButton-CpWNRUma.mjs.map → DropdownButton-CCAfNZ9h.mjs.map} +1 -1
  69. package/dist/DropdownButton.d.mts +2 -2
  70. package/dist/{DropdownMenu-CnaK78rP.d.mts → DropdownMenu-BoatixlO.d.mts} +3 -3
  71. package/dist/{DropdownMenu-BCyV8nC0.mjs → DropdownMenu-CUnf420M.mjs} +4 -4
  72. package/dist/{DropdownMenu-BCyV8nC0.mjs.map → DropdownMenu-CUnf420M.mjs.map} +1 -1
  73. package/dist/DropdownMenu.d.mts +1 -1
  74. package/dist/{ErrorProps-CN2XjaOX.d.mts → ErrorProps-C9T857Wk.d.mts} +1 -1
  75. package/dist/ErrorProps.d.mts +1 -1
  76. package/dist/{FieldRegistry-DdA63Vnh.d.mts → FieldRegistry-D6niLExM.d.mts} +2 -2
  77. package/dist/FieldRegistry.d.mts +1 -1
  78. package/dist/{FilterBar-CxNsBVrn.d.mts → FilterBar-DfBV7yKM.d.mts} +10 -4
  79. package/dist/FilterBar.d.mts +1 -1
  80. package/dist/FilterPickerMenu.d.mts +3 -3
  81. package/dist/FilterPill.d.mts +1 -1
  82. package/dist/FilterPopover.d.mts +2 -2
  83. package/dist/FloatValueControl.d.mts +1 -1
  84. package/dist/FloatingPanel.d.mts +1 -1
  85. package/dist/FloatingPanelContext.d.mts +1 -1
  86. package/dist/{FormControl-Doj2gvF0.d.mts → FormControl-0H0Jeind.d.mts} +4 -4
  87. package/dist/{FormControl-HVzZEqJH.mjs → FormControl-1BmoYFCu.mjs} +6 -6
  88. package/dist/{FormControl-HVzZEqJH.mjs.map → FormControl-1BmoYFCu.mjs.map} +1 -1
  89. package/dist/FormControl.d.mts +1 -1
  90. package/dist/FormControlLabel.d.mts +2 -2
  91. package/dist/{FormField-D8dHbqZZ.d.mts → FormField-BcaFdmo5.d.mts} +2 -2
  92. package/dist/{FormField-B9P3BWvS.mjs → FormField-oBKH25qf.mjs} +22 -22
  93. package/dist/FormField-oBKH25qf.mjs.map +1 -0
  94. package/dist/FormField.d.mts +1 -1
  95. package/dist/Grid.d.mts +38 -0
  96. package/dist/GridItem.d.mts +17 -0
  97. package/dist/{Header-CBlB65NY.d.mts → Header-BjSoTEX_.d.mts} +2 -2
  98. package/dist/Header.d.mts +1 -1
  99. package/dist/{HelperTooltip-C28h1zFl.d.mts → HelperTooltip-S20wVFCS.d.mts} +3 -3
  100. package/dist/HelperTooltip.d.mts +1 -1
  101. package/dist/{HoverCopyableField-0Bzygbp9.mjs → HoverCopyableField-GMXeF-3J.mjs} +31 -20
  102. package/dist/HoverCopyableField-GMXeF-3J.mjs.map +1 -0
  103. package/dist/HoverCopyableField.d.mts +15 -4
  104. package/dist/{IconButton-BfDlic2K.mjs → IconButton-BgL3QUVO.mjs} +9 -9
  105. package/dist/{IconButton-BfDlic2K.mjs.map → IconButton-BgL3QUVO.mjs.map} +1 -1
  106. package/dist/{IconButton-CBcW7ZU8.d.mts → IconButton-BpyOr8Ev.d.mts} +2 -2
  107. package/dist/IconButton.d.mts +1 -1
  108. package/dist/ImageTile.d.mts +2 -2
  109. package/dist/InlineCombobox.d.mts +2 -2
  110. package/dist/InlineInput.d.mts +1 -1
  111. package/dist/{Input-Bimw8KFj.mjs → Input-BWlvBYB3.mjs} +6 -6
  112. package/dist/{Input-Bimw8KFj.mjs.map → Input-BWlvBYB3.mjs.map} +1 -1
  113. package/dist/{Input-CVdjkX88.d.mts → Input-qlQVD5h0.d.mts} +5 -5
  114. package/dist/Input.d.mts +1 -1
  115. package/dist/{InputProps-BwKkmImn.d.mts → InputProps-D_7MnQfE.d.mts} +2 -2
  116. package/dist/InputProps.d.mts +1 -1
  117. package/dist/IntegerValueControl.d.mts +1 -1
  118. package/dist/LayoutLoadingSpinner.d.mts +11 -0
  119. package/dist/Link.d.mts +3 -3
  120. package/dist/{ListBox-DKZpGYjo.mjs → ListBox-9jHHEaqW.mjs} +15 -15
  121. package/dist/{ListBox-DKZpGYjo.mjs.map → ListBox-9jHHEaqW.mjs.map} +1 -1
  122. package/dist/{ListBox-CDl5oZPX.d.mts → ListBox-ZE3MYMt6.d.mts} +5 -5
  123. package/dist/ListBox.d.mts +1 -1
  124. package/dist/ListBoxField.d.mts +3 -3
  125. package/dist/{LoadingShimmer-DC2vqicd.mjs → LoadingShimmer-a2Hv0kAq.mjs} +2 -2
  126. package/dist/{LoadingShimmer-DC2vqicd.mjs.map → LoadingShimmer-a2Hv0kAq.mjs.map} +1 -1
  127. package/dist/LoadingShimmer.d.mts +2 -2
  128. package/dist/{LogicRow-CkbyvrUw.d.mts → LogicRow-CbMmaWXU.d.mts} +4 -4
  129. package/dist/LogicRow.d.mts +1 -1
  130. package/dist/MaskedInput.d.mts +2 -2
  131. package/dist/MatchHighlight.d.mts +1 -1
  132. package/dist/{Menu-Dir03WA9.mjs → Menu-38UCGcte.mjs} +6 -6
  133. package/dist/{Menu-Dir03WA9.mjs.map → Menu-38UCGcte.mjs.map} +1 -1
  134. package/dist/{Menu-CYRdEnfo.d.mts → Menu-ZShdhNd7.d.mts} +4 -4
  135. package/dist/Menu.d.mts +1 -1
  136. package/dist/{MiddleTruncatedText-GXI-CPvs.mjs → MiddleTruncatedText-DnF7F_1D.mjs} +4 -4
  137. package/dist/{MiddleTruncatedText-GXI-CPvs.mjs.map → MiddleTruncatedText-DnF7F_1D.mjs.map} +1 -1
  138. package/dist/Modal.d.mts +4 -5
  139. package/dist/{PageHeader-C2IUKhCg.mjs → PageHeader-B2-Slzhl.mjs} +4 -4
  140. package/dist/{PageHeader-C2IUKhCg.mjs.map → PageHeader-B2-Slzhl.mjs.map} +1 -1
  141. package/dist/PageHeader.d.mts +2 -2
  142. package/dist/PageLayout.d.mts +1 -1
  143. package/dist/{PageSelector-vay4jpMp.d.mts → PageSelector-BcZx4nqe.d.mts} +3 -3
  144. package/dist/PageSelector.d.mts +1 -1
  145. package/dist/{Pagination-0VhVdXv0.mjs → Pagination-CtUz0gdA.mjs} +8 -8
  146. package/dist/{Pagination-0VhVdXv0.mjs.map → Pagination-CtUz0gdA.mjs.map} +1 -1
  147. package/dist/{Pagination-ygLutOst.d.mts → Pagination-j4hF7GOk.d.mts} +2 -2
  148. package/dist/Pagination.d.mts +1 -1
  149. package/dist/{Pii-C7pA72Bh.mjs → Pii-RwKn-K84.mjs} +2 -2
  150. package/dist/{Pii-C7pA72Bh.mjs.map → Pii-RwKn-K84.mjs.map} +1 -1
  151. package/dist/Pii.d.mts +1 -1
  152. package/dist/PillShell.d.mts +1 -1
  153. package/dist/{Popover-BkDpDdaO.mjs → Popover-DlXyKYL5.mjs} +6 -6
  154. package/dist/{Popover-BkDpDdaO.mjs.map → Popover-DlXyKYL5.mjs.map} +1 -1
  155. package/dist/Popover.d.mts +1 -1
  156. package/dist/ProgressBar.d.mts +1 -1
  157. package/dist/ProgressIndicator.d.mts +6 -4
  158. package/dist/{PseudoClassProps-CcSlKNev.d.mts → PseudoClassProps-BPdn-ofQ.d.mts} +1 -1
  159. package/dist/PseudoClassProps.d.mts +1 -1
  160. package/dist/{Radio-BaFutxgV.mjs → Radio-cLL9oatf.mjs} +5 -5
  161. package/dist/{Radio-BaFutxgV.mjs.map → Radio-cLL9oatf.mjs.map} +1 -1
  162. package/dist/{RadioGroup-ClMzOZl0.mjs → RadioGroup-BGo_kXKh.mjs} +4 -4
  163. package/dist/{RadioGroup-ClMzOZl0.mjs.map → RadioGroup-BGo_kXKh.mjs.map} +1 -1
  164. package/dist/{RadioGroup-BuJaitgG.d.mts → RadioGroup-BqULCH-D.d.mts} +1 -1
  165. package/dist/RadioGroup.d.mts +1 -1
  166. package/dist/RangeCalendar.d.mts +6 -1
  167. package/dist/RangeCalendarPresets.d.mts +13 -3
  168. package/dist/ResizableVerticalPanel.d.mts +22 -0
  169. package/dist/ResizeHandle.d.mts +19 -0
  170. package/dist/RightPanel.d.mts +41 -0
  171. package/dist/RightPanelLoadingContent.d.mts +7 -0
  172. package/dist/RightPanelResizeHandle.d.mts +14 -0
  173. package/dist/RuleEditorFields.d.mts +5 -5
  174. package/dist/RulesPill.d.mts +1 -1
  175. package/dist/{SearchInput-Ca3_np5e.d.mts → SearchInput-Dc90GLTF.d.mts} +3 -3
  176. package/dist/SearchInput.d.mts +1 -1
  177. package/dist/SectionHeading.d.mts +1 -1
  178. package/dist/{SegmentedControl-DgyJL4uN.mjs → SegmentedControl-CvWJGhwy.mjs} +5 -5
  179. package/dist/{SegmentedControl-DgyJL4uN.mjs.map → SegmentedControl-CvWJGhwy.mjs.map} +1 -1
  180. package/dist/{SegmentedControl-_I4sWeD7.d.mts → SegmentedControl-Db78Pzo_.d.mts} +2 -2
  181. package/dist/SegmentedControl.d.mts +1 -1
  182. package/dist/{Select-D6MqSYVa.mjs → Select-U_vQhK1A.mjs} +12 -13
  183. package/dist/Select-U_vQhK1A.mjs.map +1 -0
  184. package/dist/{Select-vwXGlHuW.d.mts → Select-bafAe2wd.d.mts} +4 -4
  185. package/dist/Select.d.mts +1 -1
  186. package/dist/Slider.d.mts +1 -1
  187. package/dist/SliderRHF.d.mts +1 -1
  188. package/dist/SliderThumb.d.mts +1 -1
  189. package/dist/{Spacer-CJp0lwkL.mjs → Spacer-BsK8tTwA.mjs} +2 -2
  190. package/dist/{Spacer-CJp0lwkL.mjs.map → Spacer-BsK8tTwA.mjs.map} +1 -1
  191. package/dist/{Spinner-BgBCCHGo.mjs → Spinner-BTyc6glU.mjs} +3 -3
  192. package/dist/{Spinner-BgBCCHGo.mjs.map → Spinner-BTyc6glU.mjs.map} +1 -1
  193. package/dist/{Stack-Bl54WmhY.mjs → Stack-Bre2oiov.mjs} +2 -2
  194. package/dist/{Stack-Bl54WmhY.mjs.map → Stack-Bre2oiov.mjs.map} +1 -1
  195. package/dist/{Stack-CkV7k7TE.d.mts → Stack-_JcvIE31.d.mts} +2 -2
  196. package/dist/Stack.d.mts +1 -1
  197. package/dist/StatusIndicator.d.mts +1 -1
  198. package/dist/{Sticker-xtDMuOoN.mjs → Sticker-CQ6sOKUj.mjs} +6 -6
  199. package/dist/{Sticker-xtDMuOoN.mjs.map → Sticker-CQ6sOKUj.mjs.map} +1 -1
  200. package/dist/{Sticker-Dhx2wqTL.d.mts → Sticker-OKVOQt_C.d.mts} +6 -6
  201. package/dist/Sticker.d.mts +1 -1
  202. package/dist/StringValueControl.d.mts +1 -1
  203. package/dist/SwatchPicker.d.mts +1 -1
  204. package/dist/Tab.d.mts +3 -3
  205. package/dist/{TabBar-D6UocZXi.mjs → TabBar-B5NtgtgC.mjs} +7 -7
  206. package/dist/{TabBar-D6UocZXi.mjs.map → TabBar-B5NtgtgC.mjs.map} +1 -1
  207. package/dist/TabBarIconButton.d.mts +2 -2
  208. package/dist/{Table-cO7ZwGPM.d.mts → Table-BcAgCIWq.d.mts} +1 -1
  209. package/dist/{Table-D1WyUQuv.mjs → Table-DfUD3I2s.mjs} +8 -8
  210. package/dist/{Table-D1WyUQuv.mjs.map → Table-DfUD3I2s.mjs.map} +1 -1
  211. package/dist/Table.d.mts +1 -1
  212. package/dist/{TableBody-CirMgfAV.d.mts → TableBody-D-RDBun9.d.mts} +1 -1
  213. package/dist/TableBody.d.mts +1 -1
  214. package/dist/{TableBox-C5qWhr82.mjs → TableBox-0GvWjRln.mjs} +27 -21
  215. package/dist/{TableBox-C5qWhr82.mjs.map → TableBox-0GvWjRln.mjs.map} +1 -1
  216. package/dist/TableBox.d.mts +2 -2
  217. package/dist/{TableBoxCell-DmVX_tgn.d.mts → TableBoxCell-WXc57DwN.d.mts} +12 -9
  218. package/dist/TableBoxCell.d.mts +1 -1
  219. package/dist/TableBoxField.d.mts +4 -4
  220. package/dist/{TableBoxRow-nwq41Bpi.d.mts → TableBoxRow-BQz0a9vr.d.mts} +4 -4
  221. package/dist/TableBoxRow.d.mts +1 -1
  222. package/dist/{TableBoxRowActions-B4_ojiQo.d.mts → TableBoxRowActions-DfewtLrn.d.mts} +2 -2
  223. package/dist/TableBoxRowActions.d.mts +1 -1
  224. package/dist/TableCell.d.mts +1 -1
  225. package/dist/{TableControls-RwIPBxyU.d.mts → TableControls-C26vGkWZ.d.mts} +6 -9
  226. package/dist/{TableControls-CZ9iu3ma.mjs → TableControls-WUNbzSNq.mjs} +331 -113
  227. package/dist/TableControls-WUNbzSNq.mjs.map +1 -0
  228. package/dist/TableControls.d.mts +1 -1
  229. package/dist/{TableControlsContext-D_SBFZN1.d.mts → TableControlsContext-ChFsFEjR.d.mts} +2 -2
  230. package/dist/TableControlsContext.d.mts +1 -1
  231. package/dist/{TableHead-DMq_q_W0.d.mts → TableHead-PPaqXC0K.d.mts} +1 -1
  232. package/dist/TableHead.d.mts +1 -1
  233. package/dist/{TableHeaderCell-C2pqXBYO.d.mts → TableHeaderCell-K_avn-rR.d.mts} +1 -1
  234. package/dist/TableHeaderCell.d.mts +1 -1
  235. package/dist/{TableLayout-DQKu6Rcj.d.mts → TableLayout-_Hd-Tvto.d.mts} +1 -1
  236. package/dist/TableLayout.d.mts +1 -1
  237. package/dist/{TableRow-CPqZ8DK3.d.mts → TableRow-BTWf9xVC.d.mts} +2 -2
  238. package/dist/TableRow.d.mts +1 -1
  239. package/dist/TableTH.d.mts +1 -1
  240. package/dist/{TableViewConfigurationDropdown-BYPh4dIP.d.mts → TableViewConfigurationDropdown-BqB7pOh8.d.mts} +5 -3
  241. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  242. package/dist/{TechnicalSticker-DTjg6d2F.mjs → TechnicalSticker-ClRR_6Ly.mjs} +6 -6
  243. package/dist/{TechnicalSticker-DTjg6d2F.mjs.map → TechnicalSticker-ClRR_6Ly.mjs.map} +1 -1
  244. package/dist/TechnicalSticker.d.mts +1 -1
  245. package/dist/{Text-RcEfNFLx.mjs → Text-B0orb-cZ.mjs} +2 -2
  246. package/dist/{Text-RcEfNFLx.mjs.map → Text-B0orb-cZ.mjs.map} +1 -1
  247. package/dist/{Text-CfIFUyHt.d.mts → Text-CAKHcXSd.d.mts} +4 -4
  248. package/dist/Text.d.mts +1 -1
  249. package/dist/{TextArea-DhPBI_1-.d.mts → TextArea-NjdArapc.d.mts} +2 -2
  250. package/dist/{TextArea-ZMgbE_Lh.mjs → TextArea-n4IKHJKo.mjs} +4 -4
  251. package/dist/{TextArea-ZMgbE_Lh.mjs.map → TextArea-n4IKHJKo.mjs.map} +1 -1
  252. package/dist/TextArea.d.mts +1 -1
  253. package/dist/{TextUnderlineTooltip-BzmmiJlC.d.mts → TextUnderlineTooltip-Duzxfc_r.d.mts} +3 -3
  254. package/dist/TextUnderlineTooltip.d.mts +1 -1
  255. package/dist/Tile.d.mts +2 -2
  256. package/dist/Toast.d.mts +1 -1
  257. package/dist/{Toggle-BPgfSjuu.mjs → Toggle-e8DCYa6i.mjs} +7 -7
  258. package/dist/{Toggle-BPgfSjuu.mjs.map → Toggle-e8DCYa6i.mjs.map} +1 -1
  259. package/dist/{Toggle-BGGQ4Ukl.d.mts → Toggle-fh80PA8P.d.mts} +1 -1
  260. package/dist/Toggle.d.mts +1 -1
  261. package/dist/{Tooltip-D_a-RwAN.d.mts → Tooltip-DabloV0o.d.mts} +3 -3
  262. package/dist/{Tooltip-BvDbmXak.mjs → Tooltip-iJcfJqxn.mjs} +5 -5
  263. package/dist/{Tooltip-BvDbmXak.mjs.map → Tooltip-iJcfJqxn.mjs.map} +1 -1
  264. package/dist/Tooltip.d.mts +1 -1
  265. package/dist/{TruncatedText-BJnowVTx.d.mts → TruncatedText-B1W4BivL.d.mts} +2 -2
  266. package/dist/codec-B0dZTwlG.d.mts +29 -0
  267. package/dist/codec.d.mts +2 -0
  268. package/dist/components/Attribute/index.mjs +7 -7
  269. package/dist/components/Attribute/index.mjs.map +1 -1
  270. package/dist/components/Badge/index.mjs +1 -1
  271. package/dist/components/Banner/index.mjs +3 -3
  272. package/dist/components/BottomPanel/index.d.mts +2 -0
  273. package/dist/components/BottomPanel/index.mjs +293 -0
  274. package/dist/components/BottomPanel/index.mjs.map +1 -0
  275. package/dist/components/Breadcrumbs/index.d.mts +1 -1
  276. package/dist/components/Breadcrumbs/index.mjs +1 -1
  277. package/dist/components/Button/index.d.mts +2 -2
  278. package/dist/components/Button/index.mjs +1 -1
  279. package/dist/components/ButtonGroup/index.mjs +4 -4
  280. package/dist/components/Card/index.d.mts +2 -2
  281. package/dist/components/Card/index.mjs +1 -1
  282. package/dist/components/CardV2/index.d.mts +1 -1
  283. package/dist/components/CardV2/index.mjs +1 -1
  284. package/dist/components/Checkbox/index.d.mts +1 -1
  285. package/dist/components/Checkbox/index.mjs +1 -1
  286. package/dist/components/Combobox/index.d.mts +2 -2
  287. package/dist/components/Combobox/index.mjs +1 -1
  288. package/dist/components/ConfigFormGroup/index.mjs +2 -2
  289. package/dist/components/DataTable/TableControls/index.d.mts +19 -16
  290. package/dist/components/DataTable/TableControls/index.mjs +2 -2
  291. package/dist/components/DataTable/index.mjs +25 -25
  292. package/dist/components/DataTable/index.mjs.map +1 -1
  293. package/dist/components/DataTable/types.d.mts +2 -2
  294. package/dist/components/DatePicker/index.d.mts +5 -5
  295. package/dist/components/DatePicker/index.mjs +1 -1
  296. package/dist/components/DropdownButton/index.mjs +1 -1
  297. package/dist/components/DropdownMenu/index.d.mts +1 -1
  298. package/dist/components/DropdownMenu/index.mjs +1 -1
  299. package/dist/components/FloatingPanel/index.mjs +8 -8
  300. package/dist/components/FloatingPanel/index.mjs.map +1 -1
  301. package/dist/components/FormControl/index.d.mts +2 -2
  302. package/dist/components/FormControl/index.mjs +2 -2
  303. package/dist/components/FormField/index.d.mts +1 -1
  304. package/dist/components/FormField/index.mjs +1 -1
  305. package/dist/components/Grid/index.d.mts +3 -0
  306. package/dist/components/Grid/index.mjs +85 -0
  307. package/dist/components/Grid/index.mjs.map +1 -0
  308. package/dist/components/HoverCopyableField/index.d.mts +2 -2
  309. package/dist/components/HoverCopyableField/index.mjs +2 -2
  310. package/dist/components/ImageTile/index.mjs +10 -10
  311. package/dist/components/Input/index.d.mts +1 -1
  312. package/dist/components/Input/index.mjs +1 -1
  313. package/dist/components/Link/index.mjs +4 -4
  314. package/dist/components/Link/index.mjs.map +1 -1
  315. package/dist/components/ListBox/index.d.mts +3 -3
  316. package/dist/components/ListBox/index.mjs +1 -1
  317. package/dist/components/LoadingShimmer/index.mjs +1 -1
  318. package/dist/components/MaskedInput/index.mjs +2 -2
  319. package/dist/components/MatchHighlight/index.mjs +1 -1
  320. package/dist/components/Menu/index.d.mts +1 -1
  321. package/dist/components/Menu/index.mjs +1 -1
  322. package/dist/components/Modal/index.mjs +42 -12
  323. package/dist/components/Modal/index.mjs.map +1 -1
  324. package/dist/components/PageHeader/index.mjs +1 -1
  325. package/dist/components/Pagination/index.d.mts +3 -3
  326. package/dist/components/Pagination/index.mjs +1 -1
  327. package/dist/components/Pii/index.mjs +1 -1
  328. package/dist/components/Popover/index.mjs +1 -1
  329. package/dist/components/ProgressBar/index.mjs +2 -2
  330. package/dist/components/ProgressIndicator/index.mjs +14 -10
  331. package/dist/components/ProgressIndicator/index.mjs.map +1 -1
  332. package/dist/components/Radio/index.mjs +1 -1
  333. package/dist/components/RadioGroup/index.d.mts +1 -1
  334. package/dist/components/RadioGroup/index.mjs +1 -1
  335. package/dist/components/RightPanel/index.d.mts +2 -0
  336. package/dist/components/RightPanel/index.mjs +294 -0
  337. package/dist/components/RightPanel/index.mjs.map +1 -0
  338. package/dist/components/SegmentedControl/index.d.mts +1 -1
  339. package/dist/components/SegmentedControl/index.mjs +1 -1
  340. package/dist/components/Select/index.d.mts +1 -1
  341. package/dist/components/Select/index.mjs +1 -1
  342. package/dist/components/Slider/index.mjs +4 -4
  343. package/dist/components/Spacer/index.mjs +1 -1
  344. package/dist/components/Spinner/index.mjs +1 -1
  345. package/dist/components/Stack/index.d.mts +1 -1
  346. package/dist/components/Stack/index.mjs +1 -1
  347. package/dist/components/StatusIndicator/index.mjs +2 -2
  348. package/dist/components/Sticker/index.d.mts +1 -1
  349. package/dist/components/Sticker/index.mjs +1 -1
  350. package/dist/components/SwatchPicker/index.mjs +1 -1
  351. package/dist/components/TabBar/index.mjs +1 -1
  352. package/dist/components/Table/index.d.mts +7 -7
  353. package/dist/components/Table/index.mjs +1 -1
  354. package/dist/components/TableBox/index.d.mts +2 -2
  355. package/dist/components/TableBox/index.mjs +1 -1
  356. package/dist/components/TechnicalSticker/index.mjs +1 -1
  357. package/dist/components/Text/index.d.mts +1 -1
  358. package/dist/components/Text/index.mjs +1 -1
  359. package/dist/components/TextArea/index.d.mts +1 -1
  360. package/dist/components/TextArea/index.mjs +1 -1
  361. package/dist/components/Tile/index.mjs +5 -5
  362. package/dist/components/Toast/index.mjs +5 -5
  363. package/dist/components/Toggle/index.d.mts +1 -1
  364. package/dist/components/Toggle/index.mjs +1 -1
  365. package/dist/components/Tooltip/index.d.mts +3 -3
  366. package/dist/components/Tooltip/index.mjs +1 -1
  367. package/dist/compound-expression.d.mts +1 -1
  368. package/dist/{constants-BASogfT_.d.mts → constants-DcJ3tnwY.d.mts} +1 -1
  369. package/dist/constants.d.mts +1 -1
  370. package/dist/date-filter-BbWgAXy3.mjs +176 -0
  371. package/dist/date-filter-BbWgAXy3.mjs.map +1 -0
  372. package/dist/date-range-rule-value-DBEEWTQp.d.mts +17 -0
  373. package/dist/date-range-rule-value.d.mts +2 -0
  374. package/dist/date-rule-intent-BArNGT2E.d.mts +20 -0
  375. package/dist/date-rule-intent.d.mts +2 -0
  376. package/dist/display.d.mts +2 -2
  377. package/dist/fieldPickerOptions.d.mts +2 -2
  378. package/dist/{filter-size-context-Bw5F7082.d.mts → filter-size-context-D1UhTwOG.d.mts} +2 -2
  379. package/dist/filter-size-context.d.mts +1 -1
  380. package/dist/helpers.d.mts +1 -1
  381. package/dist/{index--5Mfhlkj.d.mts → index-DASkW991.d.mts} +2 -2
  382. package/dist/{index-C1bz13uw.d.mts → index-Dc_BgmPv.d.mts} +5 -5
  383. package/dist/{index-DiCnyORA.d.mts → index-Dpo-RP6S.d.mts} +5 -5
  384. package/dist/index-dhjtMp5F.d.mts +1 -0
  385. package/dist/index-uY8Qbwfx.d.mts +1 -0
  386. package/dist/index.d.mts +1 -1
  387. package/dist/index2.d.mts +1 -1
  388. package/dist/index3.d.mts +3 -3
  389. package/dist/index4.d.mts +14 -11
  390. package/dist/{input-CzO-6_1V.d.mts → input-M7BEIewR.d.mts} +3 -3
  391. package/dist/inputFields.d.mts +11 -11
  392. package/dist/{intersperse-yd3oMrQl.mjs → intersperse-DQAyfeEw.mjs} +1 -1
  393. package/dist/{intersperse-yd3oMrQl.mjs.map → intersperse-DQAyfeEw.mjs.map} +1 -1
  394. package/dist/lib/GlobalStyles.mjs +1 -1
  395. package/dist/lib/HeadlessAriaButton.mjs +1 -1
  396. package/dist/lib/MiddleTruncatedText.mjs +1 -1
  397. package/dist/lib/PDSProvider.d.mts +1 -1
  398. package/dist/lib/PDSProvider.mjs +1 -1
  399. package/dist/lib/TruncatedText.d.mts +1 -1
  400. package/dist/lib/TruncatedText.mjs +2 -2
  401. package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
  402. package/dist/lib/TruncatedTextWithTooltip.mjs +2 -2
  403. package/dist/lib/date-filter/index.d.mts +3 -0
  404. package/dist/lib/date-filter/index.mjs +2 -0
  405. package/dist/lib/embeddedSurfaceProtocol.d.mts +13 -1
  406. package/dist/lib/embeddedSurfaceProtocol.mjs +32 -5
  407. package/dist/lib/embeddedSurfaceProtocol.mjs.map +1 -1
  408. package/dist/lib/message.d.mts +1 -1
  409. package/dist/lib/pseudoClass.d.mts +8 -8
  410. package/dist/lib/useEmbeddedSurface.d.mts +31 -3
  411. package/dist/lib/useEmbeddedSurface.mjs +118 -13
  412. package/dist/lib/useEmbeddedSurface.mjs.map +1 -1
  413. package/dist/lib/useResizablePanel.d.mts +49 -0
  414. package/dist/lib/useResizablePanel.mjs +75 -0
  415. package/dist/lib/useResizablePanel.mjs.map +1 -0
  416. package/dist/{message-Cu84fcqB.d.mts → message-DaiDXonE.d.mts} +1 -1
  417. package/dist/mixins/focus.d.mts +1 -1
  418. package/dist/mixins/focus.mjs +1 -1
  419. package/dist/mixins/hoverable.d.mts +2 -2
  420. package/dist/mixins/hoverable.mjs +2 -2
  421. package/dist/mixins/input.d.mts +1 -1
  422. package/dist/mixins/input.mjs +2 -2
  423. package/dist/mixins/menuItem.d.mts +2 -2
  424. package/dist/mixins/menuItem.mjs +1 -1
  425. package/dist/mixins/print/index.mjs +1 -1
  426. package/dist/mixins/text.d.mts +1 -1
  427. package/dist/mixins/text.mjs +1 -1
  428. package/dist/{operators-CmSqHnTH.d.mts → operators-BsSl7gPE.d.mts} +10 -3
  429. package/dist/operators.d.mts +2 -2
  430. package/dist/patterns/LayoutLoadingShimmer/index.mjs +6 -6
  431. package/dist/patterns/LayoutLoadingSpinner/index.d.mts +2 -0
  432. package/dist/patterns/LayoutLoadingSpinner/index.mjs +56 -0
  433. package/dist/patterns/LayoutLoadingSpinner/index.mjs.map +1 -0
  434. package/dist/patterns/PageLayout/index.mjs +1 -1
  435. package/dist/relative-date-label.d.mts +15 -0
  436. package/dist/styledComponentsInterop-8zScIQyC.mjs +33 -0
  437. package/dist/styledComponentsInterop-8zScIQyC.mjs.map +1 -0
  438. package/dist/{text-BaQdW8qa.d.mts → text-DjTGRUM1.d.mts} +1 -1
  439. package/dist/{theme-D9Y6NOzb.d.mts → theme-Biwx2eJZ.d.mts} +1 -1
  440. package/dist/theme.d.mts +1 -1
  441. package/dist/{types-NJtAxsU1.d.mts → types-B5VmRRMR.d.mts} +5 -3
  442. package/dist/types-Bsf1VsW6.d.mts +24 -0
  443. package/dist/{types-TV9nVfSe.d.mts → types-Cg3aXHUh2.d.mts} +1 -1
  444. package/dist/{types-DEh_pXgS.d.mts → types-Df0D37uh.d.mts} +3 -1
  445. package/dist/{types-C-TkDdkG.d.mts → types-V8UJX-rk.d.mts} +14 -2
  446. package/dist/types.d.mts +1 -1
  447. package/dist/types2.d.mts +2 -2
  448. package/dist/types3.d.mts +2 -2
  449. package/dist/types4.d.mts +2 -2
  450. package/dist/types5.d.mts +2 -0
  451. package/dist/url-state-ektb0HnB.d.mts +42 -0
  452. package/dist/url-state.d.mts +2 -0
  453. package/dist/useComboboxFooterAction.d.mts +1 -1
  454. package/dist/{useFilterStateV2-C4itmN4S.d.mts → useFilterStateV2-BB14vCC-.d.mts} +3 -3
  455. package/dist/useFilterStateV2.d.mts +1 -1
  456. package/dist/{useFormField-eftOPiXj.mjs → useFormField-Bz2iMPBO.mjs} +2 -2
  457. package/dist/{useFormField-eftOPiXj.mjs.map → useFormField-Bz2iMPBO.mjs.map} +1 -1
  458. package/dist/{useFormField-B2U4GOH4.d.mts → useFormField-CQo08dR4.d.mts} +2 -2
  459. package/dist/useFormField.d.mts +1 -1
  460. package/dist/{useFormGroup-BMukAMAd.mjs → useFormGroup-CaTiD_Yt.mjs} +1 -1
  461. package/dist/{useFormGroup-BMukAMAd.mjs.map → useFormGroup-CaTiD_Yt.mjs.map} +1 -1
  462. package/dist/{useTableBoxDragAndDrop-CpemHLhL.d.mts → useTableBoxDragAndDrop-B-Dev5D6.d.mts} +1 -1
  463. package/dist/useTableBoxDragAndDrop.d.mts +1 -1
  464. package/dist/useTruncation.d.mts +1 -1
  465. package/dist/{utilities-DnSIlR1i.d.mts → utilities-BHMNnJ8h.d.mts} +1 -1
  466. package/dist/utilities.d.mts +1 -1
  467. package/dist/utils/storybook.mjs +1 -1
  468. package/dist/utils/testing.d.mts +1 -1
  469. package/dist/utils/testing.mjs +1 -1
  470. package/dist/utils.d.mts +1 -1
  471. package/dist/utils2.d.mts +12 -1
  472. package/dist/{validation-B5IXsdkE.d.mts → validation-B22QjCrV.d.mts} +3 -3
  473. package/dist/validation.d.mts +1 -1
  474. package/dist/{value-control-resolver-BPlTeIX7.d.mts → value-control-resolver-qKTH1ErF.d.mts} +5 -3
  475. package/dist/value-control-resolver.d.mts +1 -1
  476. package/dist/variables/keyframes.mjs +1 -1
  477. package/llms.txt +6 -6
  478. package/package.json +14 -2
  479. package/skills/ui-authoring/COMPONENTS.md +71 -305
  480. package/skills/ui-authoring/PATTERNS.md +364 -0
  481. package/skills/ui-authoring/SKILL.md +15 -147
  482. package/skills/ui-authoring/TOKENS.md +400 -0
  483. package/dist/Combobox-xBrxiUAu.mjs.map +0 -1
  484. package/dist/DatePicker-BlnE2MBD.mjs.map +0 -1
  485. package/dist/FormField-B9P3BWvS.mjs.map +0 -1
  486. package/dist/HoverCopyableField-0Bzygbp9.mjs.map +0 -1
  487. package/dist/Select-D6MqSYVa.mjs.map +0 -1
  488. package/dist/TableControls-CZ9iu3ma.mjs.map +0 -1
  489. package/skills/ui-authoring/EXAMPLES.md +0 -370
  490. package/skills/ui-authoring/REFERENCE.md +0 -293
  491. /package/dist/{index-BMBcfD_R.d.mts → index-8SLBz2NH.d.mts} +0 -0
  492. /package/dist/{index-BOn0AAue.d.mts → index-BINnViIh.d.mts} +0 -0
  493. /package/dist/{index-BYd3Btr1.d.mts → index-B_BBnMou.d.mts} +0 -0
  494. /package/dist/{index-CKKoxA9V.d.mts → index-BcsXXrHq.d.mts} +0 -0
  495. /package/dist/{index-CNxS4Tlu.d.mts → index-Bt4QNofW.d.mts} +0 -0
  496. /package/dist/{index-CWB6exYm.d.mts → index-BwFl_eS0.d.mts} +0 -0
  497. /package/dist/{index-CsuikFeJ.d.mts → index-CDGG7lCB.d.mts} +0 -0
  498. /package/dist/{index-CtJuGxUp.d.mts → index-CMuRFTR3.d.mts} +0 -0
  499. /package/dist/{index-CzItj62a.d.mts → index-CX869wwk.d.mts} +0 -0
  500. /package/dist/{index-D5tSVhTd.d.mts → index-CliqZ9rj.d.mts} +0 -0
  501. /package/dist/{index-DGsJdI5l.d.mts → index-CuheJfs-.d.mts} +0 -0
  502. /package/dist/{index-DkrC-i1D.d.mts → index-DBGd4WeR.d.mts} +0 -0
  503. /package/dist/{index-Es5nKSSL.d.mts → index-DDdPqD_H.d.mts} +0 -0
  504. /package/dist/{index-FtE8MXJ_.d.mts → index-DMRtRo7y.d.mts} +0 -0
  505. /package/dist/{index-IE5cwTAE2.d.mts → index-Dflz2i1X.d.mts} +0 -0
  506. /package/dist/{index-Oio5ygqN.d.mts → index-DvmLVvRD.d.mts} +0 -0
  507. /package/dist/{index-ehD5GjMH.d.mts → index-Wc1llEvP.d.mts} +0 -0
@@ -0,0 +1,364 @@
1
+ # Patterns
2
+
3
+ Pre-built compositions of PDS components.
4
+
5
+ Which pattern to use, and for what. Patterns with a dedicated doc link to
6
+ `patterns/<Name>/<Name>.mdx`.
7
+
8
+
9
+ | Pattern | Use for |
10
+ | ------- | ------- |
11
+ | Forms | A settings or config screen where fields need labels, helper text, and errors. Unlabeled controls (search, toolbars) stay as `Input` |
12
+ | Stack / HStack | A heading above content, a cancel/save pair, a title next to an add button, or a wrapping row of tags |
13
+ | EmptyStates | A list, table, or card has no items yet and you want to invite adding one |
14
+ | Charting | Use `recharts` for all chart components. Always import colors from `ChartingColors` — never hardcode hex values. |
15
+ | Indicators | A record’s open, pending, completed, or failed state next to other content. An in-page notice the user shouldn’t miss (success, warning, error). Use `Toast` if it can auto-dismiss |
16
+ | PageLayout | Page shell |
17
+ | LayoutLoadingSpinner | Centered 120px loading ring that fills its container. Use as the loading state for a page or embedded app when no layout-specific shimmer exists. |
18
+ | LayoutLoadingShimmer | Filling space while content loads |
19
+ | [Panels](../../patterns/Panels/Panels.mdx) | Use `RightPanel` when the page should stay visible. Use `Modal` when the task needs full attention. Never a custom drawer. |
20
+
21
+
22
+ ## Forms
23
+
24
+ ### Form Configuration
25
+
26
+ ```tsx
27
+ import ConfigFormGroup from '@persona/design-system/components/ConfigFormGroup';
28
+ import { TextField, TextAreaField } from '@persona/design-system/components/FormField';
29
+
30
+ const [config, setConfig] = useState({ name: '', description: '', prompt: '' });
31
+
32
+ <ConfigFormGroup>
33
+ <TextField
34
+ label="Name"
35
+ value={config.name}
36
+ onChange={(e) => setConfig({ ...config, name: e.target.value })}
37
+ configField={true} // helperText becomes a tooltip
38
+ helperText="Unique identifier"
39
+ errorText={errors.name}
40
+ rightActions={<Button size="sm" variant="basic">Generate</Button>}
41
+ />
42
+ <TextAreaField
43
+ label="Prompt"
44
+ value={config.prompt}
45
+ onChange={(e) => setConfig({ ...config, prompt: e.target.value })}
46
+ configField={true}
47
+ warningText={warnings.prompt}
48
+ />
49
+ </ConfigFormGroup>
50
+ ```
51
+
52
+ - `configField={true}` → helper text becomes a tooltip instead of inline text
53
+ - `ConfigFormGroup` provides consistent 20px spacing between fields
54
+ - Use controlled inputs; clear `errorText` on change via `updateField` in form state hook
55
+
56
+ ### Form Pattern
57
+
58
+ **Always use** `ConfigFormGroup` **+** `TextField` **/** `TextAreaField` **— never hand-roll** `styled.input` **or**
59
+ `styled.label`**.** For a tooltip on a standalone label (not `helperText`), wrap the `Label` in
60
+ `TextUnderlineTooltip` — see Tooltip on Labels.
61
+
62
+ ```tsx
63
+ import ConfigFormGroup from '@persona/design-system/components/ConfigFormGroup';
64
+ import { TextField, TextAreaField } from '@persona/design-system/components/FormField';
65
+ import Select, { Option } from '@persona/design-system/components/Select';
66
+ import { Label } from '@persona/design-system/components/Text';
67
+ import Stack from '@persona/design-system/components/Stack';
68
+ import { Spacing } from '@persona/design-tokens';
69
+
70
+ <ConfigFormGroup>
71
+ <TextField
72
+ label="Name"
73
+ value={config.name}
74
+ onChange={(e) => setConfig({ ...config, name: e.target.value })}
75
+ configField={true}
76
+ helperText="Unique identifier"
77
+ errorText={errors.name}
78
+ rightActions={<Button size="sm" variant="basic">Generate</Button>}
79
+ />
80
+
81
+ <TextAreaField
82
+ label="Description"
83
+ value={config.description}
84
+ onChange={(e) => setConfig({ ...config, description: e.target.value })}
85
+ configField={true}
86
+ helperText="Short summary shown in listings."
87
+ warningText={warnings.prompt}
88
+ />
89
+
90
+ <Stack spacing={Spacing[2]}>
91
+ <Label size="sm" color="secondary">Enforcement</Label>
92
+ <Select
93
+ value={config.enforcement}
94
+ onChange={(e) => setConfig({ ...config, enforcement: e.target.value })}
95
+ >
96
+ <Option value="strict">Strict</Option>
97
+ <Option value="lenient">Lenient</Option>
98
+ <Option value="disabled">Disabled</Option>
99
+ </Select>
100
+ </Stack>
101
+ </ConfigFormGroup>
102
+ ```
103
+
104
+
105
+
106
+ ### TextField / TextAreaField props
107
+
108
+ - `label` — field label
109
+ - `value` / `onChange` — controlled input
110
+ - `helperText` — help text (tooltip if `configField={true}`)
111
+ - `errorText` — error message (red)
112
+ - `warningText` — warning message (yellow)
113
+ - `configField` — boolean, renders helper as tooltip
114
+ - `rightActions` — ReactNode for buttons/icons next to label
115
+ - `disabled` — boolean
116
+
117
+
118
+
119
+ ### Form state hook
120
+
121
+ ```tsx
122
+ const useFormState = (initialConfig) => {
123
+ const [config, setConfig] = useState(initialConfig);
124
+ const [errors, setErrors] = useState({});
125
+
126
+ const updateField = useCallback((field, value) => {
127
+ setConfig(prev => ({ ...prev, [field]: value }));
128
+ setErrors(prev => { const next = { ...prev }; delete next[field]; return next; });
129
+ }, []);
130
+
131
+ const validate = useCallback(() => {
132
+ const newErrors = {};
133
+ if (!config.name) newErrors.name = 'Required';
134
+ setErrors(newErrors);
135
+ return Object.keys(newErrors).length === 0;
136
+ }, [config]);
137
+
138
+ return { config, errors, updateField, validate };
139
+ };
140
+ ```
141
+
142
+
143
+
144
+ ### Form with footer buttons
145
+
146
+ ```tsx
147
+ import Stack from '@persona/design-system/components/Stack';
148
+ import { HStack } from '@persona/design-system/components/Stack';
149
+
150
+ <Stack spacing={Spacing[5]}>
151
+ <ConfigFormGroup>
152
+ <TextField label="Name" value={config.name} onChange={...} />
153
+ <TextAreaField label="Description" value={config.description} onChange={...} />
154
+ </ConfigFormGroup>
155
+ <HStack spacing={Spacing[3]} justify="flex-end">
156
+ <Button variant="basic" onClick={onCancel}>Cancel</Button>
157
+ <Button variant="primary" onClick={handleSave} isPending={isSaving}>Save</Button>
158
+ </HStack>
159
+ </Stack>
160
+ ```
161
+
162
+ ### Tooltip on Labels
163
+
164
+ **Always use `TextUnderlineTooltip` — never place an info icon next to a label.**
165
+
166
+ ```tsx
167
+ // ❌ Deprecated: icon trigger next to label
168
+ <HStack spacing={Spacing[1]} align='center'>
169
+ <Label size='sm' color='secondary'>Review Type</Label>
170
+ <Tooltip iconTrigger={<CircleHelpIcon />} side='right'>…</Tooltip>
171
+ </HStack>
172
+
173
+ // ✅ Correct: dashed underline on the label itself
174
+ import { TextUnderlineTooltip } from '@persona/design-system/components/Tooltip';
175
+
176
+ <TextUnderlineTooltip tooltip='Explanation text.' side='right'>
177
+ <Label size='sm' color='secondary'>Review Type</Label>
178
+ </TextUnderlineTooltip>
179
+ ```
180
+
181
+ `iconTrigger` is only appropriate for standalone icon buttons with no adjacent label text.
182
+
183
+
184
+
185
+ ## Layout
186
+
187
+
188
+
189
+ ### Card with collapsible sections
190
+
191
+ ```tsx
192
+ import { Card } from '@persona/design-system/components/CardV2';
193
+
194
+ <Card>
195
+ <Card.Section heading={{ title: 'Basic Settings' }} collapsible={true} defaultCollapsed={false}>
196
+ <ConfigFormGroup>
197
+ <TextField label="Name" value={...} onChange={...} />
198
+ </ConfigFormGroup>
199
+ </Card.Section>
200
+ <Card.Section heading={{ title: 'Advanced' }} collapsible={true}>
201
+ {/* Advanced fields */}
202
+ </Card.Section>
203
+ </Card>
204
+ ```
205
+
206
+ - `collapsible` / `defaultCollapsed` — section disclosure
207
+ - `heading` — `{ title }` section heading text
208
+ - `loading` — boolean
209
+ - `empty` — boolean
210
+
211
+
212
+
213
+ ## Indicators
214
+
215
+ ### Status Indicators
216
+
217
+ Use `StatusIndicator` for a record’s named lifecycle state. Use `Sticker` for tags.
218
+
219
+
220
+ | Business status | `status` |
221
+ | ---------------------------------- | -------------- |
222
+ | open / initiated / inactive | `open` |
223
+ | pending / processing | `pending` |
224
+ | completed | `completed` |
225
+ | active / reviewed | `active` |
226
+ | failed / declined / error | `failed` |
227
+ | needs review / flagged | `needs_review` |
228
+ | canceled | `canceled` |
229
+ | archived | `archived` |
230
+
231
+
232
+ ```tsx
233
+ import StatusIndicator from '@persona/design-system/components/StatusIndicator';
234
+
235
+ <StatusIndicator status="open">Open</StatusIndicator>
236
+ <StatusIndicator status="pending">Pending</StatusIndicator>
237
+ <StatusIndicator status="completed">Completed</StatusIndicator>
238
+ <StatusIndicator status="active">Active</StatusIndicator>
239
+ <StatusIndicator status="failed">Failed</StatusIndicator>
240
+ <StatusIndicator status="needs_review">Needs Review</StatusIndicator>
241
+ <StatusIndicator status="canceled">Canceled</StatusIndicator>
242
+ <StatusIndicator status="archived">Archived</StatusIndicator>
243
+
244
+ <StatusIndicator type="success" background="filled">Approved</StatusIndicator>
245
+ <StatusIndicator type="critical" background="none">Failed</StatusIndicator>
246
+ ```
247
+
248
+ - `status` — `"open"` | `"pending"` | `"completed"` | `"active"` | `"failed"` | `"needs_review"` | `"canceled"` | `"archived"`
249
+ - `type` — `"neutral"` | `"attention"` | `"warning"` | `"critical"` | `"success"` | `"feature"` | `"informational"` | `"miscellaneous"`. Overrides `status` when both are set.
250
+ - `background` — `"filled"` (default) | `"none"`. `"none"` always shows the icon.
251
+ - `leadingIcon` — optional 12px icon; overrides the preset icon (`null` hides it)
252
+ - `showIcon` — `{false}` hides the icon on `"filled"` only; ignored when `background="none"`
253
+ - `truncate` — ellipsis plus a title tooltip when the label overflows
254
+ - `preserveCase` — keep authored casing (labels are capitalized by default)
255
+
256
+
257
+
258
+ ### Banner
259
+
260
+ ```tsx
261
+ import Banner from '@persona/design-system/components/Banner';
262
+ import { CircleInfoIcon, CheckCircleIcon, AlertTriangleIcon, XCircleIcon } from '@persona/icons';
263
+
264
+ <Banner variant="informational"><CircleInfoIcon />This is an informational message.</Banner>
265
+ <Banner variant="success"><CheckCircleIcon />Changes saved successfully!</Banner>
266
+ <Banner variant="warning"><AlertTriangleIcon />Please review before submitting.</Banner>
267
+ <Banner variant="alert"><XCircleIcon />There was an error processing your request.</Banner>
268
+
269
+ <Banner variant="informational" onClose={() => setShowBanner(false)}>
270
+ <CircleInfoIcon />You can dismiss this message.
271
+ </Banner>
272
+ ```
273
+
274
+
275
+
276
+ ## Feedback
277
+
278
+
279
+
280
+ ### Spinner
281
+
282
+ ```tsx
283
+ import Spinner from '@persona/design-system/components/Spinner';
284
+
285
+ <Stack align="center" spacing={Spacing[3]}>
286
+ <Spinner size="md" srText="Loading policies..." />
287
+ </Stack>
288
+
289
+ <Button variant="primary" isPending>Saving...</Button>
290
+ ```
291
+
292
+ Prefer `Button isPending` for mutations. Prefer `Card.Section loading` when the content is inside a
293
+ card. Never `isLoading && <div>Loading...</div>`.
294
+
295
+
296
+
297
+ ## Empty states
298
+
299
+ For tables/lists when there is no data to show:
300
+
301
+ ```tsx
302
+ // Inside a Card section or table container
303
+ <Stack align="center" spacing={Spacing[3]} style={{ padding: Spacing[6] }}>
304
+ <Paragraph color="secondary">No policy rules yet.</Paragraph>
305
+ <Button variant="primary" size="sm" prefixIcon={<PlusIcon />}>Add Rule</Button>
306
+ </Stack>
307
+ ```
308
+
309
+ Message-only (no CTA):
310
+
311
+ ```tsx
312
+ <Stack align="center" spacing={Spacing[3]} style={{ padding: Spacing[6] }}>
313
+ <Paragraph color="secondary">No items yet.</Paragraph>
314
+ </Stack>
315
+ ```
316
+
317
+ For `ListBox`, pass `emptyText="No items"` prop directly.
318
+ For `Card.Section`, pass `empty={true}` to show the built-in empty state.
319
+
320
+
321
+
322
+ ## Charting
323
+
324
+ Use `recharts` for all chart components. Always import colors from `ChartingColors` — never
325
+ hardcode hex values.
326
+
327
+ ```tsx
328
+ import { ChartingColors } from '@persona/design-tokens';
329
+
330
+ // Sequential — 8 values; for ordered/numeric data (score bands, age ranges, percentages)
331
+ // Use index 0 for the largest value on light backgrounds.
332
+ ChartingColors.Sequential
333
+
334
+ // Categorical — 14 values; for distinct unordered categories (status, type, country)
335
+ // Light backgrounds only. If > 14 categories, bundle similar items or link to an export view.
336
+ ChartingColors.Categorical
337
+ ```
338
+
339
+ ### Palette selection guide
340
+
341
+ | Data type | Palette | Max series |
342
+ |-----------|---------|-----------|
343
+ | Numeric / ordered | `Sequential` | 8 |
344
+ | Categorical / unordered | `Categorical` | 14 |
345
+
346
+ ### Recharts pattern
347
+
348
+ ```tsx
349
+ import { ChartingColors } from '@persona/design-tokens';
350
+ import { Cell, Pie, PieChart } from 'recharts';
351
+
352
+ <PieChart>
353
+ <Pie data={data} dataKey="value">
354
+ {data.map((_, i) => (
355
+ <Cell key={i} fill={ChartingColors.Categorical[i % ChartingColors.Categorical.length]} />
356
+ ))}
357
+ </Pie>
358
+ </PieChart>
359
+ ```
360
+
361
+ **Anti-patterns:**
362
+ - Hardcoding hex values instead of `ChartingColors`
363
+ - Using `Categorical` on a dark background
364
+ - Using `Sequential` for unordered categories
@@ -3,7 +3,7 @@ name: ui-authoring
3
3
  description: Use when implementing UI, styling React components, working with design tokens, or making frontend changes, or when file paths include design-system/components/ or styled-components.
4
4
  metadata:
5
5
  library: '@persona/design-system'
6
- library_version: '0.3.0'
6
+ library_version: '0.4.0'
7
7
  ---
8
8
 
9
9
  # UI Authoring
@@ -14,67 +14,24 @@ metadata:
14
14
  import { Color, Spacing, Typography } from '@persona/design-tokens';
15
15
  ```
16
16
 
17
- - `Spacing[0–9]` = 0/4/8/12/16/24/32/40/48/56px; hardcode px with a comment for larger values.
17
+ - `Spacing[0–9]` = 0/4/8/12/16/24/32/40/48/56px. If you hardcode a value, use a multiple of 4 and comment what it's doing.
18
18
  - Always use complete `Typography` styles (e.g. `Typography.TextMedium`), never individual font properties.
19
- - See [REFERENCE.md](REFERENCE.md) for the full `Color` / `Spacing` / `Typography` catalog.
20
-
21
- ## Component-First — check this before creating any `styled` component
22
-
23
- | Need | Component | Import |
24
- |------|-----------|--------|
25
- | Flex column | `Stack` | `@persona/design-system/components/Stack` |
26
- | Flex row | `HStack` | `@persona/design-system/components/Stack` |
27
- | Heading text | `Heading` | `@persona/design-system/components/Text` |
28
- | Body text | `Paragraph` | `@persona/design-system/components/Text` |
29
- | Form label | `Label` | `@persona/design-system/components/Text` |
30
- | Button | `Button` | `@persona/design-system/components/Button` |
31
- | Form fields | `ConfigFormGroup` + `TextField`/`TextAreaField` | `@persona/design-system/components/ConfigFormGroup`, `FormField` |
32
- | Text input | `Input`, `TextArea` | `@persona/design-system/components/Input`, `TextArea` |
33
- | Dropdown | `Select` | `@persona/design-system/components/Select` |
34
- | Dynamic list | `ListBox` | `@persona/design-system/components/ListBox` |
35
- | Collapsible sections | `Card` + `Card.Section` | `@persona/design-system/components/CardV2` |
36
- | Modal | `Modal` | `@persona/design-system/components/Modal` |
37
- | Floating panel | `Popover` | `@persona/design-system/components/Popover` |
38
- | Status badge | `Sticker` | `@persona/design-system/components/Sticker` |
39
- | Count badge | `Badge` | `@persona/design-system/components/Badge` |
40
- | Tabs | `TabBar`, `Tab` | `@persona/design-system/components/TabBar` |
41
- | Spinner | `Spinner` | `@persona/design-system/components/Spinner` |
42
- | Alert / notification | `Banner` | `@persona/design-system/components/Banner` |
43
- | Standalone tooltip | `Tooltip` | `@persona/design-system/components/Tooltip` |
44
- | Tooltip on a label | `TextUnderlineTooltip` | `@persona/design-system/components/Tooltip` |
45
- | Page title bar | `PageHeader` | `@persona/design-system/components/PageHeader` |
46
- | Page shell | `Container`, `Section`, `Backdrop` | `@persona/design-system/patterns/PageLayout` |
47
- | Data table | `DataTable` | `@persona/design-system/components/DataTable` |
48
- | Table with loading/empty states | `TableLayout` + `Table` primitives | `@persona/design-system/components/Table` |
49
- | Editable / form table | `TableBox`, `TableBoxField` | `@persona/design-system/components/TableBox`, `FormField` |
50
-
51
- ## Tooltip on Labels
52
-
53
- **Always use `TextUnderlineTooltip` — never place an info icon next to a label.**
19
+ - See [TOKENS.md](TOKENS.md) for selection rules.
54
20
 
55
- ```tsx
56
- // ❌ Deprecated: icon trigger next to label
57
- <HStack spacing={Spacing[1]} align='center'>
58
- <Label size='sm' color='secondary'>Review Type</Label>
59
- <Tooltip iconTrigger={<HelpCircleIcon />} side='right'>…</Tooltip>
60
- </HStack>
61
-
62
- // ✅ Correct: dashed underline on the label itself
63
- import { TextUnderlineTooltip } from '@persona/design-system/components/Tooltip';
64
-
65
- <TextUnderlineTooltip tooltip='Explanation text.' side='right'>
66
- <Label size='sm' color='secondary'>Review Type</Label>
67
- </TextUnderlineTooltip>
68
- ```
21
+ ## PDS implementation guidelines
69
22
 
70
- `iconTrigger` is only appropriate for standalone icon buttons with no adjacent label text.
23
+ Start with [PATTERNS.md](PATTERNS.md) and use an existing pattern whenever one fits the use
24
+ case. If no pattern applies, review the component table in [COMPONENTS.md](COMPONENTS.md) to
25
+ select the appropriate component and import path. Only create a `styled` component or wrapper
26
+ when existing components cannot meet the need, and use tokens from [TOKENS.md](TOKENS.md) for
27
+ any custom styling.
71
28
 
72
29
  ## Table Guidelines
73
30
 
74
31
  Never hand-roll `<table>`, `<thead>`, `<th>`, or `<td>`. Pick the component by use case:
75
32
 
76
33
  - **`DataTable`** (`@persona/design-system/components/DataTable`) — data views with pagination, sorting, and server-side data.
77
- - **`TableBox`** (`@persona/design-system/components/TableBox`) / **`TableBoxField`** (`FormField`) — small, form-adjacent tables in config editors: inline editing, row add/delete, drag-drop reorder. See [COMPONENTS.md — Editable Table (TableBox)](COMPONENTS.md#editable-table-tablebox).
34
+ - **`TableBox`** (`@persona/design-system/components/TableBox`) / **`TableBoxField`** (`FormField`) — small, form-adjacent tables in config editors: inline editing, row add/delete, drag-drop reorder. See `TableBox.mdx`.
78
35
  - **`TableLayout`** (`@persona/design-system/components/Table`, named export `TableLayout`) — lower-level table shell with built-in loading and empty states; use it when composing rows manually from `Table` primitives (`TableRow`, `TableCell`, `TableHeaderCell`).
79
36
 
80
37
  ### DataTable
@@ -117,61 +74,16 @@ const ModalOverlay = styled.div`position: fixed; ...`; // use <Modal> instead
117
74
  // ✅ Use design system components
118
75
  <Heading size="sm">Title</Heading>
119
76
  <Stack spacing={Spacing[1]}><Label>Field</Label><Input /></Stack>
120
- <Modal isOpen={isOpen} onClose={onClose} title="..." footer={...}>...</Modal>
77
+ <Modal open={isOpen} onOpenChange={onOpenChange} title="..." footer={...}>...</Modal>
121
78
  ```
122
79
 
123
80
  - `Paragraph` defaults to `color="secondary"` (grey) — use `color="primary"` for black text.
124
81
  - Field values in detail/metadata layouts: do not add `weight="bold"` unless the design explicitly calls it out.
125
82
 
126
- ## Form Pattern
127
-
128
- ```tsx
129
- import ConfigFormGroup from '@persona/design-system/components/ConfigFormGroup';
130
- import { TextField, TextAreaField } from '@persona/design-system/components/FormField';
131
-
132
- <ConfigFormGroup>
133
- <TextField
134
- label="Name"
135
- value={config.name}
136
- onChange={(e) => setConfig({ ...config, name: e.target.value })}
137
- configField={true} // helperText becomes a tooltip
138
- helperText="Must be unique"
139
- errorText={errors.name}
140
- />
141
- <TextAreaField
142
- label="Description"
143
- value={config.description}
144
- onChange={(e) => setConfig({ ...config, description: e.target.value })}
145
- configField={true}
146
- />
147
- </ConfigFormGroup>
148
- ```
149
-
150
- `ConfigFormGroup` provides consistent 20px spacing between fields. See [COMPONENTS.md](COMPONENTS.md) for form state hook, `ListBox`, `TableBox`, `Card`, `Modal`, `Select` patterns and full props reference.
151
-
152
- ## Sticker Status Mapping
153
-
154
- | Business status | Sticker variant |
155
- |----------------|----------------|
156
- | approved / active / verified / success | `success` |
157
- | declined / failed / error | `danger` |
158
- | pending / in-review / flagged | `caution` |
159
- | inactive / archived / disabled | `basic` |
160
-
161
83
  ## Icon Sizes
162
84
 
163
85
  - `@persona/icons` — 16px default; use for buttons and standalone icons.
164
- - `@persona/icons/12px` — use for `Sticker` icons and inline text icons.
165
-
166
- ## Empty State
167
-
168
- ```tsx
169
- <Stack align="center" spacing={Spacing[3]} style={{ padding: Spacing[6] }}>
170
- <Paragraph color="secondary">No items yet.</Paragraph>
171
- </Stack>
172
- ```
173
-
174
- For tables/lists, also pass `emptyText` prop where supported (e.g. `ListBox`).
86
+ - `@persona/icons/12px` — use for `StatusIndicator` / `Sticker` icons and inline text icons.
175
87
 
176
88
  ## Loading States
177
89
 
@@ -212,52 +124,8 @@ export const WithErrors: StoryObj<typeof MyComponent> = { args: { errors: { name
212
124
 
213
125
  Add `ComponentName.stories.tsx` for every new component or visual variant.
214
126
 
215
- ## Data Visualization (Charts)
216
-
217
- Use `recharts` for all chart components. Always import colors from `ChartingColors` — never
218
- hardcode hex values.
219
-
220
- ```tsx
221
- import { ChartingColors } from '@persona/design-tokens';
222
-
223
- // Sequential — 8 values; for ordered/numeric data (score bands, age ranges, percentages)
224
- // Use index 0 for the largest value on light backgrounds.
225
- ChartingColors.Sequential
226
-
227
- // Categorical — 14 values; for distinct unordered categories (status, type, country)
228
- // Light backgrounds only. If > 14 categories, bundle similar items or link to an export view.
229
- ChartingColors.Categorical
230
- ```
231
-
232
- ### Palette selection guide
233
-
234
- | Data type | Palette | Max series |
235
- |-----------|---------|-----------|
236
- | Numeric / ordered | `Sequential` | 8 |
237
- | Categorical / unordered | `Categorical` | 14 |
238
-
239
- ### Recharts pattern
240
-
241
- ```tsx
242
- import { ChartingColors } from '@persona/design-tokens';
243
- import { Cell, Pie, PieChart } from 'recharts';
244
-
245
- <PieChart>
246
- <Pie data={data} dataKey="value">
247
- {data.map((_, i) => (
248
- <Cell key={i} fill={ChartingColors.Categorical[i % ChartingColors.Categorical.length]} />
249
- ))}
250
- </Pie>
251
- </PieChart>
252
- ```
253
-
254
- **Anti-patterns:**
255
- - Hardcoding hex values instead of `ChartingColors`
256
- - Using `Categorical` on a dark background
257
- - Using `Sequential` for unordered categories
258
-
259
127
  ## Resources
260
128
 
261
- - [EXAMPLES.md](EXAMPLES.md) — copy-paste patterns (Buttons, Forms, Modals, DataTable, TabBar, Tooltip, Spinner, Banner, Sticker, Stack, Text)
262
- - [REFERENCE.md](REFERENCE.md) — full `Color` / `Spacing` / `Typography` token catalog
263
- - [COMPONENTS.md](COMPONENTS.md) — props reference + patterns for `ConfigFormGroup`, `ListBox`, `TableBox`, `Card`, `Modal`, form state hook
129
+ - [TOKENS.md](TOKENS.md) — Color / Spacing / Typography selection and catalog, radius, charts
130
+ - [PATTERNS.md](PATTERNS.md) — forms, layout, panels, indicators, feedback, empty states
131
+ - [COMPONENTS.md](COMPONENTS.md) — which PDS component to use, and its import path; APIs live in each component's `.mdx`