@uva-glass/component-library 3.55.3 → 3.55.5
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-BpnBHYIx.js → Accordion-DvblEUVu.js} +16 -17
- package/dist/{Accordion-BpnBHYIx.js.map → Accordion-DvblEUVu.js.map} +1 -1
- package/dist/{AddCatalogueLinkForm-Cy6fPNvN.js → AddCatalogueLinkForm-rph4K9P0.js} +24 -25
- package/dist/{AddCatalogueLinkForm-Cy6fPNvN.js.map → AddCatalogueLinkForm-rph4K9P0.js.map} +1 -1
- package/dist/{CheckboxButtonBar-CalU0IYK.js → CheckboxButtonBar-5UMIFMKH.js} +2 -2
- package/dist/{CheckboxButtonBar-CalU0IYK.js.map → CheckboxButtonBar-5UMIFMKH.js.map} +1 -1
- package/dist/{ControlsButton-zemVxTlg.js → ControlsButton-B1XRpMUM.js} +15 -16
- package/dist/{ControlsButton-zemVxTlg.js.map → ControlsButton-B1XRpMUM.js.map} +1 -1
- package/dist/{Drawer-Ggofac6y.js → Drawer-e7UFHVg9.js} +29 -30
- package/dist/{Drawer-Ggofac6y.js.map → Drawer-e7UFHVg9.js.map} +1 -1
- package/dist/{FieldHint-D0HtbTnt.js → FieldHint-fxnEOsVZ.js} +2 -2
- package/dist/{FieldHint-D0HtbTnt.js.map → FieldHint-fxnEOsVZ.js.map} +1 -1
- package/dist/Fieldset-0LFsZ3Mz.js +22 -0
- package/dist/{Fieldset-CoNu_Owa.js.map → Fieldset-0LFsZ3Mz.js.map} +1 -1
- package/dist/{Lexical.prod-DIglXatJ.js → Lexical.prod-sbwgNRjw.js} +575 -568
- package/dist/Lexical.prod-sbwgNRjw.js.map +1 -0
- package/dist/{LexicalClipboard.prod-Bnzu0sh_.js → LexicalClipboard.prod-DdImsyd1.js} +82 -82
- package/dist/{LexicalClipboard.prod-Bnzu0sh_.js.map → LexicalClipboard.prod-DdImsyd1.js.map} +1 -1
- package/dist/{LexicalExtension.prod-COPHoPpX.js → LexicalExtension.prod-jTSDl1mh.js} +208 -198
- package/dist/LexicalExtension.prod-jTSDl1mh.js.map +1 -0
- package/dist/{LexicalLink.prod-Bf9JUdMv.js → LexicalLink.prod-BKLNLyu8.js} +155 -149
- package/dist/LexicalLink.prod-BKLNLyu8.js.map +1 -0
- package/dist/{LexicalList.prod-DRz8vsM9.js → LexicalList.prod-DEtc4lSr.js} +222 -222
- package/dist/{LexicalList.prod-DRz8vsM9.js.map → LexicalList.prod-DEtc4lSr.js.map} +1 -1
- package/dist/{LexicalTable.prod-D16GW-aZ.js → LexicalTable.prod-CpIPDW6z.js} +436 -428
- package/dist/LexicalTable.prod-CpIPDW6z.js.map +1 -0
- package/dist/LexicalUtils.prod-DjjGkphN.js +360 -0
- package/dist/LexicalUtils.prod-DjjGkphN.js.map +1 -0
- package/dist/{LinkContextMenu-m_CGQEiX.js → LinkContextMenu-CTkNPiIW.js} +2 -2
- package/dist/{LinkContextMenu-m_CGQEiX.js.map → LinkContextMenu-CTkNPiIW.js.map} +1 -1
- package/dist/{ModalDialog-HUkDdAJ-.js → ModalDialog-N50NGnd4.js} +2 -2
- package/dist/{ModalDialog-HUkDdAJ-.js.map → ModalDialog-N50NGnd4.js.map} +1 -1
- package/dist/{PageOverlay-D_wG2oie.js → PageOverlay-S4xsqJha.js} +2 -2
- package/dist/{PageOverlay-D_wG2oie.js.map → PageOverlay-S4xsqJha.js.map} +1 -1
- package/dist/{PasteHandlerPlugin-DjD1wryY.js → PasteHandlerPlugin-YpQruA-w.js} +4 -4
- package/dist/{PasteHandlerPlugin-DjD1wryY.js.map → PasteHandlerPlugin-YpQruA-w.js.map} +1 -1
- package/dist/{RteEditor.module-Jk80F1FA.js → RteEditor.module-BJLUYSpf.js} +9 -10
- package/dist/{RteEditor.module-Jk80F1FA.js.map → RteEditor.module-BJLUYSpf.js.map} +1 -1
- package/dist/{Sortable.module-BTUOSbOU.js → Sortable.module-8SoaHfuE.js} +6 -7
- package/dist/{Sortable.module-BTUOSbOU.js.map → Sortable.module-8SoaHfuE.js.map} +1 -1
- package/dist/{SortableProvider-Dc7hwkb5.js → SortableProvider-8HYiBXJS.js} +2 -2
- package/dist/{SortableProvider-Dc7hwkb5.js.map → SortableProvider-8HYiBXJS.js.map} +1 -1
- package/dist/Spinner-BpElTDIu.js +30 -0
- package/dist/{Spinner-D8tWqg9j.js.map → Spinner-BpElTDIu.js.map} +1 -1
- package/dist/{TableCellResizerPlugin-CgYsYsuY.js → TableCellResizerPlugin-Ceof6StD.js} +17 -17
- package/dist/{TableCellResizerPlugin-CgYsYsuY.js.map → TableCellResizerPlugin-Ceof6StD.js.map} +1 -1
- package/dist/{TextArea-DqKIpOfT.js → TextArea-CuASC9bX.js} +16 -17
- package/dist/{TextArea-DqKIpOfT.js.map → TextArea-CuASC9bX.js.map} +1 -1
- package/dist/{Tooltip-BzB3jznk.js → Tooltip-D27p9kh4.js} +13 -14
- package/dist/{Tooltip-BzB3jznk.js.map → Tooltip-D27p9kh4.js.map} +1 -1
- package/dist/{chunk-SZQXB3JV-D0XG4Tlp.js → chunk-SZQXB3JV-KiB8lSa9.js} +5 -5
- package/dist/{chunk-SZQXB3JV-D0XG4Tlp.js.map → chunk-SZQXB3JV-KiB8lSa9.js.map} +1 -1
- package/dist/{client-UU-mS47K.js → client-CHQ7u_QI.js} +9 -9
- package/dist/{client-UU-mS47K.js.map → client-CHQ7u_QI.js.map} +1 -1
- package/dist/components/Accordion/Accordion.js +1 -1
- package/dist/components/Accordion/Accordion.stories.js +1 -1
- package/dist/components/Accordion/Accordion.test.js +4 -7
- package/dist/components/Accordion/Accordion.test.js.map +1 -1
- package/dist/components/Accordion/index.js +1 -1
- package/dist/components/AccordionCard/AccordionCard.test.js +3 -6
- package/dist/components/AccordionCard/AccordionCard.test.js.map +1 -1
- package/dist/components/ActionList/ActionList.test.js +3 -6
- package/dist/components/ActionList/ActionList.test.js.map +1 -1
- package/dist/components/AppStatusBar/AppStatusBar.test.js +2 -5
- package/dist/components/AppStatusBar/AppStatusBar.test.js.map +1 -1
- package/dist/components/Attention/Attention.test.js +2 -5
- package/dist/components/Attention/Attention.test.js.map +1 -1
- package/dist/components/Backdrop/Backdrop.test.js +2 -5
- package/dist/components/Backdrop/Backdrop.test.js.map +1 -1
- package/dist/components/Buttons/Button.stories.js +1 -1
- package/dist/components/Buttons/Button.test.js +2 -5
- package/dist/components/Buttons/Button.test.js.map +1 -1
- package/dist/components/Buttons/LinkButton.stories.js +1 -1
- package/dist/components/Buttons/LinkButton.test.js +2 -5
- package/dist/components/Buttons/LinkButton.test.js.map +1 -1
- package/dist/components/Buttons/MenuButton.stories.js +1 -1
- package/dist/components/Buttons/MenuButton.test.js +2 -5
- package/dist/components/Buttons/MenuButton.test.js.map +1 -1
- package/dist/components/Card/Card.test.js +2 -5
- package/dist/components/Card/Card.test.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.stories.js +1 -1
- package/dist/components/Checkbox/Checkbox.test.js +3 -6
- package/dist/components/Checkbox/Checkbox.test.js.map +1 -1
- package/dist/components/CheckboxButtonBar/CheckboxButtonBar.js +1 -1
- package/dist/components/CheckboxButtonBar/CheckboxButtonBar.stories.js +2 -2
- package/dist/components/CheckboxButtonBar/CheckboxButtonBar.test.js +3 -6
- package/dist/components/CheckboxButtonBar/CheckboxButtonBar.test.js.map +1 -1
- package/dist/components/CheckboxButtonBar/index.js +1 -1
- package/dist/components/CheckboxTree/CheckboxTree.js +1 -2
- package/dist/components/CheckboxTree/CheckboxTree.stories.js +3 -4
- package/dist/components/CheckboxTree/CheckboxTree.stories.js.map +1 -1
- package/dist/components/CheckboxTree/index.js +1 -2
- package/dist/components/Chip/Chip.stories.js +1 -1
- package/dist/components/ControlsButton/ControlsButton.js +1 -1
- package/dist/components/ControlsButton/ControlsButton.stories.js +2 -2
- package/dist/components/ControlsButton/index.js +1 -1
- package/dist/components/Drawer/Drawer.js +1 -1
- package/dist/components/Drawer/Drawer.stories.js +2 -2
- package/dist/components/Drawer/index.js +1 -1
- package/dist/components/FeedbackBar/FeedbackBar.test.js +2 -5
- package/dist/components/FeedbackBar/FeedbackBar.test.js.map +1 -1
- package/dist/components/FieldHint/FieldHint.js +1 -1
- package/dist/components/FieldHint/FieldHint.stories.js +1 -1
- package/dist/components/FieldHint/index.js +1 -1
- package/dist/components/Fieldset/Fieldset.js +1 -1
- package/dist/components/Fieldset/Fieldset.stories.js +1 -1
- package/dist/components/Fieldset/index.js +1 -1
- package/dist/components/FormInput/FormInput.js +1 -2
- package/dist/components/FormInput/FormInput.stories.js +2 -3
- package/dist/components/FormInput/FormInput.stories.js.map +1 -1
- package/dist/components/FormInput/index.js +1 -2
- package/dist/components/IconButton/IconButton.stories.js +6 -7
- package/dist/components/IconButton/IconButton.stories.js.map +1 -1
- package/dist/components/InputField/InputField.stories.js +1 -3
- package/dist/components/InputField/InputField.stories.js.map +1 -1
- package/dist/components/Label/Label.test.js +2 -5
- package/dist/components/Label/Label.test.js.map +1 -1
- package/dist/components/MetaDataBar/MetaDataBar.test.js +1 -4
- package/dist/components/MetaDataBar/MetaDataBar.test.js.map +1 -1
- package/dist/components/ModalDialog/ModalDialog.js +1 -1
- package/dist/components/ModalDialog/ModalDialog.stories.js +2 -2
- package/dist/components/ModalDialog/index.js +1 -1
- package/dist/components/MultiSelect/MultiSelect.js +1 -2
- package/dist/components/MultiSelect/MultiSelect.stories.js +2 -3
- package/dist/components/MultiSelect/MultiSelect.stories.js.map +1 -1
- package/dist/components/MultiSelect/components/MultiSelectHeader.js +1 -2
- package/dist/components/MultiSelect/index.js +1 -2
- package/dist/components/MultiSelectBox/MultiSelectBox.stories.js +1 -1
- package/dist/components/MultiSelectBox/MultiSelectBox.test.js +2 -5
- package/dist/components/MultiSelectBox/MultiSelectBox.test.js.map +1 -1
- package/dist/components/Notification/Notification.stories.js +1 -1
- package/dist/components/Notification/Notification.test.js +2 -5
- package/dist/components/Notification/Notification.test.js.map +1 -1
- package/dist/components/OverlayCloseButton/OverlayCloseButton.stories.js +6 -7
- package/dist/components/OverlayCloseButton/OverlayCloseButton.stories.js.map +1 -1
- package/dist/components/PageOverlay/PageOverlay.js +1 -1
- package/dist/components/PageOverlay/PageOverlay.stories.js +1 -1
- package/dist/components/PageOverlay/index.js +1 -1
- package/dist/components/PeriodSelector/PeriodSelector.js +1 -2
- package/dist/components/PeriodSelector/PeriodSelector.stories.js +2 -3
- package/dist/components/PeriodSelector/PeriodSelector.stories.js.map +1 -1
- package/dist/components/PeriodSelector/index.js +1 -2
- package/dist/components/ProgrammeCard/ProgrammeCard.stories.js +0 -2
- package/dist/components/ProgrammeCard/ProgrammeCard.stories.js.map +1 -1
- package/dist/components/RadioGroup/RadioGroup.stories.js +1 -1
- package/dist/components/RadioGroup/Radiogroup.test.js +2 -5
- package/dist/components/RadioGroup/Radiogroup.test.js.map +1 -1
- package/dist/components/RadioTabSelector/RadioTabSelector.js +1 -2
- package/dist/components/RadioTabSelector/RadioTabSelector.stories.js +2 -3
- package/dist/components/RadioTabSelector/RadioTabSelector.stories.js.map +1 -1
- package/dist/components/RadioTabSelector/index.js +1 -2
- package/dist/components/RteEditor/EditorHeader/EditorHeader.js +1 -2
- package/dist/components/RteEditor/EditorHeader/index.js +1 -2
- package/dist/components/RteEditor/Plugins/BlockFormatPlugin/BlockFormatPlugin.js +2 -2
- package/dist/components/RteEditor/Plugins/CourseCataloguePlugin/AddCatalogueLinkForm/AddCatalogueLinkForm.js +1 -1
- package/dist/components/RteEditor/Plugins/CourseCataloguePlugin/AddCatalogueLinkForm/index.js +1 -1
- package/dist/components/RteEditor/Plugins/CourseCataloguePlugin/CourseCataloguePlugin.js +30 -30
- package/dist/components/RteEditor/Plugins/HistoryPlugin/HistoryPlugin.js +1 -2
- package/dist/components/RteEditor/Plugins/HistoryPlugin/index.js +1 -2
- package/dist/components/RteEditor/Plugins/LinkPlugin/AddLinkForm/AddLinkFrom.js +1 -2
- package/dist/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js +1 -1
- package/dist/components/RteEditor/Plugins/LinkPlugin/LinkPlugin.js +1 -2
- package/dist/components/RteEditor/Plugins/LinkPlugin/helpers.js +1 -1
- package/dist/components/RteEditor/Plugins/LinkPlugin/index.js +1 -2
- package/dist/components/RteEditor/Plugins/ListPlugin/ListPlugin.js +6 -6
- 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 -2
- package/dist/components/RteEditor/Plugins/TablePlugin/TablePlugin.js +1 -2
- package/dist/components/RteEditor/Plugins/TablePlugin/helpers.js +16 -16
- package/dist/components/RteEditor/Plugins/TablePlugin/index.js +1 -2
- package/dist/components/RteEditor/Plugins/ToolbarPlugin/ToolbarPlugin.js +1 -2
- package/dist/components/RteEditor/Plugins/ToolbarPlugin/index.js +1 -2
- package/dist/components/RteEditor/Plugins/index.js +3 -3
- package/dist/components/RteEditor/RteEditor.js +1 -2
- package/dist/components/RteEditor/RteEditor.stories.js +1 -2
- package/dist/components/RteEditor/RteEditor.stories.js.map +1 -1
- package/dist/components/RteEditor/UvaTheme/UvaTheme.js +1 -1
- package/dist/components/RteEditor/helpers.js +5 -5
- package/dist/components/RteEditor/index.js +1 -2
- package/dist/components/RteEditor/nodes/CourseCatalogueNode/CourseCatalogueNode.js +14 -14
- package/dist/components/RteEditor/nodes/TableWrapperNode/TableWrapperNode.js +19 -19
- package/dist/components/SelectListbox/SelectListBox.stories.js +1 -1
- package/dist/components/Sortable/Sortable.js +1 -1
- package/dist/components/Sortable/Sortable.stories.js +1 -1
- package/dist/components/Sortable/SortableProvider.js +1 -1
- package/dist/components/Sortable/components/SortableContainer.js +1 -1
- package/dist/components/Sortable/components/SortableHandle.js +1 -1
- package/dist/components/Sortable/components/SortableItem.js +2 -2
- package/dist/components/Spinner/Spinner.js +1 -1
- package/dist/components/Spinner/Spinner.stories.js +1 -1
- package/dist/components/Spinner/index.js +1 -1
- package/dist/components/StatusBadge/StatusBadge.test.js +2 -5
- package/dist/components/StatusBadge/StatusBadge.test.js.map +1 -1
- package/dist/components/TextArea/TextArea.js +1 -1
- package/dist/components/TextArea/TextArea.stories.js +2 -2
- package/dist/components/TextArea/TextArea.test.js +4 -7
- package/dist/components/TextArea/TextArea.test.js.map +1 -1
- package/dist/components/TextArea/index.js +1 -1
- package/dist/components/ToggleSwitch/ToggleSwitch.stories.js +1 -1
- package/dist/components/Tooltip/Tooltip.js +1 -1
- package/dist/components/Tooltip/Tooltip.stories.js +1 -1
- package/dist/components/Tooltip/index.js +1 -1
- package/dist/components/VarIndicator/VarIndicator.stories.js +1 -1
- package/dist/components/VarIndicator/VarIndicator.test.js +3 -6
- package/dist/components/VarIndicator/VarIndicator.test.js.map +1 -1
- package/dist/components/index.js +12 -13
- package/dist/{components-C4MCdrDH.js → components-DAwjkky5.js} +436 -436
- package/dist/components-DAwjkky5.js.map +1 -0
- package/dist/{dist-2TKCXdYZ.js → dist-BIkFjHck.js} +181 -181
- package/dist/{dist-2TKCXdYZ.js.map → dist-BIkFjHck.js.map} +1 -1
- package/dist/{esm-UNe_gmRA.js → esm-ipAmzhQq.js} +4 -4
- package/dist/{esm-UNe_gmRA.js.map → esm-ipAmzhQq.js.map} +1 -1
- package/dist/{helpers-BBSxTGRl.js → helpers-MNJmfDe_.js} +7 -7
- package/dist/{helpers-BBSxTGRl.js.map → helpers-MNJmfDe_.js.map} +1 -1
- package/dist/index.js +12 -13
- package/dist/{react-18-CRbkdI-3.js → react-18-Dwpebadr.js} +2 -2
- package/dist/{react-18-CRbkdI-3.js.map → react-18-Dwpebadr.js.map} +1 -1
- package/dist/{react.esm-CzIhAqlo.js → react.esm-R7eBXTUI.js} +587 -587
- package/dist/{react.esm-CzIhAqlo.js.map → react.esm-R7eBXTUI.js.map} +1 -1
- package/dist/setupTests.js +1 -2
- package/dist/setupTests.js.map +1 -1
- package/dist/storybook__react.d.js +97 -97
- package/dist/storybook__react.d.js.map +1 -1
- package/dist/{test-DQruvi8i.js → test-Cr_l59hN.js} +12 -10
- package/dist/{test-DQruvi8i.js.map → test-Cr_l59hN.js.map} +1 -1
- package/package.json +27 -27
- package/dist/Fieldset-CoNu_Owa.js +0 -23
- package/dist/Lexical.prod-DIglXatJ.js.map +0 -1
- package/dist/LexicalExtension.prod-COPHoPpX.js.map +0 -1
- package/dist/LexicalLink.prod-Bf9JUdMv.js.map +0 -1
- package/dist/LexicalTable.prod-D16GW-aZ.js.map +0 -1
- package/dist/LexicalUtils.prod-BBTLliac.js +0 -360
- package/dist/LexicalUtils.prod-BBTLliac.js.map +0 -1
- package/dist/Spinner-D8tWqg9j.js +0 -31
- package/dist/components-C4MCdrDH.js.map +0 -1
- /package/dist/assets/favicon/{android-chrome-192x192.png → src/assets/favicon/android-chrome-192x192.png} +0 -0
- /package/dist/assets/favicon/{android-chrome-512x512.png → src/assets/favicon/android-chrome-512x512.png} +0 -0
- /package/dist/assets/favicon/{apple-touch-icon.png → src/assets/favicon/apple-touch-icon.png} +0 -0
- /package/dist/assets/favicon/{favicon-16x16.png → src/assets/favicon/favicon-16x16.png} +0 -0
- /package/dist/assets/favicon/{favicon-32x32.png → src/assets/favicon/favicon-32x32.png} +0 -0
- /package/dist/assets/favicon/{favicon.ico → src/assets/favicon/favicon.ico} +0 -0
- /package/dist/assets/favicon/{favicon.svg → src/assets/favicon/favicon.svg} +0 -0
- /package/dist/assets/favicon/{site.webmanifest → src/assets/favicon/site.webmanifest} +0 -0
- /package/dist/assets/fonts/{SourceSans3-Regular.otf.woff → src/assets/fonts/SourceSans3-Regular.otf.woff} +0 -0
- /package/dist/assets/fonts/{SourceSans3-Regular.otf.woff2 → src/assets/fonts/SourceSans3-Regular.otf.woff2} +0 -0
- /package/dist/assets/fonts/{SourceSans3-Semibold.otf.woff → src/assets/fonts/SourceSans3-Semibold.otf.woff} +0 -0
- /package/dist/assets/fonts/{SourceSans3-Semibold.otf.woff2 → src/assets/fonts/SourceSans3-Semibold.otf.woff2} +0 -0
- /package/dist/assets/{fonts.css → src/css/fonts.css} +0 -0
- /package/dist/assets/{globals.css → src/css/globals.css} +0 -0
- /package/dist/assets/{variables.css → src/css/variables.css} +0 -0
|
@@ -2,10 +2,9 @@ import { t as e } from "./clsx-BD2qMUU1.js";
|
|
|
2
2
|
import { Icon as t } from "./components/Icon/Icon.js";
|
|
3
3
|
import { forwardRef as n, useId as r, useImperativeHandle as i, useState as a } from "react";
|
|
4
4
|
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
5
|
-
import './assets/Accordion.css'
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
accordion__title: l,
|
|
5
|
+
import './assets/Accordion.css';var c = {
|
|
6
|
+
accordion: "_accordion_19w0n_1",
|
|
7
|
+
accordion__title: "_accordion__title_19w0n_6",
|
|
9
8
|
"accordion__title-icon": "_accordion__title-icon_19w0n_21",
|
|
10
9
|
"accordion__title-icon-right": "_accordion__title-icon-right_19w0n_22",
|
|
11
10
|
"accordion__title-icon--margin-0": "_accordion__title-icon--margin-0_19w0n_28",
|
|
@@ -17,10 +16,10 @@ var c = "_accordion_19w0n_1", l = "_accordion__title_19w0n_6", u = "_accordion__
|
|
|
17
16
|
"accordion__title-icon--margin-200": "_accordion__title-icon--margin-200_19w0n_52",
|
|
18
17
|
"accordion__title-icon--expanded": "_accordion__title-icon--expanded_19w0n_60",
|
|
19
18
|
"accordion__title-icon-right--expanded": "_accordion__title-icon-right--expanded_19w0n_61",
|
|
20
|
-
accordion__content:
|
|
19
|
+
accordion__content: "_accordion__content_19w0n_66",
|
|
21
20
|
"accordion__content--expanded": "_accordion__content--expanded_19w0n_70"
|
|
22
|
-
},
|
|
23
|
-
let [m, h] = a(
|
|
21
|
+
}, l = n(({ title: n, content: l, expanded: u = !1, cheveronPlacement: d = "right", cheveronMargin: f = "050" }, p) => {
|
|
22
|
+
let [m, h] = a(u), g = r();
|
|
24
23
|
function _(e) {
|
|
25
24
|
let { code: t } = e;
|
|
26
25
|
(t === "Enter" || t === "Space") && h(!m);
|
|
@@ -34,9 +33,9 @@ var c = "_accordion_19w0n_1", l = "_accordion__title_19w0n_6", u = "_accordion__
|
|
|
34
33
|
closeContent: v,
|
|
35
34
|
openContent: y
|
|
36
35
|
})), /* @__PURE__ */ o("div", { children: /* @__PURE__ */ s("div", {
|
|
37
|
-
className:
|
|
36
|
+
className: c.accordion,
|
|
38
37
|
children: [/* @__PURE__ */ s("div", {
|
|
39
|
-
className:
|
|
38
|
+
className: c.accordion__title,
|
|
40
39
|
id: g,
|
|
41
40
|
role: "button",
|
|
42
41
|
tabIndex: 0,
|
|
@@ -44,26 +43,26 @@ var c = "_accordion_19w0n_1", l = "_accordion__title_19w0n_6", u = "_accordion__
|
|
|
44
43
|
onKeyUp: _,
|
|
45
44
|
"aria-expanded": m,
|
|
46
45
|
children: [
|
|
47
|
-
|
|
48
|
-
className: e(
|
|
46
|
+
d === "left" && /* @__PURE__ */ o(t, {
|
|
47
|
+
className: e(c["accordion__title-icon"], c[`accordion__title-icon--margin-${f}`], { [c["accordion__title-icon--expanded"]]: m }),
|
|
49
48
|
name: "CheveronLeft",
|
|
50
49
|
size: 16
|
|
51
50
|
}),
|
|
52
51
|
n,
|
|
53
|
-
|
|
54
|
-
className: e(
|
|
52
|
+
d === "right" && /* @__PURE__ */ o(t, {
|
|
53
|
+
className: e(c["accordion__title-icon-right"], c[`accordion__title-icon--margin-${f}`], { [c["accordion__title-icon-right--expanded"]]: m }),
|
|
55
54
|
name: "CheveronLeft",
|
|
56
55
|
size: 16
|
|
57
56
|
})
|
|
58
57
|
]
|
|
59
58
|
}), /* @__PURE__ */ o("div", {
|
|
60
59
|
"aria-labelledby": g,
|
|
61
|
-
className: e(
|
|
62
|
-
children:
|
|
60
|
+
className: e(c.accordion__content, { [c["accordion__content--expanded"]]: m }),
|
|
61
|
+
children: l
|
|
63
62
|
})]
|
|
64
63
|
}) });
|
|
65
64
|
});
|
|
66
65
|
//#endregion
|
|
67
|
-
export {
|
|
66
|
+
export { l as t };
|
|
68
67
|
|
|
69
|
-
//# sourceMappingURL=Accordion-
|
|
68
|
+
//# sourceMappingURL=Accordion-DvblEUVu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion-
|
|
1
|
+
{"version":3,"file":"Accordion-DvblEUVu.js","names":[],"sources":["../src/components/Accordion/Accordion.module.css","../src/components/Accordion/Accordion.tsx"],"sourcesContent":[".accordion {\n overflow: hidden;\n position: relative;\n}\n\n.accordion__title {\n align-items: center;\n display: flex;\n gap: 0.5rem;\n}\n\n.accordion__title:hover {\n cursor: pointer;\n text-decoration: underline;\n}\n\n.accordion__title:focus-visible {\n text-decoration: underline;\n}\n\n.accordion__title-icon,\n.accordion__title-icon-right {\n transform: rotate(-90deg);\n transition: transform 300ms ease-in;\n margin-right: 0.25rem;\n}\n\n.accordion__title-icon--margin-0 {\n margin: 0;\n}\n\n.accordion__title-icon--margin-025 {\n margin: 0 0.25rem;\n}\n\n.accordion__title-icon--margin-050 {\n margin: 0 0.5rem;\n}\n\n.accordion__title-icon--margin-075 {\n margin: 0 0.75rem;\n}\n\n.accordion__title-icon--margin-100 {\n margin: 0 1rem;\n}\n\n.accordion__title-icon--margin-150 {\n margin: 0 1.5rem;\n}\n\n.accordion__title-icon--margin-200 {\n margin: 0 2rem;\n}\n\n.accordion__title-icon-right {\n margin-left: auto;\n}\n\n.accordion__title-icon--expanded,\n.accordion__title-icon-right--expanded {\n transform: rotate(90deg);\n transition: transform 300ms ease-out;\n}\n\n.accordion__content {\n display: none;\n}\n\n.accordion__content--expanded {\n display: block;\n}\n","import { clsx } from 'clsx';\nimport { forwardRef, useId, useImperativeHandle, useState } from 'react';\n\nimport type { KeyboardEvent, ReactNode } from 'react';\n\nimport styles from './Accordion.module.css';\n\nimport { Icon } from 'components/Icon';\n\nexport interface AccordionProps {\n /** Clickable title (always visible). */\n title: ReactNode;\n /** Main content (hidden when expanded is false). */\n content: ReactNode;\n /** Indicator if Accordion should be expanded by default.*/\n expanded?: boolean;\n /** Indicator for cheveron icon placement.*/\n cheveronPlacement?: 'left' | 'right';\n /** Indicator for cheveron icon margin. By default '050'. */\n cheveronMargin?: '0' | '025' | '050' | '075' | '100' | '150' | '200';\n}\n\nexport interface AccordionMethods {\n closeContent: () => void;\n openContent: () => void;\n}\n\n/** A controller for accordion display toggling of content with click on a title. */\nexport const Accordion = forwardRef<AccordionMethods, AccordionProps>(\n ({ title, content, expanded = false, cheveronPlacement = 'right', cheveronMargin = '050' }, ref) => {\n const [isExpanded, setIsExpanded] = useState(expanded);\n const accordionId = useId();\n\n function onKeyUp(event: KeyboardEvent<HTMLDivElement>) {\n const { code } = event;\n\n if (code === 'Enter' || code === 'Space') {\n setIsExpanded(!isExpanded);\n }\n }\n\n const closeContent = () => {\n setIsExpanded(false);\n };\n\n const openContent = () => {\n setIsExpanded(true);\n };\n\n useImperativeHandle(ref, () => ({\n closeContent,\n openContent,\n }));\n\n return (\n <div>\n <div className={styles['accordion']}>\n <div\n className={styles['accordion__title']}\n id={accordionId}\n role=\"button\"\n tabIndex={0}\n onClick={() => setIsExpanded(!isExpanded)}\n onKeyUp={onKeyUp}\n aria-expanded={isExpanded}\n >\n {cheveronPlacement === 'left' && (\n <Icon\n className={clsx(\n styles['accordion__title-icon'],\n styles[`accordion__title-icon--margin-${cheveronMargin}`],\n {\n [styles['accordion__title-icon--expanded']]: isExpanded,\n }\n )}\n name=\"CheveronLeft\"\n size={16}\n />\n )}\n\n {title}\n {cheveronPlacement === 'right' && (\n <Icon\n className={clsx(\n styles['accordion__title-icon-right'],\n styles[`accordion__title-icon--margin-${cheveronMargin}`],\n {\n [styles['accordion__title-icon-right--expanded']]: isExpanded,\n }\n )}\n name=\"CheveronLeft\"\n size={16}\n />\n )}\n </div>\n <div\n aria-labelledby={accordionId}\n className={clsx(styles.accordion__content, { [styles['accordion__content--expanded']]: isExpanded })}\n >\n {content}\n </div>\n </div>\n </div>\n );\n }\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;GC4Ba,IAAY,GACtB,EAAE,UAAO,YAAS,cAAW,IAAO,uBAAoB,SAAS,oBAAiB,SAAS,MAAQ;CAClG,IAAM,CAAC,GAAY,KAAiB,EAAS,EAAS,EAChD,IAAc,GAAO;CAE3B,SAAS,EAAQ,GAAsC;EACrD,IAAM,EAAE,YAAS;AAEjB,GAAI,MAAS,WAAW,MAAS,YAC/B,EAAc,CAAC,EAAW;;CAI9B,IAAM,UAAqB;AACzB,IAAc,GAAM;IAGhB,UAAoB;AACxB,IAAc,GAAK;;AAQrB,QALA,EAAoB,UAAY;EAC9B;EACA;EACD,EAAE,EAGD,kBAAC,OAAD,EAAA,UACE,kBAAC,OAAD;EAAK,WAAW,EAAO;YAAvB,CACE,kBAAC,OAAD;GACE,WAAW,EAAO;GAClB,IAAI;GACJ,MAAK;GACL,UAAU;GACV,eAAe,EAAc,CAAC,EAAW;GAChC;GACT,iBAAe;aAPjB;IASG,MAAsB,UACrB,kBAAC,GAAD;KACE,WAAW,EACT,EAAO,0BACP,EAAO,iCAAiC,MACxC,GACG,EAAO,qCAAqC,GAC9C,CACF;KACD,MAAK;KACL,MAAM;KACN,CAAA;IAGH;IACA,MAAsB,WACrB,kBAAC,GAAD;KACE,WAAW,EACT,EAAO,gCACP,EAAO,iCAAiC,MACxC,GACG,EAAO,2CAA2C,GACpD,CACF;KACD,MAAK;KACL,MAAM;KACN,CAAA;IAEA;MACN,kBAAC,OAAD;GACE,mBAAiB;GACjB,WAAW,EAAK,EAAO,oBAAoB,GAAG,EAAO,kCAAkC,GAAY,CAAC;aAEnG;GACG,CAAA,CACF;KACF,CAAA;EAGX"}
|
|
@@ -7,22 +7,21 @@ import { useLanguage as a } from "./components/RteEditor/Providers/LanguageProvi
|
|
|
7
7
|
import { useTranslation as o } from "./components/RteEditor/hooks/useTranslation.js";
|
|
8
8
|
import { useEffect as s, useId as c, useRef as l } from "react";
|
|
9
9
|
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
10
|
-
import './assets/AddCatalogueLinkForm.css'
|
|
11
|
-
|
|
12
|
-
courselinkform: f,
|
|
10
|
+
import './assets/AddCatalogueLinkForm.css';var f = {
|
|
11
|
+
courselinkform: "_courselinkform_16a4f_1",
|
|
13
12
|
"courselinkform__input-field": "_courselinkform__input-field_16a4f_7",
|
|
14
|
-
courselinkform__footer:
|
|
13
|
+
courselinkform__footer: "_courselinkform__footer_16a4f_13",
|
|
15
14
|
"courselinkform__results-wrapper": "_courselinkform__results-wrapper_16a4f_20",
|
|
16
15
|
"courselinkform__results-header": "_courselinkform__results-header_16a4f_24",
|
|
17
|
-
courselinkform__results:
|
|
16
|
+
courselinkform__results: "_courselinkform__results_16a4f_20",
|
|
18
17
|
"courselinkform__result-message": "_courselinkform__result-message_16a4f_41",
|
|
19
18
|
"courselinkform__result-item": "_courselinkform__result-item_16a4f_51"
|
|
20
|
-
},
|
|
19
|
+
}, p = ({ linkType: p, onCloseHandler: m, onSearchHandler: h, searchResponse: g, onSelect: _ }) => {
|
|
21
20
|
let v = o(), y = `search_${c()}`, b = l(null), x = l(null), { currentLanguage: S } = a(), C = (e) => {
|
|
22
21
|
let t = e.target.value;
|
|
23
|
-
|
|
22
|
+
h && h(t, p);
|
|
24
23
|
}, w = () => {
|
|
25
|
-
|
|
24
|
+
m();
|
|
26
25
|
}, T = (e) => {
|
|
27
26
|
e.key === "ArrowDown" && (e.preventDefault(), (x.current?.querySelector("button"))?.focus());
|
|
28
27
|
}, E = (e, t, n, r) => {
|
|
@@ -48,19 +47,19 @@ var f = "_courselinkform_16a4f_1", p = "_courselinkform__footer_16a4f_13", m = "
|
|
|
48
47
|
}
|
|
49
48
|
};
|
|
50
49
|
return s(() => {
|
|
51
|
-
b.current && (
|
|
50
|
+
b.current && (h("", p), b.current.value = "", b.current.focus());
|
|
52
51
|
}, []), /* @__PURE__ */ d("div", {
|
|
53
|
-
className:
|
|
52
|
+
className: f.courselinkform,
|
|
54
53
|
children: [/* @__PURE__ */ d(n, {
|
|
55
54
|
gap: "050",
|
|
56
55
|
children: [
|
|
57
56
|
/* @__PURE__ */ d(r, {
|
|
58
|
-
className:
|
|
57
|
+
className: f["courselinkform__input-field"],
|
|
59
58
|
children: [/* @__PURE__ */ u(t, {
|
|
60
59
|
htmlFor: y,
|
|
61
|
-
children: v.cataloguelinks[
|
|
60
|
+
children: v.cataloguelinks[p === "course" ? "searchCourseFieldLabel" : "searchProgrammeFieldLabel"]
|
|
62
61
|
}), /* @__PURE__ */ u("div", {
|
|
63
|
-
className:
|
|
62
|
+
className: f["linkform__input-url-wrapper"],
|
|
64
63
|
children: /* @__PURE__ */ u(i, {
|
|
65
64
|
id: y,
|
|
66
65
|
placeholder: v.cataloguelinks.searchFieldPlaceholder,
|
|
@@ -72,26 +71,26 @@ var f = "_courselinkform_16a4f_1", p = "_courselinkform__footer_16a4f_13", m = "
|
|
|
72
71
|
})]
|
|
73
72
|
}),
|
|
74
73
|
g && g.state === "pending" && /* @__PURE__ */ u("div", {
|
|
75
|
-
className:
|
|
74
|
+
className: f["courselinkform__result-message"],
|
|
76
75
|
children: v.cataloguelinks.loading
|
|
77
76
|
}),
|
|
78
77
|
g && g.results.length === 0 && g.state === "ready" && /* @__PURE__ */ u("div", {
|
|
79
|
-
className:
|
|
78
|
+
className: f["courselinkform__result-message"],
|
|
80
79
|
children: v.cataloguelinks.noResults
|
|
81
80
|
}),
|
|
82
81
|
g && g.results.length > 0 && /* @__PURE__ */ d("div", {
|
|
83
|
-
className:
|
|
82
|
+
className: f["courselinkform__results-wrapper"],
|
|
84
83
|
children: [/* @__PURE__ */ d("div", {
|
|
85
|
-
className:
|
|
86
|
-
children: [/* @__PURE__ */ u("span", { children: v.cataloguelinks[
|
|
84
|
+
className: f["courselinkform__results-header"],
|
|
85
|
+
children: [/* @__PURE__ */ u("span", { children: v.cataloguelinks[p === "course" ? "resultCourseListCatalogNumber" : "resultProgrammeListCatalogNumber"] }), /* @__PURE__ */ u("span", { children: v.cataloguelinks.resultListName })]
|
|
87
86
|
}), /* @__PURE__ */ u("div", {
|
|
88
|
-
className:
|
|
87
|
+
className: f.courselinkform__results,
|
|
89
88
|
ref: x,
|
|
90
89
|
children: g.results.map(({ id: e, code: t, name: n }) => /* @__PURE__ */ d("button", {
|
|
91
90
|
type: "button",
|
|
92
|
-
className:
|
|
93
|
-
onClick: () => _ && _(t, n[S],
|
|
94
|
-
onKeyDown: (e) => E(e, t, n[S],
|
|
91
|
+
className: f["courselinkform__result-item"],
|
|
92
|
+
onClick: () => _ && _(t, n[S], p),
|
|
93
|
+
onKeyDown: (e) => E(e, t, n[S], p),
|
|
95
94
|
tabIndex: 0,
|
|
96
95
|
"aria-label": `${t} ${n[S]}`,
|
|
97
96
|
children: [/* @__PURE__ */ u("span", { children: t }), /* @__PURE__ */ u("span", { children: n[S] })]
|
|
@@ -100,7 +99,7 @@ var f = "_courselinkform_16a4f_1", p = "_courselinkform__footer_16a4f_13", m = "
|
|
|
100
99
|
})
|
|
101
100
|
]
|
|
102
101
|
}), /* @__PURE__ */ u("div", {
|
|
103
|
-
className:
|
|
102
|
+
className: f.courselinkform__footer,
|
|
104
103
|
children: /* @__PURE__ */ u(e, {
|
|
105
104
|
variant: "secondary",
|
|
106
105
|
onClick: w,
|
|
@@ -112,6 +111,6 @@ var f = "_courselinkform_16a4f_1", p = "_courselinkform__footer_16a4f_13", m = "
|
|
|
112
111
|
});
|
|
113
112
|
};
|
|
114
113
|
//#endregion
|
|
115
|
-
export {
|
|
114
|
+
export { p as t };
|
|
116
115
|
|
|
117
|
-
//# sourceMappingURL=AddCatalogueLinkForm-
|
|
116
|
+
//# sourceMappingURL=AddCatalogueLinkForm-rph4K9P0.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddCatalogueLinkForm-Cy6fPNvN.js","names":[],"sources":["../src/components/RteEditor/Plugins/CourseCataloguePlugin/AddCatalogueLinkForm/AddCatalogueLinkForm.module.css","../src/components/RteEditor/Plugins/CourseCataloguePlugin/AddCatalogueLinkForm/AddCatalogueLinkForm.tsx"],"sourcesContent":[".courselinkform {\n font-family: inherit;\n font-size: inherit;\n width: 30rem;\n}\n\n.courselinkform__input-field {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.courselinkform__footer {\n display: flex;\n gap: 0.5rem;\n justify-content: flex-end;\n margin-top: 1rem;\n}\n\n.courselinkform__results-wrapper {\n position: relative;\n}\n\n.courselinkform__results-header {\n align-items: center;\n display: flex;\n font-size: var(--font-size-text-base);\n gap: 0.5rem;\n padding: 0.5rem;\n text-align: left;\n width: 100%;\n}\n\n.courselinkform__results {\n border: 1px solid var(--color-grey-300);\n border-radius: 0.25rem;\n max-height: 10rem;\n overflow-y: auto;\n}\n\n.courselinkform__result-message {\n align-items: center;\n color: var(--color-grey-600);\n display: flex;\n font-size: var(--font-size-text-non-essential);\n height: 2rem;\n justify-content: flex-start;\n padding: 0 0.5rem;\n}\n\n.courselinkform__result-item {\n align-items: center;\n appearance: none;\n background-color: transparent;\n border: none;\n cursor: pointer;\n display: flex;\n font-family: inherit;\n font-size: var(--font-size-text-base);\n gap: 0.5rem;\n min-height: 2.5rem;\n padding: 0.5rem;\n text-align: left;\n width: 100%;\n}\n\n.courselinkform__results-header span,\n.courselinkform__result-item span {\n line-height: 1.4;\n width: calc(100% - 9rem);\n}\n\n.courselinkform__results-header span:first-child,\n.courselinkform__result-item span:first-child {\n width: 9rem;\n}\n\n.courselinkform__result-item:focus-visible {\n background-color: var(--color-grey-300);\n outline: none;\n}\n\n.courselinkform__result-item:hover,\n.courselinkform__result-item:focus-visible {\n background-color: var(--color-grey-300);\n}\n\n.courselinkform__result-item:not(:last-child) {\n border-bottom: 1px solid var(--color-grey-300);\n}\n","import { useEffect, useId, useRef } from 'react';\r\n\r\nimport type { KeyboardEvent } from 'react';\r\n\r\nimport styles from './AddCatalogueLinkForm.module.css';\r\n\r\nimport { Button } from 'components/Buttons';\r\nimport { FormField } from 'components/FormField';\r\nimport { Label } from 'components/Label';\r\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\r\nimport { InputField } from 'components/InputField';\r\nimport { useLanguage } from 'components/RteEditor/Providers/LanguageProvider';\r\nimport { Repeater } from 'components/Repeater';\r\n\r\ntype SearchResult = {\r\n code: string;\r\n id: string;\r\n name: {\r\n EN: string;\r\n NL: string;\r\n };\r\n programmeType: string;\r\n};\r\n\r\nexport type SearchResponse = {\r\n state: 'idle' | 'pending' | 'ready';\r\n results: SearchResult[];\r\n};\r\n\r\ninterface AddCatalogueLinkFormProps {\r\n linkType: 'course' | 'programme';\r\n onCloseHandler: () => void;\r\n onSearchHandler: (query: string, type: 'course' | 'programme') => void;\r\n searchResponse?: SearchResponse;\r\n onSelect?: (code: string, label: string, type: 'course' | 'programme') => void;\r\n}\r\n\r\nexport const AddCatalogueLinkForm = ({\r\n linkType,\r\n onCloseHandler,\r\n onSearchHandler,\r\n searchResponse,\r\n onSelect,\r\n}: AddCatalogueLinkFormProps) => {\r\n const t = useTranslation();\r\n const searchId = `search_${useId()}`;\r\n const searchFieldRef = useRef<HTMLInputElement>(null);\r\n const resultListRef = useRef<HTMLDivElement>(null);\r\n const { currentLanguage } = useLanguage();\r\n\r\n const handleSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const query = event.target.value;\r\n if (onSearchHandler) {\r\n onSearchHandler(query, linkType);\r\n }\r\n };\r\n\r\n const handleClose = () => {\r\n onCloseHandler();\r\n };\r\n\r\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n const container = resultListRef.current;\r\n const firstFocusable = container?.querySelector<HTMLElement>('button');\r\n firstFocusable?.focus();\r\n }\r\n };\r\n\r\n const onResultKeyDown = (\r\n event: KeyboardEvent<HTMLButtonElement>,\r\n code: string,\r\n name: string,\r\n linkType: 'course' | 'programme'\r\n ) => {\r\n switch (event.key) {\r\n case 'Escape':\r\n event.preventDefault();\r\n event.stopPropagation();\r\n handleClose();\r\n break;\r\n case 'Enter':\r\n event.preventDefault();\r\n onSelect && onSelect(code, name, linkType);\r\n break;\r\n case 'ArrowDown': {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const nextElement = event.currentTarget.nextElementSibling;\r\n (nextElement as HTMLButtonElement)?.focus();\r\n break;\r\n }\r\n case 'ArrowUp': {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const previousElement = event.currentTarget.previousElementSibling;\r\n (previousElement as HTMLButtonElement)?.focus();\r\n break;\r\n }\r\n case 'Tab':\r\n event.preventDefault();\r\n handleClose();\r\n break;\r\n default:\r\n event.preventDefault();\r\n break;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (searchFieldRef.current) {\r\n onSearchHandler('', linkType);\r\n searchFieldRef.current.value = '';\r\n searchFieldRef.current.focus();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n <div className={styles['courselinkform']}>\r\n <Repeater gap=\"050\">\r\n <FormField className={styles['courselinkform__input-field']}>\r\n <Label htmlFor={searchId}>\r\n {t.cataloguelinks[linkType === 'course' ? 'searchCourseFieldLabel' : 'searchProgrammeFieldLabel']}\r\n </Label>\r\n <div className={styles['linkform__input-url-wrapper']}>\r\n <InputField\r\n id={searchId}\r\n placeholder={t.cataloguelinks.searchFieldPlaceholder}\r\n onChange={handleSearch}\r\n onKeyDown={handleKeyDown}\r\n ref={searchFieldRef}\r\n aria-label={t.aria.labels.searchField}\r\n />\r\n </div>\r\n </FormField>\r\n {searchResponse && searchResponse.state === 'pending' && (\r\n <div className={styles['courselinkform__result-message']}>{t.cataloguelinks.loading}</div>\r\n )}\r\n {searchResponse && searchResponse.results.length === 0 && searchResponse.state === 'ready' && (\r\n <div className={styles['courselinkform__result-message']}>{t.cataloguelinks.noResults}</div>\r\n )}\r\n {searchResponse && searchResponse.results.length > 0 && (\r\n <div className={styles['courselinkform__results-wrapper']}>\r\n <div className={styles['courselinkform__results-header']}>\r\n <span>\r\n {\r\n t.cataloguelinks[\r\n linkType === 'course' ? 'resultCourseListCatalogNumber' : 'resultProgrammeListCatalogNumber'\r\n ]\r\n }\r\n </span>\r\n <span>{t.cataloguelinks.resultListName}</span>\r\n </div>\r\n <div className={styles['courselinkform__results']} ref={resultListRef}>\r\n {searchResponse.results.map(({ id, code, name }) => (\r\n <button\r\n key={id}\r\n type=\"button\"\r\n className={styles['courselinkform__result-item']}\r\n onClick={() => onSelect && onSelect(code, name[currentLanguage], linkType)}\r\n onKeyDown={(event) => onResultKeyDown(event, code, name[currentLanguage], linkType)}\r\n tabIndex={0}\r\n aria-label={`${code} ${name[currentLanguage]}`}\r\n >\r\n <span>{code}</span>\r\n <span>{name[currentLanguage]}</span>\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </Repeater>\r\n <div className={styles['courselinkform__footer']}>\r\n <Button variant={'secondary'} onClick={handleClose} aria-label={t.common.cancel} type=\"button\">\r\n {t.common.cancel}\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AddCatalogueLinkForm-rph4K9P0.js","names":[],"sources":["../src/components/RteEditor/Plugins/CourseCataloguePlugin/AddCatalogueLinkForm/AddCatalogueLinkForm.module.css","../src/components/RteEditor/Plugins/CourseCataloguePlugin/AddCatalogueLinkForm/AddCatalogueLinkForm.tsx"],"sourcesContent":[".courselinkform {\n font-family: inherit;\n font-size: inherit;\n width: 30rem;\n}\n\n.courselinkform__input-field {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.courselinkform__footer {\n display: flex;\n gap: 0.5rem;\n justify-content: flex-end;\n margin-top: 1rem;\n}\n\n.courselinkform__results-wrapper {\n position: relative;\n}\n\n.courselinkform__results-header {\n align-items: center;\n display: flex;\n font-size: var(--font-size-text-base);\n gap: 0.5rem;\n padding: 0.5rem;\n text-align: left;\n width: 100%;\n}\n\n.courselinkform__results {\n border: 1px solid var(--color-grey-300);\n border-radius: 0.25rem;\n max-height: 10rem;\n overflow-y: auto;\n}\n\n.courselinkform__result-message {\n align-items: center;\n color: var(--color-grey-600);\n display: flex;\n font-size: var(--font-size-text-non-essential);\n height: 2rem;\n justify-content: flex-start;\n padding: 0 0.5rem;\n}\n\n.courselinkform__result-item {\n align-items: center;\n appearance: none;\n background-color: transparent;\n border: none;\n cursor: pointer;\n display: flex;\n font-family: inherit;\n font-size: var(--font-size-text-base);\n gap: 0.5rem;\n min-height: 2.5rem;\n padding: 0.5rem;\n text-align: left;\n width: 100%;\n}\n\n.courselinkform__results-header span,\n.courselinkform__result-item span {\n line-height: 1.4;\n width: calc(100% - 9rem);\n}\n\n.courselinkform__results-header span:first-child,\n.courselinkform__result-item span:first-child {\n width: 9rem;\n}\n\n.courselinkform__result-item:focus-visible {\n background-color: var(--color-grey-300);\n outline: none;\n}\n\n.courselinkform__result-item:hover,\n.courselinkform__result-item:focus-visible {\n background-color: var(--color-grey-300);\n}\n\n.courselinkform__result-item:not(:last-child) {\n border-bottom: 1px solid var(--color-grey-300);\n}\n","import { useEffect, useId, useRef } from 'react';\r\n\r\nimport type { KeyboardEvent } from 'react';\r\n\r\nimport styles from './AddCatalogueLinkForm.module.css';\r\n\r\nimport { Button } from 'components/Buttons';\r\nimport { FormField } from 'components/FormField';\r\nimport { Label } from 'components/Label';\r\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\r\nimport { InputField } from 'components/InputField';\r\nimport { useLanguage } from 'components/RteEditor/Providers/LanguageProvider';\r\nimport { Repeater } from 'components/Repeater';\r\n\r\ntype SearchResult = {\r\n code: string;\r\n id: string;\r\n name: {\r\n EN: string;\r\n NL: string;\r\n };\r\n programmeType: string;\r\n};\r\n\r\nexport type SearchResponse = {\r\n state: 'idle' | 'pending' | 'ready';\r\n results: SearchResult[];\r\n};\r\n\r\ninterface AddCatalogueLinkFormProps {\r\n linkType: 'course' | 'programme';\r\n onCloseHandler: () => void;\r\n onSearchHandler: (query: string, type: 'course' | 'programme') => void;\r\n searchResponse?: SearchResponse;\r\n onSelect?: (code: string, label: string, type: 'course' | 'programme') => void;\r\n}\r\n\r\nexport const AddCatalogueLinkForm = ({\r\n linkType,\r\n onCloseHandler,\r\n onSearchHandler,\r\n searchResponse,\r\n onSelect,\r\n}: AddCatalogueLinkFormProps) => {\r\n const t = useTranslation();\r\n const searchId = `search_${useId()}`;\r\n const searchFieldRef = useRef<HTMLInputElement>(null);\r\n const resultListRef = useRef<HTMLDivElement>(null);\r\n const { currentLanguage } = useLanguage();\r\n\r\n const handleSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n const query = event.target.value;\r\n if (onSearchHandler) {\r\n onSearchHandler(query, linkType);\r\n }\r\n };\r\n\r\n const handleClose = () => {\r\n onCloseHandler();\r\n };\r\n\r\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n const container = resultListRef.current;\r\n const firstFocusable = container?.querySelector<HTMLElement>('button');\r\n firstFocusable?.focus();\r\n }\r\n };\r\n\r\n const onResultKeyDown = (\r\n event: KeyboardEvent<HTMLButtonElement>,\r\n code: string,\r\n name: string,\r\n linkType: 'course' | 'programme'\r\n ) => {\r\n switch (event.key) {\r\n case 'Escape':\r\n event.preventDefault();\r\n event.stopPropagation();\r\n handleClose();\r\n break;\r\n case 'Enter':\r\n event.preventDefault();\r\n onSelect && onSelect(code, name, linkType);\r\n break;\r\n case 'ArrowDown': {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const nextElement = event.currentTarget.nextElementSibling;\r\n (nextElement as HTMLButtonElement)?.focus();\r\n break;\r\n }\r\n case 'ArrowUp': {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const previousElement = event.currentTarget.previousElementSibling;\r\n (previousElement as HTMLButtonElement)?.focus();\r\n break;\r\n }\r\n case 'Tab':\r\n event.preventDefault();\r\n handleClose();\r\n break;\r\n default:\r\n event.preventDefault();\r\n break;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (searchFieldRef.current) {\r\n onSearchHandler('', linkType);\r\n searchFieldRef.current.value = '';\r\n searchFieldRef.current.focus();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n <div className={styles['courselinkform']}>\r\n <Repeater gap=\"050\">\r\n <FormField className={styles['courselinkform__input-field']}>\r\n <Label htmlFor={searchId}>\r\n {t.cataloguelinks[linkType === 'course' ? 'searchCourseFieldLabel' : 'searchProgrammeFieldLabel']}\r\n </Label>\r\n <div className={styles['linkform__input-url-wrapper']}>\r\n <InputField\r\n id={searchId}\r\n placeholder={t.cataloguelinks.searchFieldPlaceholder}\r\n onChange={handleSearch}\r\n onKeyDown={handleKeyDown}\r\n ref={searchFieldRef}\r\n aria-label={t.aria.labels.searchField}\r\n />\r\n </div>\r\n </FormField>\r\n {searchResponse && searchResponse.state === 'pending' && (\r\n <div className={styles['courselinkform__result-message']}>{t.cataloguelinks.loading}</div>\r\n )}\r\n {searchResponse && searchResponse.results.length === 0 && searchResponse.state === 'ready' && (\r\n <div className={styles['courselinkform__result-message']}>{t.cataloguelinks.noResults}</div>\r\n )}\r\n {searchResponse && searchResponse.results.length > 0 && (\r\n <div className={styles['courselinkform__results-wrapper']}>\r\n <div className={styles['courselinkform__results-header']}>\r\n <span>\r\n {\r\n t.cataloguelinks[\r\n linkType === 'course' ? 'resultCourseListCatalogNumber' : 'resultProgrammeListCatalogNumber'\r\n ]\r\n }\r\n </span>\r\n <span>{t.cataloguelinks.resultListName}</span>\r\n </div>\r\n <div className={styles['courselinkform__results']} ref={resultListRef}>\r\n {searchResponse.results.map(({ id, code, name }) => (\r\n <button\r\n key={id}\r\n type=\"button\"\r\n className={styles['courselinkform__result-item']}\r\n onClick={() => onSelect && onSelect(code, name[currentLanguage], linkType)}\r\n onKeyDown={(event) => onResultKeyDown(event, code, name[currentLanguage], linkType)}\r\n tabIndex={0}\r\n aria-label={`${code} ${name[currentLanguage]}`}\r\n >\r\n <span>{code}</span>\r\n <span>{name[currentLanguage]}</span>\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </Repeater>\r\n <div className={styles['courselinkform__footer']}>\r\n <Button variant={'secondary'} onClick={handleClose} aria-label={t.common.cancel} type=\"button\">\r\n {t.common.cancel}\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as e } from "./clsx-BD2qMUU1.js";
|
|
2
2
|
import { t } from "./Label-o0BcWTUS.js";
|
|
3
3
|
import { t as n } from "./FeedbackBox-Bu7uB9DP.js";
|
|
4
|
-
import { t as r } from "./ControlsButton-
|
|
4
|
+
import { t as r } from "./ControlsButton-B1XRpMUM.js";
|
|
5
5
|
import { useState as i } from "react";
|
|
6
6
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
7
7
|
import './assets/CheckboxButtonBar.css';//#region src/components/CheckboxButtonBar/CheckboxButtonBar.module.css
|
|
@@ -76,4 +76,4 @@ var s = {
|
|
|
76
76
|
//#endregion
|
|
77
77
|
export { c as t };
|
|
78
78
|
|
|
79
|
-
//# sourceMappingURL=CheckboxButtonBar-
|
|
79
|
+
//# sourceMappingURL=CheckboxButtonBar-5UMIFMKH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckboxButtonBar-
|
|
1
|
+
{"version":3,"file":"CheckboxButtonBar-5UMIFMKH.js","names":[],"sources":["../src/components/CheckboxButtonBar/CheckboxButtonBar.module.css","../src/components/CheckboxButtonBar/CheckboxButtonBar.tsx"],"sourcesContent":[".checkbox-button-bar__container {\n display: flex;\n flex-wrap: wrap;\n}\n\n.checkbox-button-bar__container--label-left {\n align-items: baseline;\n flex-direction: row;\n gap: 1rem;\n}\n\n.checkbox-button-bar__container--label-top {\n align-items: flex-start;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.checkbox-button-bar__row-container {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.checkbox-button-bar__row-container--segmented {\n flex-direction: row;\n}\n\n.checkbox-button-bar__row {\n align-items: center;\n background-color: var(--color-uva-white);\n border: 1px solid var(--color-grey-700);\n border-radius: 0.5rem;\n display: flex;\n flex-wrap: nowrap;\n gap: 0.25rem;\n padding: 0.25rem;\n}\n\n.checkbox-button-bar__row--not-valid {\n border-color: var(--color-red-600);\n}\n\n.checkbox-button-bar__sub-text {\n color: var(--color-grey-700);\n font-size: var(--font-size-text-non-essential);\n}\n","import { useState } from 'react';\nimport { clsx } from 'clsx';\n\nimport type { ReactNode } from 'react';\n\nimport styles from './CheckboxButtonBar.module.css';\n\nimport { Label } from 'components/Label';\nimport { FeedbackBox } from 'components/FeedbackBox';\nimport { ControlsButton } from 'components/ControlsButton';\n\ntype CheckboxProps = {\n label: string | ReactNode;\n value: string;\n prefix?: string;\n tooltip?: ReactNode;\n tooltipPosition?: 'left' | 'center' | 'right';\n disabled?: boolean;\n};\n\nexport interface CheckboxButtonBarProps {\n /** array with objects with label, value, prefix and disabled*/\n checkboxes: CheckboxProps[];\n //** array with value(s) */\n defaultValues?: string[];\n label?: string;\n /** optional sub-label text (only displayed when label is positioned 'top') */\n subLabel?: string;\n /** 'top' | 'left' */\n labelPosition?: 'top' | 'left';\n /** `true` to show an asterisk to indicate an item is required; otherwise, `false`. */\n required?: boolean;\n /** `true` to color border red to show not valid; otherwise, `false`. */\n notValid?: boolean;\n /** error text to display under the bar */\n notValidatedText?: string;\n /** returns an array with only one value */\n actAsRadioButtonBar?: boolean;\n /** optional footer text */\n footerText?: string;\n /** disables all checkboxes in the bar */\n disableGroup?: boolean;\n /** `true` to sepearte each button in their own bordered container */\n segmented?: boolean;\n /** `true` sets forceSquared on all buttons */\n forceSquared?: boolean;\n onSetValues: (value: string[]) => void;\n}\n\nexport const CheckboxButtonBar = ({\n checkboxes,\n defaultValues,\n label,\n subLabel = '',\n labelPosition = 'top',\n required = false,\n notValid = false,\n notValidatedText = '',\n actAsRadioButtonBar = false,\n footerText = '',\n disableGroup = false,\n segmented = false,\n forceSquared = false,\n onSetValues,\n}: CheckboxButtonBarProps) => {\n const [currentValues, setCurrentValues] = useState<string[]>(\n defaultValues && !actAsRadioButtonBar\n ? defaultValues.map(String)\n : defaultValues && actAsRadioButtonBar\n ? defaultValues.slice(0, 1)\n : []\n );\n\n const handleChange = (value: string) => {\n let values = currentValues;\n\n if (actAsRadioButtonBar) {\n setCurrentValues([value]);\n onSetValues([value]);\n } else {\n if (values.includes(value)) {\n values = values.filter((val) => val !== value);\n } else {\n values = [...values, value];\n }\n setCurrentValues(values);\n onSetValues(values);\n }\n };\n\n return (\n <div\n className={clsx(\n styles['checkbox-button-bar__container'],\n styles[`checkbox-button-bar__container--label-${labelPosition}`]\n )}\n >\n {(label || subLabel) && (\n <div>\n {label && (\n <Label htmlFor=\"\" required={required}>\n {label}\n </Label>\n )}\n\n {subLabel && labelPosition === 'top' && (\n <div className={styles['checkbox-button-bar__sub-text']}>{subLabel}</div>\n )}\n </div>\n )}\n\n <div\n className={clsx(styles['checkbox-button-bar__row-container'], {\n [styles['checkbox-button-bar__row-container--segmented']]: segmented,\n })}\n >\n {segmented ? (\n checkboxes.map(({ label, value, prefix, tooltip, tooltipPosition, disabled }) => (\n <div\n key={value}\n className={clsx(styles['checkbox-button-bar__row'], {\n [styles['checkbox-button-bar__row--not-valid']]: notValid || notValidatedText,\n })}\n >\n <ControlsButton\n type={actAsRadioButtonBar ? 'radio' : 'checkbox'}\n label={label}\n prefix={prefix}\n tooltip={tooltip}\n tooltipPosition={tooltipPosition}\n forceSquared={forceSquared}\n value={value}\n checked={currentValues.includes(value)}\n disabled={disabled || disableGroup}\n onSetValue={(event) => handleChange(event.target.value)}\n />\n </div>\n ))\n ) : (\n <div\n className={clsx(styles['checkbox-button-bar__row'], {\n [styles['checkbox-button-bar__row--not-valid']]: notValid || notValidatedText,\n })}\n >\n {checkboxes.map(({ label, value, prefix, tooltip, tooltipPosition, disabled }) => (\n <ControlsButton\n key={value}\n type={actAsRadioButtonBar ? 'radio' : 'checkbox'}\n label={label}\n prefix={prefix}\n tooltip={tooltip}\n tooltipPosition={tooltipPosition}\n forceSquared={forceSquared}\n value={value}\n checked={currentValues.includes(value)}\n disabled={disabled || disableGroup}\n onSetValue={(event) => handleChange(event.target.value)}\n />\n ))}\n </div>\n )}\n </div>\n\n {footerText && <div className={styles['checkbox-button-bar__sub-text']}>{footerText}</div>}\n {notValidatedText !== '' && <FeedbackBox level=\"error\" feedback={notValidatedText} />}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;GCiDa,KAAqB,EAChC,eACA,kBACA,UACA,cAAW,IACX,mBAAgB,OAChB,cAAW,IACX,cAAW,IACX,sBAAmB,IACnB,yBAAsB,IACtB,gBAAa,IACb,kBAAe,IACf,eAAY,IACZ,kBAAe,IACf,qBAC4B;CAC5B,IAAM,CAAC,GAAe,KAAoB,EACxC,KAAiB,CAAC,IACd,EAAc,IAAI,OAAO,GACzB,KAAiB,IACf,EAAc,MAAM,GAAG,EAAE,GACzB,EAAE,CACT,EAEK,KAAgB,MAAkB;EACtC,IAAI,IAAS;AAEb,EAAI,KACF,EAAiB,CAAC,EAAM,CAAC,EACzB,EAAY,CAAC,EAAM,CAAC,KAEpB,AAGE,IAHE,EAAO,SAAS,EAAM,GACf,EAAO,QAAQ,MAAQ,MAAQ,EAAM,GAErC,CAAC,GAAG,GAAQ,EAAM,EAE7B,EAAiB,EAAO,EACxB,EAAY,EAAO;;AAIvB,QACE,kBAAC,OAAD;EACE,WAAW,EACT,EAAO,mCACP,EAAO,yCAAyC,KACjD;YAJH;IAMI,KAAS,MACT,kBAAC,OAAD,EAAA,UAAA,CACG,KACC,kBAAC,GAAD;IAAO,SAAQ;IAAa;cACzB;IACK,CAAA,EAGT,KAAY,MAAkB,SAC7B,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAmC;IAAe,CAAA,CAEvE,EAAA,CAAA;GAGR,kBAAC,OAAD;IACE,WAAW,EAAK,EAAO,uCAAuC,GAC3D,EAAO,mDAAmD,GAC5D,CAAC;cAED,IACC,EAAW,KAAK,EAAE,UAAO,UAAO,WAAQ,YAAS,oBAAiB,kBAChE,kBAAC,OAAD;KAEE,WAAW,EAAK,EAAO,6BAA6B,GACjD,EAAO,yCAAyC,KAAY,GAC9D,CAAC;eAEF,kBAAC,GAAD;MACE,MAAM,IAAsB,UAAU;MAC/B;MACC;MACC;MACQ;MACH;MACP;MACP,SAAS,EAAc,SAAS,EAAM;MACtC,UAAU,KAAY;MACtB,aAAa,MAAU,EAAa,EAAM,OAAO,MAAM;MACvD,CAAA;KACE,EAjBC,EAiBD,CACN,GAEF,kBAAC,OAAD;KACE,WAAW,EAAK,EAAO,6BAA6B,GACjD,EAAO,yCAAyC,KAAY,GAC9D,CAAC;eAED,EAAW,KAAK,EAAE,UAAO,UAAO,WAAQ,YAAS,oBAAiB,kBACjE,kBAAC,GAAD;MAEE,MAAM,IAAsB,UAAU;MAC/B;MACC;MACC;MACQ;MACH;MACP;MACP,SAAS,EAAc,SAAS,EAAM;MACtC,UAAU,KAAY;MACtB,aAAa,MAAU,EAAa,EAAM,OAAO,MAAM;MACvD,EAXK,EAWL,CACF;KACE,CAAA;IAEJ,CAAA;GAEL,KAAc,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAmC;IAAiB,CAAA;GACzF,MAAqB,MAAM,kBAAC,GAAD;IAAa,OAAM;IAAQ,UAAU;IAAoB,CAAA;GACjF"}
|
|
@@ -2,8 +2,7 @@ import { t as e } from "./clsx-BD2qMUU1.js";
|
|
|
2
2
|
import { Icon as t } from "./components/Icon/Icon.js";
|
|
3
3
|
import { useId as n } from "react";
|
|
4
4
|
import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
-
import './assets/ControlsButton.css'
|
|
6
|
-
var o = "_periods__item_t81b2_160", s = {
|
|
5
|
+
import './assets/ControlsButton.css';var o = {
|
|
7
6
|
"controls-input": "_controls-input_t81b2_1",
|
|
8
7
|
"controls-button": "_controls-button_t81b2_40",
|
|
9
8
|
"controls-button--squared": "_controls-button--squared_t81b2_58",
|
|
@@ -16,26 +15,26 @@ var o = "_periods__item_t81b2_160", s = {
|
|
|
16
15
|
"controls-button__tooltip--center": "_controls-button__tooltip--center_t81b2_110",
|
|
17
16
|
"controls-button__tooltip--right": "_controls-button__tooltip--right_t81b2_115",
|
|
18
17
|
"controls-button--checked": "_controls-button--checked_t81b2_160",
|
|
19
|
-
periods__item:
|
|
20
|
-
},
|
|
18
|
+
periods__item: "_periods__item_t81b2_160"
|
|
19
|
+
}, s = ({ type: s = "checkbox", label: c, value: l, iconName: u, prefix: d, tooltip: f, tooltipPosition: p = "center", name: m, forceSquared: h = !1, checked: g, disabled: _, onSetValue: v }) => {
|
|
21
20
|
let y = n(), b = (typeof c == "string" ? c : l).replace(/\s+/g, "_"), x = `${y}${b}`, S = `${x}-tooltip`;
|
|
22
21
|
return /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i("input", {
|
|
23
|
-
type:
|
|
22
|
+
type: s,
|
|
24
23
|
id: x,
|
|
25
24
|
name: m ?? b,
|
|
26
25
|
disabled: _,
|
|
27
26
|
value: l,
|
|
28
27
|
checked: g,
|
|
29
28
|
onChange: v,
|
|
30
|
-
className:
|
|
29
|
+
className: o["controls-input"],
|
|
31
30
|
"aria-describedby": f ? S : void 0
|
|
32
31
|
}), /* @__PURE__ */ a("label", {
|
|
33
32
|
htmlFor: x,
|
|
34
|
-
className: e(
|
|
35
|
-
h &&
|
|
36
|
-
d &&
|
|
37
|
-
u &&
|
|
38
|
-
g &&
|
|
33
|
+
className: e(o["controls-button"], [
|
|
34
|
+
h && o["controls-button--squared"],
|
|
35
|
+
d && o["controls-button--with-prefix"],
|
|
36
|
+
u && o["controls-button--with-icon"],
|
|
37
|
+
g && o["controls-button--checked"]
|
|
39
38
|
]),
|
|
40
39
|
children: [
|
|
41
40
|
u && /* @__PURE__ */ i(t, {
|
|
@@ -43,22 +42,22 @@ var o = "_periods__item_t81b2_160", s = {
|
|
|
43
42
|
size: 20
|
|
44
43
|
}),
|
|
45
44
|
/* @__PURE__ */ a("div", {
|
|
46
|
-
className:
|
|
45
|
+
className: o["controls-button__wrapper"],
|
|
47
46
|
children: [d && /* @__PURE__ */ i("div", {
|
|
48
|
-
className:
|
|
47
|
+
className: o["controls-button__prefix"],
|
|
49
48
|
children: d
|
|
50
49
|
}), c]
|
|
51
50
|
}),
|
|
52
51
|
f && /* @__PURE__ */ i("div", {
|
|
53
52
|
id: S,
|
|
54
53
|
role: "tooltip",
|
|
55
|
-
className: e(
|
|
54
|
+
className: e(o["controls-button__tooltip"], o[`controls-button__tooltip--${p}`]),
|
|
56
55
|
children: f
|
|
57
56
|
})
|
|
58
57
|
]
|
|
59
58
|
})] });
|
|
60
59
|
};
|
|
61
60
|
//#endregion
|
|
62
|
-
export {
|
|
61
|
+
export { s as t };
|
|
63
62
|
|
|
64
|
-
//# sourceMappingURL=ControlsButton-
|
|
63
|
+
//# sourceMappingURL=ControlsButton-B1XRpMUM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ControlsButton-
|
|
1
|
+
{"version":3,"file":"ControlsButton-B1XRpMUM.js","names":[],"sources":["../src/components/ControlsButton/ControlsButton.module.css","../src/components/ControlsButton/ControlsButton.tsx"],"sourcesContent":[".controls-input {\n aspect-ratio: unset;\n cursor: pointer;\n height: 0;\n opacity: 0;\n position: absolute;\n width: 0;\n}\n\n.controls-input:focus-visible + label {\n outline: 0.125rem dotted var(--color-navy-600);\n outline-offset: 0.125rem;\n}\n\n.controls-input:checked + label,\n[type=\"radio\"]:checked:hover + label {\n background-color: var(--color-navy-600);\n color: var(--color-uva-white);\n font-weight: var(--semibold);\n}\n\n.controls-input:disabled + label,\n.controls-input:disabled:hover + label {\n background-color: var(--color-grey-400);\n color: var(--color-grey-700);\n cursor: not-allowed;\n}\n\n.controls-input:disabled:checked + label {\n background-color: var(--color-grey-500);\n color: var(--color-grey-900);\n font-weight: var(--semibold);\n}\n\n.controls-input:hover + label {\n background-color: var(--color-grey-300);\n color: var(--color-uva-black);\n}\n\n.controls-button {\n align-items: center;\n background-color: var(--color-uva-white);\n border: 1px solid transparent;\n border-radius: 0.25rem;\n box-sizing: border-box;\n cursor: pointer;\n display: inline-flex;\n font-size: var(--font-size-default);\n height: 2.25rem;\n justify-content: center;\n min-width: 2.25rem;\n padding: 0.5rem;\n position: relative;\n user-select: none;\n white-space: nowrap;\n}\n\n.controls-button--squared {\n width: 2.25rem;\n}\n\n.controls-button::after {\n content: \"\";\n min-height: 2.625rem;\n min-width: 2.625rem;\n position: absolute;\n width: 100%;\n}\n\n.controls-button--with-prefix {\n height: auto;\n padding: 0.125rem 0.5rem;\n width: auto;\n}\n\n.controls-button--with-icon {\n gap: 0.5rem;\n}\n\n.controls-button__wrapper {\n align-items: center;\n display: flex;\n flex-direction: column;\n}\n\n.controls-button__prefix {\n color: var(--color-uva-700);\n font-size: var(--font-size-text-non-essential);\n}\n\n.controls-button__tooltip {\n background-color: var(--color-uva-white);\n box-shadow: 0 0 0.25rem 0 rgba(0 0 0 / 25%);\n color: var(--color-grey-700);\n display: none;\n font-size: var(--font-size-text-non-essential);\n font-style: italic;\n font-weight: normal;\n padding: 0.5rem 1rem;\n position: absolute;\n text-align: center;\n top: calc(100% + 0.5rem);\n z-index: 1;\n}\n\n.controls-button__tooltip--left {\n left: 0rem;\n}\n\n.controls-button__tooltip--center {\n left: 50%;\n transform: translateX(-50%);\n}\n\n.controls-button__tooltip--right {\n right: 0rem;\n}\n\n.controls-button__tooltip::before {\n border-color: transparent transparent var(--color-grey-400) transparent;\n border-style: solid;\n border-width: 0.5rem;\n bottom: calc(100% + 0.125rem);\n content: \"\";\n filter: blur(0.125rem);\n position: absolute;\n z-index: -1;\n}\n\n.controls-button__tooltip::after {\n border-color: transparent transparent var(--color-uva-white) transparent;\n border-style: solid;\n border-width: 0.5rem;\n bottom: 100%;\n content: \"\";\n position: absolute;\n}\n\n.controls-button:hover .controls-button__tooltip,\n.controls-input:focus-visible + label .controls-button__tooltip {\n display: block;\n}\n\n.controls-button__tooltip--left::before,\n.controls-button__tooltip--left::after {\n left: 0.5rem;\n}\n\n.controls-button__tooltip--center::before,\n.controls-button__tooltip--center::after {\n left: 50%;\n transform: translateX(-50%);\n}\n\n.controls-button__tooltip--right::before,\n.controls-button__tooltip--right::after {\n right: 0.5rem;\n}\n\n.controls-button--checked span.periods__item,\n.controls-button--checked [data-period-item] {\n border: 1px solid var(--color-uva-white) !important;\n}\n","import { useId } from 'react';\r\nimport { clsx } from 'clsx';\r\n\r\nimport type { ChangeEvent, ReactNode } from 'react';\r\nimport type { IconProps } from 'components/Icon';\r\n\r\nimport styles from './ControlsButton.module.css';\r\n\r\nimport { Icon } from 'components/Icon';\r\n\r\nexport interface ControlsButtonProps {\r\n /** to set type/behaviour of input radio or checkbox */\r\n type?: 'radio' | 'checkbox';\r\n /** button label */\r\n label: string | ReactNode;\r\n /** button value */\r\n value: string;\r\n /** set if icon is needed in font of label */\r\n iconName?: IconProps['name'];\r\n /** set if prefix is needed above of label */\r\n prefix?: string;\r\n /** set tooltip */\r\n tooltip?: ReactNode;\r\n /** set horizontal position of the tooltip */\r\n tooltipPosition?: 'left' | 'center' | 'right';\r\n /** set if used as radiogroup */\r\n name?: string;\r\n /** `true` to set squared button; otherwise, `false`. The default is `false`. Note: hides icon */\r\n forceSquared?: boolean;\r\n /** to set default status */\r\n checked?: boolean;\r\n /** `true` to disable the button; otherwise, `false`. The default is `false`. */\r\n disabled?: boolean;\r\n /** The callback function that is invoked when the radio button changes value. */\r\n onSetValue: (event: ChangeEvent<HTMLInputElement>) => void;\r\n}\r\n\r\nexport const ControlsButton = ({\r\n type = 'checkbox',\r\n label,\r\n value,\r\n iconName,\r\n prefix,\r\n tooltip,\r\n tooltipPosition = 'center',\r\n name,\r\n forceSquared = false,\r\n checked,\r\n disabled,\r\n onSetValue,\r\n}: ControlsButtonProps) => {\r\n const idPrefix = useId();\r\n const labelString = typeof label === 'string' ? label : value;\r\n const sanitizedLabel = labelString.replace(/\\s+/g, '_');\r\n const baseId = `${idPrefix}${sanitizedLabel}`;\r\n const tooltipId = `${baseId}-tooltip`;\r\n\r\n return (\r\n <>\r\n <input\r\n type={type}\r\n id={baseId}\r\n name={name ?? sanitizedLabel}\r\n disabled={disabled}\r\n value={value}\r\n checked={checked}\r\n onChange={onSetValue}\r\n className={styles['controls-input']}\r\n aria-describedby={tooltip ? tooltipId : undefined}\r\n />\r\n <label\r\n htmlFor={baseId}\r\n className={clsx(styles['controls-button'], [\r\n forceSquared && styles['controls-button--squared'],\r\n prefix && styles['controls-button--with-prefix'],\r\n iconName && styles['controls-button--with-icon'],\r\n checked && styles['controls-button--checked'],\r\n ])}\r\n >\r\n {iconName && <Icon name={iconName} size={20} />}\r\n <div className={styles['controls-button__wrapper']}>\r\n {prefix && <div className={styles['controls-button__prefix']}>{prefix}</div>}\r\n {label}\r\n </div>\r\n {tooltip && (\r\n <div\r\n id={tooltipId}\r\n role=\"tooltip\"\r\n className={clsx(styles['controls-button__tooltip'], styles[`controls-button__tooltip--${tooltipPosition}`])}\r\n >\r\n {tooltip}\r\n </div>\r\n )}\r\n </label>\r\n </>\r\n );\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;;;GCqCa,KAAkB,EAC7B,UAAO,YACP,UACA,UACA,aACA,WACA,YACA,qBAAkB,UAClB,SACA,kBAAe,IACf,YACA,aACA,oBACyB;CACzB,IAAM,IAAW,GAAO,EAElB,KADc,OAAO,KAAU,WAAW,IAAQ,GACrB,QAAQ,QAAQ,IAAI,EACjD,IAAS,GAAG,IAAW,KACvB,IAAY,GAAG,EAAO;AAE5B,QACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,SAAD;EACQ;EACN,IAAI;EACJ,MAAM,KAAQ;EACJ;EACH;EACE;EACT,UAAU;EACV,WAAW,EAAO;EAClB,oBAAkB,IAAU,IAAY,KAAA;EACxC,CAAA,EACF,kBAAC,SAAD;EACE,SAAS;EACT,WAAW,EAAK,EAAO,oBAAoB;GACzC,KAAgB,EAAO;GACvB,KAAU,EAAO;GACjB,KAAY,EAAO;GACnB,KAAW,EAAO;GACnB,CAAC;YAPJ;GASG,KAAY,kBAAC,GAAD;IAAM,MAAM;IAAU,MAAM;IAAM,CAAA;GAC/C,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAvB,CACG,KAAU,kBAAC,OAAD;KAAK,WAAW,EAAO;eAA6B;KAAa,CAAA,EAC3E,EACG;;GACL,KACC,kBAAC,OAAD;IACE,IAAI;IACJ,MAAK;IACL,WAAW,EAAK,EAAO,6BAA6B,EAAO,6BAA6B,KAAmB;cAE1G;IACG,CAAA;GAEF;IACP,EAAA,CAAA"}
|
|
@@ -6,32 +6,31 @@ import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
|
6
6
|
import { useDialog as c } from "@react-aria/dialog";
|
|
7
7
|
import { FocusScope as l } from "@react-aria/focus";
|
|
8
8
|
import { OverlayContainer as u, useModal as d, useOverlay as f, usePreventScroll as p } from "@react-aria/overlays";
|
|
9
|
-
import './assets/Drawer.css'
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
drawer__heading: v,
|
|
9
|
+
import './assets/Drawer.css';var m = {
|
|
10
|
+
drawer: "_drawer_1g9hi_1",
|
|
11
|
+
drawer__content: "_drawer__content_1g9hi_22",
|
|
12
|
+
drawer__header: "_drawer__header_1g9hi_32",
|
|
13
|
+
drawer__footer: "_drawer__footer_1g9hi_39",
|
|
14
|
+
drawer__heading: "_drawer__heading_1g9hi_26",
|
|
16
15
|
"drawer--open": "_drawer--open_1g9hi_59",
|
|
17
|
-
drawer__buttons:
|
|
18
|
-
},
|
|
19
|
-
function
|
|
20
|
-
let [C, w] = a(
|
|
16
|
+
drawer__buttons: "_drawer__buttons_1g9hi_64"
|
|
17
|
+
}, h = 200;
|
|
18
|
+
function g({ buttons: g, children: _, isOpen: v, onClose: y, title: b, closeButtonAriaValueText: x = "Close", ...S }) {
|
|
19
|
+
let [C, w] = a(m.drawer), { modalProps: T } = d({ isDisabled: !v }), E = i(null);
|
|
21
20
|
function D() {
|
|
22
|
-
w(
|
|
23
|
-
|
|
24
|
-
},
|
|
21
|
+
w(m.drawer), globalThis.setTimeout(() => {
|
|
22
|
+
y();
|
|
23
|
+
}, h);
|
|
25
24
|
}
|
|
26
25
|
let { overlayProps: O, underlayProps: k } = f({
|
|
27
26
|
isDismissable: !0,
|
|
28
27
|
isKeyboardDismissDisabled: !1,
|
|
29
|
-
isOpen:
|
|
28
|
+
isOpen: v,
|
|
30
29
|
onClose: D
|
|
31
30
|
}, E), { dialogProps: A, titleProps: j } = c({}, E);
|
|
32
|
-
return p({ isDisabled: !
|
|
33
|
-
w(e(
|
|
34
|
-
}, [
|
|
31
|
+
return p({ isDisabled: !v }), r(() => {
|
|
32
|
+
w(e(m.drawer, { [m["drawer--open"]]: v }));
|
|
33
|
+
}, [v]), /* @__PURE__ */ o(u, { children: /* @__PURE__ */ o(t, {
|
|
35
34
|
...k,
|
|
36
35
|
children: /* @__PURE__ */ o(l, {
|
|
37
36
|
contain: !0,
|
|
@@ -45,25 +44,25 @@ function S({ buttons: m, children: h, isOpen: g, onClose: _, title: v, closeButt
|
|
|
45
44
|
ref: E,
|
|
46
45
|
children: [
|
|
47
46
|
/* @__PURE__ */ s("header", {
|
|
48
|
-
className:
|
|
47
|
+
className: m.drawer__header,
|
|
49
48
|
children: [/* @__PURE__ */ o("h1", {
|
|
50
|
-
className:
|
|
49
|
+
className: m.drawer__heading,
|
|
51
50
|
...j,
|
|
52
|
-
children:
|
|
51
|
+
children: b
|
|
53
52
|
}), /* @__PURE__ */ o(n, {
|
|
54
|
-
"aria-label":
|
|
53
|
+
"aria-label": x,
|
|
55
54
|
onClick: D
|
|
56
55
|
})]
|
|
57
56
|
}),
|
|
58
57
|
/* @__PURE__ */ o("div", {
|
|
59
|
-
className:
|
|
60
|
-
children:
|
|
58
|
+
className: m.drawer__content,
|
|
59
|
+
children: _
|
|
61
60
|
}),
|
|
62
|
-
|
|
63
|
-
className:
|
|
61
|
+
g && /* @__PURE__ */ o("footer", {
|
|
62
|
+
className: m.drawer__footer,
|
|
64
63
|
children: /* @__PURE__ */ o("div", {
|
|
65
|
-
className:
|
|
66
|
-
children:
|
|
64
|
+
className: m.drawer__buttons,
|
|
65
|
+
children: g
|
|
67
66
|
})
|
|
68
67
|
})
|
|
69
68
|
]
|
|
@@ -72,6 +71,6 @@ function S({ buttons: m, children: h, isOpen: g, onClose: _, title: v, closeButt
|
|
|
72
71
|
}) });
|
|
73
72
|
}
|
|
74
73
|
//#endregion
|
|
75
|
-
export {
|
|
74
|
+
export { g as t };
|
|
76
75
|
|
|
77
|
-
//# sourceMappingURL=Drawer-
|
|
76
|
+
//# sourceMappingURL=Drawer-e7UFHVg9.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer-
|
|
1
|
+
{"version":3,"file":"Drawer-e7UFHVg9.js","names":[],"sources":["../src/components/Drawer/Drawer.module.css","../src/components/Drawer/Drawer.tsx"],"sourcesContent":[".drawer {\n background-color: var(--color-uva-white);\n bottom: 0;\n box-shadow: 0 0 0.75rem 0.25rem rgb(0 0 0 / 10%);\n display: flex;\n flex-direction: column;\n left: 10vw;\n max-width: 90vw;\n min-width: 25rem;\n padding: 2.5rem 2rem;\n position: fixed;\n right: 0;\n top: 0;\n transform: translateX(100%);\n transform-origin: right;\n transition-duration: 200ms;\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n width: 100%;\n}\n\n.drawer__content {\n /**\n * Drawer content height cannot exceed the available height, dictated by its parent.\n * Subtracting top and bottom padding from .drawer as well as the height and bottom margin of\n * .drawer__heading from the parent's height gives us the maximum height the content should be.\n */\n max-height: calc(100vh - 7rem);\n overflow-y: auto;\n}\n\n.drawer__header {\n display: flex;\n gap: 2rem;\n justify-content: space-between;\n position: relative;\n}\n\n.drawer__footer {\n gap: 2rem;\n justify-content: flex-end;\n margin-top: auto;\n}\n\n.drawer__heading {\n font-size: var(--font-size-s);\n line-height: var(--line-height-s);\n margin: 0.25rem 0 0.5rem;\n padding-right: 2rem;\n}\n\n@media only screen and (min-width: 40rem) {\n .drawer {\n left: auto;\n max-width: 37.5rem;\n }\n}\n\n.drawer--open {\n transform: translateX(0);\n transition-duration: 250ms;\n}\n\n.drawer__buttons {\n display: flex;\n flex-flow: row wrap;\n gap: 0.75rem;\n justify-content: flex-end;\n margin: 2.5rem 0 0;\n}\n","import { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { OverlayContainer, useModal, useOverlay, usePreventScroll } from '@react-aria/overlays';\nimport { clsx } from 'clsx';\nimport { useEffect, useRef, useState } from 'react';\n\nimport type { HTMLAttributes, PropsWithChildren, ReactNode } from 'react';\n\nimport styles from './Drawer.module.css';\n\nimport { Backdrop } from 'components/Backdrop/Backdrop';\nimport { OverlayCloseButton } from 'components/OverlayCloseButton';\n\nexport interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'style' | 'className'> {\n /** The buttons to render in the drawer. */\n buttons?: ReactNode;\n /** true if the drawer should be open; otherwise, false. The default is false. */\n isOpen?: boolean;\n /** The callback method that is invoked when the drawer is closed. */\n onClose: () => void;\n /** The title of the drawer. */\n title: string;\n /** The aria-label of the close button. */\n closeButtonAriaValueText?: string;\n}\n\nconst closingDelay = 200;\n\n/** Represents a Drawer component. */\nexport function Drawer({\n buttons,\n children,\n isOpen,\n onClose,\n title,\n closeButtonAriaValueText = 'Close',\n ...restProps\n}: PropsWithChildren<DrawerProps>) {\n const [containerClassNames, setContainerClassNames] = useState(styles.drawer);\n // Hide content outside the modal from screen readers.\n const { modalProps } = useModal({ isDisabled: !isOpen });\n const contentRef = useRef<HTMLDivElement>(null);\n\n function onCloseDrawer() {\n setContainerClassNames(styles.drawer);\n\n globalThis.setTimeout(() => {\n onClose();\n }, closingDelay);\n }\n\n // Handle interacting outside the dialog and pressing\n // the Escape key to close the modal.\n const { overlayProps, underlayProps } = useOverlay(\n { isDismissable: true, isKeyboardDismissDisabled: false, isOpen, onClose: onCloseDrawer },\n contentRef\n );\n\n // Get props for the dialog and its title\n const { dialogProps, titleProps } = useDialog({}, contentRef);\n\n usePreventScroll({ isDisabled: !isOpen });\n\n useEffect(() => {\n // setting class name after render so that element can slide in after it is mounted and slide out\n // before it is unmounted\n setContainerClassNames(clsx(styles.drawer, { [styles['drawer--open']]: isOpen }));\n }, [isOpen]);\n\n return (\n <OverlayContainer>\n <Backdrop {...underlayProps}>\n <FocusScope contain restoreFocus>\n <aside\n {...modalProps}\n {...overlayProps}\n {...dialogProps}\n {...restProps}\n className={containerClassNames}\n ref={contentRef}\n >\n <header className={styles.drawer__header}>\n <h1 className={styles.drawer__heading} {...titleProps}>\n {title}\n </h1>\n\n <OverlayCloseButton aria-label={closeButtonAriaValueText} onClick={onCloseDrawer} />\n </header>\n\n <div className={styles.drawer__content}>{children}</div>\n\n {buttons && (\n <footer className={styles.drawer__footer}>\n <div className={styles.drawer__buttons}>{buttons}</div>\n </footer>\n )}\n </aside>\n </FocusScope>\n </Backdrop>\n </OverlayContainer>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;GC0BM,IAAe;AAGrB,SAAgB,EAAO,EACrB,YACA,aACA,WACA,YACA,UACA,8BAA2B,SAC3B,GAAG,KAC8B;CACjC,IAAM,CAAC,GAAqB,KAA0B,EAAS,EAAO,OAAO,EAEvE,EAAE,kBAAe,EAAS,EAAE,YAAY,CAAC,GAAQ,CAAC,EAClD,IAAa,EAAuB,KAAK;CAE/C,SAAS,IAAgB;AAGvB,EAFA,EAAuB,EAAO,OAAO,EAErC,WAAW,iBAAiB;AAC1B,MAAS;KACR,EAAa;;CAKlB,IAAM,EAAE,iBAAc,qBAAkB,EACtC;EAAE,eAAe;EAAM,2BAA2B;EAAO;EAAQ,SAAS;EAAe,EACzF,EACD,EAGK,EAAE,gBAAa,kBAAe,EAAU,EAAE,EAAE,EAAW;AAU7D,QARA,EAAiB,EAAE,YAAY,CAAC,GAAQ,CAAC,EAEzC,QAAgB;AAGd,IAAuB,EAAK,EAAO,QAAQ,GAAG,EAAO,kBAAkB,GAAQ,CAAC,CAAC;IAChF,CAAC,EAAO,CAAC,EAGV,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;EAAU,GAAI;YACZ,kBAAC,GAAD;GAAY,SAAA;GAAQ,cAAA;aAClB,kBAAC,SAAD;IACE,GAAI;IACJ,GAAI;IACJ,GAAI;IACJ,GAAI;IACJ,WAAW;IACX,KAAK;cANP;KAQE,kBAAC,UAAD;MAAQ,WAAW,EAAO;gBAA1B,CACE,kBAAC,MAAD;OAAI,WAAW,EAAO;OAAiB,GAAI;iBACxC;OACE,CAAA,EAEL,kBAAC,GAAD;OAAoB,cAAY;OAA0B,SAAS;OAAiB,CAAA,CAC7E;;KAET,kBAAC,OAAD;MAAK,WAAW,EAAO;MAAkB;MAAe,CAAA;KAEvD,KACC,kBAAC,UAAD;MAAQ,WAAW,EAAO;gBACxB,kBAAC,OAAD;OAAK,WAAW,EAAO;iBAAkB;OAAc,CAAA;MAChD,CAAA;KAEL;;GACG,CAAA;EACJ,CAAA,EACM,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e } from "./Spinner-
|
|
1
|
+
import { t as e } from "./Spinner-BpElTDIu.js";
|
|
2
2
|
import { Fragment as t, jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
3
3
|
import './assets/FieldHint.css';//#region src/components/FieldHint/FieldHint.module.css
|
|
4
4
|
var i = { "field-hint": "_field-hint_f5ej1_1" };
|
|
@@ -13,4 +13,4 @@ function a({ value: a, spinnerAriaValueText: o, loading: s }) {
|
|
|
13
13
|
//#endregion
|
|
14
14
|
export { a as t };
|
|
15
15
|
|
|
16
|
-
//# sourceMappingURL=FieldHint-
|
|
16
|
+
//# sourceMappingURL=FieldHint-fxnEOsVZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldHint-
|
|
1
|
+
{"version":3,"file":"FieldHint-fxnEOsVZ.js","names":[],"sources":["../src/components/FieldHint/FieldHint.module.css","../src/components/FieldHint/FieldHint.tsx"],"sourcesContent":[".field-hint {\n font-size: 0.875rem;\n}\n","import styles from './FieldHint.module.css';\n\nimport { Spinner } from 'components/Spinner/Spinner';\n\nexport interface FieldHintProps {\n /** The value to display. */\n value?: string;\n /** The aria-valuetext value of the spinner component. */\n spinnerAriaValueText: string;\n /** true if the field hint is loading; otherwise, false. The default is false. */\n loading?: boolean;\n}\n\n/** Represents a component to show a hint for an input element. */\nexport function FieldHint({ value, spinnerAriaValueText, loading }: FieldHintProps) {\n return (\n <span className={styles['field-hint']}>\n {value && <>{value}</>}\n {!value && loading && <Spinner ariaValueText={spinnerAriaValueText} />}\n </span>\n );\n}\n"],"mappings":";;;;;;ACcA,SAAgB,EAAU,EAAE,UAAO,yBAAsB,cAA2B;AAClF,QACE,kBAAC,QAAD;EAAM,WAAW,EAAO;YAAxB,CACG,KAAS,kBAAA,GAAA,EAAA,UAAG,GAAS,CAAA,EACrB,CAAC,KAAS,KAAW,kBAAC,GAAD,EAAS,eAAe,GAAwB,CAAA,CACjE"}
|