@procore/core-react 11.6.0-rc.14 → 11.6.0-rc.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/NumberInput/NumberInput.utils.js +3 -6
  2. package/dist/NumberInput/NumberInput.utils.js.map +1 -1
  3. package/dist/SuperSelect/SuperSelect.constants.d.ts +2 -0
  4. package/dist/SuperSelect/SuperSelect.constants.js +3 -0
  5. package/dist/SuperSelect/SuperSelect.constants.js.map +1 -0
  6. package/dist/SuperSelect/SuperSelect.d.ts +3 -15
  7. package/dist/SuperSelect/SuperSelect.js +77 -21
  8. package/dist/SuperSelect/SuperSelect.js.map +1 -1
  9. package/dist/SuperSelect/SuperSelect.styles.d.ts +19 -0
  10. package/dist/SuperSelect/SuperSelect.styles.js +22 -2
  11. package/dist/SuperSelect/SuperSelect.styles.js.map +1 -1
  12. package/dist/SuperSelect/SuperSelect.types.d.ts +54 -40
  13. package/dist/SuperSelect/SuperSelect.types.js +1 -1
  14. package/dist/SuperSelect/SuperSelect.types.js.map +1 -1
  15. package/dist/SuperSelect/SuperSelect.utils.d.ts +28 -0
  16. package/dist/SuperSelect/SuperSelect.utils.js +156 -0
  17. package/dist/SuperSelect/SuperSelect.utils.js.map +1 -0
  18. package/dist/SuperSelect/SuperSelectDraggableOptions.d.ts +18 -0
  19. package/dist/SuperSelect/SuperSelectDraggableOptions.js +61 -0
  20. package/dist/SuperSelect/SuperSelectDraggableOptions.js.map +1 -0
  21. package/dist/SuperSelect/useSuperSelect.d.ts +6 -20
  22. package/dist/SuperSelect/useSuperSelect.js +144 -65
  23. package/dist/SuperSelect/useSuperSelect.js.map +1 -1
  24. package/dist/SuperSelect/useVirtuosoResizeErrorFix.d.ts +1 -0
  25. package/dist/SuperSelect/useVirtuosoResizeErrorFix.js +21 -0
  26. package/dist/SuperSelect/useVirtuosoResizeErrorFix.js.map +1 -0
  27. package/dist/_typedoc/Avatar/Avatar.types.json +17 -17
  28. package/dist/_typedoc/AvatarStack/AvatarStack.types.json +22 -22
  29. package/dist/_typedoc/Badge/Badge.types.json +6 -6
  30. package/dist/_typedoc/Banner/Banner.types.json +12 -12
  31. package/dist/_typedoc/Box/Box.types.json +68 -68
  32. package/dist/_typedoc/Breadcrumbs/Breadcrumbs.types.json +10 -10
  33. package/dist/_typedoc/Button/Button.types.json +11 -11
  34. package/dist/_typedoc/Calendar/Calendar.types.json +80 -80
  35. package/dist/_typedoc/Card/Card.types.json +6 -6
  36. package/dist/_typedoc/Checkbox/Checkbox.types.json +7 -7
  37. package/dist/_typedoc/ContactItem/ContactItem.types.json +9 -9
  38. package/dist/_typedoc/DateInput/DateInput.types.json +35 -35
  39. package/dist/_typedoc/DateSelect/DateSelect.types.json +13 -13
  40. package/dist/_typedoc/DetailPage/DetailPage.types.json +4 -4
  41. package/dist/_typedoc/Dropdown/Dropdown.types.json +36 -36
  42. package/dist/_typedoc/DropdownFlyout/DropdownFlyout.types.json +29 -29
  43. package/dist/_typedoc/Dropzone/Dropzone.types.json +41 -41
  44. package/dist/_typedoc/EmptyState/EmptyState.types.json +14 -14
  45. package/dist/_typedoc/FileList/FileList.types.json +9 -9
  46. package/dist/_typedoc/FileSelect/FileSelect.types.json +26 -26
  47. package/dist/_typedoc/FileSelect/GridSource/GridSource.types.json +20 -20
  48. package/dist/_typedoc/FileSelect/LocalSource/LocalSource.types.json +14 -14
  49. package/dist/_typedoc/FileSelect/TreeSource/TreeSource.types.json +9 -9
  50. package/dist/_typedoc/Flex/Flex.types.json +27 -27
  51. package/dist/_typedoc/FlexList/FlexList.types.json +30 -30
  52. package/dist/_typedoc/Form/Form.types.json +694 -694
  53. package/dist/_typedoc/Grid/Grid.types.json +8 -8
  54. package/dist/_typedoc/GroupSelect/GroupSelect.types.json +52 -52
  55. package/dist/_typedoc/Input/Input.types.json +2 -2
  56. package/dist/_typedoc/Link/Link.types.json +4 -4
  57. package/dist/_typedoc/ListPage/ListPage.types.json +13 -13
  58. package/dist/_typedoc/Menu/Menu.types.json +62 -62
  59. package/dist/_typedoc/MenuImperative/MenuImperative.types.json +71 -71
  60. package/dist/_typedoc/Modal/Modal.types.json +27 -27
  61. package/dist/_typedoc/MultiSelect/MultiSelect.types.json +31 -31
  62. package/dist/_typedoc/Notation/Notation.types.json +4 -4
  63. package/dist/_typedoc/NumberInput/NumberInput.types.json +43 -43
  64. package/dist/_typedoc/PageLayout/PageLayout.types.json +7 -7
  65. package/dist/_typedoc/Pagination/Pagination.types.json +7 -7
  66. package/dist/_typedoc/Panel/Panel.types.json +27 -27
  67. package/dist/_typedoc/Pill/Pill.types.json +1 -1
  68. package/dist/_typedoc/PillSelect/PillSelect.types.json +46 -46
  69. package/dist/_typedoc/Popover/Popover.types.json +10 -10
  70. package/dist/_typedoc/ProgressBar/ProgressBar.types.json +5 -5
  71. package/dist/_typedoc/RadioButton/RadioButton.types.json +6 -6
  72. package/dist/_typedoc/Required/Required.types.json +5 -5
  73. package/dist/_typedoc/Search/Search.types.json +18 -18
  74. package/dist/_typedoc/Section/Section.types.json +14 -14
  75. package/dist/_typedoc/SegmentedController/SegmentedController.types.json +20 -20
  76. package/dist/_typedoc/Select/Select.types.json +31 -31
  77. package/dist/_typedoc/Slider/Slider.types.json +6 -6
  78. package/dist/_typedoc/Spinner/Spinner.types.json +9 -9
  79. package/dist/_typedoc/Switch/Switch.types.json +3 -3
  80. package/dist/_typedoc/Table/Table.types.json +94 -94
  81. package/dist/_typedoc/Tabs/Tabs.types.json +15 -15
  82. package/dist/_typedoc/Tearsheet/Tearsheet.types.json +10 -10
  83. package/dist/_typedoc/TextArea/TextArea.types.json +3 -3
  84. package/dist/_typedoc/TextEditor/TextEditor.types.json +7 -7
  85. package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +3 -3
  86. package/dist/_typedoc/Thumbnail/Thumbnail.types.json +25 -25
  87. package/dist/_typedoc/TieredDropdown/TieredDropdown.types.json +42 -42
  88. package/dist/_typedoc/TieredSelect/TieredSelect.types.json +28 -28
  89. package/dist/_typedoc/Tile/Tile.types.json +30 -30
  90. package/dist/_typedoc/Toast/Toast.types.json +4 -4
  91. package/dist/_typedoc/ToggleButton/ToggleButton.types.json +3 -3
  92. package/dist/_typedoc/Token/Token.types.json +4 -4
  93. package/dist/_typedoc/ToolHeader/ToolHeader.types.json +8 -8
  94. package/dist/_typedoc/Tooltip/Tooltip.types.json +13 -13
  95. package/dist/_typedoc/Tree/Tree.types.json +86 -86
  96. package/dist/_typedoc/Typeahead/Typeahead.types.json +2 -2
  97. package/dist/_typedoc/Typography/Typography.types.json +8 -8
  98. package/dist/_typedoc/_utils/types.json +3 -3
  99. package/package.json +3 -3
