@salt-ds/lab 1.0.0-alpha.30 → 1.0.0-alpha.32

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 (147) hide show
  1. package/css/salt-lab.css +126 -176
  2. package/dist-cjs/app-header/AppHeader.css.js +1 -1
  3. package/dist-cjs/combo-box-next/ComboBoxNext.js +286 -291
  4. package/dist-cjs/combo-box-next/ComboBoxNext.js.map +1 -1
  5. package/dist-cjs/combo-box-next/useComboBoxNext.js +21 -9
  6. package/dist-cjs/combo-box-next/useComboBoxNext.js.map +1 -1
  7. package/dist-cjs/content-status/internal/StatusIndicator.js +1 -3
  8. package/dist-cjs/content-status/internal/StatusIndicator.js.map +1 -1
  9. package/dist-cjs/dialog/Dialog.css.js +1 -1
  10. package/dist-cjs/dialog/Dialog.js +70 -48
  11. package/dist-cjs/dialog/Dialog.js.map +1 -1
  12. package/dist-cjs/dialog/DialogActions.js.map +1 -1
  13. package/dist-cjs/dialog/DialogContent.css.js +1 -1
  14. package/dist-cjs/dialog/DialogContent.js +17 -8
  15. package/dist-cjs/dialog/DialogContent.js.map +1 -1
  16. package/dist-cjs/dialog/DialogContext.js +4 -1
  17. package/dist-cjs/dialog/DialogContext.js.map +1 -1
  18. package/dist-cjs/dialog/DialogTitle.css.js +1 -1
  19. package/dist-cjs/dialog/DialogTitle.js +21 -8
  20. package/dist-cjs/dialog/DialogTitle.js.map +1 -1
  21. package/dist-cjs/drawer/Drawer.css.js +1 -1
  22. package/dist-cjs/drawer/Drawer.js +61 -36
  23. package/dist-cjs/drawer/Drawer.js.map +1 -1
  24. package/dist-cjs/drawer/DrawerCloseButton.css.js +6 -0
  25. package/dist-cjs/drawer/DrawerCloseButton.css.js.map +1 -0
  26. package/dist-cjs/drawer/DrawerCloseButton.js +44 -0
  27. package/dist-cjs/drawer/DrawerCloseButton.js.map +1 -0
  28. package/dist-cjs/dropdown-next/DropdownNext.js +294 -308
  29. package/dist-cjs/dropdown-next/DropdownNext.js.map +1 -1
  30. package/dist-cjs/index.js +3 -9
  31. package/dist-cjs/index.js.map +1 -1
  32. package/dist-cjs/list-control/ListControlContext.js.map +1 -1
  33. package/dist-cjs/list-control/ListControlState.js +21 -20
  34. package/dist-cjs/list-control/ListControlState.js.map +1 -1
  35. package/dist-cjs/option/Option.js +0 -4
  36. package/dist-cjs/option/Option.js.map +1 -1
  37. package/dist-cjs/option/OptionList.css.js +1 -1
  38. package/dist-cjs/parent-child-layout/ParentChildLayout.css.js +1 -1
  39. package/dist-cjs/parent-child-layout/ParentChildLayout.js +30 -38
  40. package/dist-cjs/parent-child-layout/ParentChildLayout.js.map +1 -1
  41. package/dist-cjs/slider/Slider.css.js +1 -1
  42. package/dist-cjs/stepped-tracker/TrackerConnector/TrackerConnector.css.js +1 -1
  43. package/dist-cjs/tabs-next/TabNext.css.js +1 -1
  44. package/dist-cjs/tabs-next/TabstripNext.css.js +1 -1
  45. package/dist-es/app-header/AppHeader.css.js +1 -1
  46. package/dist-es/combo-box-next/ComboBoxNext.js +287 -292
  47. package/dist-es/combo-box-next/ComboBoxNext.js.map +1 -1
  48. package/dist-es/combo-box-next/useComboBoxNext.js +21 -9
  49. package/dist-es/combo-box-next/useComboBoxNext.js.map +1 -1
  50. package/dist-es/content-status/internal/StatusIndicator.js +1 -3
  51. package/dist-es/content-status/internal/StatusIndicator.js.map +1 -1
  52. package/dist-es/dialog/Dialog.css.js +1 -1
  53. package/dist-es/dialog/Dialog.js +73 -52
  54. package/dist-es/dialog/Dialog.js.map +1 -1
  55. package/dist-es/dialog/DialogActions.js.map +1 -1
  56. package/dist-es/dialog/DialogContent.css.js +1 -1
  57. package/dist-es/dialog/DialogContent.js +19 -10
  58. package/dist-es/dialog/DialogContent.js.map +1 -1
  59. package/dist-es/dialog/DialogContext.js +4 -1
  60. package/dist-es/dialog/DialogContext.js.map +1 -1
  61. package/dist-es/dialog/DialogTitle.css.js +1 -1
  62. package/dist-es/dialog/DialogTitle.js +22 -9
  63. package/dist-es/dialog/DialogTitle.js.map +1 -1
  64. package/dist-es/drawer/Drawer.css.js +1 -1
  65. package/dist-es/drawer/Drawer.js +65 -39
  66. package/dist-es/drawer/Drawer.js.map +1 -1
  67. package/dist-es/drawer/DrawerCloseButton.css.js +4 -0
  68. package/dist-es/drawer/DrawerCloseButton.css.js.map +1 -0
  69. package/dist-es/drawer/DrawerCloseButton.js +36 -0
  70. package/dist-es/drawer/DrawerCloseButton.js.map +1 -0
  71. package/dist-es/dropdown-next/DropdownNext.js +295 -309
  72. package/dist-es/dropdown-next/DropdownNext.js.map +1 -1
  73. package/dist-es/index.js +3 -6
  74. package/dist-es/index.js.map +1 -1
  75. package/dist-es/list-control/ListControlContext.js.map +1 -1
  76. package/dist-es/list-control/ListControlState.js +21 -20
  77. package/dist-es/list-control/ListControlState.js.map +1 -1
  78. package/dist-es/option/Option.js +0 -4
  79. package/dist-es/option/Option.js.map +1 -1
  80. package/dist-es/option/OptionList.css.js +1 -1
  81. package/dist-es/parent-child-layout/ParentChildLayout.css.js +1 -1
  82. package/dist-es/parent-child-layout/ParentChildLayout.js +32 -40
  83. package/dist-es/parent-child-layout/ParentChildLayout.js.map +1 -1
  84. package/dist-es/slider/Slider.css.js +1 -1
  85. package/dist-es/stepped-tracker/TrackerConnector/TrackerConnector.css.js +1 -1
  86. package/dist-es/tabs-next/TabNext.css.js +1 -1
  87. package/dist-es/tabs-next/TabstripNext.css.js +1 -1
  88. package/dist-types/combo-box-next/ComboBoxNext.d.ts +13 -3
  89. package/dist-types/combo-box-next/useComboBoxNext.d.ts +13 -16
  90. package/dist-types/content-status/internal/StatusIndicator.d.ts +1 -1
  91. package/dist-types/dialog/Dialog.d.ts +25 -2
  92. package/dist-types/dialog/DialogContext.d.ts +2 -2
  93. package/dist-types/dialog/DialogTitle.d.ts +19 -5
  94. package/dist-types/drawer/Drawer.d.ts +13 -7
  95. package/dist-types/drawer/DrawerCloseButton.d.ts +2 -0
  96. package/dist-types/drawer/index.d.ts +1 -1
  97. package/dist-types/dropdown-next/DropdownNext.d.ts +13 -3
  98. package/dist-types/index.d.ts +0 -2
  99. package/dist-types/list-control/ListControlContext.d.ts +12 -11
  100. package/dist-types/list-control/ListControlState.d.ts +21 -21
  101. package/dist-types/option/Option.d.ts +1 -1
  102. package/dist-types/parent-child-layout/ParentChildLayout.d.ts +8 -13
  103. package/package.json +2 -2
  104. package/dist-cjs/dialog/useDialog.js +0 -31
  105. package/dist-cjs/dialog/useDialog.js.map +0 -1
  106. package/dist-cjs/drawer/useDrawer.js +0 -31
  107. package/dist-cjs/drawer/useDrawer.js.map +0 -1
  108. package/dist-cjs/parent-child-item/ParentChildItem.css.js +0 -6
  109. package/dist-cjs/parent-child-item/ParentChildItem.css.js.map +0 -1
  110. package/dist-cjs/parent-child-item/ParentChildItem.js +0 -48
  111. package/dist-cjs/parent-child-item/ParentChildItem.js.map +0 -1
  112. package/dist-cjs/progress/CircularProgress/CircularProgress.css.js +0 -6
  113. package/dist-cjs/progress/CircularProgress/CircularProgress.css.js.map +0 -1
  114. package/dist-cjs/progress/CircularProgress/CircularProgress.js +0 -89
  115. package/dist-cjs/progress/CircularProgress/CircularProgress.js.map +0 -1
  116. package/dist-cjs/progress/Info.js +0 -20
  117. package/dist-cjs/progress/Info.js.map +0 -1
  118. package/dist-cjs/progress/LinearProgress/LinearProgress.css.js +0 -6
  119. package/dist-cjs/progress/LinearProgress/LinearProgress.css.js.map +0 -1
  120. package/dist-cjs/progress/LinearProgress/LinearProgress.js +0 -63
  121. package/dist-cjs/progress/LinearProgress/LinearProgress.js.map +0 -1
  122. package/dist-es/dialog/useDialog.js +0 -27
  123. package/dist-es/dialog/useDialog.js.map +0 -1
  124. package/dist-es/drawer/useDrawer.js +0 -27
  125. package/dist-es/drawer/useDrawer.js.map +0 -1
  126. package/dist-es/parent-child-item/ParentChildItem.css.js +0 -4
  127. package/dist-es/parent-child-item/ParentChildItem.css.js.map +0 -1
  128. package/dist-es/parent-child-item/ParentChildItem.js +0 -44
  129. package/dist-es/parent-child-item/ParentChildItem.js.map +0 -1
  130. package/dist-es/progress/CircularProgress/CircularProgress.css.js +0 -4
  131. package/dist-es/progress/CircularProgress/CircularProgress.css.js.map +0 -1
  132. package/dist-es/progress/CircularProgress/CircularProgress.js +0 -85
  133. package/dist-es/progress/CircularProgress/CircularProgress.js.map +0 -1
  134. package/dist-es/progress/Info.js +0 -16
  135. package/dist-es/progress/Info.js.map +0 -1
  136. package/dist-es/progress/LinearProgress/LinearProgress.css.js +0 -4
  137. package/dist-es/progress/LinearProgress/LinearProgress.css.js.map +0 -1
  138. package/dist-es/progress/LinearProgress/LinearProgress.js +0 -59
  139. package/dist-es/progress/LinearProgress/LinearProgress.js.map +0 -1
  140. package/dist-types/dialog/useDialog.d.ts +0 -25
  141. package/dist-types/drawer/useDrawer.d.ts +0 -25
  142. package/dist-types/parent-child-item/ParentChildItem.d.ts +0 -31
  143. package/dist-types/parent-child-item/index.d.ts +0 -1
  144. package/dist-types/progress/CircularProgress/CircularProgress.d.ts +0 -25
  145. package/dist-types/progress/Info.d.ts +0 -6
  146. package/dist-types/progress/LinearProgress/LinearProgress.d.ts +0 -26
  147. package/dist-types/progress/index.d.ts +0 -2
