@persona/design-system 0.4.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -2
- package/dist/{Action-CcAyQpYN.d.mts → Action-C2FTJhnQ.d.mts} +3 -3
- package/dist/Action.d.mts +1 -1
- package/dist/AdvancedFilterRuleRow.d.mts +2 -2
- package/dist/AdvancedFilterRulesPopover.d.mts +2 -2
- package/dist/ArrayValueControl.d.mts +1 -1
- package/dist/Attribute.d.mts +7 -5
- package/dist/{Badge-BL0J5oMa.mjs → Badge-BtNIvtDZ.mjs} +3 -3
- package/dist/{Badge-BL0J5oMa.mjs.map → Badge-BtNIvtDZ.mjs.map} +1 -1
- package/dist/BooleanValueControl.d.mts +1 -1
- package/dist/{Breadcrumb-Df06cTnA.d.mts → Breadcrumb-BlAhp45l.d.mts} +1 -1
- package/dist/Breadcrumb.d.mts +1 -1
- package/dist/{Breadcrumbs-Zi5p0HDR.mjs → Breadcrumbs-ClKHNIr-.mjs} +14 -13
- package/dist/Breadcrumbs-ClKHNIr-.mjs.map +1 -0
- package/dist/{Breadcrumbs-D_Gzd4_J.d.mts → Breadcrumbs-DdZ14ZFw.d.mts} +2 -2
- package/dist/Breadcrumbs.d.mts +1 -1
- package/dist/{Button-BrI1s2-r.d.mts → Button-CTgyA3gc.d.mts} +4 -3
- package/dist/Button.d.mts +1 -1
- package/dist/{Calendar-DjnoZVcT.d.mts → Calendar-_gM6U5ET.d.mts} +1 -1
- package/dist/Calendar.d.mts +1 -1
- package/dist/CalendarBase.d.mts +1 -1
- package/dist/Card-Dorym91P.d.mts +75 -0
- package/dist/{Card-CKrJtn1f.mjs → Card-vQIPtdXi.mjs} +12 -10
- package/dist/Card-vQIPtdXi.mjs.map +1 -0
- package/dist/Card.d.mts +1 -1
- package/dist/Card2.d.mts +2 -2
- package/dist/{CardV2-CXxzl1EZ.mjs → CardV2-CFTjYWoO.mjs} +17 -16
- package/dist/CardV2-CFTjYWoO.mjs.map +1 -0
- package/dist/{Checkbox-DxNHp59y.mjs → Checkbox-CyeitZ5q.mjs} +25 -21
- package/dist/Checkbox-CyeitZ5q.mjs.map +1 -0
- package/dist/{Checkbox-CwPXPLCi.d.mts → Checkbox-DRJXDs2T.d.mts} +1 -1
- package/dist/Checkbox.d.mts +1 -1
- package/dist/CheckboxGroupField.d.mts +1 -1
- package/dist/ChoicesValueControl.d.mts +1 -1
- package/dist/CodeHighlight.d.mts +40 -0
- package/dist/{Combobox-C9QBItsc.d.mts → Combobox-DX4DLe1b.d.mts} +3 -3
- package/dist/{Combobox-BUtqtzKl.mjs → Combobox-Ddas5FN-.mjs} +22 -21
- package/dist/Combobox-Ddas5FN-.mjs.map +1 -0
- package/dist/Combobox.d.mts +2 -2
- package/dist/{ComboboxBase-BkSpdmsT.d.mts → ComboboxBase-Ds_i3K2m.d.mts} +18 -29
- package/dist/ComboboxBase.d.mts +1 -1
- package/dist/{ComboboxMultiSelect-DkVfwSKH.d.mts → ComboboxMultiSelect-S6oFJcOS.d.mts} +2 -2
- package/dist/ComboboxMultiSelect.d.mts +1 -1
- package/dist/{ComboboxSingleSelect-CpumBcDn.d.mts → ComboboxSingleSelect-DFzCwW1Y.d.mts} +4 -4
- package/dist/ComboboxSingleSelect.d.mts +1 -1
- package/dist/{CompactBar-COxu_FDd.d.mts → CompactBar-DEqItiZr.d.mts} +3 -3
- package/dist/CompactBar.d.mts +1 -1
- package/dist/{ConfigFormGroup-aSdn2r6Z.mjs → ConfigFormGroup-DcsM-u8o.mjs} +3 -3
- package/dist/{ConfigFormGroup-aSdn2r6Z.mjs.map → ConfigFormGroup-DcsM-u8o.mjs.map} +1 -1
- package/dist/{ControlBar-DwAhPcb5.d.mts → ControlBar-BVG5Pbvh.d.mts} +2 -2
- package/dist/ControlBar.d.mts +1 -1
- package/dist/DataTable.d.mts +19 -9
- package/dist/{DateField-tOyrGcx1.d.mts → DateField-CBCo8_d3.d.mts} +2 -2
- package/dist/DateField.d.mts +1 -1
- package/dist/{DatePicker-Bs9JODNg.d.mts → DatePicker-BZ4_I4Db.d.mts} +2 -2
- package/dist/{DatePicker-CLP-ajza.mjs → DatePicker-DTT-mJ8r.mjs} +44 -33
- package/dist/DatePicker-DTT-mJ8r.mjs.map +1 -0
- package/dist/DatePicker.d.mts +1 -1
- package/dist/{DateRangePicker-BT6-j8V7.d.mts → DateRangePicker-BMKJquPT.d.mts} +3 -3
- package/dist/DateRangePicker.d.mts +1 -1
- package/dist/DateRangeValueControl.d.mts +2 -2
- package/dist/DateValueControl.d.mts +1 -1
- package/dist/{DropdownButton-CCAfNZ9h.mjs → DropdownButton-DV5if_uG.mjs} +3 -3
- package/dist/{DropdownButton-CCAfNZ9h.mjs.map → DropdownButton-DV5if_uG.mjs.map} +1 -1
- package/dist/DropdownButton.d.mts +2 -2
- package/dist/{DropdownMenu-BoatixlO.d.mts → DropdownMenu-CbhEzWy1.d.mts} +2 -2
- package/dist/{DropdownMenu-CUnf420M.mjs → DropdownMenu-DovtBJBs.mjs} +3 -3
- package/dist/{DropdownMenu-CUnf420M.mjs.map → DropdownMenu-DovtBJBs.mjs.map} +1 -1
- package/dist/DropdownMenu.d.mts +1 -1
- package/dist/{ErrorProps-C9T857Wk.d.mts → ErrorProps-7eWoxSes.d.mts} +1 -1
- package/dist/ErrorProps.d.mts +1 -1
- package/dist/{FieldRegistry-D6niLExM.d.mts → FieldRegistry-BslyuPZw.d.mts} +2 -2
- package/dist/FieldRegistry.d.mts +1 -1
- package/dist/{FilterBar-DfBV7yKM.d.mts → FilterBar-DjZE4PoB.d.mts} +4 -4
- package/dist/FilterBar.d.mts +1 -1
- package/dist/FilterPickerMenu.d.mts +2 -2
- package/dist/FilterPill.d.mts +1 -1
- package/dist/FilterPopover.d.mts +1 -1
- package/dist/FloatValueControl.d.mts +1 -1
- package/dist/{FormControl-1BmoYFCu.mjs → FormControl-BvRzRknE.mjs} +8 -7
- package/dist/FormControl-BvRzRknE.mjs.map +1 -0
- package/dist/{FormControl-0H0Jeind.d.mts → FormControl-gpLZZpNs.d.mts} +2 -2
- package/dist/FormControl.d.mts +1 -1
- package/dist/FormControlLabel.d.mts +1 -1
- package/dist/{FormField-oBKH25qf.mjs → FormField-BDJ6zNE6.mjs} +20 -21
- package/dist/FormField-BDJ6zNE6.mjs.map +1 -0
- package/dist/{FormField-BcaFdmo5.d.mts → FormField-CZXKvCGt.d.mts} +6 -7
- package/dist/FormField.d.mts +1 -1
- package/dist/{Header-BjSoTEX_.d.mts → Header-1laYnwRP.d.mts} +1 -1
- package/dist/Header.d.mts +1 -1
- package/dist/{HelperTooltip-S20wVFCS.d.mts → HelperTooltip-BPJS3EwC.d.mts} +2 -2
- package/dist/HelperTooltip.d.mts +1 -1
- package/dist/{HoverCopyableField-GMXeF-3J.mjs → HoverCopyableField-WP6DPjy1.mjs} +7 -7
- package/dist/{HoverCopyableField-GMXeF-3J.mjs.map → HoverCopyableField-WP6DPjy1.mjs.map} +1 -1
- package/dist/{IconButton-BgL3QUVO.mjs → IconButton-CnJNIJVQ.mjs} +121 -22
- package/dist/IconButton-CnJNIJVQ.mjs.map +1 -0
- package/dist/{IconButton-BpyOr8Ev.d.mts → IconButton-PnrnqQ1s.d.mts} +2 -2
- package/dist/IconButton.d.mts +1 -1
- package/dist/ImageTile.d.mts +1 -1
- package/dist/InlineCombobox.d.mts +1 -1
- package/dist/InlineInput.d.mts +1 -1
- package/dist/{Input-BWlvBYB3.mjs → Input-DbfwNzS_.mjs} +12 -10
- package/dist/Input-DbfwNzS_.mjs.map +1 -0
- package/dist/{Input-qlQVD5h0.d.mts → Input-Diztxhle.d.mts} +4 -8
- package/dist/Input.d.mts +1 -1
- package/dist/{InputProps-D_7MnQfE.d.mts → InputProps-BILq1X-n.d.mts} +2 -2
- package/dist/InputProps.d.mts +1 -1
- package/dist/IntegerValueControl.d.mts +1 -1
- package/dist/{ListBox-9jHHEaqW.mjs → ListBox-CXh9Jfb-.mjs} +35 -27
- package/dist/ListBox-CXh9Jfb-.mjs.map +1 -0
- package/dist/{ListBox-ZE3MYMt6.d.mts → ListBox-P1eTecdo.d.mts} +3 -3
- package/dist/ListBox.d.mts +1 -1
- package/dist/ListBoxField.d.mts +2 -2
- package/dist/{LoadingShimmer-a2Hv0kAq.mjs → LoadingShimmer-DeVCDCjT.mjs} +13 -5
- package/dist/LoadingShimmer-DeVCDCjT.mjs.map +1 -0
- package/dist/LoadingShimmer.d.mts +1 -1
- package/dist/{LogicRow-CbMmaWXU.d.mts → LogicRow-DtZYOzQ8.d.mts} +3 -3
- package/dist/LogicRow.d.mts +1 -1
- package/dist/MaskedInput.d.mts +2 -2
- package/dist/{Menu-38UCGcte.mjs → Menu-CAGTCBqj.mjs} +40 -23
- package/dist/Menu-CAGTCBqj.mjs.map +1 -0
- package/dist/{Menu-ZShdhNd7.d.mts → Menu-_loh8pe3.d.mts} +3 -3
- package/dist/Menu.d.mts +1 -1
- package/dist/{MiddleTruncatedText-DnF7F_1D.mjs → MiddleTruncatedText-CO58jrNF.mjs} +2 -2
- package/dist/{MiddleTruncatedText-DnF7F_1D.mjs.map → MiddleTruncatedText-CO58jrNF.mjs.map} +1 -1
- package/dist/Modal.d.mts +3 -3
- package/dist/{PageHeader-B2-Slzhl.mjs → PageHeader-wpvRRTaa.mjs} +9 -6
- package/dist/PageHeader-wpvRRTaa.mjs.map +1 -0
- package/dist/PageHeader.d.mts +1 -1
- package/dist/{PageSelector-BcZx4nqe.d.mts → PageSelector-CIa3Zts9.d.mts} +3 -3
- package/dist/PageSelector.d.mts +1 -1
- package/dist/{Pagination-j4hF7GOk.d.mts → Pagination-C2eZEM7K.d.mts} +2 -2
- package/dist/{Pagination-CtUz0gdA.mjs → Pagination-wjr3W3xf.mjs} +9 -8
- package/dist/Pagination-wjr3W3xf.mjs.map +1 -0
- package/dist/Pagination.d.mts +1 -1
- package/dist/{Pii-RwKn-K84.mjs → Pii-Bm-qkweh.mjs} +2 -2
- package/dist/{Pii-RwKn-K84.mjs.map → Pii-Bm-qkweh.mjs.map} +1 -1
- package/dist/PillShell-D6dN9sWk.d.mts +85 -0
- package/dist/PillShell.d.mts +2 -85
- package/dist/{Popover-DlXyKYL5.mjs → Popover-DUyzmq3e.mjs} +9 -5
- package/dist/Popover-DUyzmq3e.mjs.map +1 -0
- package/dist/{PseudoClassProps-BPdn-ofQ.d.mts → PseudoClassProps-DnlHhW5u.d.mts} +1 -1
- package/dist/PseudoClassProps.d.mts +1 -1
- package/dist/{Radio-cLL9oatf.mjs → Radio-CkugnL91.mjs} +21 -17
- package/dist/Radio-CkugnL91.mjs.map +1 -0
- package/dist/{RadioGroup-BGo_kXKh.mjs → RadioGroup-8dI8gljw.mjs} +3 -3
- package/dist/{RadioGroup-BGo_kXKh.mjs.map → RadioGroup-8dI8gljw.mjs.map} +1 -1
- package/dist/{RadioGroup-BqULCH-D.d.mts → RadioGroup-Dg_gydUp.d.mts} +1 -1
- package/dist/RadioGroup.d.mts +1 -1
- package/dist/RangeCalendar.d.mts +1 -1
- package/dist/RangeCalendarPresets.d.mts +1 -1
- package/dist/RuleEditorFields.d.mts +2 -2
- package/dist/RulesPill.d.mts +1 -1
- package/dist/{SearchInput-Dc90GLTF.d.mts → SearchInput-CNg109M5.d.mts} +2 -2
- package/dist/SearchInput.d.mts +1 -1
- package/dist/SectionHeading.d.mts +1 -1
- package/dist/{SegmentedControl-Db78Pzo_.d.mts → SegmentedControl-BBIHKcvo.d.mts} +1 -1
- package/dist/{SegmentedControl-CvWJGhwy.mjs → SegmentedControl-DQE0hN57.mjs} +10 -9
- package/dist/SegmentedControl-DQE0hN57.mjs.map +1 -0
- package/dist/SegmentedControl.d.mts +1 -1
- package/dist/{Select-U_vQhK1A.mjs → Select-D9OVjzPR.mjs} +14 -13
- package/dist/Select-D9OVjzPR.mjs.map +1 -0
- package/dist/{Select-bafAe2wd.d.mts → Select-wnr46ROZ.d.mts} +3 -3
- package/dist/Select.d.mts +1 -1
- package/dist/{Spacer-BsK8tTwA.mjs → Spacer-D58qwuXR.mjs} +2 -2
- package/dist/{Spacer-BsK8tTwA.mjs.map → Spacer-D58qwuXR.mjs.map} +1 -1
- package/dist/{Spinner-BTyc6glU.mjs → Spinner-gBNWIwOn.mjs} +5 -7
- package/dist/Spinner-gBNWIwOn.mjs.map +1 -0
- package/dist/{Stack-Bre2oiov.mjs → Stack-BqQndGI9.mjs} +2 -2
- package/dist/{Stack-Bre2oiov.mjs.map → Stack-BqQndGI9.mjs.map} +1 -1
- package/dist/{Stack-_JcvIE31.d.mts → Stack-DgC83-nw.d.mts} +1 -1
- package/dist/Stack.d.mts +1 -1
- package/dist/{Sticker-CQ6sOKUj.mjs → Sticker-BDyejPZa.mjs} +157 -12
- package/dist/Sticker-BDyejPZa.mjs.map +1 -0
- package/dist/{Sticker-OKVOQt_C.d.mts → Sticker-qvWkqEMw.d.mts} +4 -4
- package/dist/Sticker.d.mts +1 -1
- package/dist/StringValueControl.d.mts +1 -1
- package/dist/Tab.d.mts +2 -3
- package/dist/{TabBar-B5NtgtgC.mjs → TabBar-B__54oO3.mjs} +15 -14
- package/dist/TabBar-B__54oO3.mjs.map +1 -0
- package/dist/TabBarIconButton.d.mts +1 -5
- package/dist/{Table-BcAgCIWq.d.mts → Table-CPvIH27_.d.mts} +1 -1
- package/dist/{Table-DfUD3I2s.mjs → Table-CqIi5mVF.mjs} +85 -38
- package/dist/Table-CqIi5mVF.mjs.map +1 -0
- package/dist/Table.d.mts +1 -1
- package/dist/{TableBody-D-RDBun9.d.mts → TableBody-CQYijW_3.d.mts} +1 -1
- package/dist/TableBody.d.mts +1 -1
- package/dist/{TableBox-0GvWjRln.mjs → TableBox-C-8RxZT4.mjs} +54 -44
- package/dist/TableBox-C-8RxZT4.mjs.map +1 -0
- package/dist/TableBox.d.mts +2 -2
- package/dist/{TableBoxCell-WXc57DwN.d.mts → TableBoxCell-CQ3zT1jG.d.mts} +6 -6
- package/dist/TableBoxCell.d.mts +1 -1
- package/dist/TableBoxField.d.mts +3 -3
- package/dist/{TableBoxRow-BQz0a9vr.d.mts → TableBoxRow-ClK2pceY.d.mts} +3 -3
- package/dist/TableBoxRow.d.mts +1 -1
- package/dist/{TableBoxRowActions-DfewtLrn.d.mts → TableBoxRowActions-CoF3DuUQ.d.mts} +2 -2
- package/dist/TableBoxRowActions.d.mts +1 -1
- package/dist/{index-Dc_BgmPv.d.mts → TableCell-BQv4ASkE.d.mts} +4 -25
- package/dist/TableCell.d.mts +1 -1
- package/dist/{TableControls-C26vGkWZ.d.mts → TableControls-CtEL3ioz.d.mts} +3 -3
- package/dist/{TableControls-WUNbzSNq.mjs → TableControls-DplArh-9.mjs} +73 -61
- package/dist/TableControls-DplArh-9.mjs.map +1 -0
- package/dist/TableControls.d.mts +1 -1
- package/dist/{TableControlsContext-ChFsFEjR.d.mts → TableControlsContext-X-Lupvc6.d.mts} +2 -2
- package/dist/TableControlsContext.d.mts +1 -1
- package/dist/{TableHead-PPaqXC0K.d.mts → TableHead-DLLn0zoP.d.mts} +1 -1
- package/dist/TableHead.d.mts +1 -1
- package/dist/{TableHeaderCell-K_avn-rR.d.mts → TableHeaderCell-DiJ2jyw4.d.mts} +3 -1
- package/dist/TableHeaderCell.d.mts +1 -1
- package/dist/{TableLayout-_Hd-Tvto.d.mts → TableLayout-BgnUz8NO.d.mts} +1 -1
- package/dist/TableLayout.d.mts +1 -1
- package/dist/{TableRow-BTWf9xVC.d.mts → TableRow-Dgg8hGy5.d.mts} +2 -2
- package/dist/TableRow.d.mts +1 -1
- package/dist/TableTH.d.mts +1 -1
- package/dist/{TableViewConfigurationDropdown-BqB7pOh8.d.mts → TableViewConfigurationDropdown-DRxd562-.d.mts} +2 -2
- package/dist/TableViewConfigurationDropdown.d.mts +1 -1
- package/dist/{TechnicalSticker-ClRR_6Ly.mjs → TechnicalSticker-D6MO_IfT.mjs} +26 -21
- package/dist/TechnicalSticker-D6MO_IfT.mjs.map +1 -0
- package/dist/{Text-B0orb-cZ.mjs → Text-Dn_p7ZvT.mjs} +16 -12
- package/dist/Text-Dn_p7ZvT.mjs.map +1 -0
- package/dist/{Text-CAKHcXSd.d.mts → Text-tgFz40XD.d.mts} +3 -3
- package/dist/Text.d.mts +1 -1
- package/dist/{TextArea-NjdArapc.d.mts → TextArea-BxxXQSwP.d.mts} +2 -2
- package/dist/{TextArea-n4IKHJKo.mjs → TextArea-CYirq-B2.mjs} +3 -3
- package/dist/{TextArea-n4IKHJKo.mjs.map → TextArea-CYirq-B2.mjs.map} +1 -1
- package/dist/TextArea.d.mts +1 -1
- package/dist/{TextUnderlineTooltip-Duzxfc_r.d.mts → TextUnderlineTooltip-DQVYsLqM.d.mts} +2 -2
- package/dist/TextUnderlineTooltip.d.mts +1 -1
- package/dist/Tile.d.mts +1 -1
- package/dist/Toast.d.mts +1 -1
- package/dist/{Toggle-fh80PA8P.d.mts → Toggle-BmUl78kH.d.mts} +1 -1
- package/dist/{Toggle-e8DCYa6i.mjs → Toggle-CqgFNIYS.mjs} +19 -10
- package/dist/Toggle-CqgFNIYS.mjs.map +1 -0
- package/dist/Toggle.d.mts +1 -1
- package/dist/{Tooltip-iJcfJqxn.mjs → Tooltip-BsuYG0fw.mjs} +11 -8
- package/dist/Tooltip-BsuYG0fw.mjs.map +1 -0
- package/dist/{Tooltip-DabloV0o.d.mts → Tooltip-eSaiYjxT.d.mts} +2 -2
- package/dist/Tooltip.d.mts +1 -1
- package/dist/{TruncatedText-B1W4BivL.d.mts → TruncatedText-B2v53Y11.d.mts} +1 -1
- package/dist/{codec-B0dZTwlG.d.mts → codec-D5qlDVgU.d.mts} +2 -2
- package/dist/codec.d.mts +1 -1
- package/dist/color-fQTsW4gq.d.mts +20 -0
- package/dist/components/Attribute/index.mjs +34 -9
- package/dist/components/Attribute/index.mjs.map +1 -1
- package/dist/components/Badge/index.mjs +1 -1
- package/dist/components/Banner/index.mjs +18 -7
- package/dist/components/Banner/index.mjs.map +1 -1
- package/dist/components/BottomPanel/index.mjs +4 -4
- package/dist/components/Breadcrumbs/index.d.mts +1 -1
- package/dist/components/Breadcrumbs/index.mjs +1 -1
- package/dist/components/Button/index.d.mts +2 -2
- package/dist/components/Button/index.mjs +1 -1
- package/dist/components/ButtonGroup/index.mjs +13 -5
- package/dist/components/ButtonGroup/index.mjs.map +1 -1
- package/dist/components/Card/index.d.mts +2 -2
- package/dist/components/Card/index.mjs +1 -1
- package/dist/components/CardV2/index.d.mts +1 -1
- package/dist/components/CardV2/index.mjs +1 -1
- package/dist/components/Checkbox/index.d.mts +1 -1
- package/dist/components/Checkbox/index.mjs +1 -1
- package/dist/components/CodeHighlight/PrismWithLanguages.d.mts +2 -0
- package/dist/components/CodeHighlight/PrismWithLanguages.mjs +48 -0
- package/dist/components/CodeHighlight/PrismWithLanguages.mjs.map +1 -0
- package/dist/components/CodeHighlight/index.d.mts +2 -0
- package/dist/components/CodeHighlight/index.mjs +381 -0
- package/dist/components/CodeHighlight/index.mjs.map +1 -0
- package/dist/components/Combobox/index.d.mts +2 -2
- package/dist/components/Combobox/index.mjs +1 -1
- package/dist/components/ConfigFormGroup/index.mjs +2 -2
- package/dist/components/DataTable/TableControls/index.d.mts +20 -19
- package/dist/components/DataTable/TableControls/index.mjs +2 -2
- package/dist/components/DataTable/index.mjs +85 -52
- package/dist/components/DataTable/index.mjs.map +1 -1
- package/dist/components/DataTable/types.d.mts +2 -2
- package/dist/components/DatePicker/index.d.mts +4 -4
- package/dist/components/DatePicker/index.mjs +1 -1
- package/dist/components/DropdownButton/index.mjs +1 -1
- package/dist/components/DropdownMenu/index.d.mts +1 -1
- package/dist/components/DropdownMenu/index.mjs +1 -1
- package/dist/components/FloatingPanel/index.mjs +3 -3
- package/dist/components/FormControl/index.d.mts +2 -2
- package/dist/components/FormControl/index.mjs +2 -2
- package/dist/components/FormField/index.d.mts +1 -1
- package/dist/components/FormField/index.mjs +1 -1
- package/dist/components/Grid/index.mjs +1 -1
- package/dist/components/HoverCopyableField/index.mjs +1 -1
- package/dist/components/ImageTile/index.mjs +17 -16
- package/dist/components/ImageTile/index.mjs.map +1 -1
- package/dist/components/Input/index.d.mts +1 -1
- package/dist/components/Input/index.mjs +1 -1
- package/dist/components/Link/index.mjs +5 -6
- package/dist/components/Link/index.mjs.map +1 -1
- package/dist/components/ListBox/index.d.mts +3 -3
- package/dist/components/ListBox/index.mjs +1 -1
- package/dist/components/LoadingShimmer/index.mjs +1 -1
- package/dist/components/MaskedInput/index.mjs +1 -1
- package/dist/components/MatchHighlight/index.mjs +6 -4
- package/dist/components/MatchHighlight/index.mjs.map +1 -1
- package/dist/components/Menu/index.d.mts +1 -1
- package/dist/components/Menu/index.mjs +1 -1
- package/dist/components/Modal/index.mjs +10 -8
- package/dist/components/Modal/index.mjs.map +1 -1
- package/dist/components/PageHeader/index.mjs +1 -1
- package/dist/components/Pagination/index.d.mts +3 -3
- package/dist/components/Pagination/index.mjs +1 -1
- package/dist/components/Pii/index.mjs +1 -1
- package/dist/components/Popover/index.mjs +1 -1
- package/dist/components/ProgressBar/index.mjs +16 -19
- package/dist/components/ProgressBar/index.mjs.map +1 -1
- package/dist/components/ProgressIndicator/index.mjs +24 -18
- package/dist/components/ProgressIndicator/index.mjs.map +1 -1
- package/dist/components/Radio/index.mjs +1 -1
- package/dist/components/RadioGroup/index.d.mts +1 -1
- package/dist/components/RadioGroup/index.mjs +1 -1
- package/dist/components/RightPanel/index.mjs +5 -5
- package/dist/components/SegmentedControl/index.d.mts +1 -1
- package/dist/components/SegmentedControl/index.mjs +1 -1
- package/dist/components/Select/index.d.mts +1 -1
- package/dist/components/Select/index.mjs +1 -1
- package/dist/components/Slider/index.mjs +21 -12
- package/dist/components/Slider/index.mjs.map +1 -1
- package/dist/components/SmartTextInput/PillType.d.mts +10 -0
- package/dist/components/SmartTextInput/PillType.mjs +31 -0
- package/dist/components/SmartTextInput/PillType.mjs.map +1 -0
- package/dist/components/SmartTextInput/parser/method-chain/parser.d.mts +21 -0
- package/dist/components/SmartTextInput/parser/method-chain/parser.mjs +2 -0
- package/dist/components/SmartTextInput/parser/method-chain/types.d.mts +105 -0
- package/dist/components/SmartTextInput/parser/method-chain/types.mjs +31 -0
- package/dist/components/SmartTextInput/parser/method-chain/types.mjs.map +1 -0
- package/dist/components/SmartTextInput/parser/smart-text/parser.d.mts +17 -0
- package/dist/components/SmartTextInput/parser/smart-text/parser.mjs +814 -0
- package/dist/components/SmartTextInput/parser/smart-text/parser.mjs.map +1 -0
- package/dist/components/SmartTextInput/parser/smart-text/types.d.mts +72 -0
- package/dist/components/SmartTextInput/parser/smart-text/types.mjs +38 -0
- package/dist/components/SmartTextInput/parser/smart-text/types.mjs.map +1 -0
- package/dist/components/Spacer/index.mjs +1 -1
- package/dist/components/Spinner/index.mjs +1 -1
- package/dist/components/Stack/index.d.mts +1 -1
- package/dist/components/Stack/index.mjs +1 -1
- package/dist/components/StatusIndicator/index.mjs +111 -12
- package/dist/components/StatusIndicator/index.mjs.map +1 -1
- package/dist/components/Sticker/index.d.mts +1 -1
- package/dist/components/Sticker/index.mjs +1 -1
- package/dist/components/SwatchPicker/index.mjs +5 -4
- package/dist/components/SwatchPicker/index.mjs.map +1 -1
- package/dist/components/TabBar/index.mjs +1 -1
- package/dist/components/Table/index.d.mts +8 -7
- package/dist/components/Table/index.mjs +1 -1
- package/dist/components/TableBox/index.d.mts +2 -2
- package/dist/components/TableBox/index.mjs +1 -1
- package/dist/components/TechnicalSticker/index.mjs +1 -1
- package/dist/components/Text/index.d.mts +1 -1
- package/dist/components/Text/index.mjs +1 -1
- package/dist/components/TextArea/index.d.mts +1 -1
- package/dist/components/TextArea/index.mjs +1 -1
- package/dist/components/Tile/index.mjs +9 -8
- package/dist/components/Tile/index.mjs.map +1 -1
- package/dist/components/Toast/index.mjs +15 -9
- package/dist/components/Toast/index.mjs.map +1 -1
- package/dist/components/Toggle/index.d.mts +1 -1
- package/dist/components/Toggle/index.mjs +1 -1
- package/dist/components/Tooltip/index.d.mts +3 -3
- package/dist/components/Tooltip/index.mjs +1 -1
- package/dist/compound-expression.d.mts +1 -1
- package/dist/{constants-DcJ3tnwY.d.mts → constants-zZyl7QbX.d.mts} +1 -1
- package/dist/constants.d.mts +1 -1
- package/dist/{date-filter-BbWgAXy3.mjs → date-filter-DMZnJwGs.mjs} +1 -1
- package/dist/{date-filter-BbWgAXy3.mjs.map → date-filter-DMZnJwGs.mjs.map} +1 -1
- package/dist/{date-range-rule-value-DBEEWTQp.d.mts → date-range-rule-value-zJaa_jR9.d.mts} +2 -2
- package/dist/date-range-rule-value.d.mts +1 -1
- package/dist/{date-rule-intent-BArNGT2E.d.mts → date-rule-intent-CdWv68my.d.mts} +3 -3
- package/dist/date-rule-intent.d.mts +1 -1
- package/dist/display.d.mts +1 -1
- package/dist/fieldPickerOptions.d.mts +2 -2
- package/dist/fieldSchemaTypes-COEJOqYL.d.mts +39 -0
- package/dist/{filter-size-context-D1UhTwOG.d.mts → filter-size-context-DYkfYMkX.d.mts} +2 -2
- package/dist/filter-size-context.d.mts +1 -1
- package/dist/helpers.d.mts +1 -1
- package/dist/{index-Dpo-RP6S.d.mts → index-BJr_obTf.d.mts} +3 -3
- package/dist/{index-DASkW991.d.mts → index-BX8dSNcy.d.mts} +2 -2
- package/dist/index-DxIXll2Z.d.mts +21 -0
- package/dist/index-hcx6LMSC.d.mts +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/index2.d.mts +1 -1
- package/dist/index3.d.mts +3 -3
- package/dist/index4.d.mts +2 -14
- package/dist/index5.d.mts +15 -2
- package/dist/{input-M7BEIewR.d.mts → input-DN_8iHVD.d.mts} +3 -3
- package/dist/inputFields.d.mts +10 -10
- package/dist/{intersperse-DQAyfeEw.mjs → intersperse-CRUnXmnu.mjs} +1 -1
- package/dist/{intersperse-DQAyfeEw.mjs.map → intersperse-CRUnXmnu.mjs.map} +1 -1
- package/dist/jsonSchema-B1VonQij.d.mts +222 -0
- package/dist/lib/GlobalStyles.mjs +1 -1
- package/dist/lib/HeadlessAriaButton.d.mts +1 -2
- package/dist/lib/HeadlessAriaButton.mjs +1 -1
- package/dist/lib/MiddleTruncatedText.mjs +1 -1
- package/dist/lib/PDSProvider.d.mts +1 -1
- package/dist/lib/PDSProvider.mjs +1 -1
- package/dist/lib/TruncatedText.d.mts +1 -1
- package/dist/lib/TruncatedText.mjs +1 -1
- package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
- package/dist/lib/TruncatedTextWithTooltip.mjs +1 -1
- package/dist/lib/color.d.mts +2 -0
- package/dist/lib/color.mjs +21 -0
- package/dist/lib/color.mjs.map +1 -0
- package/dist/lib/date-filter/index.d.mts +2 -2
- package/dist/lib/date-filter/index.mjs +1 -1
- package/dist/lib/errorReporter.d.mts +7 -0
- package/dist/lib/errorReporter.mjs +15 -0
- package/dist/lib/errorReporter.mjs.map +1 -0
- package/dist/lib/fieldSchemaTypes.d.mts +2 -0
- package/dist/lib/fieldSchemaTypes.mjs +41 -0
- package/dist/lib/fieldSchemaTypes.mjs.map +1 -0
- package/dist/lib/jsonSchema.d.mts +2 -0
- package/dist/lib/jsonSchema.mjs +260 -0
- package/dist/lib/jsonSchema.mjs.map +1 -0
- package/dist/lib/message.d.mts +1 -1
- package/dist/lib/methodChain.d.mts +66 -0
- package/dist/lib/methodChain.mjs +239 -0
- package/dist/lib/methodChain.mjs.map +1 -0
- package/dist/lib/methodChainNormalize.d.mts +14 -0
- package/dist/lib/methodChainNormalize.mjs +53 -0
- package/dist/lib/methodChainNormalize.mjs.map +1 -0
- package/dist/lib/methodChainTypes.d.mts +23 -0
- package/dist/lib/methodChainTypes.mjs +0 -0
- package/dist/lib/objectSchemaTypes.d.mts +2 -0
- package/dist/lib/objectSchemaTypes.mjs +0 -0
- package/dist/lib/pseudoClass.d.mts +1 -1
- package/dist/lib/selectHelper.mjs.map +1 -1
- package/dist/lib/semanticColor.d.mts +2 -0
- package/dist/lib/semanticColor.mjs +17 -0
- package/dist/lib/semanticColor.mjs.map +1 -0
- package/dist/lib/useControlled.mjs.map +1 -1
- package/dist/{message-DaiDXonE.d.mts → message-DfEpU8lV.d.mts} +1 -1
- package/dist/mixins/focus.d.mts +4 -4
- package/dist/mixins/focus.mjs +7 -5
- package/dist/mixins/focus.mjs.map +1 -1
- package/dist/mixins/hoverable.d.mts +2 -2
- package/dist/mixins/hoverable.mjs +1 -1
- package/dist/mixins/input.d.mts +1 -1
- package/dist/mixins/input.mjs +55 -22
- package/dist/mixins/input.mjs.map +1 -1
- package/dist/mixins/menuItem.d.mts +2 -2
- package/dist/mixins/menuItem.mjs +78 -50
- package/dist/mixins/menuItem.mjs.map +1 -1
- package/dist/mixins/print/index.mjs +4 -2
- package/dist/mixins/print/index.mjs.map +1 -1
- package/dist/mixins/text.d.mts +1 -1
- package/dist/mixins/text.mjs +1 -1
- package/dist/{operators-BsSl7gPE.d.mts → operators-F8X0hyQB.d.mts} +2 -2
- package/dist/operators.d.mts +1 -1
- package/dist/palette-BANY1Xfs.d.mts +21 -0
- package/dist/palette.d.mts +2 -0
- package/dist/parser-Kxos6siN.mjs +2156 -0
- package/dist/parser-Kxos6siN.mjs.map +1 -0
- package/dist/patterns/LayoutLoadingShimmer/index.mjs +6 -6
- package/dist/patterns/LayoutLoadingSpinner/index.mjs +1 -1
- package/dist/patterns/PageLayout/index.mjs +1 -1
- package/dist/relative-date-label.d.mts +1 -1
- package/dist/semantic-Dy7mTyBP.d.mts +133 -0
- package/dist/semanticColor-DkVQjcbc.d.mts +29 -0
- package/dist/{styledComponentsInterop-8zScIQyC.mjs → styledComponentsInterop-NxwFjeA4.mjs} +2 -2
- package/dist/{styledComponentsInterop-8zScIQyC.mjs.map → styledComponentsInterop-NxwFjeA4.mjs.map} +1 -1
- package/dist/{text-DjTGRUM1.d.mts → text-BaQdW8qa.d.mts} +1 -1
- package/dist/{theme-Biwx2eJZ.d.mts → theme-D02MOaH6.d.mts} +22 -5
- package/dist/theme.d.mts +2 -2
- package/dist/theme.mjs +22 -1
- package/dist/theme.mjs.map +1 -1
- package/dist/tone.d.mts +17 -0
- package/dist/{types-V8UJX-rk.d.mts → types-1_JSe9Wr.d.mts} +2 -2
- package/dist/{types-B5VmRRMR.d.mts → types-C2s9yhgO.d.mts} +2 -2
- package/dist/{types-Bsf1VsW6.d.mts → types-COeginAF.d.mts} +1 -1
- package/dist/{types-Df0D37uh.d.mts → types-CtLY82w5.d.mts} +1 -1
- package/dist/{types-Cg3aXHUh2.d.mts → types-Ok2lRZeu.d.mts} +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types2.d.mts +1 -1
- package/dist/types3.d.mts +1 -1
- package/dist/types4.d.mts +1 -1
- package/dist/types5.d.mts +1 -1
- package/dist/{url-state-ektb0HnB.d.mts → url-state-DP78aDol.d.mts} +2 -2
- package/dist/url-state.d.mts +1 -1
- package/dist/useComboboxFooterAction.d.mts +1 -1
- package/dist/{useFilterStateV2-BB14vCC-.d.mts → useFilterStateV2-DC2rGXHK.d.mts} +3 -3
- package/dist/useFilterStateV2.d.mts +1 -1
- package/dist/{useFormField-CQo08dR4.d.mts → useFormField--_14te0K.d.mts} +2 -2
- package/dist/{useFormField-Bz2iMPBO.mjs → useFormField-C-K1lgmv.mjs} +2 -2
- package/dist/{useFormField-Bz2iMPBO.mjs.map → useFormField-C-K1lgmv.mjs.map} +1 -1
- package/dist/useFormField.d.mts +1 -1
- package/dist/{useFormGroup-CaTiD_Yt.mjs → useFormGroup-y-duFylq.mjs} +1 -1
- package/dist/{useFormGroup-CaTiD_Yt.mjs.map → useFormGroup-y-duFylq.mjs.map} +1 -1
- package/dist/{useTableBoxDragAndDrop-B-Dev5D6.d.mts → useTableBoxDragAndDrop-DkCxC7Mi.d.mts} +1 -1
- package/dist/useTableBoxDragAndDrop.d.mts +1 -1
- package/dist/{useToggle-Bo3yd14Y.mjs → useToggle-0zLL1E7s.mjs} +1 -1
- package/dist/{useToggle-Bo3yd14Y.mjs.map → useToggle-0zLL1E7s.mjs.map} +1 -1
- package/dist/useTruncation.d.mts +1 -1
- package/dist/{utilities-BHMNnJ8h.d.mts → utilities-C1hOxjt_.d.mts} +1 -1
- package/dist/utilities.d.mts +1 -1
- package/dist/utils/storybook.mjs +1 -1
- package/dist/utils/storybook.mjs.map +1 -1
- package/dist/utils/testing.mjs.map +1 -1
- package/dist/utils.d.mts +1 -1
- package/dist/{validation-B22QjCrV.d.mts → validation-CpDsI-TM.d.mts} +3 -3
- package/dist/validation.d.mts +1 -1
- package/dist/{value-control-resolver-qKTH1ErF.d.mts → value-control-resolver-DhaqxKmK.d.mts} +2 -2
- package/dist/value-control-resolver.d.mts +1 -1
- package/dist/variables/effect.d.mts +14 -3
- package/dist/variables/effect.mjs +5 -3
- package/dist/variables/effect.mjs.map +1 -1
- package/dist/variables/keyframes.mjs +1 -1
- package/dist/variables/semantic.d.mts +2 -0
- package/dist/variables/semantic.mjs +241 -0
- package/dist/variables/semantic.mjs.map +1 -0
- package/package.json +68 -7
- package/skills/ui-authoring/COMPONENTS.md +1 -1
- package/skills/ui-authoring/SKILL.md +1 -1
- package/skills/ui-authoring/TOKENS.md +1 -1
- package/dist/Breadcrumbs-Zi5p0HDR.mjs.map +0 -1
- package/dist/Card-CKrJtn1f.mjs.map +0 -1
- package/dist/Card-mZDNFaJy.d.mts +0 -52
- package/dist/CardV2-CXxzl1EZ.mjs.map +0 -1
- package/dist/Checkbox-DxNHp59y.mjs.map +0 -1
- package/dist/Combobox-BUtqtzKl.mjs.map +0 -1
- package/dist/DatePicker-CLP-ajza.mjs.map +0 -1
- package/dist/FormControl-1BmoYFCu.mjs.map +0 -1
- package/dist/FormField-oBKH25qf.mjs.map +0 -1
- package/dist/IconButton-BgL3QUVO.mjs.map +0 -1
- package/dist/Input-BWlvBYB3.mjs.map +0 -1
- package/dist/ListBox-9jHHEaqW.mjs.map +0 -1
- package/dist/LoadingShimmer-a2Hv0kAq.mjs.map +0 -1
- package/dist/Menu-38UCGcte.mjs.map +0 -1
- package/dist/PageHeader-B2-Slzhl.mjs.map +0 -1
- package/dist/Pagination-CtUz0gdA.mjs.map +0 -1
- package/dist/Popover-DlXyKYL5.mjs.map +0 -1
- package/dist/Radio-cLL9oatf.mjs.map +0 -1
- package/dist/SegmentedControl-CvWJGhwy.mjs.map +0 -1
- package/dist/Select-U_vQhK1A.mjs.map +0 -1
- package/dist/Spinner-BTyc6glU.mjs.map +0 -1
- package/dist/Sticker-CQ6sOKUj.mjs.map +0 -1
- package/dist/TabBar-B5NtgtgC.mjs.map +0 -1
- package/dist/Table-DfUD3I2s.mjs.map +0 -1
- package/dist/TableBox-0GvWjRln.mjs.map +0 -1
- package/dist/TableControls-WUNbzSNq.mjs.map +0 -1
- package/dist/TechnicalSticker-ClRR_6Ly.mjs.map +0 -1
- package/dist/Text-B0orb-cZ.mjs.map +0 -1
- package/dist/Toggle-e8DCYa6i.mjs.map +0 -1
- package/dist/Tooltip-iJcfJqxn.mjs.map +0 -1
- /package/dist/{index-8SLBz2NH.d.mts → index--p6oQT9I.d.mts} +0 -0
- /package/dist/{index-BINnViIh.d.mts → index-1-AkepUA.d.mts} +0 -0
- /package/dist/{index-BcsXXrHq.d.mts → index-BFnNtGdX.d.mts} +0 -0
- /package/dist/{index-Bt4QNofW.d.mts → index-BO_854F2.d.mts} +0 -0
- /package/dist/{index-BwFl_eS0.d.mts → index-BPiqSRRl.d.mts} +0 -0
- /package/dist/{index-CDGG7lCB.d.mts → index-BSVhZrWN.d.mts} +0 -0
- /package/dist/{index-CRo77wc3.d.mts → index-BYd3Btr1.d.mts} +0 -0
- /package/dist/{index-CX869wwk.d.mts → index-BrGZHEgX.d.mts} +0 -0
- /package/dist/{index-CliqZ9rj.d.mts → index-Ci-uuV07.d.mts} +0 -0
- /package/dist/{index-D4DUvwPf.d.mts → index-CknANNvQ2.d.mts} +0 -0
- /package/dist/{index-DBGd4WeR.d.mts → index-CtJuGxUp.d.mts} +0 -0
- /package/dist/{index-DDdPqD_H.d.mts → index-CuYZJcK3.d.mts} +0 -0
- /package/dist/{index-DMRtRo7y.d.mts → index-DWfPppPU.d.mts} +0 -0
- /package/dist/{index-Dflz2i1X.d.mts → index-DYX_PQ7T2.d.mts} +0 -0
- /package/dist/{index-DvmLVvRD.d.mts → index-DZlqSwCF.d.mts} +0 -0
- /package/dist/{index-DztUdPP_.d.mts → index-De7MV8-j.d.mts} +0 -0
- /package/dist/{index-Wc1llEvP.d.mts → index-Deol7ZWO.d.mts} +0 -0
- /package/dist/{index-dhjtMp5F.d.mts → index-N-OgGgfF.d.mts} +0 -0
- /package/dist/{index-e6k85DKM.d.mts → index-VWno75SQ.d.mts} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as Pii_default } from "../../Pii-
|
|
1
|
+
import { t as Pii_default } from "../../Pii-Bm-qkweh.mjs";
|
|
2
2
|
export { Pii_default as default };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as PopoverPortal, i as PopoverContent, n as PopoverCard, o as PopoverTrigger, r as PopoverClose, s as Popover_default, t as PopoverAnchor } from "../../Popover-
|
|
1
|
+
import { a as PopoverPortal, i as PopoverContent, n as PopoverCard, o as PopoverTrigger, r as PopoverClose, s as Popover_default, t as PopoverAnchor } from "../../Popover-DUyzmq3e.mjs";
|
|
2
2
|
export { PopoverAnchor, PopoverCard, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, Popover_default as default };
|
|
@@ -1,21 +1,19 @@
|
|
|
1
|
-
import { a as styled, i as keyframes } from "../../styledComponentsInterop-
|
|
1
|
+
import { a as styled, i as keyframes } from "../../styledComponentsInterop-NxwFjeA4.mjs";
|
|
2
|
+
import { semanticColor } from "../../lib/semanticColor.mjs";
|
|
2
3
|
import { paragraphMixins } from "../../mixins/text.mjs";
|
|
3
|
-
import { a as Tooltip } from "../../Tooltip-
|
|
4
|
+
import { a as Tooltip } from "../../Tooltip-BsuYG0fw.mjs";
|
|
4
5
|
import { Color, Spacing } from "@persona/design-tokens";
|
|
5
6
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
7
|
import { useId } from "react-aria";
|
|
7
8
|
import CircleCheckFillIcon from "@persona/icons/CircleCheckFillIcon";
|
|
8
9
|
import CircleWarningFillIcon from "@persona/icons/CircleWarningFillIcon";
|
|
9
10
|
//#region components/ProgressBar/ProgressBar.tsx
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
};
|
|
15
|
-
const STATUS_ICON_COLORS = {
|
|
16
|
-
exception: Color.BorderInputDanger,
|
|
17
|
-
success: Color.BorderIconSuccess
|
|
11
|
+
const statusFill = (theme, status) => {
|
|
12
|
+
if (status === "exception") return semanticColor(theme, "StatusDanger4", Color.BorderInputDanger);
|
|
13
|
+
if (status === "success") return semanticColor(theme, "StatusSuccess3", Color.BorderIconSuccess);
|
|
14
|
+
return semanticColor(theme, "StatusInfo3", Color.BorderInputActive);
|
|
18
15
|
};
|
|
16
|
+
const statusIconColor = (theme, status) => status === "exception" ? semanticColor(theme, "FgDanger1", Color.BorderInputDanger) : semanticColor(theme, "FgSuccess", Color.BorderIconSuccess);
|
|
19
17
|
const TRACK_HEIGHT = {
|
|
20
18
|
sm: "4px",
|
|
21
19
|
md: "8px"
|
|
@@ -33,7 +31,7 @@ const Container = styled.div`
|
|
|
33
31
|
`;
|
|
34
32
|
const LabelText = styled.span`
|
|
35
33
|
${paragraphMixins.md}
|
|
36
|
-
color: ${Color.TextPrimary};
|
|
34
|
+
color: ${({ theme }) => semanticColor(theme, "FgPrimary", Color.TextPrimary)};
|
|
37
35
|
`;
|
|
38
36
|
const BarRow = styled.div`
|
|
39
37
|
display: flex;
|
|
@@ -45,7 +43,7 @@ const BarRow = styled.div`
|
|
|
45
43
|
const Track = styled.div`
|
|
46
44
|
flex: 1;
|
|
47
45
|
height: ${({ $size }) => TRACK_HEIGHT[$size]};
|
|
48
|
-
background-color: ${({ $railColor }) => $railColor ?? Color.BorderDivider};
|
|
46
|
+
background-color: ${({ theme, $railColor }) => $railColor ?? semanticColor(theme, "BorderSubtle", Color.BorderDivider)};
|
|
49
47
|
border-radius: 4px;
|
|
50
48
|
overflow: hidden;
|
|
51
49
|
position: relative;
|
|
@@ -56,7 +54,7 @@ const Fill = styled.div`
|
|
|
56
54
|
bottom: 0;
|
|
57
55
|
left: ${({ $left }) => `${$left}%`};
|
|
58
56
|
width: ${({ $percent }) => `${$percent}%`};
|
|
59
|
-
background-color: ${({ $status, $fillColor }) => $fillColor ??
|
|
57
|
+
background-color: ${({ theme, $status, $fillColor }) => $fillColor ?? statusFill(theme, $status)};
|
|
60
58
|
border-radius: ${({ $hasSuccessBefore }) => $hasSuccessBefore ? "0 4px 4px 0" : "4px"};
|
|
61
59
|
transition: width 0.3s ease, left 0.3s ease;
|
|
62
60
|
`;
|
|
@@ -66,7 +64,7 @@ const SuccessFill = styled.div`
|
|
|
66
64
|
bottom: 0;
|
|
67
65
|
left: 0;
|
|
68
66
|
width: ${({ $percent }) => `${$percent}%`};
|
|
69
|
-
background-color: ${
|
|
67
|
+
background-color: ${({ theme }) => statusFill(theme, "success")};
|
|
70
68
|
border-radius: ${({ $hasInProgressAfter }) => $hasInProgressAfter ? "4px 0 0 4px" : "4px"};
|
|
71
69
|
transition: width 0.3s ease;
|
|
72
70
|
`;
|
|
@@ -74,8 +72,7 @@ const IndeterminateFill = styled.div`
|
|
|
74
72
|
position: absolute;
|
|
75
73
|
inset: 0 auto 0 auto;
|
|
76
74
|
height: 100%;
|
|
77
|
-
|
|
78
|
-
background-color: ${Color.BorderIconPrimary};
|
|
75
|
+
background-color: ${({ theme }) => semanticColor(theme, "FeedbackNeutral5", Color.BorderIconPrimary)};
|
|
79
76
|
border-radius: 4px;
|
|
80
77
|
animation: ${indeterminateScan} 2.5s ease-in-out infinite;
|
|
81
78
|
`;
|
|
@@ -87,14 +84,14 @@ const SuffixRow = styled.div`
|
|
|
87
84
|
`;
|
|
88
85
|
const PercentText = styled.span`
|
|
89
86
|
${paragraphMixins.md}
|
|
90
|
-
color: ${Color.TextPrimary};
|
|
87
|
+
color: ${({ theme }) => semanticColor(theme, "FgPrimary", Color.TextPrimary)};
|
|
91
88
|
white-space: nowrap;
|
|
92
89
|
`;
|
|
93
90
|
const IconWrapper = styled.span`
|
|
94
91
|
display: flex;
|
|
95
92
|
flex-shrink: 0;
|
|
96
93
|
line-height: 0;
|
|
97
|
-
color: ${({ $
|
|
94
|
+
color: ${({ theme, $status }) => statusIconColor(theme, $status)};
|
|
98
95
|
`;
|
|
99
96
|
/**
|
|
100
97
|
* ProgressBar shows the completion status of an operation as a filled bar.
|
|
@@ -154,7 +151,7 @@ const ProgressBar = ({ percent = 0, size = "sm", status = "default", type = "det
|
|
|
154
151
|
contentAlignment: "center",
|
|
155
152
|
children: tooltip
|
|
156
153
|
}) : track, effectiveShowInfo && /* @__PURE__ */ jsx(SuffixRow, { children: isTerminal ? /* @__PURE__ */ jsx(IconWrapper, {
|
|
157
|
-
$
|
|
154
|
+
$status: effectiveStatus,
|
|
158
155
|
children: effectiveStatus === "exception" ? /* @__PURE__ */ jsx(CircleWarningFillIcon, { size: 16 }) : /* @__PURE__ */ jsx(CircleCheckFillIcon, { size: 16 })
|
|
159
156
|
}) : /* @__PURE__ */ jsx(PercentText, { children: formattedPercent }) })] })]
|
|
160
157
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../components/ProgressBar/ProgressBar.tsx","../../../components/ProgressBar/index.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport { useId } from 'react-aria';\nimport styled, { keyframes } from 'styled-components';\n\nimport { Tooltip } from '@persona/design-system/components/Tooltip';\nimport { paragraphMixins } from '@persona/design-system/mixins/text';\nimport { Color, Spacing } from '@persona/design-tokens';\nimport CircleCheckFillIcon from '@persona/icons/CircleCheckFillIcon';\nimport CircleWarningFillIcon from '@persona/icons/CircleWarningFillIcon';\n\nexport type ProgressBarStatus = 'default' | 'exception' | 'success';\nexport type ProgressBarSize = 'sm' | 'md';\nexport type ProgressBarType = 'determinate' | 'indeterminate';\n\nconst STATUS_FILL_COLORS: Record<ProgressBarStatus, Color> = {\n default: Color.BorderInputActive,\n exception: Color.BorderInputDanger,\n success: Color.BorderIconSuccess,\n};\n\nconst STATUS_ICON_COLORS: Record<'exception' | 'success', Color> = {\n exception: Color.BorderInputDanger,\n success: Color.BorderIconSuccess,\n};\n\nconst TRACK_HEIGHT: Record<ProgressBarSize, string> = {\n sm: '4px',\n md: '8px',\n};\n\n// 20px matches the line-height of TextMedium — the tallest element in the bar row\nconst BAR_ROW_HEIGHT = '20px';\n\nconst indeterminateScan = keyframes`\n 0% { left: -40%; width: 40%; }\n 60% { left: 100%; width: 40%; }\n 100% { left: 100%; width: 40%; }\n`;\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst LabelText = styled.span`\n ${paragraphMixins.md}\n color: ${Color.TextPrimary};\n`;\n\nconst BarRow = styled.div`\n display: flex;\n gap: ${Spacing[2]};\n align-items: center;\n min-height: ${BAR_ROW_HEIGHT};\n width: 100%;\n`;\n\nconst Track = styled.div<{ $size: ProgressBarSize; $railColor?: Color }>`\n flex: 1;\n height: ${({ $size }) => TRACK_HEIGHT[$size]};\n background-color: ${({ $railColor }) => $railColor ?? Color.BorderDivider};\n border-radius: 4px;\n overflow: hidden;\n position: relative;\n`;\n\nconst Fill = styled.div<{\n $percent: number;\n $left: number;\n $status: ProgressBarStatus;\n $fillColor?: Color;\n $hasSuccessBefore: boolean;\n}>`\n position: absolute;\n top: 0;\n bottom: 0;\n left: ${({ $left }) => `${$left}%`};\n width: ${({ $percent }) => `${$percent}%`};\n background-color: ${({ $status, $fillColor }) => $fillColor ?? STATUS_FILL_COLORS[$status]};\n border-radius: ${({ $hasSuccessBefore }) => ($hasSuccessBefore ? '0 4px 4px 0' : '4px')};\n transition: width 0.3s ease, left 0.3s ease;\n`;\n\nconst SuccessFill = styled.div<{ $percent: number; $hasInProgressAfter: boolean }>`\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: ${({ $percent }) => `${$percent}%`};\n background-color: ${STATUS_FILL_COLORS.success};\n border-radius: ${({ $hasInProgressAfter }) => ($hasInProgressAfter ? '4px 0 0 4px' : '4px')};\n transition: width 0.3s ease;\n`;\n\nconst IndeterminateFill = styled.div`\n position: absolute;\n inset: 0 auto 0 auto;\n height: 100%;\n /* Same neutral as Spinner (Color.BorderIconPrimary) */\n background-color: ${Color.BorderIconPrimary};\n border-radius: 4px;\n animation: ${indeterminateScan} 2.5s ease-in-out infinite;\n`;\n\nconst SuffixRow = styled.div`\n display: flex;\n gap: ${Spacing[1]};\n align-items: center;\n flex-shrink: 0;\n`;\n\nconst PercentText = styled.span`\n ${paragraphMixins.md}\n color: ${Color.TextPrimary};\n white-space: nowrap;\n`;\n\nconst IconWrapper = styled.span<{ $color: Color }>`\n display: flex;\n flex-shrink: 0;\n line-height: 0;\n color: ${({ $color }) => $color};\n`;\n\nexport interface ProgressBarProps extends ComponentPropsWithoutRef<'div'> {\n /** Completion percentage, 0–100 */\n percent?: number;\n /** Size of the bar track */\n size?: ProgressBarSize;\n /** Status — affects fill color */\n status?: ProgressBarStatus;\n /**\n * `'determinate'` shows a filled bar for a known percentage.\n * `'indeterminate'` shows a scanning animation for unknown progress.\n * @defaultValue 'determinate'\n */\n type?: ProgressBarType;\n /** Label text */\n label?: string;\n /**\n * Show a right-hand info slot: percentage while in progress, status icon when\n * success or exception. The two are mutually exclusive — icon replaces percentage\n * once the bar reaches a terminal state.\n * Defaults to `true` when `successPercent` is set.\n */\n showInfo?: boolean;\n /** Custom fill color (design-system token) — overrides status color */\n fillColor?: Color;\n /** Custom track/rail background color (design-system token) */\n railColor?: Color;\n /**\n * Format function for the displayed percentage value.\n * @defaultValue (percent) => `${percent}%`\n */\n format?: (percent: number) => string;\n /**\n * When set, renders a green success segment from 0 to `successPercent`%,\n * with the main fill continuing from `successPercent`% to `percent`%.\n * Clamped to [0, percent]. Also enables `showInfo` by default.\n */\n successPercent?: number;\n /**\n * Tooltip content shown when hovering the bar track.\n * Use to surface a segment breakdown, e.g. \"3 done / 3 in progress / 4 to do\".\n */\n tooltip?: string;\n}\n\n/**\n * ProgressBar shows the completion status of an operation as a filled bar.\n *\n * @example\n * ```tsx\n * <ProgressBar\n * percent={60}\n * size=\"md\"\n * label=\"Uploading\"\n * showInfo\n * />\n * ```\n */\nexport const ProgressBar = ({\n percent = 0,\n size = 'sm',\n status = 'default',\n type = 'determinate',\n label,\n showInfo,\n fillColor,\n railColor,\n format,\n successPercent,\n tooltip,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n ...props\n}: ProgressBarProps) => {\n const labelId = useId();\n const clampedPercent = Math.min(100, Math.max(0, percent));\n const clampedSuccessPercent =\n successPercent != null ? Math.min(clampedPercent, Math.max(0, successPercent)) : 0;\n const inProgressPercent = clampedPercent - clampedSuccessPercent;\n const hasSuccessSegment = clampedSuccessPercent > 0;\n const hasInProgressSegment = inProgressPercent > 0;\n\n // Automatically derive success status when fully complete (unless caller set exception)\n const effectiveStatus: ProgressBarStatus =\n clampedPercent >= 100 && status !== 'exception' ? 'success' : status;\n\n // showInfo defaults to true when successPercent is used\n const effectiveShowInfo = showInfo ?? successPercent != null;\n\n const isTerminal = effectiveStatus === 'exception' || effectiveStatus === 'success';\n const formattedPercent = format ? format(clampedPercent) : `${clampedPercent}%`;\n const isIndeterminate = type === 'indeterminate';\n\n const labelledBy = label ? [labelId, ariaLabelledBy].filter(Boolean).join(' ') : ariaLabelledBy;\n const accessibleLabel = labelledBy ? undefined : (ariaLabel ?? 'Progress');\n\n const track = (\n <Track\n $size={size}\n $railColor={railColor}\n role='progressbar'\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={isIndeterminate ? undefined : clampedPercent}\n aria-valuetext={isIndeterminate ? undefined : formattedPercent}\n aria-labelledby={labelledBy || undefined}\n aria-label={accessibleLabel}\n >\n {isIndeterminate ? (\n <IndeterminateFill />\n ) : (\n <>\n {hasSuccessSegment && (\n <SuccessFill\n $percent={clampedSuccessPercent}\n $hasInProgressAfter={hasInProgressSegment}\n />\n )}\n {hasInProgressSegment && (\n <Fill\n $percent={inProgressPercent}\n $left={clampedSuccessPercent}\n $status={effectiveStatus}\n $fillColor={fillColor}\n $hasSuccessBefore={hasSuccessSegment}\n />\n )}\n </>\n )}\n </Track>\n );\n\n return (\n <Container {...props}>\n {label && <LabelText id={labelId}>{label}</LabelText>}\n <BarRow>\n {tooltip ? (\n <Tooltip trigger={track} side='top' contentAlignment='center'>\n {tooltip}\n </Tooltip>\n ) : (\n track\n )}\n {effectiveShowInfo && (\n <SuffixRow>\n {isTerminal ? (\n <IconWrapper $color={STATUS_ICON_COLORS[effectiveStatus]}>\n {effectiveStatus === 'exception' ? (\n <CircleWarningFillIcon size={16} />\n ) : (\n <CircleCheckFillIcon size={16} />\n )}\n </IconWrapper>\n ) : (\n <PercentText>{formattedPercent}</PercentText>\n )}\n </SuffixRow>\n )}\n </BarRow>\n </Container>\n );\n};\n\nexport default ProgressBar;\n","import ProgressBar from './ProgressBar';\n\nexport { ProgressBar };\nexport type {\n ProgressBarProps,\n ProgressBarSize,\n ProgressBarStatus,\n ProgressBarType,\n} from './ProgressBar';\n\nexport default ProgressBar;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../components/ProgressBar/ProgressBar.tsx","../../../components/ProgressBar/index.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport { useId } from 'react-aria';\nimport styled, { keyframes } from 'styled-components';\n\nimport { Tooltip } from '@persona/design-system/components/Tooltip';\nimport { paragraphMixins } from '@persona/design-system/mixins/text';\nimport { Color, Spacing } from '@persona/design-tokens';\nimport CircleCheckFillIcon from '@persona/icons/CircleCheckFillIcon';\nimport CircleWarningFillIcon from '@persona/icons/CircleWarningFillIcon';\nimport { type MaybeSemanticTheme, semanticColor } from 'design-system/lib/semanticColor';\n\nexport type ProgressBarStatus = 'default' | 'exception' | 'success';\nexport type ProgressBarSize = 'sm' | 'md';\nexport type ProgressBarType = 'determinate' | 'indeterminate';\n\nconst statusFill = (theme: MaybeSemanticTheme, status: ProgressBarStatus) => {\n if (status === 'exception') {\n return semanticColor(theme, 'StatusDanger4', Color.BorderInputDanger);\n }\n if (status === 'success') {\n return semanticColor(theme, 'StatusSuccess3', Color.BorderIconSuccess);\n }\n return semanticColor(theme, 'StatusInfo3', Color.BorderInputActive);\n};\n\nconst statusIconColor = (theme: MaybeSemanticTheme, status: 'exception' | 'success') =>\n status === 'exception'\n ? semanticColor(theme, 'FgDanger1', Color.BorderInputDanger)\n : semanticColor(theme, 'FgSuccess', Color.BorderIconSuccess);\n\nconst TRACK_HEIGHT: Record<ProgressBarSize, string> = {\n sm: '4px',\n md: '8px',\n};\n\n// 20px matches the line-height of TextMedium — the tallest element in the bar row\nconst BAR_ROW_HEIGHT = '20px';\n\nconst indeterminateScan = keyframes`\n 0% { left: -40%; width: 40%; }\n 60% { left: 100%; width: 40%; }\n 100% { left: 100%; width: 40%; }\n`;\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\nconst LabelText = styled.span`\n ${paragraphMixins.md}\n color: ${({ theme }) => semanticColor(theme, 'FgPrimary', Color.TextPrimary)};\n`;\n\nconst BarRow = styled.div`\n display: flex;\n gap: ${Spacing[2]};\n align-items: center;\n min-height: ${BAR_ROW_HEIGHT};\n width: 100%;\n`;\n\nconst Track = styled.div<{ $size: ProgressBarSize; $railColor?: Color }>`\n flex: 1;\n height: ${({ $size }) => TRACK_HEIGHT[$size]};\n background-color: ${({ theme, $railColor }) =>\n $railColor ?? semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n border-radius: 4px;\n overflow: hidden;\n position: relative;\n`;\n\nconst Fill = styled.div<{\n $percent: number;\n $left: number;\n $status: ProgressBarStatus;\n $fillColor?: Color;\n $hasSuccessBefore: boolean;\n}>`\n position: absolute;\n top: 0;\n bottom: 0;\n left: ${({ $left }) => `${$left}%`};\n width: ${({ $percent }) => `${$percent}%`};\n background-color: ${({ theme, $status, $fillColor }) => $fillColor ?? statusFill(theme, $status)};\n border-radius: ${({ $hasSuccessBefore }) => ($hasSuccessBefore ? '0 4px 4px 0' : '4px')};\n transition: width 0.3s ease, left 0.3s ease;\n`;\n\nconst SuccessFill = styled.div<{ $percent: number; $hasInProgressAfter: boolean }>`\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: ${({ $percent }) => `${$percent}%`};\n background-color: ${({ theme }) => statusFill(theme, 'success')};\n border-radius: ${({ $hasInProgressAfter }) => ($hasInProgressAfter ? '4px 0 0 4px' : '4px')};\n transition: width 0.3s ease;\n`;\n\nconst IndeterminateFill = styled.div`\n position: absolute;\n inset: 0 auto 0 auto;\n height: 100%;\n background-color: ${({ theme }) => semanticColor(theme, 'FeedbackNeutral5', Color.BorderIconPrimary)};\n border-radius: 4px;\n animation: ${indeterminateScan} 2.5s ease-in-out infinite;\n`;\n\nconst SuffixRow = styled.div`\n display: flex;\n gap: ${Spacing[1]};\n align-items: center;\n flex-shrink: 0;\n`;\n\nconst PercentText = styled.span`\n ${paragraphMixins.md}\n color: ${({ theme }) => semanticColor(theme, 'FgPrimary', Color.TextPrimary)};\n white-space: nowrap;\n`;\n\nconst IconWrapper = styled.span<{ $status: 'exception' | 'success' }>`\n display: flex;\n flex-shrink: 0;\n line-height: 0;\n color: ${({ theme, $status }) => statusIconColor(theme, $status)};\n`;\n\nexport interface ProgressBarProps extends ComponentPropsWithoutRef<'div'> {\n /** Completion percentage, 0–100 */\n percent?: number;\n /** Size of the bar track */\n size?: ProgressBarSize;\n /** Status — affects fill color */\n status?: ProgressBarStatus;\n /**\n * `'determinate'` shows a filled bar for a known percentage.\n * `'indeterminate'` shows a scanning animation for unknown progress.\n * @defaultValue 'determinate'\n */\n type?: ProgressBarType;\n /** Label text */\n label?: string;\n /**\n * Show a right-hand info slot: percentage while in progress, status icon when\n * success or exception. The two are mutually exclusive — icon replaces percentage\n * once the bar reaches a terminal state.\n * Defaults to `true` when `successPercent` is set.\n */\n showInfo?: boolean;\n /** Custom fill color (design-system token) — overrides status color */\n fillColor?: Color;\n /** Custom track/rail background color (design-system token) */\n railColor?: Color;\n /**\n * Format function for the displayed percentage value.\n * @defaultValue (percent) => `${percent}%`\n */\n format?: (percent: number) => string;\n /**\n * When set, renders a green success segment from 0 to `successPercent`%,\n * with the main fill continuing from `successPercent`% to `percent`%.\n * Clamped to [0, percent]. Also enables `showInfo` by default.\n */\n successPercent?: number;\n /**\n * Tooltip content shown when hovering the bar track.\n * Use to surface a segment breakdown, e.g. \"3 done / 3 in progress / 4 to do\".\n */\n tooltip?: string;\n}\n\n/**\n * ProgressBar shows the completion status of an operation as a filled bar.\n *\n * @example\n * ```tsx\n * <ProgressBar\n * percent={60}\n * size=\"md\"\n * label=\"Uploading\"\n * showInfo\n * />\n * ```\n */\nexport const ProgressBar = ({\n percent = 0,\n size = 'sm',\n status = 'default',\n type = 'determinate',\n label,\n showInfo,\n fillColor,\n railColor,\n format,\n successPercent,\n tooltip,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n ...props\n}: ProgressBarProps) => {\n const labelId = useId();\n const clampedPercent = Math.min(100, Math.max(0, percent));\n const clampedSuccessPercent =\n successPercent != null ? Math.min(clampedPercent, Math.max(0, successPercent)) : 0;\n const inProgressPercent = clampedPercent - clampedSuccessPercent;\n const hasSuccessSegment = clampedSuccessPercent > 0;\n const hasInProgressSegment = inProgressPercent > 0;\n\n // Automatically derive success status when fully complete (unless caller set exception)\n const effectiveStatus: ProgressBarStatus =\n clampedPercent >= 100 && status !== 'exception' ? 'success' : status;\n\n // showInfo defaults to true when successPercent is used\n const effectiveShowInfo = showInfo ?? successPercent != null;\n\n const isTerminal = effectiveStatus === 'exception' || effectiveStatus === 'success';\n const formattedPercent = format ? format(clampedPercent) : `${clampedPercent}%`;\n const isIndeterminate = type === 'indeterminate';\n\n const labelledBy = label ? [labelId, ariaLabelledBy].filter(Boolean).join(' ') : ariaLabelledBy;\n const accessibleLabel = labelledBy ? undefined : (ariaLabel ?? 'Progress');\n\n const track = (\n <Track\n $size={size}\n $railColor={railColor}\n role='progressbar'\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={isIndeterminate ? undefined : clampedPercent}\n aria-valuetext={isIndeterminate ? undefined : formattedPercent}\n aria-labelledby={labelledBy || undefined}\n aria-label={accessibleLabel}\n >\n {isIndeterminate ? (\n <IndeterminateFill />\n ) : (\n <>\n {hasSuccessSegment && (\n <SuccessFill\n $percent={clampedSuccessPercent}\n $hasInProgressAfter={hasInProgressSegment}\n />\n )}\n {hasInProgressSegment && (\n <Fill\n $percent={inProgressPercent}\n $left={clampedSuccessPercent}\n $status={effectiveStatus}\n $fillColor={fillColor}\n $hasSuccessBefore={hasSuccessSegment}\n />\n )}\n </>\n )}\n </Track>\n );\n\n return (\n <Container {...props}>\n {label && <LabelText id={labelId}>{label}</LabelText>}\n <BarRow>\n {tooltip ? (\n <Tooltip trigger={track} side='top' contentAlignment='center'>\n {tooltip}\n </Tooltip>\n ) : (\n track\n )}\n {effectiveShowInfo && (\n <SuffixRow>\n {isTerminal ? (\n <IconWrapper $status={effectiveStatus}>\n {effectiveStatus === 'exception' ? (\n <CircleWarningFillIcon size={16} />\n ) : (\n <CircleCheckFillIcon size={16} />\n )}\n </IconWrapper>\n ) : (\n <PercentText>{formattedPercent}</PercentText>\n )}\n </SuffixRow>\n )}\n </BarRow>\n </Container>\n );\n};\n\nexport default ProgressBar;\n","import ProgressBar from './ProgressBar';\n\nexport { ProgressBar };\nexport type {\n ProgressBarProps,\n ProgressBarSize,\n ProgressBarStatus,\n ProgressBarType,\n} from './ProgressBar';\n\nexport default ProgressBar;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { a as styled, r as css } from "../../styledComponentsInterop-
|
|
1
|
+
import { a as styled, o as useTheme, r as css } from "../../styledComponentsInterop-NxwFjeA4.mjs";
|
|
2
|
+
import { semanticColor, semanticTokens } from "../../lib/semanticColor.mjs";
|
|
2
3
|
import { paragraphMixins } from "../../mixins/text.mjs";
|
|
4
|
+
import { withAlpha } from "../../lib/color.mjs";
|
|
3
5
|
import { focusOutline } from "../../mixins/focus.mjs";
|
|
4
6
|
import { BorderRadius, Color, Spacing } from "@persona/design-tokens";
|
|
5
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -22,18 +24,18 @@ function resolveIcon(status, isCurrent) {
|
|
|
22
24
|
if (isCurrent) return CircleFillIcon;
|
|
23
25
|
return CircleNullIcon;
|
|
24
26
|
}
|
|
25
|
-
function resolveIconColor(status, isActive, isDisabled) {
|
|
26
|
-
if (isDisabled) return Color.BorderIconDisabled;
|
|
27
|
-
if (status === "completed") return Color.BorderIconSuccess;
|
|
28
|
-
if (status === "warning") return Color.BorderIconWarning;
|
|
29
|
-
if (status === "error") return Color.BorderIconDanger;
|
|
30
|
-
return isActive ? Color.BorderIconActive : Color.BorderIconSecondary;
|
|
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);
|
|
31
33
|
}
|
|
32
|
-
function resolveTextColor(status, isActive, isDisabled) {
|
|
33
|
-
if (isDisabled) return Color.TextDisabled;
|
|
34
|
-
if (isActive) return Color.TextActive;
|
|
35
|
-
if (status === "uncompleted") return Color.TextSecondary;
|
|
36
|
-
return Color.TextPrimary;
|
|
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);
|
|
37
39
|
}
|
|
38
40
|
const StepList = styled.ol`
|
|
39
41
|
display: flex;
|
|
@@ -67,12 +69,15 @@ const StepContent = styled.button`
|
|
|
67
69
|
outline: none;
|
|
68
70
|
cursor: ${({ $isClickable, $interactive }) => $interactive && $isClickable ? "pointer" : "default"};
|
|
69
71
|
|
|
70
|
-
${({ $isActive, $isClickable, $interactive }) => {
|
|
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
|
+
`;
|
|
72
77
|
if ($interactive && $isClickable) return css`
|
|
73
|
-
background-color: ${Color.BackgroundInteractiveDefault};
|
|
78
|
+
background-color: ${tokens ? "transparent" : Color.BackgroundInteractiveDefault};
|
|
74
79
|
&:hover {
|
|
75
|
-
background-color: ${Color.BackgroundInteractiveHover};
|
|
80
|
+
background-color: ${semanticColor(theme, "SurfaceSecondary", Color.BackgroundInteractiveHover)};
|
|
76
81
|
}
|
|
77
82
|
`;
|
|
78
83
|
return css`
|
|
@@ -104,8 +109,9 @@ const Step = ({ step, isActive, isCurrent, layout, onStepClick }) => {
|
|
|
104
109
|
const interactive = Boolean(onStepClick);
|
|
105
110
|
const isClickable = resolveClickable(status, isActive, disabled, isCurrent);
|
|
106
111
|
const isInteractionDisabled = disabled || !isActive && !isCurrent && status === "uncompleted";
|
|
107
|
-
const
|
|
108
|
-
const
|
|
112
|
+
const theme = useTheme();
|
|
113
|
+
const iconColor = resolveIconColor(theme, status, isActive, disabled);
|
|
114
|
+
const textColor = resolveTextColor(theme, status, isActive, disabled);
|
|
109
115
|
const Icon = resolveIcon(status, isCurrent);
|
|
110
116
|
return /* @__PURE__ */ jsx(StepItem, {
|
|
111
117
|
$layout: layout,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../components/ProgressIndicator/ProgressIndicator.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef } from 'react';\nimport styled, { css } 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';\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(status: StepStatus, isActive: boolean, isDisabled: boolean): Color {\n if (isDisabled) {\n return Color.BorderIconDisabled;\n }\n if (status === 'completed') {\n return Color.BorderIconSuccess;\n }\n if (status === 'warning') {\n return Color.BorderIconWarning;\n }\n if (status === 'error') {\n return Color.BorderIconDanger;\n }\n return isActive ? Color.BorderIconActive : Color.BorderIconSecondary;\n}\n\nfunction resolveTextColor(status: StepStatus, isActive: boolean, isDisabled: boolean): Color {\n if (isDisabled) {\n return Color.TextDisabled;\n }\n if (isActive) {\n return Color.TextActive;\n }\n if (status === 'uncompleted') {\n return Color.TextSecondary;\n }\n return 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 ${({ $isActive, $isClickable, $interactive }) => {\n if ($isActive) {\n return css`background-color: ${Color.BackgroundInteractiveActive};`;\n }\n if ($interactive && $isClickable) {\n return css`\n background-color: ${Color.BackgroundInteractiveDefault};\n &:hover {\n background-color: ${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: Color }>`\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: Color }>`\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 iconColor = resolveIconColor(status, isActive, disabled);\n const textColor = resolveTextColor(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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"}
|
|
1
|
+
{"version":3,"file":"index.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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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as Radio } from "../../Radio-
|
|
1
|
+
import { t as Radio } from "../../Radio-CkugnL91.mjs";
|
|
2
2
|
export { Radio, Radio as default };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as RadioGroupProps, t as RadioGroup } from "../../RadioGroup-
|
|
1
|
+
import { n as RadioGroupProps, t as RadioGroup } from "../../RadioGroup-Dg_gydUp.mjs";
|
|
2
2
|
export { RadioGroup, RadioGroup as default, RadioGroupProps };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as RadioGroup } from "../../RadioGroup-
|
|
1
|
+
import { t as RadioGroup } from "../../RadioGroup-8dI8gljw.mjs";
|
|
2
2
|
export { RadioGroup, RadioGroup as default };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { a as styled } from "../../styledComponentsInterop-
|
|
2
|
-
import { i as Paragraph } from "../../Text-
|
|
3
|
-
import { n as Stack, t as HStack } from "../../Stack-
|
|
4
|
-
import { t as IconButton } from "../../IconButton-
|
|
5
|
-
import { t as LoadingShimmer } from "../../LoadingShimmer-
|
|
1
|
+
import { a as styled } from "../../styledComponentsInterop-NxwFjeA4.mjs";
|
|
2
|
+
import { i as Paragraph } from "../../Text-Dn_p7ZvT.mjs";
|
|
3
|
+
import { n as Stack, t as HStack } from "../../Stack-BqQndGI9.mjs";
|
|
4
|
+
import { t as IconButton } from "../../IconButton-CnJNIJVQ.mjs";
|
|
5
|
+
import { t as LoadingShimmer } from "../../LoadingShimmer-DeVCDCjT.mjs";
|
|
6
6
|
import { Color, Spacing } from "@persona/design-tokens";
|
|
7
7
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as SegmentedControlProps, n as SegmentedControlItem, t as SegmentedControl } from "../../SegmentedControl-
|
|
1
|
+
import { i as SegmentedControlProps, n as SegmentedControlItem, t as SegmentedControl } from "../../SegmentedControl-BBIHKcvo.mjs";
|
|
2
2
|
export { SegmentedControl, SegmentedControl as default, SegmentedControlItem, SegmentedControlProps };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as SegmentedControlItem, t as SegmentedControl } from "../../SegmentedControl-
|
|
1
|
+
import { n as SegmentedControlItem, t as SegmentedControl } from "../../SegmentedControl-DQE0hN57.mjs";
|
|
2
2
|
export { SegmentedControl, SegmentedControl as default, SegmentedControlItem };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as SelectProps, n as Select, r as SelectHeader, t as Option } from "../../Select-
|
|
1
|
+
import { i as SelectProps, n as Select, r as SelectHeader, t as Option } from "../../Select-wnr46ROZ.mjs";
|
|
2
2
|
export { Option, Select, Select as default, SelectHeader, SelectProps };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as Select, r as SelectHeader, t as Option } from "../../Select-
|
|
1
|
+
import { n as Select, r as SelectHeader, t as Option } from "../../Select-D9OVjzPR.mjs";
|
|
2
2
|
export { Option, Select, Select as default, SelectHeader };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { a as styled, r as css } from "../../styledComponentsInterop-
|
|
1
|
+
import { a as styled, r as css } from "../../styledComponentsInterop-NxwFjeA4.mjs";
|
|
2
|
+
import { semanticColor, semanticOnly } from "../../lib/semanticColor.mjs";
|
|
2
3
|
import { paragraphMixins } from "../../mixins/text.mjs";
|
|
3
|
-
import { i as FloatingTooltip } from "../../Tooltip-
|
|
4
|
+
import { i as FloatingTooltip } from "../../Tooltip-BsuYG0fw.mjs";
|
|
4
5
|
import { focusStyle } from "../../mixins/focus.mjs";
|
|
5
6
|
import { Color, Spacing } from "@persona/design-tokens";
|
|
6
7
|
import { useEffect, useMemo, useRef, useState } from "react";
|
|
@@ -8,9 +9,9 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
8
9
|
import { debounce } from "lodash-es";
|
|
9
10
|
import { mergeProps } from "@react-aria/utils";
|
|
10
11
|
import { useNumberFormatter } from "@react-aria/i18n";
|
|
11
|
-
import { autoUpdate, flip, offset, shift, useDismiss, useFloating, useInteractions, useRole } from "@floating-ui/react";
|
|
12
12
|
import { useSlider, useSliderThumb } from "@react-aria/slider";
|
|
13
13
|
import { useSliderState } from "@react-stately/slider";
|
|
14
|
+
import { autoUpdate, flip, offset, shift, useDismiss, useFloating, useInteractions, useRole } from "@floating-ui/react";
|
|
14
15
|
import { useFocusRing } from "@react-aria/focus";
|
|
15
16
|
import { VisuallyHidden } from "@react-aria/visually-hidden";
|
|
16
17
|
import { useController } from "react-hook-form";
|
|
@@ -20,14 +21,15 @@ const Tooltip = styled(FloatingTooltip)`
|
|
|
20
21
|
`;
|
|
21
22
|
const Thumb = styled("div")`
|
|
22
23
|
/* Note this will break if the element is not on a white background. Variable is provided to be able to override. */
|
|
23
|
-
--background-color-behind-thumb: ${Color.PrimaryWhite};
|
|
24
|
+
--background-color-behind-thumb: ${({ theme }) => semanticColor(theme, "SurfacePrimary", Color.PrimaryWhite)};
|
|
24
25
|
box-sizing: border-box;
|
|
25
26
|
width: 16px;
|
|
26
27
|
height: 16px;
|
|
27
|
-
background: ${(
|
|
28
|
+
background: ${({ theme, disabled }) => disabled ? semanticColor(theme, "InputSurfaceDisabled", Color.BackgroundInputDisabled) : semanticColor(theme, "InputSurfaceInverseStatic", Color.BackgroundInputDefault)};
|
|
28
29
|
cursor: ${(props) => props.disabled ? "inherit" : "pointer"};
|
|
29
30
|
border-radius: 50%;
|
|
30
|
-
border: 1px solid
|
|
31
|
+
border: 1px solid
|
|
32
|
+
${({ theme, disabled }) => disabled ? semanticColor(theme, "InputBorderDisabled", Color.BorderInputDisabled) : semanticColor(theme, "BorderDefault", Color.BorderInputDisabled)};
|
|
31
33
|
/* Enable clicks on thumb */
|
|
32
34
|
pointer-events: auto;
|
|
33
35
|
|
|
@@ -112,6 +114,7 @@ const SliderContainer = styled.div`
|
|
|
112
114
|
`;
|
|
113
115
|
const SliderLabel = styled.div`
|
|
114
116
|
${paragraphMixins.md};
|
|
117
|
+
${({ $disabled }) => semanticOnly((tokens) => `color: ${$disabled ? tokens.FgDisabled : tokens.FgPrimary};`)}
|
|
115
118
|
&:first-of-type {
|
|
116
119
|
padding-right: ${Spacing[2]};
|
|
117
120
|
}
|
|
@@ -131,11 +134,11 @@ const SliderTrack = styled.div`
|
|
|
131
134
|
/* Disable clicks on slide bar */
|
|
132
135
|
pointer-events: none;
|
|
133
136
|
|
|
134
|
-
${({ percents, track, disabled }) => {
|
|
135
|
-
const activeColor = disabled ? Color.BorderInputDisabled : Color.CoreBlue700;
|
|
136
|
-
const trackColor = Color.BorderDivider;
|
|
137
|
+
${({ theme, percents, track, disabled }) => {
|
|
138
|
+
const activeColor = disabled ? semanticColor(theme, "InputBorderDisabled", Color.BorderInputDisabled) : semanticColor(theme, "InputBorderAccent", Color.CoreBlue700);
|
|
139
|
+
const trackColor = semanticColor(theme, "BorderDivider", Color.BorderDivider);
|
|
137
140
|
if (track === false) return css`
|
|
138
|
-
background: ${
|
|
141
|
+
background: ${trackColor};
|
|
139
142
|
`;
|
|
140
143
|
if (percents.length === 2) return css`
|
|
141
144
|
background: linear-gradient(
|
|
@@ -194,7 +197,10 @@ const Slider = ({ minLabel, maxLabel, showLabels, track, width, hideTooltips, cl
|
|
|
194
197
|
id,
|
|
195
198
|
onBlur,
|
|
196
199
|
children: [
|
|
197
|
-
showLabels && /* @__PURE__ */ jsx(SliderLabel, {
|
|
200
|
+
showLabels && /* @__PURE__ */ jsx(SliderLabel, {
|
|
201
|
+
$disabled: disabled,
|
|
202
|
+
children: minLabel ?? min
|
|
203
|
+
}),
|
|
198
204
|
/* @__PURE__ */ jsx(SliderTrack, {
|
|
199
205
|
...trackProps,
|
|
200
206
|
track,
|
|
@@ -209,7 +215,10 @@ const Slider = ({ minLabel, maxLabel, showLabels, track, width, hideTooltips, cl
|
|
|
209
215
|
outputProps
|
|
210
216
|
}, `${trackProps.id}_thumb${i}`))
|
|
211
217
|
}),
|
|
212
|
-
showLabels && /* @__PURE__ */ jsx(SliderLabel, {
|
|
218
|
+
showLabels && /* @__PURE__ */ jsx(SliderLabel, {
|
|
219
|
+
$disabled: disabled,
|
|
220
|
+
children: maxLabel ?? max
|
|
221
|
+
})
|
|
213
222
|
]
|
|
214
223
|
});
|
|
215
224
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../components/Slider/SliderThumb.tsx","../../../components/Slider/Slider.tsx","../../../components/Slider/SliderRHF.tsx"],"sourcesContent":["import {\n autoUpdate,\n type ElementProps,\n flip,\n type FloatingContext,\n offset,\n shift,\n useDismiss,\n useFloating,\n useInteractions,\n useRole,\n} from '@floating-ui/react';\nimport { useFocusRing } from '@react-aria/focus';\nimport { useSliderThumb } from '@react-aria/slider';\nimport { mergeProps } from '@react-aria/utils';\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\nimport type { SliderState } from '@react-stately/slider';\nimport { debounce } from 'lodash-es';\nimport {\n type OutputHTMLAttributes,\n type RefObject,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport styled from 'styled-components';\n\nimport { Color } from '@persona/design-tokens';\nimport { FloatingTooltip } from 'design-system/components/Tooltip';\nimport { focusStyle } from 'design-system/mixins/focus';\nimport { paragraphMixins } from 'design-system/mixins/text';\n\nconst Tooltip = styled(FloatingTooltip)`\n ${paragraphMixins.sm};\n`;\n\nconst Thumb = styled('div')<{ disabled?: boolean }>`\n /* Note this will break if the element is not on a white background. Variable is provided to be able to override. */\n --background-color-behind-thumb: ${Color.PrimaryWhite};\n box-sizing: border-box;\n width: 16px;\n height: 16px;\n background: ${(props) =>\n props.disabled ? Color.BackgroundInputDisabled : Color.BackgroundInputDefault};\n cursor: ${(props) => (props.disabled ? 'inherit' : 'pointer')};\n border-radius: 50%;\n border: 1px solid ${Color.BorderInputDisabled};\n /* Enable clicks on thumb */\n pointer-events: auto;\n\n &[data-focused] {\n ${focusStyle}\n /* Extra pixel of size to overlap into the outline, fixing a small visual bug */\n box-shadow: 0 0 0 2px var(--background-color-behind-thumb);\n }\n`;\n\ninterface SliderThumbProps {\n state: SliderState;\n trackRef: RefObject<HTMLElement>;\n index: number;\n outputProps: OutputHTMLAttributes<HTMLOutputElement>;\n hideTooltips?: boolean;\n}\n\ninterface UsePressedOptions {\n delay?: number;\n}\n\nconst usePressed = (context: FloatingContext, options?: UsePressedOptions): ElementProps => {\n const closeHandler = useMemo(\n () => debounce(() => context.onOpenChange(false), options?.delay ?? 500),\n [],\n );\n return {\n reference: {\n onPointerDown: () => {\n context.onOpenChange(true);\n },\n onPointerUp: () => {\n closeHandler();\n },\n },\n };\n};\n\nconst SliderThumb = ({ state, trackRef, index, outputProps, hideTooltips }: SliderThumbProps) => {\n const inputRef = useRef(null);\n const { thumbProps, inputProps } = useSliderThumb(\n {\n index,\n trackRef,\n inputRef,\n },\n state,\n );\n\n const { focusProps, isFocused } = useFocusRing();\n\n const [open, setOpen] = useState(false);\n\n const { x, y, refs, strategy, context } = useFloating({\n placement: 'top',\n open,\n onOpenChange: setOpen,\n whileElementsMounted: autoUpdate,\n middleware: [offset(4), flip(), shift({ padding: 4 })],\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useRole(context, { role: 'tooltip' }),\n useDismiss(context),\n usePressed(context),\n ]);\n\n useEffect(() => {\n setOpen(isFocused);\n }, [isFocused]);\n\n return (\n <div\n style={{\n position: 'absolute',\n top: '50%',\n transform: 'translateX(-50%) translateY(-50%)',\n left: `${state.getThumbPercent(index) * 100}%`,\n }}\n >\n {open && !hideTooltips && (\n <Tooltip\n {...mergeProps(\n getFloatingProps({\n ref: refs.setFloating,\n style: {\n position: strategy,\n top: y ?? '',\n left: x ?? '',\n },\n }),\n outputProps,\n )}\n >\n {state.getThumbValueLabel(index)}\n </Tooltip>\n )}\n <Thumb\n {...mergeProps(\n thumbProps,\n getReferenceProps({\n ref: refs.setReference,\n }),\n isFocused ? { 'data-focused': true } : undefined,\n )}\n >\n <VisuallyHidden>\n <input ref={inputRef} {...mergeProps(inputProps, focusProps)} />\n </VisuallyHidden>\n </Thumb>\n </div>\n );\n};\n\nexport default SliderThumb;\n","import type { NumberFormatOptions } from '@internationalized/number';\nimport { useNumberFormatter } from '@react-aria/i18n';\nimport { useSlider } from '@react-aria/slider';\nimport { useSliderState } from '@react-stately/slider';\nimport type { SliderProps as SliderPropsType } from '@react-types/slider';\nimport { type FocusEventHandler, type ReactNode, useRef } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\nimport SliderThumb from 'design-system/components/Slider/SliderThumb';\nimport { paragraphMixins } from 'design-system/mixins/text';\n\nconst SliderContainer = styled.div`\n display: flex;\n align-items: center;\n touch-action: none;\n position: relative;\n`;\n\nconst SliderLabel = styled.div`\n ${paragraphMixins.md};\n &:first-of-type {\n padding-right: ${Spacing[2]};\n }\n\n &:last-of-type {\n padding-left: ${Spacing[2]};\n }\n`;\n\ntype SliderTrackProps = {\n track?: boolean;\n percents: number[];\n disabled?: boolean;\n};\nconst SliderTrack = styled.div<SliderTrackProps>`\n position: relative;\n width: 100%;\n height: 4px;\n border-radius: 4px;\n outline: none;\n transition: background 0.2s;\n\n /* Disable clicks on slide bar */\n pointer-events: none;\n\n ${({ percents, track, disabled }) => {\n const activeColor = disabled ? Color.BorderInputDisabled : Color.CoreBlue700;\n const trackColor = Color.BorderDivider;\n\n if (track === false) {\n return css`\n background: ${Color.BorderDivider};\n `;\n }\n\n if (percents.length === 2) {\n return css`\n background: linear-gradient(\n to right,\n ${trackColor} 0%,\n ${trackColor} ${percents[0] * 100}%,\n ${activeColor} ${percents[0] * 100}%,\n ${activeColor} ${percents[1] * 100}%,\n ${trackColor} ${percents[1] * 100}%,\n ${trackColor} 100%\n );\n `;\n }\n\n const leftColor = activeColor;\n const rightColor = trackColor;\n\n return css`\n background: linear-gradient(\n to right,\n ${leftColor} 0%,\n ${leftColor} ${percents[0] * 100}%,\n ${rightColor} ${percents[0] * 100}%,\n ${rightColor} 100%\n );\n `;\n }}\n`;\n\nexport interface SliderProps<T = number | number[]> {\n min?: number;\n minLabel?: ReactNode;\n max?: number;\n maxLabel?: ReactNode;\n onChange?: (value: T) => void;\n value?: T;\n defaultValue?: T;\n step?: number;\n\n /**\n * Show labels on ends of track\n */\n showLabels?: boolean;\n\n /**\n * Track style\n */\n track?: boolean;\n\n /**\n * Hide tooltips on slider thumbs\n */\n hideTooltips?: boolean;\n width?: number | 'auto';\n disabled?: boolean;\n formatOptions?: NumberFormatOptions;\n\n id?: string;\n className?: string;\n name?: string;\n onBlur?: FocusEventHandler<HTMLDivElement>;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n}\n\nexport const Slider = ({\n minLabel,\n maxLabel,\n showLabels,\n track,\n width,\n hideTooltips,\n className,\n id,\n onBlur,\n ...elemProps\n}: SliderProps) => {\n const { min, max, value, defaultValue, disabled } = elemProps;\n const trackRef = useRef(null);\n const numberFormatter = useNumberFormatter(elemProps.formatOptions);\n\n const ariaElemProps: SliderPropsType = {\n ...elemProps,\n isDisabled: disabled,\n minValue: min,\n maxValue: max,\n value: typeof value === 'number' ? [value] : value,\n defaultValue: typeof defaultValue === 'number' ? [defaultValue] : defaultValue,\n onChange:\n typeof elemProps.onChange !== 'undefined'\n ? (v) => {\n if (Array.isArray(v) && v.length === 1) {\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n return elemProps.onChange(v[0]);\n }\n\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n return elemProps.onChange(v);\n }\n : undefined,\n };\n\n const state = useSliderState({ ...ariaElemProps, numberFormatter });\n const { groupProps, trackProps, outputProps } = useSlider(ariaElemProps, state, trackRef);\n\n return (\n <SliderContainer\n {...groupProps}\n style={{\n position: 'relative',\n alignItems: 'center',\n width: width ?? 300,\n touchAction: 'none',\n }}\n className={className}\n id={id}\n onBlur={onBlur}\n >\n {showLabels && <SliderLabel>{minLabel ?? min}</SliderLabel>}\n <SliderTrack\n {...trackProps}\n track={track}\n ref={trackRef}\n percents={state.values.map((_v, i) => state.getThumbPercent(i))}\n disabled={disabled}\n >\n {state.values.map((_v, i) => (\n <SliderThumb\n key={`${trackProps.id}_thumb${i}`}\n index={i}\n state={state}\n trackRef={trackRef}\n hideTooltips={hideTooltips}\n outputProps={outputProps}\n />\n ))}\n </SliderTrack>\n {showLabels && <SliderLabel>{maxLabel ?? max}</SliderLabel>}\n </SliderContainer>\n );\n};\n\nexport default Slider;\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { type Control, type FieldValues, useController } from 'react-hook-form';\n\nimport Slider from './Slider';\n\ninterface SliderRHFProps extends ComponentPropsWithoutRef<typeof Slider> {\n control: Control<FieldValues, object>;\n name: string;\n}\n\nconst SliderRHF = ({ control, name: nameProp, defaultValue, ...elemProps }: SliderRHFProps) => {\n const {\n field: { onChange, onBlur, name, value },\n } = useController({\n name: nameProp,\n control,\n rules: { required: true },\n defaultValue,\n });\n\n return <Slider {...elemProps} onBlur={onBlur} onChange={onChange} value={value} name={name} />;\n};\n\nexport default SliderRHF;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../components/Slider/SliderThumb.tsx","../../../components/Slider/Slider.tsx","../../../components/Slider/SliderRHF.tsx"],"sourcesContent":["import {\n autoUpdate,\n type ElementProps,\n flip,\n type FloatingContext,\n offset,\n shift,\n useDismiss,\n useFloating,\n useInteractions,\n useRole,\n} from '@floating-ui/react';\nimport { useFocusRing } from '@react-aria/focus';\nimport { useSliderThumb } from '@react-aria/slider';\nimport { mergeProps } from '@react-aria/utils';\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\nimport type { SliderState } from '@react-stately/slider';\nimport { debounce } from 'lodash-es';\nimport {\n type OutputHTMLAttributes,\n type RefObject,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport styled from 'styled-components';\n\nimport { Color } from '@persona/design-tokens';\nimport { FloatingTooltip } from 'design-system/components/Tooltip';\nimport { semanticColor } from 'design-system/lib/semanticColor';\nimport { focusStyle } from 'design-system/mixins/focus';\nimport { paragraphMixins } from 'design-system/mixins/text';\n\nconst Tooltip = styled(FloatingTooltip)`\n ${paragraphMixins.sm};\n`;\n\nconst Thumb = styled('div')<{ disabled?: boolean }>`\n /* Note this will break if the element is not on a white background. Variable is provided to be able to override. */\n --background-color-behind-thumb: ${({ theme }) => semanticColor(theme, 'SurfacePrimary', Color.PrimaryWhite)};\n box-sizing: border-box;\n width: 16px;\n height: 16px;\n background: ${({ theme, disabled }) =>\n disabled\n ? semanticColor(theme, 'InputSurfaceDisabled', Color.BackgroundInputDisabled)\n : semanticColor(theme, 'InputSurfaceInverseStatic', Color.BackgroundInputDefault)};\n cursor: ${(props) => (props.disabled ? 'inherit' : 'pointer')};\n border-radius: 50%;\n border: 1px solid\n ${({ theme, disabled }) =>\n disabled\n ? semanticColor(theme, 'InputBorderDisabled', Color.BorderInputDisabled)\n : semanticColor(theme, 'BorderDefault', Color.BorderInputDisabled)};\n /* Enable clicks on thumb */\n pointer-events: auto;\n\n &[data-focused] {\n ${focusStyle}\n /* Extra pixel of size to overlap into the outline, fixing a small visual bug */\n box-shadow: 0 0 0 2px var(--background-color-behind-thumb);\n }\n`;\n\ninterface SliderThumbProps {\n state: SliderState;\n trackRef: RefObject<HTMLElement>;\n index: number;\n outputProps: OutputHTMLAttributes<HTMLOutputElement>;\n hideTooltips?: boolean;\n}\n\ninterface UsePressedOptions {\n delay?: number;\n}\n\nconst usePressed = (context: FloatingContext, options?: UsePressedOptions): ElementProps => {\n const closeHandler = useMemo(\n () => debounce(() => context.onOpenChange(false), options?.delay ?? 500),\n [],\n );\n return {\n reference: {\n onPointerDown: () => {\n context.onOpenChange(true);\n },\n onPointerUp: () => {\n closeHandler();\n },\n },\n };\n};\n\nconst SliderThumb = ({ state, trackRef, index, outputProps, hideTooltips }: SliderThumbProps) => {\n const inputRef = useRef(null);\n const { thumbProps, inputProps } = useSliderThumb(\n {\n index,\n trackRef,\n inputRef,\n },\n state,\n );\n\n const { focusProps, isFocused } = useFocusRing();\n\n const [open, setOpen] = useState(false);\n\n const { x, y, refs, strategy, context } = useFloating({\n placement: 'top',\n open,\n onOpenChange: setOpen,\n whileElementsMounted: autoUpdate,\n middleware: [offset(4), flip(), shift({ padding: 4 })],\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useRole(context, { role: 'tooltip' }),\n useDismiss(context),\n usePressed(context),\n ]);\n\n useEffect(() => {\n setOpen(isFocused);\n }, [isFocused]);\n\n return (\n <div\n style={{\n position: 'absolute',\n top: '50%',\n transform: 'translateX(-50%) translateY(-50%)',\n left: `${state.getThumbPercent(index) * 100}%`,\n }}\n >\n {open && !hideTooltips && (\n <Tooltip\n {...mergeProps(\n getFloatingProps({\n ref: refs.setFloating,\n style: {\n position: strategy,\n top: y ?? '',\n left: x ?? '',\n },\n }),\n outputProps,\n )}\n >\n {state.getThumbValueLabel(index)}\n </Tooltip>\n )}\n <Thumb\n {...mergeProps(\n thumbProps,\n getReferenceProps({\n ref: refs.setReference,\n }),\n isFocused ? { 'data-focused': true } : undefined,\n )}\n >\n <VisuallyHidden>\n <input ref={inputRef} {...mergeProps(inputProps, focusProps)} />\n </VisuallyHidden>\n </Thumb>\n </div>\n );\n};\n\nexport default SliderThumb;\n","import type { NumberFormatOptions } from '@internationalized/number';\nimport { useNumberFormatter } from '@react-aria/i18n';\nimport { useSlider } from '@react-aria/slider';\nimport { useSliderState } from '@react-stately/slider';\nimport type { SliderProps as SliderPropsType } from '@react-types/slider';\nimport { type FocusEventHandler, type ReactNode, useRef } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\nimport SliderThumb from 'design-system/components/Slider/SliderThumb';\nimport { semanticColor, semanticOnly } from 'design-system/lib/semanticColor';\nimport { paragraphMixins } from 'design-system/mixins/text';\n\nconst SliderContainer = styled.div`\n display: flex;\n align-items: center;\n touch-action: none;\n position: relative;\n`;\n\nconst SliderLabel = styled.div<{ $disabled?: boolean }>`\n ${paragraphMixins.md};\n ${({ $disabled }) =>\n semanticOnly((tokens) => `color: ${$disabled ? tokens.FgDisabled : tokens.FgPrimary};`)}\n &:first-of-type {\n padding-right: ${Spacing[2]};\n }\n\n &:last-of-type {\n padding-left: ${Spacing[2]};\n }\n`;\n\ntype SliderTrackProps = {\n track?: boolean;\n percents: number[];\n disabled?: boolean;\n};\nconst SliderTrack = styled.div<SliderTrackProps>`\n position: relative;\n width: 100%;\n height: 4px;\n border-radius: 4px;\n outline: none;\n transition: background 0.2s;\n\n /* Disable clicks on slide bar */\n pointer-events: none;\n\n ${({ theme, percents, track, disabled }) => {\n const activeColor = disabled\n ? semanticColor(theme, 'InputBorderDisabled', Color.BorderInputDisabled)\n : semanticColor(theme, 'InputBorderAccent', Color.CoreBlue700);\n const trackColor = semanticColor(theme, 'BorderDivider', Color.BorderDivider);\n\n if (track === false) {\n return css`\n background: ${trackColor};\n `;\n }\n\n if (percents.length === 2) {\n return css`\n background: linear-gradient(\n to right,\n ${trackColor} 0%,\n ${trackColor} ${percents[0] * 100}%,\n ${activeColor} ${percents[0] * 100}%,\n ${activeColor} ${percents[1] * 100}%,\n ${trackColor} ${percents[1] * 100}%,\n ${trackColor} 100%\n );\n `;\n }\n\n const leftColor = activeColor;\n const rightColor = trackColor;\n\n return css`\n background: linear-gradient(\n to right,\n ${leftColor} 0%,\n ${leftColor} ${percents[0] * 100}%,\n ${rightColor} ${percents[0] * 100}%,\n ${rightColor} 100%\n );\n `;\n }}\n`;\n\nexport interface SliderProps<T = number | number[]> {\n min?: number;\n minLabel?: ReactNode;\n max?: number;\n maxLabel?: ReactNode;\n onChange?: (value: T) => void;\n value?: T;\n defaultValue?: T;\n step?: number;\n\n /**\n * Show labels on ends of track\n */\n showLabels?: boolean;\n\n /**\n * Track style\n */\n track?: boolean;\n\n /**\n * Hide tooltips on slider thumbs\n */\n hideTooltips?: boolean;\n width?: number | 'auto';\n disabled?: boolean;\n formatOptions?: NumberFormatOptions;\n\n id?: string;\n className?: string;\n name?: string;\n onBlur?: FocusEventHandler<HTMLDivElement>;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n}\n\nexport const Slider = ({\n minLabel,\n maxLabel,\n showLabels,\n track,\n width,\n hideTooltips,\n className,\n id,\n onBlur,\n ...elemProps\n}: SliderProps) => {\n const { min, max, value, defaultValue, disabled } = elemProps;\n const trackRef = useRef(null);\n const numberFormatter = useNumberFormatter(elemProps.formatOptions);\n\n const ariaElemProps: SliderPropsType = {\n ...elemProps,\n isDisabled: disabled,\n minValue: min,\n maxValue: max,\n value: typeof value === 'number' ? [value] : value,\n defaultValue: typeof defaultValue === 'number' ? [defaultValue] : defaultValue,\n onChange:\n typeof elemProps.onChange !== 'undefined'\n ? (v) => {\n if (Array.isArray(v) && v.length === 1) {\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n return elemProps.onChange(v[0]);\n }\n\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n return elemProps.onChange(v);\n }\n : undefined,\n };\n\n const state = useSliderState({ ...ariaElemProps, numberFormatter });\n const { groupProps, trackProps, outputProps } = useSlider(ariaElemProps, state, trackRef);\n\n return (\n <SliderContainer\n {...groupProps}\n style={{\n position: 'relative',\n alignItems: 'center',\n width: width ?? 300,\n touchAction: 'none',\n }}\n className={className}\n id={id}\n onBlur={onBlur}\n >\n {showLabels && <SliderLabel $disabled={disabled}>{minLabel ?? min}</SliderLabel>}\n <SliderTrack\n {...trackProps}\n track={track}\n ref={trackRef}\n percents={state.values.map((_v, i) => state.getThumbPercent(i))}\n disabled={disabled}\n >\n {state.values.map((_v, i) => (\n <SliderThumb\n key={`${trackProps.id}_thumb${i}`}\n index={i}\n state={state}\n trackRef={trackRef}\n hideTooltips={hideTooltips}\n outputProps={outputProps}\n />\n ))}\n </SliderTrack>\n {showLabels && <SliderLabel $disabled={disabled}>{maxLabel ?? max}</SliderLabel>}\n </SliderContainer>\n );\n};\n\nexport default Slider;\n","import type { ComponentPropsWithoutRef } from 'react';\nimport { type Control, type FieldValues, useController } from 'react-hook-form';\n\nimport Slider from './Slider';\n\ninterface SliderRHFProps extends ComponentPropsWithoutRef<typeof Slider> {\n control: Control<FieldValues, object>;\n name: string;\n}\n\nconst SliderRHF = ({ control, name: nameProp, defaultValue, ...elemProps }: SliderRHFProps) => {\n const {\n field: { onChange, onBlur, name, value },\n } = useController({\n name: nameProp,\n control,\n rules: { required: true },\n defaultValue,\n });\n\n return <Slider {...elemProps} onBlur={onBlur} onChange={onChange} value={value} name={name} />;\n};\n\nexport default SliderRHF;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as _$styled_components0 from "styled-components";
|
|
2
|
+
|
|
3
|
+
//#region components/SmartTextInput/PillType.d.ts
|
|
4
|
+
declare const PillType: _$styled_components0.StyledComponent<"div", any, {
|
|
5
|
+
purple?: boolean;
|
|
6
|
+
error?: boolean;
|
|
7
|
+
}, never>;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { PillType as default };
|
|
10
|
+
//# sourceMappingURL=PillType.d.mts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { a as styled, r as css } from "../../styledComponentsInterop-NxwFjeA4.mjs";
|
|
2
|
+
import { BorderRadius, Color, Spacing, Typography } from "@persona/design-tokens";
|
|
3
|
+
//#region components/SmartTextInput/PillType.tsx
|
|
4
|
+
const PillType = styled.div`
|
|
5
|
+
padding: 0 ${Spacing[1]};
|
|
6
|
+
height: 16px;
|
|
7
|
+
${Typography.TextExtraSmall};
|
|
8
|
+
font-family: ${({ theme }) => theme.text.fontFamily.mono};
|
|
9
|
+
background: ${Color.CoreSlate100};
|
|
10
|
+
color: ${({ theme }) => theme.color.text.primary};
|
|
11
|
+
border: 1px solid ${Color.CoreSlate300};
|
|
12
|
+
border-radius: ${BorderRadius.Md};
|
|
13
|
+
white-space: nowrap;
|
|
14
|
+
|
|
15
|
+
${({ purple }) => {
|
|
16
|
+
if (purple) return css`
|
|
17
|
+
background: ${Color.CorePurple100};
|
|
18
|
+
border-color: ${Color.CorePurple300};
|
|
19
|
+
`;
|
|
20
|
+
}}
|
|
21
|
+
|
|
22
|
+
${({ error }) => {
|
|
23
|
+
if (error) return css`
|
|
24
|
+
color: ${Color.TextDanger};
|
|
25
|
+
`;
|
|
26
|
+
}}
|
|
27
|
+
`;
|
|
28
|
+
//#endregion
|
|
29
|
+
export { PillType as default };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=PillType.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PillType.mjs","names":[],"sources":["../../../components/SmartTextInput/PillType.tsx"],"sourcesContent":["import styled, { css } from 'styled-components';\n\nimport { BorderRadius, Color, Spacing, Typography } from '@persona/design-tokens';\n\nconst PillType = styled.div<{ purple?: boolean; error?: boolean }>`\n padding: 0 ${Spacing[1]};\n height: 16px;\n ${Typography.TextExtraSmall};\n font-family: ${({ theme }) => theme.text.fontFamily.mono};\n background: ${Color.CoreSlate100};\n color: ${({ theme }) => theme.color.text.primary};\n border: 1px solid ${Color.CoreSlate300};\n border-radius: ${BorderRadius.Md};\n white-space: nowrap;\n\n ${({ purple }) => {\n if (purple) {\n return css`\n background: ${Color.CorePurple100};\n border-color: ${Color.CorePurple300};\n `;\n }\n }}\n\n ${({ error }) => {\n if (error) {\n return css`\n color: ${Color.TextDanger};\n `;\n }\n }}\n`;\n\nexport default PillType;\n"],"mappings":";;;AAIA,MAAM,WAAW,OAAO,GAA0C;eACnD,QAAQ,GAAG;;IAEtB,WAAW,eAAe;kBACZ,EAAE,YAAY,MAAM,KAAK,WAAW,KAAK;gBAC3C,MAAM,aAAa;YACvB,EAAE,YAAY,MAAM,MAAM,KAAK,QAAQ;sBAC7B,MAAM,aAAa;mBACtB,aAAa,GAAG;;;KAG9B,EAAE,aAAa;AAChB,KAAI,OACF,QAAO,GAAG;sBACM,MAAM,cAAc;wBAClB,MAAM,cAAc;;EAGxC;;KAEC,EAAE,YAAY;AACf,KAAI,MACF,QAAO,GAAG;iBACC,MAAM,WAAW;;EAG9B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ASTChain } from './types';
|
|
2
|
+
|
|
3
|
+
export type ParseOptions = {
|
|
4
|
+
/**
|
|
5
|
+
* When true, Chain throws on invalid input instead of returning error nodes.
|
|
6
|
+
* Must be explicitly set to true for workflow/method-chain callers.
|
|
7
|
+
* Defaults to false (error-recovering) — SmartTextInput callers can omit this.
|
|
8
|
+
*/
|
|
9
|
+
strict?: boolean;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export function parse(input: string, options?: ParseOptions): ASTChain;
|
|
13
|
+
|
|
14
|
+
export class SyntaxError extends Error {
|
|
15
|
+
expected: string[];
|
|
16
|
+
found: string;
|
|
17
|
+
location: {
|
|
18
|
+
start: number;
|
|
19
|
+
end: number;
|
|
20
|
+
};
|
|
21
|
+
}
|