@deephaven/components 0.11.9-beta.0 → 0.11.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AutoCompleteInput.d.ts +3 -0
- package/dist/AutoCompleteInput.d.ts.map +1 -1
- package/dist/AutoCompleteInput.js +8 -4
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/AutoResizeTextarea.d.ts +4 -1
- package/dist/AutoResizeTextarea.d.ts.map +1 -1
- package/dist/AutoResizeTextarea.js +8 -4
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/BasicModal.d.ts +1 -0
- package/dist/BasicModal.d.ts.map +1 -1
- package/dist/BasicModal.js +14 -7
- package/dist/BasicModal.js.map +1 -1
- package/dist/Button.d.ts +1 -1
- package/dist/ButtonGroup.d.ts +3 -0
- package/dist/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup.js +8 -4
- package/dist/ButtonGroup.js.map +1 -1
- package/dist/CardFlip.d.ts +2 -1
- package/dist/CardFlip.d.ts.map +1 -1
- package/dist/CardFlip.js +4 -2
- package/dist/CardFlip.js.map +1 -1
- package/dist/Checkbox.d.ts +1 -0
- package/dist/Checkbox.d.ts.map +1 -1
- package/dist/Checkbox.js +8 -4
- package/dist/Checkbox.js.map +1 -1
- package/dist/Collapse.d.ts +3 -0
- package/dist/Collapse.d.ts.map +1 -1
- package/dist/Collapse.js +8 -4
- package/dist/Collapse.js.map +1 -1
- package/dist/ComboBox.d.ts +3 -0
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ComboBox.js +10 -5
- package/dist/ComboBox.js.map +1 -1
- package/dist/CustomTimeSelect.d.ts +1 -0
- package/dist/CustomTimeSelect.d.ts.map +1 -1
- package/dist/CustomTimeSelect.js +6 -3
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DebouncedSearchInput.d.ts +2 -0
- package/dist/DebouncedSearchInput.d.ts.map +1 -1
- package/dist/DebouncedSearchInput.js +6 -3
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DeephavenSpinner.d.ts +2 -1
- package/dist/DeephavenSpinner.d.ts.map +1 -1
- package/dist/DeephavenSpinner.js +4 -2
- package/dist/DeephavenSpinner.js.map +1 -1
- package/dist/DraggableItemList.d.ts +2 -0
- package/dist/DraggableItemList.d.ts.map +1 -1
- package/dist/DraggableItemList.js +6 -3
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.d.ts +1 -0
- package/dist/HierarchicalCheckboxMenu.d.ts.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +12 -6
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.d.ts +2 -0
- package/dist/ItemList.d.ts.map +1 -1
- package/dist/ItemList.js +6 -3
- package/dist/ItemList.js.map +1 -1
- package/dist/ItemListItem.d.ts +2 -0
- package/dist/ItemListItem.d.ts.map +1 -1
- package/dist/ItemListItem.js +5 -2
- package/dist/ItemListItem.js.map +1 -1
- package/dist/LoadingOverlay.d.ts +2 -1
- package/dist/LoadingOverlay.d.ts.map +1 -1
- package/dist/LoadingOverlay.js +4 -2
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/LoadingSpinner.d.ts +2 -1
- package/dist/LoadingSpinner.d.ts.map +1 -1
- package/dist/LoadingSpinner.js +4 -2
- package/dist/LoadingSpinner.js.map +1 -1
- package/dist/MaskedInput.d.ts +1 -0
- package/dist/MaskedInput.d.ts.map +1 -1
- package/dist/MaskedInput.js +6 -3
- package/dist/MaskedInput.js.map +1 -1
- package/dist/Option.d.ts +2 -1
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +4 -2
- package/dist/Option.js.map +1 -1
- package/dist/RadioGroup.d.ts +1 -0
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RadioGroup.js +4 -2
- package/dist/RadioGroup.js.map +1 -1
- package/dist/SearchInput.d.ts +2 -0
- package/dist/SearchInput.d.ts.map +1 -1
- package/dist/SearchInput.js +6 -3
- package/dist/SearchInput.js.map +1 -1
- package/dist/Select.d.ts +2 -1
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +4 -2
- package/dist/Select.js.map +1 -1
- package/dist/SelectValueList.d.ts +2 -0
- package/dist/SelectValueList.d.ts.map +1 -1
- package/dist/SelectValueList.js +6 -3
- package/dist/SelectValueList.js.map +1 -1
- package/dist/SocketedButton.d.ts +1 -0
- package/dist/SocketedButton.d.ts.map +1 -1
- package/dist/SocketedButton.js +6 -3
- package/dist/SocketedButton.js.map +1 -1
- package/dist/TimeInput.d.ts +1 -0
- package/dist/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput.js +6 -3
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.d.ts +2 -1
- package/dist/TimeSlider.d.ts.map +1 -1
- package/dist/TimeSlider.js +18 -9
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ToastNotification.d.ts +2 -1
- package/dist/ToastNotification.d.ts.map +1 -1
- package/dist/ToastNotification.js +4 -2
- package/dist/ToastNotification.js.map +1 -1
- package/dist/UISwitch.d.ts +3 -2
- package/dist/UISwitch.d.ts.map +1 -1
- package/dist/UISwitch.js +4 -2
- package/dist/UISwitch.js.map +1 -1
- package/dist/context-actions/ContextActions.d.ts +1 -0
- package/dist/context-actions/ContextActions.d.ts.map +1 -1
- package/dist/context-actions/ContextActions.js +5 -1
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.d.ts +2 -0
- package/dist/context-actions/ContextMenu.d.ts.map +1 -1
- package/dist/context-actions/ContextMenu.js +6 -3
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.d.ts +1 -0
- package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
- package/dist/context-actions/ContextMenuItem.js +10 -5
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.d.ts +3 -1
- package/dist/context-actions/ContextMenuRoot.d.ts.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js +5 -1
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.d.ts +1 -0
- package/dist/context-actions/GlobalContextActions.d.ts.map +1 -1
- package/dist/context-actions/GlobalContextActions.js +4 -2
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.d.ts +2 -0
- package/dist/menu-actions/DropdownMenu.d.ts.map +1 -1
- package/dist/menu-actions/DropdownMenu.js +6 -3
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.d.ts +2 -0
- package/dist/menu-actions/Menu.d.ts.map +1 -1
- package/dist/menu-actions/Menu.js +7 -2
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/navigation/Menu.d.ts +2 -1
- package/dist/navigation/Menu.d.ts.map +1 -1
- package/dist/navigation/Menu.js +4 -2
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.d.ts +2 -1
- package/dist/navigation/MenuItem.d.ts.map +1 -1
- package/dist/navigation/MenuItem.js +4 -2
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/Page.d.ts +2 -1
- package/dist/navigation/Page.d.ts.map +1 -1
- package/dist/navigation/Page.js +4 -2
- package/dist/navigation/Page.js.map +1 -1
- package/dist/navigation/Stack.d.ts +2 -1
- package/dist/navigation/Stack.d.ts.map +1 -1
- package/dist/navigation/Stack.js +4 -2
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/popper/Popper.d.ts +3 -0
- package/dist/popper/Popper.d.ts.map +1 -1
- package/dist/popper/Popper.js +9 -3
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.d.ts +2 -0
- package/dist/popper/Tooltip.d.ts.map +1 -1
- package/dist/popper/Tooltip.js +6 -3
- package/dist/popper/Tooltip.js.map +1 -1
- package/package.json +8 -8
package/dist/ButtonGroup.js
CHANGED
|
@@ -6,12 +6,14 @@ var ButtonGroup = props => {
|
|
|
6
6
|
var {
|
|
7
7
|
children,
|
|
8
8
|
className,
|
|
9
|
-
style
|
|
9
|
+
style,
|
|
10
|
+
'data-testid': dataTestId
|
|
10
11
|
} = props;
|
|
11
12
|
return /*#__PURE__*/React.createElement("div", {
|
|
12
13
|
className: classNames('btn-group', className),
|
|
13
14
|
style: style,
|
|
14
|
-
role: "group"
|
|
15
|
+
role: "group",
|
|
16
|
+
"data-testid": dataTestId
|
|
15
17
|
}, children);
|
|
16
18
|
};
|
|
17
19
|
|
|
@@ -19,11 +21,13 @@ ButtonGroup.displayName = 'ButtonGroup';
|
|
|
19
21
|
ButtonGroup.propTypes = {
|
|
20
22
|
children: PropTypes.node.isRequired,
|
|
21
23
|
className: PropTypes.string,
|
|
22
|
-
style: PropTypes.object
|
|
24
|
+
style: PropTypes.object,
|
|
25
|
+
'data-testid': PropTypes.string
|
|
23
26
|
};
|
|
24
27
|
ButtonGroup.defaultProps = {
|
|
25
28
|
className: null,
|
|
26
|
-
style: {}
|
|
29
|
+
style: {},
|
|
30
|
+
'data-testid': undefined
|
|
27
31
|
};
|
|
28
32
|
export default ButtonGroup;
|
|
29
33
|
//# sourceMappingURL=ButtonGroup.js.map
|
package/dist/ButtonGroup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ButtonGroup.tsx"],"names":["React","classNames","PropTypes","ButtonGroup","props","children","className","style","displayName","propTypes","node","isRequired","string","object","defaultProps"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,SAAP,MAAsB,YAAtB;;
|
|
1
|
+
{"version":3,"sources":["../src/ButtonGroup.tsx"],"names":["React","classNames","PropTypes","ButtonGroup","props","children","className","style","dataTestId","displayName","propTypes","node","isRequired","string","object","defaultProps","undefined"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,SAAP,MAAsB,YAAtB;;AASA,IAAMC,WAAW,GAAIC,KAAD,IAA0C;AAC5D,MAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,SAAZ;AAAuBC,IAAAA,KAAvB;AAA8B,mBAAeC;AAA7C,MAA4DJ,KAAlE;AAEA,sBACE;AACE,IAAA,SAAS,EAAEH,UAAU,CAAC,WAAD,EAAcK,SAAd,CADvB;AAEE,IAAA,KAAK,EAAEC,KAFT;AAGE,IAAA,IAAI,EAAC,OAHP;AAIE,mBAAaC;AAJf,KAMGH,QANH,CADF;AAUD,CAbD;;AAeAF,WAAW,CAACM,WAAZ,GAA0B,aAA1B;AAEAN,WAAW,CAACO,SAAZ,GAAwB;AACtBL,EAAAA,QAAQ,EAAEH,SAAS,CAACS,IAAV,CAAeC,UADH;AAEtBN,EAAAA,SAAS,EAAEJ,SAAS,CAACW,MAFC;AAGtBN,EAAAA,KAAK,EAAEL,SAAS,CAACY,MAHK;AAItB,iBAAeZ,SAAS,CAACW;AAJH,CAAxB;AAOAV,WAAW,CAACY,YAAZ,GAA2B;AACzBT,EAAAA,SAAS,EAAE,IADc;AAEzBC,EAAAA,KAAK,EAAE,EAFkB;AAGzB,iBAAeS;AAHU,CAA3B;AAMA,eAAeb,WAAf","sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\n\ninterface ButtonGroupProps {\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n 'data-testid'?: string;\n}\n\nconst ButtonGroup = (props: ButtonGroupProps): JSX.Element => {\n const { children, className, style, 'data-testid': dataTestId } = props;\n\n return (\n <div\n className={classNames('btn-group', className)}\n style={style}\n role=\"group\"\n data-testid={dataTestId}\n >\n {children}\n </div>\n );\n};\n\nButtonGroup.displayName = 'ButtonGroup';\n\nButtonGroup.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n style: PropTypes.object,\n 'data-testid': PropTypes.string,\n};\n\nButtonGroup.defaultProps = {\n className: null,\n style: {},\n 'data-testid': undefined,\n};\n\nexport default ButtonGroup;\n"],"file":"ButtonGroup.js"}
|
package/dist/CardFlip.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ declare type CardFlipProps = {
|
|
|
4
4
|
isFlipped: boolean;
|
|
5
5
|
children: [React.ReactNode, React.ReactNode];
|
|
6
6
|
className?: string;
|
|
7
|
+
'data-testid'?: string;
|
|
7
8
|
};
|
|
8
9
|
/**
|
|
9
10
|
* Card flip component, switches between a front and back face being visible.
|
|
@@ -13,6 +14,6 @@ declare type CardFlipProps = {
|
|
|
13
14
|
* @param children Expects exactly two children
|
|
14
15
|
* @returns
|
|
15
16
|
*/
|
|
16
|
-
declare const CardFlip: ({ className, isFlipped, children, }: CardFlipProps) => JSX.Element;
|
|
17
|
+
declare const CardFlip: ({ className, isFlipped, children, "data-testid": dataTestId, }: CardFlipProps) => JSX.Element;
|
|
17
18
|
export default CardFlip;
|
|
18
19
|
//# sourceMappingURL=CardFlip.d.ts.map
|
package/dist/CardFlip.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardFlip.d.ts","sourceRoot":"","sources":["../src/CardFlip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAE9D,OAAO,iBAAiB,CAAC;AAEzB,aAAK,aAAa,GAAG;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"CardFlip.d.ts","sourceRoot":"","sources":["../src/CardFlip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAE9D,OAAO,iBAAiB,CAAC;AAEzB,aAAK,aAAa,GAAG;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,QAAQ,mEAKX,aAAa,KAAG,WA6ClB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
package/dist/CardFlip.js
CHANGED
|
@@ -14,7 +14,8 @@ var CardFlip = _ref => {
|
|
|
14
14
|
var {
|
|
15
15
|
className,
|
|
16
16
|
isFlipped,
|
|
17
|
-
children
|
|
17
|
+
children,
|
|
18
|
+
'data-testid': dataTestId
|
|
18
19
|
} = _ref;
|
|
19
20
|
|
|
20
21
|
var getComponent = key => {
|
|
@@ -44,7 +45,8 @@ var CardFlip = _ref => {
|
|
|
44
45
|
className: classNames(className, {
|
|
45
46
|
'card-flip--show-front': isFlipped,
|
|
46
47
|
'card-flip--show-back': !isFlipped
|
|
47
|
-
})
|
|
48
|
+
}),
|
|
49
|
+
"data-testid": dataTestId
|
|
48
50
|
}, /*#__PURE__*/React.createElement("div", {
|
|
49
51
|
className: "card-flip--back"
|
|
50
52
|
}, getComponent(0)), /*#__PURE__*/React.createElement("div", {
|
package/dist/CardFlip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/CardFlip.tsx"],"names":["React","useCallback","useEffect","useRef","classNames","CardFlip","className","isFlipped","children","getComponent","key","length","Error","front","transitionStart","event","target","currentTarget","document","body","classList","add","transitionEnd","remove","current","addEventListener"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,EAAwCC,MAAxC,QAAsD,OAAtD;AACA,OAAOC,UAAP,MAAuB,YAAvB;;;
|
|
1
|
+
{"version":3,"sources":["../src/CardFlip.tsx"],"names":["React","useCallback","useEffect","useRef","classNames","CardFlip","className","isFlipped","children","dataTestId","getComponent","key","length","Error","front","transitionStart","event","target","currentTarget","document","body","classList","add","transitionEnd","remove","current","addEventListener"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,EAAwCC,MAAxC,QAAsD,OAAtD;AACA,OAAOC,UAAP,MAAuB,YAAvB;;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,QAAQ,GAAG,QAKiB;AAAA,MALhB;AAChBC,IAAAA,SADgB;AAEhBC,IAAAA,SAFgB;AAGhBC,IAAAA,QAHgB;AAIhB,mBAAeC;AAJC,GAKgB;;AAChC,MAAMC,YAAY,GAAIC,GAAD,IAAgB;AACnC,QAAIH,QAAQ,CAACI,MAAT,KAAoB,CAAxB,EAA2B;AACzB,YAAM,IAAIC,KAAJ,CAAU,0CAAV,CAAN;AACD;;AACD,WAAOL,QAAQ,CAACG,GAAD,CAAf;AACD,GALD;;AAOA,MAAMG,KAAK,GAAGX,MAAM,CAAiB,IAAjB,CAApB;AAEA,MAAMY,eAAe,GAAGd,WAAW,CAACe,KAAK,IAAI;AAC3C,QAAIA,KAAK,CAACC,MAAN,KAAiBD,KAAK,CAACE,aAA3B,EAA0C;AACxCC,MAAAA,QAAQ,CAACC,IAAT,CAAcC,SAAd,CAAwBC,GAAxB,CAA4B,wBAA5B;AACD;AACF,GAJkC,EAIhC,EAJgC,CAAnC;AAMA,MAAMC,aAAa,GAAGtB,WAAW,CAACe,KAAK,IAAI;AACzC,QAAIA,KAAK,CAACC,MAAN,KAAiBD,KAAK,CAACE,aAA3B,EAA0C;AACxCC,MAAAA,QAAQ,CAACC,IAAT,CAAcC,SAAd,CAAwBG,MAAxB,CAA+B,wBAA/B;AACD;AACF,GAJgC,EAI9B,EAJ8B,CAAjC;AAMAtB,EAAAA,SAAS,CAAC,MAAM;AACd,QAAI,CAACY,KAAK,CAACW,OAAX,EAAoB,MAAMZ,KAAK,CAAC,eAAD,CAAX;AACpBC,IAAAA,KAAK,CAACW,OAAN,CAAcC,gBAAd,CAA+B,iBAA/B,EAAkDX,eAAlD;AACD,GAHQ,EAGN,CAACA,eAAD,CAHM,CAAT;AAKA,sBACE;AACE,IAAA,SAAS,EAAEX,UAAU,CAACE,SAAD,EAAY;AAC/B,+BAAyBC,SADM;AAE/B,8BAAwB,CAACA;AAFM,KAAZ,CADvB;AAKE,mBAAaE;AALf,kBAOE;AAAK,IAAA,SAAS,EAAC;AAAf,KAAkCC,YAAY,CAAC,CAAD,CAA9C,CAPF,eAQE;AACE,IAAA,GAAG,EAAEI,KADP;AAEE,IAAA,SAAS,EAAC,kBAFZ;AAGE,IAAA,eAAe,EAAES;AAHnB,KAKGb,YAAY,CAAC,CAAD,CALf,CARF,CADF;AAkBD,CAlDD;;AAoDA,eAAeL,QAAf","sourcesContent":["import React, { useCallback, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport './CardFlip.scss';\n\ntype CardFlipProps = {\n isFlipped: boolean;\n children: [React.ReactNode, React.ReactNode];\n className?: string;\n 'data-testid'?: string;\n};\n\n/**\n * Card flip component, switches between a front and back face being visible.\n * Has logic to handle overflow on body, caused by perspective transforms\n * and moves z-index to top during transition.\n * @param isFlipped true shows second child, false shows first child\n * @param children Expects exactly two children\n * @returns\n */\nconst CardFlip = ({\n className,\n isFlipped,\n children,\n 'data-testid': dataTestId,\n}: CardFlipProps): JSX.Element => {\n const getComponent = (key: 0 | 1) => {\n if (children.length !== 2) {\n throw new Error('CardFlip requires 2 children to function');\n }\n return children[key];\n };\n\n const front = useRef<HTMLDivElement>(null);\n\n const transitionStart = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.add('card-flip--is-flipping');\n }\n }, []);\n\n const transitionEnd = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.remove('card-flip--is-flipping');\n }\n }, []);\n\n useEffect(() => {\n if (!front.current) throw Error('ref undefined');\n front.current.addEventListener('transitionstart', transitionStart);\n }, [transitionStart]);\n\n return (\n <div\n className={classNames(className, {\n 'card-flip--show-front': isFlipped,\n 'card-flip--show-back': !isFlipped,\n })}\n data-testid={dataTestId}\n >\n <div className=\"card-flip--back\">{getComponent(0)}</div>\n <div\n ref={front}\n className=\"card-flip--front\"\n onTransitionEnd={transitionEnd}\n >\n {getComponent(1)}\n </div>\n </div>\n );\n};\n\nexport default CardFlip;\n"],"file":"CardFlip.js"}
|
package/dist/Checkbox.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ interface CheckboxProps {
|
|
|
8
8
|
labelClassName?: string;
|
|
9
9
|
onChange?: React.ChangeEventHandler<HTMLInputElement>;
|
|
10
10
|
children?: React.ReactNode;
|
|
11
|
+
'data-testid'?: string;
|
|
11
12
|
}
|
|
12
13
|
/**
|
|
13
14
|
* A simple checkbox component. Automatically generates an id so htmlFor/id attributes are unique.
|
package/dist/Checkbox.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../src/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAMhE,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../src/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAMhE,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,QAAA,MAAM,QAAQ,wFA8Db,CAAC;AAmDF,eAAe,QAAQ,CAAC"}
|
package/dist/Checkbox.js
CHANGED
|
@@ -16,7 +16,8 @@ var Checkbox = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {
|
|
|
16
16
|
inputClassName,
|
|
17
17
|
isInvalid,
|
|
18
18
|
labelClassName,
|
|
19
|
-
onChange
|
|
19
|
+
onChange,
|
|
20
|
+
'data-testid': dataTestId
|
|
20
21
|
} = props;
|
|
21
22
|
var [id] = useState(shortid());
|
|
22
23
|
var ref = useForwardedRef(forwardedRef);
|
|
@@ -48,7 +49,8 @@ var Checkbox = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {
|
|
|
48
49
|
}),
|
|
49
50
|
disabled: disabled,
|
|
50
51
|
id: id,
|
|
51
|
-
onChange: handleOnChange
|
|
52
|
+
onChange: handleOnChange,
|
|
53
|
+
"data-testid": dataTestId
|
|
52
54
|
}), /*#__PURE__*/React.createElement("label", {
|
|
53
55
|
className: classNames('custom-control-label', labelClassName),
|
|
54
56
|
htmlFor: id
|
|
@@ -90,7 +92,8 @@ Checkbox.propTypes = {
|
|
|
90
92
|
labelClassName: PropTypes.string,
|
|
91
93
|
|
|
92
94
|
/** Triggered when the input is checked/unchecked */
|
|
93
|
-
onChange: PropTypes.func
|
|
95
|
+
onChange: PropTypes.func,
|
|
96
|
+
'data-testid': PropTypes.string
|
|
94
97
|
};
|
|
95
98
|
Checkbox.defaultProps = {
|
|
96
99
|
checked: false,
|
|
@@ -99,7 +102,8 @@ Checkbox.defaultProps = {
|
|
|
99
102
|
inputClassName: '',
|
|
100
103
|
isInvalid: false,
|
|
101
104
|
labelClassName: '',
|
|
102
|
-
onChange: undefined
|
|
105
|
+
onChange: undefined,
|
|
106
|
+
'data-testid': undefined
|
|
103
107
|
};
|
|
104
108
|
export default Checkbox;
|
|
105
109
|
//# sourceMappingURL=Checkbox.js.map
|
package/dist/Checkbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Checkbox.tsx"],"names":["React","useState","useEffect","useCallback","classNames","PropTypes","shortid","useForwardedRef","Checkbox","forwardRef","props","forwardedRef","checked","children","className","disabled","inputClassName","isInvalid","labelClassName","onChange","id","ref","current","indeterminate","handleOnChange","event","displayName","propTypes","propName","checkedType","Error","node","isRequired","string","bool","func","defaultProps","undefined"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,QAAhB,EAA0BC,SAA1B,EAAqCC,WAArC,QAAwD,OAAxD;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,OAAP,MAAoB,SAApB;AACA,SAASC,eAAT,QAAgC,wBAAhC;;
|
|
1
|
+
{"version":3,"sources":["../src/Checkbox.tsx"],"names":["React","useState","useEffect","useCallback","classNames","PropTypes","shortid","useForwardedRef","Checkbox","forwardRef","props","forwardedRef","checked","children","className","disabled","inputClassName","isInvalid","labelClassName","onChange","dataTestId","id","ref","current","indeterminate","handleOnChange","event","displayName","propTypes","propName","checkedType","Error","node","isRequired","string","bool","func","defaultProps","undefined"],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport shortid from 'shortid';\nimport { useForwardedRef } from '@deephaven/react-hooks';\n\ninterface CheckboxProps {\n checked: boolean | null;\n className?: string;\n disabled?: boolean;\n inputClassName?: string;\n isInvalid?: boolean;\n labelClassName?: string;\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n children?: React.ReactNode;\n 'data-testid'?: string;\n}\n\n/**\n * A simple checkbox component. Automatically generates an id so htmlFor/id attributes are unique.\n */\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (props, forwardedRef) => {\n const {\n checked = false,\n children,\n className,\n disabled,\n inputClassName,\n isInvalid,\n labelClassName,\n onChange,\n 'data-testid': dataTestId,\n } = props;\n\n const [id] = useState(shortid());\n\n const ref = useForwardedRef<HTMLInputElement>(forwardedRef);\n\n useEffect(() => {\n if (ref.current) {\n // indeterminate is not actually an html attr, can only be set via JS\n ref.current.indeterminate = checked === null;\n }\n }, [ref, checked]);\n\n const handleOnChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(\n event => {\n if (ref.current) {\n // ref.current can be null in tests, doesn't impact behaviour\n ref.current.indeterminate = checked === null;\n }\n\n if (onChange) {\n onChange(event);\n }\n },\n [ref, checked, onChange]\n );\n\n return (\n <div className={classNames('custom-control custom-checkbox', className)}>\n <input\n type=\"checkbox\"\n ref={ref}\n checked={checked ?? false} // checked attr must always have a value to remain as a controlled component\n className={classNames('custom-control-input', inputClassName, {\n 'is-invalid': isInvalid,\n })}\n disabled={disabled}\n id={id}\n onChange={handleOnChange}\n data-testid={dataTestId}\n />\n <label\n className={classNames('custom-control-label', labelClassName)}\n htmlFor={id}\n >\n {children}\n </label>\n </div>\n );\n }\n);\n\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\nCheckbox.displayName = 'Checkbox';\n\nCheckbox.propTypes = {\n /** Current value of the checkbox. */\n checked: (props, propName) => {\n const { [propName]: checkedType } = props;\n if (checkedType !== null && typeof checkedType !== 'boolean') {\n return new Error('Checked must be a boolean or null for indeterminate');\n }\n return null;\n },\n\n /** The node/text to put in the label of this checkbox */\n children: PropTypes.node.isRequired,\n\n /** An extra class name to add to the outer div component */\n className: PropTypes.string,\n\n /** An extra class for disabling the checkbox component */\n disabled: PropTypes.bool,\n\n /** An extra class name for the input component */\n inputClassName: PropTypes.string,\n\n /** Convenience for styling appropriately for an invalid value */\n isInvalid: PropTypes.bool,\n\n /** An extra class name for the label component */\n labelClassName: PropTypes.string,\n\n /** Triggered when the input is checked/unchecked */\n onChange: PropTypes.func,\n\n 'data-testid': PropTypes.string,\n};\n\nCheckbox.defaultProps = {\n checked: false,\n className: '',\n disabled: false,\n inputClassName: '',\n isInvalid: false,\n labelClassName: '',\n onChange: undefined,\n 'data-testid': undefined,\n};\n\nexport default Checkbox;\n"],"file":"Checkbox.js"}
|
package/dist/Collapse.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ interface CollapseProps {
|
|
|
5
5
|
in: boolean;
|
|
6
6
|
children: React.ReactNode;
|
|
7
7
|
autoFocusOnShow?: boolean;
|
|
8
|
+
'data-testid'?: string;
|
|
8
9
|
}
|
|
9
10
|
declare class Collapse extends Component<CollapseProps> {
|
|
10
11
|
static propTypes: {
|
|
@@ -12,10 +13,12 @@ declare class Collapse extends Component<CollapseProps> {
|
|
|
12
13
|
in: PropTypes.Validator<boolean>;
|
|
13
14
|
children: PropTypes.Validator<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
|
|
14
15
|
autoFocusOnShow: PropTypes.Requireable<boolean>;
|
|
16
|
+
'data-testid': PropTypes.Requireable<string>;
|
|
15
17
|
};
|
|
16
18
|
static defaultProps: {
|
|
17
19
|
className: string;
|
|
18
20
|
autoFocusOnShow: boolean;
|
|
21
|
+
'data-testid': undefined;
|
|
19
22
|
};
|
|
20
23
|
static handleEnter(elemParam: HTMLElement): void;
|
|
21
24
|
static handleEntering(elemParam: HTMLElement): void;
|
package/dist/Collapse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collapse.d.ts","sourceRoot":"","sources":["../src/Collapse.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,SAAS,MAAM,YAAY,CAAC;AAGnC,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Collapse.d.ts","sourceRoot":"","sources":["../src/Collapse.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,SAAS,MAAM,YAAY,CAAC;AAGnC,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,cAAM,QAAS,SAAQ,SAAS,CAAC,aAAa,CAAC;IAC7C,MAAM,CAAC,SAAS;;;;;;MAMd;IAEF,MAAM,CAAC,YAAY;;;;MAIjB;IAEF,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAKhD,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAKnD,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAKlD,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAK/C,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;gBAK/B,KAAK,EAAE,aAAa;IAMhC,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAgB3C,MAAM,IAAI,GAAG,CAAC,OAAO;CAkCtB;AAED,eAAe,QAAQ,CAAC"}
|
package/dist/Collapse.js
CHANGED
|
@@ -57,7 +57,8 @@ class Collapse extends Component {
|
|
|
57
57
|
var {
|
|
58
58
|
children,
|
|
59
59
|
className,
|
|
60
|
-
in: inTransition
|
|
60
|
+
in: inTransition,
|
|
61
|
+
'data-testid': dataTestId
|
|
61
62
|
} = this.props;
|
|
62
63
|
return /*#__PURE__*/React.createElement(CSSTransition, {
|
|
63
64
|
in: inTransition,
|
|
@@ -76,7 +77,8 @@ class Collapse extends Component {
|
|
|
76
77
|
}, state => /*#__PURE__*/React.createElement("div", {
|
|
77
78
|
className: classNames({
|
|
78
79
|
collapse: state === 'exited'
|
|
79
|
-
}, className)
|
|
80
|
+
}, className),
|
|
81
|
+
"data-testid": dataTestId
|
|
80
82
|
}, children));
|
|
81
83
|
}
|
|
82
84
|
|
|
@@ -86,12 +88,14 @@ _defineProperty(Collapse, "propTypes", {
|
|
|
86
88
|
className: PropTypes.string,
|
|
87
89
|
in: PropTypes.bool.isRequired,
|
|
88
90
|
children: PropTypes.node.isRequired,
|
|
89
|
-
autoFocusOnShow: PropTypes.bool
|
|
91
|
+
autoFocusOnShow: PropTypes.bool,
|
|
92
|
+
'data-testid': PropTypes.string
|
|
90
93
|
});
|
|
91
94
|
|
|
92
95
|
_defineProperty(Collapse, "defaultProps", {
|
|
93
96
|
className: '',
|
|
94
|
-
autoFocusOnShow: false
|
|
97
|
+
autoFocusOnShow: false,
|
|
98
|
+
'data-testid': undefined
|
|
95
99
|
});
|
|
96
100
|
|
|
97
101
|
export default Collapse;
|
package/dist/Collapse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Collapse.tsx"],"names":["React","Component","classNames","PropTypes","CSSTransition","Collapse","handleEnter","elemParam","elem","style","height","handleEntering","getHeight","handleExiting","handleExit","scrollBarWidth","scrollWidth","clientWidth","scrollHeight","constructor","props","handleEntered","bind","autoFocusOnShow","input","querySelector","focus","render","children","className","in","inTransition","enterActive","enterDone","exitActive","exitDone","state","collapse","string","bool","isRequired","node"],"mappings":";;AAAA;AACA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,aAAT,QAA8B,wBAA9B;;
|
|
1
|
+
{"version":3,"sources":["../src/Collapse.tsx"],"names":["React","Component","classNames","PropTypes","CSSTransition","Collapse","handleEnter","elemParam","elem","style","height","handleEntering","getHeight","handleExiting","handleExit","scrollBarWidth","scrollWidth","clientWidth","scrollHeight","constructor","props","handleEntered","bind","autoFocusOnShow","input","querySelector","focus","render","children","className","in","inTransition","dataTestId","enterActive","enterDone","exitActive","exitDone","state","collapse","string","bool","isRequired","node","undefined"],"mappings":"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","sourcesContent":["// Port of https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Collapse.js\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { CSSTransition } from 'react-transition-group';\n\ninterface CollapseProps {\n className?: string;\n in: boolean;\n children: React.ReactNode;\n autoFocusOnShow?: boolean;\n 'data-testid'?: string;\n}\n\nclass Collapse extends Component<CollapseProps> {\n static propTypes = {\n className: PropTypes.string,\n in: PropTypes.bool.isRequired,\n children: PropTypes.node.isRequired,\n autoFocusOnShow: PropTypes.bool,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n className: '',\n autoFocusOnShow: false,\n 'data-testid': undefined,\n };\n\n static handleEnter(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = '0';\n }\n\n static handleEntering(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = `${Collapse.getHeight(elem)}px`;\n }\n\n static handleExiting(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = '0';\n }\n\n static handleExit(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = `${Collapse.getHeight(elem)}px`;\n }\n\n static getHeight(elem: HTMLElement): number {\n const scrollBarWidth = elem.scrollWidth - elem.clientWidth;\n return elem.scrollHeight - scrollBarWidth;\n }\n\n constructor(props: CollapseProps) {\n super(props);\n\n this.handleEntered = this.handleEntered.bind(this);\n }\n\n handleEntered(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = '';\n\n const { autoFocusOnShow } = this.props;\n if (autoFocusOnShow) {\n const input = elem.querySelector(\n 'input, select, textarea'\n ) as HTMLInputElement;\n\n if (input) {\n input.focus();\n }\n }\n }\n\n render(): JSX.Element {\n const {\n children,\n className,\n in: inTransition,\n 'data-testid': dataTestId,\n } = this.props;\n return (\n <CSSTransition\n in={inTransition}\n classNames={{\n enterActive: 'collapsing',\n enterDone: 'collapse show',\n exitActive: 'collapsing',\n exitDone: 'collapse',\n }}\n onEnter={Collapse.handleEnter}\n onEntering={Collapse.handleEntering}\n onEntered={this.handleEntered}\n onExit={Collapse.handleExit}\n onExiting={Collapse.handleExiting}\n timeout={350}\n >\n {state => (\n <div\n className={classNames({ collapse: state === 'exited' }, className)}\n data-testid={dataTestId}\n >\n {children}\n </div>\n )}\n </CSSTransition>\n );\n }\n}\n\nexport default Collapse;\n"],"file":"Collapse.js"}
|
package/dist/ComboBox.d.ts
CHANGED
|
@@ -34,6 +34,7 @@ interface ComboBoxProps {
|
|
|
34
34
|
defaultValue: string;
|
|
35
35
|
spellCheck: boolean;
|
|
36
36
|
onEnter(): void;
|
|
37
|
+
'data-testid'?: string;
|
|
37
38
|
}
|
|
38
39
|
interface ComboBoxState {
|
|
39
40
|
value: string;
|
|
@@ -67,6 +68,7 @@ declare class ComboBox extends Component<ComboBoxProps, ComboBoxState> {
|
|
|
67
68
|
defaultValue: PropTypes.Requireable<string>;
|
|
68
69
|
spellCheck: PropTypes.Requireable<boolean>;
|
|
69
70
|
onEnter: PropTypes.Requireable<(...args: any[]) => any>;
|
|
71
|
+
'data-testid': PropTypes.Requireable<string>;
|
|
70
72
|
};
|
|
71
73
|
static defaultProps: {
|
|
72
74
|
onChange(): void;
|
|
@@ -78,6 +80,7 @@ declare class ComboBox extends Component<ComboBoxProps, ComboBoxState> {
|
|
|
78
80
|
popperOptions: null;
|
|
79
81
|
spellCheck: boolean;
|
|
80
82
|
onEnter(): void;
|
|
83
|
+
'data-testid': undefined;
|
|
81
84
|
};
|
|
82
85
|
constructor(props: ComboBoxProps);
|
|
83
86
|
componentDidUpdate(): void;
|
package/dist/ComboBox.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboBox.d.ts","sourceRoot":"","sources":["../src/ComboBox.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,SAAS,MAAM,YAAY,CAAC;AAGnC,OAAO,OAAO,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,iBAAiB,CAAC;AAEzB,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,IAAI,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ComboBox.d.ts","sourceRoot":"","sources":["../src/ComboBox.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,SAAS,MAAM,YAAY,CAAC;AAGnC,OAAO,OAAO,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,iBAAiB,CAAC;AAEzB,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,IAAI,IAAI,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,aAAK,yBAAyB;IAC5B,EAAE,OAAO;IACT,IAAI,SAAS;CACd;AAED,cAAM,QAAS,SAAQ,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IAC5D,MAAM,CAAC,yBAAyB,mCAA6B;IAE7D,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;;;MAoBd;IAEF,MAAM,CAAC,YAAY;oBACL,IAAI;;;;;;;;mBAUL,IAAI;;MAIf;gBAEU,KAAK,EAAE,aAAa;IAmChC,kBAAkB,IAAI,IAAI;IAO1B,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAEhC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE7C,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAEjD,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE/C,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEzC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAE1C,aAAa,IAAI,IAAI;IAQrB,wBAAwB,aACZ,cAAc,EAAE,SAAS,MAAM,oDAA/B,cAAc,EAAE,SAAS,MAAM,uBAMzC;IAEF,KAAK,IAAI,IAAI;IAIb,UAAU,IAAI,IAAI;IAIlB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMrC,YAAY,IAAI,IAAI;IAIpB,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI;IA2CnD,oBAAoB,CAAC,SAAS,EAAE,yBAAyB,GAAG,IAAI;IAuBhE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI;IAYpD,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAInE,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAWnE,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAInE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAapE,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAY7C,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAahE,gBAAgB,IAAI,IAAI;IAKxB,gBAAgB,IAAI,IAAI;IASxB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAU5D,QAAQ,IAAI,IAAI;IAUhB,SAAS,CAAC,UAAU,UAAO,GAAG,IAAI;IAQlC,mBAAmB,IAAI,IAAI;IAQ3B,oBAAoB,IAAI,IAAI;IAY5B,iBAAiB,IAAI,GAAG,CAAC,OAAO;IA+BhC,aAAa,IAAI,KAAK,CAAC,SAAS;IAwBhC,MAAM,IAAI,GAAG,CAAC,OAAO;CA2DtB;AAED,eAAe,QAAQ,CAAC"}
|
package/dist/ComboBox.js
CHANGED
|
@@ -468,7 +468,8 @@ class ComboBox extends Component {
|
|
|
468
468
|
disabled,
|
|
469
469
|
className,
|
|
470
470
|
defaultValue,
|
|
471
|
-
spellCheck
|
|
471
|
+
spellCheck,
|
|
472
|
+
'data-testid': dataTestId
|
|
472
473
|
} = this.props;
|
|
473
474
|
var {
|
|
474
475
|
value
|
|
@@ -496,7 +497,8 @@ class ComboBox extends Component {
|
|
|
496
497
|
disabled: disabled,
|
|
497
498
|
onBlur: this.handleInputBlur,
|
|
498
499
|
onKeyDown: this.handleInputKeyDown,
|
|
499
|
-
spellCheck: spellCheck
|
|
500
|
+
spellCheck: spellCheck,
|
|
501
|
+
"data-testid": dataTestId ? "".concat(dataTestId, "-input") : undefined
|
|
500
502
|
}), /*#__PURE__*/React.createElement("div", {
|
|
501
503
|
className: "input-group-append cb-dropdown"
|
|
502
504
|
}, /*#__PURE__*/React.createElement("button", {
|
|
@@ -505,7 +507,8 @@ class ComboBox extends Component {
|
|
|
505
507
|
ref: this.toggleButton,
|
|
506
508
|
onClick: this.toggleMenu,
|
|
507
509
|
onKeyDown: this.handleInputKeyDown,
|
|
508
|
-
disabled: disabled
|
|
510
|
+
disabled: disabled,
|
|
511
|
+
"data-testid": dataTestId ? "".concat(dataTestId, "-btn") : undefined
|
|
509
512
|
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
510
513
|
icon: vsTriangleDown
|
|
511
514
|
}), /*#__PURE__*/React.createElement(Popper, {
|
|
@@ -539,7 +542,8 @@ _defineProperty(ComboBox, "propTypes", {
|
|
|
539
542
|
className: PropTypes.string,
|
|
540
543
|
defaultValue: PropTypes.string,
|
|
541
544
|
spellCheck: PropTypes.bool,
|
|
542
|
-
onEnter: PropTypes.func
|
|
545
|
+
onEnter: PropTypes.func,
|
|
546
|
+
'data-testid': PropTypes.string
|
|
543
547
|
});
|
|
544
548
|
|
|
545
549
|
_defineProperty(ComboBox, "defaultProps", {
|
|
@@ -555,8 +559,9 @@ _defineProperty(ComboBox, "defaultProps", {
|
|
|
555
559
|
spellCheck: true,
|
|
556
560
|
|
|
557
561
|
onEnter() {// no-op
|
|
558
|
-
}
|
|
562
|
+
},
|
|
559
563
|
|
|
564
|
+
'data-testid': undefined
|
|
560
565
|
});
|
|
561
566
|
|
|
562
567
|
export default ComboBox;
|
package/dist/ComboBox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ComboBox.tsx"],"names":["React","Component","PropTypes","FontAwesomeIcon","vsTriangleDown","memoize","classNames","SearchInput","Popper","MENU_NAVIGATION_DIRECTION","ComboBox","constructor","props","options","input","filter","option","title","toLowerCase","indexOf","value","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","toggleMenu","bind","handleMenuKeyDown","handleMenuBlur","closeMenu","handleInputChange","handleInputKeyDown","handleInputBlur","handleFilterChange","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","toggleButton","menuContainer","searchInput","componentDidUpdate","scrollOptionIntoView","setInputWidth","current","setState","getBoundingClientRect","width","focus","resetValue","updateInputValue","onChange","handleResize","event","menuOptions","key","stopPropagation","preventDefault","handleMenuNavigation","UP","DOWN","shiftKey","length","direction","menuOptionsLength","delta","onEnter","openMenu","target","optionIndex","Number","currentTarget","getCachedFilteredOptions","scheduleUpdate","relatedTarget","Element","element","contains","hide","updateKeyboardIndex","window","requestAnimationFrame","show","focusInput","valueIndex","findIndex","activeOption","querySelector","HTMLElement","scrollIntoView","block","inline","renderMenuElement","searchPlaceholder","renderOptions","map","index","render","inputPlaceholder","disabled","className","defaultValue","spellCheck","popperOptions","placement","modifiers","preventOverflow","enabled","arrayOf","shape","string","isRequired","func","bool"],"mappings":"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","sourcesContent":["/**\n * Combobox that combines a input box with a searchable dropdown menu\n *\n * props:\n * @param {array} options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param {string} inputPlaceholder place holder for the input box\n * @param {string} searchPlaceholder place holder for the search box in drop down search box\n * @param {boolean} disabled disable both input & drop down\n *\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTriangleDown } from '@deephaven/icons';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { PopperOptions } from 'popper.js';\nimport SearchInput from './SearchInput';\nimport { Popper } from './popper';\n\nimport './ComboBox.scss';\n\ninterface ComboBoxOption {\n title: string;\n value: string;\n}\n\ninterface ComboBoxProps {\n options: ComboBoxOption[];\n popperOptions: PopperOptions;\n onChange(value: string): void;\n inputPlaceholder: string;\n searchPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultValue: string;\n spellCheck: boolean;\n onEnter(): void;\n}\n\ninterface ComboBoxState {\n value: string;\n filter: string;\n filteredOptions: ComboBoxOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n}\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\nclass ComboBox extends Component<ComboBoxProps, ComboBoxState> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 200;\n\n static propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n popperOptions: PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n searchPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultValue: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n };\n\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n searchPlaceholder: 'Search',\n disabled: false,\n className: '',\n defaultValue: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n };\n\n constructor(props: ComboBoxProps) {\n super(props);\n this.state = {\n value: '',\n filter: '',\n filteredOptions: props.options,\n keyboardOptionIndex: -1,\n menuIsOpen: false,\n inputWidth: 100,\n };\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.toggleButton = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n this.searchInput = React.createRef();\n }\n\n componentDidUpdate(): void {\n const { menuIsOpen, keyboardOptionIndex } = this.state;\n if (menuIsOpen && keyboardOptionIndex >= 0) {\n this.scrollOptionIntoView();\n }\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n toggleButton: React.RefObject<HTMLButtonElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n searchInput: React.RefObject<SearchInput>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: ComboBoxOption[], input: string) =>\n options.filter(\n option =>\n option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||\n option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0\n )\n );\n\n focus(): void {\n this.input.current?.focus();\n }\n\n resetValue(): void {\n this.setState({ value: '' });\n }\n\n updateInputValue(value: string): void {\n const { onChange } = this.props;\n this.setState({ value });\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n switch (event.key) {\n case 'Enter':\n if (menuOptions[keyboardOptionIndex]?.value != null) {\n this.updateInputValue(menuOptions[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.input.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.UP);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.DOWN);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n if (filter !== '') {\n this.setState({ filter: '' });\n event.stopPropagation(); // Don't trigger blur on input element\n } else {\n this.closeMenu();\n }\n break;\n case 'Tab':\n if (!event.shiftKey && keyboardOptionIndex === menuOptions.length - 1) {\n this.closeMenu();\n }\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const menuOptionsLength = menuOptions.length;\n let delta = 0;\n switch (direction) {\n case ComboBox.MENU_NAVIGATION_DIRECTION.UP:\n delta = -1;\n break;\n case ComboBox.MENU_NAVIGATION_DIRECTION.DOWN:\n delta = 1;\n break;\n }\n\n if (delta !== 0) {\n this.setState({\n keyboardOptionIndex:\n (keyboardOptionIndex + delta + menuOptionsLength) % menuOptionsLength,\n });\n }\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n if (!menuIsOpen) {\n this.openMenu();\n }\n } else if (event.key === 'Enter') {\n onEnter();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n this.updateInputValue(menuOptions[optionIndex].value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleFilterChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { options } = this.props;\n const filter = event.target.value;\n const filteredOptions = this.getCachedFilteredOptions(options, filter);\n\n this.setState({\n filter,\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n this.popper.current?.scheduleUpdate();\n }\n\n handleMenuBlur(event: React.FocusEvent): void {\n // close if menu blurs, unless its an internal option or the toggleButton which triggers close via click\n if (\n (event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)) ||\n event.relatedTarget === this.toggleButton.current\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n // if blur event is caused by focusing on search input or open menu by keyboard, don't close the menu\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.scrollOptionIntoView();\n this.searchInput.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false });\n this.popper.current?.hide();\n }\n this.setState({ filter: '' });\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n updateKeyboardIndex(): void {\n const { value, filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const valueIndex = menuOptions.findIndex(option => option.value === value);\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n\n scrollOptionIntoView(): void {\n const activeOption = this.menuContainer.current?.querySelector(\n '.cb-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { searchPlaceholder } = this.props;\n const { filter, inputWidth } = this.state;\n return (\n <div\n className=\"cb-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n <div className=\"cb-search-input-container\">\n <SearchInput\n value={filter}\n ref={this.searchInput}\n onChange={this.handleFilterChange}\n className=\"cb-search-input\"\n placeholder={searchPlaceholder}\n />\n </div>\n <div className=\"cb-options-container\">\n <div className=\"cb-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options } = this.props;\n const { keyboardOptionIndex, filter, filteredOptions } = this.state;\n const menuOptions = filter ? filteredOptions : options;\n\n return menuOptions.map((option, index) => {\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cb-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.title}\n </button>\n );\n });\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultValue,\n spellCheck,\n } = this.props;\n const { value } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div className=\"input-group cb-container\" ref={this.cbContainer}>\n <input\n value={value || defaultValue}\n className={classNames('form-control', className, 'cb-input')}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={inputPlaceholder || (options[0] && options[0].title)}\n disabled={disabled}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n />\n <div className=\"input-group-append cb-dropdown\">\n <button\n type=\"button\"\n className=\"btn cb-btn form-control\"\n ref={this.toggleButton}\n onClick={this.toggleMenu}\n onKeyDown={this.handleInputKeyDown}\n disabled={disabled}\n >\n <FontAwesomeIcon icon={vsTriangleDown} />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('combobox interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default ComboBox;\n"],"file":"ComboBox.js"}
|
|
1
|
+
{"version":3,"sources":["../src/ComboBox.tsx"],"names":["React","Component","PropTypes","FontAwesomeIcon","vsTriangleDown","memoize","classNames","SearchInput","Popper","MENU_NAVIGATION_DIRECTION","ComboBox","constructor","props","options","input","filter","option","title","toLowerCase","indexOf","value","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","toggleMenu","bind","handleMenuKeyDown","handleMenuBlur","closeMenu","handleInputChange","handleInputKeyDown","handleInputBlur","handleFilterChange","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","toggleButton","menuContainer","searchInput","componentDidUpdate","scrollOptionIntoView","setInputWidth","current","setState","getBoundingClientRect","width","focus","resetValue","updateInputValue","onChange","handleResize","event","menuOptions","key","stopPropagation","preventDefault","handleMenuNavigation","UP","DOWN","shiftKey","length","direction","menuOptionsLength","delta","onEnter","openMenu","target","optionIndex","Number","currentTarget","getCachedFilteredOptions","scheduleUpdate","relatedTarget","Element","element","contains","hide","updateKeyboardIndex","window","requestAnimationFrame","show","focusInput","valueIndex","findIndex","activeOption","querySelector","HTMLElement","scrollIntoView","block","inline","renderMenuElement","searchPlaceholder","renderOptions","map","index","render","inputPlaceholder","disabled","className","defaultValue","spellCheck","dataTestId","popperOptions","placement","modifiers","preventOverflow","enabled","undefined","arrayOf","shape","string","isRequired","func","bool"],"mappings":"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","sourcesContent":["/**\n * Combobox that combines a input box with a searchable dropdown menu\n *\n * props:\n * @param {array} options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param {string} inputPlaceholder place holder for the input box\n * @param {string} searchPlaceholder place holder for the search box in drop down search box\n * @param {boolean} disabled disable both input & drop down\n *\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTriangleDown } from '@deephaven/icons';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { PopperOptions } from 'popper.js';\nimport SearchInput from './SearchInput';\nimport { Popper } from './popper';\n\nimport './ComboBox.scss';\n\ninterface ComboBoxOption {\n title: string;\n value: string;\n}\n\ninterface ComboBoxProps {\n options: ComboBoxOption[];\n popperOptions: PopperOptions;\n onChange(value: string): void;\n inputPlaceholder: string;\n searchPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultValue: string;\n spellCheck: boolean;\n onEnter(): void;\n 'data-testid'?: string;\n}\n\ninterface ComboBoxState {\n value: string;\n filter: string;\n filteredOptions: ComboBoxOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n}\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\nclass ComboBox extends Component<ComboBoxProps, ComboBoxState> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 200;\n\n static propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n popperOptions: PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n searchPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultValue: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n searchPlaceholder: 'Search',\n disabled: false,\n className: '',\n defaultValue: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n 'data-testid': undefined,\n };\n\n constructor(props: ComboBoxProps) {\n super(props);\n this.state = {\n value: '',\n filter: '',\n filteredOptions: props.options,\n keyboardOptionIndex: -1,\n menuIsOpen: false,\n inputWidth: 100,\n };\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.toggleButton = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n this.searchInput = React.createRef();\n }\n\n componentDidUpdate(): void {\n const { menuIsOpen, keyboardOptionIndex } = this.state;\n if (menuIsOpen && keyboardOptionIndex >= 0) {\n this.scrollOptionIntoView();\n }\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n toggleButton: React.RefObject<HTMLButtonElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n searchInput: React.RefObject<SearchInput>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: ComboBoxOption[], input: string) =>\n options.filter(\n option =>\n option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||\n option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0\n )\n );\n\n focus(): void {\n this.input.current?.focus();\n }\n\n resetValue(): void {\n this.setState({ value: '' });\n }\n\n updateInputValue(value: string): void {\n const { onChange } = this.props;\n this.setState({ value });\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n switch (event.key) {\n case 'Enter':\n if (menuOptions[keyboardOptionIndex]?.value != null) {\n this.updateInputValue(menuOptions[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.input.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.UP);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.DOWN);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n if (filter !== '') {\n this.setState({ filter: '' });\n event.stopPropagation(); // Don't trigger blur on input element\n } else {\n this.closeMenu();\n }\n break;\n case 'Tab':\n if (!event.shiftKey && keyboardOptionIndex === menuOptions.length - 1) {\n this.closeMenu();\n }\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const menuOptionsLength = menuOptions.length;\n let delta = 0;\n switch (direction) {\n case ComboBox.MENU_NAVIGATION_DIRECTION.UP:\n delta = -1;\n break;\n case ComboBox.MENU_NAVIGATION_DIRECTION.DOWN:\n delta = 1;\n break;\n }\n\n if (delta !== 0) {\n this.setState({\n keyboardOptionIndex:\n (keyboardOptionIndex + delta + menuOptionsLength) % menuOptionsLength,\n });\n }\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n if (!menuIsOpen) {\n this.openMenu();\n }\n } else if (event.key === 'Enter') {\n onEnter();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n this.updateInputValue(menuOptions[optionIndex].value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleFilterChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { options } = this.props;\n const filter = event.target.value;\n const filteredOptions = this.getCachedFilteredOptions(options, filter);\n\n this.setState({\n filter,\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n this.popper.current?.scheduleUpdate();\n }\n\n handleMenuBlur(event: React.FocusEvent): void {\n // close if menu blurs, unless its an internal option or the toggleButton which triggers close via click\n if (\n (event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)) ||\n event.relatedTarget === this.toggleButton.current\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n // if blur event is caused by focusing on search input or open menu by keyboard, don't close the menu\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.scrollOptionIntoView();\n this.searchInput.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false });\n this.popper.current?.hide();\n }\n this.setState({ filter: '' });\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n updateKeyboardIndex(): void {\n const { value, filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const valueIndex = menuOptions.findIndex(option => option.value === value);\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n\n scrollOptionIntoView(): void {\n const activeOption = this.menuContainer.current?.querySelector(\n '.cb-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { searchPlaceholder } = this.props;\n const { filter, inputWidth } = this.state;\n return (\n <div\n className=\"cb-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n <div className=\"cb-search-input-container\">\n <SearchInput\n value={filter}\n ref={this.searchInput}\n onChange={this.handleFilterChange}\n className=\"cb-search-input\"\n placeholder={searchPlaceholder}\n />\n </div>\n <div className=\"cb-options-container\">\n <div className=\"cb-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options } = this.props;\n const { keyboardOptionIndex, filter, filteredOptions } = this.state;\n const menuOptions = filter ? filteredOptions : options;\n\n return menuOptions.map((option, index) => {\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cb-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.title}\n </button>\n );\n });\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultValue,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { value } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div className=\"input-group cb-container\" ref={this.cbContainer}>\n <input\n value={value || defaultValue}\n className={classNames('form-control', className, 'cb-input')}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={inputPlaceholder || (options[0] && options[0].title)}\n disabled={disabled}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={dataTestId ? `${dataTestId}-input` : undefined}\n />\n <div className=\"input-group-append cb-dropdown\">\n <button\n type=\"button\"\n className=\"btn cb-btn form-control\"\n ref={this.toggleButton}\n onClick={this.toggleMenu}\n onKeyDown={this.handleInputKeyDown}\n disabled={disabled}\n data-testid={dataTestId ? `${dataTestId}-btn` : undefined}\n >\n <FontAwesomeIcon icon={vsTriangleDown} />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('combobox interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default ComboBox;\n"],"file":"ComboBox.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomTimeSelect.d.ts","sourceRoot":"","sources":["../src/CustomTimeSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAmB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKnE,OAAO,yBAAyB,CAAC;AACjC,OAAO,uCAAuC,CAAC;AAI/C,aAAK,yBAAyB;IAC5B,EAAE,OAAO;IACT,IAAI,SAAS;CACd;AAED,aAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IAEnB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;IAExC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CustomTimeSelect.d.ts","sourceRoot":"","sources":["../src/CustomTimeSelect.tsx"],"names":[],"mappings":"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"}
|
package/dist/CustomTimeSelect.js
CHANGED
|
@@ -518,7 +518,8 @@ class CustomTimeSelect extends Component {
|
|
|
518
518
|
var {
|
|
519
519
|
disabled,
|
|
520
520
|
invalid,
|
|
521
|
-
value
|
|
521
|
+
value,
|
|
522
|
+
'data-testid': dataTestId
|
|
522
523
|
} = this.props;
|
|
523
524
|
var {
|
|
524
525
|
menuIsOpen
|
|
@@ -536,7 +537,8 @@ class CustomTimeSelect extends Component {
|
|
|
536
537
|
}, popperOptions);
|
|
537
538
|
return /*#__PURE__*/React.createElement("div", {
|
|
538
539
|
className: "input-group cs-container context-menu",
|
|
539
|
-
ref: this.csContainer
|
|
540
|
+
ref: this.csContainer,
|
|
541
|
+
"data-testid": dataTestId
|
|
540
542
|
}, /*#__PURE__*/React.createElement("div", {
|
|
541
543
|
className: classNames('input-group-append cs-dropdown', {
|
|
542
544
|
'cs-dropdown-invalid': invalid
|
|
@@ -589,7 +591,8 @@ _defineProperty(CustomTimeSelect, "defaultProps", {
|
|
|
589
591
|
placeholder: 'Select a time',
|
|
590
592
|
valueToTime: value => value === null ? 0 : Math.round(value / 1000),
|
|
591
593
|
timeToValue: time => time * 1000,
|
|
592
|
-
invalid: false
|
|
594
|
+
invalid: false,
|
|
595
|
+
'data-testid': undefined
|
|
593
596
|
});
|
|
594
597
|
|
|
595
598
|
export default CustomTimeSelect;
|