@deephaven/jsapi-components 1.20.0 → 1.21.1

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.
@@ -0,0 +1,14 @@
1
+ import { type MultiSelectNormalizedProps } from '@deephaven/components';
2
+ import { type dh as DhType } from '@deephaven/jsapi-types';
3
+ import { type Settings } from '@deephaven/jsapi-utils';
4
+ export type MultiPickerWithTableProps = Omit<MultiSelectNormalizedProps, 'normalizedItems' | 'showItemIcons' | 'selectedItemLabels'> & {
5
+ table: DhType.Table;
6
+ /** The column of values to use as item keys. Defaults to the first column. */
7
+ keyColumn?: string;
8
+ /** The column of values to display as primary text. Defaults to the `keyColumn` value. */
9
+ labelColumn?: string;
10
+ /** The column of values to map to icons. */
11
+ iconColumn?: string;
12
+ settings?: Settings;
13
+ };
14
+ //# sourceMappingURL=MultiPickerProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiPickerProps.d.ts","sourceRoot":"","sources":["../../src/spectrum/MultiPickerProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,0BAA0B,EAC1B,iBAAiB,GAAG,eAAe,GAAG,oBAAoB,CAC3D,GAAG;IACF,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;IAEpB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MultiPickerProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiPickerProps.js","names":[],"sources":["../../src/spectrum/MultiPickerProps.ts"],"sourcesContent":["import { type MultiSelectNormalizedProps } from '@deephaven/components';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport { type Settings } from '@deephaven/jsapi-utils';\n\nexport type MultiPickerWithTableProps = Omit<\n MultiSelectNormalizedProps,\n 'normalizedItems' | 'showItemIcons' | 'selectedItemLabels'\n> & {\n table: DhType.Table;\n\n /** The column of values to use as item keys. Defaults to the first column. */\n keyColumn?: string;\n\n /** The column of values to display as primary text. Defaults to the `keyColumn` value. */\n labelColumn?: string;\n\n /** The column of values to map to icons. */\n iconColumn?: string;\n\n settings?: Settings;\n};\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import { type MultiPickerWithTableProps } from './MultiPickerProps';
2
+ export type MultiSelectProps = MultiPickerWithTableProps;
3
+ export declare function MultiSelect(props: MultiSelectProps): JSX.Element;
4
+ export default MultiSelect;
5
+ //# sourceMappingURL=MultiSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelect.d.ts","sourceRoot":"","sources":["../../src/spectrum/MultiSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGpE,MAAM,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AAEzD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAuDhE;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,58 @@
1
+ var _excluded = ["onInputChange", "onOpenChange", "onSearchTextChange"];
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
6
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
8
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
9
+ import { MultiSelectNormalized } from '@deephaven/components';
10
+ import { useCallback, useRef } from 'react';
11
+ import { useMultiPickerProps } from "./utils/index.js";
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ export function MultiSelect(props) {
14
+ var _useMultiPickerProps = useMultiPickerProps(props),
15
+ {
16
+ onInputChange: onInputChangeInternal,
17
+ onOpenChange: onOpenChangeOriginal,
18
+ onSearchTextChange
19
+ } = _useMultiPickerProps,
20
+ restPickerProps = _objectWithoutProperties(_useMultiPickerProps, _excluded);
21
+ var isOpenRef = useRef(false);
22
+ var inputValueRef = useRef('');
23
+ var onInputChange = useCallback(value => {
24
+ onInputChangeInternal === null || onInputChangeInternal === void 0 || onInputChangeInternal(value);
25
+
26
+ // Only apply search text if MultiSelect is open.
27
+ if (isOpenRef.current) {
28
+ onSearchTextChange(value);
29
+ }
30
+ // When closed, clear the search text and store the value so we can
31
+ // re-apply it in `onOpenChange` if opened by user input.
32
+ else {
33
+ onSearchTextChange('');
34
+ inputValueRef.current = value;
35
+ }
36
+ }, [onInputChangeInternal, onSearchTextChange]);
37
+ var onOpenChange = useCallback(isOpen => {
38
+ onOpenChangeOriginal === null || onOpenChangeOriginal === void 0 || onOpenChangeOriginal(isOpen);
39
+
40
+ // Reset the search text when closed.
41
+ if (!isOpen) {
42
+ onSearchTextChange('');
43
+ }
44
+ // Restore search text when opened by user input.
45
+ else if (inputValueRef.current !== '') {
46
+ onSearchTextChange(inputValueRef.current);
47
+ }
48
+ isOpenRef.current = isOpen;
49
+ }, [onSearchTextChange, onOpenChangeOriginal]);
50
+ return /*#__PURE__*/_jsx(MultiSelectNormalized
51
+ // eslint-disable-next-line react/jsx-props-no-spreading
52
+ , _objectSpread(_objectSpread({}, restPickerProps), {}, {
53
+ onInputChange: onInputChange,
54
+ onOpenChange: onOpenChange
55
+ }));
56
+ }
57
+ export default MultiSelect;
58
+ //# sourceMappingURL=MultiSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelect.js","names":["MultiSelectNormalized","useCallback","useRef","useMultiPickerProps","jsx","_jsx","MultiSelect","props","_useMultiPickerProps","onInputChange","onInputChangeInternal","onOpenChange","onOpenChangeOriginal","onSearchTextChange","restPickerProps","_objectWithoutProperties","_excluded","isOpenRef","inputValueRef","value","current","isOpen","_objectSpread"],"sources":["../../src/spectrum/MultiSelect.tsx"],"sourcesContent":["import { MultiSelectNormalized } from '@deephaven/components';\nimport { useCallback, useRef } from 'react';\nimport { type MultiPickerWithTableProps } from './MultiPickerProps';\nimport { useMultiPickerProps } from './utils';\n\nexport type MultiSelectProps = MultiPickerWithTableProps;\n\nexport function MultiSelect(props: MultiSelectProps): JSX.Element {\n const {\n onInputChange: onInputChangeInternal,\n onOpenChange: onOpenChangeOriginal,\n onSearchTextChange,\n ...restPickerProps\n } = useMultiPickerProps(props);\n\n const isOpenRef = useRef(false);\n const inputValueRef = useRef('');\n\n const onInputChange = useCallback(\n (value: string) => {\n onInputChangeInternal?.(value);\n\n // Only apply search text if MultiSelect is open.\n if (isOpenRef.current) {\n onSearchTextChange(value);\n }\n // When closed, clear the search text and store the value so we can\n // re-apply it in `onOpenChange` if opened by user input.\n else {\n onSearchTextChange('');\n inputValueRef.current = value;\n }\n },\n [onInputChangeInternal, onSearchTextChange]\n );\n\n const onOpenChange = useCallback(\n (isOpen: boolean) => {\n onOpenChangeOriginal?.(isOpen);\n\n // Reset the search text when closed.\n if (!isOpen) {\n onSearchTextChange('');\n }\n // Restore search text when opened by user input.\n else if (inputValueRef.current !== '') {\n onSearchTextChange(inputValueRef.current);\n }\n\n isOpenRef.current = isOpen;\n },\n [onSearchTextChange, onOpenChangeOriginal]\n );\n\n return (\n <MultiSelectNormalized\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...restPickerProps}\n onInputChange={onInputChange}\n onOpenChange={onOpenChange}\n />\n );\n}\n\nexport default MultiSelect;\n"],"mappings":";;;;;;;;AAAA,SAASA,qBAAqB,QAAQ,uBAAuB;AAC7D,SAASC,WAAW,EAAEC,MAAM,QAAQ,OAAO;AAAC,SAEnCC,mBAAmB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAI5B,OAAO,SAASC,WAAWA,CAACC,KAAuB,EAAe;EAChE,IAAAC,oBAAA,GAKIL,mBAAmB,CAACI,KAAK,CAAC;IALxB;MACJE,aAAa,EAAEC,qBAAqB;MACpCC,YAAY,EAAEC,oBAAoB;MAClCC;IAEF,CAAC,GAAAL,oBAAA;IADIM,eAAe,GAAAC,wBAAA,CAAAP,oBAAA,EAAAQ,SAAA;EAGpB,IAAMC,SAAS,GAAGf,MAAM,CAAC,KAAK,CAAC;EAC/B,IAAMgB,aAAa,GAAGhB,MAAM,CAAC,EAAE,CAAC;EAEhC,IAAMO,aAAa,GAAGR,WAAW,CAC9BkB,KAAa,IAAK;IACjBT,qBAAqB,aAArBA,qBAAqB,eAArBA,qBAAqB,CAAGS,KAAK,CAAC;;IAE9B;IACA,IAAIF,SAAS,CAACG,OAAO,EAAE;MACrBP,kBAAkB,CAACM,KAAK,CAAC;IAC3B;IACA;IACA;IAAA,KACK;MACHN,kBAAkB,CAAC,EAAE,CAAC;MACtBK,aAAa,CAACE,OAAO,GAAGD,KAAK;IAC/B;EACF,CAAC,EACD,CAACT,qBAAqB,EAAEG,kBAAkB,CAC5C,CAAC;EAED,IAAMF,YAAY,GAAGV,WAAW,CAC7BoB,MAAe,IAAK;IACnBT,oBAAoB,aAApBA,oBAAoB,eAApBA,oBAAoB,CAAGS,MAAM,CAAC;;IAE9B;IACA,IAAI,CAACA,MAAM,EAAE;MACXR,kBAAkB,CAAC,EAAE,CAAC;IACxB;IACA;IAAA,KACK,IAAIK,aAAa,CAACE,OAAO,KAAK,EAAE,EAAE;MACrCP,kBAAkB,CAACK,aAAa,CAACE,OAAO,CAAC;IAC3C;IAEAH,SAAS,CAACG,OAAO,GAAGC,MAAM;EAC5B,CAAC,EACD,CAACR,kBAAkB,EAAED,oBAAoB,CAC3C,CAAC;EAED,oBACEP,IAAA,CAACL;EACC;EAAA,EAAAsB,aAAA,CAAAA,aAAA,KACIR,eAAe;IACnBL,aAAa,EAAEA,aAAc;IAC7BE,YAAY,EAAEA;EAAa,EAC5B,CAAC;AAEN;AAEA,eAAeL,WAAW","ignoreList":[]}
@@ -1,5 +1,7 @@
1
1
  export * from './ComboBox';
