@persona/design-system 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (575) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/dist/{Action-C2waxwIy.d.mts → Action-C2FTJhnQ.d.mts} +3 -3
  3. package/dist/Action.d.mts +1 -1
  4. package/dist/AdvancedFilterRuleRow.d.mts +2 -2
  5. package/dist/AdvancedFilterRulesPopover.d.mts +2 -2
  6. package/dist/ArrayValueControl.d.mts +1 -1
  7. package/dist/Attribute.d.mts +8 -6
  8. package/dist/{Badge-CM2TzkdE.mjs → Badge-BtNIvtDZ.mjs} +3 -3
  9. package/dist/{Badge-CM2TzkdE.mjs.map → Badge-BtNIvtDZ.mjs.map} +1 -1
  10. package/dist/BooleanValueControl.d.mts +1 -1
  11. package/dist/{Breadcrumb-Df06cTnA.d.mts → Breadcrumb-BlAhp45l.d.mts} +1 -1
  12. package/dist/Breadcrumb.d.mts +1 -1
  13. package/dist/{Breadcrumbs-BEYQlGbW.mjs → Breadcrumbs-CR-xdruP.mjs} +16 -15
  14. package/dist/Breadcrumbs-CR-xdruP.mjs.map +1 -0
  15. package/dist/{Breadcrumbs-D_Gzd4_J.d.mts → Breadcrumbs-DdZ14ZFw.d.mts} +2 -2
  16. package/dist/Breadcrumbs.d.mts +1 -1
  17. package/dist/{Button-CRFbWv3l.d.mts → Button-CTgyA3gc.d.mts} +5 -4
  18. package/dist/Button.d.mts +1 -1
  19. package/dist/{Calendar-DjnoZVcT.d.mts → Calendar-_gM6U5ET.d.mts} +1 -1
  20. package/dist/Calendar.d.mts +1 -1
  21. package/dist/CalendarBase.d.mts +1 -1
  22. package/dist/Card-Dorym91P.d.mts +75 -0
  23. package/dist/{Card-CKrJtn1f.mjs → Card-vQIPtdXi.mjs} +12 -10
  24. package/dist/Card-vQIPtdXi.mjs.map +1 -0
  25. package/dist/Card.d.mts +1 -1
  26. package/dist/Card2.d.mts +3 -3
  27. package/dist/{CardV2-B2wx1NE3.mjs → CardV2-CBjhsfrn.mjs} +19 -18
  28. package/dist/CardV2-CBjhsfrn.mjs.map +1 -0
  29. package/dist/{Checkbox-DwZEsi7x.mjs → Checkbox-BHZ7c7_6.mjs} +27 -23
  30. package/dist/Checkbox-BHZ7c7_6.mjs.map +1 -0
  31. package/dist/{Checkbox-CwPXPLCi.d.mts → Checkbox-DRJXDs2T.d.mts} +1 -1
  32. package/dist/Checkbox.d.mts +1 -1
  33. package/dist/CheckboxGroupField.d.mts +1 -1
  34. package/dist/ChoicesValueControl.d.mts +1 -1
  35. package/dist/CodeHighlight.d.mts +40 -0
  36. package/dist/{Combobox-CKaVX-32.mjs → Combobox-BCYLeZDP.mjs} +23 -22
  37. package/dist/Combobox-BCYLeZDP.mjs.map +1 -0
  38. package/dist/{Combobox-BQN5OwB-.d.mts → Combobox-DMN3nc7E.d.mts} +3 -3
  39. package/dist/Combobox.d.mts +2 -2
  40. package/dist/{ComboboxBase-nfHr19x-.d.mts → ComboboxBase-DBLJYQrh.d.mts} +18 -29
  41. package/dist/ComboboxBase.d.mts +1 -1
  42. package/dist/{ComboboxMultiSelect-DRNj2Mtx.d.mts → ComboboxMultiSelect-CZRLyM_y.d.mts} +2 -2
  43. package/dist/ComboboxMultiSelect.d.mts +1 -1
  44. package/dist/{ComboboxSingleSelect-BkhbEx-F.d.mts → ComboboxSingleSelect-BS6pZpU_.d.mts} +4 -4
  45. package/dist/ComboboxSingleSelect.d.mts +1 -1
  46. package/dist/{CompactBar-CyHbWTv4.d.mts → CompactBar-DEqItiZr.d.mts} +3 -3
  47. package/dist/CompactBar.d.mts +1 -1
  48. package/dist/{ConfigFormGroup-CmCRJyse.mjs → ConfigFormGroup-BnRDAs0j.mjs} +3 -3
  49. package/dist/{ConfigFormGroup-CmCRJyse.mjs.map → ConfigFormGroup-BnRDAs0j.mjs.map} +1 -1
  50. package/dist/{ControlBar-DwAhPcb5.d.mts → ControlBar-BVG5Pbvh.d.mts} +2 -2
  51. package/dist/ControlBar.d.mts +1 -1
  52. package/dist/DataTable.d.mts +17 -6
  53. package/dist/{DateField-tOyrGcx1.d.mts → DateField-CBCo8_d3.d.mts} +2 -2
  54. package/dist/DateField.d.mts +1 -1
  55. package/dist/{DatePicker-Bs9JODNg.d.mts → DatePicker-BZ4_I4Db.d.mts} +2 -2
  56. package/dist/{DatePicker-D2SfjS-N.mjs → DatePicker-BcjrAr7o.mjs} +44 -33
  57. package/dist/DatePicker-BcjrAr7o.mjs.map +1 -0
  58. package/dist/DatePicker.d.mts +1 -1
  59. package/dist/{DateRangePicker-BT6-j8V7.d.mts → DateRangePicker-BMKJquPT.d.mts} +3 -3
  60. package/dist/DateRangePicker.d.mts +1 -1
  61. package/dist/DateRangeValueControl.d.mts +2 -2
  62. package/dist/DateValueControl.d.mts +1 -1
  63. package/dist/{DropdownButton-dpGAmVlN.mjs → DropdownButton-l-fzkb5_.mjs} +3 -3
  64. package/dist/{DropdownButton-dpGAmVlN.mjs.map → DropdownButton-l-fzkb5_.mjs.map} +1 -1
  65. package/dist/DropdownButton.d.mts +2 -2
  66. package/dist/{DropdownMenu-RTxQ0Zu1.d.mts → DropdownMenu-Bg68vvxx.d.mts} +3 -3
  67. package/dist/{DropdownMenu-CyxizDxJ.mjs → DropdownMenu-C0WK4bM0.mjs} +3 -3
  68. package/dist/{DropdownMenu-CyxizDxJ.mjs.map → DropdownMenu-C0WK4bM0.mjs.map} +1 -1
  69. package/dist/DropdownMenu.d.mts +1 -1
  70. package/dist/{ErrorProps-C9T857Wk.d.mts → ErrorProps-7eWoxSes.d.mts} +1 -1
  71. package/dist/ErrorProps.d.mts +1 -1
  72. package/dist/{FieldRegistry-D6niLExM.d.mts → FieldRegistry-BslyuPZw.d.mts} +2 -2
  73. package/dist/FieldRegistry.d.mts +1 -1
  74. package/dist/{FilterBar-DfBV7yKM.d.mts → FilterBar-DjZE4PoB.d.mts} +4 -4
  75. package/dist/FilterBar.d.mts +1 -1
  76. package/dist/FilterPickerMenu.d.mts +2 -2
  77. package/dist/FilterPill.d.mts +1 -1
  78. package/dist/FilterPopover.d.mts +1 -1
  79. package/dist/FloatValueControl.d.mts +1 -1
  80. package/dist/{FormControl-DQFefbrI.mjs → FormControl-BzMbbgr0.mjs} +8 -7
  81. package/dist/FormControl-BzMbbgr0.mjs.map +1 -0
  82. package/dist/{FormControl-BMYRsFkI.d.mts → FormControl-gpLZZpNs.d.mts} +3 -3
  83. package/dist/FormControl.d.mts +1 -1
  84. package/dist/FormControlLabel.d.mts +2 -2
  85. package/dist/{FormField-C7bW-O6H.mjs → FormField-2sNS5PzN.mjs} +16 -16
  86. package/dist/{FormField-C7bW-O6H.mjs.map → FormField-2sNS5PzN.mjs.map} +1 -1
  87. package/dist/{FormField-C1DaUT5U.d.mts → FormField-CZXKvCGt.d.mts} +2 -2
  88. package/dist/FormField.d.mts +1 -1
  89. package/dist/{Header-BKk3qESS.d.mts → Header-1laYnwRP.d.mts} +2 -2
  90. package/dist/Header.d.mts +1 -1
  91. package/dist/{HelperTooltip-CD_yy7Hp.d.mts → HelperTooltip-BPJS3EwC.d.mts} +2 -2
  92. package/dist/HelperTooltip.d.mts +1 -1
  93. package/dist/{HoverCopyableField-Bgt639FR.mjs → HoverCopyableField-CeJ0UP87.mjs} +8 -8
  94. package/dist/{HoverCopyableField-Bgt639FR.mjs.map → HoverCopyableField-CeJ0UP87.mjs.map} +1 -1
  95. package/dist/{IconButton-BnSEV7eR.mjs → IconButton-CnJNIJVQ.mjs} +124 -25
  96. package/dist/IconButton-CnJNIJVQ.mjs.map +1 -0
  97. package/dist/{IconButton-Bh-JJ-0x.d.mts → IconButton-PnrnqQ1s.d.mts} +2 -2
  98. package/dist/IconButton.d.mts +1 -1
  99. package/dist/ImageTile.d.mts +1 -1
  100. package/dist/InlineCombobox.d.mts +1 -1
  101. package/dist/InlineInput.d.mts +1 -1
  102. package/dist/{Input-D7of_GtJ.mjs → Input-DGWThZlt.mjs} +12 -10
  103. package/dist/Input-DGWThZlt.mjs.map +1 -0
  104. package/dist/{Input-1bDdMAgO.d.mts → Input-Diztxhle.d.mts} +5 -9
  105. package/dist/Input.d.mts +1 -1
  106. package/dist/{InputProps-BBShwi8N.d.mts → InputProps-BILq1X-n.d.mts} +2 -2
  107. package/dist/InputProps.d.mts +1 -1
  108. package/dist/IntegerValueControl.d.mts +1 -1
  109. package/dist/{ListBox-DeFHRX2T.d.mts → ListBox-Awtw7Xy_.d.mts} +3 -3
  110. package/dist/{ListBox-jzXQDraS.mjs → ListBox-DqII8giL.mjs} +37 -29
  111. package/dist/ListBox-DqII8giL.mjs.map +1 -0
  112. package/dist/ListBox.d.mts +1 -1
  113. package/dist/ListBoxField.d.mts +2 -2
  114. package/dist/{LoadingShimmer-a2Hv0kAq.mjs → LoadingShimmer-ZyzJs5Vi.mjs} +13 -5
  115. package/dist/LoadingShimmer-ZyzJs5Vi.mjs.map +1 -0
  116. package/dist/LoadingShimmer.d.mts +2 -2
  117. package/dist/{LogicRow-BOhB0uNS.d.mts → LogicRow-DIn0gLEq.d.mts} +3 -3
  118. package/dist/LogicRow.d.mts +1 -1
  119. package/dist/MaskedInput.d.mts +2 -2
  120. package/dist/MatchHighlight.d.mts +1 -1
  121. package/dist/{Menu-DVI8l-4Q.mjs → Menu-CeV3lL2g.mjs} +42 -25
  122. package/dist/Menu-CeV3lL2g.mjs.map +1 -0
  123. package/dist/{Menu-BCVhmNEe.d.mts → Menu-DdHN-drQ.d.mts} +4 -4
  124. package/dist/Menu.d.mts +1 -1
  125. package/dist/{MiddleTruncatedText-DnF7F_1D.mjs → MiddleTruncatedText-CO58jrNF.mjs} +2 -2
  126. package/dist/{MiddleTruncatedText-DnF7F_1D.mjs.map → MiddleTruncatedText-CO58jrNF.mjs.map} +1 -1
  127. package/dist/Modal.d.mts +4 -4
  128. package/dist/{PageHeader-BpGT-BM0.mjs → PageHeader-UI_6yImi.mjs} +9 -6
  129. package/dist/PageHeader-UI_6yImi.mjs.map +1 -0
  130. package/dist/PageHeader.d.mts +2 -2
  131. package/dist/PageLayout.d.mts +1 -1
  132. package/dist/{PageSelector-D6tffcGW.d.mts → PageSelector-CIa3Zts9.d.mts} +3 -3
  133. package/dist/PageSelector.d.mts +1 -1
  134. package/dist/{Pagination-BkjmybcI.d.mts → Pagination-C2eZEM7K.d.mts} +2 -2
  135. package/dist/{Pagination-CVRTcKSG.mjs → Pagination-DgA0U1fa.mjs} +9 -8
  136. package/dist/Pagination-DgA0U1fa.mjs.map +1 -0
  137. package/dist/Pagination.d.mts +1 -1
  138. package/dist/{Pii-CA7aCuYT.mjs → Pii-bxG0qu3t.mjs} +2 -2
  139. package/dist/{Pii-CA7aCuYT.mjs.map → Pii-bxG0qu3t.mjs.map} +1 -1
  140. package/dist/{PillShell-CVqpZ5iV.d.mts → PillShell-D6dN9sWk.d.mts} +2 -2
  141. package/dist/PillShell.d.mts +1 -1
  142. package/dist/{Popover-DlXyKYL5.mjs → Popover-UiOUt5up.mjs} +9 -5
  143. package/dist/Popover-UiOUt5up.mjs.map +1 -0
  144. package/dist/{PseudoClassProps-BPdn-ofQ.d.mts → PseudoClassProps-DnlHhW5u.d.mts} +1 -1
  145. package/dist/PseudoClassProps.d.mts +1 -1
  146. package/dist/{Radio-DYGEt0FT.mjs → Radio-BrQzZhwP.mjs} +22 -18
  147. package/dist/Radio-BrQzZhwP.mjs.map +1 -0
  148. package/dist/{RadioGroup-pegXtLwD.mjs → RadioGroup-Bl9oXPIo.mjs} +3 -3
  149. package/dist/{RadioGroup-pegXtLwD.mjs.map → RadioGroup-Bl9oXPIo.mjs.map} +1 -1
  150. package/dist/{RadioGroup-DYIfRj02.d.mts → RadioGroup-Dg_gydUp.d.mts} +1 -1
  151. package/dist/RadioGroup.d.mts +1 -1
  152. package/dist/RangeCalendar.d.mts +1 -1
  153. package/dist/RangeCalendarPresets.d.mts +1 -1
  154. package/dist/RuleEditorFields.d.mts +2 -2
  155. package/dist/RulesPill.d.mts +1 -1
  156. package/dist/{SearchInput-Dc90GLTF.d.mts → SearchInput-CNg109M5.d.mts} +2 -2
  157. package/dist/SearchInput.d.mts +1 -1
  158. package/dist/SectionHeading.d.mts +1 -1
  159. package/dist/{SegmentedControl-DIHonamg.d.mts → SegmentedControl-BBIHKcvo.d.mts} +1 -1
  160. package/dist/{SegmentedControl-DwbltwDQ.mjs → SegmentedControl-BozydMtT.mjs} +10 -9
  161. package/dist/SegmentedControl-BozydMtT.mjs.map +1 -0
  162. package/dist/SegmentedControl.d.mts +1 -1
  163. package/dist/{Select-CBVvPyRJ.mjs → Select-CktsIrzf.mjs} +16 -15
  164. package/dist/Select-CktsIrzf.mjs.map +1 -0
  165. package/dist/{Select-DwqWnWBi.d.mts → Select-yPqzqe5k.d.mts} +3 -3
  166. package/dist/Select.d.mts +1 -1
  167. package/dist/{Spacer-BsK8tTwA.mjs → Spacer-D58qwuXR.mjs} +2 -2
  168. package/dist/{Spacer-BsK8tTwA.mjs.map → Spacer-D58qwuXR.mjs.map} +1 -1
  169. package/dist/{Spinner-e725Rxkd.mjs → Spinner-Dpw3-3JS.mjs} +6 -8
  170. package/dist/Spinner-Dpw3-3JS.mjs.map +1 -0
  171. package/dist/{Stack-Bre2oiov.mjs → Stack-BqQndGI9.mjs} +2 -2
  172. package/dist/{Stack-Bre2oiov.mjs.map → Stack-BqQndGI9.mjs.map} +1 -1
  173. package/dist/{Stack-6eOrxjJi.d.mts → Stack-DgC83-nw.d.mts} +2 -2
  174. package/dist/Stack.d.mts +1 -1
  175. package/dist/{Sticker-By3F8Aip.mjs → Sticker-BDyejPZa.mjs} +159 -14
  176. package/dist/Sticker-BDyejPZa.mjs.map +1 -0
  177. package/dist/{Sticker-Ep6N4Exq.d.mts → Sticker-qvWkqEMw.d.mts} +5 -5
  178. package/dist/Sticker.d.mts +1 -1
  179. package/dist/StringValueControl.d.mts +1 -1
  180. package/dist/Tab.d.mts +3 -4
  181. package/dist/{TabBar-CWF65Tv4.mjs → TabBar-Dw3xE_B-.mjs} +17 -16
  182. package/dist/TabBar-Dw3xE_B-.mjs.map +1 -0
  183. package/dist/TabBarIconButton.d.mts +1 -5
  184. package/dist/{Table-BOcWdwpv.d.mts → Table-CPvIH27_.d.mts} +1 -1
  185. package/dist/{Table-nWd5ZVbm.mjs → Table-ELLvSvH4.mjs} +86 -39
  186. package/dist/Table-ELLvSvH4.mjs.map +1 -0
  187. package/dist/Table.d.mts +1 -1
  188. package/dist/{TableBody-BFPFaZnD.d.mts → TableBody-CQYijW_3.d.mts} +1 -1
  189. package/dist/TableBody.d.mts +1 -1
  190. package/dist/{TableBox-Bd-H5oyh.mjs → TableBox-CCfha6G2.mjs} +57 -47
  191. package/dist/TableBox-CCfha6G2.mjs.map +1 -0
  192. package/dist/TableBox.d.mts +2 -2
  193. package/dist/{TableBoxCell-Cjlc_xJz.d.mts → TableBoxCell-xnzuHPV1.d.mts} +7 -7
  194. package/dist/TableBoxCell.d.mts +1 -1
  195. package/dist/TableBoxField.d.mts +3 -3
  196. package/dist/{TableBoxRow-CKDjNUsU.d.mts → TableBoxRow-BBDMh5xl.d.mts} +3 -3
  197. package/dist/TableBoxRow.d.mts +1 -1
  198. package/dist/{TableBoxRowActions-BJ8ue3Bk.d.mts → TableBoxRowActions-DCfol4GC.d.mts} +2 -2
  199. package/dist/TableBoxRowActions.d.mts +1 -1
  200. package/dist/{index-CvBvfQAY.d.mts → TableCell-BQv4ASkE.d.mts} +5 -26
  201. package/dist/TableCell.d.mts +1 -1
  202. package/dist/{TableControls-BnesnTue.mjs → TableControls-C-yb5EYU.mjs} +76 -64
  203. package/dist/TableControls-C-yb5EYU.mjs.map +1 -0
  204. package/dist/{TableControls-D8xMNgyS.d.mts → TableControls-CtEL3ioz.d.mts} +3 -3
  205. package/dist/TableControls.d.mts +1 -1
  206. package/dist/{TableControlsContext-ChFsFEjR.d.mts → TableControlsContext-X-Lupvc6.d.mts} +2 -2
  207. package/dist/TableControlsContext.d.mts +1 -1
  208. package/dist/{TableHead-CWDxuy5V.d.mts → TableHead-DLLn0zoP.d.mts} +1 -1
  209. package/dist/TableHead.d.mts +1 -1
  210. package/dist/{TableHeaderCell-C_sIU1d7.d.mts → TableHeaderCell-DiJ2jyw4.d.mts} +3 -1
  211. package/dist/TableHeaderCell.d.mts +1 -1
  212. package/dist/{TableLayout-CgGhKU_A.d.mts → TableLayout-BgnUz8NO.d.mts} +1 -1
  213. package/dist/TableLayout.d.mts +1 -1
  214. package/dist/{TableRow-B1UKlbze.d.mts → TableRow-Dgg8hGy5.d.mts} +2 -2
  215. package/dist/TableRow.d.mts +1 -1
  216. package/dist/TableTH.d.mts +1 -1
  217. package/dist/{TableViewConfigurationDropdown-BqB7pOh8.d.mts → TableViewConfigurationDropdown-DRxd562-.d.mts} +2 -2
  218. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  219. package/dist/{TechnicalSticker-Ct2WnNzJ.mjs → TechnicalSticker-CLbNA0kp.mjs} +27 -22
  220. package/dist/TechnicalSticker-CLbNA0kp.mjs.map +1 -0
  221. package/dist/{Text-B0orb-cZ.mjs → Text-Dn_p7ZvT.mjs} +16 -12
  222. package/dist/Text-Dn_p7ZvT.mjs.map +1 -0
  223. package/dist/{Text-BzzUdBdc.d.mts → Text-tgFz40XD.d.mts} +4 -4
  224. package/dist/Text.d.mts +1 -1
  225. package/dist/{TextArea-CGpY5xqX.d.mts → TextArea-BxxXQSwP.d.mts} +2 -2
  226. package/dist/{TextArea-CospIXEO.mjs → TextArea-oAK1DKId.mjs} +3 -3
  227. package/dist/{TextArea-CospIXEO.mjs.map → TextArea-oAK1DKId.mjs.map} +1 -1
  228. package/dist/TextArea.d.mts +1 -1
  229. package/dist/{TextUnderlineTooltip-DZYGjJq1.d.mts → TextUnderlineTooltip-DQVYsLqM.d.mts} +3 -3
  230. package/dist/TextUnderlineTooltip.d.mts +1 -1
  231. package/dist/Tile.d.mts +1 -1
  232. package/dist/Toast.d.mts +1 -1
  233. package/dist/{Toggle-BjAivdyX.d.mts → Toggle-BmUl78kH.d.mts} +1 -1
  234. package/dist/{Toggle-Do5z1VcO.mjs → Toggle-DZzirZ8p.mjs} +20 -11
  235. package/dist/Toggle-DZzirZ8p.mjs.map +1 -0
  236. package/dist/Toggle.d.mts +1 -1
  237. package/dist/{Tooltip-DSKGD33G.mjs → Tooltip-BsuYG0fw.mjs} +12 -9
  238. package/dist/Tooltip-BsuYG0fw.mjs.map +1 -0
  239. package/dist/{Tooltip-n3XkX4dp.d.mts → Tooltip-eSaiYjxT.d.mts} +3 -3
  240. package/dist/Tooltip.d.mts +1 -1
  241. package/dist/{TruncatedText-C-MJPIRi.d.mts → TruncatedText-B2v53Y11.d.mts} +2 -2
  242. package/dist/{codec-B0dZTwlG.d.mts → codec-D5qlDVgU.d.mts} +2 -2
  243. package/dist/codec.d.mts +1 -1
  244. package/dist/color-fQTsW4gq.d.mts +20 -0
  245. package/dist/components/Attribute/index.mjs +34 -9
  246. package/dist/components/Attribute/index.mjs.map +1 -1
  247. package/dist/components/Badge/index.mjs +1 -1
  248. package/dist/components/Banner/index.mjs +19 -8
  249. package/dist/components/Banner/index.mjs.map +1 -1
  250. package/dist/components/BottomPanel/index.mjs +4 -4
  251. package/dist/components/Breadcrumbs/index.d.mts +1 -1
  252. package/dist/components/Breadcrumbs/index.mjs +1 -1
  253. package/dist/components/Button/index.d.mts +2 -2
  254. package/dist/components/Button/index.mjs +1 -1
  255. package/dist/components/ButtonGroup/index.mjs +13 -5
  256. package/dist/components/ButtonGroup/index.mjs.map +1 -1
  257. package/dist/components/Card/index.d.mts +2 -2
  258. package/dist/components/Card/index.mjs +1 -1
  259. package/dist/components/CardV2/index.d.mts +1 -1
  260. package/dist/components/CardV2/index.mjs +1 -1
  261. package/dist/components/Checkbox/index.d.mts +1 -1
  262. package/dist/components/Checkbox/index.mjs +1 -1
  263. package/dist/components/CodeHighlight/PrismWithLanguages.d.mts +2 -0
  264. package/dist/components/CodeHighlight/PrismWithLanguages.mjs +48 -0
  265. package/dist/components/CodeHighlight/PrismWithLanguages.mjs.map +1 -0
  266. package/dist/components/CodeHighlight/index.d.mts +2 -0
  267. package/dist/components/CodeHighlight/index.mjs +381 -0
  268. package/dist/components/CodeHighlight/index.mjs.map +1 -0
  269. package/dist/components/Combobox/index.d.mts +2 -2
  270. package/dist/components/Combobox/index.mjs +1 -1
  271. package/dist/components/ConfigFormGroup/index.mjs +2 -2
  272. package/dist/components/DataTable/TableControls/index.d.mts +19 -19
  273. package/dist/components/DataTable/TableControls/index.mjs +1 -1
  274. package/dist/components/DataTable/index.mjs +84 -44
  275. package/dist/components/DataTable/index.mjs.map +1 -1
  276. package/dist/components/DataTable/types.d.mts +2 -2
  277. package/dist/components/DatePicker/index.d.mts +4 -4
  278. package/dist/components/DatePicker/index.mjs +1 -1
  279. package/dist/components/DropdownButton/index.mjs +1 -1
  280. package/dist/components/DropdownMenu/index.d.mts +1 -1
  281. package/dist/components/DropdownMenu/index.mjs +1 -1
  282. package/dist/components/FloatingPanel/index.mjs +5 -5
  283. package/dist/components/FormControl/index.d.mts +2 -2
  284. package/dist/components/FormControl/index.mjs +2 -2
  285. package/dist/components/FormField/index.d.mts +1 -1
  286. package/dist/components/FormField/index.mjs +1 -1
  287. package/dist/components/Grid/index.mjs +1 -1
  288. package/dist/components/HoverCopyableField/index.mjs +1 -1
  289. package/dist/components/ImageTile/index.mjs +18 -17
  290. package/dist/components/ImageTile/index.mjs.map +1 -1
  291. package/dist/components/Input/index.d.mts +1 -1
  292. package/dist/components/Input/index.mjs +1 -1
  293. package/dist/components/Link/index.mjs +7 -8
  294. package/dist/components/Link/index.mjs.map +1 -1
  295. package/dist/components/ListBox/index.d.mts +3 -3
  296. package/dist/components/ListBox/index.mjs +1 -1
  297. package/dist/components/LoadingShimmer/index.mjs +1 -1
  298. package/dist/components/MaskedInput/index.mjs +1 -1
  299. package/dist/components/MatchHighlight/index.mjs +6 -4
  300. package/dist/components/MatchHighlight/index.mjs.map +1 -1
  301. package/dist/components/Menu/index.d.mts +1 -1
  302. package/dist/components/Menu/index.mjs +1 -1
  303. package/dist/components/Modal/index.mjs +12 -72
  304. package/dist/components/Modal/index.mjs.map +1 -1
  305. package/dist/components/PageHeader/index.mjs +1 -1
  306. package/dist/components/Pagination/index.d.mts +3 -3
  307. package/dist/components/Pagination/index.mjs +1 -1
  308. package/dist/components/Pii/index.mjs +1 -1
  309. package/dist/components/Popover/index.mjs +1 -1
  310. package/dist/components/ProgressBar/index.mjs +16 -19
  311. package/dist/components/ProgressBar/index.mjs.map +1 -1
  312. package/dist/components/ProgressIndicator/index.mjs +25 -19
  313. package/dist/components/ProgressIndicator/index.mjs.map +1 -1
  314. package/dist/components/Radio/index.mjs +1 -1
  315. package/dist/components/RadioGroup/index.d.mts +1 -1
  316. package/dist/components/RadioGroup/index.mjs +1 -1
  317. package/dist/components/RightPanel/index.mjs +5 -5
  318. package/dist/components/SegmentedControl/index.d.mts +1 -1
  319. package/dist/components/SegmentedControl/index.mjs +1 -1
  320. package/dist/components/Select/index.d.mts +1 -1
  321. package/dist/components/Select/index.mjs +1 -1
  322. package/dist/components/Slider/index.mjs +21 -12
  323. package/dist/components/Slider/index.mjs.map +1 -1
  324. package/dist/components/SmartTextInput/PillType.d.mts +10 -0
  325. package/dist/components/SmartTextInput/PillType.mjs +31 -0
  326. package/dist/components/SmartTextInput/PillType.mjs.map +1 -0
  327. package/dist/components/SmartTextInput/parser/method-chain/grammar.pegjs +219 -0
  328. package/dist/components/SmartTextInput/parser/method-chain/parser.d.mts +21 -0
  329. package/dist/components/SmartTextInput/parser/method-chain/parser.mjs +2 -0
  330. package/dist/components/SmartTextInput/parser/method-chain/types.d.mts +105 -0
  331. package/dist/components/SmartTextInput/parser/method-chain/types.mjs +31 -0
  332. package/dist/components/SmartTextInput/parser/method-chain/types.mjs.map +1 -0
  333. package/dist/components/SmartTextInput/parser/smart-text/grammar.pegjs +154 -0
  334. package/dist/components/SmartTextInput/parser/smart-text/parser.d.mts +17 -0
  335. package/dist/components/SmartTextInput/parser/smart-text/parser.mjs +814 -0
  336. package/dist/components/SmartTextInput/parser/smart-text/parser.mjs.map +1 -0
  337. package/dist/components/SmartTextInput/parser/smart-text/types.d.mts +72 -0
  338. package/dist/components/SmartTextInput/parser/smart-text/types.mjs +38 -0
  339. package/dist/components/SmartTextInput/parser/smart-text/types.mjs.map +1 -0
  340. package/dist/components/Spacer/index.mjs +1 -1
  341. package/dist/components/Spinner/index.mjs +1 -1
  342. package/dist/components/Stack/index.d.mts +1 -1
  343. package/dist/components/Stack/index.mjs +1 -1
  344. package/dist/components/StatusIndicator/index.mjs +112 -13
  345. package/dist/components/StatusIndicator/index.mjs.map +1 -1
  346. package/dist/components/Sticker/index.d.mts +1 -1
  347. package/dist/components/Sticker/index.mjs +1 -1
  348. package/dist/components/SwatchPicker/index.mjs +5 -4
  349. package/dist/components/SwatchPicker/index.mjs.map +1 -1
  350. package/dist/components/TabBar/index.mjs +1 -1
  351. package/dist/components/Table/index.d.mts +8 -7
  352. package/dist/components/Table/index.mjs +1 -1
  353. package/dist/components/TableBox/index.d.mts +2 -2
  354. package/dist/components/TableBox/index.mjs +1 -1
  355. package/dist/components/TechnicalSticker/index.mjs +1 -1
  356. package/dist/components/Text/index.d.mts +1 -1
  357. package/dist/components/Text/index.mjs +1 -1
  358. package/dist/components/TextArea/index.d.mts +1 -1
  359. package/dist/components/TextArea/index.mjs +1 -1
  360. package/dist/components/Tile/index.mjs +9 -8
  361. package/dist/components/Tile/index.mjs.map +1 -1
  362. package/dist/components/Toast/index.mjs +18 -12
  363. package/dist/components/Toast/index.mjs.map +1 -1
  364. package/dist/components/Toggle/index.d.mts +1 -1
  365. package/dist/components/Toggle/index.mjs +1 -1
  366. package/dist/components/Tooltip/index.d.mts +3 -3
  367. package/dist/components/Tooltip/index.mjs +1 -1
  368. package/dist/compound-expression.d.mts +1 -1
  369. package/dist/{constants-Bs94Jw4y.d.mts → constants-zZyl7QbX.d.mts} +1 -1
  370. package/dist/constants.d.mts +1 -1
  371. package/dist/{date-filter-BbWgAXy3.mjs → date-filter-DMZnJwGs.mjs} +1 -1
  372. package/dist/{date-filter-BbWgAXy3.mjs.map → date-filter-DMZnJwGs.mjs.map} +1 -1
  373. package/dist/{date-range-rule-value-DBEEWTQp.d.mts → date-range-rule-value-zJaa_jR9.d.mts} +2 -2
  374. package/dist/date-range-rule-value.d.mts +1 -1
  375. package/dist/{date-rule-intent-BArNGT2E.d.mts → date-rule-intent-CdWv68my.d.mts} +3 -3
  376. package/dist/date-rule-intent.d.mts +1 -1
  377. package/dist/display.d.mts +1 -1
  378. package/dist/fieldPickerOptions.d.mts +2 -2
  379. package/dist/fieldSchemaTypes-COEJOqYL.d.mts +39 -0
  380. package/dist/{filter-size-context-D1UhTwOG.d.mts → filter-size-context-DYkfYMkX.d.mts} +2 -2
  381. package/dist/filter-size-context.d.mts +1 -1
  382. package/dist/helpers.d.mts +1 -1
  383. package/dist/{index-DASkW991.d.mts → index-BX8dSNcy.d.mts} +2 -2
  384. package/dist/{index-I_Cy3X5R.d.mts → index-CBWvk6Ch.d.mts} +3 -3
  385. package/dist/index-DxIXll2Z.d.mts +21 -0
  386. package/dist/index.d.mts +1 -1
  387. package/dist/index2.d.mts +1 -1
  388. package/dist/index3.d.mts +3 -3
  389. package/dist/index4.d.mts +1 -1
  390. package/dist/index5.d.mts +14 -14
  391. package/dist/{input-M7BEIewR.d.mts → input-DN_8iHVD.d.mts} +3 -3
  392. package/dist/inputFields.d.mts +10 -10
  393. package/dist/{intersperse-CRUnXmnu.mjs → intersperse-vOYvFOfF.mjs} +1 -1
  394. package/dist/{intersperse-CRUnXmnu.mjs.map → intersperse-vOYvFOfF.mjs.map} +1 -1
  395. package/dist/jsonSchema-B1VonQij.d.mts +222 -0
  396. package/dist/lib/GlobalStyles.mjs +1 -1
  397. package/dist/lib/HeadlessAriaButton.d.mts +1 -2
  398. package/dist/lib/HeadlessAriaButton.mjs +1 -1
  399. package/dist/lib/MiddleTruncatedText.mjs +1 -1
  400. package/dist/lib/PDSProvider.d.mts +1 -1
  401. package/dist/lib/PDSProvider.mjs +1 -1
  402. package/dist/lib/TruncatedText.d.mts +1 -1
  403. package/dist/lib/TruncatedText.mjs +1 -1
  404. package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
  405. package/dist/lib/TruncatedTextWithTooltip.mjs +1 -1
  406. package/dist/lib/color.d.mts +2 -0
  407. package/dist/lib/color.mjs +21 -0
  408. package/dist/lib/color.mjs.map +1 -0
  409. package/dist/lib/date-filter/index.d.mts +2 -2
  410. package/dist/lib/date-filter/index.mjs +1 -1
  411. package/dist/lib/errorReporter.d.mts +7 -0
  412. package/dist/lib/errorReporter.mjs +15 -0
  413. package/dist/lib/errorReporter.mjs.map +1 -0
  414. package/dist/lib/fieldSchemaTypes.d.mts +2 -0
  415. package/dist/lib/fieldSchemaTypes.mjs +41 -0
  416. package/dist/lib/fieldSchemaTypes.mjs.map +1 -0
  417. package/dist/lib/jsonSchema.d.mts +2 -0
  418. package/dist/lib/jsonSchema.mjs +260 -0
  419. package/dist/lib/jsonSchema.mjs.map +1 -0
  420. package/dist/lib/message.d.mts +1 -1
  421. package/dist/lib/methodChain.d.mts +66 -0
  422. package/dist/lib/methodChain.mjs +239 -0
  423. package/dist/lib/methodChain.mjs.map +1 -0
  424. package/dist/lib/methodChainNormalize.d.mts +14 -0
  425. package/dist/lib/methodChainNormalize.mjs +53 -0
  426. package/dist/lib/methodChainNormalize.mjs.map +1 -0
  427. package/dist/lib/methodChainTypes.d.mts +23 -0
  428. package/dist/lib/methodChainTypes.mjs +0 -0
  429. package/dist/lib/objectSchemaTypes.d.mts +2 -0
  430. package/dist/lib/objectSchemaTypes.mjs +0 -0
  431. package/dist/lib/pseudoClass.d.mts +1 -1
  432. package/dist/lib/selectHelper.mjs.map +1 -1
  433. package/dist/lib/semanticColor.d.mts +2 -0
  434. package/dist/lib/semanticColor.mjs +17 -0
  435. package/dist/lib/semanticColor.mjs.map +1 -0
  436. package/dist/lib/useControlled.mjs.map +1 -1
  437. package/dist/lib/useModalInsetRight.mjs +69 -0
  438. package/dist/lib/useModalInsetRight.mjs.map +1 -0
  439. package/dist/{message-CyxgAWZl.d.mts → message-DfEpU8lV.d.mts} +1 -1
  440. package/dist/mixins/focus.d.mts +4 -4
  441. package/dist/mixins/focus.mjs +7 -5
  442. package/dist/mixins/focus.mjs.map +1 -1
  443. package/dist/mixins/hoverable.d.mts +2 -2
  444. package/dist/mixins/hoverable.mjs +2 -2
  445. package/dist/mixins/input.d.mts +1 -1
  446. package/dist/mixins/input.mjs +56 -23
  447. package/dist/mixins/input.mjs.map +1 -1
  448. package/dist/mixins/menuItem.d.mts +2 -2
  449. package/dist/mixins/menuItem.mjs +78 -50
  450. package/dist/mixins/menuItem.mjs.map +1 -1
  451. package/dist/mixins/print/index.mjs +4 -2
  452. package/dist/mixins/print/index.mjs.map +1 -1
  453. package/dist/mixins/text.d.mts +1 -1
  454. package/dist/mixins/text.mjs +1 -1
  455. package/dist/{operators-CXkmvFpP.d.mts → operators-F8X0hyQB.d.mts} +2 -2
  456. package/dist/operators.d.mts +1 -1
  457. package/dist/palette-BANY1Xfs.d.mts +21 -0
  458. package/dist/palette.d.mts +2 -0
  459. package/dist/parser-Kxos6siN.mjs +2156 -0
  460. package/dist/parser-Kxos6siN.mjs.map +1 -0
  461. package/dist/patterns/LayoutLoadingShimmer/index.mjs +6 -6
  462. package/dist/patterns/LayoutLoadingSpinner/index.mjs +1 -1
  463. package/dist/patterns/PageLayout/index.mjs +1 -1
  464. package/dist/relative-date-label.d.mts +1 -1
  465. package/dist/semantic-Dy7mTyBP.d.mts +133 -0
  466. package/dist/semanticColor-DkVQjcbc.d.mts +29 -0
  467. package/dist/{styledComponentsInterop-8zScIQyC.mjs → styledComponentsInterop-NxwFjeA4.mjs} +2 -2
  468. package/dist/{styledComponentsInterop-8zScIQyC.mjs.map → styledComponentsInterop-NxwFjeA4.mjs.map} +1 -1
  469. package/dist/{text-DjTGRUM1.d.mts → text-BaQdW8qa.d.mts} +1 -1
  470. package/dist/{theme-Biwx2eJZ.d.mts → theme-D02MOaH6.d.mts} +22 -5
  471. package/dist/theme.d.mts +2 -2
  472. package/dist/theme.mjs +22 -1
  473. package/dist/theme.mjs.map +1 -1
  474. package/dist/tone.d.mts +17 -0
  475. package/dist/{types-V8UJX-rk.d.mts → types-1_JSe9Wr.d.mts} +2 -2
  476. package/dist/{types-DBBfOCX1.d.mts → types-C2s9yhgO.d.mts} +2 -2
  477. package/dist/{types-Bsf1VsW6.d.mts → types-COeginAF.d.mts} +1 -1
  478. package/dist/{types-Df0D37uh.d.mts → types-CtLY82w5.d.mts} +1 -1
  479. package/dist/{types-Ds43XULD.d.mts → types-Ok2lRZeu.d.mts} +1 -1
  480. package/dist/types.d.mts +1 -1
  481. package/dist/types2.d.mts +1 -1
  482. package/dist/types3.d.mts +1 -1
  483. package/dist/types4.d.mts +1 -1
  484. package/dist/types5.d.mts +1 -1
  485. package/dist/{url-state-M64mdtQ2.d.mts → url-state-DP78aDol.d.mts} +2 -2
  486. package/dist/url-state.d.mts +1 -1
  487. package/dist/useComboboxFooterAction.d.mts +1 -1
  488. package/dist/{useFilterStateV2-gALqONXf.d.mts → useFilterStateV2-DC2rGXHK.d.mts} +3 -3
  489. package/dist/useFilterStateV2.d.mts +1 -1
  490. package/dist/{useFormField-Bo7oHMof.d.mts → useFormField--_14te0K.d.mts} +2 -2
  491. package/dist/{useFormField-C-K1lgmv.mjs → useFormField-DhYd6bNn.mjs} +2 -2
  492. package/dist/{useFormField-C-K1lgmv.mjs.map → useFormField-DhYd6bNn.mjs.map} +1 -1
  493. package/dist/useFormField.d.mts +1 -1
  494. package/dist/{useFormGroup-y-duFylq.mjs → useFormGroup-DWVW7A9f.mjs} +1 -1
  495. package/dist/{useFormGroup-y-duFylq.mjs.map → useFormGroup-DWVW7A9f.mjs.map} +1 -1
  496. package/dist/{useTableBoxDragAndDrop-BrJFRSaG.d.mts → useTableBoxDragAndDrop-DkCxC7Mi.d.mts} +1 -1
  497. package/dist/useTableBoxDragAndDrop.d.mts +1 -1
  498. package/dist/{useToggle-Bo3yd14Y.mjs → useToggle-0zLL1E7s.mjs} +1 -1
  499. package/dist/{useToggle-Bo3yd14Y.mjs.map → useToggle-0zLL1E7s.mjs.map} +1 -1
  500. package/dist/useTruncation.d.mts +1 -1
  501. package/dist/{utilities-BHMNnJ8h.d.mts → utilities-C1hOxjt_.d.mts} +1 -1
  502. package/dist/utilities.d.mts +1 -1
  503. package/dist/utils/storybook.mjs +1 -1
  504. package/dist/utils/storybook.mjs.map +1 -1
  505. package/dist/utils/testing.mjs.map +1 -1
  506. package/dist/utils.d.mts +1 -1
  507. package/dist/{validation-BCBIvN6H.d.mts → validation-CpDsI-TM.d.mts} +3 -3
  508. package/dist/validation.d.mts +1 -1
  509. package/dist/{value-control-resolver-qKTH1ErF.d.mts → value-control-resolver-DhaqxKmK.d.mts} +2 -2
  510. package/dist/value-control-resolver.d.mts +1 -1
  511. package/dist/variables/effect.d.mts +14 -3
  512. package/dist/variables/effect.mjs +5 -3
  513. package/dist/variables/effect.mjs.map +1 -1
  514. package/dist/variables/keyframes.mjs +1 -1
  515. package/dist/variables/semantic.d.mts +2 -0
  516. package/dist/variables/semantic.mjs +241 -0
  517. package/dist/variables/semantic.mjs.map +1 -0
  518. package/llms.txt +1 -0
  519. package/package.json +70 -7
  520. package/skills/design-system-component-authoring/SKILL.md +79 -0
  521. package/skills/design-system-component-authoring/clarifying-scope.md +18 -0
  522. package/skills/design-system-component-authoring/component-conventions.md +70 -0
  523. package/skills/design-system-component-authoring/prop-interface-patterns.md +30 -0
  524. package/skills/ui-authoring/COMPONENTS.md +1 -1
  525. package/skills/ui-authoring/TOKENS.md +1 -1
  526. package/dist/Breadcrumbs-BEYQlGbW.mjs.map +0 -1
  527. package/dist/Card-BoGV5tY2.d.mts +0 -52
  528. package/dist/Card-CKrJtn1f.mjs.map +0 -1
  529. package/dist/CardV2-B2wx1NE3.mjs.map +0 -1
  530. package/dist/Checkbox-DwZEsi7x.mjs.map +0 -1
  531. package/dist/Combobox-CKaVX-32.mjs.map +0 -1
  532. package/dist/DatePicker-D2SfjS-N.mjs.map +0 -1
  533. package/dist/FormControl-DQFefbrI.mjs.map +0 -1
  534. package/dist/IconButton-BnSEV7eR.mjs.map +0 -1
  535. package/dist/Input-D7of_GtJ.mjs.map +0 -1
  536. package/dist/ListBox-jzXQDraS.mjs.map +0 -1
  537. package/dist/LoadingShimmer-a2Hv0kAq.mjs.map +0 -1
  538. package/dist/Menu-DVI8l-4Q.mjs.map +0 -1
  539. package/dist/PageHeader-BpGT-BM0.mjs.map +0 -1
  540. package/dist/Pagination-CVRTcKSG.mjs.map +0 -1
  541. package/dist/Popover-DlXyKYL5.mjs.map +0 -1
  542. package/dist/Radio-DYGEt0FT.mjs.map +0 -1
  543. package/dist/SegmentedControl-DwbltwDQ.mjs.map +0 -1
  544. package/dist/Select-CBVvPyRJ.mjs.map +0 -1
  545. package/dist/Spinner-e725Rxkd.mjs.map +0 -1
  546. package/dist/Sticker-By3F8Aip.mjs.map +0 -1
  547. package/dist/TabBar-CWF65Tv4.mjs.map +0 -1
  548. package/dist/Table-nWd5ZVbm.mjs.map +0 -1
  549. package/dist/TableBox-Bd-H5oyh.mjs.map +0 -1
  550. package/dist/TableControls-BnesnTue.mjs.map +0 -1
  551. package/dist/TechnicalSticker-Ct2WnNzJ.mjs.map +0 -1
  552. package/dist/Text-B0orb-cZ.mjs.map +0 -1
  553. package/dist/Toggle-Do5z1VcO.mjs.map +0 -1
  554. package/dist/Tooltip-DSKGD33G.mjs.map +0 -1
  555. /package/dist/{index-8SLBz2NH.d.mts → index-1-AkepUA.d.mts} +0 -0
  556. /package/dist/{index-Bt4QNofW.d.mts → index-BFnNtGdX.d.mts} +0 -0
  557. /package/dist/{index-BwAfCVZH2.d.mts → index-BO_854F2.d.mts} +0 -0
  558. /package/dist/{index-BwFl_eS0.d.mts → index-BPiqSRRl.d.mts} +0 -0
  559. /package/dist/{index-CCKHlTA4.d.mts → index-BSVhZrWN.d.mts} +0 -0
  560. /package/dist/{index-CDGG7lCB.d.mts → index-BYd3Btr1.d.mts} +0 -0
  561. /package/dist/{index-CRo77wc3.d.mts → index-B_BBnMou.d.mts} +0 -0
  562. /package/dist/{index-CX869wwk.d.mts → index-BrGZHEgX.d.mts} +0 -0
  563. /package/dist/{index-D13oYj4_.d.mts → index-Ci-uuV07.d.mts} +0 -0
  564. /package/dist/{index-D4DUvwPf.d.mts → index-CknANNvQ2.d.mts} +0 -0
  565. /package/dist/{index-D7UbuJwP.d.mts → index-CtJuGxUp.d.mts} +0 -0
  566. /package/dist/{index-DA6_cwf8.d.mts → index-CuYZJcK3.d.mts} +0 -0
  567. /package/dist/{index-DMRtRo7y.d.mts → index-DWfPppPU.d.mts} +0 -0
  568. /package/dist/{index-Dflz2i1X.d.mts → index-DYX_PQ7T2.d.mts} +0 -0
  569. /package/dist/{index-DvmLVvRD.d.mts → index-DZlqSwCF.d.mts} +0 -0
  570. /package/dist/{index-Es5nKSSL.d.mts → index-De7MV8-j.d.mts} +0 -0
  571. /package/dist/{index-Wc1llEvP.d.mts → index-Deol7ZWO.d.mts} +0 -0
  572. /package/dist/{index-dhjtMp5F.d.mts → index-N-OgGgfF.d.mts} +0 -0
  573. /package/dist/{index-e6k85DKM.d.mts → index-VWno75SQ.d.mts} +0 -0
  574. /package/dist/{index-ehD5GjMH.d.mts → index-hcx6LMSC.d.mts} +0 -0
  575. /package/dist/{useModalInsetRight.d.mts → lib/useModalInsetRight.d.mts} +0 -0
