@deephaven/components 0.22.3-beta.18 → 0.22.3-beta.21
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 +12 -85
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/AutoResizeTextarea.d.ts +5 -5
- package/dist/AutoResizeTextarea.d.ts.map +1 -1
- package/dist/AutoResizeTextarea.js +8 -23
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/BasicModal.d.ts +28 -1
- package/dist/BasicModal.d.ts.map +1 -1
- package/dist/BasicModal.js +2 -8
- package/dist/BasicModal.js.map +1 -1
- package/dist/Button.js +8 -34
- package/dist/Button.js.map +1 -1
- package/dist/ButtonGroup.d.ts +6 -6
- package/dist/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup.js +2 -4
- package/dist/ButtonGroup.js.map +1 -1
- package/dist/ButtonOld.js.map +1 -1
- package/dist/CardFlip.d.ts +1 -1
- package/dist/CardFlip.d.ts.map +1 -1
- package/dist/CardFlip.js +2 -7
- package/dist/CardFlip.js.map +1 -1
- package/dist/Checkbox.js +3 -14
- package/dist/Checkbox.js.map +1 -1
- package/dist/Collapse.js +0 -15
- package/dist/Collapse.js.map +1 -1
- package/dist/ComboBox.js +4 -83
- package/dist/ComboBox.js.map +1 -1
- package/dist/CopyButton.d.ts +1 -1
- package/dist/CopyButton.d.ts.map +1 -1
- package/dist/CopyButton.js +2 -4
- package/dist/CopyButton.js.map +1 -1
- package/dist/CustomTimeSelect.js +2 -86
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DateInput.js.map +1 -1
- package/dist/DateInputUtils.js +0 -7
- package/dist/DateInputUtils.js.map +1 -1
- package/dist/DateTimeInput.js +7 -10
- package/dist/DateTimeInput.js.map +1 -1
- package/dist/DebouncedSearchInput.js +0 -14
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DragUtils.js +4 -16
- package/dist/DragUtils.js.map +1 -1
- package/dist/DraggableItemList.d.ts.map +1 -1
- package/dist/DraggableItemList.js +22 -44
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/EditableItemList.d.ts +1 -1
- package/dist/EditableItemList.d.ts.map +1 -1
- package/dist/EditableItemList.js +2 -6
- package/dist/EditableItemList.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +6 -28
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.d.ts.map +1 -1
- package/dist/ItemList.js +22 -115
- package/dist/ItemList.js.map +1 -1
- package/dist/ItemListItem.d.ts +0 -1
- package/dist/ItemListItem.d.ts.map +1 -1
- package/dist/ItemListItem.js +26 -50
- package/dist/ItemListItem.js.map +1 -1
- package/dist/LoadingOverlay.d.ts +1 -1
- package/dist/LoadingOverlay.d.ts.map +1 -1
- package/dist/LoadingOverlay.js +3 -5
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/LoadingSpinner.d.ts +1 -1
- package/dist/LoadingSpinner.d.ts.map +1 -1
- package/dist/LoadingSpinner.js +2 -4
- package/dist/LoadingSpinner.js.map +1 -1
- package/dist/MaskedInput.js +26 -85
- package/dist/MaskedInput.js.map +1 -1
- package/dist/Option.d.ts +1 -1
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +2 -4
- package/dist/Option.js.map +1 -1
- package/dist/RadioGroup.d.ts +1 -1
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RadioGroup.js +4 -6
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioItem.js +0 -1
- package/dist/RadioItem.js.map +1 -1
- package/dist/SearchInput.js +2 -13
- package/dist/SearchInput.js.map +1 -1
- package/dist/Select.d.ts +1 -1
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +2 -4
- package/dist/Select.js.map +1 -1
- package/dist/SelectValueList.js +0 -28
- package/dist/SelectValueList.js.map +1 -1
- package/dist/SocketedButton.js.map +1 -1
- package/dist/ThemeExport.js +0 -4
- package/dist/ThemeExport.js.map +1 -1
- package/dist/TimeInput.js +2 -12
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.d.ts +1 -1
- package/dist/TimeSlider.d.ts.map +1 -1
- package/dist/TimeSlider.js +19 -33
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ToastNotification.d.ts +4 -4
- package/dist/ToastNotification.d.ts.map +1 -1
- package/dist/ToastNotification.js +2 -4
- package/dist/ToastNotification.js.map +1 -1
- package/dist/UISwitch.d.ts +1 -1
- package/dist/UISwitch.d.ts.map +1 -1
- package/dist/UISwitch.js +2 -4
- package/dist/UISwitch.js.map +1 -1
- package/dist/ValidateLabelInput.d.ts.map +1 -1
- package/dist/ValidateLabelInput.js +3 -3
- package/dist/ValidateLabelInput.js.map +1 -1
- package/dist/context-actions/ContextActionUtils.js +9 -40
- package/dist/context-actions/ContextActionUtils.js.map +1 -1
- package/dist/context-actions/ContextActions.js +1 -34
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.js +29 -110
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
- package/dist/context-actions/ContextMenuItem.js +3 -19
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js +7 -26
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/context-actions/GlobalContextAction.js +0 -15
- package/dist/context-actions/GlobalContextAction.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.js +0 -6
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/context-actions/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.js +4 -32
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.js +7 -52
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/menu-actions/index.d.ts +2 -1
- package/dist/menu-actions/index.d.ts.map +1 -1
- package/dist/menu-actions/index.js +2 -2
- package/dist/menu-actions/index.js.map +1 -1
- package/dist/modal/Modal.d.ts +2 -2
- package/dist/modal/Modal.d.ts.map +1 -1
- package/dist/modal/Modal.js +3 -9
- package/dist/modal/Modal.js.map +1 -1
- package/dist/modal/ModalBody.d.ts +1 -1
- package/dist/modal/ModalBody.d.ts.map +1 -1
- package/dist/modal/ModalBody.js +2 -4
- package/dist/modal/ModalBody.js.map +1 -1
- package/dist/modal/ModalFooter.d.ts +1 -1
- package/dist/modal/ModalFooter.d.ts.map +1 -1
- package/dist/modal/ModalFooter.js +2 -4
- package/dist/modal/ModalFooter.js.map +1 -1
- package/dist/modal/ModalHeader.d.ts +1 -1
- package/dist/modal/ModalHeader.d.ts.map +1 -1
- package/dist/modal/ModalHeader.js +2 -4
- package/dist/modal/ModalHeader.js.map +1 -1
- package/dist/modal/index.js.map +1 -1
- package/dist/navigation/Menu.d.ts +1 -1
- package/dist/navigation/Menu.d.ts.map +1 -1
- package/dist/navigation/Menu.js +2 -2
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.d.ts +1 -1
- package/dist/navigation/MenuItem.d.ts.map +1 -1
- package/dist/navigation/MenuItem.js +4 -7
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/Page.d.ts +1 -1
- package/dist/navigation/Page.d.ts.map +1 -1
- package/dist/navigation/Page.js +2 -3
- package/dist/navigation/Page.js.map +1 -1
- package/dist/navigation/Stack.d.ts +1 -1
- package/dist/navigation/Stack.d.ts.map +1 -1
- package/dist/navigation/Stack.js +3 -6
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/navigation/index.js.map +1 -1
- package/dist/popper/Popper.d.ts.map +1 -1
- package/dist/popper/Popper.js +13 -46
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.js +0 -56
- package/dist/popper/Tooltip.js.map +1 -1
- package/dist/popper/index.js.map +1 -1
- package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
- package/dist/shortcuts/Shortcut.js +19 -76
- package/dist/shortcuts/Shortcut.js.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.js +3 -18
- package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
- package/dist/shortcuts/index.js.map +1 -1
- package/package.json +8 -8
|
@@ -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
|
|
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(() => 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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default","Menu","MenuItem","Page","Stack"],"sources":["../../src/navigation/index.ts"],"sourcesContent":["export { default as Menu } from './Menu';\nexport type { MenuProps } from './Menu';\nexport { default as MenuItem } from './MenuItem';\nexport type { SwitchMenuItemDef, MenuItemDef, MenuItemProps } from './MenuItem';\nexport { default as Page } from './Page';\nexport type { PageProps } from './Page';\nexport { default as Stack } from './Stack';\n"],"mappings":"SAASA,OAAO,IAAIC,
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","Menu","MenuItem","Page","Stack"],"sources":["../../src/navigation/index.ts"],"sourcesContent":["export { default as Menu } from './Menu';\nexport type { MenuProps } from './Menu';\nexport { default as MenuItem } from './MenuItem';\nexport type { SwitchMenuItemDef, MenuItemDef, MenuItemProps } from './MenuItem';\nexport { default as Page } from './Page';\nexport type { PageProps } from './Page';\nexport { default as Stack } from './Stack';\n"],"mappings":"SAASA,OAAO,IAAIC,IAAI;AAAA,SAEfD,OAAO,IAAIE,QAAQ;AAAA,SAEnBF,OAAO,IAAIG,IAAI;AAAA,SAEfH,OAAO,IAAII,KAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popper.d.ts","sourceRoot":"","sources":["../../src/popper/Popper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,QAAQ,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,eAAe,CAAC;AAEvB,UAAU,WAAW;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;CACzB;AAED,cAAM,MAAO,SAAQ,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;IACtD,MAAM,CAAC,SAAS;;;;;;;;;;;;MAYd;IAEF,MAAM,CAAC,YAAY;;;;qBAIJ,IAAI;oBAGL,IAAI;;;;;;MAQhB;gBAEU,KAAK,EAAE,WAAW;IAsB9B,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAehD,oBAAoB,IAAI,IAAI;IAI5B,OAAO,EAAE,cAAc,CAAC;IAExB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAG3C,GAAG,EAAE,MAAM,CAAC;IAEZ,wFAAwF;IACxF,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI;IAYlE,UAAU,IAAI,IAAI;IA2ClB,aAAa,CAAC,WAAW,UAAO,GAAG,IAAI;IAsBvC,IAAI,IAAI,IAAI;IAKZ,IAAI,IAAI,IAAI;IAIZ,cAAc,IAAI,IAAI;IAKtB,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IASrC,WAAW,IAAI,IAAI;IAKnB,UAAU,IAAI,IAAI;IASlB,aAAa,IAAI,GAAG,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"Popper.d.ts","sourceRoot":"","sources":["../../src/popper/Popper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,QAAQ,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,eAAe,CAAC;AAEvB,UAAU,WAAW;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;CACzB;AAED,cAAM,MAAO,SAAQ,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;IACtD,MAAM,CAAC,SAAS;;;;;;;;;;;;MAYd;IAEF,MAAM,CAAC,YAAY;;;;qBAIJ,IAAI;oBAGL,IAAI;;;;;;MAQhB;gBAEU,KAAK,EAAE,WAAW;IAsB9B,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAehD,oBAAoB,IAAI,IAAI;IAI5B,OAAO,EAAE,cAAc,CAAC;IAExB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAG3C,GAAG,EAAE,MAAM,CAAC;IAEZ,wFAAwF;IACxF,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI;IAYlE,UAAU,IAAI,IAAI;IA2ClB,aAAa,CAAC,WAAW,UAAO,GAAG,IAAI;IAsBvC,IAAI,IAAI,IAAI;IAKZ,IAAI,IAAI,IAAI;IAIZ,cAAc,IAAI,IAAI;IAKtB,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IASrC,WAAW,IAAI,IAAI;IAKnB,UAAU,IAAI,IAAI;IASlB,aAAa,IAAI,GAAG,CAAC,OAAO;IAyC5B,MAAM,IAAI,GAAG,CAAC,OAAO;CActB;AAED,eAAe,MAAM,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/popper/Popper.js
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
2
|
-
|
|
3
2
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
-
|
|
5
3
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
-
|
|
7
4
|
/**
|
|
8
5
|
* A component for creating popover dialogs. Only requires child element.
|
|
9
6
|
*
|
|
@@ -20,6 +17,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
20
17
|
* <ChildContent />
|
|
21
18
|
* </Popper>
|
|
22
19
|
*/
|
|
20
|
+
|
|
23
21
|
import React, { Component } from 'react';
|
|
24
22
|
import ReactDOM from 'react-dom';
|
|
25
23
|
import classNames from 'classnames';
|
|
@@ -28,25 +26,21 @@ import PopperJs from 'popper.js';
|
|
|
28
26
|
import PropTypes from 'prop-types';
|
|
29
27
|
import ThemeExport from "../ThemeExport.js";
|
|
30
28
|
import "./Popper.css";
|
|
31
|
-
|
|
32
29
|
class Popper extends Component {
|
|
33
30
|
constructor(props) {
|
|
34
31
|
super(props);
|
|
35
|
-
|
|
36
32
|
_defineProperty(this, "element", void 0);
|
|
37
|
-
|
|
38
33
|
_defineProperty(this, "container", void 0);
|
|
39
|
-
|
|
40
34
|
_defineProperty(this, "rAF", void 0);
|
|
41
|
-
|
|
42
35
|
this.handleEnter = this.handleEnter.bind(this);
|
|
43
36
|
this.handleExit = this.handleExit.bind(this);
|
|
44
37
|
this.handleBlur = this.handleBlur.bind(this);
|
|
45
38
|
this.element = document.createElement('div');
|
|
46
39
|
this.element.className = 'popper-container';
|
|
47
|
-
this.container = /*#__PURE__*/React.createRef();
|
|
48
|
-
// requestAnimationFrame provides a non-zero number, so 0 as a default should be safe
|
|
40
|
+
this.container = /*#__PURE__*/React.createRef();
|
|
49
41
|
|
|
42
|
+
// cancelAnimationFrame does nothing if the handle isn't recognized
|
|
43
|
+
// requestAnimationFrame provides a non-zero number, so 0 as a default should be safe
|
|
50
44
|
this.rAF = 0;
|
|
51
45
|
var {
|
|
52
46
|
isShown
|
|
@@ -56,12 +50,10 @@ class Popper extends Component {
|
|
|
56
50
|
popper: null
|
|
57
51
|
};
|
|
58
52
|
}
|
|
59
|
-
|
|
60
53
|
componentDidUpdate(prevProps) {
|
|
61
54
|
var {
|
|
62
55
|
isShown
|
|
63
56
|
} = this.props;
|
|
64
|
-
|
|
65
57
|
if (prevProps.isShown !== isShown) {
|
|
66
58
|
if (isShown) {
|
|
67
59
|
cancelAnimationFrame(this.rAF);
|
|
@@ -73,20 +65,16 @@ class Popper extends Component {
|
|
|
73
65
|
}
|
|
74
66
|
}
|
|
75
67
|
}
|
|
76
|
-
|
|
77
68
|
componentWillUnmount() {
|
|
78
69
|
this.destroyPopper(false);
|
|
79
70
|
}
|
|
80
|
-
|
|
81
71
|
/** Goes through an element and it's parents until the first visible element is found */
|
|
82
72
|
getVisibleElement(element) {
|
|
83
73
|
if (element == null || element.clientHeight > 0 || element.clientWidth > 0) {
|
|
84
74
|
return element;
|
|
85
75
|
}
|
|
86
|
-
|
|
87
76
|
return this.getVisibleElement(element.parentElement);
|
|
88
77
|
}
|
|
89
|
-
|
|
90
78
|
initPopper() {
|
|
91
79
|
var {
|
|
92
80
|
popper
|
|
@@ -95,15 +83,12 @@ class Popper extends Component {
|
|
|
95
83
|
closeOnBlur,
|
|
96
84
|
referenceObject
|
|
97
85
|
} = this.props;
|
|
98
|
-
|
|
99
86
|
if (popper) {
|
|
100
87
|
return;
|
|
101
88
|
}
|
|
102
|
-
|
|
103
89
|
if (this.container.current === null) {
|
|
104
90
|
return;
|
|
105
91
|
}
|
|
106
|
-
|
|
107
92
|
var {
|
|
108
93
|
options
|
|
109
94
|
} = this.props;
|
|
@@ -112,87 +97,77 @@ class Popper extends Component {
|
|
|
112
97
|
}, options);
|
|
113
98
|
document.body.appendChild(this.element);
|
|
114
99
|
var parent = this.getVisibleElement(this.container.current);
|
|
115
|
-
|
|
116
100
|
if (parent == null) {
|
|
117
101
|
parent = this.container.current;
|
|
118
102
|
}
|
|
119
|
-
|
|
120
103
|
popper = new PopperJs(referenceObject || parent, this.element, options);
|
|
121
|
-
popper.scheduleUpdate();
|
|
104
|
+
popper.scheduleUpdate();
|
|
122
105
|
|
|
106
|
+
// delayed due to scheduleUpdate
|
|
123
107
|
cancelAnimationFrame(this.rAF);
|
|
124
108
|
this.rAF = window.requestAnimationFrame(() => {
|
|
125
109
|
// for blur on close to work, focus needs to be on or within the popper
|
|
126
110
|
if (closeOnBlur && !this.element.contains(document.activeElement)) {
|
|
127
111
|
// only set focus, if a focus isn't already set within
|
|
128
112
|
var elem = this.element.firstElementChild;
|
|
129
|
-
|
|
130
113
|
if (elem instanceof HTMLElement) {
|
|
131
114
|
elem.focus(); // first child of the portal element
|
|
132
115
|
}
|
|
133
116
|
}
|
|
134
117
|
});
|
|
118
|
+
|
|
135
119
|
this.setState({
|
|
136
120
|
popper
|
|
137
121
|
});
|
|
138
122
|
}
|
|
139
|
-
|
|
140
123
|
destroyPopper() {
|
|
141
124
|
var updateState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
142
125
|
cancelAnimationFrame(this.rAF);
|
|
143
126
|
var {
|
|
144
127
|
popper
|
|
145
128
|
} = this.state;
|
|
146
|
-
|
|
147
129
|
if (!popper) {
|
|
148
130
|
return;
|
|
149
131
|
}
|
|
132
|
+
popper.destroy();
|
|
150
133
|
|
|
151
|
-
|
|
134
|
+
// If component is exiting and unmounted in
|
|
152
135
|
// the same frame, destroy can be called twice.
|
|
153
136
|
// Check to make sure removeChild isn't called twice.
|
|
154
|
-
|
|
155
137
|
if (document.body.contains(this.element)) {
|
|
156
138
|
document.body.removeChild(this.element);
|
|
157
139
|
}
|
|
158
|
-
|
|
159
140
|
if (updateState) {
|
|
160
141
|
this.setState({
|
|
161
142
|
popper: null
|
|
162
143
|
});
|
|
163
144
|
}
|
|
164
145
|
}
|
|
165
|
-
|
|
166
146
|
show() {
|
|
167
147
|
this.initPopper();
|
|
168
148
|
this.setState({
|
|
169
149
|
show: true
|
|
170
150
|
});
|
|
171
151
|
}
|
|
172
|
-
|
|
173
152
|
hide() {
|
|
174
153
|
this.setState({
|
|
175
154
|
show: false
|
|
176
155
|
});
|
|
177
156
|
}
|
|
178
|
-
|
|
179
157
|
scheduleUpdate() {
|
|
180
158
|
var {
|
|
181
159
|
popper
|
|
182
160
|
} = this.state;
|
|
183
161
|
if (popper) popper.scheduleUpdate();
|
|
184
162
|
}
|
|
185
|
-
|
|
186
163
|
handleBlur(e) {
|
|
187
164
|
if (!(e.relatedTarget instanceof HTMLElement)) {
|
|
188
165
|
return;
|
|
189
166
|
}
|
|
190
|
-
|
|
191
167
|
if (!this.element.contains(e.relatedTarget)) {
|
|
192
168
|
this.hide();
|
|
193
169
|
}
|
|
194
170
|
}
|
|
195
|
-
|
|
196
171
|
handleEnter() {
|
|
197
172
|
var {
|
|
198
173
|
onEntered
|
|
@@ -207,11 +182,9 @@ class Popper extends Component {
|
|
|
207
182
|
var {
|
|
208
183
|
show
|
|
209
184
|
} = this.state;
|
|
210
|
-
|
|
211
185
|
if (!show) {
|
|
212
186
|
this.destroyPopper();
|
|
213
187
|
}
|
|
214
|
-
|
|
215
188
|
onExited(); // trigger any parent component waiting for exited handler
|
|
216
189
|
}
|
|
217
190
|
|
|
@@ -253,7 +226,6 @@ class Popper extends Component {
|
|
|
253
226
|
"x-arrow": ""
|
|
254
227
|
}))));
|
|
255
228
|
}
|
|
256
|
-
|
|
257
229
|
render() {
|
|
258
230
|
var {
|
|
259
231
|
popper
|
|
@@ -270,9 +242,7 @@ class Popper extends Component {
|
|
|
270
242
|
"data-testid": dataTestId
|
|
271
243
|
}, popper && /*#__PURE__*/ReactDOM.createPortal(this.renderContent(), this.element));
|
|
272
244
|
}
|
|
273
|
-
|
|
274
245
|
}
|
|
275
|
-
|
|
276
246
|
_defineProperty(Popper, "propTypes", {
|
|
277
247
|
children: PropTypes.node.isRequired,
|
|
278
248
|
options: PropTypes.shape({}),
|
|
@@ -286,24 +256,21 @@ _defineProperty(Popper, "propTypes", {
|
|
|
286
256
|
referenceObject: PropTypes.shape({}),
|
|
287
257
|
'data-testid': PropTypes.string
|
|
288
258
|
});
|
|
289
|
-
|
|
290
259
|
_defineProperty(Popper, "defaultProps", {
|
|
291
260
|
options: {},
|
|
292
261
|
className: '',
|
|
293
262
|
timeout: ThemeExport.transitionMs,
|
|
294
|
-
|
|
295
|
-
|
|
263
|
+
onEntered() {
|
|
264
|
+
// no-op
|
|
296
265
|
},
|
|
297
|
-
|
|
298
|
-
|
|
266
|
+
onExited() {
|
|
267
|
+
// no-op
|
|
299
268
|
},
|
|
300
|
-
|
|
301
269
|
isShown: false,
|
|
302
270
|
interactive: false,
|
|
303
271
|
closeOnBlur: false,
|
|
304
272
|
referenceObject: null,
|
|
305
273
|
'data-testid': undefined
|
|
306
274
|
});
|
|
307
|
-
|
|
308
275
|
export default Popper;
|
|
309
276
|
//# sourceMappingURL=Popper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popper.js","names":["React","Component","ReactDOM","classNames","CSSTransition","PopperJs","PropTypes","ThemeExport","Popper","constructor","props","handleEnter","bind","handleExit","handleBlur","element","document","createElement","className","container","createRef","rAF","isShown","state","show","popper","componentDidUpdate","prevProps","cancelAnimationFrame","window","requestAnimationFrame","hide","componentWillUnmount","destroyPopper","getVisibleElement","clientHeight","clientWidth","parentElement","initPopper","closeOnBlur","referenceObject","current","options","placement","body","appendChild","parent","scheduleUpdate","contains","activeElement","elem","firstElementChild","HTMLElement","focus","setState","updateState","destroy","removeChild","e","relatedTarget","onEntered","onExited","renderContent","children","timeout","interactive","stopPropagation","key","undefined","render","dataTestId","display","createPortal","node","isRequired","shape","string","number","func","bool","transitionMs"],"sources":["../../src/popper/Popper.tsx"],"sourcesContent":["/**\n * A component for creating popover dialogs. Only requires child element.\n *\n * <Popper\n * options={popperOptions}\n * className=\"whatever\"\n * onEntered={this.handleEnter}\n * onExited={this.handleExit}\n * closeOnBlur // if you want dialog to self close, on click outside\n * interactive // if popper contents will be interactable\n * isShown={variable} // controls if its shown or not,\n * ref={this.popper} // or via ref and this.popper.show() or this.popper.hide()\n * >\n * <ChildContent />\n * </Popper>\n */\n\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PopperJs, { PopperOptions, ReferenceObject } from 'popper.js';\nimport PropTypes from 'prop-types';\nimport ThemeExport from '../ThemeExport';\nimport './Popper.scss';\n\ninterface PopperProps {\n options: PopperOptions;\n className: string;\n timeout: number;\n onEntered: () => void;\n onExited: () => void;\n isShown: boolean;\n closeOnBlur: boolean;\n interactive: boolean;\n referenceObject: ReferenceObject | null;\n 'data-testid'?: string;\n}\n\ninterface PopperState {\n show: boolean;\n popper: PopperJs | null;\n}\n\nclass Popper extends Component<PopperProps, PopperState> {\n static propTypes = {\n children: PropTypes.node.isRequired,\n options: PropTypes.shape({}),\n className: PropTypes.string,\n timeout: PropTypes.number,\n onEntered: PropTypes.func,\n onExited: PropTypes.func,\n isShown: PropTypes.bool,\n closeOnBlur: PropTypes.bool,\n interactive: PropTypes.bool,\n referenceObject: PropTypes.shape({}),\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n options: {},\n className: '',\n timeout: ThemeExport.transitionMs,\n onEntered(): void {\n // no-op\n },\n onExited(): void {\n // no-op\n },\n isShown: false,\n interactive: false,\n closeOnBlur: false,\n referenceObject: null,\n 'data-testid': undefined,\n };\n\n constructor(props: PopperProps) {\n super(props);\n\n this.handleEnter = this.handleEnter.bind(this);\n this.handleExit = this.handleExit.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.element = document.createElement('div');\n this.element.className = 'popper-container';\n this.container = React.createRef<HTMLDivElement>();\n\n // cancelAnimationFrame does nothing if the handle isn't recognized\n // requestAnimationFrame provides a non-zero number, so 0 as a default should be safe\n this.rAF = 0;\n\n const { isShown } = this.props;\n\n this.state = {\n show: isShown,\n popper: null,\n };\n }\n\n componentDidUpdate(prevProps: PopperProps): void {\n const { isShown } = this.props;\n\n if (prevProps.isShown !== isShown) {\n if (isShown) {\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n this.show();\n });\n } else {\n this.hide();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.destroyPopper(false);\n }\n\n element: HTMLDivElement;\n\n container: React.RefObject<HTMLDivElement>;\n\n // This is the request animation frame handle number\n rAF: number;\n\n /** Goes through an element and it's parents until the first visible element is found */\n getVisibleElement(element: HTMLElement | null): HTMLElement | null {\n if (\n element == null ||\n element.clientHeight > 0 ||\n element.clientWidth > 0\n ) {\n return element;\n }\n\n return this.getVisibleElement(element.parentElement);\n }\n\n initPopper(): void {\n let { popper } = this.state;\n const { closeOnBlur, referenceObject } = this.props;\n\n if (popper) {\n return;\n }\n\n if (this.container.current === null) {\n return;\n }\n\n let { options } = this.props;\n options = {\n placement: 'auto',\n ...options,\n };\n document.body.appendChild(this.element);\n\n let parent = this.getVisibleElement(this.container.current);\n if (parent == null) {\n parent = this.container.current;\n }\n\n popper = new PopperJs(referenceObject || parent, this.element, options);\n popper.scheduleUpdate();\n\n // delayed due to scheduleUpdate\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n // for blur on close to work, focus needs to be on or within the popper\n if (closeOnBlur && !this.element.contains(document.activeElement)) {\n // only set focus, if a focus isn't already set within\n const elem = this.element.firstElementChild;\n if (elem instanceof HTMLElement) {\n elem.focus(); // first child of the portal element\n }\n }\n });\n\n this.setState({ popper });\n }\n\n destroyPopper(updateState = true): void {\n cancelAnimationFrame(this.rAF);\n\n const { popper } = this.state;\n if (!popper) {\n return;\n }\n\n popper.destroy();\n\n // If component is exiting and unmounted in\n // the same frame, destroy can be called twice.\n // Check to make sure removeChild isn't called twice.\n if (document.body.contains(this.element)) {\n document.body.removeChild(this.element);\n }\n\n if (updateState) {\n this.setState({ popper: null });\n }\n }\n\n show(): void {\n this.initPopper();\n this.setState({ show: true });\n }\n\n hide(): void {\n this.setState({ show: false });\n }\n\n scheduleUpdate(): void {\n const { popper } = this.state;\n if (popper) popper.scheduleUpdate();\n }\n\n handleBlur(e: React.FocusEvent): void {\n if (!(e.relatedTarget instanceof HTMLElement)) {\n return;\n }\n if (!this.element.contains(e.relatedTarget)) {\n this.hide();\n }\n }\n\n handleEnter(): void {\n const { onEntered } = this.props;\n onEntered(); // trigger any parent component waiting for enter handler\n }\n\n handleExit(): void {\n const { onExited } = this.props;\n const { show } = this.state;\n if (!show) {\n this.destroyPopper();\n }\n onExited(); // trigger any parent component waiting for exited handler\n }\n\n renderContent(): JSX.Element {\n const {\n className,\n children,\n timeout,\n interactive,\n closeOnBlur,\n } = this.props;\n const { show } = this.state;\n\n return (\n <CSSTransition\n in={show}\n timeout={timeout}\n classNames=\"popper-transition\"\n onEntered={this.handleEnter}\n onExited={this.handleExit}\n >\n <div\n onClick={e => {\n // stop click events from escaping popper\n e.stopPropagation();\n }}\n onKeyDown={e => {\n if (e.key === 'Escape') this.hide();\n }}\n className={classNames('popper', { interactive }, className)}\n onBlur={closeOnBlur ? this.handleBlur : undefined}\n tabIndex={closeOnBlur ? -1 : undefined}\n role=\"presentation\"\n >\n <div className=\"popper-content\">\n {children}\n <div className=\"popper-arrow\" x-arrow=\"\" />\n </div>\n </div>\n </CSSTransition>\n );\n }\n\n render(): JSX.Element {\n const { popper } = this.state;\n const { 'data-testid': dataTestId } = this.props;\n return (\n <div\n className=\"popper-parent-container\"\n ref={this.container}\n style={{ display: 'none' }}\n data-testid={dataTestId}\n >\n {popper && ReactDOM.createPortal(this.renderContent(), this.element)}\n </div>\n );\n }\n}\n\nexport default Popper;\nexport type { PopperOptions, ReferenceObject };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Popper.js","names":["React","Component","ReactDOM","classNames","CSSTransition","PopperJs","PropTypes","ThemeExport","Popper","constructor","props","handleEnter","bind","handleExit","handleBlur","element","document","createElement","className","container","createRef","rAF","isShown","state","show","popper","componentDidUpdate","prevProps","cancelAnimationFrame","window","requestAnimationFrame","hide","componentWillUnmount","destroyPopper","getVisibleElement","clientHeight","clientWidth","parentElement","initPopper","closeOnBlur","referenceObject","current","options","placement","body","appendChild","parent","scheduleUpdate","contains","activeElement","elem","firstElementChild","HTMLElement","focus","setState","updateState","destroy","removeChild","e","relatedTarget","onEntered","onExited","renderContent","children","timeout","interactive","stopPropagation","key","undefined","render","dataTestId","display","createPortal","node","isRequired","shape","string","number","func","bool","transitionMs"],"sources":["../../src/popper/Popper.tsx"],"sourcesContent":["/**\n * A component for creating popover dialogs. Only requires child element.\n *\n * <Popper\n * options={popperOptions}\n * className=\"whatever\"\n * onEntered={this.handleEnter}\n * onExited={this.handleExit}\n * closeOnBlur // if you want dialog to self close, on click outside\n * interactive // if popper contents will be interactable\n * isShown={variable} // controls if its shown or not,\n * ref={this.popper} // or via ref and this.popper.show() or this.popper.hide()\n * >\n * <ChildContent />\n * </Popper>\n */\n\nimport React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport PopperJs, { PopperOptions, ReferenceObject } from 'popper.js';\nimport PropTypes from 'prop-types';\nimport ThemeExport from '../ThemeExport';\nimport './Popper.scss';\n\ninterface PopperProps {\n options: PopperOptions;\n className: string;\n timeout: number;\n onEntered: () => void;\n onExited: () => void;\n isShown: boolean;\n closeOnBlur: boolean;\n interactive: boolean;\n referenceObject: ReferenceObject | null;\n 'data-testid'?: string;\n}\n\ninterface PopperState {\n show: boolean;\n popper: PopperJs | null;\n}\n\nclass Popper extends Component<PopperProps, PopperState> {\n static propTypes = {\n children: PropTypes.node.isRequired,\n options: PropTypes.shape({}),\n className: PropTypes.string,\n timeout: PropTypes.number,\n onEntered: PropTypes.func,\n onExited: PropTypes.func,\n isShown: PropTypes.bool,\n closeOnBlur: PropTypes.bool,\n interactive: PropTypes.bool,\n referenceObject: PropTypes.shape({}),\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n options: {},\n className: '',\n timeout: ThemeExport.transitionMs,\n onEntered(): void {\n // no-op\n },\n onExited(): void {\n // no-op\n },\n isShown: false,\n interactive: false,\n closeOnBlur: false,\n referenceObject: null,\n 'data-testid': undefined,\n };\n\n constructor(props: PopperProps) {\n super(props);\n\n this.handleEnter = this.handleEnter.bind(this);\n this.handleExit = this.handleExit.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.element = document.createElement('div');\n this.element.className = 'popper-container';\n this.container = React.createRef<HTMLDivElement>();\n\n // cancelAnimationFrame does nothing if the handle isn't recognized\n // requestAnimationFrame provides a non-zero number, so 0 as a default should be safe\n this.rAF = 0;\n\n const { isShown } = this.props;\n\n this.state = {\n show: isShown,\n popper: null,\n };\n }\n\n componentDidUpdate(prevProps: PopperProps): void {\n const { isShown } = this.props;\n\n if (prevProps.isShown !== isShown) {\n if (isShown) {\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n this.show();\n });\n } else {\n this.hide();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.destroyPopper(false);\n }\n\n element: HTMLDivElement;\n\n container: React.RefObject<HTMLDivElement>;\n\n // This is the request animation frame handle number\n rAF: number;\n\n /** Goes through an element and it's parents until the first visible element is found */\n getVisibleElement(element: HTMLElement | null): HTMLElement | null {\n if (\n element == null ||\n element.clientHeight > 0 ||\n element.clientWidth > 0\n ) {\n return element;\n }\n\n return this.getVisibleElement(element.parentElement);\n }\n\n initPopper(): void {\n let { popper } = this.state;\n const { closeOnBlur, referenceObject } = this.props;\n\n if (popper) {\n return;\n }\n\n if (this.container.current === null) {\n return;\n }\n\n let { options } = this.props;\n options = {\n placement: 'auto',\n ...options,\n };\n document.body.appendChild(this.element);\n\n let parent = this.getVisibleElement(this.container.current);\n if (parent == null) {\n parent = this.container.current;\n }\n\n popper = new PopperJs(referenceObject || parent, this.element, options);\n popper.scheduleUpdate();\n\n // delayed due to scheduleUpdate\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n // for blur on close to work, focus needs to be on or within the popper\n if (closeOnBlur && !this.element.contains(document.activeElement)) {\n // only set focus, if a focus isn't already set within\n const elem = this.element.firstElementChild;\n if (elem instanceof HTMLElement) {\n elem.focus(); // first child of the portal element\n }\n }\n });\n\n this.setState({ popper });\n }\n\n destroyPopper(updateState = true): void {\n cancelAnimationFrame(this.rAF);\n\n const { popper } = this.state;\n if (!popper) {\n return;\n }\n\n popper.destroy();\n\n // If component is exiting and unmounted in\n // the same frame, destroy can be called twice.\n // Check to make sure removeChild isn't called twice.\n if (document.body.contains(this.element)) {\n document.body.removeChild(this.element);\n }\n\n if (updateState) {\n this.setState({ popper: null });\n }\n }\n\n show(): void {\n this.initPopper();\n this.setState({ show: true });\n }\n\n hide(): void {\n this.setState({ show: false });\n }\n\n scheduleUpdate(): void {\n const { popper } = this.state;\n if (popper) popper.scheduleUpdate();\n }\n\n handleBlur(e: React.FocusEvent): void {\n if (!(e.relatedTarget instanceof HTMLElement)) {\n return;\n }\n if (!this.element.contains(e.relatedTarget)) {\n this.hide();\n }\n }\n\n handleEnter(): void {\n const { onEntered } = this.props;\n onEntered(); // trigger any parent component waiting for enter handler\n }\n\n handleExit(): void {\n const { onExited } = this.props;\n const { show } = this.state;\n if (!show) {\n this.destroyPopper();\n }\n onExited(); // trigger any parent component waiting for exited handler\n }\n\n renderContent(): JSX.Element {\n const {\n className,\n children,\n timeout,\n interactive,\n closeOnBlur,\n } = this.props;\n const { show } = this.state;\n\n return (\n <CSSTransition\n in={show}\n timeout={timeout}\n classNames=\"popper-transition\"\n onEntered={this.handleEnter}\n onExited={this.handleExit}\n >\n <div\n onClick={e => {\n // stop click events from escaping popper\n e.stopPropagation();\n }}\n onKeyDown={e => {\n if (e.key === 'Escape') this.hide();\n }}\n className={classNames('popper', { interactive }, className)}\n onBlur={closeOnBlur ? this.handleBlur : undefined}\n tabIndex={closeOnBlur ? -1 : undefined}\n role=\"presentation\"\n >\n <div className=\"popper-content\">\n {children}\n {/* eslint-disable-next-line react/no-unknown-property */}\n <div className=\"popper-arrow\" x-arrow=\"\" />\n </div>\n </div>\n </CSSTransition>\n );\n }\n\n render(): JSX.Element {\n const { popper } = this.state;\n const { 'data-testid': dataTestId } = this.props;\n return (\n <div\n className=\"popper-parent-container\"\n ref={this.container}\n style={{ display: 'none' }}\n data-testid={dataTestId}\n >\n {popper && ReactDOM.createPortal(this.renderContent(), this.element)}\n </div>\n );\n }\n}\n\nexport default Popper;\nexport type { PopperOptions, ReferenceObject };\n"],"mappings":"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"}
|
package/dist/popper/Tooltip.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
import React, { Component } from 'react';
|
|
4
3
|
import classNames from 'classnames';
|
|
5
4
|
import Log from '@deephaven/log';
|
|
6
5
|
import Popper from "./Popper.js";
|
|
7
6
|
var log = Log.module('Tooltip');
|
|
8
|
-
|
|
9
7
|
/**
|
|
10
8
|
* Component that can be added to an element to automatically display a tooltip.
|
|
11
9
|
* Content is mounted lazily, so don't worry about complex tooltips!
|
|
@@ -21,27 +19,19 @@ var log = Log.module('Tooltip');
|
|
|
21
19
|
class Tooltip extends Component {
|
|
22
20
|
static handleHidden() {
|
|
23
21
|
Tooltip.shownTooltipCount -= 1;
|
|
24
|
-
|
|
25
22
|
if (Tooltip.shownTooltipCount === 0) {
|
|
26
23
|
Tooltip.lastHiddenTime = Date.now();
|
|
27
24
|
}
|
|
28
25
|
}
|
|
29
|
-
|
|
30
26
|
static handleShown() {
|
|
31
27
|
Tooltip.shownTooltipCount += 1;
|
|
32
28
|
}
|
|
33
|
-
|
|
34
29
|
constructor(props) {
|
|
35
30
|
super(props);
|
|
36
|
-
|
|
37
31
|
_defineProperty(this, "container", void 0);
|
|
38
|
-
|
|
39
32
|
_defineProperty(this, "popper", void 0);
|
|
40
|
-
|
|
41
33
|
_defineProperty(this, "parent", void 0);
|
|
42
|
-
|
|
43
34
|
_defineProperty(this, "timer", void 0);
|
|
44
|
-
|
|
45
35
|
this.handleMouseMove = this.handleMouseMove.bind(this);
|
|
46
36
|
this.handleMouseLeave = this.handleMouseLeave.bind(this);
|
|
47
37
|
this.handleWindowMouseMove = this.handleWindowMouseMove.bind(this);
|
|
@@ -57,18 +47,15 @@ class Tooltip extends Component {
|
|
|
57
47
|
isShown: false
|
|
58
48
|
};
|
|
59
49
|
}
|
|
60
|
-
|
|
61
50
|
componentDidMount() {
|
|
62
51
|
this.startListening();
|
|
63
52
|
var {
|
|
64
53
|
timeout
|
|
65
54
|
} = this.props;
|
|
66
|
-
|
|
67
55
|
if (timeout === 0) {
|
|
68
56
|
this.show();
|
|
69
57
|
}
|
|
70
58
|
}
|
|
71
|
-
|
|
72
59
|
componentDidUpdate(prevProps, prevState) {
|
|
73
60
|
var {
|
|
74
61
|
isShown: oldIsShown
|
|
@@ -76,7 +63,6 @@ class Tooltip extends Component {
|
|
|
76
63
|
var {
|
|
77
64
|
isShown
|
|
78
65
|
} = this.state;
|
|
79
|
-
|
|
80
66
|
if (isShown !== oldIsShown) {
|
|
81
67
|
if (isShown) {
|
|
82
68
|
Tooltip.handleShown();
|
|
@@ -85,7 +71,6 @@ class Tooltip extends Component {
|
|
|
85
71
|
}
|
|
86
72
|
}
|
|
87
73
|
}
|
|
88
|
-
|
|
89
74
|
componentWillUnmount() {
|
|
90
75
|
this.stopListening();
|
|
91
76
|
this.stopListeningWindow();
|
|
@@ -93,55 +78,45 @@ class Tooltip extends Component {
|
|
|
93
78
|
var {
|
|
94
79
|
isShown
|
|
95
80
|
} = this.state;
|
|
96
|
-
|
|
97
81
|
if (isShown) {
|
|
98
82
|
Tooltip.handleHidden();
|
|
99
83
|
}
|
|
100
84
|
}
|
|
101
|
-
|
|
102
85
|
startListening() {
|
|
103
86
|
if (!this.container.current || !this.container.current.parentElement) {
|
|
104
87
|
log.error("Tooltip doesn't have a container or a parent set!");
|
|
105
88
|
return;
|
|
106
89
|
}
|
|
107
|
-
|
|
108
90
|
this.parent = this.container.current.parentElement;
|
|
109
91
|
this.parent.addEventListener('mousemove', this.handleMouseMove);
|
|
110
92
|
this.parent.addEventListener('mouseleave', this.handleMouseLeave);
|
|
111
93
|
this.parent.addEventListener('mousedown', this.stopShowingTooltip);
|
|
112
94
|
}
|
|
113
|
-
|
|
114
95
|
stopListening() {
|
|
115
96
|
if (!this.parent) {
|
|
116
97
|
return;
|
|
117
98
|
}
|
|
118
|
-
|
|
119
99
|
this.parent.removeEventListener('mousemove', this.handleMouseMove);
|
|
120
100
|
this.parent.removeEventListener('mouseleave', this.handleMouseLeave);
|
|
121
101
|
this.parent.removeEventListener('mousedown', this.stopShowingTooltip);
|
|
122
102
|
}
|
|
123
|
-
|
|
124
103
|
startListeningWindow() {
|
|
125
104
|
window.addEventListener('mousemove', this.handleWindowMouseMove, true);
|
|
126
105
|
window.addEventListener('contextmenu', this.stopShowingTooltip, true);
|
|
127
106
|
window.addEventListener('wheel', this.handleWheel);
|
|
128
107
|
}
|
|
129
|
-
|
|
130
108
|
stopListeningWindow() {
|
|
131
109
|
window.removeEventListener('mousemove', this.handleWindowMouseMove, true);
|
|
132
110
|
window.removeEventListener('contextmenu', this.stopShowingTooltip, true);
|
|
133
111
|
window.removeEventListener('wheel', this.handleWheel);
|
|
134
112
|
}
|
|
135
|
-
|
|
136
113
|
handleMouseMove() {
|
|
137
114
|
this.startTimer();
|
|
138
115
|
}
|
|
139
|
-
|
|
140
116
|
handleWheel() {
|
|
141
117
|
var {
|
|
142
118
|
isShown
|
|
143
119
|
} = this.state;
|
|
144
|
-
|
|
145
120
|
if (this.popper.current && this.parent && isShown) {
|
|
146
121
|
if (!this.popper.current.element.matches(':hover') && !this.parent.matches(':hover')) {
|
|
147
122
|
this.stopTimer();
|
|
@@ -149,7 +124,6 @@ class Tooltip extends Component {
|
|
|
149
124
|
}
|
|
150
125
|
}
|
|
151
126
|
}
|
|
152
|
-
|
|
153
127
|
handleMouseLeave() {
|
|
154
128
|
var {
|
|
155
129
|
isShown
|
|
@@ -158,30 +132,24 @@ class Tooltip extends Component {
|
|
|
158
132
|
var {
|
|
159
133
|
interactive
|
|
160
134
|
} = this.props;
|
|
161
|
-
|
|
162
135
|
if (!interactive && isShown) {
|
|
163
136
|
this.hide();
|
|
164
137
|
}
|
|
165
138
|
}
|
|
166
|
-
|
|
167
139
|
handleTimeout() {
|
|
168
140
|
this.show();
|
|
169
141
|
}
|
|
170
|
-
|
|
171
142
|
handleWindowMouseMove(event) {
|
|
172
143
|
var mouseX = event.clientX;
|
|
173
144
|
var mouseY = event.clientY;
|
|
174
145
|
var {
|
|
175
146
|
isShown
|
|
176
147
|
} = this.state;
|
|
177
|
-
|
|
178
148
|
if (!this.popper.current || !this.parent) {
|
|
179
149
|
return;
|
|
180
150
|
}
|
|
181
|
-
|
|
182
151
|
var popperRect = this.popper.current.element.getBoundingClientRect();
|
|
183
152
|
var parentRect = this.parent.getBoundingClientRect();
|
|
184
|
-
|
|
185
153
|
if (mouseX >= popperRect.left && mouseX <= popperRect.left + popperRect.width && mouseY >= popperRect.top && mouseY <= popperRect.top + popperRect.height) {
|
|
186
154
|
this.handleMouseMove();
|
|
187
155
|
} else if (mouseX >= parentRect.left && mouseX <= parentRect.left + parentRect.width && mouseY >= parentRect.top && mouseY <= parentRect.top + parentRect.height) {
|
|
@@ -191,7 +159,6 @@ class Tooltip extends Component {
|
|
|
191
159
|
this.hide();
|
|
192
160
|
}
|
|
193
161
|
}
|
|
194
|
-
|
|
195
162
|
startTimer() {
|
|
196
163
|
this.stopTimer();
|
|
197
164
|
var {
|
|
@@ -199,30 +166,24 @@ class Tooltip extends Component {
|
|
|
199
166
|
reshowTimeout
|
|
200
167
|
} = this.props;
|
|
201
168
|
var timerTimeout = timeout;
|
|
202
|
-
|
|
203
169
|
if (Tooltip.shownTooltipCount > 0 || Date.now() - Tooltip.lastHiddenTime < Tooltip.triggerReshowThreshold) {
|
|
204
170
|
timerTimeout = reshowTimeout;
|
|
205
171
|
}
|
|
206
|
-
|
|
207
172
|
this.timer = window.setTimeout(this.handleTimeout, timerTimeout);
|
|
208
173
|
}
|
|
209
|
-
|
|
210
174
|
stopTimer() {
|
|
211
175
|
if (this.timer != null) {
|
|
212
176
|
clearTimeout(this.timer);
|
|
213
177
|
this.timer = null;
|
|
214
178
|
}
|
|
215
179
|
}
|
|
216
|
-
|
|
217
180
|
show() {
|
|
218
181
|
var {
|
|
219
182
|
isShown
|
|
220
183
|
} = this.state;
|
|
221
184
|
this.stopTimer();
|
|
222
|
-
|
|
223
185
|
if (!isShown) {
|
|
224
186
|
var _this$popper$current;
|
|
225
|
-
|
|
226
187
|
(_this$popper$current = this.popper.current) === null || _this$popper$current === void 0 ? void 0 : _this$popper$current.show();
|
|
227
188
|
this.setState({
|
|
228
189
|
isShown: true
|
|
@@ -230,26 +191,20 @@ class Tooltip extends Component {
|
|
|
230
191
|
var {
|
|
231
192
|
interactive
|
|
232
193
|
} = this.props;
|
|
233
|
-
|
|
234
194
|
if (interactive) {
|
|
235
195
|
this.startListeningWindow();
|
|
236
196
|
}
|
|
237
197
|
}
|
|
238
198
|
}
|
|
239
|
-
|
|
240
199
|
hide() {
|
|
241
200
|
var _this$popper$current2;
|
|
242
|
-
|
|
243
201
|
(_this$popper$current2 = this.popper.current) === null || _this$popper$current2 === void 0 ? void 0 : _this$popper$current2.hide();
|
|
244
202
|
this.stopListeningWindow();
|
|
245
203
|
}
|
|
246
|
-
|
|
247
204
|
update() {
|
|
248
205
|
var _this$popper$current3;
|
|
249
|
-
|
|
250
206
|
(_this$popper$current3 = this.popper.current) === null || _this$popper$current3 === void 0 ? void 0 : _this$popper$current3.scheduleUpdate();
|
|
251
207
|
}
|
|
252
|
-
|
|
253
208
|
handleExited() {
|
|
254
209
|
this.setState({
|
|
255
210
|
isShown: false
|
|
@@ -259,18 +214,15 @@ class Tooltip extends Component {
|
|
|
259
214
|
} = this.props;
|
|
260
215
|
onExited();
|
|
261
216
|
}
|
|
262
|
-
|
|
263
217
|
stopShowingTooltip() {
|
|
264
218
|
var {
|
|
265
219
|
isShown
|
|
266
220
|
} = this.state;
|
|
267
221
|
this.stopTimer();
|
|
268
|
-
|
|
269
222
|
if (isShown) {
|
|
270
223
|
this.hide();
|
|
271
224
|
}
|
|
272
225
|
}
|
|
273
|
-
|
|
274
226
|
render() {
|
|
275
227
|
var {
|
|
276
228
|
interactive,
|
|
@@ -302,19 +254,12 @@ class Tooltip extends Component {
|
|
|
302
254
|
className: "tooltip-content"
|
|
303
255
|
}, " ", isShown && children)));
|
|
304
256
|
}
|
|
305
|
-
|
|
306
257
|
}
|
|
307
|
-
|
|
308
258
|
_defineProperty(Tooltip, "defaultTimeout", 500);
|
|
309
|
-
|
|
310
259
|
_defineProperty(Tooltip, "defaultReshowTimeout", 100);
|
|
311
|
-
|
|
312
260
|
_defineProperty(Tooltip, "triggerReshowThreshold", 300);
|
|
313
|
-
|
|
314
261
|
_defineProperty(Tooltip, "shownTooltipCount", 0);
|
|
315
|
-
|
|
316
262
|
_defineProperty(Tooltip, "lastHiddenTime", Date.now());
|
|
317
|
-
|
|
318
263
|
_defineProperty(Tooltip, "defaultProps", {
|
|
319
264
|
interactive: false,
|
|
320
265
|
options: {},
|
|
@@ -325,6 +270,5 @@ _defineProperty(Tooltip, "defaultProps", {
|
|
|
325
270
|
onExited: () => undefined,
|
|
326
271
|
'data-testid': undefined
|
|
327
272
|
});
|
|
328
|
-
|
|
329
273
|
export default Tooltip;
|
|
330
274
|
//# sourceMappingURL=Tooltip.js.map
|