@persona/design-system 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -1
  3. package/dist/{Action-DL3kHI9Z.d.mts → Action-C2waxwIy.d.mts} +3 -3
  4. package/dist/Action.d.mts +1 -1
  5. package/dist/AdvancedFilterRuleRow.d.mts +4 -4
  6. package/dist/AdvancedFilterRulesPopover.d.mts +3 -3
  7. package/dist/ArrayValueControl.d.mts +1 -1
  8. package/dist/Attribute.d.mts +4 -4
  9. package/dist/{Badge-BL0J5oMa.mjs → Badge-CM2TzkdE.mjs} +2 -2
  10. package/dist/{Badge-BL0J5oMa.mjs.map → Badge-CM2TzkdE.mjs.map} +1 -1
  11. package/dist/BooleanValueControl.d.mts +1 -1
  12. package/dist/BottomPanel.d.mts +32 -0
  13. package/dist/{Breadcrumb-Czgdi0xf.d.mts → Breadcrumb-Df06cTnA.d.mts} +1 -1
  14. package/dist/Breadcrumb.d.mts +1 -1
  15. package/dist/{Breadcrumbs-ed4wRDS7.mjs → Breadcrumbs-BEYQlGbW.mjs} +7 -7
  16. package/dist/{Breadcrumbs-ed4wRDS7.mjs.map → Breadcrumbs-BEYQlGbW.mjs.map} +1 -1
  17. package/dist/{Breadcrumbs-zei-cpdU.d.mts → Breadcrumbs-D_Gzd4_J.d.mts} +2 -2
  18. package/dist/Breadcrumbs.d.mts +1 -1
  19. package/dist/{Button-CKzNTpPL.d.mts → Button-CRFbWv3l.d.mts} +3 -3
  20. package/dist/Button.d.mts +1 -1
  21. package/dist/{Calendar-CcxN7y3e.d.mts → Calendar-DjnoZVcT.d.mts} +1 -1
  22. package/dist/Calendar.d.mts +1 -1
  23. package/dist/CalendarBase.d.mts +1 -1
  24. package/dist/{Card-pr4FQWjn.d.mts → Card-BoGV5tY2.d.mts} +4 -4
  25. package/dist/Card.d.mts +1 -1
  26. package/dist/Card2.d.mts +3 -3
  27. package/dist/{CardV2-D3m5EKlp.mjs → CardV2-B2wx1NE3.mjs} +11 -11
  28. package/dist/{CardV2-D3m5EKlp.mjs.map → CardV2-B2wx1NE3.mjs.map} +1 -1
  29. package/dist/{Checkbox-Bmm-r5ei.d.mts → Checkbox-CwPXPLCi.d.mts} +1 -1
  30. package/dist/{Checkbox-Ccuicmlo.mjs → Checkbox-DwZEsi7x.mjs} +5 -5
  31. package/dist/{Checkbox-Ccuicmlo.mjs.map → Checkbox-DwZEsi7x.mjs.map} +1 -1
  32. package/dist/Checkbox.d.mts +1 -1
  33. package/dist/CheckboxGroupField.d.mts +1 -1
  34. package/dist/ChoicesValueControl.d.mts +1 -1
  35. package/dist/{Combobox-Bf_Xe1BG.d.mts → Combobox-BQN5OwB-.d.mts} +3 -3
  36. package/dist/{Combobox-BGRyr_-L.mjs → Combobox-CKaVX-32.mjs} +9 -9
  37. package/dist/{Combobox-BGRyr_-L.mjs.map → Combobox-CKaVX-32.mjs.map} +1 -1
  38. package/dist/Combobox.d.mts +2 -2
  39. package/dist/{ComboboxBase-CWzN8GML.d.mts → ComboboxBase-nfHr19x-.d.mts} +7 -7
  40. package/dist/ComboboxBase.d.mts +1 -1
  41. package/dist/{ComboboxMultiSelect-iSuvyOx2.d.mts → ComboboxMultiSelect-DRNj2Mtx.d.mts} +2 -2
  42. package/dist/ComboboxMultiSelect.d.mts +1 -1
  43. package/dist/{ComboboxSingleSelect-DVRFKPi1.d.mts → ComboboxSingleSelect-BkhbEx-F.d.mts} +4 -4
  44. package/dist/ComboboxSingleSelect.d.mts +1 -1
  45. package/dist/{CompactBar-C_61pgp7.d.mts → CompactBar-CyHbWTv4.d.mts} +3 -3
  46. package/dist/CompactBar.d.mts +1 -1
  47. package/dist/{ConfigFormGroup-DGCTW3by.mjs → ConfigFormGroup-CmCRJyse.mjs} +2 -2
  48. package/dist/{ConfigFormGroup-DGCTW3by.mjs.map → ConfigFormGroup-CmCRJyse.mjs.map} +1 -1
  49. package/dist/{ControlBar-0XwbM4yC.d.mts → ControlBar-DwAhPcb5.d.mts} +12 -2
  50. package/dist/ControlBar.d.mts +1 -1
  51. package/dist/DataTable.d.mts +8 -8
  52. package/dist/{DateField-CKeSIhGy.d.mts → DateField-tOyrGcx1.d.mts} +2 -2
  53. package/dist/DateField.d.mts +1 -1
  54. package/dist/{DatePicker-B1iWrqR5.d.mts → DatePicker-Bs9JODNg.d.mts} +2 -2
  55. package/dist/{DatePicker-BNnZ6L1y.mjs → DatePicker-D2SfjS-N.mjs} +74 -19
  56. package/dist/DatePicker-D2SfjS-N.mjs.map +1 -0
  57. package/dist/DatePicker.d.mts +1 -1
  58. package/dist/{DateRangePicker-BmF9eH9R.d.mts → DateRangePicker-BT6-j8V7.d.mts} +24 -4
  59. package/dist/DateRangePicker.d.mts +2 -2
  60. package/dist/DateRangeValueControl.d.mts +8 -4
  61. package/dist/DateValueControl.d.mts +1 -1
  62. package/dist/{DropdownButton-BlVeFbJ0.mjs → DropdownButton-dpGAmVlN.mjs} +3 -3
  63. package/dist/{DropdownButton-BlVeFbJ0.mjs.map → DropdownButton-dpGAmVlN.mjs.map} +1 -1
  64. package/dist/DropdownButton.d.mts +2 -2
  65. package/dist/{DropdownMenu-82xH1AZr.mjs → DropdownMenu-CyxizDxJ.mjs} +2 -2
  66. package/dist/{DropdownMenu-82xH1AZr.mjs.map → DropdownMenu-CyxizDxJ.mjs.map} +1 -1
  67. package/dist/{DropdownMenu-DuTnq9j7.d.mts → DropdownMenu-RTxQ0Zu1.d.mts} +3 -3
  68. package/dist/DropdownMenu.d.mts +1 -1
  69. package/dist/{ErrorProps-DX50vo-U.d.mts → ErrorProps-C9T857Wk.d.mts} +1 -1
  70. package/dist/ErrorProps.d.mts +1 -1
  71. package/dist/{FieldRegistry-D1vghSC_.d.mts → FieldRegistry-D6niLExM.d.mts} +2 -2
  72. package/dist/FieldRegistry.d.mts +1 -1
  73. package/dist/{FilterBar-Ck085Dic.d.mts → FilterBar-DfBV7yKM.d.mts} +10 -4
  74. package/dist/FilterBar.d.mts +1 -1
  75. package/dist/FilterPickerMenu.d.mts +2 -2
  76. package/dist/FilterPill.d.mts +1 -1
  77. package/dist/FilterPopover.d.mts +1 -1
  78. package/dist/FloatValueControl.d.mts +1 -1
  79. package/dist/{FormControl-CfpwZGlD.d.mts → FormControl-BMYRsFkI.d.mts} +3 -3
  80. package/dist/{FormControl-D1HIqDKm.mjs → FormControl-DQFefbrI.mjs} +4 -4
  81. package/dist/{FormControl-D1HIqDKm.mjs.map → FormControl-DQFefbrI.mjs.map} +1 -1
  82. package/dist/FormControl.d.mts +1 -1
  83. package/dist/FormControlLabel.d.mts +2 -2
  84. package/dist/{FormField-0p4y0sS5.d.mts → FormField-C1DaUT5U.d.mts} +6 -7
  85. package/dist/{FormField-CVnbsNvU.mjs → FormField-C7bW-O6H.mjs} +19 -20
  86. package/dist/FormField-C7bW-O6H.mjs.map +1 -0
  87. package/dist/FormField.d.mts +1 -1
  88. package/dist/Grid.d.mts +38 -0
  89. package/dist/GridItem.d.mts +17 -0
  90. package/dist/{Header-gDUTQgWj.d.mts → Header-BKk3qESS.d.mts} +2 -2
  91. package/dist/Header.d.mts +1 -1
  92. package/dist/{HelperTooltip-CqhiRb5g.d.mts → HelperTooltip-CD_yy7Hp.d.mts} +2 -2
  93. package/dist/HelperTooltip.d.mts +1 -1
  94. package/dist/{HoverCopyableField-HWshrU_1.mjs → HoverCopyableField-Bgt639FR.mjs} +4 -4
  95. package/dist/{HoverCopyableField-HWshrU_1.mjs.map → HoverCopyableField-Bgt639FR.mjs.map} +1 -1
  96. package/dist/{IconButton-CLsHdYm7.d.mts → IconButton-Bh-JJ-0x.d.mts} +2 -2
  97. package/dist/{IconButton-BgL3QUVO.mjs → IconButton-BnSEV7eR.mjs} +5 -5
  98. package/dist/{IconButton-BgL3QUVO.mjs.map → IconButton-BnSEV7eR.mjs.map} +1 -1
  99. package/dist/IconButton.d.mts +1 -1
  100. package/dist/ImageTile.d.mts +1 -1
  101. package/dist/InlineCombobox.d.mts +1 -1
  102. package/dist/InlineInput.d.mts +1 -1
  103. package/dist/{Input-BHHWpSKN.d.mts → Input-1bDdMAgO.d.mts} +6 -6
  104. package/dist/{Input-DoB8YswA.mjs → Input-D7of_GtJ.mjs} +4 -4
  105. package/dist/{Input-DoB8YswA.mjs.map → Input-D7of_GtJ.mjs.map} +1 -1
  106. package/dist/Input.d.mts +1 -1
  107. package/dist/{InputProps-sHxlDiss.d.mts → InputProps-BBShwi8N.d.mts} +2 -2
  108. package/dist/InputProps.d.mts +1 -1
  109. package/dist/IntegerValueControl.d.mts +1 -1
  110. package/dist/{ListBox-BrY1bQ5-.d.mts → ListBox-DeFHRX2T.d.mts} +3 -3
  111. package/dist/{ListBox-B9uuMt2R.mjs → ListBox-jzXQDraS.mjs} +10 -10
  112. package/dist/{ListBox-B9uuMt2R.mjs.map → ListBox-jzXQDraS.mjs.map} +1 -1
  113. package/dist/ListBox.d.mts +1 -1
  114. package/dist/ListBoxField.d.mts +2 -2
  115. package/dist/{LoadingShimmer-dsBWRdTU.mjs → LoadingShimmer-a2Hv0kAq.mjs} +1 -1
  116. package/dist/{LoadingShimmer-dsBWRdTU.mjs.map → LoadingShimmer-a2Hv0kAq.mjs.map} +1 -1
  117. package/dist/LoadingShimmer.d.mts +2 -2
  118. package/dist/{LogicRow-9a_klV2v.d.mts → LogicRow-BOhB0uNS.d.mts} +3 -3
  119. package/dist/LogicRow.d.mts +1 -1
  120. package/dist/MaskedInput.d.mts +2 -2
  121. package/dist/MatchHighlight.d.mts +1 -1
  122. package/dist/{Menu-D4Y_J-QI.d.mts → Menu-BCVhmNEe.d.mts} +4 -4
  123. package/dist/{Menu-CHbUf9PQ.mjs → Menu-DVI8l-4Q.mjs} +3 -3
  124. package/dist/{Menu-CHbUf9PQ.mjs.map → Menu-DVI8l-4Q.mjs.map} +1 -1
  125. package/dist/Menu.d.mts +1 -1
  126. package/dist/Modal.d.mts +2 -2
  127. package/dist/{PageHeader-XxGsFLHb.mjs → PageHeader-BpGT-BM0.mjs} +2 -2
  128. package/dist/{PageHeader-XxGsFLHb.mjs.map → PageHeader-BpGT-BM0.mjs.map} +1 -1
  129. package/dist/PageHeader.d.mts +2 -2
  130. package/dist/PageLayout.d.mts +1 -1
  131. package/dist/{PageSelector-BDo3ge1E.d.mts → PageSelector-D6tffcGW.d.mts} +3 -3
  132. package/dist/PageSelector.d.mts +1 -1
  133. package/dist/{Pagination-Dcmv7bVe.d.mts → Pagination-BkjmybcI.d.mts} +2 -2
  134. package/dist/{Pagination-DvVKQLdC.mjs → Pagination-CVRTcKSG.mjs} +4 -4
  135. package/dist/{Pagination-DvVKQLdC.mjs.map → Pagination-CVRTcKSG.mjs.map} +1 -1
  136. package/dist/Pagination.d.mts +1 -1
  137. package/dist/{Pii-BD48BtZ0.mjs → Pii-CA7aCuYT.mjs} +2 -2
  138. package/dist/{Pii-BD48BtZ0.mjs.map → Pii-CA7aCuYT.mjs.map} +1 -1
  139. package/dist/PillShell-CVqpZ5iV.d.mts +85 -0
  140. package/dist/PillShell.d.mts +2 -85
  141. package/dist/{Popover-DNH8Jx1-.mjs → Popover-DlXyKYL5.mjs} +1 -1
  142. package/dist/{Popover-DNH8Jx1-.mjs.map → Popover-DlXyKYL5.mjs.map} +1 -1
  143. package/dist/ProgressIndicator.d.mts +5 -3
  144. package/dist/{PseudoClassProps-DgT5G_z5.d.mts → PseudoClassProps-BPdn-ofQ.d.mts} +1 -1
  145. package/dist/PseudoClassProps.d.mts +1 -1
  146. package/dist/{Radio-DSMPX5_2.mjs → Radio-DYGEt0FT.mjs} +3 -3
  147. package/dist/{Radio-DSMPX5_2.mjs.map → Radio-DYGEt0FT.mjs.map} +1 -1
  148. package/dist/{RadioGroup-Jl1yAvGu.d.mts → RadioGroup-DYIfRj02.d.mts} +1 -1
  149. package/dist/{RadioGroup-D5IITQLz.mjs → RadioGroup-pegXtLwD.mjs} +2 -2
  150. package/dist/{RadioGroup-D5IITQLz.mjs.map → RadioGroup-pegXtLwD.mjs.map} +1 -1
  151. package/dist/RadioGroup.d.mts +1 -1
  152. package/dist/RangeCalendar.d.mts +5 -0
  153. package/dist/RangeCalendarPresets.d.mts +12 -2
  154. package/dist/ResizableVerticalPanel.d.mts +22 -0
  155. package/dist/ResizeHandle.d.mts +19 -0
  156. package/dist/RightPanel.d.mts +41 -0
  157. package/dist/RightPanelLoadingContent.d.mts +7 -0
  158. package/dist/RightPanelResizeHandle.d.mts +14 -0
  159. package/dist/RuleEditorFields.d.mts +4 -4
  160. package/dist/RulesPill.d.mts +1 -1
  161. package/dist/{SearchInput-CaKHRC_s.d.mts → SearchInput-Dc90GLTF.d.mts} +2 -2
  162. package/dist/SearchInput.d.mts +1 -1
  163. package/dist/SectionHeading.d.mts +1 -1
  164. package/dist/{SegmentedControl-e6xDtoHC.d.mts → SegmentedControl-DIHonamg.d.mts} +1 -1
  165. package/dist/{SegmentedControl-JUgRw_M-.mjs → SegmentedControl-DwbltwDQ.mjs} +2 -2
  166. package/dist/{SegmentedControl-JUgRw_M-.mjs.map → SegmentedControl-DwbltwDQ.mjs.map} +1 -1
  167. package/dist/SegmentedControl.d.mts +1 -1
  168. package/dist/{Select-DX3toj6M.mjs → Select-CBVvPyRJ.mjs} +7 -8
  169. package/dist/Select-CBVvPyRJ.mjs.map +1 -0
  170. package/dist/{Select-CPYztD4m.d.mts → Select-DwqWnWBi.d.mts} +3 -3
  171. package/dist/Select.d.mts +1 -1
  172. package/dist/{Spinner-D3wXIoXN.mjs → Spinner-e725Rxkd.mjs} +2 -2
  173. package/dist/{Spinner-D3wXIoXN.mjs.map → Spinner-e725Rxkd.mjs.map} +1 -1
  174. package/dist/{Stack-DHaK1-dw.d.mts → Stack-6eOrxjJi.d.mts} +2 -2
  175. package/dist/Stack.d.mts +1 -1
  176. package/dist/{Sticker-CQ6sOKUj.mjs → Sticker-By3F8Aip.mjs} +4 -4
  177. package/dist/{Sticker-CQ6sOKUj.mjs.map → Sticker-By3F8Aip.mjs.map} +1 -1
  178. package/dist/{Sticker-DnSemOcW.d.mts → Sticker-Ep6N4Exq.d.mts} +5 -5
  179. package/dist/Sticker.d.mts +1 -1
  180. package/dist/StringValueControl.d.mts +1 -1
  181. package/dist/Tab.d.mts +2 -2
  182. package/dist/{TabBar-sYllYizt.mjs → TabBar-CWF65Tv4.mjs} +5 -5
  183. package/dist/{TabBar-sYllYizt.mjs.map → TabBar-CWF65Tv4.mjs.map} +1 -1
  184. package/dist/TabBarIconButton.d.mts +2 -2
  185. package/dist/{Table-CFbPINKr.d.mts → Table-BOcWdwpv.d.mts} +1 -1
  186. package/dist/{Table-C2pkP5Xg.mjs → Table-nWd5ZVbm.mjs} +6 -6
  187. package/dist/{Table-C2pkP5Xg.mjs.map → Table-nWd5ZVbm.mjs.map} +1 -1
  188. package/dist/Table.d.mts +1 -1
  189. package/dist/{TableBody-BQsGc4Lw.d.mts → TableBody-BFPFaZnD.d.mts} +1 -1
  190. package/dist/TableBody.d.mts +1 -1
  191. package/dist/{TableBox-CaTHcR4F.mjs → TableBox-Bd-H5oyh.mjs} +23 -17
  192. package/dist/{TableBox-CaTHcR4F.mjs.map → TableBox-Bd-H5oyh.mjs.map} +1 -1
  193. package/dist/TableBox.d.mts +2 -2
  194. package/dist/{TableBoxCell-52g97gEg.d.mts → TableBoxCell-Cjlc_xJz.d.mts} +11 -8
  195. package/dist/TableBoxCell.d.mts +1 -1
  196. package/dist/TableBoxField.d.mts +3 -3
  197. package/dist/{TableBoxRow-DnoumHIE.d.mts → TableBoxRow-CKDjNUsU.d.mts} +3 -3
  198. package/dist/TableBoxRow.d.mts +1 -1
  199. package/dist/{TableBoxRowActions-CDcREhP4.d.mts → TableBoxRowActions-BJ8ue3Bk.d.mts} +2 -2
  200. package/dist/TableBoxRowActions.d.mts +1 -1
  201. package/dist/TableCell.d.mts +1 -1
  202. package/dist/{TableControls-3bXyd8gS.mjs → TableControls-BnesnTue.mjs} +245 -52
  203. package/dist/TableControls-BnesnTue.mjs.map +1 -0
  204. package/dist/{TableControls-CrGGlkEG.d.mts → TableControls-D8xMNgyS.d.mts} +4 -3
  205. package/dist/TableControls.d.mts +1 -1
  206. package/dist/{TableControlsContext-BKZt2Jid.d.mts → TableControlsContext-ChFsFEjR.d.mts} +2 -2
  207. package/dist/TableControlsContext.d.mts +1 -1
  208. package/dist/{TableHead-CqVIJfjh.d.mts → TableHead-CWDxuy5V.d.mts} +1 -1
  209. package/dist/TableHead.d.mts +1 -1
  210. package/dist/{TableHeaderCell-DK4R8vdK.d.mts → TableHeaderCell-C_sIU1d7.d.mts} +1 -1
  211. package/dist/TableHeaderCell.d.mts +1 -1
  212. package/dist/{TableLayout-BcIazRB-.d.mts → TableLayout-CgGhKU_A.d.mts} +1 -1
  213. package/dist/TableLayout.d.mts +1 -1
  214. package/dist/{TableRow-DdJcjG2b.d.mts → TableRow-B1UKlbze.d.mts} +2 -2
  215. package/dist/TableRow.d.mts +1 -1
  216. package/dist/TableTH.d.mts +1 -1
  217. package/dist/{TableViewConfigurationDropdown-CHBOjw7O.d.mts → TableViewConfigurationDropdown-BqB7pOh8.d.mts} +2 -2
  218. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  219. package/dist/{TechnicalSticker-D3eeGMDR.mjs → TechnicalSticker-Ct2WnNzJ.mjs} +3 -3
  220. package/dist/{TechnicalSticker-D3eeGMDR.mjs.map → TechnicalSticker-Ct2WnNzJ.mjs.map} +1 -1
  221. package/dist/{Text-BIgrwIdS.d.mts → Text-BzzUdBdc.d.mts} +4 -4
  222. package/dist/Text.d.mts +1 -1
  223. package/dist/{TextArea-CiLttt0s.d.mts → TextArea-CGpY5xqX.d.mts} +2 -2
  224. package/dist/{TextArea-DWXuV2aZ.mjs → TextArea-CospIXEO.mjs} +2 -2
  225. package/dist/{TextArea-DWXuV2aZ.mjs.map → TextArea-CospIXEO.mjs.map} +1 -1
  226. package/dist/TextArea.d.mts +1 -1
  227. package/dist/{TextUnderlineTooltip-_7mIrZ2-.d.mts → TextUnderlineTooltip-DZYGjJq1.d.mts} +3 -3
  228. package/dist/TextUnderlineTooltip.d.mts +1 -1
  229. package/dist/Tile.d.mts +1 -1
  230. package/dist/Toast.d.mts +1 -1
  231. package/dist/{Toggle-Cav7bMxg.d.mts → Toggle-BjAivdyX.d.mts} +1 -1
  232. package/dist/{Toggle-e8DCYa6i.mjs → Toggle-Do5z1VcO.mjs} +5 -5
  233. package/dist/{Toggle-e8DCYa6i.mjs.map → Toggle-Do5z1VcO.mjs.map} +1 -1
  234. package/dist/Toggle.d.mts +1 -1
  235. package/dist/{Tooltip-iJcfJqxn.mjs → Tooltip-DSKGD33G.mjs} +2 -2
  236. package/dist/{Tooltip-iJcfJqxn.mjs.map → Tooltip-DSKGD33G.mjs.map} +1 -1
  237. package/dist/{Tooltip-DX-N-szt.d.mts → Tooltip-n3XkX4dp.d.mts} +3 -3
  238. package/dist/Tooltip.d.mts +1 -1
  239. package/dist/{TruncatedText-D2R7uy_y.d.mts → TruncatedText-C-MJPIRi.d.mts} +2 -2
  240. package/dist/codec-B0dZTwlG.d.mts +29 -0
  241. package/dist/codec.d.mts +2 -0
  242. package/dist/components/Attribute/index.mjs +3 -3
  243. package/dist/components/Badge/index.mjs +1 -1
  244. package/dist/components/Banner/index.mjs +2 -2
  245. package/dist/components/BottomPanel/index.d.mts +2 -0
  246. package/dist/components/BottomPanel/index.mjs +293 -0
  247. package/dist/components/BottomPanel/index.mjs.map +1 -0
  248. package/dist/components/Breadcrumbs/index.d.mts +1 -1
  249. package/dist/components/Breadcrumbs/index.mjs +1 -1
  250. package/dist/components/Button/index.d.mts +2 -2
  251. package/dist/components/Button/index.mjs +1 -1
  252. package/dist/components/ButtonGroup/index.mjs +2 -2
  253. package/dist/components/Card/index.d.mts +2 -2
  254. package/dist/components/CardV2/index.d.mts +1 -1
  255. package/dist/components/CardV2/index.mjs +1 -1
  256. package/dist/components/Checkbox/index.d.mts +1 -1
  257. package/dist/components/Checkbox/index.mjs +1 -1
  258. package/dist/components/Combobox/index.d.mts +2 -2
  259. package/dist/components/Combobox/index.mjs +1 -1
  260. package/dist/components/ConfigFormGroup/index.mjs +2 -2
  261. package/dist/components/DataTable/TableControls/index.d.mts +20 -16
  262. package/dist/components/DataTable/TableControls/index.mjs +2 -2
  263. package/dist/components/DataTable/index.mjs +16 -23
  264. package/dist/components/DataTable/index.mjs.map +1 -1
  265. package/dist/components/DataTable/types.d.mts +2 -2
  266. package/dist/components/DatePicker/index.d.mts +5 -5
  267. package/dist/components/DatePicker/index.mjs +1 -1
  268. package/dist/components/DropdownButton/index.mjs +1 -1
  269. package/dist/components/DropdownMenu/index.d.mts +1 -1
  270. package/dist/components/DropdownMenu/index.mjs +1 -1
  271. package/dist/components/FloatingPanel/index.mjs +3 -3
  272. package/dist/components/FormControl/index.d.mts +2 -2
  273. package/dist/components/FormControl/index.mjs +2 -2
  274. package/dist/components/FormField/index.d.mts +1 -1
  275. package/dist/components/FormField/index.mjs +1 -1
  276. package/dist/components/Grid/index.d.mts +3 -0
  277. package/dist/components/Grid/index.mjs +85 -0
  278. package/dist/components/Grid/index.mjs.map +1 -0
  279. package/dist/components/HoverCopyableField/index.mjs +1 -1
  280. package/dist/components/ImageTile/index.mjs +7 -7
  281. package/dist/components/Input/index.d.mts +1 -1
  282. package/dist/components/Input/index.mjs +1 -1
  283. package/dist/components/Link/index.mjs +2 -2
  284. package/dist/components/ListBox/index.d.mts +3 -3
  285. package/dist/components/ListBox/index.mjs +1 -1
  286. package/dist/components/LoadingShimmer/index.mjs +1 -1
  287. package/dist/components/MaskedInput/index.mjs +1 -1
  288. package/dist/components/Menu/index.d.mts +1 -1
  289. package/dist/components/Menu/index.mjs +1 -1
  290. package/dist/components/Modal/index.mjs +2 -2
  291. package/dist/components/PageHeader/index.mjs +1 -1
  292. package/dist/components/Pagination/index.d.mts +3 -3
  293. package/dist/components/Pagination/index.mjs +1 -1
  294. package/dist/components/Pii/index.mjs +1 -1
  295. package/dist/components/Popover/index.mjs +1 -1
  296. package/dist/components/ProgressBar/index.mjs +1 -1
  297. package/dist/components/ProgressIndicator/index.mjs +13 -9
  298. package/dist/components/ProgressIndicator/index.mjs.map +1 -1
  299. package/dist/components/Radio/index.mjs +1 -1
  300. package/dist/components/RadioGroup/index.d.mts +1 -1
  301. package/dist/components/RadioGroup/index.mjs +1 -1
  302. package/dist/components/RightPanel/index.d.mts +2 -0
  303. package/dist/components/RightPanel/index.mjs +294 -0
  304. package/dist/components/RightPanel/index.mjs.map +1 -0
  305. package/dist/components/SegmentedControl/index.d.mts +1 -1
  306. package/dist/components/SegmentedControl/index.mjs +1 -1
  307. package/dist/components/Select/index.d.mts +1 -1
  308. package/dist/components/Select/index.mjs +1 -1
  309. package/dist/components/Slider/index.mjs +2 -2
  310. package/dist/components/Spinner/index.mjs +1 -1
  311. package/dist/components/Stack/index.d.mts +1 -1
  312. package/dist/components/StatusIndicator/index.mjs +1 -1
  313. package/dist/components/Sticker/index.d.mts +1 -1
  314. package/dist/components/Sticker/index.mjs +1 -1
  315. package/dist/components/TabBar/index.mjs +1 -1
  316. package/dist/components/Table/index.d.mts +7 -7
  317. package/dist/components/Table/index.mjs +1 -1
  318. package/dist/components/TableBox/index.d.mts +2 -2
  319. package/dist/components/TableBox/index.mjs +1 -1
  320. package/dist/components/TechnicalSticker/index.mjs +1 -1
  321. package/dist/components/Text/index.d.mts +1 -1
  322. package/dist/components/TextArea/index.d.mts +1 -1
  323. package/dist/components/TextArea/index.mjs +1 -1
  324. package/dist/components/Tile/index.mjs +2 -2
  325. package/dist/components/Toast/index.mjs +4 -4
  326. package/dist/components/Toggle/index.d.mts +1 -1
  327. package/dist/components/Toggle/index.mjs +1 -1
  328. package/dist/components/Tooltip/index.d.mts +3 -3
  329. package/dist/components/Tooltip/index.mjs +1 -1
  330. package/dist/compound-expression.d.mts +1 -1
  331. package/dist/{constants-bA9kCzRQ.d.mts → constants-Bs94Jw4y.d.mts} +1 -1
  332. package/dist/constants.d.mts +1 -1
  333. package/dist/date-filter-BbWgAXy3.mjs +176 -0
  334. package/dist/date-filter-BbWgAXy3.mjs.map +1 -0
  335. package/dist/date-range-rule-value-DBEEWTQp.d.mts +17 -0
  336. package/dist/date-range-rule-value.d.mts +2 -0
  337. package/dist/date-rule-intent-BArNGT2E.d.mts +20 -0
  338. package/dist/date-rule-intent.d.mts +2 -0
  339. package/dist/display.d.mts +2 -2
  340. package/dist/fieldPickerOptions.d.mts +2 -2
  341. package/dist/{filter-size-context-C7injfBh.d.mts → filter-size-context-D1UhTwOG.d.mts} +2 -2
  342. package/dist/filter-size-context.d.mts +1 -1
  343. package/dist/helpers.d.mts +1 -1
  344. package/dist/{index-d_fTFuMM.d.mts → index-CvBvfQAY.d.mts} +4 -4
  345. package/dist/{index-BPfK-u7y.d.mts → index-DASkW991.d.mts} +2 -2
  346. package/dist/{index-BxBsQi2S.d.mts → index-I_Cy3X5R.d.mts} +3 -3
  347. package/dist/index-e6k85DKM.d.mts +1 -0
  348. package/dist/index-ehD5GjMH.d.mts +1 -0
  349. package/dist/index-uY8Qbwfx.d.mts +1 -0
  350. package/dist/index.d.mts +1 -1
  351. package/dist/index2.d.mts +1 -1
  352. package/dist/index3.d.mts +3 -3
  353. package/dist/index4.d.mts +2 -11
  354. package/dist/index5.d.mts +15 -2
  355. package/dist/{input-D9FuQmlI.d.mts → input-M7BEIewR.d.mts} +3 -3
  356. package/dist/inputFields.d.mts +10 -10
  357. package/dist/{intersperse-CLkblj9A.mjs → intersperse-CRUnXmnu.mjs} +1 -1
  358. package/dist/{intersperse-CLkblj9A.mjs.map → intersperse-CRUnXmnu.mjs.map} +1 -1
  359. package/dist/lib/PDSProvider.d.mts +1 -1
  360. package/dist/lib/TruncatedText.d.mts +1 -1
  361. package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
  362. package/dist/lib/TruncatedTextWithTooltip.mjs +1 -1
  363. package/dist/lib/date-filter/index.d.mts +3 -0
  364. package/dist/lib/date-filter/index.mjs +2 -0
  365. package/dist/lib/message.d.mts +1 -1
  366. package/dist/lib/pseudoClass.d.mts +1 -1
  367. package/dist/lib/useResizablePanel.d.mts +49 -0
  368. package/dist/lib/useResizablePanel.mjs +75 -0
  369. package/dist/lib/useResizablePanel.mjs.map +1 -0
  370. package/dist/{message-CqKB5mko.d.mts → message-CyxgAWZl.d.mts} +1 -1
  371. package/dist/mixins/focus.d.mts +1 -1
  372. package/dist/mixins/hoverable.d.mts +2 -2
  373. package/dist/mixins/hoverable.mjs +1 -1
  374. package/dist/mixins/input.d.mts +1 -1
  375. package/dist/mixins/input.mjs +1 -1
  376. package/dist/mixins/menuItem.d.mts +2 -2
  377. package/dist/mixins/text.d.mts +1 -1
  378. package/dist/{operators-CgcsYzfy.d.mts → operators-CXkmvFpP.d.mts} +10 -3
  379. package/dist/operators.d.mts +2 -2
  380. package/dist/patterns/LayoutLoadingShimmer/index.mjs +4 -4
  381. package/dist/relative-date-label.d.mts +15 -0
  382. package/dist/{text-xwtyWIbE.d.mts → text-DjTGRUM1.d.mts} +1 -1
  383. package/dist/{theme-Ftogn9Wo.d.mts → theme-Biwx2eJZ.d.mts} +1 -1
  384. package/dist/theme.d.mts +1 -1
  385. package/dist/types-Bsf1VsW6.d.mts +24 -0
  386. package/dist/{types-BrNreYUU.d.mts → types-DBBfOCX1.d.mts} +5 -3
  387. package/dist/{types-0_9G0kWg.d.mts → types-Df0D37uh.d.mts} +1 -1
  388. package/dist/{types-DVsBRqjZ.d.mts → types-Ds43XULD.d.mts} +1 -1
  389. package/dist/{types-D55MZSyx.d.mts → types-V8UJX-rk.d.mts} +14 -2
  390. package/dist/types.d.mts +1 -1
  391. package/dist/types2.d.mts +2 -2
  392. package/dist/types3.d.mts +2 -2
  393. package/dist/types4.d.mts +2 -2
  394. package/dist/types5.d.mts +2 -0
  395. package/dist/url-state-M64mdtQ2.d.mts +42 -0
  396. package/dist/url-state.d.mts +2 -0
  397. package/dist/useComboboxFooterAction.d.mts +1 -1
  398. package/dist/{useFilterStateV2-D8Q8QKhS.d.mts → useFilterStateV2-gALqONXf.d.mts} +3 -3
  399. package/dist/useFilterStateV2.d.mts +1 -1
  400. package/dist/{useFormField-BBbq1izo.d.mts → useFormField-Bo7oHMof.d.mts} +2 -2
  401. package/dist/{useFormField-Bz2iMPBO.mjs → useFormField-C-K1lgmv.mjs} +2 -2
  402. package/dist/{useFormField-Bz2iMPBO.mjs.map → useFormField-C-K1lgmv.mjs.map} +1 -1
  403. package/dist/useFormField.d.mts +1 -1
  404. package/dist/{useFormGroup-CaTiD_Yt.mjs → useFormGroup-y-duFylq.mjs} +1 -1
  405. package/dist/{useFormGroup-CaTiD_Yt.mjs.map → useFormGroup-y-duFylq.mjs.map} +1 -1
  406. package/dist/{useTableBoxDragAndDrop-Bye8gJTl.d.mts → useTableBoxDragAndDrop-BrJFRSaG.d.mts} +1 -1
  407. package/dist/useTableBoxDragAndDrop.d.mts +1 -1
  408. package/dist/useTruncation.d.mts +1 -1
  409. package/dist/{utilities-Bmwk_DRn.d.mts → utilities-BHMNnJ8h.d.mts} +1 -1
  410. package/dist/utilities.d.mts +1 -1
  411. package/dist/utils.d.mts +1 -1
  412. package/dist/{validation-CAtTuHO9.d.mts → validation-BCBIvN6H.d.mts} +3 -3
  413. package/dist/validation.d.mts +1 -1
  414. package/dist/{value-control-resolver-DadI8r9a.d.mts → value-control-resolver-qKTH1ErF.d.mts} +5 -3
  415. package/dist/value-control-resolver.d.mts +1 -1
  416. package/llms.txt +3 -3
  417. package/package.json +11 -1
  418. package/skills/ui-authoring/COMPONENTS.md +2 -0
  419. package/skills/ui-authoring/PATTERNS.md +3 -1
  420. package/skills/ui-authoring/SKILL.md +2 -2
  421. package/dist/DatePicker-BNnZ6L1y.mjs.map +0 -1
  422. package/dist/FormField-CVnbsNvU.mjs.map +0 -1
  423. package/dist/Select-DX3toj6M.mjs.map +0 -1
  424. package/dist/TableControls-3bXyd8gS.mjs.map +0 -1
  425. /package/dist/{index-0-W_aPej.d.mts → index--p6oQT9I.d.mts} +0 -0
  426. /package/dist/{index-7in8TPrM.d.mts → index-7rWKHdox.d.mts} +0 -0
  427. /package/dist/{index-BINnViIh.d.mts → index-8SLBz2NH.d.mts} +0 -0
  428. /package/dist/{index-BNRXMhlr.d.mts → index-Bt4QNofW.d.mts} +0 -0
  429. /package/dist/{index-BO_854F2.d.mts → index-BwFl_eS0.d.mts} +0 -0
  430. /package/dist/{index-BSVhZrWN.d.mts → index-CCKHlTA4.d.mts} +0 -0
  431. /package/dist/{index-BrGZHEgX.d.mts → index-CMuRFTR3.d.mts} +0 -0
  432. /package/dist/{index-CCt0lwyI.d.mts → index-CRo77wc3.d.mts} +0 -0
  433. /package/dist/{index-CFhUdAHM.d.mts → index-CX869wwk.d.mts} +0 -0
  434. /package/dist/{index-CREkvfw9.d.mts → index-CuheJfs-.d.mts} +0 -0
  435. /package/dist/{index-CROz1VSV.d.mts → index-D13oYj4_.d.mts} +0 -0
  436. /package/dist/{index-CsuikFeJ.d.mts → index-D4DUvwPf.d.mts} +0 -0
  437. /package/dist/{index-CzUpNo0e.d.mts → index-D7UbuJwP.d.mts} +0 -0
  438. /package/dist/{index-DM6vVDZD.d.mts → index-DMRtRo7y.d.mts} +0 -0
  439. /package/dist/{index-DeVKzGce.d.mts → index-Dflz2i1X.d.mts} +0 -0
  440. /package/dist/{index-Jh0C5PIG.d.mts → index-DvmLVvRD.d.mts} +0 -0
  441. /package/dist/{index-Oio5ygqN.d.mts → index-Es5nKSSL.d.mts} +0 -0
  442. /package/dist/{index-PWQavSPf.d.mts → index-Wc1llEvP.d.mts} +0 -0
  443. /package/dist/{index-sViox9YW.d.mts → index-dhjtMp5F.d.mts} +0 -0
