@persona/design-system 0.10.5 → 0.10.7
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 +32 -0
- package/dist/Accordion.d.mts +1 -1
- package/dist/AccordionItem.d.mts +1 -1
- package/dist/{Action-Bmo8B-Q3.d.mts → Action-BLMJwLBV.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 +3 -3
- package/dist/Badge-8YzapjWf.mjs.map +1 -1
- package/dist/BooleanValueControl.d.mts +1 -1
- package/dist/BottomPanel.d.mts +7 -0
- package/dist/{Breadcrumb-DnY8n3EL.d.mts → Breadcrumb-chGXhl3V.d.mts} +1 -1
- package/dist/Breadcrumb.d.mts +1 -1
- package/dist/{Breadcrumbs-DRu_JfdI.d.mts → Breadcrumbs-ChKWIuRq.d.mts} +2 -2
- package/dist/Breadcrumbs-Dft2TR4v.mjs.map +1 -1
- package/dist/Breadcrumbs.d.mts +1 -1
- package/dist/{Button-Cg8KyT5M.d.mts → Button-B79_aXfC.d.mts} +4 -4
- package/dist/Button.d.mts +1 -1
- package/dist/{Calendar-D-6WOLJ1.d.mts → Calendar-50D7poM_.d.mts} +1 -1
- package/dist/Calendar.d.mts +1 -1
- package/dist/CalendarBase.d.mts +1 -1
- package/dist/CalendarCell.d.mts +1 -1
- package/dist/CalendarGrid.d.mts +1 -1
- package/dist/{Card-CfECLwQ6.d.mts → Card-DOIqF954.d.mts} +3 -3
- package/dist/Card-DuQHyroh.mjs.map +1 -1
- package/dist/Card.d.mts +1 -1
- package/dist/CardGrouping.d.mts +2 -2
- package/dist/CardV2-BRJbRSts.mjs.map +1 -1
- package/dist/Checkbox-Dr4LMKHV.mjs.map +1 -1
- package/dist/{Checkbox-ZywrdT_h.d.mts → Checkbox-EgYclGfH.d.mts} +1 -1
- package/dist/Checkbox.d.mts +1 -1
- package/dist/{CheckboxGroupField-UHpA38U5.d.mts → CheckboxGroupField-Cw-1UxIW.d.mts} +3 -3
- package/dist/CheckboxGroupField.d.mts +1 -1
- package/dist/ChoicesValueControl.d.mts +1 -1
- package/dist/{Combobox-BXkcQ2aY.d.mts → Combobox-BkDYZlUh.d.mts} +3 -3
- package/dist/Combobox-DQxaOCLA.mjs.map +1 -1
- package/dist/Combobox.d.mts +2 -2
- package/dist/{ComboboxBase-D2rDQHYZ.d.mts → ComboboxBase-1Xy4pnRV.d.mts} +6 -6
- package/dist/ComboboxBase.d.mts +1 -1
- package/dist/{ComboboxMultiSelect-CrvB6ap5.d.mts → ComboboxMultiSelect-DHf7NK7Z.d.mts} +2 -2
- package/dist/ComboboxMultiSelect.d.mts +1 -1
- package/dist/{ComboboxSingleSelect-Dp0iTdDO.d.mts → ComboboxSingleSelect-Ble5PcXQ.d.mts} +4 -4
- package/dist/ComboboxSingleSelect.d.mts +1 -1
- package/dist/{CompactBar-zYfXjFmn.d.mts → CompactBar-DmoFq5i6.d.mts} +3 -3
- package/dist/CompactBar.d.mts +1 -1
- package/dist/{ControlBar-kJ_eWf8f.d.mts → ControlBar-dqzVo6e6.d.mts} +2 -2
- package/dist/ControlBar.d.mts +1 -1
- package/dist/{DataTable-DEJHWrsy.mjs → DataTable-B7QqP6YU.mjs} +8 -7
- package/dist/DataTable-B7QqP6YU.mjs.map +1 -0
- package/dist/{DataTable-C000E74h.d.mts → DataTable-Cblw6bLk.d.mts} +7 -6
- package/dist/DataTable.d.mts +1 -1
- package/dist/{DateField-g7malFm-.d.mts → DateField-CbTxDzYF.d.mts} +2 -2
- package/dist/DateField.d.mts +1 -1
- package/dist/{DatePicker-8kUpFFh8.d.mts → DatePicker-1BADH9Pi.d.mts} +2 -2
- package/dist/{DatePicker-D-_ibUd1.mjs → DatePicker-CHaNe2Es.mjs} +2 -2
- package/dist/DatePicker-CHaNe2Es.mjs.map +1 -0
- package/dist/DatePicker.d.mts +1 -1
- package/dist/{DateRangePicker-Nv4uNuIW.d.mts → DateRangePicker-fq-_pFpg.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-BiFRlSVD.mjs.map +1 -1
- package/dist/DropdownButton.d.mts +2 -2
- package/dist/{DropdownMenu-CQbS7ML5.d.mts → DropdownMenu-DjdNBJqP.d.mts} +2 -2
- package/dist/DropdownMenu-Q8S-9rXm.mjs.map +1 -1
- package/dist/DropdownMenu.d.mts +1 -1
- package/dist/{ErrorProps-Cy-APmdC.d.mts → ErrorProps-D4G9EWX2.d.mts} +1 -1
- package/dist/ErrorProps.d.mts +1 -1
- package/dist/{FieldRegistry-a44G08fS.d.mts → FieldRegistry-CPr7YoG5.d.mts} +2 -2
- package/dist/FieldRegistry.d.mts +1 -1
- package/dist/{FilterBar-BpMguIXl.d.mts → FilterBar-DPCPfr4_.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/{FloatingActionBar-DPA9v_yH.d.mts → FloatingActionBar-u3TJcigs.d.mts} +1 -1
- package/dist/FloatingActionBar.d.mts +1 -1
- package/dist/FloatingToolbar-Df90f7Dm.mjs +493 -0
- package/dist/FloatingToolbar-Df90f7Dm.mjs.map +1 -0
- package/dist/FloatingToolbar.d.mts +1 -1
- package/dist/FormControl-BztNXLn6.mjs.map +1 -1
- package/dist/{FormControl-TkYMZeBd.d.mts → FormControl-D8vpeAPI.d.mts} +2 -2
- package/dist/FormControl.d.mts +1 -1
- package/dist/FormControlLabel.d.mts +1 -1
- package/dist/{FormField-g1zQFM9T.mjs → FormField-BStxmlZT.mjs} +2 -2
- package/dist/FormField-BStxmlZT.mjs.map +1 -0
- package/dist/{FormField-PBo1ctY8.d.mts → FormField-C6vp1Vfe.d.mts} +3 -3
- package/dist/FormField.d.mts +1 -1
- package/dist/{Grid-BtTuj5mR.mjs → Grid-CYpOqTUu.mjs} +1 -1
- package/dist/{Grid-BtTuj5mR.mjs.map → Grid-CYpOqTUu.mjs.map} +1 -1
- package/dist/{Header-fwlbzxYx.d.mts → Header-C9oYPBLv.d.mts} +1 -1
- package/dist/Header.d.mts +1 -1
- package/dist/{HelperTooltip-BLfPfJRN.d.mts → HelperTooltip-jHTdkLQq.d.mts} +2 -2
- package/dist/HelperTooltip.d.mts +1 -1
- package/dist/HighlightedText.d.mts +2 -2
- package/dist/HoverCopyableField-CW7Jxmni.mjs.map +1 -1
- package/dist/{I18nContext-EPmbUprm.d.mts → I18nContext-DzV-RDIh.d.mts} +2 -2
- package/dist/I18nContext.d.mts +1 -1
- package/dist/{IconButton-KhCwTwPx.d.mts → IconButton-CaEvsrOn.d.mts} +2 -2
- package/dist/IconButton-DftINsp7.mjs.map +1 -1
- package/dist/IconButton.d.mts +1 -1
- package/dist/ImageTile.d.mts +1 -1
- package/dist/IndexTableLayout.d.mts +5 -5
- package/dist/InlineCombobox.d.mts +1 -1
- package/dist/InlineInput.d.mts +1 -1
- package/dist/{Input-QNjbGo38.d.mts → Input-DQ2J9wlC.d.mts} +3 -3
- package/dist/Input-DtO3qMnE.mjs.map +1 -1
- package/dist/Input.d.mts +1 -1
- package/dist/{InputProps-BT7-RfnD.d.mts → InputProps-DrG94eFF.d.mts} +2 -2
- package/dist/InputProps.d.mts +1 -1
- package/dist/{Inserter-BnQVEqHV.d.mts → Inserter-CZeKlPqj.d.mts} +1 -1
- package/dist/Inserter.d.mts +1 -1
- package/dist/IntegerValueControl.d.mts +1 -1
- package/dist/Link-DKYmdL9t.mjs.map +1 -1
- package/dist/Link.d.mts +1 -1
- package/dist/ListBox-CDG0EAPg.mjs.map +1 -1
- package/dist/{ListBox-D9SYTzOd.d.mts → ListBox-DxbXE_EE.d.mts} +3 -3
- package/dist/ListBox.d.mts +1 -1
- package/dist/{ListBoxField-CtPDd_Aw.d.mts → ListBoxField-DVLggscv.d.mts} +4 -4
- package/dist/ListBoxField.d.mts +1 -1
- package/dist/LoadingShimmer-oPIv2ESr.mjs.map +1 -1
- package/dist/LoadingShimmer.d.mts +1 -1
- package/dist/{LogicRow-BWIZ7262.d.mts → LogicRow-DG06PsUe.d.mts} +3 -3
- package/dist/LogicRow.d.mts +1 -1
- package/dist/MaskedInput.d.mts +1 -1
- package/dist/{Menu-DizjcMbO.d.mts → Menu-Bq6Lij2L.d.mts} +3 -3
- package/dist/Menu-EIT_MwK6.mjs.map +1 -1
- package/dist/Menu.d.mts +1 -1
- package/dist/{Modal-92O_uW8H.mjs → Modal-BBlilB-B.mjs} +2 -2
- package/dist/Modal-BBlilB-B.mjs.map +1 -0
- package/dist/{Modal-Bhwq1bQJ.d.mts → Modal-kEgKwLg4.d.mts} +2 -2
- package/dist/Modal.d.mts +1 -1
- package/dist/{PageHeader-D2QLrS7-.d.mts → PageHeader-BGGhOS81.d.mts} +2 -2
- package/dist/{PageHeader-BzvA_NNt.mjs → PageHeader-DEKTopzU.mjs} +1 -1
- package/dist/PageHeader-DEKTopzU.mjs.map +1 -0
- package/dist/PageHeader.d.mts +1 -1
- package/dist/{PageLayout-DfAbeFIh.d.mts → PageLayout-B_LKPZD8.d.mts} +1 -1
- package/dist/{PageLayout-DCe3F76N.mjs → PageLayout-DjtGrvJa.mjs} +2 -2
- package/dist/PageLayout-DjtGrvJa.mjs.map +1 -0
- package/dist/PageLayout.d.mts +1 -1
- package/dist/{PageLayoutFrame-CQLREOBH.d.mts → PageLayoutFrame-uf17F41p.d.mts} +1 -1
- package/dist/PageLayoutFrame.d.mts +1 -1
- package/dist/{PageSelector-QaKYtk6y.d.mts → PageSelector-CLeG2gFh.d.mts} +10 -4
- package/dist/PageSelector.d.mts +1 -1
- package/dist/{Pagination-dTsHLVAk.mjs → Pagination-C8hPOu0l.mjs} +15 -11
- package/dist/Pagination-C8hPOu0l.mjs.map +1 -0
- package/dist/{Pagination-DeXorbSK.d.mts → Pagination-y3kn2X_A.d.mts} +11 -3
- package/dist/Pagination.d.mts +1 -1
- package/dist/{PillShell-B35z66jZ.d.mts → PillShell-Clv4b-2w.d.mts} +2 -2
- package/dist/PillShell.d.mts +1 -1
- package/dist/Popover-DordjYNM.mjs.map +1 -1
- package/dist/{ProgressIndicator-COCwRZfK.d.mts → ProgressIndicator-tVvf0cY5.d.mts} +1 -1
- package/dist/{ProgressIndicator-ISARECzW.mjs → ProgressIndicator-zt3ndT9U.mjs} +1 -1
- package/dist/ProgressIndicator-zt3ndT9U.mjs.map +1 -0
- package/dist/ProgressIndicator.d.mts +1 -1
- package/dist/{PseudoClassProps-D_f-JUT1.d.mts → PseudoClassProps-D-sdJdnG.d.mts} +1 -1
- package/dist/PseudoClassProps.d.mts +1 -1
- package/dist/Radio-BlEtetrr.mjs.map +1 -1
- package/dist/{RadioGroup-pyGpWhhj.d.mts → RadioGroup-9AnTQbh9.d.mts} +1 -1
- package/dist/RadioGroup-CMrXmmn4.mjs.map +1 -1
- package/dist/RadioGroup.d.mts +1 -1
- package/dist/{RangeCalendar-BiugsdSP.d.mts → RangeCalendar-D86xh2yV.d.mts} +2 -2
- package/dist/RangeCalendar.d.mts +1 -1
- package/dist/RangeCalendarPresets.d.mts +2 -2
- package/dist/{RouterContext-BUdfr1it.d.mts → RouterContext-Bgg29ZJo.d.mts} +2 -2
- package/dist/RouterContext.d.mts +1 -1
- package/dist/{RouterLink-BKbfvJcM.d.mts → RouterLink-CMCsV5H-.d.mts} +2 -2
- package/dist/RouterLink.d.mts +1 -1
- package/dist/RuleEditorFields.d.mts +2 -2
- package/dist/RulesPill.d.mts +1 -1
- package/dist/{SearchInput-BejaiGsS.d.mts → SearchInput-NlIspWun.d.mts} +2 -2
- package/dist/SearchInput.d.mts +1 -1
- package/dist/SectionHeading.d.mts +1 -1
- package/dist/{SegmentedControl-UV03Ujqn.d.mts → SegmentedControl-C4C5ge4p.d.mts} +1 -1
- package/dist/SegmentedControl-D_DA-MU1.mjs.map +1 -1
- package/dist/SegmentedControl.d.mts +1 -1
- package/dist/{Select-Chk5WB1F.d.mts → Select-By_LoM1n.d.mts} +3 -3
- package/dist/Select-DkUMz4LG.mjs.map +1 -1
- package/dist/Select.d.mts +1 -1
- package/dist/{SingleColumnLayout-DBo35psH.d.mts → SingleColumnLayout-C4qrVyMf.d.mts} +2 -2
- package/dist/SingleColumnLayout.d.mts +1 -1
- package/dist/SmartTextInput.d.mts +6 -6
- package/dist/SmartTextInputField.d.mts +2 -2
- package/dist/SmartTextInputFunctionDialog.d.mts +4 -4
- package/dist/SmartTextInputListbox.d.mts +2 -2
- package/dist/SmartTextInputPopover.d.mts +1 -1
- package/dist/Spacer-C4d9Aho6.mjs.map +1 -1
- package/dist/Spinner-CXb-KUs1.mjs.map +1 -1
- package/dist/{SplitColumnLayout-C6m_mwdf.d.mts → SplitColumnLayout-BXT7AeNx.d.mts} +2 -2
- package/dist/SplitColumnLayout.d.mts +1 -1
- package/dist/{Stack-DrYxBkiF.d.mts → Stack-BqRcxDQM.d.mts} +1 -1
- package/dist/Stack.d.mts +1 -1
- package/dist/{StatusIndicator-pWl1-FLb.mjs → StatusIndicator-Zf75KK3O.mjs} +1 -1
- package/dist/StatusIndicator-Zf75KK3O.mjs.map +1 -0
- package/dist/Sticker-Bi_fezCO.mjs.map +1 -1
- package/dist/{Sticker-sIBnBbHD.d.mts → Sticker-C2zp47FB.d.mts} +4 -4
- package/dist/Sticker.d.mts +1 -1
- package/dist/StringValueControl.d.mts +1 -1
- package/dist/Tab.d.mts +1 -1
- package/dist/TabBar-DpXYsWgS.mjs.map +1 -1
- package/dist/{Table-BJfcRpMX.d.mts → Table-DGl3mDwc.d.mts} +1 -1
- package/dist/Table-DPi4Dt5H.mjs.map +1 -1
- package/dist/Table.d.mts +1 -1
- package/dist/{TableBody-CBz2PjA-.d.mts → TableBody-BbC-H2qj.d.mts} +1 -1
- package/dist/TableBody.d.mts +1 -1
- package/dist/TableBox-BfSF36Gy.mjs.map +1 -1
- package/dist/TableBox.d.mts +2 -2
- package/dist/{TableBoxCell-CwroLAWy.d.mts → TableBoxCell-DuvWTwOm.d.mts} +6 -6
- package/dist/TableBoxCell.d.mts +1 -1
- package/dist/{TableBoxField-B7bHv7uV.d.mts → TableBoxField-DRx24VAz.d.mts} +5 -5
- package/dist/TableBoxField.d.mts +1 -1
- package/dist/{TableBoxRow-Dke8B99J.d.mts → TableBoxRow-DFPTf-bZ.d.mts} +3 -3
- package/dist/TableBoxRow.d.mts +1 -1
- package/dist/{TableBoxRowActions-CkUDVERC.d.mts → TableBoxRowActions-CFCnGc7D.d.mts} +2 -2
- package/dist/TableBoxRowActions.d.mts +1 -1
- package/dist/{TableCell-KHx5JlqZ.d.mts → TableCell-Do9W49SJ.d.mts} +2 -2
- package/dist/TableCell.d.mts +1 -1
- package/dist/{TableControls-BDXOQMr7.mjs → TableControls-Dgle87OP.mjs} +8 -6
- package/dist/TableControls-Dgle87OP.mjs.map +1 -0
- package/dist/{TableControls-DAjx1TYG.d.mts → TableControls-r58fZb_C.d.mts} +6 -5
- package/dist/TableControls.d.mts +1 -1
- package/dist/{TableControlsContext-BEIvE9qN.d.mts → TableControlsContext-nz8GXmXc.d.mts} +2 -2
- package/dist/TableControlsContext.d.mts +1 -1
- package/dist/{TableHead-D5A3bOwt.d.mts → TableHead-CIXIrZGE.d.mts} +1 -1
- package/dist/TableHead.d.mts +1 -1
- package/dist/{TableHeaderCell-BXgnxPpX.d.mts → TableHeaderCell-wKcp8rZj.d.mts} +1 -1
- package/dist/TableHeaderCell.d.mts +1 -1
- package/dist/{TableLayout-Dy5ht8KO.d.mts → TableLayout-0-9FnNvt.d.mts} +1 -1
- package/dist/TableLayout.d.mts +1 -1
- package/dist/{TableRow-C1iGbNjZ.d.mts → TableRow-C011thJ3.d.mts} +2 -2
- package/dist/TableRow.d.mts +1 -1
- package/dist/TableTH.d.mts +1 -1
- package/dist/{TableViewConfigurationDropdown-vYnU0d4k.d.mts → TableViewConfigurationDropdown-D0VcRmd4.d.mts} +2 -2
- package/dist/TableViewConfigurationDropdown.d.mts +1 -1
- package/dist/TechnicalSticker-B_JlBkXZ.mjs.map +1 -1
- package/dist/{Text-SaoRBdB6.d.mts → Text-BgSW0yDb.d.mts} +3 -3
- package/dist/Text-D0vEReED.mjs.map +1 -1
- package/dist/Text.d.mts +1 -1
- package/dist/{TextArea-gtSlghjy.d.mts → TextArea-CyWv8jaV.d.mts} +2 -2
- package/dist/TextArea-Dro-HH8O.mjs.map +1 -1
- package/dist/TextArea.d.mts +1 -1
- package/dist/{TextUnderlineTooltip-DV61avLv.d.mts → TextUnderlineTooltip-CcyG4VkJ.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-BlvrM-Cw.d.mts → Toggle-BIJoB1AA.d.mts} +1 -1
- package/dist/Toggle-D9MzTIZs.mjs.map +1 -1
- package/dist/Toggle.d.mts +1 -1
- package/dist/{Tooltip-CysnLwST.d.mts → Tooltip-CrpfAAfA.d.mts} +2 -2
- package/dist/Tooltip-YViXzMdm.mjs.map +1 -1
- package/dist/Tooltip.d.mts +1 -1
- package/dist/{TruncatedText-YcjNG-zP.d.mts → TruncatedText-DaGx3CX6.d.mts} +1 -1
- package/dist/VersionHistory.d.mts +1 -1
- package/dist/{VersionHistoryItem-Px3ylMMq.d.mts → VersionHistoryItem-Bo78T7y7.d.mts} +1 -1
- package/dist/VersionHistoryItem.d.mts +1 -1
- package/dist/WizardModal.d.mts +2 -2
- package/dist/{accordionTitleTypography-Dlo2YyWd.d.mts → accordionTitleTypography-D7tOgRzj.d.mts} +2 -2
- package/dist/accordionTitleTypography.d.mts +1 -1
- package/dist/{chainTypes-aF5rWav-.d.mts → chainTypes-CLKwXymd.d.mts} +4 -4
- package/dist/{clientFilterUtils-DYKgw2Yq.d.mts → clientFilterUtils-BnASP9Tt.d.mts} +2 -2
- package/dist/clientFilterUtils.d.mts +1 -1
- package/dist/{codec-D8ZKFLgs.d.mts → codec-C4WJftW6.d.mts} +2 -2
- package/dist/codec.d.mts +1 -1
- package/dist/{color-Cy_0z4IY.d.mts → color-Db57Wms_.d.mts} +2 -2
- package/dist/complete-typography.d.mts +1 -1
- package/dist/components/Accordion/index.d.mts +1 -1
- package/dist/components/Accordion/index.mjs.map +1 -1
- package/dist/components/Attribute/index.mjs.map +1 -1
- package/dist/components/Banner/index.mjs.map +1 -1
- package/dist/components/BottomPanel/index.mjs +67 -6
- package/dist/components/BottomPanel/index.mjs.map +1 -1
- package/dist/components/Breadcrumbs/index.d.mts +1 -1
- package/dist/components/Button/index.d.mts +2 -2
- package/dist/components/ButtonGroup/index.mjs.map +1 -1
- package/dist/components/Card/index.d.mts +2 -2
- package/dist/components/CardV2/index.d.mts +1 -1
- package/dist/components/Checkbox/index.d.mts +1 -1
- package/dist/components/CodeHighlight/index.mjs.map +1 -1
- package/dist/components/Combobox/index.d.mts +2 -2
- package/dist/components/DataTable/TableControls/index.d.mts +21 -21
- package/dist/components/DataTable/TableControls/index.mjs +1 -1
- package/dist/components/DataTable/index.d.mts +8 -8
- package/dist/components/DataTable/index.mjs +1 -1
- package/dist/components/DataTable/types.d.mts +1 -1
- package/dist/components/DatePicker/index.d.mts +5 -5
- package/dist/components/DatePicker/index.mjs +1 -1
- package/dist/components/DropdownMenu/index.d.mts +1 -1
- package/dist/components/FloatingPanel/index.mjs.map +1 -1
- package/dist/components/FloatingToolbar/index.d.mts +2 -0
- package/dist/components/FloatingToolbar/index.mjs +2 -0
- package/dist/components/FormControl/index.d.mts +2 -2
- package/dist/components/FormField/index.d.mts +5 -5
- package/dist/components/FormField/index.mjs +1 -1
- package/dist/components/Grid/index.mjs +1 -1
- package/dist/components/ImageTile/index.mjs.map +1 -1
- package/dist/components/Input/index.d.mts +1 -1
- package/dist/components/ListBox/index.d.mts +3 -3
- package/dist/components/MaskedInput/index.mjs.map +1 -1
- package/dist/components/MatchHighlight/index.mjs.map +1 -1
- package/dist/components/Menu/index.d.mts +1 -1
- package/dist/components/Modal/index.d.mts +1 -1
- package/dist/components/Modal/index.mjs +1 -1
- package/dist/components/PageHeader/index.d.mts +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/ProgressBar/index.mjs.map +1 -1
- package/dist/components/ProgressIndicator/index.d.mts +1 -1
- package/dist/components/ProgressIndicator/index.mjs +1 -1
- package/dist/components/RadioGroup/index.d.mts +1 -1
- package/dist/components/RichTextEditor/index.d.mts +1 -2
- package/dist/components/RichTextEditor/index.mjs +22 -477
- package/dist/components/RichTextEditor/index.mjs.map +1 -1
- package/dist/components/RightPanel/index.mjs.map +1 -1
- package/dist/components/SegmentedControl/index.d.mts +1 -1
- package/dist/components/Select/index.d.mts +1 -1
- package/dist/components/SelectionCard/index.mjs.map +1 -1
- package/dist/components/Slider/index.mjs.map +1 -1
- package/dist/components/SmartTextInput/index.d.mts +2 -2
- package/dist/components/SmartTextInput/index.mjs +2 -2
- package/dist/components/SmartTextInput/index.mjs.map +1 -1
- package/dist/components/SmartTextInput/parser/method-chain/types.d.mts +1 -1
- package/dist/components/SmartTextInput/parser/smart-text/types.d.mts +2 -2
- package/dist/components/Stack/index.d.mts +1 -1
- package/dist/components/StatusIndicator/index.mjs +1 -1
- package/dist/components/Sticker/index.d.mts +1 -1
- package/dist/components/SwatchPicker/index.mjs.map +1 -1
- package/dist/components/Table/index.d.mts +8 -8
- package/dist/components/TableBox/index.d.mts +2 -2
- package/dist/components/Text/index.d.mts +1 -1
- package/dist/components/TextArea/index.d.mts +1 -1
- package/dist/components/Tile/index.mjs.map +1 -1
- package/dist/components/Toast/index.mjs.map +1 -1
- package/dist/components/Toggle/index.d.mts +1 -1
- package/dist/components/Tooltip/index.d.mts +3 -3
- package/dist/components/VersionHistory/index.d.mts +1 -1
- package/dist/components/VersionHistory/index.mjs +2 -2
- package/dist/components/VersionHistory/index.mjs.map +1 -1
- package/dist/compound-expression.d.mts +1 -1
- package/dist/{constants-CW1DRgwi.d.mts → constants-B2NIZBD6.d.mts} +1 -1
- package/dist/{constants-D1hoZ5LO.d.mts → constants-ChVceduh.d.mts} +1 -1
- package/dist/constants.d.mts +1 -1
- package/dist/constants2.d.mts +1 -1
- package/dist/{createPath-C4ZFkt93.d.mts → createPath-D_opTH9A.d.mts} +2 -2
- package/dist/createPath.d.mts +1 -1
- package/dist/{date-range-rule-value-CrVBpQcf.d.mts → date-range-rule-value-3izEoXmi.d.mts} +2 -2
- package/dist/date-range-rule-value.d.mts +1 -1
- package/dist/{date-rule-intent-C1aptAoX.d.mts → date-rule-intent-DjYIGcGO.d.mts} +3 -3
- package/dist/date-rule-intent.d.mts +1 -1
- package/dist/display.d.mts +2 -2
- package/dist/fieldPickerOptions.d.mts +2 -2
- package/dist/{filter-size-context-CbT4pi3S.d.mts → filter-size-context-BcpjykVw.d.mts} +2 -2
- package/dist/filter-size-context.d.mts +1 -1
- package/dist/{filters-DjXkx8GJ.d.mts → filters-DUI7TLSn.d.mts} +2 -2
- package/dist/filters.d.mts +1 -1
- package/dist/{formatDateTime-BikGGrvq.d.mts → formatDateTime-CgQvW3A5.d.mts} +1 -1
- package/dist/formatDateTime.d.mts +1 -1
- package/dist/{helpers-CdxEL7ri.d.mts → helpers-CDZ7Zk9G.d.mts} +4 -4
- package/dist/helpers.d.mts +1 -1
- package/dist/{i18n-BLyCaSdJ.mjs → i18n-DaOKaFc2.mjs} +4 -2
- package/dist/i18n-DaOKaFc2.mjs.map +1 -0
- package/dist/{index-BWAycP6L.d.mts → index-B9kfFACl.d.mts} +1 -1
- package/dist/{index-DX5Zu9JU.d.mts → index-CDFw-zKW.d.mts} +3 -3
- package/dist/{index-D2YFHdsf.d.mts → index-DntqThoS.d.mts} +2 -2
- package/dist/{index-FgIOTuJ4.d.mts → index-_D_TMpPU.d.mts} +2 -2
- package/dist/index2.d.mts +1 -1
- package/dist/index3.d.mts +1 -1
- package/dist/index4.d.mts +3 -3
- package/dist/index5.d.mts +1 -1
- package/dist/index6.d.mts +14 -14
- package/dist/{input-gtTnb9M8.d.mts → input-RTMLTvG1.d.mts} +3 -3
- package/dist/{inputFields-CYttsz5M.d.mts → inputFields-iRg_emVK.d.mts} +11 -11
- package/dist/inputFields.d.mts +1 -1
- package/dist/{jsonSchema-DUkfAip_.d.mts → jsonSchema-BJpNaFc4.d.mts} +1 -1
- package/dist/lib/PDSProvider.d.mts +3 -3
- package/dist/lib/PDSProvider.mjs +1 -1
- package/dist/lib/PDSProvider.mjs.map +1 -1
- package/dist/lib/TruncatedText.d.mts +1 -1
- package/dist/lib/TruncatedText.mjs.map +1 -1
- package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
- package/dist/lib/TruncatedTextWithTooltip.mjs.map +1 -1
- package/dist/lib/chainTypes.d.mts +1 -1
- package/dist/lib/color.d.mts +1 -1
- package/dist/lib/color.mjs.map +1 -1
- package/dist/lib/colorMode.d.mts +2 -2
- package/dist/lib/colorMode.mjs.map +1 -1
- package/dist/lib/customFunctionSchema.d.mts +1 -1
- package/dist/lib/date-filter/index.d.mts +2 -2
- package/dist/lib/i18n/index.d.mts +3 -3
- package/dist/lib/i18n/index.mjs +1 -1
- package/dist/lib/jsonSchema.d.mts +1 -1
- package/dist/lib/jsonSchemaType.d.mts +1 -1
- package/dist/lib/message.d.mts +1 -1
- package/dist/lib/methodChain.d.mts +2 -2
- package/dist/lib/methodChainNormalize.d.mts +2 -2
- package/dist/lib/methodChainTypes.d.mts +1 -1
- package/dist/lib/objectSchemaTypes.d.mts +1 -1
- package/dist/lib/platformObject.d.mts +1 -1
- package/dist/lib/pseudoClass.d.mts +1 -1
- package/dist/lib/pseudoClass.mjs.map +1 -1
- package/dist/lib/router/adapters/reactRouter.d.mts +1 -1
- package/dist/lib/router/adapters/tanstack.d.mts +1 -1
- package/dist/lib/router/index.d.mts +5 -5
- package/dist/lib/schemaOptions.d.mts +1 -1
- package/dist/lib/semanticColor.d.mts +1 -1
- package/dist/lib/semanticColor.mjs.map +1 -1
- package/dist/lib/useChain.d.mts +1 -1
- package/dist/lib/useEmbeddedSurface.mjs.map +1 -1
- package/dist/lint/index.d.mts +1 -1
- package/dist/{listbox-options-CkwENvff.d.mts → listbox-options-D0JmYWjB.d.mts} +3 -3
- package/dist/listbox-options.d.mts +1 -1
- package/dist/{message-klSuXfNN.d.mts → message-Bk5UTw75.d.mts} +1 -1
- package/dist/{methodChain-CRYRDa1k.d.mts → methodChain-C3u60_V8.d.mts} +4 -4
- package/dist/{methodChainTypes-BtbYWrdP.d.mts → methodChainTypes-Di4GCMX7.d.mts} +2 -2
- package/dist/min-copy-size.d.mts +1 -1
- package/dist/mixins/focus.d.mts +1 -1
- package/dist/mixins/focus.mjs.map +1 -1
- package/dist/mixins/hoverable.d.mts +2 -2
- package/dist/mixins/hoverable.mjs.map +1 -1
- package/dist/mixins/input.d.mts +1 -1
- package/dist/mixins/input.mjs.map +1 -1
- package/dist/mixins/menuItem.d.mts +2 -2
- package/dist/mixins/menuItem.mjs.map +1 -1
- package/dist/mixins/print/index.mjs.map +1 -1
- package/dist/mixins/scrollbar.d.mts +1 -1
- package/dist/mixins/scrollbar.mjs.map +1 -1
- package/dist/mixins/text.d.mts +1 -1
- package/dist/no-raw-table.d.mts +1 -1
- package/dist/{operators-gCG7uZ6y.d.mts → operators-BTCnQpeu.d.mts} +3 -3
- package/dist/operators.d.mts +1 -1
- package/dist/{palette-C1gBbxLO.d.mts → palette-D61sDyDI.d.mts} +3 -3
- package/dist/palette.d.mts +1 -1
- package/dist/patterns/CardGrouping/index.mjs +1 -1
- package/dist/patterns/CardGrouping/index.mjs.map +1 -1
- package/dist/patterns/IndexTableLayout/index.mjs +3 -3
- package/dist/patterns/IndexTableLayout/index.mjs.map +1 -1
- package/dist/patterns/LayoutLoadingShimmer/index.mjs +1 -1
- package/dist/patterns/LayoutLoadingShimmer/index.mjs.map +1 -1
- package/dist/patterns/LayoutLoadingSpinner/index.mjs.map +1 -1
- package/dist/patterns/PageLayout/index.d.mts +4 -4
- package/dist/patterns/PageLayout/index.mjs +1 -1
- package/dist/patterns/WizardModal/index.mjs +2 -2
- package/dist/patterns/WizardModal/index.mjs.map +1 -1
- package/dist/reactRouterFallback.d.mts +1 -1
- package/dist/reduced-motion.d.mts +1 -1
- package/dist/relative-date-label.d.mts +1 -1
- package/dist/safe-parse.d.mts +1 -1
- package/dist/{schemaOptions-C_JM2-sg.d.mts → schemaOptions-BKtrXvjR.d.mts} +3 -3
- package/dist/{semantic-BLaQSW1r.d.mts → semantic-BZbvb3LV.d.mts} +1 -1
- package/dist/semantic-color.d.mts +1 -1
- package/dist/{semanticColor-Bxufk3ZO.d.mts → semanticColor-y9byerSl.d.mts} +3 -3
- package/dist/shared.d.mts +1 -1
- package/dist/{strings-CK9n6b65.d.mts → strings-T-gsdqiJ.d.mts} +8 -1
- package/dist/strings.d.mts +1 -1
- package/dist/{text-Csytfclh.d.mts → text-CKLxMlG4.d.mts} +1 -1
- package/dist/{theme-mQ4WkH90.d.mts → theme-BFP-_PEh.d.mts} +3 -3
- package/dist/theme.d.mts +1 -1
- package/dist/theme.mjs.map +1 -1
- package/dist/tone.d.mts +3 -3
- package/dist/tree.d.mts +1 -1
- package/dist/{types-B4KbdEDc.d.mts → types-1p-ij0cd.d.mts} +2 -2
- package/dist/{types-Dhz6VMKx.d.mts → types-B5RbKp2V.d.mts} +1 -1
- package/dist/{types-dmItSshr.d.mts → types-Bg_sfqXE.d.mts} +2 -2
- package/dist/{types-CayYd8EX.d.mts → types-BiRayNak.d.mts} +3 -3
- package/dist/{types-XjJqUj-p.d.mts → types-BnXYfNrd.d.mts} +4 -4
- package/dist/{types-C2RhHxbE.d.mts → types-Bu5rhBdH.d.mts} +1 -1
- package/dist/{types-DJobO07d.d.mts → types-C31ecr0j.d.mts} +3 -3
- package/dist/{types-rDQg74j-.d.mts → types-FG-jOit9.d.mts} +1 -1
- package/dist/{types-DbOD5vE_.d.mts → types-K57NVM0M.d.mts} +2 -2
- package/dist/{types-6L0ptM6-.d.mts → types-QYT1VZgy.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/types6.d.mts +1 -1
- package/dist/types8.d.mts +1 -1
- package/dist/{url-state-CmgyDnG7.d.mts → url-state-DmhG0Qg-.d.mts} +2 -2
- package/dist/url-state.d.mts +1 -1
- package/dist/{useChain-7ztbfujM.d.mts → useChain-CIwI4Xop.d.mts} +6 -6
- package/dist/useChain-D1aNsdvn.mjs.map +1 -1
- package/dist/useChainAtCursor.d.mts +6 -6
- package/dist/useCodeChainFunctionPanel.d.mts +1 -1
- package/dist/useColumnConfiguration.d.mts +2 -2
- package/dist/useComboboxFooterAction.d.mts +1 -1
- package/dist/{useFilterStateV2-CPBt0qwc.d.mts → useFilterStateV2-DPzkJpGT.d.mts} +3 -3
- package/dist/useFilterStateV2.d.mts +1 -1
- package/dist/{useFormField-CmEJCqse.d.mts → useFormField-ATKyX8CU.d.mts} +2 -2
- package/dist/useFormField-pOVkb5BK.mjs.map +1 -1
- package/dist/useFormField.d.mts +1 -1
- package/dist/{useLocationPathname-Cnqj8pf4.d.mts → useLocationPathname-DPMpqO1_.d.mts} +1 -1
- package/dist/useLocationPathname.d.mts +1 -1
- package/dist/{useTableBoxDragAndDrop-8NS4JBuI.d.mts → useTableBoxDragAndDrop-CCMADt-F.d.mts} +1 -1
- package/dist/useTableBoxDragAndDrop.d.mts +1 -1
- package/dist/{useTableColumns-BK-KYY0L.d.mts → useTableColumns-Bw0HvnP4.d.mts} +2 -2
- package/dist/useTableColumns.d.mts +1 -1
- package/dist/useTruncation.d.mts +1 -1
- package/dist/{utilities-CXoc5Cyr.d.mts → utilities-BfXjJZQt.d.mts} +1 -1
- package/dist/utilities.d.mts +1 -1
- package/dist/utils/storybook.mjs.map +1 -1
- package/dist/utils/testing.d.mts +1 -1
- package/dist/utils.d.mts +1 -1
- package/dist/utils4.d.mts +5 -5
- package/dist/{validation-BaqPVG1C.d.mts → validation-yhA0siru.d.mts} +3 -3
- package/dist/validation.d.mts +1 -1
- package/dist/validation2.d.mts +4 -4
- package/dist/{value-control-resolver-CMyFwEY7.d.mts → value-control-resolver-Df0AmGFe.d.mts} +2 -2
- package/dist/value-control-resolver.d.mts +1 -1
- package/dist/variables/effect.d.mts +1 -1
- package/dist/variables/effect.mjs.map +1 -1
- package/dist/variables/semantic.d.mts +1 -1
- package/llms.txt +1 -1
- package/package.json +25 -13
- package/skills/ui-authoring/COMPONENTS.md +1 -0
- package/dist/DataTable-DEJHWrsy.mjs.map +0 -1
- package/dist/DatePicker-D-_ibUd1.mjs.map +0 -1
- package/dist/FormField-g1zQFM9T.mjs.map +0 -1
- package/dist/Modal-92O_uW8H.mjs.map +0 -1
- package/dist/PageHeader-BzvA_NNt.mjs.map +0 -1
- package/dist/PageLayout-DCe3F76N.mjs.map +0 -1
- package/dist/Pagination-dTsHLVAk.mjs.map +0 -1
- package/dist/ProgressIndicator-ISARECzW.mjs.map +0 -1
- package/dist/StatusIndicator-pWl1-FLb.mjs.map +0 -1
- package/dist/TableControls-BDXOQMr7.mjs.map +0 -1
- package/dist/i18n-BLyCaSdJ.mjs.map +0 -1
- /package/dist/{index-AnhM47-e2.d.mts → index-BAJc0Rej.d.mts} +0 -0
- /package/dist/{index-B33elXxm.d.mts → index-BFHp82YL.d.mts} +0 -0
- /package/dist/{index-B4woaFSm.d.mts → index-BYd3Btr1.d.mts} +0 -0
- /package/dist/{index-B6T7ov8p.d.mts → index-C6HcjJiY.d.mts} +0 -0
- /package/dist/{index-BNRXMhlr.d.mts → index-CEUVsenl.d.mts} +0 -0
- /package/dist/{index-BPiqSRRl.d.mts → index-CEqOS-7M.d.mts} +0 -0
- /package/dist/{index-BTviwbFV.d.mts → index-CNxS4Tlu.d.mts} +0 -0
- /package/dist/{index-Bo9LXG4r.d.mts → index-CP2eJYlK.d.mts} +0 -0
- /package/dist/{index-Bq9Ub6MB.d.mts → index-CQQezDJQ2.d.mts} +0 -0
- /package/dist/{index-BrGZHEgX.d.mts → index-CWB6exYm.d.mts} +0 -0
- /package/dist/{index-Bt4QNofW.d.mts → index-CcSfkYLp2.d.mts} +0 -0
- /package/dist/{index-CFuHCx9T.d.mts → index-Cm-1i165.d.mts} +0 -0
- /package/dist/{index-CLTQPxoD.d.mts → index-D-giXKyu.d.mts} +0 -0
- /package/dist/{index-CaqYCRmZ.d.mts → index-D4DUvwPf.d.mts} +0 -0
- /package/dist/{index-CjmAoxrR2.d.mts → index-DCTy4zg0.d.mts} +0 -0
- /package/dist/{index-Cx0vQ6ld.d.mts → index-DWIh4oP5.d.mts} +0 -0
- /package/dist/{index-CzItj62a.d.mts → index-Dflz2i1X.d.mts} +0 -0
- /package/dist/{index-CzUpNo0e.d.mts → index-DhiymMxa.d.mts} +0 -0
- /package/dist/{index-DBGd4WeR.d.mts → index-DkrC-i1D.d.mts} +0 -0
- /package/dist/{index-DMRtRo7y.d.mts → index-Dp7lwkTl2.d.mts} +0 -0
- /package/dist/{index-DNjQe1D8.d.mts → index-DqCA6utX.d.mts} +0 -0
- /package/dist/{index-DW3xeuzq.d.mts → index-Iujpc9_6.d.mts} +0 -0
- /package/dist/{index-DZlqSwCF.d.mts → index-Jh0C5PIG.d.mts} +0 -0
- /package/dist/{index-De7MV8-j.d.mts → index-N-OgGgfF.d.mts} +0 -0
- /package/dist/{index-DjG1RCY5.d.mts → index-Oio5ygqN.d.mts} +0 -0
- /package/dist/{index-Dlcv6Ku22.d.mts → index-Rvd9MEUQ.d.mts} +0 -0
- /package/dist/{index-DrK1_jKY.d.mts → index-YB8V3VRW.d.mts} +0 -0
- /package/dist/{index-DztUdPP_.d.mts → index-aKlsLnwy.d.mts} +0 -0
- /package/dist/{index-K614ZhWK.d.mts → index-fxXoW-qc.d.mts} +0 -0
- /package/dist/{index-NKYLt_R9.d.mts → index-ikHBE458.d.mts} +0 -0
- /package/dist/{index-VWno75SQ.d.mts → index-luywJTzJ.d.mts} +0 -0
- /package/dist/{index-uMNhmxEh.d.mts → index-xmouCHX9.d.mts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEmbeddedSurface.mjs","names":[],"sources":["../../src/lib/useEmbeddedSurface.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport {\n EMBEDDED_SURFACE_PROTOCOL_VERSION,\n EMBEDDED_SURFACE_CHANNEL,\n coerceChildboundEnvelope,\n type EmbeddedSurfacePayloads,\n} from 'design-system/lib/embeddedSurfaceProtocol';\nimport {\n getEmbeddedSurfaceTransport,\n subscribeEmbeddedSurfaceTransportChanges,\n type EmbeddedSurfaceTransport,\n} from 'design-system/lib/embeddedSurfaceRegistry';\n\nconst SURFACE_REANNOUNCE_INTERVAL_MS = 2000;\nconst HELLO_ROTATION_THRESHOLD = 2;\n/**\n * How long the overlay stays paused waiting for an acknowledgement. It has to outlast the host's\n * animation lead so a slow acknowledgement still gets used rather than raced by this fallback.\n */\nexport const EMBEDDED_SURFACE_HOST_ACK_TIMEOUT_MS = 80;\n\nlet fallbackId = 0;\ntype SurfaceSession = {\n connectionId: string;\n surfaces: Set<string>;\n leaseTimer?: number;\n unsubscribe?: () => void;\n unansweredHellos: number;\n epoch?: string;\n /** Acknowledged surfaces, keyed to the shared wall-clock instant their animation starts at. */\n acknowledgedAt: Map<string, number>;\n acknowledgementListeners: Map<string, Set<(startAt: number) => void>>;\n};\nconst sessions = new WeakMap<EmbeddedSurfaceTransport, SurfaceSession>();\n\nconst mintId = (prefix: string): string => {\n const randomUUID =\n typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'\n ? crypto.randomUUID()\n : undefined;\n if (randomUUID) {\n return `${prefix}-${randomUUID}`;\n }\n fallbackId += 1;\n return `${prefix}-${fallbackId.toString(36)}`;\n};\n\nconst getSession = (transport: EmbeddedSurfaceTransport) => {\n const current = sessions.get(transport);\n if (current) {\n return current;\n }\n const session: SurfaceSession = {\n connectionId: mintId('connection'),\n surfaces: new Set<string>(),\n unansweredHellos: 0,\n acknowledgedAt: new Map<string, number>(),\n acknowledgementListeners: new Map<string, Set<(startAt: number) => void>>(),\n };\n sessions.set(transport, session);\n return session;\n};\n\nconst send = (\n transport: EmbeddedSurfaceTransport,\n session: SurfaceSession,\n kind: 'hello' | 'surfaceSnapshot',\n payload: EmbeddedSurfacePayloads['hello'] | EmbeddedSurfacePayloads['surfaceSnapshot'],\n) => {\n transport.send({\n channel: EMBEDDED_SURFACE_CHANNEL,\n version: EMBEDDED_SURFACE_PROTOCOL_VERSION,\n connectionId: session.connectionId,\n kind,\n payload,\n });\n};\n\nconst sendSnapshot = (transport: EmbeddedSurfaceTransport, session: SurfaceSession) => {\n if (session.epoch == null) {\n return;\n }\n send(transport, session, 'surfaceSnapshot', {\n epoch: session.epoch,\n surfaces: Array.from(session.surfaces, (surfaceId) => ({ surfaceId })),\n awaitsAck: true,\n });\n};\n\nconst rotateConnection = (session: SurfaceSession) => {\n // The host may have retired this connectionId in its LRU, so hellos stay dropped\n // until a fresh connectionId is minted.\n session.connectionId = mintId('connection');\n session.epoch = undefined;\n session.acknowledgedAt.clear();\n session.unansweredHellos = 0;\n};\n\nconst acknowledgeSurface = (session: SurfaceSession, surfaceId: string, startAt: number) => {\n if (session.acknowledgedAt.has(surfaceId)) {\n return;\n }\n session.acknowledgedAt.set(surfaceId, startAt);\n session.acknowledgementListeners.get(surfaceId)?.forEach((listener) => listener(startAt));\n};\n\nconst startSurfaceLease = (transport: EmbeddedSurfaceTransport, session: SurfaceSession) => {\n if (session.leaseTimer != null) {\n return;\n }\n // Re-announces active surfaces to renew the host's lease. If the child stops\n // running, announcements cease and the host releases shell effects after timeout.\n session.leaseTimer = window.setInterval(() => {\n session.unansweredHellos += 1;\n if (session.unansweredHellos >= HELLO_ROTATION_THRESHOLD) {\n rotateConnection(session);\n }\n send(transport, session, 'hello', {});\n sendSnapshot(transport, session);\n }, SURFACE_REANNOUNCE_INTERVAL_MS);\n};\n\nconst stopSurfaceLease = (session: SurfaceSession) => {\n if (session.leaseTimer == null) {\n return;\n }\n window.clearInterval(session.leaseTimer);\n session.leaseTimer = undefined;\n};\n\nconst activateSession = (transport: EmbeddedSurfaceTransport, session: SurfaceSession) => {\n if (session.unsubscribe != null) {\n return;\n }\n session.epoch = undefined;\n session.acknowledgedAt.clear();\n session.unansweredHellos = 0;\n session.unsubscribe = transport.subscribe((message) => {\n const childbound = coerceChildboundEnvelope(message);\n if (!childbound || childbound.connectionId !== session.connectionId) {\n return;\n }\n session.unansweredHellos = 0;\n if (childbound.kind === 'welcome') {\n if (session.epoch !== childbound.payload.epoch) {\n session.acknowledgedAt.clear();\n }\n session.epoch = childbound.payload.epoch;\n sendSnapshot(transport, session);\n return;\n }\n if (childbound.payload.epoch !== session.epoch) {\n return;\n }\n if (childbound.kind !== 'surfaceAck') {\n return;\n }\n childbound.payload.surfaces.forEach(({ surfaceId }) => {\n acknowledgeSurface(session, surfaceId, childbound.payload.startAt);\n });\n });\n send(transport, session, 'hello', {});\n};\n\nconst deactivateSession = (session: SurfaceSession) => {\n session.unsubscribe?.();\n session.unsubscribe = undefined;\n stopSurfaceLease(session);\n session.epoch = undefined;\n session.acknowledgedAt.clear();\n session.unansweredHellos = 0;\n};\n\nconst useEmbeddedSurfaceTransport = (): EmbeddedSurfaceTransport | null => {\n const [transport, setTransport] = useState<EmbeddedSurfaceTransport | null>(\n getEmbeddedSurfaceTransport,\n );\n\n useEffect(() => {\n const unsubscribe = subscribeEmbeddedSurfaceTransportChanges(() => {\n setTransport(getEmbeddedSurfaceTransport());\n });\n // A transport can register between render and this effect, and the registry only\n // notifies on change, so reconcile once the subscription is installed.\n setTransport(getEmbeddedSurfaceTransport());\n return unsubscribe;\n }, []);\n\n return transport;\n};\n\n/** Mints an id for a surface whose registration and host gate live in separate components. */\nexport const useEmbeddedSurfaceId = (): string => {\n const [surfaceId] = useState(() => mintId('surface'));\n return surfaceId;\n};\n\n/**\n * Announces the surface to the host for as long as the caller is mounted. Callers must render\n * only while their overlay is on screen: the host dims the shell around every announced surface,\n * and holding the announcement through React Aria's exit animation is what keeps the two halves\n * of the dim disappearing together.\n */\nexport default function useEmbeddedSurface(surfaceId?: string): void {\n const transport = useEmbeddedSurfaceTransport();\n const fallbackSurfaceId = useEmbeddedSurfaceId();\n const ownSurfaceId = surfaceId ?? fallbackSurfaceId;\n\n useEffect(() => {\n if (!transport) {\n return;\n }\n const session = getSession(transport);\n activateSession(transport, session);\n session.surfaces.add(ownSurfaceId);\n if (session.surfaces.size === 1) {\n startSurfaceLease(transport, session);\n }\n if (session.epoch != null) {\n sendSnapshot(transport, session);\n }\n\n return () => {\n session.surfaces.delete(ownSurfaceId);\n session.acknowledgedAt.delete(ownSurfaceId);\n if (session.surfaces.size === 0) {\n if (session.epoch != null) {\n sendSnapshot(transport, session);\n }\n deactivateSession(session);\n } else {\n sendSnapshot(transport, session);\n }\n };\n }, [ownSurfaceId, transport]);\n\n useEffect(() => {\n if (!transport) {\n return;\n }\n let active = true;\n let pendingAnimationFrame: number | null = null;\n const handleFocusOut = (event: FocusEvent) => {\n if (event.relatedTarget != null) {\n return;\n }\n event.stopImmediatePropagation();\n if (!(event.target instanceof HTMLElement)) {\n return;\n }\n const target = event.target;\n if (pendingAnimationFrame != null) {\n cancelAnimationFrame(pendingAnimationFrame);\n }\n pendingAnimationFrame = requestAnimationFrame(() => {\n pendingAnimationFrame = null;\n if (!active || !target.isConnected) {\n return;\n }\n if (\n document.hasFocus() &&\n (document.activeElement == null || document.activeElement === document.body)\n ) {\n target.focus();\n }\n });\n };\n document.addEventListener('focusout', handleFocusOut, true);\n return () => {\n active = false;\n if (pendingAnimationFrame != null) {\n cancelAnimationFrame(pendingAnimationFrame);\n }\n document.removeEventListener('focusout', handleFocusOut, true);\n };\n }, [transport]);\n}\n\nexport type EmbeddedSurfaceGate = {\n /** False while the overlay must hold its opening animation paused on its first frame. */\n ready: boolean;\n /**\n * CSS `animation-delay` that lands the overlay's animation on the host's shared start instant.\n * Negative when the acknowledgement arrived after that instant, so the animation joins in\n * progress rather than starting late.\n */\n animationDelayMs: number;\n};\n\nconst PENDING_GATE: EmbeddedSurfaceGate = { ready: false, animationDelayMs: 0 };\nconst RELEASED_GATE: EmbeddedSurfaceGate = { ready: true, animationDelayMs: 0 };\n// A start instant further out than the no-ack fallback would have waited is not a schedule worth\n// honouring; with fill-mode `both` an unbounded positive delay holds the overlay hidden.\nconst releasedGateAt = (startAt: number): EmbeddedSurfaceGate => ({\n ready: true,\n animationDelayMs: Math.min(startAt - Date.now(), EMBEDDED_SURFACE_HOST_ACK_TIMEOUT_MS),\n});\n\n/**\n * Holds the surface's opening animation until the host acknowledges it, then reports the delay that\n * aligns the animation with the host's shared start instant. Lives outside the overlay so the gate\n * can hold the child's animation from its very first frame, before the overlay content mounts and\n * announces.\n */\nexport const useEmbeddedSurfaceGate = (surfaceId: string, isOpen: boolean): EmbeddedSurfaceGate => {\n const transport = useEmbeddedSurfaceTransport();\n const [gate, setGate] = useState(() =>\n getEmbeddedSurfaceTransport() == null ? RELEASED_GATE : PENDING_GATE,\n );\n // The gate stays mounted while closed, so a previous cycle left the surface released. Flip back\n // to pending during the opening render: an effect would land after the browser has painted a\n // frame of the entrance animation. Closing leaves the gate untouched so the overlay's animation\n // declaration is stable while React Aria watches it for an exit animation.\n const [wasOpen, setWasOpen] = useState(isOpen);\n if (wasOpen !== isOpen) {\n setWasOpen(isOpen);\n if (isOpen && transport != null) {\n setGate(PENDING_GATE);\n }\n }\n\n useEffect(() => {\n if (!transport) {\n setGate(RELEASED_GATE);\n return;\n }\n if (!isOpen) {\n return;\n }\n const session = getSession(transport);\n const acknowledgedStartAt = session.acknowledgedAt.get(surfaceId);\n if (acknowledgedStartAt != null) {\n setGate(releasedGateAt(acknowledgedStartAt));\n return;\n }\n\n const listeners =\n session.acknowledgementListeners.get(surfaceId) ?? new Set<(startAt: number) => void>();\n const unsubscribe = () => {\n listeners.delete(release);\n if (listeners.size === 0) {\n session.acknowledgementListeners.delete(surfaceId);\n }\n };\n // A host that never acknowledges (an older dashboard, or none at all) must not leave the\n // overlay paused at opacity 0. Once released either way, the animation is running and a later\n // acknowledgement must not reschedule it.\n const fallback = window.setTimeout(() => {\n unsubscribe();\n setGate(RELEASED_GATE);\n }, EMBEDDED_SURFACE_HOST_ACK_TIMEOUT_MS);\n const release = (startAt: number) => {\n window.clearTimeout(fallback);\n unsubscribe();\n setGate(releasedGateAt(startAt));\n };\n listeners.add(release);\n session.acknowledgementListeners.set(surfaceId, listeners);\n\n return () => {\n window.clearTimeout(fallback);\n unsubscribe();\n };\n }, [isOpen, surfaceId, transport]);\n\n return gate;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useEmbeddedSurface.mjs","names":[],"sources":["../../src/lib/useEmbeddedSurface.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport {\n EMBEDDED_SURFACE_PROTOCOL_VERSION,\n EMBEDDED_SURFACE_CHANNEL,\n coerceChildboundEnvelope,\n type EmbeddedSurfacePayloads,\n} from '#src/lib/embeddedSurfaceProtocol';\nimport {\n getEmbeddedSurfaceTransport,\n subscribeEmbeddedSurfaceTransportChanges,\n type EmbeddedSurfaceTransport,\n} from '#src/lib/embeddedSurfaceRegistry';\n\nconst SURFACE_REANNOUNCE_INTERVAL_MS = 2000;\nconst HELLO_ROTATION_THRESHOLD = 2;\n/**\n * How long the overlay stays paused waiting for an acknowledgement. It has to outlast the host's\n * animation lead so a slow acknowledgement still gets used rather than raced by this fallback.\n */\nexport const EMBEDDED_SURFACE_HOST_ACK_TIMEOUT_MS = 80;\n\nlet fallbackId = 0;\ntype SurfaceSession = {\n connectionId: string;\n surfaces: Set<string>;\n leaseTimer?: number;\n unsubscribe?: () => void;\n unansweredHellos: number;\n epoch?: string;\n /** Acknowledged surfaces, keyed to the shared wall-clock instant their animation starts at. */\n acknowledgedAt: Map<string, number>;\n acknowledgementListeners: Map<string, Set<(startAt: number) => void>>;\n};\nconst sessions = new WeakMap<EmbeddedSurfaceTransport, SurfaceSession>();\n\nconst mintId = (prefix: string): string => {\n const randomUUID =\n typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'\n ? crypto.randomUUID()\n : undefined;\n if (randomUUID) {\n return `${prefix}-${randomUUID}`;\n }\n fallbackId += 1;\n return `${prefix}-${fallbackId.toString(36)}`;\n};\n\nconst getSession = (transport: EmbeddedSurfaceTransport) => {\n const current = sessions.get(transport);\n if (current) {\n return current;\n }\n const session: SurfaceSession = {\n connectionId: mintId('connection'),\n surfaces: new Set<string>(),\n unansweredHellos: 0,\n acknowledgedAt: new Map<string, number>(),\n acknowledgementListeners: new Map<string, Set<(startAt: number) => void>>(),\n };\n sessions.set(transport, session);\n return session;\n};\n\nconst send = (\n transport: EmbeddedSurfaceTransport,\n session: SurfaceSession,\n kind: 'hello' | 'surfaceSnapshot',\n payload: EmbeddedSurfacePayloads['hello'] | EmbeddedSurfacePayloads['surfaceSnapshot'],\n) => {\n transport.send({\n channel: EMBEDDED_SURFACE_CHANNEL,\n version: EMBEDDED_SURFACE_PROTOCOL_VERSION,\n connectionId: session.connectionId,\n kind,\n payload,\n });\n};\n\nconst sendSnapshot = (transport: EmbeddedSurfaceTransport, session: SurfaceSession) => {\n if (session.epoch == null) {\n return;\n }\n send(transport, session, 'surfaceSnapshot', {\n epoch: session.epoch,\n surfaces: Array.from(session.surfaces, (surfaceId) => ({ surfaceId })),\n awaitsAck: true,\n });\n};\n\nconst rotateConnection = (session: SurfaceSession) => {\n // The host may have retired this connectionId in its LRU, so hellos stay dropped\n // until a fresh connectionId is minted.\n session.connectionId = mintId('connection');\n session.epoch = undefined;\n session.acknowledgedAt.clear();\n session.unansweredHellos = 0;\n};\n\nconst acknowledgeSurface = (session: SurfaceSession, surfaceId: string, startAt: number) => {\n if (session.acknowledgedAt.has(surfaceId)) {\n return;\n }\n session.acknowledgedAt.set(surfaceId, startAt);\n session.acknowledgementListeners.get(surfaceId)?.forEach((listener) => listener(startAt));\n};\n\nconst startSurfaceLease = (transport: EmbeddedSurfaceTransport, session: SurfaceSession) => {\n if (session.leaseTimer != null) {\n return;\n }\n // Re-announces active surfaces to renew the host's lease. If the child stops\n // running, announcements cease and the host releases shell effects after timeout.\n session.leaseTimer = window.setInterval(() => {\n session.unansweredHellos += 1;\n if (session.unansweredHellos >= HELLO_ROTATION_THRESHOLD) {\n rotateConnection(session);\n }\n send(transport, session, 'hello', {});\n sendSnapshot(transport, session);\n }, SURFACE_REANNOUNCE_INTERVAL_MS);\n};\n\nconst stopSurfaceLease = (session: SurfaceSession) => {\n if (session.leaseTimer == null) {\n return;\n }\n window.clearInterval(session.leaseTimer);\n session.leaseTimer = undefined;\n};\n\nconst activateSession = (transport: EmbeddedSurfaceTransport, session: SurfaceSession) => {\n if (session.unsubscribe != null) {\n return;\n }\n session.epoch = undefined;\n session.acknowledgedAt.clear();\n session.unansweredHellos = 0;\n session.unsubscribe = transport.subscribe((message) => {\n const childbound = coerceChildboundEnvelope(message);\n if (!childbound || childbound.connectionId !== session.connectionId) {\n return;\n }\n session.unansweredHellos = 0;\n if (childbound.kind === 'welcome') {\n if (session.epoch !== childbound.payload.epoch) {\n session.acknowledgedAt.clear();\n }\n session.epoch = childbound.payload.epoch;\n sendSnapshot(transport, session);\n return;\n }\n if (childbound.payload.epoch !== session.epoch) {\n return;\n }\n if (childbound.kind !== 'surfaceAck') {\n return;\n }\n childbound.payload.surfaces.forEach(({ surfaceId }) => {\n acknowledgeSurface(session, surfaceId, childbound.payload.startAt);\n });\n });\n send(transport, session, 'hello', {});\n};\n\nconst deactivateSession = (session: SurfaceSession) => {\n session.unsubscribe?.();\n session.unsubscribe = undefined;\n stopSurfaceLease(session);\n session.epoch = undefined;\n session.acknowledgedAt.clear();\n session.unansweredHellos = 0;\n};\n\nconst useEmbeddedSurfaceTransport = (): EmbeddedSurfaceTransport | null => {\n const [transport, setTransport] = useState<EmbeddedSurfaceTransport | null>(\n getEmbeddedSurfaceTransport,\n );\n\n useEffect(() => {\n const unsubscribe = subscribeEmbeddedSurfaceTransportChanges(() => {\n setTransport(getEmbeddedSurfaceTransport());\n });\n // A transport can register between render and this effect, and the registry only\n // notifies on change, so reconcile once the subscription is installed.\n setTransport(getEmbeddedSurfaceTransport());\n return unsubscribe;\n }, []);\n\n return transport;\n};\n\n/** Mints an id for a surface whose registration and host gate live in separate components. */\nexport const useEmbeddedSurfaceId = (): string => {\n const [surfaceId] = useState(() => mintId('surface'));\n return surfaceId;\n};\n\n/**\n * Announces the surface to the host for as long as the caller is mounted. Callers must render\n * only while their overlay is on screen: the host dims the shell around every announced surface,\n * and holding the announcement through React Aria's exit animation is what keeps the two halves\n * of the dim disappearing together.\n */\nexport default function useEmbeddedSurface(surfaceId?: string): void {\n const transport = useEmbeddedSurfaceTransport();\n const fallbackSurfaceId = useEmbeddedSurfaceId();\n const ownSurfaceId = surfaceId ?? fallbackSurfaceId;\n\n useEffect(() => {\n if (!transport) {\n return;\n }\n const session = getSession(transport);\n activateSession(transport, session);\n session.surfaces.add(ownSurfaceId);\n if (session.surfaces.size === 1) {\n startSurfaceLease(transport, session);\n }\n if (session.epoch != null) {\n sendSnapshot(transport, session);\n }\n\n return () => {\n session.surfaces.delete(ownSurfaceId);\n session.acknowledgedAt.delete(ownSurfaceId);\n if (session.surfaces.size === 0) {\n if (session.epoch != null) {\n sendSnapshot(transport, session);\n }\n deactivateSession(session);\n } else {\n sendSnapshot(transport, session);\n }\n };\n }, [ownSurfaceId, transport]);\n\n useEffect(() => {\n if (!transport) {\n return;\n }\n let active = true;\n let pendingAnimationFrame: number | null = null;\n const handleFocusOut = (event: FocusEvent) => {\n if (event.relatedTarget != null) {\n return;\n }\n event.stopImmediatePropagation();\n if (!(event.target instanceof HTMLElement)) {\n return;\n }\n const target = event.target;\n if (pendingAnimationFrame != null) {\n cancelAnimationFrame(pendingAnimationFrame);\n }\n pendingAnimationFrame = requestAnimationFrame(() => {\n pendingAnimationFrame = null;\n if (!active || !target.isConnected) {\n return;\n }\n if (\n document.hasFocus() &&\n (document.activeElement == null || document.activeElement === document.body)\n ) {\n target.focus();\n }\n });\n };\n document.addEventListener('focusout', handleFocusOut, true);\n return () => {\n active = false;\n if (pendingAnimationFrame != null) {\n cancelAnimationFrame(pendingAnimationFrame);\n }\n document.removeEventListener('focusout', handleFocusOut, true);\n };\n }, [transport]);\n}\n\nexport type EmbeddedSurfaceGate = {\n /** False while the overlay must hold its opening animation paused on its first frame. */\n ready: boolean;\n /**\n * CSS `animation-delay` that lands the overlay's animation on the host's shared start instant.\n * Negative when the acknowledgement arrived after that instant, so the animation joins in\n * progress rather than starting late.\n */\n animationDelayMs: number;\n};\n\nconst PENDING_GATE: EmbeddedSurfaceGate = { ready: false, animationDelayMs: 0 };\nconst RELEASED_GATE: EmbeddedSurfaceGate = { ready: true, animationDelayMs: 0 };\n// A start instant further out than the no-ack fallback would have waited is not a schedule worth\n// honouring; with fill-mode `both` an unbounded positive delay holds the overlay hidden.\nconst releasedGateAt = (startAt: number): EmbeddedSurfaceGate => ({\n ready: true,\n animationDelayMs: Math.min(startAt - Date.now(), EMBEDDED_SURFACE_HOST_ACK_TIMEOUT_MS),\n});\n\n/**\n * Holds the surface's opening animation until the host acknowledges it, then reports the delay that\n * aligns the animation with the host's shared start instant. Lives outside the overlay so the gate\n * can hold the child's animation from its very first frame, before the overlay content mounts and\n * announces.\n */\nexport const useEmbeddedSurfaceGate = (surfaceId: string, isOpen: boolean): EmbeddedSurfaceGate => {\n const transport = useEmbeddedSurfaceTransport();\n const [gate, setGate] = useState(() =>\n getEmbeddedSurfaceTransport() == null ? RELEASED_GATE : PENDING_GATE,\n );\n // The gate stays mounted while closed, so a previous cycle left the surface released. Flip back\n // to pending during the opening render: an effect would land after the browser has painted a\n // frame of the entrance animation. Closing leaves the gate untouched so the overlay's animation\n // declaration is stable while React Aria watches it for an exit animation.\n const [wasOpen, setWasOpen] = useState(isOpen);\n if (wasOpen !== isOpen) {\n setWasOpen(isOpen);\n if (isOpen && transport != null) {\n setGate(PENDING_GATE);\n }\n }\n\n useEffect(() => {\n if (!transport) {\n setGate(RELEASED_GATE);\n return;\n }\n if (!isOpen) {\n return;\n }\n const session = getSession(transport);\n const acknowledgedStartAt = session.acknowledgedAt.get(surfaceId);\n if (acknowledgedStartAt != null) {\n setGate(releasedGateAt(acknowledgedStartAt));\n return;\n }\n\n const listeners =\n session.acknowledgementListeners.get(surfaceId) ?? new Set<(startAt: number) => void>();\n const unsubscribe = () => {\n listeners.delete(release);\n if (listeners.size === 0) {\n session.acknowledgementListeners.delete(surfaceId);\n }\n };\n // A host that never acknowledges (an older dashboard, or none at all) must not leave the\n // overlay paused at opacity 0. Once released either way, the animation is running and a later\n // acknowledgement must not reschedule it.\n const fallback = window.setTimeout(() => {\n unsubscribe();\n setGate(RELEASED_GATE);\n }, EMBEDDED_SURFACE_HOST_ACK_TIMEOUT_MS);\n const release = (startAt: number) => {\n window.clearTimeout(fallback);\n unsubscribe();\n setGate(releasedGateAt(startAt));\n };\n listeners.add(release);\n session.acknowledgementListeners.set(surfaceId, listeners);\n\n return () => {\n window.clearTimeout(fallback);\n unsubscribe();\n };\n }, [isOpen, surfaceId, transport]);\n\n return gate;\n};\n"],"mappings":"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"}
|
package/dist/lint/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as PossibleChainSchema } from "./chainTypes-
|
|
2
|
-
import { a as Mode, u as ValueType } from "./types-
|
|
1
|
+
import { n as PossibleChainSchema } from "./chainTypes-CLKwXymd.mjs";
|
|
2
|
+
import { a as Mode, u as ValueType } from "./types-BnXYfNrd.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/components/SmartTextInput/listbox-options.d.ts
|
|
5
5
|
type MethodChainOption = {
|
|
@@ -35,4 +35,4 @@ declare const getContextMenuOptions: (valueIsEmpty: boolean, allowedValueType: V
|
|
|
35
35
|
declare const getMethodChainOptions: (options: PossibleChainSchema[]) => MethodChainOption[];
|
|
36
36
|
//#endregion
|
|
37
37
|
export { SmartTextInputOption as a, isContextMenuOption as c, MethodChainOption as i, isMethodChainOption as l, ContextMenuOption as n, getContextMenuOptions as o, EXIT_METHOD_CHAIN_VALUE_TYPE_OPTION as r, getMethodChainOptions as s, ContextMenuExamples as t };
|
|
38
|
-
//# sourceMappingURL=listbox-options-
|
|
38
|
+
//# sourceMappingURL=listbox-options-D0JmYWjB.d.mts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as SmartTextInputOption, c as isContextMenuOption, i as MethodChainOption, l as isMethodChainOption, n as ContextMenuOption, o as getContextMenuOptions, r as EXIT_METHOD_CHAIN_VALUE_TYPE_OPTION, s as getMethodChainOptions, t as ContextMenuExamples } from "./listbox-options-
|
|
1
|
+
import { a as SmartTextInputOption, c as isContextMenuOption, i as MethodChainOption, l as isMethodChainOption, n as ContextMenuOption, o as getContextMenuOptions, r as EXIT_METHOD_CHAIN_VALUE_TYPE_OPTION, s as getMethodChainOptions, t as ContextMenuExamples } from "./listbox-options-D0JmYWjB.mjs";
|
|
2
2
|
export { ContextMenuExamples, ContextMenuOption, EXIT_METHOD_CHAIN_VALUE_TYPE_OPTION, MethodChainOption, SmartTextInputOption, getContextMenuOptions, getMethodChainOptions, isContextMenuOption, isMethodChainOption };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { u as ASTNodeType } from "./types-
|
|
2
|
-
import { n as JsonSchema } from "./jsonSchema-
|
|
3
|
-
import { a as FunctionParamType, c as NumberNode, i as FunctionNode, l as StringNode, n as Chain, o as IdentifierNode, r as CustomFunctionNode, s as MethodChainNode, t as ArrayNode } from "./methodChainTypes-
|
|
1
|
+
import { u as ASTNodeType } from "./types-Bu5rhBdH.mjs";
|
|
2
|
+
import { n as JsonSchema } from "./jsonSchema-BJpNaFc4.mjs";
|
|
3
|
+
import { a as FunctionParamType, c as NumberNode, i as FunctionNode, l as StringNode, n as Chain, o as IdentifierNode, r as CustomFunctionNode, s as MethodChainNode, t as ArrayNode } from "./methodChainTypes-Di4GCMX7.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/components/SmartTextInput/parser/method-chain/parser.d.ts
|
|
6
6
|
declare class SyntaxError extends Error {
|
|
@@ -63,4 +63,4 @@ declare const getSyntaxError: () => typeof SyntaxError;
|
|
|
63
63
|
declare const methodChainNodeToJsonSchema: (node: StringNode | NumberNode | ArrayNode) => JsonSchema | null;
|
|
64
64
|
//#endregion
|
|
65
65
|
export { tryParseMethodChain as C, removeFunctionNode as S, methodChainToString as _, getFunctionParams as a, pathContainsFunctionNode as b, isCustomFunctionNode as c, isIdentifierNode as d, isStringNode as f, methodChainRootName as g, methodChainNodeToJsonSchema as h, containsFunctionNode as i, isEmpty as l, methodChainCache as m, MethodChainNodeTypes as n, getSyntaxError as o, isValid as p, appendedMethodChain as r, isArrayNode as s, EMPTY_METHOD_CHAIN as t, isFunctionNode as u, parseMethodChain as v, pathIsNormative as x, parseWithPartialOption as y };
|
|
66
|
-
//# sourceMappingURL=methodChain-
|
|
66
|
+
//# sourceMappingURL=methodChain-C3u60_V8.d.mts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as ASTIdentifierNode, d as ASTNumberNode, m as ASTStringNode, n as ASTChain, o as ASTFunctionNode, r as ASTCustomFunctionNode, t as ASTArrayNode } from "./types-
|
|
1
|
+
import { c as ASTIdentifierNode, d as ASTNumberNode, m as ASTStringNode, n as ASTChain, o as ASTFunctionNode, r as ASTCustomFunctionNode, t as ASTArrayNode } from "./types-Bu5rhBdH.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/lib/methodChainTypes.d.ts
|
|
4
4
|
type MethodChainNode = IdentifierNode | FunctionNode | CustomFunctionNode;
|
|
@@ -20,4 +20,4 @@ type CustomFunctionNode = Omit<ASTCustomFunctionNode, 'children' | 'start' | 'en
|
|
|
20
20
|
};
|
|
21
21
|
//#endregion
|
|
22
22
|
export { FunctionParamType as a, NumberNode as c, FunctionNode as i, StringNode as l, Chain as n, IdentifierNode as o, CustomFunctionNode as r, MethodChainNode as s, ArrayNode as t };
|
|
23
|
-
//# sourceMappingURL=methodChainTypes-
|
|
23
|
+
//# sourceMappingURL=methodChainTypes-Di4GCMX7.d.mts.map
|
package/dist/min-copy-size.d.mts
CHANGED
package/dist/mixins/focus.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus.mjs","names":[],"sources":["../../src/mixins/focus.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nimport { Color } from '@persona/design-tokens';\nimport { isFocusedVisible, isNotDisabled } from '
|
|
1
|
+
{"version":3,"file":"focus.mjs","names":[],"sources":["../../src/mixins/focus.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nimport { Color } from '@persona/design-tokens';\n\nimport { isFocusedVisible, isNotDisabled } from '#src/lib/pseudoClass';\nimport { type MaybeSemanticTheme, semanticColor } from '#src/lib/semanticColor';\n\nconst focusColor = (theme: MaybeSemanticTheme) =>\n semanticColor(theme, 'BorderFocus', Color.BorderFocus);\n\nexport const focusStyle = css`\n outline-offset: 1px;\n outline: ${({ theme }) => focusColor(theme)} solid 2px;\n`;\n\nexport const focusOutline = css`\n outline: none;\n\n &:focus-visible {\n outline-offset: 1px;\n outline: ${({ theme }) => focusColor(theme)} solid 2px;\n }\n`;\n\nexport const focusOutlineControlled = css`\n outline: none;\n\n &${isFocusedVisible}${isNotDisabled} {\n outline-offset: 1px;\n outline: ${({ theme }) => focusColor(theme)} solid 2px;\n }\n`;\n\nexport const focusWithinOutline = css`\n &:focus-within {\n outline-offset: 1px;\n outline: ${({ theme }) => focusColor(theme)} solid 2px;\n }\n`;\n"],"mappings":";;;;;AAOA,MAAM,cAAc,UAClB,cAAc,OAAO,eAAe,MAAM,YAAY;AAExD,MAAa,aAAa,GAAG;;cAEf,EAAE,YAAY,WAAW,MAAM,CAAC;;AAG9C,MAAa,eAAe,GAAG;;;;;gBAKf,EAAE,YAAY,WAAW,MAAM,CAAC;;;AAIhD,MAAa,yBAAyB,GAAG;;;KAGpC,mBAAmB,cAAc;;gBAEtB,EAAE,YAAY,WAAW,MAAM,CAAC;;;AAIhD,MAAa,qBAAqB,GAAG;;;gBAGrB,EAAE,YAAY,WAAW,MAAM,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { o as Variant } from "../theme-
|
|
2
|
-
import { t as PseudoClassProps } from "../PseudoClassProps-
|
|
1
|
+
import { o as Variant } from "../theme-BFP-_PEh.mjs";
|
|
2
|
+
import { t as PseudoClassProps } from "../PseudoClassProps-D-sdJdnG.mjs";
|
|
3
3
|
import * as _$styled_components0 from "styled-components";
|
|
4
4
|
|
|
5
5
|
//#region src/mixins/hoverable.d.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hoverable.mjs","names":[],"sources":["../../src/mixins/hoverable.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nimport { isDisabled, isHovered, isNotDisabled } from '
|
|
1
|
+
{"version":3,"file":"hoverable.mjs","names":[],"sources":["../../src/mixins/hoverable.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nimport { isDisabled, isHovered, isNotDisabled } from '#src/lib/pseudoClass';\nimport { focusOutlineControlled } from '#src/mixins/focus';\nimport type { Variant } from '#src/theme';\nimport type PseudoClassProps from '#src/types/PseudoClassProps';\nimport { Elevation } from '#src/variables/effect';\nimport { TransitionDuration } from '#src/variables/transitions';\n\ninterface HoverableMixinProps extends PseudoClassProps {\n variant?: Variant;\n}\n\nexport const hoverMixin = css<HoverableMixinProps>`\n box-shadow:\n 0 0 0 3px transparent,\n ${Elevation.Mid};\n`;\n\n/**\n * Adds an outline for a11y when focused, and a shadow when hovered.\n */\nconst hoverableMixin = css<HoverableMixinProps>`\n cursor: pointer;\n &${isDisabled} {\n cursor: not-allowed;\n }\n\n transition: box-shadow ${TransitionDuration.Fast};\n\n &${isHovered}${isNotDisabled} {\n ${hoverMixin};\n }\n\n ${focusOutlineControlled}\n`;\n\nexport default hoverableMixin;\n"],"mappings":";;;;;;AAaA,MAAa,aAAa,GAAwB;;;mFAG9B;;;;;AAMpB,MAAM,iBAAiB,GAAwB;;KAE1C,WAAW;;;;mCAImC;;KAE9C,YAAY,cAAc;MACzB,WAAW;;;IAGb,uBAAuB"}
|
package/dist/mixins/input.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as InputSizes, r as inputMixin, t as InputMixinProps } from "../input-
|
|
1
|
+
import { n as InputSizes, r as inputMixin, t as InputMixinProps } from "../input-RTMLTvG1.mjs";
|
|
2
2
|
export { InputMixinProps, InputSizes, inputMixin as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.mjs","names":[],"sources":["../../src/mixins/input.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\nimport { withAlpha } from '
|
|
1
|
+
{"version":3,"file":"input.mjs","names":[],"sources":["../../src/mixins/input.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nimport { Color, Spacing, Typography } from '@persona/design-tokens';\n\nimport { withAlpha } from '#src/lib/color';\nimport { isDisabled, isHovered, isNotDisabled } from '#src/lib/pseudoClass';\nimport { semanticColor, semanticTokens } from '#src/lib/semanticColor';\nimport { focusOutlineControlled } from '#src/mixins/focus';\nimport { printMixins } from '#src/mixins/print';\nimport type ErrorProps from '#src/types/ErrorProps';\nimport type PseudoClassProps from '#src/types/PseudoClassProps';\nimport { TransitionDuration } from '#src/variables/transitions';\n\nexport type InputSizes = 'md' | 'sm';\n\nexport interface InputMixinProps extends ErrorProps, PseudoClassProps {\n $size?: InputSizes;\n}\n\n/**\n * Provides input-like hover and focus outline effects. Can also be applied to\n * non-input elements (like divs) to give input-like styles.\n */\nconst inputMixin = css<InputMixinProps>`\n background: ${({ theme }) =>\n semanticColor(theme, 'InputSurfaceDefault', theme.color.background.primary)};\n color: ${({ theme }) => semanticColor(theme, 'FgPrimary', theme.color.text.primary)};\n border-width: 1px;\n border-style: solid;\n border-color: ${({ theme }) => semanticColor(theme, 'InputBorderDefault', theme.color.border.input)};\n box-sizing: border-box;\n border-radius: ${({ theme }) => theme.element.borderRadius};\n\n width: 100%;\n min-width: 0;\n\n ${focusOutlineControlled}\n\n text-decoration: none;\n transition-duration: ${TransitionDuration.Fast};\n transition-property: background-color, color, border-color, width, height;\n\n /* Some input-likes like <select/> reduce opacity when disabled */\n opacity: 1;\n\n &::placeholder {\n font-weight: ${({ theme }) => theme.text.paragraph.md.fontWeight};\n color: ${({ theme }) => semanticColor(theme, 'FgSecondary', theme.color.text.tertiary)};\n }\n\n &${isDisabled} {\n background: ${({ theme }) => {\n const tokens = semanticTokens(theme);\n return tokens\n ? withAlpha(tokens.InputSurfaceDisabled, tokens.Opacity65)\n : theme.color.background.disabled;\n }};\n border-color: ${({ theme }) =>\n semanticColor(theme, 'InputBorderDisabled', theme.color.border.disabled)};\n color: ${({ theme }) => semanticColor(theme, 'FgDisabled', theme.color.text.disabled)};\n ::placeholder {\n color: ${({ theme }) => semanticColor(theme, 'FgDisabled', theme.color.text.disabled)};\n }\n }\n\n &${isHovered}${isNotDisabled} {\n ${({ theme }) => {\n const tokens = semanticTokens(theme);\n return tokens\n ? css`\n background: ${tokens.InputSurfaceHover};\n border-color: ${tokens.InputBorderHover};\n `\n : css`\n border-color: ${theme.color.border.inputHover};\n `;\n }}\n }\n\n ${({ $size }) => {\n switch ($size) {\n default:\n case 'md':\n return css`\n height: ${({ theme }) => theme.element.height.xs};\n padding-top: ${Spacing[2]};\n padding-right: ${Spacing[3]};\n padding-bottom: ${Spacing[2]};\n padding-left: ${Spacing[3]};\n ${Typography.TextMedium};\n `;\n case 'sm':\n return css`\n height: 24px;\n padding-top: ${Spacing[1]};\n padding-right: ${Spacing[2]};\n padding-bottom: ${Spacing[1]};\n padding-left: ${Spacing[2]};\n ${Typography.TextSmall};\n `;\n }\n }}\n\n /* Validation borders are for enabled fields only. Disabled fields keep the\n disabled border above, whose :disabled selector outranks this bare rule. */\n ${({ theme, hasError, hasWarning }) => {\n if (hasError) {\n const danger = semanticColor(theme, 'BorderDanger', theme.color.variants.danger.default);\n return css`\n border-color: ${danger};\n\n &${isHovered}${isNotDisabled} {\n border-color: ${danger};\n }\n `;\n }\n\n if (hasWarning) {\n const warning = semanticColor(theme, 'BorderWarning', Color.CoreOrange700);\n return css`\n border-color: ${warning};\n\n &${isHovered}${isNotDisabled} {\n border-color: ${warning};\n }\n `;\n }\n\n return css`\n border-color: ${semanticColor(theme, 'InputBorderDefault', theme.color.border.input)};\n `;\n }}\n\n ${printMixins.hide}\n`;\n\nexport default inputMixin;\n"],"mappings":";;;;;;;;;;;;;AAuBA,MAAM,aAAa,GAAoB;iBACtB,EAAE,YACf,cAAc,OAAO,uBAAuB,MAAM,MAAM,WAAW,QAAQ,CAAC;YACpE,EAAE,YAAY,cAAc,OAAO,aAAa,MAAM,MAAM,KAAK,QAAQ,CAAC;;;mBAGnE,EAAE,YAAY,cAAc,OAAO,sBAAsB,MAAM,MAAM,OAAO,MAAM,CAAC;;oBAElF,EAAE,YAAY,MAAM,QAAQ,aAAa;;;;;IAKzD,uBAAuB;;;iCAGsB;;;;;;;oBAO7B,EAAE,YAAY,MAAM,KAAK,UAAU,GAAG,WAAW;cACvD,EAAE,YAAY,cAAc,OAAO,eAAe,MAAM,MAAM,KAAK,SAAS,CAAC;;;KAGtF,WAAW;mBACG,EAAE,YAAY;CAC3B,MAAM,SAAS,eAAe,MAAM;AACpC,QAAO,SACH,UAAU,OAAO,sBAAsB,OAAO,UAAU,GACxD,MAAM,MAAM,WAAW;EAC3B;qBACe,EAAE,YACjB,cAAc,OAAO,uBAAuB,MAAM,MAAM,OAAO,SAAS,CAAC;cACjE,EAAE,YAAY,cAAc,OAAO,cAAc,MAAM,MAAM,KAAK,SAAS,CAAC;;gBAE1E,EAAE,YAAY,cAAc,OAAO,cAAc,MAAM,MAAM,KAAK,SAAS,CAAC;;;;KAIvF,YAAY,cAAc;OACxB,EAAE,YAAY;CACf,MAAM,SAAS,eAAe,MAAM;AACpC,QAAO,SACH,GAAG;0BACa,OAAO,kBAAkB;4BACvB,OAAO,iBAAiB;cAE1C,GAAG;4BACe,MAAM,MAAM,OAAO,WAAW;;EAEpD;;;KAGD,EAAE,YAAY;AACf,SAAQ,OAAR;EACE;EACA,KAAK,KACH,QAAO,GAAG;qBACG,EAAE,YAAY,MAAM,QAAQ,OAAO,GAAG;yBAClC,QAAQ,GAAG;2BACT,QAAQ,GAAG;4BACV,QAAQ,GAAG;0BACb,QAAQ,GAAG;YACzB,WAAW,WAAW;;EAE5B,KAAK,KACH,QAAO,GAAG;;yBAEO,QAAQ,GAAG;2BACT,QAAQ,GAAG;4BACV,QAAQ,GAAG;0BACb,QAAQ,GAAG;YACzB,WAAW,UAAU;;;EAG7B;;;;KAIC,EAAE,OAAO,UAAU,iBAAiB;AACrC,KAAI,UAAU;EACZ,MAAM,SAAS,cAAc,OAAO,gBAAgB,MAAM,MAAM,SAAS,OAAO,QAAQ;AACxF,SAAO,GAAG;wBACQ,OAAO;;WAEpB,YAAY,cAAc;0BACX,OAAO;;;;AAK7B,KAAI,YAAY;EACd,MAAM,UAAU,cAAc,OAAO,iBAAiB,MAAM,cAAc;AAC1E,SAAO,GAAG;wBACQ,QAAQ;;WAErB,YAAY,cAAc;0BACX,QAAQ;;;;AAK9B,QAAO,GAAG;sBACQ,cAAc,OAAO,sBAAsB,MAAM,MAAM,OAAO,MAAM,CAAC;;EAEvF;;IAEA,YAAY,KAAK"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { o as Variant } from "../theme-
|
|
2
|
-
import { t as PseudoClassProps } from "../PseudoClassProps-
|
|
1
|
+
import { o as Variant } from "../theme-BFP-_PEh.mjs";
|
|
2
|
+
import { t as PseudoClassProps } from "../PseudoClassProps-D-sdJdnG.mjs";
|
|
3
3
|
import * as _$styled_components0 from "styled-components";
|
|
4
4
|
|
|
5
5
|
//#region src/mixins/menuItem.d.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menuItem.mjs","names":[],"sources":["../../src/mixins/menuItem.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nimport { Color } from '@persona/design-tokens';\nimport { withAlpha } from '
|
|
1
|
+
{"version":3,"file":"menuItem.mjs","names":[],"sources":["../../src/mixins/menuItem.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nimport { Color } from '@persona/design-tokens';\n\nimport { withAlpha } from '#src/lib/color';\nimport { semanticColor, semanticTokens } from '#src/lib/semanticColor';\nimport type { PersonaTheme, Variant } from '#src/theme';\nimport type PseudoClassProps from '#src/types/PseudoClassProps';\nimport { TransitionDuration } from '#src/variables/transitions';\n\ninterface MenuItemMixinProps extends PseudoClassProps {\n variant?: Variant;\n}\n\nconst iconStrokeReset = css`\n svg.pds-icon {\n * {\n stroke: unset;\n }\n /* Support icons with stroke */\n *[stroke] {\n stroke: currentColor;\n }\n }\n`;\n\nconst hoverColor = (theme: PersonaTheme, variant: Variant) => {\n const tokens = semanticTokens(theme);\n if (tokens) {\n return variant === 'danger' ? tokens.FgDanger2 : tokens.FgPrimary;\n }\n if (variant === 'basic') {\n return theme.color.text.primary;\n }\n if (variant === 'danger') {\n return Color.CoreRed900;\n }\n return theme.color.variants[variant].default;\n};\n\n/**\n * Adds styles for hovered and selected states. For use with dropdowns, menu\n * items, etc.\n *\n * The mixins are split by interaction state for more flexibility. We need to\n * implement each state differently when used with React Router's NavLink, for\n * example.\n *\n * Note that we override the palette for 'basic' to match the neutral usecase\n * shown in the mocks. There are never menu items that match our basic palette.\n *\n * Default: standard and disabled styles\n * Hover: hover and focus styles\n * Active: active styles\n */\nconst menuItemMixins = {\n default: css<MenuItemMixinProps>`\n cursor: pointer;\n color: ${({ theme, variant = 'basic' }) => {\n const tokens = semanticTokens(theme);\n if (tokens) {\n return variant === 'danger' ? tokens.FgDanger1 : tokens.FgPrimary;\n }\n // default text color for these two should be neutral\n return ['basic', 'primary'].includes(variant)\n ? theme.color.text.primary\n : theme.color.variants[variant].default;\n }};\n\n ${({ theme }) => css`\n background-color: ${semanticColor(theme, 'SurfacePrimary', theme.color.background.primary)};\n border-radius: ${theme.element.borderRadius};\n `}\n\n ${({ theme, disabled, variant = 'basic' }) => {\n if (disabled) {\n const disabledColor = semanticColor(theme, 'FgDisabled', theme.color.text.disabled);\n return css`\n background-color: ${semanticColor(\n theme,\n 'SurfacePrimary',\n theme.color.background.primary,\n )};\n color: ${disabledColor};\n cursor: default;\n\n svg * {\n stroke: ${disabledColor};\n }\n\n ${iconStrokeReset}\n `;\n }\n\n const tokens = semanticTokens(theme);\n return (\n tokens &&\n variant === 'basic' &&\n css`\n svg * {\n stroke: ${tokens.FgPrimary};\n }\n\n ${iconStrokeReset}\n `\n );\n }}\n `,\n hover: css<MenuItemMixinProps>`\n transition-duration: ${TransitionDuration.Fast};\n color: ${({ theme, variant = 'basic' }) => hoverColor(theme, variant)};\n\n background-color: ${({ theme, variant = 'basic' }) => {\n const tokens = semanticTokens(theme);\n if (tokens) {\n return variant === 'danger'\n ? withAlpha(tokens.FeedbackDanger1, tokens.Opacity25)\n : tokens.SurfaceHover;\n }\n return variant === 'basic'\n ? theme.color.background.secondary\n : theme.color.variants[variant].highlightLight;\n }};\n\n ${({ theme, disabled, variant = 'basic' }) =>\n !disabled &&\n css`\n svg * {\n stroke: ${hoverColor(theme, variant)};\n }\n\n ${iconStrokeReset}\n `}\n `,\n active: css<MenuItemMixinProps>`\n transition-duration: ${TransitionDuration.Fast};\n color: ${({ theme, variant = 'basic' }) => {\n const tokens = semanticTokens(theme);\n if (tokens) {\n if (variant === 'basic') {\n return tokens.FgAccent;\n }\n return variant === 'danger' ? tokens.FgDanger2 : tokens.FgPrimary;\n }\n return variant === 'basic' ? theme.color.text.inverse : theme.color.variants[variant].default;\n }};\n background-color: ${({ theme, variant = 'basic' }) => {\n const tokens = semanticTokens(theme);\n if (tokens) {\n if (variant === 'basic') {\n return withAlpha(tokens.SurfaceAccent, tokens.Opacity25);\n }\n return variant === 'danger'\n ? withAlpha(tokens.FeedbackDanger1, tokens.Opacity25)\n : tokens.SurfaceSecondary;\n }\n return variant === 'basic'\n ? theme.color.primary.brand\n : theme.color.variants[variant].highlightLight;\n }};\n\n ${({ theme, disabled, variant = 'basic' }) =>\n !disabled &&\n css`\n svg * {\n stroke: ${(() => {\n const tokens = semanticTokens(theme);\n if (tokens) {\n if (variant === 'basic') {\n return tokens.FgAccent;\n }\n return variant === 'danger' ? tokens.FgDanger2 : tokens.FgPrimary;\n }\n if (variant === 'basic') {\n return theme.color.text.primary;\n }\n if (variant === 'danger') {\n return Color.CoreRed900;\n }\n return theme.color.variants[variant].default;\n })()};\n }\n\n ${iconStrokeReset}\n `}\n `,\n};\n\nexport default menuItemMixins;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/mixins/print/index.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nimport { semanticColor } from '
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/mixins/print/index.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nimport { semanticColor } from '#src/lib/semanticColor';\n\nexport const printMixins = {\n hide: css`\n @media print {\n display: none;\n }\n `,\n border: css`\n @media print {\n border: 1px solid\n ${({ theme }) => semanticColor(theme, 'BorderDivider', theme.color.border.primary)};\n }\n `,\n avoidPageBreak: css`\n @media print {\n break-inside: avoid;\n }\n `,\n};\n"],"mappings":";;;AAIA,MAAa,cAAc;CACzB,MAAM,GAAG;;;;;CAKT,QAAQ,GAAG;;;WAGF,EAAE,YAAY,cAAc,OAAO,iBAAiB,MAAM,MAAM,OAAO,QAAQ,CAAC;;;CAGzF,gBAAgB,GAAG;;;;;CAKpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollbar.mjs","names":[],"sources":["../../src/mixins/scrollbar.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\nimport { semanticOnly } from '
|
|
1
|
+
{"version":3,"file":"scrollbar.mjs","names":[],"sources":["../../src/mixins/scrollbar.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\n\nimport { semanticOnly } from '#src/lib/semanticColor';\n\n// Legacy themes keep the browser scrollbar. These colors exist only once semantic tokens are installed.\nexport const semanticScrollbar = css`\n ${semanticOnly(\n (tokens) => `\n scrollbar-color: ${tokens.BorderDefault} transparent;\n\n &::-webkit-scrollbar {\n width: ${Spacing[2]};\n height: ${Spacing[2]};\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${tokens.BorderDefault};\n border-radius: ${Spacing[2]};\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: ${tokens.BorderHover};\n }\n `,\n )}\n`;\n"],"mappings":";;;;AAOA,MAAa,oBAAoB,GAAG;IAChC,cACC,WAAW;yBACS,OAAO,cAAc;;;iBAG7B,QAAQ,GAAG;kBACV,QAAQ,GAAG;;;;;;;;sBAQP,OAAO,cAAc;yBAClB,QAAQ,GAAG;;;;sBAId,OAAO,YAAY;;MAGtC,CAAC"}
|
package/dist/mixins/text.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as displayMixins, c as paragraphMixins, i as ParagraphSize, n as HeadingSize, o as fontFamilyMixin, r as ParagraphMixinSize, s as headingMixins, t as DisplaySize } from "../text-
|
|
1
|
+
import { a as displayMixins, c as paragraphMixins, i as ParagraphSize, n as HeadingSize, o as fontFamilyMixin, r as ParagraphMixinSize, s as headingMixins, t as DisplaySize } from "../text-CKLxMlG4.mjs";
|
|
2
2
|
export { DisplaySize, HeadingSize, ParagraphMixinSize, ParagraphSize, displayMixins, fontFamilyMixin, headingMixins, paragraphMixins };
|
package/dist/no-raw-table.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as FilterConditionOperator, c as FilterFieldType, d as FilterRuleValue, l as FilterOperator, o as FilterField, r as DateRangeFilterValue, u as FilterRule } from "./types-
|
|
2
|
-
import { i as CommonStrings } from "./strings-
|
|
1
|
+
import { a as FilterConditionOperator, c as FilterFieldType, d as FilterRuleValue, l as FilterOperator, o as FilterField, r as DateRangeFilterValue, u as FilterRule } from "./types-K57NVM0M.mjs";
|
|
2
|
+
import { i as CommonStrings } from "./strings-T-gsdqiJ.mjs";
|
|
3
3
|
//#region src/components/DataTable/TableControls/FiltersV2/operators.d.ts
|
|
4
4
|
type OperatorLabelKey = 'operatorIs' | 'operatorIsNot' | 'operatorContains' | 'operatorDoesNotContain' | 'operatorIsEmpty' | 'operatorIsNotEmpty' | 'operatorIsTrue' | 'operatorIsFalse' | 'operatorBefore' | 'operatorAfter' | 'operatorBetween' | 'operatorIsAnyOf' | 'operatorIsNoneOf' | 'operatorGreaterThan' | 'operatorGreaterThanOrEqual' | 'operatorLessThan' | 'operatorLessThanOrEqual' | 'operatorIsEqualTo' | 'operatorIsGreaterThan' | 'operatorIsLessThan';
|
|
5
5
|
/**
|
|
@@ -109,4 +109,4 @@ declare function emptyValueForRule(field: Pick<FilterField, 'type' | 'condition'
|
|
|
109
109
|
declare function reconcileValueForOperator(field: Pick<FilterField, 'type' | 'condition'>, nextOperator: FilterOperator, previousOperator: FilterOperator, value: FilterRuleValue): FilterRuleValue;
|
|
110
110
|
//#endregion
|
|
111
111
|
export { isNumericComparisonOperator as _, emptyValueForRule as a, reconcileValueForOperator as b, getDefaultOperatorForType as c, getOperatorsForType as d, hasCompleteConditionValue as f, isNumericComparison as g, isMinutePrecisionDate as h, emptyValueForFieldType as i, getOperatorLabel as l, isCompleteNumericComparisonValue as m, NumericComparisonOperator as n, fieldHasMultipleOperators as o, isCompleteDateRange as p, carriesDateRange as r, getConditionOperator as s, NUMERIC_COMPARISON_OPERATORS as t, getOperatorsForField as u, isRangeOperator as v, withValue as x, isValuelessOperator as y };
|
|
112
|
-
//# sourceMappingURL=operators-
|
|
112
|
+
//# sourceMappingURL=operators-BTCnQpeu.d.mts.map
|
package/dist/operators.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as isNumericComparisonOperator, a as emptyValueForRule, b as reconcileValueForOperator, c as getDefaultOperatorForType, d as getOperatorsForType, f as hasCompleteConditionValue, g as isNumericComparison, h as isMinutePrecisionDate, i as emptyValueForFieldType, l as getOperatorLabel, m as isCompleteNumericComparisonValue, n as NumericComparisonOperator, o as fieldHasMultipleOperators, p as isCompleteDateRange, r as carriesDateRange, s as getConditionOperator, t as NUMERIC_COMPARISON_OPERATORS, u as getOperatorsForField, v as isRangeOperator, x as withValue, y as isValuelessOperator } from "./operators-
|
|
1
|
+
import { _ as isNumericComparisonOperator, a as emptyValueForRule, b as reconcileValueForOperator, c as getDefaultOperatorForType, d as getOperatorsForType, f as hasCompleteConditionValue, g as isNumericComparison, h as isMinutePrecisionDate, i as emptyValueForFieldType, l as getOperatorLabel, m as isCompleteNumericComparisonValue, n as NumericComparisonOperator, o as fieldHasMultipleOperators, p as isCompleteDateRange, r as carriesDateRange, s as getConditionOperator, t as NUMERIC_COMPARISON_OPERATORS, u as getOperatorsForField, v as isRangeOperator, x as withValue, y as isValuelessOperator } from "./operators-BTCnQpeu.mjs";
|
|
2
2
|
export { NUMERIC_COMPARISON_OPERATORS, NumericComparisonOperator, carriesDateRange, emptyValueForFieldType, emptyValueForRule, fieldHasMultipleOperators, getConditionOperator, getDefaultOperatorForType, getOperatorLabel, getOperatorsForField, getOperatorsForType, hasCompleteConditionValue, isCompleteDateRange, isCompleteNumericComparisonValue, isMinutePrecisionDate, isNumericComparison, isNumericComparisonOperator, isRangeOperator, isValuelessOperator, reconcileValueForOperator, withValue };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as PdsColor } from "./color-
|
|
2
|
-
import { i as PersonaTheme } from "./theme-
|
|
1
|
+
import { n as PdsColor } from "./color-Db57Wms_.mjs";
|
|
2
|
+
import { i as PersonaTheme } from "./theme-BFP-_PEh.mjs";
|
|
3
3
|
import { Color } from "@persona/design-tokens";
|
|
4
4
|
|
|
5
5
|
//#region src/components/Button/palette.d.ts
|
|
@@ -18,4 +18,4 @@ interface ButtonPalette {
|
|
|
18
18
|
declare const buttonPalette: (theme: PersonaTheme, variant: ButtonVariant) => ButtonPalette;
|
|
19
19
|
//#endregion
|
|
20
20
|
export { ButtonVariant as n, buttonPalette as r, ButtonPalette as t };
|
|
21
|
-
//# sourceMappingURL=palette-
|
|
21
|
+
//# sourceMappingURL=palette-D61sDyDI.d.mts.map
|
package/dist/palette.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as ButtonVariant, r as buttonPalette, t as ButtonPalette } from "./palette-
|
|
1
|
+
import { n as ButtonVariant, r as buttonPalette, t as ButtonPalette } from "./palette-D61sDyDI.mjs";
|
|
2
2
|
export { ButtonPalette, ButtonVariant, buttonPalette };
|
|
@@ -11,7 +11,7 @@ import { n as Stack, t as HStack } from "../../Stack-Bzom2BTR.mjs";
|
|
|
11
11
|
import { n as Button$1, t as IconButton } from "../../IconButton-DftINsp7.mjs";
|
|
12
12
|
import { n as DropdownMenu_default } from "../../DropdownMenu-Q8S-9rXm.mjs";
|
|
13
13
|
import { t as DropdownButton } from "../../DropdownButton-BiFRlSVD.mjs";
|
|
14
|
-
import { n as SingleColumnLayout } from "../../PageLayout-
|
|
14
|
+
import { n as SingleColumnLayout } from "../../PageLayout-DjtGrvJa.mjs";
|
|
15
15
|
import { cloneElement } from "react";
|
|
16
16
|
import { Color, Spacing } from "@persona/design-tokens";
|
|
17
17
|
import { Disclosure, DisclosurePanel } from "react-aria-components";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["Heading","Button","DropdownMenu"],"sources":["../../../src/patterns/CardGrouping/CardGrouping.tsx"],"sourcesContent":["import { cloneElement, type ReactElement, type ReactNode } from 'react';\nimport { Disclosure, DisclosurePanel } from 'react-aria-components';\nimport styled from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\nimport { ChevronDownIcon, MoreIcon } from '@persona/icons';\nimport Button, { IconButton } from 'design-system/components/Button';\nimport DropdownButton from 'design-system/components/DropdownButton';\nimport DropdownMenu from 'design-system/components/DropdownMenu';\nimport { HStack, Stack } from 'design-system/components/Stack';\nimport { Heading, Paragraph } from 'design-system/components/Text';\nimport Tooltip from 'design-system/components/Tooltip';\nimport { HeadlessAriaButton } from 'design-system/lib/HeadlessAriaButton';\nimport { RouterLink } from 'design-system/lib/router';\nimport { semanticColor } from 'design-system/lib/semanticColor';\nimport { TruncatedText } from 'design-system/lib/TruncatedText';\nimport { focusStyle } from 'design-system/mixins/focus';\nimport type { IconAction, TextAction } from 'design-system/types/Action';\nimport { TransitionDuration } from 'design-system/variables/transitions';\n\nimport { SingleColumnLayout, type SingleColumnLayoutProps } from '../PageLayout';\n\ntype HeaderAction = IconAction | TextAction;\n\nconst isIconAction = (action: HeaderAction): action is IconAction => 'icon' in action;\n\nconst splitGroupActions = (actions: HeaderAction[]) => {\n if (actions.length <= 1) {\n return { inlineActions: actions, overflowActions: [] as HeaderAction[] };\n }\n\n const primaryIndex = actions.findIndex(\n (action) => !isIconAction(action) && action.variant === 'primary',\n );\n const inlineIndex = primaryIndex === -1 ? 0 : primaryIndex;\n\n return {\n inlineActions: [actions[inlineIndex]],\n overflowActions: actions.filter((_, index) => index !== inlineIndex),\n };\n};\n\nconst actionKey = (action: HeaderAction, index: number) =>\n isIconAction(action)\n ? (action.id ?? action.ariaLabel ?? `action-${index}`)\n : (action.id ?? action.label ?? `action-${index}`);\n\nconst actionLabel = (action: HeaderAction) =>\n isIconAction(action) ? action.ariaLabel : action.label;\n\nconst overflowLinkProps = (action: HeaderAction) => {\n if (action.disabled || action.to == null) {\n return {};\n }\n\n if (typeof action.to === 'string' && action.to.startsWith('https://')) {\n return {\n as: 'a' as const,\n href: action.to,\n target: '_blank' as const,\n rel: 'noreferrer',\n };\n }\n\n return { as: RouterLink, to: action.to };\n};\n\nconst TitleBlock = styled(Stack)`\n min-width: 0;\n flex: 1;\n\n > * {\n min-width: 0;\n }\n`;\n\nconst TitleHeading = styled(Heading)`\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n min-width: 0;\n max-width: 100%;\n overflow: hidden;\n`;\n\nconst TitleText = styled.span`\n min-width: 0;\n`;\n\nconst Actions = styled(HStack)`\n flex-shrink: 0;\n`;\n\nconst Adornment = styled.span`\n display: flex;\n flex-shrink: 0;\n max-width: 180px;\n`;\n\nconst ActionRow = ({\n actions,\n size,\n collapseToPrimary = false,\n}: {\n actions: HeaderAction[];\n size: 'sm' | 'md';\n collapseToPrimary?: boolean;\n}) => {\n const visibleActions = actions.filter((action) => !action.hidden);\n const { inlineActions, overflowActions } = collapseToPrimary\n ? splitGroupActions(visibleActions)\n : { inlineActions: visibleActions, overflowActions: [] as HeaderAction[] };\n\n const buttons = inlineActions.map((action, i) => {\n const key = actionKey(action, i);\n\n const button = isIconAction(action) ? (\n <IconButton\n id={action.id}\n key={key}\n to={action.to}\n size={size}\n disabled={action.disabled}\n aria-label={action.ariaLabel}\n onClick={(event) => {\n event.stopPropagation();\n return action.onClick?.(event);\n }}\n >\n {action.icon}\n </IconButton>\n ) : (\n <Button\n id={action.id}\n key={key}\n to={action.to}\n aria-label={action.ariaLabel}\n disabled={action.disabled}\n variant={action.variant ?? 'basic'}\n size={size}\n width='auto'\n onSecondaryBackground={(action.variant ?? 'basic') === 'basic'}\n prefixIcon={action.prefixIcon}\n suffixIcon={action.suffixIcon}\n onClick={(event) => {\n event.stopPropagation();\n return action.onClick?.(event);\n }}\n >\n {action.label}\n </Button>\n );\n\n return action.tooltip ? (\n <Tooltip key={key} {...action.tooltipProps} trigger={button}>\n {action.tooltip}\n </Tooltip>\n ) : (\n button\n );\n });\n\n return (\n <Actions spacing={Spacing[2]}>\n {buttons}\n {overflowActions.length > 0 && (\n <DropdownButton\n variant='basic'\n size={size}\n width='icon'\n onSecondaryBackground\n suffixIcon={undefined}\n aria-label='More actions'\n menuProps={{ portal: true }}\n menuItems={overflowActions.map((action, index) => (\n <DropdownMenu.Item\n id={action.id ?? actionLabel(action)}\n key={actionKey(action, index)}\n disabled={action.disabled}\n variant={!isIconAction(action) && action.variant === 'danger' ? 'danger' : undefined}\n {...overflowLinkProps(action)}\n onClick={(event) => {\n event.stopPropagation();\n return action.onClick?.(event);\n }}\n >\n {actionLabel(action)}\n </DropdownMenu.Item>\n ))}\n >\n <MoreIcon />\n </DropdownButton>\n )}\n </Actions>\n );\n};\n\nconst onSecondarySurface = (node: ReactElement) =>\n cloneElement(node as ReactElement<{ onSecondaryBackground?: boolean }>, {\n onSecondaryBackground: true,\n });\n\nconst Controls = styled.div`\n margin-top: ${Spacing[2]};\n\n > * {\n margin-bottom: 0;\n }\n`;\n\nconst ListHeader = ({\n title,\n description,\n sticker,\n status,\n actions,\n controls,\n}: {\n title: string;\n description?: string;\n sticker?: ReactElement;\n status?: ReactElement;\n actions?: HeaderAction[];\n controls?: ReactNode;\n}) => (\n <HStack align='flex-start' justify='space-between' spacing={Spacing[4]} fullWidth>\n <TitleBlock spacing={Spacing[1]}>\n <TitleHeading forwardedAs='h2' size='xsm'>\n <TitleText>\n <TruncatedText>{title}</TruncatedText>\n </TitleText>\n {sticker && <Adornment>{onSecondarySurface(sticker)}</Adornment>}\n {status && <Adornment>{status}</Adornment>}\n </TitleHeading>\n {description && <Paragraph size='md'>{description}</Paragraph>}\n {controls && <Controls>{controls}</Controls>}\n </TitleBlock>\n {actions && actions.length > 0 && <ActionRow actions={actions} size='md' />}\n </HStack>\n);\n\nconst GroupDisclosure = styled(Disclosure)`\n display: flex;\n flex-direction: column;\n`;\n\nconst GroupHeader = styled(HStack)`\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n height: ${Spacing[9]};\n`;\n\nconst Trigger = styled(HeadlessAriaButton)`\n min-width: 0;\n flex: 1;\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n text-align: left;\n\n &:focus-visible {\n ${focusStyle}\n }\n`;\n\nconst Chevron = styled.span<{ $expanded: boolean }>`\n display: flex;\n flex-shrink: 0;\n color: ${({ theme }) => semanticColor(theme, 'FgSecondary', theme.color.text.secondary)};\n\n svg {\n transition: transform ${TransitionDuration.Faster} ease-out;\n transform: rotate(${({ $expanded }) => ($expanded ? '0deg' : '-90deg')});\n }\n`;\n\nconst GroupList = styled(Stack)`\n && {\n gap: 0;\n }\n\n > *:not(:last-child) {\n border-bottom: 1px solid\n ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n }\n`;\n\nconst GroupCards = styled(Stack)`\n padding-top: ${Spacing[4]};\n padding-bottom: ${Spacing[4]};\n`;\n\nexport type CardGroupingGroup = {\n title: string;\n sticker?: ReactElement;\n actions?: HeaderAction[];\n /** @defaultValue false */\n defaultExpanded?: boolean;\n children: ReactNode;\n};\n\ntype CardGroupingHeaderProps = Omit<SingleColumnLayoutProps, 'main'> & {\n title?: string;\n description?: string;\n sticker?: ReactElement;\n status?: ReactElement;\n actions?: HeaderAction[];\n /** Extra controls under the description, inside the list title group. */\n controls?: ReactNode;\n};\n\nexport type CardGroupingProps = CardGroupingHeaderProps & {\n groups: CardGroupingGroup[];\n};\n\nconst GroupRow = ({\n title,\n sticker,\n actions,\n defaultExpanded = false,\n children,\n}: CardGroupingGroup) => (\n <GroupDisclosure defaultExpanded={defaultExpanded}>\n {({ isExpanded }) => (\n <>\n <GroupHeader align='center' justify='space-between' spacing={Spacing[2]}>\n <Trigger slot='trigger' aria-label={title}>\n <Chevron $expanded={isExpanded} aria-hidden>\n <ChevronDownIcon />\n </Chevron>\n <TitleBlock spacing={Spacing[1]}>\n <TitleHeading forwardedAs='h3' size='xsm'>\n <TitleText>\n <TruncatedText>{title}</TruncatedText>\n </TitleText>\n {sticker && <Adornment>{onSecondarySurface(sticker)}</Adornment>}\n </TitleHeading>\n </TitleBlock>\n </Trigger>\n {actions && actions.length > 0 && (\n <ActionRow actions={actions} size='sm' collapseToPrimary />\n )}\n </GroupHeader>\n <DisclosurePanel>\n <GroupCards spacing={Spacing[4]}>{children}</GroupCards>\n </DisclosurePanel>\n </>\n )}\n </GroupDisclosure>\n);\n\nexport const CardGrouping = ({\n title,\n description,\n sticker,\n status,\n actions,\n controls,\n groups,\n ...chrome\n}: CardGroupingProps) => (\n <SingleColumnLayout\n {...chrome}\n main={\n <Stack spacing={Spacing[4]} fullWidth>\n {title ? (\n <ListHeader\n title={title}\n description={description}\n sticker={sticker}\n status={status}\n actions={actions}\n controls={controls}\n />\n ) : (\n description && <Paragraph size='md'>{description}</Paragraph>\n )}\n <GroupList fullWidth>\n {groups.map((group, index) => (\n <GroupRow key={`${group.title}-${index}`} {...group} />\n ))}\n </GroupList>\n </Stack>\n }\n />\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["Heading","Button","DropdownMenu"],"sources":["../../../src/patterns/CardGrouping/CardGrouping.tsx"],"sourcesContent":["import { cloneElement, type ReactElement, type ReactNode } from 'react';\nimport { Disclosure, DisclosurePanel } from 'react-aria-components';\nimport styled from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\nimport { ChevronDownIcon, MoreIcon } from '@persona/icons';\n\nimport Button, { IconButton } from '#src/components/Button';\nimport DropdownButton from '#src/components/DropdownButton';\nimport DropdownMenu from '#src/components/DropdownMenu';\nimport { HStack, Stack } from '#src/components/Stack';\nimport { Heading, Paragraph } from '#src/components/Text';\nimport Tooltip from '#src/components/Tooltip';\nimport { HeadlessAriaButton } from '#src/lib/HeadlessAriaButton';\nimport { RouterLink } from '#src/lib/router';\nimport { semanticColor } from '#src/lib/semanticColor';\nimport { TruncatedText } from '#src/lib/TruncatedText';\nimport { focusStyle } from '#src/mixins/focus';\nimport type { IconAction, TextAction } from '#src/types/Action';\nimport { TransitionDuration } from '#src/variables/transitions';\n\nimport { SingleColumnLayout, type SingleColumnLayoutProps } from '../PageLayout';\n\ntype HeaderAction = IconAction | TextAction;\n\nconst isIconAction = (action: HeaderAction): action is IconAction => 'icon' in action;\n\nconst splitGroupActions = (actions: HeaderAction[]) => {\n if (actions.length <= 1) {\n return { inlineActions: actions, overflowActions: [] as HeaderAction[] };\n }\n\n const primaryIndex = actions.findIndex(\n (action) => !isIconAction(action) && action.variant === 'primary',\n );\n const inlineIndex = primaryIndex === -1 ? 0 : primaryIndex;\n\n return {\n inlineActions: [actions[inlineIndex]],\n overflowActions: actions.filter((_, index) => index !== inlineIndex),\n };\n};\n\nconst actionKey = (action: HeaderAction, index: number) =>\n isIconAction(action)\n ? (action.id ?? action.ariaLabel ?? `action-${index}`)\n : (action.id ?? action.label ?? `action-${index}`);\n\nconst actionLabel = (action: HeaderAction) =>\n isIconAction(action) ? action.ariaLabel : action.label;\n\nconst overflowLinkProps = (action: HeaderAction) => {\n if (action.disabled || action.to == null) {\n return {};\n }\n\n if (typeof action.to === 'string' && action.to.startsWith('https://')) {\n return {\n as: 'a' as const,\n href: action.to,\n target: '_blank' as const,\n rel: 'noreferrer',\n };\n }\n\n return { as: RouterLink, to: action.to };\n};\n\nconst TitleBlock = styled(Stack)`\n min-width: 0;\n flex: 1;\n\n > * {\n min-width: 0;\n }\n`;\n\nconst TitleHeading = styled(Heading)`\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n min-width: 0;\n max-width: 100%;\n overflow: hidden;\n`;\n\nconst TitleText = styled.span`\n min-width: 0;\n`;\n\nconst Actions = styled(HStack)`\n flex-shrink: 0;\n`;\n\nconst Adornment = styled.span`\n display: flex;\n flex-shrink: 0;\n max-width: 180px;\n`;\n\nconst ActionRow = ({\n actions,\n size,\n collapseToPrimary = false,\n}: {\n actions: HeaderAction[];\n size: 'sm' | 'md';\n collapseToPrimary?: boolean;\n}) => {\n const visibleActions = actions.filter((action) => !action.hidden);\n const { inlineActions, overflowActions } = collapseToPrimary\n ? splitGroupActions(visibleActions)\n : { inlineActions: visibleActions, overflowActions: [] as HeaderAction[] };\n\n const buttons = inlineActions.map((action, i) => {\n const key = actionKey(action, i);\n\n const button = isIconAction(action) ? (\n <IconButton\n id={action.id}\n key={key}\n to={action.to}\n size={size}\n disabled={action.disabled}\n aria-label={action.ariaLabel}\n onClick={(event) => {\n event.stopPropagation();\n return action.onClick?.(event);\n }}\n >\n {action.icon}\n </IconButton>\n ) : (\n <Button\n id={action.id}\n key={key}\n to={action.to}\n aria-label={action.ariaLabel}\n disabled={action.disabled}\n variant={action.variant ?? 'basic'}\n size={size}\n width='auto'\n onSecondaryBackground={(action.variant ?? 'basic') === 'basic'}\n prefixIcon={action.prefixIcon}\n suffixIcon={action.suffixIcon}\n onClick={(event) => {\n event.stopPropagation();\n return action.onClick?.(event);\n }}\n >\n {action.label}\n </Button>\n );\n\n return action.tooltip ? (\n <Tooltip key={key} {...action.tooltipProps} trigger={button}>\n {action.tooltip}\n </Tooltip>\n ) : (\n button\n );\n });\n\n return (\n <Actions spacing={Spacing[2]}>\n {buttons}\n {overflowActions.length > 0 && (\n <DropdownButton\n variant='basic'\n size={size}\n width='icon'\n onSecondaryBackground\n suffixIcon={undefined}\n aria-label='More actions'\n menuProps={{ portal: true }}\n menuItems={overflowActions.map((action, index) => (\n <DropdownMenu.Item\n id={action.id ?? actionLabel(action)}\n key={actionKey(action, index)}\n disabled={action.disabled}\n variant={!isIconAction(action) && action.variant === 'danger' ? 'danger' : undefined}\n {...overflowLinkProps(action)}\n onClick={(event) => {\n event.stopPropagation();\n return action.onClick?.(event);\n }}\n >\n {actionLabel(action)}\n </DropdownMenu.Item>\n ))}\n >\n <MoreIcon />\n </DropdownButton>\n )}\n </Actions>\n );\n};\n\nconst onSecondarySurface = (node: ReactElement) =>\n cloneElement(node as ReactElement<{ onSecondaryBackground?: boolean }>, {\n onSecondaryBackground: true,\n });\n\nconst Controls = styled.div`\n margin-top: ${Spacing[2]};\n\n > * {\n margin-bottom: 0;\n }\n`;\n\nconst ListHeader = ({\n title,\n description,\n sticker,\n status,\n actions,\n controls,\n}: {\n title: string;\n description?: string;\n sticker?: ReactElement;\n status?: ReactElement;\n actions?: HeaderAction[];\n controls?: ReactNode;\n}) => (\n <HStack align='flex-start' justify='space-between' spacing={Spacing[4]} fullWidth>\n <TitleBlock spacing={Spacing[1]}>\n <TitleHeading forwardedAs='h2' size='xsm'>\n <TitleText>\n <TruncatedText>{title}</TruncatedText>\n </TitleText>\n {sticker && <Adornment>{onSecondarySurface(sticker)}</Adornment>}\n {status && <Adornment>{status}</Adornment>}\n </TitleHeading>\n {description && <Paragraph size='md'>{description}</Paragraph>}\n {controls && <Controls>{controls}</Controls>}\n </TitleBlock>\n {actions && actions.length > 0 && <ActionRow actions={actions} size='md' />}\n </HStack>\n);\n\nconst GroupDisclosure = styled(Disclosure)`\n display: flex;\n flex-direction: column;\n`;\n\nconst GroupHeader = styled(HStack)`\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n height: ${Spacing[9]};\n`;\n\nconst Trigger = styled(HeadlessAriaButton)`\n min-width: 0;\n flex: 1;\n display: flex;\n align-items: center;\n gap: ${Spacing[2]};\n text-align: left;\n\n &:focus-visible {\n ${focusStyle}\n }\n`;\n\nconst Chevron = styled.span<{ $expanded: boolean }>`\n display: flex;\n flex-shrink: 0;\n color: ${({ theme }) => semanticColor(theme, 'FgSecondary', theme.color.text.secondary)};\n\n svg {\n transition: transform ${TransitionDuration.Faster} ease-out;\n transform: rotate(${({ $expanded }) => ($expanded ? '0deg' : '-90deg')});\n }\n`;\n\nconst GroupList = styled(Stack)`\n && {\n gap: 0;\n }\n\n > *:not(:last-child) {\n border-bottom: 1px solid\n ${({ theme }) => semanticColor(theme, 'BorderSubtle', Color.BorderDivider)};\n }\n`;\n\nconst GroupCards = styled(Stack)`\n padding-top: ${Spacing[4]};\n padding-bottom: ${Spacing[4]};\n`;\n\nexport type CardGroupingGroup = {\n title: string;\n sticker?: ReactElement;\n actions?: HeaderAction[];\n /** @defaultValue false */\n defaultExpanded?: boolean;\n children: ReactNode;\n};\n\ntype CardGroupingHeaderProps = Omit<SingleColumnLayoutProps, 'main'> & {\n title?: string;\n description?: string;\n sticker?: ReactElement;\n status?: ReactElement;\n actions?: HeaderAction[];\n /** Extra controls under the description, inside the list title group. */\n controls?: ReactNode;\n};\n\nexport type CardGroupingProps = CardGroupingHeaderProps & {\n groups: CardGroupingGroup[];\n};\n\nconst GroupRow = ({\n title,\n sticker,\n actions,\n defaultExpanded = false,\n children,\n}: CardGroupingGroup) => (\n <GroupDisclosure defaultExpanded={defaultExpanded}>\n {({ isExpanded }) => (\n <>\n <GroupHeader align='center' justify='space-between' spacing={Spacing[2]}>\n <Trigger slot='trigger' aria-label={title}>\n <Chevron $expanded={isExpanded} aria-hidden>\n <ChevronDownIcon />\n </Chevron>\n <TitleBlock spacing={Spacing[1]}>\n <TitleHeading forwardedAs='h3' size='xsm'>\n <TitleText>\n <TruncatedText>{title}</TruncatedText>\n </TitleText>\n {sticker && <Adornment>{onSecondarySurface(sticker)}</Adornment>}\n </TitleHeading>\n </TitleBlock>\n </Trigger>\n {actions && actions.length > 0 && (\n <ActionRow actions={actions} size='sm' collapseToPrimary />\n )}\n </GroupHeader>\n <DisclosurePanel>\n <GroupCards spacing={Spacing[4]}>{children}</GroupCards>\n </DisclosurePanel>\n </>\n )}\n </GroupDisclosure>\n);\n\nexport const CardGrouping = ({\n title,\n description,\n sticker,\n status,\n actions,\n controls,\n groups,\n ...chrome\n}: CardGroupingProps) => (\n <SingleColumnLayout\n {...chrome}\n main={\n <Stack spacing={Spacing[4]} fullWidth>\n {title ? (\n <ListHeader\n title={title}\n description={description}\n sticker={sticker}\n status={status}\n actions={actions}\n controls={controls}\n />\n ) : (\n description && <Paragraph size='md'>{description}</Paragraph>\n )}\n <GroupList fullWidth>\n {groups.map((group, index) => (\n <GroupRow key={`${group.title}-${index}`} {...group} />\n ))}\n </GroupList>\n </Stack>\n }\n />\n);\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as Card_default } from "../../Card-DuQHyroh.mjs";
|
|
2
|
-
import { t as DataTable } from "../../DataTable-
|
|
3
|
-
import { t as PageHeader } from "../../PageHeader-
|
|
4
|
-
import { a as Section, i as Container } from "../../PageLayout-
|
|
2
|
+
import { t as DataTable } from "../../DataTable-B7QqP6YU.mjs";
|
|
3
|
+
import { t as PageHeader } from "../../PageHeader-DEKTopzU.mjs";
|
|
4
|
+
import { a as Section, i as Container } from "../../PageLayout-DjtGrvJa.mjs";
|
|
5
5
|
import { useMemo } from "react";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
//#region src/patterns/IndexTableLayout/useColumnConfiguration.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["Card"],"sources":["../../../src/patterns/IndexTableLayout/useColumnConfiguration.ts","../../../src/patterns/IndexTableLayout/IndexTableLayout.tsx"],"sourcesContent":["import type { RowData } from '@tanstack/react-table';\nimport { useMemo } from 'react';\n\nimport type { TableViewConfigurationProps } from '
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["Card"],"sources":["../../../src/patterns/IndexTableLayout/useColumnConfiguration.ts","../../../src/patterns/IndexTableLayout/IndexTableLayout.tsx"],"sourcesContent":["import type { RowData } from '@tanstack/react-table';\nimport { useMemo } from 'react';\n\nimport type { TableViewConfigurationProps } from '#src/components/DataTable/TableControls';\nimport type { ColumnConfig } from '#src/components/DataTable/types';\n\ntype AttributeColumn = TableViewConfigurationProps['columnConfiguration'][number];\n\nexport interface ColumnDefinition<TData extends RowData> extends ColumnConfig<TData> {\n key?: string;\n label: string;\n isCustomField?: boolean;\n}\n\nexport type ColumnDefinitions<TData extends RowData> = Record<string, ColumnDefinition<TData>>;\n\nexport interface UseColumnConfigurationOptions<TData extends RowData> {\n columnDefinitions: ColumnDefinitions<TData>;\n defaultColumns: string[];\n columnConfiguration?: AttributeColumn[];\n onColumnConfigurationChange?: (c: AttributeColumn[]) => void;\n getColumnDisabled?: (columnId: string, shownColumnIds: string[]) => boolean;\n sortByRelevance?: boolean;\n}\n\nexport const useColumnConfiguration = <TData extends RowData>({\n columnDefinitions,\n columnConfiguration,\n onColumnConfigurationChange,\n defaultColumns,\n getColumnDisabled,\n sortByRelevance,\n}: UseColumnConfigurationOptions<TData>): {\n columns: ColumnConfig<TData>[];\n columnConfigurationProps?: TableViewConfigurationProps;\n} => {\n const visibleColumnKeys = useMemo(() => {\n if (!columnConfiguration || columnConfiguration.length === 0) {\n return defaultColumns;\n }\n\n return columnConfiguration.map((column) => column.key);\n }, [columnConfiguration, defaultColumns]);\n\n const columns = useMemo(\n () =>\n visibleColumnKeys\n .map((key): ColumnConfig<TData> | null => {\n const definition = columnDefinitions[key];\n if (!definition) {\n return null;\n }\n\n const {\n key: _key,\n label: _label,\n isCustomField: _isCustomField,\n ...columnConfig\n } = definition;\n return columnConfig;\n })\n .filter((column): column is ColumnConfig<TData> => column != null),\n [visibleColumnKeys, columnDefinitions],\n );\n\n const columnConfigurationProps = useMemo(() => {\n if (!columnConfiguration || !onColumnConfigurationChange) {\n return undefined;\n }\n\n const attributeOptions = Object.keys(columnDefinitions).map((key) => ({\n key: String(key),\n label: columnDefinitions[key].label,\n isCustomField: columnDefinitions[key].isCustomField,\n }));\n\n const currentConfiguration: AttributeColumn[] = visibleColumnKeys\n .filter((key) => columnDefinitions[key] != null)\n .map((key) => ({\n key: String(key),\n label: columnDefinitions[key].label,\n }));\n\n return {\n columnConfiguration: currentConfiguration,\n attributeOptions,\n updateColumnConfiguration: onColumnConfigurationChange,\n getColumnDisabled,\n sortByRelevance,\n };\n }, [\n columnConfiguration,\n onColumnConfigurationChange,\n columnDefinitions,\n visibleColumnKeys,\n getColumnDisabled,\n sortByRelevance,\n ]);\n\n return { columns, columnConfigurationProps };\n};\n","import type { RowData } from '@tanstack/react-table';\nimport type { ReactNode } from 'react';\n\nimport type { BreadcrumbsProps } from '#src/components/Breadcrumbs';\nimport Card from '#src/components/Card';\nimport DataTable, { type DataTableProps } from '#src/components/DataTable';\nimport type {\n BaseFilterConfig,\n FilterConfig,\n TableControlsProps,\n} from '#src/components/DataTable/TableControls';\nimport PageHeader, { type PageHeaderProps } from '#src/components/PageHeader';\nimport { Container, Section } from '#src/patterns/PageLayout';\n\nimport {\n useColumnConfiguration,\n type UseColumnConfigurationOptions,\n} from './useColumnConfiguration';\n\nexport type IndexTableLayoutHeaderProps =\n | (Omit<Extract<PageHeaderProps, { breadcrumbs?: never }>, 'title'> & { title?: ReactNode })\n | Extract<PageHeaderProps, { breadcrumbs: BreadcrumbsProps }>;\n\nexport interface IndexTableLayoutProps<\n TData extends RowData,\n TFilter extends BaseFilterConfig = FilterConfig,\n>\n extends\n Omit<\n DataTableProps<TData, TFilter>,\n | 'title'\n | 'showControls'\n | 'controls'\n | 'columns'\n | 'enableRowSelection'\n | 'showColumnProperties'\n | 'onUpdateColumnProperties'\n >,\n UseColumnConfigurationOptions<TData> {\n title: string;\n tableTitle?: string;\n headerProps?: IndexTableLayoutHeaderProps;\n banner?: ReactNode;\n className?: string;\n /** Host-built table controls: search, filters/filterResolver/filterPanel, saved-view ControlBar props, tableActions… */\n controls?: Omit<TableControlsProps<TFilter>, 'columnConfigurationProps'>;\n}\n\nexport const IndexTableLayout = <\n TData extends RowData,\n TFilter extends BaseFilterConfig = FilterConfig,\n>({\n title,\n tableTitle,\n headerProps,\n banner,\n className,\n controls,\n columnDefinitions,\n defaultColumns,\n columnConfiguration,\n onColumnConfigurationChange,\n getColumnDisabled,\n sortByRelevance,\n ...dataTableProps\n}: IndexTableLayoutProps<TData, TFilter>) => {\n const { columns, columnConfigurationProps } = useColumnConfiguration({\n columnDefinitions,\n defaultColumns,\n columnConfiguration,\n onColumnConfigurationChange,\n getColumnDisabled,\n sortByRelevance,\n });\n\n const hasBulkActions =\n (dataTableProps.bulkActions?.length ?? 0) > 0 ||\n (controls?.bulkActions?.length ?? 0) > 0 ||\n dataTableProps.getAvailableBulkActions != null;\n\n const {\n title: headerTitle,\n subtitle: headerSubtitle,\n breadcrumbs,\n ...restHeaderProps\n } = headerProps ?? {};\n\n const forwardedDataTableProps = { ...dataTableProps } as typeof dataTableProps &\n Pick<DataTableProps<TData, TFilter>, 'showColumnProperties' | 'onUpdateColumnProperties'>;\n delete forwardedDataTableProps.showColumnProperties;\n delete forwardedDataTableProps.onUpdateColumnProperties;\n\n return (\n <Container className={className}>\n <PageHeader\n {...restHeaderProps}\n {...(breadcrumbs\n ? { breadcrumbs }\n : { title: headerTitle ?? title, subtitle: headerSubtitle })}\n />\n <Section>\n <Card>\n <Card.Body>\n {banner}\n <DataTable<TData, TFilter>\n {...forwardedDataTableProps}\n columns={columns}\n title={tableTitle}\n showControls\n controls={{ ...controls, columnConfigurationProps }}\n enableRowSelection={hasBulkActions}\n />\n </Card.Body>\n </Card>\n </Section>\n </Container>\n );\n};\n\nexport default IndexTableLayout;\n"],"mappings":";;;;;;;AAyBA,MAAa,0BAAiD,EAC5D,mBACA,qBACA,6BACA,gBACA,mBACA,sBAIG;CACH,MAAM,oBAAoB,cAAc;AACtC,MAAI,CAAC,uBAAuB,oBAAoB,WAAW,EACzD,QAAO;AAGT,SAAO,oBAAoB,KAAK,WAAW,OAAO,IAAI;IACrD,CAAC,qBAAqB,eAAe,CAAC;AAyDzC,QAAO;EAAE,SAvDO,cAEZ,kBACG,KAAK,QAAoC;GACxC,MAAM,aAAa,kBAAkB;AACrC,OAAI,CAAC,WACH,QAAO;GAGT,MAAM,EACJ,KAAK,MACL,OAAO,QACP,eAAe,gBACf,GAAG,iBACD;AACJ,UAAO;IACP,CACD,QAAQ,WAA0C,UAAU,KAAK,EACtE,CAAC,mBAAmB,kBAAkB,CAqCxB;EAAE,0BAlCe,cAAc;AAC7C,OAAI,CAAC,uBAAuB,CAAC,4BAC3B;GAGF,MAAM,mBAAmB,OAAO,KAAK,kBAAkB,CAAC,KAAK,SAAS;IACpE,KAAK,OAAO,IAAI;IAChB,OAAO,kBAAkB,KAAK;IAC9B,eAAe,kBAAkB,KAAK;IACvC,EAAE;AASH,UAAO;IACL,qBAR8C,kBAC7C,QAAQ,QAAQ,kBAAkB,QAAQ,KAAK,CAC/C,KAAK,SAAS;KACb,KAAK,OAAO,IAAI;KAChB,OAAO,kBAAkB,KAAK;KAC/B,EAGwC;IACzC;IACA,2BAA2B;IAC3B;IACA;IACD;KACA;GACD;GACA;GACA;GACA;GACA;GACA;GACD,CAEyC;EAAE;;;;ACnD9C,MAAa,oBAGX,EACA,OACA,YACA,aACA,QACA,WACA,UACA,mBACA,gBACA,qBACA,6BACA,mBACA,iBACA,GAAG,qBACwC;CAC3C,MAAM,EAAE,SAAS,6BAA6B,uBAAuB;EACnE;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,kBACH,eAAe,aAAa,UAAU,KAAK,MAC3C,UAAU,aAAa,UAAU,KAAK,KACvC,eAAe,2BAA2B;CAE5C,MAAM,EACJ,OAAO,aACP,UAAU,gBACV,aACA,GAAG,oBACD,eAAe,EAAE;CAErB,MAAM,0BAA0B,EAAE,GAAG,gBAAgB;AAErD,QAAO,wBAAwB;AAC/B,QAAO,wBAAwB;AAE/B,QACE,qBAAC,WAAD;EAAsB;YAAtB,CACE,oBAAC,YAAD;GACE,GAAI;GACJ,GAAK,cACD,EAAE,aAAa,GACf;IAAE,OAAO,eAAe;IAAO,UAAU;IAAgB;GAC7D,CAAA,EACF,oBAAC,SAAD,EAAA,UACE,oBAACA,cAAD,EAAA,UACE,qBAACA,aAAK,MAAN,EAAA,UAAA,CACG,QACD,oBAAC,WAAD;GACE,GAAI;GACK;GACT,OAAO;GACP,cAAA;GACA,UAAU;IAAE,GAAG;IAAU;IAA0B;GACnD,oBAAoB;GACpB,CAAA,CACQ,EAAA,CAAA,EACP,CAAA,EACC,CAAA,CACA"}
|
|
@@ -3,7 +3,7 @@ import { n as Stack, t as HStack } from "../../Stack-Bzom2BTR.mjs";
|
|
|
3
3
|
import { t as LoadingShimmer } from "../../LoadingShimmer-oPIv2ESr.mjs";
|
|
4
4
|
import { t as Card_default } from "../../CardV2-BRJbRSts.mjs";
|
|
5
5
|
import { h as Table, m as TableHeaderCell, n as TableBody, p as TableRow, r as TableHead, s as TableCell } from "../../Table-DPi4Dt5H.mjs";
|
|
6
|
-
import { n as PageHeaderContainer } from "../../PageHeader-
|
|
6
|
+
import { n as PageHeaderContainer } from "../../PageHeader-DEKTopzU.mjs";
|
|
7
7
|
import { Color, Spacing } from "@persona/design-tokens";
|
|
8
8
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
//#region src/patterns/containers.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["CardV2"],"sources":["../../../src/patterns/containers.tsx","../../../src/patterns/LayoutLoadingShimmer/LayoutLoadingShimmer.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\n\nexport const Layout = styled.div`\n position: relative;\n box-sizing: border-box;\n width: 100%;\n padding: ${Spacing[7]};\n`;\n\nexport const DetailLayout = styled.div`\n position: relative;\n box-sizing: border-box;\n width: 100%;\n padding: ${Spacing[4]} ${Spacing[5]};\n`;\n","import styled from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\nimport CardV2 from '
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["CardV2"],"sources":["../../../src/patterns/containers.tsx","../../../src/patterns/LayoutLoadingShimmer/LayoutLoadingShimmer.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\n\nexport const Layout = styled.div`\n position: relative;\n box-sizing: border-box;\n width: 100%;\n padding: ${Spacing[7]};\n`;\n\nexport const DetailLayout = styled.div`\n position: relative;\n box-sizing: border-box;\n width: 100%;\n padding: ${Spacing[4]} ${Spacing[5]};\n`;\n","import styled from 'styled-components';\n\nimport { Color, Spacing } from '@persona/design-tokens';\n\nimport CardV2 from '#src/components/CardV2';\nimport { LoadingShimmer } from '#src/components/LoadingShimmer';\nimport { PageHeaderContainer } from '#src/components/PageHeader';\nimport Stack, { HStack } from '#src/components/Stack';\nimport Table, {\n TableBody,\n TableCell,\n TableHead,\n TableHeaderCell,\n TableRow,\n} from '#src/components/Table';\nimport { Layout, DetailLayout } from '#src/patterns/containers';\n\nexport const DataTableShimmer = () => {\n return (\n <Stack>\n <Table>\n <TableHead>\n <TableRow>\n {Array.from({ length: 5 }).map((_, i) => (\n <TableHeaderCell key={i}>\n <LoadingShimmer width='100%' height='20px' />\n </TableHeaderCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {Array.from({ length: 8 }).map((_, i) => (\n <TableRow key={i} disableHoverBackground>\n {Array.from({ length: 5 }).map((_, i) => (\n <TableCell key={i}>\n <LoadingShimmer width='100%' height='24px' />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Stack>\n );\n};\n\nconst HeaderShimmer = () => {\n return (\n <PageHeaderContainer>\n <LoadingShimmer width='150px' height='30px' />\n <HStack>\n <LoadingShimmer width='80px' height='30px' />\n <LoadingShimmer width='80px' height='30px' />\n </HStack>\n </PageHeaderContainer>\n );\n};\n\n/**\n * Render a single full-width card with a loading state mimicking a DataTable.\n */\nexport const IndexViewLayoutShimmer = () => {\n return (\n <>\n <HeaderShimmer />\n <Layout>\n <CardV2>\n <CardV2.Section>\n <DataTableShimmer />\n </CardV2.Section>\n </CardV2>\n </Layout>\n </>\n );\n};\n\n/**\n * Render `cards.length` full-width cards of the specified height in a loading state.\n */\nexport const SimpleLayoutShimmer = ({ cards = [400] }: { cards?: number[] }) => {\n return (\n <>\n <HeaderShimmer />\n <Layout>\n <Stack spacing={Spacing[4]}>\n {cards.map((height, i) => (\n <CardV2 key={i} loading loadingProps={{ height: `${height}px` }}>\n <></>\n </CardV2>\n ))}\n </Stack>\n </Layout>\n </>\n );\n};\n\nconst TabsDivider = styled.hr`\n border-top: 1px solid ${Color.BorderDivider};\n margin: 0;\n`;\n\nconst TabsShimmer = () => {\n return (\n <Stack>\n <HStack>\n <LoadingShimmer variant='secondary' width='100px' height='20px' />\n <LoadingShimmer variant='secondary' width='100px' height='20px' />\n </HStack>\n <TabsDivider />\n </Stack>\n );\n};\n\nconst MainColumn = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${Spacing[4]};\n flex: 2;\n`;\n\nconst RightColumn = styled.div`\n display: flex;\n flex-direction: column;\n gap: ${Spacing[4]};\n flex: 1;\n`;\n\nexport const ShowViewLayoutShimmer = () => {\n return (\n <>\n <HeaderShimmer />\n <DetailLayout>\n <Stack spacing={Spacing[4]}>\n <TabsShimmer />\n <HStack spacing={Spacing[4]}>\n <MainColumn>\n <CardV2 heading={{ title: 'Loading' }} loading loadingProps={{ height: '100px' }}>\n <></>\n </CardV2>\n <CardV2 heading={{ title: 'Loading' }} loading loadingProps={{ height: '400px' }}>\n <></>\n </CardV2>\n <CardV2 heading={{ title: 'Loading' }} loading>\n <></>\n </CardV2>\n </MainColumn>\n <RightColumn>\n <CardV2 heading={{ title: 'Loading' }} loading loadingProps={{ height: '400px' }}>\n <></>\n </CardV2>\n <CardV2 heading={{ title: 'Loading' }} loading>\n <></>\n </CardV2>\n </RightColumn>\n </HStack>\n </Stack>\n </DetailLayout>\n </>\n );\n};\n"],"mappings":"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"}
|