@deephaven/components 1.7.2-beta.1 → 1.7.2-beta.3
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/AutoCompleteInput.d.ts +0 -17
- package/dist/AutoCompleteInput.d.ts.map +1 -1
- package/dist/AutoCompleteInput.js +12 -31
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/AutoResizeTextarea.d.ts +0 -23
- package/dist/AutoResizeTextarea.d.ts.map +1 -1
- package/dist/AutoResizeTextarea.js +0 -21
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/BasicModal.d.ts +0 -27
- package/dist/BasicModal.d.ts.map +1 -1
- package/dist/BasicModal.js +2 -28
- package/dist/BasicModal.js.map +1 -1
- package/dist/BulkActionBar.js.map +1 -1
- package/dist/Button.d.ts +1 -1
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js +2 -79
- package/dist/Button.js.map +1 -1
- package/dist/CardFlip.d.ts.map +1 -1
- package/dist/CardFlip.js +1 -2
- package/dist/CardFlip.js.map +1 -1
- package/dist/Checkbox.d.ts.map +1 -1
- package/dist/Checkbox.js +3 -45
- package/dist/Checkbox.js.map +1 -1
- package/dist/Collapse.d.ts +0 -8
- package/dist/Collapse.d.ts.map +1 -1
- package/dist/Collapse.js +0 -8
- package/dist/Collapse.js.map +1 -1
- package/dist/ComponentUtils.js.map +1 -1
- package/dist/CopyButton.js.map +1 -1
- package/dist/CustomTimeSelect.js +14 -15
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DateInput.js.map +1 -1
- package/dist/DateInputUtils.js.map +1 -1
- package/dist/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput.js +0 -8
- package/dist/DateTimeInput.js.map +1 -1
- package/dist/DateTimeInputUtils.js.map +1 -1
- package/dist/DebouncedSearchInput.js +1 -1
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DragUtils.js.map +1 -1
- package/dist/DraggableItemList.d.ts +2 -2
- package/dist/DraggableItemList.d.ts.map +1 -1
- package/dist/DraggableItemList.js +8 -7
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/EditableItemList.js +1 -2
- package/dist/EditableItemList.js.map +1 -1
- package/dist/ErrorBoundary.js +1 -1
- package/dist/ErrorBoundary.js.map +1 -1
- package/dist/ErrorView.js +1 -2
- package/dist/ErrorView.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.d.ts +1 -1
- package/dist/HierarchicalCheckboxMenu.d.ts.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +1 -2
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.d.ts +1 -1
- package/dist/ItemList.d.ts.map +1 -1
- package/dist/ItemList.js +14 -14
- package/dist/ItemList.js.map +1 -1
- package/dist/ItemListItem.js.map +1 -1
- package/dist/LoadingOverlay.js +1 -2
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/LoadingSpinner.js.map +1 -1
- package/dist/MaskedInput.d.ts.map +1 -1
- package/dist/MaskedInput.js +11 -31
- package/dist/MaskedInput.js.map +1 -1
- package/dist/MaskedInputUtils.js.map +1 -1
- package/dist/Option.js.map +1 -1
- package/dist/RadioGroup.js +1 -2
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioItem.d.ts.map +1 -1
- package/dist/RadioItem.js +1 -13
- package/dist/RadioItem.js.map +1 -1
- package/dist/RandomAreaPlotAnimation.d.ts +1 -1
- package/dist/RandomAreaPlotAnimation.d.ts.map +1 -1
- package/dist/RandomAreaPlotAnimation.js +5 -8
- package/dist/RandomAreaPlotAnimation.js.map +1 -1
- package/dist/SearchInput.js +3 -5
- package/dist/SearchInput.js.map +1 -1
- package/dist/SearchableCombobox.js.map +1 -1
- package/dist/Select.d.ts +1 -1
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js.map +1 -1
- package/dist/SelectValueList.js +9 -9
- package/dist/SelectValueList.js.map +1 -1
- package/dist/SocketedButton.d.ts +4 -4
- package/dist/SocketedButton.d.ts.map +1 -1
- package/dist/SocketedButton.js +5 -20
- package/dist/SocketedButton.js.map +1 -1
- package/dist/SplitButtonGroup.d.ts +2 -18
- package/dist/SplitButtonGroup.d.ts.map +1 -1
- package/dist/SplitButtonGroup.js +0 -13
- package/dist/SplitButtonGroup.js.map +1 -1
- package/dist/TableViewEmptyState.js +1 -2
- package/dist/TableViewEmptyState.js.map +1 -1
- package/dist/TextWithTooltip.js +1 -3
- package/dist/TextWithTooltip.js.map +1 -1
- package/dist/ThemeExport.js.map +1 -1
- package/dist/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput.js +7 -17
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.js +3 -6
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ToastNotification.d.ts +1 -2
- package/dist/ToastNotification.d.ts.map +1 -1
- package/dist/ToastNotification.js +1 -2
- package/dist/ToastNotification.js.map +1 -1
- package/dist/UIConstants.js.map +1 -1
- package/dist/UISwitch.d.ts.map +1 -1
- package/dist/UISwitch.js +18 -14
- package/dist/UISwitch.js.map +1 -1
- package/dist/XComponent.d.ts +1 -1
- package/dist/XComponent.d.ts.map +1 -1
- package/dist/XComponent.js.map +1 -1
- package/dist/XComponentMap.d.ts +2 -2
- package/dist/XComponentMap.d.ts.map +1 -1
- package/dist/XComponentMap.js.map +1 -1
- package/dist/actions/ConfirmActionButton.js.map +1 -1
- package/dist/actions/IconActionButton.js +1 -2
- package/dist/actions/IconActionButton.js.map +1 -1
- package/dist/actions/index.js.map +1 -1
- package/dist/context-actions/ContextActionUtils.js.map +1 -1
- package/dist/context-actions/ContextActions.d.ts +1 -2
- package/dist/context-actions/ContextActions.d.ts.map +1 -1
- package/dist/context-actions/ContextActions.js +22 -22
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.js +5 -7
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
- package/dist/context-actions/ContextMenuItem.js +21 -43
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js +1 -1
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/context-actions/GlobalContextAction.js +1 -1
- package/dist/context-actions/GlobalContextAction.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/context-actions/index.js.map +1 -1
- package/dist/declaration.d.js.map +1 -1
- package/dist/dialogs/ActionButtonDialogTrigger.js +1 -2
- package/dist/dialogs/ActionButtonDialogTrigger.js.map +1 -1
- package/dist/dialogs/ConfirmationDialog.js +1 -2
- package/dist/dialogs/ConfirmationDialog.js.map +1 -1
- package/dist/dialogs/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.js +2 -2
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.js +4 -6
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/menu-actions/index.js.map +1 -1
- package/dist/modal/DebouncedModal.js +1 -3
- package/dist/modal/DebouncedModal.js.map +1 -1
- package/dist/modal/InfoModal.js +1 -2
- package/dist/modal/InfoModal.js.map +1 -1
- package/dist/modal/Modal.js +2 -3
- package/dist/modal/Modal.js.map +1 -1
- package/dist/modal/ModalBody.js.map +1 -1
- package/dist/modal/ModalFooter.js.map +1 -1
- package/dist/modal/ModalHeader.js +1 -2
- package/dist/modal/ModalHeader.js.map +1 -1
- package/dist/modal/index.js.map +1 -1
- package/dist/navigation/DashboardList.js +3 -4
- package/dist/navigation/DashboardList.js.map +1 -1
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.js +1 -2
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/NavTab.d.ts +1 -1
- package/dist/navigation/NavTab.d.ts.map +1 -1
- package/dist/navigation/NavTab.js +4 -5
- package/dist/navigation/NavTab.js.map +1 -1
- package/dist/navigation/NavTabList.js +4 -5
- package/dist/navigation/NavTabList.js.map +1 -1
- package/dist/navigation/Page.js +1 -2
- package/dist/navigation/Page.js.map +1 -1
- package/dist/navigation/Stack.js +1 -3
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/navigation/index.js.map +1 -1
- package/dist/popper/Popper.d.ts +1 -14
- package/dist/popper/Popper.d.ts.map +1 -1
- package/dist/popper/Popper.js +18 -29
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.d.ts.map +1 -1
- package/dist/popper/Tooltip.js +18 -12
- package/dist/popper/Tooltip.js.map +1 -1
- package/dist/popper/index.js.map +1 -1
- package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
- package/dist/shortcuts/NavigationShortcuts.js.map +1 -1
- package/dist/shortcuts/Shortcut.js +11 -13
- package/dist/shortcuts/Shortcut.js.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.js +1 -1
- package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
- package/dist/shortcuts/index.js.map +1 -1
- package/dist/spectrum/ActionGroup.js.map +1 -1
- package/dist/spectrum/ActionMenu.js.map +1 -1
- package/dist/spectrum/CheckboxGroup.js.map +1 -1
- package/dist/spectrum/Heading.js.map +1 -1
- package/dist/spectrum/ItemContent.js +2 -4
- package/dist/spectrum/ItemContent.js.map +1 -1
- package/dist/spectrum/ItemTooltip.js.map +1 -1
- package/dist/spectrum/ListActionGroup.js.map +1 -1
- package/dist/spectrum/ListActionMenu.js.map +1 -1
- package/dist/spectrum/TabPanels.d.ts.map +1 -1
- package/dist/spectrum/TabPanels.js +8 -5
- package/dist/spectrum/TabPanels.js.map +1 -1
- package/dist/spectrum/Text.js.map +1 -1
- package/dist/spectrum/View.js.map +1 -1
- package/dist/spectrum/buttons.js.map +1 -1
- package/dist/spectrum/collections.js.map +1 -1
- package/dist/spectrum/comboBox/ComboBox.js.map +1 -1
- package/dist/spectrum/comboBox/ComboBoxNormalized.js.map +1 -1
- package/dist/spectrum/comboBox/index.js.map +1 -1
- package/dist/spectrum/content.js.map +1 -1
- package/dist/spectrum/dateAndTime.js.map +1 -1
- package/dist/spectrum/forms.js.map +1 -1
- package/dist/spectrum/icons.js.map +1 -1
- package/dist/spectrum/index.js.map +1 -1
- package/dist/spectrum/layout.js.map +1 -1
- package/dist/spectrum/listView/ListView.js.map +1 -1
- package/dist/spectrum/listView/ListViewNormalized.js +1 -2
- package/dist/spectrum/listView/ListViewNormalized.js.map +1 -1
- package/dist/spectrum/listView/ListViewWrapper.js.map +1 -1
- package/dist/spectrum/listView/index.js.map +1 -1
- package/dist/spectrum/navigation.js.map +1 -1
- package/dist/spectrum/overlays.js.map +1 -1
- package/dist/spectrum/picker/Picker.js.map +1 -1
- package/dist/spectrum/picker/PickerNormalized.js.map +1 -1
- package/dist/spectrum/picker/PickerProps.js.map +1 -1
- package/dist/spectrum/picker/index.js.map +1 -1
- package/dist/spectrum/picker/usePickerItemScale.js.map +1 -1
- package/dist/spectrum/picker/usePickerNormalizedProps.d.ts +1 -2
- package/dist/spectrum/picker/usePickerNormalizedProps.d.ts.map +1 -1
- package/dist/spectrum/picker/usePickerNormalizedProps.js.map +1 -1
- package/dist/spectrum/picker/usePickerProps.js.map +1 -1
- package/dist/spectrum/picker/usePickerScrollOnOpen.js +1 -1
- package/dist/spectrum/picker/usePickerScrollOnOpen.js.map +1 -1
- package/dist/spectrum/shared.js.map +1 -1
- package/dist/spectrum/status.js.map +1 -1
- package/dist/spectrum/utils/index.js.map +1 -1
- package/dist/spectrum/utils/itemUtils.d.ts +2 -2
- package/dist/spectrum/utils/itemUtils.d.ts.map +1 -1
- package/dist/spectrum/utils/itemUtils.js +5 -1
- package/dist/spectrum/utils/itemUtils.js.map +1 -1
- package/dist/spectrum/utils/itemWrapperUtils.js +3 -4
- package/dist/spectrum/utils/itemWrapperUtils.js.map +1 -1
- package/dist/spectrum/utils/propsUtils.js.map +1 -1
- package/dist/spectrum/utils/themeUtils.js.map +1 -1
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js +1 -1
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js.map +1 -1
- package/dist/spectrum/utils/useRenderNormalizedItem.js +1 -2
- package/dist/spectrum/utils/useRenderNormalizedItem.js.map +1 -1
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js +1 -1
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js.map +1 -1
- package/dist/spectrum/utils/useStringifiedMultiSelection.d.ts +1 -1
- package/dist/spectrum/utils/useStringifiedMultiSelection.d.ts.map +1 -1
- package/dist/spectrum/utils/useStringifiedMultiSelection.js.map +1 -1
- package/dist/spectrum/utils/useStringifiedSelection.d.ts +1 -1
- package/dist/spectrum/utils/useStringifiedSelection.d.ts.map +1 -1
- package/dist/spectrum/utils/useStringifiedSelection.js.map +1 -1
- package/dist/theme/Logo.js.map +1 -1
- package/dist/theme/SpectrumThemeProvider.js.map +1 -1
- package/dist/theme/ThemeModel.js +1 -0
- package/dist/theme/ThemeModel.js.map +1 -1
- package/dist/theme/ThemePicker.d.ts.map +1 -1
- package/dist/theme/ThemePicker.js +3 -1
- package/dist/theme/ThemePicker.js.map +1 -1
- package/dist/theme/ThemeProvider.js +1 -3
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/ThemeUtils.js.map +1 -1
- package/dist/theme/colorUtils.js.map +1 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/theme-dark/index.js.map +1 -1
- package/dist/theme/theme-light/index.js.map +1 -1
- package/dist/theme/theme-spectrum/index.js.map +1 -1
- package/dist/theme/useExternalTheme.js.map +1 -1
- package/dist/theme/useSpectrumThemeProvider.js.map +1 -1
- package/dist/theme/useTheme.js.map +1 -1
- package/dist/transitions/FadeTransition.js.map +1 -1
- package/dist/transitions/SlideTransition.js.map +1 -1
- package/dist/transitions/index.js.map +1 -1
- package/package.json +12 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DebouncedModal.js","names":["React","useDebouncedValue","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DebouncedModal","_ref","blockInteraction","children","debounceMs","isOpen","value","debouncedIsOpen","className","style","backgroundColor","cloneElement"],"sources":["../../src/modal/DebouncedModal.tsx"],"sourcesContent":["import React from 'react';\nimport { useDebouncedValue } from '@deephaven/react-hooks';\n\nexport type DebouncedModalProps = {\n /** Whether to block interaction immediately */\n blockInteraction?: boolean;\n\n /** Children to render after the alloted debounce time */\n children: React.ReactElement;\n\n /** Time to debounce */\n debounceMs: number;\n\n /**\n * Will render the `children` `debounceMs` after `isOpen` is set to `true.\n * Will stop rendering immediately after `isOpen` is set to `false`.\n */\n isOpen?: boolean;\n};\n\n/**\n * Display a modal after a debounce time. Blocks the screen from interaction immediately,\n * but then waits the set debounce time before rendering the modal.\n */\nfunction DebouncedModal({\n blockInteraction = true,\n children,\n debounceMs,\n isOpen = false,\n}: DebouncedModalProps): JSX.Element {\n const { value: debouncedIsOpen } = useDebouncedValue(isOpen, debounceMs);\n\n return (\n <>\n {blockInteraction && isOpen && (\n <div\n className=\"modal-backdrop\"\n style={{ backgroundColor: 'transparent' }}\n data-testid=\"debounced-modal-backdrop\"\n />\n )}\n {React.cloneElement(children, { isOpen: isOpen && debouncedIsOpen })}\n </>\n );\n}\n\nexport default DebouncedModal;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,iBAAiB,QAAQ,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA
|
|
1
|
+
{"version":3,"file":"DebouncedModal.js","names":["React","useDebouncedValue","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DebouncedModal","_ref","blockInteraction","children","debounceMs","isOpen","value","debouncedIsOpen","className","style","backgroundColor","cloneElement"],"sources":["../../src/modal/DebouncedModal.tsx"],"sourcesContent":["import React from 'react';\nimport { useDebouncedValue } from '@deephaven/react-hooks';\n\nexport type DebouncedModalProps = {\n /** Whether to block interaction immediately */\n blockInteraction?: boolean;\n\n /** Children to render after the alloted debounce time */\n children: React.ReactElement;\n\n /** Time to debounce */\n debounceMs: number;\n\n /**\n * Will render the `children` `debounceMs` after `isOpen` is set to `true.\n * Will stop rendering immediately after `isOpen` is set to `false`.\n */\n isOpen?: boolean;\n};\n\n/**\n * Display a modal after a debounce time. Blocks the screen from interaction immediately,\n * but then waits the set debounce time before rendering the modal.\n */\nfunction DebouncedModal({\n blockInteraction = true,\n children,\n debounceMs,\n isOpen = false,\n}: DebouncedModalProps): JSX.Element {\n const { value: debouncedIsOpen } = useDebouncedValue(isOpen, debounceMs);\n\n return (\n <>\n {blockInteraction && isOpen && (\n <div\n className=\"modal-backdrop\"\n style={{ backgroundColor: 'transparent' }}\n data-testid=\"debounced-modal-backdrop\"\n />\n )}\n {React.cloneElement(children, { isOpen: isOpen && debouncedIsOpen })}\n </>\n );\n}\n\nexport default DebouncedModal;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,iBAAiB,QAAQ,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAmB3D;AACA;AACA;AACA;AACA,SAASC,cAAcA,CAAAC,IAAA,EAKc;EAAA,IALb;IACtBC,gBAAgB,GAAG,IAAI;IACvBC,QAAQ;IACRC,UAAU;IACVC,MAAM,GAAG;EACU,CAAC,GAAAJ,IAAA;EACpB,IAAM;IAAEK,KAAK,EAAEC;EAAgB,CAAC,GAAGd,iBAAiB,CAACY,MAAM,EAAED,UAAU,CAAC;EAExE,oBACEL,KAAA,CAAAF,SAAA;IAAAM,QAAA,GACGD,gBAAgB,IAAIG,MAAM,iBACzBV,IAAA;MACEa,SAAS,EAAC,gBAAgB;MAC1BC,KAAK,EAAE;QAAEC,eAAe,EAAE;MAAc,CAAE;MAC1C,eAAY;IAA0B,CACvC,CACF,eACAlB,KAAK,CAACmB,YAAY,CAACR,QAAQ,EAAE;MAAEE,MAAM,EAAEA,MAAM,IAAIE;IAAgB,CAAC,CAAC;EAAA,CACpE,CAAC;AAEP;AAEA,eAAeP,cAAc","ignoreList":[]}
|
package/dist/modal/InfoModal.js
CHANGED
|
@@ -3,8 +3,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
|
3
3
|
import Modal from "./Modal.js";
|
|
4
4
|
import ModalBody from "./ModalBody.js";
|
|
5
5
|
import "./InfoModal.css";
|
|
6
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
7
|
/**
|
|
9
8
|
* A modal that displays a message with an icon. Can be used for informational messages, warnings, or errors.
|
|
10
9
|
* Does not have any buttons and cannot be dismissed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InfoModal.js","names":["React","FontAwesomeIcon","Modal","ModalBody","jsx","_jsx","jsxs","_jsxs","InfoModal","_ref","className","icon","isOpen","subtitle","title","children"],"sources":["../../src/modal/InfoModal.tsx"],"sourcesContent":["import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconProp } from '@fortawesome/fontawesome-svg-core';\nimport Modal from './Modal';\nimport ModalBody from './ModalBody';\nimport './InfoModal.scss';\n\ntype InfoModalProps = {\n /** Class name to give the info modal */\n className?: string;\n\n /** Icon to display in the modal */\n icon?: IconProp;\n\n /** Title to display in the modal */\n title: React.ReactNode;\n\n /** Subtitle/detail to display in the modal */\n subtitle?: React.ReactNode;\n\n /** Whether the modal is open/visible or not. */\n isOpen?: boolean;\n};\n\n/**\n * A modal that displays a message with an icon. Can be used for informational messages, warnings, or errors.\n * Does not have any buttons and cannot be dismissed.\n */\nfunction InfoModal({\n className,\n icon,\n isOpen = false,\n subtitle,\n title,\n}: InfoModalProps): JSX.Element {\n return (\n <Modal isOpen={isOpen} className={className}>\n <ModalBody>\n <div className=\"info-modal\">\n {icon != null && (\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"message-header\">{title}</div>\n {subtitle != null && (\n <div className=\"message-content\">{subtitle}</div>\n )}\n </div>\n </ModalBody>\n </Modal>\n );\n}\n\nexport default InfoModal;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,eAAe,QAAQ,gCAAgC;AAAC,OAE1DC,KAAK;AAAA,OACLC,SAAS;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA
|
|
1
|
+
{"version":3,"file":"InfoModal.js","names":["React","FontAwesomeIcon","Modal","ModalBody","jsx","_jsx","jsxs","_jsxs","InfoModal","_ref","className","icon","isOpen","subtitle","title","children"],"sources":["../../src/modal/InfoModal.tsx"],"sourcesContent":["import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconProp } from '@fortawesome/fontawesome-svg-core';\nimport Modal from './Modal';\nimport ModalBody from './ModalBody';\nimport './InfoModal.scss';\n\ntype InfoModalProps = {\n /** Class name to give the info modal */\n className?: string;\n\n /** Icon to display in the modal */\n icon?: IconProp;\n\n /** Title to display in the modal */\n title: React.ReactNode;\n\n /** Subtitle/detail to display in the modal */\n subtitle?: React.ReactNode;\n\n /** Whether the modal is open/visible or not. */\n isOpen?: boolean;\n};\n\n/**\n * A modal that displays a message with an icon. Can be used for informational messages, warnings, or errors.\n * Does not have any buttons and cannot be dismissed.\n */\nfunction InfoModal({\n className,\n icon,\n isOpen = false,\n subtitle,\n title,\n}: InfoModalProps): JSX.Element {\n return (\n <Modal isOpen={isOpen} className={className}>\n <ModalBody>\n <div className=\"info-modal\">\n {icon != null && (\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"message-header\">{title}</div>\n {subtitle != null && (\n <div className=\"message-content\">{subtitle}</div>\n )}\n </div>\n </ModalBody>\n </Modal>\n );\n}\n\nexport default InfoModal;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,eAAe,QAAQ,gCAAgC;AAAC,OAE1DC,KAAK;AAAA,OACLC,SAAS;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAoBhB;AACA;AACA;AACA;AACA,SAASC,SAASA,CAAAC,IAAA,EAMc;EAAA,IANb;IACjBC,SAAS;IACTC,IAAI;IACJC,MAAM,GAAG,KAAK;IACdC,QAAQ;IACRC;EACc,CAAC,GAAAL,IAAA;EACf,oBACEJ,IAAA,CAACH,KAAK;IAACU,MAAM,EAAEA,MAAO;IAACF,SAAS,EAAEA,SAAU;IAAAK,QAAA,eAC1CV,IAAA,CAACF,SAAS;MAAAY,QAAA,eACRR,KAAA;QAAKG,SAAS,EAAC,YAAY;QAAAK,QAAA,GACxBJ,IAAI,IAAI,IAAI,iBACXN,IAAA;UAAKK,SAAS,EAAC,cAAc;UAAAK,QAAA,eAC3BV,IAAA,CAACJ,eAAe;YAACU,IAAI,EAAEA;UAAK,CAAE;QAAC,CAC5B,CACN,eACDN,IAAA;UAAKK,SAAS,EAAC,gBAAgB;UAAAK,QAAA,EAAED;QAAK,CAAM,CAAC,EAC5CD,QAAQ,IAAI,IAAI,iBACfR,IAAA;UAAKK,SAAS,EAAC,iBAAiB;UAAAK,QAAA,EAAEF;QAAQ,CAAM,CACjD;MAAA,CACE;IAAC,CACG;EAAC,CACP,CAAC;AAEZ;AAEA,eAAeL,SAAS","ignoreList":[]}
|
package/dist/modal/Modal.js
CHANGED
|
@@ -4,8 +4,7 @@ import ReactDOM from 'react-dom';
|
|
|
4
4
|
import { CSSTransition } from 'react-transition-group';
|
|
5
5
|
import ThemeExport from "../ThemeExport.js";
|
|
6
6
|
import { SpectrumThemeProvider } from "../theme/SpectrumThemeProvider.js";
|
|
7
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
8
|
function Modal(_ref) {
|
|
10
9
|
var {
|
|
11
10
|
className,
|
|
@@ -27,7 +26,7 @@ function Modal(_ref) {
|
|
|
27
26
|
var handleKeyDown = useCallback(event => {
|
|
28
27
|
switch (event.key) {
|
|
29
28
|
case 'Escape':
|
|
30
|
-
toggle === null || toggle === void 0
|
|
29
|
+
toggle === null || toggle === void 0 || toggle();
|
|
31
30
|
break;
|
|
32
31
|
default:
|
|
33
32
|
break;
|
package/dist/modal/Modal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","names":["classNames","React","useCallback","useEffect","useRef","useState","ReactDOM","CSSTransition","ThemeExport","SpectrumThemeProvider","jsx","_jsx","jsxs","_jsxs","Modal","_ref","className","children","role","keyboard","clickOutside","isOpen","centered","size","onOpened","onClosed","toggle","dataTestId","element","background","backgroundClicked","setBackgroundClicked","handleKeyDown","event","key","addKeydownEventListener","window","addEventListener","removeEventListener","open","closed","current","document","createElement","setAttribute","body","appendChild","onExited","removeChild","undefined","createPortal","isPortal","zIndex","position","appear","mountOnEnter","unmountOnExit","in","appearActive","appearDone","timeout","transitionMs","style","ref","onMouseDown","e","target","onMouseUp","display"],"sources":["../../src/modal/Modal.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React, {\n type ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\nimport ThemeExport from '../ThemeExport';\nimport { SpectrumThemeProvider } from '../theme/SpectrumThemeProvider';\n\ninterface ModalProps {\n className?: string;\n children?: ReactNode;\n role?: string;\n keyboard?: boolean;\n clickOutside?: boolean;\n isOpen?: boolean;\n centered?: boolean;\n size?: 'sm' | 'lg' | 'xl' | undefined;\n onOpened?: () => void;\n onClosed?: () => void;\n toggle?: () => void;\n 'data-testid'?: string;\n}\n\nfunction Modal({\n className,\n children,\n role = 'role',\n keyboard = true,\n clickOutside = true,\n isOpen = false,\n centered = false,\n size,\n onOpened,\n onClosed,\n toggle,\n 'data-testid': dataTestId,\n}: ModalProps): React.ReactElement | null {\n const element = useRef<HTMLElement>();\n const background = useRef<HTMLDivElement>(null);\n const [backgroundClicked, setBackgroundClicked] = useState(false);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'Escape':\n toggle?.();\n break;\n default:\n break;\n }\n },\n [toggle]\n );\n\n useEffect(\n function addKeydownEventListener() {\n if (isOpen && keyboard) {\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }\n },\n [handleKeyDown, isOpen, keyboard]\n );\n\n useEffect(\n function open() {\n if (isOpen && onOpened) {\n onOpened();\n }\n },\n [onOpened, isOpen]\n );\n\n useEffect(\n function closed() {\n if (!isOpen && onClosed) {\n onClosed();\n }\n },\n [onClosed, isOpen]\n );\n\n if (isOpen && !element.current) {\n element.current = document.createElement('div');\n element.current.setAttribute(\n 'style',\n 'padding-right: 15px; display: block'\n );\n element.current.setAttribute('role', 'presentation');\n document.body.appendChild(element.current);\n }\n\n const onExited = (): void => {\n if (element.current) {\n document.body.removeChild(element.current);\n element.current = undefined;\n }\n };\n\n return element.current\n ? ReactDOM.createPortal(\n // Without the zIndex and position props\n // the modal is rendered on top of nested DatePicker popovers\n <SpectrumThemeProvider isPortal zIndex={0} position=\"relative\">\n <CSSTransition\n appear\n mountOnEnter\n unmountOnExit\n in={isOpen}\n classNames={{\n appearActive: 'show',\n appearDone: 'show',\n }}\n timeout={ThemeExport.transitionMs}\n onExited={onExited}\n >\n <div\n className={classNames('modal-backdrop fade')}\n style={{ zIndex: 1050 }}\n />\n </CSSTransition>\n <CSSTransition\n appear\n mountOnEnter\n unmountOnExit\n in={isOpen}\n classNames={{\n appearDone: 'show',\n }}\n timeout={ThemeExport.transitionMs}\n onExited={onExited}\n >\n <div\n ref={background}\n className=\"modal fade\"\n onMouseDown={e => {\n if (e.target === background.current) {\n setBackgroundClicked(true);\n } else {\n setBackgroundClicked(false);\n }\n }}\n onMouseUp={e => {\n if (\n backgroundClicked &&\n clickOutside &&\n e.target === background.current &&\n toggle !== undefined\n ) {\n toggle();\n }\n }}\n role=\"dialog\"\n style={{ display: 'block' }}\n >\n <div\n className={classNames('modal-dialog', className, {\n 'modal-lg': size === 'lg',\n 'modal-sm': size === 'sm',\n 'modal-xl': size === 'xl',\n 'modal-dialog-centered': centered,\n })}\n style={{ zIndex: 1040 }}\n >\n <div\n className=\"modal-content\"\n role=\"presentation\"\n data-testid={dataTestId}\n >\n {children}\n </div>\n </div>\n </div>\n </CSSTransition>\n </SpectrumThemeProvider>,\n element.current\n )\n : null;\n}\n\nexport default Modal;\n"],"mappings":"AAAA,OAAOA,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAEVC,WAAW,EACXC,SAAS,EACTC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,OAAOC,QAAQ,MAAM,WAAW;AAChC,SAASC,aAAa,QAAQ,wBAAwB;AAAC,OAChDC,WAAW;AAAA,SACTC,qBAAqB;AAAA,SAAAC,GAAA,IAAAC,IAAA
|
|
1
|
+
{"version":3,"file":"Modal.js","names":["classNames","React","useCallback","useEffect","useRef","useState","ReactDOM","CSSTransition","ThemeExport","SpectrumThemeProvider","jsx","_jsx","jsxs","_jsxs","Modal","_ref","className","children","role","keyboard","clickOutside","isOpen","centered","size","onOpened","onClosed","toggle","dataTestId","element","background","backgroundClicked","setBackgroundClicked","handleKeyDown","event","key","addKeydownEventListener","window","addEventListener","removeEventListener","open","closed","current","document","createElement","setAttribute","body","appendChild","onExited","removeChild","undefined","createPortal","isPortal","zIndex","position","appear","mountOnEnter","unmountOnExit","in","appearActive","appearDone","timeout","transitionMs","style","ref","onMouseDown","e","target","onMouseUp","display"],"sources":["../../src/modal/Modal.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React, {\n type ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\nimport ThemeExport from '../ThemeExport';\nimport { SpectrumThemeProvider } from '../theme/SpectrumThemeProvider';\n\ninterface ModalProps {\n className?: string;\n children?: ReactNode;\n role?: string;\n keyboard?: boolean;\n clickOutside?: boolean;\n isOpen?: boolean;\n centered?: boolean;\n size?: 'sm' | 'lg' | 'xl' | undefined;\n onOpened?: () => void;\n onClosed?: () => void;\n toggle?: () => void;\n 'data-testid'?: string;\n}\n\nfunction Modal({\n className,\n children,\n role = 'role',\n keyboard = true,\n clickOutside = true,\n isOpen = false,\n centered = false,\n size,\n onOpened,\n onClosed,\n toggle,\n 'data-testid': dataTestId,\n}: ModalProps): React.ReactElement | null {\n const element = useRef<HTMLElement>();\n const background = useRef<HTMLDivElement>(null);\n const [backgroundClicked, setBackgroundClicked] = useState(false);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'Escape':\n toggle?.();\n break;\n default:\n break;\n }\n },\n [toggle]\n );\n\n useEffect(\n function addKeydownEventListener() {\n if (isOpen && keyboard) {\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }\n },\n [handleKeyDown, isOpen, keyboard]\n );\n\n useEffect(\n function open() {\n if (isOpen && onOpened) {\n onOpened();\n }\n },\n [onOpened, isOpen]\n );\n\n useEffect(\n function closed() {\n if (!isOpen && onClosed) {\n onClosed();\n }\n },\n [onClosed, isOpen]\n );\n\n if (isOpen && !element.current) {\n element.current = document.createElement('div');\n element.current.setAttribute(\n 'style',\n 'padding-right: 15px; display: block'\n );\n element.current.setAttribute('role', 'presentation');\n document.body.appendChild(element.current);\n }\n\n const onExited = (): void => {\n if (element.current) {\n document.body.removeChild(element.current);\n element.current = undefined;\n }\n };\n\n return element.current\n ? ReactDOM.createPortal(\n // Without the zIndex and position props\n // the modal is rendered on top of nested DatePicker popovers\n <SpectrumThemeProvider isPortal zIndex={0} position=\"relative\">\n <CSSTransition\n appear\n mountOnEnter\n unmountOnExit\n in={isOpen}\n classNames={{\n appearActive: 'show',\n appearDone: 'show',\n }}\n timeout={ThemeExport.transitionMs}\n onExited={onExited}\n >\n <div\n className={classNames('modal-backdrop fade')}\n style={{ zIndex: 1050 }}\n />\n </CSSTransition>\n <CSSTransition\n appear\n mountOnEnter\n unmountOnExit\n in={isOpen}\n classNames={{\n appearDone: 'show',\n }}\n timeout={ThemeExport.transitionMs}\n onExited={onExited}\n >\n <div\n ref={background}\n className=\"modal fade\"\n onMouseDown={e => {\n if (e.target === background.current) {\n setBackgroundClicked(true);\n } else {\n setBackgroundClicked(false);\n }\n }}\n onMouseUp={e => {\n if (\n backgroundClicked &&\n clickOutside &&\n e.target === background.current &&\n toggle !== undefined\n ) {\n toggle();\n }\n }}\n role=\"dialog\"\n style={{ display: 'block' }}\n >\n <div\n className={classNames('modal-dialog', className, {\n 'modal-lg': size === 'lg',\n 'modal-sm': size === 'sm',\n 'modal-xl': size === 'xl',\n 'modal-dialog-centered': centered,\n })}\n style={{ zIndex: 1040 }}\n >\n <div\n className=\"modal-content\"\n role=\"presentation\"\n data-testid={dataTestId}\n >\n {children}\n </div>\n </div>\n </div>\n </CSSTransition>\n </SpectrumThemeProvider>,\n element.current\n )\n : null;\n}\n\nexport default Modal;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalBody.js","names":["React","classNames","jsx","_jsx","ModalBody","_ref","className","style","children","dataTestId"],"sources":["../../src/modal/ModalBody.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport classNames from 'classnames';\n\ninterface ModalBodyProps {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nfunction ModalBody({\n className,\n style,\n children,\n 'data-testid': dataTestId,\n}: ModalBodyProps): ReactElement {\n return (\n <div\n className={classNames('modal-body', className)}\n data-testid={dataTestId}\n style={style}\n >\n {children}\n </div>\n );\n}\n\nexport default ModalBody;\n"],"mappings":"AAAA,OAAOA,KAAK,MAIL,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AASpC,SAASC,SAASA,CAAAC,IAAA,EAKe;EAAA,IALd;IACjBC,SAAS;IACTC,KAAK;IACLC,QAAQ;IACR,aAAa,EAAEC;EACD,CAAC,GAAAJ,IAAA;EACf,oBACEF,IAAA;IACEG,SAAS,EAAEL,UAAU,CAAC,YAAY,EAAEK,SAAS,CAAE;IAC/C,eAAaG,UAAW;IACxBF,KAAK,EAAEA,KAAM;IAAAC,QAAA,EAEZA;EAAQ,CACN,CAAC;AAEV;AAEA,eAAeJ,SAAS"}
|
|
1
|
+
{"version":3,"file":"ModalBody.js","names":["React","classNames","jsx","_jsx","ModalBody","_ref","className","style","children","dataTestId"],"sources":["../../src/modal/ModalBody.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport classNames from 'classnames';\n\ninterface ModalBodyProps {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nfunction ModalBody({\n className,\n style,\n children,\n 'data-testid': dataTestId,\n}: ModalBodyProps): ReactElement {\n return (\n <div\n className={classNames('modal-body', className)}\n data-testid={dataTestId}\n style={style}\n >\n {children}\n </div>\n );\n}\n\nexport default ModalBody;\n"],"mappings":"AAAA,OAAOA,KAAK,MAIL,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AASpC,SAASC,SAASA,CAAAC,IAAA,EAKe;EAAA,IALd;IACjBC,SAAS;IACTC,KAAK;IACLC,QAAQ;IACR,aAAa,EAAEC;EACD,CAAC,GAAAJ,IAAA;EACf,oBACEF,IAAA;IACEG,SAAS,EAAEL,UAAU,CAAC,YAAY,EAAEK,SAAS,CAAE;IAC/C,eAAaG,UAAW;IACxBF,KAAK,EAAEA,KAAM;IAAAC,QAAA,EAEZA;EAAQ,CACN,CAAC;AAEV;AAEA,eAAeJ,SAAS","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalFooter.js","names":["React","classNames","jsx","_jsx","ModalFooter","_ref","className","children","dataTestId"],"sources":["../../src/modal/ModalFooter.tsx"],"sourcesContent":["import React, { type ReactElement, type ReactNode } from 'react';\nimport classNames from 'classnames';\n\ninterface ModalFooterProps {\n className?: string;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nfunction ModalFooter({\n className,\n children,\n 'data-testid': dataTestId,\n}: ModalFooterProps): ReactElement {\n return (\n <div\n className={classNames('modal-footer', className)}\n data-testid={dataTestId}\n >\n {children}\n </div>\n );\n}\n\nexport default ModalFooter;\n"],"mappings":"AAAA,OAAOA,KAAK,MAA6C,OAAO;AAChE,OAAOC,UAAU,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQpC,SAASC,WAAWA,CAAAC,IAAA,EAIe;EAAA,IAJd;IACnBC,SAAS;IACTC,QAAQ;IACR,aAAa,EAAEC;EACC,CAAC,GAAAH,IAAA;EACjB,oBACEF,IAAA;IACEG,SAAS,EAAEL,UAAU,CAAC,cAAc,EAAEK,SAAS,CAAE;IACjD,eAAaE,UAAW;IAAAD,QAAA,EAEvBA;EAAQ,CACN,CAAC;AAEV;AAEA,eAAeH,WAAW"}
|
|
1
|
+
{"version":3,"file":"ModalFooter.js","names":["React","classNames","jsx","_jsx","ModalFooter","_ref","className","children","dataTestId"],"sources":["../../src/modal/ModalFooter.tsx"],"sourcesContent":["import React, { type ReactElement, type ReactNode } from 'react';\nimport classNames from 'classnames';\n\ninterface ModalFooterProps {\n className?: string;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nfunction ModalFooter({\n className,\n children,\n 'data-testid': dataTestId,\n}: ModalFooterProps): ReactElement {\n return (\n <div\n className={classNames('modal-footer', className)}\n data-testid={dataTestId}\n >\n {children}\n </div>\n );\n}\n\nexport default ModalFooter;\n"],"mappings":"AAAA,OAAOA,KAAK,MAA6C,OAAO;AAChE,OAAOC,UAAU,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQpC,SAASC,WAAWA,CAAAC,IAAA,EAIe;EAAA,IAJd;IACnBC,SAAS;IACTC,QAAQ;IACR,aAAa,EAAEC;EACC,CAAC,GAAAH,IAAA;EACjB,oBACEF,IAAA;IACEG,SAAS,EAAEL,UAAU,CAAC,cAAc,EAAEK,SAAS,CAAE;IACjD,eAAaE,UAAW;IAAAD,QAAA,EAEvBA;EAAQ,CACN,CAAC;AAEV;AAEA,eAAeH,WAAW","ignoreList":[]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import classNames from 'classnames';
|
|
3
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
4
|
function ModalHeader(_ref) {
|
|
6
5
|
var {
|
|
7
6
|
className,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalHeader.js","names":["React","classNames","jsx","_jsx","jsxs","_jsxs","ModalHeader","_ref","className","children","closeButton","style","toggle","dataTestId","type","onClick"],"sources":["../../src/modal/ModalHeader.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport classNames from 'classnames';\n\ninterface ModalHeaderProps {\n className?: string;\n children?: ReactNode;\n closeButton?: boolean;\n style?: CSSProperties;\n toggle?: () => void;\n 'data-testid'?: string;\n}\n\nfunction ModalHeader({\n className,\n children,\n closeButton = true,\n style,\n toggle,\n 'data-testid': dataTestId,\n}: ModalHeaderProps): ReactElement {\n return (\n <div className={classNames('modal-header', className)} style={style}>\n <h5 className=\"modal-title\">{children}</h5>\n {closeButton && (\n <button\n type=\"button\"\n className=\"close\"\n data-dismiss=\"modal\"\n aria-label=\"Close\"\n onClick={toggle}\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n )}\n </div>\n );\n}\n\nexport default ModalHeader;\n"],"mappings":"AAAA,OAAOA,KAAK,MAIL,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA
|
|
1
|
+
{"version":3,"file":"ModalHeader.js","names":["React","classNames","jsx","_jsx","jsxs","_jsxs","ModalHeader","_ref","className","children","closeButton","style","toggle","dataTestId","type","onClick"],"sources":["../../src/modal/ModalHeader.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport classNames from 'classnames';\n\ninterface ModalHeaderProps {\n className?: string;\n children?: ReactNode;\n closeButton?: boolean;\n style?: CSSProperties;\n toggle?: () => void;\n 'data-testid'?: string;\n}\n\nfunction ModalHeader({\n className,\n children,\n closeButton = true,\n style,\n toggle,\n 'data-testid': dataTestId,\n}: ModalHeaderProps): ReactElement {\n return (\n <div className={classNames('modal-header', className)} style={style}>\n <h5 className=\"modal-title\">{children}</h5>\n {closeButton && (\n <button\n type=\"button\"\n className=\"close\"\n data-dismiss=\"modal\"\n aria-label=\"Close\"\n onClick={toggle}\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n )}\n </div>\n );\n}\n\nexport default ModalHeader;\n"],"mappings":"AAAA,OAAOA,KAAK,MAIL,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAWpC,SAASC,WAAWA,CAAAC,IAAA,EAOe;EAAA,IAPd;IACnBC,SAAS;IACTC,QAAQ;IACRC,WAAW,GAAG,IAAI;IAClBC,KAAK;IACLC,MAAM;IACN,aAAa,EAAEC;EACC,CAAC,GAAAN,IAAA;EACjB,oBACEF,KAAA;IAAKG,SAAS,EAAEP,UAAU,CAAC,cAAc,EAAEO,SAAS,CAAE;IAACG,KAAK,EAAEA,KAAM;IAAAF,QAAA,gBAClEN,IAAA;MAAIK,SAAS,EAAC,aAAa;MAAAC,QAAA,EAAEA;IAAQ,CAAK,CAAC,EAC1CC,WAAW,iBACVP,IAAA;MACEW,IAAI,EAAC,QAAQ;MACbN,SAAS,EAAC,OAAO;MACjB,gBAAa,OAAO;MACpB,cAAW,OAAO;MAClBO,OAAO,EAAEH,MAAO;MAAAH,QAAA,eAEhBN,IAAA;QAAM,eAAY,MAAM;QAAAM,QAAA,EAAC;MAAO,CAAM;IAAC,CACjC,CACT;EAAA,CACE,CAAC;AAEV;AAEA,eAAeH,WAAW","ignoreList":[]}
|
package/dist/modal/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default","DebouncedModal","InfoModal","Modal","ModalBody","ModalHeader","ModalFooter"],"sources":["../../src/modal/index.ts"],"sourcesContent":["export { default as DebouncedModal } from './DebouncedModal';\nexport { default as InfoModal } from './InfoModal';\nexport { default as Modal } from './Modal';\nexport { default as ModalBody } from './ModalBody';\nexport { default as ModalHeader } from './ModalHeader';\nexport { default as ModalFooter } from './ModalFooter';\n"],"mappings":"SAASA,OAAO,IAAIC,cAAc;AAAA,SACzBD,OAAO,IAAIE,SAAS;AAAA,SACpBF,OAAO,IAAIG,KAAK;AAAA,SAChBH,OAAO,IAAII,SAAS;AAAA,SACpBJ,OAAO,IAAIK,WAAW;AAAA,SACtBL,OAAO,IAAIM,WAAW"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","DebouncedModal","InfoModal","Modal","ModalBody","ModalHeader","ModalFooter"],"sources":["../../src/modal/index.ts"],"sourcesContent":["export { default as DebouncedModal } from './DebouncedModal';\nexport { default as InfoModal } from './InfoModal';\nexport { default as Modal } from './Modal';\nexport { default as ModalBody } from './ModalBody';\nexport { default as ModalHeader } from './ModalHeader';\nexport { default as ModalFooter } from './ModalFooter';\n"],"mappings":"SAASA,OAAO,IAAIC,cAAc;AAAA,SACzBD,OAAO,IAAIE,SAAS;AAAA,SACpBF,OAAO,IAAIG,KAAK;AAAA,SAChBH,OAAO,IAAII,SAAS;AAAA,SACpBJ,OAAO,IAAIK,WAAW;AAAA,SACtBL,OAAO,IAAIM,WAAW","ignoreList":[]}
|
|
@@ -5,8 +5,7 @@ import { Button } from "../Button.js";
|
|
|
5
5
|
import SearchInput from "../SearchInput.js";
|
|
6
6
|
import "./DashboardList.css";
|
|
7
7
|
import { GLOBAL_SHORTCUTS } from "../shortcuts/index.js";
|
|
8
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
9
|
/**
|
|
11
10
|
* Display a search field and a list of dashboard tabs
|
|
12
11
|
* @param props The tabs and handlers to use for this list
|
|
@@ -24,7 +23,7 @@ export function DashboardList(props) {
|
|
|
24
23
|
var itemRefs = useRef([]);
|
|
25
24
|
useEffect(() => {
|
|
26
25
|
var _searchField$current;
|
|
27
|
-
(_searchField$current = searchField.current) === null || _searchField$current === void 0
|
|
26
|
+
(_searchField$current = searchField.current) === null || _searchField$current === void 0 || _searchField$current.focus();
|
|
28
27
|
}, []);
|
|
29
28
|
useEffect(() => {
|
|
30
29
|
setFocusedIndex(0);
|
|
@@ -32,7 +31,7 @@ export function DashboardList(props) {
|
|
|
32
31
|
useEffect(() => {
|
|
33
32
|
if (focusedIndex >= 0 && itemRefs.current[focusedIndex]) {
|
|
34
33
|
var _itemRefs$current$foc;
|
|
35
|
-
(_itemRefs$current$foc = itemRefs.current[focusedIndex]) === null || _itemRefs$current$foc === void 0
|
|
34
|
+
(_itemRefs$current$foc = itemRefs.current[focusedIndex]) === null || _itemRefs$current$foc === void 0 || _itemRefs$current$foc.scrollIntoView({
|
|
36
35
|
behavior: 'auto',
|
|
37
36
|
block: 'nearest'
|
|
38
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardList.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","FontAwesomeIcon","EMPTY_ARRAY","Button","SearchInput","GLOBAL_SHORTCUTS","jsx","_jsx","jsxs","_jsxs","DashboardList","props","onSelect","tabs","searchText","setSearchText","focusedIndex","setFocusedIndex","searchField","listRef","itemRefs","_searchField$current","current","focus","_itemRefs$current$foc","scrollIntoView","behavior","block","handleSearchChange","e","target","value","handleTabSelect","tab","handleMouseDown","event","preventDefault","filteredTabs","filter","title","toLowerCase","includes","sort","a","b","_a$title$localeCompar","localeCompare","handleSearchKeyDown","key","length","prev","selectedIndex","tabElements","map","index","_tab$key","ref","el","onMouseDown","children","kind","concat","onClick","className","style","transition","icon","isValidElement","errorElement","placeholder","endPlaceholder","OPEN_DASHBOARD_LIST","getDisplayText","onChange","onKeyDown"],"sources":["../../src/navigation/DashboardList.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\nimport { Button } from '../Button';\nimport SearchInput from '../SearchInput';\nimport type { NavTabItem } from './NavTabList';\nimport './DashboardList.scss';\nimport { GLOBAL_SHORTCUTS } from '../shortcuts';\n\nexport interface DashboardListProps {\n onSelect: (tab: NavTabItem) => void;\n tabs?: NavTabItem[];\n}\n\n/**\n * Display a search field and a list of dashboard tabs\n * @param props The tabs and handlers to use for this list\n * @returns A JSX element for the list of dashboard tabs, along with search\n */\nexport function DashboardList(props: DashboardListProps): JSX.Element {\n const { onSelect, tabs = EMPTY_ARRAY } = props;\n const [searchText, setSearchText] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(0);\n const searchField = useRef<SearchInput>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const itemRefs = useRef<(HTMLLIElement | null)[]>([]);\n\n useEffect(() => {\n searchField.current?.focus();\n }, []);\n\n useEffect(() => {\n setFocusedIndex(0);\n }, [searchText]);\n\n useEffect(() => {\n if (focusedIndex >= 0 && itemRefs.current[focusedIndex]) {\n itemRefs.current[focusedIndex]?.scrollIntoView({\n behavior: 'auto',\n block: 'nearest',\n });\n }\n }, [focusedIndex]);\n\n const handleSearchChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n setSearchText(e.target.value);\n }, []);\n\n const handleTabSelect = useCallback(\n (tab: NavTabItem) => {\n onSelect(tab);\n },\n [onSelect]\n );\n\n const handleMouseDown = useCallback((event: React.MouseEvent) => {\n // Prevent mousedown from taking focus away from the search input\n event.preventDefault();\n }, []);\n\n const filteredTabs = useMemo(\n () =>\n tabs.filter(tab =>\n tab.title.toLowerCase().includes(searchText.toLowerCase())\n ),\n [searchText, tabs]\n ).sort((a, b) => a.title.localeCompare(b.title) ?? 0);\n\n const handleSearchKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === 'ArrowDown' && filteredTabs.length > 0) {\n event.preventDefault();\n setFocusedIndex(prev =>\n prev === -1 ? 0 : (prev + 1) % filteredTabs.length\n );\n } else if (event.key === 'ArrowUp' && filteredTabs.length > 0) {\n event.preventDefault();\n setFocusedIndex(prev => {\n if (prev === -1) return filteredTabs.length - 1;\n return (prev - 1 + filteredTabs.length) % filteredTabs.length;\n });\n } else if (event.key === 'Enter' && filteredTabs.length > 0) {\n event.preventDefault();\n const selectedIndex = focusedIndex >= 0 ? focusedIndex : 0;\n handleTabSelect(filteredTabs[selectedIndex]);\n } else if (event.key === 'Tab') {\n event.preventDefault();\n }\n },\n [filteredTabs, focusedIndex, handleTabSelect]\n );\n\n const tabElements = useMemo(\n () =>\n filteredTabs.map((tab, index) => (\n <li\n key={tab.key}\n ref={(el: HTMLLIElement | null) => {\n itemRefs.current[index] = el;\n }}\n onMouseDown={handleMouseDown}\n >\n <Button\n kind=\"ghost\"\n data-testid={`dashboard-list-item-${tab.key ?? ''}-button`}\n onClick={() => handleTabSelect(tab)}\n className={focusedIndex === index ? 'focused' : ''}\n style={{ transition: 'none' }}\n >\n {tab.icon ? (\n <span className=\"dashboard-list-item-icon\">\n {React.isValidElement(tab.icon) ? (\n tab.icon\n ) : (\n <FontAwesomeIcon icon={tab.icon as IconDefinition} />\n )}\n </span>\n ) : null}\n {tab.title}\n </Button>\n </li>\n )),\n [filteredTabs, handleTabSelect, focusedIndex, handleMouseDown]\n );\n\n const errorElement = useMemo(\n () =>\n tabElements.length === 0 ? <span>No open dashboard found.</span> : null,\n [tabElements]\n );\n\n return (\n <div className=\"dashboard-list-container d-flex flex-column\">\n <div className=\"dashboard-list-header\">\n <SearchInput\n value={searchText}\n placeholder=\"Find open dashboard\"\n endPlaceholder={GLOBAL_SHORTCUTS.OPEN_DASHBOARD_LIST.getDisplayText()}\n onChange={handleSearchChange}\n onKeyDown={handleSearchKeyDown}\n ref={searchField}\n />\n </div>\n <ul className=\"dashboard-list flex-grow-1\" ref={listRef}>\n {errorElement && (\n <li className=\"dashboard-list-message\">{errorElement}</li>\n )}\n {!errorElement && tabElements}\n </ul>\n </div>\n );\n}\n\nexport default DashboardList;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DashboardList.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","FontAwesomeIcon","EMPTY_ARRAY","Button","SearchInput","GLOBAL_SHORTCUTS","jsx","_jsx","jsxs","_jsxs","DashboardList","props","onSelect","tabs","searchText","setSearchText","focusedIndex","setFocusedIndex","searchField","listRef","itemRefs","_searchField$current","current","focus","_itemRefs$current$foc","scrollIntoView","behavior","block","handleSearchChange","e","target","value","handleTabSelect","tab","handleMouseDown","event","preventDefault","filteredTabs","filter","title","toLowerCase","includes","sort","a","b","_a$title$localeCompar","localeCompare","handleSearchKeyDown","key","length","prev","selectedIndex","tabElements","map","index","_tab$key","ref","el","onMouseDown","children","kind","concat","onClick","className","style","transition","icon","isValidElement","errorElement","placeholder","endPlaceholder","OPEN_DASHBOARD_LIST","getDisplayText","onChange","onKeyDown"],"sources":["../../src/navigation/DashboardList.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\nimport { Button } from '../Button';\nimport SearchInput from '../SearchInput';\nimport type { NavTabItem } from './NavTabList';\nimport './DashboardList.scss';\nimport { GLOBAL_SHORTCUTS } from '../shortcuts';\n\nexport interface DashboardListProps {\n onSelect: (tab: NavTabItem) => void;\n tabs?: NavTabItem[];\n}\n\n/**\n * Display a search field and a list of dashboard tabs\n * @param props The tabs and handlers to use for this list\n * @returns A JSX element for the list of dashboard tabs, along with search\n */\nexport function DashboardList(props: DashboardListProps): JSX.Element {\n const { onSelect, tabs = EMPTY_ARRAY } = props;\n const [searchText, setSearchText] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(0);\n const searchField = useRef<SearchInput>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const itemRefs = useRef<(HTMLLIElement | null)[]>([]);\n\n useEffect(() => {\n searchField.current?.focus();\n }, []);\n\n useEffect(() => {\n setFocusedIndex(0);\n }, [searchText]);\n\n useEffect(() => {\n if (focusedIndex >= 0 && itemRefs.current[focusedIndex]) {\n itemRefs.current[focusedIndex]?.scrollIntoView({\n behavior: 'auto',\n block: 'nearest',\n });\n }\n }, [focusedIndex]);\n\n const handleSearchChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n setSearchText(e.target.value);\n }, []);\n\n const handleTabSelect = useCallback(\n (tab: NavTabItem) => {\n onSelect(tab);\n },\n [onSelect]\n );\n\n const handleMouseDown = useCallback((event: React.MouseEvent) => {\n // Prevent mousedown from taking focus away from the search input\n event.preventDefault();\n }, []);\n\n const filteredTabs = useMemo(\n () =>\n tabs.filter(tab =>\n tab.title.toLowerCase().includes(searchText.toLowerCase())\n ),\n [searchText, tabs]\n ).sort((a, b) => a.title.localeCompare(b.title) ?? 0);\n\n const handleSearchKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === 'ArrowDown' && filteredTabs.length > 0) {\n event.preventDefault();\n setFocusedIndex(prev =>\n prev === -1 ? 0 : (prev + 1) % filteredTabs.length\n );\n } else if (event.key === 'ArrowUp' && filteredTabs.length > 0) {\n event.preventDefault();\n setFocusedIndex(prev => {\n if (prev === -1) return filteredTabs.length - 1;\n return (prev - 1 + filteredTabs.length) % filteredTabs.length;\n });\n } else if (event.key === 'Enter' && filteredTabs.length > 0) {\n event.preventDefault();\n const selectedIndex = focusedIndex >= 0 ? focusedIndex : 0;\n handleTabSelect(filteredTabs[selectedIndex]);\n } else if (event.key === 'Tab') {\n event.preventDefault();\n }\n },\n [filteredTabs, focusedIndex, handleTabSelect]\n );\n\n const tabElements = useMemo(\n () =>\n filteredTabs.map((tab, index) => (\n <li\n key={tab.key}\n ref={(el: HTMLLIElement | null) => {\n itemRefs.current[index] = el;\n }}\n onMouseDown={handleMouseDown}\n >\n <Button\n kind=\"ghost\"\n data-testid={`dashboard-list-item-${tab.key ?? ''}-button`}\n onClick={() => handleTabSelect(tab)}\n className={focusedIndex === index ? 'focused' : ''}\n style={{ transition: 'none' }}\n >\n {tab.icon ? (\n <span className=\"dashboard-list-item-icon\">\n {React.isValidElement(tab.icon) ? (\n tab.icon\n ) : (\n <FontAwesomeIcon icon={tab.icon as IconDefinition} />\n )}\n </span>\n ) : null}\n {tab.title}\n </Button>\n </li>\n )),\n [filteredTabs, handleTabSelect, focusedIndex, handleMouseDown]\n );\n\n const errorElement = useMemo(\n () =>\n tabElements.length === 0 ? <span>No open dashboard found.</span> : null,\n [tabElements]\n );\n\n return (\n <div className=\"dashboard-list-container d-flex flex-column\">\n <div className=\"dashboard-list-header\">\n <SearchInput\n value={searchText}\n placeholder=\"Find open dashboard\"\n endPlaceholder={GLOBAL_SHORTCUTS.OPEN_DASHBOARD_LIST.getDisplayText()}\n onChange={handleSearchChange}\n onKeyDown={handleSearchKeyDown}\n ref={searchField}\n />\n </div>\n <ul className=\"dashboard-list flex-grow-1\" ref={listRef}>\n {errorElement && (\n <li className=\"dashboard-list-message\">{errorElement}</li>\n )}\n {!errorElement && tabElements}\n </ul>\n </div>\n );\n}\n\nexport default DashboardList;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.js","names":["React","MenuItem","jsx","_jsx","Menu","_ref","items","onSelect","undefined","dataTestId","className","children","map","item","itemIndex","title"],"sources":["../../src/navigation/Menu.tsx"],"sourcesContent":["import React from 'react';\nimport MenuItem, { type MenuItemDef } from './MenuItem';\nimport './Menu.scss';\n\nexport type MenuSelectCallback = (itemIndex: number) => void;\n\nexport type MenuProps = {\n items: readonly MenuItemDef[];\n onSelect?: MenuSelectCallback;\n 'data-testid'?: string;\n};\n\nexport function Menu({\n items,\n onSelect = () => undefined,\n 'data-testid': dataTestId,\n}: MenuProps): JSX.Element {\n return (\n <div className=\"navigation-menu-view\" data-testid={dataTestId}>\n <ul className=\"navigation-menu-list\">\n {items.map((item, itemIndex) => (\n <li key={item.title}>\n <MenuItem\n item={item}\n onSelect={() => {\n onSelect(itemIndex);\n }}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nexport default Menu;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAAC,OACnBC,QAAQ;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAWf,OAAO,SAASC,IAAIA,CAAAC,IAAA,EAIO;EAAA,IAJN;IACnBC,KAAK;IACLC,QAAQ,EAARA,SAAQ,GAAGA,CAAA,KAAMC,SAAS;IAC1B,aAAa,EAAEC;EACN,CAAC,GAAAJ,IAAA;EACV,oBACEF,IAAA;IAAKO,SAAS,EAAC,sBAAsB;IAAC,eAAaD,UAAW;IAAAE,QAAA,eAC5DR,IAAA;MAAIO,SAAS,EAAC,sBAAsB;MAAAC,QAAA,EACjCL,KAAK,CAACM,GAAG,CAAC,CAACC,IAAI,EAAEC,SAAS,kBACzBX,IAAA;QAAAQ,QAAA,eACER,IAAA,CAACF,QAAQ;UACPY,IAAI,EAAEA,IAAK;UACXN,QAAQ,EAAEA,CAAA,KAAM;YACdA,SAAQ,CAACO,SAAS,CAAC;UACrB;QAAE,CACH;MAAC,GANKD,IAAI,CAACE,KAOV,CACL;IAAC,CACA;EAAC,CACF,CAAC;AAEV;AAEA,eAAeX,IAAI"}
|
|
1
|
+
{"version":3,"file":"Menu.js","names":["React","MenuItem","jsx","_jsx","Menu","_ref","items","onSelect","undefined","dataTestId","className","children","map","item","itemIndex","title"],"sources":["../../src/navigation/Menu.tsx"],"sourcesContent":["import React from 'react';\nimport MenuItem, { type MenuItemDef } from './MenuItem';\nimport './Menu.scss';\n\nexport type MenuSelectCallback = (itemIndex: number) => void;\n\nexport type MenuProps = {\n items: readonly MenuItemDef[];\n onSelect?: MenuSelectCallback;\n 'data-testid'?: string;\n};\n\nexport function Menu({\n items,\n onSelect = () => undefined,\n 'data-testid': dataTestId,\n}: MenuProps): JSX.Element {\n return (\n <div className=\"navigation-menu-view\" data-testid={dataTestId}>\n <ul className=\"navigation-menu-list\">\n {items.map((item, itemIndex) => (\n <li key={item.title}>\n <MenuItem\n item={item}\n onSelect={() => {\n onSelect(itemIndex);\n }}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nexport default Menu;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAAC,OACnBC,QAAQ;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAWf,OAAO,SAASC,IAAIA,CAAAC,IAAA,EAIO;EAAA,IAJN;IACnBC,KAAK;IACLC,QAAQ,EAARA,SAAQ,GAAGA,CAAA,KAAMC,SAAS;IAC1B,aAAa,EAAEC;EACN,CAAC,GAAAJ,IAAA;EACV,oBACEF,IAAA;IAAKO,SAAS,EAAC,sBAAsB;IAAC,eAAaD,UAAW;IAAAE,QAAA,eAC5DR,IAAA;MAAIO,SAAS,EAAC,sBAAsB;MAAAC,QAAA,EACjCL,KAAK,CAACM,GAAG,CAAC,CAACC,IAAI,EAAEC,SAAS,kBACzBX,IAAA;QAAAQ,QAAA,eACER,IAAA,CAACF,QAAQ;UACPY,IAAI,EAAEA,IAAK;UACXN,QAAQ,EAAEA,CAAA,KAAM;YACdA,SAAQ,CAACO,SAAS,CAAC;UACrB;QAAE,CACH;MAAC,GANKD,IAAI,CAACE,KAOV,CACL;IAAC,CACA;EAAC,CACF,CAAC;AAEV;AAEA,eAAeX,IAAI","ignoreList":[]}
|
|
@@ -3,8 +3,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
|
3
3
|
import { vsChevronRight } from '@deephaven/icons';
|
|
4
4
|
import "./MenuItem.css";
|
|
5
5
|
import UISwitch from "../UISwitch.js";
|
|
6
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
7
|
function isSwitchMenuItemType(item) {
|
|
9
8
|
return item.isOn !== undefined;
|
|
10
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuItem.js","names":["React","useMemo","FontAwesomeIcon","vsChevronRight","UISwitch","jsx","_jsx","jsxs","_jsxs","isSwitchMenuItemType","item","isOn","undefined","MenuItem","_ref","onSelect","dataTestId","icon","subtitle","title","handleSelect","onChange","className","concat","onClick","onKeyDown","event","key","tabIndex","role","children","on","stopPropagation"],"sources":["../../src/navigation/MenuItem.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { type IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight } from '@deephaven/icons';\nimport './MenuItem.scss';\n\nimport UISwitch from '../UISwitch';\n\nexport type MenuItemDef = {\n title: string;\n subtitle?: string;\n icon?: IconProp;\n};\n\nexport type SwitchMenuItemDef = MenuItemDef & {\n isOn: boolean;\n onChange: (isOn: boolean) => void;\n};\n\nfunction isSwitchMenuItemType(item: MenuItemDef): item is SwitchMenuItemDef {\n return (item as SwitchMenuItemDef).isOn !== undefined;\n}\n\nexport type MenuItemProps = {\n item: MenuItemDef;\n onSelect?: () => void;\n 'data-testid'?: string;\n};\n\n/**\n * @param props.item The menu item to set. Set a SwitchMenuItemDef to show a switch.\n * @param props.onSelect Called when the menu item is selected\n */\nexport function MenuItem({\n item,\n onSelect = () => undefined,\n 'data-testid': dataTestId,\n}: MenuItemProps): JSX.Element {\n const { icon, subtitle, title } = item;\n const handleSelect = useMemo(() => {\n if (isSwitchMenuItemType(item)) {\n return () => {\n item.onChange(!item.isOn);\n };\n }\n return onSelect;\n }, [item, onSelect]);\n return (\n <div\n className=\"btn btn-navigation-menu-item\"\n data-testid={`menu-item-${title}`}\n onClick={handleSelect}\n onKeyDown={event => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleSelect();\n }\n }}\n tabIndex={0}\n role=\"menuitem\"\n >\n {icon !== undefined && (\n <div className=\"icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"title\">{title}</div>\n {subtitle !== undefined && <div className=\"shortcut\">{subtitle}</div>}\n <div className=\"accessory\" data-testid={dataTestId}>\n {isSwitchMenuItemType(item) ? (\n <UISwitch\n on={item.isOn}\n onClick={event => {\n event.stopPropagation();\n handleSelect();\n }}\n />\n ) : (\n <FontAwesomeIcon icon={vsChevronRight} />\n )}\n </div>\n </div>\n );\n}\n\nexport default MenuItem;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAEtC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,cAAc,QAAQ,kBAAkB;AAAC;AAAA,OAG3CC,QAAQ;AAAA,SAAAC,GAAA,IAAAC,IAAA
|
|
1
|
+
{"version":3,"file":"MenuItem.js","names":["React","useMemo","FontAwesomeIcon","vsChevronRight","UISwitch","jsx","_jsx","jsxs","_jsxs","isSwitchMenuItemType","item","isOn","undefined","MenuItem","_ref","onSelect","dataTestId","icon","subtitle","title","handleSelect","onChange","className","concat","onClick","onKeyDown","event","key","tabIndex","role","children","on","stopPropagation"],"sources":["../../src/navigation/MenuItem.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { type IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight } from '@deephaven/icons';\nimport './MenuItem.scss';\n\nimport UISwitch from '../UISwitch';\n\nexport type MenuItemDef = {\n title: string;\n subtitle?: string;\n icon?: IconProp;\n};\n\nexport type SwitchMenuItemDef = MenuItemDef & {\n isOn: boolean;\n onChange: (isOn: boolean) => void;\n};\n\nfunction isSwitchMenuItemType(item: MenuItemDef): item is SwitchMenuItemDef {\n return (item as SwitchMenuItemDef).isOn !== undefined;\n}\n\nexport type MenuItemProps = {\n item: MenuItemDef;\n onSelect?: () => void;\n 'data-testid'?: string;\n};\n\n/**\n * @param props.item The menu item to set. Set a SwitchMenuItemDef to show a switch.\n * @param props.onSelect Called when the menu item is selected\n */\nexport function MenuItem({\n item,\n onSelect = () => undefined,\n 'data-testid': dataTestId,\n}: MenuItemProps): JSX.Element {\n const { icon, subtitle, title } = item;\n const handleSelect = useMemo(() => {\n if (isSwitchMenuItemType(item)) {\n return () => {\n item.onChange(!item.isOn);\n };\n }\n return onSelect;\n }, [item, onSelect]);\n return (\n <div\n className=\"btn btn-navigation-menu-item\"\n data-testid={`menu-item-${title}`}\n onClick={handleSelect}\n onKeyDown={event => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleSelect();\n }\n }}\n tabIndex={0}\n role=\"menuitem\"\n >\n {icon !== undefined && (\n <div className=\"icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"title\">{title}</div>\n {subtitle !== undefined && <div className=\"shortcut\">{subtitle}</div>}\n <div className=\"accessory\" data-testid={dataTestId}>\n {isSwitchMenuItemType(item) ? (\n <UISwitch\n on={item.isOn}\n onClick={event => {\n event.stopPropagation();\n handleSelect();\n }}\n />\n ) : (\n <FontAwesomeIcon icon={vsChevronRight} />\n )}\n </div>\n </div>\n );\n}\n\nexport default MenuItem;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAEtC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,cAAc,QAAQ,kBAAkB;AAAC;AAAA,OAG3CC,QAAQ;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAaf,SAASC,oBAAoBA,CAACC,IAAiB,EAA6B;EAC1E,OAAQA,IAAI,CAAuBC,IAAI,KAAKC,SAAS;AACvD;AAQA;AACA;AACA;AACA;AACA,OAAO,SAASC,QAAQA,CAAAC,IAAA,EAIO;EAAA,IAJN;IACvBJ,IAAI;IACJK,QAAQ,GAAGA,CAAA,KAAMH,SAAS;IAC1B,aAAa,EAAEI;EACF,CAAC,GAAAF,IAAA;EACd,IAAM;IAAEG,IAAI;IAAEC,QAAQ;IAAEC;EAAM,CAAC,GAAGT,IAAI;EACtC,IAAMU,YAAY,GAAGnB,OAAO,CAAC,MAAM;IACjC,IAAIQ,oBAAoB,CAACC,IAAI,CAAC,EAAE;MAC9B,OAAO,MAAM;QACXA,IAAI,CAACW,QAAQ,CAAC,CAACX,IAAI,CAACC,IAAI,CAAC;MAC3B,CAAC;IACH;IACA,OAAOI,QAAQ;EACjB,CAAC,EAAE,CAACL,IAAI,EAAEK,QAAQ,CAAC,CAAC;EACpB,oBACEP,KAAA;IACEc,SAAS,EAAC,8BAA8B;IACxC,4BAAAC,MAAA,CAA0BJ,KAAK,CAAG;IAClCK,OAAO,EAAEJ,YAAa;IACtBK,SAAS,EAAEC,KAAK,IAAI;MAClB,IAAIA,KAAK,CAACC,GAAG,KAAK,OAAO,IAAID,KAAK,CAACC,GAAG,KAAK,GAAG,EAAE;QAC9CP,YAAY,CAAC,CAAC;MAChB;IACF,CAAE;IACFQ,QAAQ,EAAE,CAAE;IACZC,IAAI,EAAC,UAAU;IAAAC,QAAA,GAEdb,IAAI,KAAKL,SAAS,iBACjBN,IAAA;MAAKgB,SAAS,EAAC,MAAM;MAAAQ,QAAA,eACnBxB,IAAA,CAACJ,eAAe;QAACe,IAAI,EAAEA;MAAK,CAAE;IAAC,CAC5B,CACN,eACDX,IAAA;MAAKgB,SAAS,EAAC,OAAO;MAAAQ,QAAA,EAAEX;IAAK,CAAM,CAAC,EACnCD,QAAQ,KAAKN,SAAS,iBAAIN,IAAA;MAAKgB,SAAS,EAAC,UAAU;MAAAQ,QAAA,EAAEZ;IAAQ,CAAM,CAAC,eACrEZ,IAAA;MAAKgB,SAAS,EAAC,WAAW;MAAC,eAAaN,UAAW;MAAAc,QAAA,EAChDrB,oBAAoB,CAACC,IAAI,CAAC,gBACzBJ,IAAA,CAACF,QAAQ;QACP2B,EAAE,EAAErB,IAAI,CAACC,IAAK;QACda,OAAO,EAAEE,KAAK,IAAI;UAChBA,KAAK,CAACM,eAAe,CAAC,CAAC;UACvBZ,YAAY,CAAC,CAAC;QAChB;MAAE,CACH,CAAC,gBAEFd,IAAA,CAACJ,eAAe;QAACe,IAAI,EAAEd;MAAe,CAAE;IACzC,CACE,CAAC;EAAA,CACH,CAAC;AAEV;AAEA,eAAeU,QAAQ","ignoreList":[]}
|
|
@@ -11,6 +11,6 @@ interface NavTabProps {
|
|
|
11
11
|
isDraggable: boolean;
|
|
12
12
|
contextActions?: ResolvableContextAction | ResolvableContextAction[];
|
|
13
13
|
}
|
|
14
|
-
declare const NavTab: React.MemoExoticComponent<({ tab, onClose, onSelect, isActive, activeRef, index, isDraggable, contextActions, }: NavTabProps) => JSX.Element>;
|
|
14
|
+
declare const NavTab: React.MemoExoticComponent<({ tab, onClose, onSelect, isActive, activeRef, index, isDraggable, contextActions, }: NavTabProps) => import("react/jsx-runtime").JSX.Element>;
|
|
15
15
|
export default NavTab;
|
|
16
16
|
//# sourceMappingURL=NavTab.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavTab.d.ts","sourceRoot":"","sources":["../../src/navigation/NavTab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAKpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGlE,UAAU,WAAW;IACnB,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,uBAAuB,GAAG,uBAAuB,EAAE,CAAC;CACtE;AAED,QAAA,MAAM,MAAM,mHAUP,WAAW,
|
|
1
|
+
{"version":3,"file":"NavTab.d.ts","sourceRoot":"","sources":["../../src/navigation/NavTab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAKpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGlE,UAAU,WAAW;IACnB,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,uBAAuB,GAAG,uBAAuB,EAAE,CAAC;CACtE;AAED,QAAA,MAAM,MAAM,mHAUP,WAAW,6CAwFf,CAAC;AAIF,eAAe,MAAM,CAAC"}
|
|
@@ -11,8 +11,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
|
11
11
|
import Button from "../Button.js";
|
|
12
12
|
import ContextActions from "../context-actions/ContextActions.js";
|
|
13
13
|
import { Tooltip } from "../popper/index.js";
|
|
14
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
16
15
|
var NavTab = /*#__PURE__*/memo(_ref => {
|
|
17
16
|
var {
|
|
18
17
|
tab,
|
|
@@ -58,13 +57,13 @@ var NavTab = /*#__PURE__*/memo(_ref => {
|
|
|
58
57
|
onAuxClick: e => {
|
|
59
58
|
// Middle mouse button was clicked, and no buttons remain pressed
|
|
60
59
|
if (isClosable && e.button === 1 && e.buttons === 0) {
|
|
61
|
-
onClose === null || onClose === void 0
|
|
60
|
+
onClose === null || onClose === void 0 || onClose(key);
|
|
62
61
|
}
|
|
63
62
|
},
|
|
64
63
|
onClick: e => {
|
|
65
64
|
// have to have seperate check onClick for Safari not supporting AuxClick
|
|
66
65
|
if (isClosable && e.button === 1 && e.buttons === 0) {
|
|
67
|
-
onClose === null || onClose === void 0
|
|
66
|
+
onClose === null || onClose === void 0 || onClose(key);
|
|
68
67
|
return;
|
|
69
68
|
}
|
|
70
69
|
// Left mouse button was clicked, and no buttons remain pressed
|
|
@@ -87,7 +86,7 @@ var NavTab = /*#__PURE__*/memo(_ref => {
|
|
|
87
86
|
kind: "ghost",
|
|
88
87
|
className: "btn-nav-tab-close",
|
|
89
88
|
onClick: event => {
|
|
90
|
-
onClose === null || onClose === void 0
|
|
89
|
+
onClose === null || onClose === void 0 || onClose(key);
|
|
91
90
|
event.stopPropagation();
|
|
92
91
|
event.preventDefault();
|
|
93
92
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavTab.js","names":["React","memo","classNames","Draggable","vsClose","FontAwesomeIcon","Button","ContextActions","Tooltip","jsx","_jsx","jsxs","_jsxs","NavTab","_ref","tab","onClose","onSelect","isActive","activeRef","index","isDraggable","contextActions","key","isClosable","title","icon","iconElem","isValidElement","draggableId","isDragDisabled","children","provided","snapshot","className","ref","_objectSpread","innerRef","draggableProps","dragHandleProps","active","dragging","isDragging","concat","role","tabIndex","onAuxClick","e","button","buttons","onClick","target","focus","onKeyPress","event","kind","stopPropagation","preventDefault","tooltip","actions","displayName"],"sources":["../../src/navigation/NavTab.tsx"],"sourcesContent":["import React, { memo } from 'react';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { type IconDefinition, vsClose } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { NavTabItem } from './NavTabList';\nimport Button from '../Button';\nimport ContextActions from '../context-actions/ContextActions';\nimport { type ResolvableContextAction } from '../context-actions';\nimport { Tooltip } from '../popper';\n\ninterface NavTabProps {\n tab: NavTabItem;\n onSelect: (key: string) => void;\n onClose?: (key: string) => void;\n isActive: boolean;\n activeRef: React.RefObject<HTMLDivElement>;\n index: number;\n isDraggable: boolean;\n contextActions?: ResolvableContextAction | ResolvableContextAction[];\n}\n\nconst NavTab = memo(\n ({\n tab,\n onClose,\n onSelect,\n isActive,\n activeRef,\n index,\n isDraggable,\n contextActions,\n }: NavTabProps) => {\n const { key, isClosable = onClose != null, title, icon } = tab;\n\n let iconElem: JSX.Element | undefined;\n if (icon != null) {\n iconElem = React.isValidElement(icon) ? (\n icon\n ) : (\n <FontAwesomeIcon icon={icon as IconDefinition} />\n );\n }\n\n return (\n <Draggable\n draggableId={key}\n key={key}\n index={index}\n isDragDisabled={!isDraggable}\n >\n {(provided, snapshot) => (\n <div\n className=\"context-menu-wrapper\"\n ref={isActive ? activeRef : null}\n >\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n className={classNames(\n 'btn btn-link btn-nav-tab',\n { active: isActive },\n { dragging: snapshot.isDragging }\n )}\n data-testid={`btn-nav-tab-${title}`}\n role=\"tab\"\n tabIndex={0}\n onAuxClick={e => {\n // Middle mouse button was clicked, and no buttons remain pressed\n if (isClosable && e.button === 1 && e.buttons === 0) {\n onClose?.(key);\n }\n }}\n onClick={e => {\n // have to have seperate check onClick for Safari not supporting AuxClick\n if (isClosable && e.button === 1 && e.buttons === 0) {\n onClose?.(key);\n return;\n }\n // Left mouse button was clicked, and no buttons remain pressed\n if (e.button === 0 && e.buttons === 0) {\n // focus is normally set on mousedown, but dnd calls preventDefault for drag purposes\n // so we can call focus on the firing of the actual click event manually\n (e.target as HTMLDivElement).focus();\n\n onSelect(key);\n }\n }}\n onKeyPress={event => {\n if (event.key === 'Enter') onSelect(key);\n }}\n >\n {iconElem}\n <span className=\"btn-nav-tab-title\">\n {title}\n <Tooltip>{title}</Tooltip>\n </span>\n {isClosable && (\n <Button\n kind=\"ghost\"\n className=\"btn-nav-tab-close\"\n onClick={event => {\n onClose?.(key);\n event.stopPropagation();\n event.preventDefault();\n }}\n icon={vsClose}\n tooltip=\"Close\"\n />\n )}\n </div>\n <ContextActions actions={contextActions} />\n </div>\n )}\n </Draggable>\n );\n }\n);\n\nNavTab.displayName = 'NavTab';\n\nexport default NavTab;\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAAIC,IAAI,QAAQ,OAAO;AACnC,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,SAAS,QAAQ,qBAAqB;AAC/C,SAA8BC,OAAO,QAAQ,kBAAkB;AAC/D,SAASC,eAAe,QAAQ,gCAAgC;AAAC,OAE1DC,MAAM;AAAA,OACNC,cAAc;AAAA,SAEZC,OAAO;AAAA,SAAAC,GAAA,IAAAC,IAAA
|
|
1
|
+
{"version":3,"file":"NavTab.js","names":["React","memo","classNames","Draggable","vsClose","FontAwesomeIcon","Button","ContextActions","Tooltip","jsx","_jsx","jsxs","_jsxs","NavTab","_ref","tab","onClose","onSelect","isActive","activeRef","index","isDraggable","contextActions","key","isClosable","title","icon","iconElem","isValidElement","draggableId","isDragDisabled","children","provided","snapshot","className","ref","_objectSpread","innerRef","draggableProps","dragHandleProps","active","dragging","isDragging","concat","role","tabIndex","onAuxClick","e","button","buttons","onClick","target","focus","onKeyPress","event","kind","stopPropagation","preventDefault","tooltip","actions","displayName"],"sources":["../../src/navigation/NavTab.tsx"],"sourcesContent":["import React, { memo } from 'react';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { type IconDefinition, vsClose } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { NavTabItem } from './NavTabList';\nimport Button from '../Button';\nimport ContextActions from '../context-actions/ContextActions';\nimport { type ResolvableContextAction } from '../context-actions';\nimport { Tooltip } from '../popper';\n\ninterface NavTabProps {\n tab: NavTabItem;\n onSelect: (key: string) => void;\n onClose?: (key: string) => void;\n isActive: boolean;\n activeRef: React.RefObject<HTMLDivElement>;\n index: number;\n isDraggable: boolean;\n contextActions?: ResolvableContextAction | ResolvableContextAction[];\n}\n\nconst NavTab = memo(\n ({\n tab,\n onClose,\n onSelect,\n isActive,\n activeRef,\n index,\n isDraggable,\n contextActions,\n }: NavTabProps) => {\n const { key, isClosable = onClose != null, title, icon } = tab;\n\n let iconElem: JSX.Element | undefined;\n if (icon != null) {\n iconElem = React.isValidElement(icon) ? (\n icon\n ) : (\n <FontAwesomeIcon icon={icon as IconDefinition} />\n );\n }\n\n return (\n <Draggable\n draggableId={key}\n key={key}\n index={index}\n isDragDisabled={!isDraggable}\n >\n {(provided, snapshot) => (\n <div\n className=\"context-menu-wrapper\"\n ref={isActive ? activeRef : null}\n >\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n className={classNames(\n 'btn btn-link btn-nav-tab',\n { active: isActive },\n { dragging: snapshot.isDragging }\n )}\n data-testid={`btn-nav-tab-${title}`}\n role=\"tab\"\n tabIndex={0}\n onAuxClick={e => {\n // Middle mouse button was clicked, and no buttons remain pressed\n if (isClosable && e.button === 1 && e.buttons === 0) {\n onClose?.(key);\n }\n }}\n onClick={e => {\n // have to have seperate check onClick for Safari not supporting AuxClick\n if (isClosable && e.button === 1 && e.buttons === 0) {\n onClose?.(key);\n return;\n }\n // Left mouse button was clicked, and no buttons remain pressed\n if (e.button === 0 && e.buttons === 0) {\n // focus is normally set on mousedown, but dnd calls preventDefault for drag purposes\n // so we can call focus on the firing of the actual click event manually\n (e.target as HTMLDivElement).focus();\n\n onSelect(key);\n }\n }}\n onKeyPress={event => {\n if (event.key === 'Enter') onSelect(key);\n }}\n >\n {iconElem}\n <span className=\"btn-nav-tab-title\">\n {title}\n <Tooltip>{title}</Tooltip>\n </span>\n {isClosable && (\n <Button\n kind=\"ghost\"\n className=\"btn-nav-tab-close\"\n onClick={event => {\n onClose?.(key);\n event.stopPropagation();\n event.preventDefault();\n }}\n icon={vsClose}\n tooltip=\"Close\"\n />\n )}\n </div>\n <ContextActions actions={contextActions} />\n </div>\n )}\n </Draggable>\n );\n }\n);\n\nNavTab.displayName = 'NavTab';\n\nexport default NavTab;\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAAIC,IAAI,QAAQ,OAAO;AACnC,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,SAAS,QAAQ,qBAAqB;AAC/C,SAA8BC,OAAO,QAAQ,kBAAkB;AAC/D,SAASC,eAAe,QAAQ,gCAAgC;AAAC,OAE1DC,MAAM;AAAA,OACNC,cAAc;AAAA,SAEZC,OAAO;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAahB,IAAMC,MAAM,gBAAGZ,IAAI,CACjBa,IAAA,IASmB;EAAA,IATlB;IACCC,GAAG;IACHC,OAAO;IACPC,QAAQ;IACRC,QAAQ;IACRC,SAAS;IACTC,KAAK;IACLC,WAAW;IACXC;EACW,CAAC,GAAAR,IAAA;EACZ,IAAM;IAAES,GAAG;IAAEC,UAAU,GAAGR,OAAO,IAAI,IAAI;IAAES,KAAK;IAAEC;EAAK,CAAC,GAAGX,GAAG;EAE9D,IAAIY,QAAiC;EACrC,IAAID,IAAI,IAAI,IAAI,EAAE;IAChBC,QAAQ,GAAG,aAAA3B,KAAK,CAAC4B,cAAc,CAACF,IAAI,CAAC,GACnCA,IAAI,gBAEJhB,IAAA,CAACL,eAAe;MAACqB,IAAI,EAAEA;IAAuB,CAAE,CACjD;EACH;EAEA,oBACEhB,IAAA,CAACP,SAAS;IACR0B,WAAW,EAAEN,GAAI;IAEjBH,KAAK,EAAEA,KAAM;IACbU,cAAc,EAAE,CAACT,WAAY;IAAAU,QAAA,EAE5BA,CAACC,QAAQ,EAAEC,QAAQ,kBAClBrB,KAAA;MACEsB,SAAS,EAAC,sBAAsB;MAChCC,GAAG,EAAEjB,QAAQ,GAAGC,SAAS,GAAG,IAAK;MAAAY,QAAA,gBAEjCnB,KAAA,QAAAwB,aAAA,CAAAA,aAAA,CAAAA,aAAA;QACED,GAAG,EAAEH,QAAQ,CAACK;QACd;MAAA,GACIL,QAAQ,CAACM,cAAc,GAEvBN,QAAQ,CAACO,eAAe;QAC5BL,SAAS,EAAEhC,UAAU,CACnB,0BAA0B,EAC1B;UAAEsC,MAAM,EAAEtB;QAAS,CAAC,EACpB;UAAEuB,QAAQ,EAAER,QAAQ,CAACS;QAAW,CAClC,CAAE;QACF,8BAAAC,MAAA,CAA4BlB,KAAK,CAAG;QACpCmB,IAAI,EAAC,KAAK;QACVC,QAAQ,EAAE,CAAE;QACZC,UAAU,EAAEC,CAAC,IAAI;UACf;UACA,IAAIvB,UAAU,IAAIuB,CAAC,CAACC,MAAM,KAAK,CAAC,IAAID,CAAC,CAACE,OAAO,KAAK,CAAC,EAAE;YACnDjC,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAGO,GAAG,CAAC;UAChB;QACF,CAAE;QACF2B,OAAO,EAAEH,CAAC,IAAI;UACZ;UACA,IAAIvB,UAAU,IAAIuB,CAAC,CAACC,MAAM,KAAK,CAAC,IAAID,CAAC,CAACE,OAAO,KAAK,CAAC,EAAE;YACnDjC,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAGO,GAAG,CAAC;YACd;UACF;UACA;UACA,IAAIwB,CAAC,CAACC,MAAM,KAAK,CAAC,IAAID,CAAC,CAACE,OAAO,KAAK,CAAC,EAAE;YACrC;YACA;YACCF,CAAC,CAACI,MAAM,CAAoBC,KAAK,CAAC,CAAC;YAEpCnC,QAAQ,CAACM,GAAG,CAAC;UACf;QACF,CAAE;QACF8B,UAAU,EAAEC,KAAK,IAAI;UACnB,IAAIA,KAAK,CAAC/B,GAAG,KAAK,OAAO,EAAEN,QAAQ,CAACM,GAAG,CAAC;QAC1C,CAAE;QAAAQ,QAAA,GAEDJ,QAAQ,eACTf,KAAA;UAAMsB,SAAS,EAAC,mBAAmB;UAAAH,QAAA,GAChCN,KAAK,eACNf,IAAA,CAACF,OAAO;YAAAuB,QAAA,EAAEN;UAAK,CAAU,CAAC;QAAA,CACtB,CAAC,EACND,UAAU,iBACTd,IAAA,CAACJ,MAAM;UACLiD,IAAI,EAAC,OAAO;UACZrB,SAAS,EAAC,mBAAmB;UAC7BgB,OAAO,EAAEI,KAAK,IAAI;YAChBtC,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAGO,GAAG,CAAC;YACd+B,KAAK,CAACE,eAAe,CAAC,CAAC;YACvBF,KAAK,CAACG,cAAc,CAAC,CAAC;UACxB,CAAE;UACF/B,IAAI,EAAEtB,OAAQ;UACdsD,OAAO,EAAC;QAAO,CAChB,CACF;MAAA,EACE,CAAC,eACNhD,IAAA,CAACH,cAAc;QAACoD,OAAO,EAAErC;MAAe,CAAE,CAAC;IAAA,CACxC;EACN,GArEIC,GAsEI,CAAC;AAEhB,CACF,CAAC;AAEDV,MAAM,CAAC+C,WAAW,GAAG,QAAQ;AAE7B,eAAe/C,MAAM","ignoreList":[]}
|
|
@@ -18,8 +18,7 @@ import { ContextActions } from "../context-actions/index.js";
|
|
|
18
18
|
import Popper from "../popper/Popper.js";
|
|
19
19
|
import DashboardList from "./DashboardList.js";
|
|
20
20
|
import { GLOBAL_SHORTCUTS } from "../shortcuts/index.js"; // mouse hold timeout to act as hold instead of click
|
|
21
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
22
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
21
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
23
22
|
var CLICK_TIMEOUT = 500;
|
|
24
23
|
|
|
25
24
|
// mouse hold acceleration
|
|
@@ -116,7 +115,7 @@ function NavTabList(_ref) {
|
|
|
116
115
|
if (!result.destination) {
|
|
117
116
|
return;
|
|
118
117
|
}
|
|
119
|
-
onReorder === null || onReorder === void 0
|
|
118
|
+
onReorder === null || onReorder === void 0 || onReorder(result.source.index, result.destination.index);
|
|
120
119
|
}, [onReorder]);
|
|
121
120
|
var handleScroll = useCallback(() => {
|
|
122
121
|
if (containerRef.current == null) {
|
|
@@ -255,10 +254,10 @@ function NavTabList(_ref) {
|
|
|
255
254
|
// Scrolling jumps too far sometimes, so clamp to get a smoother scroll
|
|
256
255
|
nav.scrollLeft += clamp(delta, -30, 30);
|
|
257
256
|
};
|
|
258
|
-
(_containerRef$current = containerRef.current) === null || _containerRef$current === void 0
|
|
257
|
+
(_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 || _containerRef$current.addEventListener('wheel', onWheel);
|
|
259
258
|
return () => {
|
|
260
259
|
var _containerRef$current2;
|
|
261
|
-
(_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0
|
|
260
|
+
(_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 || _containerRef$current2.removeEventListener('wheel', onWheel);
|
|
262
261
|
};
|
|
263
262
|
}, []);
|
|
264
263
|
var tabContextActionMap = useMemo(() => {
|