@@ -1,4 +1,4 @@
1
- import { t as PaginationParams } from "./types-DVsBRqjZ.mjs";
1
+ import { t as PaginationParams } from "./types-Ds43XULD.mjs";
2
2
  import * as _$styled_components0 from "styled-components";
3
3
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
@@ -36,4 +36,4 @@ declare const Pagination: ({
36
36
  }: PaginationProps) => _$react_jsx_runtime0.JSX.Element;
37
37
  //#endregion
38
38
  export { PaginationInfo as n, Pagination as t };
39
- //# sourceMappingURL=Pagination-Dcmv7bVe.d.mts.map
39
+ //# sourceMappingURL=Pagination-BkjmybcI.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { a as styled } from "./styledComponentsInterop-8zScIQyC.mjs";
2
2
  import { t as HStack } from "./Stack-Bre2oiov.mjs";
3
- import { n as Button } from "./IconButton-BgL3QUVO.mjs";
4
- import { n as Input } from "./Input-DoB8YswA.mjs";
5
- import { n as Select, t as Option } from "./Select-DX3toj6M.mjs";
3
+ import { n as Button } from "./IconButton-BnSEV7eR.mjs";
4
+ import { n as Input } from "./Input-D7of_GtJ.mjs";
5
+ import { n as Select, t as Option } from "./Select-CBVvPyRJ.mjs";
6
6
  import { Color, Spacing, Typography } from "@persona/design-tokens";
