@itwin/itwinui-react 3.0.0-dev.6 → 3.0.0-dev.8

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 (283) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/cjs/core/Alert/Alert.d.ts +20 -9
  3. package/cjs/core/Alert/Alert.js +48 -10
  4. package/cjs/core/Avatar/Avatar.d.ts +3 -2
  5. package/cjs/core/Avatar/Avatar.js +21 -19
  6. package/cjs/core/AvatarGroup/AvatarGroup.js +3 -8
  7. package/cjs/core/ButtonGroup/ButtonGroup.js +41 -36
  8. package/cjs/core/Buttons/Button/Button.d.ts +15 -2
  9. package/cjs/core/Buttons/Button/Button.js +23 -9
  10. package/cjs/core/Buttons/DropdownButton/DropdownButton.js +1 -1
  11. package/cjs/core/Buttons/IconButton/IconButton.d.ts +5 -1
  12. package/cjs/core/Buttons/IconButton/IconButton.js +27 -38
  13. package/cjs/core/Buttons/SplitButton/SplitButton.d.ts +9 -0
  14. package/cjs/core/Buttons/SplitButton/SplitButton.js +25 -13
  15. package/cjs/core/Carousel/Carousel.d.ts +6 -4
  16. package/cjs/core/Carousel/Carousel.js +2 -2
  17. package/cjs/core/Carousel/CarouselDot.js +1 -3
  18. package/cjs/core/Carousel/CarouselNavigation.d.ts +6 -4
  19. package/cjs/core/ColorPicker/ColorBuilder.js +2 -1
  20. package/cjs/core/ColorPicker/ColorInputPanel.js +172 -231
  21. package/cjs/core/ComboBox/ComboBox.js +3 -3
  22. package/cjs/core/ComboBox/ComboBoxDropdown.js +4 -9
  23. package/cjs/core/ComboBox/ComboBoxEndIcon.js +3 -22
  24. package/cjs/core/ComboBox/ComboBoxInput.js +1 -1
  25. package/cjs/core/ComboBox/ComboBoxMenu.d.ts +2 -2
  26. package/cjs/core/ComboBox/ComboBoxMenu.js +5 -5
  27. package/cjs/core/ComboBox/ComboBoxMenuItem.d.ts +1 -1
  28. package/cjs/core/ComboBox/ComboBoxMenuItem.js +8 -6
  29. package/cjs/core/ComboBox/helpers.d.ts +1 -2
  30. package/cjs/core/DatePicker/DatePicker.d.ts +30 -8
  31. package/cjs/core/DatePicker/DatePicker.js +47 -6
  32. package/cjs/core/Dialog/Dialog.js +10 -17
  33. package/cjs/core/Dialog/DialogContext.d.ts +3 -4
  34. package/cjs/core/Dialog/DialogMain.js +5 -5
  35. package/cjs/core/ExpandableBlock/ExpandableBlock.d.ts +20 -14
  36. package/cjs/core/ExpandableBlock/ExpandableBlock.js +39 -18
  37. package/cjs/core/FileUpload/FileUpload.d.ts +4 -0
  38. package/cjs/core/FileUpload/FileUpload.js +24 -3
  39. package/cjs/core/Header/HeaderBasicButton.js +3 -16
  40. package/cjs/core/Header/HeaderDropdownButton.js +1 -1
  41. package/cjs/core/Header/HeaderSplitButton.js +3 -4
  42. package/cjs/core/Input/Input.d.ts +4 -0
  43. package/cjs/core/Input/Input.js +2 -1
  44. package/cjs/core/InputGrid/InputGrid.d.ts +25 -0
  45. package/cjs/core/InputGrid/InputGrid.js +39 -0
  46. package/cjs/core/InputGrid/index.d.ts +3 -0
  47. package/cjs/core/InputGrid/index.js +15 -0
  48. package/cjs/core/InputGroup/InputGroup.d.ts +13 -0
  49. package/cjs/core/InputGroup/InputGroup.js +35 -9
  50. package/cjs/core/InputWithDecorations/InputWithDecorations.d.ts +39 -0
  51. package/cjs/core/InputWithDecorations/InputWithDecorations.js +81 -0
  52. package/cjs/core/InputWithDecorations/index.d.ts +3 -0
  53. package/cjs/core/InputWithDecorations/index.js +15 -0
  54. package/cjs/core/Label/Label.d.ts +5 -0
  55. package/cjs/core/Label/Label.js +2 -0
  56. package/cjs/core/LabeledInput/LabeledInput.d.ts +22 -16
  57. package/cjs/core/LabeledInput/LabeledInput.js +52 -29
  58. package/cjs/core/LabeledSelect/LabeledSelect.d.ts +17 -7
  59. package/cjs/core/LabeledSelect/LabeledSelect.js +36 -17
  60. package/cjs/core/LabeledTextarea/LabeledTextarea.d.ts +15 -5
  61. package/cjs/core/LabeledTextarea/LabeledTextarea.js +12 -45
  62. package/cjs/core/Menu/Menu.d.ts +1 -1
  63. package/cjs/core/Menu/Menu.js +1 -1
  64. package/cjs/core/Menu/MenuDivider.d.ts +2 -1
  65. package/cjs/core/Menu/MenuDivider.js +1 -1
  66. package/cjs/core/Menu/MenuItem.d.ts +1 -1
  67. package/cjs/core/Menu/MenuItem.js +1 -0
  68. package/cjs/core/Menu/MenuItemSkeleton.d.ts +1 -1
  69. package/cjs/core/Menu/MenuItemSkeleton.js +0 -1
  70. package/cjs/core/ProgressIndicators/ProgressLinear.d.ts +4 -0
  71. package/cjs/core/ProgressIndicators/ProgressLinear.js +9 -1
  72. package/cjs/core/SearchBox/SearchBox.js +1 -1
  73. package/cjs/core/Select/Select.d.ts +4 -0
  74. package/cjs/core/Select/Select.js +12 -11
  75. package/cjs/core/SideNavigation/SideNavigation.d.ts +16 -0
  76. package/cjs/core/SideNavigation/SideNavigation.js +42 -9
  77. package/cjs/core/Slider/Slider.d.ts +24 -0
  78. package/cjs/core/Slider/Slider.js +58 -10
  79. package/cjs/core/Slider/Thumb.js +3 -2
  80. package/cjs/core/Slider/Track.d.ts +1 -1
  81. package/cjs/core/Slider/Track.js +17 -6
  82. package/cjs/core/StatusMessage/StatusMessage.d.ts +12 -2
  83. package/cjs/core/StatusMessage/StatusMessage.js +23 -9
  84. package/cjs/core/Stepper/Stepper.d.ts +26 -1
  85. package/cjs/core/Stepper/Stepper.js +35 -6
  86. package/cjs/core/Stepper/StepperStep.d.ts +17 -0
  87. package/cjs/core/Stepper/StepperStep.js +33 -8
  88. package/cjs/core/Stepper/WorkflowDiagram.d.ts +11 -1
  89. package/cjs/core/Stepper/WorkflowDiagram.js +23 -10
  90. package/cjs/core/Stepper/WorkflowDiagramStep.d.ts +6 -1
  91. package/cjs/core/Stepper/WorkflowDiagramStep.js +9 -2
  92. package/cjs/core/Table/SubRowExpander.js +3 -1
  93. package/cjs/core/Table/Table.js +0 -1
  94. package/cjs/core/Table/TableCell.js +1 -1
  95. package/cjs/core/Table/TablePaginator.js +1 -3
  96. package/cjs/core/Table/filters/DateRangeFilter/DatePickerInput.d.ts +6 -1
  97. package/cjs/core/Table/filters/DateRangeFilter/DatePickerInput.js +46 -18
  98. package/cjs/core/Table/filters/DateRangeFilter/DateRangeFilter.d.ts +2 -0
  99. package/cjs/core/Table/filters/DateRangeFilter/DateRangeFilter.js +2 -0
  100. package/cjs/core/Tabs/Tab.js +1 -2
  101. package/cjs/core/Textarea/Textarea.d.ts +7 -1
  102. package/cjs/core/Textarea/Textarea.js +6 -11
  103. package/cjs/core/ThemeProvider/ThemeContext.d.ts +1 -1
  104. package/cjs/core/ThemeProvider/ThemeProvider.d.ts +23 -3
  105. package/cjs/core/ThemeProvider/ThemeProvider.js +56 -23
  106. package/cjs/core/Tile/Tile.d.ts +142 -17
  107. package/cjs/core/Tile/Tile.js +107 -16
  108. package/cjs/core/Toast/Toast.d.ts +12 -4
  109. package/cjs/core/Toast/Toast.js +24 -13
  110. package/cjs/core/Tooltip/Tooltip.d.ts +35 -28
  111. package/cjs/core/Tooltip/Tooltip.js +116 -118
  112. package/cjs/core/TransferList/TransferList.js +4 -12
  113. package/cjs/core/Tree/TreeNode.js +1 -1
  114. package/cjs/core/index.d.ts +2 -0
  115. package/cjs/core/index.js +20 -4
  116. package/cjs/core/utils/components/ButtonBase.d.ts +14 -0
  117. package/cjs/core/utils/components/ButtonBase.js +46 -0
  118. package/cjs/core/utils/components/Icon.d.ts +5 -0
  119. package/cjs/core/utils/components/Icon.js +8 -1
  120. package/cjs/core/utils/components/InputContainer.d.ts +0 -1
  121. package/cjs/core/utils/components/InputContainer.js +14 -34
  122. package/cjs/core/utils/components/InputFlexContainer.d.ts +1 -0
  123. package/cjs/core/utils/components/InputFlexContainer.js +3 -1
  124. package/cjs/core/utils/components/Popover.js +5 -3
  125. package/cjs/core/utils/components/Portal.d.ts +27 -0
  126. package/cjs/core/utils/components/Portal.js +43 -0
  127. package/cjs/core/utils/components/VirtualScroll.js +4 -4
  128. package/cjs/core/utils/components/index.d.ts +2 -0
  129. package/cjs/core/utils/components/index.js +2 -0
  130. package/cjs/core/utils/functions/colors.d.ts +1 -1
  131. package/cjs/core/utils/functions/colors.js +1 -13
  132. package/cjs/core/utils/functions/index.d.ts +1 -0
  133. package/cjs/core/utils/functions/index.js +1 -0
  134. package/cjs/core/utils/functions/react.d.ts +8 -0
  135. package/cjs/core/utils/functions/react.js +40 -0
  136. package/cjs/core/utils/hooks/index.d.ts +1 -0
  137. package/cjs/core/utils/hooks/index.js +1 -0
  138. package/cjs/core/utils/hooks/useControlledState.d.ts +13 -0
  139. package/cjs/core/utils/hooks/useControlledState.js +39 -0
  140. package/cjs/core/utils/hooks/useGlobals.d.ts +1 -1
  141. package/cjs/styles.js +11 -35
  142. package/esm/core/Alert/Alert.d.ts +20 -9
  143. package/esm/core/Alert/Alert.js +49 -10
  144. package/esm/core/Avatar/Avatar.d.ts +3 -2
  145. package/esm/core/Avatar/Avatar.js +21 -17
  146. package/esm/core/AvatarGroup/AvatarGroup.js +3 -8
  147. package/esm/core/ButtonGroup/ButtonGroup.js +41 -36
  148. package/esm/core/Buttons/Button/Button.d.ts +15 -2
  149. package/esm/core/Buttons/Button/Button.js +18 -10
  150. package/esm/core/Buttons/DropdownButton/DropdownButton.js +1 -1
  151. package/esm/core/Buttons/IconButton/IconButton.d.ts +5 -1
  152. package/esm/core/Buttons/IconButton/IconButton.js +25 -37
  153. package/esm/core/Buttons/SplitButton/SplitButton.d.ts +9 -0
  154. package/esm/core/Buttons/SplitButton/SplitButton.js +31 -14
  155. package/esm/core/Carousel/Carousel.d.ts +6 -4
  156. package/esm/core/Carousel/Carousel.js +8 -3
  157. package/esm/core/Carousel/CarouselDot.js +2 -4
  158. package/esm/core/Carousel/CarouselNavigation.d.ts +6 -4
  159. package/esm/core/ColorPicker/ColorBuilder.js +2 -1
  160. package/esm/core/ColorPicker/ColorInputPanel.js +173 -232
  161. package/esm/core/ComboBox/ComboBox.js +3 -3
  162. package/esm/core/ComboBox/ComboBoxDropdown.js +4 -9
  163. package/esm/core/ComboBox/ComboBoxEndIcon.js +4 -25
  164. package/esm/core/ComboBox/ComboBoxInput.js +1 -1
  165. package/esm/core/ComboBox/ComboBoxMenu.d.ts +2 -2
  166. package/esm/core/ComboBox/ComboBoxMenu.js +5 -5
  167. package/esm/core/ComboBox/ComboBoxMenuItem.d.ts +1 -1
  168. package/esm/core/ComboBox/ComboBoxMenuItem.js +9 -7
  169. package/esm/core/ComboBox/helpers.d.ts +1 -2
  170. package/esm/core/DatePicker/DatePicker.d.ts +30 -8
  171. package/esm/core/DatePicker/DatePicker.js +33 -6
  172. package/esm/core/Dialog/Dialog.js +11 -23
  173. package/esm/core/Dialog/DialogContext.d.ts +3 -4
  174. package/esm/core/Dialog/DialogMain.js +5 -5
  175. package/esm/core/ExpandableBlock/ExpandableBlock.d.ts +20 -14
  176. package/esm/core/ExpandableBlock/ExpandableBlock.js +41 -20
  177. package/esm/core/FileUpload/FileUpload.d.ts +4 -0
  178. package/esm/core/FileUpload/FileUpload.js +26 -3
  179. package/esm/core/Header/HeaderBasicButton.js +4 -17
  180. package/esm/core/Header/HeaderDropdownButton.js +1 -1
  181. package/esm/core/Header/HeaderSplitButton.js +9 -5
  182. package/esm/core/Input/Input.d.ts +4 -0
  183. package/esm/core/Input/Input.js +2 -1
  184. package/esm/core/InputGrid/InputGrid.d.ts +25 -0
  185. package/esm/core/InputGrid/InputGrid.js +35 -0
  186. package/esm/core/InputGrid/index.d.ts +3 -0
  187. package/esm/core/InputGrid/index.js +6 -0
  188. package/esm/core/InputGroup/InputGroup.d.ts +13 -0
  189. package/esm/core/InputGroup/InputGroup.js +34 -10
  190. package/esm/core/InputWithDecorations/InputWithDecorations.d.ts +39 -0
  191. package/esm/core/InputWithDecorations/InputWithDecorations.js +80 -0
  192. package/esm/core/InputWithDecorations/index.d.ts +3 -0
  193. package/esm/core/InputWithDecorations/index.js +6 -0
  194. package/esm/core/Label/Label.d.ts +5 -0
  195. package/esm/core/Label/Label.js +2 -0
  196. package/esm/core/LabeledInput/LabeledInput.d.ts +22 -16
  197. package/esm/core/LabeledInput/LabeledInput.js +53 -29
  198. package/esm/core/LabeledSelect/LabeledSelect.d.ts +17 -7
  199. package/esm/core/LabeledSelect/LabeledSelect.js +37 -18
  200. package/esm/core/LabeledTextarea/LabeledTextarea.d.ts +15 -5
  201. package/esm/core/LabeledTextarea/LabeledTextarea.js +14 -45
  202. package/esm/core/Menu/Menu.d.ts +1 -1
  203. package/esm/core/Menu/Menu.js +1 -1
  204. package/esm/core/Menu/MenuDivider.d.ts +2 -1
  205. package/esm/core/Menu/MenuDivider.js +1 -1
  206. package/esm/core/Menu/MenuItem.d.ts +1 -1
  207. package/esm/core/Menu/MenuItem.js +1 -0
  208. package/esm/core/Menu/MenuItemSkeleton.d.ts +1 -1
  209. package/esm/core/Menu/MenuItemSkeleton.js +0 -1
  210. package/esm/core/ProgressIndicators/ProgressLinear.d.ts +4 -0
  211. package/esm/core/ProgressIndicators/ProgressLinear.js +9 -1
  212. package/esm/core/SearchBox/SearchBox.js +1 -1
  213. package/esm/core/Select/Select.d.ts +4 -0
  214. package/esm/core/Select/Select.js +12 -11
  215. package/esm/core/SideNavigation/SideNavigation.d.ts +16 -0
  216. package/esm/core/SideNavigation/SideNavigation.js +33 -9
  217. package/esm/core/Slider/Slider.d.ts +24 -0
  218. package/esm/core/Slider/Slider.js +43 -10
  219. package/esm/core/Slider/Thumb.js +3 -2
  220. package/esm/core/Slider/Track.d.ts +1 -1
  221. package/esm/core/Slider/Track.js +14 -6
  222. package/esm/core/StatusMessage/StatusMessage.d.ts +12 -2
  223. package/esm/core/StatusMessage/StatusMessage.js +23 -16
  224. package/esm/core/Stepper/Stepper.d.ts +26 -1
  225. package/esm/core/Stepper/Stepper.js +32 -6
  226. package/esm/core/Stepper/StepperStep.d.ts +17 -0
  227. package/esm/core/Stepper/StepperStep.js +27 -8
  228. package/esm/core/Stepper/WorkflowDiagram.d.ts +11 -1
  229. package/esm/core/Stepper/WorkflowDiagram.js +10 -7
  230. package/esm/core/Stepper/WorkflowDiagramStep.d.ts +6 -1
  231. package/esm/core/Stepper/WorkflowDiagramStep.js +6 -2
  232. package/esm/core/Table/SubRowExpander.js +3 -1
  233. package/esm/core/Table/Table.js +0 -1
  234. package/esm/core/Table/TableCell.js +1 -1
  235. package/esm/core/Table/TablePaginator.js +2 -3
  236. package/esm/core/Table/filters/DateRangeFilter/DatePickerInput.d.ts +6 -1
  237. package/esm/core/Table/filters/DateRangeFilter/DatePickerInput.js +45 -17
  238. package/esm/core/Table/filters/DateRangeFilter/DateRangeFilter.d.ts +2 -0
  239. package/esm/core/Table/filters/DateRangeFilter/DateRangeFilter.js +2 -0
  240. package/esm/core/Tabs/Tab.js +2 -3
  241. package/esm/core/Textarea/Textarea.d.ts +7 -1
  242. package/esm/core/Textarea/Textarea.js +6 -11
  243. package/esm/core/ThemeProvider/ThemeContext.d.ts +1 -1
  244. package/esm/core/ThemeProvider/ThemeProvider.d.ts +23 -3
  245. package/esm/core/ThemeProvider/ThemeProvider.js +65 -24
  246. package/esm/core/Tile/Tile.d.ts +142 -17
  247. package/esm/core/Tile/Tile.js +107 -16
  248. package/esm/core/Toast/Toast.d.ts +12 -4
  249. package/esm/core/Toast/Toast.js +26 -13
  250. package/esm/core/Tooltip/Tooltip.d.ts +35 -28
  251. package/esm/core/Tooltip/Tooltip.js +119 -116
  252. package/esm/core/TransferList/TransferList.js +4 -9
  253. package/esm/core/Tree/TreeNode.js +1 -1
  254. package/esm/core/index.d.ts +2 -0
  255. package/esm/core/index.js +2 -0
  256. package/esm/core/utils/components/ButtonBase.d.ts +14 -0
  257. package/esm/core/utils/components/ButtonBase.js +42 -0
  258. package/esm/core/utils/components/Icon.d.ts +5 -0
  259. package/esm/core/utils/components/Icon.js +8 -1
  260. package/esm/core/utils/components/InputContainer.d.ts +0 -1
  261. package/esm/core/utils/components/InputContainer.js +14 -30
  262. package/esm/core/utils/components/InputFlexContainer.d.ts +1 -0
  263. package/esm/core/utils/components/InputFlexContainer.js +3 -1
  264. package/esm/core/utils/components/Popover.js +5 -3
  265. package/esm/core/utils/components/Portal.d.ts +27 -0
  266. package/esm/core/utils/components/Portal.js +36 -0
  267. package/esm/core/utils/components/VirtualScroll.js +4 -4
  268. package/esm/core/utils/components/index.d.ts +2 -0
  269. package/esm/core/utils/components/index.js +2 -0
  270. package/esm/core/utils/functions/colors.d.ts +1 -1
  271. package/esm/core/utils/functions/colors.js +1 -13
  272. package/esm/core/utils/functions/index.d.ts +1 -0
  273. package/esm/core/utils/functions/index.js +1 -0
  274. package/esm/core/utils/functions/react.d.ts +8 -0
  275. package/esm/core/utils/functions/react.js +35 -0
  276. package/esm/core/utils/hooks/index.d.ts +1 -0
  277. package/esm/core/utils/hooks/index.js +1 -0
  278. package/esm/core/utils/hooks/useControlledState.d.ts +13 -0
  279. package/esm/core/utils/hooks/useControlledState.js +34 -0
  280. package/esm/core/utils/hooks/useGlobals.d.ts +1 -1
  281. package/esm/styles.js +11 -35
  282. package/package.json +3 -3
  283. package/styles.css +49 -46