@@ -0,0 +1,70 @@
1
+ # Component conventions (compose, tokens, structure, a11y, docs)
2
+
3
+ ## Compose, don't recreate
4
+
5
+ - Build from existing DS components — `Button`/`IconButton`, `Link`, `Input`, `Stack`/`HStack`,
6
+ `Text` (`Heading`/`Paragraph`/`Label`), `Tooltip`, `Spinner`, `Sticker`, etc. Check the
7
+ `ui-authoring` component catalog (`COMPONENTS.md`, `PATTERNS.md`) and
8
+ `packages/design-system/components/` before writing anything custom.
9
+ - **Use each component directly and keep its built-in styles.** Never copy/paste a DS component's
10
+ CSS into a `styled.div`. Wrapping a DS component with `styled(Component)` for _layout/positioning_
11
+ tweaks (margin, width, alignment) is fine, and adjusting a state with a _semantic token_ (e.g. `theme.color.text.tertiary`) is acceptable — but don't hardcode colors or arbitrarily change a component's visual identity. If the design truly needs a different look, that's a question for the designer/engineer, not a silent restyle.
12
+ - Replace raw flex wrappers with `Stack`/`HStack`. Do not re-implement `display: flex; gap` that
13
+ `HStack` already provides.
14
+ - Reach for a semantic HTML element (`nav`, `ul`/`li`, `button`) only when **no** DS component
15
+ covers the need.
16
+
17
+ ## Style with tokens
18
+
19
+ - All CSS values come from design tokens (see `ui-authoring`). No hardcoded hex or px.
20
+ - **Prefer semantic tokens over foundational ones:** `theme.color.text.tertiary` /
21
+ `Color.TextPrimary` over `Color.CorePurple500`. Foundational `Core*` colors are a last resort and
22
+ need a comment.
23
+ - Consolidate nested styled elements — every wrapper must earn its place.
24
+
25
+ ## File structure
26
+
27
+ ```
28
+ packages/design-system/components/ComponentName/
29
+ ├── ComponentName.tsx # public component (+ a private child .tsx if using an items array)
30
+ ├── index.ts # barrel export
31
+ ├── ComponentName.stories.tsx # stories per variant/state
32
+ ├── ComponentName.spec.tsx # tests
33
+ └── ComponentName.mdx # docs
34
+ ```
35
+
36
+ - **Name files/exports for what they are.** Name a plural + singular pair `Breadcrumbs` +
37
+ `Breadcrumb` (each file exports the component of its own name), not `Breadcrumbs` +
38
+ `BreadcrumbSingle`. When the singular is a constrained-items child, keep it a _private_ child —
39
+ don't barrel-export it.
40
+ - `index.ts` re-exports the public component (default + named) and its public types only, not
41
+ private children. See `Breadcrumbs/index.ts`: it exports `Breadcrumbs` and the item/size types,
42
+ but not the private `Breadcrumb`.
43
+ - Extract self-contained logic (clipboard, inline-edit lifecycle, debouncing) into a `useX` hook so
44
+ the component file stays focused on presentation and structure.
45
+ - **Don't over-engineer.** Do not add a context provider just to thread a `size`/`variant` — pass it
46
+ as a prop. Context is for genuinely cross-cutting state shared across deeply nested descendants.
47
+
48
+ ## Accessibility
49
+
50
+ Use proper roles/landmarks and aria affordances: `aria-label`, `aria-current`, `aria-busy`,
51
+ `aria-hidden` on decorative elements, and label association for inputs. Manage focus for interactive
52
+ widgets. Stories should set `parameters: { a11y: { test: 'error' } }`, and tests should target
53
+ accessible roles/labels (avoid `data-testid`).
54
+
55
+ ## Document in Storybook
56
+
57
+ Add `ComponentName.mdx` alongside the stories:
58
+
59
+ ```tsx
60
+ import { Canvas, Controls, Meta } from '@storybook/addon-docs/blocks';
61
+ import * as stories from './ComponentName.stories';
62
+
63
+ <Meta of={stories} />
64
+
65
+ <Canvas of={stories.Playground} />
66
+ <Controls of={stories.Playground} />
67
+ ```
68
+
69
+ Keep MDX prose readable and follow the repository's Storybook conventions for titles and Chromatic
70
+ settings.
@@ -0,0 +1,30 @@
1
+ # Prop interface patterns
2
+
3
+ The props ARE the contract. Make incorrect usage impossible to express.
4
+
5
+ | Rule | Instead of | Prefer |
6
+ | ------------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
7
+ | Callback implies capability | `editable: boolean; onEdit: () => void` | `onEdit?: (v: string) => void` — editability = `onEdit != null` |
8
+ | Make impossible states unrepresentable | `loading?: boolean; data?: Data` (both can be set) | one discriminated field: `state: { kind: 'loading' } \| { kind: 'ready'; data: Data }`, or derive loading from `data == null` |
9
+ | Boolean over a 2-value union | `variant: 'default' \| 'compact'` | `compact?: boolean` — use a string union only for **3+** real, mutually-exclusive variants |
10
+ | Text is a string | `title: ReactNode` | `title: string` (+ optional `icon?: IconType` if it needs one). Two typed props beat an arbitrary node |
11
+ | Props are the interface | a parallel `interface FooState` layered on `interface FooProps` | let the props type be the interface. One item-shape type for an array (like `BreadcrumbsItemProps`) is fine; a redundant second interface is not |
12
+ | Constrain content when callers shouldn't style it | `children: ReactNode` | `items: ItemProps[]` rendered by a private child component. Use `children` only for genuinely open containers |
13
+ | Right owner for each piece of state | everything internal, or everything external | caller owns meaningful data (`value`/`onChange`); component keeps transient UI state (`isOpen`, `isEditing`) internal |
14
+
15
+ **Impossible-states rule of thumb:** if two optional props describe the same thing at different
16
+ times (loading vs loaded data, error vs value), collapse them so only one can exist at a time.
17
+
18
+ ## Common rationalizations
19
+
20
+ | Rationalization | Reality |
21
+ | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
22
+ | "I'll add `editable` for clarity even though `onEdit` exists" | Redundant state that can contradict itself. Presence of `onEdit` _is_ editability. |
23
+ | "Separate optional `loading` and `data` is flexible" | It lets callers represent impossible states. Model one-or-the-other. |
24
+ | "A `variant` union is more extensible than a boolean" | Two-value unions add ceremony now for a third case that may never come. Boolean until there are 3+ real variants. |
25
+ | "A `ReactNode` title is more flexible" | It invites arbitrary markup you can't style or constrain. `string` (+ optional `icon`) covers the real need. |
26
+ | "`children` lets designers compose freely" | For DS components that usually means inconsistent, unstyleable content. Prefer a typed `items[]` + private child unless it's truly an open container. |
27
+ | "I'll add `fullWidth`/`className` while I'm here" | Unrequested API surface. Ask first. |
28
+ | "Some list items are probably not editable" | Don't invent constraints. Assume uniform behavior or ask the designer. |
29
+ | "A context provider is cleaner for size" | Overkill for one value. Pass the prop. |
30
+ | "I'll copy the Button styles so it matches" | Duplicated styles drift. Use `Button` directly and keep its styles. |
@@ -1,7 +1,7 @@
1
1
  # Components
