@deephaven/components 0.46.1-beta.0 → 0.46.1-beta.4
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.js +40 -34
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/AutoResizeTextarea.js +2 -1
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/BasicModal.js +48 -33
- package/dist/BasicModal.js.map +1 -1
- package/dist/Button.js +19 -8
- package/dist/Button.js.map +1 -1
- package/dist/ButtonGroup.js +5 -3
- package/dist/ButtonGroup.js.map +1 -1
- package/dist/ButtonOld.js +5 -3
- package/dist/ButtonOld.js.map +1 -1
- package/dist/CardFlip.js +14 -9
- package/dist/CardFlip.js.map +1 -1
- package/dist/Checkbox.js +23 -19
- package/dist/Checkbox.js.map +1 -1
- package/dist/Collapse.js +12 -9
- package/dist/Collapse.js.map +1 -1
- package/dist/ComboBox.js +61 -51
- package/dist/ComboBox.js.map +1 -1
- package/dist/CopyButton.js +5 -3
- package/dist/CopyButton.js.map +1 -1
- package/dist/CustomTimeSelect.js +92 -84
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DateInput.js +19 -17
- package/dist/DateInput.js.map +1 -1
- package/dist/DateTimeInput.js +20 -18
- package/dist/DateTimeInput.js.map +1 -1
- package/dist/DebouncedSearchInput.js +2 -1
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DraggableItemList.js +97 -80
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/EditableItemList.js +53 -46
- package/dist/EditableItemList.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +59 -49
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.js +42 -37
- package/dist/ItemList.js.map +1 -1
- package/dist/ItemListItem.js +5 -3
- package/dist/ItemListItem.js.map +1 -1
- package/dist/LoadingOverlay.js +28 -20
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/LoadingSpinner.js +13 -10
- package/dist/LoadingSpinner.js.map +1 -1
- package/dist/MaskedInput.js +2 -1
- package/dist/MaskedInput.js.map +1 -1
- package/dist/Option.js +5 -3
- package/dist/Option.js.map +1 -1
- package/dist/RadioGroup.js +14 -10
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioItem.js +23 -19
- package/dist/RadioItem.js.map +1 -1
- package/dist/RandomAreaPlotAnimation.js +8 -6
- package/dist/RandomAreaPlotAnimation.js.map +1 -1
- package/dist/SearchInput.js +26 -21
- package/dist/SearchInput.js.map +1 -1
- package/dist/Select.js +5 -3
- package/dist/Select.js.map +1 -1
- package/dist/SelectValueList.js +29 -24
- package/dist/SelectValueList.js.map +1 -1
- package/dist/SocketedButton.js +13 -10
- package/dist/SocketedButton.js.map +1 -1
- package/dist/TimeInput.js +2 -1
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.js +123 -106
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ToastNotification.js +35 -27
- package/dist/ToastNotification.js.map +1 -1
- package/dist/UISwitch.js +7 -5
- package/dist/UISwitch.js.map +1 -1
- package/dist/ValidateLabelInput.js +33 -24
- package/dist/ValidateLabelInput.js.map +1 -1
- package/dist/context-actions/ContextActions.js +7 -5
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.js +44 -41
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.js +34 -24
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js +6 -4
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.js +3 -3
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.js +19 -16
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.js +8 -9
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/modal/DebouncedModal.js +14 -9
- package/dist/modal/DebouncedModal.js.map +1 -1
- package/dist/modal/InfoModal.js +22 -13
- package/dist/modal/InfoModal.js.map +1 -1
- package/dist/modal/Modal.js +70 -60
- package/dist/modal/Modal.js.map +1 -1
- package/dist/modal/ModalBody.js +5 -3
- package/dist/modal/ModalBody.js.map +1 -1
- package/dist/modal/ModalFooter.js +5 -3
- package/dist/modal/ModalFooter.js.map +1 -1
- package/dist/modal/ModalHeader.js +19 -13
- package/dist/modal/ModalHeader.js.map +1 -1
- package/dist/navigation/Menu.js +15 -12
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.js +29 -22
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/Page.js +35 -26
- package/dist/navigation/Page.js.map +1 -1
- package/dist/navigation/Stack.js +33 -20
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/popper/Popper.js +31 -25
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.js +18 -13
- package/dist/popper/Tooltip.js.map +1 -1
- package/package.json +7 -7
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","Modal","className","children","role","keyboard","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","appearActive","appearDone","transitionMs","zIndex","e","target","display"],"sources":["../../src/modal/Modal.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React, {\n 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';\n\ninterface ModalProps {\n className?: string;\n children?: ReactNode;\n role?: string;\n keyboard?: 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 = 'theme-bg-light',\n children,\n role = 'role',\n keyboard = 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 = () => {\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 <>\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 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 </>,\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;AAgBlB,SAASC,KAAK,OAY4B;EAAA,IAZ3B;IACbC,SAAS,GAAG,gBAAgB;IAC5BC,QAAQ;IACRC,IAAI,GAAG,MAAM;IACbC,QAAQ,GAAG,IAAI;IACfC,MAAM,GAAG,KAAK;IACdC,QAAQ,GAAG,KAAK;IAChBC,IAAI;IACJC,QAAQ;IACRC,QAAQ;IACRC,MAAM;IACN,aAAa,EAAEC;EACL,CAAC;EACX,IAAMC,OAAO,GAAGjB,MAAM,EAAe;EACrC,IAAMkB,UAAU,GAAGlB,MAAM,CAAiB,IAAI,CAAC;EAC/C,IAAM,CAACmB,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGnB,QAAQ,CAAC,KAAK,CAAC;EAEjE,IAAMoB,aAAa,GAAGvB,WAAW,CAC9BwB,KAAoB,IAAW;IAC9B,QAAQA,KAAK,CAACC,GAAG;MACf,KAAK,QAAQ;QACXR,MAAM,aAANA,MAAM,uBAANA,MAAM,EAAI;QACV;MACF;QACE;IAAM;EAEZ,CAAC,EACD,CAACA,MAAM,CAAC,CACT;EAEDhB,SAAS,CACP,SAASyB,uBAAuB,GAAG;IACjC,IAAId,MAAM,IAAID,QAAQ,EAAE;MACtBgB,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAEL,aAAa,CAAC;MACjD,OAAO,MAAMI,MAAM,CAACE,mBAAmB,CAAC,SAAS,EAAEN,aAAa,CAAC;IACnE;EACF,CAAC,EACD,CAACA,aAAa,EAAEX,MAAM,EAAED,QAAQ,CAAC,CAClC;EAEDV,SAAS,CACP,SAAS6B,IAAI,GAAG;IACd,IAAIlB,MAAM,IAAIG,QAAQ,EAAE;MACtBA,QAAQ,EAAE;IACZ;EACF,CAAC,EACD,CAACA,QAAQ,EAAEH,MAAM,CAAC,CACnB;EAEDX,SAAS,CACP,SAAS8B,MAAM,GAAG;IAChB,IAAI,CAACnB,MAAM,IAAII,QAAQ,EAAE;MACvBA,QAAQ,EAAE;IACZ;EACF,CAAC,EACD,CAACA,QAAQ,EAAEJ,MAAM,CAAC,CACnB;EAED,IAAIA,MAAM,IAAI,CAACO,OAAO,CAACa,OAAO,EAAE;IAC9Bb,OAAO,CAACa,OAAO,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;IAC/Cf,OAAO,CAACa,OAAO,CAACG,YAAY,CAC1B,OAAO,EACP,qCAAqC,CACtC;IACDhB,OAAO,CAACa,OAAO,CAACG,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC;IACpDF,QAAQ,CAACG,IAAI,CAACC,WAAW,CAAClB,OAAO,CAACa,OAAO,CAAC;EAC5C;EAEA,IAAMM,QAAQ,GAAG,MAAM;IACrB,IAAInB,OAAO,CAACa,OAAO,EAAE;MACnBC,QAAQ,CAACG,IAAI,CAACG,WAAW,CAACpB,OAAO,CAACa,OAAO,CAAC;MAC1Cb,OAAO,CAACa,OAAO,GAAGQ,SAAS;IAC7B;EACF,CAAC;EAED,OAAOrB,OAAO,CAACa,OAAO,gBAClB5B,QAAQ,CAACqC,YAAY,eACnB,
|
|
1
|
+
{"version":3,"file":"Modal.js","names":["classNames","React","useCallback","useEffect","useRef","useState","ReactDOM","CSSTransition","ThemeExport","Modal","className","children","role","keyboard","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","appearActive","appearDone","transitionMs","zIndex","e","target","display"],"sources":["../../src/modal/Modal.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React, {\n 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';\n\ninterface ModalProps {\n className?: string;\n children?: ReactNode;\n role?: string;\n keyboard?: 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 = 'theme-bg-light',\n children,\n role = 'role',\n keyboard = 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 = () => {\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 <>\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 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 </>,\n element.current\n )\n : null;\n}\n\nexport default Modal;\n"],"mappings":"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"}
|
package/dist/modal/ModalBody.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
3
|
function ModalBody(_ref) {
|
|
3
4
|
var {
|
|
4
5
|
className = 'modal-body',
|
|
@@ -6,11 +7,12 @@ function ModalBody(_ref) {
|
|
|
6
7
|
children,
|
|
7
8
|
'data-testid': dataTestId
|
|
8
9
|
} = _ref;
|
|
9
|
-
return /*#__PURE__*/
|
|
10
|
+
return /*#__PURE__*/_jsx("div", {
|
|
10
11
|
className: className,
|
|
11
12
|
"data-testid": dataTestId,
|
|
12
|
-
style: style
|
|
13
|
-
|
|
13
|
+
style: style,
|
|
14
|
+
children: children
|
|
15
|
+
});
|
|
14
16
|
}
|
|
15
17
|
export default ModalBody;
|
|
16
18
|
//# sourceMappingURL=ModalBody.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalBody.js","names":["React","ModalBody","className","style","children","dataTestId"],"sources":["../../src/modal/ModalBody.tsx"],"sourcesContent":["import React, { CSSProperties, ReactElement, ReactNode } from 'react';\n\ninterface ModalBodyProps {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nfunction ModalBody({\n className = 'modal-body',\n style,\n children,\n 'data-testid': dataTestId,\n}: ModalBodyProps): ReactElement {\n return (\n <div className={className} data-testid={dataTestId} style={style}>\n {children}\n </div>\n );\n}\n\nexport default ModalBody;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAkD,OAAO;
|
|
1
|
+
{"version":3,"file":"ModalBody.js","names":["React","ModalBody","className","style","children","dataTestId"],"sources":["../../src/modal/ModalBody.tsx"],"sourcesContent":["import React, { CSSProperties, ReactElement, ReactNode } from 'react';\n\ninterface ModalBodyProps {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nfunction ModalBody({\n className = 'modal-body',\n style,\n children,\n 'data-testid': dataTestId,\n}: ModalBodyProps): ReactElement {\n return (\n <div className={className} data-testid={dataTestId} style={style}>\n {children}\n </div>\n );\n}\n\nexport default ModalBody;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAkD,OAAO;AAAC;AAStE,SAASC,SAAS,OAKe;EAAA,IALd;IACjBC,SAAS,GAAG,YAAY;IACxBC,KAAK;IACLC,QAAQ;IACR,aAAa,EAAEC;EACD,CAAC;EACf,oBACE;IAAK,SAAS,EAAEH,SAAU;IAAC,eAAaG,UAAW;IAAC,KAAK,EAAEF,KAAM;IAAA,UAC9DC;EAAQ,EACL;AAEV;AAEA,eAAeH,SAAS"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
3
|
function ModalFooter(_ref) {
|
|
3
4
|
var {
|
|
4
5
|
className = 'modal-footer',
|
|
5
6
|
children,
|
|
6
7
|
'data-testid': dataTestId
|
|
7
8
|
} = _ref;
|
|
8
|
-
return /*#__PURE__*/
|
|
9
|
+
return /*#__PURE__*/_jsx("div", {
|
|
9
10
|
className: className,
|
|
10
|
-
"data-testid": dataTestId
|
|
11
|
-
|
|
11
|
+
"data-testid": dataTestId,
|
|
12
|
+
children: children
|
|
13
|
+
});
|
|
12
14
|
}
|
|
13
15
|
export default ModalFooter;
|
|
14
16
|
//# sourceMappingURL=ModalFooter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalFooter.js","names":["React","ModalFooter","className","children","dataTestId"],"sources":["../../src/modal/ModalFooter.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode } from 'react';\n\ninterface ModalFooterProps {\n className?: string;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nfunction ModalFooter({\n className = 'modal-footer',\n children,\n 'data-testid': dataTestId,\n}: ModalFooterProps): ReactElement {\n return (\n <div className={className} data-testid={dataTestId}>\n {children}\n </div>\n );\n}\n\nexport default ModalFooter;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAmC,OAAO;
|
|
1
|
+
{"version":3,"file":"ModalFooter.js","names":["React","ModalFooter","className","children","dataTestId"],"sources":["../../src/modal/ModalFooter.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode } from 'react';\n\ninterface ModalFooterProps {\n className?: string;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nfunction ModalFooter({\n className = 'modal-footer',\n children,\n 'data-testid': dataTestId,\n}: ModalFooterProps): ReactElement {\n return (\n <div className={className} data-testid={dataTestId}>\n {children}\n </div>\n );\n}\n\nexport default ModalFooter;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAmC,OAAO;AAAC;AAQvD,SAASC,WAAW,OAIe;EAAA,IAJd;IACnBC,SAAS,GAAG,cAAc;IAC1BC,QAAQ;IACR,aAAa,EAAEC;EACC,CAAC;EACjB,oBACE;IAAK,SAAS,EAAEF,SAAU;IAAC,eAAaE,UAAW;IAAA,UAChDD;EAAQ,EACL;AAEV;AAEA,eAAeF,WAAW"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
4
|
function ModalHeader(_ref) {
|
|
3
5
|
var {
|
|
4
6
|
className,
|
|
@@ -8,20 +10,24 @@ function ModalHeader(_ref) {
|
|
|
8
10
|
toggle,
|
|
9
11
|
'data-testid': dataTestId
|
|
10
12
|
} = _ref;
|
|
11
|
-
return /*#__PURE__*/
|
|
13
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
12
14
|
className: "modal-header ".concat(className),
|
|
13
|
-
style: style
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
style: style,
|
|
16
|
+
children: [/*#__PURE__*/_jsx("h5", {
|
|
17
|
+
className: "modal-title",
|
|
18
|
+
children: children
|
|
19
|
+
}), closeButton && /*#__PURE__*/_jsx("button", {
|
|
20
|
+
type: "button",
|
|
21
|
+
className: "close",
|
|
22
|
+
"data-dismiss": "modal",
|
|
23
|
+
"aria-label": "Close",
|
|
24
|
+
onClick: toggle,
|
|
25
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
26
|
+
"aria-hidden": "true",
|
|
27
|
+
children: "\xD7"
|
|
28
|
+
})
|
|
29
|
+
})]
|
|
30
|
+
});
|
|
25
31
|
}
|
|
26
32
|
export default ModalHeader;
|
|
27
33
|
//# sourceMappingURL=ModalHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalHeader.js","names":["React","ModalHeader","className","children","closeButton","style","toggle","dataTestId"],"sources":["../../src/modal/ModalHeader.tsx"],"sourcesContent":["import React, { CSSProperties, ReactElement, ReactNode } from 'react';\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={`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,MAAkD,OAAO;
|
|
1
|
+
{"version":3,"file":"ModalHeader.js","names":["React","ModalHeader","className","children","closeButton","style","toggle","dataTestId"],"sources":["../../src/modal/ModalHeader.tsx"],"sourcesContent":["import React, { CSSProperties, ReactElement, ReactNode } from 'react';\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={`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,MAAkD,OAAO;AAAC;AAAA;AAWtE,SAASC,WAAW,OAOe;EAAA,IAPd;IACnBC,SAAS;IACTC,QAAQ;IACRC,WAAW,GAAG,IAAI;IAClBC,KAAK;IACLC,MAAM;IACN,aAAa,EAAEC;EACC,CAAC;EACjB,oBACE;IAAK,SAAS,yBAAkBL,SAAS,CAAG;IAAC,KAAK,EAAEG,KAAM;IAAA,wBACxD;MAAI,SAAS,EAAC,aAAa;MAAA,UAAEF;IAAQ,EAAM,EAC1CC,WAAW,iBACV;MACE,IAAI,EAAC,QAAQ;MACb,SAAS,EAAC,OAAO;MACjB,gBAAa,OAAO;MACpB,cAAW,OAAO;MAClB,OAAO,EAAEE,MAAO;MAAA,uBAEhB;QAAM,eAAY,MAAM;QAAA,UAAC;MAAO;IAAO,EAE1C;EAAA,EACG;AAEV;AAEA,eAAeL,WAAW"}
|
package/dist/navigation/Menu.js
CHANGED
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import MenuItem from "./MenuItem.js";
|
|
3
3
|
import "./Menu.css";
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
5
|
export function Menu(_ref) {
|
|
5
6
|
var {
|
|
6
7
|
items,
|
|
7
8
|
onSelect: _onSelect = () => undefined,
|
|
8
9
|
'data-testid': dataTestId
|
|
9
10
|
} = _ref;
|
|
10
|
-
return /*#__PURE__*/
|
|
11
|
+
return /*#__PURE__*/_jsx("div", {
|
|
11
12
|
className: "navigation-menu-view",
|
|
12
|
-
"data-testid": dataTestId
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
"data-testid": dataTestId,
|
|
14
|
+
children: /*#__PURE__*/_jsx("ul", {
|
|
15
|
+
className: "navigation-menu-list",
|
|
16
|
+
children: items.map((item, itemIndex) => /*#__PURE__*/_jsx("li", {
|
|
17
|
+
children: /*#__PURE__*/_jsx(MenuItem, {
|
|
18
|
+
item: item,
|
|
19
|
+
onSelect: () => {
|
|
20
|
+
_onSelect(itemIndex);
|
|
21
|
+
}
|
|
22
|
+
})
|
|
23
|
+
}, item.title))
|
|
24
|
+
})
|
|
25
|
+
});
|
|
23
26
|
}
|
|
24
27
|
export default Menu;
|
|
25
28
|
//# sourceMappingURL=Menu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.js","names":["React","MenuItem","Menu","items","onSelect","undefined","dataTestId","map","item","itemIndex","title"],"sources":["../../src/navigation/Menu.tsx"],"sourcesContent":["import React from 'react';\nimport MenuItem, { 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;AAWf,OAAO,SAASC,IAAI,OAIO;EAAA,IAJN;IACnBC,KAAK;IACLC,QAAQ,EAARA,SAAQ,GAAG,MAAMC,SAAS;IAC1B,aAAa,EAAEC;EACN,CAAC;EACV,oBACE;IAAK,SAAS,EAAC,sBAAsB;IAAC,eAAaA;
|
|
1
|
+
{"version":3,"file":"Menu.js","names":["React","MenuItem","Menu","items","onSelect","undefined","dataTestId","map","item","itemIndex","title"],"sources":["../../src/navigation/Menu.tsx"],"sourcesContent":["import React from 'react';\nimport MenuItem, { 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;AAWf,OAAO,SAASC,IAAI,OAIO;EAAA,IAJN;IACnBC,KAAK;IACLC,QAAQ,EAARA,SAAQ,GAAG,MAAMC,SAAS;IAC1B,aAAa,EAAEC;EACN,CAAC;EACV,oBACE;IAAK,SAAS,EAAC,sBAAsB;IAAC,eAAaA,UAAW;IAAA,uBAC5D;MAAI,SAAS,EAAC,sBAAsB;MAAA,UACjCH,KAAK,CAACI,GAAG,CAAC,CAACC,IAAI,EAAEC,SAAS,kBACzB;QAAA,uBACE,KAAC,QAAQ;UACP,IAAI,EAAED,IAAK;UACX,QAAQ,EAAE,MAAM;YACdJ,SAAQ,CAACK,SAAS,CAAC;UACrB;QAAE;MACF,GANKD,IAAI,CAACE,KAAK,CAQpB;IAAC;EACC,EACD;AAEV;AAEA,eAAeR,IAAI"}
|
|
@@ -3,6 +3,8 @@ 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
8
|
function isSwitchMenuItemType(item) {
|
|
7
9
|
return item.isOn !== undefined;
|
|
8
10
|
}
|
|
@@ -29,7 +31,7 @@ export function MenuItem(_ref) {
|
|
|
29
31
|
}
|
|
30
32
|
return onSelect;
|
|
31
33
|
}, [item, onSelect]);
|
|
32
|
-
return /*#__PURE__*/
|
|
34
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
33
35
|
className: "btn btn-navigation-menu-item",
|
|
34
36
|
"data-testid": "menu-item-".concat(title),
|
|
35
37
|
onClick: handleSelect,
|
|
@@ -39,27 +41,32 @@ export function MenuItem(_ref) {
|
|
|
39
41
|
}
|
|
40
42
|
},
|
|
41
43
|
tabIndex: 0,
|
|
42
|
-
role: "menuitem"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
44
|
+
role: "menuitem",
|
|
45
|
+
children: [icon !== undefined && /*#__PURE__*/_jsx("div", {
|
|
46
|
+
className: "icon",
|
|
47
|
+
children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
48
|
+
icon: icon
|
|
49
|
+
})
|
|
50
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
51
|
+
className: "title",
|
|
52
|
+
children: title
|
|
53
|
+
}), subtitle !== undefined && /*#__PURE__*/_jsx("div", {
|
|
54
|
+
className: "shortcut",
|
|
55
|
+
children: subtitle
|
|
56
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
57
|
+
className: "accessory",
|
|
58
|
+
"data-testid": dataTestId,
|
|
59
|
+
children: isSwitchMenuItemType(item) ? /*#__PURE__*/_jsx(UISwitch, {
|
|
60
|
+
on: item.isOn,
|
|
61
|
+
onClick: event => {
|
|
62
|
+
event.stopPropagation();
|
|
63
|
+
handleSelect();
|
|
64
|
+
}
|
|
65
|
+
}) : /*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
66
|
+
icon: vsChevronRight
|
|
67
|
+
})
|
|
68
|
+
})]
|
|
69
|
+
});
|
|
63
70
|
}
|
|
64
71
|
export default MenuItem;
|
|
65
72
|
//# sourceMappingURL=MenuItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuItem.js","names":["React","useMemo","FontAwesomeIcon","vsChevronRight","UISwitch","isSwitchMenuItemType","item","isOn","undefined","MenuItem","onSelect","dataTestId","icon","subtitle","title","handleSelect","onChange","event","key","stopPropagation"],"sources":["../../src/navigation/MenuItem.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { 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;AAaf,SAASC,oBAAoB,CAACC,IAAiB,EAA6B;EAC1E,OAAQA,IAAI,CAAuBC,IAAI,KAAKC,SAAS;AACvD;AAQA;AACA;AACA;AACA;AACA,OAAO,SAASC,QAAQ,OAIO;EAAA,IAJN;IACvBH,IAAI;IACJI,QAAQ,GAAG,MAAMF,SAAS;IAC1B,aAAa,EAAEG;EACF,CAAC;EACd,IAAM;IAAEC,IAAI;IAAEC,QAAQ;IAAEC;EAAM,CAAC,GAAGR,IAAI;EACtC,IAAMS,YAAY,GAAGd,OAAO,CAAC,MAAM;IACjC,IAAII,oBAAoB,CAACC,IAAI,CAAC,EAAE;MAC9B,OAAO,MAAM;QACXA,IAAI,CAACU,QAAQ,CAAC,CAACV,IAAI,CAACC,IAAI,CAAC;MAC3B,CAAC;IACH;IACA,OAAOG,QAAQ;EACjB,CAAC,EAAE,CAACJ,IAAI,EAAEI,QAAQ,CAAC,CAAC;EACpB,oBACE;IACE,SAAS,EAAC,8BAA8B;IACxC,mCAA0BI,KAAK,CAAG;IAClC,OAAO,EAAEC,YAAa;IACtB,SAAS,EAAEE,KAAK,IAAI;MAClB,IAAIA,KAAK,CAACC,GAAG,KAAK,OAAO,IAAID,KAAK,CAACC,GAAG,KAAK,GAAG,EAAE;QAC9CH,YAAY,EAAE;MAChB;IACF,CAAE;IACF,QAAQ,EAAE,CAAE;IACZ,IAAI,EAAC;
|
|
1
|
+
{"version":3,"file":"MenuItem.js","names":["React","useMemo","FontAwesomeIcon","vsChevronRight","UISwitch","isSwitchMenuItemType","item","isOn","undefined","MenuItem","onSelect","dataTestId","icon","subtitle","title","handleSelect","onChange","event","key","stopPropagation"],"sources":["../../src/navigation/MenuItem.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { 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;AAAA;AAaf,SAASC,oBAAoB,CAACC,IAAiB,EAA6B;EAC1E,OAAQA,IAAI,CAAuBC,IAAI,KAAKC,SAAS;AACvD;AAQA;AACA;AACA;AACA;AACA,OAAO,SAASC,QAAQ,OAIO;EAAA,IAJN;IACvBH,IAAI;IACJI,QAAQ,GAAG,MAAMF,SAAS;IAC1B,aAAa,EAAEG;EACF,CAAC;EACd,IAAM;IAAEC,IAAI;IAAEC,QAAQ;IAAEC;EAAM,CAAC,GAAGR,IAAI;EACtC,IAAMS,YAAY,GAAGd,OAAO,CAAC,MAAM;IACjC,IAAII,oBAAoB,CAACC,IAAI,CAAC,EAAE;MAC9B,OAAO,MAAM;QACXA,IAAI,CAACU,QAAQ,CAAC,CAACV,IAAI,CAACC,IAAI,CAAC;MAC3B,CAAC;IACH;IACA,OAAOG,QAAQ;EACjB,CAAC,EAAE,CAACJ,IAAI,EAAEI,QAAQ,CAAC,CAAC;EACpB,oBACE;IACE,SAAS,EAAC,8BAA8B;IACxC,mCAA0BI,KAAK,CAAG;IAClC,OAAO,EAAEC,YAAa;IACtB,SAAS,EAAEE,KAAK,IAAI;MAClB,IAAIA,KAAK,CAACC,GAAG,KAAK,OAAO,IAAID,KAAK,CAACC,GAAG,KAAK,GAAG,EAAE;QAC9CH,YAAY,EAAE;MAChB;IACF,CAAE;IACF,QAAQ,EAAE,CAAE;IACZ,IAAI,EAAC,UAAU;IAAA,WAEdH,IAAI,KAAKJ,SAAS,iBACjB;MAAK,SAAS,EAAC,MAAM;MAAA,uBACnB,KAAC,eAAe;QAAC,IAAI,EAAEI;MAAK;IAAG,EAElC,eACD;MAAK,SAAS,EAAC,OAAO;MAAA,UAAEE;IAAK,EAAO,EACnCD,QAAQ,KAAKL,SAAS,iBAAI;MAAK,SAAS,EAAC,UAAU;MAAA,UAAEK;IAAQ,EAAO,eACrE;MAAK,SAAS,EAAC,WAAW;MAAC,eAAaF,UAAW;MAAA,UAChDN,oBAAoB,CAACC,IAAI,CAAC,gBACzB,KAAC,QAAQ;QACP,EAAE,EAAEA,IAAI,CAACC,IAAK;QACd,OAAO,EAAEU,KAAK,IAAI;UAChBA,KAAK,CAACE,eAAe,EAAE;UACvBJ,YAAY,EAAE;QAChB;MAAE,EACF,gBAEF,KAAC,eAAe;QAAC,IAAI,EAAEZ;MAAe;IACvC,EACG;EAAA,EACF;AAEV;AAEA,eAAeM,QAAQ"}
|
package/dist/navigation/Page.js
CHANGED
|
@@ -2,6 +2,8 @@ import React from 'react';
|
|
|
2
2
|
import { vsClose, vsChevronLeft } from '@deephaven/icons';
|
|
3
3
|
import "./Page.css";
|
|
4
4
|
import Button from "../Button.js";
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
7
|
/**
|
|
6
8
|
* A page view with a back button in the bottom left, a title at the top, and a close button in the top right.
|
|
7
9
|
* Back and close buttons will only appear if `onBack` and/or `onClose` callbacks are set.
|
|
@@ -14,33 +16,40 @@ export function Page(_ref) {
|
|
|
14
16
|
title,
|
|
15
17
|
'data-testid': dataTestId
|
|
16
18
|
} = _ref;
|
|
17
|
-
return /*#__PURE__*/
|
|
19
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
18
20
|
className: "navigation-page",
|
|
19
|
-
"data-testid": dataTestId
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
21
|
+
"data-testid": dataTestId,
|
|
22
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
23
|
+
className: "navigation-title-bar",
|
|
24
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
25
|
+
className: "navigation-left-buttons",
|
|
26
|
+
children: onBack !== undefined && /*#__PURE__*/_jsx(Button, {
|
|
27
|
+
kind: "ghost",
|
|
28
|
+
className: "btn-back",
|
|
29
|
+
"data-testid": "btn-page-back",
|
|
30
|
+
onClick: onBack,
|
|
31
|
+
icon: vsChevronLeft,
|
|
32
|
+
children: "Back"
|
|
33
|
+
})
|
|
34
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
35
|
+
className: "navigation-title",
|
|
36
|
+
children: title
|
|
37
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
38
|
+
className: "navigation-right-buttons",
|
|
39
|
+
children: onClose !== undefined && /*#__PURE__*/_jsx(Button, {
|
|
40
|
+
kind: "ghost",
|
|
41
|
+
className: "btn-close px-2 m-1",
|
|
42
|
+
"data-testid": "btn-page-close",
|
|
43
|
+
onClick: onClose,
|
|
44
|
+
icon: vsClose,
|
|
45
|
+
tooltip: "Close"
|
|
46
|
+
})
|
|
47
|
+
})]
|
|
48
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
49
|
+
className: "navigation-content",
|
|
50
|
+
children: children
|
|
51
|
+
})]
|
|
52
|
+
});
|
|
44
53
|
}
|
|
45
54
|
export default Page;
|
|
46
55
|
//# sourceMappingURL=Page.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Page.js","names":["React","vsClose","vsChevronLeft","Button","Page","children","onBack","onClose","title","dataTestId","undefined"],"sources":["../../src/navigation/Page.tsx"],"sourcesContent":["import React from 'react';\nimport { vsClose, vsChevronLeft } from '@deephaven/icons';\nimport './Page.scss';\nimport Button from '../Button';\n\nexport type PageProps = {\n children: React.ReactNode;\n onBack?: () => void;\n onClose?: () => void;\n title: string;\n 'data-testid'?: string;\n};\n\n/**\n * A page view with a back button in the bottom left, a title at the top, and a close button in the top right.\n * Back and close buttons will only appear if `onBack` and/or `onClose` callbacks are set.\n */\nexport function Page({\n children,\n onBack,\n onClose,\n title,\n 'data-testid': dataTestId,\n}: PageProps): JSX.Element {\n return (\n <div className=\"navigation-page\" data-testid={dataTestId}>\n <div className=\"navigation-title-bar\">\n <div className=\"navigation-left-buttons\">\n {onBack !== undefined && (\n <Button\n kind=\"ghost\"\n className=\"btn-back\"\n data-testid=\"btn-page-back\"\n onClick={onBack}\n icon={vsChevronLeft}\n >\n Back\n </Button>\n )}\n </div>\n <div className=\"navigation-title\">{title}</div>\n <div className=\"navigation-right-buttons\">\n {onClose !== undefined && (\n <Button\n kind=\"ghost\"\n className=\"btn-close px-2 m-1\"\n data-testid=\"btn-page-close\"\n onClick={onClose}\n icon={vsClose}\n tooltip=\"Close\"\n />\n )}\n </div>\n </div>\n <div className=\"navigation-content\">{children}</div>\n </div>\n );\n}\n\nexport default Page;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,OAAO,EAAEC,aAAa,QAAQ,kBAAkB;AAAC;AAAA,OAEnDC,MAAM;AAUb;AACA;AACA;AACA;AACA,OAAO,SAASC,IAAI,OAMO;EAAA,IANN;IACnBC,QAAQ;IACRC,MAAM;IACNC,OAAO;IACPC,KAAK;IACL,aAAa,EAAEC;EACN,CAAC;EACV,oBACE;IAAK,SAAS,EAAC,iBAAiB;IAAC,eAAaA;
|
|
1
|
+
{"version":3,"file":"Page.js","names":["React","vsClose","vsChevronLeft","Button","Page","children","onBack","onClose","title","dataTestId","undefined"],"sources":["../../src/navigation/Page.tsx"],"sourcesContent":["import React from 'react';\nimport { vsClose, vsChevronLeft } from '@deephaven/icons';\nimport './Page.scss';\nimport Button from '../Button';\n\nexport type PageProps = {\n children: React.ReactNode;\n onBack?: () => void;\n onClose?: () => void;\n title: string;\n 'data-testid'?: string;\n};\n\n/**\n * A page view with a back button in the bottom left, a title at the top, and a close button in the top right.\n * Back and close buttons will only appear if `onBack` and/or `onClose` callbacks are set.\n */\nexport function Page({\n children,\n onBack,\n onClose,\n title,\n 'data-testid': dataTestId,\n}: PageProps): JSX.Element {\n return (\n <div className=\"navigation-page\" data-testid={dataTestId}>\n <div className=\"navigation-title-bar\">\n <div className=\"navigation-left-buttons\">\n {onBack !== undefined && (\n <Button\n kind=\"ghost\"\n className=\"btn-back\"\n data-testid=\"btn-page-back\"\n onClick={onBack}\n icon={vsChevronLeft}\n >\n Back\n </Button>\n )}\n </div>\n <div className=\"navigation-title\">{title}</div>\n <div className=\"navigation-right-buttons\">\n {onClose !== undefined && (\n <Button\n kind=\"ghost\"\n className=\"btn-close px-2 m-1\"\n data-testid=\"btn-page-close\"\n onClick={onClose}\n icon={vsClose}\n tooltip=\"Close\"\n />\n )}\n </div>\n </div>\n <div className=\"navigation-content\">{children}</div>\n </div>\n );\n}\n\nexport default Page;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,OAAO,EAAEC,aAAa,QAAQ,kBAAkB;AAAC;AAAA,OAEnDC,MAAM;AAAA;AAAA;AAUb;AACA;AACA;AACA;AACA,OAAO,SAASC,IAAI,OAMO;EAAA,IANN;IACnBC,QAAQ;IACRC,MAAM;IACNC,OAAO;IACPC,KAAK;IACL,aAAa,EAAEC;EACN,CAAC;EACV,oBACE;IAAK,SAAS,EAAC,iBAAiB;IAAC,eAAaA,UAAW;IAAA,wBACvD;MAAK,SAAS,EAAC,sBAAsB;MAAA,wBACnC;QAAK,SAAS,EAAC,yBAAyB;QAAA,UACrCH,MAAM,KAAKI,SAAS,iBACnB,KAAC,MAAM;UACL,IAAI,EAAC,OAAO;UACZ,SAAS,EAAC,UAAU;UACpB,eAAY,eAAe;UAC3B,OAAO,EAAEJ,MAAO;UAChB,IAAI,EAAEJ,aAAc;UAAA,UACrB;QAED;MACD,EACG,eACN;QAAK,SAAS,EAAC,kBAAkB;QAAA,UAAEM;MAAK,EAAO,eAC/C;QAAK,SAAS,EAAC,0BAA0B;QAAA,UACtCD,OAAO,KAAKG,SAAS,iBACpB,KAAC,MAAM;UACL,IAAI,EAAC,OAAO;UACZ,SAAS,EAAC,oBAAoB;UAC9B,eAAY,gBAAgB;UAC5B,OAAO,EAAEH,OAAQ;UACjB,IAAI,EAAEN,OAAQ;UACd,OAAO,EAAC;QAAO;MAElB,EACG;IAAA,EACF,eACN;MAAK,SAAS,EAAC,oBAAoB;MAAA,UAAEI;IAAQ,EAAO;EAAA,EAChD;AAEV;AAEA,eAAeD,IAAI"}
|
package/dist/navigation/Stack.js
CHANGED
|
@@ -3,6 +3,9 @@ import { CSSTransition } from 'react-transition-group';
|
|
|
3
3
|
import { usePrevious } from '@deephaven/react-hooks';
|
|
4
4
|
import ThemeExport from "../ThemeExport.js";
|
|
5
5
|
import "./Stack.css";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
8
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
9
|
/**
|
|
7
10
|
* Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.
|
|
8
11
|
* Adding items to the stack will do a "push" animation, and removing items from the stack will do a "pop" animation.
|
|
@@ -57,26 +60,36 @@ export function Stack(_ref) {
|
|
|
57
60
|
var popComplete = useCallback(() => {
|
|
58
61
|
setPoppingView(null);
|
|
59
62
|
}, []);
|
|
60
|
-
return /*#__PURE__*/
|
|
61
|
-
className: "navigation-stack"
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
63
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
64
|
+
className: "navigation-stack",
|
|
65
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
66
|
+
className: "main-view",
|
|
67
|
+
"data-testid": dataTestId,
|
|
68
|
+
children: mainView
|
|
69
|
+
}), /*#__PURE__*/_jsx(CSSTransition, {
|
|
70
|
+
in: poppingView != null,
|
|
71
|
+
timeout: ThemeExport.transitionMidMs,
|
|
72
|
+
classNames: "slide-right",
|
|
73
|
+
onEntered: popComplete,
|
|
74
|
+
children: /*#__PURE__*/_jsx(_Fragment, {
|
|
75
|
+
children: poppingView != null && /*#__PURE__*/_jsx("div", {
|
|
76
|
+
className: "popping-view",
|
|
77
|
+
children: poppingView
|
|
78
|
+
})
|
|
79
|
+
})
|
|
80
|
+
}), /*#__PURE__*/_jsx(CSSTransition, {
|
|
81
|
+
in: pushingView != null,
|
|
82
|
+
timeout: ThemeExport.transitionMidMs,
|
|
83
|
+
classNames: "slide-left",
|
|
84
|
+
onEntered: pushComplete,
|
|
85
|
+
children: /*#__PURE__*/_jsx(_Fragment, {
|
|
86
|
+
children: pushingView != null && /*#__PURE__*/_jsx("div", {
|
|
87
|
+
className: "pushing-view",
|
|
88
|
+
children: pushingView
|
|
89
|
+
})
|
|
90
|
+
})
|
|
91
|
+
})]
|
|
92
|
+
});
|
|
80
93
|
}
|
|
81
94
|
export default Stack;
|
|
82
95
|
//# sourceMappingURL=Stack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stack.js","names":["React","useState","useEffect","useMemo","useCallback","CSSTransition","usePrevious","ThemeExport","Stack","children","dataTestId","childrenArray","Children","toArray","prevChildrenArray","mainView","setMainView","length","pushingView","setPushingView","poppingView","setPoppingView","initAnimation","undefined","topChild","pushComplete","popComplete","transitionMidMs"],"sources":["../../src/navigation/Stack.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport ThemeExport from '../ThemeExport';\nimport './Stack.scss';\n\nexport type StackProps = {\n children: React.ReactNode | React.ReactNode[];\n 'data-testid'?: string;\n};\n\n/**\n * Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.\n * Adding items to the stack will do a \"push\" animation, and removing items from the stack will do a \"pop\" animation.\n */\nexport function Stack({\n children,\n 'data-testid': dataTestId,\n}: StackProps): JSX.Element {\n const childrenArray = useMemo(\n () => React.Children.toArray(children),\n [children]\n );\n const prevChildrenArray = usePrevious(childrenArray);\n const [mainView, setMainView] = useState<React.ReactNode>(\n childrenArray[childrenArray.length - 1]\n );\n\n const [pushingView, setPushingView] = useState<React.ReactNode>(null);\n const [poppingView, setPoppingView] = useState<React.ReactNode>(null);\n\n /**\n * To do the animation effect, we just need to set the proper pushing/popping views when the stack changes.\n * `mainView` - The main view of the stack, stationary, filling the container.\n * `pushingView` - A view that's currently being pushed. Slides from off screen right to overtop of `mainView`.\n * `poppingView` - A view that's currently being popped. Slides from overtop of `mainView` to right off screen.\n *\n * When the `pushingView` or `poppingView` is set, that will kick off their animation.\n * Completion of the animation is handled in `pushComplete` or `popComplete`, and then the stack is in an idle state again.\n */\n useEffect(\n function initAnimation() {\n if (\n prevChildrenArray === undefined ||\n childrenArray === prevChildrenArray\n ) {\n return;\n }\n const topChild = childrenArray[childrenArray.length - 1];\n if (\n childrenArray.length === prevChildrenArray.length ||\n prevChildrenArray.length === 0 ||\n pushingView !== null ||\n poppingView !== null\n ) {\n // 1) Stack is the same size, we've just mounted, or we're already in an animation - just update the view\n if (pushingView !== null && topChild !== pushingView) {\n // Stack was updated mid animation\n setPushingView(topChild);\n } else if (topChild !== poppingView && topChild !== mainView) {\n // Replace the current view\n setMainView(topChild);\n }\n } else if (childrenArray.length > prevChildrenArray.length) {\n // 2) Stack has grown - start the push animation\n setPushingView(topChild);\n } else if (childrenArray.length < prevChildrenArray.length) {\n // 3) Stack has shrunk - start the pop animation\n setMainView(topChild);\n setPoppingView(prevChildrenArray[prevChildrenArray.length - 1]);\n }\n },\n [childrenArray, prevChildrenArray, pushingView, poppingView, mainView]\n );\n\n const pushComplete = useCallback(() => {\n setMainView(pushingView);\n setPushingView(null);\n }, [pushingView]);\n\n const popComplete = useCallback(() => {\n setPoppingView(null);\n }, []);\n\n return (\n <div className=\"navigation-stack\">\n <div className=\"main-view\" data-testid={dataTestId}>\n {mainView}\n </div>\n\n <CSSTransition\n in={poppingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-right\"\n onEntered={popComplete}\n >\n {/* Without the fragment, the transition doesn't work. Without the conditional render, the stack is blank */}\n {/* eslint-disable-next-line react/jsx-no-useless-fragment */}\n <>\n {poppingView != null && (\n <div className=\"popping-view\">{poppingView}</div>\n )}\n </>\n </CSSTransition>\n <CSSTransition\n in={pushingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntered={pushComplete}\n >\n {/* eslint-disable-next-line react/jsx-no-useless-fragment */}\n <>\n {pushingView != null && (\n <div className=\"pushing-view\">{pushingView}</div>\n )}\n </>\n </CSSTransition>\n </div>\n );\n}\n\nexport default Stack;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,SAAS,EAAEC,OAAO,EAAEC,WAAW,QAAQ,OAAO;AACxE,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,WAAW,QAAQ,wBAAwB;AAAC,OAC9CC,WAAW;AAAA;AAQlB;AACA;AACA;AACA;AACA,OAAO,SAASC,KAAK,OAGO;EAAA,IAHN;IACpBC,QAAQ;IACR,aAAa,EAAEC;EACL,CAAC;EACX,IAAMC,aAAa,GAAGR,OAAO,CAC3B,MAAMH,KAAK,CAACY,QAAQ,CAACC,OAAO,CAACJ,QAAQ,CAAC,EACtC,CAACA,QAAQ,CAAC,CACX;EACD,IAAMK,iBAAiB,GAAGR,WAAW,CAACK,aAAa,CAAC;EACpD,IAAM,CAACI,QAAQ,EAAEC,WAAW,CAAC,GAAGf,QAAQ,CACtCU,aAAa,CAACA,aAAa,CAACM,MAAM,GAAG,CAAC,CAAC,CACxC;EAED,IAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGlB,QAAQ,CAAkB,IAAI,CAAC;EACrE,IAAM,CAACmB,WAAW,EAAEC,cAAc,CAAC,GAAGpB,QAAQ,CAAkB,IAAI,CAAC;;EAErE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,SAAS,CACP,SAASoB,aAAa,GAAG;IACvB,IACER,iBAAiB,KAAKS,SAAS,IAC/BZ,aAAa,KAAKG,iBAAiB,EACnC;MACA;IACF;IACA,IAAMU,QAAQ,GAAGb,aAAa,CAACA,aAAa,CAACM,MAAM,GAAG,CAAC,CAAC;IACxD,IACEN,aAAa,CAACM,MAAM,KAAKH,iBAAiB,CAACG,MAAM,IACjDH,iBAAiB,CAACG,MAAM,KAAK,CAAC,IAC9BC,WAAW,KAAK,IAAI,IACpBE,WAAW,KAAK,IAAI,EACpB;MACA;MACA,IAAIF,WAAW,KAAK,IAAI,IAAIM,QAAQ,KAAKN,WAAW,EAAE;QACpD;QACAC,cAAc,CAACK,QAAQ,CAAC;MAC1B,CAAC,MAAM,IAAIA,QAAQ,KAAKJ,WAAW,IAAII,QAAQ,KAAKT,QAAQ,EAAE;QAC5D;QACAC,WAAW,CAACQ,QAAQ,CAAC;MACvB;IACF,CAAC,MAAM,IAAIb,aAAa,CAACM,MAAM,GAAGH,iBAAiB,CAACG,MAAM,EAAE;MAC1D;MACAE,cAAc,CAACK,QAAQ,CAAC;IAC1B,CAAC,MAAM,IAAIb,aAAa,CAACM,MAAM,GAAGH,iBAAiB,CAACG,MAAM,EAAE;MAC1D;MACAD,WAAW,CAACQ,QAAQ,CAAC;MACrBH,cAAc,CAACP,iBAAiB,CAACA,iBAAiB,CAACG,MAAM,GAAG,CAAC,CAAC,CAAC;IACjE;EACF,CAAC,EACD,CAACN,aAAa,EAAEG,iBAAiB,EAAEI,WAAW,EAAEE,WAAW,EAAEL,QAAQ,CAAC,CACvE;EAED,IAAMU,YAAY,GAAGrB,WAAW,CAAC,MAAM;IACrCY,WAAW,CAACE,WAAW,CAAC;IACxBC,cAAc,CAAC,IAAI,CAAC;EACtB,CAAC,EAAE,CAACD,WAAW,CAAC,CAAC;EAEjB,IAAMQ,WAAW,GAAGtB,WAAW,CAAC,MAAM;IACpCiB,cAAc,CAAC,IAAI,CAAC;EACtB,CAAC,EAAE,EAAE,CAAC;EAEN,oBACE;IAAK,SAAS,EAAC;
|
|
1
|
+
{"version":3,"file":"Stack.js","names":["React","useState","useEffect","useMemo","useCallback","CSSTransition","usePrevious","ThemeExport","Stack","children","dataTestId","childrenArray","Children","toArray","prevChildrenArray","mainView","setMainView","length","pushingView","setPushingView","poppingView","setPoppingView","initAnimation","undefined","topChild","pushComplete","popComplete","transitionMidMs"],"sources":["../../src/navigation/Stack.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport ThemeExport from '../ThemeExport';\nimport './Stack.scss';\n\nexport type StackProps = {\n children: React.ReactNode | React.ReactNode[];\n 'data-testid'?: string;\n};\n\n/**\n * Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.\n * Adding items to the stack will do a \"push\" animation, and removing items from the stack will do a \"pop\" animation.\n */\nexport function Stack({\n children,\n 'data-testid': dataTestId,\n}: StackProps): JSX.Element {\n const childrenArray = useMemo(\n () => React.Children.toArray(children),\n [children]\n );\n const prevChildrenArray = usePrevious(childrenArray);\n const [mainView, setMainView] = useState<React.ReactNode>(\n childrenArray[childrenArray.length - 1]\n );\n\n const [pushingView, setPushingView] = useState<React.ReactNode>(null);\n const [poppingView, setPoppingView] = useState<React.ReactNode>(null);\n\n /**\n * To do the animation effect, we just need to set the proper pushing/popping views when the stack changes.\n * `mainView` - The main view of the stack, stationary, filling the container.\n * `pushingView` - A view that's currently being pushed. Slides from off screen right to overtop of `mainView`.\n * `poppingView` - A view that's currently being popped. Slides from overtop of `mainView` to right off screen.\n *\n * When the `pushingView` or `poppingView` is set, that will kick off their animation.\n * Completion of the animation is handled in `pushComplete` or `popComplete`, and then the stack is in an idle state again.\n */\n useEffect(\n function initAnimation() {\n if (\n prevChildrenArray === undefined ||\n childrenArray === prevChildrenArray\n ) {\n return;\n }\n const topChild = childrenArray[childrenArray.length - 1];\n if (\n childrenArray.length === prevChildrenArray.length ||\n prevChildrenArray.length === 0 ||\n pushingView !== null ||\n poppingView !== null\n ) {\n // 1) Stack is the same size, we've just mounted, or we're already in an animation - just update the view\n if (pushingView !== null && topChild !== pushingView) {\n // Stack was updated mid animation\n setPushingView(topChild);\n } else if (topChild !== poppingView && topChild !== mainView) {\n // Replace the current view\n setMainView(topChild);\n }\n } else if (childrenArray.length > prevChildrenArray.length) {\n // 2) Stack has grown - start the push animation\n setPushingView(topChild);\n } else if (childrenArray.length < prevChildrenArray.length) {\n // 3) Stack has shrunk - start the pop animation\n setMainView(topChild);\n setPoppingView(prevChildrenArray[prevChildrenArray.length - 1]);\n }\n },\n [childrenArray, prevChildrenArray, pushingView, poppingView, mainView]\n );\n\n const pushComplete = useCallback(() => {\n setMainView(pushingView);\n setPushingView(null);\n }, [pushingView]);\n\n const popComplete = useCallback(() => {\n setPoppingView(null);\n }, []);\n\n return (\n <div className=\"navigation-stack\">\n <div className=\"main-view\" data-testid={dataTestId}>\n {mainView}\n </div>\n\n <CSSTransition\n in={poppingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-right\"\n onEntered={popComplete}\n >\n {/* Without the fragment, the transition doesn't work. Without the conditional render, the stack is blank */}\n {/* eslint-disable-next-line react/jsx-no-useless-fragment */}\n <>\n {poppingView != null && (\n <div className=\"popping-view\">{poppingView}</div>\n )}\n </>\n </CSSTransition>\n <CSSTransition\n in={pushingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntered={pushComplete}\n >\n {/* eslint-disable-next-line react/jsx-no-useless-fragment */}\n <>\n {pushingView != null && (\n <div className=\"pushing-view\">{pushingView}</div>\n )}\n </>\n </CSSTransition>\n </div>\n );\n}\n\nexport default Stack;\n"],"mappings":"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"}
|
package/dist/popper/Popper.js
CHANGED
|
@@ -28,6 +28,8 @@ import PopperJs from 'popper.js';
|
|
|
28
28
|
import PropTypes from 'prop-types';
|
|
29
29
|
import ThemeExport from "../ThemeExport.js";
|
|
30
30
|
import "./Popper.css";
|
|
31
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
32
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
31
33
|
class Popper extends Component {
|
|
32
34
|
constructor(props) {
|
|
33
35
|
super(props);
|
|
@@ -206,32 +208,35 @@ class Popper extends Component {
|
|
|
206
208
|
var {
|
|
207
209
|
show
|
|
208
210
|
} = this.state;
|
|
209
|
-
return /*#__PURE__*/
|
|
211
|
+
return /*#__PURE__*/_jsx(CSSTransition, {
|
|
210
212
|
in: show,
|
|
211
213
|
timeout: timeout,
|
|
212
214
|
classNames: "popper-transition",
|
|
213
215
|
onEntered: this.handleEnter,
|
|
214
|
-
onExited: this.handleExit
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
216
|
+
onExited: this.handleExit,
|
|
217
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
218
|
+
onClick: e => {
|
|
219
|
+
// stop click events from escaping popper
|
|
220
|
+
e.stopPropagation();
|
|
221
|
+
},
|
|
222
|
+
onKeyDown: e => {
|
|
223
|
+
if (e.key === 'Escape') this.hide();
|
|
224
|
+
},
|
|
225
|
+
className: classNames('popper', {
|
|
226
|
+
interactive
|
|
227
|
+
}, className),
|
|
228
|
+
onBlur: closeOnBlur ? this.handleBlur : undefined,
|
|
229
|
+
tabIndex: closeOnBlur ? -1 : undefined,
|
|
230
|
+
role: "presentation",
|
|
231
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
232
|
+
className: "popper-content",
|
|
233
|
+
children: [children, /*#__PURE__*/_jsx("div", {
|
|
234
|
+
className: "popper-arrow",
|
|
235
|
+
"x-arrow": ""
|
|
236
|
+
})]
|
|
237
|
+
})
|
|
238
|
+
})
|
|
239
|
+
});
|
|
235
240
|
}
|
|
236
241
|
render() {
|
|
237
242
|
var {
|
|
@@ -240,14 +245,15 @@ class Popper extends Component {
|
|
|
240
245
|
var {
|
|
241
246
|
'data-testid': dataTestId
|
|
242
247
|
} = this.props;
|
|
243
|
-
return /*#__PURE__*/
|
|
248
|
+
return /*#__PURE__*/_jsx("div", {
|
|
244
249
|
className: "popper-parent-container",
|
|
245
250
|
ref: this.container,
|
|
246
251
|
style: {
|
|
247
252
|
display: 'none'
|
|
248
253
|
},
|
|
249
|
-
"data-testid": dataTestId
|
|
250
|
-
|
|
254
|
+
"data-testid": dataTestId,
|
|
255
|
+
children: popper && /*#__PURE__*/ReactDOM.createPortal(this.renderContent(), this.element)
|
|
256
|
+
});
|
|
251
257
|
}
|
|
252
258
|
}
|
|
253
259
|
_defineProperty(Popper, "propTypes", {
|