@@ -0,0 +1,28 @@
1
+ import { SuperSelectConfig, SuperSelectOptgroup, SuperSelectOption } from './SuperSelect.types';
2
+ export declare const getGroupNameIsValid: (groupName: unknown) => boolean;
3
+ export declare const getOptionsSortingAlgorithm: ({ getOptionIsBatch, getOptionLabel, }: {
4
+ getOptionIsBatch: NonNullable<SuperSelectConfig['getOptionIsBatch']>;
5
+ getOptionLabel: NonNullable<SuperSelectConfig['getOptionLabel']>;
6
+ }) => (a: SuperSelectOption, b: SuperSelectOption) => number;
7
+ export declare const getBatchOptionFormatter: ({ value, multiple, getOptionIsBatch, getOptionValue, }: {
8
+ value: SuperSelectConfig['value'];
9
+ multiple: NonNullable<SuperSelectConfig['multiple']>;
10
+ getOptionIsBatch: NonNullable<SuperSelectConfig['getOptionIsBatch']>;
11
+ getOptionValue: NonNullable<SuperSelectConfig['getOptionValue']>;
12
+ }) => (option: SuperSelectOption) => any;
13
+ export declare const RESERVED_UNGROUPED_OPTGROUP_NAME = "RESERVED_UNGROUPED_OPTGROUP_NAME";
14
+ export declare const collectGroupsInOrderOfOccurrence: (opts: SuperSelectOption[], getOptionGroup: NonNullable<SuperSelectConfig['getOptionGroup']>) => {
15
+ groups: string[];
16
+ groupedOptions: Record<string, SuperSelectOption[]>;
17
+ };
18
+ export declare function reorder(options: SuperSelectOption[], startIndex: number, endIndex: number, getOptionGroup: (opt: SuperSelectOption) => string): {
19
+ nextOptions: any[];
20
+ prevGroup: string;
21
+ nextGroup: string;
22
+ };
23
+ export declare function isMultiple<T>(multiple: boolean, value: T | T[]): value is T[];
24
+ export declare const getOptionIsOptgroup: (item: SuperSelectOption) => boolean;
25
+ export declare const getOptgroupHeader: (groupName: string) => SuperSelectOptgroup;
26
+ export declare const sortOptgroups: (groupA: string, groupB: string) => number;
27
+ export declare function getIsAllOptionsUngrouped(groups: string[]): boolean;
28
+ export declare function getOptgroup(groupName: string, groupOptions: SuperSelectOption[]): any[];
@@ -0,0 +1,156 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
+ if (ar || !(i in from)) {
15
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
+ ar[i] = from[i];
17
+ }
18
+ }
19
+ return to.concat(ar || Array.prototype.slice.call(from));
20
+ };
21
+ import { optgroupSymbol } from './SuperSelect.constants';
22
+ export var getGroupNameIsValid = function (groupName) {
23
+ var isGroupDefined = ![undefined, null, ''].includes(groupName);
24
+ return isGroupDefined && typeof groupName === 'string' && groupName.length > 0;
25
+ };
26
+ export var getOptionsSortingAlgorithm = function (_a) {
27
+ var getOptionIsBatch = _a.getOptionIsBatch, getOptionLabel = _a.getOptionLabel;
28
+ return function (a, b) {
29
+ var isOptionBatch1 = getOptionIsBatch(a);
30
+ var isOptionBatch2 = getOptionIsBatch(b);
31
+ // move batched options up
32
+ if (isOptionBatch1 && isOptionBatch2) {
33
+ return compareStrings(getOptionLabel(a), getOptionLabel(b));
34
+ }
35
+ else if (isOptionBatch1) {
36
+ return -1;
37
+ }
38
+ else if (isOptionBatch2) {
39
+ return 1;
40
+ }
41
+ return compareStrings(getOptionLabel(a), getOptionLabel(b));
42
+ };
43
+ };
44
+ export var getBatchOptionFormatter = function (_a) {
45
+ var value = _a.value, multiple = _a.multiple, getOptionIsBatch = _a.getOptionIsBatch, getOptionValue = _a.getOptionValue;
46
+ return function (option) {
47
+ if (isMultiple(multiple, value) && getOptionIsBatch(option)) {
48
+ var val = getOptionValue(option);
49
+ var disabled = Array.isArray(val) && val.every(function (v) { return value.includes(v); });
50
+ return __assign(__assign({}, option), { disabled: disabled });
51
+ }
52
+ return option;
53
+ };
54
+ };
55
+ export var RESERVED_UNGROUPED_OPTGROUP_NAME = 'RESERVED_UNGROUPED_OPTGROUP_NAME';
56
+ export var collectGroupsInOrderOfOccurrence = function (opts, getOptionGroup) {
57
+ var output = opts.reduce(function (_a, option) {
58
+ var _b;
59
+ var groups = _a.groups, groupedOptions = _a.groupedOptions;
60
+ var groupName = getOptionGroup(option);
61
+ // if group name is invalid, consider the option ungrouped
62
+ var isGroupNameValid = getGroupNameIsValid(groupName);
63
+ var adjustedGroupName = isGroupNameValid
64
+ ? groupName
65
+ : RESERVED_UNGROUPED_OPTGROUP_NAME;
66
+ var groupOptions = (_b = groupedOptions[adjustedGroupName]) !== null && _b !== void 0 ? _b : [];
67
+ // push/assign for performance considerations
68
+ groupOptions.push(option);
69
+ groupedOptions[adjustedGroupName] = groupOptions;
70
+ return {
71
+ groups: groups.includes(adjustedGroupName)
72
+ ? groups
73
+ : __spreadArray(__spreadArray([], groups, true), [adjustedGroupName], false),
74
+ groupedOptions: groupedOptions,
75
+ };
76
+ }, {
77
+ groups: [],
78
+ groupedOptions: {},
79
+ });
80
+ // if ungrouped options were found, lift them to the top
81
+ if (output.groups.includes(RESERVED_UNGROUPED_OPTGROUP_NAME)) {
82
+ return {
83
+ groupedOptions: output.groupedOptions,
84
+ groups: __spreadArray([
85
+ RESERVED_UNGROUPED_OPTGROUP_NAME
86
+ ], output.groups.filter(function (group) { return group !== RESERVED_UNGROUPED_OPTGROUP_NAME; }), true),
87
+ };
88
+ }
89
+ return output;
90
+ };
91
+ function findParentOptgroup(list, index, getOptionGroup) {
92
+ for (var i = index; i >= 0; i--) {
93
+ var option = list[i];
94
+ var isOptgroup = getOptionIsOptgroup(option);
95
+ if (isOptgroup) {
96
+ return getOptionGroup(option);
97
+ }
98
+ }
99
+ // no parent optgroup was found, so the option is considered ungrouped
100
+ return RESERVED_UNGROUPED_OPTGROUP_NAME;
101
+ }
102
+ export function reorder(options, startIndex, endIndex, getOptionGroup) {
103
+ var nextOptions = __spreadArray([], options, true);
104
+ var removed = nextOptions.splice(startIndex, 1)[0];
105
+ nextOptions.splice(endIndex, 0, removed);
106
+ var prevGroup = findParentOptgroup(options, startIndex, getOptionGroup);
107
+ var nextGroup = findParentOptgroup(nextOptions, endIndex, getOptionGroup);
108
+ return { nextOptions: nextOptions, prevGroup: prevGroup, nextGroup: nextGroup };
109
+ }
110
+ function compareStrings(a, b) {
111
+ return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' });
112
+ }
113
+ export function isMultiple(multiple, value) {
114
+ return multiple && Array.isArray(value);
115
+ }
116
+ export var getOptionIsOptgroup = function (item) {
117
+ return Boolean(item[optgroupSymbol]);
118
+ };
119
+ export var getOptgroupHeader = function (groupName) {
120
+ var _a, _b;
121
+ if (groupName === RESERVED_UNGROUPED_OPTGROUP_NAME) {
122
+ return _a = {},
123
+ _a[optgroupSymbol] = true,
124
+ _a.label = '',
125
+ _a.group = RESERVED_UNGROUPED_OPTGROUP_NAME,
126
+ _a.id = RESERVED_UNGROUPED_OPTGROUP_NAME,
127
+ _a;
128
+ }
129
+ return _b = {},
130
+ _b[optgroupSymbol] = true,
131
+ _b.label = groupName,
132
+ _b.group = groupName,
133
+ _b.id = groupName,
134
+ _b;
135
+ };
136
+ export var sortOptgroups = function (groupA, groupB) {
137
+ // always put ungrouped options on top
138
+ if (groupA === RESERVED_UNGROUPED_OPTGROUP_NAME) {
139
+ return -1;
140
+ }
141
+ if (groupB === RESERVED_UNGROUPED_OPTGROUP_NAME) {
142
+ return 1;
143
+ }
144
+ return compareStrings(groupA, groupB);
145
+ };
146
+ export function getIsAllOptionsUngrouped(groups) {
147
+ return groups.length === 1 && groups[0] === RESERVED_UNGROUPED_OPTGROUP_NAME;
148
+ }
149
+ export function getOptgroup(groupName, groupOptions) {
150
+ // ungrouped options should not have a group header
151
+ if (groupName === RESERVED_UNGROUPED_OPTGROUP_NAME) {
152
+ return groupOptions;
153
+ }
154
+ return __spreadArray([getOptgroupHeader(groupName)], groupOptions, true);
155
+ }
156
+ //# sourceMappingURL=SuperSelect.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SuperSelect.utils.js","sourceRoot":"","sources":["../../src/SuperSelect/SuperSelect.utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { SuperSelectApi, SuperSelectMenuItemProps, SuperSelectOption } from './SuperSelect.types';
3
+ export declare const InternalDragDropContext: React.Context<{
4
+ isDraggingOver: boolean;
5
+ }>;
6
+ export declare const SuperSelectDraggableOptions: ({ SuperSelectMenuItem, MenuItemLabelComponent, MenuGroupHeaderComponent, selectApi, onListHeightChange, }: {
7
+ SuperSelectMenuItem: React.FC<SuperSelectMenuItemProps>;
8
+ MenuItemLabelComponent: React.FC<{
9
+ option: SuperSelectOption;
10
+ selectApi: SuperSelectApi;
11
+ }>;
12
+ MenuGroupHeaderComponent: React.FC<{
13
+ group: SuperSelectOption;
14
+ selectApi: SuperSelectApi;
15
+ }>;
16
+ selectApi: SuperSelectApi;
17
+ onListHeightChange: (height: number) => void;
18
+ }) => JSX.Element;
@@ -0,0 +1,61 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { Grip } from '@procore/core-icons';
13
+ import React from 'react';
14
+ import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';
15
+ import { Virtuoso } from 'react-virtuoso';
16
+ import { StyledGrip } from '../MenuImperative/MenuImperative.styles';
17
+ import { colors } from '../_styles/colors';
18
+ import { draggableOptionIdSymbol } from './SuperSelect.constants';
19
+ import { StyledDraggableWrapper } from './SuperSelect.styles';
20
+ export var InternalDragDropContext = React.createContext({
21
+ isDraggingOver: false,
22
+ });
23
+ var InternalDragDropProvider = function (_a) {
24
+ var isDraggingOver = _a.isDraggingOver, children = _a.children;
25
+ var value = React.useMemo(function () {
26
+ return {
27
+ isDraggingOver: isDraggingOver,
28
+ };
29
+ }, [isDraggingOver]);
30
+ return (React.createElement(InternalDragDropContext.Provider, { value: value }, children));
31
+ };
32
+ export var SuperSelectDraggableOptions = function (_a) {
33
+ var SuperSelectMenuItem = _a.SuperSelectMenuItem, MenuItemLabelComponent = _a.MenuItemLabelComponent, MenuGroupHeaderComponent = _a.MenuGroupHeaderComponent, selectApi = _a.selectApi, onListHeightChange = _a.onListHeightChange;
34
+ var getDraggableItemContent = function (index, option) {
35
+ var disabled = selectApi.getOptionIsDisabled(option);
36
+ var isOptgroup = selectApi.getOptionIsOptgroup(option);
37
+ var optionId = isOptgroup ? option.id : option[draggableOptionIdSymbol];
38
+ return (React.createElement(Draggable, { draggableId: optionId, index: index, key: optionId, isDragDisabled: isOptgroup || disabled || Boolean(selectApi.searchValue) }, function (provided) {
39
+ return (React.createElement(StyledDraggableWrapper, __assign({ ref: provided.innerRef }, provided.draggableProps, provided.dragHandleProps),
40
+ !isOptgroup && (React.createElement(StyledGrip, null,
41
+ React.createElement(Grip, { color: colors.gray45 }))),
42
+ isOptgroup ? (React.createElement(MenuGroupHeaderComponent, { group: option, selectApi: selectApi })) : (React.createElement(MenuItemLabelComponent, { option: option, selectApi: selectApi }))));
43
+ }));
44
+ };
45
+ return (React.createElement(DragDropContext, { onDragEnd: selectApi.onDragEnd },
46
+ React.createElement(Droppable, { droppableId: "droppable", mode: "virtual", renderClone: function (provided, snapshot, dragged) {
47
+ var option = selectApi.options[dragged.source.index];
48
+ return (React.createElement(SuperSelectMenuItem, __assign({ isDragging: true, "data-index": dragged.source.index }, provided.draggableProps),
49
+ React.createElement(StyledGrip, null,
50
+ React.createElement(Grip, { color: colors.gray45 })),
51
+ React.createElement(MenuItemLabelComponent, { option: option, selectApi: selectApi })));
52
+ } }, function (provided, snapshot) {
53
+ return (React.createElement(InternalDragDropProvider, { isDraggingOver: snapshot.isDraggingOver },
54
+ React.createElement(Virtuoso, { role: "listbox", id: selectApi.overlayId, ref: selectApi.virtuoso, data: selectApi.options, components: {
55
+ Item: SuperSelectMenuItem,
56
+ }, scrollerRef: function (el) {
57
+ provided.innerRef(el);
58
+ }, itemContent: getDraggableItemContent, initialTopMostItemIndex: selectApi.selectedIndex >= 0 ? selectApi.selectedIndex : 0, totalListHeightChanged: onListHeightChange, tabIndex: -1 })));
59
+ })));
60
+ };
61
+ //# sourceMappingURL=SuperSelectDraggableOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SuperSelectDraggableOptions.js","sourceRoot":"","sources":["../../src/SuperSelect/SuperSelectDraggableOptions.tsx"],"names":[],"mappings":"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"}
@@ -3,25 +3,11 @@ import React from 'react';
3
3
  import { VirtuosoHandle } from 'react-virtuoso';