2
2
 
3
3
  Which PDS component to use, and for what. For usage guidance and additional code examples, see
4
- that component's `.mdx` beside its source under `front-end/design-system/components/` when one
4
+ that component's `.mdx` beside its source under `packages/design-system/components/` when one
5
5
  exists. If there is no `.mdx`, use the published type declarations
6
6
  (`dist/components/<Name>/index.d.mts`).
7
7
 
@@ -14,7 +14,7 @@ others), plus a `Core*` palette and a `Primary*` brand set.
14
14
  Use according to this priority:
15
15
 
16
16
  1. Purpose-named `Color.*` (`Text*`, `Background*`, `Border*`, …)
17
- 2. `Color.Core*` / `Color.Primary*` with a comment explaining the choice. For `Core*`, that comment is an `oxlint-disable-next-line persona-web/no-core-color-tokens`.
17
+ 2. `Color.Core*` / `Color.Primary*` with a comment explaining the choice. For `Core*`, that comment is an `oxlint-disable-next-line rulesdir/no-core-color-tokens`.
18
18
  3. Hardcoded hex (only if absolutely necessary) with a comment explaining the choice.
19
19
 
20
20
  ```tsx
@@ -1 +0,0 @@
1
- {"version":3,"file":"Breadcrumbs-BEYQlGbW.mjs","names":["Input"],"sources":["../components/Breadcrumbs/Breadcrumb.tsx","../components/Breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { type ChangeEvent, useEffect, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\nimport { CopyIcon, EditIcon } from '@persona/icons';\nimport { IconButton } from 'design-system/components/Button';\nimport Input from 'design-system/components/Input';\nimport { HStack } from 'design-system/components/Stack';\nimport TechnicalSticker from 'design-system/components/TechnicalSticker';\nimport { Paragraph } from 'design-system/components/Text';\nimport Tooltip from 'design-system/components/Tooltip';\nimport { focusOutline } from 'design-system/mixins/focus';\nimport { paragraphMixins } from 'design-system/mixins/text';\nimport { TransitionDuration } from 'design-system/variables/transitions';\n\nexport type BreadcrumbSize = 'md' | 'lg';\n\nexport type BreadcrumbHeadingAs = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\nconst COPY_TOOLTIP_LABEL = 'Copy ID';\nconst COPIED_TOOLTIP_LABEL = 'Copied!';\nconst DEFAULT_EDIT_MAX_LENGTH = 100;\nconst COPY_TOOLTIP_STICKER_MAX_WIDTH = '96px';\nconst COPY_TOOLTIP_STICKER_TOOLTIP_MAX_WIDTH = '250px';\n\nexport type BreadcrumbProps = {\n label: string;\n size?: BreadcrumbSize;\n current?: boolean;\n /**\n * Overrides the heading element rendered for the current crumb. Defaults to `h1`; use `h2` or\n * lower when the page already has an `h1`.\n */\n headingAs?: BreadcrumbHeadingAs;\n showCopyAction?: boolean;\n copyValue?: string;\n copyTooltipLabel?: string;\n /** Copy tooltip text shown after a successful copy. Defaults to `Copied!`. */\n copiedTooltipLabel?: string;\n /**\n * Appends `copyValue` to both copy tooltip texts as a `TechnicalSticker`, so the tooltip shows\n * which token is being copied.\n */\n showCopyValueInTooltip?: boolean;\n /** Internal dashboard path (e.g. `/cases`). Passed to the router `Link` as `to`. */\n href?: string;\n /**\n * Activates a non-current crumb without a route change, for trails that navigate in-place (e.g.\n * a control panel drilling into a sub-panel). Ignored when `href` is set.\n */\n onClick?: () => void;\n onEdit?: (newLabel: string) => void;\n editMaxLength?: number;\n onCopy?: () => void;\n};\n\nconst LABEL_ACTION_GAP = Spacing[2];\nconst ACTION_BUTTON_GAP = Spacing[1];\n\nconst CrumbRow = styled(HStack)`\n align-items: center;\n min-width: 0;\n`;\n\nconst crumbLayoutStyles = (size: BreadcrumbSize) => css`\n display: inline-flex;\n align-items: center;\n min-width: 0;\n min-height: ${({ theme }) => theme.element.height.xs};\n ${\n size === 'lg'\n ? css`\n font-size: ${({ theme }) => theme.text.paragraph.lg.fontSize};\n line-height: ${({ theme }) => theme.text.paragraph.lg.lineHeight};\n `\n : css``\n };\n`;\n\nconst editInputTextStyles = (size: BreadcrumbSize, current: boolean) => {\n if (current) {\n return size === 'lg' ? paragraphMixins.lgBold : paragraphMixins.mdBold;\n }\n return size === 'lg' ? paragraphMixins.lg : paragraphMixins.md;\n};\n\nconst ancestorCrumbStyles = css<{ $size: BreadcrumbSize }>`\n ${paragraphMixins.md};\n color: ${({ theme }) => theme.color.text.secondary};\n text-decoration: none;\n transition: color ${TransitionDuration.ExtraFast} ease-out;\n ${focusOutline}\n ${({ $size }) => crumbLayoutStyles($size)}\n\n &:hover {\n color: ${({ theme }) => theme.color.text.primary};\n }\n`;\n\nconst AncestorNavLink = styled(Link)<{ $size: BreadcrumbSize }>`\n ${ancestorCrumbStyles}\n`;\n\nconst AncestorNavButton = styled.button<{ $size: BreadcrumbSize }>`\n ${ancestorCrumbStyles}\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n`;\n\nconst InlineEditInput = styled(Input)<{\n $size: BreadcrumbSize;\n $current: boolean;\n $editMinWidth?: number;\n}>`\n margin: 0;\n padding: 2px 10px;\n width: auto;\n max-width: 100%;\n min-width: ${({ $editMinWidth }) => ($editMinWidth != null ? `${$editMinWidth}px` : '0')};\n field-sizing: content;\n display: inline-block;\n ${({ $size, $current }) => editInputTextStyles($size, $current)};\n background-color: ${({ theme }) => theme.color.background.primary};\n color: ${({ theme }) => theme.color.text.primary};\n\n &:not(:focus) {\n border-color: transparent;\n }\n\n &:hover:not(:disabled) {\n border-style: solid;\n }\n`;\n\nconst CurrentLabel = styled(Paragraph)<{ $size: BreadcrumbSize }>`\n margin: 0;\n ${({ $size }) => crumbLayoutStyles($size)}\n`;\n\nconst copyToClipboard = async (value: string): Promise<boolean> => {\n try {\n if (navigator.clipboard?.writeText == null) {\n return false;\n }\n\n await navigator.clipboard.writeText(value);\n return true;\n } catch {\n return false;\n }\n};\n\nconst BreadcrumbCopyButton = ({\n copyValue,\n copyTooltipLabel = COPY_TOOLTIP_LABEL,\n copiedTooltipLabel = COPIED_TOOLTIP_LABEL,\n showCopyValueInTooltip = false,\n onCopy,\n}: {\n copyValue: string;\n copyTooltipLabel?: string;\n copiedTooltipLabel?: string;\n showCopyValueInTooltip?: boolean;\n onCopy?: () => void;\n}) => {\n const [tooltipOpen, setTooltipOpen] = useState(false);\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n const success = await copyToClipboard(copyValue);\n if (!success) {\n return;\n }\n\n setCopied(true);\n setTooltipOpen(true);\n onCopy?.();\n\n window.setTimeout(() => {\n setTooltipOpen(false);\n window.setTimeout(() => setCopied(false), 200);\n }, 1000);\n };\n\n const handleMouseEnter = () => {\n if (!copied) {\n setTooltipOpen(true);\n }\n };\n\n const handleMouseLeave = () => {\n if (!copied) {\n setTooltipOpen(false);\n }\n };\n\n const trigger = (\n <span onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave}>\n <IconButton\n type='button'\n size='sm'\n aria-label={`Copy ${copyValue}`}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n void handleCopy();\n }}\n >\n <CopyIcon />\n </IconButton>\n </span>\n );\n\n const tooltipLabel = copied ? copiedTooltipLabel : copyTooltipLabel;\n\n return (\n <Tooltip\n trigger={trigger}\n open={tooltipOpen}\n side='top'\n sideOffset={4}\n size='sm'\n contentAlignment='center'\n interactive={false}\n hideArrow\n portal={false}\n maxWidth={showCopyValueInTooltip ? COPY_TOOLTIP_STICKER_TOOLTIP_MAX_WIDTH : undefined}\n >\n {showCopyValueInTooltip ? (\n <HStack spacing={ACTION_BUTTON_GAP} align='center'>\n <span>{tooltipLabel}</span>\n <TechnicalSticker copyable={false} maxWidth={COPY_TOOLTIP_STICKER_MAX_WIDTH}>\n {copyValue}\n </TechnicalSticker>\n </HStack>\n ) : (\n tooltipLabel\n )}\n </Tooltip>\n );\n};\n\nconst Breadcrumb = ({\n label,\n size = 'md',\n current = false,\n headingAs = 'h1',\n showCopyAction = false,\n copyValue,\n copyTooltipLabel,\n copiedTooltipLabel,\n showCopyValueInTooltip,\n href,\n onClick,\n onEdit,\n editMaxLength = DEFAULT_EDIT_MAX_LENGTH,\n onCopy,\n}: BreadcrumbProps) => {\n const [isEditing, setIsEditing] = useState(false);\n const [editValue, setEditValue] = useState(label);\n const [editMinWidth, setEditMinWidth] = useState<number | undefined>();\n const editInputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (!isEditing) {\n setEditValue(label);\n }\n }, [isEditing, label]);\n\n useEffect(() => {\n if (!isEditing) {\n setEditMinWidth(undefined);\n return;\n }\n\n const input = editInputRef.current;\n if (input == null) {\n return;\n }\n\n setEditMinWidth(input.offsetWidth);\n input.focus();\n input.select();\n }, [isEditing]);\n\n const commitEdit = () => {\n if (!isEditing) {\n return;\n }\n\n setIsEditing(false);\n if (editValue !== label) {\n onEdit?.(editValue);\n }\n };\n\n const inlineActions = !isEditing && (showCopyAction || onEdit) && (\n <HStack spacing={ACTION_BUTTON_GAP} align='center'>\n {onEdit && (\n <IconButton\n type='button'\n size='sm'\n aria-label={`Edit ${label}`}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setIsEditing(true);\n }}\n >\n <EditIcon />\n </IconButton>\n )}\n {showCopyAction && copyValue != null && (\n <BreadcrumbCopyButton\n copyValue={copyValue}\n copyTooltipLabel={copyTooltipLabel}\n copiedTooltipLabel={copiedTooltipLabel}\n showCopyValueInTooltip={showCopyValueInTooltip}\n onCopy={onCopy}\n />\n )}\n </HStack>\n );\n\n if (isEditing) {\n return (\n <CrumbRow spacing={LABEL_ACTION_GAP}>\n <InlineEditInput\n ref={editInputRef}\n $size={size}\n $current={current}\n $editMinWidth={editMinWidth}\n size='md'\n aria-label={`Edit ${label}`}\n maxLength={editMaxLength}\n value={editValue}\n onChange={(event: ChangeEvent<HTMLInputElement>) => setEditValue(event.target.value)}\n onBlur={commitEdit}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n commitEdit();\n }\n if (event.key === 'Escape') {\n setEditValue(label);\n setIsEditing(false);\n }\n }}\n />\n </CrumbRow>\n );\n }\n\n if (current) {\n return (\n <CrumbRow spacing={LABEL_ACTION_GAP}>\n <CurrentLabel\n $size={size}\n size={size === 'lg' ? 'lg' : 'md'}\n weight='bold'\n color='primary'\n as={headingAs}\n >\n {label}\n </CurrentLabel>\n {inlineActions}\n </CrumbRow>\n );\n }\n\n if (href == null && onClick != null) {\n return (\n <CrumbRow spacing={LABEL_ACTION_GAP}>\n <AncestorNavButton type='button' onClick={onClick} $size={size}>\n {label}\n </AncestorNavButton>\n {inlineActions}\n </CrumbRow>\n );\n }\n\n return (\n <CrumbRow spacing={LABEL_ACTION_GAP}>\n <AncestorNavLink to={href ?? ''} $size={size}>\n {label}\n </AncestorNavLink>\n {inlineActions}\n </CrumbRow>\n );\n};\n\nexport default Breadcrumb;\n","import styled from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\nimport { intersperse } from 'design-system/lib/intersperse';\nimport { paragraphMixins } from 'design-system/mixins/text';\n\nimport Breadcrumb, {\n type BreadcrumbHeadingAs,\n type BreadcrumbProps,\n type BreadcrumbSize,\n} from './Breadcrumb';\n\nexport type BreadcrumbsItemProps = Omit<BreadcrumbProps, 'size' | 'current' | 'headingAs'>;\n\nexport type BreadcrumbsProps = {\n items: BreadcrumbsItemProps[];\n size?: BreadcrumbSize;\n /**\n * Overrides the heading element rendered for the current crumb. Defaults to `h1`; use `h2` or\n * lower when the page already has an `h1`.\n */\n headingAs?: BreadcrumbHeadingAs;\n 'aria-label'?: string;\n className?: string;\n};\n\nconst BreadcrumbList = styled.ol`\n max-width: 100%;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n list-style: none;\n margin: 0;\n padding: 0;\n min-width: 0;\n`;\n\nconst BreadcrumbListItem = styled.li`\n display: flex;\n align-items: center;\n min-width: 0;\n`;\n\nconst Separator = styled.span<{ $size: BreadcrumbSize }>`\n padding: 0 ${Spacing[2]};\n color: ${({ theme }) => theme.color.text.tertiary};\n user-select: none;\n ${({ $size }) => ($size === 'lg' ? paragraphMixins.lg : paragraphMixins.md)};\n`;\n\nexport const Breadcrumbs = ({\n items,\n size = 'md',\n headingAs = 'h1',\n 'aria-label': ariaLabel = 'Breadcrumbs',\n className,\n}: BreadcrumbsProps) => {\n if (items.length === 0) {\n return null;\n }\n\n const crumbNodes = items.map((item, index) => {\n const isCurrent = index === items.length - 1;\n\n return (\n <BreadcrumbListItem\n key={`${item.label}-${index}`}\n aria-current={isCurrent ? 'page' : undefined}\n >\n <Breadcrumb {...item} size={size} current={isCurrent} headingAs={headingAs} />\n </BreadcrumbListItem>\n );\n });\n\n const listItems = intersperse(crumbNodes, (separatorIndex: number) => (\n <BreadcrumbListItem key={`separator-${separatorIndex}`} aria-hidden='true'>\n <Separator $size={size}>/</Separator>\n </BreadcrumbListItem>\n ));\n\n return (\n <nav aria-label={ariaLabel} className={className}>\n <BreadcrumbList>{listItems}</BreadcrumbList>\n </nav>\n );\n};\n\nexport default Breadcrumbs;\n"],"mappings":"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"}
@@ -1,52 +0,0 @@
1
- import { c as ParagraphProps, u as SpanProps } from "./Text-BzzUdBdc.mjs";
2
- import { i as HeaderProps } from "./Header-BKk3qESS.mjs";
3
- import { Spacing } from "@persona/design-tokens";
4
- import * as _$styled_components0 from "styled-components";
5
- import { ComponentPropsWithoutRef, FC, PropsWithChildren, ReactElement, ReactNode } from "react";
6
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
7
- import * as _$hoist_non_react_statics0 from "hoist-non-react-statics";
8
-
9
- //#region components/Card/Card.d.ts
10
- interface CardProps {
11
- elevated?: boolean;
12
- $matchCardV2?: boolean;
13
- }
14
- interface TitleBaseProps {
15
- icon?: ReactElement;
16
- }
17
- interface TitleProps extends TitleBaseProps, Pick<HeaderProps, 'actions' | 'subtitle'>, Omit<ComponentPropsWithoutRef<'h3'>, 'color' | 'size'> {
18
- $matchCardV2?: boolean;
19
- }
20
- interface SectionProps extends Pick<HeaderProps, 'subtitle' | 'actions'>, Omit<ComponentPropsWithoutRef<'h3'>, 'color' | 'size'> {}
21
- /**
22
- * Wrapper for a full-width image to be used at the top of a card.
23
- */
24
- interface ImageProps {
25
- height: number;
26
- children: ReactNode;
27
- }
28
- interface CollapsibleSectionProps {
29
- id?: string;
30
- defaultExpanded?: boolean;
31
- title: ReactNode;
32
- }
33
- declare const _default: string & _$styled_components0.StyledComponentBase<"div", any, CardProps, never> & _$hoist_non_react_statics0.NonReactStatics<never, {}> & {
34
- Title: FC<TitleProps>;
35
- SectionHeader: ({
36
- children,
37
- ...elemProps
38
- }: SectionProps) => _$react_jsx_runtime0.JSX.Element;
39
- Subtitle: _$styled_components0.StyledComponent<FC<PropsWithChildren<SpanProps>>, any, ParagraphProps & {
40
- size: string;
41
- }, "size">;
42
- Body: _$styled_components0.StyledComponent<"section", any, {
43
- gap?: number;
44
- padding?: Spacing;
45
- $matchCardV2?: boolean;
46
- }, never>;
47
- Image: FC<ImageProps>;
48
- CollapsibleSection: FC<PropsWithChildren<CollapsibleSectionProps>>;
49
- };
50
- //#endregion
51
- export { SectionProps as n, _default as r, CardProps as t };
52
- //# sourceMappingURL=Card-BoGV5tY2.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Card-CKrJtn1f.mjs","names":["Title","Spacer"],"sources":["../components/Card/Header/Header.tsx","../components/Card/Card.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\nimport { headingMixins, paragraphMixins } from 'design-system/mixins/text';\n\nexport interface HeaderProps {\n children: ReactNode;\n subtitle?: ReactNode;\n variant?: 'title' | 'section';\n actions?: ReactNode;\n $matchCardV2?: boolean;\n}\n\nexport const HeaderContainer = styled.div<Pick<HeaderProps, 'variant' | '$matchCardV2'>>`\n ${paragraphMixins.md};\n display: flex;\n align-items: center;\n justify-content: space-between;\n &:not(:only-child) {\n margin: 0px 0px ${Spacing[4]} 0px;\n ${({ $matchCardV2 }) =>\n $matchCardV2 &&\n css`\n margin-bottom: ${Spacing[1]};\n `}\n }\n ${({ variant }) =>\n variant === 'section' &&\n css`\n border-bottom: 1px solid ${({ theme }) => theme.color.border.primary};\n `}\n`;\n\nexport const TitleContainer = styled.div`\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n`;\n\nexport const Title = styled.h3<Pick<HeaderProps, 'variant' | '$matchCardV2'>>`\n display: flex;\n align-items: center;\n margin: 0px;\n gap: ${Spacing[2]};\n ${({ variant }) => {\n switch (variant) {\n case 'section':\n return paragraphMixins.lgBold;\n case 'title':\n default:\n return headingMixins.sm;\n }\n }}\n ${({ $matchCardV2 }) =>\n $matchCardV2 &&\n css`\n ${headingMixins.xsm};\n `}\n`;\n\nexport const ActionsContainer = styled.div`\n color: ${({ theme }) => theme.color.text.secondary};\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n`;\n\nconst FullDivider = styled.hr`\n border-top: 1px solid ${Color.BorderDivider};\n margin: 0;\n\n /* Use negative margin to bleed the divider out of the grid. */\n margin-left: -${Spacing[5]};\n margin-right: -${Spacing[5]};\n`;\n\nconst Header = ({\n children,\n variant,\n actions,\n subtitle,\n $matchCardV2,\n ...elemProps\n}: HeaderProps & ComponentPropsWithoutRef<'div'>) => {\n return (\n <>\n <HeaderContainer variant={variant} {...elemProps} $matchCardV2={$matchCardV2}>\n <TitleContainer>\n <Title variant={variant} $matchCardV2={$matchCardV2}>\n {children}\n </Title>\n {subtitle}\n </TitleContainer>\n <ActionsContainer>{actions}</ActionsContainer>\n </HeaderContainer>\n {$matchCardV2 && <FullDivider />}\n </>\n );\n};\n\nexport const Root = Header;\n\nexport default Header;\n","import type {\n ComponentPropsWithoutRef,\n FC,\n PropsWithChildren,\n ReactElement,\n ReactNode,\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\nimport { ChevronDownIcon, ChevronUpIcon } from '@persona/icons';\nimport Header, { type HeaderProps } from 'design-system/components/Card/Header';\nimport Spacer from 'design-system/components/Spacer';\nimport { Paragraph } from 'design-system/components/Text';\nimport useToggle from 'design-system/lib/useToggle';\nimport { BASE } from 'design-system/variables/spacing';\n\nexport interface CardProps {\n elevated?: boolean;\n $matchCardV2?: boolean;\n}\n\n/**\n * @deprecated Use CardV2 instead\n */\nconst Card = styled('div')<CardProps>`\n border-radius: ${({ theme }) => {\n return theme.card.borderRadius;\n }};\n display: flex;\n flex-direction: column;\n margin-bottom: ${Spacing[4]};\n background-color: ${({ theme }) => theme.color.background.primary};\n font-family: ${({ theme }) => theme.text.fontFamily.base};\n ${({ elevated }) =>\n elevated &&\n css`\n box-shadow: 0px 0px 14px 2px rgba(0, 0, 0, 0.12);\n `}\n\n ${({ $matchCardV2 }) =>\n $matchCardV2 &&\n css`\n margin-bottom: 0;\n `}\n`;\n\n/**\n * To be used within cards. Provides padding and basic layout. Should not be\n * used if card's contents are edge-to-edge with no padding.\n */\nconst Body = styled('section')<{ gap?: number; padding?: Spacing; $matchCardV2?: boolean }>`\n margin: 0;\n padding: ${({ padding }) => padding ?? Spacing[5]};\n display: grid;\n grid-auto-flow: row;\n grid-gap: ${({ gap }) => (gap != null ? gap : BASE)}px;\n /**\n * Prevent grid blowout\n * https://css-tricks.com/preventing-a-grid-blowout/\n */\n grid-template-columns: minmax(0, 1fr);\n\n ${({ $matchCardV2 }) =>\n $matchCardV2 &&\n css`\n padding: ${Spacing[4]} ${Spacing[5]};\n grid-gap: ${Spacing[3]};\n `}\n`;\n\nconst IconContainer = styled('div')`\n margin-right: ${Spacing[3]};\n display: flex;\n align-items: center;\n\n > svg {\n height: 24px;\n width: 24px;\n }\n`;\n\nconst ImageWrapper = styled('div')<{ height: number }>`\n width: 100%;\n overflow: hidden;\n border-radius: ${({ theme }) => theme.card.borderRadius} ${({ theme }) => theme.card.borderRadius}\n 0px 0px;\n\n ${({ height }) => {\n return css`\n height: ${height}px;\n `;\n }};\n\n > img,\n svg {\n width: 100%;\n border-radius: ${({ theme }) => theme.card.borderRadius}\n ${({ theme }) => theme.card.borderRadius} 0px 0px;\n }\n`;\n\ninterface TitleBaseProps {\n icon?: ReactElement;\n}\n\ninterface TitleProps\n extends\n TitleBaseProps,\n Pick<HeaderProps, 'actions' | 'subtitle'>,\n Omit<ComponentPropsWithoutRef<'h3'>, 'color' | 'size'> {\n $matchCardV2?: boolean;\n}\n\n/**\n * Label to be used within cards. Note that some cards lead with a Title while\n * some others lead with a Subtitle (see below).\n */\nconst Title: FC<TitleProps> = ({ icon, children, ...elemProps }) => (\n <Header variant='title' {...elemProps}>\n {icon != null && <IconContainer>{icon}</IconContainer>}\n {children}\n </Header>\n);\n\n/**\n * Smaller label to be used within cards.\n */\nconst Subtitle = styled(Paragraph).attrs(() => ({ size: 'md' }))`\n color: ${({ theme }) => theme.color.text.tertiary};\n`;\n\nexport interface SectionProps\n extends\n Pick<HeaderProps, 'subtitle' | 'actions'>,\n Omit<ComponentPropsWithoutRef<'h3'>, 'color' | 'size'> {}\n\n/**\n * Header for section headers within a Card\n */\nconst SectionHeader = ({ children, ...elemProps }: SectionProps) => (\n <Header variant='section' {...elemProps}>\n {children}\n </Header>\n);\n\n/**\n * Wrapper for a full-width image to be used at the top of a card.\n */\n\ninterface ImageProps {\n height: number;\n children: ReactNode;\n}\n\nconst Image: FC<ImageProps> = ({ height, children, ...elemProps }) => (\n <ImageWrapper {...elemProps} height={height}>\n {children}\n </ImageWrapper>\n);\n\ninterface CollapsibleSectionProps {\n id?: string;\n defaultExpanded?: boolean;\n title: ReactNode;\n}\n\nconst CollapsibleSection: FC<PropsWithChildren<CollapsibleSectionProps>> = ({\n id,\n defaultExpanded,\n title,\n children,\n}) => {\n const [isOpen, { toggle }] = useToggle(defaultExpanded);\n\n return (\n <section>\n <div id={id} onClick={toggle}>\n <Header variant='section'>\n <HeaderIcon>\n {isOpen ? <ChevronUpIcon /> : <ChevronDownIcon />}\n <Spacer width={0.5} height={0} />\n </HeaderIcon>\n {title}\n </Header>\n </div>\n <div>\n {isOpen && (\n <>\n <Spacer height={1} />\n {children}\n </>\n )}\n </div>\n <Spacer height={1} />\n </section>\n );\n};\n\nconst HeaderIcon = styled.div`\n display: flex;\n`;\n\nexport default Object.assign(Card, {\n Title,\n SectionHeader,\n Subtitle,\n Body,\n Image,\n CollapsibleSection,\n});\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CardV2-B2wx1NE3.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 { 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 ${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 { 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 ${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 }) => 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';\n\nconst CardContainer = styled.div`\n border-radius: ${({ theme }) => theme.card.borderRadius};\n background-color: ${({ theme }) => 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\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 }) => 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 ${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 +0,0 @@
1
- {"version":3,"file":"Checkbox-DwZEsi7x.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 {\n isChecked,\n isDisabled,\n isFocusedVisible,\n isHovered,\n isIndeterminate,\n isNotDisabled,\n} from 'design-system/lib/pseudoClass';\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 ${Color.BorderInputCheckbox};\n background: ${Color.BackgroundInputDefault};\n\n svg {\n color: ${Color.BorderIconInverse};\n }\n\n &${isDisabled} {\n cursor: default;\n background: ${Color.BackgroundInputDisabled};\n border-color: ${Color.BorderInputDisabled};\n }\n\n ${({ checked }) =>\n checked &&\n css`\n border-color: ${Color.BackgroundInputActive};\n background: ${Color.BackgroundInputActive};\n\n &${isDisabled} {\n border-color: ${Color.BackgroundInputActiveDisabled};\n background: ${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: ${Color.BorderInputCheckboxHover};\n }\n\n &${isChecked}, &${isIndeterminate} {\n &${isHovered}${isNotDisabled} ~ ${CheckboxBox} {\n background: ${Color.BackgroundInputActiveHover};\n border-color: ${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: ${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: ${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' : checked}\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":";;;;;;;;;;;;;;AA+BA,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;;sBAEA,MAAM,oBAAoB;gBAChC,MAAM,uBAAuB;;;aAGhC,MAAM,kBAAkB;;;KAGhC,WAAW;;kBAEE,MAAM,wBAAwB;oBAC5B,MAAM,oBAAoB;;;KAGzC,EAAE,cACH,WACA,GAAG;sBACe,MAAM,sBAAsB;oBAC9B,MAAM,sBAAsB;;SAEvC,WAAW;wBACI,MAAM,8BAA8B;sBACtC,MAAM,8BAA8B;;MAEpD;;AAGN,MAAM,gBAAgB,OAAO,KAAK;;;;;;;;;;KAU7B,YAAY,cAAc,KAAK,YAAY;oBAC5B,MAAM,yBAAyB;;;KAG9C,UAAU,KAAK,gBAAgB;OAC7B,YAAY,cAAc,KAAK,YAAY;oBAC9B,MAAM,2BAA2B;sBAC/B,MAAM,2BAA2B;;;;KAIlD,mBAAmB,cAAc,KAAK,YAAY;MACjD,WAAW;;;AAIjB,MAAM,QAAQ,OAAO,KAA+C;;WAEzD,MAAM,YAAY;;KAExB,EAAE,WACH,SAAS,OACL,GAAG;YACC,WAAW,UAAU;;YAGzB,GAAG;YACC,WAAW,WAAW;;;;;UAKxB;;KAEL,EAAE,OAAO,eACV,YACA,GAAG;;eAEQ,MAAM,MAAM,KAAK,SAAS;MACnC;;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;AAE5D,iBAAgB;AACd,MAAI,SAAS,QAEX,UAAS,QAAQ,gBAAgB;IAElC,CAAC,eAAe,SAAS,CAAC;AAE7B,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;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"}