@deephaven/components 0.82.0 → 0.82.1-alpha-combobox.15

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.
Files changed (94) hide show
  1. package/dist/SearchableCombobox.d.ts +2 -2
  2. package/dist/SearchableCombobox.d.ts.map +1 -1
  3. package/dist/SearchableCombobox.js.map +1 -1
  4. package/dist/index.d.ts +0 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +0 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/spectrum/View.d.ts +17 -3
  9. package/dist/spectrum/View.d.ts.map +1 -1
  10. package/dist/spectrum/View.js +42 -7
  11. package/dist/spectrum/View.js.map +1 -1
  12. package/dist/spectrum/collections.d.ts +1 -1
  13. package/dist/spectrum/collections.d.ts.map +1 -1
  14. package/dist/spectrum/collections.js +10 -3
  15. package/dist/spectrum/collections.js.map +1 -1
  16. package/dist/spectrum/comboBox/ComboBox.d.ts +7 -0
  17. package/dist/spectrum/comboBox/ComboBox.d.ts.map +1 -0
  18. package/dist/spectrum/comboBox/ComboBox.js +41 -0
  19. package/dist/spectrum/comboBox/ComboBox.js.map +1 -0
  20. package/dist/spectrum/comboBox/ComboBoxNormalized.d.ts +15 -0
  21. package/dist/spectrum/comboBox/ComboBoxNormalized.d.ts.map +1 -0
  22. package/dist/spectrum/comboBox/ComboBoxNormalized.js +42 -0
  23. package/dist/spectrum/comboBox/ComboBoxNormalized.js.map +1 -0
  24. package/dist/spectrum/comboBox/index.d.ts +3 -0
  25. package/dist/spectrum/comboBox/index.d.ts.map +1 -0
  26. package/dist/spectrum/comboBox/index.js +3 -0
  27. package/dist/spectrum/comboBox/index.js.map +1 -0
  28. package/dist/spectrum/index.d.ts +1 -1
  29. package/dist/spectrum/index.d.ts.map +1 -1
  30. package/dist/spectrum/index.js +1 -1
  31. package/dist/spectrum/index.js.map +1 -1
  32. package/dist/spectrum/listView/ListViewWrapper.js.map +1 -1
  33. package/dist/spectrum/picker/Picker.d.ts +2 -25
  34. package/dist/spectrum/picker/Picker.d.ts.map +1 -1
  35. package/dist/spectrum/picker/Picker.js +20 -68
  36. package/dist/spectrum/picker/Picker.js.map +1 -1
  37. package/dist/spectrum/picker/PickerNormalized.d.ts +2 -9
  38. package/dist/spectrum/picker/PickerNormalized.d.ts.map +1 -1
  39. package/dist/spectrum/picker/PickerNormalized.js +13 -80
  40. package/dist/spectrum/picker/PickerNormalized.js.map +1 -1
  41. package/dist/spectrum/picker/PickerProps.d.ts +64 -0
  42. package/dist/spectrum/picker/PickerProps.d.ts.map +1 -0
  43. package/dist/spectrum/picker/PickerProps.js +2 -0
  44. package/dist/spectrum/picker/PickerProps.js.map +1 -0
  45. package/dist/spectrum/picker/index.d.ts +4 -0
  46. package/dist/spectrum/picker/index.d.ts.map +1 -1
  47. package/dist/spectrum/picker/index.js +4 -0
  48. package/dist/spectrum/picker/index.js.map +1 -1
  49. package/dist/spectrum/picker/usePickerItemScale.d.ts +9 -0
  50. package/dist/spectrum/picker/usePickerItemScale.d.ts.map +1 -0
  51. package/dist/spectrum/picker/usePickerItemScale.js +17 -0
  52. package/dist/spectrum/picker/usePickerItemScale.js.map +1 -0
  53. package/dist/spectrum/picker/usePickerNormalizedProps.d.ts +27 -0
  54. package/dist/spectrum/picker/usePickerNormalizedProps.d.ts.map +1 -0
  55. package/dist/spectrum/picker/usePickerNormalizedProps.js +101 -0
  56. package/dist/spectrum/picker/usePickerNormalizedProps.js.map +1 -0
  57. package/dist/spectrum/picker/usePickerProps.d.ts +28 -0
  58. package/dist/spectrum/picker/usePickerProps.d.ts.map +1 -0
  59. package/dist/spectrum/picker/usePickerProps.js +75 -0
  60. package/dist/spectrum/picker/usePickerProps.js.map +1 -0
  61. package/dist/spectrum/picker/usePickerScrollOnOpen.d.ts +3 -3
  62. package/dist/spectrum/picker/usePickerScrollOnOpen.d.ts.map +1 -1
  63. package/dist/spectrum/picker/usePickerScrollOnOpen.js.map +1 -1
  64. package/dist/spectrum/utils/index.d.ts +2 -0
  65. package/dist/spectrum/utils/index.d.ts.map +1 -1
  66. package/dist/spectrum/utils/index.js +2 -0
  67. package/dist/spectrum/utils/index.js.map +1 -1
  68. package/dist/spectrum/utils/itemUtils.d.ts +7 -2
  69. package/dist/spectrum/utils/itemUtils.d.ts.map +1 -1
  70. package/dist/spectrum/utils/itemUtils.js +13 -0
  71. package/dist/spectrum/utils/itemUtils.js.map +1 -1
  72. package/dist/spectrum/utils/itemWrapperUtils.d.ts.map +1 -1
  73. package/dist/spectrum/utils/itemWrapperUtils.js +2 -2
  74. package/dist/spectrum/utils/itemWrapperUtils.js.map +1 -1
  75. package/dist/spectrum/utils/useOnChangeTrackUncontrolled.d.ts +19 -0
  76. package/dist/spectrum/utils/useOnChangeTrackUncontrolled.d.ts.map +1 -0
  77. package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js +31 -0
  78. package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js.map +1 -0
  79. package/dist/spectrum/utils/useStaticItemInitialScrollPosition.d.ts +10 -0
  80. package/dist/spectrum/utils/useStaticItemInitialScrollPosition.d.ts.map +1 -0
  81. package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js +27 -0
  82. package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js.map +1 -0
  83. package/dist/spectrum/utils/useStringifiedSelection.d.ts +2 -2
  84. package/dist/spectrum/utils/useStringifiedSelection.d.ts.map +1 -1
  85. package/dist/spectrum/utils/useStringifiedSelection.js.map +1 -1
  86. package/package.json +7 -7
  87. package/dist/ComboBox.d.ts +0 -120
  88. package/dist/ComboBox.d.ts.map +0 -1
  89. package/dist/ComboBox.js +0 -497
  90. package/dist/ComboBox.js.map +0 -1
  91. package/dist/spectrum/pickers.d.ts +0 -2
  92. package/dist/spectrum/pickers.d.ts.map +0 -1
  93. package/dist/spectrum/pickers.js +0 -2
  94. package/dist/spectrum/pickers.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOnChangeTrackUncontrolled.js","names":["useCallback","useState","useOnChangeTrackUncontrolled","_ref","defaultSelectedKey","selectedKey","onChange","onChangeHandler","isUncontrolled","undefined","uncontrolledSelectedKey","setUncontrolledSelectedKey","onChangeMaybeUncontrolled","key","selectedKeyMaybeUncontrolled"],"sources":["../../../src/spectrum/utils/useOnChangeTrackUncontrolled.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { ItemKey } from './itemUtils';\n\nexport interface UseOnChangeTrackUncontrolledOptions {\n defaultSelectedKey?: ItemKey;\n selectedKey?: ItemKey | null;\n onChange?: (key: ItemKey | null) => void;\n}\n\nexport interface UseOnChangeTrackUncontrolledResult {\n selectedKeyMaybeUncontrolled?: ItemKey | null;\n onChangeMaybeUncontrolled: (key: ItemKey | null) => void;\n}\n\n/**\n * Returns a selectedKey and onChange handler that can manage selection state\n * for both controlled and uncontrolled components. Useful for cases where a\n * component needs to always track its selection state regardless of its\n * controlled / uncontrolled status.\n */\nexport function useOnChangeTrackUncontrolled({\n defaultSelectedKey,\n selectedKey,\n onChange: onChangeHandler,\n}: UseOnChangeTrackUncontrolledOptions): UseOnChangeTrackUncontrolledResult {\n // `null` is a valid value for `selectedKey` in controlled mode, so we check\n // for explicit `undefined` to identify uncontrolled mode.\n const isUncontrolled = selectedKey === undefined;\n const [uncontrolledSelectedKey, setUncontrolledSelectedKey] = useState<\n ItemKey | null | undefined\n >(defaultSelectedKey);\n\n const onChangeMaybeUncontrolled = useCallback(\n (key: ItemKey | null): void => {\n // If our component is uncontrolled, track the selected key internally\n if (isUncontrolled) {\n setUncontrolledSelectedKey(key);\n }\n\n onChangeHandler?.(key);\n },\n [isUncontrolled, onChangeHandler]\n );\n\n return {\n selectedKeyMaybeUncontrolled: isUncontrolled\n ? uncontrolledSelectedKey\n : selectedKey,\n onChangeMaybeUncontrolled,\n };\n}\n\nexport default useOnChangeTrackUncontrolled;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AAc7C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,4BAA4BA,CAAAC,IAAA,EAIgC;EAAA,IAJ/B;IAC3CC,kBAAkB;IAClBC,WAAW;IACXC,QAAQ,EAAEC;EACyB,CAAC,GAAAJ,IAAA;EACpC;EACA;EACA,IAAMK,cAAc,GAAGH,WAAW,KAAKI,SAAS;EAChD,IAAM,CAACC,uBAAuB,EAAEC,0BAA0B,CAAC,GAAGV,QAAQ,CAEpEG,kBAAkB,CAAC;EAErB,IAAMQ,yBAAyB,GAAGZ,WAAW,CAC1Ca,GAAmB,IAAW;IAC7B;IACA,IAAIL,cAAc,EAAE;MAClBG,0BAA0B,CAACE,GAAG,CAAC;IACjC;IAEAN,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAGM,GAAG,CAAC;EACxB,CAAC,EACD,CAACL,cAAc,EAAED,eAAe,CAClC,CAAC;EAED,OAAO;IACLO,4BAA4B,EAAEN,cAAc,GACxCE,uBAAuB,GACvBL,WAAW;IACfO;EACF,CAAC;AACH;AAEA,eAAeV,4BAA4B"}
@@ -0,0 +1,10 @@
1
+ import { ItemElement, ItemKey, SectionElement } from './itemUtils';
2
+ export interface UseStaticItemInitialScrollPositionOptions {
3
+ itemHeight: number;
4
+ items: (ItemElement<unknown> | SectionElement<unknown>)[];
5
+ selectedKey?: ItemKey | null;
6
+ topOffset: number;
7
+ }
8
+ export declare function useStaticItemInitialScrollPosition({ itemHeight, selectedKey, topOffset, items, }: UseStaticItemInitialScrollPositionOptions): () => Promise<number | null>;
9
+ export default useStaticItemInitialScrollPosition;
10
+ //# sourceMappingURL=useStaticItemInitialScrollPosition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStaticItemInitialScrollPosition.d.ts","sourceRoot":"","sources":["../../../src/spectrum/utils/useStaticItemInitialScrollPosition.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,WAAW,EACX,OAAO,EACP,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,yCAAyC;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IAC1D,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,kCAAkC,CAAC,EACjD,UAAU,EACV,WAAW,EACX,SAAS,EACT,KAAK,GACN,EAAE,yCAAyC,GAAG,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0B1E;AAED,eAAe,kCAAkC,CAAC"}
@@ -0,0 +1,27 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
3
+ import { useCallback, useMemo } from 'react';
4
+ import { getPositionOfSelectedItemElement, isItemElementWithDescription, isSectionElement } from "./itemUtils.js";
5
+ export function useStaticItemInitialScrollPosition(_ref) {
6
+ var {
7
+ itemHeight,
8
+ selectedKey,
9
+ topOffset,
10
+ items
11
+ } = _ref;
12
+ // Item descriptions and Section elements introduce variable item heights.
13
+ // This throws off scroll position calculations, so we disable auto scrolling
14
+ // if either of these are found.
15
+ var disableScrollOnOpen = useMemo(() => items.some(item => isSectionElement(item) || isItemElementWithDescription(item)), [items]);
16
+ var getInitialScrollPosition = useCallback( /*#__PURE__*/_asyncToGenerator(function* () {
17
+ return disableScrollOnOpen ? topOffset : getPositionOfSelectedItemElement({
18
+ items,
19
+ itemHeight,
20
+ selectedKey,
21
+ topOffset
22
+ });
23
+ }), [disableScrollOnOpen, itemHeight, items, selectedKey, topOffset]);
24
+ return getInitialScrollPosition;
25
+ }
26
+ export default useStaticItemInitialScrollPosition;
27
+ //# sourceMappingURL=useStaticItemInitialScrollPosition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStaticItemInitialScrollPosition.js","names":["useCallback","useMemo","getPositionOfSelectedItemElement","isItemElementWithDescription","isSectionElement","useStaticItemInitialScrollPosition","_ref","itemHeight","selectedKey","topOffset","items","disableScrollOnOpen","some","item","getInitialScrollPosition","_asyncToGenerator"],"sources":["../../../src/spectrum/utils/useStaticItemInitialScrollPosition.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport {\n getPositionOfSelectedItemElement,\n isItemElementWithDescription,\n isSectionElement,\n ItemElement,\n ItemKey,\n SectionElement,\n} from './itemUtils';\n\nexport interface UseStaticItemInitialScrollPositionOptions {\n itemHeight: number;\n items: (ItemElement<unknown> | SectionElement<unknown>)[];\n selectedKey?: ItemKey | null;\n topOffset: number;\n}\n\nexport function useStaticItemInitialScrollPosition({\n itemHeight,\n selectedKey,\n topOffset,\n items,\n}: UseStaticItemInitialScrollPositionOptions): () => Promise<number | null> {\n // Item descriptions and Section elements introduce variable item heights.\n // This throws off scroll position calculations, so we disable auto scrolling\n // if either of these are found.\n const disableScrollOnOpen = useMemo(\n () =>\n items.some(\n item => isSectionElement(item) || isItemElementWithDescription(item)\n ),\n [items]\n );\n\n const getInitialScrollPosition = useCallback(\n async () =>\n disableScrollOnOpen\n ? topOffset\n : getPositionOfSelectedItemElement({\n items,\n itemHeight,\n selectedKey,\n topOffset,\n }),\n [disableScrollOnOpen, itemHeight, items, selectedKey, topOffset]\n );\n\n return getInitialScrollPosition;\n}\n\nexport default useStaticItemInitialScrollPosition;\n"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAAC,SAE3CC,gCAAgC,EAChCC,4BAA4B,EAC5BC,gBAAgB;AAalB,OAAO,SAASC,kCAAkCA,CAAAC,IAAA,EAK0B;EAAA,IALzB;IACjDC,UAAU;IACVC,WAAW;IACXC,SAAS;IACTC;EACyC,CAAC,GAAAJ,IAAA;EAC1C;EACA;EACA;EACA,IAAMK,mBAAmB,GAAGV,OAAO,CACjC,MACES,KAAK,CAACE,IAAI,CACRC,IAAI,IAAIT,gBAAgB,CAACS,IAAI,CAAC,IAAIV,4BAA4B,CAACU,IAAI,CACrE,CAAC,EACH,CAACH,KAAK,CACR,CAAC;EAED,IAAMI,wBAAwB,GAAGd,WAAW,eAAAe,iBAAA,CAC1C;IAAA,OACEJ,mBAAmB,GACfF,SAAS,GACTP,gCAAgC,CAAC;MAC/BQ,KAAK;MACLH,UAAU;MACVC,WAAW;MACXC;IACF,CAAC,CAAC;EAAA,IACR,CAACE,mBAAmB,EAAEJ,UAAU,EAAEG,KAAK,EAAEF,WAAW,EAAEC,SAAS,CACjE,CAAC;EAED,OAAOK,wBAAwB;AACjC;AAEA,eAAeT,kCAAkC"}
@@ -5,13 +5,13 @@ export interface UseStringifiedSelectionOptions {
5
5
  selectedKey: ItemKey | null | undefined;
6
6
  defaultSelectedKey: ItemKey | undefined;
7
7
  disabledKeys: Iterable<ItemKey> | undefined;
8
- onChange: ((key: ItemKey) => void) | undefined;
8
+ onChange: ((key: ItemKey | null) => void) | undefined;
9
9
  }
10
10
  export interface UseStringifiedSelectionResult {
11
11
  defaultSelectedStringKey?: Key;
12
12
  selectedStringKey?: Key | null;
13
13
  disabledStringKeys?: Set<Key>;
14
- onStringSelectionChange: (key: Key) => void;
14
+ onStringSelectionChange: (key: Key | null) => void;
15
15
  }
16
16
  /**
17
17
  * Spectrum collection components treat keys as strings if the `key` prop is
@@ -1 +1 @@
1
- {"version":3,"file":"useStringifiedSelection.d.ts","sourceRoot":"","sources":["../../../src/spectrum/utils/useStringifiedSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAwB,MAAM,OAAO,CAAC;AAClD,OAAO,EAEL,OAAO,EAEP,cAAc,EACd,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,8BAA8B;IAC7C,eAAe,EAAE,CAAC,cAAc,GAAG,iBAAiB,CAAC,EAAE,CAAC;IACxD,WAAW,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,kBAAkB,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAC5C,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,6BAA6B;IAC5C,wBAAwB,CAAC,EAAE,GAAG,CAAC;IAC/B,iBAAiB,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC/B,kBAAkB,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,uBAAuB,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CAC7C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,QAAQ,GACT,EAAE,8BAA8B,GAAG,6BAA6B,CA6ChE;AAED,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"useStringifiedSelection.d.ts","sourceRoot":"","sources":["../../../src/spectrum/utils/useStringifiedSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAwB,MAAM,OAAO,CAAC;AAClD,OAAO,EAEL,OAAO,EAEP,cAAc,EACd,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,8BAA8B;IAC7C,eAAe,EAAE,CAAC,cAAc,GAAG,iBAAiB,CAAC,EAAE,CAAC;IACxD,WAAW,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,kBAAkB,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAC5C,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACvD;AAED,MAAM,WAAW,6BAA6B;IAC5C,wBAAwB,CAAC,EAAE,GAAG,CAAC;IAC/B,iBAAiB,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAC/B,kBAAkB,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,uBAAuB,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,KAAK,IAAI,CAAC;CACpD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,QAAQ,GACT,EAAE,8BAA8B,GAAG,6BAA6B,CA6ChE;AAED,eAAe,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useStringifiedSelection.js","names":["useCallback","useMemo","getItemKey","itemSelectionToStringSet","useStringifiedSelection","_ref","normalizedItems","defaultSelectedKey","selectedKey","disabledKeys","onChange","selectedStringKey","String","defaultSelectedStringKey","disabledStringKeys","onStringSelectionChange","key","_getItemKey","selectedItem","find","item","actualKey"],"sources":["../../../src/spectrum/utils/useStringifiedSelection.ts"],"sourcesContent":["import { Key, useCallback, useMemo } from 'react';\nimport {\n getItemKey,\n ItemKey,\n itemSelectionToStringSet,\n NormalizedItem,\n NormalizedSection,\n} from './itemUtils';\n\nexport interface UseStringifiedSelectionOptions {\n normalizedItems: (NormalizedItem | NormalizedSection)[];\n selectedKey: ItemKey | null | undefined;\n defaultSelectedKey: ItemKey | undefined;\n disabledKeys: Iterable<ItemKey> | undefined;\n onChange: ((key: ItemKey) => void) | undefined;\n}\n\nexport interface UseStringifiedSelectionResult {\n defaultSelectedStringKey?: Key;\n selectedStringKey?: Key | null;\n disabledStringKeys?: Set<Key>;\n onStringSelectionChange: (key: Key) => void;\n}\n\n/**\n * Spectrum collection components treat keys as strings if the `key` prop is\n * explicitly set on `Item` elements. Since we do this in `useRenderNormalizedItem`,\n * we need to ensure that keys are strings in order for selection to work. We\n * then need to convert back to the original key types in the onChange handler.\n * This hook encapsulates converting to and from strings so that keys can match\n * the original key type.\n * @param normalizedItems The normalized items to select from.\n * @param selectedKey The currently selected key in the collection.\n * @param defaultSelectedKey The initial selected key in the collection.\n * @param disabledKeys The currently disabled keys in the collection.\n * @param onChange Handler that is called when the selection changes.\n * @returns UseStringifiedSelectionResult with stringified key sets and string\n * key selection change handler.\n */\nexport function useStringifiedSelection({\n normalizedItems,\n defaultSelectedKey,\n selectedKey,\n disabledKeys,\n onChange,\n}: UseStringifiedSelectionOptions): UseStringifiedSelectionResult {\n const selectedStringKey = useMemo(\n () => (selectedKey == null ? selectedKey : String(selectedKey)),\n [selectedKey]\n );\n\n const defaultSelectedStringKey = useMemo(\n () =>\n defaultSelectedKey == null\n ? defaultSelectedKey\n : String(defaultSelectedKey),\n [defaultSelectedKey]\n );\n\n const disabledStringKeys = useMemo(\n () => itemSelectionToStringSet(disabledKeys),\n [disabledKeys]\n );\n\n const onStringSelectionChange = useCallback(\n (key: Key): void => {\n if (onChange == null) {\n return;\n }\n\n // The `key` arg will always be a string due to us setting the `Item` key\n // prop in `renderItem`. We need to find the matching item to determine\n // the actual key.\n const selectedItem = normalizedItems.find(\n item => String(getItemKey(item)) === key\n );\n\n const actualKey = getItemKey(selectedItem) ?? key;\n\n onChange(actualKey);\n },\n [normalizedItems, onChange]\n );\n\n return {\n selectedStringKey,\n defaultSelectedStringKey,\n disabledStringKeys,\n onStringSelectionChange,\n };\n}\n\nexport default useStringifiedSelection;\n"],"mappings":"AAAA,SAAcA,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAAC,SAEhDC,UAAU,EAEVC,wBAAwB;AAoB1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CAAAC,IAAA,EAM2B;EAAA,IAN1B;IACtCC,eAAe;IACfC,kBAAkB;IAClBC,WAAW;IACXC,YAAY;IACZC;EAC8B,CAAC,GAAAL,IAAA;EAC/B,IAAMM,iBAAiB,GAAGV,OAAO,CAC/B,MAAOO,WAAW,IAAI,IAAI,GAAGA,WAAW,GAAGI,MAAM,CAACJ,WAAW,CAAE,EAC/D,CAACA,WAAW,CACd,CAAC;EAED,IAAMK,wBAAwB,GAAGZ,OAAO,CACtC,MACEM,kBAAkB,IAAI,IAAI,GACtBA,kBAAkB,GAClBK,MAAM,CAACL,kBAAkB,CAAC,EAChC,CAACA,kBAAkB,CACrB,CAAC;EAED,IAAMO,kBAAkB,GAAGb,OAAO,CAChC,MAAME,wBAAwB,CAACM,YAAY,CAAC,EAC5C,CAACA,YAAY,CACf,CAAC;EAED,IAAMM,uBAAuB,GAAGf,WAAW,CACxCgB,GAAQ,IAAW;IAAA,IAAAC,WAAA;IAClB,IAAIP,QAAQ,IAAI,IAAI,EAAE;MACpB;IACF;;IAEA;IACA;IACA;IACA,IAAMQ,YAAY,GAAGZ,eAAe,CAACa,IAAI,CACvCC,IAAI,IAAIR,MAAM,CAACV,UAAU,CAACkB,IAAI,CAAC,CAAC,KAAKJ,GACvC,CAAC;IAED,IAAMK,SAAS,IAAAJ,WAAA,GAAGf,UAAU,CAACgB,YAAY,CAAC,cAAAD,WAAA,cAAAA,WAAA,GAAID,GAAG;IAEjDN,QAAQ,CAACW,SAAS,CAAC;EACrB,CAAC,EACD,CAACf,eAAe,EAAEI,QAAQ,CAC5B,CAAC;EAED,OAAO;IACLC,iBAAiB;IACjBE,wBAAwB;IACxBC,kBAAkB;IAClBC;EACF,CAAC;AACH;AAEA,eAAeX,uBAAuB"}
1
+ {"version":3,"file":"useStringifiedSelection.js","names":["useCallback","useMemo","getItemKey","itemSelectionToStringSet","useStringifiedSelection","_ref","normalizedItems","defaultSelectedKey","selectedKey","disabledKeys","onChange","selectedStringKey","String","defaultSelectedStringKey","disabledStringKeys","onStringSelectionChange","key","_getItemKey","selectedItem","find","item","actualKey"],"sources":["../../../src/spectrum/utils/useStringifiedSelection.ts"],"sourcesContent":["import { Key, useCallback, useMemo } from 'react';\nimport {\n getItemKey,\n ItemKey,\n itemSelectionToStringSet,\n NormalizedItem,\n NormalizedSection,\n} from './itemUtils';\n\nexport interface UseStringifiedSelectionOptions {\n normalizedItems: (NormalizedItem | NormalizedSection)[];\n selectedKey: ItemKey | null | undefined;\n defaultSelectedKey: ItemKey | undefined;\n disabledKeys: Iterable<ItemKey> | undefined;\n onChange: ((key: ItemKey | null) => void) | undefined;\n}\n\nexport interface UseStringifiedSelectionResult {\n defaultSelectedStringKey?: Key;\n selectedStringKey?: Key | null;\n disabledStringKeys?: Set<Key>;\n onStringSelectionChange: (key: Key | null) => void;\n}\n\n/**\n * Spectrum collection components treat keys as strings if the `key` prop is\n * explicitly set on `Item` elements. Since we do this in `useRenderNormalizedItem`,\n * we need to ensure that keys are strings in order for selection to work. We\n * then need to convert back to the original key types in the onChange handler.\n * This hook encapsulates converting to and from strings so that keys can match\n * the original key type.\n * @param normalizedItems The normalized items to select from.\n * @param selectedKey The currently selected key in the collection.\n * @param defaultSelectedKey The initial selected key in the collection.\n * @param disabledKeys The currently disabled keys in the collection.\n * @param onChange Handler that is called when the selection changes.\n * @returns UseStringifiedSelectionResult with stringified key sets and string\n * key selection change handler.\n */\nexport function useStringifiedSelection({\n normalizedItems,\n defaultSelectedKey,\n selectedKey,\n disabledKeys,\n onChange,\n}: UseStringifiedSelectionOptions): UseStringifiedSelectionResult {\n const selectedStringKey = useMemo(\n () => (selectedKey == null ? selectedKey : String(selectedKey)),\n [selectedKey]\n );\n\n const defaultSelectedStringKey = useMemo(\n () =>\n defaultSelectedKey == null\n ? defaultSelectedKey\n : String(defaultSelectedKey),\n [defaultSelectedKey]\n );\n\n const disabledStringKeys = useMemo(\n () => itemSelectionToStringSet(disabledKeys),\n [disabledKeys]\n );\n\n const onStringSelectionChange = useCallback(\n (key: Key | null): void => {\n if (onChange == null) {\n return;\n }\n\n // The `key` arg will always be a string due to us setting the `Item` key\n // prop in `renderItem`. We need to find the matching item to determine\n // the actual key.\n const selectedItem = normalizedItems.find(\n item => String(getItemKey(item)) === key\n );\n\n const actualKey = getItemKey(selectedItem) ?? key;\n\n onChange(actualKey);\n },\n [normalizedItems, onChange]\n );\n\n return {\n selectedStringKey,\n defaultSelectedStringKey,\n disabledStringKeys,\n onStringSelectionChange,\n };\n}\n\nexport default useStringifiedSelection;\n"],"mappings":"AAAA,SAAcA,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAAC,SAEhDC,UAAU,EAEVC,wBAAwB;AAoB1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CAAAC,IAAA,EAM2B;EAAA,IAN1B;IACtCC,eAAe;IACfC,kBAAkB;IAClBC,WAAW;IACXC,YAAY;IACZC;EAC8B,CAAC,GAAAL,IAAA;EAC/B,IAAMM,iBAAiB,GAAGV,OAAO,CAC/B,MAAOO,WAAW,IAAI,IAAI,GAAGA,WAAW,GAAGI,MAAM,CAACJ,WAAW,CAAE,EAC/D,CAACA,WAAW,CACd,CAAC;EAED,IAAMK,wBAAwB,GAAGZ,OAAO,CACtC,MACEM,kBAAkB,IAAI,IAAI,GACtBA,kBAAkB,GAClBK,MAAM,CAACL,kBAAkB,CAAC,EAChC,CAACA,kBAAkB,CACrB,CAAC;EAED,IAAMO,kBAAkB,GAAGb,OAAO,CAChC,MAAME,wBAAwB,CAACM,YAAY,CAAC,EAC5C,CAACA,YAAY,CACf,CAAC;EAED,IAAMM,uBAAuB,GAAGf,WAAW,CACxCgB,GAAe,IAAW;IAAA,IAAAC,WAAA;IACzB,IAAIP,QAAQ,IAAI,IAAI,EAAE;MACpB;IACF;;IAEA;IACA;IACA;IACA,IAAMQ,YAAY,GAAGZ,eAAe,CAACa,IAAI,CACvCC,IAAI,IAAIR,MAAM,CAACV,UAAU,CAACkB,IAAI,CAAC,CAAC,KAAKJ,GACvC,CAAC;IAED,IAAMK,SAAS,IAAAJ,WAAA,GAAGf,UAAU,CAACgB,YAAY,CAAC,cAAAD,WAAA,cAAAA,WAAA,GAAID,GAAG;IAEjDN,QAAQ,CAACW,SAAS,CAAC;EACrB,CAAC,EACD,CAACf,eAAe,EAAEI,QAAQ,CAC5B,CAAC;EAED,OAAO;IACLC,iBAAiB;IACjBE,wBAAwB;IACxBC,kBAAkB;IAClBC;EACF,CAAC;AACH;AAEA,eAAeX,uBAAuB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/components",
3
- "version": "0.82.0",
3
+ "version": "0.82.1-alpha-combobox.15+516eef0b",
4
4
  "description": "Deephaven React component library",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -25,10 +25,10 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@adobe/react-spectrum": "3.35.1",
28
- "@deephaven/icons": "^0.82.0",
29
- "@deephaven/log": "^0.82.0",
30
- "@deephaven/react-hooks": "^0.82.0",
31
- "@deephaven/utils": "^0.82.0",
28
+ "@deephaven/icons": "^0.82.1-alpha-combobox.15+516eef0b",
29
+ "@deephaven/log": "^0.82.1-alpha-combobox.15+516eef0b",
30
+ "@deephaven/react-hooks": "^0.82.1-alpha-combobox.15+516eef0b",
31
+ "@deephaven/utils": "^0.82.1-alpha-combobox.15+516eef0b",
32
32
  "@fortawesome/fontawesome-svg-core": "^6.2.1",
33
33
  "@fortawesome/react-fontawesome": "^0.2.0",
34
34
  "@react-spectrum/theme-default": "^3.5.1",
@@ -56,7 +56,7 @@
56
56
  "react-dom": ">=16.8.0"
57
57
  },
58
58
  "devDependencies": {
59
- "@deephaven/mocks": "^0.82.0"
59
+ "@deephaven/mocks": "^0.82.1-alpha-combobox.15+516eef0b"
60
60
  },
61
61
  "files": [
62
62
  "dist",
@@ -70,5 +70,5 @@
70
70
  "publishConfig": {
71
71
  "access": "public"
72
72
  },
73
- "gitHead": "c804b1518d77f908fdc5525197fd8c87c3e27b10"
73
+ "gitHead": "516eef0bc7d23cc1adc0997ca4f48399b2d9836f"
74
74
  }
@@ -1,120 +0,0 @@
1
- /**
2
- * Combobox that combines a input box with a searchable dropdown menu
3
- *
4
- * props:
5
- * @param {array} options :[{
6
- * title: 'option title for display',
7
- * value: 'option value' //option value
8
- * }]
9
- * @param {string} inputPlaceholder place holder for the input box
10
- * @param {string} searchPlaceholder place holder for the search box in drop down search box
11
- * @param {boolean} disabled disable both input & drop down
12
- *
13
- *
14
- */
15
- import React, { Component } from 'react';
16
- import PropTypes from 'prop-types';
17
- import memoize from 'memoizee';
18
- import { PopperOptions } from 'popper.js';
19
- import SearchInput from './SearchInput';
20
- import { Popper } from './popper';
21
- import './ComboBox.scss';
22
- interface ComboBoxOption {
23
- title: string;
24
- value: string;
25
- }
26
- interface ComboBoxProps {
27
- options: ComboBoxOption[];
28
- popperOptions: PopperOptions;
29
- onChange: (value: string) => void;
30
- inputPlaceholder: string;
31
- searchPlaceholder: string;
32
- disabled: boolean;
33
- className: string;
34
- defaultValue: string;
35
- spellCheck: boolean;
36
- onEnter: () => void;
37
- 'data-testid'?: string;
38
- }
39
- interface ComboBoxState {
40
- value: string;
41
- filter: string;
42
- filteredOptions: ComboBoxOption[];
43
- keyboardOptionIndex: number;
44
- menuIsOpen: boolean;
45
- inputWidth: number;
46
- }
47
- declare enum MENU_NAVIGATION_DIRECTION {
48
- UP = "UP",
49
- DOWN = "DOWN"
50
- }
51
- declare class ComboBox extends Component<ComboBoxProps, ComboBoxState> {
52
- static MENU_NAVIGATION_DIRECTION: typeof MENU_NAVIGATION_DIRECTION;
53
- static DROP_DOWN_MENU_HEIGHT: number;
54
- static propTypes: {
55
- options: PropTypes.Validator<(PropTypes.InferProps<{
56
- title: PropTypes.Validator<string>;
57
- value: PropTypes.Validator<string>;
58
- }> | null | undefined)[]>;
59
- popperOptions: PropTypes.Requireable<PropTypes.InferProps<{
60
- title: PropTypes.Validator<string>;
61
- value: PropTypes.Validator<string>;
62
- }>>;
63
- onChange: PropTypes.Requireable<(...args: any[]) => any>;
64
- inputPlaceholder: PropTypes.Requireable<string>;
65
- searchPlaceholder: PropTypes.Requireable<string>;
66
- disabled: PropTypes.Requireable<boolean>;
67
- className: PropTypes.Requireable<string>;
68
- defaultValue: PropTypes.Requireable<string>;
69
- spellCheck: PropTypes.Requireable<boolean>;
70
- onEnter: PropTypes.Requireable<(...args: any[]) => any>;
71
- 'data-testid': PropTypes.Requireable<string>;
72
- };
73
- static defaultProps: {
74
- onChange(): void;
75
- inputPlaceholder: string;
76
- searchPlaceholder: string;
77
- disabled: boolean;
78
- className: string;
79
- defaultValue: string;
80
- popperOptions: null;
81
- spellCheck: boolean;
82
- onEnter(): void;
83
- 'data-testid': undefined;
84
- };
85
- constructor(props: ComboBoxProps);
86
- componentDidUpdate(): void;
87
- popper: React.RefObject<Popper>;
88
- cbContainer: React.RefObject<HTMLDivElement>;
89
- toggleButton: React.RefObject<HTMLButtonElement>;
90
- menuContainer: React.RefObject<HTMLDivElement>;
91
- input: React.RefObject<HTMLInputElement>;
92
- searchInput: React.RefObject<SearchInput>;
93
- setInputWidth(): void;
94
- getCachedFilteredOptions: ((options: ComboBoxOption[], input: string) => ComboBoxOption[]) & memoize.Memoized<(options: ComboBoxOption[], input: string) => ComboBoxOption[]>;
95
- focus(): void;
96
- resetValue(): void;
97
- updateInputValue(value: string): void;
98
- handleResize(): void;
99
- handleMenuKeyDown(event: React.KeyboardEvent): void;
100
- handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void;
101
- handleInputKeyDown(event: React.KeyboardEvent): void;
102
- handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void;
103
- handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void;
104
- handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void;
105
- handleFilterChange(event: React.ChangeEvent<HTMLInputElement>): void;
106
- handleMenuBlur(event: React.FocusEvent): void;
107
- handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void;
108
- handleMenuOpened(): void;
109
- handleMenuExited(): void;
110
- toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void;
111
- openMenu(): void;
112
- closeMenu(focusInput?: boolean): void;
113
- updateKeyboardIndex(): void;
114
- scrollOptionIntoView(): void;
115
- renderMenuElement(): JSX.Element;
116
- renderOptions(): React.ReactNode;
117
- render(): JSX.Element;
118
- }
119
- export default ComboBox;
120
- //# sourceMappingURL=ComboBox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComboBox.d.ts","sourceRoot":"","sources":["../src/ComboBox.tsx"],"names":[],"mappings":"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"}