4
4
  import { TypeaheadInputProps, TypeaheadProps } from '../Typeahead/Typeahead.types';
5
5
  import { SuperSelectConfig, SuperSelectOption, SuperSelectValue, SuperSelectValuePrimitive } from './SuperSelect.types';
6
- declare function getOptionIsOptgroup(item: any): boolean;
7
- export declare function useSuperSelect({ components, defaultValue, disabled, getOptionGroup, getOptionIsBatch, getOptionIsDisabled, getOptionLabel, getOptionValue, multiple, onChange, options: sourceOptions, search, value: value_, }: SuperSelectConfig): {
6
+ export declare function useSuperSelect({ components, draggable, defaultValue, disabled, getOptionGroup, setOptionGroup, getOptionIsBatch, getOptionIsDisabled, getOptionLabel, getOptionValue, onManualSort, multiple, onChange, options: sourceOptions, search, sort, value: value_, }: SuperSelectConfig): {
8
7
  activeMenuIndex: number | null;
9
8
  activeTokenIndex: number | null;
10
- components: {
11
- Label?: React.FC<{
12
- selectApi: any;
13
- }> | undefined;
14
- MenuItemLabel?: React.FC<{
15
- selectApi: any;
16
- option: any;
17
- }> | undefined;
18
- Token?: React.FC<{
19
- selectApi: any;
20
- option: any;
21
- index: number;
22
- focused: boolean;
23
- }> | undefined;
24
- } | undefined;
9
+ components: import("./SuperSelect.types").SuperSelectComponents | undefined;
10
+ draggable: boolean | undefined;
25
11
  floating: import("@floating-ui/react-dom-interactions").UseFloatingReturn<HTMLElement>;
26
12
  getClearProps: () => React.AriaAttributes & React.HTMLAttributes<HTMLElement>;
27
13
  getFloatingProps: (userProps?: any) => Record<string, unknown>;
@@ -30,14 +16,14 @@ export declare function useSuperSelect({ components, defaultValue, disabled, get
30
16
  getOptionGroup: (option: any) => string;
31
17
  getOptionIsBatch: (option: any) => boolean;
32
18
  getOptionIsDisabled: (option: any) => boolean;
33
- getOptionIsOptgroup: typeof getOptionIsOptgroup;
19
+ getOptionIsOptgroup: (item: any) => boolean;
34
20
  getOptionLabel: (option: any) => string;
35
21
  getOptionValue: (option: any) => SuperSelectValuePrimitive;
36
22
  getReferenceProps: (userProps?: any) => Record<string, unknown>;
37
23
  getTokenClearProps: (index: number) => React.AriaAttributes & React.SVGAttributes<SVGElement>;
38
24
  getTypeaheadProps: () => React.AriaAttributes & TypeaheadInputProps & TypeaheadProps;
39
25
  isEmpty: () => boolean;
40
- isSelected: (option: any) => boolean;
26
+ isSelected: (option: SuperSelectOption) => boolean;
41
27
  listId: string;
42
28
  maxHeight: number;
43
29
  multiple: boolean;
@@ -57,5 +43,5 @@ export declare function useSuperSelect({ components, defaultValue, disabled, get
57
43
  value: SuperSelectValue;
58
44
  virtuoso: React.RefObject<VirtuosoHandle>;
59
45
  width: number;
46
+ onDragEnd: (result: any) => void;
60
47
  };
61
- export {};
@@ -21,20 +21,11 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
21
21
  import { autoUpdate, flip, offset, size, useClick, useDismiss, useFloating, useInteractions, useListNavigation, } from '@floating-ui/react-dom-interactions';
22
22
  import { useId } from '@react-aria/utils';
23
23
  import debounce from 'lodash.debounce';
24
- import groupBy from 'lodash.groupby';
25
24
  import uniq from 'lodash.uniq';
26
25
  import React from 'react';
27
- var optgroupSymbol = Symbol('Optgroup');
26
+ import { draggableOptionIdSymbol } from './SuperSelect.constants';
27
+ import { collectGroupsInOrderOfOccurrence, getBatchOptionFormatter, getIsAllOptionsUngrouped, getOptgroup, getOptionIsOptgroup, getOptionsSortingAlgorithm, isMultiple, reorder, sortOptgroups, } from './SuperSelect.utils';
28
28
  function noop() { }
29
- function compareStrings(a, b) {
30
- return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' });
31
- }
32
- function isMultiple(multiple, value) {
33
- return multiple && Array.isArray(value);
34
- }
35
- function getOptionIsOptgroup(item) {
36
- return Boolean(item[optgroupSymbol]);
37
- }
38
29
  function defaultGetOptionValue(option) {
39
30
  return option === null || option === void 0 ? void 0 : option.value;
40
31
  }
@@ -49,10 +40,16 @@ function defaultGetOptionGroup(option) {
49
40
  var _a;
50
41
  return (_a = option === null || option === void 0 ? void 0 : option.group) !== null && _a !== void 0 ? _a : '';
51
42
  }
43
+ function defaultSetOptionGroup(option, group) {
44
+ return __assign(__assign({}, option), { group: group });
45
+ }
52
46
  function defaultGetOptionLabel(option) {
53
47
  var _a;
54
48
  return (_a = option === null || option === void 0 ? void 0 : option.label) !== null && _a !== void 0 ? _a : '';
55
49
  }
50
+ function stringContains(str1, str2) {
51
+ return str1.toLowerCase().includes(str2.toLowerCase());
52
+ }
56
53
  function useCustomReferenceProps(context, _a) {
57
54
  var _b = _a.search, search = _b === void 0 ? true : _b, overlayId = _a.overlayId, listId = _a.listId, _c = _a.open, open = _c === void 0 ? false : _c, _d = _a.onChangePointer, onChangePointer = _d === void 0 ? noop : _d;
58
55
  return {
@@ -145,9 +142,9 @@ function useKeyboardSelection(context, _a) {
145
142
  };
146
143
  }
147
144
  export function useSuperSelect(_a) {
148
- var components = _a.components, defaultValue = _a.defaultValue, _b = _a.disabled, disabled = _b === void 0 ? false : _b, _c = _a.getOptionGroup, getOptionGroup = _c === void 0 ? defaultGetOptionGroup : _c, _d = _a.getOptionIsBatch, getOptionIsBatch = _d === void 0 ? defaultGetOptionIsBatch : _d, _e = _a.getOptionIsDisabled, getOptionIsDisabled = _e === void 0 ? defaultGetOptionIsDisabled : _e, _f = _a.getOptionLabel, getOptionLabel = _f === void 0 ? defaultGetOptionLabel : _f, _g = _a.getOptionValue, getOptionValue = _g === void 0 ? defaultGetOptionValue : _g, _h = _a.multiple, multiple = _h === void 0 ? false : _h, onChange = _a.onChange, _j = _a.options, sourceOptions = _j === void 0 ? [] : _j, _k = _a.search, search = _k === void 0 ? true : _k, value_ = _a.value;
145
+ var components = _a.components, draggable = _a.draggable, defaultValue = _a.defaultValue, _b = _a.disabled, disabled = _b === void 0 ? false : _b, _c = _a.getOptionGroup, getOptionGroup = _c === void 0 ? defaultGetOptionGroup : _c, _d = _a.setOptionGroup, setOptionGroup = _d === void 0 ? defaultSetOptionGroup : _d, _e = _a.getOptionIsBatch, getOptionIsBatch = _e === void 0 ? defaultGetOptionIsBatch : _e, _f = _a.getOptionIsDisabled, getOptionIsDisabled = _f === void 0 ? defaultGetOptionIsDisabled : _f, _g = _a.getOptionLabel, getOptionLabel = _g === void 0 ? defaultGetOptionLabel : _g, _h = _a.getOptionValue, getOptionValue = _h === void 0 ? defaultGetOptionValue : _h, onManualSort = _a.onManualSort, _j = _a.multiple, multiple = _j === void 0 ? false : _j, onChange = _a.onChange, _k = _a.options, sourceOptions = _k === void 0 ? [] : _k, _l = _a.search, search = _l === void 0 ? true : _l, _m = _a.sort, sort = _m === void 0 ? true : _m, value_ = _a.value;
149
146
  var initialValue = defaultValue !== null && defaultValue !== void 0 ? defaultValue : (multiple ? [] : null);
150
- var _l = React.useState(initialValue), val = _l[0], setVal = _l[1];
147
+ var _o = React.useState(initialValue), val = _o[0], setVal = _o[1];
151
148
  var value = value_ !== undefined ? value_ : val;
152
149
  function setValue(v) {
153
150
  if (!value_) {
@@ -157,62 +154,115 @@ export function useSuperSelect(_a) {
157
154
  onChange(v);
158
155
  }
159
156
  }
160
- var _m = React.useState(''), searchValue = _m[0], setSearchValue_ = _m[1];
157
+ React.useEffect(function () {
158
+ if (!draggable) {
159
+ return;
160
+ }
161
+ var isUsingDefaultGetter = getOptionGroup === defaultGetOptionGroup;
162
+ var isUsingDefaultSetter = setOptionGroup === defaultSetOptionGroup;
163
+ if ((isUsingDefaultGetter && !isUsingDefaultSetter) ||
164
+ (!isUsingDefaultGetter && isUsingDefaultSetter)) {
165
+ console.warn("SuperSelect: Using potentially conflicting \"getOptionGroup\" and \"setOptionGroup\" implementations.\n Group reassignment after drag-and-drop operation might be broken.");
166
+ }
167
+ }, [draggable, getOptionGroup, setOptionGroup]);
168
+ var _p = React.useState(''), searchValue = _p[0], setSearchValue_ = _p[1];
161
169
  var setSearchValue = debounce(setSearchValue_, 250); // TODO use React 18 useDeferredValue
162
- var _o = React.useState(false), open = _o[0], setOpen = _o[1];
163
- var _p = React.useState(false), pointer = _p[0], setPointer = _p[1];
164
- var _q = React.useState(248), width = _q[0], setWidth = _q[1];
165
- var _r = React.useState(248), maxHeight = _r[0], setMaxHeight = _r[1];
166
- var _s = React.useState(null), activeMenuIndex = _s[0], setActiveMenuIndex = _s[1];
167
- var _t = React.useState(null), activeTokenIndex = _t[0], setActiveTokenIndex = _t[1];
170
+ var _q = React.useState(false), open = _q[0], setOpen = _q[1];
171
+ var _r = React.useState(false), pointer = _r[0], setPointer = _r[1];
172
+ var _s = React.useState(248), width = _s[0], setWidth = _s[1];
173
+ var _t = React.useState(248), maxHeight = _t[0], setMaxHeight = _t[1];
174
+ var _u = React.useState(null), activeMenuIndex = _u[0], setActiveMenuIndex = _u[1];
175
+ var _v = React.useState(null), activeTokenIndex = _v[0], setActiveTokenIndex = _v[1];
168
176
  var navigationListRef = React.useRef([]);
169
177
  var virtuoso = React.useRef(null);
170
178
  var overlayId = useId(); // TODO use React 18 useId
171
179
  var listId = useId(); // TODO use React 18 useId
180
+ // TODO #memogetters: consider having getOption... getter functions memoized by consumers
181
+ // Until then, exclude these callbacks from effect and memo dependencies
182
+ var sortOptions = React.useMemo(function () { return getOptionsSortingAlgorithm({ getOptionIsBatch: getOptionIsBatch, getOptionLabel: getOptionLabel }); },
183
+ // skip `getOptionIsBatch` and `getOptionLabel`
184
+ []);
185
+ var formatBatchOption = React.useMemo(function () {
186
+ return getBatchOptionFormatter({
187
+ value: value,
188
+ multiple: multiple,
189
+ getOptionIsBatch: getOptionIsBatch,
190
+ getOptionValue: getOptionValue,
191
+ });
192
+ },
193
+ // skip `getOptionIsBatch` and `getOptionValue`, refer to TODO #memogetters
194
+ [value, multiple]);
195
+ // collect groups, sort them and populate them with options, and sort the options inside the groups
196
+ var enforceOptionsSortingOrder = React.useCallback(function groupAndSort(opts) {
197
+ var _a = collectGroupsInOrderOfOccurrence(opts, getOptionGroup), groups = _a.groups, groupedOptions = _a.groupedOptions;
198
+ if (getIsAllOptionsUngrouped(groups)) {
199
+ return opts.sort(sortOptions);
200
+ }
201
+ return Object.entries(groupedOptions)
202
+ .sort(function (_a, _b) {
203
+ var groupA = _a[0];
204
+ var groupB = _b[0];
205
+ return sortOptgroups(groupA, groupB);
206
+ })
207
+ .flatMap(function (_a) {
208
+ var groupName = _a[0], groupOptions = _a[1];
209
+ return getOptgroup(groupName, groupOptions.sort(sortOptions));
210
+ });
211
+ },
212
+ // skip `getOptionGroup`, refer to TODO #memogetters
213
+ [sortOptions]);
214
+ // collect groups and populate them with options
215
+ var deriveOptionsSortingOrder = React.useCallback(function (opts) {
216
+ var _a = collectGroupsInOrderOfOccurrence(opts, getOptionGroup), groups = _a.groups, groupedOptions = _a.groupedOptions;
217
+ if (getIsAllOptionsUngrouped(groups)) {
218
+ return opts;
219
+ }
220
+ // display optgroups in the order of occurrence, as they are considered pre-sorted
221
+ return groups.flatMap(function (group) {
222
+ var groupOptions = groupedOptions[group];
223
+ return getOptgroup(group, groupOptions);
224
+ });
225
+ },
226
+ // skip `getOptionGroup`, refer to TODO #memogetters
227
+ []);
228
+ var groupAndSortAlgorithm = React.useMemo(function () { return (sort ? enforceOptionsSortingOrder : deriveOptionsSortingOrder); }, [sort, enforceOptionsSortingOrder, deriveOptionsSortingOrder]);
172
229
  var options = React.useMemo(function () {
173
- // TODO allow user to override this behavior
174
- function groupAndSort(opts) {
175
- var grouped = groupBy(opts, getOptionGroup);
176
- return Object.keys(grouped)
177
- .sort(function (a, b) { return compareStrings(a, b); })
178
- .map(function (group) {
179
- var _a;
180
- var groupOptions = grouped[group] || [];
181
- var groupOptionsSorted = groupOptions.sort(function (a, b) {
182
- return compareStrings(getOptionLabel(a), getOptionLabel(b));
183
- });
184
- var opts = group
185
- ? [(_a = {}, _a[optgroupSymbol] = true, _a.label = group, _a.group = group, _a)]
186
- : [];
187
- return opts.concat(groupOptionsSorted);
230
+ var queried = searchValue
231
+ ? sourceOptions.filter(function (opt) {
232
+ return stringContains(getOptionLabel(opt), searchValue);
188
233
  })
189
- .flat();
234
+ : __spreadArray([], sourceOptions, true); // make a copy of source options to prevent the mutation when sorting
235
+ return groupAndSortAlgorithm(queried).map(formatBatchOption);
236
+ },
237
+ // skip `getOptionLabel`, refer to TODO #memogetters
238
+ [groupAndSortAlgorithm, formatBatchOption, searchValue, sourceOptions]);
239
+ var _w = React.useState([]), draggableOptions = _w[0], setDraggableOptions = _w[1];
240
+ React.useEffect(function () {
241
+ if (!draggable) {
242
+ return;
190
243
  }
191
- var _a = sourceOptions.reduce(function (_a, opt) {
192
- var batched = _a[0], unbatched = _a[1];
193
- var match = getOptionLabel(opt)
194
- .toLowerCase()
195
- .includes(searchValue.toLowerCase());
196
- if (match) {
197
- if (isMultiple(multiple, value)) {
198
- if (getOptionIsBatch(opt)) {
199
- var val_1 = getOptionValue(opt);
200
- var disabled_1 = Array.isArray(val_1) && val_1.every(function (v) { return value.includes(v); });
201
- batched.push(__assign(__assign({}, opt), { disabled: disabled_1 }));
202
- }
203
- else {
204
- unbatched.push(opt);
205
- }
206
- }
207
- else {
208
- unbatched.push(opt);
209
- }
210
- }
211
- return [batched, unbatched];
212
- }, [[], []]), batchOptions = _a[0], options = _a[1];
213
- // group and sort all the options, putting batched options at the top
214
- return groupAndSort(batchOptions).concat(groupAndSort(options));
215
- }, [multiple, searchValue, sourceOptions, value]);
244
+ // make a copy of source options to prevent the mutation when sorting
245
+ var opts = groupAndSortAlgorithm(sourceOptions.map(function (opt) {
246
+ var _a;
247
+ return (__assign(__assign({}, opt), (_a = {}, _a[draggableOptionIdSymbol] = crypto.randomUUID(), _a)));
248
+ }));
249
+ setDraggableOptions(opts);
250
+ },
251
+ // in draggable mode, sourceOptions must be memoized, othewise reorder will not work
252
+ [draggable, sourceOptions, groupAndSortAlgorithm]);
253
+ var queriedDraggableOptions = React.useMemo(function () {
254
+ if (!draggable) {
255
+ return [];
256
+ }
257
+ var queried = searchValue
258
+ ? draggableOptions.filter(function (opt) {
259
+ return stringContains(getOptionLabel(opt), searchValue);
260
+ })
261
+ : draggableOptions;
262
+ return queried.map(formatBatchOption);
263
+ },
264
+ // skip `getOptionLabel`, refer to TODO #memogetters
265
+ [draggable, draggableOptions, searchValue, formatBatchOption]);
216
266
  var groupIndices = React.useMemo(function () {
217
267
  return options.reduce(function (acc, opt, i) {
218
268
  if (getOptionIsOptgroup(opt)) {
@@ -226,7 +276,7 @@ export function useSuperSelect(_a) {
226
276
  }, [options, value]);
227
277
  var selectedOption = React.useMemo(function () {
228
278
  return options.find(function (option) { return getOptionValue(option) === value; });
229
- }, [sourceOptions, value]);
279
+ }, [options, value]);
230
280
  var selectedLabel = React.useMemo(function () {
231
281
  return selectedOption ? getOptionLabel(selectedOption) : '';
232
282
  }, [selectedOption]);
@@ -289,7 +339,7 @@ export function useSuperSelect(_a) {
289
339
  }),
290
340
  ],
291
341
  });
292
- var _u = useInteractions([
342
+ var _x = useInteractions([
293
343
  useClick(floating.context, {
294
344
  enabled: !disabled,
295
345
  keyboardHandlers: false,
@@ -329,7 +379,7 @@ export function useSuperSelect(_a) {
329
379
  onChangePointer: function (p) { return setPointer(function () { return p; }); },
330
380
  search: search,
331
381
  }),
332
- ]), getReferenceProps = _u.getReferenceProps, getFloatingProps = _u.getFloatingProps, getItemProps = _u.getItemProps;
382
+ ]), getReferenceProps = _x.getReferenceProps, getFloatingProps = _x.getFloatingProps, getItemProps = _x.getItemProps;
333
383
  function getMultiInputProps() {
334
384
  return {
335
385
  disabled: disabled,
@@ -383,6 +433,33 @@ export function useSuperSelect(_a) {
383
433
  },
384
434
  };
385
435
  }
436
+ var onDragEnd = React.useCallback(function (result) {
437
+ if (!result.destination) {
438
+ return;
439
+ }
440
+ if (result.source.index === result.destination.index) {
441
+ return;
442
+ }
443
+ var startIndex = result.source.index;
444
+ var destinationIndex = result.destination.index;
445
+ setDraggableOptions(function (options) {
446
+ var _a = reorder(options, startIndex, destinationIndex, getOptionGroup), nextOptions = _a.nextOptions, prevGroup = _a.prevGroup, nextGroup = _a.nextGroup;
447
+ var adjustedOptions = prevGroup !== nextGroup
448
+ ? nextOptions.map(function (option, index) {
449
+ if (index === destinationIndex) {
450
+ return setOptionGroup(option, nextGroup);
451
+ }
452
+ return option;
453
+ })
454
+ : nextOptions;
455
+ if (typeof onManualSort === 'function') {
456
+ setTimeout(function () {
457
+ onManualSort(adjustedOptions.filter(function (option) { return !getOptionIsOptgroup(option); }));
458
+ }, 0);
459
+ }
460
+ return adjustedOptions;
461
+ });
462
+ }, []);
386
463
  // run effect when the `open` state changes
387
464
  //
388
465
  // if it was closed and is now open, reset the highlighted index to be
@@ -434,6 +511,7 @@ export function useSuperSelect(_a) {
434
511
  activeMenuIndex: activeMenuIndex,
435
512
  activeTokenIndex: activeTokenIndex,
436
513
  components: components,
514
+ draggable: draggable,
437
515
  floating: floating,
438
516
  getClearProps: getClearProps,
439
517
  getFloatingProps: getFloatingProps,
@@ -457,7 +535,7 @@ export function useSuperSelect(_a) {
457
535
  onSelect: onSelect,
458
536
  open: open,
459
537
  sourceOptions: sourceOptions,
460
- options: options,
538
+ options: draggable ? queriedDraggableOptions : options,
461
539
  overlayId: overlayId,
462
540
  searchValue: searchValue,
463
541
  selectedIndex: selectedIndex,
@@ -469,6 +547,7 @@ export function useSuperSelect(_a) {
469
547
  value: value,
470
548
  virtuoso: virtuoso,
471
549
  width: width,
550
+ onDragEnd: onDragEnd,
472
551
  };
473
552
  }
474
553
  //# sourceMappingURL=useSuperSelect.js.map