@persona/design-system 0.7.1 → 0.7.2

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 (420) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +9 -9
  3. package/dist/Accordion.d.mts +38 -0
  4. package/dist/AccordionItem.d.mts +31 -0
  5. package/dist/{Action-C7INft7X.d.mts → Action-Cyo6KCsS.d.mts} +3 -3
  6. package/dist/Action.d.mts +1 -1
  7. package/dist/AdvancedFilterRuleRow.d.mts +2 -2
  8. package/dist/AdvancedFilterRulesPopover.d.mts +2 -2
  9. package/dist/ArrayValueControl.d.mts +1 -1
  10. package/dist/Attribute.d.mts +3 -3
  11. package/dist/BooleanValueControl.d.mts +1 -1
  12. package/dist/{Breadcrumb-DtW1R9xW.d.mts → Breadcrumb-CYXkrKXl.d.mts} +1 -1
  13. package/dist/Breadcrumb.d.mts +1 -1
  14. package/dist/{Breadcrumbs-B6JyoS8n.d.mts → Breadcrumbs-CP7eUYUy.d.mts} +2 -2
  15. package/dist/Breadcrumbs.d.mts +1 -1
  16. package/dist/{Button-HodDf_bB.d.mts → Button-Dhiund3f.d.mts} +4 -4
  17. package/dist/Button.d.mts +1 -1
  18. package/dist/{Calendar-DrdTvzAa.d.mts → Calendar-CMeIZ0BO.d.mts} +1 -1
  19. package/dist/Calendar.d.mts +1 -1
  20. package/dist/CalendarBase.d.mts +1 -1
  21. package/dist/{Card-CpDwATnX.d.mts → Card-DCYB_mtR.d.mts} +3 -3
  22. package/dist/Card.d.mts +1 -1
  23. package/dist/{Checkbox-CyWXhuby.mjs → Checkbox-AjL7ucoR.mjs} +2 -2
  24. package/dist/{Checkbox-CyWXhuby.mjs.map → Checkbox-AjL7ucoR.mjs.map} +1 -1
  25. package/dist/{Checkbox-C-hMfItK.d.mts → Checkbox-fWj7GkBl.d.mts} +1 -1
  26. package/dist/Checkbox.d.mts +1 -1
  27. package/dist/CheckboxGroupField.d.mts +1 -1
  28. package/dist/ChoicesValueControl.d.mts +1 -1
  29. package/dist/{Combobox-1M6EwVmq.mjs → Combobox-C2b9u955.mjs} +9 -6
  30. package/dist/Combobox-C2b9u955.mjs.map +1 -0
  31. package/dist/{Combobox-DyNllwt8.d.mts → Combobox-CC-Osr57.d.mts} +3 -3
  32. package/dist/Combobox.d.mts +2 -2
  33. package/dist/{ComboboxBase-B3YqkjQp.d.mts → ComboboxBase-Evo0FRxP.d.mts} +7 -5
  34. package/dist/ComboboxBase.d.mts +1 -1
  35. package/dist/{ComboboxMultiSelect-BuwVssvZ.d.mts → ComboboxMultiSelect-CvAc0FT3.d.mts} +2 -2
  36. package/dist/ComboboxMultiSelect.d.mts +1 -1
  37. package/dist/{ComboboxSingleSelect-gJC4v7ER.d.mts → ComboboxSingleSelect-CBm7x0oh.d.mts} +4 -4
  38. package/dist/ComboboxSingleSelect.d.mts +1 -1
  39. package/dist/{CompactBar-DhHh7Roq.d.mts → CompactBar-D_2qMK4y.d.mts} +3 -3
  40. package/dist/CompactBar.d.mts +1 -1
  41. package/dist/{ControlBar-C8kagIck.d.mts → ControlBar-B7j9sOr9.d.mts} +2 -2
  42. package/dist/ControlBar.d.mts +1 -1
  43. package/dist/DataTable.d.mts +3 -3
  44. package/dist/{DateField-2aigfD4u.d.mts → DateField-BamAk9_w.d.mts} +2 -2
  45. package/dist/DateField.d.mts +1 -1
  46. package/dist/{DatePicker-DC_RKjdM.d.mts → DatePicker-C3xNSkPG.d.mts} +2 -2
  47. package/dist/{DatePicker-D9JurBBj.mjs → DatePicker-IgiUI3Wj.mjs} +3 -3
  48. package/dist/{DatePicker-D9JurBBj.mjs.map → DatePicker-IgiUI3Wj.mjs.map} +1 -1
  49. package/dist/DatePicker.d.mts +1 -1
  50. package/dist/{DateRangePicker-ByD6IsLB.d.mts → DateRangePicker-C4QKMo2a.d.mts} +3 -3
  51. package/dist/DateRangePicker.d.mts +1 -1
  52. package/dist/DateRangeValueControl.d.mts +2 -2
  53. package/dist/DateValueControl.d.mts +1 -1
  54. package/dist/DropdownButton.d.mts +2 -2
  55. package/dist/{DropdownMenu-Xl1BYXsY.d.mts → DropdownMenu-DL5ye-0m.d.mts} +2 -2
  56. package/dist/DropdownMenu.d.mts +1 -1
  57. package/dist/{ErrorProps-Dgu98PkH.d.mts → ErrorProps-BA0-m_Wp.d.mts} +1 -1
  58. package/dist/ErrorProps.d.mts +1 -1
  59. package/dist/{FieldRegistry-BdtxI1N2.d.mts → FieldRegistry-bKxrF1gC.d.mts} +2 -2
  60. package/dist/FieldRegistry.d.mts +1 -1
  61. package/dist/{FilterBar-jYjPeD7F.d.mts → FilterBar-DhlBLWxw.d.mts} +4 -4
  62. package/dist/FilterBar.d.mts +1 -1
  63. package/dist/FilterPickerMenu.d.mts +2 -2
  64. package/dist/FilterPill.d.mts +1 -1
  65. package/dist/FilterPopover.d.mts +1 -1
  66. package/dist/FloatValueControl.d.mts +1 -1
  67. package/dist/{FormControl-CJfYdgZF.d.mts → FormControl-D5xyPkST.d.mts} +6 -2
  68. package/dist/{FormControl-BEk4F1EV.mjs → FormControl-DnfZTli_.mjs} +25 -10
  69. package/dist/FormControl-DnfZTli_.mjs.map +1 -0
  70. package/dist/FormControl.d.mts +1 -1
  71. package/dist/FormControlLabel.d.mts +1 -1
  72. package/dist/{FormField-ByT0avVx.mjs → FormField-74TPV8-8.mjs} +27 -17
  73. package/dist/FormField-74TPV8-8.mjs.map +1 -0
  74. package/dist/{FormField-CK8o1sMB.d.mts → FormField-BJZUj6jg.d.mts} +4 -2
  75. package/dist/FormField.d.mts +1 -1
  76. package/dist/Grid-DOyYYsvk.mjs +92 -0
  77. package/dist/Grid-DOyYYsvk.mjs.map +1 -0
  78. package/dist/Grid.d.mts +4 -1
  79. package/dist/{Header-ZnHGm8fs.d.mts → Header-BqEKkEp5.d.mts} +1 -1
  80. package/dist/Header.d.mts +1 -1
  81. package/dist/{HelperTooltip-CQpPO16Q.d.mts → HelperTooltip-mOVSuEB8.d.mts} +2 -2
  82. package/dist/HelperTooltip.d.mts +1 -1
  83. package/dist/{IconButton-zu-VNp1h.d.mts → IconButton-CjPFhpVG.d.mts} +2 -2
  84. package/dist/IconButton-CqTPMhjV.mjs.map +1 -1
  85. package/dist/IconButton.d.mts +1 -1
  86. package/dist/ImageTile.d.mts +1 -1
  87. package/dist/InlineCombobox.d.mts +1 -1
  88. package/dist/InlineInput.d.mts +1 -1
  89. package/dist/{Input-Ce8FvSYf.d.mts → Input-CZ_6KWDN.d.mts} +3 -3
  90. package/dist/{Input-Bc2yWH3j.mjs → Input-C_3QwAAt.mjs} +2 -2
  91. package/dist/{Input-Bc2yWH3j.mjs.map → Input-C_3QwAAt.mjs.map} +1 -1
  92. package/dist/Input.d.mts +1 -1
  93. package/dist/{InputProps-B1Xod4wm.d.mts → InputProps-lag6BM5h.d.mts} +2 -2
  94. package/dist/InputProps.d.mts +1 -1
  95. package/dist/IntegerValueControl.d.mts +1 -1
  96. package/dist/Link.d.mts +1 -1
  97. package/dist/{ListBox-CFBhILRy.mjs → ListBox-D4j4LCT3.mjs} +2 -2
  98. package/dist/{ListBox-CFBhILRy.mjs.map → ListBox-D4j4LCT3.mjs.map} +1 -1
  99. package/dist/{ListBox-D-8iwYVj.d.mts → ListBox-nYAdYVQx.d.mts} +3 -3
  100. package/dist/ListBox.d.mts +1 -1
  101. package/dist/ListBoxField.d.mts +3 -2
  102. package/dist/LoadingShimmer.d.mts +1 -1
  103. package/dist/{LogicRow-CgPds2tq.d.mts → LogicRow-k4ZPtjN0.d.mts} +3 -3
  104. package/dist/LogicRow.d.mts +1 -1
  105. package/dist/MaskedInput.d.mts +2 -2
  106. package/dist/{Menu-CSwzFqdv.d.mts → Menu-Bu7-KBhp.d.mts} +3 -3
  107. package/dist/Menu.d.mts +1 -1
  108. package/dist/Modal-BN0K8QXi.mjs +258 -0
  109. package/dist/Modal-BN0K8QXi.mjs.map +1 -0
  110. package/dist/Modal-Dwq-QBw_.d.mts +145 -0
  111. package/dist/Modal.d.mts +2 -145
  112. package/dist/{PageHeader-DJOlcAiW.mjs → PageHeader-BTtm3hRQ.mjs} +1 -1
  113. package/dist/{PageHeader-DJOlcAiW.mjs.map → PageHeader-BTtm3hRQ.mjs.map} +1 -1
  114. package/dist/PageHeader.d.mts +1 -1
  115. package/dist/PageLayoutFrame.d.mts +28 -0
  116. package/dist/{PageSelector-BMz2Q4P6.d.mts → PageSelector-CeGC84N1.d.mts} +3 -3
  117. package/dist/PageSelector.d.mts +1 -1
  118. package/dist/{Pagination-B1u203DE.mjs → Pagination-CPd4mSnw.mjs} +3 -3
  119. package/dist/{Pagination-B1u203DE.mjs.map → Pagination-CPd4mSnw.mjs.map} +1 -1
  120. package/dist/{Pagination-ne9hnVoe.d.mts → Pagination-H-CcXrCD.d.mts} +2 -2
  121. package/dist/Pagination.d.mts +1 -1
  122. package/dist/{PillShell-ChTB_koa.d.mts → PillShell-BQC-k7Rl.d.mts} +2 -2
  123. package/dist/PillShell.d.mts +1 -1
  124. package/dist/ProgressIndicator-3A4Aqci6.mjs +188 -0
  125. package/dist/ProgressIndicator-3A4Aqci6.mjs.map +1 -0
  126. package/dist/ProgressIndicator-DbOLOaxJ.d.mts +66 -0
  127. package/dist/ProgressIndicator.d.mts +2 -66
  128. package/dist/{PseudoClassProps-CdRF3QNn.d.mts → PseudoClassProps-CHtBNv8B.d.mts} +1 -1
  129. package/dist/PseudoClassProps.d.mts +1 -1
  130. package/dist/{Radio-Ds1pODKw.mjs → Radio-Cxt89w8s.mjs} +2 -2
  131. package/dist/{Radio-Ds1pODKw.mjs.map → Radio-Cxt89w8s.mjs.map} +1 -1
  132. package/dist/{RadioGroup-HIC9V2hO.mjs → RadioGroup-B6Cg1kdm.mjs} +2 -2
  133. package/dist/{RadioGroup-HIC9V2hO.mjs.map → RadioGroup-B6Cg1kdm.mjs.map} +1 -1
  134. package/dist/{RadioGroup-CxL6LW4q.d.mts → RadioGroup-BjrfVPZQ.d.mts} +1 -1
  135. package/dist/RadioGroup.d.mts +1 -1
  136. package/dist/{RangeCalendar-B7TwRJbg.d.mts → RangeCalendar-CPnLaM-J.d.mts} +2 -2
  137. package/dist/RangeCalendar.d.mts +1 -1
  138. package/dist/RangeCalendarPresets.d.mts +1 -1
  139. package/dist/{RouterContext-B7N12wkK.d.mts → RouterContext-CbvHIl4K.d.mts} +2 -2
  140. package/dist/RouterContext.d.mts +1 -1
  141. package/dist/{RouterLink-Bq36EGjc.d.mts → RouterLink-v9AG9fYa.d.mts} +2 -2
  142. package/dist/RouterLink.d.mts +1 -1
  143. package/dist/RuleEditorFields.d.mts +2 -2
  144. package/dist/RulesPill.d.mts +1 -1
  145. package/dist/{SearchInput-D69WxMNq.d.mts → SearchInput-CIjwmT8R.d.mts} +2 -2
  146. package/dist/SearchInput.d.mts +1 -1
  147. package/dist/SectionHeading.d.mts +1 -1
  148. package/dist/{SegmentedControl-OHrfJiw0.mjs → SegmentedControl-BcwfLuHA.mjs} +12 -5
  149. package/dist/SegmentedControl-BcwfLuHA.mjs.map +1 -0
  150. package/dist/{SegmentedControl-vCnGsdXo.d.mts → SegmentedControl-Crr_aHAs.d.mts} +2 -1
  151. package/dist/SegmentedControl.d.mts +1 -1
  152. package/dist/{Select-DE7uv9C8.mjs → Select-BstCz8P1.mjs} +2 -2
  153. package/dist/{Select-DE7uv9C8.mjs.map → Select-BstCz8P1.mjs.map} +1 -1
  154. package/dist/{Select-sQb4dQwT.d.mts → Select-CJQeuCiF.d.mts} +3 -3
  155. package/dist/Select.d.mts +1 -1
  156. package/dist/SingleColumnLayout.d.mts +16 -0
  157. package/dist/SplitColumnLayout.d.mts +19 -0
  158. package/dist/{Stack-8KGPQp0u.d.mts → Stack-RVptVTVi.d.mts} +1 -1
  159. package/dist/Stack.d.mts +1 -1
  160. package/dist/{Sticker-Bf9rhSkv.d.mts → Sticker-BVX38LKi.d.mts} +4 -4
  161. package/dist/Sticker.d.mts +1 -1
  162. package/dist/StringValueControl.d.mts +1 -1
  163. package/dist/Tab.d.mts +1 -1
  164. package/dist/{Table-BefytM6w.d.mts → Table-DFiSWroB.d.mts} +1 -1
  165. package/dist/Table.d.mts +1 -1
  166. package/dist/{TableBody-BZ34-_wV.d.mts → TableBody-Di9JYHDN.d.mts} +1 -1
  167. package/dist/TableBody.d.mts +1 -1
  168. package/dist/{TableBox-NP6bhtKb.mjs → TableBox-DAQ3Plqx.mjs} +3 -3
  169. package/dist/{TableBox-NP6bhtKb.mjs.map → TableBox-DAQ3Plqx.mjs.map} +1 -1
  170. package/dist/TableBox.d.mts +2 -2
  171. package/dist/{TableBoxCell-CHGw9HVj.d.mts → TableBoxCell-D6h1X5ph.d.mts} +6 -6
  172. package/dist/TableBoxCell.d.mts +1 -1
  173. package/dist/TableBoxField.d.mts +4 -3
  174. package/dist/{TableBoxRow-BljsXKrL.d.mts → TableBoxRow-C6l6J4mq.d.mts} +3 -3
  175. package/dist/TableBoxRow.d.mts +1 -1
  176. package/dist/{TableBoxRowActions-h6HNEv9F.d.mts → TableBoxRowActions-CsLN1b1J.d.mts} +2 -2
  177. package/dist/TableBoxRowActions.d.mts +1 -1
  178. package/dist/{TableCell-DorRxyke.d.mts → TableCell-WSDXw79Q.d.mts} +2 -2
  179. package/dist/TableCell.d.mts +1 -1
  180. package/dist/{TableControls-CYTpBlQN.mjs → TableControls-BxuPCUQS.mjs} +19 -11
  181. package/dist/TableControls-BxuPCUQS.mjs.map +1 -0
  182. package/dist/{TableControls-BtGFiZeD.d.mts → TableControls-cswMgBAr.d.mts} +3 -3
  183. package/dist/TableControls.d.mts +1 -1
  184. package/dist/{TableControlsContext-C3DYeUmB.d.mts → TableControlsContext-Cbh8wear.d.mts} +2 -2
  185. package/dist/TableControlsContext.d.mts +1 -1
  186. package/dist/{TableHead-B0Fdldgw.d.mts → TableHead-CkL1fEg2.d.mts} +1 -1
  187. package/dist/TableHead.d.mts +1 -1
  188. package/dist/{TableHeaderCell-C_7X8QAT.d.mts → TableHeaderCell-K9Ry6YqO.d.mts} +1 -1
  189. package/dist/TableHeaderCell.d.mts +1 -1
  190. package/dist/{TableLayout-CXVVzq0e.d.mts → TableLayout-CYRGIFEl.d.mts} +1 -1
  191. package/dist/TableLayout.d.mts +1 -1
  192. package/dist/{TableRow-Dr61XJNw.d.mts → TableRow-DMHlo1eg.d.mts} +2 -2
  193. package/dist/TableRow.d.mts +1 -1
  194. package/dist/TableTH.d.mts +1 -1
  195. package/dist/{TableViewConfigurationDropdown-CCtwcB3I.d.mts → TableViewConfigurationDropdown-BRbOcVNc.d.mts} +2 -2
  196. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  197. package/dist/{Text-DD_W_ixb.d.mts → Text-B69gp3X_.d.mts} +3 -3
  198. package/dist/Text.d.mts +1 -1
  199. package/dist/{TextArea-8TuVvmvj.mjs → TextArea-CcxltuBh.mjs} +2 -2
  200. package/dist/{TextArea-8TuVvmvj.mjs.map → TextArea-CcxltuBh.mjs.map} +1 -1
  201. package/dist/{TextArea-DOofaXJi.d.mts → TextArea-Cjsdl07-.d.mts} +2 -2
  202. package/dist/TextArea.d.mts +1 -1
  203. package/dist/{TextUnderlineTooltip-BPLKU9wu.d.mts → TextUnderlineTooltip-DDzKLCeX.d.mts} +2 -2
  204. package/dist/TextUnderlineTooltip.d.mts +1 -1
  205. package/dist/Tile.d.mts +1 -1
  206. package/dist/Toast.d.mts +1 -1
  207. package/dist/{Toggle-2nrUX591.d.mts → Toggle-B5sSdb_q.d.mts} +3 -1
  208. package/dist/{Toggle-Dcn2Rqgm.mjs → Toggle-DWbJOwf3.mjs} +4 -3
  209. package/dist/Toggle-DWbJOwf3.mjs.map +1 -0
  210. package/dist/Toggle.d.mts +1 -1
  211. package/dist/{Tooltip-Cnqf1-tx.d.mts → Tooltip-x1pFf-Mj.d.mts} +2 -2
  212. package/dist/Tooltip.d.mts +1 -1
  213. package/dist/{TruncatedText-g2T5HlqX.d.mts → TruncatedText-BE8FuEQm.d.mts} +1 -1
  214. package/dist/WizardModal.d.mts +41 -0
  215. package/dist/accordionTitleTypography-BYhjSN9t.d.mts +17 -0
  216. package/dist/accordionTitleTypography.d.mts +2 -0
  217. package/dist/{codec-CoX6LfOY.d.mts → codec-BcgsGCHE.d.mts} +2 -2
  218. package/dist/codec.d.mts +1 -1
  219. package/dist/{color-Bt0Lv1e3.d.mts → color-LH7zKfKo.d.mts} +2 -2
  220. package/dist/components/Accordion/index.d.mts +4 -0
  221. package/dist/components/Accordion/index.mjs +330 -0
  222. package/dist/components/Accordion/index.mjs.map +1 -0
  223. package/dist/components/Breadcrumbs/index.d.mts +1 -1
  224. package/dist/components/Button/index.d.mts +2 -2
  225. package/dist/components/ButtonGroup/index.mjs +1 -1
  226. package/dist/components/Card/index.d.mts +2 -2
  227. package/dist/components/CardV2/index.d.mts +1 -1
  228. package/dist/components/Checkbox/index.d.mts +1 -1
  229. package/dist/components/Checkbox/index.mjs +1 -1
  230. package/dist/components/Combobox/index.d.mts +2 -2
  231. package/dist/components/Combobox/index.mjs +1 -1
  232. package/dist/components/DataTable/TableControls/index.d.mts +19 -19
  233. package/dist/components/DataTable/TableControls/index.mjs +1 -1
  234. package/dist/components/DataTable/index.mjs +3 -3
  235. package/dist/components/DataTable/index.mjs.map +1 -1
  236. package/dist/components/DataTable/types.d.mts +2 -2
  237. package/dist/components/DatePicker/index.d.mts +5 -5
  238. package/dist/components/DatePicker/index.mjs +1 -1
  239. package/dist/components/DropdownMenu/index.d.mts +1 -1
  240. package/dist/components/FormControl/index.d.mts +2 -2
  241. package/dist/components/FormControl/index.mjs +2 -2
  242. package/dist/components/FormField/index.d.mts +1 -1
  243. package/dist/components/FormField/index.mjs +1 -1
  244. package/dist/components/Grid/index.d.mts +2 -2
  245. package/dist/components/Grid/index.mjs +2 -85
  246. package/dist/components/ImageTile/index.mjs +1 -1
  247. package/dist/components/Input/index.d.mts +1 -1
  248. package/dist/components/Input/index.mjs +1 -1
  249. package/dist/components/Link/index.mjs.map +1 -1
  250. package/dist/components/ListBox/index.d.mts +3 -3
  251. package/dist/components/ListBox/index.mjs +1 -1
  252. package/dist/components/MaskedInput/index.mjs +1 -1
  253. package/dist/components/Menu/index.d.mts +1 -1
  254. package/dist/components/Modal/index.d.mts +1 -1
  255. package/dist/components/Modal/index.mjs +1 -257
  256. package/dist/components/PageHeader/index.mjs +1 -1
  257. package/dist/components/Pagination/index.d.mts +3 -3
  258. package/dist/components/Pagination/index.mjs +1 -1
  259. package/dist/components/ProgressIndicator/index.d.mts +2 -2
  260. package/dist/components/ProgressIndicator/index.mjs +1 -187
  261. package/dist/components/Radio/index.mjs +1 -1
  262. package/dist/components/RadioGroup/index.d.mts +1 -1
  263. package/dist/components/RadioGroup/index.mjs +1 -1
  264. package/dist/components/SegmentedControl/index.d.mts +1 -1
  265. package/dist/components/SegmentedControl/index.mjs +1 -1
  266. package/dist/components/Select/index.d.mts +1 -1
  267. package/dist/components/Select/index.mjs +1 -1
  268. package/dist/components/Stack/index.d.mts +1 -1
  269. package/dist/components/Sticker/index.d.mts +1 -1
  270. package/dist/components/Table/index.d.mts +8 -8
  271. package/dist/components/TableBox/index.d.mts +2 -2
  272. package/dist/components/TableBox/index.mjs +1 -1
  273. package/dist/components/Text/index.d.mts +1 -1
  274. package/dist/components/TextArea/index.d.mts +1 -1
  275. package/dist/components/TextArea/index.mjs +1 -1
  276. package/dist/components/Toggle/index.d.mts +1 -1
  277. package/dist/components/Toggle/index.mjs +1 -1
  278. package/dist/components/Tooltip/index.d.mts +3 -3
  279. package/dist/components/WizardModal/index.d.mts +2 -0
  280. package/dist/components/WizardModal/index.mjs +106 -0
  281. package/dist/components/WizardModal/index.mjs.map +1 -0
  282. package/dist/compound-expression.d.mts +1 -1
  283. package/dist/{constants-D8bzZ-7B.d.mts → constants-BpwnTzcv.d.mts} +1 -1
  284. package/dist/constants.d.mts +1 -1
  285. package/dist/{createPath-BDYRvl57.d.mts → createPath-Bst12Uxr.d.mts} +2 -2
  286. package/dist/createPath.d.mts +1 -1
  287. package/dist/{date-range-rule-value-jZAHuxZJ.d.mts → date-range-rule-value-C4ir2Y8W.d.mts} +2 -2
  288. package/dist/date-range-rule-value.d.mts +1 -1
  289. package/dist/{date-rule-intent-CC1LdkE7.d.mts → date-rule-intent-gKmuxMVA.d.mts} +3 -3
  290. package/dist/date-rule-intent.d.mts +1 -1
  291. package/dist/display.d.mts +1 -1
  292. package/dist/fieldPickerOptions.d.mts +2 -2
  293. package/dist/{filter-size-context-BGczB5R9.d.mts → filter-size-context-BOpH6pBm.d.mts} +2 -2
  294. package/dist/filter-size-context.d.mts +1 -1
  295. package/dist/helpers.d.mts +1 -1
  296. package/dist/{index-BZmGEbsA.d.mts → index-BXdrzR0c.d.mts} +3 -3
  297. package/dist/{index-DalP_w0c.d.mts → index-C2-PBfN3.d.mts} +2 -2
  298. package/dist/{index-BRKXhLGa.d.mts → index-c0aXmZV9.d.mts} +2 -2
  299. package/dist/index-dhjtMp5F.d.mts +1 -0
  300. package/dist/index-xmouCHX9.d.mts +1 -0
  301. package/dist/index.d.mts +1 -1
  302. package/dist/index2.d.mts +1 -1
  303. package/dist/index3.d.mts +3 -3
  304. package/dist/index4.d.mts +1 -1
  305. package/dist/index5.d.mts +14 -14
  306. package/dist/{input-DCJivcWf.d.mts → input-DVJhMlxU.d.mts} +3 -3
  307. package/dist/inputFields.d.mts +14 -12
  308. package/dist/{jsonSchema-c_EfAj8y.d.mts → jsonSchema-DmdZYC4a.d.mts} +35 -11
  309. package/dist/lib/PDSProvider.d.mts +2 -2
  310. package/dist/lib/TruncatedText.d.mts +1 -1
  311. package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
  312. package/dist/lib/color.d.mts +1 -1
  313. package/dist/lib/date-filter/index.d.mts +2 -2
  314. package/dist/lib/jsonSchema.d.mts +2 -2
  315. package/dist/lib/jsonSchema.mjs +10 -10
  316. package/dist/lib/jsonSchema.mjs.map +1 -1
  317. package/dist/lib/message.d.mts +1 -1
  318. package/dist/lib/methodChain.d.mts +1 -1
  319. package/dist/lib/objectSchemaTypes.d.mts +1 -1
  320. package/dist/lib/pseudoClass.d.mts +1 -1
  321. package/dist/lib/router/adapters/reactRouter.d.mts +1 -1
  322. package/dist/lib/router/adapters/tanstack.d.mts +1 -1
  323. package/dist/lib/router/index.d.mts +5 -5
  324. package/dist/lib/semanticColor.d.mts +1 -1
  325. package/dist/{message-CjIHdhX1.d.mts → message-CKSLIKF0.d.mts} +1 -1
  326. package/dist/mixins/focus.d.mts +1 -1
  327. package/dist/mixins/hoverable.d.mts +2 -2
  328. package/dist/mixins/input.d.mts +1 -1
  329. package/dist/mixins/menuItem.d.mts +2 -2
  330. package/dist/mixins/text.d.mts +1 -1
  331. package/dist/{operators-x_ZENhrT.d.mts → operators-1_jTgYRX.d.mts} +2 -2
  332. package/dist/operators.d.mts +1 -1
  333. package/dist/{palette-qgPRWgUN.d.mts → palette-CMOEyNPH.d.mts} +3 -3
  334. package/dist/palette.d.mts +1 -1
  335. package/dist/patterns/LayoutLoadingShimmer/index.mjs +1 -1
  336. package/dist/patterns/PageLayout/index.d.mts +4 -1
  337. package/dist/patterns/PageLayout/index.mjs +99 -2
  338. package/dist/patterns/PageLayout/index.mjs.map +1 -1
  339. package/dist/reactRouterFallback.d.mts +1 -1
  340. package/dist/relative-date-label.d.mts +1 -1
  341. package/dist/scrollExpandedItemIntoView.d.mts +12 -0
  342. package/dist/{semantic-DUctmpu_.d.mts → semantic-BXwNUd4a.d.mts} +1 -1
  343. package/dist/{semanticColor-IAhXS17y.d.mts → semanticColor-Cru2gSys.d.mts} +3 -3
  344. package/dist/{text-DjTGRUM1.d.mts → text-CxIup7HJ.d.mts} +1 -1
  345. package/dist/{theme-DKiszVRN.d.mts → theme-CW6qlONZ.d.mts} +3 -3
  346. package/dist/theme.d.mts +1 -1
  347. package/dist/tone.d.mts +3 -3
  348. package/dist/{types-gnF3MPfk2.d.mts → types-3iEDsymE.d.mts} +2 -2
  349. package/dist/{types-CuQSgl1F.d.mts → types-B-stjYNc.d.mts} +1 -1
  350. package/dist/{types-N8PYonjD.d.mts → types-BEjWTkZV.d.mts} +2 -2
  351. package/dist/{types-CcZbBH0e.d.mts → types-ChkiGhjQ.d.mts} +1 -1
  352. package/dist/{types-D8rWSj3z.d.mts → types-YojUycQK.d.mts} +1 -1
  353. package/dist/{types-RWjW1d9I.d.mts → types-g-aqbnek.d.mts} +1 -1
  354. package/dist/types.d.mts +1 -1
  355. package/dist/types2.d.mts +1 -1
  356. package/dist/types3.d.mts +1 -1
  357. package/dist/types4.d.mts +1 -1
  358. package/dist/types5.d.mts +1 -1
  359. package/dist/types6.d.mts +1 -1
  360. package/dist/{url-state-C2gl07_y.d.mts → url-state-CHK2N2fA.d.mts} +2 -2
  361. package/dist/url-state.d.mts +1 -1
  362. package/dist/useComboboxFooterAction.d.mts +1 -1
  363. package/dist/{useFilterStateV2-BQYcAdKR.d.mts → useFilterStateV2-B26e5iUx.d.mts} +3 -3
  364. package/dist/useFilterStateV2.d.mts +1 -1
  365. package/dist/{useFormField-DsvC5dOb.mjs → useFormField-BzhMbl5P.mjs} +2 -1
  366. package/dist/useFormField-BzhMbl5P.mjs.map +1 -0
  367. package/dist/{useFormField-DDbo-ExT.d.mts → useFormField-DPFClB5h.d.mts} +4 -2
  368. package/dist/useFormField.d.mts +1 -1
  369. package/dist/{useLocationPathname-K2N4fw8j.d.mts → useLocationPathname-CnRd_Rzn.d.mts} +1 -1
  370. package/dist/useLocationPathname.d.mts +1 -1
  371. package/dist/{useTableBoxDragAndDrop-CbbH3pMK.d.mts → useTableBoxDragAndDrop-DWlG5vhl.d.mts} +1 -1
  372. package/dist/useTableBoxDragAndDrop.d.mts +1 -1
  373. package/dist/useTruncation.d.mts +1 -1
  374. package/dist/{utilities-D0EhDri-.d.mts → utilities-BcGuP8Fd.d.mts} +1 -1
  375. package/dist/utilities.d.mts +1 -1
  376. package/dist/utils/testing.d.mts +1 -1
  377. package/dist/utils/testing.mjs.map +1 -1
  378. package/dist/utils.d.mts +1 -1
  379. package/dist/{validation-CMtfUd-R.d.mts → validation-B-Om4ANo.d.mts} +3 -3
  380. package/dist/validation.d.mts +1 -1
  381. package/dist/{value-control-resolver-Au9JNS5z.d.mts → value-control-resolver-BiyhB8zt.d.mts} +2 -2
  382. package/dist/value-control-resolver.d.mts +1 -1
  383. package/dist/variables/effect.d.mts +1 -1
  384. package/dist/variables/semantic.d.mts +1 -1
  385. package/llms.txt +10 -1
  386. package/package.json +5 -3
  387. package/skills/ui-authoring/COMPONENTS.md +5 -1
  388. package/skills/ui-authoring/PATTERNS.md +74 -115
  389. package/dist/Combobox-1M6EwVmq.mjs.map +0 -1
  390. package/dist/FormControl-BEk4F1EV.mjs.map +0 -1
  391. package/dist/FormField-ByT0avVx.mjs.map +0 -1
  392. package/dist/SegmentedControl-OHrfJiw0.mjs.map +0 -1
  393. package/dist/TableControls-CYTpBlQN.mjs.map +0 -1
  394. package/dist/Toggle-Dcn2Rqgm.mjs.map +0 -1
  395. package/dist/components/Grid/index.mjs.map +0 -1
  396. package/dist/components/Modal/index.mjs.map +0 -1
  397. package/dist/components/ProgressIndicator/index.mjs.map +0 -1
  398. package/dist/fieldSchemaTypes-BVYSm74B.d.mts +0 -39
  399. package/dist/lib/fieldSchemaTypes.d.mts +0 -2
  400. package/dist/lib/fieldSchemaTypes.mjs +0 -41
  401. package/dist/lib/fieldSchemaTypes.mjs.map +0 -1
  402. package/dist/useFormField-DsvC5dOb.mjs.map +0 -1
  403. /package/dist/{index-B33elXxm.d.mts → index-BCh-G39Y2.d.mts} +0 -0
  404. /package/dist/{index-B_BBnMou.d.mts → index-BMBcfD_R.d.mts} +0 -0
  405. /package/dist/{index-BrGZHEgX.d.mts → index-BOn0AAue.d.mts} +0 -0
  406. /package/dist/{index-BwAfCVZH2.d.mts → index-BcsXXrHq.d.mts} +0 -0
  407. /package/dist/{index-C6HcjJiY.d.mts → index-BwFl_eS0.d.mts} +0 -0
  408. /package/dist/{index-CX869wwk.d.mts → index-C-lwXyQ6.d.mts} +0 -0
  409. /package/dist/{index-CjDodOH2.d.mts → index-C1o2TFfS.d.mts} +0 -0
  410. /package/dist/{index-CsuikFeJ.d.mts → index-C3kE54DD.d.mts} +0 -0
  411. /package/dist/{index-CzItj62a.d.mts → index-CREkvfw9.d.mts} +0 -0
  412. /package/dist/{index-D13oYj4_.d.mts → index-CfCYi7PF.d.mts} +0 -0
  413. /package/dist/{index-D4DUvwPf.d.mts → index-DCTy4zg0.d.mts} +0 -0
  414. /package/dist/{index-DMRtRo7y.d.mts → index-DWIh4oP5.d.mts} +0 -0
  415. /package/dist/{index-DXJd7-2Z.d.mts → index-De7MV8-j.d.mts} +0 -0
  416. /package/dist/{index-DZlqSwCF.d.mts → index-DgJfEygr.d.mts} +0 -0
  417. /package/dist/{index-DeVKzGce.d.mts → index-DrK1_jKY.d.mts} +0 -0
  418. /package/dist/{index-Deol7ZWO.d.mts → index-Es5nKSSL.d.mts} +0 -0
  419. /package/dist/{index-DztUdPP_.d.mts → index-Qwqzz3XM.d.mts} +0 -0
  420. /package/dist/{index-Rvd9MEUQ.d.mts → index-Wc1llEvP.d.mts} +0 -0
