@persona/design-system 0.10.10 → 0.10.12
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 +48 -0
- package/dist/AdvancedFilterRuleRow.d.mts +5 -2
- package/dist/AdvancedFilterRulesPopover.d.mts +6 -2
- package/dist/ArrayValueControl.d.mts +1 -1
- package/dist/{Badge-BCdsVKuj.mjs → Badge-B2AJMf3d.mjs} +2 -2
- package/dist/{Badge-BCdsVKuj.mjs.map → Badge-B2AJMf3d.mjs.map} +1 -1
- package/dist/BooleanValueControl.d.mts +1 -1
- package/dist/{Breadcrumbs-CMf3Uvow.mjs → Breadcrumbs-DRs9eo1o.mjs} +5 -5
- package/dist/Breadcrumbs-DRs9eo1o.mjs.map +1 -0
- package/dist/{CardV2-CrV6eEQb.mjs → CardV2-DO-8COfu.mjs} +11 -8
- package/dist/CardV2-DO-8COfu.mjs.map +1 -0
- package/dist/ChartFrame.d.mts +61 -0
- package/dist/ChartLegend.d.mts +60 -0
- package/dist/ChartPopover.d.mts +155 -0
- package/dist/{Checkbox-Dr4LMKHV.mjs → Checkbox-BAh-wF_F.mjs} +5 -5
- package/dist/Checkbox-BAh-wF_F.mjs.map +1 -0
- package/dist/{CheckboxGroupField-Bpu2j6G2.d.mts → CheckboxGroupField-XSVAmESI.d.mts} +2 -2
- package/dist/CheckboxGroupField.d.mts +1 -1
- package/dist/ChoicesValueControl.d.mts +1 -1
- package/dist/{Combobox-Gb_j1dg6.mjs → Combobox-BNjYEAmv.mjs} +313 -138
- package/dist/Combobox-BNjYEAmv.mjs.map +1 -0
- package/dist/Combobox-DbcSss15.d.mts +12 -0
- package/dist/Combobox.d.mts +3 -3
- package/dist/{ComboboxBase-BPXqJHaQ.d.mts → ComboboxBase-CrFweFGi.d.mts} +61 -21
- package/dist/ComboboxBase.d.mts +2 -2
- package/dist/{ComboboxMultiSelect-BwkkSymj.d.mts → ComboboxMultiSelect-Cp5GBGQj.d.mts} +10 -6
- package/dist/ComboboxMultiSelect.d.mts +2 -2
- package/dist/{ComboboxSingleSelect-CdNNJNkp.d.mts → ComboboxSingleSelect-u7fK3Yvy.d.mts} +8 -6
- package/dist/ComboboxSingleSelect.d.mts +2 -2
- package/dist/{DataTable-BE9inUi-.d.mts → DataTable-C1mdfmQa.d.mts} +17 -7
- package/dist/{DataTable-CIZJ1vO8.mjs → DataTable-DdSY9mzT.mjs} +36 -23
- package/dist/DataTable-DdSY9mzT.mjs.map +1 -0
- package/dist/DataTable.d.mts +1 -1
- package/dist/{DatePicker-C9redLBr.mjs → DatePicker-DiilpYQg.mjs} +5 -5
- package/dist/{DatePicker-C9redLBr.mjs.map → DatePicker-DiilpYQg.mjs.map} +1 -1
- package/dist/DateRangeValueControl.d.mts +1 -1
- package/dist/DateValueControl.d.mts +1 -1
- package/dist/{DropdownButton-DpLG-cIj.mjs → DropdownButton-BxZ5hn0X.mjs} +3 -3
- package/dist/{DropdownButton-DpLG-cIj.mjs.map → DropdownButton-BxZ5hn0X.mjs.map} +1 -1
- package/dist/DropdownButton.d.mts +1 -1
- package/dist/{DropdownMenu-B6D4stkF.d.mts → DropdownMenu-CQR0U-zM.d.mts} +2 -2
- package/dist/{DropdownMenu-c8XK2Lr4.mjs → DropdownMenu-Ip75l4Th.mjs} +21 -2
- package/dist/DropdownMenu-Ip75l4Th.mjs.map +1 -0
- package/dist/DropdownMenu.d.mts +1 -1
- package/dist/{FieldRegistry-C2NVPhMO.d.mts → FieldRegistry-CJwGpUVK.d.mts} +2 -2
- package/dist/FieldRegistry.d.mts +1 -1
- package/dist/{FilterBar-BE_gBM0H.d.mts → FilterBar-CA4mDAXK.d.mts} +13 -5
- 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 +3 -2
- package/dist/{FloatingToolbar-DLRaE0o7.mjs → FloatingToolbar-BA8Fqmrz.mjs} +35 -38
- package/dist/FloatingToolbar-BA8Fqmrz.mjs.map +1 -0
- package/dist/{FormControl-BztNXLn6.mjs → FormControl-BoKGiWdQ.mjs} +2 -2
- package/dist/{FormControl-BztNXLn6.mjs.map → FormControl-BoKGiWdQ.mjs.map} +1 -1
- package/dist/{FormField-Cf1VMvoa.mjs → FormField-yYJFkJ6R.mjs} +13 -13
- package/dist/{FormField-Cf1VMvoa.mjs.map → FormField-yYJFkJ6R.mjs.map} +1 -1
- package/dist/{HoverCopyableField-XHC_n9tp.mjs → HoverCopyableField-X2XfKTTh.mjs} +10 -5
- package/dist/HoverCopyableField-X2XfKTTh.mjs.map +1 -0
- package/dist/{IconButton-DxHB2g80.mjs → IconButton-Bj1fry_K.mjs} +4 -3
- package/dist/IconButton-Bj1fry_K.mjs.map +1 -0
- package/dist/IndexTableLayout.d.mts +11 -3
- package/dist/InlineCombobox.d.mts +1 -1
- package/dist/InlineInput.d.mts +1 -1
- package/dist/{Input-RHXujO9u.mjs → Input-DcbzPaax.mjs} +2 -2
- package/dist/{Input-RHXujO9u.mjs.map → Input-DcbzPaax.mjs.map} +1 -1
- package/dist/IntegerValueControl.d.mts +3 -2
- package/dist/{Link-D_kCyLYX.mjs → Link-B29ZMN6m.mjs} +3 -3
- package/dist/Link-B29ZMN6m.mjs.map +1 -0
- package/dist/{ListBox-BZp6exb8.mjs → ListBox-4rTgr3IJ.mjs} +6 -6
- package/dist/{ListBox-BZp6exb8.mjs.map → ListBox-4rTgr3IJ.mjs.map} +1 -1
- package/dist/{ListBox-DpFcM-dM.d.mts → ListBox-ZDaitaXR.d.mts} +2 -2
- package/dist/ListBox.d.mts +1 -1
- package/dist/{ListBoxField-DL6Zk8TU.d.mts → ListBoxField-CGvVWKyL.d.mts} +4 -4
- package/dist/ListBoxField.d.mts +1 -1
- package/dist/{LoadingShimmer-oPIv2ESr.mjs → LoadingShimmer-BVVdBeN-.mjs} +18 -20
- package/dist/LoadingShimmer-BVVdBeN-.mjs.map +1 -0
- package/dist/{LogicRow-BakOUtzx.d.mts → LogicRow-Bzp5o1sL.d.mts} +2 -2
- package/dist/LogicRow.d.mts +1 -1
- package/dist/{Menu-D6OrKCTC.d.mts → Menu-DviYNrFd.d.mts} +2 -2
- package/dist/Menu.d.mts +1 -1
- package/dist/{Modal-De5_bPJ_.mjs → Modal-CiPFqr0L.mjs} +52 -23
- package/dist/{Modal-De5_bPJ_.mjs.map → Modal-CiPFqr0L.mjs.map} +1 -1
- package/dist/{PageHeader-7_Hf6rHl.mjs → PageHeader-6KvtGED-.mjs} +2 -2
- package/dist/{PageHeader-7_Hf6rHl.mjs.map → PageHeader-6KvtGED-.mjs.map} +1 -1
- package/dist/{PageLayout-DjtGrvJa.mjs → PageLayout-CPiVnS_r.mjs} +3 -1
- package/dist/PageLayout-CPiVnS_r.mjs.map +1 -0
- package/dist/{Pagination-DMH2IaV0.mjs → Pagination-CqFvnlXc.mjs} +4 -4
- package/dist/{Pagination-DMH2IaV0.mjs.map → Pagination-CqFvnlXc.mjs.map} +1 -1
- package/dist/{Pii-24D_nSRQ.mjs → Pii-jSYND7Cn.mjs} +2 -2
- package/dist/{Pii-24D_nSRQ.mjs.map → Pii-jSYND7Cn.mjs.map} +1 -1
- package/dist/{PillShell-B7Bm-dsE.d.mts → PillShell-Bkyu5FXB.d.mts} +2 -2
- package/dist/PillShell.d.mts +1 -1
- package/dist/{Popover-DordjYNM.mjs → Popover-CVX-dfYb.mjs} +48 -18
- package/dist/Popover-CVX-dfYb.mjs.map +1 -0
- package/dist/{Radio-BlEtetrr.mjs → Radio-B1H_S-Qj.mjs} +2 -2
- package/dist/Radio-B1H_S-Qj.mjs.map +1 -0
- package/dist/{RadioGroup-CMrXmmn4.mjs → RadioGroup-7hdcVhsp.mjs} +2 -2
- package/dist/{RadioGroup-CMrXmmn4.mjs.map → RadioGroup-7hdcVhsp.mjs.map} +1 -1
- package/dist/RuleEditorFields.d.mts +2 -2
- package/dist/RulesPill.d.mts +1 -1
- package/dist/{SegmentedControl-D_DA-MU1.mjs → SegmentedControl-BNOJ1FYQ.mjs} +5 -2
- package/dist/SegmentedControl-BNOJ1FYQ.mjs.map +1 -0
- package/dist/{Select-DOlw_LPR.mjs → Select-DbWEgH5c.mjs} +5 -3
- package/dist/Select-DbWEgH5c.mjs.map +1 -0
- package/dist/{Select-CR9TjFfo.d.mts → Select-DsVeAyZy.d.mts} +2 -2
- package/dist/Select.d.mts +1 -1
- package/dist/SmartTextInputField.d.mts +2 -2
- package/dist/{Spinner-CXb-KUs1.mjs → Spinner-k9ZiOdTr.mjs} +1 -1
- package/dist/{Spinner-CXb-KUs1.mjs.map → Spinner-k9ZiOdTr.mjs.map} +1 -1
- package/dist/{Sticker-C1_6I08u.mjs → Sticker-4VdGEFAu.mjs} +2 -2
- package/dist/{Sticker-C1_6I08u.mjs.map → Sticker-4VdGEFAu.mjs.map} +1 -1
- package/dist/StringValueControl.d.mts +2 -1
- package/dist/{TabBar-BCFO38E0.mjs → TabBar-d4sdknti.mjs} +5 -5
- package/dist/TabBar-d4sdknti.mjs.map +1 -0
- package/dist/{Table-DPi4Dt5H.mjs → Table-9mNn8Q-d.mjs} +14 -6
- package/dist/Table-9mNn8Q-d.mjs.map +1 -0
- package/dist/{TableBox-DNQsgQ8x.mjs → TableBox-D9NA-s9l.mjs} +16 -12
- package/dist/TableBox-D9NA-s9l.mjs.map +1 -0
- package/dist/TableBox.d.mts +1 -1
- package/dist/{TableBoxCell-CsRt_5gP.d.mts → TableBoxCell-CQOL30et.d.mts} +4 -4
- package/dist/TableBoxCell.d.mts +1 -1
- package/dist/{TableBoxField-Db0Vjo6Z.d.mts → TableBoxField-z0GIFeQw.d.mts} +5 -5
- package/dist/TableBoxField.d.mts +1 -1
- package/dist/{TableBoxRow-exMlZyc4.d.mts → TableBoxRow-tb9-KMr9.d.mts} +2 -2
- package/dist/TableBoxRow.d.mts +1 -1
- package/dist/{TableBoxRowActions-UO9YN34k.d.mts → TableBoxRowActions-BZwulsFP.d.mts} +2 -2
- package/dist/TableBoxRowActions.d.mts +1 -1
- package/dist/{TableControls-BrP_BqnF.mjs → TableControls-BXykbUBf.mjs} +126 -40
- package/dist/TableControls-BXykbUBf.mjs.map +1 -0
- package/dist/{TableControls-Clo_0Mty.d.mts → TableControls-DE6eHq8h.d.mts} +4 -4
- package/dist/TableControls.d.mts +1 -1
- package/dist/{TableControlsContext-BNd6z9mD.d.mts → TableControlsContext-C2_2EuMh.d.mts} +2 -2
- package/dist/TableControlsContext.d.mts +1 -1
- package/dist/{TableViewConfigurationDropdown-Cp7ausV_.d.mts → TableViewConfigurationDropdown-DE9HFXYY.d.mts} +2 -2
- package/dist/TableViewConfigurationDropdown.d.mts +1 -1
- package/dist/{TechnicalSticker-Cq5jzYKQ.mjs → TechnicalSticker-DtV7Gawf.mjs} +5 -3
- package/dist/TechnicalSticker-DtV7Gawf.mjs.map +1 -0
- package/dist/{TextArea-Dro-HH8O.mjs → TextArea-CQ1YNi2b.mjs} +4 -5
- package/dist/TextArea-CQ1YNi2b.mjs.map +1 -0
- package/dist/{Toggle-D9MzTIZs.mjs → Toggle-CzHoIR-n.mjs} +8 -4
- package/dist/Toggle-CzHoIR-n.mjs.map +1 -0
- package/dist/{Tooltip-YViXzMdm.mjs → Tooltip-CVBxc1yf.mjs} +17 -4
- package/dist/Tooltip-CVBxc1yf.mjs.map +1 -0
- package/dist/chartColors.d.mts +92 -0
- package/dist/chartFrameLayout.d.mts +46 -0
- package/dist/{clientFilterUtils-CGHYF5NE.d.mts → clientFilterUtils-2TBUC31K.d.mts} +2 -2
- package/dist/clientFilterUtils.d.mts +1 -1
- package/dist/components/Accordion/index.mjs +22 -13
- package/dist/components/Accordion/index.mjs.map +1 -1
- package/dist/components/Attribute/index.mjs +6 -4
- package/dist/components/Attribute/index.mjs.map +1 -1
- package/dist/components/Badge/index.mjs +1 -1
- package/dist/components/Banner/index.mjs +1 -1
- package/dist/components/BottomPanel/index.mjs +7 -5
- package/dist/components/BottomPanel/index.mjs.map +1 -1
- package/dist/components/Breadcrumbs/index.mjs +1 -1
- package/dist/components/Button/index.mjs +1 -1
- package/dist/components/ButtonGroup/index.mjs +1 -1
- package/dist/components/CardV2/index.mjs +1 -1
- package/dist/components/Chart/index.d.mts +9 -0
- package/dist/components/Chart/index.mjs +680 -0
- package/dist/components/Chart/index.mjs.map +1 -0
- package/dist/components/Checkbox/index.mjs +1 -1
- package/dist/components/CodeHighlight/index.mjs +1 -1
- package/dist/components/Combobox/index.d.mts +5 -3
- package/dist/components/Combobox/index.mjs +1 -1
- package/dist/components/DataTable/TableControls/index.d.mts +19 -19
- package/dist/components/DataTable/TableControls/index.mjs +2 -2
- package/dist/components/DataTable/index.d.mts +5 -5
- package/dist/components/DataTable/index.mjs +1 -1
- package/dist/components/DataTable/types.d.mts +1 -1
- 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 +16 -14
- package/dist/components/FloatingPanel/index.mjs.map +1 -1
- package/dist/components/FloatingToolbar/index.mjs +1 -1
- package/dist/components/FormControl/index.mjs +1 -1
- package/dist/components/FormField/index.d.mts +4 -4
- package/dist/components/FormField/index.mjs +1 -1
- package/dist/components/HoverCopyableField/index.mjs +1 -1
- package/dist/components/ImageTile/index.mjs +7 -7
- package/dist/components/ImageTile/index.mjs.map +1 -1
- package/dist/components/Input/index.mjs +1 -1
- package/dist/components/Link/index.mjs +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/Menu/index.d.mts +1 -1
- package/dist/components/Modal/index.mjs +1 -1
- package/dist/components/PageHeader/index.mjs +1 -1
- 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 +20 -3
- package/dist/components/ProgressBar/index.mjs.map +1 -1
- package/dist/components/Radio/index.mjs +1 -1
- package/dist/components/RadioGroup/index.mjs +1 -1
- package/dist/components/RichTextEditor/index.mjs +5 -5
- package/dist/components/RightPanel/index.mjs +28 -13
- package/dist/components/RightPanel/index.mjs.map +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/SelectionCard/index.mjs +2 -2
- package/dist/components/Slider/index.mjs +3 -2
- package/dist/components/Slider/index.mjs.map +1 -1
- package/dist/components/SmartTextInput/index.mjs +9 -78
- package/dist/components/SmartTextInput/index.mjs.map +1 -1
- package/dist/{safe-parse.d.mts → components/SmartTextInput/parser/safe-parse.d.mts} +1 -1
- package/dist/components/SmartTextInput/parser/safe-parse.mjs +30 -0
- package/dist/components/SmartTextInput/parser/safe-parse.mjs.map +1 -0
- package/dist/{tree.d.mts → components/SmartTextInput/parser/tree.d.mts} +1 -1
- package/dist/components/SmartTextInput/parser/tree.mjs +42 -0
- package/dist/components/SmartTextInput/parser/tree.mjs.map +1 -0
- package/dist/components/Spinner/index.mjs +1 -1
- package/dist/components/Sticker/index.mjs +1 -1
- package/dist/components/SwatchPicker/index.mjs +2 -1
- package/dist/components/SwatchPicker/index.mjs.map +1 -1
- package/dist/components/TabBar/index.mjs +1 -1
- package/dist/components/Table/index.mjs +1 -1
- package/dist/components/TableBox/index.d.mts +1 -1
- package/dist/components/TableBox/index.mjs +1 -1
- package/dist/components/TechnicalSticker/index.mjs +1 -1
- package/dist/components/TextArea/index.mjs +1 -1
- package/dist/components/Tile/index.mjs +2 -2
- package/dist/components/Toast/index.mjs +16 -10
- package/dist/components/Toast/index.mjs.map +1 -1
- package/dist/components/Toggle/index.mjs +1 -1
- package/dist/components/Tooltip/index.mjs +1 -1
- package/dist/components/VersionHistory/index.mjs +5 -5
- package/dist/compound-expression.d.mts +1 -1
- package/dist/{date-range-rule-value-ASr06ClE.d.mts → date-range-rule-value-DyLlMtjr.d.mts} +2 -2
- package/dist/date-range-rule-value.d.mts +1 -1
- package/dist/display.d.mts +1 -1
- package/dist/duration-token.d.mts +11 -0
- package/dist/exit-motion.d.mts +7 -0
- package/dist/fieldPickerOptions.d.mts +2 -2
- package/dist/{filter-size-context-CmFyIPCm.d.mts → filter-size-context-DVnjmuhk.d.mts} +2 -2
- package/dist/filter-size-context.d.mts +1 -1
- package/dist/{filters-DTBc0mE7.d.mts → filters-DW7pqWv3.d.mts} +2 -2
- package/dist/filters.d.mts +1 -1
- package/dist/{helpers-CBJ2AqGZ.d.mts → helpers-BTD2kXLs.d.mts} +2 -2
- package/dist/helpers.d.mts +1 -1
- package/dist/{index-OkdnW-u5.d.mts → index-B4tE0RxY.d.mts} +3 -3
- package/dist/{index-kIon1vPp.d.mts → index-DTM_t7OG.d.mts} +2 -2
- package/dist/index4.d.mts +3 -3
- package/dist/index5.d.mts +1 -1
- package/dist/index6.d.mts +14 -14
- package/dist/{inputFields-DpHeZiFX.d.mts → inputFields-DnBb3NhK.d.mts} +4 -4
- package/dist/inputFields.d.mts +1 -1
- package/dist/lib/TruncatedTextWithTooltip.mjs +1 -1
- package/dist/lib/useCloseFocus.d.mts +45 -0
- package/dist/lib/useCloseFocus.mjs +123 -0
- package/dist/lib/useCloseFocus.mjs.map +1 -0
- package/dist/lib/useModalInsetRight.d.mts +4 -3
- package/dist/lib/useModalInsetRight.mjs +7 -5
- package/dist/lib/useModalInsetRight.mjs.map +1 -1
- package/dist/lint/THIRD_PARTY_NOTICES.md +30 -0
- package/dist/lint/index.mjs +696 -11
- package/dist/lint/index.mjs.map +1 -1
- package/dist/lint/recommended.json +7 -1
- package/dist/mixins/hoverable.mjs +1 -1
- package/dist/mixins/hoverable.mjs.map +1 -1
- package/dist/mixins/input.mjs +1 -0
- package/dist/mixins/input.mjs.map +1 -1
- package/dist/mixins/menuItem.mjs +2 -0
- package/dist/mixins/menuItem.mjs.map +1 -1
- package/dist/mixins/motion.d.mts +28 -0
- package/dist/mixins/motion.mjs +66 -0
- package/dist/mixins/motion.mjs.map +1 -0
- package/dist/motion-origin.d.mts +7 -0
- package/dist/motion.d.mts +63 -0
- package/dist/no-layout-motion.d.mts +7 -0
- package/dist/no-transition-all.d.mts +7 -0
- package/dist/{operators-BHxKZcpD.d.mts → operators-B8_k3r69.d.mts} +10 -3
- package/dist/operators.d.mts +2 -2
- package/dist/overlay-motion.d.mts +7 -0
- package/dist/patterns/CardGrouping/index.mjs +6 -6
- package/dist/patterns/CardGrouping/index.mjs.map +1 -1
- package/dist/patterns/IndexTableLayout/index.mjs +23 -16
- package/dist/patterns/IndexTableLayout/index.mjs.map +1 -1
- package/dist/patterns/LayoutLoadingShimmer/index.mjs +4 -4
- package/dist/patterns/LayoutLoadingSpinner/index.mjs +3 -1
- package/dist/patterns/LayoutLoadingSpinner/index.mjs.map +1 -1
- package/dist/patterns/PageLayout/index.mjs +1 -1
- package/dist/patterns/WizardModal/index.mjs +2 -2
- package/dist/relative-date-label.d.mts +1 -1
- package/dist/{types-DLnCkvTt.d.mts → types-BJqmRXFV.d.mts} +15 -1
- package/dist/{types-CqcbWyUY.d.mts → types-BOsCi-kZ.d.mts} +8 -2
- package/dist/{types-BiqzeNsa.d.mts → types-Dws2XDz2.d.mts} +2 -2
- package/dist/{types-BEdERA4v.d.mts → types-NO2GRlM-.d.mts} +2 -2
- package/dist/types4.d.mts +1 -1
- package/dist/types5.d.mts +1 -1
- package/dist/types6.d.mts +1 -1
- package/dist/{url-state-CXUuK3_r.d.mts → url-state-CXPmXzIZ.d.mts} +2 -2
- package/dist/url-state.d.mts +1 -1
- package/dist/useChartColors.d.mts +30 -0
- package/dist/useChartSeriesVisibility.d.mts +22 -0
- package/dist/useChartStyles.d.mts +108 -0
- package/dist/useColumnConfiguration.d.mts +2 -2
- package/dist/useComboboxFooterAction.d.mts +1 -1
- package/dist/{useFilterStateV2-DBpbxAEC.d.mts → useFilterStateV2-DiTS9DTg.d.mts} +3 -3
- package/dist/useFilterStateV2.d.mts +1 -1
- package/dist/{useTableColumns-Xd14vx_h.d.mts → useTableColumns-tITjHasE.d.mts} +2 -2
- package/dist/useTableColumns.d.mts +1 -1
- package/dist/useTruncation.d.mts +1 -1
- package/dist/useValueControlError.d.mts +26 -0
- package/dist/utils.d.mts +1 -1
- package/dist/{validation-Tgg3AhuP.d.mts → validation-BDQdQ1cY.d.mts} +3 -3
- package/dist/validation.d.mts +1 -1
- package/dist/{value-control-resolver-XQbGCdsP.d.mts → value-control-resolver-BFJZEWDn.d.mts} +9 -3
- package/dist/value-control-resolver.d.mts +1 -1
- package/dist/value-labels.d.mts +12 -0
- package/dist/variables/keyframes.d.mts +2 -1
- package/dist/variables/keyframes.mjs +9 -1
- package/dist/variables/keyframes.mjs.map +1 -1
- package/dist/variables/transitions.d.mts +31 -1
- package/dist/variables/transitions.mjs +50 -1
- package/dist/variables/transitions.mjs.map +1 -1
- package/llms.txt +2 -1
- package/package.json +20 -4
- package/skills/new-screen/SKILL.md +33 -0
- package/skills/ui-authoring/COMPONENTS.md +19 -1
- package/skills/ui-authoring/PATTERNS.md +57 -36
- package/skills/ui-authoring/STANDARD.md +78 -4
- package/skills/ui-authoring/TOKENS.md +27 -24
- package/dist/Breadcrumbs-CMf3Uvow.mjs.map +0 -1
- package/dist/CardV2-CrV6eEQb.mjs.map +0 -1
- package/dist/Checkbox-Dr4LMKHV.mjs.map +0 -1
- package/dist/Combobox-CIKqTYZt.d.mts +0 -11
- package/dist/Combobox-Gb_j1dg6.mjs.map +0 -1
- package/dist/DataTable-CIZJ1vO8.mjs.map +0 -1
- package/dist/DropdownMenu-c8XK2Lr4.mjs.map +0 -1
- package/dist/FloatingToolbar-DLRaE0o7.mjs.map +0 -1
- package/dist/HoverCopyableField-XHC_n9tp.mjs.map +0 -1
- package/dist/IconButton-DxHB2g80.mjs.map +0 -1
- package/dist/Link-D_kCyLYX.mjs.map +0 -1
- package/dist/LoadingShimmer-oPIv2ESr.mjs.map +0 -1
- package/dist/PageLayout-DjtGrvJa.mjs.map +0 -1
- package/dist/Popover-DordjYNM.mjs.map +0 -1
- package/dist/Radio-BlEtetrr.mjs.map +0 -1
- package/dist/SegmentedControl-D_DA-MU1.mjs.map +0 -1
- package/dist/Select-DOlw_LPR.mjs.map +0 -1
- package/dist/TabBar-BCFO38E0.mjs.map +0 -1
- package/dist/Table-DPi4Dt5H.mjs.map +0 -1
- package/dist/TableBox-DNQsgQ8x.mjs.map +0 -1
- package/dist/TableControls-BrP_BqnF.mjs.map +0 -1
- package/dist/TechnicalSticker-Cq5jzYKQ.mjs.map +0 -1
- package/dist/TextArea-Dro-HH8O.mjs.map +0 -1
- package/dist/Toggle-D9MzTIZs.mjs.map +0 -1
- package/dist/Tooltip-YViXzMdm.mjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as ControlBarProps } from "./ControlBar-B3Jn8G0k.mjs";
|
|
2
|
-
import { n as FilterBarProps } from "./FilterBar-
|
|
3
|
-
import { i as BaseFilterConfig, s as FilterConfig, u as FilterTypeResolver } from "./types-
|
|
4
|
-
import { i as TableViewConfigurationProps } from "./TableViewConfigurationDropdown-
|
|
2
|
+
import { n as FilterBarProps } from "./FilterBar-CA4mDAXK.mjs";
|
|
3
|
+
import { i as BaseFilterConfig, s as FilterConfig, u as FilterTypeResolver } from "./types-NO2GRlM-.mjs";
|
|
4
|
+
import { i as TableViewConfigurationProps } from "./TableViewConfigurationDropdown-DE9HFXYY.mjs";
|
|
5
5
|
import { ReactNode } from "react";
|
|
6
6
|
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
7
7
|
|
|
@@ -82,4 +82,4 @@ declare const TableControls: <TFilter extends BaseFilterConfig = FilterConfig>({
|
|
|
82
82
|
}: TableControlsProps<TFilter>) => _$react_jsx_runtime0.JSX.Element;
|
|
83
83
|
//#endregion
|
|
84
84
|
export { TableControlsFiltersV2Props as n, TableControlsProps as r, TableControls as t };
|
|
85
|
-
//# sourceMappingURL=TableControls-
|
|
85
|
+
//# sourceMappingURL=TableControls-DE6eHq8h.d.mts.map
|
package/dist/TableControls.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as TableControlsFiltersV2Props, r as TableControlsProps, t as TableControls } from "./TableControls-
|
|
1
|
+
import { n as TableControlsFiltersV2Props, r as TableControlsProps, t as TableControls } from "./TableControls-DE6eHq8h.mjs";
|
|
2
2
|
export { TableControlsFiltersV2Props, TableControlsProps, TableControls as default };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as BaseFilterConfig, r as BaseActiveFilter } from "./types-
|
|
1
|
+
import { i as BaseFilterConfig, r as BaseActiveFilter } from "./types-NO2GRlM-.mjs";
|
|
2
2
|
import * as _$react from "react";
|
|
3
3
|
import { Dispatch, ReactNode, SetStateAction } from "react";
|
|
4
4
|
|
|
@@ -18,4 +18,4 @@ declare function TableControlsProvider<TFilter extends BaseFilterConfig = BaseFi
|
|
|
18
18
|
}): _$react.FunctionComponentElement<_$react.ProviderProps<TableControlsContextProps<BaseFilterConfig, BaseActiveFilter<BaseFilterConfig>>>>;
|
|
19
19
|
//#endregion
|
|
20
20
|
export { useTableControls as i, TableControlsContextProps as n, TableControlsProvider as r, TableControlsContext as t };
|
|
21
|
-
//# sourceMappingURL=TableControlsContext-
|
|
21
|
+
//# sourceMappingURL=TableControlsContext-C2_2EuMh.d.mts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as useTableControls, n as TableControlsContextProps, r as TableControlsProvider, t as TableControlsContext } from "./TableControlsContext-
|
|
1
|
+
import { i as useTableControls, n as TableControlsContextProps, r as TableControlsProvider, t as TableControlsContext } from "./TableControlsContext-C2_2EuMh.mjs";
|
|
2
2
|
export { TableControlsContextProps, TableControlsProvider, TableControlsContext as default, useTableControls };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as AttributeColumn } from "./types-
|
|
1
|
+
import { n as AttributeColumn } from "./types-NO2GRlM-.mjs";
|
|
2
2
|
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/DataTable/TableControls/TableViewConfigurationDropdown.d.ts
|
|
@@ -31,4 +31,4 @@ declare const TableViewConfiguration: ({
|
|
|
31
31
|
}: TableViewConfigurationProps) => _$react_jsx_runtime0.JSX.Element;
|
|
32
32
|
//#endregion
|
|
33
33
|
export { TableViewConfigurationProps as i, TableViewConfigurationDropdown as n, TableViewConfigurationDropdownProps as r, TableViewConfiguration as t };
|
|
34
|
-
//# sourceMappingURL=TableViewConfigurationDropdown-
|
|
34
|
+
//# sourceMappingURL=TableViewConfigurationDropdown-DE9HFXYY.d.mts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as TableViewConfigurationProps, n as TableViewConfigurationDropdown, r as TableViewConfigurationDropdownProps, t as TableViewConfiguration } from "./TableViewConfigurationDropdown-
|
|
1
|
+
import { i as TableViewConfigurationProps, n as TableViewConfigurationDropdown, r as TableViewConfigurationDropdownProps, t as TableViewConfiguration } from "./TableViewConfigurationDropdown-DE9HFXYY.mjs";
|
|
2
2
|
export { TableViewConfiguration, TableViewConfigurationDropdownProps, TableViewConfigurationProps, TableViewConfigurationDropdown as default };
|
|
@@ -2,10 +2,11 @@ import { a as styled, o as useTheme, r as css } from "./styledComponentsInterop-
|
|
|
2
2
|
import { semanticColor, semanticTokens } from "./lib/semanticColor.mjs";
|
|
3
3
|
import { t as MiddleTruncatedText } from "./MiddleTruncatedText-DicQsLDG.mjs";
|
|
4
4
|
import { t as useToggle } from "./useToggle-1z8JE7Ym.mjs";
|
|
5
|
-
import { a as Tooltip } from "./Tooltip-
|
|
5
|
+
import { a as Tooltip } from "./Tooltip-CVBxc1yf.mjs";
|
|
6
6
|
import { withAlpha } from "./lib/color.mjs";
|
|
7
7
|
import copyTextToClipboard from "./lib/copyTextToClipboard.mjs";
|
|
8
8
|
import { isHovered } from "./lib/pseudoClass.mjs";
|
|
9
|
+
import { revealShown, revealTransition } from "./mixins/motion.mjs";
|
|
9
10
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
10
11
|
import { BorderRadius, Color, Spacing, Typography } from "@persona/design-tokens";
|
|
11
12
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -99,7 +100,7 @@ const CopyActions = styled.div`
|
|
|
99
100
|
height: 16px;
|
|
100
101
|
opacity: ${({ $visible }) => $visible ? 1 : 0};
|
|
101
102
|
pointer-events: ${({ $visible }) => $visible ? "auto" : "none"};
|
|
102
|
-
|
|
103
|
+
${({ $visible }) => revealTransition($visible)}
|
|
103
104
|
|
|
104
105
|
/* Keyboard focus keeps the actions reachable, but a click also focuses the
|
|
105
106
|
button — matching plain :focus-within would leave them visible after the
|
|
@@ -107,6 +108,7 @@ const CopyActions = styled.div`
|
|
|
107
108
|
&:has(:focus-visible) {
|
|
108
109
|
opacity: 1;
|
|
109
110
|
pointer-events: auto;
|
|
111
|
+
${revealShown}
|
|
110
112
|
}
|
|
111
113
|
`;
|
|
112
114
|
const CopyGradient = styled.div`
|
|
@@ -268,4 +270,4 @@ const TechnicalSticker = ({ variant = "grey", href, tooltipLabel: tooltipLabelPr
|
|
|
268
270
|
//#endregion
|
|
269
271
|
export { TechnicalSticker as t };
|
|
270
272
|
|
|
271
|
-
//# sourceMappingURL=TechnicalSticker-
|
|
273
|
+
//# sourceMappingURL=TechnicalSticker-DtV7Gawf.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TechnicalSticker-DtV7Gawf.mjs","names":[],"sources":["../src/components/TechnicalSticker/TechnicalSticker.tsx"],"sourcesContent":["import {\n type ComponentPropsWithoutRef,\n type MouseEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport styled, { css, useTheme } from 'styled-components';\n\nimport { BorderRadius, Color, Spacing, Typography } from '@persona/design-tokens';\nimport { CopyIcon } from '@persona/icons/12px';\n\nimport Tooltip from '#src/components/Tooltip';\nimport { withAlpha } from '#src/lib/color';\nimport copyTextToClipboard from '#src/lib/copyTextToClipboard';\nimport MiddleTruncatedText from '#src/lib/MiddleTruncatedText';\nimport { isHovered } from '#src/lib/pseudoClass';\nimport { type MaybeSemanticTheme, semanticColor, semanticTokens } from '#src/lib/semanticColor';\nimport useToggle from '#src/lib/useToggle';\nimport { revealShown, revealTransition } from '#src/mixins/motion';\nimport type { SemanticTokens } from '#src/variables/semantic';\n\nexport type TechnicalStickerVariant = 'grey' | 'white';\n\nconst COPY_CONFIRMATION_TEXT = 'Copied!';\nconst COPY_CONFIRMATION_DURATION_MS = 1200;\nconst DEFAULT_COPY_TOOLTIP_LABEL = 'Copy ID';\nconst HREF_VALIDATION_BASE_URL = 'https://withpersona.com';\nconst TECHNICAL_TEXT_FONT = `${Typography.TextMono.fontWeight} ${Typography.TextExtraSmall.fontSize} ${Typography.TextMono.fontFamily}`;\n\nconst semanticRestFill = (tokens: SemanticTokens, variant: TechnicalStickerVariant) =>\n variant === 'white' ? tokens.FeedbackNeutralInverse : tokens.FeedbackNeutral1;\n\nconst restFill = (theme: MaybeSemanticTheme, variant: TechnicalStickerVariant) => {\n const tokens = semanticTokens(theme);\n if (tokens) {\n return semanticRestFill(tokens, variant);\n }\n return variant === 'white' ? Color.BackgroundLabelWhite : Color.BackgroundLabelGrey;\n};\n\nconst hoverFill = (theme: MaybeSemanticTheme, variant: TechnicalStickerVariant) =>\n variant === 'white'\n ? semanticColor(theme, 'FeedbackNeutral1', Color.BackgroundButtonInverseHover)\n : semanticColor(theme, 'ActionNeutralActive', Color.BackgroundLabelGreyHover);\n\nconst isSafeTechnicalStickerHref = (href: string) => {\n try {\n const url = new URL(href, HREF_VALIDATION_BASE_URL);\n return url.protocol === 'http:' || url.protocol === 'https:';\n } catch {\n return false;\n }\n};\n\nconst TechnicalStickerShell = styled.div<{\n variant: TechnicalStickerVariant;\n disabled?: boolean;\n $width?: number | string;\n}>`\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n\n border-radius: ${BorderRadius.Sm};\n height: 1rem;\n width: ${({ $width }) => (typeof $width === 'number' ? `${$width}px` : ($width ?? 'auto'))};\n max-width: 100%;\n box-sizing: border-box;\n\n color: ${({ theme, disabled }) =>\n disabled\n ? semanticColor(theme, 'FgDisabled', theme.color.text.disabled)\n : semanticColor(theme, 'FgPrimary', theme.color.text.primary)};\n background: ${({ theme, variant, disabled }) => {\n const tokens = semanticTokens(theme);\n return tokens && disabled\n ? withAlpha(semanticRestFill(tokens, variant), tokens.Opacity65)\n : restFill(theme, variant);\n }};\n\n position: relative;\n overflow: hidden;\n border: 1px solid ${({ theme }) => semanticColor(theme, 'BorderDefault', Color.BorderInputDefault)};\n\n ${({ theme, variant, disabled }) =>\n !disabled &&\n css`\n &:hover {\n background: ${hoverFill(theme, variant)};\n }\n `}\n`;\n\nconst labelContainerStyles = css`\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1 1 auto;\n min-width: 0;\n padding: 0 ${Spacing[1]};\n`;\n\nconst LabelContainer = styled.div`\n ${labelContainerStyles}\n`;\n\nconst LabelLink = styled.a`\n ${labelContainerStyles}\n color: inherit;\n text-decoration: none;\n`;\n\nconst TechnicalText = styled(MiddleTruncatedText)<{\n $isLinkEnabled: boolean;\n $isTruncated: boolean;\n}>`\n ${Typography.TextMono};\n font-size: ${Typography.TextExtraSmall.fontSize};\n line-height: ${Typography.TextExtraSmall.lineHeight};\n text-align: center;\n\n ${({ $isLinkEnabled, $isTruncated }) =>\n $isTruncated &&\n css`\n cursor: ${$isLinkEnabled ? 'pointer' : 'default'};\n user-select: none;\n\n & > span {\n user-select: none;\n }\n `}\n`;\n\nconst CopyActions = styled.div<{ $visible: boolean }>`\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n height: 16px;\n opacity: ${({ $visible }) => ($visible ? 1 : 0)};\n pointer-events: ${({ $visible }) => ($visible ? 'auto' : 'none')};\n ${({ $visible }) => revealTransition($visible)}\n\n /* Keyboard focus keeps the actions reachable, but a click also focuses the\n button — matching plain :focus-within would leave them visible after the\n pointer moves away. */\n &:has(:focus-visible) {\n opacity: 1;\n pointer-events: auto;\n ${revealShown}\n }\n`;\n\nconst CopyGradient = styled.div<{ $background: string }>`\n width: 8px;\n height: 16px;\n background: linear-gradient(to left, ${({ $background }) => $background}, transparent);\n`;\n\nconst CopyButton = styled.button<{ $background: string }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n padding: 0 2px 0 0;\n border: none;\n background: ${({ $background }) => $background};\n color: ${({ theme }) => semanticColor(theme, 'FgPrimary', Color.BorderIconPrimary)};\n cursor: pointer;\n\n &:disabled {\n cursor: not-allowed;\n }\n\n &${isHovered}:not(:disabled) {\n color: ${({ theme }) => semanticColor(theme, 'FgPrimary', Color.TextPrimary)};\n }\n`;\n\nexport interface TechnicalStickerProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n /** Full untruncated technical value displayed in the sticker. */\n children: string;\n /** Visual style for the technical sticker. Default: `grey`. */\n variant?: TechnicalStickerVariant;\n /** Renders disabled style and disables copy/link interaction. */\n disabled?: boolean;\n /** Opens in a new tab when the sticker body is clicked. */\n href?: string;\n /**\n * Hover tooltip for the sticker body. Shown when text is truncated or when set explicitly.\n * Defaults to the untruncated `children` string when shown.\n */\n tooltipLabel?: string;\n /**\n * Hover tooltip for the copy icon.\n * Defaults to `Copy ID`.\n */\n copyTooltipLabel?: string;\n /**\n * Confirmation label shown in the copy tooltip after a successful copy.\n * Defaults to `Copied!`.\n */\n copyConfirmationLabel?: string;\n /** Whether to show the hover copy action. Default: true. */\n copyable?: boolean;\n /** Value copied to the clipboard. Defaults to `children`. */\n copyValue?: string;\n /** Width of the sticker. Numbers are interpreted as pixels. */\n width?: number | string;\n /** Max width for middle truncation. Default: '96px'. */\n maxWidth?: number | string;\n}\n\nexport const TechnicalSticker = ({\n variant = 'grey',\n href,\n tooltipLabel: tooltipLabelProp,\n copyTooltipLabel = DEFAULT_COPY_TOOLTIP_LABEL,\n copyConfirmationLabel = COPY_CONFIRMATION_TEXT,\n copyable = true,\n copyValue,\n width,\n maxWidth = '96px',\n children,\n disabled,\n onMouseEnter,\n onMouseLeave,\n ...stickerProps\n}: TechnicalStickerProps) => {\n const [isHoveredState, setIsHoveredState] = useState(false);\n const [isCopyButtonKeyboardFocused, setIsCopyButtonKeyboardFocused] = useState(false);\n const [isTruncated, setIsTruncated] = useState(false);\n const [isCopyTooltipOpen, setIsCopyTooltipOpen] = useState(false);\n const [copyConfirmationOpen, { enable: showCopyConfirmation, disable: hideCopyConfirmation }] =\n useToggle(false);\n const copyConfirmationTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const copyButtonRef = useRef<HTMLButtonElement>(null);\n const isPointerFocusRef = useRef(false);\n const copyRequestIdRef = useRef(0);\n\n const tooltipLabel = tooltipLabelProp ?? children;\n const hasCustomTooltipLabel = tooltipLabelProp != null;\n\n const theme = useTheme();\n const hoverBackground = hoverFill(theme, variant);\n const copyActionBackground = isHoveredState ? hoverBackground : restFill(theme, variant);\n const showCopyActions =\n copyable &&\n !disabled &&\n (isHoveredState || isCopyButtonKeyboardFocused || copyConfirmationOpen);\n const showStickerTooltip = tooltipLabel.length > 0 && (isTruncated || hasCustomTooltipLabel);\n const isCopyTooltipVisible = isCopyTooltipOpen || copyConfirmationOpen;\n const isLinkEnabled = href != null && !disabled && isSafeTechnicalStickerHref(href);\n\n const handleCopyTooltipOpenChange = useCallback(\n (open: boolean) => {\n if (copyConfirmationOpen) {\n return;\n }\n\n setIsCopyTooltipOpen(open);\n },\n [copyConfirmationOpen],\n );\n\n const dismissCopyConfirmation = useCallback(() => {\n // Writing to the clipboard is async, so a copy still in flight would\n // otherwise surface its confirmation after the dismissal.\n copyRequestIdRef.current += 1;\n\n if (copyConfirmationTimerRef.current) {\n clearTimeout(copyConfirmationTimerRef.current);\n copyConfirmationTimerRef.current = null;\n }\n\n setIsCopyTooltipOpen(false);\n hideCopyConfirmation();\n }, [hideCopyConfirmation]);\n\n const handleCopy = useCallback(\n async (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (disabled) {\n return;\n }\n\n const requestId = ++copyRequestIdRef.current;\n const copyWasSuccessful = await copyTextToClipboard(copyValue ?? children);\n if (!copyWasSuccessful || requestId !== copyRequestIdRef.current) {\n return;\n }\n\n setIsCopyTooltipOpen(true);\n showCopyConfirmation();\n if (copyConfirmationTimerRef.current) {\n clearTimeout(copyConfirmationTimerRef.current);\n }\n copyConfirmationTimerRef.current = setTimeout(() => {\n setIsCopyTooltipOpen(false);\n hideCopyConfirmation();\n copyConfirmationTimerRef.current = null;\n }, COPY_CONFIRMATION_DURATION_MS);\n },\n [children, copyValue, disabled, hideCopyConfirmation, showCopyConfirmation],\n );\n\n useEffect(\n () => () => {\n if (copyConfirmationTimerRef.current) {\n clearTimeout(copyConfirmationTimerRef.current);\n }\n },\n [],\n );\n\n // Clicking an already keyboard-focused button fires no second focus event, so\n // pointer input has to retire the keyboard state itself.\n const handleCopyButtonMouseDown = () => {\n isPointerFocusRef.current = true;\n setIsCopyButtonKeyboardFocused(false);\n };\n\n // A click focuses the button too, so treating any focus as a reason to keep\n // the actions visible would pin them open once the pointer moves away.\n const handleCopyButtonFocus = () => {\n setIsCopyButtonKeyboardFocused(!isPointerFocusRef.current);\n isPointerFocusRef.current = false;\n };\n\n const handleCopyButtonBlur = () => {\n isPointerFocusRef.current = false;\n setIsCopyButtonKeyboardFocused(false);\n };\n\n const technicalText = (\n <TechnicalText\n value={children}\n maxWidth={width ?? maxWidth}\n font={TECHNICAL_TEXT_FONT}\n onTruncatedChange={setIsTruncated}\n titleBehavior='never'\n $isLinkEnabled={isLinkEnabled}\n $isTruncated={isTruncated}\n />\n );\n\n const labelContent = isLinkEnabled ? (\n <LabelLink href={href} target='_blank' rel='noopener noreferrer'>\n {technicalText}\n </LabelLink>\n ) : (\n <LabelContainer>{technicalText}</LabelContainer>\n );\n\n const labelWithTooltip = showStickerTooltip ? (\n <Tooltip trigger={labelContent} interactive side='top' maxWidth='400px'>\n {tooltipLabel}\n </Tooltip>\n ) : (\n labelContent\n );\n\n return (\n <TechnicalStickerShell\n {...stickerProps}\n variant={variant}\n disabled={disabled}\n $width={width}\n onMouseEnter={(event) => {\n onMouseEnter?.(event);\n setIsHoveredState(true);\n }}\n onMouseLeave={(event) => {\n onMouseLeave?.(event);\n setIsHoveredState(false);\n if (!isCopyButtonKeyboardFocused) {\n // Otherwise a click's focus lingers on a button that is now hidden.\n copyButtonRef.current?.blur();\n dismissCopyConfirmation();\n }\n }}\n >\n {labelWithTooltip}\n {copyable && (\n <CopyActions $visible={showCopyActions}>\n <CopyGradient $background={copyActionBackground} />\n <Tooltip\n open={isCopyTooltipVisible}\n onOpenChange={handleCopyTooltipOpenChange}\n trigger={\n <CopyButton\n ref={copyButtonRef}\n type='button'\n aria-label='Copy'\n disabled={disabled}\n $background={copyActionBackground}\n onClick={handleCopy}\n onMouseDown={handleCopyButtonMouseDown}\n onBlur={handleCopyButtonBlur}\n onFocus={handleCopyButtonFocus}\n >\n <CopyIcon />\n </CopyButton>\n }\n interactive={false}\n side='top'\n >\n {copyConfirmationOpen ? copyConfirmationLabel : copyTooltipLabel}\n </Tooltip>\n </CopyActions>\n )}\n </TechnicalStickerShell>\n );\n};\n\nexport default TechnicalSticker;\n"],"mappings":";;;;;;;;;;;;;;AAyBA,MAAM,yBAAyB;AAC/B,MAAM,gCAAgC;AACtC,MAAM,6BAA6B;AACnC,MAAM,2BAA2B;AACjC,MAAM,sBAAsB,GAAG,WAAW,SAAS,WAAW,GAAG,WAAW,eAAe,SAAS,GAAG,WAAW,SAAS;AAE3H,MAAM,oBAAoB,QAAwB,YAChD,YAAY,UAAU,OAAO,yBAAyB,OAAO;AAE/D,MAAM,YAAY,OAA2B,YAAqC;CAChF,MAAM,SAAS,eAAe,MAAM;AACpC,KAAI,OACF,QAAO,iBAAiB,QAAQ,QAAQ;AAE1C,QAAO,YAAY,UAAU,MAAM,uBAAuB,MAAM;;AAGlE,MAAM,aAAa,OAA2B,YAC5C,YAAY,UACR,cAAc,OAAO,oBAAoB,MAAM,6BAA6B,GAC5E,cAAc,OAAO,uBAAuB,MAAM,yBAAyB;AAEjF,MAAM,8BAA8B,SAAiB;AACnD,KAAI;EACF,MAAM,MAAM,IAAI,IAAI,MAAM,yBAAyB;AACnD,SAAO,IAAI,aAAa,WAAW,IAAI,aAAa;SAC9C;AACN,SAAO;;;AAIX,MAAM,wBAAwB,OAAO,GAInC;;;;;mBAKiB,aAAa,GAAG;;YAEvB,EAAE,aAAc,OAAO,WAAW,WAAW,GAAG,OAAO,MAAO,UAAU,OAAS;;;;YAIjF,EAAE,OAAO,eACjB,WACI,cAAc,OAAO,cAAc,MAAM,MAAM,KAAK,SAAS,GAC7D,cAAc,OAAO,aAAa,MAAM,MAAM,KAAK,QAAQ,CAAC;iBACnD,EAAE,OAAO,SAAS,eAAe;CAC9C,MAAM,SAAS,eAAe,MAAM;AACpC,QAAO,UAAU,WACb,UAAU,iBAAiB,QAAQ,QAAQ,EAAE,OAAO,UAAU,GAC9D,SAAS,OAAO,QAAQ;EAC5B;;;;uBAImB,EAAE,YAAY,cAAc,OAAO,iBAAiB,MAAM,mBAAmB,CAAC;;KAEhG,EAAE,OAAO,SAAS,eACnB,CAAC,YACD,GAAG;;sBAEe,UAAU,OAAO,QAAQ,CAAC;;MAE1C;;AAGN,MAAM,uBAAuB,GAAG;;;;;;eAMjB,QAAQ,GAAG;;AAG1B,MAAM,iBAAiB,OAAO,GAAG;IAC7B,qBAAqB;;AAGzB,MAAM,YAAY,OAAO,CAAC;IACtB,qBAAqB;;;;AAKzB,MAAM,gBAAgB,OAAO,oBAAoB;IAI7C,WAAW,SAAS;eACT,WAAW,eAAe,SAAS;iBACjC,WAAW,eAAe,WAAW;;;KAGjD,EAAE,gBAAgB,mBACnB,gBACA,GAAG;gBACS,iBAAiB,YAAY,UAAU;;;;;;MAMjD;;AAGN,MAAM,cAAc,OAAO,GAA0B;;;;;;;;cAQvC,EAAE,eAAgB,WAAW,IAAI,EAAG;qBAC7B,EAAE,eAAgB,WAAW,SAAS,OAAQ;KAC9D,EAAE,eAAe,iBAAiB,SAAS,CAAC;;;;;;;;MAQ3C,YAAY;;;AAIlB,MAAM,eAAe,OAAO,GAA4B;;;0CAGd,EAAE,kBAAkB,YAAY;;AAG1E,MAAM,aAAa,OAAO,MAA+B;;;;;;;;iBAQxC,EAAE,kBAAkB,YAAY;YACrC,EAAE,YAAY,cAAc,OAAO,aAAa,MAAM,kBAAkB,CAAC;;;;;;;KAOhF,UAAU;cACD,EAAE,YAAY,cAAc,OAAO,aAAa,MAAM,YAAY,CAAC;;;AAsCjF,MAAa,oBAAoB,EAC/B,UAAU,QACV,MACA,cAAc,kBACd,mBAAmB,4BACnB,wBAAwB,wBACxB,WAAW,MACX,WACA,OACA,WAAW,QACX,UACA,UACA,cACA,cACA,GAAG,mBACwB;CAC3B,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,MAAM;CAC3D,MAAM,CAAC,6BAA6B,kCAAkC,SAAS,MAAM;CACrF,MAAM,CAAC,aAAa,kBAAkB,SAAS,MAAM;CACrD,MAAM,CAAC,mBAAmB,wBAAwB,SAAS,MAAM;CACjE,MAAM,CAAC,sBAAsB,EAAE,QAAQ,sBAAsB,SAAS,0BACpE,UAAU,MAAM;CAClB,MAAM,2BAA2B,OAA6C,KAAK;CACnF,MAAM,gBAAgB,OAA0B,KAAK;CACrD,MAAM,oBAAoB,OAAO,MAAM;CACvC,MAAM,mBAAmB,OAAO,EAAE;CAElC,MAAM,eAAe,oBAAoB;CACzC,MAAM,wBAAwB,oBAAoB;CAElD,MAAM,QAAQ,UAAU;CACxB,MAAM,kBAAkB,UAAU,OAAO,QAAQ;CACjD,MAAM,uBAAuB,iBAAiB,kBAAkB,SAAS,OAAO,QAAQ;CACxF,MAAM,kBACJ,YACA,CAAC,aACA,kBAAkB,+BAA+B;CACpD,MAAM,qBAAqB,aAAa,SAAS,MAAM,eAAe;CACtE,MAAM,uBAAuB,qBAAqB;CAClD,MAAM,gBAAgB,QAAQ,QAAQ,CAAC,YAAY,2BAA2B,KAAK;CAEnF,MAAM,8BAA8B,aACjC,SAAkB;AACjB,MAAI,qBACF;AAGF,uBAAqB,KAAK;IAE5B,CAAC,qBAAqB,CACvB;CAED,MAAM,0BAA0B,kBAAkB;AAGhD,mBAAiB,WAAW;AAE5B,MAAI,yBAAyB,SAAS;AACpC,gBAAa,yBAAyB,QAAQ;AAC9C,4BAAyB,UAAU;;AAGrC,uBAAqB,MAAM;AAC3B,wBAAsB;IACrB,CAAC,qBAAqB,CAAC;CAE1B,MAAM,aAAa,YACjB,OAAO,UAAyC;AAC9C,QAAM,gBAAgB;AACtB,QAAM,iBAAiB;AAEvB,MAAI,SACF;EAGF,MAAM,YAAY,EAAE,iBAAiB;AAErC,MAAI,CAAC,MAD2B,oBAAoB,aAAa,SAAS,IAChD,cAAc,iBAAiB,QACvD;AAGF,uBAAqB,KAAK;AAC1B,wBAAsB;AACtB,MAAI,yBAAyB,QAC3B,cAAa,yBAAyB,QAAQ;AAEhD,2BAAyB,UAAU,iBAAiB;AAClD,wBAAqB,MAAM;AAC3B,yBAAsB;AACtB,4BAAyB,UAAU;KAClC,8BAA8B;IAEnC;EAAC;EAAU;EAAW;EAAU;EAAsB;EAAqB,CAC5E;AAED,uBACc;AACV,MAAI,yBAAyB,QAC3B,cAAa,yBAAyB,QAAQ;IAGlD,EAAE,CACH;CAID,MAAM,kCAAkC;AACtC,oBAAkB,UAAU;AAC5B,iCAA+B,MAAM;;CAKvC,MAAM,8BAA8B;AAClC,iCAA+B,CAAC,kBAAkB,QAAQ;AAC1D,oBAAkB,UAAU;;CAG9B,MAAM,6BAA6B;AACjC,oBAAkB,UAAU;AAC5B,iCAA+B,MAAM;;CAGvC,MAAM,gBACJ,oBAAC,eAAD;EACE,OAAO;EACP,UAAU,SAAS;EACnB,MAAM;EACN,mBAAmB;EACnB,eAAc;EACd,gBAAgB;EAChB,cAAc;EACd,CAAA;CAGJ,MAAM,eAAe,gBACnB,oBAAC,WAAD;EAAiB;EAAM,QAAO;EAAS,KAAI;YACxC;EACS,CAAA,GAEZ,oBAAC,gBAAD,EAAA,UAAiB,eAA+B,CAAA;CAGlD,MAAM,mBAAmB,qBACvB,oBAAC,SAAD;EAAS,SAAS;EAAc,aAAA;EAAY,MAAK;EAAM,UAAS;YAC7D;EACO,CAAA,GAEV;AAGF,QACE,qBAAC,uBAAD;EACE,GAAI;EACK;EACC;EACV,QAAQ;EACR,eAAe,UAAU;AACvB,kBAAe,MAAM;AACrB,qBAAkB,KAAK;;EAEzB,eAAe,UAAU;AACvB,kBAAe,MAAM;AACrB,qBAAkB,MAAM;AACxB,OAAI,CAAC,6BAA6B;AAEhC,kBAAc,SAAS,MAAM;AAC7B,6BAAyB;;;YAf/B,CAmBG,kBACA,YACC,qBAAC,aAAD;GAAa,UAAU;aAAvB,CACE,oBAAC,cAAD,EAAc,aAAa,sBAAwB,CAAA,EACnD,oBAAC,SAAD;IACE,MAAM;IACN,cAAc;IACd,SACE,oBAAC,YAAD;KACE,KAAK;KACL,MAAK;KACL,cAAW;KACD;KACV,aAAa;KACb,SAAS;KACT,aAAa;KACb,QAAQ;KACR,SAAS;eAET,oBAAC,UAAD,EAAY,CAAA;KACD,CAAA;IAEf,aAAa;IACb,MAAK;cAEJ,uBAAuB,wBAAwB;IACxC,CAAA,CACE;KAEM"}
|
|
@@ -12,10 +12,9 @@ const TextArea = styled("textarea")`
|
|
|
12
12
|
font-family: ${({ theme }) => theme.text.fontFamily.base};
|
|
13
13
|
height: ${({ theme }) => theme.element.height.xl};
|
|
14
14
|
white-space: pre-wrap;
|
|
15
|
-
transition:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
width 0s;
|
|
15
|
+
transition-property: background-color, color, border-color;
|
|
16
|
+
transition-duration: ${"200ms"};
|
|
17
|
+
transition-timing-function: ${"cubic-bezier(0.4, 0, 0.2, 1)"};
|
|
19
18
|
`;
|
|
20
19
|
const TextAreaWithStyle = forwardRef(function TextAreaWithStyle({ size, ...props }, ref) {
|
|
21
20
|
const { inputId } = useFormField(props);
|
|
@@ -30,4 +29,4 @@ const TextAreaWithStyle = forwardRef(function TextAreaWithStyle({ size, ...props
|
|
|
30
29
|
//#endregion
|
|
31
30
|
export { TextAreaWithStyle as t };
|
|
32
31
|
|
|
33
|
-
//# sourceMappingURL=TextArea-
|
|
32
|
+
//# sourceMappingURL=TextArea-CQ1YNi2b.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextArea-CQ1YNi2b.mjs","names":[],"sources":["../src/components/TextArea/TextArea.tsx"],"sourcesContent":["import { type ComponentPropsWithoutRef, forwardRef } from 'react';\nimport styled from 'styled-components';\n\nimport useFormField from '#src/components/FormControl/useFormField';\nimport inputMixin, { type InputMixinProps } from '#src/mixins/input';\nimport type { InputProps } from '#src/types/InputProps';\nimport { TransitionDuration, TransitionEasing } from '#src/variables/transitions';\n\nexport interface TextAreaProps\n extends ComponentPropsWithoutRef<'textarea'>, Omit<InputProps, 'inputSize'> {}\n\nconst TextArea = styled('textarea')<InputMixinProps>`\n ${inputMixin};\n /* Don't cut off overflow text */\n padding-bottom: 0;\n font-family: ${({ theme }) => theme.text.fontFamily.base};\n height: ${({ theme }) => theme.element.height.xl};\n white-space: pre-wrap;\n transition-property: background-color, color, border-color;\n transition-duration: ${TransitionDuration.Fast};\n transition-timing-function: ${TransitionEasing.Move};\n`;\n\nconst TextAreaWithStyle = forwardRef<HTMLTextAreaElement, TextAreaProps>(function TextAreaWithStyle(\n { size, ...props },\n ref,\n) {\n const { inputId } = useFormField(props);\n\n return (\n <TextArea\n id={inputId}\n aria-invalid={props.hasError === true}\n ref={ref}\n {...props}\n $size={size}\n />\n );\n});\n\nexport { TextAreaWithStyle as TextArea };\nexport default TextAreaWithStyle;\n"],"mappings":";;;;;;;AAWA,MAAM,WAAW,OAAO,WAAW;IAC/B,WAAW;;;kBAGG,EAAE,YAAY,MAAM,KAAK,WAAW,KAAK;aAC9C,EAAE,YAAY,MAAM,QAAQ,OAAO,GAAG;;;iCAGF;+DACK;;AAGtD,MAAM,oBAAoB,WAA+C,SAAS,kBAChF,EAAE,MAAM,GAAG,SACX,KACA;CACA,MAAM,EAAE,YAAY,aAAa,MAAM;AAEvC,QACE,oBAAC,UAAD;EACE,IAAI;EACJ,gBAAc,MAAM,aAAa;EAC5B;EACL,GAAI;EACJ,OAAO;EACP,CAAA;EAEJ"}
|
|
@@ -38,7 +38,7 @@ const Container = styled.div`
|
|
|
38
38
|
position: relative;
|
|
39
39
|
`;
|
|
40
40
|
const Switch = styled.div`
|
|
41
|
-
transition: box-shadow ${"200ms"};
|
|
41
|
+
transition: box-shadow ${"200ms"} ${"cubic-bezier(0.4, 0, 0.2, 1)"};
|
|
42
42
|
position: relative;
|
|
43
43
|
display: inline-flex;
|
|
44
44
|
height: ${({ size }) => SWITCH_SIZES[size].height}px;
|
|
@@ -70,7 +70,7 @@ const Switch = styled.div`
|
|
|
70
70
|
return checked ? Color.BackgroundInputActive : Color.BackgroundInputToggle;
|
|
71
71
|
}};
|
|
72
72
|
|
|
73
|
-
transition: ${"
|
|
73
|
+
transition: background-color ${"200ms"} ${"cubic-bezier(0.4, 0, 0.2, 1)"};
|
|
74
74
|
border-radius: 1000px;
|
|
75
75
|
|
|
76
76
|
${(props) => !props.checked && props.disabled ? semanticOnly((tokens) => `opacity: ${opacityOf(tokens.Opacity65)};`)(props) : ""}
|
|
@@ -88,9 +88,13 @@ const Switch = styled.div`
|
|
|
88
88
|
width: ${({ size }) => SLIDER_SIZES[size].diameter}px;
|
|
89
89
|
bottom: ${({ size }) => SLIDER_SIZES[size].offset}px;
|
|
90
90
|
background-color: ${({ theme }) => semanticColor(theme, "InputSurfaceInverseStatic", Color.BackgroundInputDefault)};
|
|
91
|
-
transition: ${"
|
|
91
|
+
transition: transform ${"200ms"} ${"cubic-bezier(0.4, 0, 0.2, 1)"};
|
|
92
92
|
border-radius: 1000px;
|
|
93
93
|
|
|
94
|
+
@media (prefers-reduced-motion: reduce) {
|
|
95
|
+
transition: none;
|
|
96
|
+
}
|
|
97
|
+
|
|
94
98
|
right: ${({ size }) => SLIDER_SIZES[size].offset}px;
|
|
95
99
|
|
|
96
100
|
${({ checked, size }) => !checked && css`
|
|
@@ -179,4 +183,4 @@ const Toggle = forwardRef(function Toggle({ className, disabled, required, title
|
|
|
179
183
|
//#endregion
|
|
180
184
|
export { Toggle as t };
|
|
181
185
|
|
|
182
|
-
//# sourceMappingURL=Toggle-
|
|
186
|
+
//# sourceMappingURL=Toggle-CzHoIR-n.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toggle-CzHoIR-n.mjs","names":[],"sources":["../src/components/Toggle/Toggle.tsx"],"sourcesContent":["import { forwardRef, type ReactNode, useCallback, useRef } from 'react';\nimport { useId } from 'react-aria';\nimport styled, { css } from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\n\nimport useFormField from '#src/components/FormControl/useFormField';\nimport { Label } from '#src/components/Text';\nimport { opacityOf } from '#src/lib/color';\nimport { isDisabled, isHovered, isNotDisabled } from '#src/lib/pseudoClass';\nimport { semanticColor, semanticOnly, semanticTokens } from '#src/lib/semanticColor';\nimport useToggle from '#src/lib/useToggle';\nimport { focusOutlineControlled } from '#src/mixins/focus';\nimport { TransitionDuration, TransitionEasing } from '#src/variables/transitions';\n\ntype ToggleSize = 'md' | 'sm';\n\ninterface SwitchSizes {\n width: number;\n height: number;\n}\n\nconst SWITCH_SIZES: Record<ToggleSize, SwitchSizes> = {\n md: { width: 32, height: 18 },\n sm: { width: 28, height: parseInt(Spacing[4], 10) }, // 16px height from tokens\n};\n\ninterface SliderSizes {\n diameter: number;\n offset: number;\n}\n\nconst SLIDER_SIZES: Record<ToggleSize, SliderSizes> = {\n md: { diameter: 14, offset: 2 },\n sm: { diameter: parseInt(Spacing[3], 10), offset: 2 }, // 12px diameter from tokens\n};\n\nconst Container = styled.div`\n display: inline-flex;\n align-items: center;\n position: relative;\n`;\n\ntype SwitchProps = Pick<ToggleProps, 'disabled'> & {\n checked: boolean;\n focused: boolean;\n size: ToggleSize;\n};\nconst Switch = styled.div<SwitchProps>`\n transition: box-shadow ${TransitionDuration.Fast} ${TransitionEasing.Move};\n position: relative;\n display: inline-flex;\n height: ${({ size }) => SWITCH_SIZES[size].height}px;\n width: ${({ size }) => SWITCH_SIZES[size].width}px;\n border-radius: 1000px;\n cursor: pointer;\n &${isDisabled} {\n cursor: not-allowed;\n }\n\n ${focusOutlineControlled}\n\n /* Background */\n &:before {\n position: absolute;\n content: '';\n height: ${({ size }) => SWITCH_SIZES[size].height}px;\n width: ${({ size }) => SWITCH_SIZES[size].width}px;\n top: 0;\n right: 0;\n bottom: 0;\n background-color: ${({ theme, checked, disabled }) => {\n const tokens = semanticTokens(theme);\n if (tokens) {\n if (disabled) {\n return checked ? tokens.InputSurfaceAccentDisabled : tokens.BorderDivider;\n }\n return checked ? tokens.InputSurfaceAccent : tokens.InputBorderStrong;\n }\n if (disabled) {\n return checked ? Color.BackgroundInputActiveDisabled : Color.BackgroundInputDisabled;\n }\n return checked ? Color.BackgroundInputActive : Color.BackgroundInputToggle;\n }};\n\n transition: background-color ${TransitionDuration.Fast} ${TransitionEasing.Move};\n border-radius: 1000px;\n\n ${(props) =>\n !props.checked && props.disabled\n ? semanticOnly((tokens) => `opacity: ${opacityOf(tokens.Opacity65)};`)(props)\n : ''}\n }\n\n &${isHovered}${isNotDisabled}:before {\n background-color: ${({ theme, checked }) =>\n checked\n ? semanticColor(theme, 'InputSurfaceAccentHover', Color.BackgroundInputActiveHover)\n : semanticColor(theme, 'InputBorderHoverStrong', Color.BackgroundInputToggleHover)};\n }\n\n /* Slider thumb */\n &:after {\n position: absolute;\n content: '';\n height: ${({ size }) => SLIDER_SIZES[size].diameter}px;\n width: ${({ size }) => SLIDER_SIZES[size].diameter}px;\n bottom: ${({ size }) => SLIDER_SIZES[size].offset}px;\n background-color: ${({ theme }) => semanticColor(theme, 'InputSurfaceInverseStatic', Color.BackgroundInputDefault)};\n transition: transform ${TransitionDuration.Fast} ${TransitionEasing.Move};\n border-radius: 1000px;\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n\n right: ${({ size }) => SLIDER_SIZES[size].offset}px;\n\n ${({ checked, size }) =>\n !checked &&\n css`\n transform: translateX(-${getSlideDistance(size)}px);\n `}\n\n ${(props) =>\n props.disabled\n ? semanticOnly((tokens) => `opacity: ${opacityOf(tokens.Opacity65)};`)(props)\n : ''}\n }\n`;\n\nconst ToggleLabel = styled(Label)<Pick<ToggleProps, 'disabled' | 'size'>>`\n cursor: ${({ disabled }) => (disabled ? 'initial' : 'pointer')};\n color: ${({ theme }) => semanticColor(theme, 'FgSecondary', Color.TextSecondary)};\n\n padding: 0 ${Spacing[2]};\n white-space: nowrap;\n line-height: ${({ size = 'md' }) => `${SWITCH_SIZES[size].height}px`};\n\n ${({ theme, disabled }) =>\n disabled &&\n css`\n color: ${semanticColor(theme, 'FgDisabled', theme.color.text.disabled)};\n `}\n`;\n\nfunction getSlideDistance(size: ToggleSize) {\n const switchSize = SWITCH_SIZES[size];\n const sliderSize = SLIDER_SIZES[size];\n return switchSize.width - sliderSize.diameter - sliderSize.offset * 2;\n}\n\nconst HiddenInput = styled.input`\n height: 0;\n width: 0;\n margin: -1px;\n border: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n position: absolute;\n`;\n\nexport interface ToggleProps {\n className?: string;\n /** Disables interaction and renders the toggle in a muted style. */\n disabled?: boolean;\n /** Marks the switch as required (sets aria-required). */\n required?: boolean;\n /**\n * Tooltip / title shown on the root element when the toggle is off.\n * @defaultValue 'Off'\n */\n titleOff?: string;\n /**\n * Tooltip / title shown on the root element when the toggle is on.\n * @defaultValue 'On'\n */\n titleOn?: string;\n /**\n * Called with the new boolean value when the user clicks the toggle.\n * The component is fully controlled — you must update `value` in response.\n */\n onChange?: (value: boolean) => void;\n /**\n * Current on/off state. Falsy values (`false`, `null`, `undefined`, `''`)\n * are treated as off; `true` is treated as on.\n */\n value: boolean | null | undefined | '';\n /** `id` forwarded to the visible switch element. */\n id?: string;\n /** Label node rendered to the left of the switch when the toggle is on. */\n labelOn?: ReactNode;\n /**\n * Label node rendered to the left of the switch when the toggle is off.\n * Falls back to `labelOn` when not provided.\n */\n labelOff?: ReactNode;\n 'data-test'?: string;\n /**\n * Accessible label for the hidden `<input role=\"switch\">`.\n * Required when no visible label is provided via `labelOn` / `labelOff`.\n */\n 'aria-label'?: string;\n /**\n * Size of the toggle switch.\n * @defaultValue 'md'\n */\n size?: ToggleSize;\n}\n\nexport const Toggle = forwardRef<HTMLDivElement, ToggleProps>(function Toggle(\n {\n className,\n disabled,\n required,\n titleOff = 'Off',\n titleOn = 'On',\n onChange = () => undefined,\n value,\n id,\n labelOn,\n labelOff,\n 'data-test': dataTest,\n 'aria-label': ariaLabel,\n size = 'md',\n },\n ref,\n) {\n const field = useFormField({ disabled });\n const generatedId = useId();\n const label = value ? labelOn : labelOff || labelOn;\n\n const [focused, { enable: setFocus, disable: clearFocus }] = useToggle();\n\n const handleChange = useCallback(() => {\n onChange(!value);\n inputRef.current?.focus();\n }, [onChange, value]);\n\n const inputRef = useRef<HTMLInputElement>();\n\n return (\n <Container\n className={className}\n data-test={dataTest}\n title={value ? titleOn : titleOff}\n ref={ref}\n >\n {label != null && (\n <ToggleLabel htmlFor={generatedId} disabled={field.disabled} size={size}>\n {label}\n </ToggleLabel>\n )}\n <Switch\n id={id}\n checked={!!value}\n disabled={field.disabled}\n focused={focused}\n onClick={field.disabled ? undefined : handleChange}\n size={size}\n />\n <HiddenInput\n id={generatedId}\n /* @ts-expect-error [strict-migration] The following line is not strict; please fix! */\n ref={inputRef}\n data-test-toggle-status={value ? 'on' : 'off'}\n disabled={field.disabled}\n type='checkbox'\n checked={!!value}\n readOnly={true}\n onChange={disabled ? undefined : handleChange}\n onFocus={setFocus}\n onBlur={clearFocus}\n aria-checked={!!value}\n role='switch'\n aria-readonly={field.disabled}\n aria-required={required || undefined}\n {...(label\n ? { 'aria-labelledby': generatedId }\n : { 'aria-label': ariaLabel ?? (value ? 'Toggle on' : 'Toggle off') })}\n />\n </Container>\n );\n});\n\nexport default Toggle;\n"],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@ import { a as styled, o as useTheme } from "./styledComponentsInterop-Cs5CCPRy.m
|
|
|
2
2
|
import { semanticColor, semanticOnly } from "./lib/semanticColor.mjs";
|
|
3
3
|
import { paragraphMixins } from "./mixins/text.mjs";
|
|
4
4
|
import { t as Card_default } from "./Card-DuQHyroh.mjs";
|
|
5
|
-
import { fadeIn } from "./variables/keyframes.mjs";
|
|
6
|
-
import "./variables/transitions.mjs";
|
|
5
|
+
import { fadeIn, fadeOut } from "./variables/keyframes.mjs";
|
|
6
|
+
import { ReducedMotionFade } from "./variables/transitions.mjs";
|
|
7
7
|
import { Children, cloneElement } from "react";
|
|
8
8
|
import { Color, Spacing } from "@persona/design-tokens";
|
|
9
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -20,7 +20,20 @@ const FloatingTooltip = styled(Card_default)`
|
|
|
20
20
|
align-items: ${({ contentAlignment }) => contentAlignment || "center"};
|
|
21
21
|
justify-content: center;
|
|
22
22
|
padding: 6px ${Spacing[2]};
|
|
23
|
-
animation: ${fadeIn} ${"200ms"}
|
|
23
|
+
animation: ${fadeIn} ${"200ms"} ${"cubic-bezier(0, 0, 0.2, 1)"};
|
|
24
|
+
|
|
25
|
+
/* Radix keeps the content mounted until this exit animation ends. */
|
|
26
|
+
&[data-state='closed'] {
|
|
27
|
+
animation: ${fadeOut} ${"150ms"} ${"cubic-bezier(0.4, 0, 1, 1)"} both;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@media (prefers-reduced-motion: reduce) {
|
|
31
|
+
&,
|
|
32
|
+
&[data-state='closed'] {
|
|
33
|
+
animation-duration: ${ReducedMotionFade.duration};
|
|
34
|
+
animation-timing-function: ${ReducedMotionFade.easing};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
24
37
|
z-index: ${({ zIndex }) => zIndex};
|
|
25
38
|
margin: 0;
|
|
26
39
|
max-width: ${({ maxWidth }) => maxWidth || "250px"};
|
|
@@ -120,4 +133,4 @@ const TextUnderlineTooltip = ({ children, tooltip, ...props }) => {
|
|
|
120
133
|
//#endregion
|
|
121
134
|
export { Tooltip as a, FloatingTooltip as i, TextWithDashedUnderline as n, HelperTooltip as r, TextUnderlineTooltip as t };
|
|
122
135
|
|
|
123
|
-
//# sourceMappingURL=Tooltip-
|
|
136
|
+
//# sourceMappingURL=Tooltip-CVBxc1yf.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip-CVBxc1yf.mjs","names":["Card","CircleHelpIconSmall"],"sources":["../src/components/Tooltip/Tooltip.tsx","../src/components/Tooltip/HelperTooltip.tsx","../src/components/Tooltip/TextUnderlineTooltip.tsx"],"sourcesContent":["import * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport {\n Children,\n cloneElement,\n type ComponentPropsWithoutRef,\n type ComponentType,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport styled, { type DefaultTheme, type StyledComponent } from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\n\nimport Card, { type CardProps } from '#src/components/Card';\nimport { semanticColor, semanticOnly } from '#src/lib/semanticColor';\nimport { paragraphMixins } from '#src/mixins/text';\nimport { fadeIn, fadeOut } from '#src/variables/keyframes';\nimport {\n ReducedMotionFade,\n TransitionDuration,\n TransitionEasing,\n} from '#src/variables/transitions';\n\ninterface FloatingTooltipProps extends CardProps {\n zIndex?: number;\n contentAlignment: 'start' | 'center' | 'end';\n maxWidth?: string;\n size?: 'sm' | 'md';\n}\n\nexport const FloatingTooltip: StyledComponent<\n ComponentType<ComponentPropsWithoutRef<typeof Card>>,\n DefaultTheme,\n FloatingTooltipProps\n> = styled(Card)<FloatingTooltipProps>`\n ${({ size = 'md' }) => (size === 'sm' ? paragraphMixins.sm : paragraphMixins.md)};\n line-height: ${({ size = 'md' }) => (size === 'sm' ? '16px' : '20px')};\n box-shadow: 0px 0px 14px 2px rgba(0, 0, 0, 0.12);\n border-radius: 4px;\n display: flex;\n align-items: ${({ contentAlignment }) => contentAlignment || 'center'};\n justify-content: center;\n padding: 6px ${Spacing[2]};\n animation: ${fadeIn} ${TransitionDuration.Fast} ${TransitionEasing.Enter};\n\n /* Radix keeps the content mounted until this exit animation ends. */\n &[data-state='closed'] {\n animation: ${fadeOut} ${TransitionDuration.Faster} ${TransitionEasing.Exit} both;\n }\n\n @media (prefers-reduced-motion: reduce) {\n &,\n &[data-state='closed'] {\n animation-duration: ${ReducedMotionFade.duration};\n animation-timing-function: ${ReducedMotionFade.easing};\n }\n }\n z-index: ${({ zIndex }) => zIndex};\n margin: 0;\n max-width: ${({ maxWidth }) => maxWidth || '250px'};\n ${semanticOnly((tokens) => `background-color: ${tokens.SurfaceElevated};`)}\n color: ${({ theme }) => semanticColor(theme, 'FgPrimary', Color.TextPrimary)};\n`;\n\nconst TooltipArrow = styled.div`\n width: 0;\n height: 0;\n border-color: ${({ theme }) => semanticColor(theme, 'SurfaceElevated', theme.color.background.primary)};\n border-left: 8px solid transparent;\n border-top: 8px solid ${({ theme }) => semanticColor(theme, 'SurfaceElevated', theme.color.background.primary)};\n border-right: 8px solid transparent;\n`;\n\nconst TooltipIcon = styled.div`\n display: inline-flex;\n`;\n\ninterface TooltipBaseProps\n extends\n Omit<TooltipPrimitive.TooltipProps, 'disableHoverableContent'>,\n TooltipPrimitive.TooltipContentProps {\n /**\n * Optionally hide tooltip arrow.\n */\n hideArrow?: boolean;\n\n children?: ReactNode;\n\n /**\n * Disabling will prevent tooltip from rendering on the trigger\n */\n disabled?: boolean;\n\n /**\n * Render in a portal.\n * Disable to render adjacent to trigger for rendering within elements such as modals\n */\n portal?: boolean;\n\n /**\n * Props applied to Radix UI Portal component\n */\n portalProps?: TooltipPrimitive.TooltipPortalProps;\n\n /**\n * Determines if the tooltip closes when the mouse hovers into the tooltip content area\n */\n interactive?: boolean;\n\n /**\n * Override the zIndex in case the tooltip is used in situations where the content is\n * already elevated\n */\n zIndex?: number;\n\n /**\n * Max width of the contents in the tooltip\n */\n maxWidth?: string;\n\n /**\n * Props to apply to Tooltip.Trigger within\n */\n triggerProps?: TooltipPrimitive.TooltipTriggerProps;\n\n /**\n * Size of the tooltip. Defaults to 'md'.\n */\n size?: 'sm' | 'md';\n}\n\nexport interface TooltipStandardProps extends TooltipBaseProps {\n /**\n * Element that will trigger the tooltip. A `ref` will be set.\n */\n trigger: ReactElement;\n\n iconTrigger?: never;\n\n className?: never;\n\n contentAlignment?: 'start' | 'center' | 'end';\n}\n\nexport interface TooltipWithIconProps extends TooltipBaseProps {\n trigger?: never;\n\n /**\n * Icon that will trigger the tooltip. A wrapper div will be set.\n */\n iconTrigger: ReactElement;\n\n className?: string;\n\n contentAlignment?: 'start' | 'center' | 'end';\n}\n\ntype TooltipProps = TooltipStandardProps | TooltipWithIconProps;\n\nexport const Tooltip = ({\n trigger: triggerProp,\n iconTrigger,\n side = 'bottom',\n hideArrow,\n defaultOpen,\n open,\n delayDuration = 300,\n onOpenChange,\n interactive = true,\n children,\n 'aria-label': ariaLabel,\n portal = true,\n disabled = false,\n className,\n maxWidth,\n zIndex = 10,\n triggerProps,\n portalProps,\n contentAlignment,\n size = 'md',\n ...contentProps\n}: TooltipProps) => {\n let trigger;\n\n if (iconTrigger) {\n trigger = (\n <TooltipIcon tabIndex={0} aria-label={ariaLabel} className={className}>\n {cloneElement(iconTrigger, { focusable: false, 'aria-hidden': true })}\n </TooltipIcon>\n );\n } else {\n trigger = triggerProp;\n }\n\n // quick way to check if children are renderable. null, false, and true will be filtered out when converting to an array\n const hasRenderableChildren = Children.toArray(children).length > 0;\n\n const content = (\n <TooltipPrimitive.Content side={side} sideOffset={8} asChild {...contentProps}>\n <FloatingTooltip\n zIndex={zIndex}\n contentAlignment={contentAlignment}\n maxWidth={maxWidth}\n size={size}\n >\n {children}\n {!hideArrow && (\n <TooltipPrimitive.Arrow asChild>\n <TooltipArrow />\n </TooltipPrimitive.Arrow>\n )}\n </FloatingTooltip>\n </TooltipPrimitive.Content>\n );\n\n return (\n <TooltipPrimitive.Provider delayDuration={delayDuration}>\n <TooltipPrimitive.Root\n open={open}\n defaultOpen={defaultOpen}\n disableHoverableContent={!interactive}\n onOpenChange={onOpenChange}\n >\n <TooltipPrimitive.Trigger asChild aria-label={ariaLabel} {...triggerProps}>\n {trigger}\n </TooltipPrimitive.Trigger>\n\n {!disabled &&\n hasRenderableChildren &&\n (portal ? (\n <TooltipPrimitive.Portal {...portalProps}>{content}</TooltipPrimitive.Portal>\n ) : (\n content\n ))}\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n};\n\nexport default Tooltip;\n","import type { ReactNode } from 'react';\nimport { useTheme } from 'styled-components';\n\nimport { Color } from '@persona/design-tokens';\nimport { CircleHelpIcon } from '@persona/icons';\nimport { CircleHelpIcon as CircleHelpIconSmall } from '@persona/icons/12px';\n\nimport { semanticColor } from '#src/lib/semanticColor';\n\nimport Tooltip, { type TooltipWithIconProps } from './Tooltip';\n\nexport interface HelperTooltipProps extends Omit<TooltipWithIconProps, 'iconTrigger'> {\n children: ReactNode;\n size?: 'md' | 'sm';\n}\n\n/**\n * Helper component for rendering help text via help icons.\n */\nconst HelperTooltip = ({ children, size = 'md', ...props }: HelperTooltipProps) => {\n const theme = useTheme();\n const iconColor = semanticColor(theme, 'FgSecondary', Color.BorderIconSecondary);\n return (\n <Tooltip\n size={size}\n iconTrigger={\n size === 'md' ? (\n <CircleHelpIcon color={iconColor} />\n ) : (\n <CircleHelpIconSmall color={iconColor} />\n )\n }\n {...props}\n >\n {children}\n </Tooltip>\n );\n};\n\nexport default HelperTooltip;\n","import type { ReactNode } from 'react';\nimport styled from 'styled-components';\n\nimport { Color } from '@persona/design-tokens';\n\nimport { semanticColor } from '#src/lib/semanticColor';\n\nimport Tooltip, { type TooltipStandardProps } from './Tooltip';\n\nexport const TextWithDashedUnderline = styled.span`\n text-decoration: underline;\n text-decoration-style: dashed;\n text-decoration-color: ${({ theme }) => semanticColor(theme, 'FgTertiary', Color.CoreSlate700)};\n text-underline-offset: 2px;\n text-decoration-thickness: 1px;\n width: fit-content;\n`;\n\ninterface TextUnderlineTooltipProps extends Omit<TooltipStandardProps, 'trigger' | 'iconTrigger'> {\n tooltip: ReactNode;\n}\n\nconst TextUnderlineTooltip = ({ children, tooltip, ...props }: TextUnderlineTooltipProps) => {\n return (\n <Tooltip trigger={<TextWithDashedUnderline>{children}</TextWithDashedUnderline>} {...props}>\n {tooltip}\n </Tooltip>\n );\n};\n\nexport default TextUnderlineTooltip;\n"],"mappings":";;;;;;;;;;;;;AA8BA,MAAa,kBAIT,OAAOA,aAAK;KACX,EAAE,OAAO,WAAY,SAAS,OAAO,gBAAgB,KAAK,gBAAgB,GAAI;kBACjE,EAAE,OAAO,WAAY,SAAS,OAAO,SAAS,OAAQ;;;;kBAItD,EAAE,uBAAuB,oBAAoB,SAAS;;iBAEvD,QAAQ,GAAG;eACb,OAAO,GAAA,QAA2B,GAAA,6BAA0B;;;;iBAI1D,QAAQ,GAAA,QAA6B,GAAA,6BAAyB;;;;;;4BAMnD,kBAAkB,SAAS;mCACpB,kBAAkB,OAAO;;;cAG9C,EAAE,aAAa,OAAO;;gBAEpB,EAAE,eAAe,YAAY,QAAQ;IACjD,cAAc,WAAW,qBAAqB,OAAO,gBAAgB,GAAG,CAAC;YACjE,EAAE,YAAY,cAAc,OAAO,aAAa,MAAM,YAAY,CAAC;;AAG/E,MAAM,eAAe,OAAO,GAAG;;;mBAGZ,EAAE,YAAY,cAAc,OAAO,mBAAmB,MAAM,MAAM,WAAW,QAAQ,CAAC;;2BAE9E,EAAE,YAAY,cAAc,OAAO,mBAAmB,MAAM,MAAM,WAAW,QAAQ,CAAC;;;AAIjH,MAAM,cAAc,OAAO,GAAG;;;AAsF9B,MAAa,WAAW,EACtB,SAAS,aACT,aACA,OAAO,UACP,WACA,aACA,MACA,gBAAgB,KAChB,cACA,cAAc,MACd,UACA,cAAc,WACd,SAAS,MACT,WAAW,OACX,WACA,UACA,SAAS,IACT,cACA,aACA,kBACA,OAAO,MACP,GAAG,mBACe;CAClB,IAAI;AAEJ,KAAI,YACF,WACE,oBAAC,aAAD;EAAa,UAAU;EAAG,cAAY;EAAsB;YACzD,aAAa,aAAa;GAAE,WAAW;GAAO,eAAe;GAAM,CAAC;EACzD,CAAA;KAGhB,WAAU;CAIZ,MAAM,wBAAwB,SAAS,QAAQ,SAAS,CAAC,SAAS;CAElE,MAAM,UACJ,oBAAC,iBAAiB,SAAlB;EAAgC;EAAM,YAAY;EAAG,SAAA;EAAQ,GAAI;YAC/D,qBAAC,iBAAD;GACU;GACU;GACR;GACJ;aAJR,CAMG,UACA,CAAC,aACA,oBAAC,iBAAiB,OAAlB;IAAwB,SAAA;cACtB,oBAAC,cAAD,EAAgB,CAAA;IACO,CAAA,CAEX;;EACO,CAAA;AAG7B,QACE,oBAAC,iBAAiB,UAAlB;EAA0C;YACxC,qBAAC,iBAAiB,MAAlB;GACQ;GACO;GACb,yBAAyB,CAAC;GACZ;aAJhB,CAME,oBAAC,iBAAiB,SAAlB;IAA0B,SAAA;IAAQ,cAAY;IAAW,GAAI;cAC1D;IACwB,CAAA,EAE1B,CAAC,YACA,0BACC,SACC,oBAAC,iBAAiB,QAAlB;IAAyB,GAAI;cAAc;IAAkC,CAAA,GAE7E,SAEkB;;EACE,CAAA;;;;;;;ACxNhC,MAAM,iBAAiB,EAAE,UAAU,OAAO,MAAM,GAAG,YAAgC;CAEjF,MAAM,YAAY,cADJ,UACuB,EAAE,eAAe,MAAM,oBAAoB;AAChF,QACE,oBAAC,SAAD;EACQ;EACN,aACE,SAAS,OACP,oBAAC,gBAAD,EAAgB,OAAO,WAAa,CAAA,GAEpC,oBAACC,kBAAD,EAAqB,OAAO,WAAa,CAAA;EAG7C,GAAI;EAEH;EACO,CAAA;;;;AC1Bd,MAAa,0BAA0B,OAAO,IAAI;;;4BAGtB,EAAE,YAAY,cAAc,OAAO,cAAc,MAAM,aAAa,CAAC;;;;;AAUjG,MAAM,wBAAwB,EAAE,UAAU,SAAS,GAAG,YAAuC;AAC3F,QACE,oBAAC,SAAD;EAAS,SAAS,oBAAC,yBAAD,EAA0B,UAAmC,CAAA;EAAE,GAAI;YAClF;EACO,CAAA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { t as ChartingTokens } from "./charting-C_WcP3tn.mjs";
|
|
2
|
+
import { t as MaybeChartingTheme } from "./semanticColor-BKbCliyl.mjs";
|
|
3
|
+
import { Color } from "@persona/design-tokens";
|
|
4
|
+
|
|
5
|
+
//#region src/components/Chart/chartColors.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* The charting palettes a chart may use. Each maps to a `ChartingColors` palette from
|
|
8
|
+
* `@persona/design-tokens` (or its dark-mode twin under a PDS colour mode):
|
|
9
|
+
*
|
|
10
|
+
* - `qualitative` → `Qualitative` (12): distinct, unordered series. The default; its order is
|
|
11
|
+
* tuned for accessibility, so series take colours in this order.
|
|
12
|
+
* - `sequentialMono` → `SequentialMono` (8): ordered magnitude in one hue.
|
|
13
|
+
* - `sequentialDivergent` → `SequentialDivergent` (10): values diverging around a midpoint.
|
|
14
|
+
*
|
|
15
|
+
* The legacy `Sequential` and `Categorical` palettes are deliberately not offered.
|
|
16
|
+
*
|
|
17
|
+
* @experimental Part of the in-progress PDS charting components; the API may change.
|
|
18
|
+
*/
|
|
19
|
+
type ChartPalette = 'qualitative' | 'sequentialMono' | 'sequentialDivergent';
|
|
20
|
+
/** @experimental */
|
|
21
|
+
declare const CHART_PALETTE_TOKENS: {
|
|
22
|
+
readonly qualitative: "Qualitative";
|
|
23
|
+
readonly sequentialMono: "SequentialMono";
|
|
24
|
+
readonly sequentialDivergent: "SequentialDivergent";
|
|
25
|
+
};
|
|
26
|
+
/** @experimental */
|
|
27
|
+
declare const DEFAULT_CHART_PALETTE: ChartPalette;
|
|
28
|
+
/** @experimental */
|
|
29
|
+
type ChartColorMode = 'light' | 'dark';
|
|
30
|
+
/**
|
|
31
|
+
* A colour override for one series: a Persona `Color` token, or a light/dark pair of tokens.
|
|
32
|
+
* `Color` is a string enum, so a raw hex string (`'#3F48FD'`) does not type-check.
|
|
33
|
+
*
|
|
34
|
+
* Wrap overrides in {@link chartColor} so the `pds/semantic-color` lint rule accepts the `Color.*`
|
|
35
|
+
* reference.
|
|
36
|
+
*
|
|
37
|
+
* @experimental
|
|
38
|
+
*/
|
|
39
|
+
type ChartColor = Color | {
|
|
40
|
+
readonly light: Color;
|
|
41
|
+
readonly dark: Color;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Marks a series colour override as a deliberate chart colour. It returns its argument unchanged;
|
|
45
|
+
* its job is to type-check the override (Persona tokens only, never hex) and to tell the
|
|
46
|
+
* `pds/semantic-color` lint rule that the `Color.*` inside is intended.
|
|
47
|
+
*
|
|
48
|
+
* ```ts
|
|
49
|
+
* { key: 'fraud', label: 'Fraud', color: chartColor(Color.CoreRed600) }
|
|
50
|
+
* { key: 'fraud', label: 'Fraud', color: chartColor({ light: Color.CoreRed600, dark: Color.CoreRed400 }) }
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @experimental
|
|
54
|
+
*/
|
|
55
|
+
declare const chartColor: <C extends ChartColor>(color: C) => C;
|
|
56
|
+
/** One series as far as colour resolution is concerned. @experimental */
|
|
57
|
+
interface ChartSeriesColorInput<K extends string = string> {
|
|
58
|
+
key: K;
|
|
59
|
+
color?: ChartColor;
|
|
60
|
+
}
|
|
61
|
+
/** @experimental */
|
|
62
|
+
interface ResolveSeriesColorsOptions {
|
|
63
|
+
/** Palettes for the active colour mode, e.g. `chartingColors(theme)`. Defaults to light. */
|
|
64
|
+
tokens?: ChartingTokens;
|
|
65
|
+
/** Defaults to `'qualitative'`. */
|
|
66
|
+
palette?: ChartPalette;
|
|
67
|
+
/** Picks the side of a light/dark override pair. Defaults to `'light'`. */
|
|
68
|
+
mode?: ChartColorMode;
|
|
69
|
+
}
|
|
70
|
+
/** The ordered colours of `palette` in `tokens`. @experimental */
|
|
71
|
+
declare const chartPaletteColors: (tokens: ChartingTokens, palette?: ChartPalette) => readonly Color[];
|
|
72
|
+
/** Resolves an override to the single token for `mode`. @experimental */
|
|
73
|
+
declare const resolveChartColor: (color: ChartColor, mode: ChartColorMode) => Color;
|
|
74
|
+
/** `'dark'` when `theme` carries the dark charting palettes, else `'light'`. @experimental */
|
|
75
|
+
declare const chartColorModeOf: (theme: MaybeChartingTheme | undefined) => ChartColorMode;
|
|
76
|
+
/**
|
|
77
|
+
* Assigns each series a colour token, keyed by series key.
|
|
78
|
+
*
|
|
79
|
+
* Series without an override take the palette colour at their own index, so a series keeps its
|
|
80
|
+
* colour when another is hidden or overridden. Past the end of the palette colours repeat and a
|
|
81
|
+
* development warning suggests grouping the extra series (e.g. into "Other"): never invent colours.
|
|
82
|
+
*
|
|
83
|
+
* @experimental
|
|
84
|
+
*/
|
|
85
|
+
declare function resolveSeriesColors<K extends string>(series: readonly ChartSeriesColorInput<K>[], {
|
|
86
|
+
tokens,
|
|
87
|
+
palette,
|
|
88
|
+
mode
|
|
89
|
+
}?: ResolveSeriesColorsOptions): Record<K, Color>;
|
|
90
|
+
//#endregion
|
|
91
|
+
export { CHART_PALETTE_TOKENS, ChartColor, ChartColorMode, ChartPalette, ChartSeriesColorInput, DEFAULT_CHART_PALETTE, ResolveSeriesColorsOptions, chartColor, chartColorModeOf, chartPaletteColors, resolveChartColor, resolveSeriesColors };
|
|
92
|
+
//# sourceMappingURL=chartColors.d.mts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as _$react from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/components/Chart/chartFrameLayout.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Where a `ChartFrame` places its legend:
|
|
6
|
+
* - `'stack'` (default): left-aligned above the plot; legend items run in a wrapping row.
|
|
7
|
+
* - `'right'`: inline to the right of the plot, top-aligned; legend items run in a column.
|
|
8
|
+
*
|
|
9
|
+
* @experimental Part of the in-progress PDS charting components; the API may change.
|
|
10
|
+
*/
|
|
11
|
+
type ChartLegendPosition = 'stack' | 'right';
|
|
12
|
+
/** @experimental */
|
|
13
|
+
declare const DEFAULT_CHART_LEGEND_POSITION: ChartLegendPosition;
|
|
14
|
+
/**
|
|
15
|
+
* Plot height in px when a `ChartFrame` is given none. The plot always fills the frame's width.
|
|
16
|
+
*
|
|
17
|
+
* @experimental
|
|
18
|
+
*/
|
|
19
|
+
declare const CHART_DEFAULT_HEIGHT = 300;
|
|
20
|
+
/**
|
|
21
|
+
* Opacity of a de-emphasised series: a hidden series' legend swatch, and the series a pointer is
|
|
22
|
+
* not on (its popover row and its segment in the hovered bar).
|
|
23
|
+
*
|
|
24
|
+
* @experimental
|
|
25
|
+
*/
|
|
26
|
+
declare const CHART_INACTIVE_OPACITY = 0.65;
|
|
27
|
+
/**
|
|
28
|
+
* Recharts margin for a plot inside a `ChartFrame`. The frame owns the spacing around the plot
|
|
29
|
+
* (`Spacing[3]` between legend and plot) and lets axis labels overflow the SVG, so the chart adds
|
|
30
|
+
* no margin of its own: `<BarChart margin={CHART_PLOT_MARGIN} ...>`.
|
|
31
|
+
*
|
|
32
|
+
* @experimental
|
|
33
|
+
*/
|
|
34
|
+
declare const CHART_PLOT_MARGIN: {
|
|
35
|
+
readonly top: 0;
|
|
36
|
+
readonly right: 0;
|
|
37
|
+
readonly bottom: 0;
|
|
38
|
+
readonly left: 0;
|
|
39
|
+
};
|
|
40
|
+
/** Provided by `ChartFrame` so its `ChartLegend` lays its items out to match. */
|
|
41
|
+
declare const ChartLegendPositionProvider: _$react.Provider<ChartLegendPosition | undefined>;
|
|
42
|
+
/** The legend position of the enclosing `ChartFrame`, or `undefined` outside one. */
|
|
43
|
+
declare const useChartLegendPosition: () => ChartLegendPosition | undefined;
|
|
44
|
+
//#endregion
|
|
45
|
+
export { CHART_DEFAULT_HEIGHT, CHART_INACTIVE_OPACITY, CHART_PLOT_MARGIN, ChartLegendPosition, ChartLegendPositionProvider, DEFAULT_CHART_LEGEND_POSITION, useChartLegendPosition };
|
|
46
|
+
//# sourceMappingURL=chartFrameLayout.d.mts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { s as FilterConfig } from "./types-
|
|
1
|
+
import { s as FilterConfig } from "./types-NO2GRlM-.mjs";
|
|
2
2
|
import { Dispatch, SetStateAction } from "react";
|
|
3
3
|
import { Column, ColumnFiltersState, Header, RowData, Table } from "@tanstack/react-table";
|
|
4
4
|
|
|
@@ -17,4 +17,4 @@ declare const generateClientFilters: <TData extends RowData>(columns: Array<{
|
|
|
17
17
|
}>, columnFilters: ColumnFiltersState, setColumnFilters: Dispatch<SetStateAction<ColumnFiltersState>>) => FilterConfig[];
|
|
18
18
|
//#endregion
|
|
19
19
|
export { getFilterFnName as n, generateClientFilters as t };
|
|
20
|
-
//# sourceMappingURL=clientFilterUtils-
|
|
20
|
+
//# sourceMappingURL=clientFilterUtils-2TBUC31K.d.mts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as getFilterFnName, t as generateClientFilters } from "./clientFilterUtils-
|
|
1
|
+
import { n as getFilterFnName, t as generateClientFilters } from "./clientFilterUtils-2TBUC31K.mjs";
|
|
2
2
|
export { generateClientFilters, getFilterFnName };
|
|
@@ -3,7 +3,8 @@ import { semanticColor } from "../../lib/semanticColor.mjs";
|
|
|
3
3
|
import { HeadlessAriaButton } from "../../lib/HeadlessAriaButton.mjs";
|
|
4
4
|
import { TruncatedText } from "../../lib/TruncatedText.mjs";
|
|
5
5
|
import { i as Paragraph, n as Heading$1 } from "../../Text-D0vEReED.mjs";
|
|
6
|
-
import "../../variables/
|
|
6
|
+
import { fadeIn } from "../../variables/keyframes.mjs";
|
|
7
|
+
import { ReducedMotionFade } from "../../variables/transitions.mjs";
|
|
7
8
|
import { isFocusedVisible, isNotDisabled } from "../../lib/pseudoClass.mjs";
|
|
8
9
|
import { focusOutlineControlled } from "../../mixins/focus.mjs";
|
|
9
10
|
import { n as Stack, t as HStack } from "../../Stack-Bzom2BTR.mjs";
|
|
@@ -119,11 +120,7 @@ const ChevronContainer = styled.span`
|
|
|
119
120
|
width: ${Spacing[3]};
|
|
120
121
|
height: ${Spacing[3]};
|
|
121
122
|
color: ${({ theme }) => semanticColor(theme, "FgSecondary", Color.BorderIconSecondary)};
|
|
122
|
-
transition: color ${"200ms"}
|
|
123
|
-
|
|
124
|
-
@media (prefers-reduced-motion: reduce) {
|
|
125
|
-
transition: none;
|
|
126
|
-
}
|
|
123
|
+
transition: color ${"200ms"} ${"cubic-bezier(0.4, 0, 0.2, 1)"};
|
|
127
124
|
`;
|
|
128
125
|
const TriggerButton = styled(HeadlessAriaButton)`
|
|
129
126
|
width: 100%;
|
|
@@ -135,13 +132,9 @@ const TriggerButton = styled(HeadlessAriaButton)`
|
|
|
135
132
|
border-radius: 0;
|
|
136
133
|
background-color: transparent;
|
|
137
134
|
color: ${({ theme }) => semanticColor(theme, "FgPrimary", theme.color.text.primary)};
|
|
138
|
-
transition: background-color ${"200ms"}
|
|
135
|
+
transition: background-color ${"200ms"} ${"cubic-bezier(0.4, 0, 0.2, 1)"};
|
|
139
136
|
${focusOutlineControlled}
|
|
140
137
|
|
|
141
|
-
@media (prefers-reduced-motion: reduce) {
|
|
142
|
-
transition: none;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
138
|
&${isFocusedVisible}${isNotDisabled} {
|
|
146
139
|
position: relative;
|
|
147
140
|
z-index: 1;
|
|
@@ -178,10 +171,16 @@ const TitleWrapper = styled.span`
|
|
|
178
171
|
const Panel = styled(DisclosurePanel)`
|
|
179
172
|
height: var(--disclosure-panel-height);
|
|
180
173
|
overflow: clip;
|
|
181
|
-
transition: height ${"200ms"}
|
|
174
|
+
transition: height ${"200ms"} ${"cubic-bezier(0.4, 0, 0.2, 1)"};
|
|
182
175
|
|
|
176
|
+
/* No height motion: on expand the panel opens at once; on collapse it waits for the content's fade
|
|
177
|
+
to finish, then closes. React Aria hides the panel when this delayed transition ends. */
|
|
183
178
|
@media (prefers-reduced-motion: reduce) {
|
|
184
|
-
transition:
|
|
179
|
+
transition: height 0s linear ${ReducedMotionFade.duration};
|
|
180
|
+
|
|
181
|
+
${ItemContainer}[data-expanded] > & {
|
|
182
|
+
transition: none;
|
|
183
|
+
}
|
|
185
184
|
}
|
|
186
185
|
`;
|
|
187
186
|
const TitleHeading = styled(Heading$1)`
|
|
@@ -196,6 +195,16 @@ const TitleHeading = styled(Heading$1)`
|
|
|
196
195
|
`;
|
|
197
196
|
const PanelContent = styled.div`
|
|
198
197
|
padding: ${Spacing[3]} ${Spacing[4]};
|
|
198
|
+
|
|
199
|
+
@media (prefers-reduced-motion: reduce) {
|
|
200
|
+
opacity: 0;
|
|
201
|
+
transition: opacity ${ReducedMotionFade.duration} ${ReducedMotionFade.easing};
|
|
202
|
+
|
|
203
|
+
${ItemContainer}[data-expanded] > ${Panel} > & {
|
|
204
|
+
opacity: 1;
|
|
205
|
+
animation: ${fadeIn} ${ReducedMotionFade.duration} ${ReducedMotionFade.easing};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
199
208
|
`;
|
|
200
209
|
const TitleText = styled.span`
|
|
201
210
|
min-width: 0;
|