@persona/design-system 0.10.10 → 0.10.12

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 (356) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/AdvancedFilterRuleRow.d.mts +5 -2
  3. package/dist/AdvancedFilterRulesPopover.d.mts +6 -2
  4. package/dist/ArrayValueControl.d.mts +1 -1
  5. package/dist/{Badge-BCdsVKuj.mjs → Badge-B2AJMf3d.mjs} +2 -2
  6. package/dist/{Badge-BCdsVKuj.mjs.map → Badge-B2AJMf3d.mjs.map} +1 -1
  7. package/dist/BooleanValueControl.d.mts +1 -1
  8. package/dist/{Breadcrumbs-CMf3Uvow.mjs → Breadcrumbs-DRs9eo1o.mjs} +5 -5
  9. package/dist/Breadcrumbs-DRs9eo1o.mjs.map +1 -0
  10. package/dist/{CardV2-CrV6eEQb.mjs → CardV2-DO-8COfu.mjs} +11 -8
  11. package/dist/CardV2-DO-8COfu.mjs.map +1 -0
  12. package/dist/ChartFrame.d.mts +61 -0
  13. package/dist/ChartLegend.d.mts +60 -0
  14. package/dist/ChartPopover.d.mts +155 -0
  15. package/dist/{Checkbox-Dr4LMKHV.mjs → Checkbox-BAh-wF_F.mjs} +5 -5
  16. package/dist/Checkbox-BAh-wF_F.mjs.map +1 -0
  17. package/dist/{CheckboxGroupField-Bpu2j6G2.d.mts → CheckboxGroupField-XSVAmESI.d.mts} +2 -2
  18. package/dist/CheckboxGroupField.d.mts +1 -1
  19. package/dist/ChoicesValueControl.d.mts +1 -1
  20. package/dist/{Combobox-Gb_j1dg6.mjs → Combobox-BNjYEAmv.mjs} +313 -138
  21. package/dist/Combobox-BNjYEAmv.mjs.map +1 -0
  22. package/dist/Combobox-DbcSss15.d.mts +12 -0
  23. package/dist/Combobox.d.mts +3 -3
  24. package/dist/{ComboboxBase-BPXqJHaQ.d.mts → ComboboxBase-CrFweFGi.d.mts} +61 -21
  25. package/dist/ComboboxBase.d.mts +2 -2
  26. package/dist/{ComboboxMultiSelect-BwkkSymj.d.mts → ComboboxMultiSelect-Cp5GBGQj.d.mts} +10 -6
  27. package/dist/ComboboxMultiSelect.d.mts +2 -2
  28. package/dist/{ComboboxSingleSelect-CdNNJNkp.d.mts → ComboboxSingleSelect-u7fK3Yvy.d.mts} +8 -6
  29. package/dist/ComboboxSingleSelect.d.mts +2 -2
  30. package/dist/{DataTable-BE9inUi-.d.mts → DataTable-C1mdfmQa.d.mts} +17 -7
  31. package/dist/{DataTable-CIZJ1vO8.mjs → DataTable-DdSY9mzT.mjs} +36 -23
  32. package/dist/DataTable-DdSY9mzT.mjs.map +1 -0
  33. package/dist/DataTable.d.mts +1 -1
  34. package/dist/{DatePicker-C9redLBr.mjs → DatePicker-DiilpYQg.mjs} +5 -5
  35. package/dist/{DatePicker-C9redLBr.mjs.map → DatePicker-DiilpYQg.mjs.map} +1 -1
  36. package/dist/DateRangeValueControl.d.mts +1 -1
  37. package/dist/DateValueControl.d.mts +1 -1
  38. package/dist/{DropdownButton-DpLG-cIj.mjs → DropdownButton-BxZ5hn0X.mjs} +3 -3
  39. package/dist/{DropdownButton-DpLG-cIj.mjs.map → DropdownButton-BxZ5hn0X.mjs.map} +1 -1
  40. package/dist/DropdownButton.d.mts +1 -1
  41. package/dist/{DropdownMenu-B6D4stkF.d.mts → DropdownMenu-CQR0U-zM.d.mts} +2 -2
  42. package/dist/{DropdownMenu-c8XK2Lr4.mjs → DropdownMenu-Ip75l4Th.mjs} +21 -2
  43. package/dist/DropdownMenu-Ip75l4Th.mjs.map +1 -0
  44. package/dist/DropdownMenu.d.mts +1 -1
  45. package/dist/{FieldRegistry-C2NVPhMO.d.mts → FieldRegistry-CJwGpUVK.d.mts} +2 -2
  46. package/dist/FieldRegistry.d.mts +1 -1
  47. package/dist/{FilterBar-BE_gBM0H.d.mts → FilterBar-CA4mDAXK.d.mts} +13 -5
  48. package/dist/FilterBar.d.mts +1 -1
  49. package/dist/FilterPickerMenu.d.mts +2 -2
  50. package/dist/FilterPill.d.mts +1 -1
  51. package/dist/FilterPopover.d.mts +1 -1
  52. package/dist/FloatValueControl.d.mts +3 -2
  53. package/dist/{FloatingToolbar-DLRaE0o7.mjs → FloatingToolbar-BA8Fqmrz.mjs} +35 -38
  54. package/dist/FloatingToolbar-BA8Fqmrz.mjs.map +1 -0
  55. package/dist/{FormControl-BztNXLn6.mjs → FormControl-BoKGiWdQ.mjs} +2 -2
  56. package/dist/{FormControl-BztNXLn6.mjs.map → FormControl-BoKGiWdQ.mjs.map} +1 -1
  57. package/dist/{FormField-Cf1VMvoa.mjs → FormField-yYJFkJ6R.mjs} +13 -13
  58. package/dist/{FormField-Cf1VMvoa.mjs.map → FormField-yYJFkJ6R.mjs.map} +1 -1
  59. package/dist/{HoverCopyableField-XHC_n9tp.mjs → HoverCopyableField-X2XfKTTh.mjs} +10 -5
  60. package/dist/HoverCopyableField-X2XfKTTh.mjs.map +1 -0
  61. package/dist/{IconButton-DxHB2g80.mjs → IconButton-Bj1fry_K.mjs} +4 -3
  62. package/dist/IconButton-Bj1fry_K.mjs.map +1 -0
  63. package/dist/IndexTableLayout.d.mts +11 -3
  64. package/dist/InlineCombobox.d.mts +1 -1
  65. package/dist/InlineInput.d.mts +1 -1
  66. package/dist/{Input-RHXujO9u.mjs → Input-DcbzPaax.mjs} +2 -2
  67. package/dist/{Input-RHXujO9u.mjs.map → Input-DcbzPaax.mjs.map} +1 -1
  68. package/dist/IntegerValueControl.d.mts +3 -2
  69. package/dist/{Link-D_kCyLYX.mjs → Link-B29ZMN6m.mjs} +3 -3
  70. package/dist/Link-B29ZMN6m.mjs.map +1 -0
  71. package/dist/{ListBox-BZp6exb8.mjs → ListBox-4rTgr3IJ.mjs} +6 -6
  72. package/dist/{ListBox-BZp6exb8.mjs.map → ListBox-4rTgr3IJ.mjs.map} +1 -1
  73. package/dist/{ListBox-DpFcM-dM.d.mts → ListBox-ZDaitaXR.d.mts} +2 -2
  74. package/dist/ListBox.d.mts +1 -1
  75. package/dist/{ListBoxField-DL6Zk8TU.d.mts → ListBoxField-CGvVWKyL.d.mts} +4 -4
  76. package/dist/ListBoxField.d.mts +1 -1
  77. package/dist/{LoadingShimmer-oPIv2ESr.mjs → LoadingShimmer-BVVdBeN-.mjs} +18 -20
  78. package/dist/LoadingShimmer-BVVdBeN-.mjs.map +1 -0
  79. package/dist/{LogicRow-BakOUtzx.d.mts → LogicRow-Bzp5o1sL.d.mts} +2 -2
  80. package/dist/LogicRow.d.mts +1 -1
  81. package/dist/{Menu-D6OrKCTC.d.mts → Menu-DviYNrFd.d.mts} +2 -2
  82. package/dist/Menu.d.mts +1 -1
  83. package/dist/{Modal-De5_bPJ_.mjs → Modal-CiPFqr0L.mjs} +52 -23
  84. package/dist/{Modal-De5_bPJ_.mjs.map → Modal-CiPFqr0L.mjs.map} +1 -1
  85. package/dist/{PageHeader-7_Hf6rHl.mjs → PageHeader-6KvtGED-.mjs} +2 -2
  86. package/dist/{PageHeader-7_Hf6rHl.mjs.map → PageHeader-6KvtGED-.mjs.map} +1 -1
  87. package/dist/{PageLayout-DjtGrvJa.mjs → PageLayout-CPiVnS_r.mjs} +3 -1
  88. package/dist/PageLayout-CPiVnS_r.mjs.map +1 -0
  89. package/dist/{Pagination-DMH2IaV0.mjs → Pagination-CqFvnlXc.mjs} +4 -4
  90. package/dist/{Pagination-DMH2IaV0.mjs.map → Pagination-CqFvnlXc.mjs.map} +1 -1
  91. package/dist/{Pii-24D_nSRQ.mjs → Pii-jSYND7Cn.mjs} +2 -2
  92. package/dist/{Pii-24D_nSRQ.mjs.map → Pii-jSYND7Cn.mjs.map} +1 -1
  93. package/dist/{PillShell-B7Bm-dsE.d.mts → PillShell-Bkyu5FXB.d.mts} +2 -2
  94. package/dist/PillShell.d.mts +1 -1
  95. package/dist/{Popover-DordjYNM.mjs → Popover-CVX-dfYb.mjs} +48 -18
  96. package/dist/Popover-CVX-dfYb.mjs.map +1 -0
  97. package/dist/{Radio-BlEtetrr.mjs → Radio-B1H_S-Qj.mjs} +2 -2
  98. package/dist/Radio-B1H_S-Qj.mjs.map +1 -0
  99. package/dist/{RadioGroup-CMrXmmn4.mjs → RadioGroup-7hdcVhsp.mjs} +2 -2
  100. package/dist/{RadioGroup-CMrXmmn4.mjs.map → RadioGroup-7hdcVhsp.mjs.map} +1 -1
  101. package/dist/RuleEditorFields.d.mts +2 -2
  102. package/dist/RulesPill.d.mts +1 -1
  103. package/dist/{SegmentedControl-D_DA-MU1.mjs → SegmentedControl-BNOJ1FYQ.mjs} +5 -2
  104. package/dist/SegmentedControl-BNOJ1FYQ.mjs.map +1 -0
  105. package/dist/{Select-DOlw_LPR.mjs → Select-DbWEgH5c.mjs} +5 -3
  106. package/dist/Select-DbWEgH5c.mjs.map +1 -0
  107. package/dist/{Select-CR9TjFfo.d.mts → Select-DsVeAyZy.d.mts} +2 -2
  108. package/dist/Select.d.mts +1 -1
  109. package/dist/SmartTextInputField.d.mts +2 -2
  110. package/dist/{Spinner-CXb-KUs1.mjs → Spinner-k9ZiOdTr.mjs} +1 -1
  111. package/dist/{Spinner-CXb-KUs1.mjs.map → Spinner-k9ZiOdTr.mjs.map} +1 -1
  112. package/dist/{Sticker-C1_6I08u.mjs → Sticker-4VdGEFAu.mjs} +2 -2
  113. package/dist/{Sticker-C1_6I08u.mjs.map → Sticker-4VdGEFAu.mjs.map} +1 -1
  114. package/dist/StringValueControl.d.mts +2 -1
  115. package/dist/{TabBar-BCFO38E0.mjs → TabBar-d4sdknti.mjs} +5 -5
  116. package/dist/TabBar-d4sdknti.mjs.map +1 -0
  117. package/dist/{Table-DPi4Dt5H.mjs → Table-9mNn8Q-d.mjs} +14 -6
  118. package/dist/Table-9mNn8Q-d.mjs.map +1 -0
  119. package/dist/{TableBox-DNQsgQ8x.mjs → TableBox-D9NA-s9l.mjs} +16 -12
  120. package/dist/TableBox-D9NA-s9l.mjs.map +1 -0
  121. package/dist/TableBox.d.mts +1 -1
  122. package/dist/{TableBoxCell-CsRt_5gP.d.mts → TableBoxCell-CQOL30et.d.mts} +4 -4
  123. package/dist/TableBoxCell.d.mts +1 -1
  124. package/dist/{TableBoxField-Db0Vjo6Z.d.mts → TableBoxField-z0GIFeQw.d.mts} +5 -5
  125. package/dist/TableBoxField.d.mts +1 -1
  126. package/dist/{TableBoxRow-exMlZyc4.d.mts → TableBoxRow-tb9-KMr9.d.mts} +2 -2
  127. package/dist/TableBoxRow.d.mts +1 -1
  128. package/dist/{TableBoxRowActions-UO9YN34k.d.mts → TableBoxRowActions-BZwulsFP.d.mts} +2 -2
  129. package/dist/TableBoxRowActions.d.mts +1 -1
  130. package/dist/{TableControls-BrP_BqnF.mjs → TableControls-BXykbUBf.mjs} +126 -40
  131. package/dist/TableControls-BXykbUBf.mjs.map +1 -0
  132. package/dist/{TableControls-Clo_0Mty.d.mts → TableControls-DE6eHq8h.d.mts} +4 -4
  133. package/dist/TableControls.d.mts +1 -1
  134. package/dist/{TableControlsContext-BNd6z9mD.d.mts → TableControlsContext-C2_2EuMh.d.mts} +2 -2
  135. package/dist/TableControlsContext.d.mts +1 -1
  136. package/dist/{TableViewConfigurationDropdown-Cp7ausV_.d.mts → TableViewConfigurationDropdown-DE9HFXYY.d.mts} +2 -2
  137. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  138. package/dist/{TechnicalSticker-Cq5jzYKQ.mjs → TechnicalSticker-DtV7Gawf.mjs} +5 -3
  139. package/dist/TechnicalSticker-DtV7Gawf.mjs.map +1 -0
  140. package/dist/{TextArea-Dro-HH8O.mjs → TextArea-CQ1YNi2b.mjs} +4 -5
  141. package/dist/TextArea-CQ1YNi2b.mjs.map +1 -0
  142. package/dist/{Toggle-D9MzTIZs.mjs → Toggle-CzHoIR-n.mjs} +8 -4
  143. package/dist/Toggle-CzHoIR-n.mjs.map +1 -0
  144. package/dist/{Tooltip-YViXzMdm.mjs → Tooltip-CVBxc1yf.mjs} +17 -4
  145. package/dist/Tooltip-CVBxc1yf.mjs.map +1 -0
  146. package/dist/chartColors.d.mts +92 -0
  147. package/dist/chartFrameLayout.d.mts +46 -0
  148. package/dist/{clientFilterUtils-CGHYF5NE.d.mts → clientFilterUtils-2TBUC31K.d.mts} +2 -2
  149. package/dist/clientFilterUtils.d.mts +1 -1
  150. package/dist/components/Accordion/index.mjs +22 -13
  151. package/dist/components/Accordion/index.mjs.map +1 -1
  152. package/dist/components/Attribute/index.mjs +6 -4
  153. package/dist/components/Attribute/index.mjs.map +1 -1
  154. package/dist/components/Badge/index.mjs +1 -1
  155. package/dist/components/Banner/index.mjs +1 -1
  156. package/dist/components/BottomPanel/index.mjs +7 -5
  157. package/dist/components/BottomPanel/index.mjs.map +1 -1
  158. package/dist/components/Breadcrumbs/index.mjs +1 -1
  159. package/dist/components/Button/index.mjs +1 -1
  160. package/dist/components/ButtonGroup/index.mjs +1 -1
  161. package/dist/components/CardV2/index.mjs +1 -1
  162. package/dist/components/Chart/index.d.mts +9 -0
  163. package/dist/components/Chart/index.mjs +680 -0
  164. package/dist/components/Chart/index.mjs.map +1 -0
  165. package/dist/components/Checkbox/index.mjs +1 -1
  166. package/dist/components/CodeHighlight/index.mjs +1 -1
  167. package/dist/components/Combobox/index.d.mts +5 -3
  168. package/dist/components/Combobox/index.mjs +1 -1
  169. package/dist/components/DataTable/TableControls/index.d.mts +19 -19
  170. package/dist/components/DataTable/TableControls/index.mjs +2 -2
  171. package/dist/components/DataTable/index.d.mts +5 -5
  172. package/dist/components/DataTable/index.mjs +1 -1
  173. package/dist/components/DataTable/types.d.mts +1 -1
  174. package/dist/components/DatePicker/index.mjs +1 -1
  175. package/dist/components/DropdownButton/index.mjs +1 -1
  176. package/dist/components/DropdownMenu/index.d.mts +1 -1
  177. package/dist/components/DropdownMenu/index.mjs +1 -1
  178. package/dist/components/FloatingPanel/index.mjs +16 -14
  179. package/dist/components/FloatingPanel/index.mjs.map +1 -1
  180. package/dist/components/FloatingToolbar/index.mjs +1 -1
  181. package/dist/components/FormControl/index.mjs +1 -1
  182. package/dist/components/FormField/index.d.mts +4 -4
  183. package/dist/components/FormField/index.mjs +1 -1
  184. package/dist/components/HoverCopyableField/index.mjs +1 -1
  185. package/dist/components/ImageTile/index.mjs +7 -7
  186. package/dist/components/ImageTile/index.mjs.map +1 -1
  187. package/dist/components/Input/index.mjs +1 -1
  188. package/dist/components/Link/index.mjs +1 -1
  189. package/dist/components/ListBox/index.d.mts +3 -3
  190. package/dist/components/ListBox/index.mjs +1 -1
  191. package/dist/components/LoadingShimmer/index.mjs +1 -1
  192. package/dist/components/MaskedInput/index.mjs +1 -1
  193. package/dist/components/Menu/index.d.mts +1 -1
  194. package/dist/components/Modal/index.mjs +1 -1
  195. package/dist/components/PageHeader/index.mjs +1 -1
  196. package/dist/components/Pagination/index.mjs +1 -1
  197. package/dist/components/Pii/index.mjs +1 -1
  198. package/dist/components/Popover/index.mjs +1 -1
  199. package/dist/components/ProgressBar/index.mjs +20 -3
  200. package/dist/components/ProgressBar/index.mjs.map +1 -1
  201. package/dist/components/Radio/index.mjs +1 -1
  202. package/dist/components/RadioGroup/index.mjs +1 -1
  203. package/dist/components/RichTextEditor/index.mjs +5 -5
  204. package/dist/components/RightPanel/index.mjs +28 -13
  205. package/dist/components/RightPanel/index.mjs.map +1 -1
  206. package/dist/components/SegmentedControl/index.mjs +1 -1
  207. package/dist/components/Select/index.d.mts +1 -1
  208. package/dist/components/Select/index.mjs +1 -1
  209. package/dist/components/SelectionCard/index.mjs +2 -2
  210. package/dist/components/Slider/index.mjs +3 -2
  211. package/dist/components/Slider/index.mjs.map +1 -1
  212. package/dist/components/SmartTextInput/index.mjs +9 -78
  213. package/dist/components/SmartTextInput/index.mjs.map +1 -1
  214. package/dist/{safe-parse.d.mts → components/SmartTextInput/parser/safe-parse.d.mts} +1 -1
  215. package/dist/components/SmartTextInput/parser/safe-parse.mjs +30 -0
  216. package/dist/components/SmartTextInput/parser/safe-parse.mjs.map +1 -0
  217. package/dist/{tree.d.mts → components/SmartTextInput/parser/tree.d.mts} +1 -1
  218. package/dist/components/SmartTextInput/parser/tree.mjs +42 -0
  219. package/dist/components/SmartTextInput/parser/tree.mjs.map +1 -0
  220. package/dist/components/Spinner/index.mjs +1 -1
  221. package/dist/components/Sticker/index.mjs +1 -1
  222. package/dist/components/SwatchPicker/index.mjs +2 -1
  223. package/dist/components/SwatchPicker/index.mjs.map +1 -1
  224. package/dist/components/TabBar/index.mjs +1 -1
  225. package/dist/components/Table/index.mjs +1 -1
  226. package/dist/components/TableBox/index.d.mts +1 -1
  227. package/dist/components/TableBox/index.mjs +1 -1
  228. package/dist/components/TechnicalSticker/index.mjs +1 -1
  229. package/dist/components/TextArea/index.mjs +1 -1
  230. package/dist/components/Tile/index.mjs +2 -2
  231. package/dist/components/Toast/index.mjs +16 -10
  232. package/dist/components/Toast/index.mjs.map +1 -1
  233. package/dist/components/Toggle/index.mjs +1 -1
  234. package/dist/components/Tooltip/index.mjs +1 -1
  235. package/dist/components/VersionHistory/index.mjs +5 -5
  236. package/dist/compound-expression.d.mts +1 -1
  237. package/dist/{date-range-rule-value-ASr06ClE.d.mts → date-range-rule-value-DyLlMtjr.d.mts} +2 -2
  238. package/dist/date-range-rule-value.d.mts +1 -1
  239. package/dist/display.d.mts +1 -1
  240. package/dist/duration-token.d.mts +11 -0
  241. package/dist/exit-motion.d.mts +7 -0
  242. package/dist/fieldPickerOptions.d.mts +2 -2
  243. package/dist/{filter-size-context-CmFyIPCm.d.mts → filter-size-context-DVnjmuhk.d.mts} +2 -2
  244. package/dist/filter-size-context.d.mts +1 -1
  245. package/dist/{filters-DTBc0mE7.d.mts → filters-DW7pqWv3.d.mts} +2 -2
  246. package/dist/filters.d.mts +1 -1
  247. package/dist/{helpers-CBJ2AqGZ.d.mts → helpers-BTD2kXLs.d.mts} +2 -2
  248. package/dist/helpers.d.mts +1 -1
  249. package/dist/{index-OkdnW-u5.d.mts → index-B4tE0RxY.d.mts} +3 -3
  250. package/dist/{index-kIon1vPp.d.mts → index-DTM_t7OG.d.mts} +2 -2
  251. package/dist/index4.d.mts +3 -3
  252. package/dist/index5.d.mts +1 -1
  253. package/dist/index6.d.mts +14 -14
  254. package/dist/{inputFields-DpHeZiFX.d.mts → inputFields-DnBb3NhK.d.mts} +4 -4
  255. package/dist/inputFields.d.mts +1 -1
  256. package/dist/lib/TruncatedTextWithTooltip.mjs +1 -1
  257. package/dist/lib/useCloseFocus.d.mts +45 -0
  258. package/dist/lib/useCloseFocus.mjs +123 -0
  259. package/dist/lib/useCloseFocus.mjs.map +1 -0
  260. package/dist/lib/useModalInsetRight.d.mts +4 -3
  261. package/dist/lib/useModalInsetRight.mjs +7 -5
  262. package/dist/lib/useModalInsetRight.mjs.map +1 -1
  263. package/dist/lint/THIRD_PARTY_NOTICES.md +30 -0
  264. package/dist/lint/index.mjs +696 -11
  265. package/dist/lint/index.mjs.map +1 -1
  266. package/dist/lint/recommended.json +7 -1
  267. package/dist/mixins/hoverable.mjs +1 -1
  268. package/dist/mixins/hoverable.mjs.map +1 -1
  269. package/dist/mixins/input.mjs +1 -0
  270. package/dist/mixins/input.mjs.map +1 -1
  271. package/dist/mixins/menuItem.mjs +2 -0
  272. package/dist/mixins/menuItem.mjs.map +1 -1
  273. package/dist/mixins/motion.d.mts +28 -0
  274. package/dist/mixins/motion.mjs +66 -0
  275. package/dist/mixins/motion.mjs.map +1 -0
  276. package/dist/motion-origin.d.mts +7 -0
  277. package/dist/motion.d.mts +63 -0
  278. package/dist/no-layout-motion.d.mts +7 -0
  279. package/dist/no-transition-all.d.mts +7 -0
  280. package/dist/{operators-BHxKZcpD.d.mts → operators-B8_k3r69.d.mts} +10 -3
  281. package/dist/operators.d.mts +2 -2
  282. package/dist/overlay-motion.d.mts +7 -0
  283. package/dist/patterns/CardGrouping/index.mjs +6 -6
  284. package/dist/patterns/CardGrouping/index.mjs.map +1 -1
  285. package/dist/patterns/IndexTableLayout/index.mjs +23 -16
  286. package/dist/patterns/IndexTableLayout/index.mjs.map +1 -1
  287. package/dist/patterns/LayoutLoadingShimmer/index.mjs +4 -4
  288. package/dist/patterns/LayoutLoadingSpinner/index.mjs +3 -1
  289. package/dist/patterns/LayoutLoadingSpinner/index.mjs.map +1 -1
  290. package/dist/patterns/PageLayout/index.mjs +1 -1
  291. package/dist/patterns/WizardModal/index.mjs +2 -2
  292. package/dist/relative-date-label.d.mts +1 -1
  293. package/dist/{types-DLnCkvTt.d.mts → types-BJqmRXFV.d.mts} +15 -1
  294. package/dist/{types-CqcbWyUY.d.mts → types-BOsCi-kZ.d.mts} +8 -2
  295. package/dist/{types-BiqzeNsa.d.mts → types-Dws2XDz2.d.mts} +2 -2
  296. package/dist/{types-BEdERA4v.d.mts → types-NO2GRlM-.d.mts} +2 -2
  297. package/dist/types4.d.mts +1 -1
  298. package/dist/types5.d.mts +1 -1
  299. package/dist/types6.d.mts +1 -1
  300. package/dist/{url-state-CXUuK3_r.d.mts → url-state-CXPmXzIZ.d.mts} +2 -2
  301. package/dist/url-state.d.mts +1 -1
  302. package/dist/useChartColors.d.mts +30 -0
  303. package/dist/useChartSeriesVisibility.d.mts +22 -0
  304. package/dist/useChartStyles.d.mts +108 -0
  305. package/dist/useColumnConfiguration.d.mts +2 -2
  306. package/dist/useComboboxFooterAction.d.mts +1 -1
  307. package/dist/{useFilterStateV2-DBpbxAEC.d.mts → useFilterStateV2-DiTS9DTg.d.mts} +3 -3
  308. package/dist/useFilterStateV2.d.mts +1 -1
  309. package/dist/{useTableColumns-Xd14vx_h.d.mts → useTableColumns-tITjHasE.d.mts} +2 -2
  310. package/dist/useTableColumns.d.mts +1 -1
  311. package/dist/useTruncation.d.mts +1 -1
  312. package/dist/useValueControlError.d.mts +26 -0
  313. package/dist/utils.d.mts +1 -1
  314. package/dist/{validation-Tgg3AhuP.d.mts → validation-BDQdQ1cY.d.mts} +3 -3
  315. package/dist/validation.d.mts +1 -1
  316. package/dist/{value-control-resolver-XQbGCdsP.d.mts → value-control-resolver-BFJZEWDn.d.mts} +9 -3
  317. package/dist/value-control-resolver.d.mts +1 -1
  318. package/dist/value-labels.d.mts +12 -0
  319. package/dist/variables/keyframes.d.mts +2 -1
  320. package/dist/variables/keyframes.mjs +9 -1
  321. package/dist/variables/keyframes.mjs.map +1 -1
  322. package/dist/variables/transitions.d.mts +31 -1
  323. package/dist/variables/transitions.mjs +50 -1
  324. package/dist/variables/transitions.mjs.map +1 -1
  325. package/llms.txt +2 -1
  326. package/package.json +20 -4
  327. package/skills/new-screen/SKILL.md +33 -0
  328. package/skills/ui-authoring/COMPONENTS.md +19 -1
  329. package/skills/ui-authoring/PATTERNS.md +57 -36
  330. package/skills/ui-authoring/STANDARD.md +78 -4
  331. package/skills/ui-authoring/TOKENS.md +27 -24
  332. package/dist/Breadcrumbs-CMf3Uvow.mjs.map +0 -1
  333. package/dist/CardV2-CrV6eEQb.mjs.map +0 -1
  334. package/dist/Checkbox-Dr4LMKHV.mjs.map +0 -1
  335. package/dist/Combobox-CIKqTYZt.d.mts +0 -11
  336. package/dist/Combobox-Gb_j1dg6.mjs.map +0 -1
  337. package/dist/DataTable-CIZJ1vO8.mjs.map +0 -1
  338. package/dist/DropdownMenu-c8XK2Lr4.mjs.map +0 -1
  339. package/dist/FloatingToolbar-DLRaE0o7.mjs.map +0 -1
  340. package/dist/HoverCopyableField-XHC_n9tp.mjs.map +0 -1
  341. package/dist/IconButton-DxHB2g80.mjs.map +0 -1
  342. package/dist/Link-D_kCyLYX.mjs.map +0 -1
  343. package/dist/LoadingShimmer-oPIv2ESr.mjs.map +0 -1
  344. package/dist/PageLayout-DjtGrvJa.mjs.map +0 -1
  345. package/dist/Popover-DordjYNM.mjs.map +0 -1
  346. package/dist/Radio-BlEtetrr.mjs.map +0 -1
  347. package/dist/SegmentedControl-D_DA-MU1.mjs.map +0 -1
  348. package/dist/Select-DOlw_LPR.mjs.map +0 -1
  349. package/dist/TabBar-BCFO38E0.mjs.map +0 -1
  350. package/dist/Table-DPi4Dt5H.mjs.map +0 -1
  351. package/dist/TableBox-DNQsgQ8x.mjs.map +0 -1
  352. package/dist/TableControls-BrP_BqnF.mjs.map +0 -1
  353. package/dist/TechnicalSticker-Cq5jzYKQ.mjs.map +0 -1
  354. package/dist/TextArea-Dro-HH8O.mjs.map +0 -1
  355. package/dist/Toggle-D9MzTIZs.mjs.map +0 -1
  356. package/dist/Tooltip-YViXzMdm.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { a as FilterConditionOperator, c as FilterFieldType, d as FilterRuleValue, l as FilterOperator, o as FilterField, r as DateRangeFilterValue, u as FilterRule } from "./types-DLnCkvTt.mjs";