7
7
  import { useEffect, useMemo, useState } from "react";
8
8
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -202,4 +202,4 @@ var Pagination_default = Pagination;
202
202
  //#endregion
203
203
  export { MIN_PAGE_SIZE as a, DEFAULT_PAGE_SIZE_OPTIONS as i, PAGE_LIMIT_BEFORE_SCROLL_MODE as n, PageSelector as r, Pagination_default as t };
204
204
 
205
- //# sourceMappingURL=Pagination-DvVKQLdC.mjs.map
205
+ //# sourceMappingURL=Pagination-CVRTcKSG.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination-DvVKQLdC.mjs","names":[],"sources":["../components/Pagination/constants.ts","../components/Pagination/PageSelector.tsx","../components/Pagination/PageSizeSelector.tsx","../components/Pagination/Pagination.tsx","../components/Pagination/index.ts"],"sourcesContent":["export const DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100, 300];\nexport const MIN_PAGE_SIZE = 10;\n","import { debounce } from 'lodash-es';\nimport { useEffect, useMemo, useState } from 'react';\nimport styled from 'styled-components';\n\nimport Button from '@persona/design-system/components/Button';\nimport { Input } from '@persona/design-system/components/Input';\nimport { HStack } from '@persona/design-system/components/Stack';\nimport { Spacing } from '@persona/design-tokens';\n\nimport type { PaginationParams } from './types';\n\n// After a certain limit, it no longer makes sense for someone\n// to jump to the last page. Deep paging has performance limitations.\nexport const PAGE_LIMIT_BEFORE_SCROLL_MODE = 100;\n\nconst PageSelectorStack = styled(HStack).attrs({ justify: 'flex-end' })`\n padding: ${Spacing[2]};\n`;\n\nexport const PageInput = styled(HStack).attrs({ align: 'center' })`\n white-space: nowrap;\n`;\n\ninterface PageSelectorProps {\n paginationParams: PaginationParams;\n handlePageLinkClick: (pageNumber: number) => void;\n isLoading?: boolean;\n /**\n * Called with the new page number after the page changes (next, prev, or\n * typed input). Lets the consumer react to page changes -- e.g. scroll the\n * page back to the top.\n */\n onPageChange?: (pageNumber: number) => void;\n}\n\nexport default function PageSelector({\n paginationParams,\n handlePageLinkClick,\n isLoading,\n onPageChange,\n}: PageSelectorProps) {\n const {\n 'current-page': currentPage,\n 'total-pages': totalPages,\n 'lower-bound': lowerBound,\n } = paginationParams ?? {};\n const [selectedPage, setSelectedPage] = useState<number | undefined>(currentPage);\n\n // We don't use useDebounced to avoid function object reference issues.\n const handlePageLinkClickDebounced = useMemo(\n () => debounce(handlePageLinkClick, 500),\n [handlePageLinkClick],\n );\n\n // Keep input state synced to pagination state when other user action changes\n // pagination state.\n useEffect(() => {\n if (currentPage != null) {\n setSelectedPage(currentPage);\n }\n }, [currentPage]);\n\n if (!paginationParams) {\n return <div />;\n }\n\n return (\n <PageSelectorStack data-test='pagination__page-selector' id='pagination__page-selector'>\n <PageInput>\n {totalPages < PAGE_LIMIT_BEFORE_SCROLL_MODE && !lowerBound ? (\n <Input\n aria-label='Go to page number'\n size='sm'\n inputSize={2}\n onChange={(e) => {\n const value = e.target.valueAsNumber;\n if (Number.isNaN(value)) {\n setSelectedPage(undefined);\n } else {\n // Setting unbounded value feels smoother as the value is not corrected until after the fetch via useEffect.\n setSelectedPage(value);\n const boundedValue = Math.min(Math.max(e.target.valueAsNumber, 1), totalPages);\n handlePageLinkClickDebounced(boundedValue);\n onPageChange?.(boundedValue);\n }\n }}\n onBlur={(e) => {\n // Fill blank value on blur.\n if (Number.isNaN(e.target.valueAsNumber)) {\n setSelectedPage(currentPage);\n }\n }}\n min={1}\n max={totalPages}\n type='number'\n disabled={isLoading}\n value={selectedPage ?? ''}\n />\n ) : (\n currentPage + ' '\n )}\n of {lowerBound ? 'many' : totalPages} pages\n </PageInput>\n <Button\n id='pagination__page-selector--left'\n disabled={currentPage === 1 || isLoading}\n onClick={() => {\n if (currentPage !== 1) {\n const prevPageNum = currentPage - 1;\n setSelectedPage(prevPageNum);\n handlePageLinkClick(prevPageNum);\n onPageChange?.(prevPageNum);\n }\n }}\n data-test='pagination__page-selector-paddle-left'\n variant='inverse'\n size='sm'\n width='auto'\n aria-label='Previous page'\n >\n Prev\n </Button>\n <Button\n id='pagination__page-selector--right'\n disabled={(currentPage === totalPages && !lowerBound) || isLoading}\n onClick={() => {\n if (currentPage !== totalPages || lowerBound) {\n const nextPageNum = currentPage + 1;\n setSelectedPage(nextPageNum);\n handlePageLinkClick(nextPageNum);\n onPageChange?.(nextPageNum);\n }\n }}\n data-test='pagination__page-selector-paddle-right'\n variant='inverse'\n size='sm'\n width='auto'\n aria-label='Next page'\n >\n Next\n </Button>\n </PageSelectorStack>\n );\n}\n","import styled from 'styled-components';\n\nimport Select, { Option } from '@persona/design-system/components/Select';\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\n\nconst Selector = styled('div')`\n padding: ${Spacing[2]};\n display: flex;\n justify-content: flex-end;\n`;\n\nconst Label = styled.label`\n display: flex;\n align-items: center;\n white-space: nowrap;\n gap: ${Spacing[2]};\n padding: ${Spacing[2]};\n`;\n\ninterface PageSizeOptionProps {\n currentPageSize: number;\n pageSizeOption: number;\n}\n\nexport const PageSizeOption = styled('div')<PageSizeOptionProps>`\n padding: 0 ${Spacing[1]};\n color: ${Color.PrimaryPurple};\n cursor: pointer;\n\n ${({ currentPageSize, pageSizeOption }) => {\n if (currentPageSize === pageSizeOption) {\n return `\n ${Typography.TextMediumBold};\n text-decoration: underline;\n `;\n }\n }};\n\n &:hover {\n text-decoration: underline;\n }\n`;\n\ninterface PageSizeSelectorProps {\n pageSize: number;\n pageSizeOptions: number[];\n handlePageSizeClick: (pageSize: number) => void;\n /**\n * Element the options menu renders into. Pass a container inside the surrounding dialog when the\n * pager sits in a clipping container, where the menu would otherwise be cut off.\n */\n menuPortalContainer?: HTMLElement | null;\n}\n\nconst PageSizeSelector = ({\n pageSize,\n pageSizeOptions,\n handlePageSizeClick,\n menuPortalContainer,\n}: PageSizeSelectorProps) => {\n // Add pageSize to selector just in case it isn't part of the options so UI doesn't look weird\n const pageSizes = [\n ...pageSizeOptions,\n ...(pageSizeOptions.includes(pageSize) ? [] : [pageSize]),\n ].sort((a, b) => a - b);\n\n return (\n <Selector data-test='pagination__page-size-selector'>\n <Label>\n Items per page:\n <Select\n value={pageSize.toString()}\n onValueChange={(val) => handlePageSizeClick(Number(val))}\n size='sm'\n portal={menuPortalContainer != null}\n portalContainer={menuPortalContainer}\n >\n {pageSizes.map((size) => (\n <Option key={size} value={size.toString()}>\n {size}\n </Option>\n ))}\n </Select>\n </Label>\n </Selector>\n );\n};\n\nexport default PageSizeSelector;\n","import styled from 'styled-components';\n\nimport { Color, Typography } from '@persona/design-tokens';\n\nimport { DEFAULT_PAGE_SIZE_OPTIONS } from './constants';\nimport PageSelector from './PageSelector';\nimport PageSizeSelector from './PageSizeSelector';\nimport type { PaginationParams } from './types';\n\n// NB: this is configured in config/initializers/kaminari.rb\nconst MAX_PAGES = 100;\n\nconst Container = styled('nav')`\n ${Typography.TextMedium};\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nexport const PaginationInfo = styled('div')`\n display: flex;\n align-items: center;\n\n color: ${Color.TextPrimary};\n`;\n\ninterface PaginationProps {\n pageSize?: number;\n pageSizeOptions?: number[];\n paginationParams?: PaginationParams;\n handlePageSizeClick: (pageSize: number) => void;\n handlePageLinkClick: (pageNumber: number) => void;\n isLoading?: boolean;\n showPageSizeSelector?: boolean;\n /**\n * Called with the new page number after the page changes. Lets the consumer\n * react to page changes -- e.g. scroll the page back to the top.\n */\n onPageChange?: (pageNumber: number) => void;\n /**\n * Element the page-size menu renders into. Pass a container inside the surrounding dialog when\n * the pager sits in a clipping container, where the menu would otherwise be cut off.\n */\n menuPortalContainer?: HTMLElement | null;\n}\n\nconst Pagination = ({\n pageSize,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n paginationParams,\n handlePageSizeClick,\n handlePageLinkClick,\n isLoading,\n showPageSizeSelector = true,\n onPageChange,\n menuPortalContainer,\n}: PaginationProps) => {\n if (!paginationParams || !pageSize) {\n return <div />;\n }\n\n const {\n 'current-page': currentPage,\n 'total-count': totalCount,\n 'total-pages': totalPages,\n 'lower-bound': lowerBound,\n } = paginationParams;\n\n // If the total number of pages is the same as MAX_PAGES, we guess that the total number of\n // items might be limited by max pages, and that the total could change based on page size.\n // To limit user confusion here, we use 'many' instead of a specific number.\n const totalCountDisplay = lowerBound || totalPages >= MAX_PAGES ? 'many' : totalCount;\n\n const lastItemIndex = lowerBound\n ? currentPage * pageSize\n : Math.min(currentPage * pageSize, totalCount);\n const firstItemIndex = pageSize * (currentPage - 1) + 1;\n\n return (\n <Container role='navigation' aria-label='pagination'>\n {showPageSizeSelector && (\n <PageSizeSelector\n pageSize={pageSize}\n pageSizeOptions={pageSizeOptions}\n handlePageSizeClick={handlePageSizeClick}\n menuPortalContainer={menuPortalContainer}\n />\n )}\n {totalCount > 0 && (\n <>\n <div>\n Showing {firstItemIndex}-{lastItemIndex} of {totalCountDisplay} items\n </div>\n <PaginationInfo>\n <PageSelector\n paginationParams={paginationParams}\n handlePageLinkClick={handlePageLinkClick}\n isLoading={isLoading}\n onPageChange={onPageChange}\n />\n </PaginationInfo>\n </>\n )}\n </Container>\n );\n};\n\nexport default Pagination;\n","import Pagination from './Pagination';\n\nexport { default as PageSelector, PAGE_LIMIT_BEFORE_SCROLL_MODE } from './PageSelector';\nexport * from './constants';\nexport default Pagination;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Pagination-CVRTcKSG.mjs","names":[],"sources":["../components/Pagination/constants.ts","../components/Pagination/PageSelector.tsx","../components/Pagination/PageSizeSelector.tsx","../components/Pagination/Pagination.tsx","../components/Pagination/index.ts"],"sourcesContent":["export const DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100, 300];\nexport const MIN_PAGE_SIZE = 10;\n","import { debounce } from 'lodash-es';\nimport { useEffect, useMemo, useState } from 'react';\nimport styled from 'styled-components';\n\nimport Button from '@persona/design-system/components/Button';\nimport { Input } from '@persona/design-system/components/Input';\nimport { HStack } from '@persona/design-system/components/Stack';\nimport { Spacing } from '@persona/design-tokens';\n\nimport type { PaginationParams } from './types';\n\n// After a certain limit, it no longer makes sense for someone\n// to jump to the last page. Deep paging has performance limitations.\nexport const PAGE_LIMIT_BEFORE_SCROLL_MODE = 100;\n\nconst PageSelectorStack = styled(HStack).attrs({ justify: 'flex-end' })`\n padding: ${Spacing[2]};\n`;\n\nexport const PageInput = styled(HStack).attrs({ align: 'center' })`\n white-space: nowrap;\n`;\n\ninterface PageSelectorProps {\n paginationParams: PaginationParams;\n handlePageLinkClick: (pageNumber: number) => void;\n isLoading?: boolean;\n /**\n * Called with the new page number after the page changes (next, prev, or\n * typed input). Lets the consumer react to page changes -- e.g. scroll the\n * page back to the top.\n */\n onPageChange?: (pageNumber: number) => void;\n}\n\nexport default function PageSelector({\n paginationParams,\n handlePageLinkClick,\n isLoading,\n onPageChange,\n}: PageSelectorProps) {\n const {\n 'current-page': currentPage,\n 'total-pages': totalPages,\n 'lower-bound': lowerBound,\n } = paginationParams ?? {};\n const [selectedPage, setSelectedPage] = useState<number | undefined>(currentPage);\n\n // We don't use useDebounced to avoid function object reference issues.\n const handlePageLinkClickDebounced = useMemo(\n () => debounce(handlePageLinkClick, 500),\n [handlePageLinkClick],\n );\n\n // Keep input state synced to pagination state when other user action changes\n // pagination state.\n useEffect(() => {\n if (currentPage != null) {\n setSelectedPage(currentPage);\n }\n }, [currentPage]);\n\n if (!paginationParams) {\n return <div />;\n }\n\n return (\n <PageSelectorStack data-test='pagination__page-selector' id='pagination__page-selector'>\n <PageInput>\n {totalPages < PAGE_LIMIT_BEFORE_SCROLL_MODE && !lowerBound ? (\n <Input\n aria-label='Go to page number'\n size='sm'\n inputSize={2}\n onChange={(e) => {\n const value = e.target.valueAsNumber;\n if (Number.isNaN(value)) {\n setSelectedPage(undefined);\n } else {\n // Setting unbounded value feels smoother as the value is not corrected until after the fetch via useEffect.\n setSelectedPage(value);\n const boundedValue = Math.min(Math.max(e.target.valueAsNumber, 1), totalPages);\n handlePageLinkClickDebounced(boundedValue);\n onPageChange?.(boundedValue);\n }\n }}\n onBlur={(e) => {\n // Fill blank value on blur.\n if (Number.isNaN(e.target.valueAsNumber)) {\n setSelectedPage(currentPage);\n }\n }}\n min={1}\n max={totalPages}\n type='number'\n disabled={isLoading}\n value={selectedPage ?? ''}\n />\n ) : (\n currentPage + ' '\n )}\n of {lowerBound ? 'many' : totalPages} pages\n </PageInput>\n <Button\n id='pagination__page-selector--left'\n disabled={currentPage === 1 || isLoading}\n onClick={() => {\n if (currentPage !== 1) {\n const prevPageNum = currentPage - 1;\n setSelectedPage(prevPageNum);\n handlePageLinkClick(prevPageNum);\n onPageChange?.(prevPageNum);\n }\n }}\n data-test='pagination__page-selector-paddle-left'\n variant='inverse'\n size='sm'\n width='auto'\n aria-label='Previous page'\n >\n Prev\n </Button>\n <Button\n id='pagination__page-selector--right'\n disabled={(currentPage === totalPages && !lowerBound) || isLoading}\n onClick={() => {\n if (currentPage !== totalPages || lowerBound) {\n const nextPageNum = currentPage + 1;\n setSelectedPage(nextPageNum);\n handlePageLinkClick(nextPageNum);\n onPageChange?.(nextPageNum);\n }\n }}\n data-test='pagination__page-selector-paddle-right'\n variant='inverse'\n size='sm'\n width='auto'\n aria-label='Next page'\n >\n Next\n </Button>\n </PageSelectorStack>\n );\n}\n","import styled from 'styled-components';\n\nimport Select, { Option } from '@persona/design-system/components/Select';\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\n\nconst Selector = styled('div')`\n padding: ${Spacing[2]};\n display: flex;\n justify-content: flex-end;\n`;\n\nconst Label = styled.label`\n display: flex;\n align-items: center;\n white-space: nowrap;\n gap: ${Spacing[2]};\n padding: ${Spacing[2]};\n`;\n\ninterface PageSizeOptionProps {\n currentPageSize: number;\n pageSizeOption: number;\n}\n\nexport const PageSizeOption = styled('div')<PageSizeOptionProps>`\n padding: 0 ${Spacing[1]};\n color: ${Color.PrimaryPurple};\n cursor: pointer;\n\n ${({ currentPageSize, pageSizeOption }) => {\n if (currentPageSize === pageSizeOption) {\n return `\n ${Typography.TextMediumBold};\n text-decoration: underline;\n `;\n }\n }};\n\n &:hover {\n text-decoration: underline;\n }\n`;\n\ninterface PageSizeSelectorProps {\n pageSize: number;\n pageSizeOptions: number[];\n handlePageSizeClick: (pageSize: number) => void;\n /**\n * Element the options menu renders into. Pass a container inside the surrounding dialog when the\n * pager sits in a clipping container, where the menu would otherwise be cut off.\n */\n menuPortalContainer?: HTMLElement | null;\n}\n\nconst PageSizeSelector = ({\n pageSize,\n pageSizeOptions,\n handlePageSizeClick,\n menuPortalContainer,\n}: PageSizeSelectorProps) => {\n // Add pageSize to selector just in case it isn't part of the options so UI doesn't look weird\n const pageSizes = [\n ...pageSizeOptions,\n ...(pageSizeOptions.includes(pageSize) ? [] : [pageSize]),\n ].sort((a, b) => a - b);\n\n return (\n <Selector data-test='pagination__page-size-selector'>\n <Label>\n Items per page:\n <Select\n value={pageSize.toString()}\n onValueChange={(val) => handlePageSizeClick(Number(val))}\n size='sm'\n portal={menuPortalContainer != null}\n portalContainer={menuPortalContainer}\n >\n {pageSizes.map((size) => (\n <Option key={size} value={size.toString()}>\n {size}\n </Option>\n ))}\n </Select>\n </Label>\n </Selector>\n );\n};\n\nexport default PageSizeSelector;\n","import styled from 'styled-components';\n\nimport { Color, Typography } from '@persona/design-tokens';\n\nimport { DEFAULT_PAGE_SIZE_OPTIONS } from './constants';\nimport PageSelector from './PageSelector';\nimport PageSizeSelector from './PageSizeSelector';\nimport type { PaginationParams } from './types';\n\n// NB: this is configured in config/initializers/kaminari.rb\nconst MAX_PAGES = 100;\n\nconst Container = styled('nav')`\n ${Typography.TextMedium};\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nexport const PaginationInfo = styled('div')`\n display: flex;\n align-items: center;\n\n color: ${Color.TextPrimary};\n`;\n\ninterface PaginationProps {\n pageSize?: number;\n pageSizeOptions?: number[];\n paginationParams?: PaginationParams;\n handlePageSizeClick: (pageSize: number) => void;\n handlePageLinkClick: (pageNumber: number) => void;\n isLoading?: boolean;\n showPageSizeSelector?: boolean;\n /**\n * Called with the new page number after the page changes. Lets the consumer\n * react to page changes -- e.g. scroll the page back to the top.\n */\n onPageChange?: (pageNumber: number) => void;\n /**\n * Element the page-size menu renders into. Pass a container inside the surrounding dialog when\n * the pager sits in a clipping container, where the menu would otherwise be cut off.\n */\n menuPortalContainer?: HTMLElement | null;\n}\n\nconst Pagination = ({\n pageSize,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n paginationParams,\n handlePageSizeClick,\n handlePageLinkClick,\n isLoading,\n showPageSizeSelector = true,\n onPageChange,\n menuPortalContainer,\n}: PaginationProps) => {\n if (!paginationParams || !pageSize) {\n return <div />;\n }\n\n const {\n 'current-page': currentPage,\n 'total-count': totalCount,\n 'total-pages': totalPages,\n 'lower-bound': lowerBound,\n } = paginationParams;\n\n // If the total number of pages is the same as MAX_PAGES, we guess that the total number of\n // items might be limited by max pages, and that the total could change based on page size.\n // To limit user confusion here, we use 'many' instead of a specific number.\n const totalCountDisplay = lowerBound || totalPages >= MAX_PAGES ? 'many' : totalCount;\n\n const lastItemIndex = lowerBound\n ? currentPage * pageSize\n : Math.min(currentPage * pageSize, totalCount);\n const firstItemIndex = pageSize * (currentPage - 1) + 1;\n\n return (\n <Container role='navigation' aria-label='pagination'>\n {showPageSizeSelector && (\n <PageSizeSelector\n pageSize={pageSize}\n pageSizeOptions={pageSizeOptions}\n handlePageSizeClick={handlePageSizeClick}\n menuPortalContainer={menuPortalContainer}\n />\n )}\n {totalCount > 0 && (\n <>\n <div>\n Showing {firstItemIndex}-{lastItemIndex} of {totalCountDisplay} items\n </div>\n <PaginationInfo>\n <PageSelector\n paginationParams={paginationParams}\n handlePageLinkClick={handlePageLinkClick}\n isLoading={isLoading}\n onPageChange={onPageChange}\n />\n </PaginationInfo>\n </>\n )}\n </Container>\n );\n};\n\nexport default Pagination;\n","import Pagination from './Pagination';\n\nexport { default as PageSelector, PAGE_LIMIT_BEFORE_SCROLL_MODE } from './PageSelector';\nexport * from './constants';\nexport default Pagination;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { n as PaginationInfo, t as Pagination } from "./Pagination-Dcmv7bVe.mjs";
1
+ import { n as PaginationInfo, t as Pagination } from "./Pagination-BkjmybcI.mjs";
2
2
  export { PaginationInfo, Pagination as default };