@@ -1,2 +1,2 @@
1
- import { n as PageInput, r as PageSelector, t as PAGE_LIMIT_BEFORE_SCROLL_MODE } from "./PageSelector-BMz2Q4P6.mjs";
1
+ import { n as PageInput, r as PageSelector, t as PAGE_LIMIT_BEFORE_SCROLL_MODE } from "./PageSelector-CeGC84N1.mjs";
2
2
  export { PAGE_LIMIT_BEFORE_SCROLL_MODE, PageInput, PageSelector as default };
@@ -2,8 +2,8 @@ import { a as styled } from "./styledComponentsInterop-NxwFjeA4.mjs";
2
2
  import { semanticColor } from "./lib/semanticColor.mjs";
3
3
  import { t as HStack } from "./Stack-ChsImaEY.mjs";
4
4
  import { n as Button } from "./IconButton-CqTPMhjV.mjs";
5
- import { n as Input } from "./Input-Bc2yWH3j.mjs";
6
- import { n as Select, t as Option } from "./Select-DE7uv9C8.mjs";
5
+ import { n as Input } from "./Input-C_3QwAAt.mjs";
6
+ import { n as Select, t as Option } from "./Select-BstCz8P1.mjs";
7
7
  import { Color, Spacing, Typography } from "@persona/design-tokens";
