no-frills-ui 0.0.14-alpha.7 → 0.0.14-rc.0
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/README.md +2 -3
- package/dist/index.js +926 -795
- package/dist/index.js.map +1 -1
- package/lib-esm/components/Accordion/Accordion.d.ts +9 -13
- package/lib-esm/components/Accordion/Accordion.js +4 -10
- package/lib-esm/components/Accordion/Accordion.js.map +1 -0
- package/lib-esm/components/Accordion/AccordionStep.d.ts +22 -22
- package/lib-esm/components/Accordion/AccordionStep.js +41 -35
- package/lib-esm/components/Accordion/AccordionStep.js.map +1 -0
- package/lib-esm/components/Badge/Badge.d.ts +13 -16
- package/lib-esm/components/Badge/Badge.js +12 -21
- package/lib-esm/components/Badge/Badge.js.map +1 -0
- package/lib-esm/components/Button/ActionButton.d.ts +9 -5
- package/lib-esm/components/Button/ActionButton.js +20 -4
- package/lib-esm/components/Button/ActionButton.js.map +1 -0
- package/lib-esm/components/Button/Button.d.ts +9 -5
- package/lib-esm/components/Button/Button.js +19 -6
- package/lib-esm/components/Button/Button.js.map +1 -0
- package/lib-esm/components/Button/IconButton.d.ts +9 -5
- package/lib-esm/components/Button/IconButton.js +20 -4
- package/lib-esm/components/Button/IconButton.js.map +1 -0
- package/lib-esm/components/Button/LinkButton.d.ts +9 -5
- package/lib-esm/components/Button/LinkButton.js +20 -4
- package/lib-esm/components/Button/LinkButton.js.map +1 -0
- package/lib-esm/components/Button/RaisedButton.d.ts +9 -5
- package/lib-esm/components/Button/RaisedButton.js +20 -4
- package/lib-esm/components/Button/RaisedButton.js.map +1 -0
- package/lib-esm/components/Card/Card.d.ts +4 -6
- package/lib-esm/components/Card/Card.js +18 -4
- package/lib-esm/components/Card/Card.js.map +1 -0
- package/lib-esm/components/Chip/Chip.d.ts +2 -2
- package/lib-esm/components/Chip/Chip.js +17 -10
- package/lib-esm/components/Chip/Chip.js.map +1 -0
- package/lib-esm/components/ChipInput/ChipInput.d.ts +28 -39
- package/lib-esm/components/ChipInput/ChipInput.js +39 -39
- package/lib-esm/components/ChipInput/ChipInput.js.map +1 -0
- package/lib-esm/components/Dialog/AlertDialog.d.ts +11 -12
- package/lib-esm/components/Dialog/AlertDialog.js +5 -11
- package/lib-esm/components/Dialog/AlertDialog.js.map +1 -0
- package/lib-esm/components/Dialog/ConfirmDialog.d.ts +13 -14
- package/lib-esm/components/Dialog/ConfirmDialog.js +5 -12
- package/lib-esm/components/Dialog/ConfirmDialog.js.map +1 -0
- package/lib-esm/components/Dialog/Dialog.d.ts +8 -14
- package/lib-esm/components/Dialog/Dialog.js +13 -10
- package/lib-esm/components/Dialog/Dialog.js.map +1 -0
- package/lib-esm/components/Dialog/PromptDialog.d.ts +18 -19
- package/lib-esm/components/Dialog/PromptDialog.js +14 -21
- package/lib-esm/components/Dialog/PromptDialog.js.map +1 -0
- package/lib-esm/components/DragAndDrop/DragAndDrop.d.ts +37 -59
- package/lib-esm/components/DragAndDrop/DragAndDrop.js +26 -28
- package/lib-esm/components/DragAndDrop/DragAndDrop.js.map +1 -0
- package/lib-esm/components/DragAndDrop/DragItem.d.ts +2 -2
- package/lib-esm/components/DragAndDrop/DragItem.js +43 -40
- package/lib-esm/components/DragAndDrop/DragItem.js.map +1 -0
- package/lib-esm/components/DragAndDrop/types.d.ts +3 -3
- package/lib-esm/components/DragAndDrop/types.js +1 -0
- package/lib-esm/components/DragAndDrop/types.js.map +1 -0
- package/lib-esm/components/Drawer/Drawer.d.ts +24 -31
- package/lib-esm/components/Drawer/Drawer.js +50 -45
- package/lib-esm/components/Drawer/Drawer.js.map +1 -0
- package/lib-esm/components/Groups/Group.d.ts +6 -8
- package/lib-esm/components/Groups/Group.js +15 -12
- package/lib-esm/components/Groups/Group.js.map +1 -0
- package/lib-esm/components/Groups/GroupLabel.js +2 -1
- package/lib-esm/components/Groups/GroupLabel.js.map +1 -0
- package/lib-esm/components/Input/Checkbox.d.ts +12 -15
- package/lib-esm/components/Input/Checkbox.js +34 -29
- package/lib-esm/components/Input/Checkbox.js.map +1 -0
- package/lib-esm/components/Input/Dropdown.d.ts +8 -18
- package/lib-esm/components/Input/Dropdown.js +44 -18
- package/lib-esm/components/Input/Dropdown.js.map +1 -0
- package/lib-esm/components/Input/Input.d.ts +8 -3
- package/lib-esm/components/Input/Input.js +24 -22
- package/lib-esm/components/Input/Input.js.map +1 -0
- package/lib-esm/components/Input/Radio.d.ts +4 -8
- package/lib-esm/components/Input/Radio.js +20 -16
- package/lib-esm/components/Input/Radio.js.map +1 -0
- package/lib-esm/components/Input/RadioButton.d.ts +4 -8
- package/lib-esm/components/Input/RadioButton.js +19 -15
- package/lib-esm/components/Input/RadioButton.js.map +1 -0
- package/lib-esm/components/Input/Select.d.ts +6 -13
- package/lib-esm/components/Input/Select.js +26 -22
- package/lib-esm/components/Input/Select.js.map +1 -0
- package/lib-esm/components/Input/TextArea.d.ts +6 -13
- package/lib-esm/components/Input/TextArea.js +33 -27
- package/lib-esm/components/Input/TextArea.js.map +1 -0
- package/lib-esm/components/Input/Toggle.d.ts +4 -9
- package/lib-esm/components/Input/Toggle.js +15 -12
- package/lib-esm/components/Input/Toggle.js.map +1 -0
- package/lib-esm/components/Menu/Menu.d.ts +4 -14
- package/lib-esm/components/Menu/Menu.js +26 -17
- package/lib-esm/components/Menu/Menu.js.map +1 -0
- package/lib-esm/components/Menu/MenuContext.d.ts +4 -4
- package/lib-esm/components/Menu/MenuContext.js +2 -0
- package/lib-esm/components/Menu/MenuContext.js.map +1 -0
- package/lib-esm/components/Menu/MenuItem.d.ts +10 -4
- package/lib-esm/components/Menu/MenuItem.js +21 -6
- package/lib-esm/components/Menu/MenuItem.js.map +1 -0
- package/lib-esm/components/Modal/Modal.d.ts +17 -23
- package/lib-esm/components/Modal/Modal.js +38 -34
- package/lib-esm/components/Modal/Modal.js.map +1 -0
- package/lib-esm/components/Notification/Notification.d.ts +39 -34
- package/lib-esm/components/Notification/Notification.js +17 -39
- package/lib-esm/components/Notification/Notification.js.map +1 -0
- package/lib-esm/components/Notification/NotificationManager.d.ts +4 -4
- package/lib-esm/components/Notification/NotificationManager.js +19 -14
- package/lib-esm/components/Notification/NotificationManager.js.map +1 -0
- package/lib-esm/components/Notification/index.d.ts +1 -0
- package/lib-esm/components/Notification/style.d.ts +2 -3
- package/lib-esm/components/Notification/style.js +21 -20
- package/lib-esm/components/Notification/style.js.map +1 -0
- package/lib-esm/components/Notification/types.js +1 -0
- package/lib-esm/components/Notification/types.js.map +1 -0
- package/lib-esm/components/Popover/Popover.d.ts +21 -20
- package/lib-esm/components/Popover/Popover.js +44 -45
- package/lib-esm/components/Popover/Popover.js.map +1 -0
- package/lib-esm/components/Spinner/Spinner.d.ts +14 -15
- package/lib-esm/components/Spinner/Spinner.js +14 -14
- package/lib-esm/components/Spinner/Spinner.js.map +1 -0
- package/lib-esm/components/Stepper/Step.d.ts +15 -12
- package/lib-esm/components/Stepper/Step.js +12 -9
- package/lib-esm/components/Stepper/Step.js.map +1 -0
- package/lib-esm/components/Stepper/Stepper.d.ts +11 -17
- package/lib-esm/components/Stepper/Stepper.js +30 -27
- package/lib-esm/components/Stepper/Stepper.js.map +1 -0
- package/lib-esm/components/Tabs/Tab.d.ts +10 -16
- package/lib-esm/components/Tabs/Tab.js +1 -8
- package/lib-esm/components/Tabs/Tab.js.map +1 -0
- package/lib-esm/components/Tabs/Tabs.d.ts +11 -22
- package/lib-esm/components/Tabs/Tabs.js +43 -34
- package/lib-esm/components/Tabs/Tabs.js.map +1 -0
- package/lib-esm/components/Toast/Toast.d.ts +7 -7
- package/lib-esm/components/Toast/Toast.js +17 -15
- package/lib-esm/components/Toast/Toast.js.map +1 -0
- package/lib-esm/components/Toast/ToastStory.d.ts +21 -24
- package/lib-esm/components/Tooltip/Tooltip.d.ts +11 -14
- package/lib-esm/components/Tooltip/Tooltip.js +14 -23
- package/lib-esm/components/Tooltip/Tooltip.js.map +1 -0
- package/lib-esm/icons/CheckCircle.js +3 -2
- package/lib-esm/icons/CheckCircle.js.map +1 -0
- package/lib-esm/icons/Close.js +1 -0
- package/lib-esm/icons/Close.js.map +1 -0
- package/lib-esm/icons/DragIndicator.js +1 -0
- package/lib-esm/icons/DragIndicator.js.map +1 -0
- package/lib-esm/icons/ErrorOutline.js +3 -2
- package/lib-esm/icons/ErrorOutline.js.map +1 -0
- package/lib-esm/icons/ExpandMore.js +1 -0
- package/lib-esm/icons/ExpandMore.js.map +1 -0
- package/lib-esm/icons/FiberManualRecord.js +1 -0
- package/lib-esm/icons/FiberManualRecord.js.map +1 -0
- package/lib-esm/icons/Info.js +3 -2
- package/lib-esm/icons/Info.js.map +1 -0
- package/lib-esm/icons/ReportProblem.js +3 -2
- package/lib-esm/icons/ReportProblem.js.map +1 -0
- package/lib-esm/index.js +43 -0
- package/lib-esm/index.js.map +1 -0
- package/lib-esm/shared/LayerManager.d.ts +5 -4
- package/lib-esm/shared/LayerManager.js +125 -112
- package/lib-esm/shared/LayerManager.js.map +1 -0
- package/lib-esm/shared/constants.js +1 -0
- package/lib-esm/shared/constants.js.map +1 -0
- package/lib-esm/shared/styles.js +9 -8
- package/lib-esm/shared/styles.js.map +1 -0
- package/package.json +66 -31
- package/lib-esm/components/index.js +0 -42
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { jsx } from '@emotion/react/jsx-runtime';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import PropTypes from 'prop-types';
|
|
4
3
|
import styled from '@emotion/styled';
|
|
5
4
|
import LayerManager, { LAYER_POSITION } from '../../shared/LayerManager.js';
|
|
6
5
|
import Card from '../Card/Card.js';
|
|
7
6
|
|
|
8
7
|
const DialogContainer = /*#__PURE__*/ styled(Card, {
|
|
9
|
-
target: "
|
|
8
|
+
target: "e1sxvvof0",
|
|
10
9
|
label: "DialogContainer"
|
|
11
|
-
})("max-width:768px;max-height:80vh;transform:scale(0);opacity:0;transition:all 0.3s ease;.nf-layer-enter &{opacity:1;transform:scale(1);}.nf-layer-exit &{opacity:0;transform:scale(0);}"
|
|
10
|
+
})("max-width:768px;max-height:80vh;transform:scale(0);opacity:0;transition:all 0.3s ease;.nf-layer-enter &{opacity:1;transform:scale(1);}.nf-layer-exit &{opacity:0;transform:scale(0);}");
|
|
12
11
|
class Dialog extends React.Component {
|
|
13
12
|
shouldComponentUpdate(nextProps, nextState) {
|
|
14
13
|
return this.state.show !== nextState.show;
|
|
@@ -31,7 +30,7 @@ class Dialog extends React.Component {
|
|
|
31
30
|
}
|
|
32
31
|
}
|
|
33
32
|
constructor(...args){
|
|
34
|
-
super(...args), this.lastFocusedElement = null, this.dialogRef = /*#__PURE__*/ React.createRef(), this.state = {
|
|
33
|
+
super(...args), this.closeDialog = null, this.onCloseFn = null, this.lastFocusedElement = null, this.dialogRef = /*#__PURE__*/ React.createRef(), this.state = {
|
|
35
34
|
show: false,
|
|
36
35
|
LayerComponent: undefined
|
|
37
36
|
}, /**
|
|
@@ -80,6 +79,13 @@ class Dialog extends React.Component {
|
|
|
80
79
|
if (node) {
|
|
81
80
|
this.setInitialFocus(node);
|
|
82
81
|
}
|
|
82
|
+
if (this.props.forwardRef) {
|
|
83
|
+
if (typeof this.props.forwardRef === 'function') {
|
|
84
|
+
this.props.forwardRef(node);
|
|
85
|
+
} else {
|
|
86
|
+
this.props.forwardRef.current = node;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
83
89
|
}, /**
|
|
84
90
|
* Sets initial focus within the dialog.
|
|
85
91
|
* Tries to focus the header first, then the first interactive element, or falls back to the container.
|
|
@@ -110,9 +116,9 @@ class Dialog extends React.Component {
|
|
|
110
116
|
closeOnOverlayClick,
|
|
111
117
|
position: LAYER_POSITION.DIALOG,
|
|
112
118
|
component: /*#__PURE__*/ jsx(DialogContainer, {
|
|
119
|
+
role: "dialog",
|
|
113
120
|
...rest,
|
|
114
121
|
ref: this.setDialogRef,
|
|
115
|
-
role: "dialog",
|
|
116
122
|
"aria-modal": "true",
|
|
117
123
|
tabIndex: -1,
|
|
118
124
|
onKeyDown: this.handleKeyDown,
|
|
@@ -126,7 +132,7 @@ class Dialog extends React.Component {
|
|
|
126
132
|
show: true,
|
|
127
133
|
LayerComponent: Component
|
|
128
134
|
});
|
|
129
|
-
this.onCloseFn = closeCallback;
|
|
135
|
+
this.onCloseFn = closeCallback ?? null;
|
|
130
136
|
}, this.close = (resp)=>{
|
|
131
137
|
this.closeDialog?.(resp);
|
|
132
138
|
}, this.closeCallback = (resp)=>{
|
|
@@ -139,13 +145,10 @@ class Dialog extends React.Component {
|
|
|
139
145
|
};
|
|
140
146
|
}
|
|
141
147
|
}
|
|
142
|
-
Dialog.propTypes = {
|
|
143
|
-
/** Flag to close dialog on `esc` click. Default value is true. */ closeOnEsc: PropTypes.bool,
|
|
144
|
-
/** Close layer overlay is clicked. Default value is true. */ closeOnOverlayClick: PropTypes.bool
|
|
145
|
-
};
|
|
146
148
|
Dialog.defaultProps = {
|
|
147
149
|
closeOnEsc: true,
|
|
148
150
|
closeOnOverlayClick: true
|
|
149
151
|
};
|
|
150
152
|
|
|
151
153
|
export { DialogContainer, Dialog as default };
|
|
154
|
+
//# sourceMappingURL=Dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dialog.js","sources":["../../../src/components/Dialog/Dialog.tsx"],"sourcesContent":["import React from 'react';\nimport styled from '@emotion/styled';\nimport LayerManager, { LAYER_POSITION } from '../../shared/LayerManager';\nimport { Card } from '../Card';\n\nexport const DialogContainer = styled(Card)`\n max-width: 768px;\n max-height: 80vh;\n transform: scale(0);\n opacity: 0;\n transition: all 0.3s ease;\n\n .nf-layer-enter & {\n opacity: 1;\n transform: scale(1);\n }\n\n .nf-layer-exit & {\n opacity: 0;\n transform: scale(0);\n }\n`;\n\nexport {\n Header as DialogHeader,\n Body as DialogBody,\n Footer as DialogFooter,\n} from '../../shared/styles';\n\ninterface DialogOptions {\n /** Flag to close dialog on `esc` click. Default value is true. */\n closeOnEsc?: boolean;\n /** Close layer overlay is clicked. Default value is true. */\n closeOnOverlayClick?: boolean;\n /** Ref forwarded to the underlying HTMLDivElement of the dialog container */\n forwardRef?: React.Ref<HTMLDivElement>;\n}\n\ninterface DialogState {\n show: boolean;\n LayerComponent?: React.ComponentType | null;\n}\n\nclass Dialog extends React.Component<\n React.PropsWithChildren<DialogOptions> & React.HTMLAttributes<HTMLDivElement>,\n DialogState\n> {\n static defaultProps = {\n closeOnEsc: true,\n closeOnOverlayClick: true,\n };\n\n private closeDialog: ((resp?: unknown) => void) | null = null;\n private onCloseFn: ((resp?: unknown) => void) | null = null;\n private lastFocusedElement: HTMLElement | null = null;\n private dialogRef = React.createRef<HTMLDivElement>();\n\n state: DialogState = {\n show: false,\n LayerComponent: undefined,\n };\n\n /**\n * Retrieves all focusable elements within the dialog.\n */\n private getFocusableElements = (): HTMLElement[] => {\n if (!this.dialogRef.current) return [];\n return Array.from(\n this.dialogRef.current.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ) as HTMLElement[];\n };\n\n /**\n * Handles keydown events to implement the focus trap.\n * Traps Tab and Shift+Tab within the dialog.\n */\n private handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Tab') {\n const focusableElements = this.getFocusableElements();\n if (focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n if (e.shiftKey) {\n if (document.activeElement === firstElement) {\n lastElement.focus();\n e.preventDefault();\n }\n } else {\n if (document.activeElement === lastElement) {\n firstElement.focus();\n e.preventDefault();\n }\n }\n }\n };\n\n /**\n * Restores focus to the element that was focused before the dialog opened.\n */\n private restoreFocus = () => {\n if (this.lastFocusedElement) {\n const elementToBeFocused = this.lastFocusedElement;\n this.lastFocusedElement = null;\n setTimeout(() => {\n if (document.body.contains(elementToBeFocused)) {\n elementToBeFocused.focus();\n }\n }, 100);\n }\n };\n\n /**\n * Callback ref to capture the Dialog DOM element.\n * Triggers initial focus setting when the element mounts.\n */\n private setDialogRef = (node: HTMLDivElement | null) => {\n (this.dialogRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n\n if (node) {\n this.setInitialFocus(node);\n }\n\n if (this.props.forwardRef) {\n if (typeof this.props.forwardRef === 'function') {\n this.props.forwardRef(node);\n } else {\n (this.props.forwardRef as React.MutableRefObject<HTMLDivElement | null>).current =\n node;\n }\n }\n };\n\n /**\n * Sets initial focus within the dialog.\n * Tries to focus the header first, then the first interactive element, or falls back to the container.\n */\n private setInitialFocus = (root: HTMLElement) => {\n const firstChild = root.firstElementChild as HTMLElement;\n if (firstChild) {\n if (firstChild.getAttribute('tabindex') === null) {\n firstChild.setAttribute('tabindex', '-1');\n }\n firstChild.focus();\n return;\n }\n\n const focusableElements = this.getFocusableElements();\n if (focusableElements.length > 0) {\n focusableElements[0].focus();\n } else {\n root.focus();\n }\n };\n\n shouldComponentUpdate(nextProps: DialogOptions, nextState: DialogState) {\n return this.state.show !== nextState.show;\n }\n\n componentWillUnmount() {\n // Clean up if component unmounts while dialog is open\n if (this.state.show && this.closeDialog) {\n this.closeDialog();\n }\n this.restoreFocus();\n this.closeDialog = null;\n this.onCloseFn = null;\n }\n\n public open = (closeCallback?: (resp?: unknown) => void) => {\n const { closeOnEsc, closeOnOverlayClick, children, ...rest } = this.props;\n\n // Save current focus\n this.lastFocusedElement = document.activeElement as HTMLElement;\n\n const [Component, closeFn] = LayerManager.renderLayer({\n exitDelay: 300,\n overlay: true,\n closeOnEsc,\n closeCallback: this.closeCallback,\n closeOnOverlayClick,\n position: LAYER_POSITION.DIALOG,\n component: (\n <DialogContainer\n role=\"dialog\"\n {...rest}\n ref={this.setDialogRef}\n aria-modal=\"true\"\n tabIndex={-1}\n onKeyDown={this.handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n elevated\n >\n {children}\n </DialogContainer>\n ),\n });\n\n this.closeDialog = closeFn;\n\n this.setState({\n show: true,\n LayerComponent: Component,\n });\n this.onCloseFn = closeCallback ?? null;\n };\n\n public close = (resp?: unknown) => {\n this.closeDialog?.(resp);\n };\n\n private closeCallback = (resp?: unknown) => {\n this.restoreFocus();\n this.setState({\n show: false,\n LayerComponent: undefined,\n });\n this.onCloseFn?.(resp);\n };\n\n render() {\n const { LayerComponent } = this.state;\n\n if (this.state.show && LayerComponent) {\n return <LayerComponent />;\n } else {\n return null;\n }\n }\n}\n\nexport default Dialog;\n"],"names":["DialogContainer","styled","Card","Dialog","React","Component","shouldComponentUpdate","nextProps","nextState","state","show","componentWillUnmount","closeDialog","restoreFocus","onCloseFn","render","LayerComponent","_jsx","lastFocusedElement","dialogRef","createRef","undefined","getFocusableElements","current","Array","from","querySelectorAll","handleKeyDown","e","key","focusableElements","length","firstElement","lastElement","shiftKey","document","activeElement","focus","preventDefault","elementToBeFocused","setTimeout","body","contains","setDialogRef","node","setInitialFocus","props","forwardRef","root","firstChild","firstElementChild","getAttribute","setAttribute","open","closeCallback","closeOnEsc","closeOnOverlayClick","children","rest","closeFn","LayerManager","renderLayer","exitDelay","overlay","position","LAYER_POSITION","DIALOG","component","role","ref","aria-modal","tabIndex","onKeyDown","onClick","stopPropagation","elevated","setState","close","resp","defaultProps"],"mappings":"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"}
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import
|
|
3
|
-
type PromptOption =
|
|
2
|
+
import Dialog from './Dialog';
|
|
3
|
+
type PromptOption = {
|
|
4
|
+
/** Shown as header of the dialog */
|
|
5
|
+
header: string;
|
|
6
|
+
/** Rendered as the body of the dialog */
|
|
7
|
+
body: string;
|
|
8
|
+
/** Default value for the input. */
|
|
9
|
+
defaultValue?: string;
|
|
10
|
+
/** Submit button text. Default value is 'Submit' */
|
|
11
|
+
submitText?: string;
|
|
12
|
+
/** Cancel button text. Default value is 'Cancel' */
|
|
13
|
+
cancelText?: string;
|
|
14
|
+
/** Props for the input. */
|
|
15
|
+
inputProps?: React.HTMLProps<HTMLInputElement>;
|
|
16
|
+
/** Additional props for the dialog. */
|
|
17
|
+
dialogProps?: React.ComponentProps<typeof Dialog>;
|
|
18
|
+
};
|
|
4
19
|
export default class PromptDialog extends React.Component<PromptOption, {
|
|
5
|
-
value
|
|
20
|
+
value?: string;
|
|
6
21
|
}> {
|
|
7
|
-
static propTypes: {
|
|
8
|
-
/** Shown as header of the dialog */
|
|
9
|
-
header: PropTypes.Requireable<string>;
|
|
10
|
-
/** Rendered as the body of the dialog */
|
|
11
|
-
body: PropTypes.Requireable<string>;
|
|
12
|
-
/** Default value for the input. */
|
|
13
|
-
defaultValue: PropTypes.Requireable<string>;
|
|
14
|
-
/** Submit button text. Default value is 'Submit' */
|
|
15
|
-
submitText: PropTypes.Requireable<string>;
|
|
16
|
-
/** Cancel button text. Default value is 'Cancel' */
|
|
17
|
-
cancelText: PropTypes.Requireable<string>;
|
|
18
|
-
/** Props for the input. */
|
|
19
|
-
inputProps: PropTypes.Requireable<object>;
|
|
20
|
-
/** Additional props for the dialog. */
|
|
21
|
-
dialogProps: PropTypes.Requireable<object>;
|
|
22
|
-
};
|
|
23
22
|
static defaultProps: {
|
|
24
23
|
cancelText: string;
|
|
25
24
|
submitText: string;
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
import { jsx, jsxs } from '@emotion/react/jsx-runtime';
|
|
2
2
|
import React, { createRef } from 'react';
|
|
3
|
-
import PropTypes from 'prop-types';
|
|
4
3
|
import styled from '@emotion/styled';
|
|
5
4
|
import Dialog from './Dialog.js';
|
|
6
5
|
import { Header, Body, Footer } from '../../shared/styles.js';
|
|
7
|
-
import
|
|
6
|
+
import Button from '../Button/Button.js';
|
|
8
7
|
import ActionButton from '../Button/ActionButton.js';
|
|
9
8
|
import Input from '../Input/Input.js';
|
|
10
9
|
|
|
11
10
|
const BodyText = /*#__PURE__*/ styled("p", {
|
|
12
|
-
target: "
|
|
11
|
+
target: "e18k0mlw0",
|
|
13
12
|
label: "BodyText"
|
|
14
|
-
})("margin-top:0;"
|
|
13
|
+
})("margin-top:0;");
|
|
15
14
|
const InputContainer = /*#__PURE__*/ styled("div", {
|
|
16
|
-
target: "
|
|
15
|
+
target: "e18k0mlw1",
|
|
17
16
|
label: "InputContainer"
|
|
18
|
-
})("display:flex;flex:1;margin-top:10px;& > label{flex:1;width:100%;padding:0;& > input{width:100%;padding:0 8px;box-sizing:border-box;}}"
|
|
17
|
+
})("display:flex;flex:1;margin-top:10px;& > label{flex:1;width:100%;padding:0;& > input{width:100%;padding:0 8px;box-sizing:border-box;}}");
|
|
19
18
|
const StyledInput = /*#__PURE__*/ styled(Input, {
|
|
20
|
-
target: "
|
|
19
|
+
target: "e18k0mlw2",
|
|
21
20
|
label: "StyledInput"
|
|
22
|
-
})("flex:1;padding:0;"
|
|
21
|
+
})("flex:1;padding:0;");
|
|
23
22
|
class PromptDialog extends React.Component {
|
|
24
23
|
render() {
|
|
25
24
|
const { header, body, inputProps, submitText, cancelText, dialogProps } = this.props;
|
|
@@ -50,12 +49,13 @@ class PromptDialog extends React.Component {
|
|
|
50
49
|
}),
|
|
51
50
|
/*#__PURE__*/ jsxs(Footer, {
|
|
52
51
|
children: [
|
|
53
|
-
/*#__PURE__*/ jsx(
|
|
52
|
+
/*#__PURE__*/ jsx(Button, {
|
|
54
53
|
type: "button",
|
|
55
54
|
onClick: this.cancel,
|
|
56
55
|
children: cancelText
|
|
57
56
|
}),
|
|
58
57
|
/*#__PURE__*/ jsx(ActionButton, {
|
|
58
|
+
onClick: this.submit,
|
|
59
59
|
children: submitText
|
|
60
60
|
})
|
|
61
61
|
]
|
|
@@ -69,9 +69,10 @@ class PromptDialog extends React.Component {
|
|
|
69
69
|
this.setState({
|
|
70
70
|
value: e.target.value
|
|
71
71
|
});
|
|
72
|
-
}, this.cancel = ()=>this.dialog.current
|
|
72
|
+
}, this.cancel = ()=>this.dialog.current?.close(), this.submit = (e)=>{
|
|
73
73
|
e.preventDefault();
|
|
74
|
-
|
|
74
|
+
if (!this.state.value) return;
|
|
75
|
+
this.dialog.current?.close(this.state.value);
|
|
75
76
|
}, this.show = ()=>{
|
|
76
77
|
return new Promise((resolve, reject)=>{
|
|
77
78
|
const onClose = (value)=>{
|
|
@@ -84,7 +85,7 @@ class PromptDialog extends React.Component {
|
|
|
84
85
|
value: this.props.defaultValue
|
|
85
86
|
});
|
|
86
87
|
};
|
|
87
|
-
this.dialog.current
|
|
88
|
+
this.dialog.current?.open(onClose);
|
|
88
89
|
});
|
|
89
90
|
};
|
|
90
91
|
this.state = {
|
|
@@ -92,15 +93,6 @@ class PromptDialog extends React.Component {
|
|
|
92
93
|
};
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
|
-
PromptDialog.propTypes = {
|
|
96
|
-
/** Shown as header of the dialog */ header: PropTypes.string,
|
|
97
|
-
/** Rendered as the body of the dialog */ body: PropTypes.string,
|
|
98
|
-
/** Default value for the input. */ defaultValue: PropTypes.string,
|
|
99
|
-
/** Submit button text. Default value is 'Submit' */ submitText: PropTypes.string,
|
|
100
|
-
/** Cancel button text. Default value is 'Cancel' */ cancelText: PropTypes.string,
|
|
101
|
-
/** Props for the input. */ inputProps: PropTypes.object,
|
|
102
|
-
/** Additional props for the dialog. */ dialogProps: PropTypes.object
|
|
103
|
-
};
|
|
104
96
|
PromptDialog.defaultProps = {
|
|
105
97
|
cancelText: 'Cancel',
|
|
106
98
|
submitText: 'Submit',
|
|
@@ -108,3 +100,4 @@ PromptDialog.defaultProps = {
|
|
|
108
100
|
};
|
|
109
101
|
|
|
110
102
|
export { PromptDialog as default };
|
|
103
|
+
//# sourceMappingURL=PromptDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptDialog.js","sources":["../../../src/components/Dialog/PromptDialog.tsx"],"sourcesContent":["import React, { createRef } from 'react';\nimport styled from '@emotion/styled';\nimport { Button, ActionButton } from '../Button';\nimport { Input } from '../Input';\nimport Dialog, { DialogHeader, DialogBody, DialogFooter } from './Dialog';\n\ntype PromptOption = {\n /** Shown as header of the dialog */\n header: string;\n /** Rendered as the body of the dialog */\n body: string;\n /** Default value for the input. */\n defaultValue?: string;\n /** Submit button text. Default value is 'Submit' */\n submitText?: string;\n /** Cancel button text. Default value is 'Cancel' */\n cancelText?: string;\n /** Props for the input. */\n inputProps?: React.HTMLProps<HTMLInputElement>;\n /** Additional props for the dialog. */\n dialogProps?: React.ComponentProps<typeof Dialog>;\n};\n\nconst BodyText = styled.p`\n margin-top: 0;\n`;\n\nconst InputContainer = styled.div`\n display: flex;\n flex: 1;\n margin-top: 10px;\n\n & > label {\n flex: 1;\n width: 100%;\n padding: 0;\n\n & > input {\n width: 100%;\n padding: 0 8px;\n box-sizing: border-box;\n }\n }\n`;\n\nconst StyledInput = styled(Input)`\n flex: 1;\n padding: 0;\n`;\n\nexport default class PromptDialog extends React.Component<PromptOption, { value?: string }> {\n static defaultProps = {\n cancelText: 'Cancel',\n submitText: 'Submit',\n defaultValue: '',\n };\n\n constructor(props: PromptOption) {\n super(props);\n this.state = {\n value: props.defaultValue,\n };\n }\n\n private dialog = createRef<Dialog>();\n\n private valueChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n this.setState({\n value: e.target.value,\n });\n };\n\n private cancel = () => this.dialog.current?.close();\n\n private submit = (e: React.SyntheticEvent) => {\n e.preventDefault();\n if (!this.state.value) return;\n this.dialog.current?.close(this.state.value);\n };\n\n public show = () => {\n return new Promise((resolve, reject) => {\n const onClose = (value: unknown) => {\n if (value) {\n resolve(value);\n } else {\n reject();\n }\n this.setState({\n value: this.props.defaultValue,\n });\n };\n this.dialog.current?.open(onClose);\n });\n };\n\n render() {\n const { header, body, inputProps, submitText, cancelText, dialogProps } = this.props;\n\n return (\n <Dialog\n {...dialogProps}\n ref={this.dialog}\n closeOnEsc={false}\n closeOnOverlayClick={false}\n >\n <form onSubmit={this.submit}>\n {header && <DialogHeader>{header}</DialogHeader>}\n <DialogBody>\n <BodyText>{body}</BodyText>\n <InputContainer>\n <StyledInput\n value={this.state.value}\n onChange={this.valueChange}\n {...inputProps}\n />\n </InputContainer>\n </DialogBody>\n <DialogFooter>\n <Button type=\"button\" onClick={this.cancel}>\n {cancelText}\n </Button>\n <ActionButton onClick={this.submit}>{submitText}</ActionButton>\n </DialogFooter>\n </form>\n </Dialog>\n );\n }\n}\n"],"names":["BodyText","styled","InputContainer","StyledInput","Input","PromptDialog","React","Component","render","header","body","inputProps","submitText","cancelText","dialogProps","props","_jsx","Dialog","ref","dialog","closeOnEsc","closeOnOverlayClick","_jsxs","form","onSubmit","submit","DialogHeader","DialogBody","value","state","onChange","valueChange","DialogFooter","Button","type","onClick","cancel","ActionButton","createRef","e","setState","target","current","close","preventDefault","show","Promise","resolve","reject","onClose","defaultValue","open","defaultProps"],"mappings":"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"}
|
|
@@ -1,69 +1,47 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { ORIENTATION } from './types';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
|
|
3
|
+
declare const DragAndDrop: React.ForwardRefExoticComponent<{
|
|
4
|
+
/**
|
|
5
|
+
* Orientation of the list layout
|
|
6
|
+
* @default ORIENTATION.VERTICAL
|
|
7
|
+
*/
|
|
8
|
+
orientation?: ORIENTATION;
|
|
6
9
|
/** Drop event handler */
|
|
7
10
|
onDrop: (start: number, end: number) => void;
|
|
8
|
-
/** Shows drag indicator against each list item
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
/** Shows drag indicator against each list item
|
|
12
|
+
* @default false
|
|
13
|
+
*/
|
|
14
|
+
showIndicator?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* i18n: Template for item aria-label. Placeholders: {:position}, {:grabKey}, {:moveKeys}, {:dropKey}, {:altDropKey}
|
|
17
|
+
* @default 'Item {:position}. Press {:grabKey} to grab, {:moveKeys} to move, {:dropKey} or {:altDropKey} to drop'
|
|
18
|
+
*/
|
|
11
19
|
itemAriaLabelTemplate?: string;
|
|
12
|
-
/** i18n: Aria label for drag handle
|
|
20
|
+
/** i18n: Aria label for drag handle
|
|
21
|
+
* @default 'Drag to reorder'
|
|
22
|
+
*/
|
|
13
23
|
dragHandleAriaLabel?: string;
|
|
14
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* i18n: Template for grabbed announcement. Placeholders: {:position}, {:moveKeys}, {:dropKey}, {:altDropKey}, {:cancelKey}
|
|
26
|
+
* @default 'Item {:position} grabbed. Use {:moveKeys} to move, {:dropKey} or {:altDropKey} to drop, {:cancelKey} to cancel'
|
|
27
|
+
*/
|
|
15
28
|
grabbedAnnouncementTemplate?: string;
|
|
16
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* i18n: Template for moved announcement. Placeholders: {:position}
|
|
31
|
+
* @default 'Item moved to position {:position}'
|
|
32
|
+
*/
|
|
17
33
|
movedAnnouncementTemplate?: string;
|
|
18
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* i18n: Template for dropped announcement. Placeholders: {:position}
|
|
36
|
+
* @default 'Item dropped at position {:position}'
|
|
37
|
+
*/
|
|
19
38
|
droppedAnnouncementTemplate?: string;
|
|
20
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* i18n: Template for cancelled announcement
|
|
41
|
+
* @default 'Drag cancelled, item restored to original position'
|
|
42
|
+
*/
|
|
21
43
|
cancelledAnnouncementTemplate?: string;
|
|
22
|
-
} &
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
*
|
|
26
|
-
* @component
|
|
27
|
-
* @example
|
|
28
|
-
* ```tsx
|
|
29
|
-
* <DragAndDrop
|
|
30
|
-
* orientation={ORIENTATION.VERTICAL}
|
|
31
|
-
* onDrop={(start, end) => handleReorder(start, end)}
|
|
32
|
-
* showIndicator={true}
|
|
33
|
-
* >
|
|
34
|
-
* <div>Item 1</div>
|
|
35
|
-
* <div>Item 2</div>
|
|
36
|
-
* <div>Item 3</div>
|
|
37
|
-
* </DragAndDrop>
|
|
38
|
-
* ```
|
|
39
|
-
*
|
|
40
|
-
* @param {DragAndDropProps} props - The component props
|
|
41
|
-
* @param {ORIENTATION} props.orientation - Determines the layout direction (horizontal or vertical). Defaults to VERTICAL.
|
|
42
|
-
* @param {(start: number, end: number) => void} props.onDrop - Callback fired when an item is dropped, receives the start and end indices
|
|
43
|
-
* @param {boolean} props.showIndicator - Whether to display drag indicators for each list item. Defaults to false.
|
|
44
|
-
* @param {React.ReactNode} props.children - Child elements to be rendered as draggable items
|
|
45
|
-
*
|
|
46
|
-
* @returns {JSX.Element} A draggable container with reorderable items
|
|
47
|
-
*/
|
|
48
|
-
declare function DragAndDrop(props: DragAndDropProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
49
|
-
declare namespace DragAndDrop {
|
|
50
|
-
var defaultProps: {
|
|
51
|
-
/** Orientation of the list layout */
|
|
52
|
-
orientation: ORIENTATION;
|
|
53
|
-
/** Whether to display drag indicators for each list item */
|
|
54
|
-
showIndicator: boolean;
|
|
55
|
-
/** Default item aria-label template */
|
|
56
|
-
itemAriaLabelTemplate: string;
|
|
57
|
-
/** Default drag handle aria-label */
|
|
58
|
-
dragHandleAriaLabel: string;
|
|
59
|
-
/** Default grabbed announcement template */
|
|
60
|
-
grabbedAnnouncementTemplate: string;
|
|
61
|
-
/** Default moved announcement template */
|
|
62
|
-
movedAnnouncementTemplate: string;
|
|
63
|
-
/** Default dropped announcement template */
|
|
64
|
-
droppedAnnouncementTemplate: string;
|
|
65
|
-
/** Default cancelled announcement template */
|
|
66
|
-
cancelledAnnouncementTemplate: string;
|
|
67
|
-
};
|
|
68
|
-
}
|
|
44
|
+
} & {
|
|
45
|
+
children?: React.ReactNode | undefined;
|
|
46
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
69
47
|
export default DragAndDrop;
|
|
@@ -2,16 +2,16 @@ import { jsxs, Fragment, jsx } from '@emotion/react/jsx-runtime';
|
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
3
|
import styled from '@emotion/styled';
|
|
4
4
|
import DragItem from './DragItem.js';
|
|
5
|
-
import {
|
|
5
|
+
import { ORIENTATION, DragContext } from './types.js';
|
|
6
6
|
|
|
7
|
-
/** Container Component */ const Container = /*#__PURE__*/ styled("div", {
|
|
8
|
-
target: "
|
|
7
|
+
/** Container Component */ const Container$6 = /*#__PURE__*/ styled("div", {
|
|
8
|
+
target: "e18d6tqk0",
|
|
9
9
|
label: "Container"
|
|
10
|
-
})("flex:1;display:flex;position:relative;flex-wrap:wrap;flex-direction:", (props)=>props.orientation === ORIENTATION.HORIZONTAL ? 'row' : 'column', ";", "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiL2hvbWUvcnVubmVyL3dvcmsvbm8tZnJpbGxzLXVpL25vLWZyaWxscy11aS9zcmMvY29tcG9uZW50cy9EcmFnQW5kRHJvcC9EcmFnQW5kRHJvcC50c3giLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL25vLWZyaWxscy11aS9uby1mcmlsbHMtdWkvc3JjL2NvbXBvbmVudHMvRHJhZ0FuZERyb3AvRHJhZ0FuZERyb3AudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBQcm9wc1dpdGhDaGlsZHJlbiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgRHJhZ0l0ZW0gZnJvbSAnLi9EcmFnSXRlbSc7XG5pbXBvcnQgeyBPUklFTlRBVElPTiwgRHJhZ0NvbnRleHQgfSBmcm9tICcuL3R5cGVzJztcblxudHlwZSBEcmFnQW5kRHJvcFByb3BzID0ge1xuICAgIC8qKiBPcmllbnRhdGlvbiBvZiB0aGUgbGlzdCBsYXlvdXQgKi9cbiAgICBvcmllbnRhdGlvbjogT1JJRU5UQVRJT047XG4gICAgLyoqIERyb3AgZXZlbnQgaGFuZGxlciAqL1xuICAgIG9uRHJvcDogKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSA9PiB2b2lkO1xuICAgIC8qKiBTaG93cyBkcmFnIGluZGljYXRvciBhZ2FpbnN0IGVhY2ggbGlzdCBpdGVtICovXG4gICAgc2hvd0luZGljYXRvcjogYm9vbGVhbjtcbiAgICAvKiogaTE4bjogVGVtcGxhdGUgZm9yIGl0ZW0gYXJpYS1sYWJlbC4gUGxhY2Vob2xkZXJzOiB7OnBvc2l0aW9ufSwgezpncmFiS2V5fSwgezptb3ZlS2V5c30sIHs6ZHJvcEtleX0sIHs6YWx0RHJvcEtleX0gKi9cbiAgICBpdGVtQXJpYUxhYmVsVGVtcGxhdGU/OiBzdHJpbmc7XG4gICAgLyoqIGkxOG46IEFyaWEgbGFiZWwgZm9yIGRyYWcgaGFuZGxlICovXG4gICAgZHJhZ0hhbmRsZUFyaWFMYWJlbD86IHN0cmluZztcbiAgICAvKiogaTE4bjogVGVtcGxhdGUgZm9yIGdyYWJiZWQgYW5ub3VuY2VtZW50LiBQbGFjZWhvbGRlcnM6IHs6cG9zaXRpb259LCB7Om1vdmVLZXlzfSwgezpkcm9wS2V5fSwgezphbHREcm9wS2V5fSwgezpjYW5jZWxLZXl9ICovXG4gICAgZ3JhYmJlZEFubm91bmNlbWVudFRlbXBsYXRlPzogc3RyaW5nO1xuICAgIC8qKiBpMThuOiBUZW1wbGF0ZSBmb3IgbW92ZWQgYW5ub3VuY2VtZW50LiBQbGFjZWhvbGRlcnM6IHs6cG9zaXRpb259ICovXG4gICAgbW92ZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZT86IHN0cmluZztcbiAgICAvKiogaTE4bjogVGVtcGxhdGUgZm9yIGRyb3BwZWQgYW5ub3VuY2VtZW50LiBQbGFjZWhvbGRlcnM6IHs6cG9zaXRpb259ICovXG4gICAgZHJvcHBlZEFubm91bmNlbWVudFRlbXBsYXRlPzogc3RyaW5nO1xuICAgIC8qKiBpMThuOiBUZW1wbGF0ZSBmb3IgY2FuY2VsbGVkIGFubm91bmNlbWVudCAqL1xuICAgIGNhbmNlbGxlZEFubm91bmNlbWVudFRlbXBsYXRlPzogc3RyaW5nO1xufSAmIFByb3BzV2l0aENoaWxkcmVuPHVua25vd24+O1xuXG4vKiogQ29udGFpbmVyIENvbXBvbmVudCAqL1xuY29uc3QgQ29udGFpbmVyID0gc3R5bGVkLmRpdjx7IG9yaWVudGF0aW9uOiBPUklFTlRBVElPTiB9PmBcbiAgICBmbGV4OiAxO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBmbGV4LWRpcmVjdGlvbjogJHsocHJvcHMpID0+IChwcm9wcy5vcmllbnRhdGlvbiA9PT0gT1JJRU5UQVRJT04uSE9SSVpPTlRBTCA/ICdyb3cnIDogJ2NvbHVtbicpfTtcbmA7XG5cbi8qKiBWaXN1YWxseSBoaWRkZW4gYnV0IGFjY2Vzc2libGUgdG8gc2NyZWVuIHJlYWRlcnMgKi9cbmNvbnN0IFZpc3VhbGx5SGlkZGVuID0gc3R5bGVkLmRpdmBcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDFweDtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogLTFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBib3JkZXItd2lkdGg6IDA7XG5gO1xuXG4vKipcbiAqIEEgZHJhZyBhbmQgZHJvcCBjb250YWluZXIgY29tcG9uZW50IHRoYXQgZW5hYmxlcyByZW9yZGVyaW5nIG9mIGNoaWxkIGVsZW1lbnRzLlxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIDxEcmFnQW5kRHJvcFxuICogICBvcmllbnRhdGlvbj17T1JJRU5UQVRJT04uVkVSVElDQUx9XG4gKiAgIG9uRHJvcD17KHN0YXJ0LCBlbmQpID0+IGhhbmRsZVJlb3JkZXIoc3RhcnQsIGVuZCl9XG4gKiAgIHNob3dJbmRpY2F0b3I9e3RydWV9XG4gKiA+XG4gKiAgIDxkaXY+SXRlbSAxPC9kaXY+XG4gKiAgIDxkaXY+SXRlbSAyPC9kaXY+XG4gKiAgIDxkaXY+SXRlbSAzPC9kaXY+XG4gKiA8L0RyYWdBbmREcm9wPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtEcmFnQW5kRHJvcFByb3BzfSBwcm9wcyAtIFRoZSBjb21wb25lbnQgcHJvcHNcbiAqIEBwYXJhbSB7T1JJRU5UQVRJT059IHByb3BzLm9yaWVudGF0aW9uIC0gRGV0ZXJtaW5lcyB0aGUgbGF5b3V0IGRpcmVjdGlvbiAoaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCkuIERlZmF1bHRzIHRvIFZFUlRJQ0FMLlxuICogQHBhcmFtIHsoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpID0+IHZvaWR9IHByb3BzLm9uRHJvcCAtIENhbGxiYWNrIGZpcmVkIHdoZW4gYW4gaXRlbSBpcyBkcm9wcGVkLCByZWNlaXZlcyB0aGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByb3BzLnNob3dJbmRpY2F0b3IgLSBXaGV0aGVyIHRvIGRpc3BsYXkgZHJhZyBpbmRpY2F0b3JzIGZvciBlYWNoIGxpc3QgaXRlbS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcGFyYW0ge1JlYWN0LlJlYWN0Tm9kZX0gcHJvcHMuY2hpbGRyZW4gLSBDaGlsZCBlbGVtZW50cyB0byBiZSByZW5kZXJlZCBhcyBkcmFnZ2FibGUgaXRlbXNcbiAqXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9IEEgZHJhZ2dhYmxlIGNvbnRhaW5lciB3aXRoIHJlb3JkZXJhYmxlIGl0ZW1zXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERyYWdBbmREcm9wKHByb3BzOiBEcmFnQW5kRHJvcFByb3BzKSB7XG4gICAgY29uc3Qge1xuICAgICAgICBvcmllbnRhdGlvbixcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIG9uRHJvcCxcbiAgICAgICAgc2hvd0luZGljYXRvcixcbiAgICAgICAgaXRlbUFyaWFMYWJlbFRlbXBsYXRlLFxuICAgICAgICBkcmFnSGFuZGxlQXJpYUxhYmVsLFxuICAgICAgICBncmFiYmVkQW5ub3VuY2VtZW50VGVtcGxhdGUsXG4gICAgICAgIG1vdmVkQW5ub3VuY2VtZW50VGVtcGxhdGUsXG4gICAgICAgIGRyb3BwZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZSxcbiAgICAgICAgY2FuY2VsbGVkQW5ub3VuY2VtZW50VGVtcGxhdGUsXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtzdGFydEluZGV4LCBzZXRTdGFydEluZGV4XSA9IHVzZVN0YXRlPG51bWJlcj4obnVsbCk7XG4gICAgY29uc3QgW29yaWdpbmFsSW5kZXgsIHNldE9yaWdpbmFsSW5kZXhdID0gdXNlU3RhdGU8bnVtYmVyPihudWxsKTtcbiAgICBjb25zdCBbaXNEcmFnZ2luZywgc2V0SXNEcmFnZ2luZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gICAgY29uc3QgW2RyYWdPdmVyLCBzZXREcmFnT3Zlcl0gPSB1c2VTdGF0ZTxudW1iZXI+KG51bGwpO1xuICAgIGNvbnN0IFthbm5vdW5jZW1lbnQsIHNldEFubm91bmNlbWVudF0gPSB1c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xuICAgIGNvbnN0IHRvdGFsSXRlbXMgPSBjaGlsZHJlbkFycmF5Lmxlbmd0aDtcblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2UgcGxhY2Vob2xkZXJzIGluIGkxOG4gdGVtcGxhdGVzXG4gICAgICovXG4gICAgY29uc3QgcmVwbGFjZVBsYWNlaG9sZGVycyA9IChcbiAgICAgICAgdGVtcGxhdGU6IHN0cmluZyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgcG9zaXRpb24/OiBudW1iZXI7XG4gICAgICAgICAgICBncmFiS2V5Pzogc3RyaW5nO1xuICAgICAgICAgICAgZHJvcEtleT86IHN0cmluZztcbiAgICAgICAgICAgIGFsdERyb3BLZXk/OiBzdHJpbmc7XG4gICAgICAgICAgICBjYW5jZWxLZXk/OiBzdHJpbmc7XG4gICAgICAgICAgICBtb3ZlS2V5cz86IHN0cmluZztcbiAgICAgICAgfSxcbiAgICApOiBzdHJpbmcgPT4ge1xuICAgICAgICByZXR1cm4gdGVtcGxhdGVcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHs6cG9zaXRpb25cXH0vZywgU3RyaW5nKGRhdGEucG9zaXRpb24gPz8gJycpKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcezpncmFiS2V5XFx9L2csIGRhdGEuZ3JhYktleSA/PyAnU3BhY2UnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcezpkcm9wS2V5XFx9L2csIGRhdGEuZHJvcEtleSA/PyAnU3BhY2UnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcezphbHREcm9wS2V5XFx9L2csIGRhdGEuYWx0RHJvcEtleSA/PyAnRW50ZXInKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcezpjYW5jZWxLZXlcXH0vZywgZGF0YS5jYW5jZWxLZXkgPz8gJ0VzY2FwZScpXG4gICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgICAvXFx7Om1vdmVLZXlzXFx9L2csXG4gICAgICAgICAgICAgICAgZGF0YS5tb3ZlS2V5cyA/P1xuICAgICAgICAgICAgICAgICAgICAob3JpZW50YXRpb24gPT09IE9SSUVOVEFUSU9OLlZFUlRJQ0FMID8gJ0Fycm93IFVwL0Rvd24nIDogJ0Fycm93IExlZnQvUmlnaHQnKSxcbiAgICAgICAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIGkxOG4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICBjb25zdCBpMThuID0ge1xuICAgICAgICBpdGVtQXJpYUxhYmVsVGVtcGxhdGU6XG4gICAgICAgICAgICBpdGVtQXJpYUxhYmVsVGVtcGxhdGUgPz9cbiAgICAgICAgICAgICdJdGVtIHs6cG9zaXRpb259LiBQcmVzcyB7OmdyYWJLZXl9IHRvIGdyYWIsIHs6bW92ZUtleXN9IHRvIG1vdmUsIHs6ZHJvcEtleX0gb3IgezphbHREcm9wS2V5fSB0byBkcm9wJyxcbiAgICAgICAgZHJhZ0hhbmRsZUFyaWFMYWJlbDogZHJhZ0hhbmRsZUFyaWFMYWJlbCA/PyAnRHJhZyB0byByZW9yZGVyJyxcbiAgICAgICAgZ3JhYmJlZEFubm91bmNlbWVudFRlbXBsYXRlOlxuICAgICAgICAgICAgZ3JhYmJlZEFubm91bmNlbWVudFRlbXBsYXRlID8/XG4gICAgICAgICAgICAnSXRlbSB7OnBvc2l0aW9ufSBncmFiYmVkLiBVc2Ugezptb3ZlS2V5c30gdG8gbW92ZSwgezpkcm9wS2V5fSBvciB7OmFsdERyb3BLZXl9IHRvIGRyb3AsIHs6Y2FuY2VsS2V5fSB0byBjYW5jZWwnLFxuICAgICAgICBtb3ZlZEFubm91bmNlbWVudFRlbXBsYXRlOlxuICAgICAgICAgICAgbW92ZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZSA/PyAnSXRlbSBtb3ZlZCB0byBwb3NpdGlvbiB7OnBvc2l0aW9ufScsXG4gICAgICAgIGRyb3BwZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZTpcbiAgICAgICAgICAgIGRyb3BwZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZSA/PyAnSXRlbSBkcm9wcGVkIGF0IHBvc2l0aW9uIHs6cG9zaXRpb259JyxcbiAgICAgICAgY2FuY2VsbGVkQW5ub3VuY2VtZW50VGVtcGxhdGU6XG4gICAgICAgICAgICBjYW5jZWxsZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZSA/PyAnRHJhZyBjYW5jZWxsZWQsIGl0ZW0gcmVzdG9yZWQgdG8gb3JpZ2luYWwgcG9zaXRpb24nLFxuICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzLFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBEcm9wIGhhbmRsZXIgaW52b2tlZCB3aGVuIGEgZHJhZ2dhYmxlIGl0ZW0gaXMgcmVsZWFzZWQuXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICovXG4gICAgY29uc3QgZHJvcCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChzdGFydEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBvbkRyb3A/LihzdGFydEluZGV4LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3RhcnRJbmRleChudWxsKTtcbiAgICAgICAgc2V0T3JpZ2luYWxJbmRleChudWxsKTtcbiAgICAgICAgc2V0SXNEcmFnZ2luZyhmYWxzZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENhbmNlbCBoYW5kbGVyIHRvIHJlc3RvcmUgaXRlbSB0byBvcmlnaW5hbCBwb3NpdGlvblxuICAgICAqL1xuICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKG9yaWdpbmFsSW5kZXggIT09IG51bGwgJiYgc3RhcnRJbmRleCAhPT0gbnVsbCAmJiBzdGFydEluZGV4ICE9PSBvcmlnaW5hbEluZGV4KSB7XG4gICAgICAgICAgICBvbkRyb3A/LihzdGFydEluZGV4LCBvcmlnaW5hbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRTdGFydEluZGV4KG51bGwpO1xuICAgICAgICBzZXRPcmlnaW5hbEluZGV4KG51bGwpO1xuICAgICAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU3RhcnQgZ3JhYiBoYW5kbGVyIHRvIHRyYWNrIG9yaWdpbmFsIHBvc2l0aW9uXG4gICAgICovXG4gICAgY29uc3Qgc3RhcnRHcmFiID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgc2V0U3RhcnRJbmRleChpbmRleCk7XG4gICAgICAgIHNldE9yaWdpbmFsSW5kZXgoaW5kZXgpO1xuICAgICAgICBzZXRJc0RyYWdnaW5nKHRydWUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAgPERyYWdDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2V0U3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZHJvcCxcbiAgICAgICAgICAgICAgICAgICAgb25Ecm9wLFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWwsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0R3JhYixcbiAgICAgICAgICAgICAgICAgICAgaXNEcmFnZ2luZyxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNEcmFnZ2luZyxcbiAgICAgICAgICAgICAgICAgICAgc2V0RHJhZ092ZXIsXG4gICAgICAgICAgICAgICAgICAgIGkxOG4sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Q29udGFpbmVyIG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn0gcm9sZT1cImxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAge1JlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbkFycmF5LCAoY2hpbGQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJhZ0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dJbmRpY2F0b3I9e3Nob3dJbmRpY2F0b3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ092ZXI9e2RyYWdPdmVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXM9e3RvdGFsSXRlbXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QW5ub3VuY2VtZW50PXtzZXRBbm5vdW5jZW1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EcmFnSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9Db250YWluZXI+XG4gICAgICAgICAgICA8L0RyYWdDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgPFZpc3VhbGx5SGlkZGVuIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIj5cbiAgICAgICAgICAgICAgICB7YW5ub3VuY2VtZW50fVxuICAgICAgICAgICAgPC9WaXN1YWxseUhpZGRlbj5cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuRHJhZ0FuZERyb3AuZGVmYXVsdFByb3BzID0ge1xuICAgIC8qKiBPcmllbnRhdGlvbiBvZiB0aGUgbGlzdCBsYXlvdXQgKi9cbiAgICBvcmllbnRhdGlvbjogT1JJRU5UQVRJT04uVkVSVElDQUwsXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBkcmFnIGluZGljYXRvcnMgZm9yIGVhY2ggbGlzdCBpdGVtICovXG4gICAgc2hvd0luZGljYXRvcjogZmFsc2UsXG4gICAgLyoqIERlZmF1bHQgaXRlbSBhcmlhLWxhYmVsIHRlbXBsYXRlICovXG4gICAgaXRlbUFyaWFMYWJlbFRlbXBsYXRlOlxuICAgICAgICAnSXRlbSB7OnBvc2l0aW9ufS4gUHJlc3MgezpncmFiS2V5fSB0byBncmFiLCB7Om1vdmVLZXlzfSB0byBtb3ZlLCB7OmRyb3BLZXl9IG9yIHs6YWx0RHJvcEtleX0gdG8gZHJvcCcsXG4gICAgLyoqIERlZmF1bHQgZHJhZyBoYW5kbGUgYXJpYS1sYWJlbCAqL1xuICAgIGRyYWdIYW5kbGVBcmlhTGFiZWw6ICdEcmFnIHRvIHJlb3JkZXInLFxuICAgIC8qKiBEZWZhdWx0IGdyYWJiZWQgYW5ub3VuY2VtZW50IHRlbXBsYXRlICovXG4gICAgZ3JhYmJlZEFubm91bmNlbWVudFRlbXBsYXRlOlxuICAgICAgICAnSXRlbSB7OnBvc2l0aW9ufSBncmFiYmVkLiBVc2Ugezptb3ZlS2V5c30gdG8gbW92ZSwgezpkcm9wS2V5fSBvciB7OmFsdERyb3BLZXl9IHRvIGRyb3AsIHs6Y2FuY2VsS2V5fSB0byBjYW5jZWwnLFxuICAgIC8qKiBEZWZhdWx0IG1vdmVkIGFubm91bmNlbWVudCB0ZW1wbGF0ZSAqL1xuICAgIG1vdmVkQW5ub3VuY2VtZW50VGVtcGxhdGU6ICdJdGVtIG1vdmVkIHRvIHBvc2l0aW9uIHs6cG9zaXRpb259JyxcbiAgICAvKiogRGVmYXVsdCBkcm9wcGVkIGFubm91bmNlbWVudCB0ZW1wbGF0ZSAqL1xuICAgIGRyb3BwZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZTogJ0l0ZW0gZHJvcHBlZCBhdCBwb3NpdGlvbiB7OnBvc2l0aW9ufScsXG4gICAgLyoqIERlZmF1bHQgY2FuY2VsbGVkIGFubm91bmNlbWVudCB0ZW1wbGF0ZSAqL1xuICAgIGNhbmNlbGxlZEFubm91bmNlbWVudFRlbXBsYXRlOiAnRHJhZyBjYW5jZWxsZWQsIGl0ZW0gcmVzdG9yZWQgdG8gb3JpZ2luYWwgcG9zaXRpb24nLFxufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQmtCIn0= */");
|
|
11
|
-
/** Visually hidden but accessible to screen readers */ const VisuallyHidden = /*#__PURE__*/ styled("div", {
|
|
12
|
-
target: "
|
|
10
|
+
})("flex:1;display:flex;position:relative;flex-wrap:wrap;flex-direction:", (props)=>props.orientation === ORIENTATION.HORIZONTAL ? 'row' : 'column', ";");
|
|
11
|
+
/** Visually hidden but accessible to screen readers */ const VisuallyHidden$2 = /*#__PURE__*/ styled("div", {
|
|
12
|
+
target: "e18d6tqk1",
|
|
13
13
|
label: "VisuallyHidden"
|
|
14
|
-
})("position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;", "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiL2hvbWUvcnVubmVyL3dvcmsvbm8tZnJpbGxzLXVpL25vLWZyaWxscy11aS9zcmMvY29tcG9uZW50cy9EcmFnQW5kRHJvcC9EcmFnQW5kRHJvcC50c3giLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL25vLWZyaWxscy11aS9uby1mcmlsbHMtdWkvc3JjL2NvbXBvbmVudHMvRHJhZ0FuZERyb3AvRHJhZ0FuZERyb3AudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBQcm9wc1dpdGhDaGlsZHJlbiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgRHJhZ0l0ZW0gZnJvbSAnLi9EcmFnSXRlbSc7XG5pbXBvcnQgeyBPUklFTlRBVElPTiwgRHJhZ0NvbnRleHQgfSBmcm9tICcuL3R5cGVzJztcblxudHlwZSBEcmFnQW5kRHJvcFByb3BzID0ge1xuICAgIC8qKiBPcmllbnRhdGlvbiBvZiB0aGUgbGlzdCBsYXlvdXQgKi9cbiAgICBvcmllbnRhdGlvbjogT1JJRU5UQVRJT047XG4gICAgLyoqIERyb3AgZXZlbnQgaGFuZGxlciAqL1xuICAgIG9uRHJvcDogKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSA9PiB2b2lkO1xuICAgIC8qKiBTaG93cyBkcmFnIGluZGljYXRvciBhZ2FpbnN0IGVhY2ggbGlzdCBpdGVtICovXG4gICAgc2hvd0luZGljYXRvcjogYm9vbGVhbjtcbiAgICAvKiogaTE4bjogVGVtcGxhdGUgZm9yIGl0ZW0gYXJpYS1sYWJlbC4gUGxhY2Vob2xkZXJzOiB7OnBvc2l0aW9ufSwgezpncmFiS2V5fSwgezptb3ZlS2V5c30sIHs6ZHJvcEtleX0sIHs6YWx0RHJvcEtleX0gKi9cbiAgICBpdGVtQXJpYUxhYmVsVGVtcGxhdGU/OiBzdHJpbmc7XG4gICAgLyoqIGkxOG46IEFyaWEgbGFiZWwgZm9yIGRyYWcgaGFuZGxlICovXG4gICAgZHJhZ0hhbmRsZUFyaWFMYWJlbD86IHN0cmluZztcbiAgICAvKiogaTE4bjogVGVtcGxhdGUgZm9yIGdyYWJiZWQgYW5ub3VuY2VtZW50LiBQbGFjZWhvbGRlcnM6IHs6cG9zaXRpb259LCB7Om1vdmVLZXlzfSwgezpkcm9wS2V5fSwgezphbHREcm9wS2V5fSwgezpjYW5jZWxLZXl9ICovXG4gICAgZ3JhYmJlZEFubm91bmNlbWVudFRlbXBsYXRlPzogc3RyaW5nO1xuICAgIC8qKiBpMThuOiBUZW1wbGF0ZSBmb3IgbW92ZWQgYW5ub3VuY2VtZW50LiBQbGFjZWhvbGRlcnM6IHs6cG9zaXRpb259ICovXG4gICAgbW92ZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZT86IHN0cmluZztcbiAgICAvKiogaTE4bjogVGVtcGxhdGUgZm9yIGRyb3BwZWQgYW5ub3VuY2VtZW50LiBQbGFjZWhvbGRlcnM6IHs6cG9zaXRpb259ICovXG4gICAgZHJvcHBlZEFubm91bmNlbWVudFRlbXBsYXRlPzogc3RyaW5nO1xuICAgIC8qKiBpMThuOiBUZW1wbGF0ZSBmb3IgY2FuY2VsbGVkIGFubm91bmNlbWVudCAqL1xuICAgIGNhbmNlbGxlZEFubm91bmNlbWVudFRlbXBsYXRlPzogc3RyaW5nO1xufSAmIFByb3BzV2l0aENoaWxkcmVuPHVua25vd24+O1xuXG4vKiogQ29udGFpbmVyIENvbXBvbmVudCAqL1xuY29uc3QgQ29udGFpbmVyID0gc3R5bGVkLmRpdjx7IG9yaWVudGF0aW9uOiBPUklFTlRBVElPTiB9PmBcbiAgICBmbGV4OiAxO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBmbGV4LWRpcmVjdGlvbjogJHsocHJvcHMpID0+IChwcm9wcy5vcmllbnRhdGlvbiA9PT0gT1JJRU5UQVRJT04uSE9SSVpPTlRBTCA/ICdyb3cnIDogJ2NvbHVtbicpfTtcbmA7XG5cbi8qKiBWaXN1YWxseSBoaWRkZW4gYnV0IGFjY2Vzc2libGUgdG8gc2NyZWVuIHJlYWRlcnMgKi9cbmNvbnN0IFZpc3VhbGx5SGlkZGVuID0gc3R5bGVkLmRpdmBcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDFweDtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogLTFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBib3JkZXItd2lkdGg6IDA7XG5gO1xuXG4vKipcbiAqIEEgZHJhZyBhbmQgZHJvcCBjb250YWluZXIgY29tcG9uZW50IHRoYXQgZW5hYmxlcyByZW9yZGVyaW5nIG9mIGNoaWxkIGVsZW1lbnRzLlxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIDxEcmFnQW5kRHJvcFxuICogICBvcmllbnRhdGlvbj17T1JJRU5UQVRJT04uVkVSVElDQUx9XG4gKiAgIG9uRHJvcD17KHN0YXJ0LCBlbmQpID0+IGhhbmRsZVJlb3JkZXIoc3RhcnQsIGVuZCl9XG4gKiAgIHNob3dJbmRpY2F0b3I9e3RydWV9XG4gKiA+XG4gKiAgIDxkaXY+SXRlbSAxPC9kaXY+XG4gKiAgIDxkaXY+SXRlbSAyPC9kaXY+XG4gKiAgIDxkaXY+SXRlbSAzPC9kaXY+XG4gKiA8L0RyYWdBbmREcm9wPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtEcmFnQW5kRHJvcFByb3BzfSBwcm9wcyAtIFRoZSBjb21wb25lbnQgcHJvcHNcbiAqIEBwYXJhbSB7T1JJRU5UQVRJT059IHByb3BzLm9yaWVudGF0aW9uIC0gRGV0ZXJtaW5lcyB0aGUgbGF5b3V0IGRpcmVjdGlvbiAoaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCkuIERlZmF1bHRzIHRvIFZFUlRJQ0FMLlxuICogQHBhcmFtIHsoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpID0+IHZvaWR9IHByb3BzLm9uRHJvcCAtIENhbGxiYWNrIGZpcmVkIHdoZW4gYW4gaXRlbSBpcyBkcm9wcGVkLCByZWNlaXZlcyB0aGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByb3BzLnNob3dJbmRpY2F0b3IgLSBXaGV0aGVyIHRvIGRpc3BsYXkgZHJhZyBpbmRpY2F0b3JzIGZvciBlYWNoIGxpc3QgaXRlbS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcGFyYW0ge1JlYWN0LlJlYWN0Tm9kZX0gcHJvcHMuY2hpbGRyZW4gLSBDaGlsZCBlbGVtZW50cyB0byBiZSByZW5kZXJlZCBhcyBkcmFnZ2FibGUgaXRlbXNcbiAqXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9IEEgZHJhZ2dhYmxlIGNvbnRhaW5lciB3aXRoIHJlb3JkZXJhYmxlIGl0ZW1zXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERyYWdBbmREcm9wKHByb3BzOiBEcmFnQW5kRHJvcFByb3BzKSB7XG4gICAgY29uc3Qge1xuICAgICAgICBvcmllbnRhdGlvbixcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIG9uRHJvcCxcbiAgICAgICAgc2hvd0luZGljYXRvcixcbiAgICAgICAgaXRlbUFyaWFMYWJlbFRlbXBsYXRlLFxuICAgICAgICBkcmFnSGFuZGxlQXJpYUxhYmVsLFxuICAgICAgICBncmFiYmVkQW5ub3VuY2VtZW50VGVtcGxhdGUsXG4gICAgICAgIG1vdmVkQW5ub3VuY2VtZW50VGVtcGxhdGUsXG4gICAgICAgIGRyb3BwZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZSxcbiAgICAgICAgY2FuY2VsbGVkQW5ub3VuY2VtZW50VGVtcGxhdGUsXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtzdGFydEluZGV4LCBzZXRTdGFydEluZGV4XSA9IHVzZVN0YXRlPG51bWJlcj4obnVsbCk7XG4gICAgY29uc3QgW29yaWdpbmFsSW5kZXgsIHNldE9yaWdpbmFsSW5kZXhdID0gdXNlU3RhdGU8bnVtYmVyPihudWxsKTtcbiAgICBjb25zdCBbaXNEcmFnZ2luZywgc2V0SXNEcmFnZ2luZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gICAgY29uc3QgW2RyYWdPdmVyLCBzZXREcmFnT3Zlcl0gPSB1c2VTdGF0ZTxudW1iZXI+KG51bGwpO1xuICAgIGNvbnN0IFthbm5vdW5jZW1lbnQsIHNldEFubm91bmNlbWVudF0gPSB1c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xuICAgIGNvbnN0IHRvdGFsSXRlbXMgPSBjaGlsZHJlbkFycmF5Lmxlbmd0aDtcblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2UgcGxhY2Vob2xkZXJzIGluIGkxOG4gdGVtcGxhdGVzXG4gICAgICovXG4gICAgY29uc3QgcmVwbGFjZVBsYWNlaG9sZGVycyA9IChcbiAgICAgICAgdGVtcGxhdGU6IHN0cmluZyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgcG9zaXRpb24/OiBudW1iZXI7XG4gICAgICAgICAgICBncmFiS2V5Pzogc3RyaW5nO1xuICAgICAgICAgICAgZHJvcEtleT86IHN0cmluZztcbiAgICAgICAgICAgIGFsdERyb3BLZXk/OiBzdHJpbmc7XG4gICAgICAgICAgICBjYW5jZWxLZXk/OiBzdHJpbmc7XG4gICAgICAgICAgICBtb3ZlS2V5cz86IHN0cmluZztcbiAgICAgICAgfSxcbiAgICApOiBzdHJpbmcgPT4ge1xuICAgICAgICByZXR1cm4gdGVtcGxhdGVcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHs6cG9zaXRpb25cXH0vZywgU3RyaW5nKGRhdGEucG9zaXRpb24gPz8gJycpKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcezpncmFiS2V5XFx9L2csIGRhdGEuZ3JhYktleSA/PyAnU3BhY2UnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcezpkcm9wS2V5XFx9L2csIGRhdGEuZHJvcEtleSA/PyAnU3BhY2UnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcezphbHREcm9wS2V5XFx9L2csIGRhdGEuYWx0RHJvcEtleSA/PyAnRW50ZXInKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcezpjYW5jZWxLZXlcXH0vZywgZGF0YS5jYW5jZWxLZXkgPz8gJ0VzY2FwZScpXG4gICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgICAvXFx7Om1vdmVLZXlzXFx9L2csXG4gICAgICAgICAgICAgICAgZGF0YS5tb3ZlS2V5cyA/P1xuICAgICAgICAgICAgICAgICAgICAob3JpZW50YXRpb24gPT09IE9SSUVOVEFUSU9OLlZFUlRJQ0FMID8gJ0Fycm93IFVwL0Rvd24nIDogJ0Fycm93IExlZnQvUmlnaHQnKSxcbiAgICAgICAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIGkxOG4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICBjb25zdCBpMThuID0ge1xuICAgICAgICBpdGVtQXJpYUxhYmVsVGVtcGxhdGU6XG4gICAgICAgICAgICBpdGVtQXJpYUxhYmVsVGVtcGxhdGUgPz9cbiAgICAgICAgICAgICdJdGVtIHs6cG9zaXRpb259LiBQcmVzcyB7OmdyYWJLZXl9IHRvIGdyYWIsIHs6bW92ZUtleXN9IHRvIG1vdmUsIHs6ZHJvcEtleX0gb3IgezphbHREcm9wS2V5fSB0byBkcm9wJyxcbiAgICAgICAgZHJhZ0hhbmRsZUFyaWFMYWJlbDogZHJhZ0hhbmRsZUFyaWFMYWJlbCA/PyAnRHJhZyB0byByZW9yZGVyJyxcbiAgICAgICAgZ3JhYmJlZEFubm91bmNlbWVudFRlbXBsYXRlOlxuICAgICAgICAgICAgZ3JhYmJlZEFubm91bmNlbWVudFRlbXBsYXRlID8/XG4gICAgICAgICAgICAnSXRlbSB7OnBvc2l0aW9ufSBncmFiYmVkLiBVc2Ugezptb3ZlS2V5c30gdG8gbW92ZSwgezpkcm9wS2V5fSBvciB7OmFsdERyb3BLZXl9IHRvIGRyb3AsIHs6Y2FuY2VsS2V5fSB0byBjYW5jZWwnLFxuICAgICAgICBtb3ZlZEFubm91bmNlbWVudFRlbXBsYXRlOlxuICAgICAgICAgICAgbW92ZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZSA/PyAnSXRlbSBtb3ZlZCB0byBwb3NpdGlvbiB7OnBvc2l0aW9ufScsXG4gICAgICAgIGRyb3BwZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZTpcbiAgICAgICAgICAgIGRyb3BwZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZSA/PyAnSXRlbSBkcm9wcGVkIGF0IHBvc2l0aW9uIHs6cG9zaXRpb259JyxcbiAgICAgICAgY2FuY2VsbGVkQW5ub3VuY2VtZW50VGVtcGxhdGU6XG4gICAgICAgICAgICBjYW5jZWxsZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZSA/PyAnRHJhZyBjYW5jZWxsZWQsIGl0ZW0gcmVzdG9yZWQgdG8gb3JpZ2luYWwgcG9zaXRpb24nLFxuICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzLFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBEcm9wIGhhbmRsZXIgaW52b2tlZCB3aGVuIGEgZHJhZ2dhYmxlIGl0ZW0gaXMgcmVsZWFzZWQuXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICovXG4gICAgY29uc3QgZHJvcCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChzdGFydEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBvbkRyb3A/LihzdGFydEluZGV4LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3RhcnRJbmRleChudWxsKTtcbiAgICAgICAgc2V0T3JpZ2luYWxJbmRleChudWxsKTtcbiAgICAgICAgc2V0SXNEcmFnZ2luZyhmYWxzZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENhbmNlbCBoYW5kbGVyIHRvIHJlc3RvcmUgaXRlbSB0byBvcmlnaW5hbCBwb3NpdGlvblxuICAgICAqL1xuICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKG9yaWdpbmFsSW5kZXggIT09IG51bGwgJiYgc3RhcnRJbmRleCAhPT0gbnVsbCAmJiBzdGFydEluZGV4ICE9PSBvcmlnaW5hbEluZGV4KSB7XG4gICAgICAgICAgICBvbkRyb3A/LihzdGFydEluZGV4LCBvcmlnaW5hbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRTdGFydEluZGV4KG51bGwpO1xuICAgICAgICBzZXRPcmlnaW5hbEluZGV4KG51bGwpO1xuICAgICAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU3RhcnQgZ3JhYiBoYW5kbGVyIHRvIHRyYWNrIG9yaWdpbmFsIHBvc2l0aW9uXG4gICAgICovXG4gICAgY29uc3Qgc3RhcnRHcmFiID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgc2V0U3RhcnRJbmRleChpbmRleCk7XG4gICAgICAgIHNldE9yaWdpbmFsSW5kZXgoaW5kZXgpO1xuICAgICAgICBzZXRJc0RyYWdnaW5nKHRydWUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAgPERyYWdDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2V0U3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZHJvcCxcbiAgICAgICAgICAgICAgICAgICAgb25Ecm9wLFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWwsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0R3JhYixcbiAgICAgICAgICAgICAgICAgICAgaXNEcmFnZ2luZyxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNEcmFnZ2luZyxcbiAgICAgICAgICAgICAgICAgICAgc2V0RHJhZ092ZXIsXG4gICAgICAgICAgICAgICAgICAgIGkxOG4sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Q29udGFpbmVyIG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn0gcm9sZT1cImxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAge1JlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbkFycmF5LCAoY2hpbGQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJhZ0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dJbmRpY2F0b3I9e3Nob3dJbmRpY2F0b3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ092ZXI9e2RyYWdPdmVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXM9e3RvdGFsSXRlbXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QW5ub3VuY2VtZW50PXtzZXRBbm5vdW5jZW1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9EcmFnSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9Db250YWluZXI+XG4gICAgICAgICAgICA8L0RyYWdDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgPFZpc3VhbGx5SGlkZGVuIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIj5cbiAgICAgICAgICAgICAgICB7YW5ub3VuY2VtZW50fVxuICAgICAgICAgICAgPC9WaXN1YWxseUhpZGRlbj5cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuRHJhZ0FuZERyb3AuZGVmYXVsdFByb3BzID0ge1xuICAgIC8qKiBPcmllbnRhdGlvbiBvZiB0aGUgbGlzdCBsYXlvdXQgKi9cbiAgICBvcmllbnRhdGlvbjogT1JJRU5UQVRJT04uVkVSVElDQUwsXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBkcmFnIGluZGljYXRvcnMgZm9yIGVhY2ggbGlzdCBpdGVtICovXG4gICAgc2hvd0luZGljYXRvcjogZmFsc2UsXG4gICAgLyoqIERlZmF1bHQgaXRlbSBhcmlhLWxhYmVsIHRlbXBsYXRlICovXG4gICAgaXRlbUFyaWFMYWJlbFRlbXBsYXRlOlxuICAgICAgICAnSXRlbSB7OnBvc2l0aW9ufS4gUHJlc3MgezpncmFiS2V5fSB0byBncmFiLCB7Om1vdmVLZXlzfSB0byBtb3ZlLCB7OmRyb3BLZXl9IG9yIHs6YWx0RHJvcEtleX0gdG8gZHJvcCcsXG4gICAgLyoqIERlZmF1bHQgZHJhZyBoYW5kbGUgYXJpYS1sYWJlbCAqL1xuICAgIGRyYWdIYW5kbGVBcmlhTGFiZWw6ICdEcmFnIHRvIHJlb3JkZXInLFxuICAgIC8qKiBEZWZhdWx0IGdyYWJiZWQgYW5ub3VuY2VtZW50IHRlbXBsYXRlICovXG4gICAgZ3JhYmJlZEFubm91bmNlbWVudFRlbXBsYXRlOlxuICAgICAgICAnSXRlbSB7OnBvc2l0aW9ufSBncmFiYmVkLiBVc2Ugezptb3ZlS2V5c30gdG8gbW92ZSwgezpkcm9wS2V5fSBvciB7OmFsdERyb3BLZXl9IHRvIGRyb3AsIHs6Y2FuY2VsS2V5fSB0byBjYW5jZWwnLFxuICAgIC8qKiBEZWZhdWx0IG1vdmVkIGFubm91bmNlbWVudCB0ZW1wbGF0ZSAqL1xuICAgIG1vdmVkQW5ub3VuY2VtZW50VGVtcGxhdGU6ICdJdGVtIG1vdmVkIHRvIHBvc2l0aW9uIHs6cG9zaXRpb259JyxcbiAgICAvKiogRGVmYXVsdCBkcm9wcGVkIGFubm91bmNlbWVudCB0ZW1wbGF0ZSAqL1xuICAgIGRyb3BwZWRBbm5vdW5jZW1lbnRUZW1wbGF0ZTogJ0l0ZW0gZHJvcHBlZCBhdCBwb3NpdGlvbiB7OnBvc2l0aW9ufScsXG4gICAgLyoqIERlZmF1bHQgY2FuY2VsbGVkIGFubm91bmNlbWVudCB0ZW1wbGF0ZSAqL1xuICAgIGNhbmNlbGxlZEFubm91bmNlbWVudFRlbXBsYXRlOiAnRHJhZyBjYW5jZWxsZWQsIGl0ZW0gcmVzdG9yZWQgdG8gb3JpZ2luYWwgcG9zaXRpb24nLFxufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQ3VCIn0= */");
|
|
14
|
+
})("position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;");
|
|
15
15
|
/**
|
|
16
16
|
* A drag and drop container component that enables reordering of child elements.
|
|
17
17
|
*
|
|
@@ -29,15 +29,19 @@ import { DragContext, ORIENTATION } from './types.js';
|
|
|
29
29
|
* </DragAndDrop>
|
|
30
30
|
* ```
|
|
31
31
|
*
|
|
32
|
-
* @param
|
|
33
|
-
* @param
|
|
34
|
-
* @param
|
|
35
|
-
* @param
|
|
36
|
-
* @param
|
|
32
|
+
* @param props - The component props
|
|
33
|
+
* @param props.orientation - Determines the layout direction (horizontal or vertical). Defaults to VERTICAL.
|
|
34
|
+
* @param props.onDrop - Callback fired when an item is dropped, receives the start and end indices
|
|
35
|
+
* @param props.showIndicator - Whether to display drag indicators for each list item. Defaults to false.
|
|
36
|
+
* @param props.children - Child elements to be rendered as draggable items
|
|
37
37
|
*
|
|
38
|
-
* @returns
|
|
39
|
-
*/
|
|
40
|
-
|
|
38
|
+
* @returns A draggable container with reorderable items
|
|
39
|
+
*/ /**
|
|
40
|
+
* DragAndDrop Component
|
|
41
|
+
* @param props - Component props
|
|
42
|
+
* @param ref - Ref forwarded to the underlying HTMLDivElement
|
|
43
|
+
*/ function DragAndDropComponent(props, ref) {
|
|
44
|
+
const { orientation = ORIENTATION.VERTICAL, children, onDrop, showIndicator = false, itemAriaLabelTemplate = 'Item {:position}. Press {:grabKey} to grab, {:moveKeys} to move, {:dropKey} or {:altDropKey} to drop', dragHandleAriaLabel = 'Drag to reorder', grabbedAnnouncementTemplate = 'Item {:position} grabbed. Use {:moveKeys} to move, {:dropKey} or {:altDropKey} to drop, {:cancelKey} to cancel', movedAnnouncementTemplate = 'Item moved to position {:position}', droppedAnnouncementTemplate = 'Item dropped at position {:position}', cancelledAnnouncementTemplate = 'Drag cancelled, item restored to original position', ...rest } = props;
|
|
41
45
|
const [startIndex, setStartIndex] = useState(null);
|
|
42
46
|
const [originalIndex, setOriginalIndex] = useState(null);
|
|
43
47
|
const [isDragging, setIsDragging] = useState(false);
|
|
@@ -64,7 +68,7 @@ import { DragContext, ORIENTATION } from './types.js';
|
|
|
64
68
|
* Drop handler invoked when a draggable item is released.
|
|
65
69
|
* @param index
|
|
66
70
|
*/ const drop = (index)=>{
|
|
67
|
-
if (startIndex !== null) {
|
|
71
|
+
if (startIndex !== null && index !== null) {
|
|
68
72
|
onDrop?.(startIndex, index);
|
|
69
73
|
}
|
|
70
74
|
setStartIndex(null);
|
|
@@ -103,7 +107,9 @@ import { DragContext, ORIENTATION } from './types.js';
|
|
|
103
107
|
setDragOver,
|
|
104
108
|
i18n
|
|
105
109
|
},
|
|
106
|
-
children: /*#__PURE__*/ jsx(Container, {
|
|
110
|
+
children: /*#__PURE__*/ jsx(Container$6, {
|
|
111
|
+
...rest,
|
|
112
|
+
ref: ref,
|
|
107
113
|
orientation: orientation,
|
|
108
114
|
role: "list",
|
|
109
115
|
children: React.Children.map(childrenArray, (child, index)=>/*#__PURE__*/ jsx(DragItem, {
|
|
@@ -117,7 +123,7 @@ import { DragContext, ORIENTATION } from './types.js';
|
|
|
117
123
|
}))
|
|
118
124
|
})
|
|
119
125
|
}),
|
|
120
|
-
/*#__PURE__*/ jsx(VisuallyHidden, {
|
|
126
|
+
/*#__PURE__*/ jsx(VisuallyHidden$2, {
|
|
121
127
|
role: "status",
|
|
122
128
|
"aria-live": "polite",
|
|
123
129
|
"aria-atomic": "true",
|
|
@@ -126,15 +132,7 @@ import { DragContext, ORIENTATION } from './types.js';
|
|
|
126
132
|
]
|
|
127
133
|
});
|
|
128
134
|
}
|
|
129
|
-
DragAndDrop
|
|
130
|
-
/** Orientation of the list layout */ orientation: ORIENTATION.VERTICAL,
|
|
131
|
-
/** Whether to display drag indicators for each list item */ showIndicator: false,
|
|
132
|
-
/** Default item aria-label template */ itemAriaLabelTemplate: 'Item {:position}. Press {:grabKey} to grab, {:moveKeys} to move, {:dropKey} or {:altDropKey} to drop',
|
|
133
|
-
/** Default drag handle aria-label */ dragHandleAriaLabel: 'Drag to reorder',
|
|
134
|
-
/** Default grabbed announcement template */ grabbedAnnouncementTemplate: 'Item {:position} grabbed. Use {:moveKeys} to move, {:dropKey} or {:altDropKey} to drop, {:cancelKey} to cancel',
|
|
135
|
-
/** Default moved announcement template */ movedAnnouncementTemplate: 'Item moved to position {:position}',
|
|
136
|
-
/** Default dropped announcement template */ droppedAnnouncementTemplate: 'Item dropped at position {:position}',
|
|
137
|
-
/** Default cancelled announcement template */ cancelledAnnouncementTemplate: 'Drag cancelled, item restored to original position'
|
|
138
|
-
};
|
|
135
|
+
const DragAndDrop = /*#__PURE__*/ React.forwardRef(DragAndDropComponent);
|
|
139
136
|
|
|
140
137
|
export { DragAndDrop as default };
|
|
138
|
+
//# sourceMappingURL=DragAndDrop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DragAndDrop.js","sources":["../../../src/components/DragAndDrop/DragAndDrop.tsx"],"sourcesContent":["import React, { PropsWithChildren, useState } from 'react';\nimport styled from '@emotion/styled';\nimport DragItem from './DragItem';\nimport { ORIENTATION, DragContext } from './types';\n\ntype DragAndDropProps = {\n /**\n * Orientation of the list layout\n * @default ORIENTATION.VERTICAL\n */\n orientation?: ORIENTATION;\n /** Drop event handler */\n onDrop: (start: number, end: number) => void;\n /** Shows drag indicator against each list item\n * @default false\n */\n showIndicator?: boolean;\n /**\n * i18n: Template for item aria-label. Placeholders: {:position}, {:grabKey}, {:moveKeys}, {:dropKey}, {:altDropKey}\n * @default 'Item {:position}. Press {:grabKey} to grab, {:moveKeys} to move, {:dropKey} or {:altDropKey} to drop'\n */\n itemAriaLabelTemplate?: string;\n /** i18n: Aria label for drag handle\n * @default 'Drag to reorder'\n */\n dragHandleAriaLabel?: string;\n /**\n * i18n: Template for grabbed announcement. Placeholders: {:position}, {:moveKeys}, {:dropKey}, {:altDropKey}, {:cancelKey}\n * @default 'Item {:position} grabbed. Use {:moveKeys} to move, {:dropKey} or {:altDropKey} to drop, {:cancelKey} to cancel'\n */\n grabbedAnnouncementTemplate?: string;\n /**\n * i18n: Template for moved announcement. Placeholders: {:position}\n * @default 'Item moved to position {:position}'\n */\n movedAnnouncementTemplate?: string;\n /**\n * i18n: Template for dropped announcement. Placeholders: {:position}\n * @default 'Item dropped at position {:position}'\n */\n droppedAnnouncementTemplate?: string;\n /**\n * i18n: Template for cancelled announcement\n * @default 'Drag cancelled, item restored to original position'\n */\n cancelledAnnouncementTemplate?: string;\n} & PropsWithChildren<unknown>;\n\n/** Container Component */\nconst Container = styled.div<{ orientation: ORIENTATION }>`\n flex: 1;\n display: flex;\n position: relative;\n flex-wrap: wrap;\n flex-direction: ${(props) => (props.orientation === ORIENTATION.HORIZONTAL ? 'row' : 'column')};\n`;\n\n/** Visually hidden but accessible to screen readers */\nconst VisuallyHidden = styled.div`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n`;\n\n/**\n * A drag and drop container component that enables reordering of child elements.\n *\n * @component\n * @example\n * ```tsx\n * <DragAndDrop\n * orientation={ORIENTATION.VERTICAL}\n * onDrop={(start, end) => handleReorder(start, end)}\n * showIndicator={true}\n * >\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * </DragAndDrop>\n * ```\n *\n * @param props - The component props\n * @param props.orientation - Determines the layout direction (horizontal or vertical). Defaults to VERTICAL.\n * @param props.onDrop - Callback fired when an item is dropped, receives the start and end indices\n * @param props.showIndicator - Whether to display drag indicators for each list item. Defaults to false.\n * @param props.children - Child elements to be rendered as draggable items\n *\n * @returns A draggable container with reorderable items\n */\n/**\n * DragAndDrop Component\n * @param props - Component props\n * @param ref - Ref forwarded to the underlying HTMLDivElement\n */\nfunction DragAndDropComponent(props: DragAndDropProps, ref: React.Ref<HTMLDivElement>) {\n const {\n orientation = ORIENTATION.VERTICAL,\n children,\n onDrop,\n showIndicator = false,\n itemAriaLabelTemplate = 'Item {:position}. Press {:grabKey} to grab, {:moveKeys} to move, {:dropKey} or {:altDropKey} to drop',\n dragHandleAriaLabel = 'Drag to reorder',\n grabbedAnnouncementTemplate = 'Item {:position} grabbed. Use {:moveKeys} to move, {:dropKey} or {:altDropKey} to drop, {:cancelKey} to cancel',\n movedAnnouncementTemplate = 'Item moved to position {:position}',\n droppedAnnouncementTemplate = 'Item dropped at position {:position}',\n cancelledAnnouncementTemplate = 'Drag cancelled, item restored to original position',\n ...rest\n } = props;\n const [startIndex, setStartIndex] = useState<number | null>(null);\n const [originalIndex, setOriginalIndex] = useState<number | null>(null);\n const [isDragging, setIsDragging] = useState<boolean>(false);\n const [dragOver, setDragOver] = useState<number | null>(null);\n const [announcement, setAnnouncement] = useState<string | undefined>('');\n const childrenArray = React.Children.toArray(children);\n const totalItems = childrenArray.length;\n\n /**\n * Replace placeholders in i18n templates\n */\n const replacePlaceholders = (\n template: string,\n data: {\n position?: number;\n grabKey?: string;\n dropKey?: string;\n altDropKey?: string;\n cancelKey?: string;\n moveKeys?: string;\n },\n ): string => {\n return template\n .replace(/\\{:position\\}/g, String(data.position ?? ''))\n .replace(/\\{:grabKey\\}/g, data.grabKey ?? 'Space')\n .replace(/\\{:dropKey\\}/g, data.dropKey ?? 'Space')\n .replace(/\\{:altDropKey\\}/g, data.altDropKey ?? 'Enter')\n .replace(/\\{:cancelKey\\}/g, data.cancelKey ?? 'Escape')\n .replace(\n /\\{:moveKeys\\}/g,\n data.moveKeys ??\n (orientation === ORIENTATION.VERTICAL ? 'Arrow Up/Down' : 'Arrow Left/Right'),\n );\n };\n\n // i18n configuration object\n const i18n = {\n itemAriaLabelTemplate:\n itemAriaLabelTemplate ??\n 'Item {:position}. Press {:grabKey} to grab, {:moveKeys} to move, {:dropKey} or {:altDropKey} to drop',\n dragHandleAriaLabel: dragHandleAriaLabel ?? 'Drag to reorder',\n grabbedAnnouncementTemplate:\n grabbedAnnouncementTemplate ??\n 'Item {:position} grabbed. Use {:moveKeys} to move, {:dropKey} or {:altDropKey} to drop, {:cancelKey} to cancel',\n movedAnnouncementTemplate:\n movedAnnouncementTemplate ?? 'Item moved to position {:position}',\n droppedAnnouncementTemplate:\n droppedAnnouncementTemplate ?? 'Item dropped at position {:position}',\n cancelledAnnouncementTemplate:\n cancelledAnnouncementTemplate ?? 'Drag cancelled, item restored to original position',\n replacePlaceholders,\n };\n\n /**\n * Drop handler invoked when a draggable item is released.\n * @param index\n */\n const drop = (index: number | null) => {\n if (startIndex !== null && index !== null) {\n onDrop?.(startIndex, index);\n }\n setStartIndex(null);\n setOriginalIndex(null);\n setIsDragging(false);\n };\n\n /**\n * Cancel handler to restore item to original position\n */\n const cancel = () => {\n if (originalIndex !== null && startIndex !== null && startIndex !== originalIndex) {\n onDrop?.(startIndex, originalIndex);\n }\n setStartIndex(null);\n setOriginalIndex(null);\n setIsDragging(false);\n };\n\n /**\n * Start grab handler to track original position\n */\n const startGrab = (index: number) => {\n setStartIndex(index);\n setOriginalIndex(index);\n setIsDragging(true);\n };\n\n return (\n <>\n <DragContext.Provider\n value={{\n startIndex,\n setStartIndex,\n drop,\n onDrop,\n cancel,\n startGrab,\n isDragging,\n setIsDragging,\n setDragOver,\n i18n,\n }}\n >\n <Container {...rest} ref={ref} orientation={orientation} role=\"list\">\n {React.Children.map(childrenArray, (child, index) => (\n <DragItem\n index={index}\n orientation={orientation}\n showIndicator={showIndicator}\n dragOver={dragOver}\n totalItems={totalItems}\n setAnnouncement={setAnnouncement}\n >\n {child}\n </DragItem>\n ))}\n </Container>\n </DragContext.Provider>\n <VisuallyHidden role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcement}\n </VisuallyHidden>\n </>\n );\n}\n\nconst DragAndDrop = React.forwardRef(DragAndDropComponent);\nexport default DragAndDrop;\n"],"names":["Container","styled","props","orientation","ORIENTATION","HORIZONTAL","VisuallyHidden","DragAndDropComponent","ref","VERTICAL","children","onDrop","showIndicator","itemAriaLabelTemplate","dragHandleAriaLabel","grabbedAnnouncementTemplate","movedAnnouncementTemplate","droppedAnnouncementTemplate","cancelledAnnouncementTemplate","rest","startIndex","setStartIndex","useState","originalIndex","setOriginalIndex","isDragging","setIsDragging","dragOver","setDragOver","announcement","setAnnouncement","childrenArray","React","Children","toArray","totalItems","length","replacePlaceholders","template","data","replace","String","position","grabKey","dropKey","altDropKey","cancelKey","moveKeys","i18n","drop","index","cancel","startGrab","_jsxs","_Fragment","_jsx","DragContext","Provider","value","role","map","child","DragItem","aria-live","aria-atomic","DragAndDrop","forwardRef"],"mappings":"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"}
|