@@ -1,4 +1,4 @@
1
- import { n as Sticker } from "./Sticker-CQ6sOKUj.mjs";
1
+ import { n as Sticker } from "./Sticker-By3F8Aip.mjs";
2
2
  import { Fragment, jsx } from "react/jsx-runtime";
3
3
  //#region components/Pii/Pii.tsx
4
4
  const Pii = ({ children, isRedacted, hideOnRedacted }) => {
@@ -16,4 +16,4 @@ var Pii_default = Pii;
16
16
  //#endregion
17
17
  export { Pii_default as t };
18
18
 
19
- //# sourceMappingURL=Pii-BD48BtZ0.mjs.map
19
+ //# sourceMappingURL=Pii-CA7aCuYT.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pii-BD48BtZ0.mjs","names":[],"sources":["../components/Pii/Pii.tsx","../components/Pii/index.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport Sticker from '@persona/design-system/components/Sticker';\n\ninterface PiiProps {\n children?: ReactNode;\n isRedacted: boolean;\n hideOnRedacted?: boolean;\n}\n\nconst Pii = ({ children, isRedacted, hideOnRedacted }: PiiProps) => {\n if (isRedacted) {\n return hideOnRedacted ? null : <Sticker data-test='pii__redacted'>Redacted</Sticker>;\n }\n\n if (children == null || children === '') {\n return null;\n }\n\n // There used to be code inserting a classname here in certain cases. There's\n // no other reason for this to be conditionally wrapped in a span, but\n // removing it breaks a lot of tests. Someday, the tests will be fixed...\n // hopefully.\n if (['string', 'number'].includes(typeof children)) {\n return <span>{children}</span>;\n }\n\n return <>{children}</>;\n};\n\nexport default Pii;\n","import Pii from './Pii';\n\nexport default Pii;\n"],"mappings":";;;AAUA,MAAM,OAAO,EAAE,UAAU,YAAY,qBAA+B;AAClE,KAAI,WACF,QAAO,iBAAiB,OAAO,oBAAC,SAAD;EAAS,aAAU;YAAgB;EAAkB,CAAA;AAGtF,KAAI,YAAY,QAAQ,aAAa,GACnC,QAAO;AAOT,KAAI,CAAC,UAAU,SAAS,CAAC,SAAS,OAAO,SAAS,CAChD,QAAO,oBAAC,QAAD,EAAO,UAAgB,CAAA;AAGhC,QAAO,oBAAA,UAAA,EAAG,UAAY,CAAA;;;;ACzBxB,IAAA,cAAe"}
1
+ {"version":3,"file":"Pii-CA7aCuYT.mjs","names":[],"sources":["../components/Pii/Pii.tsx","../components/Pii/index.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport Sticker from '@persona/design-system/components/Sticker';\n\ninterface PiiProps {\n children?: ReactNode;\n isRedacted: boolean;\n hideOnRedacted?: boolean;\n}\n\nconst Pii = ({ children, isRedacted, hideOnRedacted }: PiiProps) => {\n if (isRedacted) {\n return hideOnRedacted ? null : <Sticker data-test='pii__redacted'>Redacted</Sticker>;\n }\n\n if (children == null || children === '') {\n return null;\n }\n\n // There used to be code inserting a classname here in certain cases. There's\n // no other reason for this to be conditionally wrapped in a span, but\n // removing it breaks a lot of tests. Someday, the tests will be fixed...\n // hopefully.\n if (['string', 'number'].includes(typeof children)) {\n return <span>{children}</span>;\n }\n\n return <>{children}</>;\n};\n\nexport default Pii;\n","import Pii from './Pii';\n\nexport default Pii;\n"],"mappings":";;;AAUA,MAAM,OAAO,EAAE,UAAU,YAAY,qBAA+B;AAClE,KAAI,WACF,QAAO,iBAAiB,OAAO,oBAAC,SAAD;EAAS,aAAU;YAAgB;EAAkB,CAAA;AAGtF,KAAI,YAAY,QAAQ,aAAa,GACnC,QAAO;AAOT,KAAI,CAAC,UAAU,SAAS,CAAC,SAAS,OAAO,SAAS,CAChD,QAAO,oBAAC,QAAD,EAAO,UAAgB,CAAA;AAGhC,QAAO,oBAAA,UAAA,EAAG,UAAY,CAAA;;;;ACzBxB,IAAA,cAAe"}
@@ -0,0 +1,85 @@
1
+ import { f as FilterSize } from "./types-V8UJX-rk.mjs";
2
+ import * as _$react from "react";
3
+ import { HTMLAttributes, ReactNode } from "react";
4
+
5
+ //#region components/DataTable/TableControls/FiltersV2/PillShell/PillShell.d.ts
6
+ /**
7
+ * Shared rounded-pill primitive that both `FilterPill` (simple-rule
8
+ * pill) and `RulesPill` (compound-expression pill) compose. Owns:
9
+ *
10
+ * - the variant-aware container (gray default, `ube/100` purple
11
+ * active) with a `:focus-within` outline so the focus ring sits on
12
+ * the whole pill rather than the inner body;
13
+ * - the trailing-affordance slot that shows a caret in the resting
14
+ * state and swaps to a dismiss `×` on hover or when the popover is
15
+ * open (`variant="active"`);
16
+ * - the dismiss button's `stopPropagation` so clicks on `×` never
17
+ * reach the body's click handler (which Radix typically wires as
18
+ * "toggle popover");
19
+ * - size-variant threading (`sm` / `md`) — applies the matching PDS
20
+ * typography mixin and pulls dimensions from `FILTER_SIZE_TOKENS[size]`
21
+ * so both pills stay visually aligned regardless of the surrounding
22
+ * `FilterBarContext`.
23
+ *
24
+ * Callers own only the body content (`children`) and the
25
+ * accessibility labels for the body / dismiss buttons.
26
+ *
27
+ * The outer element is a `<span>` rather than a `<button>` so the
28
+ * primitive works as a Radix `Popover.Trigger asChild` anchor in both
29
+ * pill contexts (the immediate child of `asChild` must accept the
30
+ * injected `onClick` + `ref`). The inner `<button>` is the
31
+ * keyboard-focusable click target.
32
+ */
33
+ interface PillShellProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'onClick'> {
34
+ /**
35
+ * Visual variant. `'default'` is the gray resting state;
36
+ * `'active'` is the purple state used when the associated popover
37
+ * is open. Active also pins the dismiss `×` visible (no caret).
38
+ */
39
+ variant: 'default' | 'active';
40
+ /**
41
+ * Body content rendered inside the focusable inner button. Typically
42
+ * the pill's label + value chips + count chip. Keep it presentational
43
+ * — no nested buttons / clickable elements (they'd compete with the
44
+ * outer body button for the user's click).
45
+ */
46
+ children: ReactNode;
47
+ /**
48
+ * aria-label for the inner body button — used both as the pill's
49
+ * accessible name and as the verbalized "what this opens" hint.
50
+ * Pass a sentence like `"Edit filter: Country is US"` rather than
51
+ * a single noun so VoiceOver reads the active state clearly.
52
+ */
53
+ bodyAriaLabel: string;
54
+ /**
55
+ * Click handler for the body. Optional because the pill is most
56
+ * commonly used as a Radix `Popover.Trigger asChild`, in which case
57
+ * Radix injects its own toggle handler via `...rest` onto the outer
58
+ * span — clicks bubble from the inner body button up to the span and
59
+ * fire it.
60
+ */
61
+ onBodyClick?: () => void;
62
+ /**
63
+ * Dismiss-button handler. When omitted, the trailing `×` is decorative
64
+ * only (used by `RulesPill`, whose whole body toggles the popover and
65
+ * does not have a clear-all action yet).
66
+ */
67
+ onDismiss?: () => void;
68
+ /**
69
+ * aria-label for the dismiss button. Pass a sentence like
70
+ * `"Remove filter: Country is US"` so screen-reader users hear which
71
+ * pill they're removing.
72
+ */
73
+ dismissAriaLabel?: string;
74
+ /**
75
+ * Size variant. Defaults to whatever the surrounding
76
+ * `FilterBarContext` provides (`'sm'` outside a `FilterBar`).
77
+ * Pass an explicit prop to override the context — useful for
78
+ * Storybook stories that render multiple sizes side-by-side.
79
+ */
80
+ size?: FilterSize;
81
+ }
82
+ declare const PillShell: _$react.ForwardRefExoticComponent<PillShellProps & _$react.RefAttributes<HTMLSpanElement>>;
83
+ //#endregion
84
+ export { PillShellProps as n, PillShell as t };
85
+ //# sourceMappingURL=PillShell-CVqpZ5iV.d.mts.map
@@ -1,85 +1,2 @@
1
- import { d as FilterSize } from "./types-D55MZSyx.mjs";
2
- import * as _$react from "react";
3
- import { HTMLAttributes, ReactNode } from "react";
4
-
5
- //#region components/DataTable/TableControls/FiltersV2/PillShell/PillShell.d.ts
6
- /**
7
- * Shared rounded-pill primitive that both `FilterPill` (simple-rule
8
- * pill) and `RulesPill` (compound-expression pill) compose. Owns:
9
- *
10
- * - the variant-aware container (gray default, `ube/100` purple
11
- * active) with a `:focus-within` outline so the focus ring sits on
12
- * the whole pill rather than the inner body;
13
- * - the trailing-affordance slot that shows a caret in the resting
14
- * state and swaps to a dismiss `×` on hover or when the popover is
15
- * open (`variant="active"`);
16
- * - the dismiss button's `stopPropagation` so clicks on `×` never
17
- * reach the body's click handler (which Radix typically wires as
18
- * "toggle popover");
19
- * - size-variant threading (`sm` / `md`) — applies the matching PDS
20
- * typography mixin and pulls dimensions from `FILTER_SIZE_TOKENS[size]`
21
- * so both pills stay visually aligned regardless of the surrounding
22
- * `FilterBarContext`.
23
- *
24
- * Callers own only the body content (`children`) and the
25
- * accessibility labels for the body / dismiss buttons.
26
- *
27
- * The outer element is a `<span>` rather than a `<button>` so the
28
- * primitive works as a Radix `Popover.Trigger asChild` anchor in both
29
- * pill contexts (the immediate child of `asChild` must accept the
30
- * injected `onClick` + `ref`). The inner `<button>` is the
31
- * keyboard-focusable click target.
32
- */
33
- interface PillShellProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'onClick'> {
34
- /**
35
- * Visual variant. `'default'` is the gray resting state;
36
- * `'active'` is the purple state used when the associated popover
37
- * is open. Active also pins the dismiss `×` visible (no caret).
38
- */
39
- variant: 'default' | 'active';
40
- /**
41
- * Body content rendered inside the focusable inner button. Typically
42
- * the pill's label + value chips + count chip. Keep it presentational
43
- * — no nested buttons / clickable elements (they'd compete with the
44
- * outer body button for the user's click).
45
- */
46
- children: ReactNode;
47
- /**
48
- * aria-label for the inner body button — used both as the pill's
49
- * accessible name and as the verbalized "what this opens" hint.
50
- * Pass a sentence like `"Edit filter: Country is US"` rather than
51
- * a single noun so VoiceOver reads the active state clearly.
52
- */
53
- bodyAriaLabel: string;
54
- /**
55
- * Click handler for the body. Optional because the pill is most
56
- * commonly used as a Radix `Popover.Trigger asChild`, in which case
57
- * Radix injects its own toggle handler via `...rest` onto the outer
58
- * span — clicks bubble from the inner body button up to the span and
59
- * fire it.
60
- */
61
- onBodyClick?: () => void;
62
- /**
63
- * Dismiss-button handler. When omitted, the trailing `×` is decorative
64
- * only (used by `RulesPill`, whose whole body toggles the popover and
65
- * does not have a clear-all action yet).
66
- */
67
- onDismiss?: () => void;
68
- /**
69
- * aria-label for the dismiss button. Pass a sentence like
70
- * `"Remove filter: Country is US"` so screen-reader users hear which
71
- * pill they're removing.
72
- */
73
- dismissAriaLabel?: string;
74
- /**
75
- * Size variant. Defaults to whatever the surrounding
76
- * `FilterBarContext` provides (`'sm'` outside a `FilterBar`).
77
- * Pass an explicit prop to override the context — useful for
78
- * Storybook stories that render multiple sizes side-by-side.
79
- */
80
- size?: FilterSize;
81
- }
82
- declare const PillShell: _$react.ForwardRefExoticComponent<PillShellProps & _$react.RefAttributes<HTMLSpanElement>>;
83
- //#endregion
84
- export { PillShellProps, PillShell as default };
85
- //# sourceMappingURL=PillShell.d.mts.map
1
+ import { n as PillShellProps, t as PillShell } from "./PillShell-CVqpZ5iV.mjs";
2
+ export { PillShellProps, PillShell as default };
@@ -121,4 +121,4 @@ var Popover_default = Object.assign(Popover, {
121
121
  //#endregion
122
122
  export { PopoverPortal as a, PopoverContent as i, PopoverCard as n, PopoverTrigger as o, PopoverClose as r, Popover_default as s, PopoverAnchor as t };
123
123
 
124
- //# sourceMappingURL=Popover-DNH8Jx1-.mjs.map
124
+ //# sourceMappingURL=Popover-DlXyKYL5.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Popover-DNH8Jx1-.mjs","names":["Card"],"sources":["../components/Popover/Popover.tsx"],"sourcesContent":["import * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { Children, forwardRef, isValidElement, type ReactElement } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport type { Spacing } from '@persona/design-tokens';\nimport { XIcon } from '@persona/icons';\nimport Card from 'design-system/components/Card';\nimport { Paragraph } from 'design-system/components/Text';\n\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\nexport const PopoverPortal = PopoverPrimitive.Portal;\n\n// TODO: Investigate how we can get date popovers to work properly with the new date picker\nexport const PopoverContent = PopoverPrimitive.PopoverContent;\n\nconst PopoverContentStyled = styled(PopoverContent)<{ zIndex?: number; $maxHeight?: string }>`\n z-index: ${({ zIndex }) => zIndex || 'inherit'};\n ${({ $maxHeight }) =>\n $maxHeight &&\n css`\n max-height: ${$maxHeight};\n overflow: auto;\n `}\n`;\n\nconst PopoverCloseButton = styled(PopoverPrimitive.Close)<{ isHeader?: boolean }>`\n ${({ isHeader }) =>\n !isHeader &&\n css`\n position: absolute;\n top: 8px;\n right: 8px;\n `}\n ${({ isHeader }) =>\n isHeader &&\n css`\n height: 16px;\n `}\n background: transparent;\n border: 0;\n cursor: pointer;\n`;\n\nconst HeadingContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nexport const PopoverClose = (\n props: PopoverPrimitive.PopoverCloseProps & { isHeader?: boolean },\n) => {\n return (\n <PopoverCloseButton {...props}>\n <XIcon />\n </PopoverCloseButton>\n );\n};\n\nexport interface PopoverCardProps extends PopoverPrimitive.PopoverContentProps {\n /**\n * Display X button to close popover\n */\n showCloseButton?: boolean;\n\n /**\n * Remove padding from Card\n */\n noPadding?: boolean;\n\n padding?: Spacing;\n\n /**\n * Text to display in the header of the card\n */\n heading?: string;\n\n /**\n * Z-index to apply to the popover content\n */\n zIndex?: number;\n\n /**\n * Maximum height for the popover content.\n */\n maxHeight?: string;\n}\n\n/**\n * Card to be used in Popover contexts. Inherits props from Radix UI Popper.Content.\n */\nexport const PopoverCard = forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n PopoverCardProps\n>(function PopoverCard(\n { children, showCloseButton, heading, noPadding, padding, zIndex, maxHeight, ...props },\n ref,\n) {\n const header = heading && (\n <HeadingContainer>\n <Paragraph size='md' weight='bold' color='primary'>\n {heading}\n </Paragraph>\n {showCloseButton && <PopoverClose aria-label='Close' isHeader />}\n </HeadingContainer>\n );\n return (\n <PopoverContentStyled\n asChild\n sideOffset={8}\n collisionPadding={8}\n zIndex={zIndex}\n $maxHeight={maxHeight}\n {...props}\n ref={ref}\n >\n <Card elevated>\n {!heading && showCloseButton && <PopoverClose aria-label='Close' />}\n {noPadding ? (\n <>\n {heading && header}\n {children}\n </>\n ) : (\n <Card.Body padding={padding}>\n {heading && header}\n {children}\n </Card.Body>\n )}\n </Card>\n </PopoverContentStyled>\n );\n});\n\ninterface PopoverProps extends PopoverPrimitive.PopoverProps {\n /**\n * Component to use as trigger. Radix UI trigger component props will be merged with this element.\n */\n trigger?: ReactElement;\n\n /**\n * Props to apply to Popover.Trigger within\n */\n triggerProps?: PopoverPrimitive.PopoverTriggerProps;\n\n /**\n * An optional element to position the Popover.Content against.\n * If this part is not used, the content will position alongside the trigger.\n */\n anchor?: ReactElement<PopoverPrimitive.PopoverAnchorProps>;\n\n /**\n * Props to apply to Popover.Card within\n */\n contentProps?: PopoverCardProps;\n\n /**\n * Render content within a portal\n */\n portal?: boolean;\n\n /**\n * Props applied to Radix UI Portal component\n */\n portalProps?: PopoverPrimitive.PopoverPortalProps;\n}\n\nconst Popover = ({\n children,\n trigger,\n triggerProps,\n contentProps,\n anchor,\n portal = true,\n portalProps,\n ...props\n}: PopoverProps) => {\n let triggerElem;\n let contentElem;\n let anchorElem = anchor;\n\n const renderChildren = Children.toArray(children).filter((child) => {\n if (isValidElement(child)) {\n switch (child.type) {\n case PopoverPrimitive.Trigger:\n triggerElem = child;\n return false;\n case PopoverCard:\n case PopoverPrimitive.Content:\n contentElem = child;\n break;\n case PopoverPrimitive.Anchor:\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n anchorElem = child;\n return false;\n }\n }\n\n return true;\n });\n\n const content = contentElem || <PopoverCard {...contentProps}>{renderChildren}</PopoverCard>;\n\n return (\n <PopoverPrimitive.Root {...props}>\n {triggerElem ||\n (trigger && (\n <PopoverTrigger asChild {...triggerProps}>\n {trigger}\n </PopoverTrigger>\n ))}\n {anchorElem}\n {portal ? <PopoverPortal {...portalProps}>{content}</PopoverPortal> : content}\n </PopoverPrimitive.Root>\n );\n};\n\nexport default Object.assign(Popover, {\n Trigger: PopoverTrigger,\n Anchor: PopoverAnchor,\n Portal: PopoverPortal,\n Content: PopoverContent,\n Card: PopoverCard,\n Close: PopoverClose,\n});\n"],"mappings":";;;;;;;;AASA,MAAa,iBAAiB,iBAAiB;AAC/C,MAAa,gBAAgB,iBAAiB;AAC9C,MAAa,gBAAgB,iBAAiB;AAG9C,MAAa,iBAAiB,iBAAiB;AAE/C,MAAM,uBAAuB,OAAO,eAAe;cACrC,EAAE,aAAa,UAAU,UAAU;KAC5C,EAAE,iBACH,cACA,GAAG;oBACa,WAAW;;MAEzB;;AAGN,MAAM,qBAAqB,OAAO,iBAAiB,MAAM;KACpD,EAAE,eACH,CAAC,YACD,GAAG;;;;MAID;KACD,EAAE,eACH,YACA,GAAG;;MAED;;;;;AAMN,MAAM,mBAAmB,OAAO,GAAG;;;;;AAMnC,MAAa,gBACX,UACG;AACH,QACE,oBAAC,oBAAD;EAAoB,GAAI;YACtB,oBAAC,OAAD,EAAS,CAAA;EACU,CAAA;;;;;AAoCzB,MAAa,cAAc,WAGzB,SAAS,YACT,EAAE,UAAU,iBAAiB,SAAS,WAAW,SAAS,QAAQ,WAAW,GAAG,SAChF,KACA;CACA,MAAM,SAAS,WACb,qBAAC,kBAAD,EAAA,UAAA,CACE,oBAAC,WAAD;EAAW,MAAK;EAAK,QAAO;EAAO,OAAM;YACtC;EACS,CAAA,EACX,mBAAmB,oBAAC,cAAD;EAAc,cAAW;EAAQ,UAAA;EAAW,CAAA,CAC/C,EAAA,CAAA;AAErB,QACE,oBAAC,sBAAD;EACE,SAAA;EACA,YAAY;EACZ,kBAAkB;EACV;EACR,YAAY;EACZ,GAAI;EACC;YAEL,qBAACA,cAAD;GAAM,UAAA;aAAN,CACG,CAAC,WAAW,mBAAmB,oBAAC,cAAD,EAAc,cAAW,SAAU,CAAA,EAClE,YACC,qBAAA,YAAA,EAAA,UAAA,CACG,WAAW,QACX,SACA,EAAA,CAAA,GAEH,qBAACA,aAAK,MAAN;IAAoB;cAApB,CACG,WAAW,QACX,SACS;MAET;;EACc,CAAA;EAEzB;AAmCF,MAAM,WAAW,EACf,UACA,SACA,cACA,cACA,QACA,SAAS,MACT,aACA,GAAG,YACe;CAClB,IAAI;CACJ,IAAI;CACJ,IAAI,aAAa;CAEjB,MAAM,iBAAiB,SAAS,QAAQ,SAAS,CAAC,QAAQ,UAAU;AAClE,MAAI,eAAe,MAAM,CACvB,SAAQ,MAAM,MAAd;GACE,KAAK,iBAAiB;AACpB,kBAAc;AACd,WAAO;GACT,KAAK;GACL,KAAK,iBAAiB;AACpB,kBAAc;AACd;GACF,KAAK,iBAAiB;AAEpB,iBAAa;AACb,WAAO;;AAIb,SAAO;GACP;CAEF,MAAM,UAAU,eAAe,oBAAC,aAAD;EAAa,GAAI;YAAe;EAA6B,CAAA;AAE5F,QACE,qBAAC,iBAAiB,MAAlB;EAAuB,GAAI;YAA3B;GACG,eACE,WACC,oBAAC,gBAAD;IAAgB,SAAA;IAAQ,GAAI;cACzB;IACc,CAAA;GAEpB;GACA,SAAS,oBAAC,eAAD;IAAe,GAAI;cAAc;IAAwB,CAAA,GAAG;GAChD;;;AAI5B,IAAA,kBAAe,OAAO,OAAO,SAAS;CACpC,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,MAAM;CACN,OAAO;CACR,CAAC"}
1
+ {"version":3,"file":"Popover-DlXyKYL5.mjs","names":["Card"],"sources":["../components/Popover/Popover.tsx"],"sourcesContent":["import * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { Children, forwardRef, isValidElement, type ReactElement } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport type { Spacing } from '@persona/design-tokens';\nimport { XIcon } from '@persona/icons';\nimport Card from 'design-system/components/Card';\nimport { Paragraph } from 'design-system/components/Text';\n\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\nexport const PopoverPortal = PopoverPrimitive.Portal;\n\n// TODO: Investigate how we can get date popovers to work properly with the new date picker\nexport const PopoverContent = PopoverPrimitive.PopoverContent;\n\nconst PopoverContentStyled = styled(PopoverContent)<{ zIndex?: number; $maxHeight?: string }>`\n z-index: ${({ zIndex }) => zIndex || 'inherit'};\n ${({ $maxHeight }) =>\n $maxHeight &&\n css`\n max-height: ${$maxHeight};\n overflow: auto;\n `}\n`;\n\nconst PopoverCloseButton = styled(PopoverPrimitive.Close)<{ isHeader?: boolean }>`\n ${({ isHeader }) =>\n !isHeader &&\n css`\n position: absolute;\n top: 8px;\n right: 8px;\n `}\n ${({ isHeader }) =>\n isHeader &&\n css`\n height: 16px;\n `}\n background: transparent;\n border: 0;\n cursor: pointer;\n`;\n\nconst HeadingContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n`;\n\nexport const PopoverClose = (\n props: PopoverPrimitive.PopoverCloseProps & { isHeader?: boolean },\n) => {\n return (\n <PopoverCloseButton {...props}>\n <XIcon />\n </PopoverCloseButton>\n );\n};\n\nexport interface PopoverCardProps extends PopoverPrimitive.PopoverContentProps {\n /**\n * Display X button to close popover\n */\n showCloseButton?: boolean;\n\n /**\n * Remove padding from Card\n */\n noPadding?: boolean;\n\n padding?: Spacing;\n\n /**\n * Text to display in the header of the card\n */\n heading?: string;\n\n /**\n * Z-index to apply to the popover content\n */\n zIndex?: number;\n\n /**\n * Maximum height for the popover content.\n */\n maxHeight?: string;\n}\n\n/**\n * Card to be used in Popover contexts. Inherits props from Radix UI Popper.Content.\n */\nexport const PopoverCard = forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n PopoverCardProps\n>(function PopoverCard(\n { children, showCloseButton, heading, noPadding, padding, zIndex, maxHeight, ...props },\n ref,\n) {\n const header = heading && (\n <HeadingContainer>\n <Paragraph size='md' weight='bold' color='primary'>\n {heading}\n </Paragraph>\n {showCloseButton && <PopoverClose aria-label='Close' isHeader />}\n </HeadingContainer>\n );\n return (\n <PopoverContentStyled\n asChild\n sideOffset={8}\n collisionPadding={8}\n zIndex={zIndex}\n $maxHeight={maxHeight}\n {...props}\n ref={ref}\n >\n <Card elevated>\n {!heading && showCloseButton && <PopoverClose aria-label='Close' />}\n {noPadding ? (\n <>\n {heading && header}\n {children}\n </>\n ) : (\n <Card.Body padding={padding}>\n {heading && header}\n {children}\n </Card.Body>\n )}\n </Card>\n </PopoverContentStyled>\n );\n});\n\ninterface PopoverProps extends PopoverPrimitive.PopoverProps {\n /**\n * Component to use as trigger. Radix UI trigger component props will be merged with this element.\n */\n trigger?: ReactElement;\n\n /**\n * Props to apply to Popover.Trigger within\n */\n triggerProps?: PopoverPrimitive.PopoverTriggerProps;\n\n /**\n * An optional element to position the Popover.Content against.\n * If this part is not used, the content will position alongside the trigger.\n */\n anchor?: ReactElement<PopoverPrimitive.PopoverAnchorProps>;\n\n /**\n * Props to apply to Popover.Card within\n */\n contentProps?: PopoverCardProps;\n\n /**\n * Render content within a portal\n */\n portal?: boolean;\n\n /**\n * Props applied to Radix UI Portal component\n */\n portalProps?: PopoverPrimitive.PopoverPortalProps;\n}\n\nconst Popover = ({\n children,\n trigger,\n triggerProps,\n contentProps,\n anchor,\n portal = true,\n portalProps,\n ...props\n}: PopoverProps) => {\n let triggerElem;\n let contentElem;\n let anchorElem = anchor;\n\n const renderChildren = Children.toArray(children).filter((child) => {\n if (isValidElement(child)) {\n switch (child.type) {\n case PopoverPrimitive.Trigger:\n triggerElem = child;\n return false;\n case PopoverCard:\n case PopoverPrimitive.Content:\n contentElem = child;\n break;\n case PopoverPrimitive.Anchor:\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n anchorElem = child;\n return false;\n }\n }\n\n return true;\n });\n\n const content = contentElem || <PopoverCard {...contentProps}>{renderChildren}</PopoverCard>;\n\n return (\n <PopoverPrimitive.Root {...props}>\n {triggerElem ||\n (trigger && (\n <PopoverTrigger asChild {...triggerProps}>\n {trigger}\n </PopoverTrigger>\n ))}\n {anchorElem}\n {portal ? <PopoverPortal {...portalProps}>{content}</PopoverPortal> : content}\n </PopoverPrimitive.Root>\n );\n};\n\nexport default Object.assign(Popover, {\n Trigger: PopoverTrigger,\n Anchor: PopoverAnchor,\n Portal: PopoverPortal,\n Content: PopoverContent,\n Card: PopoverCard,\n Close: PopoverClose,\n});\n"],"mappings":";;;;;;;;AASA,MAAa,iBAAiB,iBAAiB;AAC/C,MAAa,gBAAgB,iBAAiB;AAC9C,MAAa,gBAAgB,iBAAiB;AAG9C,MAAa,iBAAiB,iBAAiB;AAE/C,MAAM,uBAAuB,OAAO,eAAe;cACrC,EAAE,aAAa,UAAU,UAAU;KAC5C,EAAE,iBACH,cACA,GAAG;oBACa,WAAW;;MAEzB;;AAGN,MAAM,qBAAqB,OAAO,iBAAiB,MAAM;KACpD,EAAE,eACH,CAAC,YACD,GAAG;;;;MAID;KACD,EAAE,eACH,YACA,GAAG;;MAED;;;;;AAMN,MAAM,mBAAmB,OAAO,GAAG;;;;;AAMnC,MAAa,gBACX,UACG;AACH,QACE,oBAAC,oBAAD;EAAoB,GAAI;YACtB,oBAAC,OAAD,EAAS,CAAA;EACU,CAAA;;;;;AAoCzB,MAAa,cAAc,WAGzB,SAAS,YACT,EAAE,UAAU,iBAAiB,SAAS,WAAW,SAAS,QAAQ,WAAW,GAAG,SAChF,KACA;CACA,MAAM,SAAS,WACb,qBAAC,kBAAD,EAAA,UAAA,CACE,oBAAC,WAAD;EAAW,MAAK;EAAK,QAAO;EAAO,OAAM;YACtC;EACS,CAAA,EACX,mBAAmB,oBAAC,cAAD;EAAc,cAAW;EAAQ,UAAA;EAAW,CAAA,CAC/C,EAAA,CAAA;AAErB,QACE,oBAAC,sBAAD;EACE,SAAA;EACA,YAAY;EACZ,kBAAkB;EACV;EACR,YAAY;EACZ,GAAI;EACC;YAEL,qBAACA,cAAD;GAAM,UAAA;aAAN,CACG,CAAC,WAAW,mBAAmB,oBAAC,cAAD,EAAc,cAAW,SAAU,CAAA,EAClE,YACC,qBAAA,YAAA,EAAA,UAAA,CACG,WAAW,QACX,SACA,EAAA,CAAA,GAEH,qBAACA,aAAK,MAAN;IAAoB;cAApB,CACG,WAAW,QACX,SACS;MAET;;EACc,CAAA;EAEzB;AAmCF,MAAM,WAAW,EACf,UACA,SACA,cACA,cACA,QACA,SAAS,MACT,aACA,GAAG,YACe;CAClB,IAAI;CACJ,IAAI;CACJ,IAAI,aAAa;CAEjB,MAAM,iBAAiB,SAAS,QAAQ,SAAS,CAAC,QAAQ,UAAU;AAClE,MAAI,eAAe,MAAM,CACvB,SAAQ,MAAM,MAAd;GACE,KAAK,iBAAiB;AACpB,kBAAc;AACd,WAAO;GACT,KAAK;GACL,KAAK,iBAAiB;AACpB,kBAAc;AACd;GACF,KAAK,iBAAiB;AAEpB,iBAAa;AACb,WAAO;;AAIb,SAAO;GACP;CAEF,MAAM,UAAU,eAAe,oBAAC,aAAD;EAAa,GAAI;YAAe;EAA6B,CAAA;AAE5F,QACE,qBAAC,iBAAiB,MAAlB;EAAuB,GAAI;YAA3B;GACG,eACE,WACC,oBAAC,gBAAD;IAAgB,SAAA;IAAQ,GAAI;cACzB;IACc,CAAA;GAEpB;GACA,SAAS,oBAAC,eAAD;IAAe,GAAI;cAAc;IAAwB,CAAA,GAAG;GAChD;;;AAI5B,IAAA,kBAAe,OAAO,OAAO,SAAS;CACpC,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,MAAM;CACN,OAAO;CACR,CAAC"}
@@ -2,7 +2,7 @@ import { ComponentPropsWithoutRef } from "react";
2
2
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region components/ProgressIndicator/ProgressIndicator.d.ts
5
- type StepStatus = 'uncompleted' | 'completed' | 'error';
5
+ type StepStatus = 'uncompleted' | 'completed' | 'warning' | 'error';
6
6
  interface ProgressIndicatorStep {
7
7
  id: string;
8
8
  label: string;
@@ -20,7 +20,7 @@ interface ProgressIndicatorProps extends ComponentPropsWithoutRef<'ol'> {
20
20
  * Called when a clickable step is activated via click or keyboard.
21
21
  *
22
22
  * Clickability rules:
23
- * - `completed` and `error` steps are clickable (navigate back to review/edit)
23
+ * - `completed`, `warning`, and `error` steps are clickable (navigate back to review/edit)
24
24
  * - The active step is not clickable (user is already there)
25
25
  * - Upcoming `uncompleted` steps are not clickable (sequential progression required)
26
26
  */
@@ -30,7 +30,9 @@ interface ProgressIndicatorProps extends ComponentPropsWithoutRef<'ol'> {
30
30
  * ProgressIndicator guides users through a sequence of steps.
31
31
  *
32
32
  * Interaction rules:
33
- * - **Completed / error** steps are clickable — navigate back to review or fix.
33
+ * - **Completed / warning / error** steps are clickable — navigate back to review or fix.
34
+ * - **Warning** does not block forward progression; later uncompleted steps remain reachable.
35
+ * - **Error** blocks forward progression — treat it as the terminal step in the sequence.
34
36
  * - **Active** step is not clickable — the user is already there.
35
37
  * - **Upcoming (uncompleted)** steps are not clickable — sequential progression required.
36
38
  *
@@ -9,4 +9,4 @@ interface PseudoClassProps {
9
9
  }
10
10
  //#endregion
11
11
  export { PseudoClassProps as t };
12
- //# sourceMappingURL=PseudoClassProps-DgT5G_z5.d.mts.map
12
+ //# sourceMappingURL=PseudoClassProps-BPdn-ofQ.d.mts.map
@@ -1,2 +1,2 @@
1
- import { t as PseudoClassProps } from "./PseudoClassProps-DgT5G_z5.mjs";
1
+ import { t as PseudoClassProps } from "./PseudoClassProps-BPdn-ofQ.mjs";
2
2
  export { PseudoClassProps as default };
@@ -1,8 +1,8 @@
1
1
  import { a as styled, r as css } from "./styledComponentsInterop-8zScIQyC.mjs";
2
- import "./variables/transitions.mjs";
3
2
  import { isChecked, isDisabled, isFocusedVisible, isHovered, isNotDisabled } from "./lib/pseudoClass.mjs";
4
3
  import { focusStyle } from "./mixins/focus.mjs";
5
- import { n as useFormField } from "./useFormField-Bz2iMPBO.mjs";
4
+ import "./variables/transitions.mjs";
5
+ import { n as useFormField } from "./useFormField-C-K1lgmv.mjs";
6
6
  import { Color, Spacing, Typography } from "@persona/design-tokens";
7
7
  import { forwardRef, useMemo } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -144,4 +144,4 @@ const Radio = forwardRef(function Radio({ id, label, className, value, disabled,
144
144
  //#endregion
145
145
  export { Radio as t };
146
146
 
147
- //# sourceMappingURL=Radio-DSMPX5_2.mjs.map
147
+ //# sourceMappingURL=Radio-DYGEt0FT.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Radio-DSMPX5_2.mjs","names":[],"sources":["../components/Radio/Radio.tsx"],"sourcesContent":["import { uniqueId } from 'lodash-es';\nimport {\n type ChangeEvent,\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n useMemo,\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\nimport useFormField from 'design-system/components/FormControl/useFormField';\nimport {\n isChecked,\n isDisabled,\n isFocusedVisible,\n isHovered,\n isNotDisabled,\n} from 'design-system/lib/pseudoClass';\nimport { focusStyle } from 'design-system/mixins/focus';\nimport { TransitionDuration } from 'design-system/variables/transitions';\n\nconst Container = styled.div<{ size: 'md' | 'sm'; disabled?: boolean }>`\n cursor: pointer;\n display: flex;\n align-items: flex-start;\n flex-wrap: nowrap;\n position: relative;\n\n ${({ size }) =>\n size === 'sm' &&\n css`\n align-items: center;\n height: 16px;\n `}\n\n &${isDisabled} {\n cursor: default;\n }\n`;\n\nconst Label = styled.label<{ disabled: boolean; size: 'md' | 'sm' }>`\n cursor: inherit;\n padding: 0 ${Spacing[2]};\n color: ${Color.TextSecondary};\n\n ${({ size }) =>\n size === 'sm'\n ? css`\n ${Typography.TextSmall};\n line-height: 16px;\n `\n : css`\n ${Typography.TextMedium};\n `}\n\n ${({ theme, disabled }) =>\n disabled &&\n css`\n cursor: default;\n color: ${theme.color.text.disabled};\n `}\n`;\n\nconst RadioCircle = styled.div<{ size: 'md' | 'sm' }>`\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n transition: box-shadow ${TransitionDuration.Fast};\n border-radius: 100%;\n height: ${Spacing[4]};\n width: ${Spacing[4]};\n flex: 0 0 16px;\n box-sizing: border-box;\n margin-top: ${({ size }) => (size === 'sm' ? 0 : '2px')};\n border: 1px solid ${Color.BorderInputCheckbox};\n background: ${Color.PrimaryWhite};\n`;\n\nconst RadioInput = styled.input<{ $size: 'md' | 'sm' }>`\n cursor: inherit;\n height: ${Spacing[4]};\n width: ${Spacing[4]};\n margin: 0;\n border: 0;\n opacity: 0;\n overflow: hidden;\n position: absolute;\n top: ${({ $size }) => ($size === 'sm' ? 0 : '2px')};\n border-radius: 100%;\n z-index: 10; // this needs to be above the dot in the checked input\n\n &${isHovered}${isNotDisabled} ~ ${RadioCircle} {\n border-color: ${Color.BorderInputCheckboxHover};\n }\n\n &${isChecked}, &:checked {\n &${isHovered}${isNotDisabled} ~ ${RadioCircle} {\n background: ${Color.BackgroundInputActiveHover};\n border-color: ${Color.BackgroundInputActiveHover};\n }\n }\n\n &${isFocusedVisible}${isNotDisabled} ~ ${RadioCircle} {\n ${focusStyle}\n }\n\n // RadioCircle state styles; Uses pure CSS\n &${isDisabled} + ${RadioCircle} {\n cursor: default;\n background: ${Color.BackgroundInputDisabled};\n border-color: ${Color.BorderInputDisabled};\n }\n\n &:checked + ${RadioCircle}, &${isChecked} + ${RadioCircle} {\n border-color: ${Color.BackgroundInputActive};\n background: ${Color.BackgroundInputActive};\n\n &::after {\n background: ${Color.BackgroundInputDefault};\n height: 6px;\n width: 6px;\n border-radius: 100%;\n content: '';\n position: absolute;\n }\n }\n\n &:checked${isDisabled} + ${RadioCircle}, &${isChecked}${isDisabled} + ${RadioCircle} {\n border-color: ${Color.BackgroundInputActiveDisabled};\n background: ${Color.BackgroundInputActiveDisabled};\n }\n`;\n\nexport interface RadioProps extends Omit<ComponentPropsWithoutRef<'input'>, 'size'> {\n /**\n * If not provided, a unique ID will be generated.\n */\n id?: string;\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n label?: ReactNode;\n disabled?: boolean;\n checked?: boolean;\n value: string;\n 'data-test'?: string;\n size?: 'md' | 'sm';\n}\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n id,\n label,\n className,\n value,\n disabled,\n checked,\n defaultChecked,\n onChange,\n 'data-test': dataTest,\n size = 'md',\n ...elemProps\n },\n ref,\n) {\n const field = useFormField({ disabled });\n const generatedId = useMemo(() => uniqueId('pds_radio__'), []);\n\n return (\n <Container className={className} disabled={disabled} data-test={dataTest} size={size}>\n <RadioInput\n id={id || generatedId}\n disabled={field.disabled}\n onChange={onChange}\n type='radio'\n value={value}\n checked={checked}\n defaultChecked={defaultChecked}\n ref={ref}\n $size={size}\n {...elemProps}\n />\n <RadioCircle size={size} />\n {label && (\n <Label htmlFor={id || generatedId} disabled={disabled ?? false} size={size}>\n {label}\n </Label>\n )}\n </Container>\n );\n});\n\nexport default Radio;\n"],"mappings":";;;;;;;;;;AAsBA,MAAM,YAAY,OAAO,GAA8C;;;;;;;KAOlE,EAAE,WACH,SAAS,QACT,GAAG;;;MAGD;;KAED,WAAW;;;;AAKhB,MAAM,QAAQ,OAAO,KAA+C;;eAErD,QAAQ,GAAG;WACf,MAAM,cAAc;;KAE1B,EAAE,WACH,SAAS,OACL,GAAG;YACC,WAAW,UAAU;;YAGzB,GAAG;YACC,WAAW,WAAW;UACxB;;KAEL,EAAE,OAAO,eACV,YACA,GAAG;;eAEQ,MAAM,MAAM,KAAK,SAAS;MACnC;;AAGN,MAAM,cAAc,OAAO,GAA0B;;;;;mCAKF;;YAEvC,QAAQ,GAAG;WACZ,QAAQ,GAAG;;;iBAGL,EAAE,WAAY,SAAS,OAAO,IAAI,MAAO;sBACpC,MAAM,oBAAoB;gBAChC,MAAM,aAAa;;AAGnC,MAAM,aAAa,OAAO,KAA6B;;YAE3C,QAAQ,GAAG;WACZ,QAAQ,GAAG;;;;;;UAMZ,EAAE,YAAa,UAAU,OAAO,IAAI,MAAO;;;;KAIhD,YAAY,cAAc,KAAK,YAAY;oBAC5B,MAAM,yBAAyB;;;KAG9C,UAAU;OACR,YAAY,cAAc,KAAK,YAAY;oBAC9B,MAAM,2BAA2B;sBAC/B,MAAM,2BAA2B;;;;KAIlD,mBAAmB,cAAc,KAAK,YAAY;MACjD,WAAW;;;;KAIZ,WAAW,KAAK,YAAY;;kBAEf,MAAM,wBAAwB;oBAC5B,MAAM,oBAAoB;;;gBAG9B,YAAY,KAAK,UAAU,KAAK,YAAY;oBACxC,MAAM,sBAAsB;kBAC9B,MAAM,sBAAsB;;;oBAG1B,MAAM,uBAAuB;;;;;;;;;aASpC,WAAW,KAAK,YAAY,KAAK,YAAY,WAAW,KAAK,YAAY;oBAClE,MAAM,8BAA8B;kBACtC,MAAM,8BAA8B;;;AAkBtD,MAAa,QAAQ,WAAyC,SAAS,MACrE,EACE,IACA,OACA,WACA,OACA,UACA,SACA,gBACA,UACA,aAAa,UACb,OAAO,MACP,GAAG,aAEL,KACA;CACA,MAAM,QAAQ,aAAa,EAAE,UAAU,CAAC;CACxC,MAAM,cAAc,cAAc,SAAS,cAAc,EAAE,EAAE,CAAC;AAE9D,QACE,qBAAC,WAAD;EAAsB;EAAqB;EAAU,aAAW;EAAgB;YAAhF;GACE,oBAAC,YAAD;IACE,IAAI,MAAM;IACV,UAAU,MAAM;IACN;IACV,MAAK;IACE;IACE;IACO;IACX;IACL,OAAO;IACP,GAAI;IACJ,CAAA;GACF,oBAAC,aAAD,EAAmB,MAAQ,CAAA;GAC1B,SACC,oBAAC,OAAD;IAAO,SAAS,MAAM;IAAa,UAAU,YAAY;IAAa;cACnE;IACK,CAAA;GAEA;;EAEd"}
1
+ {"version":3,"file":"Radio-DYGEt0FT.mjs","names":[],"sources":["../components/Radio/Radio.tsx"],"sourcesContent":["import { uniqueId } from 'lodash-es';\nimport {\n type ChangeEvent,\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n useMemo,\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\nimport useFormField from 'design-system/components/FormControl/useFormField';\nimport {\n isChecked,\n isDisabled,\n isFocusedVisible,\n isHovered,\n isNotDisabled,\n} from 'design-system/lib/pseudoClass';\nimport { focusStyle } from 'design-system/mixins/focus';\nimport { TransitionDuration } from 'design-system/variables/transitions';\n\nconst Container = styled.div<{ size: 'md' | 'sm'; disabled?: boolean }>`\n cursor: pointer;\n display: flex;\n align-items: flex-start;\n flex-wrap: nowrap;\n position: relative;\n\n ${({ size }) =>\n size === 'sm' &&\n css`\n align-items: center;\n height: 16px;\n `}\n\n &${isDisabled} {\n cursor: default;\n }\n`;\n\nconst Label = styled.label<{ disabled: boolean; size: 'md' | 'sm' }>`\n cursor: inherit;\n padding: 0 ${Spacing[2]};\n color: ${Color.TextSecondary};\n\n ${({ size }) =>\n size === 'sm'\n ? css`\n ${Typography.TextSmall};\n line-height: 16px;\n `\n : css`\n ${Typography.TextMedium};\n `}\n\n ${({ theme, disabled }) =>\n disabled &&\n css`\n cursor: default;\n color: ${theme.color.text.disabled};\n `}\n`;\n\nconst RadioCircle = styled.div<{ size: 'md' | 'sm' }>`\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n transition: box-shadow ${TransitionDuration.Fast};\n border-radius: 100%;\n height: ${Spacing[4]};\n width: ${Spacing[4]};\n flex: 0 0 16px;\n box-sizing: border-box;\n margin-top: ${({ size }) => (size === 'sm' ? 0 : '2px')};\n border: 1px solid ${Color.BorderInputCheckbox};\n background: ${Color.PrimaryWhite};\n`;\n\nconst RadioInput = styled.input<{ $size: 'md' | 'sm' }>`\n cursor: inherit;\n height: ${Spacing[4]};\n width: ${Spacing[4]};\n margin: 0;\n border: 0;\n opacity: 0;\n overflow: hidden;\n position: absolute;\n top: ${({ $size }) => ($size === 'sm' ? 0 : '2px')};\n border-radius: 100%;\n z-index: 10; // this needs to be above the dot in the checked input\n\n &${isHovered}${isNotDisabled} ~ ${RadioCircle} {\n border-color: ${Color.BorderInputCheckboxHover};\n }\n\n &${isChecked}, &:checked {\n &${isHovered}${isNotDisabled} ~ ${RadioCircle} {\n background: ${Color.BackgroundInputActiveHover};\n border-color: ${Color.BackgroundInputActiveHover};\n }\n }\n\n &${isFocusedVisible}${isNotDisabled} ~ ${RadioCircle} {\n ${focusStyle}\n }\n\n // RadioCircle state styles; Uses pure CSS\n &${isDisabled} + ${RadioCircle} {\n cursor: default;\n background: ${Color.BackgroundInputDisabled};\n border-color: ${Color.BorderInputDisabled};\n }\n\n &:checked + ${RadioCircle}, &${isChecked} + ${RadioCircle} {\n border-color: ${Color.BackgroundInputActive};\n background: ${Color.BackgroundInputActive};\n\n &::after {\n background: ${Color.BackgroundInputDefault};\n height: 6px;\n width: 6px;\n border-radius: 100%;\n content: '';\n position: absolute;\n }\n }\n\n &:checked${isDisabled} + ${RadioCircle}, &${isChecked}${isDisabled} + ${RadioCircle} {\n border-color: ${Color.BackgroundInputActiveDisabled};\n background: ${Color.BackgroundInputActiveDisabled};\n }\n`;\n\nexport interface RadioProps extends Omit<ComponentPropsWithoutRef<'input'>, 'size'> {\n /**\n * If not provided, a unique ID will be generated.\n */\n id?: string;\n onChange?: (e: ChangeEvent<HTMLInputElement>) => void;\n label?: ReactNode;\n disabled?: boolean;\n checked?: boolean;\n value: string;\n 'data-test'?: string;\n size?: 'md' | 'sm';\n}\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n id,\n label,\n className,\n value,\n disabled,\n checked,\n defaultChecked,\n onChange,\n 'data-test': dataTest,\n size = 'md',\n ...elemProps\n },\n ref,\n) {\n const field = useFormField({ disabled });\n const generatedId = useMemo(() => uniqueId('pds_radio__'), []);\n\n return (\n <Container className={className} disabled={disabled} data-test={dataTest} size={size}>\n <RadioInput\n id={id || generatedId}\n disabled={field.disabled}\n onChange={onChange}\n type='radio'\n value={value}\n checked={checked}\n defaultChecked={defaultChecked}\n ref={ref}\n $size={size}\n {...elemProps}\n />\n <RadioCircle size={size} />\n {label && (\n <Label htmlFor={id || generatedId} disabled={disabled ?? false} size={size}>\n {label}\n </Label>\n )}\n </Container>\n );\n});\n\nexport default Radio;\n"],"mappings":";;;;;;;;;;AAsBA,MAAM,YAAY,OAAO,GAA8C;;;;;;;KAOlE,EAAE,WACH,SAAS,QACT,GAAG;;;MAGD;;KAED,WAAW;;;;AAKhB,MAAM,QAAQ,OAAO,KAA+C;;eAErD,QAAQ,GAAG;WACf,MAAM,cAAc;;KAE1B,EAAE,WACH,SAAS,OACL,GAAG;YACC,WAAW,UAAU;;YAGzB,GAAG;YACC,WAAW,WAAW;UACxB;;KAEL,EAAE,OAAO,eACV,YACA,GAAG;;eAEQ,MAAM,MAAM,KAAK,SAAS;MACnC;;AAGN,MAAM,cAAc,OAAO,GAA0B;;;;;mCAKF;;YAEvC,QAAQ,GAAG;WACZ,QAAQ,GAAG;;;iBAGL,EAAE,WAAY,SAAS,OAAO,IAAI,MAAO;sBACpC,MAAM,oBAAoB;gBAChC,MAAM,aAAa;;AAGnC,MAAM,aAAa,OAAO,KAA6B;;YAE3C,QAAQ,GAAG;WACZ,QAAQ,GAAG;;;;;;UAMZ,EAAE,YAAa,UAAU,OAAO,IAAI,MAAO;;;;KAIhD,YAAY,cAAc,KAAK,YAAY;oBAC5B,MAAM,yBAAyB;;;KAG9C,UAAU;OACR,YAAY,cAAc,KAAK,YAAY;oBAC9B,MAAM,2BAA2B;sBAC/B,MAAM,2BAA2B;;;;KAIlD,mBAAmB,cAAc,KAAK,YAAY;MACjD,WAAW;;;;KAIZ,WAAW,KAAK,YAAY;;kBAEf,MAAM,wBAAwB;oBAC5B,MAAM,oBAAoB;;;gBAG9B,YAAY,KAAK,UAAU,KAAK,YAAY;oBACxC,MAAM,sBAAsB;kBAC9B,MAAM,sBAAsB;;;oBAG1B,MAAM,uBAAuB;;;;;;;;;aASpC,WAAW,KAAK,YAAY,KAAK,YAAY,WAAW,KAAK,YAAY;oBAClE,MAAM,8BAA8B;kBACtC,MAAM,8BAA8B;;;AAkBtD,MAAa,QAAQ,WAAyC,SAAS,MACrE,EACE,IACA,OACA,WACA,OACA,UACA,SACA,gBACA,UACA,aAAa,UACb,OAAO,MACP,GAAG,aAEL,KACA;CACA,MAAM,QAAQ,aAAa,EAAE,UAAU,CAAC;CACxC,MAAM,cAAc,cAAc,SAAS,cAAc,EAAE,EAAE,CAAC;AAE9D,QACE,qBAAC,WAAD;EAAsB;EAAqB;EAAU,aAAW;EAAgB;YAAhF;GACE,oBAAC,YAAD;IACE,IAAI,MAAM;IACV,UAAU,MAAM;IACN;IACV,MAAK;IACE;IACE;IACO;IACX;IACL,OAAO;IACP,GAAI;IACJ,CAAA;GACF,oBAAC,aAAD,EAAmB,MAAQ,CAAA;GAC1B,SACC,oBAAC,OAAD;IAAO,SAAS,MAAM;IAAa,UAAU,YAAY;IAAa;cACnE;IACK,CAAA;GAEA;;EAEd"}
@@ -18,4 +18,4 @@ interface RadioGroupProps extends ComponentPropsWithoutRef<'div'> {
18
18
  declare const RadioGroup: VFC<RadioGroupProps>;
19
19
  //#endregion
20
20
  export { RadioGroupProps as n, RadioGroup as t };
21
- //# sourceMappingURL=RadioGroup-Jl1yAvGu.d.mts.map
21
+ //# sourceMappingURL=RadioGroup-DYIfRj02.d.mts.map
@@ -1,6 +1,6 @@
1
1
  import { a as styled, r as css } from "./styledComponentsInterop-8zScIQyC.mjs";
2
2
  import useControlled from "./lib/useControlled.mjs";
3
- import { t as Radio } from "./Radio-DSMPX5_2.mjs";
3
+ import { t as Radio } from "./Radio-DYGEt0FT.mjs";
4
4
  import { Spacing } from "@persona/design-tokens";
5
5
  import { Children, cloneElement } from "react";
6
6
  import { jsx } from "react/jsx-runtime";
@@ -47,4 +47,4 @@ const RadioGroup = ({ children, defaultValue, name, value: valueProp, onChange,
47
47
  //#endregion
48
48
  export { RadioGroup as t };
49
49
 
50
- //# sourceMappingURL=RadioGroup-D5IITQLz.mjs.map
50
+ //# sourceMappingURL=RadioGroup-pegXtLwD.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup-D5IITQLz.mjs","names":[],"sources":["../components/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import {\n type ChangeEvent,\n Children,\n cloneElement,\n type ComponentPropsWithoutRef,\n type ReactElement,\n type VFC,\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\nimport Radio, { type RadioProps } from 'design-system/components/Radio';\nimport useControlled from 'design-system/lib/useControlled';\n\nconst Container = styled.div<{ size: 'md' | 'sm'; horizontal?: boolean }>`\n & > div {\n margin-bottom: ${Spacing[2]};\n }\n\n ${({ horizontal }) =>\n horizontal &&\n css`\n display: flex;\n align-items: center;\n & > div {\n margin-right: ${Spacing[2]};\n }\n `}\n`;\n\nexport interface RadioGroupProps extends ComponentPropsWithoutRef<'div'> {\n defaultValue?: any;\n name?: string;\n value?: any;\n onChange?: (value: any) => void;\n /**\n * Direction of radio group\n */\n horizontal?: boolean;\n /**\n * Size of radio buttons within the group\n */\n size?: 'md' | 'sm';\n}\n\nexport const RadioGroup: VFC<RadioGroupProps> = ({\n children,\n defaultValue,\n name,\n value: valueProp,\n onChange,\n horizontal = false,\n size = 'md',\n ...elemProps\n}) => {\n const [value, setValue] = useControlled({\n controlledValue: valueProp,\n default: defaultValue,\n });\n\n return (\n <Container role='radiogroup' horizontal={horizontal} size={size} {...elemProps}>\n {/* @ts-expect-error [strict-migration] The following line is not strict; please fix! */}\n {Children.map(children, (child: ReactElement<RadioProps>) => {\n if (child?.type === Radio && (typeof valueProp !== 'undefined' || onChange)) {\n return cloneElement(child, {\n name,\n size,\n checked: child.props.value === value,\n onChange: (e: ChangeEvent<HTMLInputElement>) => {\n const newVal = e.target.value;\n if (typeof valueProp !== 'undefined' && onChange) {\n onChange(newVal);\n } else {\n setValue(newVal);\n }\n },\n });\n }\n\n if (name) {\n return cloneElement(child, { name });\n }\n\n return child;\n })}\n </Container>\n );\n};\n\nexport default RadioGroup;\n"],"mappings":";;;;;;;AAcA,MAAM,YAAY,OAAO,GAAgD;;qBAEpD,QAAQ,GAAG;;;KAG3B,EAAE,iBACH,cACA,GAAG;;;;wBAIiB,QAAQ,GAAG;;MAE7B;;AAkBN,MAAa,cAAoC,EAC/C,UACA,cACA,MACA,OAAO,WACP,UACA,aAAa,OACb,OAAO,MACP,GAAG,gBACC;CACJ,MAAM,CAAC,OAAO,YAAY,cAAc;EACtC,iBAAiB;EACjB,SAAS;EACV,CAAC;AAEF,QACE,oBAAC,WAAD;EAAW,MAAK;EAAyB;EAAkB;EAAM,GAAI;YAElE,SAAS,IAAI,WAAW,UAAoC;AAC3D,OAAI,OAAO,SAAS,UAAU,OAAO,cAAc,eAAe,UAChE,QAAO,aAAa,OAAO;IACzB;IACA;IACA,SAAS,MAAM,MAAM,UAAU;IAC/B,WAAW,MAAqC;KAC9C,MAAM,SAAS,EAAE,OAAO;AACxB,SAAI,OAAO,cAAc,eAAe,SACtC,UAAS,OAAO;SAEhB,UAAS,OAAO;;IAGrB,CAAC;AAGJ,OAAI,KACF,QAAO,aAAa,OAAO,EAAE,MAAM,CAAC;AAGtC,UAAO;IACP;EACQ,CAAA"}
1
+ {"version":3,"file":"RadioGroup-pegXtLwD.mjs","names":[],"sources":["../components/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import {\n type ChangeEvent,\n Children,\n cloneElement,\n type ComponentPropsWithoutRef,\n type ReactElement,\n type VFC,\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\nimport Radio, { type RadioProps } from 'design-system/components/Radio';\nimport useControlled from 'design-system/lib/useControlled';\n\nconst Container = styled.div<{ size: 'md' | 'sm'; horizontal?: boolean }>`\n & > div {\n margin-bottom: ${Spacing[2]};\n }\n\n ${({ horizontal }) =>\n horizontal &&\n css`\n display: flex;\n align-items: center;\n & > div {\n margin-right: ${Spacing[2]};\n }\n `}\n`;\n\nexport interface RadioGroupProps extends ComponentPropsWithoutRef<'div'> {\n defaultValue?: any;\n name?: string;\n value?: any;\n onChange?: (value: any) => void;\n /**\n * Direction of radio group\n */\n horizontal?: boolean;\n /**\n * Size of radio buttons within the group\n */\n size?: 'md' | 'sm';\n}\n\nexport const RadioGroup: VFC<RadioGroupProps> = ({\n children,\n defaultValue,\n name,\n value: valueProp,\n onChange,\n horizontal = false,\n size = 'md',\n ...elemProps\n}) => {\n const [value, setValue] = useControlled({\n controlledValue: valueProp,\n default: defaultValue,\n });\n\n return (\n <Container role='radiogroup' horizontal={horizontal} size={size} {...elemProps}>\n {/* @ts-expect-error [strict-migration] The following line is not strict; please fix! */}\n {Children.map(children, (child: ReactElement<RadioProps>) => {\n if (child?.type === Radio && (typeof valueProp !== 'undefined' || onChange)) {\n return cloneElement(child, {\n name,\n size,\n checked: child.props.value === value,\n onChange: (e: ChangeEvent<HTMLInputElement>) => {\n const newVal = e.target.value;\n if (typeof valueProp !== 'undefined' && onChange) {\n onChange(newVal);\n } else {\n setValue(newVal);\n }\n },\n });\n }\n\n if (name) {\n return cloneElement(child, { name });\n }\n\n return child;\n })}\n </Container>\n );\n};\n\nexport default RadioGroup;\n"],"mappings":";;;;;;;AAcA,MAAM,YAAY,OAAO,GAAgD;;qBAEpD,QAAQ,GAAG;;;KAG3B,EAAE,iBACH,cACA,GAAG;;;;wBAIiB,QAAQ,GAAG;;MAE7B;;AAkBN,MAAa,cAAoC,EAC/C,UACA,cACA,MACA,OAAO,WACP,UACA,aAAa,OACb,OAAO,MACP,GAAG,gBACC;CACJ,MAAM,CAAC,OAAO,YAAY,cAAc;EACtC,iBAAiB;EACjB,SAAS;EACV,CAAC;AAEF,QACE,oBAAC,WAAD;EAAW,MAAK;EAAyB;EAAkB;EAAM,GAAI;YAElE,SAAS,IAAI,WAAW,UAAoC;AAC3D,OAAI,OAAO,SAAS,UAAU,OAAO,cAAc,eAAe,UAChE,QAAO,aAAa,OAAO;IACzB;IACA;IACA,SAAS,MAAM,MAAM,UAAU;IAC/B,WAAW,MAAqC;KAC9C,MAAM,SAAS,EAAE,OAAO;AACxB,SAAI,OAAO,cAAc,eAAe,SACtC,UAAS,OAAO;SAEhB,UAAS,OAAO;;IAGrB,CAAC;AAGJ,OAAI,KACF,QAAO,aAAa,OAAO,EAAE,MAAM,CAAC;AAGtC,UAAO;IACP;EACQ,CAAA"}
@@ -1,2 +1,2 @@
1
- import { n as RadioGroupProps, t as RadioGroup } from "./RadioGroup-Jl1yAvGu.mjs";
1
+ import { n as RadioGroupProps, t as RadioGroup } from "./RadioGroup-DYIfRj02.mjs";
2
2
  export { RadioGroup, RadioGroup as default, RadioGroupProps };
@@ -1,3 +1,4 @@
1
+ import { a as DateFilterPreset } from "./types-Bsf1VsW6.mjs";
1
2
  import { Ref } from "react";
2
3
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
4
  import { DateRange, RangeCalendarProps as RangeCalendarProps$1 } from "react-aria";
@@ -12,6 +13,8 @@ interface RangeCalendarProps extends RangeCalendarProps$1<DateValue$1> {
12
13
  visibleMonths?: 1 | 2;
13
14
  onSelectDate?: (d: CalendarDate) => void;
14
15
  setDateMode: (mode: 'start' | 'end' | null) => void;
16
+ onPresetSelect?: (preset: DateFilterPreset, commit: () => void) => void;
17
+ selectedPreset?: DateFilterPreset | null;
15
18
  /**
16
19
  * From setValue of DateRangePicker
17
20
  */
@@ -26,6 +29,8 @@ declare const RangeCalendar: ({
26
29
  hidePresets,
27
30
  visibleMonths,
28
31
  setDateMode,
32
+ onPresetSelect,
33
+ selectedPreset,
29
34
  setValue,
30
35
  granularity,
31
36
  ...props
@@ -1,25 +1,35 @@
1
+ import { a as DateFilterPreset } from "./types-Bsf1VsW6.mjs";
1
2
  import * as _$react from "react";
2
3
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
4
  import { RangeCalendarState } from "react-stately";
4
- import { CalendarDate } from "@internationalized/date";
5
+ import { CalendarDate, DateValue } from "@internationalized/date";
5
6
  import { RangeValue } from "@react-types/shared";
6
7
 
7
8
  //#region components/DatePicker/Calendar/RangeCalendarPresets.d.ts
8
9
  interface DateRangePreset {
10
+ id: DateFilterPreset;
9
11
  label: string;
10
12
  range: RangeValue<CalendarDate>;
11
13
  }
14
+ /** The preset windows the picker offers; the codec resolves the same ids on read. */
15
+ declare const getDefaultPresets: (tz: string) => DateRangePreset[];
12
16
  interface DateRangePickerPresetsProps {
13
17
  presetsFn?: (tz: string) => DateRangePreset[];
14
18
  state: RangeCalendarState;
15
19
  setDateMode: (mode: 'start' | 'end' | null) => void;
20
+ onPresetSelect?: (preset: DateFilterPreset, commit: () => void) => void;
21
+ selectedPreset?: DateFilterPreset | null;
22
+ commitRange: (value: RangeValue<DateValue>) => void;
16
23
  }
17
24
  declare const _default: _$react.MemoExoticComponent<({
18
25
  presetsFn,
26
+ commitRange,
19
27
  state,
20
28
  setDateMode,
29
+ onPresetSelect,
30
+ selectedPreset,
21
31
  ...props
22
32
  }: DateRangePickerPresetsProps) => _$react_jsx_runtime0.JSX.Element>;
23
33
  //#endregion
24
- export { _default as default };
34
+ export { _default as default, getDefaultPresets };
25
35
  //# sourceMappingURL=RangeCalendarPresets.d.mts.map
@@ -0,0 +1,22 @@
1
+ import { ResizablePanelState } from "./lib/useResizablePanel.mjs";
2
+ import { FC, ReactNode } from "react";
3
+
4
+ //#region components/BottomPanel/ResizableVerticalPanel.d.ts
5
+ interface ResizableVerticalPanelProps {
6
+ /** Panel body, rendered in the scrollable content area below the header. */
7
+ children: ReactNode;
8
+ /** Content for the header row, left of the maximize/minimize/close buttons. */
9
+ headerContent?: ReactNode;
10
+ /** State and drag/resize handlers from `useResizablePanel`. */
11
+ hookState: ResizablePanelState;
12
+ /** Minimum panel height in px. */
13
+ minHeight: number;
14
+ }
15
+ /**
16
+ * Bottom-anchored panel with a drag-to-resize top edge, a header row, and
17
+ * maximize/minimize/close controls.
18
+ */
19
+ declare const ResizableVerticalPanel: FC<ResizableVerticalPanelProps>;
20
+ //#endregion
21
+ export { ResizableVerticalPanel };
22
+ //# sourceMappingURL=ResizableVerticalPanel.d.mts.map
@@ -0,0 +1,19 @@
1
+ import { FC, RefObject } from "react";
2
+
3
+ //#region components/BottomPanel/ResizeHandle.d.ts
4
+ interface ResizeHandleProps {
5
+ ariaLabel: string;
6
+ /** Fires on double-click or Enter/Space so the host can toggle/reset the size. */
7
+ onDoubleClick?: () => void;
8
+ /** Called on each pointer move with the new top edge position (clientY) in px. */
9
+ onMoveTo: (position: number) => void;
10
+ /** Called once when the drag ends (pointerup, cancel, or lost capture). */
11
+ onRelease?: () => void;
12
+ /** The panel being resized; its edge seeds the grab offset so the handle doesn't jump. */
13
+ panelRef: RefObject<HTMLDivElement>;
14
+ }
15
+ /** Vertical resize handle pinned to the top edge of a bottom-anchored panel. */
16
+ declare const ResizeHandle: FC<ResizeHandleProps>;
17
+ //#endregion
18
+ export { ResizeHandle };
19
+ //# sourceMappingURL=ResizeHandle.d.mts.map