2
2
  export * from './ListView';
3
+ export * from './MultiSelect';
4
+ export * from './MultiPickerProps';
3
5
  export * from './Picker';
4
6
  export * from './PickerProps';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spectrum/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spectrum/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
@@ -1,5 +1,7 @@
1
1
  export * from "./ComboBox.js";
2
2
  export * from "./ListView.js";
3
+ export * from "./MultiSelect.js";
4
+ export * from "./MultiPickerProps.js";
3
5
  export * from "./Picker.js";
4
6
  export * from "./PickerProps.js";
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/spectrum/index.ts"],"sourcesContent":["export * from './ComboBox';\nexport * from './ListView';\nexport * from './Picker';\nexport * from './PickerProps';\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/spectrum/index.ts"],"sourcesContent":["export * from './ComboBox';\nexport * from './ListView';\nexport * from './MultiSelect';\nexport * from './MultiPickerProps';\nexport * from './Picker';\nexport * from './PickerProps';\n"],"mappings":"","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  export * from './itemUtils';
2
2
  export * from './useItemRowDeserializer';
3
+ export * from './useMultiPickerProps';
3
4
  export * from './usePickerProps';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spectrum/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spectrum/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from "./itemUtils.js";
2
2
  export * from "./useItemRowDeserializer.js";