8
8
  import { useEffect, useMemo, useState } from "react";
9
9
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -203,4 +203,4 @@ var Pagination_default = Pagination;
203
203
  //#endregion
204
204
  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 };
205
205
 
206
- //# sourceMappingURL=Pagination-B1u203DE.mjs.map
206
+ //# sourceMappingURL=Pagination-CPd4mSnw.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination-B1u203DE.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';\nimport { semanticColor } from 'design-system/lib/semanticColor';\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: ${({ theme }) => semanticColor(theme, 'FgAccentStatic', 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';\nimport { semanticColor } from 'design-system/lib/semanticColor';\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: ${({ theme }) => semanticColor(theme, 'FgPrimary', 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-CPd4mSnw.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';\nimport { semanticColor } from 'design-system/lib/semanticColor';\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: ${({ theme }) => semanticColor(theme, 'FgAccentStatic', 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';\nimport { semanticColor } from 'design-system/lib/semanticColor';\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: ${({ theme }) => semanticColor(theme, 'FgPrimary', 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":";;;;;;;;;;;AAAA,MAAa,4BAA4B;CAAC;CAAI;CAAI;CAAI;CAAK;CAAI;AAC/D,MAAa,gBAAgB;;;ACY7B,MAAa,gCAAgC;AAE7C,MAAM,oBAAoB,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,YAAY,CAAC;aAC1D,QAAQ,GAAG;;AAGxB,MAAa,YAAY,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,UAAU,CAAC;;;AAgBlE,SAAwB,aAAa,EACnC,kBACA,qBACA,WACA,gBACoB;CACpB,MAAM,EACJ,gBAAgB,aAChB,eAAe,YACf,eAAe,eACb,oBAAoB,EAAE;CAC1B,MAAM,CAAC,cAAc,mBAAmB,SAA6B,YAAY;CAGjF,MAAM,+BAA+B,cAC7B,SAAS,qBAAqB,IAAI,EACxC,CAAC,oBAAoB,CACtB;AAID,iBAAgB;AACd,MAAI,eAAe,KACjB,iBAAgB,YAAY;IAE7B,CAAC,YAAY,CAAC;AAEjB,KAAI,CAAC,iBACH,QAAO,oBAAC,OAAD,EAAO,CAAA;AAGhB,QACE,qBAAC,mBAAD;EAAmB,aAAU;EAA4B,IAAG;YAA5D;GACE,qBAAC,WAAD,EAAA,UAAA;IACG,aAAA,OAA8C,CAAC,aAC9C,oBAAC,OAAD;KACE,cAAW;KACX,MAAK;KACL,WAAW;KACX,WAAW,MAAM;MACf,MAAM,QAAQ,EAAE,OAAO;AACvB,UAAI,OAAO,MAAM,MAAM,CACrB,iBAAgB,KAAA,EAAU;WACrB;AAEL,uBAAgB,MAAM;OACtB,MAAM,eAAe,KAAK,IAAI,KAAK,IAAI,EAAE,OAAO,eAAe,EAAE,EAAE,WAAW;AAC9E,oCAA6B,aAAa;AAC1C,sBAAe,aAAa;;;KAGhC,SAAS,MAAM;AAEb,UAAI,OAAO,MAAM,EAAE,OAAO,cAAc,CACtC,iBAAgB,YAAY;;KAGhC,KAAK;KACL,KAAK;KACL,MAAK;KACL,UAAU;KACV,OAAO,gBAAgB;KACvB,CAAA,GAEF,cAAc;IACd;IACE,aAAa,SAAS;IAAW;IAC3B,EAAA,CAAA;GACZ,oBAAC,QAAD;IACE,IAAG;IACH,UAAU,gBAAgB,KAAK;IAC/B,eAAe;AACb,SAAI,gBAAgB,GAAG;MACrB,MAAM,cAAc,cAAc;AAClC,sBAAgB,YAAY;AAC5B,0BAAoB,YAAY;AAChC,qBAAe,YAAY;;;IAG/B,aAAU;IACV,SAAQ;IACR,MAAK;IACL,OAAM;IACN,cAAW;cACZ;IAEQ,CAAA;GACT,oBAAC,QAAD;IACE,IAAG;IACH,UAAW,gBAAgB,cAAc,CAAC,cAAe;IACzD,eAAe;AACb,SAAI,gBAAgB,cAAc,YAAY;MAC5C,MAAM,cAAc,cAAc;AAClC,sBAAgB,YAAY;AAC5B,0BAAoB,YAAY;AAChC,qBAAe,YAAY;;;IAG/B,aAAU;IACV,SAAQ;IACR,MAAK;IACL,OAAM;IACN,cAAW;cACZ;IAEQ,CAAA;GACS;;;;;ACvIxB,MAAM,WAAW,OAAO,MAAM;aACjB,QAAQ,GAAG;;;;AAKxB,MAAM,QAAQ,OAAO,KAAK;;;;SAIjB,QAAQ,GAAG;aACP,QAAQ,GAAG;;AAQM,OAAO,MAAM;eAC5B,QAAQ,GAAG;YACd,EAAE,YAAY,cAAc,OAAO,kBAAkB,MAAM,cAAc,CAAC;;;KAGjF,EAAE,iBAAiB,qBAAqB;AACzC,KAAI,oBAAoB,eACtB,QAAO;UACH,WAAW,eAAe;;;EAIhC;;;;;;AAkBJ,MAAM,oBAAoB,EACxB,UACA,iBACA,qBACA,0BAC2B;CAE3B,MAAM,YAAY,CAChB,GAAG,iBACH,GAAI,gBAAgB,SAAS,SAAS,GAAG,EAAE,GAAG,CAAC,SAAS,CACzD,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE;AAEvB,QACE,oBAAC,UAAD;EAAU,aAAU;YAClB,qBAAC,OAAD,EAAA,UAAA,CAAO,mBAEL,oBAAC,QAAD;GACE,OAAO,SAAS,UAAU;GAC1B,gBAAgB,QAAQ,oBAAoB,OAAO,IAAI,CAAC;GACxD,MAAK;GACL,QAAQ,uBAAuB;GAC/B,iBAAiB;aAEhB,UAAU,KAAK,SACd,oBAAC,QAAD;IAAmB,OAAO,KAAK,UAAU;cACtC;IACM,EAFI,KAEJ,CACT;GACK,CAAA,CACH,EAAA,CAAA;EACC,CAAA;;;;AC1Ef,MAAM,YAAY;AAElB,MAAM,YAAY,OAAO,MAAM;IAC3B,WAAW,WAAW;;;;;AAM1B,MAAa,iBAAiB,OAAO,MAAM;;;;YAI/B,EAAE,YAAY,cAAc,OAAO,aAAa,MAAM,YAAY,CAAC;;AAuB/E,MAAM,cAAc,EAClB,UACA,kBAAkB,2BAClB,kBACA,qBACA,qBACA,WACA,uBAAuB,MACvB,cACA,0BACqB;AACrB,KAAI,CAAC,oBAAoB,CAAC,SACxB,QAAO,oBAAC,OAAD,EAAO,CAAA;CAGhB,MAAM,EACJ,gBAAgB,aAChB,eAAe,YACf,eAAe,YACf,eAAe,eACb;CAKJ,MAAM,oBAAoB,cAAc,cAAc,YAAY,SAAS;CAE3E,MAAM,gBAAgB,aAClB,cAAc,WACd,KAAK,IAAI,cAAc,UAAU,WAAW;CAChD,MAAM,iBAAiB,YAAY,cAAc,KAAK;AAEtD,QACE,qBAAC,WAAD;EAAW,MAAK;EAAa,cAAW;YAAxC,CACG,wBACC,oBAAC,kBAAD;GACY;GACO;GACI;GACA;GACrB,CAAA,EAEH,aAAa,KACZ,qBAAA,YAAA,EAAA,UAAA,CACE,qBAAC,OAAD,EAAA,UAAA;GAAK;GACM;GAAe;GAAE;GAAc;GAAK;GAAkB;GAC3D,EAAA,CAAA,EACN,oBAAC,gBAAD,EAAA,UACE,oBAAC,cAAD;GACoB;GACG;GACV;GACG;GACd,CAAA,EACa,CAAA,CAChB,EAAA,CAAA,CAEK;;;;;ACpGhB,IAAA,qBAAe"}
@@ -1,4 +1,4 @@
1
- import { t as PaginationParams } from "./types-CcZbBH0e.mjs";
1
+ import { t as PaginationParams } from "./types-ChkiGhjQ.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-ne9hnVoe.d.mts.map
39
+ //# sourceMappingURL=Pagination-H-CcXrCD.d.mts.map
@@ -1,2 +1,2 @@
1
- import { n as PaginationInfo, t as Pagination } from "./Pagination-ne9hnVoe.mjs";
1
+ import { n as PaginationInfo, t as Pagination } from "./Pagination-H-CcXrCD.mjs";
2
2
  export { PaginationInfo, Pagination as default };