@@ -13,308 +13,303 @@ var useComboBoxNext = require('./useComboBoxNext.js');
13
13
  var OptionList = require('../option/OptionList.js');
14
14
 
15
15
  const withBaseName = core.makePrefixer("saltComboBoxNext");
16
- const ComboBoxNext = React.forwardRef(
17
- function ComboBox(props, ref) {
18
- var _a, _b;
19
- const {
20
- children,
21
- className,
22
- disabled: disabledProp,
23
- endAdornment,
24
- readOnly: readOnlyProp,
25
- multiselect,
26
- onSelectionChange,
27
- selected,
28
- defaultSelected,
29
- defaultOpen,
30
- onOpenChange,
31
- onChange,
32
- open,
33
- inputProps: inputPropsProp,
34
- variant = "primary",
35
- onClick,
36
- onKeyDown,
37
- onFocus,
38
- onBlur,
39
- value,
40
- defaultValue,
41
- ...rest
42
- } = props;
43
- const {
44
- a11yProps: { "aria-labelledby": formFieldLabelledBy } = {},
45
- disabled: formFieldDisabled,
46
- readOnly: formFieldReadOnly
47
- } = core.useFormFieldProps();
48
- const disabled = Boolean(disabledProp) || formFieldDisabled;
49
- const readOnly = Boolean(readOnlyProp) || formFieldReadOnly;
50
- const listControl = useComboBoxNext.useComboBoxNext({
51
- open,
52
- defaultOpen,
53
- onOpenChange,
54
- multiselect,
55
- defaultSelected,
56
- selected,
57
- onSelectionChange,
58
- value,
59
- defaultValue
60
- });
61
- const {
62
- activeState,
63
- setActive,
64
- openState,
65
- setOpen,
66
- openKey,
67
- getOptionAtIndex,
68
- getIndexOfOption,
69
- getOptionsMatching,
70
- options,
71
- selectedState,
72
- select,
73
- clear,
74
- setFocusVisibleState,
75
- focusedState,
76
- setFocusedState,
77
- listRef,
78
- valueState,
79
- setValueState
80
- } = listControl;
81
- const { Component: FloatingComponent } = core.useFloatingComponent();
82
- const { x, y, strategy, elements, floating, reference } = core.useFloatingUI({
83
- open,
84
- placement: "bottom-start",
85
- middleware: [
86
- react.size({
87
- apply({ rects, elements: elements2, availableHeight }) {
88
- Object.assign(elements2.floating.style, {
89
- minWidth: `${rects.reference.width}px`,
90
- maxHeight: `max(calc(${availableHeight}px - var(--salt-spacing-100)), calc((var(--salt-size-base) + var(--salt-spacing-100)) * 5))`
91
- });
92
- }
93
- }),
94
- react.flip({ fallbackStrategy: "initialPlacement" })
95
- ]
96
- });
97
- const handleRef = core.useForkRef(reference, ref);
98
- const inputRef = React.useRef(null);
99
- const handleButtonClick = (event) => {
100
- if (!readOnly) {
101
- event.stopPropagation();
102
- setFocusVisibleState(false);
103
- setOpen(event, !openState);
104
- }
105
- };
106
- const handleButtonFocus = () => {
107
- var _a2;
108
- (_a2 = inputRef.current) == null ? void 0 : _a2.focus();
109
- };
110
- const handleKeyDown = (event) => {
111
- const currentIndex = activeState ? getIndexOfOption(activeState) : -1;
112
- const count = options.length - 1;
113
- if (readOnly) {
16
+ const ComboBoxNext = React.forwardRef(function ComboBox(props, ref) {
17
+ var _a, _b;
18
+ const {
19
+ children,
20
+ className,
21
+ disabled: disabledProp,
22
+ endAdornment,
23
+ readOnly: readOnlyProp,
24
+ multiselect,
25
+ onSelectionChange,
26
+ selected,
27
+ defaultSelected,
28
+ defaultOpen,
29
+ onOpenChange,
30
+ onChange,
31
+ open,
32
+ inputProps: inputPropsProp,
33
+ variant = "primary",
34
+ onClick,
35
+ onKeyDown,
36
+ onFocus,
37
+ onBlur,
38
+ value,
39
+ defaultValue,
40
+ ...rest
41
+ } = props;
42
+ const {
43
+ a11yProps: { "aria-labelledby": formFieldLabelledBy } = {},
44
+ disabled: formFieldDisabled,
45
+ readOnly: formFieldReadOnly
46
+ } = core.useFormFieldProps();
47
+ const disabled = Boolean(disabledProp) || formFieldDisabled;
48
+ const readOnly = Boolean(readOnlyProp) || formFieldReadOnly;
49
+ const inputRef = React.useRef(null);
50
+ const listControl = useComboBoxNext.useComboBoxNext({
51
+ open,
52
+ defaultOpen,
53
+ onOpenChange,
54
+ multiselect,
55
+ defaultSelected,
56
+ selected,
57
+ onSelectionChange,
58
+ value,
59
+ defaultValue,
60
+ disabled,
61
+ readOnly
62
+ });
63
+ const {
64
+ activeState,
65
+ setActive,
66
+ openState,
67
+ setOpen,
68
+ openKey,
69
+ getOptionAtIndex,
70
+ getIndexOfOption,
71
+ getOptionsMatching,
72
+ options,
73
+ selectedState,
74
+ select,
75
+ clear,
76
+ setFocusVisibleState,
77
+ focusedState,
78
+ setFocusedState,
79
+ listRef,
80
+ valueState,
81
+ setValueState
82
+ } = listControl;
83
+ const { Component: FloatingComponent } = core.useFloatingComponent();
84
+ const handleOpenChange = (newOpen, _event, reason) => {
85
+ const focusNotBlur = reason === "focus" && newOpen;
86
+ if (readOnly || focusNotBlur)
87
+ return;
88
+ setOpen(newOpen);
89
+ };
90
+ const { x, y, strategy, elements, floating, reference, context } = core.useFloatingUI({
91
+ open: openState && !readOnly && children != void 0,
92
+ onOpenChange: handleOpenChange,
93
+ placement: "bottom-start",
94
+ middleware: [
95
+ react.size({
96
+ apply({ rects, elements: elements2, availableHeight }) {
97
+ Object.assign(elements2.floating.style, {
98
+ minWidth: `${rects.reference.width}px`,
99
+ maxHeight: `max(calc(${availableHeight}px - var(--salt-spacing-100)), calc((var(--salt-size-base) + var(--salt-spacing-100)) * 5))`
100
+ });
101
+ }
102
+ }),
103
+ react.flip({ fallbackStrategy: "initialPlacement" })
104
+ ]
105
+ });
106
+ const { getReferenceProps, getFloatingProps } = react.useInteractions([
107
+ react.useDismiss(context),
108
+ react.useFocus(context),
109
+ react.useClick(context, { keyboardHandlers: false })
110
+ ]);
111
+ const handleRef = core.useForkRef(reference, ref);
112
+ const handleButtonClick = (event) => {
113
+ if (!readOnly) {
114
+ event.stopPropagation();
115
+ setFocusVisibleState(false);
116
+ setOpen(!openState, "manual");
117
+ }
118
+ };
119
+ const handleButtonFocus = () => {
120
+ var _a2;
121
+ (_a2 = inputRef.current) == null ? void 0 : _a2.focus();
122
+ };
123
+ const handleKeyDown = (event) => {
124
+ const currentIndex = activeState ? getIndexOfOption(activeState) : -1;
125
+ const count = options.length - 1;
126
+ if (readOnly) {
127
+ return;
128
+ }
129
+ if (!openState) {
130
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
131
+ setOpen(true, void 0, event.key);
114
132
  return;
115
133
  }
116
- if (!openState) {
117
- if (event.key === "ArrowDown" || event.key === "ArrowUp") {
118
- setOpen(event, true);
134
+ }
135
+ let newActive;
136
+ switch (event.key) {
137
+ case "ArrowDown":
138
+ newActive = getOptionAtIndex(Math.min(count, currentIndex + 1));
139
+ break;
140
+ case "ArrowUp":
141
+ newActive = getOptionAtIndex(Math.max(0, currentIndex - 1));
142
+ break;
143
+ case "Home":
144
+ newActive = getOptionAtIndex(0);
145
+ break;
146
+ case "End":
147
+ newActive = getOptionAtIndex(count);
148
+ break;
149
+ case "PageUp":
150
+ newActive = getOptionAtIndex(Math.max(0, currentIndex - 10));
151
+ break;
152
+ case "PageDown":
153
+ newActive = getOptionAtIndex(Math.min(count, currentIndex + 10));
154
+ break;
155
+ case "Enter":
156
+ if (openState && (activeState == null ? void 0 : activeState.disabled)) {
157
+ event.preventDefault();
119
158
  return;
120
159
  }
121
- }
122
- let newActive;
123
- switch (event.key) {
124
- case "ArrowDown":
125
- newActive = getOptionAtIndex(Math.min(count, currentIndex + 1));
126
- break;
127
- case "ArrowUp":
128
- newActive = getOptionAtIndex(Math.max(0, currentIndex - 1));
129
- break;
130
- case "Home":
131
- newActive = getOptionAtIndex(0);
132
- break;
133
- case "End":
134
- newActive = getOptionAtIndex(count);
135
- break;
136
- case "PageUp":
137
- newActive = getOptionAtIndex(Math.max(0, currentIndex - 10));
138
- break;
139
- case "PageDown":
140
- newActive = getOptionAtIndex(Math.min(count, currentIndex + 10));
141
- break;
142
- case "Enter":
143
- if (openState && (activeState == null ? void 0 : activeState.disabled)) {
144
- event.preventDefault();
145
- return;
146
- }
147
- if (!openState || !activeState) {
148
- return;
149
- }
150
- select(event, activeState);
151
- if (!multiselect) {
152
- event.preventDefault();
153
- setOpen(event, false);
154
- }
155
- break;
156
- case "Escape":
157
- setOpen(event, false);
158
- break;
159
- case "Tab":
160
- if (!multiselect && activeState) {
161
- select(event, activeState);
162
- }
163
- break;
164
- }
165
- if (newActive && (newActive == null ? void 0 : newActive.id) != (activeState == null ? void 0 : activeState.id)) {
166
- event.preventDefault();
167
- setActive(newActive);
168
- setFocusVisibleState(true);
169
- }
170
- onKeyDown == null ? void 0 : onKeyDown(event);
171
- };
172
- const handleFocus = (event) => {
173
- setFocusedState(true);
174
- onFocus == null ? void 0 : onFocus(event);
175
- };
176
- const ignoreBlur = React.useRef(false);
177
- const handleBlur = (event) => {
178
- if (!ignoreBlur.current) {
179
- setOpen(event, false);
180
- }
181
- ignoreBlur.current = false;
182
- setFocusedState(false);
183
- onBlur == null ? void 0 : onBlur(event);
184
- };
185
- const handleClick = (event) => {
186
- if (!readOnly) {
187
- setOpen(event, true);
188
- }
189
- onClick == null ? void 0 : onClick(event);
190
- };
191
- const handleChange = (event) => {
192
- if (!openState) {
193
- setOpen(event, true);
194
- }
195
- if (event.target.value === "" && !multiselect) {
196
- clear(event);
197
- }
198
- setValueState(event.target.value);
199
- queueMicrotask(() => {
200
- const newOption = getOptionAtIndex(0);
201
- if (newOption) {
202
- setActive(newOption);
160
+ if (!openState || !activeState) {
161
+ return;
203
162
  }
204
- });
205
- onChange == null ? void 0 : onChange(event);
206
- };
207
- const handleListMouseOver = () => {
208
- setFocusVisibleState(false);
209
- };
210
- const handleListMouseDown = () => {
211
- ignoreBlur.current = true;
212
- };
213
- const handleListFocus = () => {
214
- var _a2;
215
- (_a2 = inputRef.current) == null ? void 0 : _a2.focus();
216
- };
217
- const handleListClick = () => {
218
- var _a2;
219
- (_a2 = inputRef.current) == null ? void 0 : _a2.focus();
220
- };
221
- React.useEffect(() => {
222
- const activeIndex = activeState ? getIndexOfOption(activeState) : -1;
223
- if (openState && activeIndex < 0) {
224
- if (openKey.current.key === "ArrowDown") {
225
- setActive(getOptionAtIndex(0));
226
- } else if (openKey.current.key === "ArrowUp") {
227
- setActive(getOptionAtIndex(options.length - 1));
228
- } else {
229
- if (selectedState.length > 0) {
230
- const selected2 = getOptionsMatching(
231
- (option) => option.value === selectedState[0]
232
- ).pop();
233
- if (selected2) {
234
- setActive(selected2);
235
- }
236
- } else {
237
- setActive(getOptionAtIndex(0));
238
- }
163
+ select(event, activeState);
164
+ if (!multiselect) {
165
+ event.preventDefault();
239
166
  }
240
- } else if (!openState) {
241
- setActive(void 0);
167
+ break;
168
+ case "Tab":
169
+ if (!multiselect && activeState) {
170
+ select(event, activeState);
171
+ }
172
+ break;
173
+ }
174
+ if (newActive && (newActive == null ? void 0 : newActive.id) != (activeState == null ? void 0 : activeState.id)) {
175
+ event.preventDefault();
176
+ setActive(newActive);
177
+ setFocusVisibleState(true);
178
+ }
179
+ onKeyDown == null ? void 0 : onKeyDown(event);
180
+ };
181
+ const handleFocus = (event) => {
182
+ setFocusedState(true);
183
+ onFocus == null ? void 0 : onFocus(event);
184
+ };
185
+ const handleBlur = (event) => {
186
+ setFocusedState(false);
187
+ onBlur == null ? void 0 : onBlur(event);
188
+ };
189
+ const handleChange = (event) => {
190
+ if (!openState) {
191
+ setOpen(true, "input");
192
+ }
193
+ if (event.target.value === "" && !multiselect) {
194
+ clear(event);
195
+ }
196
+ setValueState(event.target.value);
197
+ queueMicrotask(() => {
198
+ const newOption = getOptionAtIndex(0);
199
+ if (newOption) {
200
+ setActive(newOption);
201
+ }
202
+ });
203
+ onChange == null ? void 0 : onChange(event);
204
+ };
205
+ const handleListMouseOver = () => {
206
+ setFocusVisibleState(false);
207
+ };
208
+ const handleFocusInput = () => {
209
+ var _a2;
210
+ (_a2 = inputRef.current) == null ? void 0 : _a2.focus();
211
+ };
212
+ React.useEffect(() => {
213
+ const activeIndex = activeState ? getIndexOfOption(activeState) : -1;
214
+ let newActive = void 0;
215
+ if (activeIndex > 0) {
216
+ return;
217
+ }
218
+ if (!openState) {
219
+ setActive(void 0);
220
+ return;
221
+ }
222
+ if (selectedState.length > 0) {
223
+ newActive = getOptionsMatching(
224
+ (option) => option.value === selectedState[0]
225
+ ).pop();
226
+ }
227
+ if (!newActive) {
228
+ if (openKey.current === "ArrowDown") {
229
+ newActive = getOptionAtIndex(0);
230
+ } else if (openKey.current === "ArrowUp") {
231
+ newActive = getOptionAtIndex(options.length - 1);
242
232
  }
243
- }, [openState, children]);
244
- const buttonId = core.useId();
245
- const listId = core.useId();
246
- return /* @__PURE__ */ jsxRuntime.jsxs(ListControlContext.ListControlContext.Provider, {
247
- value: listControl,
248
- children: [
249
- /* @__PURE__ */ jsxRuntime.jsx(core.Input, {
250
- className: clsx.clsx(withBaseName(), className),
251
- endAdornment: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
252
- children: [
253
- endAdornment,
254
- !readOnly ? /* @__PURE__ */ jsxRuntime.jsx(core.Button, {
255
- "aria-labelledby": clsx.clsx(buttonId, formFieldLabelledBy),
256
- "aria-label": "Show options",
257
- "aria-expanded": openState,
258
- "aria-controls": openState ? listId : void 0,
259
- "aria-haspopup": "listbox",
260
- disabled,
261
- variant: "secondary",
262
- onClick: handleButtonClick,
263
- onFocus: handleButtonFocus,
264
- tabIndex: -1,
265
- children: openState ? /* @__PURE__ */ jsxRuntime.jsx(icons.ChevronUpIcon, {
266
- "aria-hidden": true
267
- }) : /* @__PURE__ */ jsxRuntime.jsx(icons.ChevronDownIcon, {
268
- "aria-hidden": true
269
- })
270
- }) : void 0
271
- ]
272
- }),
273
- onClick: handleClick,
233
+ }
234
+ if (!newActive) {
235
+ newActive = getOptionAtIndex(0);
236
+ }
237
+ setActive(newActive);
238
+ }, [openState, children]);
239
+ const buttonId = core.useId();
240
+ const listId = core.useId();
241
+ return /* @__PURE__ */ jsxRuntime.jsxs(ListControlContext.ListControlContext.Provider, {
242
+ value: listControl,
243
+ children: [
244
+ /* @__PURE__ */ jsxRuntime.jsx(core.Input, {
245
+ className: clsx.clsx(withBaseName(), className),
246
+ endAdornment: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
247
+ children: [
248
+ endAdornment,
249
+ !readOnly ? /* @__PURE__ */ jsxRuntime.jsx(core.Button, {
250
+ "aria-labelledby": clsx.clsx(buttonId, formFieldLabelledBy),
251
+ "aria-label": "Show options",
252
+ "aria-expanded": openState,
253
+ "aria-controls": openState ? listId : void 0,
254
+ "aria-haspopup": "listbox",
255
+ disabled,
256
+ variant: "secondary",
257
+ onClick: handleButtonClick,
258
+ onFocus: handleButtonFocus,
259
+ tabIndex: -1,
260
+ children: openState ? /* @__PURE__ */ jsxRuntime.jsx(icons.ChevronUpIcon, {
261
+ "aria-hidden": true
262
+ }) : /* @__PURE__ */ jsxRuntime.jsx(icons.ChevronDownIcon, {
263
+ "aria-hidden": true
264
+ })
265
+ }) : void 0
266
+ ]
267
+ }),
268
+ onChange: handleChange,
269
+ role: "combobox",
270
+ disabled,
271
+ readOnly,
272
+ inputProps: {
273
+ role: "combobox",
274
+ "aria-expanded": openState,
275
+ "aria-multiselectable": multiselect,
276
+ "aria-controls": openState ? listId : void 0,
277
+ ...inputPropsProp
278
+ },
279
+ "aria-activedescendant": activeState == null ? void 0 : activeState.id,
280
+ variant,
281
+ inputRef,
282
+ value: valueState,
283
+ ref: handleRef,
284
+ ...getReferenceProps({
274
285
  onBlur: handleBlur,
275
286
  onFocus: handleFocus,
276
287
  onKeyDown: handleKeyDown,
277
- onChange: handleChange,
278
- role: "combobox",
279
- disabled,
280
- readOnly,
281
- inputProps: {
282
- role: "combobox",
283
- "aria-expanded": openState,
284
- "aria-multiselectable": multiselect,
285
- "aria-controls": openState ? listId : void 0,
286
- ...inputPropsProp
287
- },
288
- "aria-activedescendant": activeState == null ? void 0 : activeState.id,
289
- variant,
290
- inputRef,
291
- value: valueState,
292
- ...rest,
293
- ref: handleRef
294
- }),
295
- /* @__PURE__ */ jsxRuntime.jsx(FloatingComponent, {
296
- open: (openState || focusedState) && !readOnly,
297
- left: x != null ? x : 0,
298
- top: y != null ? y : 0,
299
- position: strategy,
300
- width: (_a = elements.floating) == null ? void 0 : _a.offsetWidth,
301
- height: (_b = elements.floating) == null ? void 0 : _b.offsetHeight,
302
- ref: floating,
303
- children: /* @__PURE__ */ jsxRuntime.jsx(OptionList.OptionList, {
304
- collapsed: !openState,
305
- ref: listRef,
306
- id: listId,
307
- onMouseOver: handleListMouseOver,
308
- onMouseDown: handleListMouseDown,
309
- onFocus: handleListFocus,
310
- onClick: handleListClick,
311
- children
312
- })
288
+ ...rest
313
289
  })
314
- ]
315
- });
316
- }
317
- );
290
+ }),
291
+ /* @__PURE__ */ jsxRuntime.jsx(FloatingComponent, {
292
+ open: (openState || focusedState) && !readOnly && children != void 0,
293
+ ...getFloatingProps(),
294
+ left: x != null ? x : 0,
295
+ top: y != null ? y : 0,
296
+ position: strategy,
297
+ width: (_a = elements.floating) == null ? void 0 : _a.offsetWidth,
298
+ height: (_b = elements.floating) == null ? void 0 : _b.offsetHeight,
299
+ ref: floating,
300
+ children: /* @__PURE__ */ jsxRuntime.jsx(OptionList.OptionList, {
301
+ collapsed: !openState,
302
+ ref: listRef,
303
+ id: listId,
304
+ onMouseOver: handleListMouseOver,
305
+ onFocus: handleFocusInput,
306
+ onClick: handleFocusInput,
307
+ children
308
+ })
309
+ })
310
+ ]
311
+ });
312
+ });
318
313
 
319
314
  exports.ComboBoxNext = ComboBoxNext;
320
315
  //# sourceMappingURL=ComboBoxNext.js.map