@persona/design-system 0.10.6 → 0.10.8
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 +28 -0
- package/dist/Accordion.d.mts +1 -1
- package/dist/AccordionItem.d.mts +1 -1
- package/dist/{Action-Bmo8B-Q3.d.mts → Action-CHWYwpYR.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/BooleanValueControl.d.mts +1 -1
- package/dist/BottomPanel.d.mts +7 -0
- package/dist/{Breadcrumb-DnY8n3EL.d.mts → Breadcrumb-uK4v6_P1.d.mts} +1 -1
- package/dist/Breadcrumb.d.mts +1 -1
- package/dist/{Breadcrumbs-DRu_JfdI.d.mts → Breadcrumbs-3MtvzTPi.d.mts} +2 -2
- package/dist/Breadcrumbs.d.mts +1 -1
- package/dist/{Button-Cg8KyT5M.d.mts → Button-DjD8QxcY.d.mts} +4 -4
- package/dist/Button.d.mts +1 -1
- package/dist/{Calendar-D-6WOLJ1.d.mts → Calendar-DRJljp8S.d.mts} +1 -1
- package/dist/Calendar.d.mts +1 -1
- package/dist/CalendarBase.d.mts +1 -1
- package/dist/{Card-CfECLwQ6.d.mts → Card-DiUHtYg_.d.mts} +3 -3
- package/dist/Card.d.mts +1 -1
- package/dist/Card2.d.mts +2 -2
- package/dist/CardGrouping.d.mts +2 -2
- package/dist/{Checkbox-ZywrdT_h.d.mts → Checkbox-Clt9mCTk.d.mts} +1 -1
- package/dist/Checkbox.d.mts +1 -1
- package/dist/{CheckboxGroupField-CjeEoiPa.d.mts → CheckboxGroupField-DnVqlpwi.d.mts} +3 -3
- package/dist/CheckboxGroupField.d.mts +1 -1
- package/dist/ChoicesValueControl.d.mts +1 -1
- package/dist/{Combobox-O6LbofT2.d.mts → Combobox-fYZjpn5-.d.mts} +3 -3
- package/dist/Combobox.d.mts +2 -2
- package/dist/{ComboboxBase-5aSDuY-E.d.mts → ComboboxBase-Mb8HyeAI.d.mts} +6 -6
- package/dist/ComboboxBase.d.mts +1 -1
- package/dist/{ComboboxMultiSelect-D3mX4Dzq.d.mts → ComboboxMultiSelect-C87lkXr7.d.mts} +2 -2
- package/dist/ComboboxMultiSelect.d.mts +1 -1
- package/dist/{ComboboxSingleSelect-CfSy6sCU.d.mts → ComboboxSingleSelect-CIYakRW5.d.mts} +4 -4
- package/dist/ComboboxSingleSelect.d.mts +1 -1
- package/dist/{CompactBar-zYfXjFmn.d.mts → CompactBar-D67CdcIo.d.mts} +3 -3
- package/dist/CompactBar.d.mts +1 -1
- package/dist/{ControlBar-kJ_eWf8f.d.mts → ControlBar-34th2yt4.d.mts} +2 -2
- package/dist/ControlBar.d.mts +1 -1
- package/dist/{DataTable-BXHmi-SW.d.mts → DataTable-BZtzdtVs.d.mts} +6 -6
- package/dist/{DataTable-CAfZNJmb.mjs → DataTable-BvA2H9D9.mjs} +4 -4
- package/dist/{DataTable-CAfZNJmb.mjs.map → DataTable-BvA2H9D9.mjs.map} +1 -1
- package/dist/DataTable.d.mts +1 -1
- package/dist/{DateField-g7malFm-.d.mts → DateField-BIPqfQzC.d.mts} +2 -2
- package/dist/DateField.d.mts +1 -1
- package/dist/{DatePicker-8kUpFFh8.d.mts → DatePicker-BdOqWdwx.d.mts} +2 -2
- package/dist/DatePicker.d.mts +1 -1
- package/dist/{DateRangePicker-Nv4uNuIW.d.mts → DateRangePicker-DlHC2q--.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.d.mts +2 -2
- package/dist/{DropdownMenu-CAYVX9Q3.d.mts → DropdownMenu-DVxXQDRC.d.mts} +2 -2
- package/dist/DropdownMenu.d.mts +1 -1
- package/dist/{ErrorProps-Cy-APmdC.d.mts → ErrorProps-4Ohsinrf.d.mts} +1 -1
- package/dist/ErrorProps.d.mts +1 -1
- package/dist/{FieldRegistry-a44G08fS.d.mts → FieldRegistry-C2NVPhMO.d.mts} +2 -2
- package/dist/FieldRegistry.d.mts +1 -1
- package/dist/{FilterBar-BpMguIXl.d.mts → FilterBar-BE_gBM0H.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-BUgSKimy.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-TkYMZeBd.d.mts → FormControl-BQe3GRhi.d.mts} +2 -2
- package/dist/FormControl.d.mts +1 -1
- package/dist/FormControlLabel.d.mts +1 -1
- package/dist/{FormField-D10LW9-a.d.mts → FormField-BW5uMzId.d.mts} +2 -2
- 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-CV0Lcf0C.d.mts} +1 -1
- package/dist/Header.d.mts +1 -1
- package/dist/{HelperTooltip-BLfPfJRN.d.mts → HelperTooltip-BNM3pTM-.d.mts} +2 -2
- package/dist/HelperTooltip.d.mts +1 -1
- package/dist/HighlightedText.d.mts +2 -2
- package/dist/{I18nContext-BBVKF9ui.d.mts → I18nContext-Dt5VraO8.d.mts} +2 -2
- package/dist/I18nContext.d.mts +1 -1
- package/dist/{IconButton-KhCwTwPx.d.mts → IconButton-C_ReZm8v.d.mts} +2 -2
- 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-DH-5dKor.d.mts} +3 -3
- package/dist/Input.d.mts +1 -1
- package/dist/{InputProps-BT7-RfnD.d.mts → InputProps-B363l4_k.d.mts} +2 -2
- package/dist/InputProps.d.mts +1 -1
- package/dist/{Inserter-BnQVEqHV.d.mts → Inserter-BtUatmsd.d.mts} +1 -1
- package/dist/Inserter.d.mts +1 -1
- package/dist/IntegerValueControl.d.mts +1 -1
- package/dist/Link.d.mts +1 -1
- package/dist/{ListBox-CvnFiHK5.d.mts → ListBox-DxOACf6N.d.mts} +3 -3
- package/dist/ListBox.d.mts +1 -1
- package/dist/{ListBoxField-DuUwx9Cv.d.mts → ListBoxField-CgnDuhUw.d.mts} +4 -4
- package/dist/ListBoxField.d.mts +1 -1
- package/dist/LoadingShimmer.d.mts +1 -1
- package/dist/{LogicRow-COvZNiUd.d.mts → LogicRow-Dv_1G1TC.d.mts} +3 -3
- package/dist/LogicRow.d.mts +1 -1
- package/dist/MaskedInput.d.mts +2 -2
- package/dist/{Menu-ByYFNvgS.d.mts → Menu-BfjvH8mr.d.mts} +3 -3
- package/dist/Menu.d.mts +1 -1
- package/dist/{Modal-ziuzDCPN.mjs → Modal-BGlRX63w.mjs} +47 -39
- package/dist/Modal-BGlRX63w.mjs.map +1 -0
- package/dist/{Modal-Bhwq1bQJ.d.mts → Modal-CujB7DuB.d.mts} +6 -3
- package/dist/Modal.d.mts +1 -1
- package/dist/{PageHeader-BzvA_NNt.mjs → PageHeader-DEKTopzU.mjs} +1 -1
- package/dist/{PageHeader-BzvA_NNt.mjs.map → PageHeader-DEKTopzU.mjs.map} +1 -1
- package/dist/{PageHeader-D2QLrS7-.d.mts → PageHeader-DRatgscC.d.mts} +2 -2
- package/dist/PageHeader.d.mts +1 -1
- package/dist/{PageLayout-DfAbeFIh.d.mts → PageLayout-BdVM37bV.d.mts} +1 -1
- package/dist/{PageLayout-DCe3F76N.mjs → PageLayout-DjtGrvJa.mjs} +2 -2
- package/dist/{PageLayout-DCe3F76N.mjs.map → PageLayout-DjtGrvJa.mjs.map} +1 -1
- package/dist/PageLayout.d.mts +1 -1
- package/dist/{PageLayoutFrame-CQLREOBH.d.mts → PageLayoutFrame-4QGs7x-t.d.mts} +1 -1
- package/dist/PageLayoutFrame.d.mts +1 -1
- package/dist/{PageSelector-BOe4EzbS.d.mts → PageSelector-B5CcAzss.d.mts} +3 -3
- package/dist/PageSelector.d.mts +1 -1
- package/dist/{Pagination-Dpc6TadZ.mjs → Pagination-C8hPOu0l.mjs} +2 -2
- package/dist/{Pagination-Dpc6TadZ.mjs.map → Pagination-C8hPOu0l.mjs.map} +1 -1
- package/dist/{Pagination-Dy-OSH0Y.d.mts → Pagination-CCKuudiz.d.mts} +2 -2
- package/dist/Pagination.d.mts +1 -1
- package/dist/{PillShell-B35z66jZ.d.mts → PillShell-B7Bm-dsE.d.mts} +2 -2
- package/dist/PillShell.d.mts +1 -1
- package/dist/{ProgressIndicator-COCwRZfK.d.mts → ProgressIndicator-BoB5JOfV.d.mts} +1 -1
- package/dist/{ProgressIndicator-ISARECzW.mjs → ProgressIndicator-zt3ndT9U.mjs} +1 -1
- package/dist/{ProgressIndicator-ISARECzW.mjs.map → ProgressIndicator-zt3ndT9U.mjs.map} +1 -1
- package/dist/ProgressIndicator.d.mts +1 -1
- package/dist/{PseudoClassProps-D_f-JUT1.d.mts → PseudoClassProps-CIuO49a4.d.mts} +1 -1
- package/dist/PseudoClassProps.d.mts +1 -1
- package/dist/{RadioGroup-pyGpWhhj.d.mts → RadioGroup-D_z37ZOU.d.mts} +1 -1
- package/dist/RadioGroup.d.mts +1 -1
- package/dist/{RangeCalendar-BiugsdSP.d.mts → RangeCalendar-CLCp70w6.d.mts} +2 -2
- package/dist/RangeCalendar.d.mts +1 -1
- package/dist/RangeCalendarPresets.d.mts +1 -1
- package/dist/{RouterContext-BUdfr1it.d.mts → RouterContext-DchdVyIX.d.mts} +2 -2
- package/dist/RouterContext.d.mts +1 -1
- package/dist/{RouterLink-BKbfvJcM.d.mts → RouterLink-B6ikC5Kq.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-D42v7MLp.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-yVK6kkcx.d.mts} +1 -1
- package/dist/SegmentedControl.d.mts +1 -1
- package/dist/{Select-BLqHxJUz.d.mts → Select-CaG6OQi1.d.mts} +3 -3
- package/dist/Select.d.mts +1 -1
- package/dist/{SingleColumnLayout-DBo35psH.d.mts → SingleColumnLayout-D2bpX7X1.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/{SplitColumnLayout-C6m_mwdf.d.mts → SplitColumnLayout-CRDSDHHm.d.mts} +2 -2
- package/dist/SplitColumnLayout.d.mts +1 -1
- package/dist/{Stack-DrYxBkiF.d.mts → Stack-CODxfzhl.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-pWl1-FLb.mjs.map → StatusIndicator-Zf75KK3O.mjs.map} +1 -1
- package/dist/{Sticker-sIBnBbHD.d.mts → Sticker-CLvRB8V5.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/{Table-BJfcRpMX.d.mts → Table-qsIo7V-R.d.mts} +1 -1
- package/dist/Table.d.mts +1 -1
- package/dist/{TableBody-CBz2PjA-.d.mts → TableBody-1fqZP2Cb.d.mts} +1 -1
- package/dist/TableBody.d.mts +1 -1
- package/dist/TableBox.d.mts +2 -2
- package/dist/{TableBoxCell-DPXrw63v.d.mts → TableBoxCell-B9KMWebc.d.mts} +6 -6
- package/dist/TableBoxCell.d.mts +1 -1
- package/dist/{TableBoxField-C7MGSie9.d.mts → TableBoxField-0uIGzBhF.d.mts} +5 -5
- package/dist/TableBoxField.d.mts +1 -1
- package/dist/{TableBoxRow-uToXVWvl.d.mts → TableBoxRow-PjBBDcEk.d.mts} +3 -3
- package/dist/TableBoxRow.d.mts +1 -1
- package/dist/{TableBoxRowActions-Do646IVE.d.mts → TableBoxRowActions-B7stm6Q3.d.mts} +2 -2
- package/dist/TableBoxRowActions.d.mts +1 -1
- package/dist/{TableCell-KHx5JlqZ.d.mts → TableCell-CQsF7t4e.d.mts} +2 -2
- package/dist/TableCell.d.mts +1 -1
- package/dist/{TableControls-C-0Dw8vM.mjs → TableControls-BZ8RrYOc.mjs} +3 -3
- package/dist/{TableControls-C-0Dw8vM.mjs.map → TableControls-BZ8RrYOc.mjs.map} +1 -1
- package/dist/{TableControls-BHv-tXA-.d.mts → TableControls-DT2YpFK8.d.mts} +5 -5
- package/dist/TableControls.d.mts +1 -1
- package/dist/{TableControlsContext-D6rifk-v.d.mts → TableControlsContext-CHuLxfa7.d.mts} +2 -2
- package/dist/TableControlsContext.d.mts +1 -1
- package/dist/{TableHead-D5A3bOwt.d.mts → TableHead-Dq0Fi4hP.d.mts} +1 -1
- package/dist/TableHead.d.mts +1 -1
- package/dist/{TableHeaderCell-BXgnxPpX.d.mts → TableHeaderCell-CAfcFwJy.d.mts} +1 -1
- package/dist/TableHeaderCell.d.mts +1 -1
- package/dist/{TableLayout-Dy5ht8KO.d.mts → TableLayout-CM8wiU3C.d.mts} +1 -1
- package/dist/TableLayout.d.mts +1 -1
- package/dist/{TableRow-C1iGbNjZ.d.mts → TableRow-C4eHuRF3.d.mts} +2 -2
- package/dist/TableRow.d.mts +1 -1
- package/dist/TableTH.d.mts +1 -1
- package/dist/{TableViewConfigurationDropdown-C5bjxTGX.d.mts → TableViewConfigurationDropdown-BWBBUXCs.d.mts} +2 -2
- package/dist/TableViewConfigurationDropdown.d.mts +1 -1
- package/dist/{Text-SaoRBdB6.d.mts → Text-CvaqognH.d.mts} +3 -3
- package/dist/Text.d.mts +1 -1
- package/dist/{TextArea-gtSlghjy.d.mts → TextArea-BJWEaURJ.d.mts} +2 -2
- package/dist/TextArea.d.mts +1 -1
- package/dist/{TextUnderlineTooltip-DV61avLv.d.mts → TextUnderlineTooltip-Bd5e8KH3.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-CeIDF9yS.d.mts} +1 -1
- package/dist/Toggle.d.mts +1 -1
- package/dist/{Tooltip-CysnLwST.d.mts → Tooltip-Ddy2Jq0K.d.mts} +2 -2
- package/dist/Tooltip.d.mts +1 -1
- package/dist/{TruncatedText-YcjNG-zP.d.mts → TruncatedText-sr9Fhm3N.d.mts} +1 -1
- package/dist/VersionHistory.d.mts +1 -1
- package/dist/{VersionHistoryItem-Px3ylMMq.d.mts → VersionHistoryItem-DnKlzuDe.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-C5mXGz6T.d.mts} +4 -4
- package/dist/charting-C_WcP3tn.d.mts +16 -0
- package/dist/{clientFilterUtils-DDDG1g7e.d.mts → clientFilterUtils-scLlIuP_.d.mts} +2 -2
- package/dist/clientFilterUtils.d.mts +1 -1
- package/dist/{codec-D8ZKFLgs.d.mts → codec-BTVOuowZ.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/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/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/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/DropdownMenu/index.d.mts +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/Grid/index.mjs +1 -1
- package/dist/components/Input/index.d.mts +1 -1
- package/dist/components/ListBox/index.d.mts +3 -3
- 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/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 +21 -476
- package/dist/components/RichTextEditor/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/SmartTextInput/index.d.mts +2 -2
- 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/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/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/compound-expression.d.mts +1 -1
- package/dist/{constants-CW1DRgwi.d.mts → constants-ByOakXpZ.d.mts} +1 -1
- package/dist/{constants-D1hoZ5LO.d.mts → constants-DMTL6rF3.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-BgyL9FVF.d.mts} +2 -2
- package/dist/createPath.d.mts +1 -1
- package/dist/{date-range-rule-value-CrVBpQcf.d.mts → date-range-rule-value-ASr06ClE.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-DDDCA6kc.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-CmFyIPCm.d.mts} +2 -2
- package/dist/filter-size-context.d.mts +1 -1
- package/dist/{filters-CkAFU8LV.d.mts → filters-yfzOlqKx.d.mts} +2 -2
- package/dist/filters.d.mts +1 -1
- package/dist/{formatDateTime-BikGGrvq.d.mts → formatDateTime-Cj9XxTNy.d.mts} +1 -1
- package/dist/formatDateTime.d.mts +1 -1
- package/dist/{helpers-Dvvcz-hL.d.mts → helpers-BeCjgAeE.d.mts} +4 -4
- package/dist/helpers.d.mts +1 -1
- package/dist/{i18n-CKRi992F.mjs → i18n-DaOKaFc2.mjs} +3 -2
- package/dist/i18n-DaOKaFc2.mjs.map +1 -0
- package/dist/{index-B3A74_ew.d.mts → index-BEHNqAZa.d.mts} +3 -3
- package/dist/{index-BWAycP6L.d.mts → index-CLAjbq8g.d.mts} +1 -1
- package/dist/{index-D2YFHdsf.d.mts → index-aK04IR94.d.mts} +2 -2
- package/dist/{index-FgIOTuJ4.d.mts → index-kIon1vPp.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-JDU1Goyr.d.mts} +3 -3
- package/dist/{inputFields-Dfpxi68z.d.mts → inputFields-BnCdmuBt.d.mts} +11 -11
- package/dist/inputFields.d.mts +1 -1
- package/dist/{jsonSchema-DUkfAip_.d.mts → jsonSchema-C4lfpDrt.d.mts} +1 -1
- package/dist/lib/PDSProvider.d.mts +3 -3
- package/dist/lib/PDSProvider.mjs +1 -1
- package/dist/lib/TruncatedText.d.mts +1 -1
- package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
- package/dist/lib/chainTypes.d.mts +1 -1
- package/dist/lib/color.d.mts +1 -1
- package/dist/lib/colorMode.d.mts +2 -2
- 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/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 +2 -2
- package/dist/lib/semanticColor.mjs +8 -1
- package/dist/lib/semanticColor.mjs.map +1 -1
- package/dist/lib/useChain.d.mts +1 -1
- package/dist/lint/index.d.mts +1 -1
- package/dist/{listbox-options-CkwENvff.d.mts → listbox-options-CDAOiyUH.d.mts} +3 -3
- package/dist/listbox-options.d.mts +1 -1
- package/dist/{message-klSuXfNN.d.mts → message-BwRBPJXD.d.mts} +1 -1
- package/dist/{methodChain-CRYRDa1k.d.mts → methodChain-COb4t-sM.d.mts} +4 -4
- package/dist/{methodChainTypes-BtbYWrdP.d.mts → methodChainTypes-De6sHGyd.d.mts} +2 -2
- package/dist/min-copy-size.d.mts +1 -1
- package/dist/mixins/focus.d.mts +1 -1
- package/dist/mixins/hoverable.d.mts +2 -2
- package/dist/mixins/input.d.mts +1 -1
- package/dist/mixins/menuItem.d.mts +2 -2
- package/dist/mixins/scrollbar.d.mts +1 -1
- package/dist/mixins/text.d.mts +1 -1
- package/dist/no-raw-table.d.mts +1 -1
- package/dist/{operators-BrrJKENE.d.mts → operators-BHxKZcpD.d.mts} +3 -3
- package/dist/operators.d.mts +1 -1
- package/dist/{palette-C1gBbxLO.d.mts → palette-DzmqrF_5.d.mts} +3 -3
- package/dist/palette.d.mts +1 -1
- package/dist/patterns/CardGrouping/index.mjs +1 -1
- package/dist/patterns/IndexTableLayout/index.mjs +3 -3
- package/dist/patterns/LayoutLoadingShimmer/index.mjs +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/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-DMq37JC5.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-BKbCliyl.d.mts} +15 -4
- package/dist/shared.d.mts +1 -1
- package/dist/{strings-BGXKl_m6.d.mts → strings-DQZIO-n7.d.mts} +3 -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-CeA8jBRG.d.mts} +9 -5
- package/dist/theme.d.mts +1 -1
- package/dist/theme.mjs +7 -3
- package/dist/theme.mjs.map +1 -1
- package/dist/tone.d.mts +3 -3
- package/dist/tree.d.mts +1 -1
- package/dist/{types-XjJqUj-p.d.mts → types-02Ij0dgs.d.mts} +4 -4
- package/dist/{types-Dhz6VMKx.d.mts → types-BRYGqFVm.d.mts} +1 -1
- package/dist/{types-sUEmxsGM.d.mts → types-BXJ6qAGy.d.mts} +3 -3
- package/dist/{types-DoJubhWu.d.mts → types-BeFBvQ1c.d.mts} +3 -3
- package/dist/{types-6L0ptM6-.d.mts → types-CRymR_J9.d.mts} +1 -1
- package/dist/{types-B4KbdEDc.d.mts → types-CqcbWyUY.d.mts} +2 -2
- package/dist/{types-C2RhHxbE.d.mts → types-D9LBWGw5.d.mts} +1 -1
- package/dist/{types-DbOD5vE_.d.mts → types-DLnCkvTt.d.mts} +2 -2
- package/dist/{types-rDQg74j-.d.mts → types-DQVUNrrN.d.mts} +1 -1
- package/dist/{types-dmItSshr.d.mts → types-DeVO4sCM.d.mts} +2 -2
- 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-CXUuK3_r.d.mts} +2 -2
- package/dist/url-state.d.mts +1 -1
- package/dist/{useChain-7ztbfujM.d.mts → useChain-B--KAtdN.d.mts} +6 -6
- 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-DBpbxAEC.d.mts} +3 -3
- package/dist/useFilterStateV2.d.mts +1 -1
- package/dist/{useFormField-CmEJCqse.d.mts → useFormField-CTgW_8x0.d.mts} +2 -2
- package/dist/useFormField.d.mts +1 -1
- package/dist/{useLocationPathname-Cnqj8pf4.d.mts → useLocationPathname-CClZoIGm.d.mts} +1 -1
- package/dist/useLocationPathname.d.mts +1 -1
- package/dist/{useTableBoxDragAndDrop-8NS4JBuI.d.mts → useTableBoxDragAndDrop-MwbXWWDQ.d.mts} +1 -1
- package/dist/useTableBoxDragAndDrop.d.mts +1 -1
- package/dist/{useTableColumns-nPrbDfF_.d.mts → useTableColumns-DJFy0Gp8.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-BDkho6-f.d.mts} +1 -1
- package/dist/utilities.d.mts +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-Tgg3AhuP.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-XQbGCdsP.d.mts} +2 -2
- package/dist/value-control-resolver.d.mts +1 -1
- package/dist/variables/charting.d.mts +2 -0
- package/dist/variables/charting.mjs +134 -0
- package/dist/variables/charting.mjs.map +1 -0
- package/dist/variables/effect.d.mts +1 -1
- package/dist/variables/semantic.d.mts +1 -1
- package/llms.txt +1 -1
- package/package.json +16 -15
- package/skills/ui-authoring/COMPONENTS.md +1 -0
- package/skills/ui-authoring/TOKENS.md +5 -0
- package/dist/Modal-ziuzDCPN.mjs.map +0 -1
- package/dist/i18n-CKRi992F.mjs.map +0 -1
- /package/dist/{index-AnhM47-e2.d.mts → index-0-W_aPej.d.mts} +0 -0
- /package/dist/{index-B4woaFSm.d.mts → index-1-AkepUA.d.mts} +0 -0
- /package/dist/{index-BPiqSRRl.d.mts → index-B9SJORI12.d.mts} +0 -0
- /package/dist/{index-BTviwbFV.d.mts → index-BINnViIh.d.mts} +0 -0
- /package/dist/{index-Bo9LXG4r.d.mts → index-BRJ_6A42.d.mts} +0 -0
- /package/dist/{index-Bq9Ub6MB.d.mts → index-BsHUlSyF.d.mts} +0 -0
- /package/dist/{index-BrGZHEgX.d.mts → index-C6HcjJiY.d.mts} +0 -0
- /package/dist/{index-Bt4QNofW.d.mts → index-CCKHlTA4.d.mts} +0 -0
- /package/dist/{index-CFuHCx9T.d.mts → index-CCt0lwyI.d.mts} +0 -0
- /package/dist/{index-CLTQPxoD.d.mts → index-CIABef8t.d.mts} +0 -0
- /package/dist/{index-CjDodOH2.d.mts → index-CoUVmp_Q.d.mts} +0 -0
- /package/dist/{index-CjmAoxrR2.d.mts → index-CuYZJcK3.d.mts} +0 -0
- /package/dist/{index-CzItj62a.d.mts → index-CuheJfs-.d.mts} +0 -0
- /package/dist/{index-DBGd4WeR.d.mts → index-CzdAgLVp.d.mts} +0 -0
- /package/dist/{index-DW3xeuzq.d.mts → index-DG59sVPG2.d.mts} +0 -0
- /package/dist/{index-DZlqSwCF.d.mts → index-DeVKzGce.d.mts} +0 -0
- /package/dist/{index-De7MV8-j.d.mts → index-DedbSZMv.d.mts} +0 -0
- /package/dist/{index-DjG1RCY5.d.mts → index-Deol7ZWO.d.mts} +0 -0
- /package/dist/{index-Dlcv6Ku22.d.mts → index-Es5nKSSL.d.mts} +0 -0
- /package/dist/{index-DrK1_jKY.d.mts → index-KEHKKJEa.d.mts} +0 -0
- /package/dist/{index-DztUdPP_.d.mts → index-PQbV5sXG2.d.mts} +0 -0
- /package/dist/{index-NKYLt_R9.d.mts → index-dhjtMp5F.d.mts} +0 -0
- /package/dist/{index-VWno75SQ.d.mts → index-dzI_9J-Z.d.mts} +0 -0
- /package/dist/{index-uMNhmxEh.d.mts → index-lTcag11w.d.mts} +0 -0
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
import { a as styled } from "./styledComponentsInterop-Cs5CCPRy.mjs";
|
|
2
|
+
import "./variables/transitions.mjs";
|
|
3
|
+
import { Z_INDICES } from "./lib/zindex.mjs";
|
|
4
|
+
import { n as Stack } from "./Stack-Bzom2BTR.mjs";
|
|
5
|
+
import { t as IconButton } from "./IconButton-DftINsp7.mjs";
|
|
6
|
+
import Input_default from "./components/Input/index.mjs";
|
|
7
|
+
import { n as DropdownMenu_default } from "./DropdownMenu-Q8S-9rXm.mjs";
|
|
8
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
9
|
+
import { BorderRadius, Color, Spacing } from "@persona/design-tokens";
|
|
10
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
import { BoldIcon, CheckIcon, GridIcon, ItalicIcon, LinkIcon, ListIcon, UnlinkIcon, XIcon } from "@persona/icons";
|
|
12
|
+
import { AnimatePresence, motion } from "framer-motion";
|
|
13
|
+
import { PluginKey } from "@tiptap/pm/state";
|
|
14
|
+
import { useEditorState } from "@tiptap/react";
|
|
15
|
+
import { BubbleMenu } from "@tiptap/react/menus";
|
|
16
|
+
//#region src/components/FloatingToolbar/FloatingToolbar.tsx
|
|
17
|
+
const BubbleMenuBar = styled(Stack)`
|
|
18
|
+
padding: ${Spacing[1]} ${Spacing[2]};
|
|
19
|
+
background-color: ${Color.CoreSlate1100};
|
|
20
|
+
border-radius: ${BorderRadius.Lg};
|
|
21
|
+
`;
|
|
22
|
+
const IconContainer = styled(motion.div)`
|
|
23
|
+
display: flex;
|
|
24
|
+
gap: ${Spacing[1]};
|
|
25
|
+
`;
|
|
26
|
+
const InverseIconButton = styled(IconButton)`
|
|
27
|
+
background-color: ${({ $selected }) => $selected ? Color.CoreSlate900 : "transparent"};
|
|
28
|
+
color: ${Color.PrimaryWhite};
|
|
29
|
+
transition: background-color ${"100ms"} ease-out;
|
|
30
|
+
|
|
31
|
+
&:hover:not(:disabled) {
|
|
32
|
+
background-color: ${Color.CoreSlate800};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
&:disabled {
|
|
36
|
+
background-color: transparent;
|
|
37
|
+
opacity: 0.35;
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
const InverseInput = styled(Input_default)`
|
|
41
|
+
background-color: ${Color.CoreSlate900};
|
|
42
|
+
color: ${Color.PrimaryWhite};
|
|
43
|
+
|
|
44
|
+
:focus-within {
|
|
45
|
+
border-color: ${Color.CoreBlue700};
|
|
46
|
+
}
|
|
47
|
+
::placeholder {
|
|
48
|
+
color: ${Color.TextDisabled};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
input {
|
|
52
|
+
background-color: ${Color.CoreSlate900};
|
|
53
|
+
color: ${Color.PrimaryWhite};
|
|
54
|
+
}
|
|
55
|
+
`;
|
|
56
|
+
const StyledDropdownItem = styled(DropdownMenu_default.Item)`
|
|
57
|
+
width: 100%;
|
|
58
|
+
height: 30px;
|
|
59
|
+
font-size: small;
|
|
60
|
+
overflow: hidden;
|
|
61
|
+
white-space: nowrap;
|
|
62
|
+
text-overflow: ellipsis;
|
|
63
|
+
`;
|
|
64
|
+
const TOOLBAR_GAP = parseInt(Spacing[1]);
|
|
65
|
+
const FIELD_OFFSET = {
|
|
66
|
+
mainAxis: TOOLBAR_GAP,
|
|
67
|
+
crossAxis: 0
|
|
68
|
+
};
|
|
69
|
+
const SELECTION_OFFSET = {
|
|
70
|
+
mainAxis: TOOLBAR_GAP,
|
|
71
|
+
crossAxis: -parseInt(Spacing[2])
|
|
72
|
+
};
|
|
73
|
+
const getFieldElement = (editor) => editor.options.element instanceof Element ? editor.options.element : editor.view.dom;
|
|
74
|
+
const SAFE_LINK_SCHEME = /^(https?|mailto|tel):/i;
|
|
75
|
+
const URI_SCHEME = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;
|
|
76
|
+
const ensureProtocol = (url) => {
|
|
77
|
+
const trimmedUrl = url.trim();
|
|
78
|
+
if (!trimmedUrl) return "";
|
|
79
|
+
if (trimmedUrl.includes("{{")) {
|
|
80
|
+
const beforePlaceholder = trimmedUrl.slice(0, trimmedUrl.indexOf("{{")).replace(/[\u0000-\u0020]/g, "");
|
|
81
|
+
if (!URI_SCHEME.test(beforePlaceholder) || SAFE_LINK_SCHEME.test(beforePlaceholder)) return trimmedUrl;
|
|
82
|
+
return "";
|
|
83
|
+
}
|
|
84
|
+
const candidate = SAFE_LINK_SCHEME.test(trimmedUrl) ? trimmedUrl : `https://${trimmedUrl}`;
|
|
85
|
+
return URL.canParse(candidate) ? candidate : "";
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Floating bubble toolbar that appears on text selection or inside a table, or —
|
|
89
|
+
* with `showOnFocus` — for as long as the editor is focused.
|
|
90
|
+
* Keyboard shortcut: Cmd/Ctrl+Shift+U opens the link-edit row.
|
|
91
|
+
*/
|
|
92
|
+
function FloatingToolbar({ editor, showOnFocus = false }) {
|
|
93
|
+
const [linkURL, setLinkURL] = useState("");
|
|
94
|
+
const [editingLink, setEditingLink] = useState(false);
|
|
95
|
+
const linkInputRef = useRef(null);
|
|
96
|
+
const toolbarRef = useRef(null);
|
|
97
|
+
const savedSelection = useRef(null);
|
|
98
|
+
const editingLinkRef = useRef(editingLink);
|
|
99
|
+
const blurTimeout = useRef();
|
|
100
|
+
const [pluginKey] = useState(() => new PluginKey("floatingToolbar"));
|
|
101
|
+
useEffect(() => () => clearTimeout(blurTimeout.current), []);
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
editingLinkRef.current = editingLink;
|
|
104
|
+
}, [editingLink]);
|
|
105
|
+
const restoreSelection = useCallback(() => {
|
|
106
|
+
if (editor && savedSelection.current) {
|
|
107
|
+
const { from, to } = savedSelection.current;
|
|
108
|
+
editor.chain().focus().setTextSelection({
|
|
109
|
+
from,
|
|
110
|
+
to
|
|
111
|
+
}).run();
|
|
112
|
+
}
|
|
113
|
+
}, [editor]);
|
|
114
|
+
const openLinkEditingMode = useCallback(() => {
|
|
115
|
+
if (!editor) return;
|
|
116
|
+
if (!editor.can().chain().toggleLink({ href: "https://www.google.com" }).run()) return;
|
|
117
|
+
const { from, to } = editor.state.selection;
|
|
118
|
+
savedSelection.current = {
|
|
119
|
+
from,
|
|
120
|
+
to
|
|
121
|
+
};
|
|
122
|
+
const linkAttr = editor.getAttributes("link");
|
|
123
|
+
if (linkAttr.href) setLinkURL(linkAttr.href);
|
|
124
|
+
editor.chain().focus().setTextSelection({
|
|
125
|
+
from,
|
|
126
|
+
to
|
|
127
|
+
}).run();
|
|
128
|
+
setEditingLink(true);
|
|
129
|
+
setTimeout(() => {
|
|
130
|
+
linkInputRef.current?.focus();
|
|
131
|
+
}, 250);
|
|
132
|
+
}, [editor]);
|
|
133
|
+
useEffect(() => {
|
|
134
|
+
if (!editor) return;
|
|
135
|
+
const dom = editor.view.dom;
|
|
136
|
+
const handler = (event) => {
|
|
137
|
+
if ((event.metaKey || event.ctrlKey) && event.shiftKey && event.key.toLowerCase() === "u") {
|
|
138
|
+
event.preventDefault();
|
|
139
|
+
openLinkEditingMode();
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (event.key === "Escape" && editingLinkRef.current) {
|
|
143
|
+
event.preventDefault();
|
|
144
|
+
setEditingLink(false);
|
|
145
|
+
setLinkURL("");
|
|
146
|
+
savedSelection.current = null;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
dom.addEventListener("keydown", handler);
|
|
150
|
+
return () => {
|
|
151
|
+
dom.removeEventListener("keydown", handler);
|
|
152
|
+
};
|
|
153
|
+
}, [editor, openLinkEditingMode]);
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
if (!editingLink || !editor || !savedSelection.current) return;
|
|
156
|
+
restoreSelection();
|
|
157
|
+
const timeoutId = setTimeout(() => {
|
|
158
|
+
restoreSelection();
|
|
159
|
+
editor.view.dom?.focus();
|
|
160
|
+
}, 0);
|
|
161
|
+
return () => clearTimeout(timeoutId);
|
|
162
|
+
}, [
|
|
163
|
+
editingLink,
|
|
164
|
+
restoreSelection,
|
|
165
|
+
editor
|
|
166
|
+
]);
|
|
167
|
+
const isFocusWithinToolbar = useCallback(() => !!toolbarRef.current?.contains(document.activeElement), []);
|
|
168
|
+
const bubbleMenuOptions = useMemo(() => ({
|
|
169
|
+
placement: "top-start",
|
|
170
|
+
offset: showOnFocus ? FIELD_OFFSET : SELECTION_OFFSET
|
|
171
|
+
}), [showOnFocus]);
|
|
172
|
+
const getReferencedVirtualElement = useMemo(() => showOnFocus && editor ? () => ({ getBoundingClientRect: () => getFieldElement(editor).getBoundingClientRect() }) : void 0, [editor, showOnFocus]);
|
|
173
|
+
const shouldShow = useCallback(({ editor: e, view, from, to }) => {
|
|
174
|
+
if (!e.isEditable) return false;
|
|
175
|
+
if (e.isActive("mention")) return false;
|
|
176
|
+
if (e.isActive("table")) return true;
|
|
177
|
+
if (from !== to) return true;
|
|
178
|
+
return showOnFocus && (view.hasFocus() || isFocusWithinToolbar());
|
|
179
|
+
}, [isFocusWithinToolbar, showOnFocus]);
|
|
180
|
+
const editorState = useEditorState({
|
|
181
|
+
editor,
|
|
182
|
+
selector: (snapshot) => snapshot.editor && {
|
|
183
|
+
isBold: snapshot.editor.isActive("bold"),
|
|
184
|
+
canBold: snapshot.editor.can().chain().toggleBold().run(),
|
|
185
|
+
isItalic: snapshot.editor.isActive("italic"),
|
|
186
|
+
canItalic: snapshot.editor.can().chain().toggleItalic().run(),
|
|
187
|
+
isLink: snapshot.editor.isActive("link"),
|
|
188
|
+
isBulletList: snapshot.editor.isActive("bulletList"),
|
|
189
|
+
canLink: snapshot.editor.can().chain().toggleLink({ href: "https://www.google.com" }).run(),
|
|
190
|
+
isTable: snapshot.editor.isActive("table"),
|
|
191
|
+
canInsertTable: snapshot.editor.can().chain().insertTable({
|
|
192
|
+
rows: 3,
|
|
193
|
+
cols: 3,
|
|
194
|
+
withHeaderRow: true
|
|
195
|
+
}).run()
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
if (!editor || !editorState) return null;
|
|
199
|
+
const handleToolbarBlur = () => {
|
|
200
|
+
blurTimeout.current = setTimeout(() => {
|
|
201
|
+
if (editor.isDestroyed || isFocusWithinToolbar() || editor.view.hasFocus()) return;
|
|
202
|
+
editor.view.dispatch(editor.state.tr.setMeta(pluginKey, "hide"));
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
return /* @__PURE__ */ jsx(BubbleMenu, {
|
|
206
|
+
editor,
|
|
207
|
+
pluginKey,
|
|
208
|
+
options: bubbleMenuOptions,
|
|
209
|
+
getReferencedVirtualElement,
|
|
210
|
+
shouldShow,
|
|
211
|
+
style: { zIndex: Z_INDICES.modalElevated },
|
|
212
|
+
children: /* @__PURE__ */ jsx(AnimatePresence, { children: /* @__PURE__ */ jsx(BubbleMenuBar, {
|
|
213
|
+
ref: toolbarRef,
|
|
214
|
+
role: "toolbar",
|
|
215
|
+
"aria-label": "Text formatting",
|
|
216
|
+
direction: "horizontal",
|
|
217
|
+
spacing: Spacing[1],
|
|
218
|
+
onBlur: handleToolbarBlur,
|
|
219
|
+
children: !editingLink ? /* @__PURE__ */ jsxs(IconContainer, {
|
|
220
|
+
layout: true,
|
|
221
|
+
initial: {
|
|
222
|
+
x: -10,
|
|
223
|
+
opacity: 0
|
|
224
|
+
},
|
|
225
|
+
animate: {
|
|
226
|
+
x: 0,
|
|
227
|
+
opacity: 1
|
|
228
|
+
},
|
|
229
|
+
exit: {
|
|
230
|
+
x: -10,
|
|
231
|
+
opacity: 0
|
|
232
|
+
},
|
|
233
|
+
transition: {
|
|
234
|
+
duration: .2,
|
|
235
|
+
ease: "easeOut"
|
|
236
|
+
},
|
|
237
|
+
children: [
|
|
238
|
+
/* @__PURE__ */ jsx(InverseIconButton, {
|
|
239
|
+
onClick: () => editor.chain().focus().toggleBulletList().run(),
|
|
240
|
+
$selected: editorState.isBulletList,
|
|
241
|
+
size: "sm",
|
|
242
|
+
type: "button",
|
|
243
|
+
"aria-label": "Toggle bullet list",
|
|
244
|
+
"data-rte-menu-bar-item": true,
|
|
245
|
+
children: /* @__PURE__ */ jsx(ListIcon, {})
|
|
246
|
+
}),
|
|
247
|
+
/* @__PURE__ */ jsx(InverseIconButton, {
|
|
248
|
+
onClick: () => editor.chain().focus().toggleBold().run(),
|
|
249
|
+
disabled: !editorState.canBold,
|
|
250
|
+
$selected: editorState.isBold,
|
|
251
|
+
size: "sm",
|
|
252
|
+
type: "button",
|
|
253
|
+
"aria-label": "Toggle bold",
|
|
254
|
+
"data-rte-menu-bar-item": true,
|
|
255
|
+
children: /* @__PURE__ */ jsx(BoldIcon, {})
|
|
256
|
+
}),
|
|
257
|
+
/* @__PURE__ */ jsx(InverseIconButton, {
|
|
258
|
+
onClick: () => editor.chain().focus().toggleItalic().run(),
|
|
259
|
+
$selected: editorState.isItalic,
|
|
260
|
+
disabled: !editorState.canItalic,
|
|
261
|
+
type: "button",
|
|
262
|
+
size: "sm",
|
|
263
|
+
"aria-label": "Toggle italic",
|
|
264
|
+
"data-rte-menu-bar-item": true,
|
|
265
|
+
children: /* @__PURE__ */ jsx(ItalicIcon, {})
|
|
266
|
+
}),
|
|
267
|
+
/* @__PURE__ */ jsx(InverseIconButton, {
|
|
268
|
+
onClick: (e) => {
|
|
269
|
+
e.preventDefault();
|
|
270
|
+
e.stopPropagation();
|
|
271
|
+
openLinkEditingMode();
|
|
272
|
+
},
|
|
273
|
+
$selected: editorState.isLink,
|
|
274
|
+
disabled: !editorState.canLink,
|
|
275
|
+
size: "sm",
|
|
276
|
+
type: "button",
|
|
277
|
+
"aria-label": "Toggle link",
|
|
278
|
+
"data-rte-menu-bar-item": true,
|
|
279
|
+
children: /* @__PURE__ */ jsx(LinkIcon, {})
|
|
280
|
+
}),
|
|
281
|
+
editorState.isTable ? /* @__PURE__ */ jsxs(DropdownMenu_default, {
|
|
282
|
+
contentProps: {
|
|
283
|
+
"data-rte-menu-bar-item": "table-actions-dropdown-menu",
|
|
284
|
+
onCloseAutoFocus: (event) => {
|
|
285
|
+
event.preventDefault();
|
|
286
|
+
editor.commands.focus();
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
trigger: /* @__PURE__ */ jsx(InverseIconButton, {
|
|
290
|
+
size: "sm",
|
|
291
|
+
type: "button",
|
|
292
|
+
"aria-label": "Table actions",
|
|
293
|
+
"data-rte-menu-bar-item": true,
|
|
294
|
+
$selected: true,
|
|
295
|
+
children: /* @__PURE__ */ jsx(GridIcon, {})
|
|
296
|
+
}),
|
|
297
|
+
children: [
|
|
298
|
+
/* @__PURE__ */ jsx(StyledDropdownItem, {
|
|
299
|
+
id: "floating-toolbar__tableAddRowAfter",
|
|
300
|
+
variant: "basic",
|
|
301
|
+
"data-rte-menu-bar-item": "table-add-row-after",
|
|
302
|
+
onClick: () => editor.chain().focus().addRowAfter().run(),
|
|
303
|
+
children: "Add row below"
|
|
304
|
+
}),
|
|
305
|
+
/* @__PURE__ */ jsx(StyledDropdownItem, {
|
|
306
|
+
id: "floating-toolbar__tableAddRowBefore",
|
|
307
|
+
variant: "basic",
|
|
308
|
+
"data-rte-menu-bar-item": "table-add-row-before",
|
|
309
|
+
onClick: () => editor.chain().focus().addRowBefore().run(),
|
|
310
|
+
children: "Add row above"
|
|
311
|
+
}),
|
|
312
|
+
/* @__PURE__ */ jsx(StyledDropdownItem, {
|
|
313
|
+
id: "floating-toolbar__tableAddColumnAfter",
|
|
314
|
+
variant: "basic",
|
|
315
|
+
"data-rte-menu-bar-item": "table-add-column-after",
|
|
316
|
+
onClick: () => editor.chain().focus().addColumnAfter().run(),
|
|
317
|
+
children: "Add column right"
|
|
318
|
+
}),
|
|
319
|
+
/* @__PURE__ */ jsx(StyledDropdownItem, {
|
|
320
|
+
id: "floating-toolbar__tableAddColumnBefore",
|
|
321
|
+
variant: "basic",
|
|
322
|
+
"data-rte-menu-bar-item": "table-add-column-before",
|
|
323
|
+
onClick: () => editor.chain().focus().addColumnBefore().run(),
|
|
324
|
+
children: "Add column left"
|
|
325
|
+
}),
|
|
326
|
+
/* @__PURE__ */ jsx(StyledDropdownItem, {
|
|
327
|
+
id: "floating-toolbar__tableDeleteRow",
|
|
328
|
+
variant: "basic",
|
|
329
|
+
"data-rte-menu-bar-item": "table-delete-row",
|
|
330
|
+
onClick: () => editor.chain().focus().deleteRow().run(),
|
|
331
|
+
children: "Delete row"
|
|
332
|
+
}),
|
|
333
|
+
/* @__PURE__ */ jsx(StyledDropdownItem, {
|
|
334
|
+
id: "floating-toolbar__tableDeleteColumn",
|
|
335
|
+
variant: "basic",
|
|
336
|
+
"data-rte-menu-bar-item": "table-delete-column",
|
|
337
|
+
onClick: () => editor.chain().focus().deleteColumn().run(),
|
|
338
|
+
children: "Delete column"
|
|
339
|
+
}),
|
|
340
|
+
/* @__PURE__ */ jsx(StyledDropdownItem, {
|
|
341
|
+
id: "floating-toolbar__tableToggleHeaderRow",
|
|
342
|
+
variant: "basic",
|
|
343
|
+
"data-rte-menu-bar-item": "table-toggle-header-row",
|
|
344
|
+
onClick: () => editor.chain().focus().toggleHeaderRow().run(),
|
|
345
|
+
children: "Toggle header row"
|
|
346
|
+
}),
|
|
347
|
+
/* @__PURE__ */ jsx(StyledDropdownItem, {
|
|
348
|
+
id: "floating-toolbar__tableDelete",
|
|
349
|
+
variant: "basic",
|
|
350
|
+
"data-rte-menu-bar-item": "table-delete",
|
|
351
|
+
onClick: () => editor.chain().focus().deleteTable().run(),
|
|
352
|
+
children: "Delete table"
|
|
353
|
+
})
|
|
354
|
+
]
|
|
355
|
+
}) : /* @__PURE__ */ jsx(InverseIconButton, {
|
|
356
|
+
onClick: () => editor.chain().focus().insertTable({
|
|
357
|
+
rows: 3,
|
|
358
|
+
cols: 3,
|
|
359
|
+
withHeaderRow: true
|
|
360
|
+
}).run(),
|
|
361
|
+
disabled: !editorState.canInsertTable,
|
|
362
|
+
size: "sm",
|
|
363
|
+
type: "button",
|
|
364
|
+
"aria-label": "Insert table",
|
|
365
|
+
"data-rte-menu-bar-item": true,
|
|
366
|
+
children: /* @__PURE__ */ jsx(GridIcon, {})
|
|
367
|
+
})
|
|
368
|
+
]
|
|
369
|
+
}, "main-toolbar") : /* @__PURE__ */ jsxs(IconContainer, {
|
|
370
|
+
initial: {
|
|
371
|
+
x: -10,
|
|
372
|
+
opacity: 0
|
|
373
|
+
},
|
|
374
|
+
animate: {
|
|
375
|
+
x: 0,
|
|
376
|
+
opacity: 1
|
|
377
|
+
},
|
|
378
|
+
exit: {
|
|
379
|
+
x: -10,
|
|
380
|
+
opacity: 0
|
|
381
|
+
},
|
|
382
|
+
transition: {
|
|
383
|
+
duration: .2,
|
|
384
|
+
ease: "easeOut"
|
|
385
|
+
},
|
|
386
|
+
"aria-label": "Link toolbar",
|
|
387
|
+
onAnimationComplete: () => {
|
|
388
|
+
if (editor && savedSelection.current) setTimeout(() => {
|
|
389
|
+
restoreSelection();
|
|
390
|
+
linkInputRef.current?.focus();
|
|
391
|
+
}, 10);
|
|
392
|
+
},
|
|
393
|
+
children: [
|
|
394
|
+
/* @__PURE__ */ jsx(InverseInput, {
|
|
395
|
+
ref: linkInputRef,
|
|
396
|
+
size: "sm",
|
|
397
|
+
value: linkURL,
|
|
398
|
+
onChange: (e) => setLinkURL(e.target.value),
|
|
399
|
+
placeholder: "Click to enter URL...",
|
|
400
|
+
"aria-label": "Link input",
|
|
401
|
+
"data-rte-menu-bar-item": true,
|
|
402
|
+
onClick: () => {
|
|
403
|
+
linkInputRef.current?.focus();
|
|
404
|
+
},
|
|
405
|
+
onFocus: () => {
|
|
406
|
+
if (savedSelection.current && editor) {
|
|
407
|
+
const { from, to } = savedSelection.current;
|
|
408
|
+
editor.chain().setTextSelection({
|
|
409
|
+
from,
|
|
410
|
+
to
|
|
411
|
+
}).run();
|
|
412
|
+
}
|
|
413
|
+
},
|
|
414
|
+
onKeyDown: (e) => {
|
|
415
|
+
if (e.key === "Enter" && linkURL.trim() && editor && savedSelection.current) {
|
|
416
|
+
e.preventDefault();
|
|
417
|
+
e.stopPropagation();
|
|
418
|
+
const { from, to } = savedSelection.current;
|
|
419
|
+
editor.chain().focus().setTextSelection({
|
|
420
|
+
from,
|
|
421
|
+
to
|
|
422
|
+
}).setLink({ href: ensureProtocol(linkURL) }).run();
|
|
423
|
+
savedSelection.current = null;
|
|
424
|
+
setEditingLink(false);
|
|
425
|
+
setLinkURL("");
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
if (e.key === "Escape") {
|
|
429
|
+
e.preventDefault();
|
|
430
|
+
e.stopPropagation();
|
|
431
|
+
setEditingLink(false);
|
|
432
|
+
setLinkURL("");
|
|
433
|
+
savedSelection.current = null;
|
|
434
|
+
const { from, to } = editor.state.selection;
|
|
435
|
+
editor.chain().focus().setTextSelection({
|
|
436
|
+
from,
|
|
437
|
+
to
|
|
438
|
+
}).run();
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}),
|
|
442
|
+
/* @__PURE__ */ jsx(InverseIconButton, {
|
|
443
|
+
onClick: (e) => {
|
|
444
|
+
e.preventDefault();
|
|
445
|
+
e.stopPropagation();
|
|
446
|
+
if (linkURL) editor.chain().focus().unsetLink().run();
|
|
447
|
+
restoreSelection();
|
|
448
|
+
setLinkURL("");
|
|
449
|
+
savedSelection.current = null;
|
|
450
|
+
setEditingLink(false);
|
|
451
|
+
},
|
|
452
|
+
size: "sm",
|
|
453
|
+
type: "button",
|
|
454
|
+
"aria-label": "Cancel link",
|
|
455
|
+
"data-rte-menu-bar-item": true,
|
|
456
|
+
children: linkURL && editorState.isLink ? /* @__PURE__ */ jsx(UnlinkIcon, {}) : /* @__PURE__ */ jsx(XIcon, {})
|
|
457
|
+
}),
|
|
458
|
+
/* @__PURE__ */ jsx(InverseIconButton, {
|
|
459
|
+
onClick: (e) => {
|
|
460
|
+
e.preventDefault();
|
|
461
|
+
e.stopPropagation();
|
|
462
|
+
if (linkURL.trim() && editor && savedSelection.current) {
|
|
463
|
+
const { from, to } = savedSelection.current;
|
|
464
|
+
editor.chain().focus().setTextSelection({
|
|
465
|
+
from,
|
|
466
|
+
to
|
|
467
|
+
}).setLink({ href: ensureProtocol(linkURL) }).run();
|
|
468
|
+
} else if (editor && savedSelection.current) {
|
|
469
|
+
const { from, to } = savedSelection.current;
|
|
470
|
+
editor.chain().focus().setTextSelection({
|
|
471
|
+
from,
|
|
472
|
+
to
|
|
473
|
+
}).unsetLink().run();
|
|
474
|
+
}
|
|
475
|
+
savedSelection.current = null;
|
|
476
|
+
setEditingLink(false);
|
|
477
|
+
setLinkURL("");
|
|
478
|
+
},
|
|
479
|
+
size: "sm",
|
|
480
|
+
type: "button",
|
|
481
|
+
"aria-label": "Apply link",
|
|
482
|
+
"data-rte-menu-bar-item": true,
|
|
483
|
+
children: /* @__PURE__ */ jsx(CheckIcon, {})
|
|
484
|
+
})
|
|
485
|
+
]
|
|
486
|
+
}, "link-toolbar")
|
|
487
|
+
}) })
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
//#endregion
|
|
491
|
+
export { ensureProtocol as n, FloatingToolbar as t };
|
|
492
|
+
|
|
493
|
+
//# sourceMappingURL=FloatingToolbar-Df90f7Dm.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingToolbar-Df90f7Dm.mjs","names":["Input","DropdownMenu"],"sources":["../src/components/FloatingToolbar/FloatingToolbar.tsx"],"sourcesContent":["import { PluginKey } from '@tiptap/pm/state';\nimport type { EditorView } from '@tiptap/pm/view';\nimport { useEditorState, type Editor } from '@tiptap/react';\nimport { BubbleMenu } from '@tiptap/react/menus';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport styled from 'styled-components';\n\nimport { BorderRadius, Color, Spacing } from '@persona/design-tokens';\nimport {\n BoldIcon,\n CheckIcon,\n GridIcon,\n ItalicIcon,\n LinkIcon,\n ListIcon,\n UnlinkIcon,\n XIcon,\n} from '@persona/icons';\n\nimport { IconButton } from '#src/components/Button';\nimport DropdownMenu from '#src/components/DropdownMenu';\nimport Input from '#src/components/Input';\nimport Stack from '#src/components/Stack';\nimport { Z_INDICES } from '#src/lib/zindex';\nimport { TransitionDuration } from '#src/variables/transitions';\n\n// Core* colors throughout this file are intentional: the bubble toolbar is an\n// always-dark inverse surface floating over the editor, so it must not track\n// the semantic surface theme.\nconst BubbleMenuBar = styled(Stack)`\n padding: ${Spacing[1]} ${Spacing[2]};\n background-color: ${Color.CoreSlate1100};\n border-radius: ${BorderRadius.Lg};\n`;\n\nconst IconContainer = styled(motion.div)`\n display: flex;\n gap: ${Spacing[1]};\n`;\n\nconst InverseIconButton = styled(IconButton)<{ $selected?: boolean }>`\n background-color: ${({ $selected }) => ($selected ? Color.CoreSlate900 : 'transparent')};\n color: ${Color.PrimaryWhite};\n transition: background-color ${TransitionDuration.ExtraFast} ease-out;\n\n &:hover:not(:disabled) {\n background-color: ${Color.CoreSlate800};\n }\n\n &:disabled {\n background-color: transparent;\n opacity: 0.35;\n }\n`;\n\nconst InverseInput = styled(Input)`\n background-color: ${Color.CoreSlate900};\n color: ${Color.PrimaryWhite};\n\n :focus-within {\n border-color: ${Color.CoreBlue700};\n }\n ::placeholder {\n color: ${Color.TextDisabled};\n }\n\n input {\n background-color: ${Color.CoreSlate900};\n color: ${Color.PrimaryWhite};\n }\n`;\n\nconst StyledDropdownItem = styled(DropdownMenu.Item)`\n width: 100%;\n height: 30px;\n font-size: small;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n`;\n\n// Floating UI takes its offset as numbers while the spacing tokens are CSS lengths.\nconst TOOLBAR_GAP = parseInt(Spacing[1]);\n\n// Anchored to the field, the toolbar lines up with the input's left edge; over a\n// selection it sits back a notch so it does not crowd the first selected glyph.\nconst FIELD_OFFSET = { mainAxis: TOOLBAR_GAP, crossAxis: 0 };\nconst SELECTION_OFFSET = { mainAxis: TOOLBAR_GAP, crossAxis: -parseInt(Spacing[2]) };\n\n// The element EditorContent mounts the editor into — the visible field. Tiptap\n// types `options.element` loosely, so fall back to the editable root.\nconst getFieldElement = (editor: Editor): Element =>\n editor.options.element instanceof Element ? editor.options.element : editor.view.dom;\n\n// Schemes we trust as link targets. Anything else (no scheme, or an unsafe one\n// like javascript:/data:/vbscript:) is treated as a bare host and forced onto\n// https, which both preserves host:port input and neutralizes script schemes.\nconst SAFE_LINK_SCHEME = /^(https?|mailto|tel):/i;\nconst URI_SCHEME = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;\n\nexport const ensureProtocol = (url: string): string => {\n const trimmedUrl = url.trim();\n if (!trimmedUrl) {\n return '';\n }\n // Handlebars placeholders (e.g. {{inquiry.id}}) are legitimate link targets in\n // templated messages — the template render produces the final URL, so pass\n // the expression through unvalidated. Only when nothing before the first\n // placeholder looks like an unsafe scheme: javascript:alert(1)//{{x}} would\n // otherwise smuggle a script href past the allowlist. URL parsers strip C0\n // controls, tabs and spaces before reading the scheme, so normalize the\n // prefix the same way first — java\\tscript:...{{x}} must not slip through.\n if (trimmedUrl.includes('{{')) {\n const beforePlaceholder = trimmedUrl\n .slice(0, trimmedUrl.indexOf('{{'))\n // eslint-disable-next-line no-control-regex -- mirrors how URL parsers strip C0/space before reading the scheme\n .replace(/[\\u0000-\\u0020]/g, '');\n if (!URI_SCHEME.test(beforePlaceholder) || SAFE_LINK_SCHEME.test(beforePlaceholder)) {\n return trimmedUrl;\n }\n return '';\n }\n const candidate = SAFE_LINK_SCHEME.test(trimmedUrl) ? trimmedUrl : `https://${trimmedUrl}`;\n // Re-parse so malformed input — including an unsafe scheme that can't survive\n // the https prefix — is dropped instead of applied as a broken href.\n return URL.canParse(candidate) ? candidate : '';\n};\n\ninterface FloatingToolbarProps {\n /** TipTap editor instance to operate on. */\n editor: Editor | null;\n /**\n * Keep the toolbar up the whole time the editor is focused instead of only\n * while text is selected, so the formatting actions are discoverable without\n * knowing to select first.\n */\n showOnFocus?: boolean;\n}\n\n/**\n * Floating bubble toolbar that appears on text selection or inside a table, or —\n * with `showOnFocus` — for as long as the editor is focused.\n * Keyboard shortcut: Cmd/Ctrl+Shift+U opens the link-edit row.\n */\nfunction FloatingToolbar({ editor, showOnFocus = false }: FloatingToolbarProps) {\n const [linkURL, setLinkURL] = useState('');\n const [editingLink, setEditingLink] = useState(false);\n const linkInputRef = useRef<HTMLInputElement>(null);\n const toolbarRef = useRef<HTMLDivElement>(null);\n const savedSelection = useRef<{ from: number; to: number } | null>(null);\n const editingLinkRef = useRef(editingLink);\n const blurTimeout = useRef<ReturnType<typeof setTimeout>>();\n // Lets the toolbar close its own bubble menu plugin via a `hide` meta.\n const [pluginKey] = useState(() => new PluginKey('floatingToolbar'));\n\n useEffect(() => () => clearTimeout(blurTimeout.current), []);\n\n useEffect(() => {\n editingLinkRef.current = editingLink;\n }, [editingLink]);\n\n const restoreSelection = useCallback(() => {\n if (editor && savedSelection.current) {\n const { from, to } = savedSelection.current;\n editor.chain().focus().setTextSelection({ from, to }).run();\n }\n }, [editor]);\n\n const openLinkEditingMode = useCallback(() => {\n if (!editor) {\n return;\n }\n if (!editor.can().chain().toggleLink({ href: 'https://www.google.com' }).run()) {\n return;\n }\n\n const { from, to } = editor.state.selection;\n savedSelection.current = { from, to };\n\n const linkAttr = editor.getAttributes('link');\n if (linkAttr.href) {\n setLinkURL(linkAttr.href);\n }\n\n editor.chain().focus().setTextSelection({ from, to }).run();\n setEditingLink(true);\n\n setTimeout(() => {\n linkInputRef.current?.focus();\n }, 250);\n }, [editor]);\n\n // Cmd/Ctrl+Shift+U → open link mode; Escape inside link mode → cancel.\n useEffect(() => {\n if (!editor) {\n return undefined;\n }\n const dom = editor.view.dom;\n const handler = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && event.shiftKey && event.key.toLowerCase() === 'u') {\n event.preventDefault();\n openLinkEditingMode();\n return;\n }\n if (event.key === 'Escape' && editingLinkRef.current) {\n event.preventDefault();\n setEditingLink(false);\n setLinkURL('');\n savedSelection.current = null;\n }\n };\n dom.addEventListener('keydown', handler);\n return () => {\n dom.removeEventListener('keydown', handler);\n };\n }, [editor, openLinkEditingMode]);\n\n // Keep selection highlighted while focus is in the link input.\n useEffect(() => {\n if (!editingLink || !editor || !savedSelection.current) {\n return undefined;\n }\n restoreSelection();\n const timeoutId = setTimeout(() => {\n restoreSelection();\n editor.view.dom?.focus();\n }, 0);\n return () => clearTimeout(timeoutId);\n }, [editingLink, restoreSelection, editor]);\n\n // Pressing a toolbar button focuses that button, and the command's own\n // transaction re-runs this check before the chained `.focus()` hands focus\n // back to the editor. Ignoring focus held inside the toolbar therefore tears\n // the bar down for a frame mid-click, taking the pressed button with it.\n const isFocusWithinToolbar = useCallback(\n () => !!toolbarRef.current?.contains(document.activeElement),\n [],\n );\n\n // BubbleMenu dispatches an options-update transaction whenever these props\n // change identity, and editors that re-render per transaction would then\n // loop — so keep them stable across renders.\n const bubbleMenuOptions = useMemo(\n () => ({\n placement: 'top-start' as const,\n offset: showOnFocus ? FIELD_OFFSET : SELECTION_OFFSET,\n }),\n [showOnFocus],\n );\n\n // Sitting above the field rather than the selection: a toolbar that is up\n // for the whole time the field is focused looks jumpy if it chases the\n // caret and hops between selections.\n const getReferencedVirtualElement = useMemo(\n () =>\n showOnFocus && editor\n ? () => ({ getBoundingClientRect: () => getFieldElement(editor).getBoundingClientRect() })\n : undefined,\n [editor, showOnFocus],\n );\n\n const shouldShow = useCallback(\n ({\n editor: e,\n view,\n from,\n to,\n }: {\n editor: Editor;\n view: EditorView;\n from: number;\n to: number;\n }) => {\n if (!e.isEditable) {\n return false;\n }\n if (e.isActive('mention')) {\n return false;\n }\n // The toolbar carries the table-actions dropdown — a collapsed caret\n // inside a table must still show it or row/column controls are\n // unreachable.\n if (e.isActive('table')) {\n return true;\n }\n if (from !== to) {\n return true;\n }\n return showOnFocus && (view.hasFocus() || isFocusWithinToolbar());\n },\n [isFocusWithinToolbar, showOnFocus],\n );\n\n // Self-subscribe: standalone use can't rely on the host's useEditor options (shouldRerenderOnTransaction is off by default in Tiptap 3).\n const editorState = useEditorState({\n editor,\n selector: (snapshot) =>\n snapshot.editor && {\n isBold: snapshot.editor.isActive('bold'),\n canBold: snapshot.editor.can().chain().toggleBold().run(),\n isItalic: snapshot.editor.isActive('italic'),\n canItalic: snapshot.editor.can().chain().toggleItalic().run(),\n isLink: snapshot.editor.isActive('link'),\n isBulletList: snapshot.editor.isActive('bulletList'),\n canLink: snapshot.editor.can().chain().toggleLink({ href: 'https://www.google.com' }).run(),\n isTable: snapshot.editor.isActive('table'),\n canInsertTable: snapshot.editor\n .can()\n .chain()\n .insertTable({ rows: 3, cols: 3, withHeaderRow: true })\n .run(),\n },\n });\n\n if (!editor || !editorState) {\n return null;\n }\n\n // The plugin closes the toolbar off the editor's blur, which cannot fire again\n // once focus has moved in here, so leaving from the toolbar has to close it.\n // Focus only lands on its next target after this event, hence the tick.\n const handleToolbarBlur = () => {\n blurTimeout.current = setTimeout(() => {\n if (editor.isDestroyed || isFocusWithinToolbar() || editor.view.hasFocus()) {\n return;\n }\n editor.view.dispatch(editor.state.tr.setMeta(pluginKey, 'hide'));\n });\n };\n\n return (\n <BubbleMenu\n editor={editor}\n pluginKey={pluginKey}\n options={bubbleMenuOptions}\n getReferencedVirtualElement={getReferencedVirtualElement}\n shouldShow={shouldShow}\n // Floating UI sets no z-index on the portaled menu (Tippy used 9999).\n style={{ zIndex: Z_INDICES.modalElevated }}\n >\n <AnimatePresence>\n <BubbleMenuBar\n ref={toolbarRef}\n role='toolbar'\n aria-label='Text formatting'\n direction='horizontal'\n spacing={Spacing[1]}\n onBlur={handleToolbarBlur}\n >\n {!editingLink ? (\n <IconContainer\n key='main-toolbar'\n layout\n initial={{ x: -10, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -10, opacity: 0 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n >\n <InverseIconButton\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n $selected={editorState.isBulletList}\n size='sm'\n type='button'\n aria-label='Toggle bullet list'\n data-rte-menu-bar-item\n >\n <ListIcon />\n </InverseIconButton>\n <InverseIconButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n disabled={!editorState.canBold}\n $selected={editorState.isBold}\n size='sm'\n type='button'\n aria-label='Toggle bold'\n data-rte-menu-bar-item\n >\n <BoldIcon />\n </InverseIconButton>\n <InverseIconButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n $selected={editorState.isItalic}\n disabled={!editorState.canItalic}\n type='button'\n size='sm'\n aria-label='Toggle italic'\n data-rte-menu-bar-item\n >\n <ItalicIcon />\n </InverseIconButton>\n <InverseIconButton\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n openLinkEditingMode();\n }}\n $selected={editorState.isLink}\n disabled={!editorState.canLink}\n size='sm'\n type='button'\n aria-label='Toggle link'\n data-rte-menu-bar-item\n >\n <LinkIcon />\n </InverseIconButton>\n {editorState.isTable ? (\n <DropdownMenu\n contentProps={{\n // @ts-expect-error data attribute on dropdown menu\n 'data-rte-menu-bar-item': 'table-actions-dropdown-menu',\n onCloseAutoFocus: (event) => {\n event.preventDefault();\n editor.commands.focus();\n },\n }}\n trigger={\n <InverseIconButton\n size='sm'\n type='button'\n aria-label='Table actions'\n data-rte-menu-bar-item\n $selected\n >\n <GridIcon />\n </InverseIconButton>\n }\n >\n <StyledDropdownItem\n id='floating-toolbar__tableAddRowAfter'\n variant='basic'\n data-rte-menu-bar-item='table-add-row-after'\n onClick={() => editor.chain().focus().addRowAfter().run()}\n >\n Add row below\n </StyledDropdownItem>\n <StyledDropdownItem\n id='floating-toolbar__tableAddRowBefore'\n variant='basic'\n data-rte-menu-bar-item='table-add-row-before'\n onClick={() => editor.chain().focus().addRowBefore().run()}\n >\n Add row above\n </StyledDropdownItem>\n <StyledDropdownItem\n id='floating-toolbar__tableAddColumnAfter'\n variant='basic'\n data-rte-menu-bar-item='table-add-column-after'\n onClick={() => editor.chain().focus().addColumnAfter().run()}\n >\n Add column right\n </StyledDropdownItem>\n <StyledDropdownItem\n id='floating-toolbar__tableAddColumnBefore'\n variant='basic'\n data-rte-menu-bar-item='table-add-column-before'\n onClick={() => editor.chain().focus().addColumnBefore().run()}\n >\n Add column left\n </StyledDropdownItem>\n <StyledDropdownItem\n id='floating-toolbar__tableDeleteRow'\n variant='basic'\n data-rte-menu-bar-item='table-delete-row'\n onClick={() => editor.chain().focus().deleteRow().run()}\n >\n Delete row\n </StyledDropdownItem>\n <StyledDropdownItem\n id='floating-toolbar__tableDeleteColumn'\n variant='basic'\n data-rte-menu-bar-item='table-delete-column'\n onClick={() => editor.chain().focus().deleteColumn().run()}\n >\n Delete column\n </StyledDropdownItem>\n <StyledDropdownItem\n id='floating-toolbar__tableToggleHeaderRow'\n variant='basic'\n data-rte-menu-bar-item='table-toggle-header-row'\n onClick={() => editor.chain().focus().toggleHeaderRow().run()}\n >\n Toggle header row\n </StyledDropdownItem>\n <StyledDropdownItem\n id='floating-toolbar__tableDelete'\n variant='basic'\n data-rte-menu-bar-item='table-delete'\n onClick={() => editor.chain().focus().deleteTable().run()}\n >\n Delete table\n </StyledDropdownItem>\n </DropdownMenu>\n ) : (\n <InverseIconButton\n onClick={() =>\n editor\n .chain()\n .focus()\n .insertTable({ rows: 3, cols: 3, withHeaderRow: true })\n .run()\n }\n disabled={!editorState.canInsertTable}\n size='sm'\n type='button'\n aria-label='Insert table'\n data-rte-menu-bar-item\n >\n <GridIcon />\n </InverseIconButton>\n )}\n </IconContainer>\n ) : (\n <IconContainer\n key='link-toolbar'\n initial={{ x: -10, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -10, opacity: 0 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n aria-label='Link toolbar'\n onAnimationComplete={() => {\n if (editor && savedSelection.current) {\n setTimeout(() => {\n restoreSelection();\n linkInputRef.current?.focus();\n }, 10);\n }\n }}\n >\n <InverseInput\n ref={linkInputRef}\n size='sm'\n value={linkURL}\n onChange={(e) => setLinkURL(e.target.value)}\n placeholder='Click to enter URL...'\n aria-label='Link input'\n data-rte-menu-bar-item\n onClick={() => {\n linkInputRef.current?.focus();\n }}\n onFocus={() => {\n if (savedSelection.current && editor) {\n const { from, to } = savedSelection.current;\n editor.chain().setTextSelection({ from, to }).run();\n }\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && linkURL.trim() && editor && savedSelection.current) {\n e.preventDefault();\n e.stopPropagation();\n const { from, to } = savedSelection.current;\n editor\n .chain()\n .focus()\n .setTextSelection({ from, to })\n .setLink({ href: ensureProtocol(linkURL) })\n .run();\n savedSelection.current = null;\n setEditingLink(false);\n setLinkURL('');\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n setEditingLink(false);\n setLinkURL('');\n savedSelection.current = null;\n const { from, to } = editor.state.selection;\n editor.chain().focus().setTextSelection({ from, to }).run();\n }\n }}\n />\n <InverseIconButton\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (linkURL) {\n editor.chain().focus().unsetLink().run();\n }\n restoreSelection();\n setLinkURL('');\n savedSelection.current = null;\n setEditingLink(false);\n }}\n size='sm'\n type='button'\n aria-label='Cancel link'\n data-rte-menu-bar-item\n >\n {linkURL && editorState.isLink ? <UnlinkIcon /> : <XIcon />}\n </InverseIconButton>\n <InverseIconButton\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (linkURL.trim() && editor && savedSelection.current) {\n const { from, to } = savedSelection.current;\n editor\n .chain()\n .focus()\n .setTextSelection({ from, to })\n .setLink({ href: ensureProtocol(linkURL) })\n .run();\n } else if (editor && savedSelection.current) {\n const { from, to } = savedSelection.current;\n editor.chain().focus().setTextSelection({ from, to }).unsetLink().run();\n }\n savedSelection.current = null;\n setEditingLink(false);\n setLinkURL('');\n }}\n size='sm'\n type='button'\n aria-label='Apply link'\n data-rte-menu-bar-item\n >\n <CheckIcon />\n </InverseIconButton>\n </IconContainer>\n )}\n </BubbleMenuBar>\n </AnimatePresence>\n </BubbleMenu>\n );\n}\n\nexport default FloatingToolbar;\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
2
|
import { Editor } from "@tiptap/react";
|
|
3
3
|
|
|
4
|
-
//#region src/components/
|
|
4
|
+
//#region src/components/FloatingToolbar/FloatingToolbar.d.ts
|
|
5
5
|
declare const ensureProtocol: (url: string) => string;
|
|
6
6
|
interface FloatingToolbarProps {
|
|
7
7
|
/** TipTap editor instance to operate on. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as ErrorProps } from "./ErrorProps-
|
|
1
|
+
import { t as ErrorProps } from "./ErrorProps-4Ohsinrf.mjs";
|
|
2
2
|
import * as _$react from "react";
|
|
3
3
|
import { ComponentPropsWithoutRef, ReactNode } from "react";
|
|
4
4
|
import * as _$styled_components0 from "styled-components";
|
|
@@ -61,4 +61,4 @@ interface FormControlProps extends ComponentPropsWithoutRef<'div'>, FormControlB
|
|
|
61
61
|
declare const FormControl: _$react.ForwardRefExoticComponent<FormControlProps & _$react.RefAttributes<HTMLDivElement>>;
|
|
62
62
|
//#endregion
|
|
63
63
|
export { FormControlProps as a, FormLabelProps as c, FormControlBaseProps as i, HelperText as l, ErrorText as n, FormInputContainer as o, FormControl as r, FormLabel as s, Container as t, WarningText as u };
|
|
64
|
-
//# sourceMappingURL=FormControl-
|
|
64
|
+
//# sourceMappingURL=FormControl-BQe3GRhi.d.mts.map
|
package/dist/FormControl.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as FormControlProps, c as FormLabelProps, i as FormControlBaseProps, l as HelperText, n as ErrorText, o as FormInputContainer, r as FormControl, s as FormLabel, t as Container, u as WarningText } from "./FormControl-
|
|
1
|
+
import { a as FormControlProps, c as FormLabelProps, i as FormControlBaseProps, l as HelperText, n as ErrorText, o as FormInputContainer, r as FormControl, s as FormLabel, t as Container, u as WarningText } from "./FormControl-BQe3GRhi.mjs";
|
|
2
2
|
export { Container, ErrorText, FormControl, FormControl as default, FormControlBaseProps, FormControlProps, FormInputContainer, FormLabel, FormLabelProps, HelperText, WarningText };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as ParagraphProps, o as LabelProps, u as SpanProps } from "./Text-
|
|
1
|
+
import { c as ParagraphProps, o as LabelProps, u as SpanProps } from "./Text-CvaqognH.mjs";
|
|
2
2
|
import * as _$react from "react";
|
|
3
3
|
import * as _$styled_components0 from "styled-components";
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as FormControlProps, l as HelperText, n as ErrorText, s as FormLabel, u as WarningText } from "./FormControl-
|
|
1
|
+
import { a as FormControlProps, l as HelperText, n as ErrorText, s as FormLabel, u as WarningText } from "./FormControl-BQe3GRhi.mjs";
|
|
2
2
|
import * as _$react from "react";
|
|
3
3
|
import { ComponentPropsWithRef, ReactElement, ReactNode } from "react";
|
|
4
4
|
|
|
@@ -67,4 +67,4 @@ interface FormFieldProps extends Omit<FormControlProps, 'children'>, FormFieldBa
|
|
|
67
67
|
declare const FormField: _$react.ForwardRefExoticComponent<FormFieldProps & _$react.RefAttributes<HTMLDivElement>>;
|
|
68
68
|
//#endregion
|
|
69
69
|
export { FormFieldBaseProps as n, FormFieldProps as r, FormField as t };
|
|
70
|
-
//# sourceMappingURL=FormField-
|
|
70
|
+
//# sourceMappingURL=FormField-BW5uMzId.d.mts.map
|
package/dist/FormField.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as FormFieldBaseProps, r as FormFieldProps, t as FormField } from "./FormField-
|
|
1
|
+
import { n as FormFieldBaseProps, r as FormFieldProps, t as FormField } from "./FormField-BW5uMzId.mjs";
|
|
2
2
|
export { FormField, FormField as default, FormFieldBaseProps, FormFieldProps };
|
|
@@ -89,4 +89,4 @@ const GridItem = ({ span, children, ...rest }) => /* @__PURE__ */ jsx(Item, {
|
|
|
89
89
|
//#endregion
|
|
90
90
|
export { useGridBreakpoint as i, GRID_BREAKPOINTS as n, Grid as r, GridItem as t };
|
|
91
91
|
|
|
92
|
-
//# sourceMappingURL=Grid-
|
|
92
|
+
//# sourceMappingURL=Grid-CYpOqTUu.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grid-
|
|
1
|
+
{"version":3,"file":"Grid-CYpOqTUu.mjs","names":[],"sources":["../src/components/Grid/Grid.tsx","../src/components/Grid/GridItem.tsx"],"sourcesContent":["import {\n type ComponentPropsWithoutRef,\n createContext,\n type ReactNode,\n type RefObject,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Spacing } from '@persona/design-tokens';\n\nexport const GRID_BREAKPOINTS = { sm: 768, md: 1024, lg: 1408 } as const;\n\ntype Breakpoint = 'xs' | 'sm' | 'md' | 'lg';\n\nconst GridBreakpointContext = createContext<Breakpoint>('md');\n\n/** Breakpoint of the nearest `Grid`, measured from that grid's width. */\nexport const useGridBreakpoint = (): Breakpoint => useContext(GridBreakpointContext);\n\nconst getBreakpoint = (width: number): Breakpoint => {\n if (width >= GRID_BREAKPOINTS.lg) {\n return 'lg';\n }\n if (width >= GRID_BREAKPOINTS.md) {\n return 'md';\n }\n if (width >= GRID_BREAKPOINTS.sm) {\n return 'sm';\n }\n return 'xs';\n};\n\nconst useMeasuredGridBreakpoint = (ref: RefObject<HTMLDivElement>) => {\n const [breakpoint, setBreakpoint] = useState<Breakpoint>('md');\n useLayoutEffect(() => {\n const node = ref.current;\n if (!node) {\n return;\n }\n const update = () => setBreakpoint(getBreakpoint(node.offsetWidth));\n update();\n const observer = new ResizeObserver(update);\n observer.observe(node);\n return () => observer.disconnect();\n }, [ref]);\n return breakpoint;\n};\n\nconst Root = styled.div<{ $mode: GridProps['mode']; $breakpoint: Breakpoint }>`\n display: grid;\n width: 100%;\n grid-template-columns: repeat(12, minmax(0, 1fr));\n box-sizing: border-box;\n\n ${({ $breakpoint }) =>\n $breakpoint === 'xs' &&\n css`\n min-width: ${GRID_BREAKPOINTS.sm - 1}px;\n `}\n\n ${({ $breakpoint }) =>\n $breakpoint === 'xs' || $breakpoint === 'sm'\n ? css`\n gap: ${Spacing[3]};\n padding-inline: ${Spacing[5]};\n `\n : css`\n gap: ${Spacing[4]};\n padding-inline: ${Spacing[6]};\n `}\n\n // max-width equals the lg threshold; offsetWidth reads the clamped border-box width and getBreakpoint uses >=, so the clamp stays 'lg'\n ${({ $mode, $breakpoint }) =>\n $mode === 'fixed' &&\n $breakpoint === 'lg' &&\n css`\n max-width: ${GRID_BREAKPOINTS.lg}px;\n margin-inline: auto;\n `}\n`;\n\nexport interface GridProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Selects the grid width behavior at the large breakpoint. `fixed` centers the grid at a\n * maximum width of 1408px, while `fluid` fills the available width.\n *\n * Breakpoints:\n * - ≤767px: 12 columns, 24px margins, 12px gutters, and a 767px minimum width.\n * - 768–1023px: 12 columns, 24px margins, 12px gutters, and 100% width.\n * - 1024–1407px: 12 columns, 32px margins, 16px gutters, and 100% width.\n * - ≥1408px: 12 columns, 32px margins, 16px gutters, and either fixed or fluid width.\n */\n mode: 'fixed' | 'fluid';\n children: ReactNode;\n}\n\n/**\n * Provides a 12-column CSS grid that measures its own width with a ResizeObserver for responsive\n * horizontal margins and gutters. Vertical spacing is left to the consumer.\n *\n * The grid measures breakpoints against its own width rather than the viewport. Use `fixed` to\n * center the grid at its large-screen maximum width, or `fluid` to keep it at 100% width.\n */\nexport const Grid = ({ mode, children, ...rest }: GridProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const breakpoint = useMeasuredGridBreakpoint(ref);\n return (\n <GridBreakpointContext.Provider value={breakpoint}>\n <Root ref={ref} $mode={mode} $breakpoint={breakpoint} {...rest}>\n {children}\n </Root>\n </GridBreakpointContext.Provider>\n );\n};\n\nexport default Grid;\n","import type { ComponentPropsWithoutRef, ReactNode } from 'react';\nimport styled from 'styled-components';\n\nexport type GridSpan = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\nexport interface GridItemProps extends ComponentPropsWithoutRef<'div'> {\n span: GridSpan;\n children: ReactNode;\n}\n\nconst Item = styled.div<{ $span: GridSpan }>`\n grid-column: span ${({ $span }) => $span};\n min-width: 0;\n`;\n\nexport const GridItem = ({ span, children, ...rest }: GridItemProps) => (\n <Item $span={span} {...rest}>\n {children}\n </Item>\n);\n\nexport default GridItem;\n"],"mappings":";;;;;AAcA,MAAa,mBAAmB;CAAE,IAAI;CAAK,IAAI;CAAM,IAAI;CAAM;AAI/D,MAAM,wBAAwB,cAA0B,KAAK;;AAG7D,MAAa,0BAAsC,WAAW,sBAAsB;AAEpF,MAAM,iBAAiB,UAA8B;AACnD,KAAI,SAAS,iBAAiB,GAC5B,QAAO;AAET,KAAI,SAAS,iBAAiB,GAC5B,QAAO;AAET,KAAI,SAAS,iBAAiB,GAC5B,QAAO;AAET,QAAO;;AAGT,MAAM,6BAA6B,QAAmC;CACpE,MAAM,CAAC,YAAY,iBAAiB,SAAqB,KAAK;AAC9D,uBAAsB;EACpB,MAAM,OAAO,IAAI;AACjB,MAAI,CAAC,KACH;EAEF,MAAM,eAAe,cAAc,cAAc,KAAK,YAAY,CAAC;AACnE,UAAQ;EACR,MAAM,WAAW,IAAI,eAAe,OAAO;AAC3C,WAAS,QAAQ,KAAK;AACtB,eAAa,SAAS,YAAY;IACjC,CAAC,IAAI,CAAC;AACT,QAAO;;AAGT,MAAM,OAAO,OAAO,GAA0D;;;;;;KAMzE,EAAE,kBACH,gBAAgB,QAChB,GAAG;mBACY,iBAAiB,KAAK,EAAE;MACrC;;KAED,EAAE,kBACH,gBAAgB,QAAQ,gBAAgB,OACpC,GAAG;iBACM,QAAQ,GAAG;4BACA,QAAQ,GAAG;YAE/B,GAAG;iBACM,QAAQ,GAAG;4BACA,QAAQ,GAAG;UAC7B;;;KAGL,EAAE,OAAO,kBACV,UAAU,WACV,gBAAgB,QAChB,GAAG;mBACY,iBAAiB,GAAG;;MAEjC;;;;;;;;;AAyBN,MAAa,QAAQ,EAAE,MAAM,UAAU,GAAG,WAAsB;CAC9D,MAAM,MAAM,OAAuB,KAAK;CACxC,MAAM,aAAa,0BAA0B,IAAI;AACjD,QACE,oBAAC,sBAAsB,UAAvB;EAAgC,OAAO;YACrC,oBAAC,MAAD;GAAW;GAAK,OAAO;GAAM,aAAa;GAAY,GAAI;GACvD;GACI,CAAA;EACwB,CAAA;;;;ACzGrC,MAAM,OAAO,OAAO,GAAwB;uBACrB,EAAE,YAAY,MAAM;;;AAI3C,MAAa,YAAY,EAAE,MAAM,UAAU,GAAG,WAC5C,oBAAC,MAAD;CAAM,OAAO;CAAM,GAAI;CACpB;CACI,CAAA"}
|