@persona/design-system 0.8.2 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (549) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/Accordion.d.mts +1 -1
  3. package/dist/AccordionItem.d.mts +1 -1
  4. package/dist/{Action-C6yvIekn.d.mts → Action-BleGvmsy.d.mts} +3 -3
  5. package/dist/Action.d.mts +1 -1
  6. package/dist/AdvancedFilterRuleRow.d.mts +2 -2
  7. package/dist/AdvancedFilterRulesPopover.d.mts +2 -2
  8. package/dist/ArrayValueControl.d.mts +1 -1
  9. package/dist/Attribute.d.mts +4 -4
  10. package/dist/{Badge-uY8l1p1R.mjs → Badge-BYa-iqNE.mjs} +2 -2
  11. package/dist/{Badge-uY8l1p1R.mjs.map → Badge-BYa-iqNE.mjs.map} +1 -1
  12. package/dist/BooleanValueControl.d.mts +1 -1
  13. package/dist/{Breadcrumb-Tjk9FyiF.d.mts → Breadcrumb-CEHEUe8l.d.mts} +1 -1
  14. package/dist/Breadcrumb.d.mts +1 -1
  15. package/dist/{Breadcrumbs-DSCbZmAx.d.mts → Breadcrumbs-BQ-Gj6UV.d.mts} +2 -2
  16. package/dist/{Breadcrumbs-EQm5iiRA.mjs → Breadcrumbs-BmlndU4V.mjs} +8 -8
  17. package/dist/{Breadcrumbs-EQm5iiRA.mjs.map → Breadcrumbs-BmlndU4V.mjs.map} +1 -1
  18. package/dist/Breadcrumbs.d.mts +1 -1
  19. package/dist/{Button-22DkIpYp.d.mts → Button-Dx7mHjWC.d.mts} +5 -5
  20. package/dist/Button.d.mts +1 -1
  21. package/dist/{Calendar-DANGQNlH.d.mts → Calendar-BvsTQ3e1.d.mts} +1 -1
  22. package/dist/Calendar.d.mts +1 -1
  23. package/dist/CalendarBase.d.mts +1 -1
  24. package/dist/{Card-DQE1J3gk.d.mts → Card-BPY0OU7e.d.mts} +4 -4
  25. package/dist/Card.d.mts +1 -1
  26. package/dist/Card2.d.mts +1 -1
  27. package/dist/CardGrouping.d.mts +38 -0
  28. package/dist/{CardV2-Ds6e577k.mjs → CardV2-Cq4QODeE.mjs} +11 -11
  29. package/dist/{CardV2-Ds6e577k.mjs.map → CardV2-Cq4QODeE.mjs.map} +1 -1
  30. package/dist/{Checkbox-CsJlWz-r.d.mts → Checkbox-CVa8WOf2.d.mts} +1 -1
  31. package/dist/{Checkbox-BQC_SmBt.mjs → Checkbox-Cttn1t8T.mjs} +10 -6
  32. package/dist/{Checkbox-BQC_SmBt.mjs.map → Checkbox-Cttn1t8T.mjs.map} +1 -1
  33. package/dist/Checkbox.d.mts +1 -1
  34. package/dist/{CheckboxGroupField-DjKp63Dr.d.mts → CheckboxGroupField-BpHN_2QP.d.mts} +3 -3
  35. package/dist/CheckboxGroupField.d.mts +1 -1
  36. package/dist/ChoicesValueControl.d.mts +1 -1
  37. package/dist/{Combobox-D1iXiYGV.d.mts → Combobox-C4C2P8lF.d.mts} +3 -3
  38. package/dist/{Combobox-MCaDc7h6.mjs → Combobox-CsXnJKvB.mjs} +73 -29
  39. package/dist/Combobox-CsXnJKvB.mjs.map +1 -0
  40. package/dist/Combobox.d.mts +2 -2
  41. package/dist/{ComboboxBase-DXhu2YSh.d.mts → ComboboxBase-2nVpt8oj.d.mts} +7 -7
  42. package/dist/ComboboxBase.d.mts +1 -1
  43. package/dist/{ComboboxMultiSelect-BSyJc46m.d.mts → ComboboxMultiSelect-BvJ--m6z.d.mts} +2 -2
  44. package/dist/ComboboxMultiSelect.d.mts +1 -1
  45. package/dist/{ComboboxSingleSelect-Dg_6h4iB.d.mts → ComboboxSingleSelect-BWrnRA2x.d.mts} +5 -4
  46. package/dist/ComboboxSingleSelect.d.mts +1 -1
  47. package/dist/{CompactBar-CVGNq7Zu.d.mts → CompactBar-CmTT9iuT.d.mts} +3 -3
  48. package/dist/CompactBar.d.mts +1 -1
  49. package/dist/{ConfigFormGroup-CidT_cE9.mjs → ConfigFormGroup-C0orlWwb.mjs} +2 -2
  50. package/dist/{ConfigFormGroup-CidT_cE9.mjs.map → ConfigFormGroup-C0orlWwb.mjs.map} +1 -1
  51. package/dist/{ControlBar-K43YI-LU.d.mts → ControlBar-Cg36sjz3.d.mts} +2 -2
  52. package/dist/ControlBar.d.mts +1 -1
  53. package/dist/DataTable.d.mts +4 -4
  54. package/dist/{DateField-DY3xCygL.d.mts → DateField-BXUuqbnb.d.mts} +2 -2
  55. package/dist/DateField.d.mts +1 -1
  56. package/dist/{DatePicker-C56kJLiX.d.mts → DatePicker-Cmn1vViU.d.mts} +2 -2
  57. package/dist/{DatePicker-CKk6Hnj2.mjs → DatePicker-DQHVCGnP.mjs} +10 -10
  58. package/dist/{DatePicker-CKk6Hnj2.mjs.map → DatePicker-DQHVCGnP.mjs.map} +1 -1
  59. package/dist/DatePicker.d.mts +1 -1
  60. package/dist/{DateRangePicker-C96NKOon.d.mts → DateRangePicker-CKhp9Obv.d.mts} +3 -3
  61. package/dist/DateRangePicker.d.mts +1 -1
  62. package/dist/DateRangeValueControl.d.mts +2 -2
  63. package/dist/DateValueControl.d.mts +1 -1
  64. package/dist/{DropdownButton-B-cYK2oi.mjs → DropdownButton-C9wWnB5w.mjs} +3 -3
  65. package/dist/{DropdownButton-B-cYK2oi.mjs.map → DropdownButton-C9wWnB5w.mjs.map} +1 -1
  66. package/dist/DropdownButton.d.mts +2 -2
  67. package/dist/{DropdownMenu-BwPtzVWg.d.mts → DropdownMenu-BZ62b8Cv.d.mts} +3 -3
  68. package/dist/{DropdownMenu-CedsmO5h.mjs → DropdownMenu-CPE8Q56k.mjs} +2 -2
  69. package/dist/{DropdownMenu-CedsmO5h.mjs.map → DropdownMenu-CPE8Q56k.mjs.map} +1 -1
  70. package/dist/DropdownMenu.d.mts +1 -1
  71. package/dist/{ErrorProps-C-sfKFxK.d.mts → ErrorProps-oCHtJzEB.d.mts} +1 -1
  72. package/dist/ErrorProps.d.mts +1 -1
  73. package/dist/{FieldRegistry-C2eIbP1X.d.mts → FieldRegistry-DAk_3PhH.d.mts} +2 -2
  74. package/dist/FieldRegistry.d.mts +1 -1
  75. package/dist/{FilterBar-BNbMjWDC.d.mts → FilterBar-C7ch6kYM.d.mts} +4 -4
  76. package/dist/FilterBar.d.mts +1 -1
  77. package/dist/FilterPickerMenu.d.mts +2 -2
  78. package/dist/FilterPill.d.mts +1 -1
  79. package/dist/FilterPopover.d.mts +3 -1
  80. package/dist/FloatValueControl.d.mts +6 -5
  81. package/dist/{FormControl-C4CiA0H-.mjs → FormControl-CD_FdAXA.mjs} +4 -4
  82. package/dist/{FormControl-C4CiA0H-.mjs.map → FormControl-CD_FdAXA.mjs.map} +1 -1
  83. package/dist/{FormControl-DICrNHcc.d.mts → FormControl-DX4vtUp6.d.mts} +3 -3
  84. package/dist/FormControl.d.mts +1 -1
  85. package/dist/FormControlLabel.d.mts +2 -2
  86. package/dist/{FormField-D97xQCxF.d.mts → FormField-C80kGAIV.d.mts} +2 -2
  87. package/dist/{FormField-CB0yCMro.mjs → FormField-DjysBTKn.mjs} +15 -15
  88. package/dist/{FormField-CB0yCMro.mjs.map → FormField-DjysBTKn.mjs.map} +1 -1
  89. package/dist/FormField.d.mts +1 -1
  90. package/dist/{Header-Ca554S1F.d.mts → Header-C-a5fL3k.d.mts} +2 -2
  91. package/dist/Header.d.mts +1 -1
  92. package/dist/{HelperTooltip-Dk2eqeC_.d.mts → HelperTooltip-hhMFkKmn.d.mts} +2 -2
  93. package/dist/HelperTooltip.d.mts +1 -1
  94. package/dist/HighlightedText.d.mts +3 -3
  95. package/dist/{HoverCopyableField-CewUtxZl.mjs → HoverCopyableField-Cgu3W31s.mjs} +4 -4
  96. package/dist/{HoverCopyableField-CewUtxZl.mjs.map → HoverCopyableField-Cgu3W31s.mjs.map} +1 -1
  97. package/dist/{I18nContext-DXcImEuM.d.mts → I18nContext-ioYM_vqG.d.mts} +2 -2
  98. package/dist/I18nContext.d.mts +1 -1
  99. package/dist/{IconButton-H5vDZOdo.mjs → IconButton-D4awF770.mjs} +7 -7
  100. package/dist/{IconButton-H5vDZOdo.mjs.map → IconButton-D4awF770.mjs.map} +1 -1
  101. package/dist/{IconButton-Vq0MUaNj.d.mts → IconButton-DJ3L_ZqN.d.mts} +2 -2
  102. package/dist/IconButton.d.mts +1 -1
  103. package/dist/ImageTile.d.mts +1 -1
  104. package/dist/InlineCombobox.d.mts +1 -1
  105. package/dist/InlineInput.d.mts +1 -1
  106. package/dist/{Input-BRe0qyUe.d.mts → Input-D3lXfJHq.d.mts} +4 -4
  107. package/dist/{Input-CY14-YeD.mjs → Input-DD4jzJhK.mjs} +5 -5
  108. package/dist/{Input-CY14-YeD.mjs.map → Input-DD4jzJhK.mjs.map} +1 -1
  109. package/dist/Input.d.mts +1 -1
  110. package/dist/{InputProps-B2ngFfvF.d.mts → InputProps-BU9iiBBz.d.mts} +2 -2
  111. package/dist/InputProps.d.mts +1 -1
  112. package/dist/IntegerValueControl.d.mts +6 -5
  113. package/dist/{Link-BSuXrvTu.mjs → Link-DGZu4J0x.mjs} +4 -4
  114. package/dist/{Link-BSuXrvTu.mjs.map → Link-DGZu4J0x.mjs.map} +1 -1
  115. package/dist/Link.d.mts +1 -1
  116. package/dist/{ListBox-2aYWNlO_.mjs → ListBox-BhWLad_L.mjs} +12 -12
  117. package/dist/{ListBox-2aYWNlO_.mjs.map → ListBox-BhWLad_L.mjs.map} +1 -1
  118. package/dist/{ListBox-DzZY7IFz.d.mts → ListBox-CjGb0mMY.d.mts} +3 -3
  119. package/dist/ListBox.d.mts +1 -1
  120. package/dist/{ListBoxField-DT_-4_Ct.d.mts → ListBoxField-BUkPeLiB.d.mts} +4 -4
  121. package/dist/ListBoxField.d.mts +1 -1
  122. package/dist/LoadingShimmer.d.mts +2 -2
  123. package/dist/{LogicRow-l66qss7_.d.mts → LogicRow-Bt6NPLOd.d.mts} +3 -3
  124. package/dist/LogicRow.d.mts +1 -1
  125. package/dist/MaskedInput.d.mts +2 -2
  126. package/dist/MatchHighlight.d.mts +1 -1
  127. package/dist/{Menu-DQXbnpDB.d.mts → Menu-BMrsN-Jz.d.mts} +4 -4
  128. package/dist/{Menu-Dw6Rcpk6.mjs → Menu-DlN0A5Nb.mjs} +4 -4
  129. package/dist/{Menu-Dw6Rcpk6.mjs.map → Menu-DlN0A5Nb.mjs.map} +1 -1
  130. package/dist/Menu.d.mts +1 -1
  131. package/dist/{Modal-Bz5Rer1b.d.mts → Modal-BoeGuR-h.d.mts} +3 -3
  132. package/dist/{Modal-dpBu2MKp.mjs → Modal-Cs5cZpEr.mjs} +4 -4
  133. package/dist/{Modal-dpBu2MKp.mjs.map → Modal-Cs5cZpEr.mjs.map} +1 -1
  134. package/dist/Modal.d.mts +1 -1
  135. package/dist/{PageHeader-CLO8SMXV.mjs → PageHeader-CCoAJUwJ.mjs} +2 -2
  136. package/dist/{PageHeader-CLO8SMXV.mjs.map → PageHeader-CCoAJUwJ.mjs.map} +1 -1
  137. package/dist/PageHeader.d.mts +2 -2
  138. package/dist/PageLayout-BlCo4hN4.d.mts +16 -0
  139. package/dist/PageLayout-C7ZC7GBA.mjs +132 -0
  140. package/dist/PageLayout-C7ZC7GBA.mjs.map +1 -0
  141. package/dist/PageLayout.d.mts +2 -16
  142. package/dist/PageLayoutFrame--HlvI4Pp.d.mts +28 -0
  143. package/dist/PageLayoutFrame.d.mts +2 -28
  144. package/dist/{PageSelector--kFA7Xt6.d.mts → PageSelector-BmevrorJ.d.mts} +3 -3
  145. package/dist/PageSelector.d.mts +1 -1
  146. package/dist/{Pagination-CglxJr3f.d.mts → Pagination-C67fsrxl.d.mts} +2 -2
  147. package/dist/{Pagination-BEddsarh.mjs → Pagination-Du2CPW2l.mjs} +5 -5
  148. package/dist/{Pagination-BEddsarh.mjs.map → Pagination-Du2CPW2l.mjs.map} +1 -1
  149. package/dist/Pagination.d.mts +1 -1
  150. package/dist/{Pii-Ct7yDY7d.mjs → Pii-CFVWZ_Yx.mjs} +2 -2
  151. package/dist/{Pii-Ct7yDY7d.mjs.map → Pii-CFVWZ_Yx.mjs.map} +1 -1
  152. package/dist/{PillShell-CvJzkRFh.d.mts → PillShell-jr6OyAd3.d.mts} +2 -2
  153. package/dist/PillShell.d.mts +1 -1
  154. package/dist/{Popover-532iYFek.mjs → Popover-DewrGOJB.mjs} +2 -2
  155. package/dist/{Popover-532iYFek.mjs.map → Popover-DewrGOJB.mjs.map} +1 -1
  156. package/dist/{ProgressIndicator-Cleq0Tfb.d.mts → ProgressIndicator-CdhC2LVI.d.mts} +1 -1
  157. package/dist/{ProgressIndicator-STyTM0Hq.mjs → ProgressIndicator-xV5Cl2Bw.mjs} +3 -3
  158. package/dist/{ProgressIndicator-STyTM0Hq.mjs.map → ProgressIndicator-xV5Cl2Bw.mjs.map} +1 -1
  159. package/dist/ProgressIndicator.d.mts +1 -1
  160. package/dist/{PseudoClassProps-B2R2dyr3.d.mts → PseudoClassProps-CverE9Ni.d.mts} +1 -1
  161. package/dist/PseudoClassProps.d.mts +1 -1
  162. package/dist/{Radio-BtomkCkL.mjs → Radio-i7AEQZHb.mjs} +4 -4
  163. package/dist/{Radio-BtomkCkL.mjs.map → Radio-i7AEQZHb.mjs.map} +1 -1
  164. package/dist/{RadioGroup-B6UaoJRd.mjs → RadioGroup-B0KcQpS7.mjs} +2 -2
  165. package/dist/{RadioGroup-B6UaoJRd.mjs.map → RadioGroup-B0KcQpS7.mjs.map} +1 -1
  166. package/dist/{RadioGroup-B3B4PCz6.d.mts → RadioGroup-CDEfCg-b.d.mts} +1 -1
  167. package/dist/RadioGroup.d.mts +1 -1
  168. package/dist/{RangeCalendar-C24q-nvR.d.mts → RangeCalendar-BOt59kTG.d.mts} +2 -2
  169. package/dist/RangeCalendar.d.mts +1 -1
  170. package/dist/RangeCalendarPresets.d.mts +1 -1
  171. package/dist/{RouterContext-BhPPG7d3.d.mts → RouterContext-D7HBESqO.d.mts} +2 -2
  172. package/dist/RouterContext.d.mts +1 -1
  173. package/dist/{RouterLink-IDO10cDE.d.mts → RouterLink-dppNWLgP.d.mts} +2 -2
  174. package/dist/RouterLink.d.mts +1 -1
  175. package/dist/RuleEditorFields.d.mts +2 -2
  176. package/dist/RulesPill.d.mts +1 -1
  177. package/dist/{SearchInput-7pBMxhuN.d.mts → SearchInput-B7JYHJZI.d.mts} +2 -2
  178. package/dist/SearchInput.d.mts +1 -1
  179. package/dist/SectionHeading.d.mts +1 -1
  180. package/dist/{SegmentedControl-BNVwf7nL.mjs → SegmentedControl-B2_bS806.mjs} +2 -2
  181. package/dist/{SegmentedControl-BNVwf7nL.mjs.map → SegmentedControl-B2_bS806.mjs.map} +1 -1
  182. package/dist/{SegmentedControl-B9yo9yMy.d.mts → SegmentedControl-C_7mTcuL.d.mts} +1 -1
  183. package/dist/SegmentedControl.d.mts +1 -1
  184. package/dist/{Select-D7_npfZr.d.mts → Select-BpAA5ETS.d.mts} +3 -3
  185. package/dist/{Select-DD7mFvR8.mjs → Select-oVJ0uLa7.mjs} +8 -8
  186. package/dist/{Select-DD7mFvR8.mjs.map → Select-oVJ0uLa7.mjs.map} +1 -1
  187. package/dist/Select.d.mts +1 -1
  188. package/dist/SingleColumnLayout-ByWxiD7d.d.mts +16 -0
  189. package/dist/SingleColumnLayout.d.mts +2 -16
  190. package/dist/SmartTextInput.d.mts +6 -6
  191. package/dist/SmartTextInputField.d.mts +2 -2
  192. package/dist/SmartTextInputFunctionDialog.d.mts +4 -4
  193. package/dist/SmartTextInputListbox.d.mts +2 -2
  194. package/dist/SmartTextInputPopover.d.mts +2 -2
  195. package/dist/{Spinner-uVZyOh1T.mjs → Spinner-0Vqw_68r.mjs} +2 -2
  196. package/dist/{Spinner-uVZyOh1T.mjs.map → Spinner-0Vqw_68r.mjs.map} +1 -1
  197. package/dist/SplitColumnLayout-DYyJabQ3.d.mts +19 -0
  198. package/dist/SplitColumnLayout.d.mts +2 -19
  199. package/dist/{Stack-opuYfQvc.d.mts → Stack-DpWl6orU.d.mts} +2 -2
  200. package/dist/Stack.d.mts +1 -1
  201. package/dist/{StatusIndicator-akDwBiBW.mjs → StatusIndicator-QsVgjRrt.mjs} +3 -3
  202. package/dist/{StatusIndicator-akDwBiBW.mjs.map → StatusIndicator-QsVgjRrt.mjs.map} +1 -1
  203. package/dist/{Sticker-rxBNVYlX.d.mts → Sticker-C260e6kl.d.mts} +5 -5
  204. package/dist/{Sticker-DdhSpTcV.mjs → Sticker-CUqHa9Mo.mjs} +5 -5
  205. package/dist/{Sticker-DdhSpTcV.mjs.map → Sticker-CUqHa9Mo.mjs.map} +1 -1
  206. package/dist/Sticker.d.mts +1 -1
  207. package/dist/StringValueControl.d.mts +1 -1
  208. package/dist/Tab.d.mts +2 -2
  209. package/dist/{TabBar-DBOPWUUa.mjs → TabBar-w_gxXSwA.mjs} +5 -5
  210. package/dist/{TabBar-DBOPWUUa.mjs.map → TabBar-w_gxXSwA.mjs.map} +1 -1
  211. package/dist/{Table-Bt7zAlgQ.d.mts → Table-BtNYI6QX.d.mts} +1 -1
  212. package/dist/{Table--o4ZLRbb.mjs → Table-PbYGf3PG.mjs} +8 -8
  213. package/dist/{Table--o4ZLRbb.mjs.map → Table-PbYGf3PG.mjs.map} +1 -1
  214. package/dist/Table.d.mts +1 -1
  215. package/dist/{TableBody-9AYpXi2y.d.mts → TableBody-DQ7pivxP.d.mts} +1 -1
  216. package/dist/TableBody.d.mts +1 -1
  217. package/dist/{TableBox-BGabyY7E.mjs → TableBox-DMYLTIpr.mjs} +13 -13
  218. package/dist/{TableBox-BGabyY7E.mjs.map → TableBox-DMYLTIpr.mjs.map} +1 -1
  219. package/dist/TableBox.d.mts +2 -2
  220. package/dist/{TableBoxCell-6ovTrboM.d.mts → TableBoxCell-DwAOA-oO.d.mts} +7 -7
  221. package/dist/TableBoxCell.d.mts +1 -1
  222. package/dist/{TableBoxField-mGTYb-Bz.d.mts → TableBoxField-Bdj_nY7j.d.mts} +5 -5
  223. package/dist/TableBoxField.d.mts +1 -1
  224. package/dist/{TableBoxRow-56QatuNm.d.mts → TableBoxRow-5WBwyAyn.d.mts} +3 -3
  225. package/dist/TableBoxRow.d.mts +1 -1
  226. package/dist/{TableBoxRowActions-9rR-k_4H.d.mts → TableBoxRowActions-Dq_Z2ted.d.mts} +2 -2
  227. package/dist/TableBoxRowActions.d.mts +1 -1
  228. package/dist/{TableCell-WD0ultKh.d.mts → TableCell-DXBHZ52E.d.mts} +3 -3
  229. package/dist/TableCell.d.mts +1 -1
  230. package/dist/{TableControls-B5UGCoO-.mjs → TableControls-C1MF2JvY.mjs} +390 -144
  231. package/dist/TableControls-C1MF2JvY.mjs.map +1 -0
  232. package/dist/{TableControls-DVO-obFo.d.mts → TableControls-Cw7LDHWj.d.mts} +3 -3
  233. package/dist/TableControls.d.mts +1 -1
  234. package/dist/{TableControlsContext-BDl9k4o4.d.mts → TableControlsContext-DgoZhMpQ.d.mts} +2 -2
  235. package/dist/TableControlsContext.d.mts +1 -1
  236. package/dist/{TableHead-DqcFsWpz.d.mts → TableHead-BGUg_aXc.d.mts} +1 -1
  237. package/dist/TableHead.d.mts +1 -1
  238. package/dist/{TableHeaderCell-C1PJHhXZ.d.mts → TableHeaderCell-DcZcMQyR.d.mts} +1 -1
  239. package/dist/TableHeaderCell.d.mts +1 -1
  240. package/dist/{TableLayout-B4qzMWXH.d.mts → TableLayout-CwYQaZlA.d.mts} +1 -1
  241. package/dist/TableLayout.d.mts +1 -1
  242. package/dist/{TableRow-B1yeAiVf.d.mts → TableRow-Dad6_CoD.d.mts} +2 -2
  243. package/dist/TableRow.d.mts +1 -1
  244. package/dist/TableTH.d.mts +1 -1
  245. package/dist/{TableViewConfigurationDropdown-DBdUHK__.d.mts → TableViewConfigurationDropdown-BGuWAarQ.d.mts} +2 -2
  246. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  247. package/dist/{TechnicalSticker-CALVwnrT.mjs → TechnicalSticker-RQ-4_Tdr.mjs} +5 -5
  248. package/dist/{TechnicalSticker-CALVwnrT.mjs.map → TechnicalSticker-RQ-4_Tdr.mjs.map} +1 -1
  249. package/dist/{Text-D4GzsXFA.d.mts → Text-BBMau410.d.mts} +4 -4
  250. package/dist/Text.d.mts +1 -1
  251. package/dist/{TextArea-kOkhZxNR.mjs → TextArea-BaA8H7s7.mjs} +2 -2
  252. package/dist/{TextArea-kOkhZxNR.mjs.map → TextArea-BaA8H7s7.mjs.map} +1 -1
  253. package/dist/{TextArea-BL8BTgwk.d.mts → TextArea-Djd1uT3B.d.mts} +2 -2
  254. package/dist/TextArea.d.mts +1 -1
  255. package/dist/{TextUnderlineTooltip-Sdxqsr6y.d.mts → TextUnderlineTooltip-C4N0bqbh.d.mts} +3 -3
  256. package/dist/TextUnderlineTooltip.d.mts +1 -1
  257. package/dist/Tile.d.mts +1 -1
  258. package/dist/Toast.d.mts +1 -1
  259. package/dist/{Toggle-CZF6iBql.mjs → Toggle-C9cZnajR.mjs} +6 -6
  260. package/dist/{Toggle-CZF6iBql.mjs.map → Toggle-C9cZnajR.mjs.map} +1 -1
  261. package/dist/{Toggle-cUtrUIIO.d.mts → Toggle-EYpW34LO.d.mts} +1 -1
  262. package/dist/Toggle.d.mts +1 -1
  263. package/dist/{Tooltip-CSM977L6.d.mts → Tooltip-Dj-DtGKz.d.mts} +3 -3
  264. package/dist/{Tooltip-B-0VRuKT.mjs → Tooltip-DogEteGl.mjs} +2 -2
  265. package/dist/{Tooltip-B-0VRuKT.mjs.map → Tooltip-DogEteGl.mjs.map} +1 -1
  266. package/dist/Tooltip.d.mts +1 -1
  267. package/dist/{TruncatedText-CCUrvW2a.d.mts → TruncatedText-BDNFUuhG.d.mts} +2 -2
  268. package/dist/VersionHistory.d.mts +1 -1
  269. package/dist/{VersionHistoryItem-DBjL9S5_.d.mts → VersionHistoryItem-iUabmk_y.d.mts} +1 -1
  270. package/dist/VersionHistoryItem.d.mts +1 -1
  271. package/dist/WizardModal.d.mts +2 -2
  272. package/dist/{accordionTitleTypography--GAczLo7.d.mts → accordionTitleTypography-C7VVJvlx.d.mts} +2 -2
  273. package/dist/accordionTitleTypography.d.mts +1 -1
  274. package/dist/{chainTypes-dY6jc22J.d.mts → chainTypes-DT-9j_sG.d.mts} +4 -4
  275. package/dist/{codec-D2uE0_oJ.d.mts → codec-CGj8cwcj.d.mts} +2 -2
  276. package/dist/codec.d.mts +1 -1
  277. package/dist/{color-DuKiTH5t.d.mts → color-BOm5A1Si.d.mts} +2 -2
  278. package/dist/components/Accordion/index.d.mts +1 -1
  279. package/dist/components/Accordion/index.mjs +4 -4
  280. package/dist/components/Attribute/index.mjs +4 -4
  281. package/dist/components/Badge/index.mjs +1 -1
  282. package/dist/components/Banner/index.mjs +3 -3
  283. package/dist/components/BottomPanel/index.mjs +4 -4
  284. package/dist/components/Breadcrumbs/index.d.mts +1 -1
  285. package/dist/components/Breadcrumbs/index.mjs +1 -1
  286. package/dist/components/Button/index.d.mts +2 -2
  287. package/dist/components/Button/index.mjs +1 -1
  288. package/dist/components/ButtonGroup/index.mjs +2 -2
  289. package/dist/components/Card/index.d.mts +2 -2
  290. package/dist/components/CardV2/index.d.mts +1 -1
  291. package/dist/components/CardV2/index.mjs +1 -1
  292. package/dist/components/Checkbox/index.d.mts +1 -1
  293. package/dist/components/Checkbox/index.mjs +1 -1
  294. package/dist/components/CodeHighlight/index.mjs +3 -3
  295. package/dist/components/Combobox/index.d.mts +2 -2
  296. package/dist/components/Combobox/index.mjs +1 -1
  297. package/dist/components/ConfigFormGroup/index.mjs +2 -2
  298. package/dist/components/DataTable/TableControls/index.d.mts +20 -20
  299. package/dist/components/DataTable/TableControls/index.mjs +2 -2
  300. package/dist/components/DataTable/index.mjs +18 -18
  301. package/dist/components/DataTable/index.mjs.map +1 -1
  302. package/dist/components/DataTable/types.d.mts +2 -2
  303. package/dist/components/DatePicker/index.d.mts +5 -5
  304. package/dist/components/DatePicker/index.mjs +1 -1
  305. package/dist/components/DropdownButton/index.mjs +1 -1
  306. package/dist/components/DropdownMenu/index.d.mts +1 -1
  307. package/dist/components/DropdownMenu/index.mjs +1 -1
  308. package/dist/components/FloatingPanel/index.mjs +5 -5
  309. package/dist/components/FormControl/index.d.mts +2 -2
  310. package/dist/components/FormControl/index.mjs +2 -2
  311. package/dist/components/FormField/index.d.mts +5 -5
  312. package/dist/components/FormField/index.mjs +1 -1
  313. package/dist/components/HoverCopyableField/index.mjs +1 -1
  314. package/dist/components/ImageTile/index.mjs +6 -6
  315. package/dist/components/Input/index.d.mts +1 -1
  316. package/dist/components/Input/index.mjs +1 -1
  317. package/dist/components/Link/index.mjs +1 -1
  318. package/dist/components/ListBox/index.d.mts +3 -3
  319. package/dist/components/ListBox/index.mjs +1 -1
  320. package/dist/components/MaskedInput/index.mjs +1 -1
  321. package/dist/components/Menu/index.d.mts +1 -1
  322. package/dist/components/Menu/index.mjs +1 -1
  323. package/dist/components/Modal/index.d.mts +1 -1
  324. package/dist/components/Modal/index.mjs +1 -1
  325. package/dist/components/PageHeader/index.mjs +1 -1
  326. package/dist/components/Pagination/index.d.mts +3 -3
  327. package/dist/components/Pagination/index.mjs +1 -1
  328. package/dist/components/Pii/index.mjs +1 -1
  329. package/dist/components/Popover/index.mjs +1 -1
  330. package/dist/components/ProgressBar/index.mjs +1 -1
  331. package/dist/components/ProgressIndicator/index.d.mts +1 -1
  332. package/dist/components/ProgressIndicator/index.mjs +1 -1
  333. package/dist/components/Radio/index.mjs +1 -1
  334. package/dist/components/RadioGroup/index.d.mts +1 -1
  335. package/dist/components/RadioGroup/index.mjs +1 -1
  336. package/dist/components/RightPanel/index.mjs +2 -2
  337. package/dist/components/SegmentedControl/index.d.mts +1 -1
  338. package/dist/components/SegmentedControl/index.mjs +1 -1
  339. package/dist/components/Select/index.d.mts +1 -1
  340. package/dist/components/Select/index.mjs +1 -1
  341. package/dist/components/Slider/index.mjs +2 -2
  342. package/dist/components/SmartTextInput/index.d.mts +2 -2
  343. package/dist/components/SmartTextInput/index.mjs +9 -8
  344. package/dist/components/SmartTextInput/index.mjs.map +1 -1
  345. package/dist/components/SmartTextInput/parser/method-chain/types.d.mts +1 -1
  346. package/dist/components/SmartTextInput/parser/smart-text/types.d.mts +2 -2
  347. package/dist/components/Spinner/index.mjs +1 -1
  348. package/dist/components/Stack/index.d.mts +1 -1
  349. package/dist/components/StatusIndicator/index.mjs +1 -1
  350. package/dist/components/Sticker/index.d.mts +1 -1
  351. package/dist/components/Sticker/index.mjs +1 -1
  352. package/dist/components/TabBar/index.mjs +1 -1
  353. package/dist/components/Table/index.d.mts +8 -8
  354. package/dist/components/Table/index.mjs +1 -1
  355. package/dist/components/TableBox/index.d.mts +2 -2
  356. package/dist/components/TableBox/index.mjs +1 -1
  357. package/dist/components/TechnicalSticker/index.mjs +1 -1
  358. package/dist/components/Text/index.d.mts +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 +2 -2
  362. package/dist/components/Toast/index.mjs +4 -4
  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/components/VersionHistory/index.d.mts +1 -1
  368. package/dist/components/VersionHistory/index.mjs +7 -7
  369. package/dist/compound-expression.d.mts +1 -1
  370. package/dist/{constants-BiOvZGO5.d.mts → constants-CwzbyAdc.d.mts} +1 -1
  371. package/dist/constants.d.mts +1 -1
  372. package/dist/{createPath-B8EZDtSz.d.mts → createPath-C4jIHe68.d.mts} +2 -2
  373. package/dist/createPath.d.mts +1 -1
  374. package/dist/{date-range-rule-value-DObVM8xO.d.mts → date-range-rule-value-BkbGpLNH.d.mts} +2 -2
  375. package/dist/date-range-rule-value.d.mts +1 -1
  376. package/dist/{date-rule-intent-DhMMe_wq.d.mts → date-rule-intent-zdKP-tW_.d.mts} +3 -3
  377. package/dist/date-rule-intent.d.mts +1 -1
  378. package/dist/display.d.mts +2 -2
  379. package/dist/fieldPickerOptions.d.mts +2 -2
  380. package/dist/{filter-size-context-DaBdvJHf.d.mts → filter-size-context-CW1guBfI.d.mts} +2 -2
  381. package/dist/filter-size-context.d.mts +1 -1
  382. package/dist/{formatDateTime-mPH4DsDC.d.mts → formatDateTime-zyRMjfH8.d.mts} +1 -1
  383. package/dist/formatDateTime.d.mts +1 -1
  384. package/dist/helpers.d.mts +2 -2
  385. package/dist/{i18n-UiE7OC4k.mjs → i18n-CeRarJIa.mjs} +11 -2
  386. package/dist/i18n-CeRarJIa.mjs.map +1 -0
  387. package/dist/{index-Blo6W_k0.d.mts → index-B7KIL3U6.d.mts} +2 -2
  388. package/dist/{index-CeUb5INA.d.mts → index-C7hEdRqK.d.mts} +2 -2
  389. package/dist/{index-CTcM_LlP.d.mts → index-DxFh2ArY.d.mts} +3 -3
  390. package/dist/index-xAZnxq0d2.d.mts +1 -0
  391. package/dist/index.d.mts +1 -1
  392. package/dist/index2.d.mts +1 -1
  393. package/dist/index3.d.mts +3 -3
  394. package/dist/index4.d.mts +1 -1
  395. package/dist/index5.d.mts +15 -15
  396. package/dist/{input-D9rsMlzl.d.mts → input-DMPo8gRT.d.mts} +3 -3
  397. package/dist/{inputFields-CXelxYhd.d.mts → inputFields-BCNC1FWx.d.mts} +11 -11
  398. package/dist/inputFields.d.mts +1 -1
  399. package/dist/{intersperse-ObkRVOag.mjs → intersperse-B8s6clcc.mjs} +1 -1
  400. package/dist/{intersperse-ObkRVOag.mjs.map → intersperse-B8s6clcc.mjs.map} +1 -1
  401. package/dist/{jsonSchema-BMPLdT4p.d.mts → jsonSchema-6mcLrVG3.d.mts} +1 -1
  402. package/dist/lib/PDSProvider.d.mts +3 -3
  403. package/dist/lib/PDSProvider.mjs +1 -1
  404. package/dist/lib/TruncatedText.d.mts +1 -1
  405. package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
  406. package/dist/lib/TruncatedTextWithTooltip.mjs +1 -1
  407. package/dist/lib/chainTypes.d.mts +1 -1
  408. package/dist/lib/color.d.mts +1 -1
  409. package/dist/lib/customFunctionSchema.d.mts +1 -1
  410. package/dist/lib/date-filter/index.d.mts +2 -2
  411. package/dist/lib/i18n/index.d.mts +3 -3
  412. package/dist/lib/i18n/index.mjs +1 -1
  413. package/dist/lib/jsonSchema.d.mts +1 -1
  414. package/dist/lib/jsonSchemaType.d.mts +1 -1
  415. package/dist/lib/message.d.mts +1 -1
  416. package/dist/lib/methodChain.d.mts +2 -2
  417. package/dist/lib/methodChainNormalize.d.mts +2 -2
  418. package/dist/lib/methodChainTypes.d.mts +1 -1
  419. package/dist/lib/objectSchemaTypes.d.mts +1 -1
  420. package/dist/lib/platformObject.d.mts +1 -1
  421. package/dist/lib/pseudoClass.d.mts +1 -1
  422. package/dist/lib/router/adapters/reactRouter.d.mts +1 -1
  423. package/dist/lib/router/adapters/tanstack.d.mts +1 -1
  424. package/dist/lib/router/index.d.mts +5 -5
  425. package/dist/lib/schemaOptions.d.mts +1 -1
  426. package/dist/lib/semanticColor.d.mts +1 -1
  427. package/dist/lib/useChain.d.mts +1 -1
  428. package/dist/{listbox-options-BFaMbK-g.d.mts → listbox-options-yLjqZp4H.d.mts} +3 -3
  429. package/dist/listbox-options.d.mts +1 -1
  430. package/dist/{message-BOzjC5yA.d.mts → message-C5n7wFiN.d.mts} +1 -1
  431. package/dist/{methodChain-CGTIWafl.d.mts → methodChain-BNDytoaD.d.mts} +4 -4
  432. package/dist/{methodChainTypes-BtSMV5OZ.d.mts → methodChainTypes-BuwpPC73.d.mts} +2 -2
  433. package/dist/mixins/focus.d.mts +1 -1
  434. package/dist/mixins/focus.mjs +1 -1
  435. package/dist/mixins/hoverable.d.mts +2 -2
  436. package/dist/mixins/hoverable.mjs +1 -1
  437. package/dist/mixins/input.d.mts +1 -1
  438. package/dist/mixins/input.mjs +2 -2
  439. package/dist/mixins/menuItem.d.mts +2 -2
  440. package/dist/mixins/scrollbar.d.mts +1 -1
  441. package/dist/mixins/text.d.mts +1 -1
  442. package/dist/{operators-DfvW8Kmr.d.mts → operators-C34nhBuK.d.mts} +42 -12
  443. package/dist/operators.d.mts +2 -2
  444. package/dist/{palette-CBOBcVu3.d.mts → palette-BCszfY7I.d.mts} +3 -3
  445. package/dist/palette.d.mts +1 -1
  446. package/dist/patterns/CardGrouping/index.d.mts +2 -0
  447. package/dist/patterns/CardGrouping/index.mjs +280 -0
  448. package/dist/patterns/CardGrouping/index.mjs.map +1 -0
  449. package/dist/patterns/LayoutLoadingShimmer/index.mjs +3 -3
  450. package/dist/patterns/PageLayout/index.d.mts +5 -5
  451. package/dist/patterns/PageLayout/index.mjs +1 -131
  452. package/dist/patterns/WizardModal/index.mjs +3 -3
  453. package/dist/reactRouterFallback.d.mts +1 -1
  454. package/dist/relative-date-label.d.mts +1 -1
  455. package/dist/safe-parse.d.mts +1 -1
  456. package/dist/{schemaOptions-DTeNBwir.d.mts → schemaOptions-DBOUChxi.d.mts} +3 -3
  457. package/dist/{semantic-CfiNA4Yy.d.mts → semantic-Duoh2Pxp.d.mts} +1 -1
  458. package/dist/{semanticColor-BCPOKF9L.d.mts → semanticColor-BuG977_M.d.mts} +3 -3
  459. package/dist/{strings-BaQZhOjo.d.mts → strings-CUZrwL-Q.d.mts} +11 -1
  460. package/dist/strings.d.mts +1 -1
  461. package/dist/{text-ucZmPNyH.d.mts → text-B7hx6G99.d.mts} +1 -1
  462. package/dist/{theme-CAPmp1it.d.mts → theme-BKg55Zk1.d.mts} +3 -3
  463. package/dist/theme.d.mts +1 -1
  464. package/dist/tone.d.mts +3 -3
  465. package/dist/tree.d.mts +1 -1
  466. package/dist/{types-l-arEBLb.d.mts → types-4wnr5R9P.d.mts} +1 -1
  467. package/dist/{types-CBfgdnuB.d.mts → types-6QeQmbFm.d.mts} +1 -1
  468. package/dist/{types-CoTzVfFl.d.mts → types-BjMJFNYH.d.mts} +1 -1
  469. package/dist/{types-CptsgFbu.d.mts → types-CEQWndtF.d.mts} +4 -4
  470. package/dist/{types-BfrEduGv.d.mts → types-C_ZEgHNa.d.mts} +2 -2
  471. package/dist/{types-ClbV4wNp.d.mts → types-CgKSEQyB.d.mts} +1 -1
  472. package/dist/{types-B1KzKgBp.d.mts → types-CwzwClJx.d.mts} +1 -1
  473. package/dist/{types-Rj-C3LGL.d.mts → types-DEzlAdZW.d.mts} +35 -9
  474. package/dist/{types-BB5WwerD.d.mts → types-VgGkS4JB.d.mts} +2 -2
  475. package/dist/types.d.mts +1 -1
  476. package/dist/types2.d.mts +1 -1
  477. package/dist/types3.d.mts +1 -1
  478. package/dist/types4.d.mts +2 -2
  479. package/dist/types5.d.mts +1 -1
  480. package/dist/types6.d.mts +1 -1
  481. package/dist/types7.d.mts +1 -1
  482. package/dist/{url-state-CrnZ3Ocy.d.mts → url-state-B_gTQ9uu.d.mts} +2 -2
  483. package/dist/url-state.d.mts +1 -1
  484. package/dist/{useChain-DQq1UsGZ.d.mts → useChain-DPRVMwX8.d.mts} +6 -6
  485. package/dist/useChainAtCursor.d.mts +6 -6
  486. package/dist/useCodeChainFunctionPanel.d.mts +1 -1
  487. package/dist/useComboboxFooterAction.d.mts +5 -2
  488. package/dist/{useFilterStateV2-CGGABOcq.d.mts → useFilterStateV2-BQZppUR0.d.mts} +5 -4
  489. package/dist/useFilterStateV2.d.mts +1 -1
  490. package/dist/{useFormField-CbNYbDdp.mjs → useFormField-BAmkdxtA.mjs} +2 -2
  491. package/dist/{useFormField-CbNYbDdp.mjs.map → useFormField-BAmkdxtA.mjs.map} +1 -1
  492. package/dist/{useFormField-4w9TNFgD.d.mts → useFormField-DAwApAKK.d.mts} +2 -2
  493. package/dist/useFormField.d.mts +1 -1
  494. package/dist/{useFormGroup-CsKC93Pt.mjs → useFormGroup-BZayb9fZ.mjs} +1 -1
  495. package/dist/{useFormGroup-CsKC93Pt.mjs.map → useFormGroup-BZayb9fZ.mjs.map} +1 -1
  496. package/dist/{useLocationPathname-CZwH8h5n.d.mts → useLocationPathname-BHL0pgiu.d.mts} +1 -1
  497. package/dist/useLocationPathname.d.mts +1 -1
  498. package/dist/{useTableBoxDragAndDrop-Bw93rNFH.d.mts → useTableBoxDragAndDrop-Dq30b6yY.d.mts} +1 -1
  499. package/dist/useTableBoxDragAndDrop.d.mts +1 -1
  500. package/dist/useTruncation.d.mts +1 -1
  501. package/dist/{utilities-B8PzMOza.d.mts → utilities-B2ry7_20.d.mts} +1 -1
  502. package/dist/utilities.d.mts +1 -1
  503. package/dist/utils/testing.d.mts +1 -1
  504. package/dist/utils.d.mts +1 -1
  505. package/dist/utils4.d.mts +5 -5
  506. package/dist/{validation-DP8f6tgh.d.mts → validation-BODkbEvr.d.mts} +3 -3
  507. package/dist/validation.d.mts +1 -1
  508. package/dist/validation2.d.mts +4 -4
  509. package/dist/{value-control-resolver-CwjOaVAn.d.mts → value-control-resolver-BcZiReQ7.d.mts} +2 -2
  510. package/dist/value-control-resolver.d.mts +1 -1
  511. package/dist/variables/effect.d.mts +1 -1
  512. package/dist/variables/semantic.d.mts +1 -1
  513. package/llms.txt +1 -0
  514. package/package.json +5 -3
  515. package/skills/ui-authoring/COMPONENTS.md +1 -0
  516. package/skills/ui-authoring/PATTERNS.md +7 -2
  517. package/dist/Combobox-MCaDc7h6.mjs.map +0 -1
  518. package/dist/TableControls-B5UGCoO-.mjs.map +0 -1
  519. package/dist/i18n-UiE7OC4k.mjs.map +0 -1
  520. package/dist/patterns/PageLayout/index.mjs.map +0 -1
  521. /package/dist/{index-1-AkepUA.d.mts → index-7in8TPrM.d.mts} +0 -0
  522. /package/dist/{index-B-Y-ZG2x.d.mts → index-8SLBz2NH.d.mts} +0 -0
  523. /package/dist/{index-BO_854F2.d.mts → index-B24gUwOx.d.mts} +0 -0
  524. /package/dist/{index-BSVhZrWN.d.mts → index-B8M0Grl_2.d.mts} +0 -0
  525. /package/dist/{index-BYARwRq7.d.mts → index-BFnNtGdX.d.mts} +0 -0
  526. /package/dist/{index-B_BBnMou.d.mts → index-BTviwbFV.d.mts} +0 -0
  527. /package/dist/{index-BbPybiOV.d.mts → index-BjgW3E7y.d.mts} +0 -0
  528. /package/dist/{index-BcsXXrHq.d.mts → index-BwFl_eS0.d.mts} +0 -0
  529. /package/dist/{index-Bt4QNofW.d.mts → index-C3kE54DD.d.mts} +0 -0
  530. /package/dist/{index-C9achTF6.d.mts → index-C3usUse7.d.mts} +0 -0
  531. /package/dist/{index-CCt0lwyI.d.mts → index-C6HcjJiY.d.mts} +0 -0
  532. /package/dist/{index-CFuHCx9T.d.mts → index-CP2eJYlK.d.mts} +0 -0
  533. /package/dist/{index-CIABef8t.d.mts → index-CSf15oCd.d.mts} +0 -0
  534. /package/dist/{index-CTHojwxd.d.mts → index-CX869wwk.d.mts} +0 -0
  535. /package/dist/{index-CliqZ9rj.d.mts → index-CXaDbCtw.d.mts} +0 -0
  536. /package/dist/{index-Cm-1i165.d.mts → index-D4DUvwPf.d.mts} +0 -0
  537. /package/dist/{index-CryTAIZM.d.mts → index-DB7t8whN.d.mts} +0 -0
  538. /package/dist/{index-CzItj62a.d.mts → index-Deol7ZWO.d.mts} +0 -0
  539. /package/dist/{index-CzUpNo0e.d.mts → index-DhiymMxa.d.mts} +0 -0
  540. /package/dist/{index-D-giXKyu.d.mts → index-DjOaHFU3.d.mts} +0 -0
  541. /package/dist/{index-DGsJdI5l.d.mts → index-DkrC-i1D.d.mts} +0 -0
  542. /package/dist/{index-DMRtRo7y.d.mts → index-DvwPIy8X.d.mts} +0 -0
  543. /package/dist/{index-DUF59i3Q2.d.mts → index-Oio5ygqN.d.mts} +0 -0
  544. /package/dist/{index-DgJfEygr.d.mts → index-Wc1llEvP.d.mts} +0 -0
  545. /package/dist/{index-Es5nKSSL.d.mts → index-dzI_9J-Z.d.mts} +0 -0
  546. /package/dist/{index-NKYLt_R9.d.mts → index-gpCH5158.d.mts} +0 -0
  547. /package/dist/{index-Qwqzz3XM.d.mts → index-lIMqGGJz.d.mts} +0 -0
  548. /package/dist/{index-T2S0_qsg.d.mts → index-luywJTzJ.d.mts} +0 -0
  549. /package/dist/{index-kxcPLmUx2.d.mts → index-sViox9YW.d.mts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"CardV2-Ds6e577k.mjs","names":["CardLoadingShimmer","Heading","Button","DropdownMenu"],"sources":["../components/CardV2/SectionHeading.tsx","../components/CardV2/Section.tsx","../components/CardV2/Card.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, FC, ReactElement, ReactNode } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\nimport { ChevronDownIcon, MoreIcon } from '@persona/icons';\nimport Button, { IconButton } from 'design-system/components/Button';\nimport DropdownButton from 'design-system/components/DropdownButton';\nimport DropdownMenu from 'design-system/components/DropdownMenu';\nimport { LoadingShimmer } from 'design-system/components/LoadingShimmer';\nimport { HStack } from 'design-system/components/Stack';\nimport { Heading } from 'design-system/components/Text';\nimport Tooltip from 'design-system/components/Tooltip';\nimport { HeadlessAriaButton } from 'design-system/lib/HeadlessAriaButton';\nimport { semanticColor } from 'design-system/lib/semanticColor';\nimport { TruncatedText } from 'design-system/lib/TruncatedText';\nimport { focusStyle } from 'design-system/mixins/focus';\nimport type { HeadingSize } from 'design-system/mixins/text';\nimport type { IconAction, MenuAction, TextAction } from 'design-system/types/Action';\nimport { TransitionDuration } from 'design-system/variables/transitions';\n\n/**\n * Distance from the top of a card to the underside of an expanded top-section heading: the\n * `Spacing[4]` padding above and below a 24px title line, plus the divider. Sticky content inside\n * the card pins here so the heading's divider stays the only line between them.\n */\nexport const CARD_HEADING_STICKY_OFFSET = `calc(${Spacing[9]} + 1px)`;\n\nconst CardLoadingShimmer = styled(LoadingShimmer)`\n border-radius: ${({ theme }) => theme.card.borderRadius};\n`;\n\nconst StickerContainer = styled.div`\n display: flex;\n max-width: 180px;\n`;\n\ntype AccordionContainerProps = {\n $isTopSection: boolean;\n $expanded: boolean;\n};\nconst AccordionContainer = styled.div<AccordionContainerProps>`\n transition: opacity ${TransitionDuration.Faster};\n position: absolute;\n opacity: 0;\n\n height: 12px;\n width: 12px;\n display: flex;\n align-items: center;\n /* Because of padding in the top section heading we need to offset differently. */\n /* We want a 12px icon to be off-center in 24px padding, 4px on the right and 8px on the left */\n left: ${({ $isTopSection }) => ($isTopSection ? '8px' : '-16px')};\n /* center the icon vertically */\n top: calc(50% - 6px);\n\n border-radius: 1px;\n\n & svg {\n transition: transform ${TransitionDuration.Faster} ease-out;\n transform: rotate(${({ $expanded }) => ($expanded ? '0' : '-90deg')});\n }\n`;\n\nconst HeaderButton = styled(HeadlessAriaButton)`\n min-width: 0;\n flex: 1;\n\n &:hover ~ ${AccordionContainer} {\n opacity: 1;\n }\n\n &:focus-visible ~ ${AccordionContainer} {\n opacity: 1;\n ${focusStyle}\n }\n`;\n\ntype HeadingContainerProps = {\n $isTopSection: boolean;\n $divider: boolean;\n $hasFooter: boolean;\n $isExpanded: boolean;\n};\nconst HeadingContainer = styled(HStack)<HeadingContainerProps>`\n position: relative;\n\n ${({ $isTopSection }) =>\n $isTopSection &&\n css`\n padding: ${Spacing[4]} ${Spacing[5]};\n `}\n ${({ $divider }) =>\n $divider &&\n css`\n border-bottom: 1px solid ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n `}\n ${({ $isTopSection, $hasFooter, $isExpanded }) =>\n $isTopSection &&\n !$hasFooter &&\n !$isExpanded &&\n css`\n // We apply 4px of whitespace to the bottom of the card container so that content has a buffer\n // when being scrolled and still appears inside the card. Here we adjust, subtracting\n // 4px from the 16px padding.\n padding-bottom: ${Spacing[3]};\n `}\n`;\n\ntype StyledHeadingProps = {\n $isCollapsible: boolean;\n $isTopSection: boolean;\n size: HeadingSize;\n};\nconst StyledHeading = styled(Heading)<StyledHeadingProps>`\n flex: 1;\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n line-height: 24px; // We want an adjusted line-height to hit the target header size.\n overflow: hidden;\n\n ${({ $isCollapsible }) => $isCollapsible && 'cursor: pointer;'}\n ${({ $isTopSection }) =>\n !$isTopSection &&\n css`\n ${Typography.TextLargeBold};\n `}\n`;\n\nconst isIconAction = (action: IconAction | TextAction): action is IconAction => 'icon' in action;\n\nconst ButtonRow: FC<{\n actions: (IconAction | TextAction)[];\n menuActions: MenuAction[];\n}> = ({ actions, menuActions }) => {\n const buttons = actions\n .filter((action) => !action.hidden)\n .map((action, i) => {\n const key = isIconAction(action)\n ? (action.id ?? action.ariaLabel ?? `action-${i}`)\n : (action.id ?? action.label ?? `action-${i}`);\n\n const button = isIconAction(action) ? (\n <IconButton\n id={action.id}\n key={key}\n to={action.to}\n onClick={(e) => {\n e.stopPropagation();\n return action.onClick?.(e);\n }}\n disabled={action.disabled}\n aria-label={action.ariaLabel}\n size='sm'\n >\n {action.icon}\n </IconButton>\n ) : (\n <Button\n id={action.id}\n key={key}\n aria-label={action.ariaLabel}\n to={action.to}\n onClick={(e) => {\n e.stopPropagation();\n return action.onClick?.(e);\n }}\n disabled={action.disabled}\n variant={action.variant ?? 'basic'}\n size='sm'\n width='auto'\n prefixIcon={action.prefixIcon}\n suffixIcon={action.suffixIcon}\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 <HStack>\n {buttons}\n {menuActions.length > 0 && (\n <DropdownButton\n variant='text'\n width='icon'\n size='sm'\n suffixIcon={undefined}\n style={{ justifySelf: 'flex-end' }}\n aria-label='More actions'\n menuProps={{\n portal: true,\n }}\n menuItems={menuActions\n .filter((action) => !action.hidden)\n .map((action) => (\n <DropdownMenu.Item\n id={action.id ?? action.label}\n key={action.id ?? action.label}\n onClick={action.onClick}\n disabled={action.disabled}\n >\n {action.label}\n </DropdownMenu.Item>\n ))}\n >\n <MoreIcon />\n </DropdownButton>\n )}\n </HStack>\n );\n};\n\n/**\n * Private component for rendering the heading of a section, both the primary card heading and\n * section headings.\n */\nexport const SectionHeading: FC<{\n /**\n * Whether this is the top-level section of the card which has different visual treatment.\n */\n isTopSection: boolean;\n\n /**\n * Whether this heading's section has content.\n */\n sectionHasContent: boolean;\n\n /**\n * Whether this heading's section has a footer.\n */\n hasFooter: boolean;\n\n loading: boolean;\n\n /**\n * Title text to render in the heading.\n */\n title: string;\n\n /**\n * Optional sticker to render after the title.\n */\n sticker?: ReactElement;\n\n /**\n * Optional icon to render before the title text.\n *\n * Usage of this icon slot should be avoided if possible to maintain left-text alignement. If\n * using this icon slot for a section heading use it for all sections.\n */\n leftDecorativeIcon?: ReactElement;\n\n /**\n * Optional actions to render in the heading.\n * Only accepts IconButton or Button components with specific prop restrictions.\n */\n actions?: (IconAction | TextAction | undefined)[];\n\n /**\n * Optional actions to render in the heading in a menu.\n */\n menuActions?: (MenuAction | undefined)[];\n\n /**\n * Optional custom content to render in the heading in the button row. Prefer setting `actions` or\n * `menuActions` if possible.\n */\n headerActionsRowContent?: ReactNode;\n\n /**\n * Callback to toggle collapsed state of the section. Omit to disable collapsing.\n */\n toggle?: () => void;\n\n /**\n * Whether the section is currently expanded or collapsed.\n */\n isExpanded: boolean;\n\n /**\n * Optional props to pass to the heading element. Accepts an `as` key to override the\n * rendered heading level. Defaults to `h2` for the top-level card heading and `h3` for\n * section headings so that the document heading hierarchy reflects the visual hierarchy.\n */\n headingProps?: Omit<ComponentPropsWithoutRef<'span'>, 'color'> & {\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n };\n}> = ({\n isTopSection,\n sectionHasContent,\n hasFooter,\n loading,\n title,\n actions = [],\n menuActions = [],\n headerActionsRowContent,\n sticker,\n leftDecorativeIcon,\n toggle,\n isExpanded,\n headingProps,\n}) => {\n const renderButtonRow = actions.length > 0 || menuActions.length > 0;\n const { as: headingAs, ...restHeadingProps } = headingProps ?? {};\n\n return (\n <HeadingContainer\n $isTopSection={isTopSection}\n $hasFooter={hasFooter}\n $isExpanded={isExpanded}\n $divider={isTopSection && isExpanded && sectionHasContent}\n align='center'\n justify='space-between'\n spacing={Spacing[2]}\n >\n {loading ? (\n <CardLoadingShimmer height='24px' width='200px' />\n ) : (\n <>\n {/* https://github.com/adobe/react-spectrum/issues/7444 */}\n <HeaderButton slot='trigger' isDisabled={!toggle}>\n <StyledHeading\n forwardedAs={headingAs ?? (isTopSection ? 'h2' : 'h3')}\n size='xsm'\n $isCollapsible={!!toggle}\n $isTopSection={isTopSection}\n aria-label={title}\n {...restHeadingProps}\n >\n {leftDecorativeIcon}\n <TruncatedText>{title}</TruncatedText>\n {sticker && <StickerContainer>{sticker}</StickerContainer>}\n </StyledHeading>\n </HeaderButton>\n {headerActionsRowContent}\n {renderButtonRow && (\n <ButtonRow\n actions={actions.filter((action) => action != null)}\n menuActions={menuActions.filter((action) => action != null)}\n />\n )}\n {toggle && (\n <AccordionContainer $isTopSection={isTopSection} $expanded={isExpanded}>\n <ChevronDownIcon />\n </AccordionContainer>\n )}\n </>\n )}\n </HeadingContainer>\n );\n};\n","import type { ComponentProps, FC, ReactNode } from 'react';\nimport { Disclosure, DisclosurePanel } from 'react-aria-components';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\nimport { SectionHeading } from 'design-system/components/CardV2/SectionHeading';\nimport { LoadingShimmer } from 'design-system/components/LoadingShimmer';\nimport { HStack } from 'design-system/components/Stack';\nimport { Paragraph } from 'design-system/components/Text';\nimport { intersperse } from 'design-system/lib/intersperse';\nimport { semanticColor } from 'design-system/lib/semanticColor';\nimport { Z_INDICES } from 'design-system/lib/zindex';\n\nconst FooterParagraph = styled(Paragraph)`\n line-height: 16px;\n`;\n\ntype FooterContainerProps = {\n $divider: boolean;\n};\nconst FooterContainer = styled.div<FooterContainerProps>`\n ${({ $divider }) =>\n $divider &&\n css`\n border-top: 1px solid ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n `}\n padding: ${Spacing[3]} ${Spacing[5]} ${Spacing[2]};\n`;\n\ntype MaybeStickyContainerProps = {\n $enabled: boolean;\n $bottom?: boolean;\n};\nconst MaybeStickyContainer = styled.div<MaybeStickyContainerProps>`\n ${({ $enabled }) =>\n $enabled &&\n css`\n // We are using sticky positioning here to have consistent scrollbar behavior between\n // different card configurations. Usage of sticky allows us to keep the scroll container at\n // the top of the card DOM structure regardless of whether the heading or footer is sticky.\n //\n // This also afaict helps eliminate the need to carry height values through the card DOM\n // structure to the content container (and possibly needing to adjust heights for heading and footer).\n position: sticky;\n top: 0;\n background-color: ${({ theme }) => semanticColor(theme, 'SurfacePrimary', theme.color.background.primary)};\n z-index: ${Z_INDICES.sticky};\n `}\n\n ${({ $bottom = false }) =>\n $bottom &&\n css`\n top: unset;\n bottom: 0;\n `}\n`;\n\ntype StyledDisclosureProps = {\n $fullHeight: boolean;\n};\nconst StyledDisclosure = styled(Disclosure)<StyledDisclosureProps>`\n display: flex;\n flex-direction: column;\n gap: 0;\n ${({ $fullHeight }) =>\n $fullHeight &&\n css`\n height: 100%;\n `}\n`;\n\ntype StyledDisclosurePanelProps = {\n $isTopSection: boolean;\n};\nconst StyledDisclosurePanel = styled(DisclosurePanel)<StyledDisclosurePanelProps>`\n flex: 1;\n ${({ $isTopSection }) =>\n $isTopSection &&\n css`\n // Safari does not support hidden='until-found' so react-aria uses display: none instead.\n // Since react-aria is using display to hide content we need to not set display ourselves.\n &:not([aria-hidden='true']) {\n display: flex;\n }\n `}\n`;\n\nconst CardLoadingShimmer = styled(LoadingShimmer)`\n border-radius: ${({ theme }) => theme.card.borderRadius};\n`;\n\ntype SectionContentContainerProps = {\n $isTopSection: boolean;\n $hasHeading: boolean;\n $hasFooter: boolean;\n};\nconst SectionContentContainer = styled.div<SectionContentContainerProps>`\n ${({ $isTopSection }) =>\n $isTopSection &&\n css`\n padding: ${Spacing[5]};\n display: flex;\n flex-direction: column;\n gap: ${Spacing[5]};\n flex: 1;\n /* Prevent grid blowout https://css-tricks.com/preventing-a-grid-blowout/ */\n min-width: 0;\n `}\n\n ${({ $isTopSection, $hasHeading }) =>\n !$isTopSection &&\n $hasHeading &&\n css`\n padding-top: ${Spacing[3]};\n `}\n\n ${({ $isTopSection, $hasFooter }) =>\n $isTopSection &&\n !$hasFooter &&\n css`\n // We apply 4px of whitespace to the bottom of the card container so that content has a buffer\n // when being scrolled and still appears inside the card. Here we adjust, subtracting\n // 4px from the 24px padding.\n padding-bottom: 20px;\n `}\n`;\n\n/**\n * Private component for rendering sections of the card, both the primary card section and\n * individual sections.\n */\nexport const Section: FC<{\n children?: ReactNode;\n\n /**\n * Whether this is the top-level section of the card which has different visual treatment.\n */\n isTopSection: boolean;\n\n /**\n * Available props for the section's heading.\n */\n heading?: Pick<\n ComponentProps<typeof SectionHeading>,\n | 'title'\n | 'actions'\n | 'menuActions'\n | 'headerActionsRowContent'\n | 'sticker'\n | 'leftDecorativeIcon'\n | 'headingProps'\n >;\n\n /**\n * Optional footer to render at the bottom of the card. Footer content is rendered as a\n * paragraph with the items separated by a dot.\n */\n footer?: ReactNode[];\n\n /**\n * Optional arbitrary footer content to render as-is.\n */\n footerContent?: ReactNode;\n\n /**\n * Whether the section is collapsible.\n */\n collapsible?: boolean;\n\n /**\n * Whether the section heading and footer are sticky.\n */\n sticky?: boolean;\n\n /**\n * Whether the section is initially collapsed.\n */\n defaultCollapsed?: boolean;\n\n /**\n * If true, the section will be rendered in a loading state.\n */\n loading?: boolean;\n\n /**\n * Set height of the loading state.\n */\n loadingProps?: {\n height?: string;\n };\n\n /**\n * Control display of the empty state.\n */\n empty?: boolean;\n\n /**\n * Props for the empty state.\n */\n emptyProps?: {\n /**\n * Empty state message.\n */\n message?: string;\n };\n\n fullHeight?: boolean;\n}> = ({\n children,\n isTopSection,\n heading,\n footer,\n footerContent,\n loading = false,\n loadingProps,\n empty = false,\n emptyProps,\n defaultCollapsed = false,\n collapsible = false,\n sticky = false,\n fullHeight = false,\n}) => {\n let content: ReactNode;\n if (loading) {\n content = <CardLoadingShimmer height={loadingProps?.height ?? '200px'} width='100%' />;\n } else if (empty) {\n content = <Paragraph>{emptyProps?.message ?? 'No data collected'}</Paragraph>;\n } else {\n content = children;\n }\n\n const hasFooter = !!(footer || footerContent);\n const hasContent = !!content;\n\n // Normally we would have `isDisabled` as well but there's a react-aria-components quirk\n // that sets `hidden` on the disclosure panel if both `defaultExpanded` and `isDisabled` are true.\n // https://github.com/adobe/react-spectrum/issues/7444\n return (\n <StyledDisclosure defaultExpanded={!defaultCollapsed} $fullHeight={fullHeight}>\n {({ isExpanded, state }) => (\n <>\n {heading && (\n <MaybeStickyContainer $enabled={sticky}>\n <SectionHeading\n isTopSection={isTopSection}\n hasFooter={hasFooter}\n sectionHasContent={hasContent}\n loading={loading}\n toggle={collapsible ? state.toggle : undefined}\n isExpanded={isExpanded}\n {...heading}\n />\n </MaybeStickyContainer>\n )}\n {hasContent && (\n <StyledDisclosurePanel $isTopSection={isTopSection}>\n <SectionContentContainer\n $isTopSection={isTopSection}\n $hasHeading={!!heading}\n $hasFooter={hasFooter}\n >\n {content}\n </SectionContentContainer>\n </StyledDisclosurePanel>\n )}\n {hasFooter && (\n <MaybeStickyContainer $enabled={sticky} $bottom>\n <FooterContainer $divider={hasContent}>\n {loading ? (\n <HStack>\n <CardLoadingShimmer height='16px' width='120px' />\n <CardLoadingShimmer height='16px' width='120px' />\n </HStack>\n ) : (\n <>\n {footer && (\n <FooterParagraph size='sm'>\n <HStack spacing={Spacing[1]}>\n {intersperse(\n footer\n .filter((item) => item != null)\n .map((item, i) => <span key={`footer-item-${i}`}>{item}</span>),\n (i) => (\n <span key={i}>•</span>\n ),\n )}\n </HStack>\n </FooterParagraph>\n )}\n {footerContent}\n </>\n )}\n </FooterContainer>\n </MaybeStickyContainer>\n )}\n </>\n )}\n </StyledDisclosure>\n );\n};\n","import { type ComponentProps, createContext, type FC, type ReactNode, useContext } from 'react';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport styled from 'styled-components';\n\nimport { Color } from '@persona/design-tokens';\nimport { Section } from 'design-system/components/CardV2/Section';\nimport { Paragraph } from 'design-system/components/Text';\nimport ConfigContext from 'design-system/lib/ConfigContext';\nimport { intersperse } from 'design-system/lib/intersperse';\nimport { semanticColor } from 'design-system/lib/semanticColor';\nimport { semanticScrollbar } from 'design-system/mixins/scrollbar';\n\nconst CardContainer = styled.div`\n border-radius: ${({ theme }) => theme.card.borderRadius};\n background-color: ${({ theme }) => semanticColor(theme, 'SurfacePrimary', theme.color.background.primary)};\n // Height has been tricky here.\n // inherit seems to work well for both grid and flexbox layouts. In a grid we want this\n // container to receive the full cell height, In a flexbox we want this container to flex, maintaining\n // the minimum height for it's content.\n height: inherit;\n overflow-y: auto;\n ${semanticScrollbar}\n\n box-sizing: border-box;\n // Small buffer so that content is not scrolling right on the edge of the card.\n border-bottom: 4px solid ${({ theme }) => semanticColor(theme, 'SurfacePrimary', theme.color.background.primary)};\n`;\n\nconst CardContext = createContext<{ isStacked?: boolean }>({});\n\nconst Divider = styled.hr`\n margin: 0;\n border: none;\n border-top: 1px solid ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n`;\n\n/**\n * Renders a card section.\n */\nconst PublicSection: FC<\n Pick<\n ComponentProps<typeof Section>,\n | 'children'\n | 'collapsible'\n | 'defaultCollapsed'\n | 'heading'\n | 'loading'\n | 'loadingProps'\n | 'empty'\n | 'emptyProps'\n >\n> = (props) => {\n return <Section isTopSection={false} {...props} />;\n};\n\n/**\n * Render the card in a \"stacked\" mode. Used for rendering multiple cards on top of each other\n * that appear visually as a single card.\n */\nconst Stacked: FC<{\n children: ReactNode[];\n}> = ({ children }) => {\n return (\n <CardContext.Provider value={{ isStacked: true }}>\n <CardContainer>\n {intersperse(children, (i) => (\n <Divider key={i} />\n ))}\n </CardContainer>\n </CardContext.Provider>\n );\n};\n\nconst DEFAULT_ERROR_MESSAGE = 'Something went wrong loading this card.';\n\n/**\n * Renders a PDS Card.\n *\n * To render sections of the card use `<Card.Section>...</Card.Section>`\n */\nconst Card: FC<\n {\n /**\n * Optional footer to render at the bottom of the card. Footer content is rendered as a\n * paragraph with the items separated by a dot.\n */\n footer?: ReactNode[];\n\n /**\n * Optional arbitrary footer content to render as-is.\n */\n footerContent?: ReactNode;\n\n /**\n * Whether the card heading and footer are sticky.\n */\n sticky?: boolean;\n\n /**\n * Force the card to render in an errored state. Errors bubbling up from children will also\n * render the errored state.\n */\n errored?: boolean;\n\n /**\n * Props for the errored state.\n */\n erroredProps?: {\n /**\n * Message to render in the errored state.\n */\n message?: string;\n /**\n * Callback to handle errors. Note this callback is only called when the error is bubbled up\n * from children, not when `errored` is set to true.\n */\n onError?: (error: Error) => void;\n };\n\n containerProps?: ComponentProps<typeof CardContainer>;\n\n /**\n * Whether the card should render its content with 100% height. This is a bit of a hack for cards\n * that want full control of their content and don't use sections.\n */\n fullHeight?: boolean;\n } & ComponentProps<typeof PublicSection>\n> = ({ children, errored, erroredProps, containerProps, sticky = true, ...sectionProps }) => {\n const { isStacked = false } = useContext(CardContext);\n const { captureException } = useContext(ConfigContext);\n\n const errorFallback = (\n <Section isTopSection {...sectionProps}>\n <Paragraph>{erroredProps?.message ?? DEFAULT_ERROR_MESSAGE}</Paragraph>\n </Section>\n );\n\n const section = (\n <Section isTopSection sticky={sticky} {...sectionProps}>\n {children}\n </Section>\n );\n\n return (\n <ErrorBoundary\n fallback={\n isStacked ? (\n errorFallback\n ) : (\n <CardContainer {...containerProps}>{errorFallback}</CardContainer>\n )\n }\n onError={erroredProps?.onError ?? ((error) => captureException(error))}\n >\n {isStacked ? (\n <>{errored ? <>{errorFallback}</> : <>{section}</>}</>\n ) : (\n <CardContainer {...containerProps}>\n {errored ? <>{errorFallback}</> : <>{section}</>}\n </CardContainer>\n )}\n </ErrorBoundary>\n );\n};\n\nexport default Object.assign(Card, {\n Section: PublicSection,\n Stacked: Stacked,\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"CardV2-Cq4QODeE.mjs","names":["CardLoadingShimmer","Heading","Button","DropdownMenu"],"sources":["../components/CardV2/SectionHeading.tsx","../components/CardV2/Section.tsx","../components/CardV2/Card.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, FC, ReactElement, ReactNode } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\nimport { ChevronDownIcon, MoreIcon } from '@persona/icons';\nimport Button, { IconButton } from 'design-system/components/Button';\nimport DropdownButton from 'design-system/components/DropdownButton';\nimport DropdownMenu from 'design-system/components/DropdownMenu';\nimport { LoadingShimmer } from 'design-system/components/LoadingShimmer';\nimport { HStack } from 'design-system/components/Stack';\nimport { Heading } from 'design-system/components/Text';\nimport Tooltip from 'design-system/components/Tooltip';\nimport { HeadlessAriaButton } from 'design-system/lib/HeadlessAriaButton';\nimport { semanticColor } from 'design-system/lib/semanticColor';\nimport { TruncatedText } from 'design-system/lib/TruncatedText';\nimport { focusStyle } from 'design-system/mixins/focus';\nimport type { HeadingSize } from 'design-system/mixins/text';\nimport type { IconAction, MenuAction, TextAction } from 'design-system/types/Action';\nimport { TransitionDuration } from 'design-system/variables/transitions';\n\n/**\n * Distance from the top of a card to the underside of an expanded top-section heading: the\n * `Spacing[4]` padding above and below a 24px title line, plus the divider. Sticky content inside\n * the card pins here so the heading's divider stays the only line between them.\n */\nexport const CARD_HEADING_STICKY_OFFSET = `calc(${Spacing[9]} + 1px)`;\n\nconst CardLoadingShimmer = styled(LoadingShimmer)`\n border-radius: ${({ theme }) => theme.card.borderRadius};\n`;\n\nconst StickerContainer = styled.div`\n display: flex;\n max-width: 180px;\n`;\n\ntype AccordionContainerProps = {\n $isTopSection: boolean;\n $expanded: boolean;\n};\nconst AccordionContainer = styled.div<AccordionContainerProps>`\n transition: opacity ${TransitionDuration.Faster};\n position: absolute;\n opacity: 0;\n\n height: 12px;\n width: 12px;\n display: flex;\n align-items: center;\n /* Because of padding in the top section heading we need to offset differently. */\n /* We want a 12px icon to be off-center in 24px padding, 4px on the right and 8px on the left */\n left: ${({ $isTopSection }) => ($isTopSection ? '8px' : '-16px')};\n /* center the icon vertically */\n top: calc(50% - 6px);\n\n border-radius: 1px;\n\n & svg {\n transition: transform ${TransitionDuration.Faster} ease-out;\n transform: rotate(${({ $expanded }) => ($expanded ? '0' : '-90deg')});\n }\n`;\n\nconst HeaderButton = styled(HeadlessAriaButton)`\n min-width: 0;\n flex: 1;\n\n &:hover ~ ${AccordionContainer} {\n opacity: 1;\n }\n\n &:focus-visible ~ ${AccordionContainer} {\n opacity: 1;\n ${focusStyle}\n }\n`;\n\ntype HeadingContainerProps = {\n $isTopSection: boolean;\n $divider: boolean;\n $hasFooter: boolean;\n $isExpanded: boolean;\n};\nconst HeadingContainer = styled(HStack)<HeadingContainerProps>`\n position: relative;\n\n ${({ $isTopSection }) =>\n $isTopSection &&\n css`\n padding: ${Spacing[4]} ${Spacing[5]};\n `}\n ${({ $divider }) =>\n $divider &&\n css`\n border-bottom: 1px solid ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n `}\n ${({ $isTopSection, $hasFooter, $isExpanded }) =>\n $isTopSection &&\n !$hasFooter &&\n !$isExpanded &&\n css`\n // We apply 4px of whitespace to the bottom of the card container so that content has a buffer\n // when being scrolled and still appears inside the card. Here we adjust, subtracting\n // 4px from the 16px padding.\n padding-bottom: ${Spacing[3]};\n `}\n`;\n\ntype StyledHeadingProps = {\n $isCollapsible: boolean;\n $isTopSection: boolean;\n size: HeadingSize;\n};\nconst StyledHeading = styled(Heading)<StyledHeadingProps>`\n flex: 1;\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n line-height: 24px; // We want an adjusted line-height to hit the target header size.\n overflow: hidden;\n\n ${({ $isCollapsible }) => $isCollapsible && 'cursor: pointer;'}\n ${({ $isTopSection }) =>\n !$isTopSection &&\n css`\n ${Typography.TextLargeBold};\n `}\n`;\n\nconst isIconAction = (action: IconAction | TextAction): action is IconAction => 'icon' in action;\n\nconst ButtonRow: FC<{\n actions: (IconAction | TextAction)[];\n menuActions: MenuAction[];\n}> = ({ actions, menuActions }) => {\n const buttons = actions\n .filter((action) => !action.hidden)\n .map((action, i) => {\n const key = isIconAction(action)\n ? (action.id ?? action.ariaLabel ?? `action-${i}`)\n : (action.id ?? action.label ?? `action-${i}`);\n\n const button = isIconAction(action) ? (\n <IconButton\n id={action.id}\n key={key}\n to={action.to}\n onClick={(e) => {\n e.stopPropagation();\n return action.onClick?.(e);\n }}\n disabled={action.disabled}\n aria-label={action.ariaLabel}\n size='sm'\n >\n {action.icon}\n </IconButton>\n ) : (\n <Button\n id={action.id}\n key={key}\n aria-label={action.ariaLabel}\n to={action.to}\n onClick={(e) => {\n e.stopPropagation();\n return action.onClick?.(e);\n }}\n disabled={action.disabled}\n variant={action.variant ?? 'basic'}\n size='sm'\n width='auto'\n prefixIcon={action.prefixIcon}\n suffixIcon={action.suffixIcon}\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 <HStack>\n {buttons}\n {menuActions.length > 0 && (\n <DropdownButton\n variant='text'\n width='icon'\n size='sm'\n suffixIcon={undefined}\n style={{ justifySelf: 'flex-end' }}\n aria-label='More actions'\n menuProps={{\n portal: true,\n }}\n menuItems={menuActions\n .filter((action) => !action.hidden)\n .map((action) => (\n <DropdownMenu.Item\n id={action.id ?? action.label}\n key={action.id ?? action.label}\n onClick={action.onClick}\n disabled={action.disabled}\n >\n {action.label}\n </DropdownMenu.Item>\n ))}\n >\n <MoreIcon />\n </DropdownButton>\n )}\n </HStack>\n );\n};\n\n/**\n * Private component for rendering the heading of a section, both the primary card heading and\n * section headings.\n */\nexport const SectionHeading: FC<{\n /**\n * Whether this is the top-level section of the card which has different visual treatment.\n */\n isTopSection: boolean;\n\n /**\n * Whether this heading's section has content.\n */\n sectionHasContent: boolean;\n\n /**\n * Whether this heading's section has a footer.\n */\n hasFooter: boolean;\n\n loading: boolean;\n\n /**\n * Title text to render in the heading.\n */\n title: string;\n\n /**\n * Optional sticker to render after the title.\n */\n sticker?: ReactElement;\n\n /**\n * Optional icon to render before the title text.\n *\n * Usage of this icon slot should be avoided if possible to maintain left-text alignement. If\n * using this icon slot for a section heading use it for all sections.\n */\n leftDecorativeIcon?: ReactElement;\n\n /**\n * Optional actions to render in the heading.\n * Only accepts IconButton or Button components with specific prop restrictions.\n */\n actions?: (IconAction | TextAction | undefined)[];\n\n /**\n * Optional actions to render in the heading in a menu.\n */\n menuActions?: (MenuAction | undefined)[];\n\n /**\n * Optional custom content to render in the heading in the button row. Prefer setting `actions` or\n * `menuActions` if possible.\n */\n headerActionsRowContent?: ReactNode;\n\n /**\n * Callback to toggle collapsed state of the section. Omit to disable collapsing.\n */\n toggle?: () => void;\n\n /**\n * Whether the section is currently expanded or collapsed.\n */\n isExpanded: boolean;\n\n /**\n * Optional props to pass to the heading element. Accepts an `as` key to override the\n * rendered heading level. Defaults to `h2` for the top-level card heading and `h3` for\n * section headings so that the document heading hierarchy reflects the visual hierarchy.\n */\n headingProps?: Omit<ComponentPropsWithoutRef<'span'>, 'color'> & {\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n };\n}> = ({\n isTopSection,\n sectionHasContent,\n hasFooter,\n loading,\n title,\n actions = [],\n menuActions = [],\n headerActionsRowContent,\n sticker,\n leftDecorativeIcon,\n toggle,\n isExpanded,\n headingProps,\n}) => {\n const renderButtonRow = actions.length > 0 || menuActions.length > 0;\n const { as: headingAs, ...restHeadingProps } = headingProps ?? {};\n\n return (\n <HeadingContainer\n $isTopSection={isTopSection}\n $hasFooter={hasFooter}\n $isExpanded={isExpanded}\n $divider={isTopSection && isExpanded && sectionHasContent}\n align='center'\n justify='space-between'\n spacing={Spacing[2]}\n >\n {loading ? (\n <CardLoadingShimmer height='24px' width='200px' />\n ) : (\n <>\n {/* https://github.com/adobe/react-spectrum/issues/7444 */}\n <HeaderButton slot='trigger' isDisabled={!toggle}>\n <StyledHeading\n forwardedAs={headingAs ?? (isTopSection ? 'h2' : 'h3')}\n size='xsm'\n $isCollapsible={!!toggle}\n $isTopSection={isTopSection}\n aria-label={title}\n {...restHeadingProps}\n >\n {leftDecorativeIcon}\n <TruncatedText>{title}</TruncatedText>\n {sticker && <StickerContainer>{sticker}</StickerContainer>}\n </StyledHeading>\n </HeaderButton>\n {headerActionsRowContent}\n {renderButtonRow && (\n <ButtonRow\n actions={actions.filter((action) => action != null)}\n menuActions={menuActions.filter((action) => action != null)}\n />\n )}\n {toggle && (\n <AccordionContainer $isTopSection={isTopSection} $expanded={isExpanded}>\n <ChevronDownIcon />\n </AccordionContainer>\n )}\n </>\n )}\n </HeadingContainer>\n );\n};\n","import type { ComponentProps, FC, ReactNode } from 'react';\nimport { Disclosure, DisclosurePanel } from 'react-aria-components';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\nimport { SectionHeading } from 'design-system/components/CardV2/SectionHeading';\nimport { LoadingShimmer } from 'design-system/components/LoadingShimmer';\nimport { HStack } from 'design-system/components/Stack';\nimport { Paragraph } from 'design-system/components/Text';\nimport { intersperse } from 'design-system/lib/intersperse';\nimport { semanticColor } from 'design-system/lib/semanticColor';\nimport { Z_INDICES } from 'design-system/lib/zindex';\n\nconst FooterParagraph = styled(Paragraph)`\n line-height: 16px;\n`;\n\ntype FooterContainerProps = {\n $divider: boolean;\n};\nconst FooterContainer = styled.div<FooterContainerProps>`\n ${({ $divider }) =>\n $divider &&\n css`\n border-top: 1px solid ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n `}\n padding: ${Spacing[3]} ${Spacing[5]} ${Spacing[2]};\n`;\n\ntype MaybeStickyContainerProps = {\n $enabled: boolean;\n $bottom?: boolean;\n};\nconst MaybeStickyContainer = styled.div<MaybeStickyContainerProps>`\n ${({ $enabled }) =>\n $enabled &&\n css`\n // We are using sticky positioning here to have consistent scrollbar behavior between\n // different card configurations. Usage of sticky allows us to keep the scroll container at\n // the top of the card DOM structure regardless of whether the heading or footer is sticky.\n //\n // This also afaict helps eliminate the need to carry height values through the card DOM\n // structure to the content container (and possibly needing to adjust heights for heading and footer).\n position: sticky;\n top: 0;\n background-color: ${({ theme }) => semanticColor(theme, 'SurfacePrimary', theme.color.background.primary)};\n z-index: ${Z_INDICES.sticky};\n `}\n\n ${({ $bottom = false }) =>\n $bottom &&\n css`\n top: unset;\n bottom: 0;\n `}\n`;\n\ntype StyledDisclosureProps = {\n $fullHeight: boolean;\n};\nconst StyledDisclosure = styled(Disclosure)<StyledDisclosureProps>`\n display: flex;\n flex-direction: column;\n gap: 0;\n ${({ $fullHeight }) =>\n $fullHeight &&\n css`\n height: 100%;\n `}\n`;\n\ntype StyledDisclosurePanelProps = {\n $isTopSection: boolean;\n};\nconst StyledDisclosurePanel = styled(DisclosurePanel)<StyledDisclosurePanelProps>`\n flex: 1;\n ${({ $isTopSection }) =>\n $isTopSection &&\n css`\n // Safari does not support hidden='until-found' so react-aria uses display: none instead.\n // Since react-aria is using display to hide content we need to not set display ourselves.\n &:not([aria-hidden='true']) {\n display: flex;\n }\n `}\n`;\n\nconst CardLoadingShimmer = styled(LoadingShimmer)`\n border-radius: ${({ theme }) => theme.card.borderRadius};\n`;\n\ntype SectionContentContainerProps = {\n $isTopSection: boolean;\n $hasHeading: boolean;\n $hasFooter: boolean;\n};\nconst SectionContentContainer = styled.div<SectionContentContainerProps>`\n ${({ $isTopSection }) =>\n $isTopSection &&\n css`\n padding: ${Spacing[5]};\n display: flex;\n flex-direction: column;\n gap: ${Spacing[5]};\n flex: 1;\n /* Prevent grid blowout https://css-tricks.com/preventing-a-grid-blowout/ */\n min-width: 0;\n `}\n\n ${({ $isTopSection, $hasHeading }) =>\n !$isTopSection &&\n $hasHeading &&\n css`\n padding-top: ${Spacing[3]};\n `}\n\n ${({ $isTopSection, $hasFooter }) =>\n $isTopSection &&\n !$hasFooter &&\n css`\n // We apply 4px of whitespace to the bottom of the card container so that content has a buffer\n // when being scrolled and still appears inside the card. Here we adjust, subtracting\n // 4px from the 24px padding.\n padding-bottom: 20px;\n `}\n`;\n\n/**\n * Private component for rendering sections of the card, both the primary card section and\n * individual sections.\n */\nexport const Section: FC<{\n children?: ReactNode;\n\n /**\n * Whether this is the top-level section of the card which has different visual treatment.\n */\n isTopSection: boolean;\n\n /**\n * Available props for the section's heading.\n */\n heading?: Pick<\n ComponentProps<typeof SectionHeading>,\n | 'title'\n | 'actions'\n | 'menuActions'\n | 'headerActionsRowContent'\n | 'sticker'\n | 'leftDecorativeIcon'\n | 'headingProps'\n >;\n\n /**\n * Optional footer to render at the bottom of the card. Footer content is rendered as a\n * paragraph with the items separated by a dot.\n */\n footer?: ReactNode[];\n\n /**\n * Optional arbitrary footer content to render as-is.\n */\n footerContent?: ReactNode;\n\n /**\n * Whether the section is collapsible.\n */\n collapsible?: boolean;\n\n /**\n * Whether the section heading and footer are sticky.\n */\n sticky?: boolean;\n\n /**\n * Whether the section is initially collapsed.\n */\n defaultCollapsed?: boolean;\n\n /**\n * If true, the section will be rendered in a loading state.\n */\n loading?: boolean;\n\n /**\n * Set height of the loading state.\n */\n loadingProps?: {\n height?: string;\n };\n\n /**\n * Control display of the empty state.\n */\n empty?: boolean;\n\n /**\n * Props for the empty state.\n */\n emptyProps?: {\n /**\n * Empty state message.\n */\n message?: string;\n };\n\n fullHeight?: boolean;\n}> = ({\n children,\n isTopSection,\n heading,\n footer,\n footerContent,\n loading = false,\n loadingProps,\n empty = false,\n emptyProps,\n defaultCollapsed = false,\n collapsible = false,\n sticky = false,\n fullHeight = false,\n}) => {\n let content: ReactNode;\n if (loading) {\n content = <CardLoadingShimmer height={loadingProps?.height ?? '200px'} width='100%' />;\n } else if (empty) {\n content = <Paragraph>{emptyProps?.message ?? 'No data collected'}</Paragraph>;\n } else {\n content = children;\n }\n\n const hasFooter = !!(footer || footerContent);\n const hasContent = !!content;\n\n // Normally we would have `isDisabled` as well but there's a react-aria-components quirk\n // that sets `hidden` on the disclosure panel if both `defaultExpanded` and `isDisabled` are true.\n // https://github.com/adobe/react-spectrum/issues/7444\n return (\n <StyledDisclosure defaultExpanded={!defaultCollapsed} $fullHeight={fullHeight}>\n {({ isExpanded, state }) => (\n <>\n {heading && (\n <MaybeStickyContainer $enabled={sticky}>\n <SectionHeading\n isTopSection={isTopSection}\n hasFooter={hasFooter}\n sectionHasContent={hasContent}\n loading={loading}\n toggle={collapsible ? state.toggle : undefined}\n isExpanded={isExpanded}\n {...heading}\n />\n </MaybeStickyContainer>\n )}\n {hasContent && (\n <StyledDisclosurePanel $isTopSection={isTopSection}>\n <SectionContentContainer\n $isTopSection={isTopSection}\n $hasHeading={!!heading}\n $hasFooter={hasFooter}\n >\n {content}\n </SectionContentContainer>\n </StyledDisclosurePanel>\n )}\n {hasFooter && (\n <MaybeStickyContainer $enabled={sticky} $bottom>\n <FooterContainer $divider={hasContent}>\n {loading ? (\n <HStack>\n <CardLoadingShimmer height='16px' width='120px' />\n <CardLoadingShimmer height='16px' width='120px' />\n </HStack>\n ) : (\n <>\n {footer && (\n <FooterParagraph size='sm'>\n <HStack spacing={Spacing[1]}>\n {intersperse(\n footer\n .filter((item) => item != null)\n .map((item, i) => <span key={`footer-item-${i}`}>{item}</span>),\n (i) => (\n <span key={i}>•</span>\n ),\n )}\n </HStack>\n </FooterParagraph>\n )}\n {footerContent}\n </>\n )}\n </FooterContainer>\n </MaybeStickyContainer>\n )}\n </>\n )}\n </StyledDisclosure>\n );\n};\n","import { type ComponentProps, createContext, type FC, type ReactNode, useContext } from 'react';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport styled from 'styled-components';\n\nimport { Color } from '@persona/design-tokens';\nimport { Section } from 'design-system/components/CardV2/Section';\nimport { Paragraph } from 'design-system/components/Text';\nimport ConfigContext from 'design-system/lib/ConfigContext';\nimport { intersperse } from 'design-system/lib/intersperse';\nimport { semanticColor } from 'design-system/lib/semanticColor';\nimport { semanticScrollbar } from 'design-system/mixins/scrollbar';\n\nconst CardContainer = styled.div`\n border-radius: ${({ theme }) => theme.card.borderRadius};\n background-color: ${({ theme }) => semanticColor(theme, 'SurfacePrimary', theme.color.background.primary)};\n // Height has been tricky here.\n // inherit seems to work well for both grid and flexbox layouts. In a grid we want this\n // container to receive the full cell height, In a flexbox we want this container to flex, maintaining\n // the minimum height for it's content.\n height: inherit;\n overflow-y: auto;\n ${semanticScrollbar}\n\n box-sizing: border-box;\n // Small buffer so that content is not scrolling right on the edge of the card.\n border-bottom: 4px solid ${({ theme }) => semanticColor(theme, 'SurfacePrimary', theme.color.background.primary)};\n`;\n\nconst CardContext = createContext<{ isStacked?: boolean }>({});\n\nconst Divider = styled.hr`\n margin: 0;\n border: none;\n border-top: 1px solid ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n`;\n\n/**\n * Renders a card section.\n */\nconst PublicSection: FC<\n Pick<\n ComponentProps<typeof Section>,\n | 'children'\n | 'collapsible'\n | 'defaultCollapsed'\n | 'heading'\n | 'loading'\n | 'loadingProps'\n | 'empty'\n | 'emptyProps'\n >\n> = (props) => {\n return <Section isTopSection={false} {...props} />;\n};\n\n/**\n * Render the card in a \"stacked\" mode. Used for rendering multiple cards on top of each other\n * that appear visually as a single card.\n */\nconst Stacked: FC<{\n children: ReactNode[];\n}> = ({ children }) => {\n return (\n <CardContext.Provider value={{ isStacked: true }}>\n <CardContainer>\n {intersperse(children, (i) => (\n <Divider key={i} />\n ))}\n </CardContainer>\n </CardContext.Provider>\n );\n};\n\nconst DEFAULT_ERROR_MESSAGE = 'Something went wrong loading this card.';\n\n/**\n * Renders a PDS Card.\n *\n * To render sections of the card use `<Card.Section>...</Card.Section>`\n */\nconst Card: FC<\n {\n /**\n * Optional footer to render at the bottom of the card. Footer content is rendered as a\n * paragraph with the items separated by a dot.\n */\n footer?: ReactNode[];\n\n /**\n * Optional arbitrary footer content to render as-is.\n */\n footerContent?: ReactNode;\n\n /**\n * Whether the card heading and footer are sticky.\n */\n sticky?: boolean;\n\n /**\n * Force the card to render in an errored state. Errors bubbling up from children will also\n * render the errored state.\n */\n errored?: boolean;\n\n /**\n * Props for the errored state.\n */\n erroredProps?: {\n /**\n * Message to render in the errored state.\n */\n message?: string;\n /**\n * Callback to handle errors. Note this callback is only called when the error is bubbled up\n * from children, not when `errored` is set to true.\n */\n onError?: (error: Error) => void;\n };\n\n containerProps?: ComponentProps<typeof CardContainer>;\n\n /**\n * Whether the card should render its content with 100% height. This is a bit of a hack for cards\n * that want full control of their content and don't use sections.\n */\n fullHeight?: boolean;\n } & ComponentProps<typeof PublicSection>\n> = ({ children, errored, erroredProps, containerProps, sticky = true, ...sectionProps }) => {\n const { isStacked = false } = useContext(CardContext);\n const { captureException } = useContext(ConfigContext);\n\n const errorFallback = (\n <Section isTopSection {...sectionProps}>\n <Paragraph>{erroredProps?.message ?? DEFAULT_ERROR_MESSAGE}</Paragraph>\n </Section>\n );\n\n const section = (\n <Section isTopSection sticky={sticky} {...sectionProps}>\n {children}\n </Section>\n );\n\n return (\n <ErrorBoundary\n fallback={\n isStacked ? (\n errorFallback\n ) : (\n <CardContainer {...containerProps}>{errorFallback}</CardContainer>\n )\n }\n onError={erroredProps?.onError ?? ((error) => captureException(error))}\n >\n {isStacked ? (\n <>{errored ? <>{errorFallback}</> : <>{section}</>}</>\n ) : (\n <CardContainer {...containerProps}>\n {errored ? <>{errorFallback}</> : <>{section}</>}\n </CardContainer>\n )}\n </ErrorBoundary>\n );\n};\n\nexport default Object.assign(Card, {\n Section: PublicSection,\n Stacked: Stacked,\n});\n"],"mappings":"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"}
@@ -43,4 +43,4 @@ interface CheckboxProps extends Omit<ComponentPropsWithoutRef<'input'>, 'value'
43
43
  declare const Checkbox: _$react.ForwardRefExoticComponent<CheckboxProps & _$react.RefAttributes<HTMLInputElement>>;
44
44
  //#endregion
45
45
  export { CheckboxProps as n, Checkbox as t };
46
- //# sourceMappingURL=Checkbox-CsJlWz-r.d.mts.map
46
+ //# sourceMappingURL=Checkbox-CVa8WOf2.d.mts.map
@@ -1,13 +1,13 @@
1
1
  import { a as styled, r as css } from "./styledComponentsInterop-NxwFjeA4.mjs";
2
+ import { isChecked, isDisabled, isFocusedVisible, isHovered, isIndeterminate, isNotDisabled } from "./lib/pseudoClass.mjs";
2
3
  import { semanticColor, semanticOnly } from "./lib/semanticColor.mjs";
4
+ import { focusStyle } from "./mixins/focus.mjs";
3
5
  import "./variables/transitions.mjs";
4
- import { a as Tooltip, n as TextWithDashedUnderline } from "./Tooltip-B-0VRuKT.mjs";
5
6
  import { opacityOf } from "./lib/color.mjs";
6
- import { isChecked, isDisabled, isFocusedVisible, isHovered, isIndeterminate, isNotDisabled } from "./lib/pseudoClass.mjs";
7
+ import { a as Tooltip, n as TextWithDashedUnderline } from "./Tooltip-DogEteGl.mjs";
7
8
  import useControlled from "./lib/useControlled.mjs";
8
- import { focusStyle } from "./mixins/focus.mjs";
9
9
  import { n as Stack } from "./Stack-BkC7FCdF.mjs";
10
- import { n as useFormField } from "./useFormField-CbNYbDdp.mjs";
10
+ import { n as useFormField } from "./useFormField-BAmkdxtA.mjs";
11
11
  import { Color, Spacing, Typography } from "@persona/design-tokens";
12
12
  import { forwardRef, useEffect, useImperativeHandle, useMemo, useRef } from "react";
13
13
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -124,7 +124,11 @@ const Checkbox = forwardRef(function Checkbox({ className, disabled, indetermina
124
124
  useImperativeHandle(ref, () => inputRef.current, [inputRef]);
125
125
  useEffect(() => {
126
126
  if (inputRef.current) inputRef.current.indeterminate = indeterminate;
127
- }, [indeterminate, inputRef]);
127
+ }, [
128
+ indeterminate,
129
+ checked,
130
+ inputRef
131
+ ]);
128
132
  return /* @__PURE__ */ jsxs(Container, {
129
133
  direction: "horizontal",
130
134
  className,
@@ -177,4 +181,4 @@ const Checkbox = forwardRef(function Checkbox({ className, disabled, indetermina
177
181
  //#endregion
178
182
  export { Checkbox as t };
179
183
 
180
- //# sourceMappingURL=Checkbox-BQC_SmBt.mjs.map
184
+ //# sourceMappingURL=Checkbox-Cttn1t8T.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox-BQC_SmBt.mjs","names":[],"sources":["../components/Checkbox/Checkbox.tsx"],"sourcesContent":["import { uniqueId } from 'lodash-es';\nimport {\n type ChangeEvent,\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\nimport { InputCheckIcon, InputDashIcon } from '@persona/icons';\nimport useFormField from 'design-system/components/FormControl/useFormField';\nimport Stack from 'design-system/components/Stack/Stack';\nimport Tooltip from 'design-system/components/Tooltip';\nimport { TextWithDashedUnderline } from 'design-system/components/Tooltip/TextUnderlineTooltip';\nimport { opacityOf } from 'design-system/lib/color';\nimport {\n isChecked,\n isDisabled,\n isFocusedVisible,\n isHovered,\n isIndeterminate,\n isNotDisabled,\n} from 'design-system/lib/pseudoClass';\nimport { semanticColor, semanticOnly } from 'design-system/lib/semanticColor';\nimport useControlled from 'design-system/lib/useControlled';\nimport { focusStyle } from 'design-system/mixins/focus';\nimport { TransitionDuration } from 'design-system/variables/transitions';\n\nconst Container = styled(Stack)<{ size: 'md' | 'sm'; disabled?: boolean }>`\n position: relative;\n cursor: pointer;\n\n flex-wrap: nowrap;\n\n ${({ size }) =>\n size === 'sm' &&\n css`\n height: 16px;\n `}\n\n &${isDisabled} {\n cursor: default;\n }\n`;\n\nconst CheckboxBox = styled.div<{ disabled?: boolean; checked?: boolean }>`\n cursor: pointer;\n display: flex;\n flex: 0 0 16px;\n justify-content: center;\n align-items: center;\n transition:\n box-shadow ${TransitionDuration.Fast},\n background-color ${TransitionDuration.Fast},\n border-color ${TransitionDuration.Fast};\n border-radius: 3px;\n height: ${Spacing[4]};\n width: ${Spacing[4]};\n box-sizing: border-box;\n border: 1px solid ${({ theme }) => semanticColor(theme, 'InputBorderStrong', Color.BorderInputCheckbox)};\n background: ${({ theme }) => semanticColor(theme, 'InputSurfaceDefault', Color.BackgroundInputDefault)};\n\n svg {\n color: ${({ theme }) => semanticColor(theme, 'FgInverseStatic', Color.BorderIconInverse)};\n }\n\n &${isDisabled} {\n cursor: default;\n background: ${({ theme }) =>\n semanticColor(theme, 'InputSurfaceDisabled', Color.BackgroundInputDisabled)};\n border-color: ${({ theme }) =>\n semanticColor(theme, 'InputBorderDisabled', Color.BorderInputDisabled)};\n ${semanticOnly((tokens) => `opacity: ${opacityOf(tokens.Opacity65)};`)}\n }\n\n ${({ checked, theme }) =>\n checked &&\n css`\n border-color: ${semanticColor(theme, 'InputBorderAccent', Color.BackgroundInputActive)};\n background: ${semanticColor(theme, 'InputSurfaceAccent', Color.BackgroundInputActive)};\n\n &${isDisabled} {\n border-color: ${semanticColor(theme, 'InputSurfaceAccentDisabled', Color.BackgroundInputActiveDisabled)};\n background: ${semanticColor(theme, 'InputSurfaceAccentDisabled', Color.BackgroundInputActiveDisabled)};\n }\n `}\n`;\n\nconst CheckboxInput = styled.input`\n cursor: inherit;\n height: 16px;\n width: 16px;\n margin: 0;\n border: 0;\n opacity: 0;\n overflow: hidden;\n position: absolute;\n\n &${isHovered}${isNotDisabled} ~ ${CheckboxBox} {\n border-color: ${({ theme }) =>\n semanticColor(theme, 'InputBorderHoverStrong', Color.BorderInputCheckboxHover)};\n ${semanticOnly((tokens) => `background: ${tokens.InputSurfaceHover};`)}\n }\n\n &${isChecked}, &${isIndeterminate} {\n &${isHovered}${isNotDisabled} ~ ${CheckboxBox} {\n background: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccentHover', Color.BackgroundInputActiveHover)};\n border-color: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccentHover', Color.BackgroundInputActiveHover)};\n }\n }\n\n &${isFocusedVisible}${isNotDisabled} ~ ${CheckboxBox} {\n ${focusStyle}\n }\n`;\n\nconst Label = styled.label<{ disabled: boolean; size: 'md' | 'sm' }>`\n cursor: inherit;\n color: ${({ theme }) => semanticColor(theme, 'FgPrimary', Color.TextPrimary)};\n\n ${({ size }) =>\n size === 'sm'\n ? css`\n ${Typography.TextSmall};\n line-height: 16px;\n `\n : css`\n ${Typography.TextMedium};\n\n /** Nudge text for visual alignment */\n position: relative;\n bottom: -1px;\n `}\n\n ${({ theme, disabled }) =>\n disabled &&\n css`\n cursor: default;\n color: ${semanticColor(theme, 'FgDisabled', theme.color.text.disabled)};\n `}\n`;\n\nexport interface CheckboxProps extends Omit<ComponentPropsWithoutRef<'input'>, 'value' | 'size'> {\n /**\n * `id` for the underlying `<input>`. If not provided a unique ID is generated\n * automatically and linked to the label.\n */\n id?: string;\n /** Called whenever the checked state changes. */\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n /** Visible label rendered to the right of the checkbox box. */\n label?: ReactNode;\n /** Disables interaction and renders the checkbox in a muted style. */\n disabled?: boolean;\n /**\n * When true the checkbox displays a dash (−) instead of a tick, indicating a\n * mixed / partially-selected state. Sets `aria-checked=\"mixed\"` for screen readers.\n */\n indeterminate?: boolean;\n /**\n * Controlled checked state. Omit (or pass `undefined`) to let the component\n * manage state internally via `defaultChecked`.\n */\n checked?: boolean;\n /** Value submitted with a form. */\n value?: unknown;\n 'data-test'?: string;\n /** Additional props forwarded to the outer container `<div>`. */\n containerProps?: ComponentPropsWithoutRef<'div'>;\n /**\n * Size of the checkbox and its label text.\n * @defaultValue 'md'\n */\n size?: 'md' | 'sm';\n /**\n * Tooltip content to display when hovering over the label.\n * When provided, the label will be wrapped in a tooltip.\n */\n tooltip?: ReactNode;\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n className,\n disabled,\n indeterminate,\n onChange,\n checked: checkedProp,\n defaultChecked,\n id,\n label,\n 'data-test': dataTest,\n containerProps,\n value,\n size = 'md',\n tooltip,\n ...elemProps\n },\n ref,\n) {\n const field = useFormField({ disabled });\n const [checked, setChecked] = useControlled({\n controlledValue: checkedProp,\n default: defaultChecked,\n });\n const generatedId = useMemo(() => uniqueId('pds_checkbox__'), []);\n const inputRef = useRef<HTMLInputElement>();\n\n // Use the inputId from FormControl context if available, otherwise use the provided id or generate one\n const inputId = field.inputId || id || generatedId;\n\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n useImperativeHandle(ref, () => inputRef.current, [inputRef]);\n\n useEffect(() => {\n if (inputRef.current) {\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate, inputRef]);\n\n return (\n <Container\n direction='horizontal'\n className={className}\n data-test={dataTest}\n disabled={field.disabled}\n align='center'\n size={size}\n {...containerProps}\n >\n <CheckboxInput\n id={inputId}\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n ref={inputRef}\n data-test={dataTest && `${dataTest}-input`}\n disabled={field.disabled}\n type='checkbox'\n checked={checkedProp == null ? undefined : checked}\n defaultChecked={defaultChecked}\n onChange={(e) => {\n setChecked(e.target.checked);\n if (onChange) {\n onChange(e);\n }\n }}\n aria-checked={indeterminate ? 'mixed' : undefined}\n value={value as unknown as string}\n {...elemProps}\n />\n <CheckboxBox\n aria-hidden='true'\n disabled={field.disabled}\n checked={(checked != null && checked) || indeterminate}\n >\n {indeterminate ? <InputDashIcon /> : checked ? <InputCheckIcon /> : null}\n </CheckboxBox>\n {label &&\n (tooltip ? (\n <Tooltip\n size={size}\n trigger={\n <Label htmlFor={inputId} disabled={!!field.disabled} size={size}>\n <TextWithDashedUnderline>{label}</TextWithDashedUnderline>\n </Label>\n }\n >\n {tooltip}\n </Tooltip>\n ) : (\n <Label htmlFor={inputId} disabled={!!field.disabled} size={size}>\n {label}\n </Label>\n ))}\n </Container>\n );\n});\n\nexport default Checkbox;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Checkbox-Cttn1t8T.mjs","names":[],"sources":["../components/Checkbox/Checkbox.tsx"],"sourcesContent":["import { uniqueId } from 'lodash-es';\nimport {\n type ChangeEvent,\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\nimport { InputCheckIcon, InputDashIcon } from '@persona/icons';\nimport useFormField from 'design-system/components/FormControl/useFormField';\nimport Stack from 'design-system/components/Stack/Stack';\nimport Tooltip from 'design-system/components/Tooltip';\nimport { TextWithDashedUnderline } from 'design-system/components/Tooltip/TextUnderlineTooltip';\nimport { opacityOf } from 'design-system/lib/color';\nimport {\n isChecked,\n isDisabled,\n isFocusedVisible,\n isHovered,\n isIndeterminate,\n isNotDisabled,\n} from 'design-system/lib/pseudoClass';\nimport { semanticColor, semanticOnly } from 'design-system/lib/semanticColor';\nimport useControlled from 'design-system/lib/useControlled';\nimport { focusStyle } from 'design-system/mixins/focus';\nimport { TransitionDuration } from 'design-system/variables/transitions';\n\nconst Container = styled(Stack)<{ size: 'md' | 'sm'; disabled?: boolean }>`\n position: relative;\n cursor: pointer;\n\n flex-wrap: nowrap;\n\n ${({ size }) =>\n size === 'sm' &&\n css`\n height: 16px;\n `}\n\n &${isDisabled} {\n cursor: default;\n }\n`;\n\nconst CheckboxBox = styled.div<{ disabled?: boolean; checked?: boolean }>`\n cursor: pointer;\n display: flex;\n flex: 0 0 16px;\n justify-content: center;\n align-items: center;\n transition:\n box-shadow ${TransitionDuration.Fast},\n background-color ${TransitionDuration.Fast},\n border-color ${TransitionDuration.Fast};\n border-radius: 3px;\n height: ${Spacing[4]};\n width: ${Spacing[4]};\n box-sizing: border-box;\n border: 1px solid ${({ theme }) => semanticColor(theme, 'InputBorderStrong', Color.BorderInputCheckbox)};\n background: ${({ theme }) => semanticColor(theme, 'InputSurfaceDefault', Color.BackgroundInputDefault)};\n\n svg {\n color: ${({ theme }) => semanticColor(theme, 'FgInverseStatic', Color.BorderIconInverse)};\n }\n\n &${isDisabled} {\n cursor: default;\n background: ${({ theme }) =>\n semanticColor(theme, 'InputSurfaceDisabled', Color.BackgroundInputDisabled)};\n border-color: ${({ theme }) =>\n semanticColor(theme, 'InputBorderDisabled', Color.BorderInputDisabled)};\n ${semanticOnly((tokens) => `opacity: ${opacityOf(tokens.Opacity65)};`)}\n }\n\n ${({ checked, theme }) =>\n checked &&\n css`\n border-color: ${semanticColor(theme, 'InputBorderAccent', Color.BackgroundInputActive)};\n background: ${semanticColor(theme, 'InputSurfaceAccent', Color.BackgroundInputActive)};\n\n &${isDisabled} {\n border-color: ${semanticColor(theme, 'InputSurfaceAccentDisabled', Color.BackgroundInputActiveDisabled)};\n background: ${semanticColor(theme, 'InputSurfaceAccentDisabled', Color.BackgroundInputActiveDisabled)};\n }\n `}\n`;\n\nconst CheckboxInput = styled.input`\n cursor: inherit;\n height: 16px;\n width: 16px;\n margin: 0;\n border: 0;\n opacity: 0;\n overflow: hidden;\n position: absolute;\n\n &${isHovered}${isNotDisabled} ~ ${CheckboxBox} {\n border-color: ${({ theme }) =>\n semanticColor(theme, 'InputBorderHoverStrong', Color.BorderInputCheckboxHover)};\n ${semanticOnly((tokens) => `background: ${tokens.InputSurfaceHover};`)}\n }\n\n &${isChecked}, &${isIndeterminate} {\n &${isHovered}${isNotDisabled} ~ ${CheckboxBox} {\n background: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccentHover', Color.BackgroundInputActiveHover)};\n border-color: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccentHover', Color.BackgroundInputActiveHover)};\n }\n }\n\n &${isFocusedVisible}${isNotDisabled} ~ ${CheckboxBox} {\n ${focusStyle}\n }\n`;\n\nconst Label = styled.label<{ disabled: boolean; size: 'md' | 'sm' }>`\n cursor: inherit;\n color: ${({ theme }) => semanticColor(theme, 'FgPrimary', Color.TextPrimary)};\n\n ${({ size }) =>\n size === 'sm'\n ? css`\n ${Typography.TextSmall};\n line-height: 16px;\n `\n : css`\n ${Typography.TextMedium};\n\n /** Nudge text for visual alignment */\n position: relative;\n bottom: -1px;\n `}\n\n ${({ theme, disabled }) =>\n disabled &&\n css`\n cursor: default;\n color: ${semanticColor(theme, 'FgDisabled', theme.color.text.disabled)};\n `}\n`;\n\nexport interface CheckboxProps extends Omit<ComponentPropsWithoutRef<'input'>, 'value' | 'size'> {\n /**\n * `id` for the underlying `<input>`. If not provided a unique ID is generated\n * automatically and linked to the label.\n */\n id?: string;\n /** Called whenever the checked state changes. */\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n /** Visible label rendered to the right of the checkbox box. */\n label?: ReactNode;\n /** Disables interaction and renders the checkbox in a muted style. */\n disabled?: boolean;\n /**\n * When true the checkbox displays a dash (−) instead of a tick, indicating a\n * mixed / partially-selected state. Sets `aria-checked=\"mixed\"` for screen readers.\n */\n indeterminate?: boolean;\n /**\n * Controlled checked state. Omit (or pass `undefined`) to let the component\n * manage state internally via `defaultChecked`.\n */\n checked?: boolean;\n /** Value submitted with a form. */\n value?: unknown;\n 'data-test'?: string;\n /** Additional props forwarded to the outer container `<div>`. */\n containerProps?: ComponentPropsWithoutRef<'div'>;\n /**\n * Size of the checkbox and its label text.\n * @defaultValue 'md'\n */\n size?: 'md' | 'sm';\n /**\n * Tooltip content to display when hovering over the label.\n * When provided, the label will be wrapped in a tooltip.\n */\n tooltip?: ReactNode;\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n className,\n disabled,\n indeterminate,\n onChange,\n checked: checkedProp,\n defaultChecked,\n id,\n label,\n 'data-test': dataTest,\n containerProps,\n value,\n size = 'md',\n tooltip,\n ...elemProps\n },\n ref,\n) {\n const field = useFormField({ disabled });\n const [checked, setChecked] = useControlled({\n controlledValue: checkedProp,\n default: defaultChecked,\n });\n const generatedId = useMemo(() => uniqueId('pds_checkbox__'), []);\n const inputRef = useRef<HTMLInputElement>();\n\n // Use the inputId from FormControl context if available, otherwise use the provided id or generate one\n const inputId = field.inputId || id || generatedId;\n\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n useImperativeHandle(ref, () => inputRef.current, [inputRef]);\n\n // Re-sync on `checked` changes too: a native click clears the input's\n // `indeterminate` property, so it must be re-applied when the prop stays true.\n useEffect(() => {\n if (inputRef.current) {\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate, checked, inputRef]);\n\n return (\n <Container\n direction='horizontal'\n className={className}\n data-test={dataTest}\n disabled={field.disabled}\n align='center'\n size={size}\n {...containerProps}\n >\n <CheckboxInput\n id={inputId}\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n ref={inputRef}\n data-test={dataTest && `${dataTest}-input`}\n disabled={field.disabled}\n type='checkbox'\n checked={checkedProp == null ? undefined : checked}\n defaultChecked={defaultChecked}\n onChange={(e) => {\n setChecked(e.target.checked);\n if (onChange) {\n onChange(e);\n }\n }}\n aria-checked={indeterminate ? 'mixed' : undefined}\n value={value as unknown as string}\n {...elemProps}\n />\n <CheckboxBox\n aria-hidden='true'\n disabled={field.disabled}\n checked={(checked != null && checked) || indeterminate}\n >\n {indeterminate ? <InputDashIcon /> : checked ? <InputCheckIcon /> : null}\n </CheckboxBox>\n {label &&\n (tooltip ? (\n <Tooltip\n size={size}\n trigger={\n <Label htmlFor={inputId} disabled={!!field.disabled} size={size}>\n <TextWithDashedUnderline>{label}</TextWithDashedUnderline>\n </Label>\n }\n >\n {tooltip}\n </Tooltip>\n ) : (\n <Label htmlFor={inputId} disabled={!!field.disabled} size={size}>\n {label}\n </Label>\n ))}\n </Container>\n );\n});\n\nexport default Checkbox;\n"],"mappings":";;;;;;;;;;;;;;;;AAiCA,MAAM,YAAY,OAAO,MAAM;;;;;;KAM1B,EAAE,WACH,SAAS,QACT,GAAG;;MAED;;KAED,WAAW;;;;AAKhB,MAAM,cAAc,OAAO,GAA8C;;;;;;;yBAOhC;+BACM;2BACJ;;YAE/B,QAAQ,GAAG;WACZ,QAAQ,GAAG;;uBAEC,EAAE,YAAY,cAAc,OAAO,qBAAqB,MAAM,oBAAoB,CAAC;iBACzF,EAAE,YAAY,cAAc,OAAO,uBAAuB,MAAM,uBAAuB,CAAC;;;cAG3F,EAAE,YAAY,cAAc,OAAO,mBAAmB,MAAM,kBAAkB,CAAC;;;KAGxF,WAAW;;mBAEG,EAAE,YACf,cAAc,OAAO,wBAAwB,MAAM,wBAAwB,CAAC;qBAC7D,EAAE,YACjB,cAAc,OAAO,uBAAuB,MAAM,oBAAoB,CAAC;MACvE,cAAc,WAAW,YAAY,UAAU,OAAO,UAAU,CAAC,GAAG,CAAC;;;KAGtE,EAAE,SAAS,YACZ,WACA,GAAG;sBACe,cAAc,OAAO,qBAAqB,MAAM,sBAAsB,CAAC;oBACzE,cAAc,OAAO,sBAAsB,MAAM,sBAAsB,CAAC;;SAEnF,WAAW;wBACI,cAAc,OAAO,8BAA8B,MAAM,8BAA8B,CAAC;sBAC1F,cAAc,OAAO,8BAA8B,MAAM,8BAA8B,CAAC;;MAExG;;AAGN,MAAM,gBAAgB,OAAO,KAAK;;;;;;;;;;KAU7B,YAAY,cAAc,KAAK,YAAY;qBAC3B,EAAE,YACjB,cAAc,OAAO,0BAA0B,MAAM,yBAAyB,CAAC;MAC/E,cAAc,WAAW,eAAe,OAAO,kBAAkB,GAAG,CAAC;;;KAGtE,UAAU,KAAK,gBAAgB;OAC7B,YAAY,cAAc,KAAK,YAAY;qBAC7B,EAAE,YAAY,cAAc,OAAO,2BAA2B,MAAM,2BAA2B,CAAC;uBAC9F,EAAE,YAAY,cAAc,OAAO,2BAA2B,MAAM,2BAA2B,CAAC;;;;KAIlH,mBAAmB,cAAc,KAAK,YAAY;MACjD,WAAW;;;AAIjB,MAAM,QAAQ,OAAO,KAA+C;;YAExD,EAAE,YAAY,cAAc,OAAO,aAAa,MAAM,YAAY,CAAC;;KAE1E,EAAE,WACH,SAAS,OACL,GAAG;YACC,WAAW,UAAU;;YAGzB,GAAG;YACC,WAAW,WAAW;;;;;UAKxB;;KAEL,EAAE,OAAO,eACV,YACA,GAAG;;eAEQ,cAAc,OAAO,cAAc,MAAM,MAAM,KAAK,SAAS,CAAC;MACvE;;AA0CN,MAAa,WAAW,WAA4C,SAAS,SAC3E,EACE,WACA,UACA,eACA,UACA,SAAS,aACT,gBACA,IACA,OACA,aAAa,UACb,gBACA,OACA,OAAO,MACP,SACA,GAAG,aAEL,KACA;CACA,MAAM,QAAQ,aAAa,EAAE,UAAU,CAAC;CACxC,MAAM,CAAC,SAAS,cAAc,cAAc;EAC1C,iBAAiB;EACjB,SAAS;EACV,CAAC;CACF,MAAM,cAAc,cAAc,SAAS,iBAAiB,EAAE,EAAE,CAAC;CACjE,MAAM,WAAW,QAA0B;CAG3C,MAAM,UAAU,MAAM,WAAW,MAAM;AAGvC,qBAAoB,WAAW,SAAS,SAAS,CAAC,SAAS,CAAC;AAI5D,iBAAgB;AACd,MAAI,SAAS,QAEX,UAAS,QAAQ,gBAAgB;IAElC;EAAC;EAAe;EAAS;EAAS,CAAC;AAEtC,QACE,qBAAC,WAAD;EACE,WAAU;EACC;EACX,aAAW;EACX,UAAU,MAAM;EAChB,OAAM;EACA;EACN,GAAI;YAPN;GASE,oBAAC,eAAD;IACE,IAAI;IAEJ,KAAK;IACL,aAAW,YAAY,GAAG,SAAS;IACnC,UAAU,MAAM;IAChB,MAAK;IACL,SAAS,eAAe,OAAO,KAAA,IAAY;IAC3B;IAChB,WAAW,MAAM;AACf,gBAAW,EAAE,OAAO,QAAQ;AAC5B,SAAI,SACF,UAAS,EAAE;;IAGf,gBAAc,gBAAgB,UAAU,KAAA;IACjC;IACP,GAAI;IACJ,CAAA;GACF,oBAAC,aAAD;IACE,eAAY;IACZ,UAAU,MAAM;IAChB,SAAU,WAAW,QAAQ,WAAY;cAExC,gBAAgB,oBAAC,eAAD,EAAiB,CAAA,GAAG,UAAU,oBAAC,gBAAD,EAAkB,CAAA,GAAG;IACxD,CAAA;GACb,UACE,UACC,oBAAC,SAAD;IACQ;IACN,SACE,oBAAC,OAAD;KAAO,SAAS;KAAS,UAAU,CAAC,CAAC,MAAM;KAAgB;eACzD,oBAAC,yBAAD,EAAA,UAA0B,OAAgC,CAAA;KACpD,CAAA;cAGT;IACO,CAAA,GAEV,oBAAC,OAAD;IAAO,SAAS;IAAS,UAAU,CAAC,CAAC,MAAM;IAAgB;cACxD;IACK,CAAA;GAEF;;EAEd"}
@@ -1,2 +1,2 @@
1
- import { n as CheckboxProps, t as Checkbox } from "./Checkbox-CsJlWz-r.mjs";
1
+ import { n as CheckboxProps, t as Checkbox } from "./Checkbox-CVa8WOf2.mjs";
2
2
  export { Checkbox, Checkbox as default, CheckboxProps };
@@ -1,5 +1,5 @@
1
- import { n as CheckboxProps } from "./Checkbox-CsJlWz-r.mjs";
2
- import { o as ImplementsFormField } from "./inputFields-CXelxYhd.mjs";
1
+ import { n as CheckboxProps } from "./Checkbox-CVa8WOf2.mjs";
2
+ import { o as ImplementsFormField } from "./inputFields-BCNC1FWx.mjs";
3
3
  import { ReactElement } from "react";
4
4
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
5
  import { AriaCheckboxGroupProps } from "react-aria";
@@ -22,4 +22,4 @@ declare const CheckboxGroupField: ({
22
22
  }: CheckboxGroupFieldProps) => _$react_jsx_runtime0.JSX.Element;
23
23
  //#endregion
24
24
  export { CheckboxGroupField as t };
25
- //# sourceMappingURL=CheckboxGroupField-DjKp63Dr.d.mts.map
25
+ //# sourceMappingURL=CheckboxGroupField-BpHN_2QP.d.mts.map
@@ -1,2 +1,2 @@
1
- import { t as CheckboxGroupField } from "./CheckboxGroupField-DjKp63Dr.mjs";
1
+ import { t as CheckboxGroupField } from "./CheckboxGroupField-BpHN_2QP.mjs";
2
2
  export { CheckboxGroupField as default };
@@ -1,4 +1,4 @@
1
- import { t as ValueControlProps } from "./types-BfrEduGv.mjs";
1
+ import { t as ValueControlProps } from "./types-C_ZEgHNa.mjs";
2
2
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region components/DataTable/TableControls/FiltersV2/value-controls/ChoicesValueControl/ChoicesValueControl.d.ts
@@ -1,5 +1,5 @@
1
- import { n as ComboboxMultiSelectProps } from "./ComboboxMultiSelect-BSyJc46m.mjs";
2
- import { n as ComboboxSingleSelectProps } from "./ComboboxSingleSelect-Dg_6h4iB.mjs";
1
+ import { n as ComboboxMultiSelectProps } from "./ComboboxMultiSelect-BvJ--m6z.mjs";
2
+ import { n as ComboboxSingleSelectProps } from "./ComboboxSingleSelect-BWrnRA2x.mjs";
3
3
 
4
4
  //#region components/Combobox/Combobox.d.ts
5
5
  type ComboboxProps<T = string> = ComboboxSingleSelectProps<T> | ComboboxMultiSelectProps<T>;
@@ -8,4 +8,4 @@ declare const Combobox: <T = string>(props: ComboboxProps<T> & {
8
8
  }) => React.ReactElement;
9
9
  //#endregion
10
10
  export { ComboboxProps as n, Combobox as t };
11
- //# sourceMappingURL=Combobox-D1iXiYGV.d.mts.map
11
+ //# sourceMappingURL=Combobox-C4C2P8lF.d.mts.map
@@ -1,20 +1,20 @@
1
1
  import { a as styled, r as css } from "./styledComponentsInterop-NxwFjeA4.mjs";
2
+ import { isDisabled, isHovered, isNotDisabled } from "./lib/pseudoClass.mjs";
2
3
  import { semanticColor } from "./lib/semanticColor.mjs";
4
+ import { focusStyle } from "./mixins/focus.mjs";
5
+ import { semanticScrollbar } from "./mixins/scrollbar.mjs";
3
6
  import { i as Paragraph } from "./Text-CSwFifQF.mjs";
4
- import { isDisabled, isHovered, isNotDisabled } from "./lib/pseudoClass.mjs";
5
7
  import { useOutsideClick } from "./lib/useOutsideClick.mjs";
6
8
  import { Z_INDICES } from "./lib/zindex.mjs";
7
- import { focusStyle } from "./mixins/focus.mjs";
8
- import { semanticScrollbar } from "./mixins/scrollbar.mjs";
9
9
  import { n as Stack } from "./Stack-BkC7FCdF.mjs";
10
- import { n as Button } from "./IconButton-H5vDZOdo.mjs";
11
- import { n as Sticker } from "./Sticker-DdhSpTcV.mjs";
12
- import { n as useFormField } from "./useFormField-CbNYbDdp.mjs";
13
- import { r as InputGroup } from "./Input-CY14-YeD.mjs";
10
+ import { n as Button } from "./IconButton-D4awF770.mjs";
11
+ import { n as Sticker } from "./Sticker-CUqHa9Mo.mjs";
12
+ import { n as useFormField } from "./useFormField-BAmkdxtA.mjs";
13
+ import { r as InputGroup } from "./Input-DD4jzJhK.mjs";
14
14
  import Input_default from "./components/Input/index.mjs";
15
- import { c as MenuList, n as IconContainer, o as MenuHeading, s as MenuItem, t as FloatingCard } from "./Menu-Dw6Rcpk6.mjs";
16
- import { t as Checkbox } from "./Checkbox-BQC_SmBt.mjs";
17
- import { t as Spinner } from "./Spinner-uVZyOh1T.mjs";
15
+ import { c as MenuList, n as IconContainer, o as MenuHeading, s as MenuItem, t as FloatingCard } from "./Menu-DlN0A5Nb.mjs";
16
+ import { t as Checkbox } from "./Checkbox-Cttn1t8T.mjs";
17
+ import { t as Spinner } from "./Spinner-0Vqw_68r.mjs";
18
18
  import { Color, Spacing, Typography } from "@persona/design-tokens";
19
19
  import { Fragment, cloneElement, forwardRef, isValidElement, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
20
20
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -507,7 +507,7 @@ function DropdownPortalWrapper({ children, portal }) {
507
507
  * stays on the input; the footer is never a Tab stop (mirrors the `BackRow`
508
508
  * affordance).
509
509
  */
510
- function useComboboxFooterAction({ footerAction, isOptionsLoading, itemCount, isMenuOpen, inputValue, highlightedIndex, setHighlightedIndex, inputId }) {
510
+ function useComboboxFooterAction({ footerAction, isOptionsLoading, itemCount, firstNavigableIndex = 0, lastNavigableIndex = itemCount - 1, isMenuOpen, inputValue, highlightedIndex, setHighlightedIndex, inputId }) {
511
511
  const [isFooterHighlighted, setIsFooterHighlighted] = useState(false);
512
512
  const footerActionId = `${inputId}-footer-action`;
513
513
  const showFooterAction = Boolean(footerAction) && !isOptionsLoading && itemCount > 0;
@@ -535,13 +535,19 @@ function useComboboxFooterAction({ footerAction, isOptionsLoading, itemCount, is
535
535
  event.preventDefault();
536
536
  nativeEvent.preventDownshiftDefault = true;
537
537
  };
538
- if (!isFooterHighlighted && event.key === "ArrowDown" && highlightedIndex === itemCount - 1) {
538
+ if (firstNavigableIndex < 0 && (event.key === "ArrowDown" || event.key === "ArrowUp")) {
539
539
  consume();
540
540
  setIsFooterHighlighted(true);
541
541
  setHighlightedIndex(-1);
542
542
  return true;
543
543
  }
544
- if (!isFooterHighlighted && event.key === "ArrowUp" && highlightedIndex === 0) {
544
+ if (!isFooterHighlighted && event.key === "ArrowDown" && highlightedIndex === lastNavigableIndex) {
545
+ consume();
546
+ setIsFooterHighlighted(true);
547
+ setHighlightedIndex(-1);
548
+ return true;
549
+ }
550
+ if (!isFooterHighlighted && event.key === "ArrowUp" && highlightedIndex === firstNavigableIndex) {
545
551
  consume();
546
552
  setIsFooterHighlighted(true);
547
553
  setHighlightedIndex(-1);
@@ -551,13 +557,13 @@ function useComboboxFooterAction({ footerAction, isOptionsLoading, itemCount, is
551
557
  if (event.key === "ArrowUp") {
552
558
  consume();
553
559
  setIsFooterHighlighted(false);
554
- setHighlightedIndex(itemCount - 1);
560
+ setHighlightedIndex(lastNavigableIndex);
555
561
  return true;
556
562
  }
557
563
  if (event.key === "ArrowDown") {
558
564
  consume();
559
565
  setIsFooterHighlighted(false);
560
- setHighlightedIndex(0);
566
+ setHighlightedIndex(firstNavigableIndex);
561
567
  return true;
562
568
  }
563
569
  if (event.key === "Enter") {
@@ -571,7 +577,8 @@ function useComboboxFooterAction({ footerAction, isOptionsLoading, itemCount, is
571
577
  showFooterAction,
572
578
  isFooterHighlighted,
573
579
  highlightedIndex,
574
- itemCount,
580
+ firstNavigableIndex,
581
+ lastNavigableIndex,
575
582
  footerAction,
576
583
  setHighlightedIndex
577
584
  ]),
@@ -1414,7 +1421,7 @@ const StickerComboboxInput = styled(ComboboxInput)`
1414
1421
  color: transparent;
1415
1422
  caret-color: transparent;
1416
1423
  `;
1417
- function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading, value, onChange, onInputChange, placeholder = "Select an option...", emptyStateMessage = "No options found", disabled = false, hasWarning, hasError, required, id, labelId, "aria-label": ariaLabel, onOpenChange, portal = false, portalContainerRef: externalPortalContainerRef, trigger, embedded = false, footerAction, ...props }, ref) {
1424
+ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading, value, onChange, optionDisabledReason, onInputChange, placeholder = "Select an option...", emptyStateMessage = "No options found", disabled = false, hasWarning, hasError, required, id, labelId, "aria-label": ariaLabel, onOpenChange, portal = false, portalContainerRef: externalPortalContainerRef, trigger, embedded = false, footerAction, ...props }, ref) {
1418
1425
  const field = useFormField({
1419
1426
  hasWarning,
1420
1427
  hasError,
@@ -1494,12 +1501,14 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1494
1501
  kind: "leaf",
1495
1502
  option
1496
1503
  }));
1497
- return navigableItems.filter((item) => item.kind === "group" || filteredOptions.some((f) => f.value === item.option.value));
1504
+ const filteredValues = new Set(filteredOptions.map((option) => option.value));
1505
+ return navigableItems.filter((item) => item.kind === "group" || filteredValues.has(item.option.value));
1498
1506
  }, [
1499
1507
  isSearching,
1500
1508
  filteredOptions,
1501
1509
  navigableItems
1502
1510
  ]);
1511
+ const downshiftNodes = useMemo(() => new Set(downshiftItems.map((item) => item.kind === "group" ? item.group : item.option)), [downshiftItems]);
1503
1512
  const allLeaves = useMemo(() => flattenLeafOptions(options), [options]);
1504
1513
  const flatOptionsForFallback = useMemo(() => flattenOptions(options), [options]);
1505
1514
  const selectedOption = allLeaves.find(({ option }) => option.value === value)?.option ?? flatOptionsForFallback.find((option) => option.value === value) ?? null;
@@ -1519,9 +1528,11 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1519
1528
  setNavigationPath((prev) => [...prev, groupLabel]);
1520
1529
  setInputValue("");
1521
1530
  }, []);
1531
+ const isItemDisabled = useCallback((item) => item?.kind === "leaf" && optionDisabledReason?.(item.option) != null, [optionDisabledReason]);
1522
1532
  const { isOpen, getToggleButtonProps, getMenuProps, getInputProps, getItemProps, highlightedIndex, setHighlightedIndex, openMenu } = useCombobox({
1523
1533
  items: downshiftItems,
1524
1534
  itemToString,
1535
+ isItemDisabled,
1525
1536
  isOpen: embedded ? isDropdownOpen : void 0,
1526
1537
  selectedItem: isDropdownOpen ? null : selectedNavigableItem,
1527
1538
  inputValue,
@@ -1540,6 +1551,7 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1540
1551
  onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {
1541
1552
  if (newSelectedItem == null || newSelectedItem.kind !== "leaf") return;
1542
1553
  const leaf = newSelectedItem.option;
1554
+ if (optionDisabledReason?.(leaf) != null) return;
1543
1555
  committedLabelRef.current = leaf.label;
1544
1556
  onChange?.(leaf.value);
1545
1557
  setInputValue(leaf.label);
@@ -1554,6 +1566,7 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1554
1566
  case useCombobox.stateChangeTypes.ItemClick:
1555
1567
  case useCombobox.stateChangeTypes.InputKeyDownEnter: {
1556
1568
  const candidate = changes.selectedItem;
1569
+ if (candidate?.kind === "leaf" && optionDisabledReason?.(candidate.option) != null) return state;
1557
1570
  if (candidate && candidate.kind === "group") {
1558
1571
  pendingDescentRef.current = candidate.group.label;
1559
1572
  return {
@@ -1585,6 +1598,8 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1585
1598
  const renderLeaf = useCallback((option, currentIndex) => {
1586
1599
  const isHighlighted = highlightedIndex === currentIndex;
1587
1600
  const isSelected = selectedOption?.value === option.value;
1601
+ const disabledReason = optionDisabledReason?.(option);
1602
+ const descriptionId = `${field.inputId}-disabled-option-${currentIndex}`;
1588
1603
  const itemProps = getItemProps({
1589
1604
  item: {
1590
1605
  kind: "leaf",
@@ -1604,19 +1619,26 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1604
1619
  title: option.description,
1605
1620
  children: option.description
1606
1621
  })] });
1607
- return /* @__PURE__ */ jsx(StyledMenuItem, {
1622
+ return /* @__PURE__ */ jsxs(StyledMenuItem, {
1608
1623
  ...itemProps,
1624
+ disabled: disabledReason != null,
1625
+ "aria-describedby": disabledReason != null ? descriptionId : void 0,
1609
1626
  focused: isHighlighted,
1610
1627
  selected: isSelected,
1611
1628
  size,
1612
1629
  tabIndex: -1,
1613
- children: labelContent
1630
+ children: [labelContent, disabledReason != null && /* @__PURE__ */ jsx(Description, {
1631
+ id: descriptionId,
1632
+ children: disabledReason
1633
+ })]
1614
1634
  }, `leaf-${String(option.value)}-${currentIndex}`);
1615
1635
  }, [
1616
1636
  highlightedIndex,
1617
1637
  selectedOption,
1618
1638
  getItemProps,
1619
- size
1639
+ size,
1640
+ optionDisabledReason,
1641
+ field.inputId
1620
1642
  ]);
1621
1643
  const renderNestedGroupRow = useCallback((group, currentIndex) => {
1622
1644
  const isHighlighted = highlightedIndex === currentIndex;
@@ -1656,7 +1678,7 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1656
1678
  const walk = (node, key) => {
1657
1679
  if (isOptionGroup(node)) {
1658
1680
  if (node.nested) {
1659
- if (!downshiftItems.some((i) => i.kind === "group" && i.group === node)) return null;
1681
+ if (!downshiftNodes.has(node)) return null;
1660
1682
  navIndex++;
1661
1683
  return /* @__PURE__ */ jsx(Fragment, { children: renderNestedGroupRow(node, navIndex) }, key);
1662
1684
  }
@@ -1668,13 +1690,13 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1668
1690
  if (childNodes.length === 0) return null;
1669
1691
  return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(MenuHeading, { children: node.label }), childNodes] }, key);
1670
1692
  }
1671
- if (!downshiftItems.some((i) => i.kind === "leaf" && i.option === node)) return null;
1693
+ if (!downshiftNodes.has(node)) return null;
1672
1694
  navIndex++;
1673
1695
  return renderLeaf(node, navIndex);
1674
1696
  };
1675
1697
  return items.map((item, idx) => walk(item, `item-${idx}`));
1676
1698
  }, [
1677
- downshiftItems,
1699
+ downshiftNodes,
1678
1700
  renderLeaf,
1679
1701
  renderNestedGroupRow
1680
1702
  ]);
@@ -1684,10 +1706,25 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1684
1706
  if (embedded && isMenuOpen && comboboxInputRef.current) comboboxInputRef.current.focus({ preventScroll: true });
1685
1707
  }, [embedded, isMenuOpen]);
1686
1708
  const dropdownPosition = useDropdownPosition(portalContainerRef, isMenuOpen, embedded ? false : portal);
1709
+ const { firstNavigableIndex, lastNavigableIndex } = useMemo(() => {
1710
+ let firstNavigableIndex = -1;
1711
+ let lastNavigableIndex = -1;
1712
+ downshiftItems.forEach((item, index) => {
1713
+ if (isItemDisabled(item)) return;
1714
+ if (firstNavigableIndex === -1) firstNavigableIndex = index;
1715
+ lastNavigableIndex = index;
1716
+ });
1717
+ return {
1718
+ firstNavigableIndex,
1719
+ lastNavigableIndex
1720
+ };
1721
+ }, [downshiftItems, isItemDisabled]);
1687
1722
  const { isFooterHighlighted, footerActionId, showFooterAction, handleFooterKeyDown } = useComboboxFooterAction({
1688
1723
  footerAction,
1689
1724
  isOptionsLoading,
1690
1725
  itemCount: downshiftItems.length,
1726
+ firstNavigableIndex,
1727
+ lastNavigableIndex,
1691
1728
  isMenuOpen,
1692
1729
  inputValue,
1693
1730
  highlightedIndex,
@@ -1702,6 +1739,10 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1702
1739
  if (!isMenuOpen) return;
1703
1740
  if (handleFooterKeyDown(event)) return;
1704
1741
  if (isSearching) return;
1742
+ if (event.key === "Enter" && downshiftItems[highlightedIndex]?.kind === "group") {
1743
+ event.stopPropagation();
1744
+ return;
1745
+ }
1705
1746
  if (event.key === "ArrowRight") {
1706
1747
  const highlighted = downshiftItems[highlightedIndex];
1707
1748
  if (highlighted && highlighted.kind === "group") {
@@ -1739,15 +1780,18 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
1739
1780
  isMenuOpen
1740
1781
  ]);
1741
1782
  useEffect(() => {
1742
- if (isMenuOpen && downshiftItems.length > 0 && !isFooterHighlighted) {
1743
- if (highlightedIndex === -1 || highlightedIndex >= downshiftItems.length) setHighlightedIndex(0);
1744
- }
1783
+ if (!isMenuOpen || isFooterHighlighted) return;
1784
+ const highlighted = downshiftItems[highlightedIndex];
1785
+ if (highlighted != null && !isItemDisabled(highlighted)) return;
1786
+ if (highlightedIndex !== firstNavigableIndex) setHighlightedIndex(firstNavigableIndex);
1745
1787
  }, [
1746
1788
  downshiftItems,
1747
1789
  isMenuOpen,
1748
1790
  highlightedIndex,
1749
1791
  isFooterHighlighted,
1750
- setHighlightedIndex
1792
+ setHighlightedIndex,
1793
+ isItemDisabled,
1794
+ firstNavigableIndex
1751
1795
  ]);
1752
1796
  const displayValue = isMenuOpen ? inputValue : committedLabelRef.current ?? selectedOption?.label ?? "";
1753
1797
  const hasSticker = !isMenuOpen && selectedOption?.labelStickerVariant;
@@ -1901,4 +1945,4 @@ const Combobox = forwardRef(ComboboxComponent);
1901
1945
  //#endregion
1902
1946
  export { CaretButton as n, flattenOptions as r, Combobox as t };
1903
1947
 
1904
- //# sourceMappingURL=Combobox-MCaDc7h6.mjs.map
1948
+ //# sourceMappingURL=Combobox-CsXnJKvB.mjs.map