@uva-glass/component-library 3.55.5 → 3.55.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/dist/Accordion-DvblEUVu.js.map +1 -1
- package/dist/AccordionCard-BXy-plB7.js.map +1 -1
- package/dist/ActionList-O9w1hqNg.js.map +1 -1
- package/dist/AddCatalogueLinkForm-rph4K9P0.js.map +1 -1
- package/dist/CheckboxButtonBar-5UMIFMKH.js.map +1 -1
- package/dist/ClipboardButton-geHjMl2J.js.map +1 -1
- package/dist/ControlsButton-B1XRpMUM.js.map +1 -1
- package/dist/CopyableText-DkyhZ6wk.js.map +1 -1
- package/dist/Drawer-e7UFHVg9.js.map +1 -1
- package/dist/EmptyStateDataDisplay-D0QiI8nE.js.map +1 -1
- package/dist/ExpandableInfoPanel-CnBVVNlJ.js.map +1 -1
- package/dist/FeedbackBar-ByKp32HE.js.map +1 -1
- package/dist/FieldHint-fxnEOsVZ.js.map +1 -1
- package/dist/Input-Bn-arMaC.js.map +1 -1
- package/dist/InputField-BWAy19w9.js.map +1 -1
- package/dist/{Lexical.prod-sbwgNRjw.js → Lexical.prod-CqPLSi0R.js} +1194 -1096
- package/dist/Lexical.prod-CqPLSi0R.js.map +1 -0
- package/dist/LexicalClipboard.prod-BVw_sFpo.js +651 -0
- package/dist/LexicalClipboard.prod-BVw_sFpo.js.map +1 -0
- package/dist/LexicalComposerContext.prod-Ca-YN_fj.js.map +1 -1
- package/dist/{LexicalExtension.prod-jTSDl1mh.js → LexicalExtension.prod-CUQTgbur.js} +306 -289
- package/dist/LexicalExtension.prod-CUQTgbur.js.map +1 -0
- package/dist/{LexicalLink.prod-BKLNLyu8.js → LexicalLink.prod-DMhcqD9x.js} +209 -208
- package/dist/LexicalLink.prod-DMhcqD9x.js.map +1 -0
- package/dist/{LexicalList.prod-DEtc4lSr.js → LexicalList.prod-eYlcb5Ao.js} +208 -168
- package/dist/LexicalList.prod-eYlcb5Ao.js.map +1 -0
- package/dist/{LexicalTable.prod-CpIPDW6z.js → LexicalTable.prod-DlOxUQou.js} +787 -781
- package/dist/LexicalTable.prod-DlOxUQou.js.map +1 -0
- package/dist/LexicalUtils.prod-BqcriFWV.js +343 -0
- package/dist/LexicalUtils.prod-BqcriFWV.js.map +1 -0
- package/dist/{LinkContextMenu-CTkNPiIW.js → LinkContextMenu-ePn1iZ_z.js} +2 -2
- package/dist/{LinkContextMenu-CTkNPiIW.js.map → LinkContextMenu-ePn1iZ_z.js.map} +1 -1
- package/dist/MenuLink-Cm1yZO_5.js.map +1 -1
- package/dist/ModalDialog-N50NGnd4.js.map +1 -1
- package/dist/MultiSelectBox-Cuh_o-A1.js.map +1 -1
- package/dist/MultiSelectItem-BF5xRjz5.js.map +1 -1
- package/dist/Notification-CIhsHuF0.js.map +1 -1
- package/dist/OverlayStepBar-CjaoYdsh.js.map +1 -1
- package/dist/PageOverlay-S4xsqJha.js.map +1 -1
- package/dist/{PasteHandlerPlugin-YpQruA-w.js → PasteHandlerPlugin-BNp8ST0q.js} +5 -5
- package/dist/{PasteHandlerPlugin-YpQruA-w.js.map → PasteHandlerPlugin-BNp8ST0q.js.map} +1 -1
- package/dist/Periods-BYETtB6R.js.map +1 -1
- package/dist/ProgrammeCard-76gG7ksx.js.map +1 -1
- package/dist/RadioGroup-JeTjVp5B.js.map +1 -1
- package/dist/Slider-BlLyrET9.js.map +1 -1
- package/dist/SortableProvider-8HYiBXJS.js.map +1 -1
- package/dist/Spinner-BpElTDIu.js.map +1 -1
- package/dist/StatusPill-DM7n3I4W.js.map +1 -1
- package/dist/TableCellContextMenu-D0IMQr3E.js.map +1 -1
- package/dist/{TableCellResizerPlugin-Ceof6StD.js → TableCellResizerPlugin-Bc5y-Qbx.js} +37 -37
- package/dist/{TableCellResizerPlugin-Ceof6StD.js.map → TableCellResizerPlugin-Bc5y-Qbx.js.map} +1 -1
- package/dist/TextArea-CuASC9bX.js.map +1 -1
- package/dist/ToggleSwitch-C7z7JVtx.js.map +1 -1
- package/dist/Tooltip-D27p9kh4.js.map +1 -1
- package/dist/VarIndicator-C-GueOZD.js.map +1 -1
- package/dist/assets/{src/css/fonts.css → fonts.css} +4 -4
- package/dist/{chunk-DeC0fbbY.js → chunk-3e0lkp8x.js} +1 -1
- package/dist/{chunk-SZQXB3JV-KiB8lSa9.js → chunk-SZQXB3JV-D6GR5B4F.js} +2 -2
- package/dist/chunk-SZQXB3JV-D6GR5B4F.js.map +1 -0
- package/dist/{client-CHQ7u_QI.js → client-b7M3CmlC.js} +10 -10
- package/dist/{client-CHQ7u_QI.js.map → client-b7M3CmlC.js.map} +1 -1
- package/dist/clsx-BD2qMUU1.js.map +1 -1
- package/dist/components/Accordion/Accordion.stories.js.map +1 -1
- package/dist/components/Accordion/Accordion.test.js +3 -3
- package/dist/components/Accordion/Accordion.test.js.map +1 -1
- package/dist/components/AccordionCard/AccordionCard.stories.js.map +1 -1
- package/dist/components/AccordionCard/AccordionCard.test.js +3 -3
- package/dist/components/AccordionCard/AccordionCard.test.js.map +1 -1
- package/dist/components/ActionList/ActionList.stories.js.map +1 -1
- package/dist/components/ActionList/ActionList.test.js +3 -3
- package/dist/components/ActionList/ActionList.test.js.map +1 -1
- package/dist/components/AppStatusBar/AppStatusBar.stories.js.map +1 -1
- package/dist/components/AppStatusBar/AppStatusBar.test.js +2 -2
- package/dist/components/AppStatusBar/AppStatusBar.test.js.map +1 -1
- package/dist/components/Attention/Attention.stories.js.map +1 -1
- package/dist/components/Attention/Attention.test.js +2 -2
- package/dist/components/Attention/Attention.test.js.map +1 -1
- package/dist/components/Backdrop/Backdrop.stories.js.map +1 -1
- package/dist/components/Backdrop/Backdrop.test.js +2 -2
- package/dist/components/Backdrop/Backdrop.test.js.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.stories.js.map +1 -1
- package/dist/components/Buttons/Button.stories.js +1 -1
- package/dist/components/Buttons/Button.stories.js.map +1 -1
- package/dist/components/Buttons/Button.test.js +2 -2
- package/dist/components/Buttons/Button.test.js.map +1 -1
- package/dist/components/Buttons/LinkButton.stories.js +1 -1
- package/dist/components/Buttons/LinkButton.stories.js.map +1 -1
- package/dist/components/Buttons/LinkButton.test.js +2 -2
- package/dist/components/Buttons/LinkButton.test.js.map +1 -1
- package/dist/components/Buttons/MenuButton.js.map +1 -1
- package/dist/components/Buttons/MenuButton.stories.js +1 -1
- package/dist/components/Buttons/MenuButton.stories.js.map +1 -1
- package/dist/components/Buttons/MenuButton.test.js +2 -2
- package/dist/components/Buttons/MenuButton.test.js.map +1 -1
- package/dist/components/Card/Card.stories.js.map +1 -1
- package/dist/components/Card/Card.test.js +2 -2
- package/dist/components/Card/Card.test.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.stories.js +1 -1
- package/dist/components/Checkbox/Checkbox.stories.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.test.js +3 -3
- package/dist/components/Checkbox/Checkbox.test.js.map +1 -1
- package/dist/components/CheckboxButtonBar/CheckboxButtonBar.stories.js +1 -1
- package/dist/components/CheckboxButtonBar/CheckboxButtonBar.stories.js.map +1 -1
- package/dist/components/CheckboxButtonBar/CheckboxButtonBar.test.js +2 -2
- package/dist/components/CheckboxButtonBar/CheckboxButtonBar.test.js.map +1 -1
- package/dist/components/CheckboxTree/CheckboxTree.js +1 -1
- package/dist/components/CheckboxTree/CheckboxTree.stories.js +3 -3
- package/dist/components/CheckboxTree/CheckboxTree.stories.js.map +1 -1
- package/dist/components/CheckboxTree/index.js +1 -1
- package/dist/components/Chip/Chip.stories.js +1 -1
- package/dist/components/Chip/Chip.stories.js.map +1 -1
- package/dist/components/ControlsButton/ControlsButton.stories.js +1 -1
- package/dist/components/ControlsButton/ControlsButton.stories.js.map +1 -1
- package/dist/components/Drawer/Drawer.stories.js +1 -1
- package/dist/components/Drawer/Drawer.stories.js.map +1 -1
- package/dist/components/EmptyStateDataDisplay/EmptyStateDataDisplay.stories.js.map +1 -1
- package/dist/components/ExpandableInfoPanel/ExpandableInfoPanel.stories.js.map +1 -1
- package/dist/components/FeedbackBar/FeedbackBar.stories.js.map +1 -1
- package/dist/components/FeedbackBar/FeedbackBar.test.js +2 -2
- package/dist/components/FeedbackBar/FeedbackBar.test.js.map +1 -1
- package/dist/components/FeedbackBox/FeedbackBox.stories.js.map +1 -1
- package/dist/components/FieldHint/FieldHint.stories.js.map +1 -1
- package/dist/components/Fieldset/Fieldset.stories.js.map +1 -1
- package/dist/components/FormField/FormField.stories.js.map +1 -1
- package/dist/components/FormInput/FormInput.js +1 -1
- package/dist/components/FormInput/FormInput.stories.js +2 -2
- package/dist/components/FormInput/FormInput.stories.js.map +1 -1
- package/dist/components/FormInput/index.js +1 -1
- package/dist/components/GridRow/GridRow.stories.js.map +1 -1
- package/dist/components/HorizontalList/HorizontalList.stories.js.map +1 -1
- package/dist/components/Icon/Icon.js.map +1 -1
- package/dist/components/Icon/Icon.stories.js.map +1 -1
- package/dist/components/IconButton/IconButton.stories.js +1 -1
- package/dist/components/IconButton/IconButton.stories.js.map +1 -1
- package/dist/components/InfoBanner/InfoBanner.stories.js.map +1 -1
- package/dist/components/InfoMessage/InfoMessage.stories.js.map +1 -1
- package/dist/components/Input/Input.stories.js.map +1 -1
- package/dist/components/InputField/InputField.stories.js +1 -1
- package/dist/components/InputField/InputField.stories.js.map +1 -1
- package/dist/components/Label/Label.stories.js.map +1 -1
- package/dist/components/Label/Label.test.js +2 -2
- package/dist/components/Label/Label.test.js.map +1 -1
- package/dist/components/MenuLink/MenuLink.stories.js.map +1 -1
- package/dist/components/MetaDataBar/MetaDataBar.stories.js.map +1 -1
- package/dist/components/MetaDataBar/MetaDataBar.test.js +1 -1
- package/dist/components/MetaDataBar/MetaDataBar.test.js.map +1 -1
- package/dist/components/MetaDataList/MetaDataList.stories.js.map +1 -1
- package/dist/components/ModalDialog/ModalDialog.stories.js +1 -1
- package/dist/components/ModalDialog/ModalDialog.stories.js.map +1 -1
- package/dist/components/MultiSelect/MultiSelect.js +1 -1
- package/dist/components/MultiSelect/MultiSelect.stories.js +2 -2
- package/dist/components/MultiSelect/MultiSelect.stories.js.map +1 -1
- package/dist/components/MultiSelect/components/MultiSelectHeader.js +1 -1
- package/dist/components/MultiSelect/index.js +1 -1
- package/dist/components/MultiSelectBox/MultiSelectBox.stories.js +1 -1
- package/dist/components/MultiSelectBox/MultiSelectBox.stories.js.map +1 -1
- package/dist/components/MultiSelectBox/MultiSelectBox.test.js +2 -2
- package/dist/components/MultiSelectBox/MultiSelectBox.test.js.map +1 -1
- package/dist/components/Notification/Notification.stories.js +1 -1
- package/dist/components/Notification/Notification.stories.js.map +1 -1
- package/dist/components/Notification/Notification.test.js +2 -2
- package/dist/components/Notification/Notification.test.js.map +1 -1
- package/dist/components/OverlayCloseButton/OverlayCloseButton.stories.js +1 -1
- package/dist/components/OverlayCloseButton/OverlayCloseButton.stories.js.map +1 -1
- package/dist/components/OverlayStepBar/OverlayStepBar.stories.js.map +1 -1
- package/dist/components/PageOverlay/PageOverlay.stories.js +2 -2
- package/dist/components/PageOverlay/PageOverlay.stories.js.map +1 -1
- package/dist/components/PeriodSelector/PeriodSelector.js +1 -1
- package/dist/components/PeriodSelector/PeriodSelector.stories.js +2 -2
- package/dist/components/PeriodSelector/PeriodSelector.stories.js.map +1 -1
- package/dist/components/PeriodSelector/index.js +1 -1
- package/dist/components/ProgrammeCard/ProgrammeCard.stories.js.map +1 -1
- package/dist/components/RadioButton/RadioButton.stories.js.map +1 -1
- package/dist/components/RadioGroup/RadioGroup.stories.js +1 -1
- package/dist/components/RadioGroup/RadioGroup.stories.js.map +1 -1
- package/dist/components/RadioGroup/Radiogroup.test.js +2 -2
- package/dist/components/RadioGroup/Radiogroup.test.js.map +1 -1
- package/dist/components/RadioTabSelector/RadioTabSelector.js +1 -1
- package/dist/components/RadioTabSelector/RadioTabSelector.stories.js +2 -2
- package/dist/components/RadioTabSelector/RadioTabSelector.stories.js.map +1 -1
- package/dist/components/RadioTabSelector/index.js +1 -1
- package/dist/components/Repeater/Repeater.stories.js.map +1 -1
- package/dist/components/RteEditor/EditorHeader/EditorHeader.js +1 -1
- package/dist/components/RteEditor/EditorHeader/index.js +1 -1
- package/dist/components/RteEditor/Plugins/BlockFormatPlugin/BlockFormatPlugin.js +4 -4
- package/dist/components/RteEditor/Plugins/BlockFormatPlugin/BlockFormatPlugin.js.map +1 -1
- package/dist/components/RteEditor/Plugins/CourseCataloguePlugin/CourseCataloguePlugin.js +25 -25
- package/dist/components/RteEditor/Plugins/CourseCataloguePlugin/CourseCataloguePlugin.js.map +1 -1
- package/dist/components/RteEditor/Plugins/HistoryPlugin/HistoryPlugin.js +1 -1
- package/dist/components/RteEditor/Plugins/HistoryPlugin/index.js +1 -1
- package/dist/components/RteEditor/Plugins/LinkPlugin/AddLinkForm/AddLinkFrom.js +1 -1
- package/dist/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js +1 -1
- package/dist/components/RteEditor/Plugins/LinkPlugin/LinkPlugin.js +1 -1
- package/dist/components/RteEditor/Plugins/LinkPlugin/helpers.js +1 -1
- package/dist/components/RteEditor/Plugins/LinkPlugin/index.js +1 -1
- package/dist/components/RteEditor/Plugins/ListPlugin/ListPlugin.js +15 -15
- package/dist/components/RteEditor/Plugins/ListPlugin/ListPlugin.js.map +1 -1
- package/dist/components/RteEditor/Plugins/PasteHandlerPlugin/PasteHandlerPlugin.js +1 -1
- package/dist/components/RteEditor/Plugins/PasteHandlerPlugin/index.js +1 -1
- package/dist/components/RteEditor/Plugins/TableCellResizerPlugin/TableCellResizerPlugin.js +1 -1
- package/dist/components/RteEditor/Plugins/TableCellResizerPlugin/index.js +1 -1
- package/dist/components/RteEditor/Plugins/TablePlugin/AddTableFrom.js +1 -1
- package/dist/components/RteEditor/Plugins/TablePlugin/TablePlugin.js +1 -1
- package/dist/components/RteEditor/Plugins/TablePlugin/helpers.js +23 -23
- package/dist/components/RteEditor/Plugins/TablePlugin/helpers.js.map +1 -1
- package/dist/components/RteEditor/Plugins/TablePlugin/index.js +1 -1
- package/dist/components/RteEditor/Plugins/ToolbarPlugin/ToolbarPlugin.js +1 -1
- package/dist/components/RteEditor/Plugins/ToolbarPlugin/index.js +1 -1
- package/dist/components/RteEditor/Plugins/index.js +3 -3
- package/dist/components/RteEditor/Providers/LanguageProvider.js.map +1 -1
- package/dist/components/RteEditor/RteEditor.js +1 -1
- package/dist/components/RteEditor/RteEditor.stories.js +1 -1
- package/dist/components/RteEditor/RteEditor.stories.js.map +1 -1
- package/dist/components/RteEditor/helpers.js +6 -6
- package/dist/components/RteEditor/helpers.js.map +1 -1
- package/dist/components/RteEditor/hooks/useFlyout.js.map +1 -1
- package/dist/components/RteEditor/hooks/useTranslation.js.map +1 -1
- package/dist/components/RteEditor/index.js +1 -1
- package/dist/components/RteEditor/nodes/CourseCatalogueNode/CourseCatalogueNode.js +12 -12
- package/dist/components/RteEditor/nodes/CourseCatalogueNode/CourseCatalogueNode.js.map +1 -1
- package/dist/components/RteEditor/nodes/TableWrapperNode/TableWrapperNode.js +19 -19
- package/dist/components/RteEditor/nodes/TableWrapperNode/TableWrapperNode.js.map +1 -1
- package/dist/components/SearchField/SearchField.js.map +1 -1
- package/dist/components/SearchField/SearcheField.stories.js.map +1 -1
- package/dist/components/SearchField/components/ResultsOption.js.map +1 -1
- package/dist/components/SectionNotification/SectionNotification.stories.js.map +1 -1
- package/dist/components/SelectListbox/SelectListBox.stories.js +1 -1
- package/dist/components/SelectListbox/SelectListBox.stories.js.map +1 -1
- package/dist/components/SelectListbox/SelectListbox.js.map +1 -1
- package/dist/components/SelectListbox/SelectProvider.js.map +1 -1
- package/dist/components/SelectListbox/components/SelectButton.js.map +1 -1
- package/dist/components/SelectListbox/components/SelectContainer.js.map +1 -1
- package/dist/components/SelectListbox/components/SelectOption.js.map +1 -1
- package/dist/components/SelectListbox/components/SelectOptionBox.js.map +1 -1
- package/dist/components/Slider/Slider.stories.js.map +1 -1
- package/dist/components/Sortable/Sortable.js.map +1 -1
- package/dist/components/Sortable/Sortable.stories.js +1 -1
- package/dist/components/Sortable/Sortable.stories.js.map +1 -1
- package/dist/components/Sortable/components/SortableHandle.js.map +1 -1
- package/dist/components/Sortable/components/SortableItem.js.map +1 -1
- package/dist/components/Sortable/sortableReducer.js.map +1 -1
- package/dist/components/Spinner/Spinner.stories.js.map +1 -1
- package/dist/components/StatusBadge/StatusBadge.stories.js.map +1 -1
- package/dist/components/StatusBadge/StatusBadge.test.js +2 -2
- package/dist/components/StatusBadge/StatusBadge.test.js.map +1 -1
- package/dist/components/StatusPill/StatusPill.stories.js.map +1 -1
- package/dist/components/TextArea/TextArea.stories.js +1 -1
- package/dist/components/TextArea/TextArea.stories.js.map +1 -1
- package/dist/components/TextArea/TextArea.test.js +3 -3
- package/dist/components/TextArea/TextArea.test.js.map +1 -1
- package/dist/components/ToggleSwitch/ToggleSwitch.stories.js +1 -1
- package/dist/components/ToggleSwitch/ToggleSwitch.stories.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.stories.js.map +1 -1
- package/dist/components/VarIndicator/VarIndicator.stories.js +1 -1
- package/dist/components/VarIndicator/VarIndicator.stories.js.map +1 -1
- package/dist/components/VarIndicator/VarIndicator.test.js +3 -3
- package/dist/components/VarIndicator/VarIndicator.test.js.map +1 -1
- package/dist/components/WeekSelector/WeekSelector.js.map +1 -1
- package/dist/components/WeekSelector/WeekSelector.stories.js.map +1 -1
- package/dist/components/WeekSelector/components/WeekSelectorOption.js.map +1 -1
- package/dist/components/hooks/useDebounce.js.map +1 -1
- package/dist/components/hooks/useOnClickOutside.js.map +1 -1
- package/dist/components/hooks/usePositionedFloaters.js.map +1 -1
- package/dist/components/hooks/useResponsive.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/{components-DAwjkky5.js → components-BzxAULjf.js} +549 -549
- package/dist/components-BzxAULjf.js.map +1 -0
- package/dist/{dist-BIkFjHck.js → dist-V_v3kC0L.js} +3 -3
- package/dist/dist-V_v3kC0L.js.map +1 -0
- package/dist/{esm-ipAmzhQq.js → esm-BoujHjK5.js} +3 -3
- package/dist/{esm-ipAmzhQq.js.map → esm-BoujHjK5.js.map} +1 -1
- package/dist/{helpers-MNJmfDe_.js → helpers-B1VK8xTF.js} +2 -2
- package/dist/{helpers-MNJmfDe_.js.map → helpers-B1VK8xTF.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/{lib-6BbFZdI7.js → lib-BvOQt8El.js} +2 -2
- package/dist/{lib-6BbFZdI7.js.map → lib-BvOQt8El.js.map} +1 -1
- package/dist/{react-18-Dwpebadr.js → react-18-DxAWL8_m.js} +3 -3
- package/dist/{react-18-Dwpebadr.js.map → react-18-DxAWL8_m.js.map} +1 -1
- package/dist/{react.esm-R7eBXTUI.js → react.esm-CweFe1CK.js} +5 -5
- package/dist/react.esm-CweFe1CK.js.map +1 -0
- package/dist/setupTests.js +4 -4
- package/dist/setupTests.js.map +1 -1
- package/dist/storybook__react.d.js +5 -5
- package/dist/storybook__react.d.js.map +1 -1
- package/dist/{test-Cr_l59hN.js → test-Pa9Lwbsq.js} +2 -2
- package/dist/test-Pa9Lwbsq.js.map +1 -0
- package/dist/{test-utils-BSs0eZfL.js → test-utils-Cmn06m_x.js} +2 -2
- package/dist/{test-utils-BSs0eZfL.js.map → test-utils-Cmn06m_x.js.map} +1 -1
- package/package.json +21 -20
- package/dist/Lexical.prod-sbwgNRjw.js.map +0 -1
- package/dist/LexicalClipboard.prod-DdImsyd1.js +0 -248
- package/dist/LexicalClipboard.prod-DdImsyd1.js.map +0 -1
- package/dist/LexicalExtension.prod-jTSDl1mh.js.map +0 -1
- package/dist/LexicalLink.prod-BKLNLyu8.js.map +0 -1
- package/dist/LexicalList.prod-DEtc4lSr.js.map +0 -1
- package/dist/LexicalTable.prod-CpIPDW6z.js.map +0 -1
- package/dist/LexicalUtils.prod-DjjGkphN.js +0 -360
- package/dist/LexicalUtils.prod-DjjGkphN.js.map +0 -1
- package/dist/chunk-SZQXB3JV-KiB8lSa9.js.map +0 -1
- package/dist/components-DAwjkky5.js.map +0 -1
- package/dist/dist-BIkFjHck.js.map +0 -1
- package/dist/react.esm-R7eBXTUI.js.map +0 -1
- package/dist/test-Cr_l59hN.js.map +0 -1
- /package/dist/assets/favicon/{src/assets/favicon/android-chrome-192x192.png → android-chrome-192x192.png} +0 -0
- /package/dist/assets/favicon/{src/assets/favicon/android-chrome-512x512.png → android-chrome-512x512.png} +0 -0
- /package/dist/assets/favicon/{src/assets/favicon/apple-touch-icon.png → apple-touch-icon.png} +0 -0
- /package/dist/assets/favicon/{src/assets/favicon/favicon-16x16.png → favicon-16x16.png} +0 -0
- /package/dist/assets/favicon/{src/assets/favicon/favicon-32x32.png → favicon-32x32.png} +0 -0
- /package/dist/assets/favicon/{src/assets/favicon/favicon.ico → favicon.ico} +0 -0
- /package/dist/assets/favicon/{src/assets/favicon/favicon.svg → favicon.svg} +0 -0
- /package/dist/assets/favicon/{src/assets/favicon/site.webmanifest → site.webmanifest} +0 -0
- /package/dist/assets/fonts/{src/assets/fonts/SourceSans3-Regular.otf.woff → SourceSans3-Regular.otf.woff} +0 -0
- /package/dist/assets/fonts/{src/assets/fonts/SourceSans3-Regular.otf.woff2 → SourceSans3-Regular.otf.woff2} +0 -0
- /package/dist/assets/fonts/{src/assets/fonts/SourceSans3-Semibold.otf.woff → SourceSans3-Semibold.otf.woff} +0 -0
- /package/dist/assets/fonts/{src/assets/fonts/SourceSans3-Semibold.otf.woff2 → SourceSans3-Semibold.otf.woff2} +0 -0
- /package/dist/assets/{src/css/globals.css → globals.css} +0 -0
- /package/dist/assets/{src/css/variables.css → variables.css} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioGroup.stories.js","names":[],"sources":["../../../src/components/RadioGroup/RadioGroup.stories.tsx"],"sourcesContent":["import { fn } from 'storybook/test';\n\nimport type { Meta, StoryFn } from '@storybook/react';\nimport type { RadioGroupProps } from './RadioGroup';\n\nimport { RadioGroup } from './RadioGroup';\n\nconst codeString = `\n <RadioGroup label={label} options={options} \n onChange={onChangeFunction} disabled={disabled} /> `;\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n title: 'Molecules/RadioGroup',\n component: RadioGroup,\n argTypes: {\n label: {\n control: 'text',\n },\n disabled: {\n control: 'boolean',\n },\n },\n parameters: {\n inspectComponent: RadioGroup,\n codeString: codeString,\n },\n} as Meta<RadioGroupProps>;\n\nconst mockData = [\n {\n id: '1',\n titleLabel: 'Option 1',\n value: 'option1',\n },\n {\n id: '2',\n titleLabel: 'Option 2',\n value: 'option2',\n },\n {\n id: '3',\n titleLabel: 'Option 3',\n value: 'option3',\n },\n];\n\nconst Template: StoryFn<RadioGroupProps> = (args) => <RadioGroup {...args} />;\n\nexport const RadioGroupExample = Template.bind({});\nRadioGroupExample.args = {\n disabled: false,\n label: 'Sample label',\n options: mockData,\n onChange: fn(),\n};\n"],"mappings":";;;AAYA,IAAA,IAAe;CACb,OAAO;CACP,WAAW;CACX,UAAU;EACR,OAAO,EACL,SAAS,QACV;EACD,UAAU,EACR,SAAS,WACV;EACF;CACD,YAAY;EACV,kBAAkB;EACN
|
|
1
|
+
{"version":3,"file":"RadioGroup.stories.js","names":[],"sources":["../../../src/components/RadioGroup/RadioGroup.stories.tsx"],"sourcesContent":["import { fn } from 'storybook/test';\n\nimport type { Meta, StoryFn } from '@storybook/react';\nimport type { RadioGroupProps } from './RadioGroup';\n\nimport { RadioGroup } from './RadioGroup';\n\nconst codeString = `\n <RadioGroup label={label} options={options} \n onChange={onChangeFunction} disabled={disabled} /> `;\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n title: 'Molecules/RadioGroup',\n component: RadioGroup,\n argTypes: {\n label: {\n control: 'text',\n },\n disabled: {\n control: 'boolean',\n },\n },\n parameters: {\n inspectComponent: RadioGroup,\n codeString: codeString,\n },\n} as Meta<RadioGroupProps>;\n\nconst mockData = [\n {\n id: '1',\n titleLabel: 'Option 1',\n value: 'option1',\n },\n {\n id: '2',\n titleLabel: 'Option 2',\n value: 'option2',\n },\n {\n id: '3',\n titleLabel: 'Option 3',\n value: 'option3',\n },\n];\n\nconst Template: StoryFn<RadioGroupProps> = (args) => <RadioGroup {...args} />;\n\nexport const RadioGroupExample = Template.bind({});\nRadioGroupExample.args = {\n disabled: false,\n label: 'Sample label',\n options: mockData,\n onChange: fn(),\n};\n"],"mappings":";;;AAYA,IAAA,IAAe;CACb,OAAO;CACP,WAAW;CACX,UAAU;EACR,OAAO,EACL,SAAS,QACV;EACD,UAAU,EACR,SAAS,WACV;EACF;CACD,YAAY;EACV,kBAAkB;EACN;EACb;CACF,EAEK,IAAW;CACf;EACE,IAAI;EACJ,YAAY;EACZ,OAAO;EACR;CACD;EACE,IAAI;EACJ,YAAY;EACZ,OAAO;EACR;CACD;EACE,IAAI;EACJ,YAAY;EACZ,OAAO;EACR;CACF,EAIY,MAF+B,MAAS,kBAAC,GAAD,EAAY,GAAI,GAAQ,CAAA,EAEnC,KAAK,EAAE,CAAC;AAClD,EAAkB,OAAO;CACvB,UAAU;CACV,OAAO;CACP,SAAS;CACT,UAAU,GAAI;CACf"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "../../dist-
|
|
1
|
+
import "../../dist-V_v3kC0L.js";
|
|
2
2
|
import { t as e } from "../../RadioGroup-JeTjVp5B.js";
|
|
3
|
-
import { i as t, n, t as r } from "../../react.esm-
|
|
3
|
+
import { i as t, n, t as r } from "../../react.esm-CweFe1CK.js";
|
|
4
4
|
import { jsx as i } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/RadioGroup/Radiogroup.test.tsx
|
|
6
6
|
var a = [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Radiogroup.test.js","names":[],"sources":["../../../src/components/RadioGroup/Radiogroup.test.tsx"],"sourcesContent":["import '@testing-library/jest-dom';\nimport { render, screen, fireEvent } from '@testing-library/react';\n\nimport { RadioGroup } from './RadioGroup';\n\nconst options = [\n { id: '1', titleLabel: 'Option 1', value: 'option1' },\n { id: '2', titleLabel: 'Option 2', value: 'option2' },\n];\n\ndescribe('RadioGroup', () => {\n it('should render correctly', () => {\n render(<RadioGroup label=\"Test Label\" options={options} onChange={jest.fn()} />);\n expect(screen.getByText('Test Label')).toBeInTheDocument();\n expect(screen.getByText('Option 1')).toBeInTheDocument();\n expect(screen.getByText('Option 2')).toBeInTheDocument();\n });\n\n it('should call onChange when an option is selected', () => {\n const handleChange = jest.fn();\n render(<RadioGroup label=\"Test Label\" options={options} onChange={handleChange} />);\n\n const option1 = screen.getByLabelText('Option 1');\n fireEvent.click(option1);\n expect(handleChange).toHaveBeenCalledWith('option1');\n });\n\n it('should not allow selection when disabled', () => {\n const handleChange = jest.fn();\n render(<RadioGroup label=\"Test Label\" options={options} onChange={handleChange} disabled />);\n\n const option1 = screen.getByLabelText('Option 1');\n fireEvent.click(option1);\n expect(handleChange).not.toHaveBeenCalled();\n });\n});\n"],"mappings":";;;;;AAKA,IAAM,IAAU,CACd;CAAE,IAAI;CAAK,YAAY;CAAY,OAAO;CAAW,EACrD;CAAE,IAAI;CAAK,YAAY;CAAY,OAAO;CAAW,CACtD;AAED,SAAS,oBAAoB;
|
|
1
|
+
{"version":3,"file":"Radiogroup.test.js","names":[],"sources":["../../../src/components/RadioGroup/Radiogroup.test.tsx"],"sourcesContent":["import '@testing-library/jest-dom';\nimport { render, screen, fireEvent } from '@testing-library/react';\n\nimport { RadioGroup } from './RadioGroup';\n\nconst options = [\n { id: '1', titleLabel: 'Option 1', value: 'option1' },\n { id: '2', titleLabel: 'Option 2', value: 'option2' },\n];\n\ndescribe('RadioGroup', () => {\n it('should render correctly', () => {\n render(<RadioGroup label=\"Test Label\" options={options} onChange={jest.fn()} />);\n expect(screen.getByText('Test Label')).toBeInTheDocument();\n expect(screen.getByText('Option 1')).toBeInTheDocument();\n expect(screen.getByText('Option 2')).toBeInTheDocument();\n });\n\n it('should call onChange when an option is selected', () => {\n const handleChange = jest.fn();\n render(<RadioGroup label=\"Test Label\" options={options} onChange={handleChange} />);\n\n const option1 = screen.getByLabelText('Option 1');\n fireEvent.click(option1);\n expect(handleChange).toHaveBeenCalledWith('option1');\n });\n\n it('should not allow selection when disabled', () => {\n const handleChange = jest.fn();\n render(<RadioGroup label=\"Test Label\" options={options} onChange={handleChange} disabled />);\n\n const option1 = screen.getByLabelText('Option 1');\n fireEvent.click(option1);\n expect(handleChange).not.toHaveBeenCalled();\n });\n});\n"],"mappings":";;;;;AAKA,IAAM,IAAU,CACd;CAAE,IAAI;CAAK,YAAY;CAAY,OAAO;CAAW,EACrD;CAAE,IAAI;CAAK,YAAY;CAAY,OAAO;CAAW,CACtD;AAED,SAAS,oBAAoB;CAiB3B,AAhBA,GAAG,iCAAiC;EAIlC,AAHA,EAAO,kBAAC,GAAD;GAAY,OAAM;GAAsB;GAAS,UAAU,KAAK,IAAI;GAAI,CAAA,CAAC,EAChF,OAAO,EAAO,UAAU,aAAa,CAAC,CAAC,mBAAmB,EAC1D,OAAO,EAAO,UAAU,WAAW,CAAC,CAAC,mBAAmB,EACxD,OAAO,EAAO,UAAU,WAAW,CAAC,CAAC,mBAAmB;GACxD,EAEF,GAAG,yDAAyD;EAC1D,IAAM,IAAe,KAAK,IAAI;EAC9B,EAAO,kBAAC,GAAD;GAAY,OAAM;GAAsB;GAAS,UAAU;GAAgB,CAAA,CAAC;EAEnF,IAAM,IAAU,EAAO,eAAe,WAAW;EAEjD,AADA,EAAU,MAAM,EAAQ,EACxB,OAAO,EAAa,CAAC,qBAAqB,UAAU;GACpD,EAEF,GAAG,kDAAkD;EACnD,IAAM,IAAe,KAAK,IAAI;EAC9B,EAAO,kBAAC,GAAD;GAAY,OAAM;GAAsB;GAAS,UAAU;GAAc,UAAA;GAAW,CAAA,CAAC;EAE5F,IAAM,IAAU,EAAO,eAAe,WAAW;EAEjD,AADA,EAAU,MAAM,EAAQ,EACxB,OAAO,EAAa,CAAC,IAAI,kBAAkB;GAC3C;EACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { u as e } from "../../components-
|
|
1
|
+
import { u as e } from "../../components-BzxAULjf.js";
|
|
2
2
|
export { e as RadioTabSelector };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as e } from "../../test-
|
|
2
|
-
import { u as t } from "../../components-
|
|
1
|
+
import { r as e } from "../../test-Pa9Lwbsq.js";
|
|
2
|
+
import { u as t } from "../../components-BzxAULjf.js";
|
|
3
3
|
import { jsx as n } from "react/jsx-runtime";
|
|
4
4
|
var r = {
|
|
5
5
|
title: "Molecules/RadioTabSelector",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioTabSelector.stories.js","names":[],"sources":["../../../src/components/RadioTabSelector/RadioTabSelector.stories.tsx"],"sourcesContent":["import { fn } from 'storybook/test';\r\n\r\nimport type { Meta, StoryFn } from '@storybook/react';\r\nimport type { RadioTabSelectorProps } from './RadioTabSelector'; // Already imported above\r\n\r\nimport { RadioTabSelector } from './RadioTabSelector';\r\n\r\nconst codeString =\r\n '<RadioTabSelector radioButtons={} defaultValue={} label={} labelPosition={} required={} notValidatedText={} onSetValue={} />';\r\n\r\n// eslint-disable-next-line import/no-default-export\r\nexport default {\r\n title: 'Molecules/RadioTabSelector',\r\n component: RadioTabSelector,\r\n argTypes: {\r\n radioButtons: {\r\n table: {\r\n disable: true,\r\n },\r\n },\r\n defaultValue: {\r\n table: {\r\n disable: true,\r\n },\r\n },\r\n label: {\r\n control: 'text',\r\n },\r\n labelPosition: {\r\n control: 'radio',\r\n options: ['top', 'left'],\r\n },\r\n required: {\r\n control: 'boolean',\r\n },\r\n notValidatedText: {\r\n control: 'text',\r\n },\r\n onSetValue: {\r\n table: {\r\n disable: true,\r\n },\r\n },\r\n },\r\n parameters: {\r\n inspectComponent: RadioTabSelector,\r\n codeString: codeString,\r\n },\r\n} as Meta<RadioTabSelectorProps>;\r\n\r\nconst Template: StoryFn<RadioTabSelectorProps> = (args) => <RadioTabSelector {...args} />;\r\n\r\nexport const RadioTabSelectorExample = Template.bind({});\r\nRadioTabSelectorExample.args = {\r\n buttons: [\r\n { label: 'Digitaal', value: 'digitaal' },\r\n { label: 'Schriftelijk', value: 'schriftelijk' },\r\n { label: 'Presentatie', value: 'presentatie' },\r\n ],\r\n defaultValue: 'digitaal',\r\n radioGroupName: 'radio-group',\r\n label: 'Toetsvorm',\r\n labelPosition: 'top',\r\n required: true,\r\n notValidatedText: '',\r\n onSetValue: fn(),\r\n};\r\n\r\nexport const WithIcons = Template.bind({});\r\nWithIcons.args = {\r\n buttons: [\r\n { label: 'Digitaal', value: 'digitaal', iconName: 'SignalActive' },\r\n { label: 'Schriftelijk', value: 'schriftelijk', iconName: 'Pencil' },\r\n { label: 'Presentatie', value: 'presentatie', iconName: 'User' },\r\n ],\r\n defaultValue: 'digitaal',\r\n radioGroupName: 'radio-group',\r\n label: 'Toetsvorm',\r\n labelPosition: 'top',\r\n required: true,\r\n notValidatedText: '',\r\n onSetValue: fn(),\r\n};\r\n"],"mappings":";;;AAWA,IAAA,IAAe;CACb,OAAO;CACP,WAAW;CACX,UAAU;EACR,cAAc,EACZ,OAAO,EACL,SAAS,IACV,EACF;EACD,cAAc,EACZ,OAAO,EACL,SAAS,IACV,EACF;EACD,OAAO,EACL,SAAS,QACV;EACD,eAAe;GACb,SAAS;GACT,SAAS,CAAC,OAAO,OAAO;GACzB;EACD,UAAU,EACR,SAAS,WACV;EACD,kBAAkB,EAChB,SAAS,QACV;EACD,YAAY,EACV,OAAO,EACL,SAAS,IACV,EACF;EACF;CACD,YAAY;EACV,kBAAkB;EACN
|
|
1
|
+
{"version":3,"file":"RadioTabSelector.stories.js","names":[],"sources":["../../../src/components/RadioTabSelector/RadioTabSelector.stories.tsx"],"sourcesContent":["import { fn } from 'storybook/test';\r\n\r\nimport type { Meta, StoryFn } from '@storybook/react';\r\nimport type { RadioTabSelectorProps } from './RadioTabSelector'; // Already imported above\r\n\r\nimport { RadioTabSelector } from './RadioTabSelector';\r\n\r\nconst codeString =\r\n '<RadioTabSelector radioButtons={} defaultValue={} label={} labelPosition={} required={} notValidatedText={} onSetValue={} />';\r\n\r\n// eslint-disable-next-line import/no-default-export\r\nexport default {\r\n title: 'Molecules/RadioTabSelector',\r\n component: RadioTabSelector,\r\n argTypes: {\r\n radioButtons: {\r\n table: {\r\n disable: true,\r\n },\r\n },\r\n defaultValue: {\r\n table: {\r\n disable: true,\r\n },\r\n },\r\n label: {\r\n control: 'text',\r\n },\r\n labelPosition: {\r\n control: 'radio',\r\n options: ['top', 'left'],\r\n },\r\n required: {\r\n control: 'boolean',\r\n },\r\n notValidatedText: {\r\n control: 'text',\r\n },\r\n onSetValue: {\r\n table: {\r\n disable: true,\r\n },\r\n },\r\n },\r\n parameters: {\r\n inspectComponent: RadioTabSelector,\r\n codeString: codeString,\r\n },\r\n} as Meta<RadioTabSelectorProps>;\r\n\r\nconst Template: StoryFn<RadioTabSelectorProps> = (args) => <RadioTabSelector {...args} />;\r\n\r\nexport const RadioTabSelectorExample = Template.bind({});\r\nRadioTabSelectorExample.args = {\r\n buttons: [\r\n { label: 'Digitaal', value: 'digitaal' },\r\n { label: 'Schriftelijk', value: 'schriftelijk' },\r\n { label: 'Presentatie', value: 'presentatie' },\r\n ],\r\n defaultValue: 'digitaal',\r\n radioGroupName: 'radio-group',\r\n label: 'Toetsvorm',\r\n labelPosition: 'top',\r\n required: true,\r\n notValidatedText: '',\r\n onSetValue: fn(),\r\n};\r\n\r\nexport const WithIcons = Template.bind({});\r\nWithIcons.args = {\r\n buttons: [\r\n { label: 'Digitaal', value: 'digitaal', iconName: 'SignalActive' },\r\n { label: 'Schriftelijk', value: 'schriftelijk', iconName: 'Pencil' },\r\n { label: 'Presentatie', value: 'presentatie', iconName: 'User' },\r\n ],\r\n defaultValue: 'digitaal',\r\n radioGroupName: 'radio-group',\r\n label: 'Toetsvorm',\r\n labelPosition: 'top',\r\n required: true,\r\n notValidatedText: '',\r\n onSetValue: fn(),\r\n};\r\n"],"mappings":";;;AAWA,IAAA,IAAe;CACb,OAAO;CACP,WAAW;CACX,UAAU;EACR,cAAc,EACZ,OAAO,EACL,SAAS,IACV,EACF;EACD,cAAc,EACZ,OAAO,EACL,SAAS,IACV,EACF;EACD,OAAO,EACL,SAAS,QACV;EACD,eAAe;GACb,SAAS;GACT,SAAS,CAAC,OAAO,OAAO;GACzB;EACD,UAAU,EACR,SAAS,WACV;EACD,kBAAkB,EAChB,SAAS,QACV;EACD,YAAY,EACV,OAAO,EACL,SAAS,IACV,EACF;EACF;CACD,YAAY;EACV,kBAAkB;EACN;EACb;CACF,EAEK,KAA4C,MAAS,kBAAC,GAAD,EAAkB,GAAI,GAAQ,CAAA,EAE5E,IAA0B,EAAS,KAAK,EAAE,CAAC;AACxD,EAAwB,OAAO;CAC7B,SAAS;EACP;GAAE,OAAO;GAAY,OAAO;GAAY;EACxC;GAAE,OAAO;GAAgB,OAAO;GAAgB;EAChD;GAAE,OAAO;GAAe,OAAO;GAAe;EAC/C;CACD,cAAc;CACd,gBAAgB;CAChB,OAAO;CACP,eAAe;CACf,UAAU;CACV,kBAAkB;CAClB,YAAY,GAAI;CACjB;AAED,IAAa,IAAY,EAAS,KAAK,EAAE,CAAC;AAC1C,EAAU,OAAO;CACf,SAAS;EACP;GAAE,OAAO;GAAY,OAAO;GAAY,UAAU;GAAgB;EAClE;GAAE,OAAO;GAAgB,OAAO;GAAgB,UAAU;GAAU;EACpE;GAAE,OAAO;GAAe,OAAO;GAAe,UAAU;GAAQ;EACjE;CACD,cAAc;CACd,gBAAgB;CAChB,OAAO;CACP,eAAe;CACf,UAAU;CACV,kBAAkB;CAClB,YAAY,GAAI;CACjB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { u as e } from "../../components-
|
|
1
|
+
import { u as e } from "../../components-BzxAULjf.js";
|
|
2
2
|
export { e as RadioTabSelector };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repeater.stories.js","names":[],"sources":["../../../src/components/Repeater/Repeater.stories.tsx"],"sourcesContent":["import type { PropsWithChildren } from 'react';\nimport type { Meta, StoryFn } from '@storybook/react';\nimport type { RepeaterProps } from './Repeater';\n\nimport { Repeater } from './Repeater';\n\nimport { Container } from 'storyComponents/Container';\n\nconst codeString = '<Repeater flexDirection={flexDirection} gap={gap}>{children}</Repeater>';\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n title: 'Atoms/Repeater',\n component: Repeater,\n argTypes: {\n flexDirection: {\n control: {\n type: 'select',\n },\n },\n gap: {\n control: {\n type: 'select',\n sort: false,\n },\n },\n children: {\n table: {\n disable: true,\n },\n },\n },\n parameters: {\n inspectComponent: Repeater,\n codeString: codeString,\n },\n} as Meta<PropsWithChildren<RepeaterProps>>;\n\nconst Template: StoryFn<PropsWithChildren<RepeaterProps>> = (args) => (\n <Container>\n <Repeater {...args} />\n </Container>\n);\n\nexport const RepeaterExample = Template.bind({});\nRepeaterExample.args = {\n flexDirection: 'column',\n gap: '050',\n children: (\n <>\n <div>Example item 1</div>\n <div>Example item 2</div>\n <div>Example item 3</div>\n </>\n ),\n};\n"],"mappings":";;;;AAWA,IAAA,IAAe;CACb,OAAO;CACP,WAAW;CACX,UAAU;EACR,eAAe,EACb,SAAS,EACP,MAAM,UACP,EACF;EACD,KAAK,EACH,SAAS;GACP,MAAM;GACN,MAAM;GACP,EACF;EACD,UAAU,EACR,OAAO,EACL,SAAS,IACV,EACF;EACF;CACD,YAAY;EACV,kBAAkB;EACN
|
|
1
|
+
{"version":3,"file":"Repeater.stories.js","names":[],"sources":["../../../src/components/Repeater/Repeater.stories.tsx"],"sourcesContent":["import type { PropsWithChildren } from 'react';\nimport type { Meta, StoryFn } from '@storybook/react';\nimport type { RepeaterProps } from './Repeater';\n\nimport { Repeater } from './Repeater';\n\nimport { Container } from 'storyComponents/Container';\n\nconst codeString = '<Repeater flexDirection={flexDirection} gap={gap}>{children}</Repeater>';\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n title: 'Atoms/Repeater',\n component: Repeater,\n argTypes: {\n flexDirection: {\n control: {\n type: 'select',\n },\n },\n gap: {\n control: {\n type: 'select',\n sort: false,\n },\n },\n children: {\n table: {\n disable: true,\n },\n },\n },\n parameters: {\n inspectComponent: Repeater,\n codeString: codeString,\n },\n} as Meta<PropsWithChildren<RepeaterProps>>;\n\nconst Template: StoryFn<PropsWithChildren<RepeaterProps>> = (args) => (\n <Container>\n <Repeater {...args} />\n </Container>\n);\n\nexport const RepeaterExample = Template.bind({});\nRepeaterExample.args = {\n flexDirection: 'column',\n gap: '050',\n children: (\n <>\n <div>Example item 1</div>\n <div>Example item 2</div>\n <div>Example item 3</div>\n </>\n ),\n};\n"],"mappings":";;;;AAWA,IAAA,IAAe;CACb,OAAO;CACP,WAAW;CACX,UAAU;EACR,eAAe,EACb,SAAS,EACP,MAAM,UACP,EACF;EACD,KAAK,EACH,SAAS;GACP,MAAM;GACN,MAAM;GACP,EACF;EACD,UAAU,EACR,OAAO,EACL,SAAS,IACV,EACF;EACF;CACD,YAAY;EACV,kBAAkB;EACN;EACb;CACF,EAQY,MANgD,MAC3D,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAU,GAAI,GAAQ,CAAA,EACZ,CAAA,EAG0B,KAAK,EAAE,CAAC;AAChD,EAAgB,OAAO;CACrB,eAAe;CACf,KAAK;CACL,UACE,kBAAA,GAAA,EAAA,UAAA;EACE,kBAAC,OAAD,EAAA,UAAK,kBAAoB,CAAA;EACzB,kBAAC,OAAD,EAAA,UAAK,kBAAoB,CAAA;EACzB,kBAAC,OAAD,EAAA,UAAK,kBAAoB,CAAA;EACxB,EAAA,CAAA;CAEN"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { r as e } from "../../../components-
|
|
1
|
+
import { r as e } from "../../../components-BzxAULjf.js";
|
|
2
2
|
export { e as EditorHeader };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { r as e } from "../../../components-
|
|
1
|
+
import { r as e } from "../../../components-BzxAULjf.js";
|
|
2
2
|
export { e as EditorHeader };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as e } from "../../../../clsx-BD2qMUU1.js";
|
|
2
2
|
import { Icon as t } from "../../../Icon/Icon.js";
|
|
3
3
|
import { t as n } from "../../../../LexicalComposerContext.prod-Ca-YN_fj.js";
|
|
4
|
-
import {
|
|
4
|
+
import { Gn as r, ot as i, v as a } from "../../../../Lexical.prod-CqPLSi0R.js";
|
|
5
5
|
import { t as o } from "../../../../RteEditor.module-BJLUYSpf.js";
|
|
6
6
|
import { useTranslation as s } from "../../hooks/useTranslation.js";
|
|
7
7
|
import { useEffect as c, useState as l } from "react";
|
|
@@ -12,13 +12,13 @@ var d = {
|
|
|
12
12
|
italic: "Italic"
|
|
13
13
|
}, f = ["bold", "italic"], p = () => {
|
|
14
14
|
let p = s(), [m] = n(), [h, g] = l(!1), [_, v] = l(!1), y = (e) => {
|
|
15
|
-
m.dispatchCommand(
|
|
15
|
+
m.dispatchCommand(r, e);
|
|
16
16
|
};
|
|
17
17
|
return c(() => {
|
|
18
18
|
let e = m.registerUpdateListener(({ editorState: e }) => {
|
|
19
19
|
e.read(() => {
|
|
20
|
-
let e =
|
|
21
|
-
|
|
20
|
+
let e = i();
|
|
21
|
+
a(e) && (g(e.hasFormat("bold")), v(e.hasFormat("italic")));
|
|
22
22
|
});
|
|
23
23
|
});
|
|
24
24
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockFormatPlugin.js","names":[],"sources":["../../../../../src/components/RteEditor/Plugins/BlockFormatPlugin/BlockFormatPlugin.tsx"],"sourcesContent":["import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { clsx } from 'clsx';\nimport { $getSelection, $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical';\nimport { useEffect, useState } from 'react';\n\nimport type { JSX } from 'react';\n\nimport { Icon } from 'components/Icon';\nimport styles from 'components/RteEditor/RteEditor.module.css';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\n\ntype BlockTypesType = 'bold' | 'italic';\nconst BLOCK_TYPE_ICONS = {\n bold: 'Bold',\n italic: 'Italic',\n};\n\nconst BlockTypes = ['bold', 'italic'];\n\nexport const BlockFormatPlugin = (): JSX.Element => {\n const t = useTranslation();\n const [editor] = useLexicalComposerContext();\n const [isBold, setIsBold] = useState(false);\n const [isItalic, setIsItalic] = useState(false);\n\n const onClick = (type: BlockTypesType): void => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, type);\n };\n\n useEffect(() => {\n const removeStatusListener = editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n setIsBold(selection.hasFormat('bold'));\n setIsItalic(selection.hasFormat('italic'));\n }\n });\n });\n\n return () => {\n removeStatusListener();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor]);\n\n return (\n <div className={styles['editor__toolbar-button-group']}>\n {BlockTypes.map((type) => (\n <button\n onClick={() => onClick(type as BlockTypesType)}\n key={type}\n title={type === 'bold' ? t.format.boldTooltip : t.format.italicTooltip}\n className={clsx(\n styles['editor__toolbar-button'],\n styles[`editor__toolbar-button--${type}`],\n type === 'bold' && isBold && styles['editor__toolbar-button--active'],\n type === 'italic' && isItalic && styles['editor__toolbar-button--active']\n )}\n aria-label={`${type === 'bold' ? t.aria.labels.bold : t.aria.labels.italic}`}\n aria-keyshortcuts={`${type === 'bold' ? t.aria.keyshortcuts.bold : t.aria.keyshortcuts.italic}`}\n type=\"button\"\n >\n <Icon name={BLOCK_TYPE_ICONS[type as keyof typeof Icon]} size={24} />\n </button>\n ))}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;AAYA,IAAM,IAAmB;CACvB,MAAM;CACN,QAAQ;CACT,EAEK,IAAa,CAAC,QAAQ,SAAS,EAExB,UAAuC;CAClD,IAAM,IAAI,GAAgB,EACpB,CAAC,KAAU,GAA2B,EACtC,CAAC,GAAQ,KAAa,EAAS,GAAM,EACrC,CAAC,GAAU,KAAe,EAAS,GAAM,EAEzC,KAAW,MAA+B;
|
|
1
|
+
{"version":3,"file":"BlockFormatPlugin.js","names":[],"sources":["../../../../../src/components/RteEditor/Plugins/BlockFormatPlugin/BlockFormatPlugin.tsx"],"sourcesContent":["import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { clsx } from 'clsx';\nimport { $getSelection, $isRangeSelection, FORMAT_TEXT_COMMAND } from 'lexical';\nimport { useEffect, useState } from 'react';\n\nimport type { JSX } from 'react';\n\nimport { Icon } from 'components/Icon';\nimport styles from 'components/RteEditor/RteEditor.module.css';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\n\ntype BlockTypesType = 'bold' | 'italic';\nconst BLOCK_TYPE_ICONS = {\n bold: 'Bold',\n italic: 'Italic',\n};\n\nconst BlockTypes = ['bold', 'italic'];\n\nexport const BlockFormatPlugin = (): JSX.Element => {\n const t = useTranslation();\n const [editor] = useLexicalComposerContext();\n const [isBold, setIsBold] = useState(false);\n const [isItalic, setIsItalic] = useState(false);\n\n const onClick = (type: BlockTypesType): void => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, type);\n };\n\n useEffect(() => {\n const removeStatusListener = editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n setIsBold(selection.hasFormat('bold'));\n setIsItalic(selection.hasFormat('italic'));\n }\n });\n });\n\n return () => {\n removeStatusListener();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor]);\n\n return (\n <div className={styles['editor__toolbar-button-group']}>\n {BlockTypes.map((type) => (\n <button\n onClick={() => onClick(type as BlockTypesType)}\n key={type}\n title={type === 'bold' ? t.format.boldTooltip : t.format.italicTooltip}\n className={clsx(\n styles['editor__toolbar-button'],\n styles[`editor__toolbar-button--${type}`],\n type === 'bold' && isBold && styles['editor__toolbar-button--active'],\n type === 'italic' && isItalic && styles['editor__toolbar-button--active']\n )}\n aria-label={`${type === 'bold' ? t.aria.labels.bold : t.aria.labels.italic}`}\n aria-keyshortcuts={`${type === 'bold' ? t.aria.keyshortcuts.bold : t.aria.keyshortcuts.italic}`}\n type=\"button\"\n >\n <Icon name={BLOCK_TYPE_ICONS[type as keyof typeof Icon]} size={24} />\n </button>\n ))}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;AAYA,IAAM,IAAmB;CACvB,MAAM;CACN,QAAQ;CACT,EAEK,IAAa,CAAC,QAAQ,SAAS,EAExB,UAAuC;CAClD,IAAM,IAAI,GAAgB,EACpB,CAAC,KAAU,GAA2B,EACtC,CAAC,GAAQ,KAAa,EAAS,GAAM,EACrC,CAAC,GAAU,KAAe,EAAS,GAAM,EAEzC,KAAW,MAA+B;EAC9C,EAAO,gBAAgB,GAAqB,EAAK;;CAoBnD,OAjBA,QAAgB;EACd,IAAM,IAAuB,EAAO,wBAAwB,EAAE,qBAAkB;GAC9E,EAAY,WAAW;IACrB,IAAM,IAAY,GAAe;IACjC,AAAI,EAAkB,EAAU,KAC9B,EAAU,EAAU,UAAU,OAAO,CAAC,EACtC,EAAY,EAAU,UAAU,SAAS,CAAC;KAE5C;IACF;EAEF,aAAa;GACX,GAAsB;;IAGvB,CAAC,EAAO,CAAC,EAGV,kBAAC,OAAD;EAAK,WAAW,EAAO;YACpB,EAAW,KAAK,MACf,kBAAC,UAAD;GACE,eAAe,EAAQ,EAAuB;GAE9C,OAAO,MAAS,SAAS,EAAE,OAAO,cAAc,EAAE,OAAO;GACzD,WAAW,EACT,EAAO,2BACP,EAAO,2BAA2B,MAClC,MAAS,UAAU,KAAU,EAAO,mCACpC,MAAS,YAAY,KAAY,EAAO,kCACzC;GACD,cAAY,GAAG,MAAS,SAAS,EAAE,KAAK,OAAO,OAAO,EAAE,KAAK,OAAO;GACpE,qBAAmB,GAAG,MAAS,SAAS,EAAE,KAAK,aAAa,OAAO,EAAE,KAAK,aAAa;GACvF,MAAK;aAEL,kBAAC,GAAD;IAAM,MAAM,EAAiB;IAA4B,MAAM;IAAM,CAAA;GAC9D,EAbF,EAaE,CACT;EACE,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as e } from "../../../../clsx-BD2qMUU1.js";
|
|
2
2
|
import { t } from "../../../../LexicalComposerContext.prod-Ca-YN_fj.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { Dn as n, Kt as r, L as i, mt as a, on as o, ot as s, u as c, v as l, zn as u } from "../../../../Lexical.prod-CqPLSi0R.js";
|
|
4
|
+
import { n as d } from "../../../../LexicalUtils.prod-BqcriFWV.js";
|
|
5
5
|
import { $getLinkTypeFromNode as f, CourseCatalogueNode as p, INSERT_COURSE_CATALOGUE_LINK as m, REMOVE_COURSE_CATALOGUE_LINK as h } from "../../nodes/CourseCatalogueNode/CourseCatalogueNode.js";
|
|
6
6
|
import { t as g } from "../../../../RteEditor.module-BJLUYSpf.js";
|
|
7
7
|
import { t as _ } from "../../../../AddCatalogueLinkForm-rph4K9P0.js";
|
|
@@ -22,12 +22,12 @@ var T = ({ onSearch: T, searchResponse: E, parentScrollPosition: D }) => {
|
|
|
22
22
|
T("", z), R(null);
|
|
23
23
|
};
|
|
24
24
|
b(() => {
|
|
25
|
-
let e = O.registerCommand(
|
|
25
|
+
let e = O.registerCommand(u, (e) => e.ctrlKey && e.shiftKey && e.altKey && e.key === "C" ? (e.preventDefault(), H("course"), !0) : e.ctrlKey && e.shiftKey && e.altKey && e.key === "P" ? (e.preventDefault(), H("programme"), !0) : !1, 4), t = O.registerUpdateListener(({ editorState: e }) => {
|
|
26
26
|
e.read(() => {
|
|
27
|
-
let e =
|
|
28
|
-
if (
|
|
29
|
-
let t = e.anchor.getNode(),
|
|
30
|
-
if (
|
|
27
|
+
let e = s();
|
|
28
|
+
if (l(e)) {
|
|
29
|
+
let t = e.anchor.getNode(), n = e.anchor.offset;
|
|
30
|
+
if (a(t) && n === t.getTextContentSize() && t.getNextSibling() instanceof p) {
|
|
31
31
|
let e = t.getNextSibling();
|
|
32
32
|
if (e) {
|
|
33
33
|
let t = f(e);
|
|
@@ -35,37 +35,37 @@ var T = ({ onSearch: T, searchResponse: E, parentScrollPosition: D }) => {
|
|
|
35
35
|
return;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
let
|
|
39
|
-
if (
|
|
40
|
-
let e = f(
|
|
38
|
+
let r = d(t, p);
|
|
39
|
+
if (r) {
|
|
40
|
+
let e = f(r);
|
|
41
41
|
j(e === "course"), N(e === "programme");
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
44
|
j(!1), N(!1);
|
|
45
45
|
}
|
|
46
46
|
});
|
|
47
|
-
}),
|
|
48
|
-
let t =
|
|
49
|
-
t.setTextNodeRange(e,
|
|
50
|
-
}, m = (e, t) =>
|
|
51
|
-
let t =
|
|
52
|
-
if (
|
|
47
|
+
}), c = (e) => {
|
|
48
|
+
let t = n(), i = e.getTextContentSize();
|
|
49
|
+
t.setTextNodeRange(e, i, e, i), r(t);
|
|
50
|
+
}, m = (e, t) => a(e) && t === e.getTextContentSize() && e.getNextSibling() instanceof p, g = O.registerCommand(u, (e) => {
|
|
51
|
+
let t = s();
|
|
52
|
+
if (l(t)) {
|
|
53
53
|
let n = e.key, r = t.anchor.getNode(), i = t.anchor.offset, a = d(r, p);
|
|
54
54
|
if (m(r, i) && (a = r.getNextSibling()), !a) return !1;
|
|
55
55
|
let s = a?.getTextContentSize();
|
|
56
56
|
if (a && e.key === "Enter") return e.preventDefault(), O.update(() => {
|
|
57
57
|
if (m(r, i)) {
|
|
58
|
-
let e =
|
|
58
|
+
let e = o("\n");
|
|
59
59
|
a.insertBefore(e);
|
|
60
60
|
}
|
|
61
61
|
if (i === s) {
|
|
62
|
-
let e =
|
|
63
|
-
a.insertAfter(e),
|
|
62
|
+
let e = o("\n");
|
|
63
|
+
a.insertAfter(e), c(e);
|
|
64
64
|
}
|
|
65
65
|
}), !0;
|
|
66
66
|
if (a && (n === " " || e.code === "Space")) return e.preventDefault(), O.update(() => {
|
|
67
|
-
let e =
|
|
68
|
-
m(r, i) && (a.insertBefore(e),
|
|
67
|
+
let e = o(" ");
|
|
68
|
+
m(r, i) && (a.insertBefore(e), c(e)), i === s && (a.insertAfter(e), c(e));
|
|
69
69
|
}), !0;
|
|
70
70
|
if (a && (n === "Backspace" || n === "Delete")) return e.preventDefault(), O.update(() => {
|
|
71
71
|
O.dispatchCommand(h, void 0);
|
|
@@ -73,9 +73,9 @@ var T = ({ onSearch: T, searchResponse: E, parentScrollPosition: D }) => {
|
|
|
73
73
|
if (a && n !== "ArrowLeft" && n !== "ArrowRight" && n !== "ArrowUp" && n !== "ArrowDown" && n !== "Home" && n !== "End" && !(e.ctrlKey && (n.toLowerCase() === "z" || n.toLowerCase() === "y")) && !(e.ctrlKey && n.toLowerCase() === "c")) return e.preventDefault(), !0;
|
|
74
74
|
}
|
|
75
75
|
return !1;
|
|
76
|
-
}, 4), _ = O.registerCommand(
|
|
77
|
-
let t =
|
|
78
|
-
if (
|
|
76
|
+
}, 4), _ = O.registerCommand(i, (e) => {
|
|
77
|
+
let t = s();
|
|
78
|
+
if (l(t)) {
|
|
79
79
|
let n = d(t.anchor.getNode(), p);
|
|
80
80
|
if (n) {
|
|
81
81
|
e.preventDefault();
|
|
@@ -92,7 +92,7 @@ var T = ({ onSearch: T, searchResponse: E, parentScrollPosition: D }) => {
|
|
|
92
92
|
let W = () => {
|
|
93
93
|
U();
|
|
94
94
|
};
|
|
95
|
-
return b(() =>
|
|
95
|
+
return b(() => c(O.registerCommand(u, (e) => e.key === "Escape" && V.current ? (e.preventDefault(), U(), !0) : !1, 1), O.registerRootListener((e, t) => {
|
|
96
96
|
t && t.removeEventListener("scroll", W), e && e.addEventListener("scroll", W);
|
|
97
97
|
})), [O]), b(() => {
|
|
98
98
|
L && U();
|
package/dist/components/RteEditor/Plugins/CourseCataloguePlugin/CourseCataloguePlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CourseCataloguePlugin.js","names":[],"sources":["../../../../../src/components/RteEditor/Plugins/CourseCataloguePlugin/CourseCataloguePlugin.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\r\nimport { clsx } from 'clsx';\r\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\r\nimport {\r\n $createRangeSelection,\r\n $createTextNode,\r\n $getSelection,\r\n $isRangeSelection,\r\n $isTextNode,\r\n $setSelection,\r\n COMMAND_PRIORITY_CRITICAL,\r\n COMMAND_PRIORITY_LOW,\r\n COPY_COMMAND,\r\n KEY_DOWN_COMMAND,\r\n mergeRegister,\r\n} from 'lexical';\r\nimport { $getNearestNodeOfType } from '@lexical/utils';\r\n\r\nimport type { RefObject } from 'react';\r\nimport type { LexicalNode, TextNode } from 'lexical';\r\nimport type { SearchResponse } from './AddCatalogueLinkForm';\r\n\r\nimport { AddCatalogueLinkForm } from './AddCatalogueLinkForm';\r\n\r\nimport styles from 'components/RteEditor/RteEditor.module.css';\r\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\r\nimport {\r\n $getLinkTypeFromNode,\r\n CourseCatalogueNode,\r\n INSERT_COURSE_CATALOGUE_LINK,\r\n REMOVE_COURSE_CATALOGUE_LINK,\r\n} from 'components/RteEditor/nodes/CourseCatalogueNode';\r\nimport { useOnClickOutside } from 'components/hooks/useOnClickOutside';\r\n\r\ninterface CourseCataloguePluginProps {\r\n onSearch: (query: string, linkType: 'course' | 'programme') => void;\r\n searchResponse: SearchResponse;\r\n parentScrollPosition: number;\r\n}\r\n\r\nexport const CourseCataloguePlugin = ({\r\n onSearch,\r\n searchResponse,\r\n parentScrollPosition,\r\n}: CourseCataloguePluginProps) => {\r\n const [editor] = useLexicalComposerContext();\r\n const t = useTranslation();\r\n const [courseIsActive, setCourseIsActive] = useState(false);\r\n const [programmeIsActive, setProgrammeIsActive] = useState(false);\r\n const courseButtonRef = useRef<HTMLButtonElement>(null);\r\n const programmeButtonRef = useRef<HTMLButtonElement>(null);\r\n const flyoutRef = useRef<HTMLDivElement>(null);\r\n const [flyoutPosition, setFlyoutPosition] = useState<{ top: number; left: number } | null>(null);\r\n const [type, setType] = useState<'course' | 'programme'>('course');\r\n const isVisibleRef = useRef(flyoutPosition !== null);\r\n\r\n const openFlyout = (type: 'course' | 'programme') => {\r\n setType(type);\r\n const rect =\r\n type === 'course'\r\n ? courseButtonRef.current?.getBoundingClientRect()\r\n : programmeButtonRef.current?.getBoundingClientRect();\r\n if (rect) {\r\n setFlyoutPosition({ top: rect.bottom, left: rect.left });\r\n }\r\n };\r\n\r\n const closeFlyout = () => {\r\n onSearch('', type);\r\n setFlyoutPosition(null);\r\n };\r\n\r\n useEffect(() => {\r\n const removeKeyboardShortcut = editor.registerCommand(\r\n KEY_DOWN_COMMAND,\r\n (event: KeyboardEvent) => {\r\n if (event.ctrlKey && event.shiftKey && event.altKey && event.key === 'C') {\r\n event.preventDefault();\r\n openFlyout('course');\r\n return true;\r\n }\r\n if (event.ctrlKey && event.shiftKey && event.altKey && event.key === 'P') {\r\n event.preventDefault();\r\n openFlyout('programme');\r\n return true;\r\n }\r\n return false;\r\n },\r\n COMMAND_PRIORITY_CRITICAL\r\n );\r\n\r\n const removeStatusListener = editor.registerUpdateListener(({ editorState }) => {\r\n editorState.read(() => {\r\n const selection = $getSelection();\r\n if ($isRangeSelection(selection)) {\r\n const anchorNode = selection.anchor.getNode();\r\n const offset = selection.anchor.offset;\r\n\r\n if (\r\n $isTextNode(anchorNode) &&\r\n offset === anchorNode.getTextContentSize() &&\r\n anchorNode.getNextSibling() instanceof CourseCatalogueNode\r\n ) {\r\n // Cursor staat aan het begin van de link!\r\n const courseCatalogueLink = anchorNode.getNextSibling();\r\n if (courseCatalogueLink) {\r\n const linkType = $getLinkTypeFromNode(courseCatalogueLink);\r\n setCourseIsActive(linkType === 'course');\r\n setProgrammeIsActive(linkType === 'programme');\r\n return;\r\n }\r\n }\r\n\r\n const courseCatalogueLink = $getNearestNodeOfType(anchorNode, CourseCatalogueNode);\r\n if (courseCatalogueLink) {\r\n const linkType = $getLinkTypeFromNode(courseCatalogueLink);\r\n setCourseIsActive(linkType === 'course');\r\n setProgrammeIsActive(linkType === 'programme');\r\n return;\r\n }\r\n setCourseIsActive(false);\r\n setProgrammeIsActive(false);\r\n }\r\n });\r\n });\r\n\r\n const moveToEndOfWhiteSpace = (whiteSpace: TextNode) => {\r\n const selection = $createRangeSelection();\r\n const endOffset = whiteSpace.getTextContentSize();\r\n selection.setTextNodeRange(whiteSpace, endOffset, whiteSpace, endOffset);\r\n $setSelection(selection);\r\n };\r\n\r\n const isCursorBeforeLink = (anchorNode: LexicalNode, offset: number) =>\r\n $isTextNode(anchorNode) &&\r\n offset === anchorNode.getTextContentSize() &&\r\n anchorNode.getNextSibling() instanceof CourseCatalogueNode;\r\n\r\n const removeUnEditable = editor.registerCommand(\r\n KEY_DOWN_COMMAND,\r\n (event: KeyboardEvent) => {\r\n const selection = $getSelection();\r\n if ($isRangeSelection(selection)) {\r\n const key = event.key;\r\n const anchorNode = selection.anchor.getNode();\r\n const offset = selection.anchor.offset;\r\n let courseCatalogueLink = $getNearestNodeOfType(anchorNode, CourseCatalogueNode);\r\n\r\n // Detect if cursor is right before the link\r\n if (isCursorBeforeLink(anchorNode, offset)) {\r\n courseCatalogueLink = anchorNode.getNextSibling();\r\n }\r\n\r\n if (!courseCatalogueLink) {\r\n return false;\r\n }\r\n\r\n const nodeLength = courseCatalogueLink?.getTextContentSize();\r\n\r\n // Prevent Enter if in the middle of the link, allow only at start or end\r\n if (courseCatalogueLink && event.key === 'Enter') {\r\n event.preventDefault();\r\n editor.update(() => {\r\n if (isCursorBeforeLink(anchorNode, offset)) {\r\n const brNode = $createTextNode('\\n');\r\n courseCatalogueLink.insertBefore(brNode);\r\n }\r\n if (offset === nodeLength) {\r\n const brNode = $createTextNode('\\n');\r\n courseCatalogueLink.insertAfter(brNode);\r\n moveToEndOfWhiteSpace(brNode);\r\n }\r\n });\r\n return true;\r\n }\r\n\r\n // Allow add space before or after the link\r\n if (courseCatalogueLink && (key === ' ' || event.code === 'Space')) {\r\n event.preventDefault();\r\n editor.update(() => {\r\n const spaceToAdd = $createTextNode(' ');\r\n if (isCursorBeforeLink(anchorNode, offset)) {\r\n courseCatalogueLink.insertBefore(spaceToAdd);\r\n moveToEndOfWhiteSpace(spaceToAdd);\r\n }\r\n if (offset === nodeLength) {\r\n courseCatalogueLink.insertAfter(spaceToAdd);\r\n moveToEndOfWhiteSpace(spaceToAdd);\r\n }\r\n });\r\n return true;\r\n }\r\n\r\n // Delete link if selected and Backspace or Del is pressed\r\n if (courseCatalogueLink && (key === 'Backspace' || key === 'Delete')) {\r\n event.preventDefault();\r\n editor.update(\r\n () => {\r\n editor.dispatchCommand(REMOVE_COURSE_CATALOGUE_LINK, undefined);\r\n },\r\n { discrete: true }\r\n );\r\n return true;\r\n }\r\n\r\n // Allow Home, End and Arrow navigation\r\n if (\r\n courseCatalogueLink &&\r\n key !== 'ArrowLeft' &&\r\n key !== 'ArrowRight' &&\r\n key !== 'ArrowUp' &&\r\n key !== 'ArrowDown' &&\r\n key !== 'Home' &&\r\n key !== 'End' &&\r\n !(event.ctrlKey && (key.toLowerCase() === 'z' || key.toLowerCase() === 'y')) &&\r\n !(event.ctrlKey && key.toLowerCase() === 'c')\r\n ) {\r\n event.preventDefault();\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n COMMAND_PRIORITY_CRITICAL\r\n );\r\n\r\n const removeCopy = editor.registerCommand(\r\n COPY_COMMAND,\r\n (event: ClipboardEvent) => {\r\n const selection = $getSelection();\r\n if ($isRangeSelection(selection)) {\r\n const anchorNode = selection.anchor.getNode();\r\n const courseCatalogueLink = $getNearestNodeOfType(anchorNode, CourseCatalogueNode);\r\n if (courseCatalogueLink) {\r\n event.preventDefault();\r\n const domElement = editor.getElementByKey(courseCatalogueLink.getKey());\r\n if (domElement) {\r\n event.clipboardData?.setData('text/html', domElement.outerHTML);\r\n event.clipboardData?.setData('text/plain', courseCatalogueLink.getTextContent());\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW\r\n );\r\n return () => {\r\n removeKeyboardShortcut();\r\n removeStatusListener();\r\n removeUnEditable();\r\n removeCopy();\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [editor]);\r\n\r\n useOnClickOutside(flyoutRef as RefObject<HTMLElement>, () => setFlyoutPosition(null));\r\n\r\n const handleOnScroll = () => {\r\n closeFlyout();\r\n };\r\n\r\n useEffect(() => {\r\n return mergeRegister(\r\n editor.registerCommand(\r\n KEY_DOWN_COMMAND,\r\n (event: KeyboardEvent) => {\r\n if (event.key === 'Escape' && isVisibleRef.current) {\r\n event.preventDefault();\r\n closeFlyout();\r\n return true;\r\n }\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW\r\n ),\r\n\r\n editor.registerRootListener((rootElement, prevRootElement) => {\r\n if (prevRootElement) {\r\n prevRootElement.removeEventListener('scroll', handleOnScroll);\r\n }\r\n\r\n if (rootElement) {\r\n rootElement.addEventListener('scroll', handleOnScroll);\r\n }\r\n })\r\n );\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [editor]);\r\n\r\n useEffect(() => {\r\n if (flyoutPosition) {\r\n closeFlyout();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [parentScrollPosition]);\r\n\r\n return (\r\n <div className={styles['editor__toolbar-button-group']}>\r\n <div className={styles['editor__toolbar-button-flyoutwrapper']}>\r\n <div className={styles['editor__toolbar-button-group--text']}>\r\n <button\r\n onClick={() => openFlyout('course')}\r\n title={t.cataloguelinks.courseTooltip}\r\n className={clsx(\r\n styles['editor__toolbar-button'],\r\n styles['editor__toolbar-button--text'],\r\n courseIsActive && styles[`editor__toolbar-button--active`]\r\n )}\r\n aria-label={t.aria.labels.courselink}\r\n aria-keyshortcuts={t.aria.keyshortcuts.courselink}\r\n type=\"button\"\r\n ref={courseButtonRef}\r\n >\r\n {t.cataloguelinks.courseButtonLabel}\r\n </button>\r\n <button\r\n onClick={() => openFlyout('programme')}\r\n title={t.cataloguelinks.programmeTooltip}\r\n className={clsx(\r\n styles['editor__toolbar-button'],\r\n styles['editor__toolbar-button--text'],\r\n programmeIsActive && styles[`editor__toolbar-button--active`]\r\n )}\r\n aria-label={t.aria.labels.programmelink}\r\n aria-keyshortcuts={t.aria.keyshortcuts.programmelink}\r\n type=\"button\"\r\n ref={programmeButtonRef}\r\n >\r\n {t.cataloguelinks.programmeButtonLabel}\r\n </button>\r\n </div>\r\n {flyoutPosition && (\r\n <div\r\n className={styles['editor__toolbar-flyout-wrapper']}\r\n style={{ top: flyoutPosition.top, left: flyoutPosition.left }}\r\n ref={flyoutRef}\r\n >\r\n <AddCatalogueLinkForm\r\n linkType={type}\r\n onCloseHandler={closeFlyout}\r\n onSearchHandler={onSearch}\r\n searchResponse={searchResponse}\r\n onSelect={(code, label, linkType) => {\r\n editor.dispatchCommand(INSERT_COURSE_CATALOGUE_LINK, {\r\n linkType,\r\n code,\r\n label,\r\n });\r\n closeFlyout();\r\n }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CourseCataloguePlugin.js","names":[],"sources":["../../../../../src/components/RteEditor/Plugins/CourseCataloguePlugin/CourseCataloguePlugin.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\r\nimport { clsx } from 'clsx';\r\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\r\nimport {\r\n $createRangeSelection,\r\n $createTextNode,\r\n $getSelection,\r\n $isRangeSelection,\r\n $isTextNode,\r\n $setSelection,\r\n COMMAND_PRIORITY_CRITICAL,\r\n COMMAND_PRIORITY_LOW,\r\n COPY_COMMAND,\r\n KEY_DOWN_COMMAND,\r\n mergeRegister,\r\n} from 'lexical';\r\nimport { $getNearestNodeOfType } from '@lexical/utils';\r\n\r\nimport type { RefObject } from 'react';\r\nimport type { LexicalNode, TextNode } from 'lexical';\r\nimport type { SearchResponse } from './AddCatalogueLinkForm';\r\n\r\nimport { AddCatalogueLinkForm } from './AddCatalogueLinkForm';\r\n\r\nimport styles from 'components/RteEditor/RteEditor.module.css';\r\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\r\nimport {\r\n $getLinkTypeFromNode,\r\n CourseCatalogueNode,\r\n INSERT_COURSE_CATALOGUE_LINK,\r\n REMOVE_COURSE_CATALOGUE_LINK,\r\n} from 'components/RteEditor/nodes/CourseCatalogueNode';\r\nimport { useOnClickOutside } from 'components/hooks/useOnClickOutside';\r\n\r\ninterface CourseCataloguePluginProps {\r\n onSearch: (query: string, linkType: 'course' | 'programme') => void;\r\n searchResponse: SearchResponse;\r\n parentScrollPosition: number;\r\n}\r\n\r\nexport const CourseCataloguePlugin = ({\r\n onSearch,\r\n searchResponse,\r\n parentScrollPosition,\r\n}: CourseCataloguePluginProps) => {\r\n const [editor] = useLexicalComposerContext();\r\n const t = useTranslation();\r\n const [courseIsActive, setCourseIsActive] = useState(false);\r\n const [programmeIsActive, setProgrammeIsActive] = useState(false);\r\n const courseButtonRef = useRef<HTMLButtonElement>(null);\r\n const programmeButtonRef = useRef<HTMLButtonElement>(null);\r\n const flyoutRef = useRef<HTMLDivElement>(null);\r\n const [flyoutPosition, setFlyoutPosition] = useState<{ top: number; left: number } | null>(null);\r\n const [type, setType] = useState<'course' | 'programme'>('course');\r\n const isVisibleRef = useRef(flyoutPosition !== null);\r\n\r\n const openFlyout = (type: 'course' | 'programme') => {\r\n setType(type);\r\n const rect =\r\n type === 'course'\r\n ? courseButtonRef.current?.getBoundingClientRect()\r\n : programmeButtonRef.current?.getBoundingClientRect();\r\n if (rect) {\r\n setFlyoutPosition({ top: rect.bottom, left: rect.left });\r\n }\r\n };\r\n\r\n const closeFlyout = () => {\r\n onSearch('', type);\r\n setFlyoutPosition(null);\r\n };\r\n\r\n useEffect(() => {\r\n const removeKeyboardShortcut = editor.registerCommand(\r\n KEY_DOWN_COMMAND,\r\n (event: KeyboardEvent) => {\r\n if (event.ctrlKey && event.shiftKey && event.altKey && event.key === 'C') {\r\n event.preventDefault();\r\n openFlyout('course');\r\n return true;\r\n }\r\n if (event.ctrlKey && event.shiftKey && event.altKey && event.key === 'P') {\r\n event.preventDefault();\r\n openFlyout('programme');\r\n return true;\r\n }\r\n return false;\r\n },\r\n COMMAND_PRIORITY_CRITICAL\r\n );\r\n\r\n const removeStatusListener = editor.registerUpdateListener(({ editorState }) => {\r\n editorState.read(() => {\r\n const selection = $getSelection();\r\n if ($isRangeSelection(selection)) {\r\n const anchorNode = selection.anchor.getNode();\r\n const offset = selection.anchor.offset;\r\n\r\n if (\r\n $isTextNode(anchorNode) &&\r\n offset === anchorNode.getTextContentSize() &&\r\n anchorNode.getNextSibling() instanceof CourseCatalogueNode\r\n ) {\r\n // Cursor staat aan het begin van de link!\r\n const courseCatalogueLink = anchorNode.getNextSibling();\r\n if (courseCatalogueLink) {\r\n const linkType = $getLinkTypeFromNode(courseCatalogueLink);\r\n setCourseIsActive(linkType === 'course');\r\n setProgrammeIsActive(linkType === 'programme');\r\n return;\r\n }\r\n }\r\n\r\n const courseCatalogueLink = $getNearestNodeOfType(anchorNode, CourseCatalogueNode);\r\n if (courseCatalogueLink) {\r\n const linkType = $getLinkTypeFromNode(courseCatalogueLink);\r\n setCourseIsActive(linkType === 'course');\r\n setProgrammeIsActive(linkType === 'programme');\r\n return;\r\n }\r\n setCourseIsActive(false);\r\n setProgrammeIsActive(false);\r\n }\r\n });\r\n });\r\n\r\n const moveToEndOfWhiteSpace = (whiteSpace: TextNode) => {\r\n const selection = $createRangeSelection();\r\n const endOffset = whiteSpace.getTextContentSize();\r\n selection.setTextNodeRange(whiteSpace, endOffset, whiteSpace, endOffset);\r\n $setSelection(selection);\r\n };\r\n\r\n const isCursorBeforeLink = (anchorNode: LexicalNode, offset: number) =>\r\n $isTextNode(anchorNode) &&\r\n offset === anchorNode.getTextContentSize() &&\r\n anchorNode.getNextSibling() instanceof CourseCatalogueNode;\r\n\r\n const removeUnEditable = editor.registerCommand(\r\n KEY_DOWN_COMMAND,\r\n (event: KeyboardEvent) => {\r\n const selection = $getSelection();\r\n if ($isRangeSelection(selection)) {\r\n const key = event.key;\r\n const anchorNode = selection.anchor.getNode();\r\n const offset = selection.anchor.offset;\r\n let courseCatalogueLink = $getNearestNodeOfType(anchorNode, CourseCatalogueNode);\r\n\r\n // Detect if cursor is right before the link\r\n if (isCursorBeforeLink(anchorNode, offset)) {\r\n courseCatalogueLink = anchorNode.getNextSibling();\r\n }\r\n\r\n if (!courseCatalogueLink) {\r\n return false;\r\n }\r\n\r\n const nodeLength = courseCatalogueLink?.getTextContentSize();\r\n\r\n // Prevent Enter if in the middle of the link, allow only at start or end\r\n if (courseCatalogueLink && event.key === 'Enter') {\r\n event.preventDefault();\r\n editor.update(() => {\r\n if (isCursorBeforeLink(anchorNode, offset)) {\r\n const brNode = $createTextNode('\\n');\r\n courseCatalogueLink.insertBefore(brNode);\r\n }\r\n if (offset === nodeLength) {\r\n const brNode = $createTextNode('\\n');\r\n courseCatalogueLink.insertAfter(brNode);\r\n moveToEndOfWhiteSpace(brNode);\r\n }\r\n });\r\n return true;\r\n }\r\n\r\n // Allow add space before or after the link\r\n if (courseCatalogueLink && (key === ' ' || event.code === 'Space')) {\r\n event.preventDefault();\r\n editor.update(() => {\r\n const spaceToAdd = $createTextNode(' ');\r\n if (isCursorBeforeLink(anchorNode, offset)) {\r\n courseCatalogueLink.insertBefore(spaceToAdd);\r\n moveToEndOfWhiteSpace(spaceToAdd);\r\n }\r\n if (offset === nodeLength) {\r\n courseCatalogueLink.insertAfter(spaceToAdd);\r\n moveToEndOfWhiteSpace(spaceToAdd);\r\n }\r\n });\r\n return true;\r\n }\r\n\r\n // Delete link if selected and Backspace or Del is pressed\r\n if (courseCatalogueLink && (key === 'Backspace' || key === 'Delete')) {\r\n event.preventDefault();\r\n editor.update(\r\n () => {\r\n editor.dispatchCommand(REMOVE_COURSE_CATALOGUE_LINK, undefined);\r\n },\r\n { discrete: true }\r\n );\r\n return true;\r\n }\r\n\r\n // Allow Home, End and Arrow navigation\r\n if (\r\n courseCatalogueLink &&\r\n key !== 'ArrowLeft' &&\r\n key !== 'ArrowRight' &&\r\n key !== 'ArrowUp' &&\r\n key !== 'ArrowDown' &&\r\n key !== 'Home' &&\r\n key !== 'End' &&\r\n !(event.ctrlKey && (key.toLowerCase() === 'z' || key.toLowerCase() === 'y')) &&\r\n !(event.ctrlKey && key.toLowerCase() === 'c')\r\n ) {\r\n event.preventDefault();\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n COMMAND_PRIORITY_CRITICAL\r\n );\r\n\r\n const removeCopy = editor.registerCommand(\r\n COPY_COMMAND,\r\n (event: ClipboardEvent) => {\r\n const selection = $getSelection();\r\n if ($isRangeSelection(selection)) {\r\n const anchorNode = selection.anchor.getNode();\r\n const courseCatalogueLink = $getNearestNodeOfType(anchorNode, CourseCatalogueNode);\r\n if (courseCatalogueLink) {\r\n event.preventDefault();\r\n const domElement = editor.getElementByKey(courseCatalogueLink.getKey());\r\n if (domElement) {\r\n event.clipboardData?.setData('text/html', domElement.outerHTML);\r\n event.clipboardData?.setData('text/plain', courseCatalogueLink.getTextContent());\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW\r\n );\r\n return () => {\r\n removeKeyboardShortcut();\r\n removeStatusListener();\r\n removeUnEditable();\r\n removeCopy();\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [editor]);\r\n\r\n useOnClickOutside(flyoutRef as RefObject<HTMLElement>, () => setFlyoutPosition(null));\r\n\r\n const handleOnScroll = () => {\r\n closeFlyout();\r\n };\r\n\r\n useEffect(() => {\r\n return mergeRegister(\r\n editor.registerCommand(\r\n KEY_DOWN_COMMAND,\r\n (event: KeyboardEvent) => {\r\n if (event.key === 'Escape' && isVisibleRef.current) {\r\n event.preventDefault();\r\n closeFlyout();\r\n return true;\r\n }\r\n return false;\r\n },\r\n COMMAND_PRIORITY_LOW\r\n ),\r\n\r\n editor.registerRootListener((rootElement, prevRootElement) => {\r\n if (prevRootElement) {\r\n prevRootElement.removeEventListener('scroll', handleOnScroll);\r\n }\r\n\r\n if (rootElement) {\r\n rootElement.addEventListener('scroll', handleOnScroll);\r\n }\r\n })\r\n );\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [editor]);\r\n\r\n useEffect(() => {\r\n if (flyoutPosition) {\r\n closeFlyout();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [parentScrollPosition]);\r\n\r\n return (\r\n <div className={styles['editor__toolbar-button-group']}>\r\n <div className={styles['editor__toolbar-button-flyoutwrapper']}>\r\n <div className={styles['editor__toolbar-button-group--text']}>\r\n <button\r\n onClick={() => openFlyout('course')}\r\n title={t.cataloguelinks.courseTooltip}\r\n className={clsx(\r\n styles['editor__toolbar-button'],\r\n styles['editor__toolbar-button--text'],\r\n courseIsActive && styles[`editor__toolbar-button--active`]\r\n )}\r\n aria-label={t.aria.labels.courselink}\r\n aria-keyshortcuts={t.aria.keyshortcuts.courselink}\r\n type=\"button\"\r\n ref={courseButtonRef}\r\n >\r\n {t.cataloguelinks.courseButtonLabel}\r\n </button>\r\n <button\r\n onClick={() => openFlyout('programme')}\r\n title={t.cataloguelinks.programmeTooltip}\r\n className={clsx(\r\n styles['editor__toolbar-button'],\r\n styles['editor__toolbar-button--text'],\r\n programmeIsActive && styles[`editor__toolbar-button--active`]\r\n )}\r\n aria-label={t.aria.labels.programmelink}\r\n aria-keyshortcuts={t.aria.keyshortcuts.programmelink}\r\n type=\"button\"\r\n ref={programmeButtonRef}\r\n >\r\n {t.cataloguelinks.programmeButtonLabel}\r\n </button>\r\n </div>\r\n {flyoutPosition && (\r\n <div\r\n className={styles['editor__toolbar-flyout-wrapper']}\r\n style={{ top: flyoutPosition.top, left: flyoutPosition.left }}\r\n ref={flyoutRef}\r\n >\r\n <AddCatalogueLinkForm\r\n linkType={type}\r\n onCloseHandler={closeFlyout}\r\n onSearchHandler={onSearch}\r\n searchResponse={searchResponse}\r\n onSelect={(code, label, linkType) => {\r\n editor.dispatchCommand(INSERT_COURSE_CATALOGUE_LINK, {\r\n linkType,\r\n code,\r\n label,\r\n });\r\n closeFlyout();\r\n }}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { o as e } from "../../../../components-
|
|
1
|
+
import { o as e } from "../../../../components-BzxAULjf.js";
|
|
2
2
|
export { e as HistoryPlugin };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { o as e } from "../../../../components-
|
|
1
|
+
import { o as e } from "../../../../components-BzxAULjf.js";
|
|
2
2
|
export { e as HistoryPlugin };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { c as e } from "../../../../../components-
|
|
1
|
+
import { c as e } from "../../../../../components-BzxAULjf.js";
|
|
2
2
|
export { e as AddLinkForm };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../../../../../LinkContextMenu-
|
|
1
|
+
import { t as e } from "../../../../../LinkContextMenu-ePn1iZ_z.js";
|
|
2
2
|
export { e as LinkContextMenu };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { s as e } from "../../../../components-
|
|
1
|
+
import { s as e } from "../../../../components-BzxAULjf.js";
|
|
2
2
|
export { e as LinkPlugin };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as e, n as t, r as n, t as r } from "../../../../helpers-
|
|
1
|
+
import { i as e, n as t, r as n, t as r } from "../../../../helpers-B1VK8xTF.js";
|
|
2
2
|
export { r as MATCHERS, t as ensureHttps, n as validateUrl, e as validateUrlWithProtocol };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { s as e } from "../../../../components-
|
|
1
|
+
import { s as e } from "../../../../components-BzxAULjf.js";
|
|
2
2
|
export { e as LinkPlugin };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as e } from "../../../../clsx-BD2qMUU1.js";
|
|
2
2
|
import { Icon as t } from "../../../Icon/Icon.js";
|
|
3
3
|
import { t as n } from "../../../../LexicalComposerContext.prod-Ca-YN_fj.js";
|
|
4
|
-
import {
|
|
5
|
-
import { s } from "../../../../LexicalUtils.prod-
|
|
6
|
-
import { a as c,
|
|
4
|
+
import { g as r, ot as i, v as a, zn as o } from "../../../../Lexical.prod-CqPLSi0R.js";
|
|
5
|
+
import { n as s } from "../../../../LexicalUtils.prod-BqcriFWV.js";
|
|
6
|
+
import { a as c, c as l, i as u, l as d, n as f, o as p, t as m } from "../../../../LexicalList.prod-eYlcb5Ao.js";
|
|
7
7
|
import { t as h } from "../../../../RteEditor.module-BJLUYSpf.js";
|
|
8
8
|
import { useTranslation as g } from "../../hooks/useTranslation.js";
|
|
9
9
|
import { useEffect as _, useState as v } from "react";
|
|
@@ -14,10 +14,10 @@ var b = {
|
|
|
14
14
|
number: "NumberedList"
|
|
15
15
|
}, x = ["bullet", "number"], S = () => {
|
|
16
16
|
let S = g(), [C] = n(), [w, T] = v(null), [E, D] = v(!1), [O, k] = v(!1), A = (e) => {
|
|
17
|
-
e === "number" && w !== "number" ? (C.dispatchCommand(
|
|
17
|
+
e === "number" && w !== "number" ? (C.dispatchCommand(u, void 0), T("number")) : e === "bullet" && w !== "bullet" ? (C.dispatchCommand(f, void 0), T("bullet")) : (C.dispatchCommand(m, void 0), T(null));
|
|
18
18
|
};
|
|
19
19
|
return _(() => {
|
|
20
|
-
let e = C.registerCommand(
|
|
20
|
+
let e = C.registerCommand(o, (e) => e.ctrlKey && e.shiftKey && e.code === "Digit7" ? (e.preventDefault(), O ? C.dispatchCommand(m, void 0) : C.dispatchCommand(u, void 0), !0) : e.ctrlKey && e.shiftKey && e.code === "Digit8" ? (e.preventDefault(), E ? C.dispatchCommand(m, void 0) : C.dispatchCommand(f, void 0), !0) : !1, 4);
|
|
21
21
|
return () => {
|
|
22
22
|
e();
|
|
23
23
|
};
|
|
@@ -26,21 +26,21 @@ var b = {
|
|
|
26
26
|
O,
|
|
27
27
|
E
|
|
28
28
|
]), _(() => {
|
|
29
|
-
let e = C.registerCommand(
|
|
30
|
-
let e =
|
|
31
|
-
if (!
|
|
29
|
+
let e = C.registerCommand(r, (e) => (e.preventDefault(), C.update(() => {
|
|
30
|
+
let e = i();
|
|
31
|
+
if (!a(e)) return;
|
|
32
32
|
let t = e.anchor.getNode(), n = t.getParent();
|
|
33
|
-
if (!
|
|
34
|
-
let
|
|
35
|
-
if (
|
|
36
|
-
let e = p(
|
|
33
|
+
if (!d(n)) return;
|
|
34
|
+
let r = n.getParent();
|
|
35
|
+
if (c(r)) {
|
|
36
|
+
let e = p(c(r) ? r.getListType() : "bullet");
|
|
37
37
|
n.append(e), e.append(t);
|
|
38
38
|
}
|
|
39
39
|
}), !0), 1), t = C.registerUpdateListener(({ editorState: e }) => {
|
|
40
40
|
e.read(() => {
|
|
41
|
-
let e =
|
|
42
|
-
if (
|
|
43
|
-
let t = s(e.anchor.getNode(),
|
|
41
|
+
let e = i();
|
|
42
|
+
if (a(e)) {
|
|
43
|
+
let t = s(e.anchor.getNode(), l);
|
|
44
44
|
if (t) {
|
|
45
45
|
let e = t.getTag();
|
|
46
46
|
D(e === "ul"), k(e === "ol"), e === "ul" && T("bullet"), e === "ol" && T("number");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListPlugin.js","names":[],"sources":["../../../../../src/components/RteEditor/Plugins/ListPlugin/ListPlugin.tsx"],"sourcesContent":["import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport {\n $createListNode,\n $isListItemNode,\n $isListNode,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n ListNode,\n REMOVE_LIST_COMMAND,\n} from '@lexical/list';\nimport { useEffect, useState } from 'react';\nimport { clsx } from 'clsx';\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_LOW,\n KEY_DOWN_COMMAND,\n KEY_TAB_COMMAND,\n} from 'lexical';\nimport { $getNearestNodeOfType } from '@lexical/utils';\n\nimport type { RangeSelection } from 'lexical';\n\nimport { Icon } from 'components/Icon';\nimport styles from 'components/RteEditor/RteEditor.module.css';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\n\ntype ListTypesType = 'bullet' | 'number' | null;\nconst LIST_TYPE_ICONS = {\n bullet: 'BulletList',\n number: 'NumberedList',\n};\n\nconst ListTypes = ['bullet', 'number'];\n\nexport const ListPlugin = () => {\n const t = useTranslation();\n const [editor] = useLexicalComposerContext();\n const [blockType, setBlockType] = useState<ListTypesType>(null);\n const [isUList, setIsUList] = useState<boolean>(false);\n const [isOList, setIsOList] = useState<boolean>(false);\n\n const formatList = (listType: ListTypesType): void => {\n if (listType === 'number' && blockType !== 'number') {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n setBlockType('number');\n } else if (listType === 'bullet' && blockType !== 'bullet') {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n setBlockType('bullet');\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n setBlockType(null);\n }\n };\n\n useEffect(() => {\n const removeKeyboardShortcut = editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event: KeyboardEvent) => {\n if (event.ctrlKey && event.shiftKey && event.code === 'Digit7') {\n event.preventDefault();\n if (isOList) {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n }\n return true;\n }\n if (event.ctrlKey && event.shiftKey && event.code === 'Digit8') {\n event.preventDefault();\n if (isUList) {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n }\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n );\n\n return () => {\n removeKeyboardShortcut();\n };\n }, [editor, isOList, isUList]);\n\n useEffect(() => {\n const removeTabCommand = editor.registerCommand(\n KEY_TAB_COMMAND,\n (event) => {\n event.preventDefault();\n editor.update(() => {\n const selection = $getSelection() as RangeSelection;\n if (!$isRangeSelection(selection)) {\n return;\n }\n\n const currentNode = selection.anchor.getNode();\n const parent = currentNode.getParent();\n if (!$isListItemNode(parent)) {\n return;\n }\n\n const listParent = parent.getParent();\n if ($isListNode(listParent)) {\n const newList = $createListNode($isListNode(listParent) ? listParent.getListType() : 'bullet');\n parent.append(newList);\n newList.append(currentNode);\n }\n });\n return true;\n },\n COMMAND_PRIORITY_LOW\n );\n\n const removeStatusListener = editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n const listNode = $getNearestNodeOfType(anchorNode, ListNode);\n if (listNode) {\n const tag = listNode.getTag();\n setIsUList(tag === 'ul');\n setIsOList(tag === 'ol');\n if (tag === 'ul') {\n setBlockType('bullet');\n }\n if (tag === 'ol') {\n setBlockType('number');\n }\n return;\n }\n setIsUList(false);\n setIsOList(false);\n setBlockType(null);\n }\n return false;\n });\n });\n\n return () => {\n removeStatusListener();\n removeTabCommand();\n };\n }, [editor]);\n\n return (\n <div className={styles['editor__toolbar-button-group']}>\n {ListTypes.map((listType) => (\n <button\n onClick={() => formatList(listType as ListTypesType)}\n key={listType}\n title={t.format[`${listType}Tooltip` as keyof typeof t.format]}\n className={clsx(\n styles['editor__toolbar-button'],\n styles[`editor__toolbar-button--${listType}`],\n listType === 'bullet' && isUList && styles['editor__toolbar-button--active'],\n listType === 'number' && isOList && styles['editor__toolbar-button--active']\n )}\n aria-label={t.aria.labels[listType as keyof typeof t.aria.labels]}\n aria-keyshortcuts={t.aria.keyshortcuts[listType as keyof typeof t.aria.keyshortcuts]}\n type=\"button\"\n >\n <Icon name={LIST_TYPE_ICONS[listType as keyof typeof Icon]} size={24} />\n </button>\n ))}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;AA6BA,IAAM,IAAkB;CACtB,QAAQ;CACR,QAAQ;CACT,EAEK,IAAY,CAAC,UAAU,SAAS,EAEzB,UAAmB;CAC9B,IAAM,IAAI,GAAgB,EACpB,CAAC,KAAU,GAA2B,EACtC,CAAC,GAAW,KAAgB,EAAwB,KAAK,EACzD,CAAC,GAAS,KAAc,EAAkB,GAAM,EAChD,CAAC,GAAS,KAAc,EAAkB,GAAM,EAEhD,KAAc,MAAkC;
|
|
1
|
+
{"version":3,"file":"ListPlugin.js","names":[],"sources":["../../../../../src/components/RteEditor/Plugins/ListPlugin/ListPlugin.tsx"],"sourcesContent":["import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport {\n $createListNode,\n $isListItemNode,\n $isListNode,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n ListNode,\n REMOVE_LIST_COMMAND,\n} from '@lexical/list';\nimport { useEffect, useState } from 'react';\nimport { clsx } from 'clsx';\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_LOW,\n KEY_DOWN_COMMAND,\n KEY_TAB_COMMAND,\n} from 'lexical';\nimport { $getNearestNodeOfType } from '@lexical/utils';\n\nimport type { RangeSelection } from 'lexical';\n\nimport { Icon } from 'components/Icon';\nimport styles from 'components/RteEditor/RteEditor.module.css';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\n\ntype ListTypesType = 'bullet' | 'number' | null;\nconst LIST_TYPE_ICONS = {\n bullet: 'BulletList',\n number: 'NumberedList',\n};\n\nconst ListTypes = ['bullet', 'number'];\n\nexport const ListPlugin = () => {\n const t = useTranslation();\n const [editor] = useLexicalComposerContext();\n const [blockType, setBlockType] = useState<ListTypesType>(null);\n const [isUList, setIsUList] = useState<boolean>(false);\n const [isOList, setIsOList] = useState<boolean>(false);\n\n const formatList = (listType: ListTypesType): void => {\n if (listType === 'number' && blockType !== 'number') {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n setBlockType('number');\n } else if (listType === 'bullet' && blockType !== 'bullet') {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n setBlockType('bullet');\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n setBlockType(null);\n }\n };\n\n useEffect(() => {\n const removeKeyboardShortcut = editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event: KeyboardEvent) => {\n if (event.ctrlKey && event.shiftKey && event.code === 'Digit7') {\n event.preventDefault();\n if (isOList) {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n }\n return true;\n }\n if (event.ctrlKey && event.shiftKey && event.code === 'Digit8') {\n event.preventDefault();\n if (isUList) {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n }\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n );\n\n return () => {\n removeKeyboardShortcut();\n };\n }, [editor, isOList, isUList]);\n\n useEffect(() => {\n const removeTabCommand = editor.registerCommand(\n KEY_TAB_COMMAND,\n (event) => {\n event.preventDefault();\n editor.update(() => {\n const selection = $getSelection() as RangeSelection;\n if (!$isRangeSelection(selection)) {\n return;\n }\n\n const currentNode = selection.anchor.getNode();\n const parent = currentNode.getParent();\n if (!$isListItemNode(parent)) {\n return;\n }\n\n const listParent = parent.getParent();\n if ($isListNode(listParent)) {\n const newList = $createListNode($isListNode(listParent) ? listParent.getListType() : 'bullet');\n parent.append(newList);\n newList.append(currentNode);\n }\n });\n return true;\n },\n COMMAND_PRIORITY_LOW\n );\n\n const removeStatusListener = editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n const listNode = $getNearestNodeOfType(anchorNode, ListNode);\n if (listNode) {\n const tag = listNode.getTag();\n setIsUList(tag === 'ul');\n setIsOList(tag === 'ol');\n if (tag === 'ul') {\n setBlockType('bullet');\n }\n if (tag === 'ol') {\n setBlockType('number');\n }\n return;\n }\n setIsUList(false);\n setIsOList(false);\n setBlockType(null);\n }\n return false;\n });\n });\n\n return () => {\n removeStatusListener();\n removeTabCommand();\n };\n }, [editor]);\n\n return (\n <div className={styles['editor__toolbar-button-group']}>\n {ListTypes.map((listType) => (\n <button\n onClick={() => formatList(listType as ListTypesType)}\n key={listType}\n title={t.format[`${listType}Tooltip` as keyof typeof t.format]}\n className={clsx(\n styles['editor__toolbar-button'],\n styles[`editor__toolbar-button--${listType}`],\n listType === 'bullet' && isUList && styles['editor__toolbar-button--active'],\n listType === 'number' && isOList && styles['editor__toolbar-button--active']\n )}\n aria-label={t.aria.labels[listType as keyof typeof t.aria.labels]}\n aria-keyshortcuts={t.aria.keyshortcuts[listType as keyof typeof t.aria.keyshortcuts]}\n type=\"button\"\n >\n <Icon name={LIST_TYPE_ICONS[listType as keyof typeof Icon]} size={24} />\n </button>\n ))}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../../../../PasteHandlerPlugin-
|
|
1
|
+
import { t as e } from "../../../../PasteHandlerPlugin-BNp8ST0q.js";
|
|
2
2
|
export { e as PasteHandlerPlugin };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../../../../PasteHandlerPlugin-
|
|
1
|
+
import { t as e } from "../../../../PasteHandlerPlugin-BNp8ST0q.js";
|
|
2
2
|
export { e as PasteHandlerPlugin };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../../../../TableCellResizerPlugin-
|
|
1
|
+
import { t as e } from "../../../../TableCellResizerPlugin-Bc5y-Qbx.js";
|
|
2
2
|
export { e as TableCellResizerPlugin };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../../../../TableCellResizerPlugin-
|
|
1
|
+
import { t as e } from "../../../../TableCellResizerPlugin-Bc5y-Qbx.js";
|
|
2
2
|
export { e as TableCellResizerPlugin };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as e } from "../../../../components-
|
|
1
|
+
import { a as e } from "../../../../components-BzxAULjf.js";
|
|
2
2
|
export { e as AddTableForm };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as e } from "../../../../components-
|
|
1
|
+
import { i as e } from "../../../../components-BzxAULjf.js";
|
|
2
2
|
export { e as TablePlugin };
|