@deephaven/components 0.72.1-beta.4 → 0.72.1-core-plugins.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/css/BaseStyleSheet.css.map +1 -1
- package/dist/BasicModal.js +2 -2
- package/dist/BasicModal.js.map +1 -1
- package/dist/Button.d.ts +1 -1
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js +12 -2
- package/dist/Button.js.map +1 -1
- package/dist/Checkbox.js +2 -2
- package/dist/Checkbox.js.map +1 -1
- package/dist/ComboBox.css.map +1 -1
- package/dist/ComponentUtils.d.ts +34 -0
- package/dist/ComponentUtils.d.ts.map +1 -0
- package/dist/ComponentUtils.js +49 -0
- package/dist/ComponentUtils.js.map +1 -0
- package/dist/CustomTimeSelect.css.map +1 -1
- package/dist/DateTimeInput.d.ts +3 -3
- package/dist/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput.js +1 -1
- package/dist/DateTimeInput.js.map +1 -1
- package/dist/DraggableItemList.css.map +1 -1
- package/dist/ErrorView.css +77 -0
- package/dist/ErrorView.css.map +1 -0
- package/dist/ErrorView.d.ts +16 -0
- package/dist/ErrorView.d.ts.map +1 -0
- package/dist/ErrorView.js +73 -0
- package/dist/ErrorView.js.map +1 -0
- package/dist/HierarchicalCheckboxMenu.css.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +1 -1
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/LoadingOverlay.css +2 -1
- package/dist/LoadingOverlay.css.map +1 -1
- package/dist/RadioGroup.js +2 -2
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioItem.js +2 -2
- package/dist/RadioItem.js.map +1 -1
- package/dist/SearchInput.css.map +1 -1
- package/dist/SearchableCombobox.d.ts +2 -2
- package/dist/SearchableCombobox.d.ts.map +1 -1
- package/dist/SearchableCombobox.js.map +1 -1
- package/dist/Select.d.ts +1 -1
- package/dist/SocketedButton.d.ts.map +1 -1
- package/dist/SocketedButton.js +12 -2
- package/dist/SocketedButton.js.map +1 -1
- package/dist/{ButtonGroup.d.ts → SplitButtonGroup.d.ts} +5 -5
- package/dist/SplitButtonGroup.d.ts.map +1 -0
- package/dist/{ButtonGroup.js → SplitButtonGroup.js} +6 -6
- package/dist/SplitButtonGroup.js.map +1 -0
- package/dist/TimeSlider.css.map +1 -1
- package/dist/TimeSlider.module.css.map +1 -1
- package/dist/XComponent.d.ts +38 -0
- package/dist/XComponent.d.ts.map +1 -0
- package/dist/XComponent.js +70 -0
- package/dist/XComponent.js.map +1 -0
- package/dist/XComponentMap.d.ts +15 -0
- package/dist/XComponentMap.d.ts.map +1 -0
- package/dist/XComponentMap.js +20 -0
- package/dist/XComponentMap.js.map +1 -0
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/navigation/MenuItem.css.map +1 -1
- package/dist/navigation/NavTab.d.ts.map +1 -1
- package/dist/navigation/NavTab.js +28 -7
- package/dist/navigation/NavTab.js.map +1 -1
- package/dist/navigation/NavTabList.css.map +1 -1
- package/dist/navigation/NavTabList.d.ts +5 -0
- package/dist/navigation/NavTabList.d.ts.map +1 -1
- package/dist/navigation/NavTabList.js.map +1 -1
- package/dist/spectrum/ActionGroup.d.ts +14 -0
- package/dist/spectrum/ActionGroup.d.ts.map +1 -0
- package/dist/spectrum/ActionGroup.js +42 -0
- package/dist/spectrum/ActionGroup.js.map +1 -0
- package/dist/spectrum/ActionMenu.d.ts +15 -0
- package/dist/spectrum/ActionMenu.d.ts.map +1 -0
- package/dist/spectrum/ActionMenu.js +35 -0
- package/dist/spectrum/ActionMenu.js.map +1 -0
- package/dist/spectrum/Heading.d.ts +4 -1
- package/dist/spectrum/Heading.d.ts.map +1 -1
- package/dist/spectrum/Heading.js +5 -3
- package/dist/spectrum/Heading.js.map +1 -1
- package/dist/spectrum/ItemContent.d.ts +15 -0
- package/dist/spectrum/ItemContent.d.ts.map +1 -0
- package/dist/spectrum/{picker/PickerItemContent.js → ItemContent.js} +44 -19
- package/dist/spectrum/ItemContent.js.map +1 -0
- package/dist/spectrum/ItemTooltip.d.ts +12 -0
- package/dist/spectrum/ItemTooltip.d.ts.map +1 -0
- package/dist/spectrum/ItemTooltip.js +30 -0
- package/dist/spectrum/ItemTooltip.js.map +1 -0
- package/dist/spectrum/ListActionGroup.d.ts +19 -0
- package/dist/spectrum/ListActionGroup.d.ts.map +1 -0
- package/dist/spectrum/ListActionGroup.js +9 -0
- package/dist/spectrum/ListActionGroup.js.map +1 -0
- package/dist/spectrum/ListActionMenu.d.ts +19 -0
- package/dist/spectrum/ListActionMenu.d.ts.map +1 -0
- package/dist/spectrum/ListActionMenu.js +9 -0
- package/dist/spectrum/ListActionMenu.js.map +1 -0
- package/dist/spectrum/Text.d.ts +4 -1
- package/dist/spectrum/Text.d.ts.map +1 -1
- package/dist/spectrum/Text.js +5 -4
- package/dist/spectrum/Text.js.map +1 -1
- package/dist/spectrum/View.d.ts +20 -3
- package/dist/spectrum/View.d.ts.map +1 -1
- package/dist/spectrum/View.js +47 -10
- package/dist/spectrum/View.js.map +1 -1
- package/dist/spectrum/buttons.d.ts +1 -1
- package/dist/spectrum/buttons.d.ts.map +1 -1
- package/dist/spectrum/buttons.js +3 -1
- package/dist/spectrum/buttons.js.map +1 -1
- package/dist/spectrum/collections.d.ts +1 -1
- package/dist/spectrum/collections.d.ts.map +1 -1
- package/dist/spectrum/collections.js +12 -1
- package/dist/spectrum/collections.js.map +1 -1
- package/dist/spectrum/comboBox/ComboBox.d.ts +17 -0
- package/dist/spectrum/comboBox/ComboBox.d.ts.map +1 -0
- package/dist/spectrum/comboBox/ComboBox.js +44 -0
- package/dist/spectrum/comboBox/ComboBox.js.map +1 -0
- package/dist/spectrum/comboBox/ComboBoxNormalized.d.ts +15 -0
- package/dist/spectrum/comboBox/ComboBoxNormalized.d.ts.map +1 -0
- package/dist/spectrum/comboBox/ComboBoxNormalized.js +42 -0
- package/dist/spectrum/comboBox/ComboBoxNormalized.js.map +1 -0
- package/dist/spectrum/comboBox/index.d.ts +3 -0
- package/dist/spectrum/comboBox/index.d.ts.map +1 -0
- package/dist/spectrum/comboBox/index.js +3 -0
- package/dist/spectrum/comboBox/index.js.map +1 -0
- package/dist/spectrum/forms.d.ts +2 -1
- package/dist/spectrum/forms.d.ts.map +1 -1
- package/dist/spectrum/forms.js +1 -1
- package/dist/spectrum/forms.js.map +1 -1
- package/dist/spectrum/icons.d.ts +2 -0
- package/dist/spectrum/icons.d.ts.map +1 -0
- package/dist/spectrum/icons.js +3 -0
- package/dist/spectrum/icons.js.map +1 -0
- package/dist/spectrum/index.d.ts +9 -1
- package/dist/spectrum/index.d.ts.map +1 -1
- package/dist/spectrum/index.js +9 -1
- package/dist/spectrum/index.js.map +1 -1
- package/dist/spectrum/listView/ListView.d.ts +14 -0
- package/dist/spectrum/listView/ListView.d.ts.map +1 -0
- package/dist/spectrum/listView/ListView.js +43 -0
- package/dist/spectrum/listView/ListView.js.map +1 -0
- package/dist/spectrum/listView/ListViewNormalized.d.ts +23 -0
- package/dist/spectrum/listView/ListViewNormalized.d.ts.map +1 -0
- package/dist/spectrum/listView/ListViewNormalized.js +82 -0
- package/dist/spectrum/listView/ListViewNormalized.js.map +1 -0
- package/dist/spectrum/listView/ListViewWrapper.css +48 -0
- package/dist/spectrum/listView/ListViewWrapper.css.map +1 -0
- package/dist/spectrum/listView/ListViewWrapper.d.ts +21 -0
- package/dist/spectrum/listView/ListViewWrapper.d.ts.map +1 -0
- package/dist/spectrum/listView/ListViewWrapper.js +71 -0
- package/dist/spectrum/listView/ListViewWrapper.js.map +1 -0
- package/dist/spectrum/listView/index.d.ts +4 -0
- package/dist/spectrum/listView/index.d.ts.map +1 -0
- package/dist/spectrum/listView/index.js +4 -0
- package/dist/spectrum/listView/index.js.map +1 -0
- package/dist/spectrum/picker/Picker.d.ts +17 -31
- package/dist/spectrum/picker/Picker.d.ts.map +1 -1
- package/dist/spectrum/picker/Picker.js +31 -130
- package/dist/spectrum/picker/Picker.js.map +1 -1
- package/dist/spectrum/picker/PickerNormalized.d.ts +10 -0
- package/dist/spectrum/picker/PickerNormalized.d.ts.map +1 -0
- package/dist/spectrum/picker/PickerNormalized.js +37 -0
- package/dist/spectrum/picker/PickerNormalized.js.map +1 -0
- package/dist/spectrum/picker/PickerProps.d.ts +64 -0
- package/dist/spectrum/picker/PickerProps.d.ts.map +1 -0
- package/dist/spectrum/picker/PickerProps.js +2 -0
- package/dist/spectrum/picker/PickerProps.js.map +1 -0
- package/dist/spectrum/picker/index.d.ts +6 -1
- package/dist/spectrum/picker/index.d.ts.map +1 -1
- package/dist/spectrum/picker/index.js +6 -1
- package/dist/spectrum/picker/index.js.map +1 -1
- package/dist/spectrum/picker/useMultiRef.d.ts +9 -0
- package/dist/spectrum/picker/useMultiRef.d.ts.map +1 -0
- package/dist/spectrum/picker/useMultiRef.js +25 -0
- package/dist/spectrum/picker/useMultiRef.js.map +1 -0
- package/dist/spectrum/picker/usePickerItemScale.d.ts +9 -0
- package/dist/spectrum/picker/usePickerItemScale.d.ts.map +1 -0
- package/dist/spectrum/picker/usePickerItemScale.js +17 -0
- package/dist/spectrum/picker/usePickerItemScale.js.map +1 -0
- package/dist/spectrum/picker/usePickerNormalizedProps.d.ts +27 -0
- package/dist/spectrum/picker/usePickerNormalizedProps.d.ts.map +1 -0
- package/dist/spectrum/picker/usePickerNormalizedProps.js +101 -0
- package/dist/spectrum/picker/usePickerNormalizedProps.js.map +1 -0
- package/dist/spectrum/picker/usePickerProps.d.ts +28 -0
- package/dist/spectrum/picker/usePickerProps.d.ts.map +1 -0
- package/dist/spectrum/picker/usePickerProps.js +75 -0
- package/dist/spectrum/picker/usePickerProps.js.map +1 -0
- package/dist/spectrum/picker/usePickerScrollOnOpen.d.ts +22 -0
- package/dist/spectrum/picker/usePickerScrollOnOpen.d.ts.map +1 -0
- package/dist/spectrum/picker/usePickerScrollOnOpen.js +33 -0
- package/dist/spectrum/picker/usePickerScrollOnOpen.js.map +1 -0
- package/dist/spectrum/shared.d.ts +15 -9
- package/dist/spectrum/shared.d.ts.map +1 -1
- package/dist/spectrum/shared.js +16 -1
- package/dist/spectrum/shared.js.map +1 -1
- package/dist/spectrum/utils/index.d.ts +7 -0
- package/dist/spectrum/utils/index.d.ts.map +1 -1
- package/dist/spectrum/utils/index.js +7 -0
- package/dist/spectrum/utils/index.js.map +1 -1
- package/dist/spectrum/utils/itemUtils.d.ts +80 -27
- package/dist/spectrum/utils/itemUtils.d.ts.map +1 -1
- package/dist/spectrum/utils/itemUtils.js +106 -111
- package/dist/spectrum/utils/itemUtils.js.map +1 -1
- package/dist/spectrum/utils/itemWrapperUtils.d.ts +28 -0
- package/dist/spectrum/utils/itemWrapperUtils.d.ts.map +1 -0
- package/dist/spectrum/utils/itemWrapperUtils.js +111 -0
- package/dist/spectrum/utils/itemWrapperUtils.js.map +1 -0
- package/dist/spectrum/utils/propsUtils.d.ts +14 -0
- package/dist/spectrum/utils/propsUtils.d.ts.map +1 -0
- package/dist/spectrum/utils/propsUtils.js +93 -0
- package/dist/spectrum/utils/propsUtils.js.map +1 -0
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.d.ts +19 -0
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.d.ts.map +1 -0
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js +31 -0
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js.map +1 -0
- package/dist/spectrum/utils/useRenderNormalizedItem.d.ts +25 -0
- package/dist/spectrum/utils/useRenderNormalizedItem.d.ts.map +1 -0
- package/dist/spectrum/utils/useRenderNormalizedItem.js +87 -0
- package/dist/spectrum/utils/useRenderNormalizedItem.js.map +1 -0
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.d.ts +10 -0
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.d.ts.map +1 -0
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js +27 -0
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js.map +1 -0
- package/dist/spectrum/utils/useStringifiedMultiSelection.d.ts +43 -0
- package/dist/spectrum/utils/useStringifiedMultiSelection.d.ts.map +1 -0
- package/dist/spectrum/utils/useStringifiedMultiSelection.js +53 -0
- package/dist/spectrum/utils/useStringifiedMultiSelection.js.map +1 -0
- package/dist/spectrum/utils/useStringifiedSelection.d.ts +33 -0
- package/dist/spectrum/utils/useStringifiedSelection.d.ts.map +1 -0
- package/dist/spectrum/utils/useStringifiedSelection.js +50 -0
- package/dist/spectrum/utils/useStringifiedSelection.js.map +1 -0
- package/dist/theme/SpectrumThemeProvider.js +2 -2
- package/dist/theme/SpectrumThemeProvider.js.map +1 -1
- package/dist/theme/index.d.ts +1 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -0
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/theme-spectrum/theme-spectrum-overrides.css +1 -1
- package/dist/theme/theme-spectrum/theme-spectrum-overrides.css.map +1 -1
- package/dist/theme/useSpectrumThemeProvider.d.ts +4 -0
- package/dist/theme/useSpectrumThemeProvider.d.ts.map +1 -0
- package/dist/theme/useSpectrumThemeProvider.js +4 -0
- package/dist/theme/useSpectrumThemeProvider.js.map +1 -0
- package/package.json +11 -10
- package/scss/new_variables.scss +1 -1
- package/scss/util.scss +4 -0
- package/dist/ButtonGroup.d.ts.map +0 -1
- package/dist/ButtonGroup.js.map +0 -1
- package/dist/ButtonOld.d.ts +0 -12
- package/dist/ButtonOld.d.ts.map +0 -1
- package/dist/ButtonOld.js +0 -43
- package/dist/ButtonOld.js.map +0 -1
- package/dist/ComboBox.d.ts +0 -120
- package/dist/ComboBox.d.ts.map +0 -1
- package/dist/ComboBox.js +0 -497
- package/dist/ComboBox.js.map +0 -1
- package/dist/spectrum/picker/PickerItemContent.d.ts +0 -11
- package/dist/spectrum/picker/PickerItemContent.d.ts.map +0 -1
- package/dist/spectrum/picker/PickerItemContent.js.map +0 -1
- package/dist/spectrum/pickers.d.ts +0 -2
- package/dist/spectrum/pickers.d.ts.map +0 -1
- package/dist/spectrum/pickers.js +0 -2
- package/dist/spectrum/pickers.js.map +0 -1
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
var _excluded = ["normalizedItems", "tooltip", "selectedKeys", "defaultSelectedKeys", "disabledKeys", "showItemIcons", "actions", "UNSAFE_className", "onChange", "onSelectionChange"];
|
|
2
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
6
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
8
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
9
|
+
import { useMemo } from 'react';
|
|
10
|
+
import cl from 'classnames';
|
|
11
|
+
import { normalizeTooltipOptions, useRenderNormalizedItem, useStringifiedMultiSelection } from "../utils/index.js";
|
|
12
|
+
import { ListViewWrapper } from "./ListViewWrapper.js";
|
|
13
|
+
import { createElement as _createElement } from "react";
|
|
14
|
+
/**
|
|
15
|
+
* ListView supporting normalized item data. This component mostly exists to
|
|
16
|
+
* decouple some of the logic needed to support table data. Specifically it
|
|
17
|
+
* handles item rendering configurations as well as converting selection keys
|
|
18
|
+
* to / from strings. This makes it easier to test logic in isolation without
|
|
19
|
+
* a dependency on JS apis (e.g. in the Styleguide).
|
|
20
|
+
*
|
|
21
|
+
* Note that This component will usually not be used directly. Instead, it is
|
|
22
|
+
* recommended to use
|
|
23
|
+
* - `@deephaven/components`'s `ListView` for non-table data sources
|
|
24
|
+
* - `@deephaven/jsapi-components`'s `ListView` for table data sources
|
|
25
|
+
*/
|
|
26
|
+
export function ListViewNormalized(_ref) {
|
|
27
|
+
var {
|
|
28
|
+
normalizedItems,
|
|
29
|
+
tooltip = true,
|
|
30
|
+
selectedKeys,
|
|
31
|
+
defaultSelectedKeys,
|
|
32
|
+
disabledKeys,
|
|
33
|
+
showItemIcons,
|
|
34
|
+
actions,
|
|
35
|
+
UNSAFE_className,
|
|
36
|
+
onChange,
|
|
37
|
+
onSelectionChange
|
|
38
|
+
} = _ref,
|
|
39
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
40
|
+
var tooltipOptions = useMemo(() => normalizeTooltipOptions(tooltip, 'bottom'), [tooltip]);
|
|
41
|
+
var renderNormalizedItem = useRenderNormalizedItem({
|
|
42
|
+
itemIconSlot: 'illustration',
|
|
43
|
+
// Descriptions introduce variable item heights which throws off setting
|
|
44
|
+
// viewport on windowed data. For now not going to implement description
|
|
45
|
+
// support in Picker.
|
|
46
|
+
// https://github.com/deephaven/web-client-ui/issues/1958
|
|
47
|
+
showItemDescriptions: false,
|
|
48
|
+
showItemIcons,
|
|
49
|
+
tooltipOptions,
|
|
50
|
+
actions
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Spectrum doesn't re-render if only the `renderNormalizedItems` function
|
|
54
|
+
// changes, so we create a key from its dependencies that can be used to force
|
|
55
|
+
// re-render.
|
|
56
|
+
var forceRerenderKey = "".concat(showItemIcons, "-").concat(tooltipOptions === null || tooltipOptions === void 0 ? void 0 : tooltipOptions.placement);
|
|
57
|
+
var {
|
|
58
|
+
selectedStringKeys,
|
|
59
|
+
defaultSelectedStringKeys,
|
|
60
|
+
disabledStringKeys,
|
|
61
|
+
onStringSelectionChange
|
|
62
|
+
} = useStringifiedMultiSelection({
|
|
63
|
+
normalizedItems,
|
|
64
|
+
selectedKeys,
|
|
65
|
+
defaultSelectedKeys,
|
|
66
|
+
disabledKeys,
|
|
67
|
+
onChange: onChange !== null && onChange !== void 0 ? onChange : onSelectionChange
|
|
68
|
+
});
|
|
69
|
+
return /*#__PURE__*/_createElement(ListViewWrapper
|
|
70
|
+
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
71
|
+
, _objectSpread(_objectSpread({}, props), {}, {
|
|
72
|
+
UNSAFE_className: cl('dh-list-view-normalized', UNSAFE_className),
|
|
73
|
+
key: forceRerenderKey,
|
|
74
|
+
items: normalizedItems,
|
|
75
|
+
selectedKeys: selectedStringKeys,
|
|
76
|
+
defaultSelectedKeys: defaultSelectedStringKeys,
|
|
77
|
+
disabledKeys: disabledStringKeys,
|
|
78
|
+
onSelectionChange: onStringSelectionChange
|
|
79
|
+
}), renderNormalizedItem);
|
|
80
|
+
}
|
|
81
|
+
export default ListViewNormalized;
|
|
82
|
+
//# sourceMappingURL=ListViewNormalized.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListViewNormalized.js","names":["useMemo","cl","normalizeTooltipOptions","useRenderNormalizedItem","useStringifiedMultiSelection","ListViewWrapper","createElement","_createElement","ListViewNormalized","_ref","normalizedItems","tooltip","selectedKeys","defaultSelectedKeys","disabledKeys","showItemIcons","actions","UNSAFE_className","onChange","onSelectionChange","props","_objectWithoutProperties","_excluded","tooltipOptions","renderNormalizedItem","itemIconSlot","showItemDescriptions","forceRerenderKey","concat","placement","selectedStringKeys","defaultSelectedStringKeys","disabledStringKeys","onStringSelectionChange","_objectSpread","key","items"],"sources":["../../../src/spectrum/listView/ListViewNormalized.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport cl from 'classnames';\nimport {\n ListActions,\n NormalizedItem,\n normalizeTooltipOptions,\n useRenderNormalizedItem,\n useStringifiedMultiSelection,\n} from '../utils';\nimport type { ListViewProps } from './ListView';\nimport { ListViewWrapper } from './ListViewWrapper';\n\nexport interface ListViewNormalizedProps\n extends Omit<ListViewProps, 'children'> {\n normalizedItems: NormalizedItem[];\n showItemIcons: boolean;\n actions?: ListActions<unknown>;\n}\n\n/**\n * ListView supporting normalized item data. This component mostly exists to\n * decouple some of the logic needed to support table data. Specifically it\n * handles item rendering configurations as well as converting selection keys\n * to / from strings. This makes it easier to test logic in isolation without\n * a dependency on JS apis (e.g. in the Styleguide).\n *\n * Note that This component will usually not be used directly. Instead, it is\n * recommended to use\n * - `@deephaven/components`'s `ListView` for non-table data sources\n * - `@deephaven/jsapi-components`'s `ListView` for table data sources\n */\nexport function ListViewNormalized({\n normalizedItems,\n tooltip = true,\n selectedKeys,\n defaultSelectedKeys,\n disabledKeys,\n showItemIcons,\n actions,\n UNSAFE_className,\n onChange,\n onSelectionChange,\n ...props\n}: ListViewNormalizedProps): JSX.Element {\n const tooltipOptions = useMemo(\n () => normalizeTooltipOptions(tooltip, 'bottom'),\n [tooltip]\n );\n\n const renderNormalizedItem = useRenderNormalizedItem({\n itemIconSlot: 'illustration',\n // Descriptions introduce variable item heights which throws off setting\n // viewport on windowed data. For now not going to implement description\n // support in Picker.\n // https://github.com/deephaven/web-client-ui/issues/1958\n showItemDescriptions: false,\n showItemIcons,\n tooltipOptions,\n actions,\n });\n\n // Spectrum doesn't re-render if only the `renderNormalizedItems` function\n // changes, so we create a key from its dependencies that can be used to force\n // re-render.\n const forceRerenderKey = `${showItemIcons}-${tooltipOptions?.placement}`;\n\n const {\n selectedStringKeys,\n defaultSelectedStringKeys,\n disabledStringKeys,\n onStringSelectionChange,\n } = useStringifiedMultiSelection({\n normalizedItems,\n selectedKeys,\n defaultSelectedKeys,\n disabledKeys,\n onChange: onChange ?? onSelectionChange,\n });\n\n return (\n <ListViewWrapper\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n UNSAFE_className={cl('dh-list-view-normalized', UNSAFE_className)}\n key={forceRerenderKey}\n items={normalizedItems}\n selectedKeys={selectedStringKeys}\n defaultSelectedKeys={defaultSelectedStringKeys}\n disabledKeys={disabledStringKeys}\n onSelectionChange={onStringSelectionChange}\n >\n {renderNormalizedItem}\n </ListViewWrapper>\n );\n}\n\nexport default ListViewNormalized;\n"],"mappings":";;;;;;;;AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,OAAOC,EAAE,MAAM,YAAY;AAAC,SAI1BC,uBAAuB,EACvBC,uBAAuB,EACvBC,4BAA4B;AAAA,SAGrBC,eAAe;AAAA,SAAAC,aAAA,IAAAC,cAAA;AASxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAAC,IAAA,EAYO;EAAA,IAZN;MACjCC,eAAe;MACfC,OAAO,GAAG,IAAI;MACdC,YAAY;MACZC,mBAAmB;MACnBC,YAAY;MACZC,aAAa;MACbC,OAAO;MACPC,gBAAgB;MAChBC,QAAQ;MACRC;IAEuB,CAAC,GAAAV,IAAA;IADrBW,KAAK,GAAAC,wBAAA,CAAAZ,IAAA,EAAAa,SAAA;EAER,IAAMC,cAAc,GAAGvB,OAAO,CAC5B,MAAME,uBAAuB,CAACS,OAAO,EAAE,QAAQ,CAAC,EAChD,CAACA,OAAO,CACV,CAAC;EAED,IAAMa,oBAAoB,GAAGrB,uBAAuB,CAAC;IACnDsB,YAAY,EAAE,cAAc;IAC5B;IACA;IACA;IACA;IACAC,oBAAoB,EAAE,KAAK;IAC3BX,aAAa;IACbQ,cAAc;IACdP;EACF,CAAC,CAAC;;EAEF;EACA;EACA;EACA,IAAMW,gBAAgB,MAAAC,MAAA,CAAMb,aAAa,OAAAa,MAAA,CAAIL,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEM,SAAS,CAAE;EAExE,IAAM;IACJC,kBAAkB;IAClBC,yBAAyB;IACzBC,kBAAkB;IAClBC;EACF,CAAC,GAAG7B,4BAA4B,CAAC;IAC/BM,eAAe;IACfE,YAAY;IACZC,mBAAmB;IACnBC,YAAY;IACZI,QAAQ,EAAEA,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAIC;EACxB,CAAC,CAAC;EAEF,oBACEZ,cAAA,CAACF;EACC;EAAA,EAAA6B,aAAA,CAAAA,aAAA,KACId,KAAK;IACTH,gBAAgB,EAAEhB,EAAE,CAAC,yBAAyB,EAAEgB,gBAAgB,CAAE;IAClEkB,GAAG,EAAER,gBAAiB;IACtBS,KAAK,EAAE1B,eAAgB;IACvBE,YAAY,EAAEkB,kBAAmB;IACjCjB,mBAAmB,EAAEkB,yBAA0B;IAC/CjB,YAAY,EAAEkB,kBAAmB;IACjCb,iBAAiB,EAAEc;EAAwB,IAE1CT,oBACc,CAAC;AAEtB;AAEA,eAAehB,kBAAkB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
.dh-list-view-wrapper {
|
|
2
|
+
--dh-list-view-item-icon-compact: 16px;
|
|
3
|
+
--dh-list-view-item-icon-regular: 18px;
|
|
4
|
+
--dh-list-view-item-icon-spacious: 24px;
|
|
5
|
+
height: 100%;
|
|
6
|
+
width: 100%;
|
|
7
|
+
position: relative;
|
|
8
|
+
}
|
|
9
|
+
.dh-list-view-wrapper > div {
|
|
10
|
+
position: absolute;
|
|
11
|
+
height: 100%;
|
|
12
|
+
width: 100%;
|
|
13
|
+
}
|
|
14
|
+
.dh-list-view-wrapper > div > div > div {
|
|
15
|
+
transition: none !important;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.dh-list-view-wrapper-scale-large {
|
|
19
|
+
--dh-list-view-item-icon-compact: 20px;
|
|
20
|
+
--dh-list-view-item-icon-regular: 24px;
|
|
21
|
+
--dh-list-view-item-icon-spacious: 30px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.dh-list-view-wrapper-density-compact svg[class*=spectrum-Icon] {
|
|
25
|
+
height: var(--dh-list-view-item-icon-compact);
|
|
26
|
+
width: var(--dh-list-view-item-icon-compact);
|
|
27
|
+
}
|
|
28
|
+
.dh-list-view-wrapper-density-compact button {
|
|
29
|
+
height: var(--dh-list-view-item-icon-compact);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.dh-list-view-wrapper-density-regular svg[class*=spectrum-Icon] {
|
|
33
|
+
height: var(--dh-list-view-item-icon-regular);
|
|
34
|
+
width: var(--dh-list-view-item-icon-regular);
|
|
35
|
+
}
|
|
36
|
+
.dh-list-view-wrapper-density-regular button {
|
|
37
|
+
height: var(--dh-list-view-item-icon-regular);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.dh-list-view-wrapper-density-spacious svg[class*=spectrum-Icon] {
|
|
41
|
+
height: var(--dh-list-view-item-icon-spacious);
|
|
42
|
+
width: var(--dh-list-view-item-icon-spacious);
|
|
43
|
+
}
|
|
44
|
+
.dh-list-view-wrapper-density-spacious button {
|
|
45
|
+
height: var(--dh-list-view-item-icon-spacious);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/*# sourceMappingURL=ListViewWrapper.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../src/spectrum/listView/ListViewWrapper.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EAGA;EACA;EACA;;AAEA;EAGE;EACA;EACA;;AACA;EAEE;;;AAKN;EACE;EACA;EACA;;;AAKA;EACE;EACA;;AAGF;EACE;;;AAMF;EACE;EACA;;AAGF;EACE;;;AAMF;EACE;EACA;;AAGF;EACE","file":"ListViewWrapper.css","sourcesContent":[".dh-list-view-wrapper {\n --dh-list-view-item-icon-compact: 16px;\n --dh-list-view-item-icon-regular: 18px;\n --dh-list-view-item-icon-spacious: 24px;\n\n // set the wrapper to grow to the size of the parent container\n height: 100%;\n width: 100%;\n position: relative;\n\n > div {\n // absolute position the list view to fill the wrapper\n // so that it will grow and shrink with the wrapper\n position: absolute;\n height: 100%;\n width: 100%;\n > div > div {\n // disable the transition on the list view items\n transition: none !important;\n }\n }\n}\n\n.dh-list-view-wrapper-scale-large {\n --dh-list-view-item-icon-compact: 20px;\n --dh-list-view-item-icon-regular: 24px;\n --dh-list-view-item-icon-spacious: 30px;\n}\n\n.dh-list-view-wrapper-density-compact {\n // Ensure icons don't change the item height\n svg[class*='spectrum-Icon'] {\n height: var(--dh-list-view-item-icon-compact);\n width: var(--dh-list-view-item-icon-compact);\n }\n // Ensure action buttons don't change the item height\n button {\n height: var(--dh-list-view-item-icon-compact);\n }\n}\n\n.dh-list-view-wrapper-density-regular {\n // Ensure icons don't change the item height\n svg[class*='spectrum-Icon'] {\n height: var(--dh-list-view-item-icon-regular);\n width: var(--dh-list-view-item-icon-regular);\n }\n // Ensure action buttons don't change the item height\n button {\n height: var(--dh-list-view-item-icon-regular);\n }\n}\n\n.dh-list-view-wrapper-density-spacious {\n // Ensure icons don't change the item height\n svg[class*='spectrum-Icon'] {\n height: var(--dh-list-view-item-icon-spacious);\n width: var(--dh-list-view-item-icon-spacious);\n }\n // Ensure action buttons don't change the item height\n button {\n height: var(--dh-list-view-item-icon-spacious);\n }\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { SpectrumListViewProps } from '@adobe/react-spectrum';
|
|
3
|
+
import './ListViewWrapper.scss';
|
|
4
|
+
export interface ListViewWrapperProps<T> extends SpectrumListViewProps<T> {
|
|
5
|
+
/** Handler that is called when the picker is scrolled. */
|
|
6
|
+
onScroll?: (event: Event) => void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Helper component to wrap a ListView with the appropriate styling + scroll
|
|
10
|
+
* handling. This is used by both the `@deephaven/components` `ListView` and
|
|
11
|
+
* the `@deephaven/jsapi-components` `ListView` (via `ListViewNormalized`) to
|
|
12
|
+
* ensure consistency.
|
|
13
|
+
*
|
|
14
|
+
* Note that This component will usually not be used directly. Instead, it is
|
|
15
|
+
* recommended to use
|
|
16
|
+
* - `@deephaven/components`'s `ListView` for non-table data sources
|
|
17
|
+
* - `@deephaven/jsapi-components`'s `ListView` for table data sources
|
|
18
|
+
*/
|
|
19
|
+
export declare function ListViewWrapper<T>(props: ListViewWrapperProps<T>): JSX.Element;
|
|
20
|
+
export default ListViewWrapper;
|
|
21
|
+
//# sourceMappingURL=ListViewWrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListViewWrapper.d.ts","sourceRoot":"","sources":["../../../src/spectrum/listView/ListViewWrapper.tsx"],"names":[],"mappings":";AAAA,OAAO,EAEL,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAW/B,OAAO,wBAAwB,CAAC;AAEhC,MAAM,WAAW,oBAAoB,CAAC,CAAC,CAAE,SAAQ,qBAAqB,CAAC,CAAC,CAAC;IACvE,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACnC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC7B,GAAG,CAAC,OAAO,CAoDb;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
var _excluded = ["onScroll"];
|
|
2
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
6
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
8
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
9
|
+
import { ListView as SpectrumListView } from '@adobe/react-spectrum';
|
|
10
|
+
import { extractSpectrumHTMLElement, useContentRect, useOnScrollRef } from '@deephaven/react-hooks';
|
|
11
|
+
import { EMPTY_FUNCTION } from '@deephaven/utils';
|
|
12
|
+
import cl from 'classnames';
|
|
13
|
+
import { useSpectrumThemeProvider } from "../../theme/index.js";
|
|
14
|
+
import { Flex } from "../layout.js";
|
|
15
|
+
import { separateSpectrumProps } from "../utils/index.js";
|
|
16
|
+
import "./ListViewWrapper.css";
|
|
17
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
|
+
/**
|
|
19
|
+
* Helper component to wrap a ListView with the appropriate styling + scroll
|
|
20
|
+
* handling. This is used by both the `@deephaven/components` `ListView` and
|
|
21
|
+
* the `@deephaven/jsapi-components` `ListView` (via `ListViewNormalized`) to
|
|
22
|
+
* ensure consistency.
|
|
23
|
+
*
|
|
24
|
+
* Note that This component will usually not be used directly. Instead, it is
|
|
25
|
+
* recommended to use
|
|
26
|
+
* - `@deephaven/components`'s `ListView` for non-table data sources
|
|
27
|
+
* - `@deephaven/jsapi-components`'s `ListView` for table data sources
|
|
28
|
+
*/
|
|
29
|
+
export function ListViewWrapper(props) {
|
|
30
|
+
var _styleProps$minHeight, _listViewProps$densit;
|
|
31
|
+
var {
|
|
32
|
+
ariaLabelProps,
|
|
33
|
+
componentProps,
|
|
34
|
+
styleProps
|
|
35
|
+
} = separateSpectrumProps(props);
|
|
36
|
+
var {
|
|
37
|
+
onScroll = EMPTY_FUNCTION
|
|
38
|
+
} = componentProps,
|
|
39
|
+
listViewProps = _objectWithoutProperties(componentProps, _excluded);
|
|
40
|
+
var {
|
|
41
|
+
scale
|
|
42
|
+
} = useSpectrumThemeProvider();
|
|
43
|
+
var scrollRef = useOnScrollRef(onScroll, extractSpectrumHTMLElement);
|
|
44
|
+
|
|
45
|
+
// Spectrum ListView crashes when it has zero height. Track the contentRect
|
|
46
|
+
// of the parent container and only render the ListView when it has a non-zero
|
|
47
|
+
// height. See https://github.com/adobe/react-spectrum/issues/6213
|
|
48
|
+
var {
|
|
49
|
+
ref: contentRectRef,
|
|
50
|
+
contentRect
|
|
51
|
+
} = useContentRect(extractSpectrumHTMLElement);
|
|
52
|
+
return /*#__PURE__*/_jsx(Flex, _objectSpread(_objectSpread({
|
|
53
|
+
direction: "column",
|
|
54
|
+
ref: contentRectRef
|
|
55
|
+
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
56
|
+
}, styleProps), {}, {
|
|
57
|
+
// Set min-height to 1px so that `ListView` is rendered whenever container
|
|
58
|
+
// is visible. This prevents the height from shrinking to zero as a result
|
|
59
|
+
// of a parent grid or flex container calculating content sizes. The
|
|
60
|
+
// container height can still be zero when it is not being displayed such
|
|
61
|
+
// as when one of its parents have `display: none`.
|
|
62
|
+
minHeight: (_styleProps$minHeight = styleProps.minHeight) !== null && _styleProps$minHeight !== void 0 ? _styleProps$minHeight : 1,
|
|
63
|
+
UNSAFE_className: cl('dh-list-view-wrapper', "dh-list-view-wrapper-density-".concat((_listViewProps$densit = listViewProps.density) !== null && _listViewProps$densit !== void 0 ? _listViewProps$densit : 'regular'), "dh-list-view-wrapper-scale-".concat(scale), styleProps.UNSAFE_className),
|
|
64
|
+
children: contentRect.height === 0 ? null : /*#__PURE__*/_jsx(SpectrumListView, _objectSpread(_objectSpread({
|
|
65
|
+
ref: scrollRef
|
|
66
|
+
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
67
|
+
}, ariaLabelProps), listViewProps))
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
export default ListViewWrapper;
|
|
71
|
+
//# sourceMappingURL=ListViewWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListViewWrapper.js","names":["ListView","SpectrumListView","extractSpectrumHTMLElement","useContentRect","useOnScrollRef","EMPTY_FUNCTION","cl","useSpectrumThemeProvider","Flex","separateSpectrumProps","jsx","_jsx","ListViewWrapper","props","_styleProps$minHeight","_listViewProps$densit","ariaLabelProps","componentProps","styleProps","onScroll","listViewProps","_objectWithoutProperties","_excluded","scale","scrollRef","ref","contentRectRef","contentRect","_objectSpread","direction","minHeight","UNSAFE_className","concat","density","children","height"],"sources":["../../../src/spectrum/listView/ListViewWrapper.tsx"],"sourcesContent":["import {\n ListView as SpectrumListView,\n SpectrumListViewProps,\n} from '@adobe/react-spectrum';\nimport {\n extractSpectrumHTMLElement,\n useContentRect,\n useOnScrollRef,\n} from '@deephaven/react-hooks';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport cl from 'classnames';\nimport { useSpectrumThemeProvider } from '../../theme';\nimport { Flex } from '../layout';\nimport { separateSpectrumProps } from '../utils';\nimport './ListViewWrapper.scss';\n\nexport interface ListViewWrapperProps<T> extends SpectrumListViewProps<T> {\n /** Handler that is called when the picker is scrolled. */\n onScroll?: (event: Event) => void;\n}\n\n/**\n * Helper component to wrap a ListView with the appropriate styling + scroll\n * handling. This is used by both the `@deephaven/components` `ListView` and\n * the `@deephaven/jsapi-components` `ListView` (via `ListViewNormalized`) to\n * ensure consistency.\n *\n * Note that This component will usually not be used directly. Instead, it is\n * recommended to use\n * - `@deephaven/components`'s `ListView` for non-table data sources\n * - `@deephaven/jsapi-components`'s `ListView` for table data sources\n */\nexport function ListViewWrapper<T>(\n props: ListViewWrapperProps<T>\n): JSX.Element {\n const { ariaLabelProps, componentProps, styleProps } =\n separateSpectrumProps(props);\n\n const { onScroll = EMPTY_FUNCTION, ...listViewProps } = componentProps;\n\n const { scale } = useSpectrumThemeProvider();\n\n const scrollRef = useOnScrollRef(onScroll, extractSpectrumHTMLElement);\n\n // Spectrum ListView crashes when it has zero height. Track the contentRect\n // of the parent container and only render the ListView when it has a non-zero\n // height. See https://github.com/adobe/react-spectrum/issues/6213\n const { ref: contentRectRef, contentRect } = useContentRect(\n extractSpectrumHTMLElement<HTMLDivElement>\n );\n\n return (\n <Flex\n direction=\"column\"\n ref={contentRectRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...styleProps}\n // Set min-height to 1px so that `ListView` is rendered whenever container\n // is visible. This prevents the height from shrinking to zero as a result\n // of a parent grid or flex container calculating content sizes. The\n // container height can still be zero when it is not being displayed such\n // as when one of its parents have `display: none`.\n minHeight={styleProps.minHeight ?? 1}\n UNSAFE_className={cl(\n 'dh-list-view-wrapper',\n `dh-list-view-wrapper-density-${listViewProps.density ?? 'regular'}`,\n `dh-list-view-wrapper-scale-${scale}`,\n styleProps.UNSAFE_className\n )}\n >\n {/**\n * Only render ListView if parent is visible. Some time in the future we\n * should consider using `checkVisibility()` once it has better browser\n * support.\n */}\n {contentRect.height === 0 ? null : (\n <SpectrumListView\n ref={scrollRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...ariaLabelProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...listViewProps}\n />\n )}\n </Flex>\n );\n}\n\nexport default ListViewWrapper;\n"],"mappings":";;;;;;;;AAAA,SACEA,QAAQ,IAAIC,gBAAgB,QAEvB,uBAAuB;AAC9B,SACEC,0BAA0B,EAC1BC,cAAc,EACdC,cAAc,QACT,wBAAwB;AAC/B,SAASC,cAAc,QAAQ,kBAAkB;AACjD,OAAOC,EAAE,MAAM,YAAY;AAAC,SACnBC,wBAAwB;AAAA,SACxBC,IAAI;AAAA,SACJC,qBAAqB;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAQ9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAC7BC,KAA8B,EACjB;EAAA,IAAAC,qBAAA,EAAAC,qBAAA;EACb,IAAM;IAAEC,cAAc;IAAEC,cAAc;IAAEC;EAAW,CAAC,GAClDT,qBAAqB,CAACI,KAAK,CAAC;EAE9B,IAAM;MAAEM,QAAQ,GAAGd;IAAiC,CAAC,GAAGY,cAAc;IAAhCG,aAAa,GAAAC,wBAAA,CAAKJ,cAAc,EAAAK,SAAA;EAEtE,IAAM;IAAEC;EAAM,CAAC,GAAGhB,wBAAwB,CAAC,CAAC;EAE5C,IAAMiB,SAAS,GAAGpB,cAAc,CAACe,QAAQ,EAAEjB,0BAA0B,CAAC;;EAEtE;EACA;EACA;EACA,IAAM;IAAEuB,GAAG,EAAEC,cAAc;IAAEC;EAAY,CAAC,GAAGxB,cAAc,CACzDD,0BACF,CAAC;EAED,oBACES,IAAA,CAACH,IAAI,EAAAoB,aAAA,CAAAA,aAAA;IACHC,SAAS,EAAC,QAAQ;IAClBJ,GAAG,EAAEC;IACL;EAAA,GACIR,UAAU;IACd;IACA;IACA;IACA;IACA;IACAY,SAAS,GAAAhB,qBAAA,GAAEI,UAAU,CAACY,SAAS,cAAAhB,qBAAA,cAAAA,qBAAA,GAAI,CAAE;IACrCiB,gBAAgB,EAAEzB,EAAE,CAClB,sBAAsB,kCAAA0B,MAAA,EAAAjB,qBAAA,GACUK,aAAa,CAACa,OAAO,cAAAlB,qBAAA,cAAAA,qBAAA,GAAI,SAAS,iCAAAiB,MAAA,CACpCT,KAAK,GACnCL,UAAU,CAACa,gBACb,CAAE;IAAAG,QAAA,EAODP,WAAW,CAACQ,MAAM,KAAK,CAAC,GAAG,IAAI,gBAC9BxB,IAAA,CAACV,gBAAgB,EAAA2B,aAAA,CAAAA,aAAA;MACfH,GAAG,EAAED;MACL;IAAA,GACIR,cAAc,GAEdI,aAAa,CAClB;EACF,EACG,CAAC;AAEX;AAEA,eAAeR,eAAe"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spectrum/listView/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/spectrum/listView/index.ts"],"sourcesContent":["export * from './ListView';\nexport * from './ListViewNormalized';\nexport * from './ListViewWrapper';\n"],"mappings":""}
|
|
@@ -1,37 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
children: ItemOrSection | ItemOrSection[] | NormalizedItem[];
|
|
5
|
-
/** Can be set to true or a TooltipOptions to enable item tooltips */
|
|
6
|
-
tooltip?: boolean | TooltipOptions;
|
|
7
|
-
/** The currently selected key in the collection (controlled). */
|
|
8
|
-
selectedKey?: ItemKey | null;
|
|
9
|
-
/** The initial selected key in the collection (uncontrolled). */
|
|
10
|
-
defaultSelectedKey?: ItemKey;
|
|
11
|
-
/** Function to retrieve initial scroll position when opening the picker */
|
|
12
|
-
getInitialScrollPosition?: () => Promise<number | null>;
|
|
13
|
-
/**
|
|
14
|
-
* Handler that is called when the selection change.
|
|
15
|
-
* Note that under the hood, this is just an alias for Spectrum's
|
|
16
|
-
* `onSelectionChange`. We are renaming for better consistency with other
|
|
17
|
-
* components.
|
|
18
|
-
*/
|
|
19
|
-
onChange?: (key: ItemKey) => void;
|
|
20
|
-
/** Handler that is called when the picker is scrolled. */
|
|
21
|
-
onScroll?: (event: Event) => void;
|
|
22
|
-
/**
|
|
23
|
-
* Handler that is called when the selection changes.
|
|
24
|
-
* @deprecated Use `onChange` instead
|
|
25
|
-
*/
|
|
26
|
-
onSelectionChange?: (key: ItemKey) => void;
|
|
27
|
-
} & Omit<NormalizedSpectrumPickerProps, 'children' | 'items' | 'onSelectionChange' | 'selectedKey' | 'defaultSelectedKey'>;
|
|
1
|
+
import { SpectrumPickerProps } from '@adobe/react-spectrum';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import type { NormalizedItem } from '../utils';
|
|
28
4
|
/**
|
|
29
5
|
* Picker component for selecting items from a list of items. Items can be
|
|
30
|
-
* provided via the `
|
|
31
|
-
*
|
|
32
|
-
*
|
|
6
|
+
* provided via the `children` prop. Each item can be a string, number, boolean,
|
|
7
|
+
* or a Spectrum <Item> element. The remaining props are just pass through props
|
|
8
|
+
* for the Spectrum Picker component.
|
|
33
9
|
* See https://react-spectrum.adobe.com/react-spectrum/Picker.html
|
|
34
10
|
*/
|
|
35
|
-
export declare
|
|
11
|
+
export declare const Picker: React.ForwardRefExoticComponent<Omit<SpectrumPickerProps<NormalizedItem>, "children" | "items" | "selectedKey" | "defaultSelectedKey" | "disabledKeys" | "onSelectionChange" | "defaultItems"> & {
|
|
12
|
+
children: import("../utils").ItemOrSection<unknown> | import("../utils").ItemOrSection<unknown>[];
|
|
13
|
+
tooltip?: boolean | import("../utils").TooltipOptions | undefined;
|
|
14
|
+
selectedKey?: import("../utils").ItemKey | null | undefined;
|
|
15
|
+
defaultSelectedKey?: import("../utils").ItemKey | undefined;
|
|
16
|
+
disabledKeys?: Iterable<import("../utils").ItemKey> | undefined;
|
|
17
|
+
onChange?: ((key: import("../utils").ItemKey | null) => void) | undefined;
|
|
18
|
+
onOpenChange?: ((isOpen: boolean) => void) | undefined;
|
|
19
|
+
onScroll?: ((event: Event) => void) | undefined;
|
|
20
|
+
onSelectionChange?: ((key: import("../utils").ItemKey | null) => void) | undefined;
|
|
21
|
+
} & React.RefAttributes<import("@react-types/shared").DOMRefValue<HTMLDivElement>>>;
|
|
36
22
|
export default Picker;
|
|
37
23
|
//# sourceMappingURL=Picker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Picker.d.ts","sourceRoot":"","sources":["../../../src/spectrum/picker/Picker.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Picker.d.ts","sourceRoot":"","sources":["../../../src/spectrum/picker/Picker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK/C;;;;;;GAMG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;mFAgCjB,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
var _excluded = ["
|
|
1
|
+
var _excluded = ["UNSAFE_className"],
|
|
2
|
+
_excluded2 = ["defaultSelectedKey", "disabledKeys", "selectedKey", "ref"];
|
|
2
3
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
4
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
5
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
@@ -6,146 +7,46 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typ
|
|
|
6
7
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
8
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
8
9
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
9
|
-
import {
|
|
10
|
-
import { Flex, Picker as SpectrumPicker } from '@adobe/react-spectrum';
|
|
11
|
-
import { getPositionOfSelectedItem, findSpectrumPickerScrollArea, isElementOfType, usePopoverOnScrollRef } from '@deephaven/react-hooks';
|
|
12
|
-
import { EMPTY_FUNCTION, PICKER_ITEM_HEIGHT, PICKER_TOP_OFFSET } from '@deephaven/utils';
|
|
10
|
+
import { Picker as SpectrumPicker } from '@adobe/react-spectrum';
|
|
13
11
|
import cl from 'classnames';
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import {
|
|
17
|
-
import { Item, Section } from "../shared.js";
|
|
18
|
-
import { Text } from "../Text.js";
|
|
19
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
20
|
-
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
21
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
-
/**
|
|
23
|
-
* Create tooltip content optionally wrapping with a Flex column for array
|
|
24
|
-
* content. This is needed for Items containing description `Text` elements.
|
|
25
|
-
*/
|
|
26
|
-
function createTooltipContent(content) {
|
|
27
|
-
if (typeof content === 'boolean') {
|
|
28
|
-
return String(content);
|
|
29
|
-
}
|
|
30
|
-
if (Array.isArray(content)) {
|
|
31
|
-
return /*#__PURE__*/_jsx(Flex, {
|
|
32
|
-
direction: "column",
|
|
33
|
-
alignItems: "start",
|
|
34
|
-
children: content.filter(node => isElementOfType(node, Text))
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
return content;
|
|
38
|
-
}
|
|
39
|
-
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import useMultiRef from "./useMultiRef.js";
|
|
14
|
+
import { usePickerProps } from "./usePickerProps.js";
|
|
40
15
|
/**
|
|
41
16
|
* Picker component for selecting items from a list of items. Items can be
|
|
42
|
-
* provided via the `
|
|
43
|
-
*
|
|
44
|
-
*
|
|
17
|
+
* provided via the `children` prop. Each item can be a string, number, boolean,
|
|
18
|
+
* or a Spectrum <Item> element. The remaining props are just pass through props
|
|
19
|
+
* for the Spectrum Picker component.
|
|
45
20
|
* See https://react-spectrum.adobe.com/react-spectrum/Picker.html
|
|
46
21
|
*/
|
|
47
|
-
|
|
22
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
|
+
export var Picker = /*#__PURE__*/React.forwardRef(function Picker(_ref, ref) {
|
|
48
24
|
var {
|
|
49
|
-
children,
|
|
50
|
-
tooltip = true,
|
|
51
|
-
defaultSelectedKey,
|
|
52
|
-
selectedKey,
|
|
53
|
-
getInitialScrollPosition,
|
|
54
|
-
onChange,
|
|
55
|
-
onOpenChange,
|
|
56
|
-
onScroll = EMPTY_FUNCTION,
|
|
57
|
-
onSelectionChange,
|
|
58
|
-
// eslint-disable-next-line camelcase
|
|
59
25
|
UNSAFE_className
|
|
60
26
|
} = _ref,
|
|
61
|
-
|
|
62
|
-
var
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
// causes the picker to expect `selectedKey` and `defaultSelectedKey`
|
|
72
|
-
// to be strings. It also passes the stringified value of the key to
|
|
73
|
-
// `onSelectionChange` handlers` regardless of the actual type of the
|
|
74
|
-
// key. We can't really get around setting in order to support Windowed
|
|
75
|
-
// data, so we'll need to do some manual conversion of keys to strings
|
|
76
|
-
// in other places of this component.
|
|
77
|
-
, {
|
|
78
|
-
// The `textValue` prop gets used to provide the content of `<option>`
|
|
79
|
-
// elements that back the Spectrum Picker. These are not visible in the UI,
|
|
80
|
-
// but are used for accessibility purposes, so we set to an arbitrary
|
|
81
|
-
// 'Empty' value so that they are not empty strings.
|
|
82
|
-
textValue: textValue === '' ? 'Empty' : textValue,
|
|
83
|
-
children: /*#__PURE__*/_jsxs(_Fragment, {
|
|
84
|
-
children: [/*#__PURE__*/_jsx(PickerItemContent, {
|
|
85
|
-
children: content
|
|
86
|
-
}), tooltipOptions == null || content === '' ? null : /*#__PURE__*/_jsx(Tooltip, {
|
|
87
|
-
options: tooltipOptions,
|
|
88
|
-
children: createTooltipContent(content)
|
|
89
|
-
})]
|
|
90
|
-
})
|
|
91
|
-
}, key);
|
|
92
|
-
}, [tooltipOptions]);
|
|
93
|
-
var getInitialScrollPositionInternal = useCallback(() => getInitialScrollPosition == null ? getPositionOfSelectedItem({
|
|
94
|
-
keyedItems: normalizedItems,
|
|
95
|
-
// TODO: #1890 & deephaven-plugins#371 add support for sections and
|
|
96
|
-
// items with descriptions since they impact the height calculations
|
|
97
|
-
itemHeight: PICKER_ITEM_HEIGHT,
|
|
98
|
-
selectedKey,
|
|
99
|
-
topOffset: PICKER_TOP_OFFSET
|
|
100
|
-
}) : getInitialScrollPosition(), [getInitialScrollPosition, normalizedItems, selectedKey]);
|
|
101
|
-
var {
|
|
102
|
-
ref: scrollRef,
|
|
103
|
-
onOpenChange: popoverOnOpenChange
|
|
104
|
-
} = usePopoverOnScrollRef(findSpectrumPickerScrollArea, onScroll, getInitialScrollPositionInternal);
|
|
105
|
-
var onOpenChangeInternal = useCallback(isOpen => {
|
|
106
|
-
// Attach scroll event handling
|
|
107
|
-
popoverOnOpenChange(isOpen);
|
|
108
|
-
onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(isOpen);
|
|
109
|
-
}, [onOpenChange, popoverOnOpenChange]);
|
|
110
|
-
var onSelectionChangeInternal = useCallback(key => {
|
|
111
|
-
var _getItemKey, _ref2;
|
|
112
|
-
// The `key` arg will always be a string due to us setting the `Item` key
|
|
113
|
-
// prop in `renderItem`. We need to find the matching item to determine
|
|
114
|
-
// the actual key.
|
|
115
|
-
var selectedItem = normalizedItems.find(item => String(getItemKey(item)) === key);
|
|
116
|
-
var actualKey = (_getItemKey = getItemKey(selectedItem)) !== null && _getItemKey !== void 0 ? _getItemKey : key;
|
|
117
|
-
(_ref2 = onChange !== null && onChange !== void 0 ? onChange : onSelectionChange) === null || _ref2 === void 0 ? void 0 : _ref2(actualKey);
|
|
118
|
-
}, [normalizedItems, onChange, onSelectionChange]);
|
|
27
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
28
|
+
var _usePickerProps = usePickerProps(props),
|
|
29
|
+
{
|
|
30
|
+
defaultSelectedKey,
|
|
31
|
+
disabledKeys,
|
|
32
|
+
selectedKey,
|
|
33
|
+
ref: scrollRef
|
|
34
|
+
} = _usePickerProps,
|
|
35
|
+
pickerProps = _objectWithoutProperties(_usePickerProps, _excluded2);
|
|
36
|
+
var pickerRef = useMultiRef(ref, scrollRef);
|
|
119
37
|
return /*#__PURE__*/_jsx(SpectrumPicker
|
|
120
38
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
121
|
-
, _objectSpread(_objectSpread({},
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
// Spectrum Picker treats keys as strings if the `key` prop is explicitly
|
|
128
|
-
// set on `Item` elements. Since we do this in `renderItem`, we need to
|
|
129
|
-
// ensure that `selectedKey` and `defaultSelectedKey` are strings in order
|
|
130
|
-
// for selection to work.
|
|
131
|
-
,
|
|
132
|
-
selectedKey: selectedKey === null || selectedKey === void 0 ? void 0 : selectedKey.toString(),
|
|
133
|
-
defaultSelectedKey: defaultSelectedKey === null || defaultSelectedKey === void 0 ? void 0 : defaultSelectedKey.toString()
|
|
134
|
-
// `onChange` is just an alias for `onSelectionChange`
|
|
39
|
+
, _objectSpread(_objectSpread({}, pickerProps), {}, {
|
|
40
|
+
ref: pickerRef,
|
|
41
|
+
UNSAFE_className: cl('dh-picker', UNSAFE_className)
|
|
42
|
+
// Type assertions are necessary here since Spectrum types don't account
|
|
43
|
+
// for number and boolean key values even though they are valid runtime
|
|
44
|
+
// values.
|
|
135
45
|
,
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
var _itemOrSection$item, _itemOrSection$item2;
|
|
140
|
-
return /*#__PURE__*/_jsx(Section, {
|
|
141
|
-
title: (_itemOrSection$item = itemOrSection.item) === null || _itemOrSection$item === void 0 ? void 0 : _itemOrSection$item.title,
|
|
142
|
-
items: (_itemOrSection$item2 = itemOrSection.item) === null || _itemOrSection$item2 === void 0 ? void 0 : _itemOrSection$item2.items,
|
|
143
|
-
children: renderItem
|
|
144
|
-
}, getItemKey(itemOrSection));
|
|
145
|
-
}
|
|
146
|
-
return renderItem(itemOrSection);
|
|
147
|
-
}
|
|
46
|
+
defaultSelectedKey: defaultSelectedKey,
|
|
47
|
+
disabledKeys: disabledKeys,
|
|
48
|
+
selectedKey: selectedKey
|
|
148
49
|
}));
|
|
149
|
-
}
|
|
50
|
+
});
|
|
150
51
|
export default Picker;
|
|
151
52
|
//# sourceMappingURL=Picker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Picker.js","names":["useCallback","useMemo","Flex","Picker","SpectrumPicker","getPositionOfSelectedItem","findSpectrumPickerScrollArea","isElementOfType","usePopoverOnScrollRef","EMPTY_FUNCTION","PICKER_ITEM_HEIGHT","PICKER_TOP_OFFSET","cl","Tooltip","isNormalizedSection","normalizeItemList","normalizeTooltipOptions","getItemKey","PickerItemContent","Item","Section","Text","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","createTooltipContent","content","String","Array","isArray","direction","alignItems","children","filter","node","_ref","tooltip","defaultSelectedKey","selectedKey","getInitialScrollPosition","onChange","onOpenChange","onScroll","onSelectionChange","UNSAFE_className","spectrumPickerProps","_objectWithoutProperties","_excluded","normalizedItems","tooltipOptions","renderItem","normalizedItem","_normalizedItem$item$","_normalizedItem$item","_normalizedItem$item$2","_normalizedItem$item2","key","item","textValue","options","getInitialScrollPositionInternal","keyedItems","itemHeight","topOffset","ref","scrollRef","popoverOnOpenChange","onOpenChangeInternal","isOpen","onSelectionChangeInternal","_getItemKey","_ref2","selectedItem","find","actualKey","_objectSpread","items","toString","itemOrSection","_itemOrSection$item","_itemOrSection$item2","title"],"sources":["../../../src/spectrum/picker/Picker.tsx"],"sourcesContent":["import { Key, ReactNode, useCallback, useMemo } from 'react';\nimport { DOMRef } from '@react-types/shared';\nimport { Flex, Picker as SpectrumPicker } from '@adobe/react-spectrum';\nimport {\n getPositionOfSelectedItem,\n findSpectrumPickerScrollArea,\n isElementOfType,\n usePopoverOnScrollRef,\n} from '@deephaven/react-hooks';\nimport {\n EMPTY_FUNCTION,\n PICKER_ITEM_HEIGHT,\n PICKER_TOP_OFFSET,\n} from '@deephaven/utils';\nimport cl from 'classnames';\nimport { Tooltip } from '../../popper';\nimport {\n isNormalizedSection,\n NormalizedSpectrumPickerProps,\n normalizeItemList,\n normalizeTooltipOptions,\n NormalizedItem,\n ItemOrSection,\n TooltipOptions,\n ItemKey,\n getItemKey,\n} from '../utils/itemUtils';\nimport { PickerItemContent } from './PickerItemContent';\nimport { Item, Section } from '../shared';\nimport { Text } from '../Text';\n\nexport type PickerProps = {\n children: ItemOrSection | ItemOrSection[] | NormalizedItem[];\n /** Can be set to true or a TooltipOptions to enable item tooltips */\n tooltip?: boolean | TooltipOptions;\n /** The currently selected key in the collection (controlled). */\n selectedKey?: ItemKey | null;\n /** The initial selected key in the collection (uncontrolled). */\n defaultSelectedKey?: ItemKey;\n /** Function to retrieve initial scroll position when opening the picker */\n getInitialScrollPosition?: () => Promise<number | null>;\n /**\n * Handler that is called when the selection change.\n * Note that under the hood, this is just an alias for Spectrum's\n * `onSelectionChange`. We are renaming for better consistency with other\n * components.\n */\n onChange?: (key: ItemKey) => void;\n\n /** Handler that is called when the picker is scrolled. */\n onScroll?: (event: Event) => void;\n\n /**\n * Handler that is called when the selection changes.\n * @deprecated Use `onChange` instead\n */\n onSelectionChange?: (key: ItemKey) => void;\n} /*\n * Support remaining SpectrumPickerProps.\n * Note that `selectedKey`, `defaultSelectedKey`, and `onSelectionChange` are\n * re-defined above to account for boolean types which aren't included in the\n * React `Key` type, but are actually supported by the Spectrum Picker component.\n */ & Omit<\n NormalizedSpectrumPickerProps,\n | 'children'\n | 'items'\n | 'onSelectionChange'\n | 'selectedKey'\n | 'defaultSelectedKey'\n>;\n\n/**\n * Create tooltip content optionally wrapping with a Flex column for array\n * content. This is needed for Items containing description `Text` elements.\n */\nfunction createTooltipContent(content: ReactNode) {\n if (typeof content === 'boolean') {\n return String(content);\n }\n\n if (Array.isArray(content)) {\n return (\n <Flex direction=\"column\" alignItems=\"start\">\n {content.filter(node => isElementOfType(node, Text))}\n </Flex>\n );\n }\n\n return content;\n}\n\n/**\n * Picker component for selecting items from a list of items. Items can be\n * provided via the `items` prop or as children. Each item can be a string,\n * number, boolean, or a Spectrum <Item> element. The remaining props are just\n * pass through props for the Spectrum Picker component.\n * See https://react-spectrum.adobe.com/react-spectrum/Picker.html\n */\nexport function Picker({\n children,\n tooltip = true,\n defaultSelectedKey,\n selectedKey,\n getInitialScrollPosition,\n onChange,\n onOpenChange,\n onScroll = EMPTY_FUNCTION,\n onSelectionChange,\n // eslint-disable-next-line camelcase\n UNSAFE_className,\n ...spectrumPickerProps\n}: PickerProps): JSX.Element {\n const normalizedItems = useMemo(\n () => normalizeItemList(children),\n [children]\n );\n\n const tooltipOptions = useMemo(\n () => normalizeTooltipOptions(tooltip),\n [tooltip]\n );\n\n const renderItem = useCallback(\n (normalizedItem: NormalizedItem) => {\n const key = getItemKey(normalizedItem);\n const content = normalizedItem.item?.content ?? '';\n const textValue = normalizedItem.item?.textValue ?? '';\n\n return (\n <Item\n // Note that setting the `key` prop explicitly on `Item` elements\n // causes the picker to expect `selectedKey` and `defaultSelectedKey`\n // to be strings. It also passes the stringified value of the key to\n // `onSelectionChange` handlers` regardless of the actual type of the\n // key. We can't really get around setting in order to support Windowed\n // data, so we'll need to do some manual conversion of keys to strings\n // in other places of this component.\n key={key as Key}\n // The `textValue` prop gets used to provide the content of `<option>`\n // elements that back the Spectrum Picker. These are not visible in the UI,\n // but are used for accessibility purposes, so we set to an arbitrary\n // 'Empty' value so that they are not empty strings.\n textValue={textValue === '' ? 'Empty' : textValue}\n >\n <>\n <PickerItemContent>{content}</PickerItemContent>\n {tooltipOptions == null || content === '' ? null : (\n <Tooltip options={tooltipOptions}>\n {createTooltipContent(content)}\n </Tooltip>\n )}\n </>\n </Item>\n );\n },\n [tooltipOptions]\n );\n\n const getInitialScrollPositionInternal = useCallback(\n () =>\n getInitialScrollPosition == null\n ? getPositionOfSelectedItem({\n keyedItems: normalizedItems,\n // TODO: #1890 & deephaven-plugins#371 add support for sections and\n // items with descriptions since they impact the height calculations\n itemHeight: PICKER_ITEM_HEIGHT,\n selectedKey,\n topOffset: PICKER_TOP_OFFSET,\n })\n : getInitialScrollPosition(),\n [getInitialScrollPosition, normalizedItems, selectedKey]\n );\n\n const { ref: scrollRef, onOpenChange: popoverOnOpenChange } =\n usePopoverOnScrollRef(\n findSpectrumPickerScrollArea,\n onScroll,\n getInitialScrollPositionInternal\n );\n\n const onOpenChangeInternal = useCallback(\n (isOpen: boolean): void => {\n // Attach scroll event handling\n popoverOnOpenChange(isOpen);\n\n onOpenChange?.(isOpen);\n },\n [onOpenChange, popoverOnOpenChange]\n );\n\n const onSelectionChangeInternal = useCallback(\n (key: ItemKey): void => {\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 ?? onSelectionChange)?.(actualKey);\n },\n [normalizedItems, onChange, onSelectionChange]\n );\n\n return (\n <SpectrumPicker\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...spectrumPickerProps}\n // The `ref` prop type defined by React Spectrum is incorrect here\n ref={scrollRef as unknown as DOMRef<HTMLDivElement>}\n onOpenChange={onOpenChangeInternal}\n UNSAFE_className={cl('dh-picker', UNSAFE_className)}\n items={normalizedItems}\n // Spectrum Picker treats keys as strings if the `key` prop is explicitly\n // set on `Item` elements. Since we do this in `renderItem`, we need to\n // ensure that `selectedKey` and `defaultSelectedKey` are strings in order\n // for selection to work.\n selectedKey={selectedKey?.toString()}\n defaultSelectedKey={defaultSelectedKey?.toString()}\n // `onChange` is just an alias for `onSelectionChange`\n onSelectionChange={\n onSelectionChangeInternal as NormalizedSpectrumPickerProps['onSelectionChange']\n }\n >\n {itemOrSection => {\n if (isNormalizedSection(itemOrSection)) {\n return (\n <Section\n key={getItemKey(itemOrSection)}\n title={itemOrSection.item?.title}\n items={itemOrSection.item?.items}\n >\n {renderItem}\n </Section>\n );\n }\n\n return renderItem(itemOrSection);\n }}\n </SpectrumPicker>\n );\n}\n\nexport default Picker;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Picker.js","names":["Picker","SpectrumPicker","cl","React","useMultiRef","usePickerProps","jsx","_jsx","forwardRef","_ref","ref","UNSAFE_className","props","_objectWithoutProperties","_excluded","_usePickerProps","defaultSelectedKey","disabledKeys","selectedKey","scrollRef","pickerProps","_excluded2","pickerRef","_objectSpread"],"sources":["../../../src/spectrum/picker/Picker.tsx"],"sourcesContent":["import {\n Picker as SpectrumPicker,\n SpectrumPickerProps,\n} from '@adobe/react-spectrum';\nimport type { DOMRef } from '@react-types/shared';\nimport cl from 'classnames';\nimport React from 'react';\nimport type { NormalizedItem } from '../utils';\nimport type { PickerProps } from './PickerProps';\nimport useMultiRef from './useMultiRef';\nimport { usePickerProps } from './usePickerProps';\n\n/**\n * Picker component for selecting items from a list of items. Items can be\n * provided via the `children` prop. Each item can be a string,\tnumber, boolean,\n * or a Spectrum <Item> element. The remaining props are just\tpass through props\n * for the Spectrum Picker component.\n * See https://react-spectrum.adobe.com/react-spectrum/Picker.html\n */\nexport const Picker = React.forwardRef(function Picker(\n { UNSAFE_className, ...props }: PickerProps,\n ref: DOMRef<HTMLDivElement>\n): JSX.Element {\n const {\n defaultSelectedKey,\n disabledKeys,\n selectedKey,\n ref: scrollRef,\n ...pickerProps\n } = usePickerProps(props);\n const pickerRef = useMultiRef(ref, scrollRef);\n return (\n <SpectrumPicker\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...pickerProps}\n ref={pickerRef}\n UNSAFE_className={cl('dh-picker', UNSAFE_className)}\n // Type assertions are necessary here since Spectrum types don't account\n // for number and boolean key values even though they are valid runtime\n // values.\n defaultSelectedKey={\n defaultSelectedKey as SpectrumPickerProps<NormalizedItem>['defaultSelectedKey']\n }\n disabledKeys={\n disabledKeys as SpectrumPickerProps<NormalizedItem>['disabledKeys']\n }\n selectedKey={\n selectedKey as SpectrumPickerProps<NormalizedItem>['selectedKey']\n }\n />\n );\n});\n\nexport default Picker;\n"],"mappings":";;;;;;;;;AAAA,SACEA,MAAM,IAAIC,cAAc,QAEnB,uBAAuB;AAE9B,OAAOC,EAAE,MAAM,YAAY;AAC3B,OAAOC,KAAK,MAAM,OAAO;AAAC,OAGnBC,WAAW;AAAA,SACTC,cAAc;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AANA,SAAAC,GAAA,IAAAC,IAAA;AAOA,OAAO,IAAMP,MAAM,gBAAGG,KAAK,CAACK,UAAU,CAAC,SAASR,MAAMA,CAAAS,IAAA,EAEpDC,GAA2B,EACd;EAAA,IAFb;MAAEC;IAAwC,CAAC,GAAAF,IAAA;IAApBG,KAAK,GAAAC,wBAAA,CAAAJ,IAAA,EAAAK,SAAA;EAG5B,IAAAC,eAAA,GAMIV,cAAc,CAACO,KAAK,CAAC;IANnB;MACJI,kBAAkB;MAClBC,YAAY;MACZC,WAAW;MACXR,GAAG,EAAES;IAEP,CAAC,GAAAJ,eAAA;IADIK,WAAW,GAAAP,wBAAA,CAAAE,eAAA,EAAAM,UAAA;EAEhB,IAAMC,SAAS,GAAGlB,WAAW,CAACM,GAAG,EAAES,SAAS,CAAC;EAC7C,oBACEZ,IAAA,CAACN;EACC;EAAA,EAAAsB,aAAA,CAAAA,aAAA,KACIH,WAAW;IACfV,GAAG,EAAEY,SAAU;IACfX,gBAAgB,EAAET,EAAE,CAAC,WAAW,EAAES,gBAAgB;IAClD;IACA;IACA;IAAA;IACAK,kBAAkB,EAChBA,kBACD;IACDC,YAAY,EACVA,YACD;IACDC,WAAW,EACTA;EACD,EACF,CAAC;AAEN,CAAC,CAAC;AAEF,eAAelB,MAAM"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { PickerNormalizedProps } from './PickerProps';
|
|
3
|
+
/**
|
|
4
|
+
* Picker that takes an array of `NormalizedItem` or `NormalizedSection` items
|
|
5
|
+
* as children and uses a render item function to render the items. This is
|
|
6
|
+
* necessary to support windowed data.
|
|
7
|
+
*/
|
|
8
|
+
export declare function PickerNormalized({ UNSAFE_className, ...props }: PickerNormalizedProps): JSX.Element;
|
|
9
|
+
export default PickerNormalized;
|
|
10
|
+
//# sourceMappingURL=PickerNormalized.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PickerNormalized.d.ts","sourceRoot":"","sources":["../../../src/spectrum/picker/PickerNormalized.tsx"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAI3D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,gBAAgB,EAChB,GAAG,KAAK,EACT,EAAE,qBAAqB,GAAG,GAAG,CAAC,OAAO,CAkBrC;AAED,eAAe,gBAAgB,CAAC"}
|