@@ -1,4 +1,4 @@
1
- import { f as FilterSize } from "./types-N8PYonjD.mjs";
1
+ import { f as FilterSize } from "./types-BEjWTkZV.mjs";
2
2
  import * as _$react from "react";
3
3
  import { HTMLAttributes, ReactNode } from "react";
4
4
 
@@ -82,4 +82,4 @@ interface PillShellProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'onClick'
82
82
  declare const PillShell: _$react.ForwardRefExoticComponent<PillShellProps & _$react.RefAttributes<HTMLSpanElement>>;
83
83
  //#endregion
84
84
  export { PillShellProps as n, PillShell as t };
85
- //# sourceMappingURL=PillShell-ChTB_koa.d.mts.map
85
+ //# sourceMappingURL=PillShell-BQC-k7Rl.d.mts.map
@@ -1,2 +1,2 @@
1
- import { n as PillShellProps, t as PillShell } from "./PillShell-ChTB_koa.mjs";
1
+ import { n as PillShellProps, t as PillShell } from "./PillShell-BQC-k7Rl.mjs";
2
2
  export { PillShellProps, PillShell as default };
@@ -0,0 +1,188 @@
1
+ import { a as styled, o as useTheme, r as css } from "./styledComponentsInterop-NxwFjeA4.mjs";
2
+ import { semanticColor, semanticTokens } from "./lib/semanticColor.mjs";
3
+ import { paragraphMixins } from "./mixins/text.mjs";
4
+ import { withAlpha } from "./lib/color.mjs";
5
+ import { focusOutline } from "./mixins/focus.mjs";
6
+ import { BorderRadius, Color, Spacing } from "@persona/design-tokens";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { CircleCheckFillIcon, CircleFillIcon, CircleNullIcon, CircleWarningFillIcon, WarningFillIcon } from "@persona/icons";
9
+ //#region components/ProgressIndicator/ProgressIndicator.tsx
10
+ /**
11
+ * Completed, warning, and error steps can be navigated back to.
12
+ * The current step (first uncompleted or error) is also clickable so the user can
13
+ * return to it after navigating back to an earlier step.
14
+ * Active and upcoming steps (beyond the current) are not clickable.
15
+ */
16
+ function resolveClickable(status, isActive, isDisabled, isCurrent) {
17
+ if (isDisabled || isActive) return false;
18
+ return status === "completed" || status === "warning" || status === "error" || isCurrent;
19
+ }
20
+ function resolveIcon(status, isCurrent) {
21
+ if (status === "completed") return CircleCheckFillIcon;
22
+ if (status === "warning") return WarningFillIcon;
23
+ if (status === "error") return CircleWarningFillIcon;
24
+ if (isCurrent) return CircleFillIcon;
25
+ return CircleNullIcon;
26
+ }
27
+ function resolveIconColor(theme, status, isActive, isDisabled) {
28
+ if (isDisabled) return semanticColor(theme, "FgDisabled", Color.BorderIconDisabled);
29
+ if (status === "completed") return semanticColor(theme, "FgSuccess", Color.BorderIconSuccess);
30
+ if (status === "warning") return semanticColor(theme, "FgWarning1", Color.BorderIconWarning);
31
+ if (status === "error") return semanticColor(theme, "FgDanger1", Color.BorderIconDanger);
32
+ return isActive ? semanticColor(theme, "FgAccent", Color.BorderIconActive) : semanticColor(theme, "FgSecondary", Color.BorderIconSecondary);
33
+ }
34
+ function resolveTextColor(theme, status, isActive, isDisabled) {
35
+ if (isDisabled) return semanticColor(theme, "FgDisabled", Color.TextDisabled);
36
+ if (isActive) return semanticColor(theme, "FgAccent", Color.TextActive);
37
+ if (status === "uncompleted") return semanticColor(theme, "FgSecondary", Color.TextSecondary);
38
+ return semanticColor(theme, "FgPrimary", Color.TextPrimary);
39
+ }
40
+ const StepList = styled.ol`
41
+ display: flex;
42
+ flex-direction: ${({ $layout }) => $layout === "horizontal" ? "row" : "column"};
43
+ gap: ${({ $layout }) => $layout === "horizontal" ? Spacing[2] : "0px"};
44
+ list-style: none;
45
+ margin: 0;
46
+ padding: 0;
47
+ `;
48
+ const StepItem = styled.li`
49
+ display: flex;
50
+ align-items: center;
51
+
52
+ ${({ $layout }) => $layout === "horizontal" && css`
53
+ width: fit-content;
54
+ white-space: nowrap;
55
+ `}
56
+ `;
57
+ const StepContent = styled.button`
58
+ display: flex;
59
+ align-items: center;
60
+ gap: ${Spacing[2]};
61
+ width: 100%;
62
+ padding: ${Spacing[2]};
63
+ border-radius: ${BorderRadius.Md};
64
+ border: none;
65
+ margin: 0;
66
+ font: inherit;
67
+ color: inherit;
68
+ text-align: left;
69
+ outline: none;
70
+ cursor: ${({ $isClickable, $interactive }) => $interactive && $isClickable ? "pointer" : "default"};
71
+
72
+ ${({ theme, $isActive, $isClickable, $interactive }) => {
73
+ const tokens = semanticTokens(theme);
74
+ if ($isActive) return css`
75
+ background-color: ${tokens ? withAlpha(tokens.SurfaceAccent, tokens.Opacity25) : Color.BackgroundInteractiveActive};
76
+ `;
77
+ if ($interactive && $isClickable) return css`
78
+ background-color: ${tokens ? "transparent" : Color.BackgroundInteractiveDefault};
79
+ &:hover {
80
+ background-color: ${semanticColor(theme, "SurfaceSecondary", Color.BackgroundInteractiveHover)};
81
+ }
82
+ `;
83
+ return css`
84
+ background-color: transparent;
85
+ `;
86
+ }}
87
+
88
+ ${focusOutline}
89
+
90
+ &:focus-visible {
91
+ position: relative;
92
+ z-index: 1;
93
+ }
94
+ `;
95
+ const IconWrapper = styled.span`
96
+ display: inline-flex;
97
+ flex-shrink: 0;
98
+ width: 16px;
99
+ height: 16px;
100
+ color: ${({ $color }) => $color};
101
+ line-height: 0;
102
+ `;
103
+ const StepLabel = styled.span`
104
+ ${({ $isActive }) => $isActive ? paragraphMixins.mdBold : paragraphMixins.md};
105
+ color: ${({ $color }) => $color};
106
+ `;
107
+ const Step = ({ step, isActive, isCurrent, layout, onStepClick }) => {
108
+ const { id, label, status = "uncompleted", disabled = false } = step;
109
+ const interactive = Boolean(onStepClick);
110
+ const isClickable = resolveClickable(status, isActive, disabled, isCurrent);
111
+ const isInteractionDisabled = disabled || !isActive && !isCurrent && status === "uncompleted";
112
+ const theme = useTheme();
113
+ const iconColor = resolveIconColor(theme, status, isActive, disabled);
114
+ const textColor = resolveTextColor(theme, status, isActive, disabled);
115
+ const Icon = resolveIcon(status, isCurrent);
116
+ return /* @__PURE__ */ jsx(StepItem, {
117
+ $layout: layout,
118
+ "aria-current": !interactive && isActive ? "step" : void 0,
119
+ "aria-disabled": !interactive && isInteractionDisabled ? true : void 0,
120
+ children: /* @__PURE__ */ jsxs(StepContent, {
121
+ ...interactive && isClickable ? {
122
+ type: "button",
123
+ onClick: () => onStepClick?.(id)
124
+ } : { as: "div" },
125
+ "aria-current": interactive && isActive ? "step" : void 0,
126
+ "aria-disabled": interactive && isInteractionDisabled ? true : void 0,
127
+ $isActive: isActive,
128
+ $isClickable: isClickable,
129
+ $interactive: interactive,
130
+ children: [/* @__PURE__ */ jsx(IconWrapper, {
131
+ $color: iconColor,
132
+ "aria-hidden": "true",
133
+ children: /* @__PURE__ */ jsx(Icon, {})
134
+ }), /* @__PURE__ */ jsx(StepLabel, {
135
+ $isActive: isActive,
136
+ $color: textColor,
137
+ children: label
138
+ })]
139
+ })
140
+ });
141
+ };
142
+ /**
143
+ * ProgressIndicator guides users through a sequence of steps.
144
+ *
145
+ * Interaction rules:
146
+ * - **Completed / warning / error** steps are clickable — navigate back to review or fix.
147
+ * - **Warning** does not block forward progression; later uncompleted steps remain reachable.
148
+ * - **Error** blocks forward progression — treat it as the terminal step in the sequence.
149
+ * - **Active** step is not clickable — the user is already there.
150
+ * - **Upcoming (uncompleted)** steps are not clickable — sequential progression required.
151
+ *
152
+ * Navigation does not clear later steps. If a change on an earlier step
153
+ * invalidates later data, the affected steps should be flagged and require
154
+ * re-confirmation before submission — this logic lives in the consuming component.
155
+ *
156
+ * @example
157
+ * ```tsx
158
+ * <ProgressIndicator
159
+ * steps={[
160
+ * { id: 'identity', label: 'Identity', status: 'completed' },
161
+ * { id: 'address', label: 'Address', status: 'uncompleted' },
162
+ * { id: 'review', label: 'Review', status: 'uncompleted' },
163
+ * ]}
164
+ * activeStepId="address"
165
+ * onStepClick={(id) => navigate(id)}
166
+ * />
167
+ * ```
168
+ */
169
+ const ProgressIndicator = ({ steps, activeStepId, layout = "vertical", onStepClick, "aria-label": ariaLabel = "Progress", ...rest }) => {
170
+ const currentStepId = steps.find(({ status = "uncompleted" }) => status === "uncompleted" || status === "error")?.id;
171
+ return /* @__PURE__ */ jsx(StepList, {
172
+ $layout: layout,
173
+ role: "list",
174
+ "aria-label": ariaLabel,
175
+ ...rest,
176
+ children: steps.map((step) => /* @__PURE__ */ jsx(Step, {
177
+ step,
178
+ isActive: step.id === activeStepId,
179
+ isCurrent: step.id === currentStepId,
180
+ layout,
181
+ onStepClick
182
+ }, step.id))
183
+ });
184
+ };
185
+ //#endregion
186
+ export { ProgressIndicator as t };
187
+
188
+ //# sourceMappingURL=ProgressIndicator-3A4Aqci6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressIndicator-3A4Aqci6.mjs","names":[],"sources":["../components/ProgressIndicator/ProgressIndicator.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport styled, { css, useTheme } from 'styled-components';\n\nimport { focusOutline } from '@persona/design-system/mixins/focus';\nimport { paragraphMixins } from '@persona/design-system/mixins/text';\nimport { BorderRadius, Color, Spacing } from '@persona/design-tokens';\nimport {\n CircleCheckFillIcon,\n CircleFillIcon,\n CircleNullIcon,\n CircleWarningFillIcon,\n WarningFillIcon,\n} from '@persona/icons';\nimport type { PDSIconComponent } from '@persona/icons/types';\nimport { withAlpha } from 'design-system/lib/color';\nimport {\n type MaybeSemanticTheme,\n semanticColor,\n semanticTokens,\n} from 'design-system/lib/semanticColor';\n\nexport type StepStatus = 'uncompleted' | 'completed' | 'warning' | 'error';\n\nexport interface ProgressIndicatorStep {\n id: string;\n label: string;\n /** @default 'uncompleted' */\n status?: StepStatus;\n disabled?: boolean;\n}\n\nexport interface ProgressIndicatorProps extends ComponentPropsWithoutRef<'ol'> {\n steps: ProgressIndicatorStep[];\n /** id of the step that should receive the active visual state */\n activeStepId?: string;\n /** @default 'vertical' */\n layout?: 'vertical' | 'horizontal';\n /**\n * Called when a clickable step is activated via click or keyboard.\n *\n * Clickability rules:\n * - `completed`, `warning`, and `error` steps are clickable (navigate back to review/edit)\n * - The active step is not clickable (user is already there)\n * - Upcoming `uncompleted` steps are not clickable (sequential progression required)\n */\n onStepClick?: (stepId: string) => void;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/**\n * Completed, warning, and error steps can be navigated back to.\n * The current step (first uncompleted or error) is also clickable so the user can\n * return to it after navigating back to an earlier step.\n * Active and upcoming steps (beyond the current) are not clickable.\n */\nfunction resolveClickable(\n status: StepStatus,\n isActive: boolean,\n isDisabled: boolean,\n isCurrent: boolean,\n): boolean {\n if (isDisabled || isActive) {\n return false;\n }\n return status === 'completed' || status === 'warning' || status === 'error' || isCurrent;\n}\n\nfunction resolveIcon(status: StepStatus, isCurrent: boolean): PDSIconComponent {\n if (status === 'completed') {\n return CircleCheckFillIcon;\n }\n if (status === 'warning') {\n return WarningFillIcon;\n }\n if (status === 'error') {\n return CircleWarningFillIcon;\n }\n if (isCurrent) {\n return CircleFillIcon;\n }\n return CircleNullIcon;\n}\n\nfunction resolveIconColor(\n theme: MaybeSemanticTheme,\n status: StepStatus,\n isActive: boolean,\n isDisabled: boolean,\n) {\n if (isDisabled) {\n return semanticColor(theme, 'FgDisabled', Color.BorderIconDisabled);\n }\n if (status === 'completed') {\n return semanticColor(theme, 'FgSuccess', Color.BorderIconSuccess);\n }\n if (status === 'warning') {\n return semanticColor(theme, 'FgWarning1', Color.BorderIconWarning);\n }\n if (status === 'error') {\n return semanticColor(theme, 'FgDanger1', Color.BorderIconDanger);\n }\n return isActive\n ? semanticColor(theme, 'FgAccent', Color.BorderIconActive)\n : semanticColor(theme, 'FgSecondary', Color.BorderIconSecondary);\n}\n\nfunction resolveTextColor(\n theme: MaybeSemanticTheme,\n status: StepStatus,\n isActive: boolean,\n isDisabled: boolean,\n) {\n if (isDisabled) {\n return semanticColor(theme, 'FgDisabled', Color.TextDisabled);\n }\n if (isActive) {\n return semanticColor(theme, 'FgAccent', Color.TextActive);\n }\n if (status === 'uncompleted') {\n return semanticColor(theme, 'FgSecondary', Color.TextSecondary);\n }\n return semanticColor(theme, 'FgPrimary', Color.TextPrimary);\n}\n\n// ─── Styled components ────────────────────────────────────────────────────────\n\nconst StepList = styled.ol<{ $layout: 'vertical' | 'horizontal' }>`\n display: flex;\n flex-direction: ${({ $layout }) => ($layout === 'horizontal' ? 'row' : 'column')};\n gap: ${({ $layout }) => ($layout === 'horizontal' ? Spacing[2] : '0px')};\n list-style: none;\n margin: 0;\n padding: 0;\n`;\n\nconst StepItem = styled.li<{ $layout: 'vertical' | 'horizontal' }>`\n display: flex;\n align-items: center;\n\n ${({ $layout }) =>\n $layout === 'horizontal' &&\n css`\n width: fit-content;\n white-space: nowrap;\n `}\n`;\n\nconst StepContent = styled.button<{\n $isActive: boolean;\n $isClickable: boolean;\n $interactive: boolean;\n}>`\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n width: 100%;\n padding: ${Spacing[2]};\n border-radius: ${BorderRadius.Md};\n border: none;\n margin: 0;\n font: inherit;\n color: inherit;\n text-align: left;\n outline: none;\n cursor: ${({ $isClickable, $interactive }) => ($interactive && $isClickable ? 'pointer' : 'default')};\n\n ${({ theme, $isActive, $isClickable, $interactive }) => {\n const tokens = semanticTokens(theme);\n if ($isActive) {\n return css`\n background-color: ${\n tokens\n ? withAlpha(tokens.SurfaceAccent, tokens.Opacity25)\n : Color.BackgroundInteractiveActive\n };\n `;\n }\n if ($interactive && $isClickable) {\n return css`\n background-color: ${tokens ? 'transparent' : Color.BackgroundInteractiveDefault};\n &:hover {\n background-color: ${semanticColor(theme, 'SurfaceSecondary', Color.BackgroundInteractiveHover)};\n }\n `;\n }\n return css`\n background-color: transparent;\n `;\n }}\n\n ${focusOutline}\n\n &:focus-visible {\n position: relative;\n z-index: 1;\n }\n`;\n\nconst IconWrapper = styled.span<{ $color: string }>`\n display: inline-flex;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n color: ${({ $color }) => $color};\n line-height: 0;\n`;\n\nconst StepLabel = styled.span<{ $isActive: boolean; $color: string }>`\n ${({ $isActive }) => ($isActive ? paragraphMixins.mdBold : paragraphMixins.md)};\n color: ${({ $color }) => $color};\n`;\n\n// ─── Step ─────────────────────────────────────────────────────────────────────\n\ninterface StepProps {\n step: ProgressIndicatorStep;\n isActive: boolean;\n isCurrent: boolean;\n layout: 'vertical' | 'horizontal';\n onStepClick?: (stepId: string) => void;\n}\n\nconst Step = ({ step, isActive, isCurrent, layout, onStepClick }: StepProps) => {\n const { id, label, status = 'uncompleted', disabled = false } = step;\n\n const interactive = Boolean(onStepClick);\n const isClickable = resolveClickable(status, isActive, disabled, isCurrent);\n const isInteractionDisabled = disabled || (!isActive && !isCurrent && status === 'uncompleted');\n const theme = useTheme();\n const iconColor = resolveIconColor(theme, status, isActive, disabled);\n const textColor = resolveTextColor(theme, status, isActive, disabled);\n\n const Icon = resolveIcon(status, isCurrent);\n\n return (\n <StepItem\n $layout={layout}\n aria-current={!interactive && isActive ? 'step' : undefined}\n aria-disabled={!interactive && isInteractionDisabled ? true : undefined}\n >\n <StepContent\n {...(interactive && isClickable\n ? { type: 'button' as const, onClick: () => onStepClick?.(id) }\n : { as: 'div' as const })}\n aria-current={interactive && isActive ? 'step' : undefined}\n aria-disabled={interactive && isInteractionDisabled ? true : undefined}\n $isActive={isActive}\n $isClickable={isClickable}\n $interactive={interactive}\n >\n <IconWrapper $color={iconColor} aria-hidden='true'>\n <Icon />\n </IconWrapper>\n <StepLabel $isActive={isActive} $color={textColor}>\n {label}\n </StepLabel>\n </StepContent>\n </StepItem>\n );\n};\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * ProgressIndicator guides users through a sequence of steps.\n *\n * Interaction rules:\n * - **Completed / warning / error** steps are clickable — navigate back to review or fix.\n * - **Warning** does not block forward progression; later uncompleted steps remain reachable.\n * - **Error** blocks forward progression — treat it as the terminal step in the sequence.\n * - **Active** step is not clickable — the user is already there.\n * - **Upcoming (uncompleted)** steps are not clickable — sequential progression required.\n *\n * Navigation does not clear later steps. If a change on an earlier step\n * invalidates later data, the affected steps should be flagged and require\n * re-confirmation before submission — this logic lives in the consuming component.\n *\n * @example\n * ```tsx\n * <ProgressIndicator\n * steps={[\n * { id: 'identity', label: 'Identity', status: 'completed' },\n * { id: 'address', label: 'Address', status: 'uncompleted' },\n * { id: 'review', label: 'Review', status: 'uncompleted' },\n * ]}\n * activeStepId=\"address\"\n * onStepClick={(id) => navigate(id)}\n * />\n * ```\n */\nexport const ProgressIndicator = ({\n steps,\n activeStepId,\n layout = 'vertical',\n onStepClick,\n 'aria-label': ariaLabel = 'Progress',\n ...rest\n}: ProgressIndicatorProps) => {\n // The \"current\" step is the first uncompleted or error step — where the user should work next.\n // Warning steps are skipped so forward progression is not blocked.\n // This is independent of activeStepId, which only controls the visual highlight.\n const currentStepId = steps.find(\n ({ status = 'uncompleted' }) => status === 'uncompleted' || status === 'error',\n )?.id;\n\n return (\n <StepList $layout={layout} role='list' aria-label={ariaLabel} {...rest}>\n {steps.map((step) => (\n <Step\n key={step.id}\n step={step}\n isActive={step.id === activeStepId}\n isCurrent={step.id === currentStepId}\n layout={layout}\n onStepClick={onStepClick}\n />\n ))}\n </StepList>\n );\n};\n\nexport default ProgressIndicator;\n"],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { ComponentPropsWithoutRef } from "react";
2
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
+
4
+ //#region components/ProgressIndicator/ProgressIndicator.d.ts
5
+ type StepStatus = 'uncompleted' | 'completed' | 'warning' | 'error';
6
+ interface ProgressIndicatorStep {
7
+ id: string;
8
+ label: string;
9
+ /** @default 'uncompleted' */
10
+ status?: StepStatus;
11
+ disabled?: boolean;
12
+ }
13
+ interface ProgressIndicatorProps extends ComponentPropsWithoutRef<'ol'> {
14
+ steps: ProgressIndicatorStep[];
15
+ /** id of the step that should receive the active visual state */
16
+ activeStepId?: string;
17
+ /** @default 'vertical' */
18
+ layout?: 'vertical' | 'horizontal';
19
+ /**
20
+ * Called when a clickable step is activated via click or keyboard.
21
+ *
22
+ * Clickability rules:
23
+ * - `completed`, `warning`, and `error` steps are clickable (navigate back to review/edit)
24
+ * - The active step is not clickable (user is already there)
25
+ * - Upcoming `uncompleted` steps are not clickable (sequential progression required)
26
+ */
27
+ onStepClick?: (stepId: string) => void;
28
+ }
29
+ /**
30
+ * ProgressIndicator guides users through a sequence of steps.
31
+ *
32
+ * Interaction rules:
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.
36
+ * - **Active** step is not clickable — the user is already there.
37
+ * - **Upcoming (uncompleted)** steps are not clickable — sequential progression required.
38
+ *
39
+ * Navigation does not clear later steps. If a change on an earlier step
40
+ * invalidates later data, the affected steps should be flagged and require
41
+ * re-confirmation before submission — this logic lives in the consuming component.
42
+ *
43
+ * @example
44
+ * ```tsx
45
+ * <ProgressIndicator
46
+ * steps={[
47
+ * { id: 'identity', label: 'Identity', status: 'completed' },
48
+ * { id: 'address', label: 'Address', status: 'uncompleted' },
49
+ * { id: 'review', label: 'Review', status: 'uncompleted' },
50
+ * ]}
51
+ * activeStepId="address"
52
+ * onStepClick={(id) => navigate(id)}
53
+ * />
54
+ * ```
55
+ */
56
+ declare const ProgressIndicator: ({
57
+ steps,
58
+ activeStepId,
59
+ layout,
60
+ onStepClick,
61
+ "aria-label": ariaLabel,
62
+ ...rest
63
+ }: ProgressIndicatorProps) => _$react_jsx_runtime0.JSX.Element;
64
+ //#endregion
65
+ export { StepStatus as i, ProgressIndicatorProps as n, ProgressIndicatorStep as r, ProgressIndicator as t };
66
+ //# sourceMappingURL=ProgressIndicator-DbOLOaxJ.d.mts.map
@@ -1,66 +1,2 @@
1
- import { ComponentPropsWithoutRef } from "react";
2
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
-
4
- //#region components/ProgressIndicator/ProgressIndicator.d.ts
5
- type StepStatus = 'uncompleted' | 'completed' | 'warning' | 'error';
6
- interface ProgressIndicatorStep {
7
- id: string;
8
- label: string;
9
- /** @default 'uncompleted' */
10
- status?: StepStatus;
11
- disabled?: boolean;
12
- }
13
- interface ProgressIndicatorProps extends ComponentPropsWithoutRef<'ol'> {
14
- steps: ProgressIndicatorStep[];
15
- /** id of the step that should receive the active visual state */
16
- activeStepId?: string;
17
- /** @default 'vertical' */
18
- layout?: 'vertical' | 'horizontal';
19
- /**
20
- * Called when a clickable step is activated via click or keyboard.
21
- *
22
- * Clickability rules:
23
- * - `completed`, `warning`, and `error` steps are clickable (navigate back to review/edit)
24
- * - The active step is not clickable (user is already there)
25
- * - Upcoming `uncompleted` steps are not clickable (sequential progression required)
26
- */
27
- onStepClick?: (stepId: string) => void;
28
- }
29
- /**
30
- * ProgressIndicator guides users through a sequence of steps.
31
- *
32
- * Interaction rules:
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.
36
- * - **Active** step is not clickable — the user is already there.
37
- * - **Upcoming (uncompleted)** steps are not clickable — sequential progression required.
38
- *
39
- * Navigation does not clear later steps. If a change on an earlier step
40
- * invalidates later data, the affected steps should be flagged and require
41
- * re-confirmation before submission — this logic lives in the consuming component.
42
- *
43
- * @example
44
- * ```tsx
45
- * <ProgressIndicator
46
- * steps={[
47
- * { id: 'identity', label: 'Identity', status: 'completed' },
48
- * { id: 'address', label: 'Address', status: 'uncompleted' },
49
- * { id: 'review', label: 'Review', status: 'uncompleted' },
50
- * ]}
51
- * activeStepId="address"
52
- * onStepClick={(id) => navigate(id)}
53
- * />
54
- * ```
55
- */
56
- declare const ProgressIndicator: ({
57
- steps,
58
- activeStepId,
59
- layout,
60
- onStepClick,
61
- "aria-label": ariaLabel,
62
- ...rest
63
- }: ProgressIndicatorProps) => _$react_jsx_runtime0.JSX.Element;
64
- //#endregion
65
- export { ProgressIndicator, ProgressIndicator as default, ProgressIndicatorProps, ProgressIndicatorStep, StepStatus };
66
- //# sourceMappingURL=ProgressIndicator.d.mts.map
1
+ import { i as StepStatus, n as ProgressIndicatorProps, r as ProgressIndicatorStep, t as ProgressIndicator } from "./ProgressIndicator-DbOLOaxJ.mjs";
2
+ export { ProgressIndicator, ProgressIndicator as default, ProgressIndicatorProps, ProgressIndicatorStep, StepStatus };
@@ -9,4 +9,4 @@ interface PseudoClassProps {
9
9
  }