3
+ export * from "./useMultiPickerProps.js";
3
4
  export * from "./usePickerProps.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/spectrum/utils/index.ts"],"sourcesContent":["export * from './itemUtils';\nexport * from './useItemRowDeserializer';\nexport * from './usePickerProps';\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/spectrum/utils/index.ts"],"sourcesContent":["export * from './itemUtils';\nexport * from './useItemRowDeserializer';\nexport * from './useMultiPickerProps';\nexport * from './usePickerProps';\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ import { type ItemSelection, type NormalizedItem, type NormalizedSection } from '@deephaven/components';
2
+ import type { MultiPickerWithTableProps } from '../MultiPickerProps';
3
+ /** Props that are derived by `useMultiPickerProps`. */
4
+ export type UseMultiPickerDerivedProps = {
5
+ normalizedItems: (NormalizedItem | NormalizedSection)[];
6
+ showItemIcons: boolean;
7
+ selectedItemLabels: Map<string, string>;
8
+ onChange: (keys: ItemSelection) => void;
9
+ onScroll: (event: Event) => void;
10
+ onSearchTextChange: (searchText: string) => void;
11
+ };
12
+ /**
13
+ * Props that are passed through untouched. (should exclude all of the
14
+ * destructured props passed into `useMultiPickerProps` that are not in the
15
+ * spread ...props)
16
+ */
17
+ export type UseMultiPickerPassthroughProps = Omit<MultiPickerWithTableProps, 'table' | 'keyColumn' | 'labelColumn' | 'iconColumn' | 'settings' | 'onChange' | 'onSelectionChange'>;
18
+ /** Props returned by `useMultiPickerProps` hook. */
19
+ export type UseMultiPickerProps = UseMultiPickerDerivedProps & UseMultiPickerPassthroughProps;
20
+ export declare function useMultiPickerProps({ table: tableSource, keyColumn: keyColumnName, labelColumn: labelColumnName, iconColumn: iconColumnName, settings, onChange, onSelectionChange, ...props }: MultiPickerWithTableProps): UseMultiPickerProps;
21
+ export default useMultiPickerProps;
22
+ //# sourceMappingURL=useMultiPickerProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMultiPickerProps.d.ts","sourceRoot":"","sources":["../../../src/spectrum/utils/useMultiPickerProps.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EAEnB,KAAK,iBAAiB,EAEvB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAQrE,uDAAuD;AACvD,MAAM,MAAM,0BAA0B,GAAG;IACvC,eAAe,EAAE,CAAC,cAAc,GAAG,iBAAiB,CAAC,EAAE,CAAC;IACxD,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,8BAA8B,GAAG,IAAI,CAC/C,yBAAyB,EACvB,OAAO,GACP,WAAW,GACX,aAAa,GACb,YAAY,GACZ,UAAU,GACV,UAAU,GACV,mBAAmB,CACtB,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,mBAAmB,GAAG,0BAA0B,GAC1D,8BAA8B,CAAC;AAEjC,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,eAAe,EAC5B,UAAU,EAAE,cAAc,EAC1B,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,GAAG,KAAK,EACT,EAAE,yBAAyB,GAAG,mBAAmB,CAuRjD;AAED,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,259 @@
1
+ var _excluded = ["table", "keyColumn", "labelColumn", "iconColumn", "settings", "onChange", "onSelectionChange"];
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
6
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
8
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
9
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
10
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
11
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
12
+ import { usePickerItemScale } from '@deephaven/components';
13
+ import { createKeyedItemKey, TableUtils } from '@deephaven/jsapi-utils';
14
+ import { useApi } from '@deephaven/jsapi-bootstrap';
15
+ import Log from '@deephaven/log';
16
+ import { usePromiseFactory } from '@deephaven/react-hooks';
17
+ import useFormatter from "../../useFormatter.js";
18
+ import useTableUtils from "../../useTableUtils.js";
19
+ import { getItemKeyColumn, getItemLabelColumn } from "./itemUtils.js";
20
+ import { useItemRowDeserializer } from "./useItemRowDeserializer.js";
21
+ import useSearchableViewportData from "../../useSearchableViewportData.js";
22
+ import useWidgetClose from "../../useWidgetClose.js";
23
+ var log = Log.module('jsapi-components.useMultiPickerProps');
24
+
25
+ /** Props that are derived by `useMultiPickerProps`. */
26
+
27
+ /**
28
+ * Props that are passed through untouched. (should exclude all of the
29
+ * destructured props passed into `useMultiPickerProps` that are not in the
30
+ * spread ...props)
31
+ */
32
+
33
+ /** Props returned by `useMultiPickerProps` hook. */
34
+
35
+ export function useMultiPickerProps(_ref) {
36
+ var _props$selectedKeys;
37
+ var {
38
+ table: tableSource,
39
+ keyColumn: keyColumnName,
40
+ labelColumn: labelColumnName,
41
+ iconColumn: iconColumnName,
42
+ settings,
43
+ onChange,
44
+ onSelectionChange
45
+ } = _ref,
46
+ props = _objectWithoutProperties(_ref, _excluded);
47
+ var {
48
+ itemHeight
49
+ } = usePickerItemScale();
50
+ var {
51
+ getFormattedString: formatValue,
52
+ timeZone
53
+ } = useFormatter(settings);
54
+
55
+ // Copy table so we can apply filters without affecting the original table.
56
+ var {
57
+ data: tableCopy
58
+ } = usePromiseFactory(TableUtils.copyTableAndApplyFilters, [tableSource]);
59
+ useWidgetClose(tableCopy);
60
+ var keyColumn = useMemo(() => tableCopy == null ? null : getItemKeyColumn(tableCopy, keyColumnName), [keyColumnName, tableCopy]);
61
+ var labelColumn = useMemo(() => tableCopy == null || keyColumn == null ? null : getItemLabelColumn(tableCopy, keyColumn, labelColumnName), [keyColumn, labelColumnName, tableCopy]);
62
+ var searchColumnNames = useMemo(() => labelColumn == null ? [] : [labelColumn.name], [labelColumn]);
63
+ var deserializeRow = useItemRowDeserializer({
64
+ table: tableCopy,
65
+ iconColumnName,
66
+ keyColumnName,
67
+ labelColumnName,
68
+ formatValue
69
+ });
70
+ var {
71
+ onScroll,
72
+ onSearchTextChange,
73
+ viewportData
74
+ } = useSearchableViewportData({
75
+ reuseItemsOnTableResize: true,
76
+ table: tableCopy,
77
+ itemHeight,
78
+ deserializeRow,
79
+ searchColumnNames,
80
+ timeZone
81
+ });
82
+ var dh = useApi();
83
+ var tableUtils = useTableUtils();
84
+
85
+ // Only request columns needed by `deserializeRow` (key, label, and optionally icon).
86
+ var snapshotColumns = useMemo(() => {
87
+ if (tableCopy == null || keyColumn == null) {
88
+ return [];
89
+ }
90
+ var cols = [keyColumn];
91
+ if (labelColumn != null && labelColumn !== keyColumn) {
92
+ cols.push(labelColumn);
93
+ }
94
+ if (iconColumnName != null) {
95
+ try {
96
+ var iconCol = tableCopy.findColumn(iconColumnName);
97
+ cols.push(iconCol);
98
+ } catch (_unused) {
99
+ // icon column not found, skip
100
+ }
101
+ }
102
+ return cols;
103
+ }, [tableCopy, keyColumn, labelColumn, iconColumnName]);
104
+
105
+ // When selected keys point to rows outside the initial viewport, we take a table snapshot of
106
+ // just those rows to load their real label data. This avoids moving the viewport and ensures all
107
+ // selected items display correct labels.
108
+ var selectedKeysForSnapshot = (_props$selectedKeys = props.selectedKeys) !== null && _props$selectedKeys !== void 0 ? _props$selectedKeys : props.defaultSelectedKeys;
109
+ var snapshottedKeysRef = useRef(new Set());
110
+ var [snapshotItemsByIndex, setSnapshotItemsByIndex] = useState(new Map());
111
+
112
+ // Reset when table changes so we re-snapshot.
113
+ useEffect(() => {
114
+ snapshottedKeysRef.current = new Set();
115
+ setSnapshotItemsByIndex(new Map());
116
+ }, [tableCopy]);
117
+ useEffect(function snapshotSelectedKeyLabels() {
118
+ if (tableCopy == null || keyColumn == null || selectedKeysForSnapshot == null || selectedKeysForSnapshot === 'all') {
119
+ return;
120
+ }
121
+
122
+ // Determine which keys still need snapshotting.
123
+ var keysToSnapshot = [...selectedKeysForSnapshot].filter(key => !snapshottedKeysRef.current.has(String(key)));
124
+ if (keysToSnapshot.length === 0) {
125
+ return;
126
+ }
127
+ var isCanceled = false;
128
+ var column = tableCopy.findColumn(keyColumn.name);
129
+ var columnValueType = tableUtils.getValueType(column.type);
130
+ _asyncToGenerator(function* () {
131
+ try {
132
+ // Seek row indices for all selected keys
133
+ var rowIndices = [];
134
+ yield Promise.all(keysToSnapshot.map(/*#__PURE__*/function () {
135
+ var _ref3 = _asyncToGenerator(function* (key) {
136
+ if (isCanceled) {
137
+ return;
138
+ }
139
+ var index = yield tableCopy.seekRow(0, column, columnValueType, key);
140
+ if (index !== -1) {
141
+ rowIndices.push(index);
142
+ }
143
+ });
144
+ return function (_x) {
145
+ return _ref3.apply(this, arguments);
146
+ };
147
+ }()));
148
+ rowIndices.sort((a, b) => a - b);
149
+ if (isCanceled || rowIndices.length === 0) {
150
+ return;
151
+ }
152
+
153
+ // Take a snapshot of just those rows
154
+ var rangeSet = dh.RangeSet.ofItems(rowIndices);
155
+ var tableData = yield tableCopy.createSnapshot({
156
+ rows: rangeSet,
157
+ columns: snapshotColumns
158
+ });
159
+ if (isCanceled) {
160
+ return;
161
+ }
162
+ var itemMap = new Map();
163
+ tableData.rows.forEach((row, i) => {
164
+ var rowIndex = rowIndices[i];
165
+ var item = deserializeRow(row);
166
+ itemMap.set(rowIndex, {
167
+ key: createKeyedItemKey(rowIndex),
168
+ item
169
+ });
170
+ });
171
+ if (!isCanceled) {
172
+ // Mark keys as successfully snapshotted so they are not re-fetched.
173
+ keysToSnapshot.forEach(key => snapshottedKeysRef.current.add(String(key)));
174
+ setSnapshotItemsByIndex(prev => {
175
+ var merged = new Map(prev);
176
+ itemMap.forEach((value, key) => merged.set(key, value));
177
+ return merged;
178
+ });
179
+ }
180
+ } catch (err) {
181
+ log.error('Error loading labels for selected keys', err);
182
+ }
183
+ })();
184
+ return () => {
185
+ isCanceled = true;
186
+ };
187
+ }, [selectedKeysForSnapshot, tableCopy, keyColumn, tableUtils, dh, deserializeRow, snapshotColumns]);
188
+
189
+ // Label cache for every selected item resolved (from viewport or snapshot). This ensures that
190
+ // when search filtering narrows the table, tags for selected items that are no longer in the
191
+ // filtered results still display their correct labels.
192
+ // NOTE: This is passed using a separate `selectedItemLabels` prop so it only affects tag
193
+ // rendering.
194
+ var labelCacheRef = useRef(new Map());
195
+ var [selectedItemLabels, setSelectedItemLabels] = useState(new Map());
196
+
197
+ // Merge snapshot data into viewport items (needed for initial load of labels, otherwise they
198
+ // display key values).
199
+ var normalizedItems = useMemo(() => {
200
+ if (snapshotItemsByIndex.size === 0) {
201
+ return viewportData.items;
202
+ }
203
+ return viewportData.items.map((item, index) => {
204
+ if (item.item == null) {
205
+ var snapshotItem = snapshotItemsByIndex.get(index);
206
+ if (snapshotItem != null) {
207
+ return snapshotItem;
208
+ }
209
+ }
210
+ return item;
211
+ });
212
+ }, [viewportData.items, snapshotItemsByIndex]);
213
+
214
+ // Update the label cache whenever normalizedItems or selected keys change.
215
+ useEffect(function updateLabelCache() {
216
+ var _props$selectedKeys2;
217
+ var currentSelectedKeys = (_props$selectedKeys2 = props.selectedKeys) !== null && _props$selectedKeys2 !== void 0 ? _props$selectedKeys2 : props.defaultSelectedKeys;
218
+ var selectedKeySet;
219
+ if (currentSelectedKeys instanceof Array) {
220
+ selectedKeySet = new Set(currentSelectedKeys.map(String));
221
+ } else if (currentSelectedKeys === 'all') {
222
+ selectedKeySet = null;
223
+ } else {
224
+ selectedKeySet = new Set();
225
+ }
226
+ var cacheUpdated = false;
227
+
228
+ // Cache labels from all resolved items that are currently selected. The normalizedItems
229
+ // merge already includes snapshot data, so this single pass should cover both viewport
230
+ // and snapshot sources.
231
+ normalizedItems.forEach(item => {
232
+ if (item.item != null) {
233
+ var key = String(item.item.key);
234
+ var label = item.item.textValue;
235
+ if (label != null && (selectedKeySet == null || selectedKeySet.has(key)) && labelCacheRef.current.get(key) !== label) {
236
+ labelCacheRef.current.set(key, label);
237
+ cacheUpdated = true;
238
+ }
239
+ }
240
+ });
241
+ if (cacheUpdated) {
242
+ setSelectedItemLabels(new Map(labelCacheRef.current));
243
+ }
244
+ }, [normalizedItems, props.selectedKeys, props.defaultSelectedKeys]);
245
+ var onSelectionChangeInternal = useCallback(keys => {
246
+ var _ref4;
247
+ (_ref4 = onChange !== null && onChange !== void 0 ? onChange : onSelectionChange) === null || _ref4 === void 0 || _ref4(keys);
248
+ }, [onChange, onSelectionChange]);
249
+ return _objectSpread(_objectSpread({}, props), {}, {
250
+ normalizedItems,
251
+ selectedItemLabels,
252
+ showItemIcons: iconColumnName != null,
253
+ onChange: onSelectionChangeInternal,
254
+ onScroll,
255
+ onSearchTextChange
256
+ });
257
+ }
258
+ export default useMultiPickerProps;
259
+ //# sourceMappingURL=useMultiPickerProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMultiPickerProps.js","names":["useCallback","useEffect","useMemo","useRef","useState","usePickerItemScale","createKeyedItemKey","TableUtils","useApi","Log","usePromiseFactory","useFormatter","useTableUtils","getItemKeyColumn","getItemLabelColumn","useItemRowDeserializer","useSearchableViewportData","useWidgetClose","log","module","useMultiPickerProps","_ref","_props$selectedKeys","table","tableSource","keyColumn","keyColumnName","labelColumn","labelColumnName","iconColumn","iconColumnName","settings","onChange","onSelectionChange","props","_objectWithoutProperties","_excluded","itemHeight","getFormattedString","formatValue","timeZone","data","tableCopy","copyTableAndApplyFilters","searchColumnNames","name","deserializeRow","onScroll","onSearchTextChange","viewportData","reuseItemsOnTableResize","dh","tableUtils","snapshotColumns","cols","push","iconCol","findColumn","_unused","selectedKeysForSnapshot","selectedKeys","defaultSelectedKeys","snapshottedKeysRef","Set","snapshotItemsByIndex","setSnapshotItemsByIndex","Map","current","snapshotSelectedKeyLabels","keysToSnapshot","filter","key","has","String","length","isCanceled","column","columnValueType","getValueType","type","_asyncToGenerator","rowIndices","Promise","all","map","_ref3","index","seekRow","_x","apply","arguments","sort","a","b","rangeSet","RangeSet","ofItems","tableData","createSnapshot","rows","columns","itemMap","forEach","row","i","rowIndex","item","set","add","prev","merged","value","err","error","labelCacheRef","selectedItemLabels","setSelectedItemLabels","normalizedItems","size","items","snapshotItem","get","updateLabelCache","_props$selectedKeys2","currentSelectedKeys","selectedKeySet","Array","cacheUpdated","label","textValue","onSelectionChangeInternal","keys","_ref4","_objectSpread","showItemIcons"],"sources":["../../../src/spectrum/utils/useMultiPickerProps.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n type ItemSelection,\n type NormalizedItem,\n type NormalizedItemData,\n type NormalizedSection,\n usePickerItemScale,\n} from '@deephaven/components';\nimport { createKeyedItemKey, TableUtils } from '@deephaven/jsapi-utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport Log from '@deephaven/log';\nimport { usePromiseFactory } from '@deephaven/react-hooks';\nimport { type KeyedItem } from '@deephaven/utils';\nimport useFormatter from '../../useFormatter';\nimport useTableUtils from '../../useTableUtils';\nimport type { MultiPickerWithTableProps } from '../MultiPickerProps';\nimport { getItemKeyColumn, getItemLabelColumn } from './itemUtils';\nimport { useItemRowDeserializer } from './useItemRowDeserializer';\nimport useSearchableViewportData from '../../useSearchableViewportData';\nimport useWidgetClose from '../../useWidgetClose';\n\nconst log = Log.module('jsapi-components.useMultiPickerProps');\n\n/** Props that are derived by `useMultiPickerProps`. */\nexport type UseMultiPickerDerivedProps = {\n normalizedItems: (NormalizedItem | NormalizedSection)[];\n showItemIcons: boolean;\n selectedItemLabels: Map<string, string>;\n onChange: (keys: ItemSelection) => void;\n onScroll: (event: Event) => void;\n onSearchTextChange: (searchText: string) => void;\n};\n\n/**\n * Props that are passed through untouched. (should exclude all of the\n * destructured props passed into `useMultiPickerProps` that are not in the\n * spread ...props)\n */\nexport type UseMultiPickerPassthroughProps = Omit<\n MultiPickerWithTableProps,\n | 'table'\n | 'keyColumn'\n | 'labelColumn'\n | 'iconColumn'\n | 'settings'\n | 'onChange'\n | 'onSelectionChange'\n>;\n\n/** Props returned by `useMultiPickerProps` hook. */\nexport type UseMultiPickerProps = UseMultiPickerDerivedProps &\n UseMultiPickerPassthroughProps;\n\nexport function useMultiPickerProps({\n table: tableSource,\n keyColumn: keyColumnName,\n labelColumn: labelColumnName,\n iconColumn: iconColumnName,\n settings,\n onChange,\n onSelectionChange,\n ...props\n}: MultiPickerWithTableProps): UseMultiPickerProps {\n const { itemHeight } = usePickerItemScale();\n\n const { getFormattedString: formatValue, timeZone } = useFormatter(settings);\n\n // Copy table so we can apply filters without affecting the original table.\n const { data: tableCopy } = usePromiseFactory(\n TableUtils.copyTableAndApplyFilters,\n [tableSource]\n );\n\n useWidgetClose(tableCopy);\n\n const keyColumn = useMemo(\n () =>\n tableCopy == null ? null : getItemKeyColumn(tableCopy, keyColumnName),\n [keyColumnName, tableCopy]\n );\n\n const labelColumn = useMemo(\n () =>\n tableCopy == null || keyColumn == null\n ? null\n : getItemLabelColumn(tableCopy, keyColumn, labelColumnName),\n [keyColumn, labelColumnName, tableCopy]\n );\n\n const searchColumnNames = useMemo(\n () => (labelColumn == null ? [] : [labelColumn.name]),\n [labelColumn]\n );\n\n const deserializeRow = useItemRowDeserializer({\n table: tableCopy,\n iconColumnName,\n keyColumnName,\n labelColumnName,\n formatValue,\n });\n\n const { onScroll, onSearchTextChange, viewportData } =\n useSearchableViewportData({\n reuseItemsOnTableResize: true,\n table: tableCopy,\n itemHeight,\n deserializeRow,\n searchColumnNames,\n timeZone,\n });\n\n const dh = useApi();\n const tableUtils = useTableUtils();\n\n // Only request columns needed by `deserializeRow` (key, label, and optionally icon).\n const snapshotColumns = useMemo(() => {\n if (tableCopy == null || keyColumn == null) {\n return [];\n }\n const cols = [keyColumn];\n if (labelColumn != null && labelColumn !== keyColumn) {\n cols.push(labelColumn);\n }\n if (iconColumnName != null) {\n try {\n const iconCol = tableCopy.findColumn(iconColumnName);\n cols.push(iconCol);\n } catch {\n // icon column not found, skip\n }\n }\n return cols;\n }, [tableCopy, keyColumn, labelColumn, iconColumnName]);\n\n // When selected keys point to rows outside the initial viewport, we take a table snapshot of\n // just those rows to load their real label data. This avoids moving the viewport and ensures all\n // selected items display correct labels.\n const selectedKeysForSnapshot =\n props.selectedKeys ?? props.defaultSelectedKeys;\n const snapshottedKeysRef = useRef<Set<string>>(new Set());\n const [snapshotItemsByIndex, setSnapshotItemsByIndex] = useState<\n Map<number, KeyedItem<NormalizedItemData>>\n >(new Map());\n\n // Reset when table changes so we re-snapshot.\n useEffect(() => {\n snapshottedKeysRef.current = new Set();\n setSnapshotItemsByIndex(new Map());\n }, [tableCopy]);\n\n useEffect(\n function snapshotSelectedKeyLabels() {\n if (\n tableCopy == null ||\n keyColumn == null ||\n selectedKeysForSnapshot == null ||\n selectedKeysForSnapshot === 'all'\n ) {\n return;\n }\n\n // Determine which keys still need snapshotting.\n const keysToSnapshot = [...selectedKeysForSnapshot].filter(\n key => !snapshottedKeysRef.current.has(String(key))\n );\n\n if (keysToSnapshot.length === 0) {\n return;\n }\n\n let isCanceled = false;\n\n const column = tableCopy.findColumn(keyColumn.name);\n const columnValueType = tableUtils.getValueType(column.type);\n\n (async () => {\n try {\n // Seek row indices for all selected keys\n const rowIndices: number[] = [];\n await Promise.all(\n keysToSnapshot.map(async key => {\n if (isCanceled) {\n return;\n }\n const index = await tableCopy.seekRow(\n 0,\n column,\n columnValueType,\n key\n );\n if (index !== -1) {\n rowIndices.push(index);\n }\n })\n );\n\n rowIndices.sort((a, b) => a - b);\n\n if (isCanceled || rowIndices.length === 0) {\n return;\n }\n\n // Take a snapshot of just those rows\n const rangeSet = dh.RangeSet.ofItems(rowIndices);\n const tableData = await tableCopy.createSnapshot({\n rows: rangeSet,\n columns: snapshotColumns,\n });\n\n if (isCanceled) {\n return;\n }\n\n const itemMap = new Map<number, KeyedItem<NormalizedItemData>>();\n tableData.rows.forEach((row, i) => {\n const rowIndex = rowIndices[i];\n const item = deserializeRow(row);\n itemMap.set(rowIndex, {\n key: createKeyedItemKey(rowIndex),\n item,\n });\n });\n\n if (!isCanceled) {\n // Mark keys as successfully snapshotted so they are not re-fetched.\n keysToSnapshot.forEach(key =>\n snapshottedKeysRef.current.add(String(key))\n );\n setSnapshotItemsByIndex(prev => {\n const merged = new Map(prev);\n itemMap.forEach((value, key) => merged.set(key, value));\n return merged;\n });\n }\n } catch (err) {\n log.error('Error loading labels for selected keys', err);\n }\n })();\n\n return () => {\n isCanceled = true;\n };\n },\n [\n selectedKeysForSnapshot,\n tableCopy,\n keyColumn,\n tableUtils,\n dh,\n deserializeRow,\n snapshotColumns,\n ]\n );\n\n // Label cache for every selected item resolved (from viewport or snapshot). This ensures that\n // when search filtering narrows the table, tags for selected items that are no longer in the\n // filtered results still display their correct labels.\n // NOTE: This is passed using a separate `selectedItemLabels` prop so it only affects tag\n // rendering.\n const labelCacheRef = useRef<Map<string, string>>(new Map());\n const [selectedItemLabels, setSelectedItemLabels] = useState<\n Map<string, string>\n >(new Map());\n\n // Merge snapshot data into viewport items (needed for initial load of labels, otherwise they\n // display key values).\n const normalizedItems = useMemo(() => {\n if (snapshotItemsByIndex.size === 0) {\n return viewportData.items;\n }\n\n return viewportData.items.map((item, index) => {\n if (item.item == null) {\n const snapshotItem = snapshotItemsByIndex.get(index);\n if (snapshotItem != null) {\n return snapshotItem;\n }\n }\n return item;\n });\n }, [viewportData.items, snapshotItemsByIndex]);\n\n // Update the label cache whenever normalizedItems or selected keys change.\n useEffect(\n function updateLabelCache() {\n const currentSelectedKeys =\n props.selectedKeys ?? props.defaultSelectedKeys;\n\n let selectedKeySet: Set<string> | null;\n if (currentSelectedKeys instanceof Array) {\n selectedKeySet = new Set(currentSelectedKeys.map(String));\n } else if (currentSelectedKeys === 'all') {\n selectedKeySet = null;\n } else {\n selectedKeySet = new Set<string>();\n }\n\n let cacheUpdated = false;\n\n // Cache labels from all resolved items that are currently selected. The normalizedItems\n // merge already includes snapshot data, so this single pass should cover both viewport\n // and snapshot sources.\n normalizedItems.forEach(item => {\n if (item.item != null) {\n const key = String(item.item.key);\n const label = item.item.textValue;\n if (\n label != null &&\n (selectedKeySet == null || selectedKeySet.has(key)) &&\n labelCacheRef.current.get(key) !== label\n ) {\n labelCacheRef.current.set(key, label);\n cacheUpdated = true;\n }\n }\n });\n\n if (cacheUpdated) {\n setSelectedItemLabels(new Map(labelCacheRef.current));\n }\n },\n [normalizedItems, props.selectedKeys, props.defaultSelectedKeys]\n );\n\n const onSelectionChangeInternal = useCallback(\n (keys: ItemSelection): void => {\n (onChange ?? onSelectionChange)?.(keys);\n },\n [onChange, onSelectionChange]\n );\n\n return {\n ...props,\n normalizedItems,\n selectedItemLabels,\n showItemIcons: iconColumnName != null,\n onChange: onSelectionChangeInternal,\n onScroll,\n onSearchTextChange,\n };\n}\n\nexport default useMultiPickerProps;\n"],"mappings":";;;;;;;;;;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACzE,SAKEC,kBAAkB,QACb,uBAAuB;AAC9B,SAASC,kBAAkB,EAAEC,UAAU,QAAQ,wBAAwB;AACvE,SAASC,MAAM,QAAQ,4BAA4B;AACnD,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,iBAAiB,QAAQ,wBAAwB;AAAC,OAEpDC,YAAY;AAAA,OACZC,aAAa;AAAA,SAEXC,gBAAgB,EAAEC,kBAAkB;AAAA,SACpCC,sBAAsB;AAAA,OACxBC,yBAAyB;AAAA,OACzBC,cAAc;AAErB,IAAMC,GAAG,GAAGT,GAAG,CAACU,MAAM,CAAC,sCAAsC,CAAC;;AAE9D;;AAUA;AACA;AACA;AACA;AACA;;AAYA;;AAIA,OAAO,SAASC,mBAAmBA,CAAAC,IAAA,EASgB;EAAA,IAAAC,mBAAA;EAAA,IATf;MAClCC,KAAK,EAAEC,WAAW;MAClBC,SAAS,EAAEC,aAAa;MACxBC,WAAW,EAAEC,eAAe;MAC5BC,UAAU,EAAEC,cAAc;MAC1BC,QAAQ;MACRC,QAAQ;MACRC;IAEyB,CAAC,GAAAZ,IAAA;IADvBa,KAAK,GAAAC,wBAAA,CAAAd,IAAA,EAAAe,SAAA;EAER,IAAM;IAAEC;EAAW,CAAC,GAAGhC,kBAAkB,CAAC,CAAC;EAE3C,IAAM;IAAEiC,kBAAkB,EAAEC,WAAW;IAAEC;EAAS,CAAC,GAAG7B,YAAY,CAACoB,QAAQ,CAAC;;EAE5E;EACA,IAAM;IAAEU,IAAI,EAAEC;EAAU,CAAC,GAAGhC,iBAAiB,CAC3CH,UAAU,CAACoC,wBAAwB,EACnC,CAACnB,WAAW,CACd,CAAC;EAEDP,cAAc,CAACyB,SAAS,CAAC;EAEzB,IAAMjB,SAAS,GAAGvB,OAAO,CACvB,MACEwC,SAAS,IAAI,IAAI,GAAG,IAAI,GAAG7B,gBAAgB,CAAC6B,SAAS,EAAEhB,aAAa,CAAC,EACvE,CAACA,aAAa,EAAEgB,SAAS,CAC3B,CAAC;EAED,IAAMf,WAAW,GAAGzB,OAAO,CACzB,MACEwC,SAAS,IAAI,IAAI,IAAIjB,SAAS,IAAI,IAAI,GAClC,IAAI,GACJX,kBAAkB,CAAC4B,SAAS,EAAEjB,SAAS,EAAEG,eAAe,CAAC,EAC/D,CAACH,SAAS,EAAEG,eAAe,EAAEc,SAAS,CACxC,CAAC;EAED,IAAME,iBAAiB,GAAG1C,OAAO,CAC/B,MAAOyB,WAAW,IAAI,IAAI,GAAG,EAAE,GAAG,CAACA,WAAW,CAACkB,IAAI,CAAE,EACrD,CAAClB,WAAW,CACd,CAAC;EAED,IAAMmB,cAAc,GAAG/B,sBAAsB,CAAC;IAC5CQ,KAAK,EAAEmB,SAAS;IAChBZ,cAAc;IACdJ,aAAa;IACbE,eAAe;IACfW;EACF,CAAC,CAAC;EAEF,IAAM;IAAEQ,QAAQ;IAAEC,kBAAkB;IAAEC;EAAa,CAAC,GAClDjC,yBAAyB,CAAC;IACxBkC,uBAAuB,EAAE,IAAI;IAC7B3B,KAAK,EAAEmB,SAAS;IAChBL,UAAU;IACVS,cAAc;IACdF,iBAAiB;IACjBJ;EACF,CAAC,CAAC;EAEJ,IAAMW,EAAE,GAAG3C,MAAM,CAAC,CAAC;EACnB,IAAM4C,UAAU,GAAGxC,aAAa,CAAC,CAAC;;EAElC;EACA,IAAMyC,eAAe,GAAGnD,OAAO,CAAC,MAAM;IACpC,IAAIwC,SAAS,IAAI,IAAI,IAAIjB,SAAS,IAAI,IAAI,EAAE;MAC1C,OAAO,EAAE;IACX;IACA,IAAM6B,IAAI,GAAG,CAAC7B,SAAS,CAAC;IACxB,IAAIE,WAAW,IAAI,IAAI,IAAIA,WAAW,KAAKF,SAAS,EAAE;MACpD6B,IAAI,CAACC,IAAI,CAAC5B,WAAW,CAAC;IACxB;IACA,IAAIG,cAAc,IAAI,IAAI,EAAE;MAC1B,IAAI;QACF,IAAM0B,OAAO,GAAGd,SAAS,CAACe,UAAU,CAAC3B,cAAc,CAAC;QACpDwB,IAAI,CAACC,IAAI,CAACC,OAAO,CAAC;MACpB,CAAC,CAAC,OAAAE,OAAA,EAAM;QACN;MAAA;IAEJ;IACA,OAAOJ,IAAI;EACb,CAAC,EAAE,CAACZ,SAAS,EAAEjB,SAAS,EAAEE,WAAW,EAAEG,cAAc,CAAC,CAAC;;EAEvD;EACA;EACA;EACA,IAAM6B,uBAAuB,IAAArC,mBAAA,GAC3BY,KAAK,CAAC0B,YAAY,cAAAtC,mBAAA,cAAAA,mBAAA,GAAIY,KAAK,CAAC2B,mBAAmB;EACjD,IAAMC,kBAAkB,GAAG3D,MAAM,CAAc,IAAI4D,GAAG,CAAC,CAAC,CAAC;EACzD,IAAM,CAACC,oBAAoB,EAAEC,uBAAuB,CAAC,GAAG7D,QAAQ,CAE9D,IAAI8D,GAAG,CAAC,CAAC,CAAC;;EAEZ;EACAjE,SAAS,CAAC,MAAM;IACd6D,kBAAkB,CAACK,OAAO,GAAG,IAAIJ,GAAG,CAAC,CAAC;IACtCE,uBAAuB,CAAC,IAAIC,GAAG,CAAC,CAAC,CAAC;EACpC,CAAC,EAAE,CAACxB,SAAS,CAAC,CAAC;EAEfzC,SAAS,CACP,SAASmE,yBAAyBA,CAAA,EAAG;IACnC,IACE1B,SAAS,IAAI,IAAI,IACjBjB,SAAS,IAAI,IAAI,IACjBkC,uBAAuB,IAAI,IAAI,IAC/BA,uBAAuB,KAAK,KAAK,EACjC;MACA;IACF;;IAEA;IACA,IAAMU,cAAc,GAAG,CAAC,GAAGV,uBAAuB,CAAC,CAACW,MAAM,CACxDC,GAAG,IAAI,CAACT,kBAAkB,CAACK,OAAO,CAACK,GAAG,CAACC,MAAM,CAACF,GAAG,CAAC,CACpD,CAAC;IAED,IAAIF,cAAc,CAACK,MAAM,KAAK,CAAC,EAAE;MAC/B;IACF;IAEA,IAAIC,UAAU,GAAG,KAAK;IAEtB,IAAMC,MAAM,GAAGlC,SAAS,CAACe,UAAU,CAAChC,SAAS,CAACoB,IAAI,CAAC;IACnD,IAAMgC,eAAe,GAAGzB,UAAU,CAAC0B,YAAY,CAACF,MAAM,CAACG,IAAI,CAAC;IAE5DC,iBAAA,CAAC,aAAY;MACX,IAAI;QACF;QACA,IAAMC,UAAoB,GAAG,EAAE;QAC/B,MAAMC,OAAO,CAACC,GAAG,CACfd,cAAc,CAACe,GAAG;UAAA,IAAAC,KAAA,GAAAL,iBAAA,CAAC,WAAMT,GAAG,EAAI;YAC9B,IAAII,UAAU,EAAE;cACd;YACF;YACA,IAAMW,KAAK,SAAS5C,SAAS,CAAC6C,OAAO,CACnC,CAAC,EACDX,MAAM,EACNC,eAAe,EACfN,GACF,CAAC;YACD,IAAIe,KAAK,KAAK,CAAC,CAAC,EAAE;cAChBL,UAAU,CAAC1B,IAAI,CAAC+B,KAAK,CAAC;YACxB;UACF,CAAC;UAAA,iBAAAE,EAAA;YAAA,OAAAH,KAAA,CAAAI,KAAA,OAAAC,SAAA;UAAA;QAAA,IACH,CAAC;QAEDT,UAAU,CAACU,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,CAAC;QAEhC,IAAIlB,UAAU,IAAIM,UAAU,CAACP,MAAM,KAAK,CAAC,EAAE;UACzC;QACF;;QAEA;QACA,IAAMoB,QAAQ,GAAG3C,EAAE,CAAC4C,QAAQ,CAACC,OAAO,CAACf,UAAU,CAAC;QAChD,IAAMgB,SAAS,SAASvD,SAAS,CAACwD,cAAc,CAAC;UAC/CC,IAAI,EAAEL,QAAQ;UACdM,OAAO,EAAE/C;QACX,CAAC,CAAC;QAEF,IAAIsB,UAAU,EAAE;UACd;QACF;QAEA,IAAM0B,OAAO,GAAG,IAAInC,GAAG,CAAwC,CAAC;QAChE+B,SAAS,CAACE,IAAI,CAACG,OAAO,CAAC,CAACC,GAAG,EAAEC,CAAC,KAAK;UACjC,IAAMC,QAAQ,GAAGxB,UAAU,CAACuB,CAAC,CAAC;UAC9B,IAAME,IAAI,GAAG5D,cAAc,CAACyD,GAAG,CAAC;UAChCF,OAAO,CAACM,GAAG,CAACF,QAAQ,EAAE;YACpBlC,GAAG,EAAEjE,kBAAkB,CAACmG,QAAQ,CAAC;YACjCC;UACF,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,IAAI,CAAC/B,UAAU,EAAE;UACf;UACAN,cAAc,CAACiC,OAAO,CAAC/B,GAAG,IACxBT,kBAAkB,CAACK,OAAO,CAACyC,GAAG,CAACnC,MAAM,CAACF,GAAG,CAAC,CAC5C,CAAC;UACDN,uBAAuB,CAAC4C,IAAI,IAAI;YAC9B,IAAMC,MAAM,GAAG,IAAI5C,GAAG,CAAC2C,IAAI,CAAC;YAC5BR,OAAO,CAACC,OAAO,CAAC,CAACS,KAAK,EAAExC,GAAG,KAAKuC,MAAM,CAACH,GAAG,CAACpC,GAAG,EAAEwC,KAAK,CAAC,CAAC;YACvD,OAAOD,MAAM;UACf,CAAC,CAAC;QACJ;MACF,CAAC,CAAC,OAAOE,GAAG,EAAE;QACZ9F,GAAG,CAAC+F,KAAK,CAAC,wCAAwC,EAAED,GAAG,CAAC;MAC1D;IACF,CAAC,EAAE,CAAC;IAEJ,OAAO,MAAM;MACXrC,UAAU,GAAG,IAAI;IACnB,CAAC;EACH,CAAC,EACD,CACEhB,uBAAuB,EACvBjB,SAAS,EACTjB,SAAS,EACT2B,UAAU,EACVD,EAAE,EACFL,cAAc,EACdO,eAAe,CAEnB,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA,IAAM6D,aAAa,GAAG/G,MAAM,CAAsB,IAAI+D,GAAG,CAAC,CAAC,CAAC;EAC5D,IAAM,CAACiD,kBAAkB,EAAEC,qBAAqB,CAAC,GAAGhH,QAAQ,CAE1D,IAAI8D,GAAG,CAAC,CAAC,CAAC;;EAEZ;EACA;EACA,IAAMmD,eAAe,GAAGnH,OAAO,CAAC,MAAM;IACpC,IAAI8D,oBAAoB,CAACsD,IAAI,KAAK,CAAC,EAAE;MACnC,OAAOrE,YAAY,CAACsE,KAAK;IAC3B;IAEA,OAAOtE,YAAY,CAACsE,KAAK,CAACnC,GAAG,CAAC,CAACsB,IAAI,EAAEpB,KAAK,KAAK;MAC7C,IAAIoB,IAAI,CAACA,IAAI,IAAI,IAAI,EAAE;QACrB,IAAMc,YAAY,GAAGxD,oBAAoB,CAACyD,GAAG,CAACnC,KAAK,CAAC;QACpD,IAAIkC,YAAY,IAAI,IAAI,EAAE;UACxB,OAAOA,YAAY;QACrB;MACF;MACA,OAAOd,IAAI;IACb,CAAC,CAAC;EACJ,CAAC,EAAE,CAACzD,YAAY,CAACsE,KAAK,EAAEvD,oBAAoB,CAAC,CAAC;;EAE9C;EACA/D,SAAS,CACP,SAASyH,gBAAgBA,CAAA,EAAG;IAAA,IAAAC,oBAAA;IAC1B,IAAMC,mBAAmB,IAAAD,oBAAA,GACvBzF,KAAK,CAAC0B,YAAY,cAAA+D,oBAAA,cAAAA,oBAAA,GAAIzF,KAAK,CAAC2B,mBAAmB;IAEjD,IAAIgE,cAAkC;IACtC,IAAID,mBAAmB,YAAYE,KAAK,EAAE;MACxCD,cAAc,GAAG,IAAI9D,GAAG,CAAC6D,mBAAmB,CAACxC,GAAG,CAACX,MAAM,CAAC,CAAC;IAC3D,CAAC,MAAM,IAAImD,mBAAmB,KAAK,KAAK,EAAE;MACxCC,cAAc,GAAG,IAAI;IACvB,CAAC,MAAM;MACLA,cAAc,GAAG,IAAI9D,GAAG,CAAS,CAAC;IACpC;IAEA,IAAIgE,YAAY,GAAG,KAAK;;IAExB;IACA;IACA;IACAV,eAAe,CAACf,OAAO,CAACI,IAAI,IAAI;MAC9B,IAAIA,IAAI,CAACA,IAAI,IAAI,IAAI,EAAE;QACrB,IAAMnC,GAAG,GAAGE,MAAM,CAACiC,IAAI,CAACA,IAAI,CAACnC,GAAG,CAAC;QACjC,IAAMyD,KAAK,GAAGtB,IAAI,CAACA,IAAI,CAACuB,SAAS;QACjC,IACED,KAAK,IAAI,IAAI,KACZH,cAAc,IAAI,IAAI,IAAIA,cAAc,CAACrD,GAAG,CAACD,GAAG,CAAC,CAAC,IACnD2C,aAAa,CAAC/C,OAAO,CAACsD,GAAG,CAAClD,GAAG,CAAC,KAAKyD,KAAK,EACxC;UACAd,aAAa,CAAC/C,OAAO,CAACwC,GAAG,CAACpC,GAAG,EAAEyD,KAAK,CAAC;UACrCD,YAAY,GAAG,IAAI;QACrB;MACF;IACF,CAAC,CAAC;IAEF,IAAIA,YAAY,EAAE;MAChBX,qBAAqB,CAAC,IAAIlD,GAAG,CAACgD,aAAa,CAAC/C,OAAO,CAAC,CAAC;IACvD;EACF,CAAC,EACD,CAACkD,eAAe,EAAEnF,KAAK,CAAC0B,YAAY,EAAE1B,KAAK,CAAC2B,mBAAmB,CACjE,CAAC;EAED,IAAMqE,yBAAyB,GAAGlI,WAAW,CAC1CmI,IAAmB,IAAW;IAAA,IAAAC,KAAA;IAC7B,CAAAA,KAAA,GAACpG,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAIC,iBAAiB,cAAAmG,KAAA,eAA9BA,KAAA,CAAkCD,IAAI,CAAC;EACzC,CAAC,EACD,CAACnG,QAAQ,EAAEC,iBAAiB,CAC9B,CAAC;EAED,OAAAoG,aAAA,CAAAA,aAAA,KACKnG,KAAK;IACRmF,eAAe;IACfF,kBAAkB;IAClBmB,aAAa,EAAExG,cAAc,IAAI,IAAI;IACrCE,QAAQ,EAAEkG,yBAAyB;IACnCnF,QAAQ;IACRC;EAAkB;AAEtB;AAEA,eAAe5B,mBAAmB","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/jsapi-components",
3
- "version": "1.20.0",
3
+ "version": "1.21.1",
4
4
  "description": "Deephaven JSAPI Components",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,12 +22,12 @@
22
22
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
23
23
  },
24
24
  "dependencies": {
25
- "@deephaven/components": "^1.20.0",
26
- "@deephaven/jsapi-bootstrap": "^1.20.0",
25
+ "@deephaven/components": "^1.21.1",
26
+ "@deephaven/jsapi-bootstrap": "^1.21.1",
27
27
  "@deephaven/jsapi-types": "^1.0.0-dev0.40.4",
28
28
  "@deephaven/jsapi-utils": "^1.16.0",
29
29
  "@deephaven/log": "^1.8.0",
30
- "@deephaven/react-hooks": "^1.14.0",
30
+ "@deephaven/react-hooks": "^1.21.1",
31
31
  "@deephaven/utils": "^1.10.0",
32
32
  "@types/js-cookie": "^3.0.3",
33
33
  "classnames": "^2.3.2",
@@ -50,5 +50,5 @@
50
50
  "publishConfig": {
51
51
  "access": "public"
52
52
  },
53
- "gitHead": "8450735e2c855217cb5a6fa4ea0b1b3fda57221c"
53
+ "gitHead": "1b42d0daee02a340363c972ffb8fffce6da56968"
54
54
  }