1
+ import { a as FilterConditionOperator, c as FilterFieldType, d as FilterRuleValue, l as FilterOperator, o as FilterField, r as DateRangeFilterValue, u as FilterRule } from "./types-BJqmRXFV.mjs";
2
2
  import { i as CommonStrings } from "./strings-DQZIO-n7.mjs";
3
3
  //#region src/components/DataTable/TableControls/FiltersV2/operators.d.ts
4
4
  type OperatorLabelKey = 'operatorIs' | 'operatorIsNot' | 'operatorContains' | 'operatorDoesNotContain' | 'operatorIsEmpty' | 'operatorIsNotEmpty' | 'operatorIsTrue' | 'operatorIsFalse' | 'operatorBefore' | 'operatorAfter' | 'operatorBetween' | 'operatorIsAnyOf' | 'operatorIsNoneOf' | 'operatorGreaterThan' | 'operatorGreaterThanOrEqual' | 'operatorLessThan' | 'operatorLessThanOrEqual' | 'operatorIsEqualTo' | 'operatorIsGreaterThan' | 'operatorIsLessThan';
@@ -46,6 +46,13 @@ declare function getOperatorsForField(field: Pick<FilterField, 'type' | 'allowed
46
46
  declare function getDefaultOperatorForType(type: FilterFieldType): FilterOperator;
47
47
  declare function getConditionOperator(field: Pick<FilterField, 'condition'> | undefined, operator: FilterOperator): FilterConditionOperator | undefined;
48
48
  declare function isValuelessOperator(operator: FilterOperator, field?: Pick<FilterField, 'condition'>): boolean;
49
+ /**
50
+ * The error message a condition operator's `validate` returns for `value`, or
51
+ * `undefined` when the value is accepted, empty, or the operator has no
52
+ * validator. Value controls show it below the input; a rule with a message
53
+ * is incomplete (see `hasCompleteConditionValue`).
54
+ */
55
+ declare function getConditionValueError(field: Pick<FilterField, 'condition'> | undefined, operator: FilterOperator, value: FilterRuleValue): string | undefined;
49
56
  declare function hasCompleteConditionValue(rule: FilterRule, field: FilterField): boolean;
50
57
  /**
51
58
  * Whether a rule's value is a date range: a range operator, or a field that is
@@ -108,5 +115,5 @@ declare function emptyValueForRule(field: Pick<FilterField, 'type' | 'condition'
108
115
  */
109
116
  declare function reconcileValueForOperator(field: Pick<FilterField, 'type' | 'condition'>, nextOperator: FilterOperator, previousOperator: FilterOperator, value: FilterRuleValue): FilterRuleValue;
110
117
  //#endregion
111
- export { isNumericComparisonOperator as _, emptyValueForRule as a, reconcileValueForOperator as b, getDefaultOperatorForType as c, getOperatorsForType as d, hasCompleteConditionValue as f, isNumericComparison as g, isMinutePrecisionDate as h, emptyValueForFieldType as i, getOperatorLabel as l, isCompleteNumericComparisonValue as m, NumericComparisonOperator as n, fieldHasMultipleOperators as o, isCompleteDateRange as p, carriesDateRange as r, getConditionOperator as s, NUMERIC_COMPARISON_OPERATORS as t, getOperatorsForField as u, isRangeOperator as v, withValue as x, isValuelessOperator as y };
112
- //# sourceMappingURL=operators-BHxKZcpD.d.mts.map
118
+ export { withValue as S, isNumericComparison as _, emptyValueForRule as a, isValuelessOperator as b, getConditionValueError as c, getOperatorsForField as d, getOperatorsForType as f, isMinutePrecisionDate as g, isCompleteNumericComparisonValue as h, emptyValueForFieldType as i, getDefaultOperatorForType as l, isCompleteDateRange as m, NumericComparisonOperator as n, fieldHasMultipleOperators as o, hasCompleteConditionValue as p, carriesDateRange as r, getConditionOperator as s, NUMERIC_COMPARISON_OPERATORS as t, getOperatorLabel as u, isNumericComparisonOperator as v, reconcileValueForOperator as x, isRangeOperator as y };
119
+ //# sourceMappingURL=operators-B8_k3r69.d.mts.map
@@ -1,2 +1,2 @@
1
- import { _ as isNumericComparisonOperator, a as emptyValueForRule, b as reconcileValueForOperator, c as getDefaultOperatorForType, d as getOperatorsForType, f as hasCompleteConditionValue, g as isNumericComparison, h as isMinutePrecisionDate, i as emptyValueForFieldType, l as getOperatorLabel, m as isCompleteNumericComparisonValue, n as NumericComparisonOperator, o as fieldHasMultipleOperators, p as isCompleteDateRange, r as carriesDateRange, s as getConditionOperator, t as NUMERIC_COMPARISON_OPERATORS, u as getOperatorsForField, v as isRangeOperator, x as withValue, y as isValuelessOperator } from "./operators-BHxKZcpD.mjs";
2
- export { NUMERIC_COMPARISON_OPERATORS, NumericComparisonOperator, carriesDateRange, emptyValueForFieldType, emptyValueForRule, fieldHasMultipleOperators, getConditionOperator, getDefaultOperatorForType, getOperatorLabel, getOperatorsForField, getOperatorsForType, hasCompleteConditionValue, isCompleteDateRange, isCompleteNumericComparisonValue, isMinutePrecisionDate, isNumericComparison, isNumericComparisonOperator, isRangeOperator, isValuelessOperator, reconcileValueForOperator, withValue };
1
+ import { S as withValue, _ as isNumericComparison, a as emptyValueForRule, b as isValuelessOperator, c as getConditionValueError, d as getOperatorsForField, f as getOperatorsForType, g as isMinutePrecisionDate, h as isCompleteNumericComparisonValue, i as emptyValueForFieldType, l as getDefaultOperatorForType, m as isCompleteDateRange, n as NumericComparisonOperator, o as fieldHasMultipleOperators, p as hasCompleteConditionValue, r as carriesDateRange, s as getConditionOperator, t as NUMERIC_COMPARISON_OPERATORS, u as getOperatorLabel, v as isNumericComparisonOperator, x as reconcileValueForOperator, y as isRangeOperator } from "./operators-B8_k3r69.mjs";
2
+ export { NUMERIC_COMPARISON_OPERATORS, NumericComparisonOperator, carriesDateRange, emptyValueForFieldType, emptyValueForRule, fieldHasMultipleOperators, getConditionOperator, getConditionValueError, getDefaultOperatorForType, getOperatorLabel, getOperatorsForField, getOperatorsForType, hasCompleteConditionValue, isCompleteDateRange, isCompleteNumericComparisonValue, isMinutePrecisionDate, isNumericComparison, isNumericComparisonOperator, isRangeOperator, isValuelessOperator, reconcileValueForOperator, withValue };
@@ -0,0 +1,7 @@
1
+ import { r as Rule } from "./index-CLAjbq8g.mjs";
2
+
3
+ //#region src/lint/rules/overlay-motion.d.ts
4
+ declare const overlayMotion: Rule;
5
+ //#endregion
6
+ export { overlayMotion };
7
+ //# sourceMappingURL=overlay-motion.d.mts.map
@@ -5,13 +5,13 @@ import { n as RouterLink } from "../../router-BxmA940v.mjs";
5
5
  import { TruncatedText } from "../../lib/TruncatedText.mjs";
6
6
  import { i as Paragraph, n as Heading$1 } from "../../Text-D0vEReED.mjs";
7
7
  import "../../variables/transitions.mjs";
8
- import { a as Tooltip } from "../../Tooltip-YViXzMdm.mjs";
8
+ import { a as Tooltip } from "../../Tooltip-CVBxc1yf.mjs";
9
9
  import { focusStyle } from "../../mixins/focus.mjs";
10
10
  import { n as Stack, t as HStack } from "../../Stack-Bzom2BTR.mjs";
11
- import { n as Button$1, t as IconButton } from "../../IconButton-DxHB2g80.mjs";
12
- import { n as DropdownMenu_default } from "../../DropdownMenu-c8XK2Lr4.mjs";
13
- import { t as DropdownButton } from "../../DropdownButton-DpLG-cIj.mjs";
14
- import { n as SingleColumnLayout } from "../../PageLayout-DjtGrvJa.mjs";
11
+ import { n as Button$1, t as IconButton } from "../../IconButton-Bj1fry_K.mjs";
12
+ import { n as DropdownMenu_default } from "../../DropdownMenu-Ip75l4Th.mjs";
13
+ import { t as DropdownButton } from "../../DropdownButton-BxZ5hn0X.mjs";
14
+ import { n as SingleColumnLayout } from "../../PageLayout-CPiVnS_r.mjs";
15
15
  import { cloneElement } from "react";
16
16
  import { Color, Spacing } from "@persona/design-tokens";
17
17
  import { Disclosure, DisclosurePanel } from "react-aria-components";
@@ -204,7 +204,7 @@ const Chevron = styled.span`
204
204
  color: ${({ theme }) => semanticColor(theme, "FgSecondary", theme.color.text.secondary)};
205
205
 
206
206
  svg {
207
- transition: transform ${"150ms"} ease-out;
207
+ transition: transform ${"200ms"} ${"cubic-bezier(0.4, 0, 0.2, 1)"};
208
208
  transform: rotate(${({ $expanded }) => $expanded ? "0deg" : "-90deg"});
209
209
  }
210
210
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["Heading","Button","DropdownMenu"],"sources":["../../../src/patterns/CardGrouping/CardGrouping.tsx"],"sourcesContent":["import { cloneElement, type ReactElement, type ReactNode } from 'react';\nimport { Disclosure, DisclosurePanel } from 'react-aria-components';\nimport styled from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\nimport { ChevronDownIcon, MoreIcon } from '@persona/icons';\n\nimport Button, { IconButton } from '#src/components/Button';\nimport DropdownButton from '#src/components/DropdownButton';\nimport DropdownMenu from '#src/components/DropdownMenu';\nimport { HStack, Stack } from '#src/components/Stack';\nimport { Heading, Paragraph } from '#src/components/Text';\nimport Tooltip from '#src/components/Tooltip';\nimport { HeadlessAriaButton } from '#src/lib/HeadlessAriaButton';\nimport { RouterLink } from '#src/lib/router';\nimport { semanticColor } from '#src/lib/semanticColor';\nimport { TruncatedText } from '#src/lib/TruncatedText';\nimport { focusStyle } from '#src/mixins/focus';\nimport type { IconAction, TextAction } from '#src/types/Action';\nimport { TransitionDuration } from '#src/variables/transitions';\n\nimport { SingleColumnLayout, type SingleColumnLayoutProps } from '../PageLayout';\n\ntype HeaderAction = IconAction | TextAction;\n\nconst isIconAction = (action: HeaderAction): action is IconAction => 'icon' in action;\n\nconst splitGroupActions = (actions: HeaderAction[]) => {\n if (actions.length <= 1) {\n return { inlineActions: actions, overflowActions: [] as HeaderAction[] };\n }\n\n const primaryIndex = actions.findIndex(\n (action) => !isIconAction(action) && action.variant === 'primary',\n );\n const inlineIndex = primaryIndex === -1 ? 0 : primaryIndex;\n\n return {\n inlineActions: [actions[inlineIndex]],\n overflowActions: actions.filter((_, index) => index !== inlineIndex),\n };\n};\n\nconst actionKey = (action: HeaderAction, index: number) =>\n isIconAction(action)\n ? (action.id ?? action.ariaLabel ?? `action-${index}`)\n : (action.id ?? action.label ?? `action-${index}`);\n\nconst actionLabel = (action: HeaderAction) =>\n isIconAction(action) ? action.ariaLabel : action.label;\n\nconst overflowLinkProps = (action: HeaderAction) => {\n if (action.disabled || action.to == null) {\n return {};\n }\n\n if (typeof action.to === 'string' && action.to.startsWith('https://')) {\n return {\n as: 'a' as const,\n href: action.to,\n target: '_blank' as const,\n rel: 'noreferrer',\n };\n }\n\n return { as: RouterLink, to: action.to };\n};\n\nconst TitleBlock = styled(Stack)`\n min-width: 0;\n flex: 1;\n\n > * {\n min-width: 0;\n }\n`;\n\nconst TitleHeading = styled(Heading)`\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n min-width: 0;\n max-width: 100%;\n overflow: hidden;\n`;\n\nconst TitleText = styled.span`\n min-width: 0;\n`;\n\nconst Actions = styled(HStack)`\n flex-shrink: 0;\n`;\n\nconst Adornment = styled.span`\n display: flex;\n flex-shrink: 0;\n max-width: 180px;\n`;\n\nconst ActionRow = ({\n actions,\n size,\n collapseToPrimary = false,\n}: {\n actions: HeaderAction[];\n size: 'sm' | 'md';\n collapseToPrimary?: boolean;\n}) => {\n const visibleActions = actions.filter((action) => !action.hidden);\n const { inlineActions, overflowActions } = collapseToPrimary\n ? splitGroupActions(visibleActions)\n : { inlineActions: visibleActions, overflowActions: [] as HeaderAction[] };\n\n const buttons = inlineActions.map((action, i) => {\n const key = actionKey(action, i);\n\n const button = isIconAction(action) ? (\n <IconButton\n id={action.id}\n key={key}\n to={action.to}\n size={size}\n disabled={action.disabled}\n aria-label={action.ariaLabel}\n onClick={(event) => {\n event.stopPropagation();\n return action.onClick?.(event);\n }}\n >\n {action.icon}\n </IconButton>\n ) : (\n <Button\n id={action.id}\n key={key}\n to={action.to}\n aria-label={action.ariaLabel}\n disabled={action.disabled}\n variant={action.variant ?? 'basic'}\n size={size}\n width='auto'\n onSecondaryBackground={(action.variant ?? 'basic') === 'basic'}\n prefixIcon={action.prefixIcon}\n suffixIcon={action.suffixIcon}\n onClick={(event) => {\n event.stopPropagation();\n return action.onClick?.(event);\n }}\n >\n {action.label}\n </Button>\n );\n\n return action.tooltip ? (\n <Tooltip key={key} {...action.tooltipProps} trigger={button}>\n {action.tooltip}\n </Tooltip>\n ) : (\n button\n );\n });\n\n return (\n <Actions spacing={Spacing[2]}>\n {buttons}\n {overflowActions.length > 0 && (\n <DropdownButton\n variant='basic'\n size={size}\n width='icon'\n onSecondaryBackground\n suffixIcon={undefined}\n aria-label='More actions'\n menuProps={{ portal: true }}\n menuItems={overflowActions.map((action, index) => (\n <DropdownMenu.Item\n id={action.id ?? actionLabel(action)}\n key={actionKey(action, index)}\n disabled={action.disabled}\n variant={!isIconAction(action) && action.variant === 'danger' ? 'danger' : undefined}\n {...overflowLinkProps(action)}\n onClick={(event) => {\n event.stopPropagation();\n return action.onClick?.(event);\n }}\n >\n {actionLabel(action)}\n </DropdownMenu.Item>\n ))}\n >\n <MoreIcon />\n </DropdownButton>\n )}\n </Actions>\n );\n};\n\nconst onSecondarySurface = (node: ReactElement) =>\n cloneElement(node as ReactElement<{ onSecondaryBackground?: boolean }>, {\n onSecondaryBackground: true,\n });\n\nconst Controls = styled.div`\n margin-top: ${Spacing[2]};\n\n > * {\n margin-bottom: 0;\n }\n`;\n\nconst ListHeader = ({\n title,\n description,\n sticker,\n status,\n actions,\n controls,\n}: {\n title: string;\n description?: string;\n sticker?: ReactElement;\n status?: ReactElement;\n actions?: HeaderAction[];\n controls?: ReactNode;\n}) => (\n <HStack align='flex-start' justify='space-between' spacing={Spacing[4]} fullWidth>\n <TitleBlock spacing={Spacing[1]}>\n <TitleHeading forwardedAs='h2' size='xsm'>\n <TitleText>\n <TruncatedText>{title}</TruncatedText>\n </TitleText>\n {sticker && <Adornment>{onSecondarySurface(sticker)}</Adornment>}\n {status && <Adornment>{status}</Adornment>}\n </TitleHeading>\n {description && <Paragraph size='md'>{description}</Paragraph>}\n {controls && <Controls>{controls}</Controls>}\n </TitleBlock>\n {actions && actions.length > 0 && <ActionRow actions={actions} size='md' />}\n </HStack>\n);\n\nconst GroupDisclosure = styled(Disclosure)`\n display: flex;\n flex-direction: column;\n`;\n\nconst GroupHeader = styled(HStack)`\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n height: ${Spacing[9]};\n`;\n\nconst Trigger = styled(HeadlessAriaButton)`\n min-width: 0;\n flex: 1;\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n text-align: left;\n\n &:focus-visible {\n ${focusStyle}\n }\n`;\n\nconst Chevron = styled.span<{ $expanded: boolean }>`\n display: flex;\n flex-shrink: 0;\n color: ${({ theme }) => semanticColor(theme, 'FgSecondary', theme.color.text.secondary)};\n\n svg {\n transition: transform ${TransitionDuration.Faster} ease-out;\n transform: rotate(${({ $expanded }) => ($expanded ? '0deg' : '-90deg')});\n }\n`;\n\nconst GroupList = styled(Stack)`\n && {\n gap: 0;\n }\n\n > *:not(:last-child) {\n border-bottom: 1px solid\n ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n }\n`;\n\nconst GroupCards = styled(Stack)`\n padding-top: ${Spacing[4]};\n padding-bottom: ${Spacing[4]};\n`;\n\nexport type CardGroupingGroup = {\n title: string;\n sticker?: ReactElement;\n actions?: HeaderAction[];\n /** @defaultValue false */\n defaultExpanded?: boolean;\n children: ReactNode;\n};\n\ntype CardGroupingHeaderProps = Omit<SingleColumnLayoutProps, 'main'> & {\n title?: string;\n description?: string;\n sticker?: ReactElement;\n status?: ReactElement;\n actions?: HeaderAction[];\n /** Extra controls under the description, inside the list title group. */\n controls?: ReactNode;\n};\n\nexport type CardGroupingProps = CardGroupingHeaderProps & {\n groups: CardGroupingGroup[];\n};\n\nconst GroupRow = ({\n title,\n sticker,\n actions,\n defaultExpanded = false,\n children,\n}: CardGroupingGroup) => (\n <GroupDisclosure defaultExpanded={defaultExpanded}>\n {({ isExpanded }) => (\n <>\n <GroupHeader align='center' justify='space-between' spacing={Spacing[2]}>\n <Trigger slot='trigger' aria-label={title}>\n <Chevron $expanded={isExpanded} aria-hidden>\n <ChevronDownIcon />\n </Chevron>\n <TitleBlock spacing={Spacing[1]}>\n <TitleHeading forwardedAs='h3' size='xsm'>\n <TitleText>\n <TruncatedText>{title}</TruncatedText>\n </TitleText>\n {sticker && <Adornment>{onSecondarySurface(sticker)}</Adornment>}\n </TitleHeading>\n </TitleBlock>\n </Trigger>\n {actions && actions.length > 0 && (\n <ActionRow actions={actions} size='sm' collapseToPrimary />\n )}\n </GroupHeader>\n <DisclosurePanel>\n <GroupCards spacing={Spacing[4]}>{children}</GroupCards>\n </DisclosurePanel>\n </>\n )}\n </GroupDisclosure>\n);\n\nexport const CardGrouping = ({\n title,\n description,\n sticker,\n status,\n actions,\n controls,\n groups,\n ...chrome\n}: CardGroupingProps) => (\n <SingleColumnLayout\n {...chrome}\n main={\n <Stack spacing={Spacing[4]} fullWidth>\n {title ? (\n <ListHeader\n title={title}\n description={description}\n sticker={sticker}\n status={status}\n actions={actions}\n controls={controls}\n />\n ) : (\n description && <Paragraph size='md'>{description}</Paragraph>\n )}\n <GroupList fullWidth>\n {groups.map((group, index) => (\n <GroupRow key={`${group.title}-${index}`} {...group} />\n ))}\n </GroupList>\n </Stack>\n }\n />\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["Heading","Button","DropdownMenu"],"sources":["../../../src/patterns/CardGrouping/CardGrouping.tsx"],"sourcesContent":["import { cloneElement, type ReactElement, type ReactNode } from 'react';\nimport { Disclosure, DisclosurePanel } from 'react-aria-components';\nimport styled from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\nimport { ChevronDownIcon, MoreIcon } from '@persona/icons';\n\nimport Button, { IconButton } from '#src/components/Button';\nimport DropdownButton from '#src/components/DropdownButton';\nimport DropdownMenu from '#src/components/DropdownMenu';\nimport { HStack, Stack } from '#src/components/Stack';\nimport { Heading, Paragraph } from '#src/components/Text';\nimport Tooltip from '#src/components/Tooltip';\nimport { HeadlessAriaButton } from '#src/lib/HeadlessAriaButton';\nimport { RouterLink } from '#src/lib/router';\nimport { semanticColor } from '#src/lib/semanticColor';\nimport { TruncatedText } from '#src/lib/TruncatedText';\nimport { focusStyle } from '#src/mixins/focus';\nimport type { IconAction, TextAction } from '#src/types/Action';\nimport { TransitionDuration, TransitionEasing } from '#src/variables/transitions';\n\nimport { SingleColumnLayout, type SingleColumnLayoutProps } from '../PageLayout';\n\ntype HeaderAction = IconAction | TextAction;\n\nconst isIconAction = (action: HeaderAction): action is IconAction => 'icon' in action;\n\nconst splitGroupActions = (actions: HeaderAction[]) => {\n if (actions.length <= 1) {\n return { inlineActions: actions, overflowActions: [] as HeaderAction[] };\n }\n\n const primaryIndex = actions.findIndex(\n (action) => !isIconAction(action) && action.variant === 'primary',\n );\n const inlineIndex = primaryIndex === -1 ? 0 : primaryIndex;\n\n return {\n inlineActions: [actions[inlineIndex]],\n overflowActions: actions.filter((_, index) => index !== inlineIndex),\n };\n};\n\nconst actionKey = (action: HeaderAction, index: number) =>\n isIconAction(action)\n ? (action.id ?? action.ariaLabel ?? `action-${index}`)\n : (action.id ?? action.label ?? `action-${index}`);\n\nconst actionLabel = (action: HeaderAction) =>\n isIconAction(action) ? action.ariaLabel : action.label;\n\nconst overflowLinkProps = (action: HeaderAction) => {\n if (action.disabled || action.to == null) {\n return {};\n }\n\n if (typeof action.to === 'string' && action.to.startsWith('https://')) {\n return {\n as: 'a' as const,\n href: action.to,\n target: '_blank' as const,\n rel: 'noreferrer',\n };\n }\n\n return { as: RouterLink, to: action.to };\n};\n\nconst TitleBlock = styled(Stack)`\n min-width: 0;\n flex: 1;\n\n > * {\n min-width: 0;\n }\n`;\n\nconst TitleHeading = styled(Heading)`\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n min-width: 0;\n max-width: 100%;\n overflow: hidden;\n`;\n\nconst TitleText = styled.span`\n min-width: 0;\n`;\n\nconst Actions = styled(HStack)`\n flex-shrink: 0;\n`;\n\nconst Adornment = styled.span`\n display: flex;\n flex-shrink: 0;\n max-width: 180px;\n`;\n\nconst ActionRow = ({\n actions,\n size,\n collapseToPrimary = false,\n}: {\n actions: HeaderAction[];\n size: 'sm' | 'md';\n collapseToPrimary?: boolean;\n}) => {\n const visibleActions = actions.filter((action) => !action.hidden);\n const { inlineActions, overflowActions } = collapseToPrimary\n ? splitGroupActions(visibleActions)\n : { inlineActions: visibleActions, overflowActions: [] as HeaderAction[] };\n\n const buttons = inlineActions.map((action, i) => {\n const key = actionKey(action, i);\n\n const button = isIconAction(action) ? (\n <IconButton\n id={action.id}\n key={key}\n to={action.to}\n size={size}\n disabled={action.disabled}\n aria-label={action.ariaLabel}\n onClick={(event) => {\n event.stopPropagation();\n return action.onClick?.(event);\n }}\n >\n {action.icon}\n </IconButton>\n ) : (\n <Button\n id={action.id}\n key={key}\n to={action.to}\n aria-label={action.ariaLabel}\n disabled={action.disabled}\n variant={action.variant ?? 'basic'}\n size={size}\n width='auto'\n onSecondaryBackground={(action.variant ?? 'basic') === 'basic'}\n prefixIcon={action.prefixIcon}\n suffixIcon={action.suffixIcon}\n onClick={(event) => {\n event.stopPropagation();\n return action.onClick?.(event);\n }}\n >\n {action.label}\n </Button>\n );\n\n return action.tooltip ? (\n <Tooltip key={key} {...action.tooltipProps} trigger={button}>\n {action.tooltip}\n </Tooltip>\n ) : (\n button\n );\n });\n\n return (\n <Actions spacing={Spacing[2]}>\n {buttons}\n {overflowActions.length > 0 && (\n <DropdownButton\n variant='basic'\n size={size}\n width='icon'\n onSecondaryBackground\n suffixIcon={undefined}\n aria-label='More actions'\n menuProps={{ portal: true }}\n menuItems={overflowActions.map((action, index) => (\n <DropdownMenu.Item\n id={action.id ?? actionLabel(action)}\n key={actionKey(action, index)}\n disabled={action.disabled}\n variant={!isIconAction(action) && action.variant === 'danger' ? 'danger' : undefined}\n {...overflowLinkProps(action)}\n onClick={(event) => {\n event.stopPropagation();\n return action.onClick?.(event);\n }}\n >\n {actionLabel(action)}\n </DropdownMenu.Item>\n ))}\n >\n <MoreIcon />\n </DropdownButton>\n )}\n </Actions>\n );\n};\n\nconst onSecondarySurface = (node: ReactElement) =>\n cloneElement(node as ReactElement<{ onSecondaryBackground?: boolean }>, {\n onSecondaryBackground: true,\n });\n\nconst Controls = styled.div`\n margin-top: ${Spacing[2]};\n\n > * {\n margin-bottom: 0;\n }\n`;\n\nconst ListHeader = ({\n title,\n description,\n sticker,\n status,\n actions,\n controls,\n}: {\n title: string;\n description?: string;\n sticker?: ReactElement;\n status?: ReactElement;\n actions?: HeaderAction[];\n controls?: ReactNode;\n}) => (\n <HStack align='flex-start' justify='space-between' spacing={Spacing[4]} fullWidth>\n <TitleBlock spacing={Spacing[1]}>\n <TitleHeading forwardedAs='h2' size='xsm'>\n <TitleText>\n <TruncatedText>{title}</TruncatedText>\n </TitleText>\n {sticker && <Adornment>{onSecondarySurface(sticker)}</Adornment>}\n {status && <Adornment>{status}</Adornment>}\n </TitleHeading>\n {description && <Paragraph size='md'>{description}</Paragraph>}\n {controls && <Controls>{controls}</Controls>}\n </TitleBlock>\n {actions && actions.length > 0 && <ActionRow actions={actions} size='md' />}\n </HStack>\n);\n\nconst GroupDisclosure = styled(Disclosure)`\n display: flex;\n flex-direction: column;\n`;\n\nconst GroupHeader = styled(HStack)`\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n height: ${Spacing[9]};\n`;\n\nconst Trigger = styled(HeadlessAriaButton)`\n min-width: 0;\n flex: 1;\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n text-align: left;\n\n &:focus-visible {\n ${focusStyle}\n }\n`;\n\nconst Chevron = styled.span<{ $expanded: boolean }>`\n display: flex;\n flex-shrink: 0;\n color: ${({ theme }) => semanticColor(theme, 'FgSecondary', theme.color.text.secondary)};\n\n svg {\n transition: transform ${TransitionDuration.Fast} ${TransitionEasing.Move};\n transform: rotate(${({ $expanded }) => ($expanded ? '0deg' : '-90deg')});\n }\n`;\n\nconst GroupList = styled(Stack)`\n && {\n gap: 0;\n }\n\n > *:not(:last-child) {\n border-bottom: 1px solid\n ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n }\n`;\n\nconst GroupCards = styled(Stack)`\n padding-top: ${Spacing[4]};\n padding-bottom: ${Spacing[4]};\n`;\n\nexport type CardGroupingGroup = {\n title: string;\n sticker?: ReactElement;\n actions?: HeaderAction[];\n /** @defaultValue false */\n defaultExpanded?: boolean;\n children: ReactNode;\n};\n\ntype CardGroupingHeaderProps = Omit<SingleColumnLayoutProps, 'main'> & {\n title?: string;\n description?: string;\n sticker?: ReactElement;\n status?: ReactElement;\n actions?: HeaderAction[];\n /** Extra controls under the description, inside the list title group. */\n controls?: ReactNode;\n};\n\nexport type CardGroupingProps = CardGroupingHeaderProps & {\n groups: CardGroupingGroup[];\n};\n\nconst GroupRow = ({\n title,\n sticker,\n actions,\n defaultExpanded = false,\n children,\n}: CardGroupingGroup) => (\n <GroupDisclosure defaultExpanded={defaultExpanded}>\n {({ isExpanded }) => (\n <>\n <GroupHeader align='center' justify='space-between' spacing={Spacing[2]}>\n <Trigger slot='trigger' aria-label={title}>\n <Chevron $expanded={isExpanded} aria-hidden>\n <ChevronDownIcon />\n </Chevron>\n <TitleBlock spacing={Spacing[1]}>\n <TitleHeading forwardedAs='h3' size='xsm'>\n <TitleText>\n <TruncatedText>{title}</TruncatedText>\n </TitleText>\n {sticker && <Adornment>{onSecondarySurface(sticker)}</Adornment>}\n </TitleHeading>\n </TitleBlock>\n </Trigger>\n {actions && actions.length > 0 && (\n <ActionRow actions={actions} size='sm' collapseToPrimary />\n )}\n </GroupHeader>\n <DisclosurePanel>\n <GroupCards spacing={Spacing[4]}>{children}</GroupCards>\n </DisclosurePanel>\n </>\n )}\n </GroupDisclosure>\n);\n\nexport const CardGrouping = ({\n title,\n description,\n sticker,\n status,\n actions,\n controls,\n groups,\n ...chrome\n}: CardGroupingProps) => (\n <SingleColumnLayout\n {...chrome}\n main={\n <Stack spacing={Spacing[4]} fullWidth>\n {title ? (\n <ListHeader\n title={title}\n description={description}\n sticker={sticker}\n status={status}\n actions={actions}\n controls={controls}\n />\n ) : (\n description && <Paragraph size='md'>{description}</Paragraph>\n )}\n <GroupList fullWidth>\n {groups.map((group, index) => (\n <GroupRow key={`${group.title}-${index}`} {...group} />\n ))}\n </GroupList>\n </Stack>\n }\n />\n);\n"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
+ import { a as styled } from "../../styledComponentsInterop-Cs5CCPRy.mjs";
1
2
  import { t as Card_default } from "../../Card-DuQHyroh.mjs";
2
- import { t as DataTable } from "../../DataTable-CIZJ1vO8.mjs";
3
- import { t as PageHeader } from "../../PageHeader-7_Hf6rHl.mjs";
4
- import { a as Section, i as Container } from "../../PageLayout-DjtGrvJa.mjs";
3
+ import { t as DataTable } from "../../DataTable-DdSY9mzT.mjs";
4
+ import { t as PageHeader } from "../../PageHeader-6KvtGED-.mjs";
5
+ import { n as SingleColumnLayout } from "../../PageLayout-CPiVnS_r.mjs";
5
6
  import { useMemo } from "react";
6
7
  import { jsx, jsxs } from "react/jsx-runtime";
7
8
  //#region src/patterns/IndexTableLayout/useColumnConfiguration.ts
@@ -46,7 +47,10 @@ const useColumnConfiguration = ({ columnDefinitions, columnConfiguration, onColu
46
47
  };
47
48
  //#endregion
48
49
  //#region src/patterns/IndexTableLayout/IndexTableLayout.tsx
49
- const IndexTableLayout = ({ title, tableTitle, headerProps, banner, className, controls, columnDefinitions, defaultColumns, columnConfiguration, onColumnConfigurationChange, getColumnDisabled, sortByRelevance, ...dataTableProps }) => {
50
+ const Root = styled.div`
51
+ width: 100%;
52
+ `;
53
+ const IndexTableLayout = ({ title, tableTitle, headerProps, banner, className, width = "wide", controls, columnDefinitions, defaultColumns, columnConfiguration, onColumnConfigurationChange, getColumnDisabled, sortByRelevance, ...dataTableProps }) => {
50
54
  const { columns, columnConfigurationProps } = useColumnConfiguration({
51
55
  columnDefinitions,
52
56
  defaultColumns,
@@ -60,7 +64,7 @@ const IndexTableLayout = ({ title, tableTitle, headerProps, banner, className, c
60
64
  const forwardedDataTableProps = { ...dataTableProps };
61
65
  delete forwardedDataTableProps.showColumnProperties;
62
66
  delete forwardedDataTableProps.onUpdateColumnProperties;
63
- return /* @__PURE__ */ jsxs(Container, {
67
+ return /* @__PURE__ */ jsxs(Root, {
64
68
  className,
65
69
  children: [/* @__PURE__ */ jsx(PageHeader, {
66
70
  ...restHeaderProps,
@@ -68,17 +72,20 @@ const IndexTableLayout = ({ title, tableTitle, headerProps, banner, className, c
68
72
  title: headerTitle ?? title,
69
73
  subtitle: headerSubtitle
70
74
  }
71
- }), /* @__PURE__ */ jsx(Section, { children: /* @__PURE__ */ jsx(Card_default, { children: /* @__PURE__ */ jsxs(Card_default.Body, { children: [banner, /* @__PURE__ */ jsx(DataTable, {
72
- ...forwardedDataTableProps,
73
- columns,
74
- title: tableTitle,
75
- showControls: true,
76
- controls: {
77
- ...controls,
78
- columnConfigurationProps
79
- },
80
- enableRowSelection: hasBulkActions
81
- })] }) }) })]
75
+ }), /* @__PURE__ */ jsx(SingleColumnLayout, {
76
+ width,
77
+ main: /* @__PURE__ */ jsx(Card_default, { children: /* @__PURE__ */ jsxs(Card_default.Body, { children: [banner, /* @__PURE__ */ jsx(DataTable, {
78
+ ...forwardedDataTableProps,
79
+ columns,
80
+ title: tableTitle,
81
+ showControls: true,
82
+ controls: {
83
+ ...controls,
84
+ columnConfigurationProps
85
+ },
86
+ enableRowSelection: hasBulkActions
87
+ })] }) })
88
+ })]
82
89
  });
83
90
  };
84
91
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["Card"],"sources":["../../../src/patterns/IndexTableLayout/useColumnConfiguration.ts","../../../src/patterns/IndexTableLayout/IndexTableLayout.tsx"],"sourcesContent":["import type { RowData } from '@tanstack/react-table';\nimport { useMemo } from 'react';\n\nimport type { TableViewConfigurationProps } from '#src/components/DataTable/TableControls';\nimport type { ColumnConfig } from '#src/components/DataTable/types';\n\ntype AttributeColumn = TableViewConfigurationProps['columnConfiguration'][number];\n\nexport interface ColumnDefinition<TData extends RowData> extends ColumnConfig<TData> {\n key?: string;\n label: string;\n isCustomField?: boolean;\n}\n\nexport type ColumnDefinitions<TData extends RowData> = Record<string, ColumnDefinition<TData>>;\n\nexport interface UseColumnConfigurationOptions<TData extends RowData> {\n columnDefinitions: ColumnDefinitions<TData>;\n defaultColumns: string[];\n columnConfiguration?: AttributeColumn[];\n onColumnConfigurationChange?: (c: AttributeColumn[]) => void;\n getColumnDisabled?: (columnId: string, shownColumnIds: string[]) => boolean;\n sortByRelevance?: boolean;\n}\n\nexport const useColumnConfiguration = <TData extends RowData>({\n columnDefinitions,\n columnConfiguration,\n onColumnConfigurationChange,\n defaultColumns,\n getColumnDisabled,\n sortByRelevance,\n}: UseColumnConfigurationOptions<TData>): {\n columns: ColumnConfig<TData>[];\n columnConfigurationProps?: TableViewConfigurationProps;\n} => {\n const visibleColumnKeys = useMemo(() => {\n if (!columnConfiguration || columnConfiguration.length === 0) {\n return defaultColumns;\n }\n\n return columnConfiguration.map((column) => column.key);\n }, [columnConfiguration, defaultColumns]);\n\n const columns = useMemo(\n () =>\n visibleColumnKeys\n .map((key): ColumnConfig<TData> | null => {\n const definition = columnDefinitions[key];\n if (!definition) {\n return null;\n }\n\n const {\n key: _key,\n label: _label,\n isCustomField: _isCustomField,\n ...columnConfig\n } = definition;\n return columnConfig;\n })\n .filter((column): column is ColumnConfig<TData> => column != null),\n [visibleColumnKeys, columnDefinitions],\n );\n\n const columnConfigurationProps = useMemo(() => {\n if (!columnConfiguration || !onColumnConfigurationChange) {\n return undefined;\n }\n\n const attributeOptions = Object.keys(columnDefinitions).map((key) => ({\n key: String(key),\n label: columnDefinitions[key].label,\n isCustomField: columnDefinitions[key].isCustomField,\n }));\n\n const currentConfiguration: AttributeColumn[] = visibleColumnKeys\n .filter((key) => columnDefinitions[key] != null)\n .map((key) => ({\n key: String(key),\n label: columnDefinitions[key].label,\n }));\n\n return {\n columnConfiguration: currentConfiguration,\n attributeOptions,\n updateColumnConfiguration: onColumnConfigurationChange,\n getColumnDisabled,\n sortByRelevance,\n };\n }, [\n columnConfiguration,\n onColumnConfigurationChange,\n columnDefinitions,\n visibleColumnKeys,\n getColumnDisabled,\n sortByRelevance,\n ]);\n\n return { columns, columnConfigurationProps };\n};\n","import type { RowData } from '@tanstack/react-table';\nimport type { ReactNode } from 'react';\n\nimport type { BreadcrumbsProps } from '#src/components/Breadcrumbs';\nimport Card from '#src/components/Card';\nimport DataTable, { type DataTableProps } from '#src/components/DataTable';\nimport type {\n BaseFilterConfig,\n FilterConfig,\n TableControlsProps,\n} from '#src/components/DataTable/TableControls';\nimport PageHeader, { type PageHeaderProps } from '#src/components/PageHeader';\nimport { Container, Section } from '#src/patterns/PageLayout';\n\nimport {\n useColumnConfiguration,\n type UseColumnConfigurationOptions,\n} from './useColumnConfiguration';\n\nexport type IndexTableLayoutHeaderProps =\n | (Omit<Extract<PageHeaderProps, { breadcrumbs?: never }>, 'title'> & { title?: ReactNode })\n | Extract<PageHeaderProps, { breadcrumbs: BreadcrumbsProps }>;\n\nexport interface IndexTableLayoutProps<\n TData extends RowData,\n TFilter extends BaseFilterConfig = FilterConfig,\n>\n extends\n Omit<\n DataTableProps<TData, TFilter>,\n | 'title'\n | 'showControls'\n | 'controls'\n | 'columns'\n | 'enableRowSelection'\n | 'showColumnProperties'\n | 'onUpdateColumnProperties'\n >,\n UseColumnConfigurationOptions<TData> {\n title: string;\n tableTitle?: string;\n headerProps?: IndexTableLayoutHeaderProps;\n banner?: ReactNode;\n className?: string;\n /** Host-built table controls: search, filters/filterResolver/filterPanel, saved-view ControlBar props, tableActions… */\n controls?: Omit<TableControlsProps<TFilter>, 'columnConfigurationProps'>;\n}\n\nexport const IndexTableLayout = <\n TData extends RowData,\n TFilter extends BaseFilterConfig = FilterConfig,\n>({\n title,\n tableTitle,\n headerProps,\n banner,\n className,\n controls,\n columnDefinitions,\n defaultColumns,\n columnConfiguration,\n onColumnConfigurationChange,\n getColumnDisabled,\n sortByRelevance,\n ...dataTableProps\n}: IndexTableLayoutProps<TData, TFilter>) => {\n const { columns, columnConfigurationProps } = useColumnConfiguration({\n columnDefinitions,\n defaultColumns,\n columnConfiguration,\n onColumnConfigurationChange,\n getColumnDisabled,\n sortByRelevance,\n });\n\n const hasBulkActions =\n (dataTableProps.bulkActions?.length ?? 0) > 0 ||\n (controls?.bulkActions?.length ?? 0) > 0 ||\n dataTableProps.getAvailableBulkActions != null;\n\n const {\n title: headerTitle,\n subtitle: headerSubtitle,\n breadcrumbs,\n ...restHeaderProps\n } = headerProps ?? {};\n\n const forwardedDataTableProps = { ...dataTableProps } as typeof dataTableProps &\n Pick<DataTableProps<TData, TFilter>, 'showColumnProperties' | 'onUpdateColumnProperties'>;\n delete forwardedDataTableProps.showColumnProperties;\n delete forwardedDataTableProps.onUpdateColumnProperties;\n\n return (\n <Container className={className}>\n <PageHeader\n {...restHeaderProps}\n {...(breadcrumbs\n ? { breadcrumbs }\n : { title: headerTitle ?? title, subtitle: headerSubtitle })}\n />\n <Section>\n <Card>\n <Card.Body>\n {banner}\n <DataTable<TData, TFilter>\n {...forwardedDataTableProps}\n columns={columns}\n title={tableTitle}\n showControls\n controls={{ ...controls, columnConfigurationProps }}\n enableRowSelection={hasBulkActions}\n />\n </Card.Body>\n </Card>\n </Section>\n </Container>\n );\n};\n\nexport default IndexTableLayout;\n"],"mappings":";;;;;;;AAyBA,MAAa,0BAAiD,EAC5D,mBACA,qBACA,6BACA,gBACA,mBACA,sBAIG;CACH,MAAM,oBAAoB,cAAc;AACtC,MAAI,CAAC,uBAAuB,oBAAoB,WAAW,EACzD,QAAO;AAGT,SAAO,oBAAoB,KAAK,WAAW,OAAO,IAAI;IACrD,CAAC,qBAAqB,eAAe,CAAC;AAyDzC,QAAO;EAAE,SAvDO,cAEZ,kBACG,KAAK,QAAoC;GACxC,MAAM,aAAa,kBAAkB;AACrC,OAAI,CAAC,WACH,QAAO;GAGT,MAAM,EACJ,KAAK,MACL,OAAO,QACP,eAAe,gBACf,GAAG,iBACD;AACJ,UAAO;IACP,CACD,QAAQ,WAA0C,UAAU,KAAK,EACtE,CAAC,mBAAmB,kBAAkB,CAqCxB;EAAE,0BAlCe,cAAc;AAC7C,OAAI,CAAC,uBAAuB,CAAC,4BAC3B;GAGF,MAAM,mBAAmB,OAAO,KAAK,kBAAkB,CAAC,KAAK,SAAS;IACpE,KAAK,OAAO,IAAI;IAChB,OAAO,kBAAkB,KAAK;IAC9B,eAAe,kBAAkB,KAAK;IACvC,EAAE;AASH,UAAO;IACL,qBAR8C,kBAC7C,QAAQ,QAAQ,kBAAkB,QAAQ,KAAK,CAC/C,KAAK,SAAS;KACb,KAAK,OAAO,IAAI;KAChB,OAAO,kBAAkB,KAAK;KAC/B,EAGwC;IACzC;IACA,2BAA2B;IAC3B;IACA;IACD;KACA;GACD;GACA;GACA;GACA;GACA;GACA;GACD,CAEyC;EAAE;;;;ACnD9C,MAAa,oBAGX,EACA,OACA,YACA,aACA,QACA,WACA,UACA,mBACA,gBACA,qBACA,6BACA,mBACA,iBACA,GAAG,qBACwC;CAC3C,MAAM,EAAE,SAAS,6BAA6B,uBAAuB;EACnE;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,kBACH,eAAe,aAAa,UAAU,KAAK,MAC3C,UAAU,aAAa,UAAU,KAAK,KACvC,eAAe,2BAA2B;CAE5C,MAAM,EACJ,OAAO,aACP,UAAU,gBACV,aACA,GAAG,oBACD,eAAe,EAAE;CAErB,MAAM,0BAA0B,EAAE,GAAG,gBAAgB;AAErD,QAAO,wBAAwB;AAC/B,QAAO,wBAAwB;AAE/B,QACE,qBAAC,WAAD;EAAsB;YAAtB,CACE,oBAAC,YAAD;GACE,GAAI;GACJ,GAAK,cACD,EAAE,aAAa,GACf;IAAE,OAAO,eAAe;IAAO,UAAU;IAAgB;GAC7D,CAAA,EACF,oBAAC,SAAD,EAAA,UACE,oBAACA,cAAD,EAAA,UACE,qBAACA,aAAK,MAAN,EAAA,UAAA,CACG,QACD,oBAAC,WAAD;GACE,GAAI;GACK;GACT,OAAO;GACP,cAAA;GACA,UAAU;IAAE,GAAG;IAAU;IAA0B;GACnD,oBAAoB;GACpB,CAAA,CACQ,EAAA,CAAA,EACP,CAAA,EACC,CAAA,CACA"}
1
+ {"version":3,"file":"index.mjs","names":["Card"],"sources":["../../../src/patterns/IndexTableLayout/useColumnConfiguration.ts","../../../src/patterns/IndexTableLayout/IndexTableLayout.tsx"],"sourcesContent":["import type { RowData } from '@tanstack/react-table';\nimport { useMemo } from 'react';\n\nimport type { TableViewConfigurationProps } from '#src/components/DataTable/TableControls';\nimport type { ColumnConfig } from '#src/components/DataTable/types';\n\ntype AttributeColumn = TableViewConfigurationProps['columnConfiguration'][number];\n\nexport interface ColumnDefinition<TData extends RowData> extends ColumnConfig<TData> {\n key?: string;\n label: string;\n isCustomField?: boolean;\n}\n\nexport type ColumnDefinitions<TData extends RowData> = Record<string, ColumnDefinition<TData>>;\n\nexport interface UseColumnConfigurationOptions<TData extends RowData> {\n columnDefinitions: ColumnDefinitions<TData>;\n defaultColumns: string[];\n columnConfiguration?: AttributeColumn[];\n onColumnConfigurationChange?: (c: AttributeColumn[]) => void;\n getColumnDisabled?: (columnId: string, shownColumnIds: string[]) => boolean;\n sortByRelevance?: boolean;\n}\n\nexport const useColumnConfiguration = <TData extends RowData>({\n columnDefinitions,\n columnConfiguration,\n onColumnConfigurationChange,\n defaultColumns,\n getColumnDisabled,\n sortByRelevance,\n}: UseColumnConfigurationOptions<TData>): {\n columns: ColumnConfig<TData>[];\n columnConfigurationProps?: TableViewConfigurationProps;\n} => {\n const visibleColumnKeys = useMemo(() => {\n if (!columnConfiguration || columnConfiguration.length === 0) {\n return defaultColumns;\n }\n\n return columnConfiguration.map((column) => column.key);\n }, [columnConfiguration, defaultColumns]);\n\n const columns = useMemo(\n () =>\n visibleColumnKeys\n .map((key): ColumnConfig<TData> | null => {\n const definition = columnDefinitions[key];\n if (!definition) {\n return null;\n }\n\n const {\n key: _key,\n label: _label,\n isCustomField: _isCustomField,\n ...columnConfig\n } = definition;\n return columnConfig;\n })\n .filter((column): column is ColumnConfig<TData> => column != null),\n [visibleColumnKeys, columnDefinitions],\n );\n\n const columnConfigurationProps = useMemo(() => {\n if (!columnConfiguration || !onColumnConfigurationChange) {\n return undefined;\n }\n\n const attributeOptions = Object.keys(columnDefinitions).map((key) => ({\n key: String(key),\n label: columnDefinitions[key].label,\n isCustomField: columnDefinitions[key].isCustomField,\n }));\n\n const currentConfiguration: AttributeColumn[] = visibleColumnKeys\n .filter((key) => columnDefinitions[key] != null)\n .map((key) => ({\n key: String(key),\n label: columnDefinitions[key].label,\n }));\n\n return {\n columnConfiguration: currentConfiguration,\n attributeOptions,\n updateColumnConfiguration: onColumnConfigurationChange,\n getColumnDisabled,\n sortByRelevance,\n };\n }, [\n columnConfiguration,\n onColumnConfigurationChange,\n columnDefinitions,\n visibleColumnKeys,\n getColumnDisabled,\n sortByRelevance,\n ]);\n\n return { columns, columnConfigurationProps };\n};\n","import type { RowData } from '@tanstack/react-table';\nimport type { ReactNode } from 'react';\nimport styled from 'styled-components';\n\nimport type { BreadcrumbsProps } from '#src/components/Breadcrumbs';\nimport Card from '#src/components/Card';\nimport DataTable, { type DataTableProps } from '#src/components/DataTable';\nimport type {\n BaseFilterConfig,\n FilterConfig,\n TableControlsProps,\n} from '#src/components/DataTable/TableControls';\nimport PageHeader, { type PageHeaderProps } from '#src/components/PageHeader';\nimport { type PageLayoutWidth, SingleColumnLayout } from '#src/patterns/PageLayout';\n\nimport {\n useColumnConfiguration,\n type UseColumnConfigurationOptions,\n} from './useColumnConfiguration';\n\nconst Root = styled.div`\n width: 100%;\n`;\n\nexport type IndexTableLayoutHeaderProps =\n | (Omit<Extract<PageHeaderProps, { breadcrumbs?: never }>, 'title'> & { title?: ReactNode })\n | Extract<PageHeaderProps, { breadcrumbs: BreadcrumbsProps }>;\n\nexport interface IndexTableLayoutProps<\n TData extends RowData,\n TFilter extends BaseFilterConfig = FilterConfig,\n>\n extends\n Omit<\n DataTableProps<TData, TFilter>,\n | 'title'\n | 'showControls'\n | 'controls'\n | 'columns'\n | 'enableRowSelection'\n | 'showColumnProperties'\n | 'onUpdateColumnProperties'\n >,\n UseColumnConfigurationOptions<TData> {\n title: string;\n tableTitle?: string;\n headerProps?: IndexTableLayoutHeaderProps;\n banner?: ReactNode;\n className?: string;\n /**\n * Page grid for the table card. `wide` uses the fluid grid; `standard` uses the centered fixed grid (max 1408px).\n *\n * @defaultValue 'wide'\n */\n width?: PageLayoutWidth;\n /** Host-built table controls: search, filters/filterResolver/filterPanel, saved-view ControlBar props, tableActions… */\n controls?: Omit<TableControlsProps<TFilter>, 'columnConfigurationProps'>;\n}\n\nexport const IndexTableLayout = <\n TData extends RowData,\n TFilter extends BaseFilterConfig = FilterConfig,\n>({\n title,\n tableTitle,\n headerProps,\n banner,\n className,\n width = 'wide',\n controls,\n columnDefinitions,\n defaultColumns,\n columnConfiguration,\n onColumnConfigurationChange,\n getColumnDisabled,\n sortByRelevance,\n ...dataTableProps\n}: IndexTableLayoutProps<TData, TFilter>) => {\n const { columns, columnConfigurationProps } = useColumnConfiguration({\n columnDefinitions,\n defaultColumns,\n columnConfiguration,\n onColumnConfigurationChange,\n getColumnDisabled,\n sortByRelevance,\n });\n\n const hasBulkActions =\n (dataTableProps.bulkActions?.length ?? 0) > 0 ||\n (controls?.bulkActions?.length ?? 0) > 0 ||\n dataTableProps.getAvailableBulkActions != null;\n\n const {\n title: headerTitle,\n subtitle: headerSubtitle,\n breadcrumbs,\n ...restHeaderProps\n } = headerProps ?? {};\n\n const forwardedDataTableProps = { ...dataTableProps } as typeof dataTableProps &\n Pick<DataTableProps<TData, TFilter>, 'showColumnProperties' | 'onUpdateColumnProperties'>;\n delete forwardedDataTableProps.showColumnProperties;\n delete forwardedDataTableProps.onUpdateColumnProperties;\n\n return (\n <Root className={className}>\n <PageHeader\n {...restHeaderProps}\n {...(breadcrumbs\n ? { breadcrumbs }\n : { title: headerTitle ?? title, subtitle: headerSubtitle })}\n />\n <SingleColumnLayout\n width={width}\n main={\n <Card>\n <Card.Body>\n {banner}\n <DataTable<TData, TFilter>\n {...forwardedDataTableProps}\n columns={columns}\n title={tableTitle}\n showControls\n controls={{ ...controls, columnConfigurationProps }}\n enableRowSelection={hasBulkActions}\n />\n </Card.Body>\n </Card>\n }\n />\n </Root>\n );\n};\n\nexport default IndexTableLayout;\n"],"mappings":";;;;;;;;AAyBA,MAAa,0BAAiD,EAC5D,mBACA,qBACA,6BACA,gBACA,mBACA,sBAIG;CACH,MAAM,oBAAoB,cAAc;AACtC,MAAI,CAAC,uBAAuB,oBAAoB,WAAW,EACzD,QAAO;AAGT,SAAO,oBAAoB,KAAK,WAAW,OAAO,IAAI;IACrD,CAAC,qBAAqB,eAAe,CAAC;AAyDzC,QAAO;EAAE,SAvDO,cAEZ,kBACG,KAAK,QAAoC;GACxC,MAAM,aAAa,kBAAkB;AACrC,OAAI,CAAC,WACH,QAAO;GAGT,MAAM,EACJ,KAAK,MACL,OAAO,QACP,eAAe,gBACf,GAAG,iBACD;AACJ,UAAO;IACP,CACD,QAAQ,WAA0C,UAAU,KAAK,EACtE,CAAC,mBAAmB,kBAAkB,CAqCxB;EAAE,0BAlCe,cAAc;AAC7C,OAAI,CAAC,uBAAuB,CAAC,4BAC3B;GAGF,MAAM,mBAAmB,OAAO,KAAK,kBAAkB,CAAC,KAAK,SAAS;IACpE,KAAK,OAAO,IAAI;IAChB,OAAO,kBAAkB,KAAK;IAC9B,eAAe,kBAAkB,KAAK;IACvC,EAAE;AASH,UAAO;IACL,qBAR8C,kBAC7C,QAAQ,QAAQ,kBAAkB,QAAQ,KAAK,CAC/C,KAAK,SAAS;KACb,KAAK,OAAO,IAAI;KAChB,OAAO,kBAAkB,KAAK;KAC/B,EAGwC;IACzC;IACA,2BAA2B;IAC3B;IACA;IACD;KACA;GACD;GACA;GACA;GACA;GACA;GACA;GACD,CAEyC;EAAE;;;;AC/E9C,MAAM,OAAO,OAAO,GAAG;;;AAuCvB,MAAa,oBAGX,EACA,OACA,YACA,aACA,QACA,WACA,QAAQ,QACR,UACA,mBACA,gBACA,qBACA,6BACA,mBACA,iBACA,GAAG,qBACwC;CAC3C,MAAM,EAAE,SAAS,6BAA6B,uBAAuB;EACnE;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,kBACH,eAAe,aAAa,UAAU,KAAK,MAC3C,UAAU,aAAa,UAAU,KAAK,KACvC,eAAe,2BAA2B;CAE5C,MAAM,EACJ,OAAO,aACP,UAAU,gBACV,aACA,GAAG,oBACD,eAAe,EAAE;CAErB,MAAM,0BAA0B,EAAE,GAAG,gBAAgB;AAErD,QAAO,wBAAwB;AAC/B,QAAO,wBAAwB;AAE/B,QACE,qBAAC,MAAD;EAAiB;YAAjB,CACE,oBAAC,YAAD;GACE,GAAI;GACJ,GAAK,cACD,EAAE,aAAa,GACf;IAAE,OAAO,eAAe;IAAO,UAAU;IAAgB;GAC7D,CAAA,EACF,oBAAC,oBAAD;GACS;GACP,MACE,oBAACA,cAAD,EAAA,UACE,qBAACA,aAAK,MAAN,EAAA,UAAA,CACG,QACD,oBAAC,WAAD;IACE,GAAI;IACK;IACT,OAAO;IACP,cAAA;IACA,UAAU;KAAE,GAAG;KAAU;KAA0B;IACnD,oBAAoB;IACpB,CAAA,CACQ,EAAA,CAAA,EACP,CAAA;GAET,CAAA,CACG"}
@@ -1,9 +1,9 @@
1
1
  import { a as styled } from "../../styledComponentsInterop-Cs5CCPRy.mjs";
2
2
  import { n as Stack, t as HStack } from "../../Stack-Bzom2BTR.mjs";
3
- import { t as LoadingShimmer } from "../../LoadingShimmer-oPIv2ESr.mjs";
4
- import { t as Card_default } from "../../CardV2-CrV6eEQb.mjs";
5
- import { h as Table, m as TableHeaderCell, n as TableBody, p as TableRow, r as TableHead, s as TableCell } from "../../Table-DPi4Dt5H.mjs";
6
- import { n as PageHeaderContainer } from "../../PageHeader-7_Hf6rHl.mjs";
3
+ import { t as LoadingShimmer } from "../../LoadingShimmer-BVVdBeN-.mjs";
4
+ import { t as Card_default } from "../../CardV2-DO-8COfu.mjs";
5
+ import { h as Table, m as TableHeaderCell, n as TableBody, p as TableRow, r as TableHead, s as TableCell } from "../../Table-9mNn8Q-d.mjs";
6
+ import { n as PageHeaderContainer } from "../../PageHeader-6KvtGED-.mjs";
7
7
  import { Color, Spacing } from "@persona/design-tokens";
8
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
9
  //#region src/patterns/containers.tsx
@@ -1,5 +1,6 @@
1
1
  import { a as styled } from "../../styledComponentsInterop-Cs5CCPRy.mjs";
2
2
  import { fadeIn, rotate } from "../../variables/keyframes.mjs";
3
+ import "../../variables/transitions.mjs";
3
4
  import { Color } from "@persona/design-tokens";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
5
6
  //#region src/patterns/LayoutLoadingSpinner/LayoutLoadingSpinner.tsx
@@ -9,7 +10,8 @@ const Container = styled.div`
9
10
  justify-content: center;
10
11
  height: 100%;
11
12
  width: 100%;
12
- animation: ${fadeIn} 1s;
13
+ /* Waits 500ms so a fast load never flashes a spinner. */
14
+ animation: ${fadeIn} ${"200ms"} ${"cubic-bezier(0, 0, 0.2, 1)"} 500ms backwards;
13
15
  `;
14
16
  const VisuallyHidden = styled.span`
15
17
  position: absolute;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/patterns/LayoutLoadingSpinner/LayoutLoadingSpinner.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport { Color } from '@persona/design-tokens';\n\nimport { fadeIn, rotate } from '#src/variables/keyframes';\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n animation: ${fadeIn} 1s;\n`;\n\nconst VisuallyHidden = styled.span`\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n`;\n\nconst Ring = styled.svg`\n display: block;\n border-radius: 50%;\n animation: ${rotate} 0.9s linear infinite;\n`;\n\nconst RingStroke = styled.circle`\n stroke: ${Color.PrimaryPurple};\n stroke-dasharray: 166;\n stroke-dashoffset: 110;\n stroke-linecap: round;\n`;\n\n/**\n * Centered 120px loading ring that fills its container. Use as the loading state for a page or\n * embedded app when no layout-specific shimmer exists.\n */\nexport const LayoutLoadingSpinner = () => (\n <Container role='status' aria-label='loading spinner'>\n <VisuallyHidden>Loading...</VisuallyHidden>\n <Ring viewBox='0 0 52 52' width={120} height={120} aria-hidden='true'>\n <RingStroke cx='26' cy='26' r='25' fill='none' />\n </Ring>\n </Container>\n);\n"],"mappings":";;;;;AAMA,MAAM,YAAY,OAAO,GAAG;;;;;;eAMb,OAAO;;AAGtB,MAAM,iBAAiB,OAAO,IAAI;;;;;;;;AASlC,MAAM,OAAO,OAAO,GAAG;;;eAGR,OAAO;;AAGtB,MAAM,aAAa,OAAO,MAAM;YACpB,MAAM,cAAc;;;;;;;;;AAUhC,MAAa,6BACX,qBAAC,WAAD;CAAW,MAAK;CAAS,cAAW;WAApC,CACE,oBAAC,gBAAD,EAAA,UAAgB,cAA2B,CAAA,EAC3C,oBAAC,MAAD;EAAM,SAAQ;EAAY,OAAO;EAAK,QAAQ;EAAK,eAAY;YAC7D,oBAAC,YAAD;GAAY,IAAG;GAAK,IAAG;GAAK,GAAE;GAAK,MAAK;GAAS,CAAA;EAC5C,CAAA,CACG"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/patterns/LayoutLoadingSpinner/LayoutLoadingSpinner.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport { Color } from '@persona/design-tokens';\n\nimport { fadeIn, rotate } from '#src/variables/keyframes';\nimport { TransitionDuration, TransitionEasing } from '#src/variables/transitions';\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n /* Waits 500ms so a fast load never flashes a spinner. */\n animation: ${fadeIn} ${TransitionDuration.Fast} ${TransitionEasing.Enter} 500ms backwards;\n`;\n\nconst VisuallyHidden = styled.span`\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n`;\n\nconst Ring = styled.svg`\n display: block;\n border-radius: 50%;\n animation: ${rotate} 0.9s linear infinite;\n`;\n\nconst RingStroke = styled.circle`\n stroke: ${Color.PrimaryPurple};\n stroke-dasharray: 166;\n stroke-dashoffset: 110;\n stroke-linecap: round;\n`;\n\n/**\n * Centered 120px loading ring that fills its container. Use as the loading state for a page or\n * embedded app when no layout-specific shimmer exists.\n */\nexport const LayoutLoadingSpinner = () => (\n <Container role='status' aria-label='loading spinner'>\n <VisuallyHidden>Loading...</VisuallyHidden>\n <Ring viewBox='0 0 52 52' width={120} height={120} aria-hidden='true'>\n <RingStroke cx='26' cy='26' r='25' fill='none' />\n </Ring>\n </Container>\n);\n"],"mappings":";;;;;;AAOA,MAAM,YAAY,OAAO,GAAG;;;;;;;eAOb,OAAO,GAAA,QAA2B,GAAA,6BAA0B;;AAG3E,MAAM,iBAAiB,OAAO,IAAI;;;;;;;;AASlC,MAAM,OAAO,OAAO,GAAG;;;eAGR,OAAO;;AAGtB,MAAM,aAAa,OAAO,MAAM;YACpB,MAAM,cAAc;;;;;;;;;AAUhC,MAAa,6BACX,qBAAC,WAAD;CAAW,MAAK;CAAS,cAAW;WAApC,CACE,oBAAC,gBAAD,EAAA,UAAgB,cAA2B,CAAA,EAC3C,oBAAC,MAAD;EAAM,SAAQ;EAAY,OAAO;EAAK,QAAQ;EAAK,eAAY;YAC7D,oBAAC,YAAD;GAAY,IAAG;GAAK,IAAG;GAAK,GAAE;GAAK,MAAK;GAAS,CAAA;EAC5C,CAAA,CACG"}
@@ -1,2 +1,2 @@
1
- import { a as Section, i as Container, n as SingleColumnLayout, r as Backdrop, t as SplitColumnLayout } from "../../PageLayout-DjtGrvJa.mjs";
1
+ import { a as Section, i as Container, n as SingleColumnLayout, r as Backdrop, t as SplitColumnLayout } from "../../PageLayout-CPiVnS_r.mjs";
2
2
  export { Backdrop, Container, Section, SingleColumnLayout, SplitColumnLayout };
@@ -1,8 +1,8 @@
1
1
  import { a as styled } from "../../styledComponentsInterop-Cs5CCPRy.mjs";
2
2
  import { semanticColor } from "../../lib/semanticColor.mjs";
3
3
  import { t as HStack } from "../../Stack-Bzom2BTR.mjs";
4
- import { n as Button } from "../../IconButton-DxHB2g80.mjs";
5
- import { i as Modal_default } from "../../Modal-De5_bPJ_.mjs";
4
+ import { n as Button } from "../../IconButton-Bj1fry_K.mjs";
5
+ import { i as Modal_default } from "../../Modal-CiPFqr0L.mjs";
6
6
  import { t as ProgressIndicator } from "../../ProgressIndicator-zt3ndT9U.mjs";
7
7
  import { useState } from "react";
8
8
  import { Color, Spacing } from "@persona/design-tokens";
@@ -1,4 +1,4 @@
1
- import { d as FilterRuleValue, u as FilterRule } from "./types-DLnCkvTt.mjs";
1
+ import { d as FilterRuleValue, u as FilterRule } from "./types-BJqmRXFV.mjs";
2
2
 
3
3
  //#region src/components/DataTable/TableControls/FiltersV2/relative-date-label.d.ts
4
4
  /**
@@ -106,6 +106,20 @@ type FilterConditionOperator = {
106
106
  operator: FilterOperator;
107
107
  label: string;
108
108
  isComplete?: (value: FilterRuleValue) => boolean;
109
+ /**
110
+ * Optional validation for the value the user has entered. Return an error
111
+ * message to reject the value, or `undefined` to accept it.
112
+ *
113
+ * While it returns a message, the rule counts as incomplete: the pill is not
114
+ * applied, the value control keeps what the user typed, and the Float,
115
+ * Integer and String controls show the message below the input in the error
116
+ * state (red border, `aria-invalid`). The message clears once the value is
117
+ * accepted.
118
+ *
119
+ * Not called for an empty value (`null`, `''` or an empty array): an empty
120
+ * rule is incomplete but not invalid, so it shows no error.
121
+ */
122
+ validate?: (value: FilterRuleValue) => string | undefined;
109
123
  } & ({
110
124
  valueType: 'string';
111
125
  defaultValue?: string;
@@ -200,4 +214,4 @@ declare const EMPTY_FILTER_STATE: FilterStateV2;
200
214
  declare function isEmptyState(state: FilterStateV2): boolean;
201
215
  //#endregion
202
216
  export { FilterConditionOperator as a, FilterFieldType as c, FilterRuleValue as d, FilterRuleValueChange as f, isEmptyState as g, TopLevelFilterRule as h, EMPTY_FILTER_STATE as i, FilterOperator as l, FilterStateV2 as m, CompoundExpression as n, FilterField as o, FilterSize as p, DateRangeFilterValue as r, FilterFieldSource as s, AndGroup as t, FilterRule as u };
203
- //# sourceMappingURL=types-DLnCkvTt.d.mts.map
217
+ //# sourceMappingURL=types-BJqmRXFV.d.mts.map
@@ -1,4 +1,4 @@
1
- import { d as FilterRuleValue, f as FilterRuleValueChange, l as FilterOperator, o as FilterField, u as FilterRule } from "./types-DLnCkvTt.mjs";
1
+ import { d as FilterRuleValue, f as FilterRuleValueChange, l as FilterOperator, o as FilterField, u as FilterRule } from "./types-BJqmRXFV.mjs";
2
2
  import { ReactElement } from "react";
3
3
 
4
4
  //#region src/components/DataTable/TableControls/FiltersV2/value-controls/types.d.ts
@@ -32,6 +32,12 @@ interface ValueControlProps {
32
32
  onCommit?: () => void;
33
33
  /** Aria label wired to the popover's labeling. */
34
34
  ariaLabel?: string;
35
+ /**
36
+ * Validation error for the current value. The Float, Integer and String
37
+ * controls show it below the input and put the input in its error state.
38
+ * `resolveValueControl` fills it from the condition operator's `validate`.
39
+ */
40
+ errorMessage?: string;
35
41
  /** Optional external trigger that opens dropdown-backed value controls directly. */
36
42
  trigger?: ReactElement;
37
43
  /**
@@ -44,4 +50,4 @@ interface ValueControlProps {
44
50
  }
45
51
  //#endregion
46
52
  export { ValueControlProps as t };
47
- //# sourceMappingURL=types-CqcbWyUY.d.mts.map
53
+ //# sourceMappingURL=types-BOsCi-kZ.d.mts.map
@@ -1,4 +1,4 @@
1
- import { l as MenuItemProps } from "./Menu-D6OrKCTC.mjs";
1
+ import { l as MenuItemProps } from "./Menu-DviYNrFd.mjs";
2
2
  import { o as StickerProps } from "./Sticker-CLvRB8V5.mjs";
3
3
  import { ReactNode } from "react";
4
4
  import { Column, DeepKeys, FilterFnOption, Header, RowData, SortingState, Table } from "@tanstack/react-table";
@@ -177,4 +177,4 @@ type BulkAction = {
177
177
  };
178
178
  //#endregion
179
179
  export { RowAction as C, RowDataWithTourTarget as D, RowDataWithSubrowsToAlwaysShowIds as E, SortProps as O, RenderValueStickerFormatConfig as S, RowDataWithSubrows as T, DataTableColumns as _, DataTableColumnBaseFormat as a, DatetimeConfig as b, DataTableColumnDatetimeFormat as c, DataTableColumnImageFormat as d, DataTableColumnNumberFormat as f, DataTableColumnURLFormat as g, DataTableColumnStringFormat as h, ColumnConfig as i, StickerMapping as k, DataTableColumnFormat as l, DataTableColumnStickerFormat as m, ClientFilterConfig as n, DataTableColumnCheckboxFormat as o, DataTableColumnPiiFormat as p, ClientFilterType as r, DataTableColumnDateFormat as s, BulkAction as t, DataTableColumnIDFormat as u, DataTableVariables as v, RowDataWithDetails as w, HeadlessFilterConfig as x, DateConfig as y };
180
- //# sourceMappingURL=types-BiqzeNsa.d.mts.map
180
+ //# sourceMappingURL=types-Dws2XDz2.d.mts.map
@@ -1,4 +1,4 @@
1
- import { n as ComboboxProps } from "./Combobox-CIKqTYZt.mjs";
1
+ import { n as ComboboxProps } from "./Combobox-DbcSss15.mjs";
2
2
  import { n as DateRange } from "./DateRangePicker-DlHC2q--.mjs";
3
3
  import { ReactNode } from "react";
4
4
  import { DateValue } from "@internationalized/date";
@@ -92,4 +92,4 @@ interface FilterTypeDefinition<TFilter extends BaseFilterConfig = FilterConfig>
92
92
  type FilterTypeResolver<TFilter extends BaseFilterConfig = FilterConfig> = (config: TFilter) => FilterTypeDefinition<TFilter> | undefined;
93
93
  //#endregion
94
94
  export { ComboboxFilterConfig as a, FilterRenderOptions as c, InputFilterConfig as d, MultiSelectFilterConfig as f, BaseFilterConfig as i, FilterTypeDefinition as l, AttributeColumn as n, DateRangeFilterConfig as o, SelectFilterConfig as p, BaseActiveFilter as r, FilterConfig as s, ActiveFilter as t, FilterTypeResolver as u };
95
- //# sourceMappingURL=types-BEdERA4v.d.mts.map
95
+ //# sourceMappingURL=types-NO2GRlM-.d.mts.map
package/dist/types4.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as FilterConditionOperator, c as FilterFieldType, d as FilterRuleValue, f as FilterRuleValueChange, g as isEmptyState, h as TopLevelFilterRule, i as EMPTY_FILTER_STATE, l as FilterOperator, m as FilterStateV2, n as CompoundExpression, o as FilterField, p as FilterSize, r as DateRangeFilterValue, s as FilterFieldSource, t as AndGroup, u as FilterRule } from "./types-DLnCkvTt.mjs";
1
+ import { a as FilterConditionOperator, c as FilterFieldType, d as FilterRuleValue, f as FilterRuleValueChange, g as isEmptyState, h as TopLevelFilterRule, i as EMPTY_FILTER_STATE, l as FilterOperator, m as FilterStateV2, n as CompoundExpression, o as FilterField, p as FilterSize, r as DateRangeFilterValue, s as FilterFieldSource, t as AndGroup, u as FilterRule } from "./types-BJqmRXFV.mjs";
2
2
  export { AndGroup, CompoundExpression, DateRangeFilterValue, EMPTY_FILTER_STATE, FilterConditionOperator, FilterField, FilterFieldSource, FilterFieldType, FilterOperator, FilterRule, FilterRuleValue, FilterRuleValueChange, FilterSize, FilterStateV2, TopLevelFilterRule, isEmptyState };
package/dist/types5.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as ComboboxFilterConfig, c as FilterRenderOptions, d as InputFilterConfig, f as MultiSelectFilterConfig, i as BaseFilterConfig, l as FilterTypeDefinition, n as AttributeColumn, o as DateRangeFilterConfig, p as SelectFilterConfig, r as BaseActiveFilter, s as FilterConfig, t as ActiveFilter, u as FilterTypeResolver } from "./types-BEdERA4v.mjs";
1
+ import { a as ComboboxFilterConfig, c as FilterRenderOptions, d as InputFilterConfig, f as MultiSelectFilterConfig, i as BaseFilterConfig, l as FilterTypeDefinition, n as AttributeColumn, o as DateRangeFilterConfig, p as SelectFilterConfig, r as BaseActiveFilter, s as FilterConfig, t as ActiveFilter, u as FilterTypeResolver } from "./types-NO2GRlM-.mjs";
2
2
  export { ActiveFilter, AttributeColumn, BaseActiveFilter, BaseFilterConfig, ComboboxFilterConfig, DateRangeFilterConfig, FilterConfig, FilterRenderOptions, FilterTypeDefinition, FilterTypeResolver, InputFilterConfig, MultiSelectFilterConfig, SelectFilterConfig };
package/dist/types6.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { t as ValueControlProps } from "./types-CqcbWyUY.mjs";
1
+ import { t as ValueControlProps } from "./types-BOsCi-kZ.mjs";
2
2
  export { ValueControlProps };
@@ -1,4 +1,4 @@
1
- import { m as FilterStateV2 } from "./types-DLnCkvTt.mjs";
1
+ import { m as FilterStateV2 } from "./types-BJqmRXFV.mjs";
2
2
 
3
3
  //#region src/components/DataTable/TableControls/FiltersV2/url-state.d.ts
4
4
  /**
@@ -39,4 +39,4 @@ declare function applyFilterStateToSearchParams(params: URLSearchParams, state:
39
39
  declare function decodeFilterStateFromString(raw: string | null | undefined): FilterStateV2 | null;
40
40
  //#endregion
41
41
  export { decodeFilterStateFromUrl as a, decodeFilterStateFromString as i, UrlStateCodecResult as n, encodeFilterStateToUrlParam as o, applyFilterStateToSearchParams as r, FILTER_STATE_URL_PARAM as t };
42
- //# sourceMappingURL=url-state-CXUuK3_r.d.mts.map
42
+ //# sourceMappingURL=url-state-CXPmXzIZ.d.mts.map
@@ -1,2 +1,2 @@
1
- import { a as decodeFilterStateFromUrl, i as decodeFilterStateFromString, n as UrlStateCodecResult, o as encodeFilterStateToUrlParam, r as applyFilterStateToSearchParams, t as FILTER_STATE_URL_PARAM } from "./url-state-CXUuK3_r.mjs";
1
+ import { a as decodeFilterStateFromUrl, i as decodeFilterStateFromString, n as UrlStateCodecResult, o as encodeFilterStateToUrlParam, r as applyFilterStateToSearchParams, t as FILTER_STATE_URL_PARAM } from "./url-state-CXPmXzIZ.mjs";
2
2
  export { FILTER_STATE_URL_PARAM, UrlStateCodecResult, applyFilterStateToSearchParams, decodeFilterStateFromString, decodeFilterStateFromUrl, encodeFilterStateToUrlParam };
@@ -0,0 +1,30 @@
1
+ import { ChartColorMode, ChartPalette, ChartSeriesColorInput } from "./chartColors.mjs";
2
+ import { Color } from "@persona/design-tokens";
3
+
4
+ //#region src/components/Chart/useChartColors.d.ts
5
+ /** @experimental */
6
+ interface ChartColors {
7
+ /** The colour mode the palettes were read for. */
8
+ mode: ChartColorMode;
9
+ /** The ordered colours of the selected palette for that mode. */
10
+ colors: readonly Color[];
11
+ /** {@link resolveSeriesColors} bound to the selected palette and mode. */
12
+ resolve: <K extends string>(series: readonly ChartSeriesColorInput<K>[]) => Record<K, Color>;
13
+ }
14
+ /**
15
+ * The chart colours for the current PDS colour mode. Reads the charting palettes `PDSProvider` /
16
+ * `ColorModeScope` install on the styled-components theme, so charts follow dark mode with no
17
+ * extra setup; without a PDS colour mode it returns the light `ChartingColors`.
18
+ *
19
+ * ```tsx
20
+ * const { resolve } = useChartColors();
21
+ * const colors = resolve([{ key: 'approved' }, { key: 'declined', color: chartColor(Color.CoreRed600) }]);
22
+ * <Bar dataKey='approved' fill={colors.approved} />
23
+ * ```
24
+ *
25
+ * @experimental
26
+ */
27
+ declare function useChartColors(palette?: ChartPalette): ChartColors;
28
+ //#endregion
29
+ export { ChartColors, useChartColors };
30
+ //# sourceMappingURL=useChartColors.d.mts.map
@@ -0,0 +1,22 @@
1
+ //#region src/components/Chart/useChartSeriesVisibility.d.ts
2
+ /** @experimental */
3
+ interface ChartSeriesVisibility<K extends string> {
4
+ /** Keys of the hidden series, in series order: pass to `ChartLegend`'s `hidden`. */
5
+ hidden: K[];
6
+ /** Pass to `ChartLegend`'s `onToggle`. */
7
+ toggle: (key: K) => void;
8
+ isHidden: (key: K) => boolean;
9
+ /** True when every series is hidden; the plot keeps its size and axes. */
10
+ allHidden: boolean;
11
+ }
12
+ /**
13
+ * Show/hide state for a chart's series, driven by a {@link ChartLegend}. Every series may be hidden.
14
+ * Hide a Recharts series with its `hide` prop (`<Bar hide={isHidden(key)} />`) rather than
15
+ * unmounting it, so colours and axes stay put.
16
+ *
17
+ * @experimental
18
+ */
19
+ declare function useChartSeriesVisibility<K extends string>(keys: readonly K[], initialHidden?: readonly K[]): ChartSeriesVisibility<K>;
20
+ //#endregion
21
+ export { ChartSeriesVisibility, useChartSeriesVisibility };
22
+ //# sourceMappingURL=useChartSeriesVisibility.d.mts.map