10
10
  //#endregion
11
11
  export { PseudoClassProps as t };
12
- //# sourceMappingURL=PseudoClassProps-CdRF3QNn.d.mts.map
12
+ //# sourceMappingURL=PseudoClassProps-CHtBNv8B.d.mts.map
@@ -1,2 +1,2 @@
1
- import { t as PseudoClassProps } from "./PseudoClassProps-CdRF3QNn.mjs";
1
+ import { t as PseudoClassProps } from "./PseudoClassProps-CHtBNv8B.mjs";
2
2
  export { PseudoClassProps as default };
@@ -4,7 +4,7 @@ import "./variables/transitions.mjs";
4
4
  import { opacityOf } from "./lib/color.mjs";
5
5
  import { isChecked, isDisabled, isFocusedVisible, isHovered, isNotDisabled } from "./lib/pseudoClass.mjs";
6
6
  import { focusStyle } from "./mixins/focus.mjs";
7
- import { n as useFormField } from "./useFormField-DsvC5dOb.mjs";
7
+ import { n as useFormField } from "./useFormField-BzhMbl5P.mjs";
8
8
  import { Color, Spacing, Typography } from "@persona/design-tokens";
9
9
  import { forwardRef, useMemo } from "react";
10
10
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -148,4 +148,4 @@ const Radio = forwardRef(function Radio({ id, label, className, value, disabled,
148
148
  //#endregion
149
149
  export { Radio as t };
150
150
 
151
- //# sourceMappingURL=Radio-Ds1pODKw.mjs.map
151
+ //# sourceMappingURL=Radio-Cxt89w8s.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Radio-Ds1pODKw.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 { opacityOf } from 'design-system/lib/color';\nimport {\n isChecked,\n isDisabled,\n isFocusedVisible,\n isHovered,\n isNotDisabled,\n} from 'design-system/lib/pseudoClass';\nimport { semanticColor, semanticOnly } from 'design-system/lib/semanticColor';\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: ${({ theme }) => semanticColor(theme, 'FgSecondary', 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: ${semanticColor(theme, 'FgDisabled', 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 ${({ theme }) => semanticColor(theme, 'InputBorderStrong', Color.BorderInputCheckbox)};\n background: ${({ theme }) => semanticColor(theme, 'InputSurfaceDefault', 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: ${({ theme }) =>\n semanticColor(theme, 'InputBorderHoverStrong', Color.BorderInputCheckboxHover)};\n ${semanticOnly((tokens) => `background: ${tokens.InputSurfaceHover};`)}\n }\n\n &${isChecked}, &:checked {\n &${isHovered}${isNotDisabled} ~ ${RadioCircle} {\n background: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccentHover', Color.BackgroundInputActiveHover)};\n border-color: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccentHover', 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: ${({ theme }) =>\n semanticColor(theme, 'InputSurfaceDisabled', Color.BackgroundInputDisabled)};\n border-color: ${({ theme }) =>\n semanticColor(theme, 'InputBorderDisabled', Color.BorderInputDisabled)};\n ${semanticOnly((tokens) => `opacity: ${opacityOf(tokens.Opacity65)};`)}\n }\n\n &:checked + ${RadioCircle}, &${isChecked} + ${RadioCircle} {\n border-color: ${({ theme }) => semanticColor(theme, 'InputBorderAccent', Color.BackgroundInputActive)};\n background: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccent', Color.BackgroundInputActive)};\n\n &::after {\n background: ${({ theme }) => semanticColor(theme, 'FgInverseStatic', 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: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccentDisabled', Color.BackgroundInputActiveDisabled)};\n background: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccentDisabled', 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":";;;;;;;;;;;;AAwBA,MAAM,YAAY,OAAO,GAA8C;;;;;;;KAOlE,EAAE,WACH,SAAS,QACT,GAAG;;;MAGD;;KAED,WAAW;;;;AAKhB,MAAM,QAAQ,OAAO,KAA+C;;eAErD,QAAQ,GAAG;YACd,EAAE,YAAY,cAAc,OAAO,eAAe,MAAM,cAAc,CAAC;;KAE9E,EAAE,WACH,SAAS,OACL,GAAG;YACC,WAAW,UAAU;;YAGzB,GAAG;YACC,WAAW,WAAW;UACxB;;KAEL,EAAE,OAAO,eACV,YACA,GAAG;;eAEQ,cAAc,OAAO,cAAc,MAAM,MAAM,KAAK,SAAS,CAAC;MACvE;;AAGN,MAAM,cAAc,OAAO,GAA0B;;;;;mCAKF;;YAEvC,QAAQ,GAAG;WACZ,QAAQ,GAAG;;;iBAGL,EAAE,WAAY,SAAS,OAAO,IAAI,MAAO;uBACnC,EAAE,YAAY,cAAc,OAAO,qBAAqB,MAAM,oBAAoB,CAAC;iBACzF,EAAE,YAAY,cAAc,OAAO,uBAAuB,MAAM,aAAa,CAAC;;AAG/F,MAAM,aAAa,OAAO,KAA6B;;YAE3C,QAAQ,GAAG;WACZ,QAAQ,GAAG;;;;;;UAMZ,EAAE,YAAa,UAAU,OAAO,IAAI,MAAO;;;;KAIhD,YAAY,cAAc,KAAK,YAAY;qBAC3B,EAAE,YACjB,cAAc,OAAO,0BAA0B,MAAM,yBAAyB,CAAC;MAC/E,cAAc,WAAW,eAAe,OAAO,kBAAkB,GAAG,CAAC;;;KAGtE,UAAU;OACR,YAAY,cAAc,KAAK,YAAY;qBAC7B,EAAE,YAAY,cAAc,OAAO,2BAA2B,MAAM,2BAA2B,CAAC;uBAC9F,EAAE,YAAY,cAAc,OAAO,2BAA2B,MAAM,2BAA2B,CAAC;;;;KAIlH,mBAAmB,cAAc,KAAK,YAAY;MACjD,WAAW;;;;KAIZ,WAAW,KAAK,YAAY;;mBAEd,EAAE,YACf,cAAc,OAAO,wBAAwB,MAAM,wBAAwB,CAAC;qBAC7D,EAAE,YACjB,cAAc,OAAO,uBAAuB,MAAM,oBAAoB,CAAC;MACvE,cAAc,WAAW,YAAY,UAAU,OAAO,UAAU,CAAC,GAAG,CAAC;;;gBAG3D,YAAY,KAAK,UAAU,KAAK,YAAY;qBACvC,EAAE,YAAY,cAAc,OAAO,qBAAqB,MAAM,sBAAsB,CAAC;mBACvF,EAAE,YAAY,cAAc,OAAO,sBAAsB,MAAM,sBAAsB,CAAC;;;qBAGpF,EAAE,YAAY,cAAc,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;;;;;;;;;aAS5F,WAAW,KAAK,YAAY,KAAK,YAAY,WAAW,KAAK,YAAY;qBACjE,EAAE,YAAY,cAAc,OAAO,8BAA8B,MAAM,8BAA8B,CAAC;mBACxG,EAAE,YAAY,cAAc,OAAO,8BAA8B,MAAM,8BAA8B,CAAC;;;AAkBzH,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-Cxt89w8s.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 { opacityOf } from 'design-system/lib/color';\nimport {\n isChecked,\n isDisabled,\n isFocusedVisible,\n isHovered,\n isNotDisabled,\n} from 'design-system/lib/pseudoClass';\nimport { semanticColor, semanticOnly } from 'design-system/lib/semanticColor';\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: ${({ theme }) => semanticColor(theme, 'FgSecondary', 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: ${semanticColor(theme, 'FgDisabled', 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 ${({ theme }) => semanticColor(theme, 'InputBorderStrong', Color.BorderInputCheckbox)};\n background: ${({ theme }) => semanticColor(theme, 'InputSurfaceDefault', 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: ${({ theme }) =>\n semanticColor(theme, 'InputBorderHoverStrong', Color.BorderInputCheckboxHover)};\n ${semanticOnly((tokens) => `background: ${tokens.InputSurfaceHover};`)}\n }\n\n &${isChecked}, &:checked {\n &${isHovered}${isNotDisabled} ~ ${RadioCircle} {\n background: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccentHover', Color.BackgroundInputActiveHover)};\n border-color: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccentHover', 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: ${({ theme }) =>\n semanticColor(theme, 'InputSurfaceDisabled', Color.BackgroundInputDisabled)};\n border-color: ${({ theme }) =>\n semanticColor(theme, 'InputBorderDisabled', Color.BorderInputDisabled)};\n ${semanticOnly((tokens) => `opacity: ${opacityOf(tokens.Opacity65)};`)}\n }\n\n &:checked + ${RadioCircle}, &${isChecked} + ${RadioCircle} {\n border-color: ${({ theme }) => semanticColor(theme, 'InputBorderAccent', Color.BackgroundInputActive)};\n background: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccent', Color.BackgroundInputActive)};\n\n &::after {\n background: ${({ theme }) => semanticColor(theme, 'FgInverseStatic', 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: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccentDisabled', Color.BackgroundInputActiveDisabled)};\n background: ${({ theme }) => semanticColor(theme, 'InputSurfaceAccentDisabled', 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":";;;;;;;;;;;;AAwBA,MAAM,YAAY,OAAO,GAA8C;;;;;;;KAOlE,EAAE,WACH,SAAS,QACT,GAAG;;;MAGD;;KAED,WAAW;;;;AAKhB,MAAM,QAAQ,OAAO,KAA+C;;eAErD,QAAQ,GAAG;YACd,EAAE,YAAY,cAAc,OAAO,eAAe,MAAM,cAAc,CAAC;;KAE9E,EAAE,WACH,SAAS,OACL,GAAG;YACC,WAAW,UAAU;;YAGzB,GAAG;YACC,WAAW,WAAW;UACxB;;KAEL,EAAE,OAAO,eACV,YACA,GAAG;;eAEQ,cAAc,OAAO,cAAc,MAAM,MAAM,KAAK,SAAS,CAAC;MACvE;;AAGN,MAAM,cAAc,OAAO,GAA0B;;;;;mCAKF;;YAEvC,QAAQ,GAAG;WACZ,QAAQ,GAAG;;;iBAGL,EAAE,WAAY,SAAS,OAAO,IAAI,MAAO;uBACnC,EAAE,YAAY,cAAc,OAAO,qBAAqB,MAAM,oBAAoB,CAAC;iBACzF,EAAE,YAAY,cAAc,OAAO,uBAAuB,MAAM,aAAa,CAAC;;AAG/F,MAAM,aAAa,OAAO,KAA6B;;YAE3C,QAAQ,GAAG;WACZ,QAAQ,GAAG;;;;;;UAMZ,EAAE,YAAa,UAAU,OAAO,IAAI,MAAO;;;;KAIhD,YAAY,cAAc,KAAK,YAAY;qBAC3B,EAAE,YACjB,cAAc,OAAO,0BAA0B,MAAM,yBAAyB,CAAC;MAC/E,cAAc,WAAW,eAAe,OAAO,kBAAkB,GAAG,CAAC;;;KAGtE,UAAU;OACR,YAAY,cAAc,KAAK,YAAY;qBAC7B,EAAE,YAAY,cAAc,OAAO,2BAA2B,MAAM,2BAA2B,CAAC;uBAC9F,EAAE,YAAY,cAAc,OAAO,2BAA2B,MAAM,2BAA2B,CAAC;;;;KAIlH,mBAAmB,cAAc,KAAK,YAAY;MACjD,WAAW;;;;KAIZ,WAAW,KAAK,YAAY;;mBAEd,EAAE,YACf,cAAc,OAAO,wBAAwB,MAAM,wBAAwB,CAAC;qBAC7D,EAAE,YACjB,cAAc,OAAO,uBAAuB,MAAM,oBAAoB,CAAC;MACvE,cAAc,WAAW,YAAY,UAAU,OAAO,UAAU,CAAC,GAAG,CAAC;;;gBAG3D,YAAY,KAAK,UAAU,KAAK,YAAY;qBACvC,EAAE,YAAY,cAAc,OAAO,qBAAqB,MAAM,sBAAsB,CAAC;mBACvF,EAAE,YAAY,cAAc,OAAO,sBAAsB,MAAM,sBAAsB,CAAC;;;qBAGpF,EAAE,YAAY,cAAc,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;;;;;;;;;aAS5F,WAAW,KAAK,YAAY,KAAK,YAAY,WAAW,KAAK,YAAY;qBACjE,EAAE,YAAY,cAAc,OAAO,8BAA8B,MAAM,8BAA8B,CAAC;mBACxG,EAAE,YAAY,cAAc,OAAO,8BAA8B,MAAM,8BAA8B,CAAC;;;AAkBzH,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,6 +1,6 @@
1
1
  import { a as styled, r as css } from "./styledComponentsInterop-NxwFjeA4.mjs";
2
2
  import useControlled from "./lib/useControlled.mjs";
3
- import { t as Radio } from "./Radio-Ds1pODKw.mjs";
3
+ import { t as Radio } from "./Radio-Cxt89w8s.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-HIC9V2hO.mjs.map
50
+ //# sourceMappingURL=RadioGroup-B6Cg1kdm.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup-HIC9V2hO.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-B6Cg1kdm.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"}
@@ -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-CxL6LW4q.d.mts.map
21
+ //# sourceMappingURL=RadioGroup-BjrfVPZQ.d.mts.map
@@ -1,2 +1,2 @@
1
- import { n as RadioGroupProps, t as RadioGroup } from "./RadioGroup-CxL6LW4q.mjs";
1
+ import { n as RadioGroupProps, t as RadioGroup } from "./RadioGroup-BjrfVPZQ.mjs";
2
2
  export { RadioGroup, RadioGroup as default, RadioGroupProps };
@@ -1,4 +1,4 @@
1
- import { a as DateFilterPreset } from "./types-D8rWSj3z.mjs";
1
+ import { a as DateFilterPreset } from "./types-YojUycQK.mjs";
2
2
  import { Ref } from "react";
3
3
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
4
  import { DateRange, RangeCalendarProps } from "react-aria";
@@ -37,4 +37,4 @@ declare const RangeCalendar: ({
37
37
  }: RangeCalendarProps$1) => _$react_jsx_runtime0.JSX.Element;
38
38
  //#endregion
39
39
  export { RangeCalendarProps$1 as n, RangeCalendar as t };
40
- //# sourceMappingURL=RangeCalendar-B7TwRJbg.d.mts.map
40
+ //# sourceMappingURL=RangeCalendar-CPnLaM-J.d.mts.map
@@ -1,2 +1,2 @@
1
- import { n as RangeCalendarProps, t as RangeCalendar } from "./RangeCalendar-B7TwRJbg.mjs";
1
+ import { n as RangeCalendarProps, t as RangeCalendar } from "./RangeCalendar-CPnLaM-J.mjs";
2
2
  export { RangeCalendarProps, RangeCalendar as default };