@@ -6,7 +6,7 @@ import * as React from 'react';
6
6
  import cx from 'classnames';
7
7
  import { IconButton } from '../Buttons/index.js';
8
8
  import { Input } from '../Input/index.js';
9
- import { ColorValue, InputContainer, SvgSwap, Box } from '../utils/index.js';
9
+ import { ColorValue, SvgSwap, Box } from '../utils/index.js';
10
10
  import { useColorPickerContext } from './ColorPickerContext.js';
11
11
  /**
12
12
  * `ColorInputPanel` shows input fields to enter precise color values in the specified format.
@@ -135,20 +135,43 @@ export const ColorInputPanel = React.forwardRef((props, ref) => {
135
135
  applyHsvColorChange(color.toHsvColor(), true, color);
136
136
  }
137
137
  };
138
- const hexInputField = React.createElement(
139
- InputContainer,
140
- { status: validHexInput ? undefined : 'negative' },
138
+ const hexInputField = React.createElement(Input, {
139
+ size: 'small',
140
+ maxLength: showAlpha ? 9 : 7,
141
+ minLength: 1,
142
+ placeholder: 'HEX',
143
+ value: input[0],
144
+ onChange: (event) => {
145
+ const value = event.target.value.startsWith('#')
146
+ ? event.target.value
147
+ : `#${event.target.value}`;
148
+ setInput([value]);
149
+ },
150
+ onKeyDown: (event) => {
151
+ if (event.key === 'Enter') {
152
+ event.preventDefault();
153
+ handleColorInputChange();
154
+ }
155
+ },
156
+ onBlur: (event) => {
157
+ event.preventDefault();
158
+ handleColorInputChange();
159
+ },
160
+ status: validHexInput ? undefined : 'negative',
161
+ });
162
+ const hslInputs = React.createElement(
163
+ React.Fragment,
164
+ null,
141
165
  React.createElement(Input, {
142
166
  size: 'small',
143
- maxLength: showAlpha ? 9 : 7,
144
- minLength: 1,
145
- placeholder: 'HEX',
146
- value: input[0],
167
+ type: 'number',
168
+ min: '0',
169
+ max: '359',
170
+ step: '.1',
171
+ placeholder: 'H',
172
+ value: input[0] ?? '',
147
173
  onChange: (event) => {
148
- const value = event.target.value.startsWith('#')
149
- ? event.target.value
150
- : `#${event.target.value}`;
151
- setInput([value]);
174
+ setInput([event.target.value, input[1], input[2], input[3]]);
152
175
  },
153
176
  onKeyDown: (event) => {
154
177
  if (event.key === 'Enter') {
@@ -158,97 +181,76 @@ export const ColorInputPanel = React.forwardRef((props, ref) => {
158
181
  },
159
182
  onBlur: (event) => {
160
183
  event.preventDefault();
161
- handleColorInputChange();
184
+ if (!isFocusInside(event.relatedTarget)) {
185
+ handleColorInputChange();
186
+ }
162
187
  },
188
+ status:
189
+ Number(input[0]) < 0 || Number(input[0]) > 360 ? 'negative' : undefined,
163
190
  }),
164
- );
165
- const hslInputs = React.createElement(
166
- React.Fragment,
167
- null,
168
- React.createElement(
169
- InputContainer,
170
- {
171
- status:
172
- Number(input[0]) < 0 || Number(input[0]) > 360
173
- ? 'negative'
174
- : undefined,
191
+ React.createElement(Input, {
192
+ size: 'small',
193
+ type: 'number',
194
+ min: '0',
195
+ max: '100',
196
+ step: '.1',
197
+ placeholder: 'S',
198
+ value: input[1] ?? '',
199
+ onChange: (event) => {
200
+ setInput([input[0], event.target.value, input[2], input[3]]);
175
201
  },
176
- React.createElement(Input, {
177
- size: 'small',
178
- type: 'number',
179
- min: '0',
180
- max: '359',
181
- step: '.1',
182
- placeholder: 'H',
183
- value: input[0] ?? '',
184
- onChange: (event) => {
185
- setInput([event.target.value, input[1], input[2], input[3]]);
186
- },
187
- onKeyDown: (event) => {
188
- if (event.key === 'Enter') {
189
- event.preventDefault();
190
- handleColorInputChange();
191
- }
192
- },
193
- onBlur: (event) => {
202
+ onKeyDown: (event) => {
203
+ if (event.key === 'Enter') {
194
204
  event.preventDefault();
195
- if (!isFocusInside(event.relatedTarget)) {
196
- handleColorInputChange();
197
- }
198
- },
199
- }),
200
- ),
201
- React.createElement(
202
- InputContainer,
203
- {
204
- status:
205
- Number(input[1]) < 0 || Number(input[1]) > 100
206
- ? 'negative'
207
- : undefined,
205
+ handleColorInputChange();
206
+ }
208
207
  },
209
- React.createElement(Input, {
210
- size: 'small',
211
- type: 'number',
212
- min: '0',
213
- max: '100',
214
- step: '.1',
215
- placeholder: 'S',
216
- value: input[1] ?? '',
217
- onChange: (event) => {
218
- setInput([input[0], event.target.value, input[2], input[3]]);
219
- },
220
- onKeyDown: (event) => {
221
- if (event.key === 'Enter') {
222
- event.preventDefault();
223
- handleColorInputChange();
224
- }
225
- },
226
- onBlur: (event) => {
208
+ onBlur: (event) => {
209
+ event.preventDefault();
210
+ if (!isFocusInside(event.relatedTarget)) {
211
+ handleColorInputChange();
212
+ }
213
+ },
214
+ status:
215
+ Number(input[1]) < 0 || Number(input[1]) > 100 ? 'negative' : undefined,
216
+ }),
217
+ React.createElement(Input, {
218
+ size: 'small',
219
+ type: 'number',
220
+ min: '0',
221
+ max: '100',
222
+ step: '.1',
223
+ placeholder: 'L',
224
+ value: input[2] ?? '',
225
+ onChange: (event) => {
226
+ setInput([input[0], input[1], event.target.value, input[3]]);
227
+ },
228
+ onKeyDown: (event) => {
229
+ if (event.key === 'Enter') {
227
230
  event.preventDefault();
228
- if (!isFocusInside(event.relatedTarget)) {
229
- handleColorInputChange();
230
- }
231
- },
232
- }),
233
- ),
234
- React.createElement(
235
- InputContainer,
236
- {
237
- status:
238
- Number(input[2]) < 0 || Number(input[2]) > 100
239
- ? 'negative'
240
- : undefined,
231
+ handleColorInputChange();
232
+ }
233
+ },
234
+ onBlur: (event) => {
235
+ event.preventDefault();
236
+ if (!isFocusInside(event.relatedTarget)) {
237
+ handleColorInputChange();
238
+ }
241
239
  },
240
+ status:
241
+ Number(input[2]) < 0 || Number(input[2]) > 100 ? 'negative' : undefined,
242
+ }),
243
+ showAlpha &&
242
244
  React.createElement(Input, {
243
245
  size: 'small',
244
246
  type: 'number',
245
247
  min: '0',
246
- max: '100',
247
- step: '.1',
248
- placeholder: 'L',
249
- value: input[2] ?? '',
248
+ max: '1',
249
+ step: '.01',
250
+ placeholder: 'A',
251
+ value: input[3] ?? '',
250
252
  onChange: (event) => {
251
- setInput([input[0], input[1], event.target.value, input[3]]);
253
+ setInput([input[0], input[1], input[2], event.target.value]);
252
254
  },
253
255
  onKeyDown: (event) => {
254
256
  if (event.key === 'Enter') {
@@ -262,127 +264,99 @@ export const ColorInputPanel = React.forwardRef((props, ref) => {
262
264
  handleColorInputChange();
263
265
  }
264
266
  },
267
+ status:
268
+ Number(input[3]) < 0 || Number(input[3]) > 1 ? 'negative' : undefined,
265
269
  }),
266
- ),
267
- showAlpha &&
268
- React.createElement(
269
- InputContainer,
270
- {
271
- status:
272
- Number(input[3]) < 0 || Number(input[3]) > 1
273
- ? 'negative'
274
- : undefined,
275
- },
276
- React.createElement(Input, {
277
- size: 'small',
278
- type: 'number',
279
- min: '0',
280
- max: '1',
281
- step: '.01',
282
- placeholder: 'A',
283
- value: input[3] ?? '',
284
- onChange: (event) => {
285
- setInput([input[0], input[1], input[2], event.target.value]);
286
- },
287
- onKeyDown: (event) => {
288
- if (event.key === 'Enter') {
289
- event.preventDefault();
290
- handleColorInputChange();
291
- }
292
- },
293
- onBlur: (event) => {
294
- event.preventDefault();
295
- if (!isFocusInside(event.relatedTarget)) {
296
- handleColorInputChange();
297
- }
298
- },
299
- }),
300
- ),
301
270
  );
302
271
  const rgbInputs = React.createElement(
303
272
  React.Fragment,
304
273
  null,
305
- React.createElement(
306
- InputContainer,
307
- {
308
- status:
309
- Number(input[0]) < 0 || Number(input[0]) > 255
310
- ? 'negative'
311
- : undefined,
274
+ React.createElement(Input, {
275
+ size: 'small',
276
+ type: 'number',
277
+ min: '0',
278
+ max: '255',
279
+ placeholder: 'R',
280
+ value: input[0] ?? '',
281
+ onChange: (event) => {
282
+ setInput([event.target.value, input[1], input[2], input[3]]);
312
283
  },
313
- React.createElement(Input, {
314
- size: 'small',
315
- type: 'number',
316
- min: '0',
317
- max: '255',
318
- placeholder: 'R',
319
- value: input[0] ?? '',
320
- onChange: (event) => {
321
- setInput([event.target.value, input[1], input[2], input[3]]);
322
- },
323
- onKeyDown: (event) => {
324
- if (event.key === 'Enter') {
325
- event.preventDefault();
326
- handleColorInputChange();
327
- }
328
- },
329
- onBlur: (event) => {
284
+ onKeyDown: (event) => {
285
+ if (event.key === 'Enter') {
330
286
  event.preventDefault();
331
- if (!isFocusInside(event.relatedTarget)) {
332
- handleColorInputChange();
333
- }
334
- },
335
- }),
336
- ),
337
- React.createElement(
338
- InputContainer,
339
- {
340
- status:
341
- Number(input[1]) < 0 || Number(input[1]) > 255
342
- ? 'negative'
343
- : undefined,
287
+ handleColorInputChange();
288
+ }
344
289
  },
345
- React.createElement(Input, {
346
- size: 'small',
347
- type: 'number',
348
- min: '0',
349
- max: '255',
350
- placeholder: 'G',
351
- value: input[1] ?? '',
352
- onChange: (event) => {
353
- setInput([input[0], event.target.value, input[2], input[3]]);
354
- },
355
- onKeyDown: (event) => {
356
- if (event.key === 'Enter') {
357
- event.preventDefault();
358
- handleColorInputChange();
359
- }
360
- },
361
- onBlur: (event) => {
290
+ onBlur: (event) => {
291
+ event.preventDefault();
292
+ if (!isFocusInside(event.relatedTarget)) {
293
+ handleColorInputChange();
294
+ }
295
+ },
296
+ status:
297
+ Number(input[0]) < 0 || Number(input[0]) > 255 ? 'negative' : undefined,
298
+ }),
299
+ React.createElement(Input, {
300
+ size: 'small',
301
+ type: 'number',
302
+ min: '0',
303
+ max: '255',
304
+ placeholder: 'G',
305
+ value: input[1] ?? '',
306
+ onChange: (event) => {
307
+ setInput([input[0], event.target.value, input[2], input[3]]);
308
+ },
309
+ onKeyDown: (event) => {
310
+ if (event.key === 'Enter') {
362
311
  event.preventDefault();
363
- if (!isFocusInside(event.relatedTarget)) {
364
- handleColorInputChange();
365
- }
366
- },
367
- }),
368
- ),
369
- React.createElement(
370
- InputContainer,
371
- {
372
- status:
373
- Number(input[2]) < 0 || Number(input[2]) > 255
374
- ? 'negative'
375
- : undefined,
312
+ handleColorInputChange();
313
+ }
314
+ },
315
+ onBlur: (event) => {
316
+ event.preventDefault();
317
+ if (!isFocusInside(event.relatedTarget)) {
318
+ handleColorInputChange();
319
+ }
320
+ },
321
+ status:
322
+ Number(input[1]) < 0 || Number(input[1]) > 255 ? 'negative' : undefined,
323
+ }),
324
+ React.createElement(Input, {
325
+ size: 'small',
326
+ type: 'number',
327
+ min: '0',
328
+ max: '255',
329
+ placeholder: 'B',
330
+ value: input[2] ?? '',
331
+ onChange: (event) => {
332
+ setInput([input[0], input[1], event.target.value, input[3]]);
333
+ },
334
+ onKeyDown: (event) => {
335
+ if (event.key === 'Enter') {
336
+ event.preventDefault();
337
+ handleColorInputChange();
338
+ }
376
339
  },
340
+ onBlur: (event) => {
341
+ event.preventDefault();
342
+ if (!isFocusInside(event.relatedTarget)) {
343
+ handleColorInputChange();
344
+ }
345
+ },
346
+ status:
347
+ Number(input[2]) < 0 || Number(input[2]) > 255 ? 'negative' : undefined,
348
+ }),
349
+ showAlpha &&
377
350
  React.createElement(Input, {
378
351
  size: 'small',
379
352
  type: 'number',
380
353
  min: '0',
381
- max: '255',
382
- placeholder: 'B',
383
- value: input[2] ?? '',
354
+ max: '1',
355
+ step: '.01',
356
+ placeholder: 'A',
357
+ value: input[3] ?? '',
384
358
  onChange: (event) => {
385
- setInput([input[0], input[1], event.target.value, input[3]]);
359
+ setInput([input[0], input[1], input[2], event.target.value]);
386
360
  },
387
361
  onKeyDown: (event) => {
388
362
  if (event.key === 'Enter') {
@@ -396,42 +370,9 @@ export const ColorInputPanel = React.forwardRef((props, ref) => {
396
370
  handleColorInputChange();
397
371
  }
398
372
  },
373
+ status:
374
+ Number(input[3]) < 0 || Number(input[3]) > 1 ? 'negative' : undefined,
399
375
  }),
400
- ),
401
- showAlpha &&
402
- React.createElement(
403
- InputContainer,
404
- {
405
- status:
406
- Number(input[3]) < 0 || Number(input[3]) > 1
407
- ? 'negative'
408
- : undefined,
409
- },
410
- React.createElement(Input, {
411
- size: 'small',
412
- type: 'number',
413
- min: '0',
414
- max: '1',
415
- step: '.01',
416
- placeholder: 'A',
417
- value: input[3] ?? '',
418
- onChange: (event) => {
419
- setInput([input[0], input[1], input[2], event.target.value]);
420
- },
421
- onKeyDown: (event) => {
422
- if (event.key === 'Enter') {
423
- event.preventDefault();
424
- handleColorInputChange();
425
- }
426
- },
427
- onBlur: (event) => {
428
- event.preventDefault();
429
- if (!isFocusInside(event.relatedTarget)) {
430
- handleColorInputChange();
431
- }
432
- },
433
- }),
434
- ),
435
376
  );
436
377
  return React.createElement(
437
378
  Box,
@@ -76,7 +76,6 @@ export const ComboBox = (props) => {
76
76
  // Refs get set in subcomponents
77
77
  const inputRef = React.useRef(null);
78
78
  const menuRef = React.useRef(null);
79
- const toggleButtonRef = React.useRef(null);
80
79
  const onChangeProp = useLatestRef(onChange);
81
80
  const optionsRef = useLatestRef(options);
82
81
  // Record to store all extra information (e.g. original indexes), where the key is the id of the option
@@ -369,7 +368,7 @@ export const ComboBox = (props) => {
369
368
  );
370
369
  return React.createElement(
371
370
  ComboBoxRefsContext.Provider,
372
- { value: { inputRef, menuRef, toggleButtonRef, optionsExtraInfoRef } },
371
+ { value: { inputRef, menuRef, optionsExtraInfoRef } },
373
372
  React.createElement(
374
373
  ComboBoxActionContext.Provider,
375
374
  { value: dispatch },
@@ -390,12 +389,13 @@ export const ComboBox = (props) => {
390
389
  },
391
390
  React.createElement(
392
391
  ComboBoxInputContainer,
393
- { disabled: inputProps?.disabled, ...rest },
392
+ { ...rest },
394
393
  React.createElement(
395
394
  React.Fragment,
396
395
  null,
397
396
  React.createElement(ComboBoxInput, {
398
397
  value: inputValue,
398
+ disabled: inputProps?.disabled,
399
399
  ...inputProps,
400
400
  onChange: handleOnInput,
401
401
  selectTags: isMultipleEnabled(selected, multiple)
@@ -13,7 +13,7 @@ export const ComboBoxDropdown = React.forwardRef((props, forwardedRef) => {
13
13
  const { children, ...rest } = props;
14
14
  const { isOpen } = useSafeContext(ComboBoxStateContext);
15
15
  const dispatch = useSafeContext(ComboBoxActionContext);
16
- const { inputRef, toggleButtonRef } = useSafeContext(ComboBoxRefsContext);
16
+ const { inputRef } = useSafeContext(ComboBoxRefsContext);
17
17
  // sync internal isOpen state with user's visible prop
18
18
  React.useEffect(() => {
19
19
  if (props.visible != undefined) {
@@ -23,14 +23,9 @@ export const ComboBoxDropdown = React.forwardRef((props, forwardedRef) => {
23
23
  return React.createElement(Popover, {
24
24
  placement: 'bottom-start',
25
25
  visible: isOpen,
26
- onClickOutside: React.useCallback(
27
- (_, { target }) => {
28
- if (!toggleButtonRef.current?.contains(target)) {
29
- dispatch({ type: 'close' });
30
- }
31
- },
32
- [dispatch, toggleButtonRef],
33
- ),
26
+ onClickOutside: React.useCallback(() => {
27
+ dispatch({ type: 'close' });
28
+ }, [dispatch]),
34
29
  animation: 'shift-away',
35
30
  duration: 200,
36
31
  reference: inputRef,
@@ -4,43 +4,22 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import cx from 'classnames';
6
6
  import * as React from 'react';
7
- import {
8
- useSafeContext,
9
- useMergedRefs,
10
- SvgCaretDownSmall,
11
- mergeEventHandlers,
12
- Box,
13
- } from '../utils/index.js';
14
- import { ComboBoxActionContext, ComboBoxRefsContext } from './helpers.js';
7
+ import { SvgCaretDownSmall, Icon } from '../utils/index.js';
15
8
  export const ComboBoxEndIcon = React.forwardRef((props, forwardedRef) => {
16
- const {
17
- className,
18
- children,
19
- onClick: onClickProp,
20
- disabled,
21
- isOpen,
22
- ...rest
23
- } = props;
24
- const dispatch = useSafeContext(ComboBoxActionContext);
25
- const { toggleButtonRef } = useSafeContext(ComboBoxRefsContext);
26
- const refs = useMergedRefs(toggleButtonRef, forwardedRef);
9
+ const { className, children, disabled, isOpen, ...rest } = props;
27
10
  return React.createElement(
28
- Box,
11
+ Icon,
29
12
  {
30
13
  as: 'span',
31
- ref: refs,
14
+ ref: forwardedRef,
32
15
  className: cx(
33
16
  'iui-end-icon',
34
17
  {
35
- 'iui-actionable': !disabled,
36
18
  'iui-disabled': disabled,
37
19
  'iui-open': isOpen,
38
20
  },
39
21
  className,
40
22
  ),
41
- onClick: mergeEventHandlers(onClickProp, () => {
42
- dispatch({ type: isOpen ? 'close' : 'open' });
43
- }),
44
23
  ...rest,
45
24
  },
46
25
  children ?? React.createElement(SvgCaretDownSmall, { 'aria-hidden': true }),
@@ -197,7 +197,7 @@ export const ComboBoxInput = React.forwardRef((props, forwardedRef) => {
197
197
  spellCheck: false,
198
198
  autoCapitalize: 'none',
199
199
  autoCorrect: 'off',
200
- style: multiple ? { paddingLeft: tagContainerWidth + 18 } : {},
200
+ style: multiple ? { paddingInlineStart: tagContainerWidth + 18 } : {},
201
201
  'aria-describedby': multiple ? `${id}-selected-live` : undefined,
202
202
  ...rest,
203
203
  }),
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { Menu } from '../Menu/index.js';
3
3
  import type { PolymorphicForwardRefComponent } from '../utils/index.js';
4
- type ComboBoxMenuProps = Omit<React.ComponentPropsWithoutRef<typeof Menu>, 'onClick'> & React.ComponentPropsWithoutRef<'ul'>;
5
- export declare const ComboBoxMenu: PolymorphicForwardRefComponent<"ul", ComboBoxMenuProps>;
4
+ type ComboBoxMenuProps = Omit<React.ComponentPropsWithoutRef<typeof Menu>, 'onClick'> & React.ComponentPropsWithoutRef<'div'>;
5
+ export declare const ComboBoxMenu: PolymorphicForwardRefComponent<"div", ComboBoxMenuProps>;
6
6
  export {};
@@ -47,11 +47,11 @@ const VirtualizedComboBoxMenu = React.forwardRef(
47
47
  scrollToIndex: focusedVisibleIndex,
48
48
  });
49
49
  const surfaceStyles = {
50
- minWidth,
50
+ minInlineSize: minWidth,
51
51
  // set as constant because we don't want it shifting when items are unmounted
52
- maxWidth: minWidth,
52
+ maxInlineSize: minWidth,
53
53
  // max-height must be on the outermost element for virtual scroll
54
- maxHeight: 'calc((var(--iui-component-height) - 1px) * 8.5)',
54
+ maxBlockSize: 'calc((var(--iui-component-height) - 1px) * 8.5)',
55
55
  overflowY: isOverflowOverlaySupported() ? 'overlay' : 'auto',
56
56
  ...style,
57
57
  };
@@ -86,8 +86,8 @@ export const ComboBoxMenu = React.forwardRef((props, forwardedRef) => {
86
86
  const refs = useMergedRefs(menuRef, forwardedRef);
87
87
  const styles = React.useMemo(
88
88
  () => ({
89
- minWidth,
90
- maxWidth: `min(${minWidth * 2}px, 90vw)`,
89
+ minInlineSize: minWidth,
90
+ maxInlineSize: `min(${minWidth * 2}px, 90vw)`,
91
91
  }),
92
92
  [minWidth],
93
93
  );
@@ -4,5 +4,5 @@ import type { PolymorphicForwardRefComponent } from '../utils/index.js';
4
4
  type ComboBoxMenuItemProps = MenuItemProps & {
5
5
  index: number;
6
6
  };
7
- export declare const ComboBoxMenuItem: React.MemoExoticComponent<PolymorphicForwardRefComponent<"li", ComboBoxMenuItemProps>>;
7
+ export declare const ComboBoxMenuItem: React.MemoExoticComponent<PolymorphicForwardRefComponent<"div", ComboBoxMenuItemProps>>;
8
8
  export {};
@@ -3,7 +3,7 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import * as React from 'react';
6
- import { useSafeContext, useMergedRefs } from '../utils/index.js';
6
+ import { useSafeContext, useMergedRefs, SvgCheckmark } from '../utils/index.js';
7
7
  import { ComboBoxStateContext } from './helpers.js';
8
8
  import { ListItem } from '../List/ListItem.js';
9
9
  export const ComboBoxMenuItem = React.memo(
@@ -33,6 +33,7 @@ export const ComboBoxMenuItem = React.memo(
33
33
  return React.createElement(
34
34
  ListItem,
35
35
  {
36
+ as: 'div',
36
37
  actionable: true,
37
38
  size: size,
38
39
  active: isSelected,
@@ -59,12 +60,13 @@ export const ComboBoxMenuItem = React.memo(
59
60
  children,
60
61
  sublabel && React.createElement(ListItem.Description, null, sublabel),
61
62
  ),
62
- endIcon &&
63
- React.createElement(
64
- ListItem.Icon,
65
- { as: 'span', 'aria-hidden': true },
66
- endIcon,
67
- ),
63
+ endIcon ||
64
+ (isSelected &&
65
+ React.createElement(
66
+ ListItem.Icon,
67
+ { as: 'span', 'aria-hidden': true },
68
+ endIcon ?? React.createElement(SvgCheckmark, null),
69
+ )),
68
70
  );
69
71
  }),
70
72
  );