@persona/design-system 0.1.6 → 0.1.8

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 (817) hide show
  1. package/CHANGELOG.md +346 -202
  2. package/dist/{Action-DSg3yZck.d.mts → Action-CVtzREhU.d.mts} +3 -3
  3. package/dist/{Action-uduFOh2m.d.cts → Action-E90Wvqmc.d.cts} +3 -3
  4. package/dist/Action.d.cts +1 -1
  5. package/dist/Action.d.mts +1 -1
  6. package/dist/AdvancedFilterRuleRow.d.mts +37 -0
  7. package/dist/AdvancedFilterRulesPopover.d.mts +62 -0
  8. package/dist/ArrayValueControl.d.mts +38 -0
  9. package/dist/Attribute.d.mts +4 -4
  10. package/dist/AttributeGrid.d.mts +1 -1
  11. package/dist/{Badge-CvdUyXSH.cjs → Badge-ADPloFsd.cjs} +2 -5
  12. package/dist/{Badge-CvdUyXSH.cjs.map → Badge-ADPloFsd.cjs.map} +1 -1
  13. package/dist/{Badge-pq6B-3ue.mjs → Badge-DortWowZ.mjs} +2 -5
  14. package/dist/{Badge-pq6B-3ue.mjs.map → Badge-DortWowZ.mjs.map} +1 -1
  15. package/dist/Banner.d.mts +1 -1
  16. package/dist/BooleanValueControl.d.mts +20 -0
  17. package/dist/Breadcrumb-VH-Mwo-M.d.cts +44 -0
  18. package/dist/Breadcrumb-lziQ1FX9.d.mts +44 -0
  19. package/dist/Breadcrumb.d.cts +2 -0
  20. package/dist/Breadcrumb.d.mts +2 -0
  21. package/dist/Breadcrumbs-BBREROrw.d.cts +26 -0
  22. package/dist/Breadcrumbs-CDZ_Mrcg.mjs +288 -0
  23. package/dist/Breadcrumbs-CDZ_Mrcg.mjs.map +1 -0
  24. package/dist/Breadcrumbs-DJ5qqqRD.d.mts +26 -0
  25. package/dist/Breadcrumbs-tR49JqAS.cjs +295 -0
  26. package/dist/Breadcrumbs-tR49JqAS.cjs.map +1 -0
  27. package/dist/Breadcrumbs.d.cts +2 -0
  28. package/dist/Breadcrumbs.d.mts +2 -0
  29. package/dist/{Button-DcTUxRNI.d.mts → Button-9p469xA1.d.mts} +3 -3
  30. package/dist/Button.d.mts +1 -1
  31. package/dist/ButtonGroup.d.mts +1 -1
  32. package/dist/Calendar.d.mts +1 -1
  33. package/dist/CalendarBase.d.mts +1 -1
  34. package/dist/{Card-CLTkZLKr.mjs → Card-BMCB9eFC.mjs} +4 -4
  35. package/dist/{Card-CLTkZLKr.mjs.map → Card-BMCB9eFC.mjs.map} +1 -1
  36. package/dist/{Card-CrQL0hXm.d.cts → Card-CJPEmUvg.d.cts} +2 -2
  37. package/dist/{Card-YzGS3nQI.d.mts → Card-CqnG--CU.d.mts} +4 -4
  38. package/dist/{Card-CaOItkgL.cjs → Card-Csz-PxX0.cjs} +4 -4
  39. package/dist/{Card-CaOItkgL.cjs.map → Card-Csz-PxX0.cjs.map} +1 -1
  40. package/dist/Card.d.cts +1 -1
  41. package/dist/Card.d.mts +1 -1
  42. package/dist/Card2.d.cts +1 -1
  43. package/dist/Card2.d.mts +1 -1
  44. package/dist/CardV2-C9z0Hr-c.mjs +411 -0
  45. package/dist/CardV2-C9z0Hr-c.mjs.map +1 -0
  46. package/dist/CardV2-DJXgFomd.cjs +419 -0
  47. package/dist/CardV2-DJXgFomd.cjs.map +1 -0
  48. package/dist/{Checkbox-UWdk4pqb.mjs → Checkbox-B0bjZbji.mjs} +5 -5
  49. package/dist/{Checkbox-UWdk4pqb.mjs.map → Checkbox-B0bjZbji.mjs.map} +1 -1
  50. package/dist/{Checkbox-BmjK0Wac.d.cts → Checkbox-Bm8exUfH.d.mts} +1 -1
  51. package/dist/{Checkbox-B83WfsOZ.cjs → Checkbox-CmCujC1W.cjs} +5 -5
  52. package/dist/{Checkbox-B83WfsOZ.cjs.map → Checkbox-CmCujC1W.cjs.map} +1 -1
  53. package/dist/{Checkbox-Bc2kzl9q.d.mts → Checkbox-Cr8ifm10.d.cts} +1 -1
  54. package/dist/Checkbox.d.cts +1 -1
  55. package/dist/Checkbox.d.mts +1 -1
  56. package/dist/CheckboxGroupField.d.cts +1 -1
  57. package/dist/CheckboxGroupField.d.mts +2 -2
  58. package/dist/ChoicesValueControl.d.mts +35 -0
  59. package/dist/{Combobox-I44W5oX0.mjs → Combobox-BdqU5WLG.mjs} +261 -72
  60. package/dist/Combobox-BdqU5WLG.mjs.map +1 -0
  61. package/dist/{Combobox-Dx1u-L1A.d.cts → Combobox-C99xluaM.d.mts} +3 -3
  62. package/dist/{Combobox-R3_NDBi3.cjs → Combobox-COXvmxlM.cjs} +254 -65
  63. package/dist/Combobox-COXvmxlM.cjs.map +1 -0
  64. package/dist/{Combobox-DtD1XXaf.d.mts → Combobox-DBWMHwUt.d.cts} +3 -3
  65. package/dist/Combobox.d.cts +2 -2
  66. package/dist/Combobox.d.mts +2 -2
  67. package/dist/{ComboboxBase-sRVxlTJw.d.mts → ComboboxBase-BsY7CYoB.d.mts} +50 -9
  68. package/dist/{ComboboxBase-d98GJD-k.d.cts → ComboboxBase-zZ3tE-dH.d.cts} +47 -6
  69. package/dist/ComboboxBase.d.cts +2 -2
  70. package/dist/ComboboxBase.d.mts +2 -2
  71. package/dist/{ComboboxMultiSelect-CdLQDBMN.d.mts → ComboboxMultiSelect-dNuETspL.d.mts} +2 -2
  72. package/dist/{ComboboxMultiSelect-CRHf5TI-.d.cts → ComboboxMultiSelect-ioB4Jx7_.d.cts} +2 -2
  73. package/dist/ComboboxMultiSelect.d.cts +1 -1
  74. package/dist/ComboboxMultiSelect.d.mts +1 -1
  75. package/dist/{ComboboxSingleSelect-CxiQ2o6t.d.mts → ComboboxSingleSelect-C8KvIJ43.d.mts} +4 -4
  76. package/dist/{ComboboxSingleSelect-DvK8QioK.d.cts → ComboboxSingleSelect-Fn80tdhz.d.cts} +4 -4
  77. package/dist/ComboboxSingleSelect.d.cts +1 -1
  78. package/dist/ComboboxSingleSelect.d.mts +1 -1
  79. package/dist/{CompactBar-ODUl2Q6G.d.cts → CompactBar-BEAK55kh.d.cts} +3 -3
  80. package/dist/{CompactBar-k-rhZ5Z-.d.mts → CompactBar-CXqlVKy7.d.mts} +3 -3
  81. package/dist/CompactBar.d.cts +1 -1
  82. package/dist/CompactBar.d.mts +1 -1
  83. package/dist/{ConfigFormGroup-BhO9nm3P.cjs → ConfigFormGroup-m5YdVa9n.cjs} +3 -3
  84. package/dist/{ConfigFormGroup-BhO9nm3P.cjs.map → ConfigFormGroup-m5YdVa9n.cjs.map} +1 -1
  85. package/dist/{ConfigFormGroup-_yCksmZo.mjs → ConfigFormGroup-yhb2jldT.mjs} +3 -3
  86. package/dist/{ConfigFormGroup-_yCksmZo.mjs.map → ConfigFormGroup-yhb2jldT.mjs.map} +1 -1
  87. package/dist/{ControlBar-9m-DNImB.d.mts → ControlBar-D8CirAyZ.d.cts} +2 -2
  88. package/dist/{ControlBar-oT-I2y6E.d.cts → ControlBar-tOCQnbAl.d.mts} +2 -2
  89. package/dist/ControlBar.d.cts +1 -1
  90. package/dist/ControlBar.d.mts +1 -1
  91. package/dist/DataTable.d.cts +3 -3
  92. package/dist/DataTable.d.mts +4 -4
  93. package/dist/DateField.d.cts +1 -1
  94. package/dist/DateField.d.mts +1 -1
  95. package/dist/DatePicker-BlCgFb7g.cjs +948 -0
  96. package/dist/DatePicker-BlCgFb7g.cjs.map +1 -0
  97. package/dist/DatePicker-DY1YA_Fu.mjs +922 -0
  98. package/dist/DatePicker-DY1YA_Fu.mjs.map +1 -0
  99. package/dist/DatePicker.d.cts +1 -1
  100. package/dist/DatePicker.d.mts +1 -1
  101. package/dist/DateRangePicker.d.cts +6 -1
  102. package/dist/DateRangePicker.d.mts +6 -1
  103. package/dist/DateValueControl.d.mts +26 -0
  104. package/dist/{DropdownButton-BS1QfVX_.mjs → DropdownButton-DKLjJylQ.mjs} +3 -3
  105. package/dist/{DropdownButton-BS1QfVX_.mjs.map → DropdownButton-DKLjJylQ.mjs.map} +1 -1
  106. package/dist/{DropdownButton-Dpiy5v-R.cjs → DropdownButton-Dl7IEzAc.cjs} +3 -3
  107. package/dist/{DropdownButton-Dpiy5v-R.cjs.map → DropdownButton-Dl7IEzAc.cjs.map} +1 -1
  108. package/dist/DropdownButton.d.cts +1 -1
  109. package/dist/DropdownButton.d.mts +2 -2
  110. package/dist/{DropdownMenu-COkpUmIO.d.mts → DropdownMenu-CVPanvKA.d.mts} +3 -3
  111. package/dist/{DropdownMenu-cN_AnKAT.mjs → DropdownMenu-DGYexb7s.mjs} +3 -3
  112. package/dist/{DropdownMenu-cN_AnKAT.mjs.map → DropdownMenu-DGYexb7s.mjs.map} +1 -1
  113. package/dist/{DropdownMenu-CeqZAxjs.cjs → DropdownMenu-DnlQqTjs.cjs} +3 -3
  114. package/dist/{DropdownMenu-CeqZAxjs.cjs.map → DropdownMenu-DnlQqTjs.cjs.map} +1 -1
  115. package/dist/{DropdownMenu-D1E1jpZu.d.cts → DropdownMenu-FkiManPP.d.cts} +2 -2
  116. package/dist/DropdownMenu.d.cts +1 -1
  117. package/dist/DropdownMenu.d.mts +1 -1
  118. package/dist/{ErrorProps-DBw1_Z0a.d.mts → ErrorProps-CN2XjaOX.d.mts} +1 -1
  119. package/dist/{ErrorProps-DLdVsYlk.d.cts → ErrorProps-Dxqb4gw_.d.cts} +1 -1
  120. package/dist/ErrorProps.d.cts +1 -1
  121. package/dist/ErrorProps.d.mts +1 -1
  122. package/dist/FieldRegistry-OX60T3hr.d.cts +122 -0
  123. package/dist/FieldRegistry-rqSkjchY.d.mts +122 -0
  124. package/dist/FieldRegistry.d.cts +2 -0
  125. package/dist/FieldRegistry.d.mts +2 -0
  126. package/dist/FilterBar-D3LiIy1-.d.mts +103 -0
  127. package/dist/FilterBar-YzOh02f9.d.cts +103 -0
  128. package/dist/FilterBar.d.cts +2 -0
  129. package/dist/FilterBar.d.mts +2 -0
  130. package/dist/FilterPickerMenu.d.mts +84 -0
  131. package/dist/FilterPill.d.mts +60 -0
  132. package/dist/FilterPopover.d.mts +87 -0
  133. package/dist/FloatValueControl.d.mts +40 -0
  134. package/dist/{FormControl-fK4HA_yF.mjs → FormControl-B28qa7aQ.mjs} +6 -6
  135. package/dist/{FormControl-fK4HA_yF.mjs.map → FormControl-B28qa7aQ.mjs.map} +1 -1
  136. package/dist/{FormControl-OqBTbSwv.d.cts → FormControl-DFp_qcW1.d.cts} +2 -2
  137. package/dist/{FormControl-vfFzrYhv.d.mts → FormControl-DH3bgqaB.d.mts} +3 -3
  138. package/dist/{FormControl-DjxkL5Ft.cjs → FormControl-MkBXuUF6.cjs} +6 -6
  139. package/dist/{FormControl-DjxkL5Ft.cjs.map → FormControl-MkBXuUF6.cjs.map} +1 -1
  140. package/dist/FormControl.d.cts +1 -1
  141. package/dist/FormControl.d.mts +1 -1
  142. package/dist/FormControlLabel.d.mts +1 -1
  143. package/dist/{FormField-24UPuoL6.d.mts → FormField-BugkBvN4.d.mts} +2 -2
  144. package/dist/FormField-D3XhxTMg.cjs +550 -0
  145. package/dist/FormField-D3XhxTMg.cjs.map +1 -0
  146. package/dist/FormField-PeYYRO4s.mjs +471 -0
  147. package/dist/FormField-PeYYRO4s.mjs.map +1 -0
  148. package/dist/{FormField-Cqwi_PyR.d.cts → FormField-idNLw5PW.d.cts} +2 -2
  149. package/dist/FormField.d.cts +1 -1
  150. package/dist/FormField.d.mts +1 -1
  151. package/dist/{Header-D8oDtnIL.d.cts → Header-C-WhPOin.d.cts} +3 -3
  152. package/dist/{Header-WNGlG541.d.mts → Header-CDTYK1XJ.d.mts} +2 -2
  153. package/dist/Header.d.cts +1 -1
  154. package/dist/Header.d.mts +1 -1
  155. package/dist/{HelperTooltip-Bd5pQLqL.d.mts → HelperTooltip-B7Ysh8B3.d.mts} +3 -3
  156. package/dist/{HelperTooltip-oXdyk2At.d.cts → HelperTooltip-T-sTGGLD.d.cts} +2 -2
  157. package/dist/HelperTooltip.d.cts +1 -1
  158. package/dist/HelperTooltip.d.mts +1 -1
  159. package/dist/{HoverCopyableField-DyW2iZuo.cjs → HoverCopyableField-CRkM7o4B.cjs} +12 -12
  160. package/dist/HoverCopyableField-CRkM7o4B.cjs.map +1 -0
  161. package/dist/{HoverCopyableField-DBkYvwii.mjs → HoverCopyableField-ClXBg_ld.mjs} +8 -8
  162. package/dist/HoverCopyableField-ClXBg_ld.mjs.map +1 -0
  163. package/dist/HoverCopyableField.d.mts +1 -1
  164. package/dist/{IconButton-DggxojBH.d.mts → IconButton-BSES_-6g.d.mts} +2 -2
  165. package/dist/{IconButton-DC4rh6ow.mjs → IconButton-CIWiEsS-.mjs} +5 -5
  166. package/dist/{IconButton-DC4rh6ow.mjs.map → IconButton-CIWiEsS-.mjs.map} +1 -1
  167. package/dist/{IconButton-DNy7g5zh.cjs → IconButton-nlgjJQCS.cjs} +4 -4
  168. package/dist/{IconButton-DNy7g5zh.cjs.map → IconButton-nlgjJQCS.cjs.map} +1 -1
  169. package/dist/IconButton.d.mts +1 -1
  170. package/dist/ImageTile.d.cts +1 -1
  171. package/dist/ImageTile.d.mts +2 -2
  172. package/dist/InlineCombobox.d.mts +6 -3
  173. package/dist/InlineInput.d.mts +4 -1
  174. package/dist/{Input-Bl7633Ux.mjs → Input-BFI_e7aU.mjs} +5 -5
  175. package/dist/{Input-Bl7633Ux.mjs.map → Input-BFI_e7aU.mjs.map} +1 -1
  176. package/dist/{Input-XppkvfUf.d.cts → Input-BM0DzWEf.d.cts} +2 -2
  177. package/dist/{Input-DW7oacjc.d.mts → Input-BPClVzwD.d.mts} +4 -4
  178. package/dist/{Input-DQS-BEym.cjs → Input-OJPQ07TW.cjs} +5 -5
  179. package/dist/{Input-DQS-BEym.cjs.map → Input-OJPQ07TW.cjs.map} +1 -1
  180. package/dist/Input.d.cts +1 -1
  181. package/dist/Input.d.mts +1 -1
  182. package/dist/{InputProps-7rEMxBED.d.cts → InputProps-BnjxrdWQ.d.mts} +2 -2
  183. package/dist/{InputProps-DQpb2_E3.d.mts → InputProps-CoVNpQSj.d.cts} +2 -2
  184. package/dist/InputProps.d.cts +1 -1
  185. package/dist/InputProps.d.mts +1 -1
  186. package/dist/IntegerValueControl.d.mts +39 -0
  187. package/dist/LayoutLoadingShimmer.d.cts +20 -0
  188. package/dist/LayoutLoadingShimmer.d.mts +20 -0
  189. package/dist/Link.d.mts +1 -1
  190. package/dist/{ListBox-B4uoo_PT.cjs → ListBox-BP1eaG7L.cjs} +84 -15
  191. package/dist/ListBox-BP1eaG7L.cjs.map +1 -0
  192. package/dist/{ListBox-B7sbubm5.mjs → ListBox-BwID8jpk.mjs} +84 -15
  193. package/dist/ListBox-BwID8jpk.mjs.map +1 -0
  194. package/dist/{ListBox-DeVmbXeC.d.cts → ListBox-QaeRQBSC.d.cts} +2 -2
  195. package/dist/{ListBox-CVvKa5sc.d.mts → ListBox-_fcSPynx.d.mts} +5 -5
  196. package/dist/ListBox.d.cts +1 -1
  197. package/dist/ListBox.d.mts +1 -1
  198. package/dist/ListBoxField.d.cts +2 -2
  199. package/dist/ListBoxField.d.mts +3 -3
  200. package/dist/{LoadingShimmer-b430vgof.mjs → LoadingShimmer-Dsc_RCCf.mjs} +1 -1
  201. package/dist/{LoadingShimmer-b430vgof.mjs.map → LoadingShimmer-Dsc_RCCf.mjs.map} +1 -1
  202. package/dist/{LoadingShimmer-uG2UzYQd.cjs → LoadingShimmer-Dx6ncVUV.cjs} +1 -1
  203. package/dist/{LoadingShimmer-uG2UzYQd.cjs.map → LoadingShimmer-Dx6ncVUV.cjs.map} +1 -1
  204. package/dist/LoadingShimmer.d.mts +2 -2
  205. package/dist/LogicRow-BtCKGX_j.d.mts +40 -0
  206. package/dist/LogicRow-C6lrFIq0.d.cts +40 -0
  207. package/dist/LogicRow.d.cts +2 -0
  208. package/dist/LogicRow.d.mts +2 -0
  209. package/dist/MaskedInput.d.cts +1 -1
  210. package/dist/MaskedInput.d.mts +1 -1
  211. package/dist/{Menu-BbSyWxFD.mjs → Menu-CPYXo61N.mjs} +5 -5
  212. package/dist/{Menu-BbSyWxFD.mjs.map → Menu-CPYXo61N.mjs.map} +1 -1
  213. package/dist/{Menu-CSgCXX0k.d.mts → Menu-CUp_9HgC.d.mts} +4 -4
  214. package/dist/{Menu-C_NOsHAm.d.cts → Menu-fUnbIYr5.d.cts} +2 -2
  215. package/dist/{Menu-BLbEcodU.cjs → Menu-t2q8NrV0.cjs} +5 -5
  216. package/dist/{Menu-BLbEcodU.cjs.map → Menu-t2q8NrV0.cjs.map} +1 -1
  217. package/dist/Menu.d.cts +1 -1
  218. package/dist/Menu.d.mts +1 -1
  219. package/dist/{MiddleTruncatedText-BIzKECv9.cjs → MiddleTruncatedText-CO76xIqP.cjs} +2 -2
  220. package/dist/{MiddleTruncatedText-BIzKECv9.cjs.map → MiddleTruncatedText-CO76xIqP.cjs.map} +1 -1
  221. package/dist/{MiddleTruncatedText-Bzpg3zAU.mjs → MiddleTruncatedText-GXI-CPvs.mjs} +3 -3
  222. package/dist/{MiddleTruncatedText-Bzpg3zAU.mjs.map → MiddleTruncatedText-GXI-CPvs.mjs.map} +1 -1
  223. package/dist/Modal.d.cts +10 -5
  224. package/dist/Modal.d.mts +13 -8
  225. package/dist/PageHeader-CUDnarkt.cjs +77 -0
  226. package/dist/PageHeader-CUDnarkt.cjs.map +1 -0
  227. package/dist/PageHeader-D-6W61E_.mjs +64 -0
  228. package/dist/PageHeader-D-6W61E_.mjs.map +1 -0
  229. package/dist/PageHeader.d.cts +11 -2
  230. package/dist/PageHeader.d.mts +12 -3
  231. package/dist/{PageSelector-COqR1tdA.d.cts → PageSelector-CNnVp3Al.d.cts} +3 -3
  232. package/dist/{PageSelector-mn6q4SKY.d.mts → PageSelector-vay4jpMp.d.mts} +3 -3
  233. package/dist/PageSelector.d.cts +1 -1
  234. package/dist/PageSelector.d.mts +1 -1
  235. package/dist/PageSizeSelector.d.mts +7 -1
  236. package/dist/{Pagination-DEZFb552.cjs → Pagination-2Yo1vRJZ.cjs} +13 -9
  237. package/dist/Pagination-2Yo1vRJZ.cjs.map +1 -0
  238. package/dist/{Pagination-CeoHVtYD.d.cts → Pagination-D04tn-tf.d.cts} +9 -3
  239. package/dist/{Pagination-BUjpYIwq.d.mts → Pagination-ygLutOst.d.mts} +9 -3
  240. package/dist/{Pagination-F8ofIWnG.mjs → Pagination-ztqhywAP.mjs} +14 -10
  241. package/dist/Pagination-ztqhywAP.mjs.map +1 -0
  242. package/dist/Pagination.d.cts +1 -1
  243. package/dist/Pagination.d.mts +1 -1
  244. package/dist/{Pii--c8IxKI0.cjs → Pii-DHTb3ewO.cjs} +2 -2
  245. package/dist/{Pii--c8IxKI0.cjs.map → Pii-DHTb3ewO.cjs.map} +1 -1
  246. package/dist/{Pii-B_gBVAak.mjs → Pii-DrrtEz7U.mjs} +2 -2
  247. package/dist/{Pii-B_gBVAak.mjs.map → Pii-DrrtEz7U.mjs.map} +1 -1
  248. package/dist/Pii.d.mts +1 -1
  249. package/dist/PillShell.d.mts +85 -0
  250. package/dist/{Popover-D4_aqKlm.mjs → Popover-BkDpDdaO.mjs} +5 -5
  251. package/dist/{Popover-D4_aqKlm.mjs.map → Popover-BkDpDdaO.mjs.map} +1 -1
  252. package/dist/{Popover-jHZICnQt.cjs → Popover-BzgMAhsX.cjs} +4 -4
  253. package/dist/{Popover-jHZICnQt.cjs.map → Popover-BzgMAhsX.cjs.map} +1 -1
  254. package/dist/Popover.d.mts +1 -1
  255. package/dist/ProgressBar.d.mts +1 -1
  256. package/dist/ProgressIndicator.d.mts +1 -1
  257. package/dist/{PseudoClassProps--MiDp2l2.d.mts → PseudoClassProps-DLxPxo7T.d.mts} +1 -1
  258. package/dist/PseudoClassProps.d.mts +1 -1
  259. package/dist/{Radio-BN9FLRHy.cjs → Radio-BrTzy7-C.cjs} +3 -3
  260. package/dist/{Radio-BN9FLRHy.cjs.map → Radio-BrTzy7-C.cjs.map} +1 -1
  261. package/dist/{Radio-DnnJl87b.mjs → Radio-CSX2eO-O.mjs} +3 -3
  262. package/dist/{Radio-DnnJl87b.mjs.map → Radio-CSX2eO-O.mjs.map} +1 -1
  263. package/dist/{RadioGroup-BDHhFlmy.mjs → RadioGroup-CnK0opBd.mjs} +3 -3
  264. package/dist/{RadioGroup-BDHhFlmy.mjs.map → RadioGroup-CnK0opBd.mjs.map} +1 -1
  265. package/dist/{RadioGroup-D28hdlhz.cjs → RadioGroup-CriF2InQ.cjs} +3 -3
  266. package/dist/{RadioGroup-D28hdlhz.cjs.map → RadioGroup-CriF2InQ.cjs.map} +1 -1
  267. package/dist/{RadioGroup-BDO3pTgP.d.cts → RadioGroup-DKqbSfju.d.mts} +1 -1
  268. package/dist/{RadioGroup-DfhvXpi3.d.mts → RadioGroup-XYWjprsv.d.cts} +1 -1
  269. package/dist/RadioGroup.d.cts +1 -1
  270. package/dist/RadioGroup.d.mts +1 -1
  271. package/dist/RangeCalendar.d.mts +1 -1
  272. package/dist/RangeCalendarPresets.d.mts +1 -1
  273. package/dist/RuleEditorFields.d.mts +37 -0
  274. package/dist/RulesPill.d.mts +65 -0
  275. package/dist/{SearchInput-2lsv5_R6.d.mts → SearchInput-Bp2yjaE1.d.mts} +3 -3
  276. package/dist/{SearchInput-B6d2Qyzb.d.cts → SearchInput-CTI59-NW.d.cts} +2 -2
  277. package/dist/SearchInput.d.cts +1 -1
  278. package/dist/SearchInput.d.mts +1 -1
  279. package/dist/Section.d.mts +1 -1
  280. package/dist/{SectionHeading-BLDimf5d.d.mts → SectionHeading-C6hjGdK-.d.cts} +2 -2
  281. package/dist/{SectionHeading-DZyfNPn0.d.cts → SectionHeading-Q-rx2LEd.d.mts} +2 -2
  282. package/dist/SectionHeading.d.cts +1 -1
  283. package/dist/SectionHeading.d.mts +1 -1
  284. package/dist/{SegmentedControl-DTkFgjac.cjs → SegmentedControl-C2XZF0ys.cjs} +8 -7
  285. package/dist/SegmentedControl-C2XZF0ys.cjs.map +1 -0
  286. package/dist/{SegmentedControl-pRkMcMXe.mjs → SegmentedControl-CgDQIVll.mjs} +8 -7
  287. package/dist/SegmentedControl-CgDQIVll.mjs.map +1 -0
  288. package/dist/{SegmentedControl-1QD2zH3l.d.mts → SegmentedControl-DrjdUOU9.d.mts} +2 -2
  289. package/dist/{SegmentedControl-C51htGBp.d.cts → SegmentedControl-nHIK1ZvR.d.cts} +1 -1
  290. package/dist/SegmentedControl.d.cts +1 -1
  291. package/dist/SegmentedControl.d.mts +1 -1
  292. package/dist/{Select-XN23Ui_j.d.cts → Select-2KbtKawr.d.mts} +11 -5
  293. package/dist/{Select-BysJW9mH.d.mts → Select-BH3hXMxp.d.cts} +11 -5
  294. package/dist/{Select-CowngLd7.cjs → Select-BurtT6bN.cjs} +13 -10
  295. package/dist/Select-BurtT6bN.cjs.map +1 -0
  296. package/dist/{Select-Fg2z5J-p.mjs → Select-cPEORy70.mjs} +14 -11
  297. package/dist/Select-cPEORy70.mjs.map +1 -0
  298. package/dist/Select.d.cts +1 -1
  299. package/dist/Select.d.mts +1 -1
  300. package/dist/Slider.d.mts +1 -1
  301. package/dist/SliderRHF.d.mts +1 -1
  302. package/dist/SliderThumb.d.mts +1 -1
  303. package/dist/{Spacer-GYHbk-dS.cjs → Spacer-B2CerL6e.cjs} +1 -1
  304. package/dist/{Spacer-GYHbk-dS.cjs.map → Spacer-B2CerL6e.cjs.map} +1 -1
  305. package/dist/{Spacer-Ln3KChb5.mjs → Spacer-CJp0lwkL.mjs} +1 -1
  306. package/dist/{Spacer-Ln3KChb5.mjs.map → Spacer-CJp0lwkL.mjs.map} +1 -1
  307. package/dist/{Spinner-DaSlM4kU.cjs → Spinner-B6bx70yR.cjs} +1 -1
  308. package/dist/{Spinner-DaSlM4kU.cjs.map → Spinner-B6bx70yR.cjs.map} +1 -1
  309. package/dist/{Spinner-D9-u_5zS.mjs → Spinner-BEPF42RW.mjs} +1 -1
  310. package/dist/{Spinner-D9-u_5zS.mjs.map → Spinner-BEPF42RW.mjs.map} +1 -1
  311. package/dist/{Stack-ckRN7LrP.mjs → Stack-Bl54WmhY.mjs} +1 -1
  312. package/dist/{Stack-ckRN7LrP.mjs.map → Stack-Bl54WmhY.mjs.map} +1 -1
  313. package/dist/{Stack-B5VYkPBe.d.cts → Stack-BzVkf3cz.d.cts} +1 -1
  314. package/dist/{Stack-Du7tLSPC.d.mts → Stack-CkV7k7TE.d.mts} +2 -2
  315. package/dist/{Stack-BF-9YjA1.cjs → Stack-UeifHn3c.cjs} +1 -1
  316. package/dist/{Stack-BF-9YjA1.cjs.map → Stack-UeifHn3c.cjs.map} +1 -1
  317. package/dist/Stack.d.cts +1 -1
  318. package/dist/Stack.d.mts +1 -1
  319. package/dist/StatusIndicator.d.cts +31 -3
  320. package/dist/StatusIndicator.d.mts +32 -4
  321. package/dist/{Sticker-XfyoDEod.d.mts → Sticker-Bs25ISz7.d.mts} +5 -5
  322. package/dist/{Sticker-D9HjFQ6e.d.cts → Sticker-CI-XxUmM.d.cts} +3 -3
  323. package/dist/{Sticker-D0jIU2Dt.cjs → Sticker-CIoseh9f.cjs} +3 -3
  324. package/dist/{Sticker-D0jIU2Dt.cjs.map → Sticker-CIoseh9f.cjs.map} +1 -1
  325. package/dist/{Sticker-B0TbkV4o.mjs → Sticker-DbqKLe33.mjs} +3 -3
  326. package/dist/{Sticker-B0TbkV4o.mjs.map → Sticker-DbqKLe33.mjs.map} +1 -1
  327. package/dist/Sticker.d.cts +1 -1
  328. package/dist/Sticker.d.mts +1 -1
  329. package/dist/StringValueControl.d.mts +39 -0
  330. package/dist/SwatchPicker.d.mts +1 -1
  331. package/dist/Tab.d.mts +2 -2
  332. package/dist/{TabBar-D8WCGYd5.cjs → TabBar-PFaDNRw0.cjs} +6 -4
  333. package/dist/TabBar-PFaDNRw0.cjs.map +1 -0
  334. package/dist/{TabBar-CAv10XAF.mjs → TabBar-zSA8kyE6.mjs} +6 -4
  335. package/dist/TabBar-zSA8kyE6.mjs.map +1 -0
  336. package/dist/TabBarIconButton.d.mts +1 -1
  337. package/dist/{Table-D4SMuVIR.d.cts → Table-BNScLj9g.d.mts} +1 -1
  338. package/dist/{Table-CGtyWI6V.mjs → Table-D8IcpACv.mjs} +6 -6
  339. package/dist/{Table-CGtyWI6V.mjs.map → Table-D8IcpACv.mjs.map} +1 -1
  340. package/dist/{Table-C8D4lpSa.d.mts → Table-DXqyNohc.d.cts} +1 -1
  341. package/dist/{Table-B3FJsvXP.cjs → Table-DxLvJYWK.cjs} +6 -6
  342. package/dist/{Table-B3FJsvXP.cjs.map → Table-DxLvJYWK.cjs.map} +1 -1
  343. package/dist/Table.d.cts +1 -1
  344. package/dist/Table.d.mts +1 -1
  345. package/dist/{TableBody-0cd50RuX.d.mts → TableBody-CrDNMyT8.d.mts} +1 -1
  346. package/dist/{TableBody-BLmn5h3y.d.cts → TableBody-CxwHmdNb.d.cts} +1 -1
  347. package/dist/TableBody.d.cts +1 -1
  348. package/dist/TableBody.d.mts +1 -1
  349. package/dist/{TableBox-D_B9atn2.cjs → TableBox-CiuXCXyv.cjs} +229 -61
  350. package/dist/TableBox-CiuXCXyv.cjs.map +1 -0
  351. package/dist/{TableBox-CPCWzwSl.mjs → TableBox-luasMC73.mjs} +230 -62
  352. package/dist/TableBox-luasMC73.mjs.map +1 -0
  353. package/dist/TableBox.d.cts +2 -2
  354. package/dist/TableBox.d.mts +2 -2
  355. package/dist/{TableBoxCell-CEvOcGYa.d.mts → TableBoxCell-By1xE6_Q.d.mts} +28 -11
  356. package/dist/{TableBoxCell-DJz423uN.d.cts → TableBoxCell-DIMenSwX.d.cts} +27 -10
  357. package/dist/TableBoxCell.d.cts +1 -1
  358. package/dist/TableBoxCell.d.mts +1 -1
  359. package/dist/TableBoxField.d.cts +20 -5
  360. package/dist/TableBoxField.d.mts +20 -6
  361. package/dist/{TableBoxRow-LyHvITwZ.d.mts → TableBoxRow-CsRPRPQ-.d.mts} +13 -4
  362. package/dist/{TableBoxRow-CZwVgei6.d.cts → TableBoxRow-RNQ6wJLh.d.cts} +12 -3
  363. package/dist/TableBoxRow.d.cts +1 -1
  364. package/dist/TableBoxRow.d.mts +1 -1
  365. package/dist/{TableBoxRowActions-VDAOxNDG.d.cts → TableBoxRowActions-CYpoPhYZ.d.cts} +2 -2
  366. package/dist/{TableBoxRowActions-C8SAxrYG.d.mts → TableBoxRowActions-DMYOI8Do.d.mts} +2 -2
  367. package/dist/TableBoxRowActions.d.cts +1 -1
  368. package/dist/TableBoxRowActions.d.mts +1 -1
  369. package/dist/TableBoxRowContext.d.mts +5 -3
  370. package/dist/TableCell.d.cts +1 -1
  371. package/dist/TableCell.d.mts +1 -1
  372. package/dist/{TableControls-B4gpAvl7.d.mts → TableControls-BehR7CKS.d.mts} +4 -4
  373. package/dist/TableControls-BtXK7Ils.cjs +3995 -0
  374. package/dist/TableControls-BtXK7Ils.cjs.map +1 -0
  375. package/dist/{TableControls-BG0OKwjj.d.cts → TableControls-CLNF0AJG.d.cts} +3 -3
  376. package/dist/TableControls-DHMs7o58.mjs +3859 -0
  377. package/dist/TableControls-DHMs7o58.mjs.map +1 -0
  378. package/dist/TableControls.d.cts +1 -1
  379. package/dist/TableControls.d.mts +1 -1
  380. package/dist/{TableControlsContext-NdzzGevw.d.mts → TableControlsContext-DAZx6Rrj.d.cts} +2 -2
  381. package/dist/{TableControlsContext-CanIAaLW.d.cts → TableControlsContext-D_SBFZN1.d.mts} +2 -2
  382. package/dist/TableControlsContext.d.cts +1 -1
  383. package/dist/TableControlsContext.d.mts +1 -1
  384. package/dist/{TableHead-CuHNOeCj.d.mts → TableHead-Ch4Ho3LW.d.cts} +1 -1
  385. package/dist/{TableHead-roexW17v.d.cts → TableHead-LxvG0e9k.d.mts} +1 -1
  386. package/dist/TableHead.d.cts +1 -1
  387. package/dist/TableHead.d.mts +1 -1
  388. package/dist/{TableHeaderCell-Cflho9R2.d.mts → TableHeaderCell-Br8ZE3Xe.d.mts} +1 -1
  389. package/dist/{TableHeaderCell-BTGuqVXy.d.cts → TableHeaderCell-Crsa2R2g.d.cts} +1 -1
  390. package/dist/TableHeaderCell.d.cts +1 -1
  391. package/dist/TableHeaderCell.d.mts +1 -1
  392. package/dist/{TableLayout-BvVsuUVb.d.cts → TableLayout-Ct0kepcA.d.cts} +1 -1
  393. package/dist/{TableLayout-D9BGrjRs.d.mts → TableLayout-nwy094C_.d.mts} +1 -1
  394. package/dist/TableLayout.d.cts +1 -1
  395. package/dist/TableLayout.d.mts +1 -1
  396. package/dist/{TableRow-CjQmDmfx.d.mts → TableRow-BvS4yjo6.d.mts} +2 -2
  397. package/dist/{TableRow-BfGJSGZH.d.cts → TableRow-DVTPqT4w.d.cts} +1 -1
  398. package/dist/TableRow.d.cts +1 -1
  399. package/dist/TableRow.d.mts +1 -1
  400. package/dist/TableTH.d.cts +1 -1
  401. package/dist/TableTH.d.mts +1 -1
  402. package/dist/{TableViewConfigurationDropdown-DMeFkVUa.d.mts → TableViewConfigurationDropdown-BYPh4dIP.d.mts} +2 -2
  403. package/dist/{TableViewConfigurationDropdown-BaQ1IsYM.d.cts → TableViewConfigurationDropdown-CaiOGyrU.d.cts} +2 -2
  404. package/dist/TableViewConfigurationDropdown.d.cts +1 -1
  405. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  406. package/dist/TechnicalSticker.d.mts +1 -1
  407. package/dist/{Text-CPd0r0w2.d.mts → Text-DNPbAuUG.d.mts} +3 -3
  408. package/dist/{Text-CzN0DOXV.cjs → Text-G9QmYf0P.cjs} +1 -1
  409. package/dist/{Text-CzN0DOXV.cjs.map → Text-G9QmYf0P.cjs.map} +1 -1
  410. package/dist/{Text-hEoPeOc9.mjs → Text-RcEfNFLx.mjs} +1 -1
  411. package/dist/{Text-hEoPeOc9.mjs.map → Text-RcEfNFLx.mjs.map} +1 -1
  412. package/dist/Text.d.mts +1 -1
  413. package/dist/{TextArea-Dl9_Zizx.d.cts → TextArea-B89wtTsF.d.mts} +2 -2
  414. package/dist/{TextArea-p3oek3Zq.cjs → TextArea-BNiipQDb.cjs} +3 -3
  415. package/dist/{TextArea-p3oek3Zq.cjs.map → TextArea-BNiipQDb.cjs.map} +1 -1
  416. package/dist/{TextArea-J1MD_8rK.d.mts → TextArea-CHW9FKM4.d.cts} +2 -2
  417. package/dist/{TextArea-CJJlw3rV.mjs → TextArea-NCLsW-03.mjs} +3 -3
  418. package/dist/{TextArea-CJJlw3rV.mjs.map → TextArea-NCLsW-03.mjs.map} +1 -1
  419. package/dist/TextArea.d.cts +1 -1
  420. package/dist/TextArea.d.mts +1 -1
  421. package/dist/{TextUnderlineTooltip-D8GFsk5C.d.mts → TextUnderlineTooltip-5-0D8s4z.d.mts} +3 -3
  422. package/dist/{TextUnderlineTooltip-BDMs4iXn.d.cts → TextUnderlineTooltip-DMEyOu8C.d.cts} +2 -2
  423. package/dist/TextUnderlineTooltip.d.cts +1 -1
  424. package/dist/TextUnderlineTooltip.d.mts +1 -1
  425. package/dist/Tile.d.cts +1 -1
  426. package/dist/Tile.d.mts +2 -2
  427. package/dist/Toast.d.cts +1 -1
  428. package/dist/Toast.d.mts +1 -1
  429. package/dist/{Toggle-DOo0cLmI.mjs → Toggle-Bie9zCem.mjs} +5 -5
  430. package/dist/{Toggle-DOo0cLmI.mjs.map → Toggle-Bie9zCem.mjs.map} +1 -1
  431. package/dist/{Toggle-7o-n5vF6.cjs → Toggle-Ce-rF8Xp.cjs} +5 -5
  432. package/dist/{Toggle-7o-n5vF6.cjs.map → Toggle-Ce-rF8Xp.cjs.map} +1 -1
  433. package/dist/{Toggle-CY67yh4T.d.mts → Toggle-DzYLgxGk.d.mts} +1 -1
  434. package/dist/{Toggle-Dw4hisXm.d.cts → Toggle-tbIebQWC.d.cts} +1 -1
  435. package/dist/Toggle.d.cts +1 -1
  436. package/dist/Toggle.d.mts +1 -1
  437. package/dist/{Tooltip-CE1oH6Iz.d.cts → Tooltip--eDrrk2r.d.cts} +2 -2
  438. package/dist/{Tooltip-CDvOu1UN.mjs → Tooltip-C6AR1xT-.mjs} +3 -3
  439. package/dist/{Tooltip-CDvOu1UN.mjs.map → Tooltip-C6AR1xT-.mjs.map} +1 -1
  440. package/dist/{Tooltip-DtWJO_kU.d.mts → Tooltip-CUC-JuRL.d.mts} +3 -3
  441. package/dist/{Tooltip-vylydKVv.cjs → Tooltip-olP3rdUO.cjs} +3 -3
  442. package/dist/{Tooltip-vylydKVv.cjs.map → Tooltip-olP3rdUO.cjs.map} +1 -1
  443. package/dist/Tooltip.d.cts +1 -1
  444. package/dist/Tooltip.d.mts +1 -1
  445. package/dist/{TruncatedText-BBoWmFii.d.mts → TruncatedText-BJnowVTx.d.mts} +1 -1
  446. package/dist/{TruncatedText-DMpR-yaJ.d.cts → TruncatedText-Dit2NJI6.d.cts} +1 -1
  447. package/dist/components/Attribute/index.cjs +6 -6
  448. package/dist/components/Attribute/index.mjs +7 -7
  449. package/dist/components/Attribute/index.mjs.map +1 -1
  450. package/dist/components/Badge/index.cjs +1 -1
  451. package/dist/components/Badge/index.mjs +1 -1
  452. package/dist/components/Banner/index.cjs +1 -1
  453. package/dist/components/Banner/index.mjs +1 -1
  454. package/dist/components/Breadcrumbs/index.cjs +7 -0
  455. package/dist/components/Breadcrumbs/index.d.cts +2 -0
  456. package/dist/components/Breadcrumbs/index.d.mts +2 -0
  457. package/dist/components/Breadcrumbs/index.mjs +2 -0
  458. package/dist/components/Button/index.cjs +1 -1
  459. package/dist/components/Button/index.d.mts +2 -2
  460. package/dist/components/Button/index.mjs +1 -1
  461. package/dist/components/ButtonGroup/index.cjs +3 -3
  462. package/dist/components/ButtonGroup/index.mjs +3 -3
  463. package/dist/components/Card/index.cjs +1 -1
  464. package/dist/components/Card/index.d.cts +2 -2
  465. package/dist/components/Card/index.d.mts +2 -2
  466. package/dist/components/Card/index.mjs +1 -1
  467. package/dist/components/CardV2/index.cjs +3 -432
  468. package/dist/components/CardV2/index.d.cts +1 -1
  469. package/dist/components/CardV2/index.d.mts +1 -1
  470. package/dist/components/CardV2/index.mjs +1 -427
  471. package/dist/components/Checkbox/index.cjs +1 -1
  472. package/dist/components/Checkbox/index.d.cts +1 -1
  473. package/dist/components/Checkbox/index.d.mts +1 -1
  474. package/dist/components/Checkbox/index.mjs +1 -1
  475. package/dist/components/Combobox/index.cjs +1 -1
  476. package/dist/components/Combobox/index.d.cts +2 -2
  477. package/dist/components/Combobox/index.d.mts +2 -2
  478. package/dist/components/Combobox/index.mjs +1 -1
  479. package/dist/components/ConfigFormGroup/index.cjs +2 -2
  480. package/dist/components/ConfigFormGroup/index.mjs +2 -2
  481. package/dist/components/DataTable/TableControls/index.cjs +15 -1
  482. package/dist/components/DataTable/TableControls/index.d.cts +16 -6
  483. package/dist/components/DataTable/TableControls/index.d.mts +16 -6
  484. package/dist/components/DataTable/TableControls/index.mjs +2 -2
  485. package/dist/components/DataTable/index.cjs +15 -16
  486. package/dist/components/DataTable/index.cjs.map +1 -1
  487. package/dist/components/DataTable/index.mjs +25 -26
  488. package/dist/components/DataTable/index.mjs.map +1 -1
  489. package/dist/components/DataTable/types.d.cts +2 -2
  490. package/dist/components/DataTable/types.d.mts +2 -2
  491. package/dist/components/DatePicker/index.cjs +6 -898
  492. package/dist/components/DatePicker/index.mjs +1 -890
  493. package/dist/components/DropdownButton/index.cjs +1 -1
  494. package/dist/components/DropdownButton/index.mjs +1 -1
  495. package/dist/components/DropdownMenu/index.cjs +1 -1
  496. package/dist/components/DropdownMenu/index.d.cts +1 -1
  497. package/dist/components/DropdownMenu/index.d.mts +1 -1
  498. package/dist/components/DropdownMenu/index.mjs +1 -1
  499. package/dist/components/FormControl/index.cjs +2 -2
  500. package/dist/components/FormControl/index.d.cts +2 -2
  501. package/dist/components/FormControl/index.d.mts +2 -2
  502. package/dist/components/FormControl/index.mjs +2 -2
  503. package/dist/components/FormField/index.cjs +15 -468
  504. package/dist/components/FormField/index.d.cts +3 -3
  505. package/dist/components/FormField/index.d.mts +3 -3
  506. package/dist/components/FormField/index.mjs +1 -452
  507. package/dist/components/HoverCopyableField/index.cjs +1 -1
  508. package/dist/components/HoverCopyableField/index.mjs +1 -1
  509. package/dist/components/ImageTile/index.cjs +8 -8
  510. package/dist/components/ImageTile/index.mjs +8 -8
  511. package/dist/components/Input/index.cjs +1 -1
  512. package/dist/components/Input/index.d.cts +1 -1
  513. package/dist/components/Input/index.d.mts +1 -1
  514. package/dist/components/Input/index.mjs +1 -1
  515. package/dist/components/Link/index.cjs +1 -1
  516. package/dist/components/Link/index.mjs +1 -1
  517. package/dist/components/ListBox/index.cjs +1 -1
  518. package/dist/components/ListBox/index.d.cts +4 -2
  519. package/dist/components/ListBox/index.d.mts +4 -2
  520. package/dist/components/ListBox/index.mjs +1 -1
  521. package/dist/components/LoadingShimmer/index.cjs +1 -1
  522. package/dist/components/LoadingShimmer/index.mjs +1 -1
  523. package/dist/components/MaskedInput/index.cjs +2 -2
  524. package/dist/components/MaskedInput/index.mjs +2 -2
  525. package/dist/components/Menu/index.cjs +1 -1
  526. package/dist/components/Menu/index.d.cts +1 -1
  527. package/dist/components/Menu/index.d.mts +1 -1
  528. package/dist/components/Menu/index.mjs +1 -1
  529. package/dist/components/Modal/index.cjs +13 -9
  530. package/dist/components/Modal/index.cjs.map +1 -1
  531. package/dist/components/Modal/index.d.cts +2 -2
  532. package/dist/components/Modal/index.d.mts +2 -2
  533. package/dist/components/Modal/index.mjs +13 -9
  534. package/dist/components/Modal/index.mjs.map +1 -1
  535. package/dist/components/PageHeader/index.cjs +3 -67
  536. package/dist/components/PageHeader/index.mjs +1 -63
  537. package/dist/components/Pagination/index.cjs +1 -1
  538. package/dist/components/Pagination/index.d.cts +3 -3
  539. package/dist/components/Pagination/index.d.mts +3 -3
  540. package/dist/components/Pagination/index.mjs +1 -1
  541. package/dist/components/Pii/index.cjs +1 -1
  542. package/dist/components/Pii/index.mjs +1 -1
  543. package/dist/components/Popover/index.cjs +1 -1
  544. package/dist/components/Popover/index.mjs +1 -1
  545. package/dist/components/ProgressBar/index.cjs +1 -1
  546. package/dist/components/ProgressBar/index.mjs +1 -1
  547. package/dist/components/Radio/index.cjs +1 -1
  548. package/dist/components/Radio/index.mjs +1 -1
  549. package/dist/components/RadioGroup/index.cjs +1 -1
  550. package/dist/components/RadioGroup/index.d.cts +1 -1
  551. package/dist/components/RadioGroup/index.d.mts +1 -1
  552. package/dist/components/RadioGroup/index.mjs +1 -1
  553. package/dist/components/SegmentedControl/index.cjs +1 -1
  554. package/dist/components/SegmentedControl/index.d.cts +1 -1
  555. package/dist/components/SegmentedControl/index.d.mts +1 -1
  556. package/dist/components/SegmentedControl/index.mjs +1 -1
  557. package/dist/components/Select/index.cjs +1 -1
  558. package/dist/components/Select/index.d.cts +1 -1
  559. package/dist/components/Select/index.d.mts +1 -1
  560. package/dist/components/Select/index.mjs +1 -1
  561. package/dist/components/Slider/index.cjs +2 -2
  562. package/dist/components/Slider/index.mjs +2 -2
  563. package/dist/components/Spacer/index.cjs +1 -1
  564. package/dist/components/Spacer/index.mjs +1 -1
  565. package/dist/components/Spinner/index.cjs +1 -1
  566. package/dist/components/Spinner/index.mjs +1 -1
  567. package/dist/components/Stack/index.cjs +1 -1
  568. package/dist/components/Stack/index.d.cts +1 -1
  569. package/dist/components/Stack/index.d.mts +1 -1
  570. package/dist/components/Stack/index.mjs +1 -1
  571. package/dist/components/StatusIndicator/index.cjs +60 -10
  572. package/dist/components/StatusIndicator/index.cjs.map +1 -1
  573. package/dist/components/StatusIndicator/index.d.cts +2 -2
  574. package/dist/components/StatusIndicator/index.d.mts +2 -2
  575. package/dist/components/StatusIndicator/index.mjs +61 -12
  576. package/dist/components/StatusIndicator/index.mjs.map +1 -1
  577. package/dist/components/Sticker/index.cjs +1 -1
  578. package/dist/components/Sticker/index.d.cts +1 -1
  579. package/dist/components/Sticker/index.d.mts +1 -1
  580. package/dist/components/Sticker/index.mjs +1 -1
  581. package/dist/components/TabBar/index.cjs +1 -1
  582. package/dist/components/TabBar/index.mjs +1 -1
  583. package/dist/components/Table/index.cjs +1 -1
  584. package/dist/components/Table/index.d.cts +7 -7
  585. package/dist/components/Table/index.d.mts +7 -7
  586. package/dist/components/Table/index.mjs +1 -1
  587. package/dist/components/TableBox/index.cjs +1 -1
  588. package/dist/components/TableBox/index.d.cts +2 -2
  589. package/dist/components/TableBox/index.d.mts +2 -2
  590. package/dist/components/TableBox/index.mjs +1 -1
  591. package/dist/components/TechnicalSticker/index.cjs +4 -4
  592. package/dist/components/TechnicalSticker/index.mjs +4 -4
  593. package/dist/components/Text/index.cjs +1 -1
  594. package/dist/components/Text/index.d.mts +1 -1
  595. package/dist/components/Text/index.mjs +1 -1
  596. package/dist/components/TextArea/index.cjs +1 -1
  597. package/dist/components/TextArea/index.d.cts +1 -1
  598. package/dist/components/TextArea/index.d.mts +1 -1
  599. package/dist/components/TextArea/index.mjs +1 -1
  600. package/dist/components/Tile/index.cjs +4 -4
  601. package/dist/components/Tile/index.mjs +4 -4
  602. package/dist/components/Toast/index.cjs +1 -1
  603. package/dist/components/Toast/index.mjs +1 -1
  604. package/dist/components/Toggle/index.cjs +1 -1
  605. package/dist/components/Toggle/index.d.cts +1 -1
  606. package/dist/components/Toggle/index.d.mts +1 -1
  607. package/dist/components/Toggle/index.mjs +1 -1
  608. package/dist/components/Tooltip/index.cjs +1 -1
  609. package/dist/components/Tooltip/index.d.cts +3 -3
  610. package/dist/components/Tooltip/index.d.mts +3 -3
  611. package/dist/components/Tooltip/index.mjs +1 -1
  612. package/dist/compound-expression.d.mts +9 -0
  613. package/dist/{constants-D5CkrHza.d.cts → constants-B6c8S033.d.cts} +1 -1
  614. package/dist/{constants-CnkpDWTv.d.mts → constants-BASogfT_.d.mts} +1 -1
  615. package/dist/constants.d.cts +1 -1
  616. package/dist/constants.d.mts +1 -1
  617. package/dist/containers.d.mts +8 -0
  618. package/dist/display.d.mts +8 -0
  619. package/dist/fieldPickerOptions.d.mts +29 -0
  620. package/dist/filter-size-context-Blw6Sd69.d.mts +52 -0
  621. package/dist/filter-size-context-CIw0Zi6r.d.cts +52 -0
  622. package/dist/filter-size-context.d.cts +2 -0
  623. package/dist/filter-size-context.d.mts +2 -0
  624. package/dist/helpers.d.cts +1 -1
  625. package/dist/helpers.d.mts +1 -1
  626. package/dist/index-4_B2yRzD.d.mts +7 -0
  627. package/dist/{index-Bp3vEph6.d.cts → index-Bw8QVu_o.d.cts} +3 -3
  628. package/dist/index-C9EIpBh8.d.cts +7 -0
  629. package/dist/index-D34XP8vp.d.cts +54 -0
  630. package/dist/{index-BwWgmaXZ.d.mts → index-DDbjWdk0.d.mts} +4 -4
  631. package/dist/index-IlwGkCAe2.d.mts +54 -0
  632. package/dist/index-sQecLSpR.d.cts +1 -0
  633. package/dist/index-sViox9YW.d.mts +1 -0
  634. package/dist/index.d.cts +1 -1
  635. package/dist/index.d.mts +1 -1
  636. package/dist/index2.d.cts +1 -1
  637. package/dist/index2.d.mts +1 -1
  638. package/dist/index3.d.cts +4 -1
  639. package/dist/index3.d.mts +4 -1
  640. package/dist/index4.d.cts +11 -0
  641. package/dist/index4.d.mts +11 -0
  642. package/dist/index5.d.cts +1 -0
  643. package/dist/index5.d.mts +2 -0
  644. package/dist/index6.d.mts +1 -0
  645. package/dist/{input-FEaQ66an.d.mts → input-Bv5fKt5J.d.mts} +3 -3
  646. package/dist/{input-Bm_anD8X.d.cts → input-DPB0cX2m.d.cts} +2 -2
  647. package/dist/inputFields.d.cts +10 -10
  648. package/dist/inputFields.d.mts +11 -11
  649. package/dist/intersperse-_0nQM5Rb.cjs +26 -0
  650. package/dist/intersperse-_0nQM5Rb.cjs.map +1 -0
  651. package/dist/intersperse-vOYvFOfF.mjs +21 -0
  652. package/dist/intersperse-vOYvFOfF.mjs.map +1 -0
  653. package/dist/layouts/LayoutLoadingShimmer/index.cjs +139 -0
  654. package/dist/layouts/LayoutLoadingShimmer/index.cjs.map +1 -0
  655. package/dist/layouts/LayoutLoadingShimmer/index.d.cts +2 -0
  656. package/dist/layouts/LayoutLoadingShimmer/index.d.mts +2 -0
  657. package/dist/layouts/LayoutLoadingShimmer/index.mjs +133 -0
  658. package/dist/layouts/LayoutLoadingShimmer/index.mjs.map +1 -0
  659. package/dist/lib/MiddleTruncatedText.cjs +1 -1
  660. package/dist/lib/MiddleTruncatedText.mjs +1 -1
  661. package/dist/lib/PDSProvider.d.mts +1 -1
  662. package/dist/lib/TruncatedText.cjs +1 -1
  663. package/dist/lib/TruncatedText.d.cts +1 -1
  664. package/dist/lib/TruncatedText.d.mts +1 -1
  665. package/dist/lib/TruncatedText.mjs +1 -1
  666. package/dist/lib/TruncatedTextWithTooltip.cjs +2 -2
  667. package/dist/lib/TruncatedTextWithTooltip.d.cts +1 -1
  668. package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
  669. package/dist/lib/TruncatedTextWithTooltip.mjs +2 -2
  670. package/dist/lib/message.d.cts +1 -1
  671. package/dist/lib/message.d.mts +1 -1
  672. package/dist/lib/pseudoClass.d.mts +1 -1
  673. package/dist/{message-SITKO6JZ.d.mts → message-BEgtEjQC.d.cts} +1 -1
  674. package/dist/{message-CWEGi3Xg.d.cts → message-CMHvlPGn.d.mts} +1 -1
  675. package/dist/mixins/focus.d.mts +1 -1
  676. package/dist/mixins/hoverable.d.mts +2 -2
  677. package/dist/mixins/input.d.cts +1 -1
  678. package/dist/mixins/input.d.mts +1 -1
  679. package/dist/mixins/menuItem.d.mts +2 -2
  680. package/dist/mixins/text.d.mts +1 -1
  681. package/dist/operators-1qE2GpC7.d.cts +43 -0
  682. package/dist/operators-Bo31xlc2.d.mts +43 -0
  683. package/dist/operators.d.cts +2 -0
  684. package/dist/operators.d.mts +2 -0
  685. package/dist/{text-BEKhEWTa.d.mts → text-B21s9mRZ.d.mts} +1 -1
  686. package/dist/{theme-q9fNLtcA.d.mts → theme-BzBpJXhO.d.mts} +1 -1
  687. package/dist/theme.d.mts +1 -1
  688. package/dist/types-B_HHNlia.d.cts +158 -0
  689. package/dist/types-CCvc590y.d.cts +45 -0
  690. package/dist/{types-CmnKGG5I.d.cts → types-CkiXVJeR.d.cts} +1 -1
  691. package/dist/types-D58IoRx6.d.mts +158 -0
  692. package/dist/types-D7ppqnNj.d.mts +45 -0
  693. package/dist/{types-BG21GgBe.d.cts → types-DEh_pXgS.d.mts} +1 -1
  694. package/dist/{types-ChCqSD9N.d.mts → types-SYSKcZKW.d.cts} +1 -1
  695. package/dist/{types-DMjr-u_o.d.mts → types-TV9nVfSe.d.mts} +1 -1
  696. package/dist/types.d.cts +1 -1
  697. package/dist/types.d.mts +1 -1
  698. package/dist/types2.d.cts +2 -2
  699. package/dist/types2.d.mts +2 -2
  700. package/dist/types3.d.cts +2 -0
  701. package/dist/types3.d.mts +2 -0
  702. package/dist/types4.d.cts +2 -0
  703. package/dist/types4.d.mts +2 -0
  704. package/dist/use-rules-popover-selection.d.mts +19 -0
  705. package/dist/useColumnWidthLock.d.mts +2 -2
  706. package/dist/useComboboxFooterAction.d.mts +47 -0
  707. package/dist/useDelayedInlineEditError.d.mts +12 -0
  708. package/dist/useFilterStateV2-DCQghouq.d.mts +93 -0
  709. package/dist/useFilterStateV2-DbPwX5N1.d.cts +93 -0
  710. package/dist/useFilterStateV2.d.cts +2 -0
  711. package/dist/useFilterStateV2.d.mts +2 -0
  712. package/dist/{useFormField-DLGEZ1kD.d.cts → useFormField--Q8ZdpW5.d.cts} +2 -2
  713. package/dist/{useFormField-BpYf3CAW.cjs → useFormField-BZlArnsI.cjs} +2 -2
  714. package/dist/{useFormField-BpYf3CAW.cjs.map → useFormField-BZlArnsI.cjs.map} +1 -1
  715. package/dist/{useFormField-CVmt-ti2.d.mts → useFormField-D8mLsiQc.d.mts} +2 -2
  716. package/dist/{useFormField-D0RTrPld.mjs → useFormField-DhYd6bNn.mjs} +2 -2
  717. package/dist/{useFormField-D0RTrPld.mjs.map → useFormField-DhYd6bNn.mjs.map} +1 -1
  718. package/dist/useFormField.d.cts +1 -1
  719. package/dist/useFormField.d.mts +1 -1
  720. package/dist/{useFormGroup-DQJdKaL9.cjs → useFormGroup-Bmnzgq0S.cjs} +1 -1
  721. package/dist/{useFormGroup-DQJdKaL9.cjs.map → useFormGroup-Bmnzgq0S.cjs.map} +1 -1
  722. package/dist/{useFormGroup-z0epBxXn.mjs → useFormGroup-DWVW7A9f.mjs} +1 -1
  723. package/dist/{useFormGroup-z0epBxXn.mjs.map → useFormGroup-DWVW7A9f.mjs.map} +1 -1
  724. package/dist/{useTableBoxDragAndDrop-DXqy_AMP.d.mts → useTableBoxDragAndDrop-BMo-iaUF.d.mts} +1 -1
  725. package/dist/{useTableBoxDragAndDrop-hrESBhKb.d.cts → useTableBoxDragAndDrop-DnbUToce.d.cts} +1 -1
  726. package/dist/useTableBoxDragAndDrop.d.cts +1 -1
  727. package/dist/useTableBoxDragAndDrop.d.mts +1 -1
  728. package/dist/{useToggle-3k3EkV8V.mjs → useToggle-Bo3yd14Y.mjs} +1 -1
  729. package/dist/{useToggle-3k3EkV8V.mjs.map → useToggle-Bo3yd14Y.mjs.map} +1 -1
  730. package/dist/{useToggle-CSkZWXtQ.cjs → useToggle-DARO917w.cjs} +1 -1
  731. package/dist/{useToggle-CSkZWXtQ.cjs.map → useToggle-DARO917w.cjs.map} +1 -1
  732. package/dist/useTruncation.d.mts +1 -1
  733. package/dist/{utilities-C8Jf-xpi.d.cts → utilities-BO_95qFA.d.mts} +1 -1
  734. package/dist/{utilities-DT-Hh45R.d.mts → utilities-mSlaTrjB.d.cts} +1 -1
  735. package/dist/utilities.d.cts +1 -1
  736. package/dist/utilities.d.mts +1 -1
  737. package/dist/utils/storybook.cjs +1 -1
  738. package/dist/utils/storybook.mjs +1 -1
  739. package/dist/utils/testing.cjs +1 -1
  740. package/dist/utils/testing.d.mts +1 -1
  741. package/dist/utils/testing.mjs +1 -1
  742. package/dist/utils.d.mts +22 -5
  743. package/dist/utils2.d.mts +9 -0
  744. package/dist/validation-CJymv6JE.d.cts +51 -0
  745. package/dist/validation-vLh3t2dk.d.mts +51 -0
  746. package/dist/validation.d.cts +2 -0
  747. package/dist/validation.d.mts +2 -0
  748. package/dist/value-control-resolver-B9p25q3G.d.cts +46 -0
  749. package/dist/value-control-resolver-CE-bqdAl.d.mts +46 -0
  750. package/dist/value-control-resolver.d.cts +2 -0
  751. package/dist/value-control-resolver.d.mts +2 -0
  752. package/dist/variables/spacing.cjs +1 -1
  753. package/dist/variables/spacing.cjs.map +1 -1
  754. package/dist/variables/spacing.d.cts +1 -1
  755. package/dist/variables/spacing.d.mts +1 -1
  756. package/dist/variables/spacing.mjs +1 -1
  757. package/dist/variables/spacing.mjs.map +1 -1
  758. package/package.json +22 -4
  759. package/dist/Combobox-I44W5oX0.mjs.map +0 -1
  760. package/dist/Combobox-R3_NDBi3.cjs.map +0 -1
  761. package/dist/HoverCopyableField-DBkYvwii.mjs.map +0 -1
  762. package/dist/HoverCopyableField-DyW2iZuo.cjs.map +0 -1
  763. package/dist/ListBox-B4uoo_PT.cjs.map +0 -1
  764. package/dist/ListBox-B7sbubm5.mjs.map +0 -1
  765. package/dist/Pagination-DEZFb552.cjs.map +0 -1
  766. package/dist/Pagination-F8ofIWnG.mjs.map +0 -1
  767. package/dist/SegmentedControl-DTkFgjac.cjs.map +0 -1
  768. package/dist/SegmentedControl-pRkMcMXe.mjs.map +0 -1
  769. package/dist/Select-CowngLd7.cjs.map +0 -1
  770. package/dist/Select-Fg2z5J-p.mjs.map +0 -1
  771. package/dist/TabBar-CAv10XAF.mjs.map +0 -1
  772. package/dist/TabBar-D8WCGYd5.cjs.map +0 -1
  773. package/dist/TableBox-CPCWzwSl.mjs.map +0 -1
  774. package/dist/TableBox-D_B9atn2.cjs.map +0 -1
  775. package/dist/TableControls-B2ZsNlr6.mjs +0 -1029
  776. package/dist/TableControls-B2ZsNlr6.mjs.map +0 -1
  777. package/dist/TableControls-B7QEAzru.cjs +0 -1080
  778. package/dist/TableControls-B7QEAzru.cjs.map +0 -1
  779. package/dist/components/CardV2/index.cjs.map +0 -1
  780. package/dist/components/CardV2/index.mjs.map +0 -1
  781. package/dist/components/DatePicker/index.cjs.map +0 -1
  782. package/dist/components/DatePicker/index.mjs.map +0 -1
  783. package/dist/components/FormField/index.cjs.map +0 -1
  784. package/dist/components/FormField/index.mjs.map +0 -1
  785. package/dist/components/PageHeader/index.cjs.map +0 -1
  786. package/dist/components/PageHeader/index.mjs.map +0 -1
  787. /package/dist/{index-1-AkepUA.d.mts → index--p6oQT9I.d.mts} +0 -0
  788. /package/dist/{index-8SLBz2NH.d.mts → index-BL32-cvv.d.cts} +0 -0
  789. /package/dist/{index-BSVhZrWN.d.mts → index-BR1oNnaF.d.cts} +0 -0
  790. /package/dist/{index-C4zERU4O.d.cts → index-BXpMZvwA.d.cts} +0 -0
  791. /package/dist/{index-C6yvNuzO.d.cts → index-BYd3Btr1.d.mts} +0 -0
  792. /package/dist/{index-CIABef8t.d.mts → index-BhY1qu3m.d.cts} +0 -0
  793. /package/dist/{index-CP2eJYlK.d.mts → index-C0NRIDsj2.d.cts} +0 -0
  794. /package/dist/{index-CTBW75wG2.d.cts → index-C1ihAKnV.d.cts} +0 -0
  795. /package/dist/{index-CiBIKhMu.d.cts → index-CDGG7lCB.d.mts} +0 -0
  796. /package/dist/{index-Cii4Qb1X.d.mts → index-CFG0_wK4.d.cts} +0 -0
  797. /package/dist/{index-CspKFJM1.d.cts → index-CKKoxA9V.d.mts} +0 -0
  798. /package/dist/{index-CswGToRr2.d.mts → index-CNxS4Tlu.d.mts} +0 -0
  799. /package/dist/{index-D4ELpJXS.d.cts → index-CQ25UCod.d.cts} +0 -0
  800. /package/dist/{index-D8dPsry7.d.mts → index-CWB6exYm.d.mts} +0 -0
  801. /package/dist/{index-D9XihFV1.d.mts → index-Cv0jeUQf2.d.cts} +0 -0
  802. /package/dist/{index-DBQaKYAL2.d.cts → index-CwSIy_W-.d.cts} +0 -0
  803. /package/dist/{index-DLoAMD9J.d.cts → index-CzItj62a.d.mts} +0 -0
  804. /package/dist/{index-DZlqSwCF.d.mts → index-D-BciAtf.d.cts} +0 -0
  805. /package/dist/{index-Dflz2i1X.d.mts → index-D4DUvwPf.d.mts} +0 -0
  806. /package/dist/{index-Dpmi5zcN.d.cts → index-D5tSVhTd.d.mts} +0 -0
  807. /package/dist/{index-DwBYcw1r.d.cts → index-D9IqtUDs.d.cts} +0 -0
  808. /package/dist/{index-LhFpnU-f.d.mts → index-DGsJdI5l.d.mts} +0 -0
  809. /package/dist/{index-N-OgGgfF.d.mts → index-DM6vVDZD.d.mts} +0 -0
  810. /package/dist/{index-VmEFGBxN.d.cts → index-DXJd7-2Z.d.mts} +0 -0
  811. /package/dist/{index-_1bfRgi2.d.cts → index-DkrC-i1D.d.mts} +0 -0
  812. /package/dist/{index-c55Utzva.d.mts → index-DpEKQcoR.d.cts} +0 -0
  813. /package/dist/{index-gpCH5158.d.mts → index-DvuJXuAN.d.mts} +0 -0
  814. /package/dist/{index-kDNN3kX_2.d.mts → index-Iujpc9_6.d.mts} +0 -0
  815. /package/dist/{index-luywJTzJ.d.mts → index-Oio5ygqN.d.mts} +0 -0
  816. /package/dist/{index-qCd8f7Um.d.cts → index-_wQ5ClJU.d.cts} +0 -0
  817. /package/dist/{index-uTS5iDq_.d.cts → index-lIMqGGJz.d.mts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"MiddleTruncatedText-BIzKECv9.cjs","names":["Typography"],"sources":["../lib/middleTruncateText.ts","../lib/MiddleTruncatedText.tsx"],"sourcesContent":["import { Typography } from '@persona/design-tokens';\n\nconst ELLIPSIS = '…';\nconst DEFAULT_FONT = `${Typography.TextMono.fontWeight} ${Typography.TextExtraSmall.fontSize} ${Typography.TextMono.fontFamily}`;\nconst MEASUREMENT_TOLERANCE_PX = 1;\n\nfunction createMeasurementCanvas(): [HTMLCanvasElement, () => void] {\n // oxlint-disable-next-line persona-web/document-create-element-canvas\n const canvas = document.createElement('canvas');\n const cleanup = () => {\n canvas.width = 0;\n canvas.height = 0;\n canvas.remove();\n };\n\n return [canvas, cleanup];\n}\n\nexport function buildMiddleTruncatedText(text: string, charsToShow: number): string {\n if (charsToShow >= text.length) {\n return text;\n }\n\n if (charsToShow <= ELLIPSIS.length) {\n return ELLIPSIS.slice(0, Math.max(charsToShow, 0));\n }\n\n const contentChars = charsToShow - ELLIPSIS.length;\n const front = Math.ceil(contentChars / 2);\n const back = Math.floor(contentChars / 2);\n\n return text.slice(0, front) + ELLIPSIS + text.slice(text.length - back);\n}\n\nexport function isMiddleTruncated(displayText: string, fullText: string): boolean {\n return displayText !== fullText;\n}\n\nexport function parseMaxWidthPx(maxWidth: number | string): number | null {\n if (typeof maxWidth === 'number') {\n return maxWidth;\n }\n\n if (maxWidth.endsWith('px')) {\n const parsed = Number.parseFloat(maxWidth);\n return Number.isNaN(parsed) ? null : parsed;\n }\n\n return null;\n}\n\nexport function measureTextWidth(text: string, font = DEFAULT_FONT): number {\n const [canvas, cleanupCanvas] = createMeasurementCanvas();\n\n try {\n const context = canvas.getContext('2d');\n\n if (!context) {\n return text.length * 6;\n }\n\n context.font = font;\n const measuredWidth = context.measureText(text).width;\n const minimumReasonableWidth = text.length * 4;\n\n if (measuredWidth === 0 || measuredWidth < minimumReasonableWidth) {\n return text.length * 6;\n }\n\n return measuredWidth;\n } finally {\n cleanupCanvas();\n }\n}\n\nexport function findMiddleTruncatedTextForWidth(\n text: string,\n maxWidthPx: number,\n font = DEFAULT_FONT,\n): string {\n const fitBudget = maxWidthPx + MEASUREMENT_TOLERANCE_PX;\n\n if (measureTextWidth(text, font) <= fitBudget) {\n return text;\n }\n\n let low = ELLIPSIS.length;\n let high = text.length;\n let bestDisplay = buildMiddleTruncatedText(text, ELLIPSIS.length);\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = buildMiddleTruncatedText(text, mid);\n\n if (measureTextWidth(candidate, font) <= fitBudget) {\n bestDisplay = candidate;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return bestDisplay;\n}\n\nexport function findMaxMiddleTruncatedCharsThatFit(\n element: HTMLElement,\n text: string,\n maxWidthPx?: number | null,\n font?: string,\n): { displayText: string; charsToShow: number } {\n const measuredWidth = element.clientWidth > 0 ? element.clientWidth : null;\n const parsedMaxWidth = maxWidthPx ?? parseMaxWidthPx(element.style.maxWidth);\n const widthBudget =\n measuredWidth != null && parsedMaxWidth != null\n ? Math.min(measuredWidth, parsedMaxWidth)\n : (measuredWidth ?? parsedMaxWidth);\n\n if (widthBudget != null && widthBudget > 0) {\n const displayText = findMiddleTruncatedTextForWidth(text, widthBudget, font);\n return { displayText, charsToShow: displayText.length };\n }\n\n element.textContent = text;\n if (element.scrollWidth <= element.clientWidth) {\n return { displayText: text, charsToShow: text.length };\n }\n\n let low = ELLIPSIS.length;\n let high = text.length;\n let bestCharsToShow = ELLIPSIS.length;\n let bestDisplay = buildMiddleTruncatedText(text, ELLIPSIS.length);\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = buildMiddleTruncatedText(text, mid);\n element.textContent = candidate;\n\n if (element.scrollWidth <= element.clientWidth) {\n bestCharsToShow = mid;\n bestDisplay = candidate;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return { displayText: bestDisplay, charsToShow: bestCharsToShow };\n}\n","import {\n type ComponentPropsWithoutRef,\n type FC,\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport styled from 'styled-components';\n\nimport {\n findMaxMiddleTruncatedCharsThatFit,\n isMiddleTruncated,\n parseMaxWidthPx,\n} from './middleTruncateText';\n\nconst TruncationSpan = styled.span`\n display: block;\n overflow: hidden;\n white-space: nowrap;\n min-width: 0;\n position: relative;\n`;\n\nconst AccessibleText = styled.span`\n opacity: 0;\n user-select: text;\n`;\n\nconst VisualTruncatedText = styled.span`\n position: absolute;\n inset: 0;\n overflow: hidden;\n white-space: nowrap;\n color: inherit;\n pointer-events: none;\n`;\n\nexport interface MiddleTruncatedTextProps extends ComponentPropsWithoutRef<'span'> {\n value: string;\n maxWidth?: number | string;\n font?: string;\n titleBehavior?: 'always' | 'conditional' | 'never';\n onTruncatedChange?: (isTruncated: boolean) => void;\n}\n\nexport const MiddleTruncatedText: FC<MiddleTruncatedTextProps> = ({\n value,\n maxWidth = '96px',\n font,\n titleBehavior = 'conditional',\n onTruncatedChange,\n 'aria-label': ariaLabel,\n style,\n ...props\n}) => {\n const ref = useRef<HTMLSpanElement>(null);\n const [displayText, setDisplayText] = useState(value);\n const maxWidthPx = parseMaxWidthPx(maxWidth);\n\n const updateTruncation = useCallback(\n (element: HTMLElement) => {\n const { displayText: nextDisplayText } = findMaxMiddleTruncatedCharsThatFit(\n element,\n value,\n maxWidthPx,\n font,\n );\n setDisplayText((current) => (current === nextDisplayText ? current : nextDisplayText));\n onTruncatedChange?.(isMiddleTruncated(nextDisplayText, value));\n },\n [value, maxWidthPx, font, onTruncatedChange],\n );\n\n useLayoutEffect(() => {\n const element = ref.current;\n if (!element) {\n return;\n }\n\n updateTruncation(element);\n\n let cancelled = false;\n void document.fonts?.ready.then(() => {\n if (!cancelled) {\n updateTruncation(element);\n }\n });\n\n const resizeObserver =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => updateTruncation(element));\n resizeObserver?.observe(element);\n\n return () => {\n cancelled = true;\n resizeObserver?.disconnect();\n };\n }, [maxWidth, updateTruncation]);\n\n const isTruncated = isMiddleTruncated(displayText, value);\n\n return (\n <TruncationSpan\n ref={ref}\n style={{ ...style, maxWidth }}\n aria-label={ariaLabel ?? (isTruncated ? value : undefined)}\n title={\n titleBehavior !== 'never' && (titleBehavior === 'always' || isTruncated) ? value : undefined\n }\n {...props}\n >\n {isTruncated ? (\n <>\n <AccessibleText>{value}</AccessibleText>\n <VisualTruncatedText aria-hidden='true'>{displayText}</VisualTruncatedText>\n </>\n ) : (\n displayText\n )}\n </TruncationSpan>\n );\n};\n\nexport default MiddleTruncatedText;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MiddleTruncatedText-CO76xIqP.cjs","names":["Typography"],"sources":["../lib/middleTruncateText.ts","../lib/MiddleTruncatedText.tsx"],"sourcesContent":["import { Typography } from '@persona/design-tokens';\n\nconst ELLIPSIS = '…';\nconst DEFAULT_FONT = `${Typography.TextMono.fontWeight} ${Typography.TextExtraSmall.fontSize} ${Typography.TextMono.fontFamily}`;\nconst MEASUREMENT_TOLERANCE_PX = 1;\n\nfunction createMeasurementCanvas(): [HTMLCanvasElement, () => void] {\n // oxlint-disable-next-line persona-web/document-create-element-canvas\n const canvas = document.createElement('canvas');\n const cleanup = () => {\n canvas.width = 0;\n canvas.height = 0;\n canvas.remove();\n };\n\n return [canvas, cleanup];\n}\n\nexport function buildMiddleTruncatedText(text: string, charsToShow: number): string {\n if (charsToShow >= text.length) {\n return text;\n }\n\n if (charsToShow <= ELLIPSIS.length) {\n return ELLIPSIS.slice(0, Math.max(charsToShow, 0));\n }\n\n const contentChars = charsToShow - ELLIPSIS.length;\n const front = Math.ceil(contentChars / 2);\n const back = Math.floor(contentChars / 2);\n\n return text.slice(0, front) + ELLIPSIS + text.slice(text.length - back);\n}\n\nexport function isMiddleTruncated(displayText: string, fullText: string): boolean {\n return displayText !== fullText;\n}\n\nexport function parseMaxWidthPx(maxWidth: number | string): number | null {\n if (typeof maxWidth === 'number') {\n return maxWidth;\n }\n\n if (maxWidth.endsWith('px')) {\n const parsed = Number.parseFloat(maxWidth);\n return Number.isNaN(parsed) ? null : parsed;\n }\n\n return null;\n}\n\nexport function measureTextWidth(text: string, font = DEFAULT_FONT): number {\n const [canvas, cleanupCanvas] = createMeasurementCanvas();\n\n try {\n const context = canvas.getContext('2d');\n\n if (!context) {\n return text.length * 6;\n }\n\n context.font = font;\n const measuredWidth = context.measureText(text).width;\n const minimumReasonableWidth = text.length * 4;\n\n if (measuredWidth === 0 || measuredWidth < minimumReasonableWidth) {\n return text.length * 6;\n }\n\n return measuredWidth;\n } finally {\n cleanupCanvas();\n }\n}\n\nexport function findMiddleTruncatedTextForWidth(\n text: string,\n maxWidthPx: number,\n font = DEFAULT_FONT,\n): string {\n const fitBudget = maxWidthPx + MEASUREMENT_TOLERANCE_PX;\n\n if (measureTextWidth(text, font) <= fitBudget) {\n return text;\n }\n\n let low = ELLIPSIS.length;\n let high = text.length;\n let bestDisplay = buildMiddleTruncatedText(text, ELLIPSIS.length);\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = buildMiddleTruncatedText(text, mid);\n\n if (measureTextWidth(candidate, font) <= fitBudget) {\n bestDisplay = candidate;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return bestDisplay;\n}\n\nexport function findMaxMiddleTruncatedCharsThatFit(\n element: HTMLElement,\n text: string,\n maxWidthPx?: number | null,\n font?: string,\n): { displayText: string; charsToShow: number } {\n const measuredWidth = element.clientWidth > 0 ? element.clientWidth : null;\n const parsedMaxWidth = maxWidthPx ?? parseMaxWidthPx(element.style.maxWidth);\n const widthBudget =\n measuredWidth != null && parsedMaxWidth != null\n ? Math.min(measuredWidth, parsedMaxWidth)\n : (measuredWidth ?? parsedMaxWidth);\n\n if (widthBudget != null && widthBudget > 0) {\n const displayText = findMiddleTruncatedTextForWidth(text, widthBudget, font);\n return { displayText, charsToShow: displayText.length };\n }\n\n element.textContent = text;\n if (element.scrollWidth <= element.clientWidth) {\n return { displayText: text, charsToShow: text.length };\n }\n\n let low = ELLIPSIS.length;\n let high = text.length;\n let bestCharsToShow = ELLIPSIS.length;\n let bestDisplay = buildMiddleTruncatedText(text, ELLIPSIS.length);\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = buildMiddleTruncatedText(text, mid);\n element.textContent = candidate;\n\n if (element.scrollWidth <= element.clientWidth) {\n bestCharsToShow = mid;\n bestDisplay = candidate;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return { displayText: bestDisplay, charsToShow: bestCharsToShow };\n}\n","import {\n type ComponentPropsWithoutRef,\n type FC,\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport styled from 'styled-components';\n\nimport {\n findMaxMiddleTruncatedCharsThatFit,\n isMiddleTruncated,\n parseMaxWidthPx,\n} from './middleTruncateText';\n\nconst TruncationSpan = styled.span`\n display: block;\n overflow: hidden;\n white-space: nowrap;\n min-width: 0;\n position: relative;\n`;\n\nconst AccessibleText = styled.span`\n opacity: 0;\n user-select: text;\n`;\n\nconst VisualTruncatedText = styled.span`\n position: absolute;\n inset: 0;\n overflow: hidden;\n white-space: nowrap;\n color: inherit;\n pointer-events: none;\n`;\n\nexport interface MiddleTruncatedTextProps extends ComponentPropsWithoutRef<'span'> {\n value: string;\n maxWidth?: number | string;\n font?: string;\n titleBehavior?: 'always' | 'conditional' | 'never';\n onTruncatedChange?: (isTruncated: boolean) => void;\n}\n\nexport const MiddleTruncatedText: FC<MiddleTruncatedTextProps> = ({\n value,\n maxWidth = '96px',\n font,\n titleBehavior = 'conditional',\n onTruncatedChange,\n 'aria-label': ariaLabel,\n style,\n ...props\n}) => {\n const ref = useRef<HTMLSpanElement>(null);\n const [displayText, setDisplayText] = useState(value);\n const maxWidthPx = parseMaxWidthPx(maxWidth);\n\n const updateTruncation = useCallback(\n (element: HTMLElement) => {\n const { displayText: nextDisplayText } = findMaxMiddleTruncatedCharsThatFit(\n element,\n value,\n maxWidthPx,\n font,\n );\n setDisplayText((current) => (current === nextDisplayText ? current : nextDisplayText));\n onTruncatedChange?.(isMiddleTruncated(nextDisplayText, value));\n },\n [value, maxWidthPx, font, onTruncatedChange],\n );\n\n useLayoutEffect(() => {\n const element = ref.current;\n if (!element) {\n return;\n }\n\n updateTruncation(element);\n\n let cancelled = false;\n void document.fonts?.ready.then(() => {\n if (!cancelled) {\n updateTruncation(element);\n }\n });\n\n const resizeObserver =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => updateTruncation(element));\n resizeObserver?.observe(element);\n\n return () => {\n cancelled = true;\n resizeObserver?.disconnect();\n };\n }, [maxWidth, updateTruncation]);\n\n const isTruncated = isMiddleTruncated(displayText, value);\n\n return (\n <TruncationSpan\n ref={ref}\n style={{ ...style, maxWidth }}\n aria-label={ariaLabel ?? (isTruncated ? value : undefined)}\n title={\n titleBehavior !== 'never' && (titleBehavior === 'always' || isTruncated) ? value : undefined\n }\n {...props}\n >\n {isTruncated ? (\n <>\n <AccessibleText>{value}</AccessibleText>\n <VisualTruncatedText aria-hidden='true'>{displayText}</VisualTruncatedText>\n </>\n ) : (\n displayText\n )}\n </TruncationSpan>\n );\n};\n\nexport default MiddleTruncatedText;\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Typography } from "@persona/design-tokens";
2
2
  import styled from "styled-components";
3
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
4
  import { useCallback, useLayoutEffect, useRef, useState } from "react";
4
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region lib/middleTruncateText.ts
6
6
  const ELLIPSIS = "…";
7
7
  const DEFAULT_FONT = `${Typography.TextMono.fontWeight} ${Typography.TextExtraSmall.fontSize} ${Typography.TextMono.fontFamily}`;
@@ -159,7 +159,7 @@ const MiddleTruncatedText = ({ value, maxWidth = "96px", font, titleBehavior = "
159
159
  "aria-label": ariaLabel ?? (isTruncated ? value : void 0),
160
160
  title: titleBehavior !== "never" && (titleBehavior === "always" || isTruncated) ? value : void 0,
161
161
  ...props,
162
- children: isTruncated ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(AccessibleText, { children: value }), /* @__PURE__ */ jsx(VisualTruncatedText, {
162
+ children: isTruncated ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(AccessibleText, { children: value }), /* @__PURE__ */ jsx(VisualTruncatedText, {
163
163
  "aria-hidden": "true",
164
164
  children: displayText
165
165
  })] }) : displayText
@@ -168,4 +168,4 @@ const MiddleTruncatedText = ({ value, maxWidth = "96px", font, titleBehavior = "
168
168
  //#endregion
169
169
  export { MiddleTruncatedText as t };
170
170
 
171
- //# sourceMappingURL=MiddleTruncatedText-Bzpg3zAU.mjs.map
171
+ //# sourceMappingURL=MiddleTruncatedText-GXI-CPvs.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MiddleTruncatedText-Bzpg3zAU.mjs","names":[],"sources":["../lib/middleTruncateText.ts","../lib/MiddleTruncatedText.tsx"],"sourcesContent":["import { Typography } from '@persona/design-tokens';\n\nconst ELLIPSIS = '…';\nconst DEFAULT_FONT = `${Typography.TextMono.fontWeight} ${Typography.TextExtraSmall.fontSize} ${Typography.TextMono.fontFamily}`;\nconst MEASUREMENT_TOLERANCE_PX = 1;\n\nfunction createMeasurementCanvas(): [HTMLCanvasElement, () => void] {\n // oxlint-disable-next-line persona-web/document-create-element-canvas\n const canvas = document.createElement('canvas');\n const cleanup = () => {\n canvas.width = 0;\n canvas.height = 0;\n canvas.remove();\n };\n\n return [canvas, cleanup];\n}\n\nexport function buildMiddleTruncatedText(text: string, charsToShow: number): string {\n if (charsToShow >= text.length) {\n return text;\n }\n\n if (charsToShow <= ELLIPSIS.length) {\n return ELLIPSIS.slice(0, Math.max(charsToShow, 0));\n }\n\n const contentChars = charsToShow - ELLIPSIS.length;\n const front = Math.ceil(contentChars / 2);\n const back = Math.floor(contentChars / 2);\n\n return text.slice(0, front) + ELLIPSIS + text.slice(text.length - back);\n}\n\nexport function isMiddleTruncated(displayText: string, fullText: string): boolean {\n return displayText !== fullText;\n}\n\nexport function parseMaxWidthPx(maxWidth: number | string): number | null {\n if (typeof maxWidth === 'number') {\n return maxWidth;\n }\n\n if (maxWidth.endsWith('px')) {\n const parsed = Number.parseFloat(maxWidth);\n return Number.isNaN(parsed) ? null : parsed;\n }\n\n return null;\n}\n\nexport function measureTextWidth(text: string, font = DEFAULT_FONT): number {\n const [canvas, cleanupCanvas] = createMeasurementCanvas();\n\n try {\n const context = canvas.getContext('2d');\n\n if (!context) {\n return text.length * 6;\n }\n\n context.font = font;\n const measuredWidth = context.measureText(text).width;\n const minimumReasonableWidth = text.length * 4;\n\n if (measuredWidth === 0 || measuredWidth < minimumReasonableWidth) {\n return text.length * 6;\n }\n\n return measuredWidth;\n } finally {\n cleanupCanvas();\n }\n}\n\nexport function findMiddleTruncatedTextForWidth(\n text: string,\n maxWidthPx: number,\n font = DEFAULT_FONT,\n): string {\n const fitBudget = maxWidthPx + MEASUREMENT_TOLERANCE_PX;\n\n if (measureTextWidth(text, font) <= fitBudget) {\n return text;\n }\n\n let low = ELLIPSIS.length;\n let high = text.length;\n let bestDisplay = buildMiddleTruncatedText(text, ELLIPSIS.length);\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = buildMiddleTruncatedText(text, mid);\n\n if (measureTextWidth(candidate, font) <= fitBudget) {\n bestDisplay = candidate;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return bestDisplay;\n}\n\nexport function findMaxMiddleTruncatedCharsThatFit(\n element: HTMLElement,\n text: string,\n maxWidthPx?: number | null,\n font?: string,\n): { displayText: string; charsToShow: number } {\n const measuredWidth = element.clientWidth > 0 ? element.clientWidth : null;\n const parsedMaxWidth = maxWidthPx ?? parseMaxWidthPx(element.style.maxWidth);\n const widthBudget =\n measuredWidth != null && parsedMaxWidth != null\n ? Math.min(measuredWidth, parsedMaxWidth)\n : (measuredWidth ?? parsedMaxWidth);\n\n if (widthBudget != null && widthBudget > 0) {\n const displayText = findMiddleTruncatedTextForWidth(text, widthBudget, font);\n return { displayText, charsToShow: displayText.length };\n }\n\n element.textContent = text;\n if (element.scrollWidth <= element.clientWidth) {\n return { displayText: text, charsToShow: text.length };\n }\n\n let low = ELLIPSIS.length;\n let high = text.length;\n let bestCharsToShow = ELLIPSIS.length;\n let bestDisplay = buildMiddleTruncatedText(text, ELLIPSIS.length);\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = buildMiddleTruncatedText(text, mid);\n element.textContent = candidate;\n\n if (element.scrollWidth <= element.clientWidth) {\n bestCharsToShow = mid;\n bestDisplay = candidate;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return { displayText: bestDisplay, charsToShow: bestCharsToShow };\n}\n","import {\n type ComponentPropsWithoutRef,\n type FC,\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport styled from 'styled-components';\n\nimport {\n findMaxMiddleTruncatedCharsThatFit,\n isMiddleTruncated,\n parseMaxWidthPx,\n} from './middleTruncateText';\n\nconst TruncationSpan = styled.span`\n display: block;\n overflow: hidden;\n white-space: nowrap;\n min-width: 0;\n position: relative;\n`;\n\nconst AccessibleText = styled.span`\n opacity: 0;\n user-select: text;\n`;\n\nconst VisualTruncatedText = styled.span`\n position: absolute;\n inset: 0;\n overflow: hidden;\n white-space: nowrap;\n color: inherit;\n pointer-events: none;\n`;\n\nexport interface MiddleTruncatedTextProps extends ComponentPropsWithoutRef<'span'> {\n value: string;\n maxWidth?: number | string;\n font?: string;\n titleBehavior?: 'always' | 'conditional' | 'never';\n onTruncatedChange?: (isTruncated: boolean) => void;\n}\n\nexport const MiddleTruncatedText: FC<MiddleTruncatedTextProps> = ({\n value,\n maxWidth = '96px',\n font,\n titleBehavior = 'conditional',\n onTruncatedChange,\n 'aria-label': ariaLabel,\n style,\n ...props\n}) => {\n const ref = useRef<HTMLSpanElement>(null);\n const [displayText, setDisplayText] = useState(value);\n const maxWidthPx = parseMaxWidthPx(maxWidth);\n\n const updateTruncation = useCallback(\n (element: HTMLElement) => {\n const { displayText: nextDisplayText } = findMaxMiddleTruncatedCharsThatFit(\n element,\n value,\n maxWidthPx,\n font,\n );\n setDisplayText((current) => (current === nextDisplayText ? current : nextDisplayText));\n onTruncatedChange?.(isMiddleTruncated(nextDisplayText, value));\n },\n [value, maxWidthPx, font, onTruncatedChange],\n );\n\n useLayoutEffect(() => {\n const element = ref.current;\n if (!element) {\n return;\n }\n\n updateTruncation(element);\n\n let cancelled = false;\n void document.fonts?.ready.then(() => {\n if (!cancelled) {\n updateTruncation(element);\n }\n });\n\n const resizeObserver =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => updateTruncation(element));\n resizeObserver?.observe(element);\n\n return () => {\n cancelled = true;\n resizeObserver?.disconnect();\n };\n }, [maxWidth, updateTruncation]);\n\n const isTruncated = isMiddleTruncated(displayText, value);\n\n return (\n <TruncationSpan\n ref={ref}\n style={{ ...style, maxWidth }}\n aria-label={ariaLabel ?? (isTruncated ? value : undefined)}\n title={\n titleBehavior !== 'never' && (titleBehavior === 'always' || isTruncated) ? value : undefined\n }\n {...props}\n >\n {isTruncated ? (\n <>\n <AccessibleText>{value}</AccessibleText>\n <VisualTruncatedText aria-hidden='true'>{displayText}</VisualTruncatedText>\n </>\n ) : (\n displayText\n )}\n </TruncationSpan>\n );\n};\n\nexport default MiddleTruncatedText;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MiddleTruncatedText-GXI-CPvs.mjs","names":[],"sources":["../lib/middleTruncateText.ts","../lib/MiddleTruncatedText.tsx"],"sourcesContent":["import { Typography } from '@persona/design-tokens';\n\nconst ELLIPSIS = '…';\nconst DEFAULT_FONT = `${Typography.TextMono.fontWeight} ${Typography.TextExtraSmall.fontSize} ${Typography.TextMono.fontFamily}`;\nconst MEASUREMENT_TOLERANCE_PX = 1;\n\nfunction createMeasurementCanvas(): [HTMLCanvasElement, () => void] {\n // oxlint-disable-next-line persona-web/document-create-element-canvas\n const canvas = document.createElement('canvas');\n const cleanup = () => {\n canvas.width = 0;\n canvas.height = 0;\n canvas.remove();\n };\n\n return [canvas, cleanup];\n}\n\nexport function buildMiddleTruncatedText(text: string, charsToShow: number): string {\n if (charsToShow >= text.length) {\n return text;\n }\n\n if (charsToShow <= ELLIPSIS.length) {\n return ELLIPSIS.slice(0, Math.max(charsToShow, 0));\n }\n\n const contentChars = charsToShow - ELLIPSIS.length;\n const front = Math.ceil(contentChars / 2);\n const back = Math.floor(contentChars / 2);\n\n return text.slice(0, front) + ELLIPSIS + text.slice(text.length - back);\n}\n\nexport function isMiddleTruncated(displayText: string, fullText: string): boolean {\n return displayText !== fullText;\n}\n\nexport function parseMaxWidthPx(maxWidth: number | string): number | null {\n if (typeof maxWidth === 'number') {\n return maxWidth;\n }\n\n if (maxWidth.endsWith('px')) {\n const parsed = Number.parseFloat(maxWidth);\n return Number.isNaN(parsed) ? null : parsed;\n }\n\n return null;\n}\n\nexport function measureTextWidth(text: string, font = DEFAULT_FONT): number {\n const [canvas, cleanupCanvas] = createMeasurementCanvas();\n\n try {\n const context = canvas.getContext('2d');\n\n if (!context) {\n return text.length * 6;\n }\n\n context.font = font;\n const measuredWidth = context.measureText(text).width;\n const minimumReasonableWidth = text.length * 4;\n\n if (measuredWidth === 0 || measuredWidth < minimumReasonableWidth) {\n return text.length * 6;\n }\n\n return measuredWidth;\n } finally {\n cleanupCanvas();\n }\n}\n\nexport function findMiddleTruncatedTextForWidth(\n text: string,\n maxWidthPx: number,\n font = DEFAULT_FONT,\n): string {\n const fitBudget = maxWidthPx + MEASUREMENT_TOLERANCE_PX;\n\n if (measureTextWidth(text, font) <= fitBudget) {\n return text;\n }\n\n let low = ELLIPSIS.length;\n let high = text.length;\n let bestDisplay = buildMiddleTruncatedText(text, ELLIPSIS.length);\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = buildMiddleTruncatedText(text, mid);\n\n if (measureTextWidth(candidate, font) <= fitBudget) {\n bestDisplay = candidate;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return bestDisplay;\n}\n\nexport function findMaxMiddleTruncatedCharsThatFit(\n element: HTMLElement,\n text: string,\n maxWidthPx?: number | null,\n font?: string,\n): { displayText: string; charsToShow: number } {\n const measuredWidth = element.clientWidth > 0 ? element.clientWidth : null;\n const parsedMaxWidth = maxWidthPx ?? parseMaxWidthPx(element.style.maxWidth);\n const widthBudget =\n measuredWidth != null && parsedMaxWidth != null\n ? Math.min(measuredWidth, parsedMaxWidth)\n : (measuredWidth ?? parsedMaxWidth);\n\n if (widthBudget != null && widthBudget > 0) {\n const displayText = findMiddleTruncatedTextForWidth(text, widthBudget, font);\n return { displayText, charsToShow: displayText.length };\n }\n\n element.textContent = text;\n if (element.scrollWidth <= element.clientWidth) {\n return { displayText: text, charsToShow: text.length };\n }\n\n let low = ELLIPSIS.length;\n let high = text.length;\n let bestCharsToShow = ELLIPSIS.length;\n let bestDisplay = buildMiddleTruncatedText(text, ELLIPSIS.length);\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = buildMiddleTruncatedText(text, mid);\n element.textContent = candidate;\n\n if (element.scrollWidth <= element.clientWidth) {\n bestCharsToShow = mid;\n bestDisplay = candidate;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return { displayText: bestDisplay, charsToShow: bestCharsToShow };\n}\n","import {\n type ComponentPropsWithoutRef,\n type FC,\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport styled from 'styled-components';\n\nimport {\n findMaxMiddleTruncatedCharsThatFit,\n isMiddleTruncated,\n parseMaxWidthPx,\n} from './middleTruncateText';\n\nconst TruncationSpan = styled.span`\n display: block;\n overflow: hidden;\n white-space: nowrap;\n min-width: 0;\n position: relative;\n`;\n\nconst AccessibleText = styled.span`\n opacity: 0;\n user-select: text;\n`;\n\nconst VisualTruncatedText = styled.span`\n position: absolute;\n inset: 0;\n overflow: hidden;\n white-space: nowrap;\n color: inherit;\n pointer-events: none;\n`;\n\nexport interface MiddleTruncatedTextProps extends ComponentPropsWithoutRef<'span'> {\n value: string;\n maxWidth?: number | string;\n font?: string;\n titleBehavior?: 'always' | 'conditional' | 'never';\n onTruncatedChange?: (isTruncated: boolean) => void;\n}\n\nexport const MiddleTruncatedText: FC<MiddleTruncatedTextProps> = ({\n value,\n maxWidth = '96px',\n font,\n titleBehavior = 'conditional',\n onTruncatedChange,\n 'aria-label': ariaLabel,\n style,\n ...props\n}) => {\n const ref = useRef<HTMLSpanElement>(null);\n const [displayText, setDisplayText] = useState(value);\n const maxWidthPx = parseMaxWidthPx(maxWidth);\n\n const updateTruncation = useCallback(\n (element: HTMLElement) => {\n const { displayText: nextDisplayText } = findMaxMiddleTruncatedCharsThatFit(\n element,\n value,\n maxWidthPx,\n font,\n );\n setDisplayText((current) => (current === nextDisplayText ? current : nextDisplayText));\n onTruncatedChange?.(isMiddleTruncated(nextDisplayText, value));\n },\n [value, maxWidthPx, font, onTruncatedChange],\n );\n\n useLayoutEffect(() => {\n const element = ref.current;\n if (!element) {\n return;\n }\n\n updateTruncation(element);\n\n let cancelled = false;\n void document.fonts?.ready.then(() => {\n if (!cancelled) {\n updateTruncation(element);\n }\n });\n\n const resizeObserver =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => updateTruncation(element));\n resizeObserver?.observe(element);\n\n return () => {\n cancelled = true;\n resizeObserver?.disconnect();\n };\n }, [maxWidth, updateTruncation]);\n\n const isTruncated = isMiddleTruncated(displayText, value);\n\n return (\n <TruncationSpan\n ref={ref}\n style={{ ...style, maxWidth }}\n aria-label={ariaLabel ?? (isTruncated ? value : undefined)}\n title={\n titleBehavior !== 'never' && (titleBehavior === 'always' || isTruncated) ? value : undefined\n }\n {...props}\n >\n {isTruncated ? (\n <>\n <AccessibleText>{value}</AccessibleText>\n <VisualTruncatedText aria-hidden='true'>{displayText}</VisualTruncatedText>\n </>\n ) : (\n displayText\n )}\n </TruncationSpan>\n );\n};\n\nexport default MiddleTruncatedText;\n"],"mappings":"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"}
package/dist/Modal.d.cts CHANGED
@@ -13,6 +13,12 @@ interface ModalTitleProps {
13
13
  children: ReactNode;
14
14
  className?: string;
15
15
  }
16
+ /** Props passed to modal content render functions. */
17
+ interface ModalRenderProps {
18
+ /** Element that floating content should use as its portal container. */
19
+ portalContainer: HTMLDivElement | null;
20
+ }
21
+ type ModalRenderable = ReactNode | ((props: ModalRenderProps) => ReactNode);
16
22
  interface ModalCardProps extends ComponentPropsWithoutRef<typeof Dialog> {
17
23
  /**
18
24
  * Display X button to close popover
@@ -30,6 +36,7 @@ interface ModalCardProps extends ComponentPropsWithoutRef<typeof Dialog> {
30
36
  * Renders tabs within the modal.
31
37
  * Adds a tab bar and will render the contents of the selected tab in a tabpanel.
32
38
  * Overrides `children`.
39
+ * Tab contents can be render functions that receive the modal portal container.
33
40
  */
34
41
  tabs?: TabView[];
35
42
  /**
@@ -51,7 +58,7 @@ interface ModalCardProps extends ComponentPropsWithoutRef<typeof Dialog> {
51
58
  }
52
59
  interface TabView {
53
60
  name: string;
54
- contents: JSX.Element;
61
+ contents: ModalRenderable;
55
62
  badge?: React.ReactElement;
56
63
  disabled?: boolean;
57
64
  'data-tour-target'?: string;
@@ -87,9 +94,7 @@ interface ModalProps {
87
94
  /**
88
95
  * Children content
89
96
  */
90
- children?: ReactNode | ((props: {
91
- portalContainer: HTMLDivElement | null;
92
- }) => ReactNode);
97
+ children?: ModalRenderable;
93
98
  /**
94
99
  * When true, removes horizontal and vertical padding from the body. Defaults to false.
95
100
  * Can also be set via contentProps.noBodyPadding.
@@ -137,5 +142,5 @@ declare const _default: (({
137
142
  }: ModalTitleProps) => _$react_jsx_runtime0.JSX.Element;
138
143
  };
139
144
  //#endregion
140
- export { ModalClose, ModalContent, ModalProps, ModalTitleProps, ModalTrigger, _default as default };
145
+ export { ModalClose, ModalContent, ModalProps, ModalRenderProps, ModalTitleProps, ModalTrigger, _default as default };
141
146
  //# sourceMappingURL=Modal.d.cts.map
package/dist/Modal.d.mts CHANGED
@@ -1,9 +1,9 @@
1
- import { r as ButtonProps } from "./Button-DcTUxRNI.mjs";
1
+ import { r as ButtonProps } from "./Button-9p469xA1.mjs";
2
2
  import * as _$styled_components0 from "styled-components";
3
- import { ComponentProps, ComponentPropsWithoutRef, ReactNode } from "react";
3
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
4
  import * as _$react_aria_components0 from "react-aria-components";
5
5
  import { Dialog, DialogTrigger, Pressable } from "react-aria-components";
6
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
6
+ import { ComponentProps, ComponentPropsWithoutRef, ReactNode } from "react";
7
7
 
8
8
  //#region components/Modal/Modal.d.ts
9
9
  declare const ModalTrigger: typeof DialogTrigger;
@@ -13,6 +13,12 @@ interface ModalTitleProps {
13
13
  children: ReactNode;
14
14
  className?: string;
15
15
  }
16
+ /** Props passed to modal content render functions. */
17
+ interface ModalRenderProps {
18
+ /** Element that floating content should use as its portal container. */
19
+ portalContainer: HTMLDivElement | null;
20
+ }
21
+ type ModalRenderable = ReactNode | ((props: ModalRenderProps) => ReactNode);
16
22
  interface ModalCardProps extends ComponentPropsWithoutRef<typeof Dialog> {
17
23
  /**
18
24
  * Display X button to close popover
@@ -30,6 +36,7 @@ interface ModalCardProps extends ComponentPropsWithoutRef<typeof Dialog> {
30
36
  * Renders tabs within the modal.
31
37
  * Adds a tab bar and will render the contents of the selected tab in a tabpanel.
32
38
  * Overrides `children`.
39
+ * Tab contents can be render functions that receive the modal portal container.
33
40
  */
34
41
  tabs?: TabView[];
35
42
  /**
@@ -51,7 +58,7 @@ interface ModalCardProps extends ComponentPropsWithoutRef<typeof Dialog> {
51
58
  }
52
59
  interface TabView {
53
60
  name: string;
54
- contents: JSX.Element;
61
+ contents: ModalRenderable;
55
62
  badge?: React.ReactElement;
56
63
  disabled?: boolean;
57
64
  'data-tour-target'?: string;
@@ -87,9 +94,7 @@ interface ModalProps {
87
94
  /**
88
95
  * Children content
89
96
  */
90
- children?: ReactNode | ((props: {
91
- portalContainer: HTMLDivElement | null;
92
- }) => ReactNode);
97
+ children?: ModalRenderable;
93
98
  /**
94
99
  * When true, removes horizontal and vertical padding from the body. Defaults to false.
95
100
  * Can also be set via contentProps.noBodyPadding.
@@ -137,5 +142,5 @@ declare const _default: (({
137
142
  }: ModalTitleProps) => _$react_jsx_runtime0.JSX.Element;
138
143
  };
139
144
  //#endregion
140
- export { ModalClose, ModalContent, ModalProps, ModalTitleProps, ModalTrigger, _default as default };
145
+ export { ModalClose, ModalContent, ModalProps, ModalRenderProps, ModalTitleProps, ModalTrigger, _default as default };
141
146
  //# sourceMappingURL=Modal.d.mts.map
@@ -0,0 +1,77 @@
1
+ const require_chunk = require("./chunk-CKQMccvm.cjs");
2
+ const require_Text = require("./Text-G9QmYf0P.cjs");
3
+ const require_Breadcrumbs = require("./Breadcrumbs-tR49JqAS.cjs");
4
+ let _persona_design_tokens = require("@persona/design-tokens");
5
+ let styled_components = require("styled-components");
6
+ styled_components = require_chunk.__toESM(styled_components);
7
+ let react_jsx_runtime = require("react/jsx-runtime");
8
+ //#region components/PageHeader/PageHeader.tsx
9
+ const PageHeaderContainer = styled_components.default.header`
10
+ display: flex;
11
+ width: 100%;
12
+ justify-content: space-between;
13
+ align-items: center;
14
+ padding: ${_persona_design_tokens.Spacing[3]} ${_persona_design_tokens.Spacing[5]};
15
+ background-color: ${({ theme }) => theme.color.background.primary};
16
+ border-bottom: 1px solid ${({ theme }) => theme.color.border.primary};
17
+ box-sizing: border-box;
18
+ min-height: 56px; /* Standardize height for most PageHeaders */
19
+ `;
20
+ const TitleContainer = styled_components.default.div`
21
+ display: flex;
22
+ flex: 1;
23
+ align-items: center;
24
+ h1 {
25
+ margin: 0;
26
+ }
27
+ p {
28
+ margin: 0 0 0 ${_persona_design_tokens.Spacing[2]};
29
+ }
30
+ `;
31
+ const LeftContainer = styled_components.default.div`
32
+ display: flex;
33
+ align-items: center;
34
+ `;
35
+ const RightContainer = styled_components.default.div`
36
+ display: flex;
37
+ gap: ${_persona_design_tokens.Spacing[2]};
38
+ margin-left: ${_persona_design_tokens.Spacing[3]};
39
+ `;
40
+ const PageHeader = ({ title, breadcrumbs, subtitle, level = "product", prepend, append, children, ...props }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PageHeaderContainer, {
41
+ ...props,
42
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(LeftContainer, { children: [
43
+ prepend && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: prepend }),
44
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(TitleContainer, { children: [breadcrumbs ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Breadcrumbs.Breadcrumbs, {
45
+ size: "lg",
46
+ ...breadcrumbs
47
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [level === "product" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Heading, {
48
+ as: "h1",
49
+ size: "sm",
50
+ children: title
51
+ }), level === "detail" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Paragraph, {
52
+ as: "h1",
53
+ size: "lg",
54
+ color: "primary",
55
+ children: title
56
+ })] }), subtitle && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Text.Paragraph, {
57
+ size: "md",
58
+ children: subtitle
59
+ })] }),
60
+ append && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: append })
61
+ ] }), children && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RightContainer, { children })]
62
+ });
63
+ //#endregion
64
+ Object.defineProperty(exports, "PageHeader", {
65
+ enumerable: true,
66
+ get: function() {
67
+ return PageHeader;
68
+ }
69
+ });
70
+ Object.defineProperty(exports, "PageHeaderContainer", {
71
+ enumerable: true,
72
+ get: function() {
73
+ return PageHeaderContainer;
74
+ }
75
+ });
76
+
77
+ //# sourceMappingURL=PageHeader-CUDnarkt.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageHeader-CUDnarkt.cjs","names":["Spacing","Breadcrumbs","Heading","Paragraph"],"sources":["../components/PageHeader/PageHeader.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport styled from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\nimport Breadcrumbs, { type BreadcrumbsProps } from 'design-system/components/Breadcrumbs';\nimport { Heading, Paragraph } from 'design-system/components/Text';\n\nexport const PageHeaderContainer = styled.header`\n display: flex;\n width: 100%;\n justify-content: space-between;\n align-items: center;\n padding: ${Spacing[3]} ${Spacing[5]};\n background-color: ${({ theme }) => theme.color.background.primary};\n border-bottom: 1px solid ${({ theme }) => theme.color.border.primary};\n box-sizing: border-box;\n min-height: 56px; /* Standardize height for most PageHeaders */\n`;\n\nconst TitleContainer = styled.div`\n display: flex;\n flex: 1;\n align-items: center;\n h1 {\n margin: 0;\n }\n p {\n margin: 0 0 0 ${Spacing[2]};\n }\n`;\n\nconst LeftContainer = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst RightContainer = styled.div`\n display: flex;\n gap: ${Spacing[2]};\n margin-left: ${Spacing[3]};\n`;\n\ninterface PageHeaderCommonProps {\n level?: 'product' | 'detail';\n subtitle?: ReactNode;\n prepend?: ReactNode;\n append?: ReactNode;\n children?: ReactNode;\n}\n\n/** Exactly one heading source is required: either `title` or `breadcrumbs`. */\nexport type PageHeaderProps = PageHeaderCommonProps &\n (\n | { title: ReactNode; breadcrumbs?: never }\n | {\n title?: never;\n /** Renders in place of `title`; the current crumb becomes the page `h1`, at `lg` size. */\n breadcrumbs: BreadcrumbsProps;\n }\n );\n\nconst PageHeader = ({\n title,\n breadcrumbs,\n subtitle,\n level = 'product',\n prepend,\n append,\n children,\n ...props\n}: PageHeaderProps) => (\n <PageHeaderContainer {...props}>\n <LeftContainer>\n {prepend && <div>{prepend}</div>}\n <TitleContainer>\n {breadcrumbs ? (\n <Breadcrumbs size='lg' {...breadcrumbs} />\n ) : (\n <>\n {level === 'product' && (\n <Heading as='h1' size='sm'>\n {title}\n </Heading>\n )}\n {level === 'detail' && (\n <Paragraph as='h1' size='lg' color='primary'>\n {title}\n </Paragraph>\n )}\n </>\n )}\n {subtitle && <Paragraph size='md'>{subtitle}</Paragraph>}\n </TitleContainer>\n {append && <div>{append}</div>}\n </LeftContainer>\n {children && <RightContainer>{children}</RightContainer>}\n </PageHeaderContainer>\n);\n\nexport default PageHeader;\n"],"mappings":";;;;;;;;AAOA,MAAa,sBAAsB,kBAAA,QAAO,MAAM;;;;;aAKnCA,uBAAAA,QAAQ,GAAG,GAAGA,uBAAAA,QAAQ,GAAG;uBACf,EAAE,YAAY,MAAM,MAAM,WAAW,QAAQ;8BACtC,EAAE,YAAY,MAAM,MAAM,OAAO,QAAQ;;;;AAKvE,MAAM,iBAAiB,kBAAA,QAAO,GAAG;;;;;;;;oBAQbA,uBAAAA,QAAQ,GAAG;;;AAI/B,MAAM,gBAAgB,kBAAA,QAAO,GAAG;;;;AAKhC,MAAM,iBAAiB,kBAAA,QAAO,GAAG;;SAExBA,uBAAAA,QAAQ,GAAG;iBACHA,uBAAAA,QAAQ,GAAG;;AAsB5B,MAAM,cAAc,EAClB,OACA,aACA,UACA,QAAQ,WACR,SACA,QACA,UACA,GAAG,YAEH,iBAAA,GAAA,kBAAA,MAAC,qBAAD;CAAqB,GAAI;WAAzB,CACE,iBAAA,GAAA,kBAAA,MAAC,eAAD,EAAA,UAAA;EACG,WAAW,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAA,UAAM,SAAc,CAAA;EAChC,iBAAA,GAAA,kBAAA,MAAC,gBAAD,EAAA,UAAA,CACG,cACC,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,aAAD;GAAa,MAAK;GAAK,GAAI;GAAe,CAAA,GAE1C,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACG,UAAU,aACT,iBAAA,GAAA,kBAAA,KAACC,aAAAA,SAAD;GAAS,IAAG;GAAK,MAAK;aACnB;GACO,CAAA,EAEX,UAAU,YACT,iBAAA,GAAA,kBAAA,KAACC,aAAAA,WAAD;GAAW,IAAG;GAAK,MAAK;GAAK,OAAM;aAChC;GACS,CAAA,CAEb,EAAA,CAAA,EAEJ,YAAY,iBAAA,GAAA,kBAAA,KAACA,aAAAA,WAAD;GAAW,MAAK;aAAM;GAAqB,CAAA,CACzC,EAAA,CAAA;EAChB,UAAU,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAA,UAAM,QAAa,CAAA;EAChB,EAAA,CAAA,EACf,YAAY,iBAAA,GAAA,kBAAA,KAAC,gBAAD,EAAiB,UAA0B,CAAA,CACpC"}
@@ -0,0 +1,64 @@
1
+ import { i as Paragraph, n as Heading } from "./Text-RcEfNFLx.mjs";
2
+ import { t as Breadcrumbs } from "./Breadcrumbs-CDZ_Mrcg.mjs";
3
+ import { Spacing } from "@persona/design-tokens";
4
+ import styled from "styled-components";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region components/PageHeader/PageHeader.tsx
7
+ const PageHeaderContainer = styled.header`
8
+ display: flex;
9
+ width: 100%;
10
+ justify-content: space-between;
11
+ align-items: center;
12
+ padding: ${Spacing[3]} ${Spacing[5]};
13
+ background-color: ${({ theme }) => theme.color.background.primary};
14
+ border-bottom: 1px solid ${({ theme }) => theme.color.border.primary};
15
+ box-sizing: border-box;
16
+ min-height: 56px; /* Standardize height for most PageHeaders */
17
+ `;
18
+ const TitleContainer = styled.div`
19
+ display: flex;
20
+ flex: 1;
21
+ align-items: center;
22
+ h1 {
23
+ margin: 0;
24
+ }
25
+ p {
26
+ margin: 0 0 0 ${Spacing[2]};
27
+ }
28
+ `;
29
+ const LeftContainer = styled.div`
30
+ display: flex;
31
+ align-items: center;
32
+ `;
33
+ const RightContainer = styled.div`
34
+ display: flex;
35
+ gap: ${Spacing[2]};
36
+ margin-left: ${Spacing[3]};
37
+ `;
38
+ const PageHeader = ({ title, breadcrumbs, subtitle, level = "product", prepend, append, children, ...props }) => /* @__PURE__ */ jsxs(PageHeaderContainer, {
39
+ ...props,
40
+ children: [/* @__PURE__ */ jsxs(LeftContainer, { children: [
41
+ prepend && /* @__PURE__ */ jsx("div", { children: prepend }),
42
+ /* @__PURE__ */ jsxs(TitleContainer, { children: [breadcrumbs ? /* @__PURE__ */ jsx(Breadcrumbs, {
43
+ size: "lg",
44
+ ...breadcrumbs
45
+ }) : /* @__PURE__ */ jsxs(Fragment, { children: [level === "product" && /* @__PURE__ */ jsx(Heading, {
46
+ as: "h1",
47
+ size: "sm",
48
+ children: title
49
+ }), level === "detail" && /* @__PURE__ */ jsx(Paragraph, {
50
+ as: "h1",
51
+ size: "lg",
52
+ color: "primary",
53
+ children: title
54
+ })] }), subtitle && /* @__PURE__ */ jsx(Paragraph, {
55
+ size: "md",
56
+ children: subtitle
57
+ })] }),
58
+ append && /* @__PURE__ */ jsx("div", { children: append })
59
+ ] }), children && /* @__PURE__ */ jsx(RightContainer, { children })]
60
+ });
61
+ //#endregion
62
+ export { PageHeaderContainer as n, PageHeader as t };
63
+
64
+ //# sourceMappingURL=PageHeader-D-6W61E_.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageHeader-D-6W61E_.mjs","names":[],"sources":["../components/PageHeader/PageHeader.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport styled from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\nimport Breadcrumbs, { type BreadcrumbsProps } from 'design-system/components/Breadcrumbs';\nimport { Heading, Paragraph } from 'design-system/components/Text';\n\nexport const PageHeaderContainer = styled.header`\n display: flex;\n width: 100%;\n justify-content: space-between;\n align-items: center;\n padding: ${Spacing[3]} ${Spacing[5]};\n background-color: ${({ theme }) => theme.color.background.primary};\n border-bottom: 1px solid ${({ theme }) => theme.color.border.primary};\n box-sizing: border-box;\n min-height: 56px; /* Standardize height for most PageHeaders */\n`;\n\nconst TitleContainer = styled.div`\n display: flex;\n flex: 1;\n align-items: center;\n h1 {\n margin: 0;\n }\n p {\n margin: 0 0 0 ${Spacing[2]};\n }\n`;\n\nconst LeftContainer = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst RightContainer = styled.div`\n display: flex;\n gap: ${Spacing[2]};\n margin-left: ${Spacing[3]};\n`;\n\ninterface PageHeaderCommonProps {\n level?: 'product' | 'detail';\n subtitle?: ReactNode;\n prepend?: ReactNode;\n append?: ReactNode;\n children?: ReactNode;\n}\n\n/** Exactly one heading source is required: either `title` or `breadcrumbs`. */\nexport type PageHeaderProps = PageHeaderCommonProps &\n (\n | { title: ReactNode; breadcrumbs?: never }\n | {\n title?: never;\n /** Renders in place of `title`; the current crumb becomes the page `h1`, at `lg` size. */\n breadcrumbs: BreadcrumbsProps;\n }\n );\n\nconst PageHeader = ({\n title,\n breadcrumbs,\n subtitle,\n level = 'product',\n prepend,\n append,\n children,\n ...props\n}: PageHeaderProps) => (\n <PageHeaderContainer {...props}>\n <LeftContainer>\n {prepend && <div>{prepend}</div>}\n <TitleContainer>\n {breadcrumbs ? (\n <Breadcrumbs size='lg' {...breadcrumbs} />\n ) : (\n <>\n {level === 'product' && (\n <Heading as='h1' size='sm'>\n {title}\n </Heading>\n )}\n {level === 'detail' && (\n <Paragraph as='h1' size='lg' color='primary'>\n {title}\n </Paragraph>\n )}\n </>\n )}\n {subtitle && <Paragraph size='md'>{subtitle}</Paragraph>}\n </TitleContainer>\n {append && <div>{append}</div>}\n </LeftContainer>\n {children && <RightContainer>{children}</RightContainer>}\n </PageHeaderContainer>\n);\n\nexport default PageHeader;\n"],"mappings":";;;;;;AAOA,MAAa,sBAAsB,OAAO,MAAM;;;;;aAKnC,QAAQ,GAAG,GAAG,QAAQ,GAAG;uBACf,EAAE,YAAY,MAAM,MAAM,WAAW,QAAQ;8BACtC,EAAE,YAAY,MAAM,MAAM,OAAO,QAAQ;;;;AAKvE,MAAM,iBAAiB,OAAO,GAAG;;;;;;;;oBAQb,QAAQ,GAAG;;;AAI/B,MAAM,gBAAgB,OAAO,GAAG;;;;AAKhC,MAAM,iBAAiB,OAAO,GAAG;;SAExB,QAAQ,GAAG;iBACH,QAAQ,GAAG;;AAsB5B,MAAM,cAAc,EAClB,OACA,aACA,UACA,QAAQ,WACR,SACA,QACA,UACA,GAAG,YAEH,qBAAC,qBAAD;CAAqB,GAAI;WAAzB,CACE,qBAAC,eAAD,EAAA,UAAA;EACG,WAAW,oBAAC,OAAD,EAAA,UAAM,SAAc,CAAA;EAChC,qBAAC,gBAAD,EAAA,UAAA,CACG,cACC,oBAAC,aAAD;GAAa,MAAK;GAAK,GAAI;GAAe,CAAA,GAE1C,qBAAA,UAAA,EAAA,UAAA,CACG,UAAU,aACT,oBAAC,SAAD;GAAS,IAAG;GAAK,MAAK;aACnB;GACO,CAAA,EAEX,UAAU,YACT,oBAAC,WAAD;GAAW,IAAG;GAAK,MAAK;GAAK,OAAM;aAChC;GACS,CAAA,CAEb,EAAA,CAAA,EAEJ,YAAY,oBAAC,WAAD;GAAW,MAAK;aAAM;GAAqB,CAAA,CACzC,EAAA,CAAA;EAChB,UAAU,oBAAC,OAAD,EAAA,UAAM,QAAa,CAAA;EAChB,EAAA,CAAA,EACf,YAAY,oBAAC,gBAAD,EAAiB,UAA0B,CAAA,CACpC"}
@@ -1,19 +1,28 @@
1
+ import { r as BreadcrumbsProps } from "./Breadcrumbs-BBREROrw.cjs";
1
2
  import { ReactNode } from "react";
2
3
  import * as _$styled_components0 from "styled-components";
3
4
  import * as _$react_jsx_runtime0 from "react/jsx-runtime.js";
4
5
 
5
6
  //#region components/PageHeader/PageHeader.d.ts
6
7
  declare const PageHeaderContainer: _$styled_components0.StyledComponent<"header", any, {}, never>;
7
- interface PageHeaderProps {
8
- title: ReactNode;
8
+ interface PageHeaderCommonProps {
9
9
  level?: 'product' | 'detail';
10
10
  subtitle?: ReactNode;
11
11
  prepend?: ReactNode;
12
12
  append?: ReactNode;
13
13
  children?: ReactNode;
14
14
  }
15
+ /** Exactly one heading source is required: either `title` or `breadcrumbs`. */
16
+ type PageHeaderProps = PageHeaderCommonProps & ({
17
+ title: ReactNode;
18
+ breadcrumbs?: never;
19
+ } | {
20
+ title?: never; /** Renders in place of `title`; the current crumb becomes the page `h1`, at `lg` size. */
21
+ breadcrumbs: BreadcrumbsProps;
22
+ });
15
23
  declare const PageHeader: ({
16
24
  title,
25
+ breadcrumbs,
17
26
  subtitle,
18
27
  level,
19
28
  prepend,
@@ -1,19 +1,28 @@
1
+ import { r as BreadcrumbsProps } from "./Breadcrumbs-DJ5qqqRD.mjs";
1
2
  import * as _$styled_components0 from "styled-components";
2
- import { ReactNode } from "react";
3
3
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
+ import { ReactNode } from "react";
4
5
 
5
6
  //#region components/PageHeader/PageHeader.d.ts
6
7
  declare const PageHeaderContainer: _$styled_components0.StyledComponent<"header", any, {}, never>;
7
- interface PageHeaderProps {
8
- title: ReactNode;
8
+ interface PageHeaderCommonProps {
9
9
  level?: 'product' | 'detail';
10
10
  subtitle?: ReactNode;
11
11
  prepend?: ReactNode;
12
12
  append?: ReactNode;
13
13
  children?: ReactNode;
14
14
  }
15
+ /** Exactly one heading source is required: either `title` or `breadcrumbs`. */
16
+ type PageHeaderProps = PageHeaderCommonProps & ({
17
+ title: ReactNode;
18
+ breadcrumbs?: never;
19
+ } | {
20
+ title?: never; /** Renders in place of `title`; the current crumb becomes the page `h1`, at `lg` size. */
21
+ breadcrumbs: BreadcrumbsProps;
22
+ });
15
23
  declare const PageHeader: ({
16
24
  title,
25
+ breadcrumbs,
17
26
  subtitle,
18
27
  level,
19
28
  prepend,
@@ -1,5 +1,5 @@
1
- import { n as HStackProps } from "./Stack-B5VYkPBe.cjs";
2
- import { t as PaginationParams } from "./types-CmnKGG5I.cjs";
1
+ import { n as HStackProps } from "./Stack-BzVkf3cz.cjs";
2
+ import { t as PaginationParams } from "./types-CkiXVJeR.cjs";
3
3
  import * as _$styled_components0 from "styled-components";
4
4
  import * as _$react_jsx_runtime0 from "react/jsx-runtime.js";
5
5
 
@@ -27,4 +27,4 @@ declare function PageSelector({
27
27
  }: PageSelectorProps): _$react_jsx_runtime0.JSX.Element;
28
28
  //#endregion
29
29
  export { PageInput as n, PageSelector as r, PAGE_LIMIT_BEFORE_SCROLL_MODE as t };
30
- //# sourceMappingURL=PageSelector-COqR1tdA.d.cts.map
30
+ //# sourceMappingURL=PageSelector-CNnVp3Al.d.cts.map
@@ -1,5 +1,5 @@
1
- import { n as HStackProps } from "./Stack-Du7tLSPC.mjs";
2
- import { t as PaginationParams } from "./types-DMjr-u_o.mjs";
1
+ import { n as HStackProps } from "./Stack-CkV7k7TE.mjs";
2
+ import { t as PaginationParams } from "./types-TV9nVfSe.mjs";
3
3
  import * as _$styled_components0 from "styled-components";
4
4
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
5
 
@@ -27,4 +27,4 @@ declare function PageSelector({
27
27
  }: PageSelectorProps): _$react_jsx_runtime0.JSX.Element;
28
28
  //#endregion
29
29
  export { PageInput as n, PageSelector as r, PAGE_LIMIT_BEFORE_SCROLL_MODE as t };
30
- //# sourceMappingURL=PageSelector-mn6q4SKY.d.mts.map
30
+ //# sourceMappingURL=PageSelector-vay4jpMp.d.mts.map
@@ -1,2 +1,2 @@
1
- import { n as PageInput, r as PageSelector, t as PAGE_LIMIT_BEFORE_SCROLL_MODE } from "./PageSelector-COqR1tdA.cjs";
1
+ import { n as PageInput, r as PageSelector, t as PAGE_LIMIT_BEFORE_SCROLL_MODE } from "./PageSelector-CNnVp3Al.cjs";
2
2
  export { PAGE_LIMIT_BEFORE_SCROLL_MODE, PageInput, PageSelector as default };
@@ -1,2 +1,2 @@
1
- import { n as PageInput, r as PageSelector, t as PAGE_LIMIT_BEFORE_SCROLL_MODE } from "./PageSelector-mn6q4SKY.mjs";
1
+ import { n as PageInput, r as PageSelector, t as PAGE_LIMIT_BEFORE_SCROLL_MODE } from "./PageSelector-vay4jpMp.mjs";
2
2
  export { PAGE_LIMIT_BEFORE_SCROLL_MODE, PageInput, PageSelector as default };
@@ -11,11 +11,17 @@ interface PageSizeSelectorProps {
11
11
  pageSize: number;
12
12
  pageSizeOptions: number[];
13
13
  handlePageSizeClick: (pageSize: number) => void;
14
+ /**
15
+ * Element the options menu renders into. Pass a container inside the surrounding dialog when the
16
+ * pager sits in a clipping container, where the menu would otherwise be cut off.
17
+ */
18
+ menuPortalContainer?: HTMLElement | null;
14
19
  }
15
20
  declare const PageSizeSelector: ({
16
21
  pageSize,
17
22
  pageSizeOptions,
18
- handlePageSizeClick
23
+ handlePageSizeClick,
24
+ menuPortalContainer
19
25
  }: PageSizeSelectorProps) => _$react_jsx_runtime0.JSX.Element;
20
26
  //#endregion
21
27
  export { PageSizeOption, PageSizeSelector as default };
@@ -1,13 +1,13 @@
1
1
  const require_chunk = require("./chunk-CKQMccvm.cjs");
2
- const require_Stack = require("./Stack-BF-9YjA1.cjs");
3
- const require_IconButton = require("./IconButton-DNy7g5zh.cjs");
4
- const require_Input = require("./Input-DQS-BEym.cjs");
5
- const require_Select = require("./Select-CowngLd7.cjs");
2
+ const require_Stack = require("./Stack-UeifHn3c.cjs");
3
+ const require_IconButton = require("./IconButton-nlgjJQCS.cjs");
4
+ const require_Input = require("./Input-OJPQ07TW.cjs");
5
+ const require_Select = require("./Select-BurtT6bN.cjs");
6
6
  let _persona_design_tokens = require("@persona/design-tokens");
7
7
  let styled_components = require("styled-components");
8
8
  styled_components = require_chunk.__toESM(styled_components);
9
- let react = require("react");
10
9
  let react_jsx_runtime = require("react/jsx-runtime");
10
+ let react = require("react");
11
11
  let lodash_fp_js = require("lodash/fp.js");
12
12
  //#region components/Pagination/constants.ts
13
13
  const DEFAULT_PAGE_SIZE_OPTIONS = [
@@ -136,7 +136,7 @@ const Label = styled_components.default.label`
136
136
  text-decoration: underline;
137
137
  }
138
138
  `;
139
- const PageSizeSelector = ({ pageSize, pageSizeOptions, handlePageSizeClick }) => {
139
+ const PageSizeSelector = ({ pageSize, pageSizeOptions, handlePageSizeClick, menuPortalContainer }) => {
140
140
  const pageSizes = [...pageSizeOptions, ...pageSizeOptions.includes(pageSize) ? [] : [pageSize]].sort((a, b) => a - b);
141
141
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Selector, {
142
142
  "data-test": "pagination__page-size-selector",
@@ -144,6 +144,8 @@ const PageSizeSelector = ({ pageSize, pageSizeOptions, handlePageSizeClick }) =>
144
144
  value: pageSize.toString(),
145
145
  onValueChange: (val) => handlePageSizeClick(Number(val)),
146
146
  size: "sm",
147
+ portal: menuPortalContainer != null,
148
+ portalContainer: menuPortalContainer,
147
149
  children: pageSizes.map((size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Select.Option, {
148
150
  value: size.toString(),
149
151
  children: size
@@ -155,6 +157,7 @@ const PageSizeSelector = ({ pageSize, pageSizeOptions, handlePageSizeClick }) =>
155
157
  //#region components/Pagination/Pagination.tsx
156
158
  const MAX_PAGES = 100;
157
159
  const Container = (0, styled_components.default)("nav")`
160
+ ${_persona_design_tokens.Typography.TextMedium};
158
161
  display: flex;
159
162
  align-items: center;
160
163
  justify-content: space-between;
@@ -165,7 +168,7 @@ const PaginationInfo = (0, styled_components.default)("div")`
165
168
 
166
169
  color: ${_persona_design_tokens.Color.TextPrimary};
167
170
  `;
168
- const Pagination = ({ pageSize, pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS, paginationParams, handlePageSizeClick, handlePageLinkClick, isLoading, showPageSizeSelector = true, onPageChange }) => {
171
+ const Pagination = ({ pageSize, pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS, paginationParams, handlePageSizeClick, handlePageLinkClick, isLoading, showPageSizeSelector = true, onPageChange, menuPortalContainer }) => {
169
172
  if (!paginationParams || !pageSize) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {});
170
173
  const { "current-page": currentPage, "total-count": totalCount, "total-pages": totalPages, "lower-bound": lowerBound } = paginationParams;
171
174
  const totalCountDisplay = lowerBound || totalPages >= MAX_PAGES ? "many" : totalCount;
@@ -177,7 +180,8 @@ const Pagination = ({ pageSize, pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS, pag
177
180
  children: [showPageSizeSelector && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PageSizeSelector, {
178
181
  pageSize,
179
182
  pageSizeOptions,
180
- handlePageSizeClick
183
+ handlePageSizeClick,
184
+ menuPortalContainer
181
185
  }), totalCount > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
182
186
  "Showing ",
183
187
  firstItemIndex,
@@ -229,4 +233,4 @@ Object.defineProperty(exports, "Pagination_default", {
229
233
  }
230
234
  });
231
235
 
232
- //# sourceMappingURL=Pagination-DEZFb552.cjs.map
236
+ //# sourceMappingURL=Pagination-2Yo1vRJZ.cjs.map