@itwin/itwinui-react 1.48.1 → 2.0.0-dev.0

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 (264) hide show
  1. package/README.md +4 -22
  2. package/cjs/core/Alert/Alert.d.ts +7 -6
  3. package/cjs/core/Alert/Alert.js +12 -7
  4. package/cjs/core/Avatar/Avatar.d.ts +69 -0
  5. package/cjs/core/{UserIcon/UserIcon.js → Avatar/Avatar.js} +15 -11
  6. package/cjs/core/Avatar/index.d.ts +4 -0
  7. package/cjs/core/{UserIcon → Avatar}/index.js +5 -4
  8. package/cjs/core/AvatarGroup/AvatarGroup.d.ts +70 -0
  9. package/cjs/core/{UserIconGroup/UserIconGroup.js → AvatarGroup/AvatarGroup.js} +23 -19
  10. package/cjs/core/AvatarGroup/index.d.ts +4 -0
  11. package/cjs/core/{UserIconGroup → AvatarGroup}/index.js +5 -4
  12. package/cjs/core/Badge/Badge.js +2 -4
  13. package/cjs/core/ButtonGroup/ButtonGroup.d.ts +1 -1
  14. package/cjs/core/Buttons/Button/Button.js +5 -14
  15. package/cjs/core/Buttons/DropdownButton/DropdownButton.js +1 -1
  16. package/cjs/core/Buttons/IconButton/IconButton.js +3 -9
  17. package/cjs/core/Buttons/IdeasButton/IdeasButton.js +1 -1
  18. package/cjs/core/Buttons/SplitButton/SplitButton.js +4 -6
  19. package/cjs/core/Checkbox/Checkbox.d.ts +1 -29
  20. package/cjs/core/Checkbox/Checkbox.js +3 -3
  21. package/cjs/core/ColorPicker/ColorBuilder.js +16 -27
  22. package/cjs/core/ColorPicker/ColorSwatch.d.ts +1 -1
  23. package/cjs/core/ColorPicker/ColorSwatch.js +1 -6
  24. package/cjs/core/ComboBox/ComboBoxDropdown.d.ts +1 -1
  25. package/cjs/core/ComboBox/ComboBoxMenu.js +2 -4
  26. package/cjs/core/Dialog/Dialog.d.ts +4 -4
  27. package/cjs/core/Dialog/Dialog.js +1 -1
  28. package/cjs/core/Dialog/DialogBackdrop.d.ts +1 -1
  29. package/cjs/core/Dialog/DialogBackdrop.js +5 -2
  30. package/cjs/core/Dialog/DialogMain.d.ts +1 -1
  31. package/cjs/core/Dialog/DialogMain.js +7 -1
  32. package/cjs/core/Dialog/DialogTitleBar.d.ts +1 -1
  33. package/cjs/core/ExpandableBlock/ExpandableBlock.js +4 -4
  34. package/cjs/core/Header/Header.d.ts +16 -6
  35. package/cjs/core/Header/Header.js +7 -9
  36. package/cjs/core/Header/HeaderBasicButton.d.ts +6 -0
  37. package/cjs/core/Header/HeaderBasicButton.js +52 -0
  38. package/cjs/core/Header/HeaderBreadcrumbs.js +6 -4
  39. package/cjs/core/Header/HeaderButton.d.ts +3 -2
  40. package/cjs/core/Header/HeaderButton.js +10 -18
  41. package/cjs/core/Header/HeaderDropdownButton.d.ts +6 -0
  42. package/cjs/core/Header/HeaderDropdownButton.js +56 -0
  43. package/cjs/core/Header/HeaderLogo.js +3 -3
  44. package/cjs/core/Header/HeaderSplitButton.d.ts +6 -0
  45. package/cjs/core/Header/HeaderSplitButton.js +56 -0
  46. package/cjs/core/Input/Input.d.ts +1 -1
  47. package/cjs/core/Input/Input.js +3 -4
  48. package/cjs/core/InputGroup/InputGroup.d.ts +1 -1
  49. package/cjs/core/InputGroup/InputGroup.js +1 -1
  50. package/cjs/core/Label/Label.d.ts +1 -1
  51. package/cjs/core/Label/Label.js +1 -1
  52. package/cjs/core/LabeledInput/LabeledInput.d.ts +2 -2
  53. package/cjs/core/LabeledInput/LabeledInput.js +1 -1
  54. package/cjs/core/LabeledSelect/LabeledSelect.d.ts +1 -1
  55. package/cjs/core/LabeledSelect/LabeledSelect.js +1 -1
  56. package/cjs/core/LabeledTextarea/LabeledTextarea.d.ts +1 -1
  57. package/cjs/core/LabeledTextarea/LabeledTextarea.js +1 -1
  58. package/cjs/core/Radio/Radio.d.ts +1 -29
  59. package/cjs/core/Radio/Radio.js +3 -3
  60. package/cjs/core/RadioTiles/RadioTileGroup.d.ts +1 -1
  61. package/cjs/core/RadioTiles/RadioTileGroup.js +1 -1
  62. package/cjs/core/Select/Select.d.ts +1 -1
  63. package/cjs/core/Select/Select.js +9 -12
  64. package/cjs/core/Select/SelectTag.d.ts +1 -1
  65. package/cjs/core/Select/SelectTag.js +1 -1
  66. package/cjs/core/SideNavigation/SidenavButton.js +1 -2
  67. package/cjs/core/Stepper/Stepper.d.ts +40 -0
  68. package/cjs/core/{Wizard/Wizard.js → Stepper/Stepper.js} +11 -28
  69. package/cjs/core/{Wizard/Step.d.ts → Stepper/StepperStep.d.ts} +6 -7
  70. package/cjs/core/{Wizard/Step.js → Stepper/StepperStep.js} +10 -10
  71. package/cjs/core/Stepper/Wizard.d.ts +46 -0
  72. package/cjs/core/Stepper/Wizard.js +55 -0
  73. package/cjs/core/Stepper/WorkflowDiagram.d.ts +6 -0
  74. package/cjs/core/Stepper/WorkflowDiagram.js +43 -0
  75. package/cjs/core/Stepper/WorkflowDiagramStep.d.ts +5 -0
  76. package/cjs/core/Stepper/WorkflowDiagramStep.js +42 -0
  77. package/cjs/core/Stepper/index.d.ts +8 -0
  78. package/cjs/core/{Wizard → Stepper}/index.js +5 -1
  79. package/cjs/core/Surface/Surface.js +2 -4
  80. package/cjs/core/Table/SubRowExpander.js +1 -1
  81. package/cjs/core/Table/Table.d.ts +5 -4
  82. package/cjs/core/Table/Table.js +30 -21
  83. package/cjs/core/Table/TableCell.js +4 -4
  84. package/cjs/core/Table/TablePaginator.js +14 -15
  85. package/cjs/core/Table/TableRowMemoized.d.ts +2 -0
  86. package/cjs/core/Table/TableRowMemoized.js +10 -13
  87. package/cjs/core/Table/cells/DefaultCell.js +4 -9
  88. package/cjs/core/Table/columns/actionColumn.js +1 -1
  89. package/cjs/core/Table/columns/expanderColumn.js +1 -1
  90. package/cjs/core/Table/filters/BaseFilter.js +1 -1
  91. package/cjs/core/Table/filters/FilterToggle.js +1 -1
  92. package/cjs/core/Table/hooks/useColumnDragAndDrop.js +4 -4
  93. package/cjs/core/Table/hooks/useResizeColumns.js +110 -106
  94. package/cjs/core/Tabs/Tab.d.ts +0 -8
  95. package/cjs/core/Tabs/Tab.js +1 -5
  96. package/cjs/core/Tabs/Tabs.js +8 -11
  97. package/cjs/core/Tabs/index.d.ts +2 -2
  98. package/cjs/core/Tabs/index.js +1 -2
  99. package/cjs/core/Textarea/Textarea.d.ts +1 -1
  100. package/cjs/core/Textarea/Textarea.js +2 -2
  101. package/cjs/core/ThemeProvider/ThemeProvider.d.ts +27 -17
  102. package/cjs/core/ThemeProvider/ThemeProvider.js +64 -7
  103. package/cjs/core/Tile/Tile.d.ts +19 -1
  104. package/cjs/core/Tile/Tile.js +35 -12
  105. package/cjs/core/Toast/Toast.d.ts +3 -3
  106. package/cjs/core/Toast/Toast.js +3 -3
  107. package/cjs/core/Toast/ToastWrapper.d.ts +1 -1
  108. package/cjs/core/Toast/ToastWrapper.js +1 -1
  109. package/cjs/core/Tree/TreeNode.js +1 -7
  110. package/cjs/core/index.d.ts +8 -8
  111. package/cjs/core/index.js +13 -10
  112. package/cjs/core/utils/components/Popover.d.ts +2 -2
  113. package/cjs/core/utils/components/Popover.js +1 -1
  114. package/cjs/core/utils/components/Resizer.d.ts +5 -0
  115. package/cjs/core/utils/components/Resizer.js +7 -1
  116. package/cjs/core/utils/components/VisuallyHidden.d.ts +1 -0
  117. package/cjs/core/utils/components/VisuallyHidden.js +1 -0
  118. package/cjs/core/utils/functions/colors.d.ts +1 -1
  119. package/cjs/core/utils/functions/colors.js +1 -1
  120. package/cjs/core/utils/hooks/index.d.ts +1 -0
  121. package/cjs/core/utils/hooks/index.js +1 -0
  122. package/cjs/core/utils/hooks/useIsomorphicLayoutEffect.d.ts +7 -0
  123. package/cjs/core/utils/hooks/useIsomorphicLayoutEffect.js +17 -0
  124. package/cjs/core/utils/hooks/useMediaQuery.js +2 -1
  125. package/cjs/core/utils/hooks/useTheme.d.ts +20 -3
  126. package/cjs/core/utils/hooks/useTheme.js +57 -58
  127. package/esm/core/Alert/Alert.d.ts +7 -6
  128. package/esm/core/Alert/Alert.js +12 -7
  129. package/esm/core/Avatar/Avatar.d.ts +69 -0
  130. package/esm/core/{UserIcon/UserIcon.js → Avatar/Avatar.js} +13 -9
  131. package/esm/core/Avatar/index.d.ts +4 -0
  132. package/esm/core/{UserIcon → Avatar}/index.js +2 -2
  133. package/esm/core/AvatarGroup/AvatarGroup.d.ts +70 -0
  134. package/esm/core/{UserIconGroup/UserIconGroup.js → AvatarGroup/AvatarGroup.js} +21 -17
  135. package/esm/core/AvatarGroup/index.d.ts +4 -0
  136. package/esm/core/{UserIconGroup → AvatarGroup}/index.js +2 -2
  137. package/esm/core/Badge/Badge.js +3 -5
  138. package/esm/core/ButtonGroup/ButtonGroup.d.ts +1 -1
  139. package/esm/core/Buttons/Button/Button.js +5 -14
  140. package/esm/core/Buttons/DropdownButton/DropdownButton.js +1 -1
  141. package/esm/core/Buttons/IconButton/IconButton.js +3 -9
  142. package/esm/core/Buttons/IdeasButton/IdeasButton.js +1 -1
  143. package/esm/core/Buttons/SplitButton/SplitButton.js +4 -6
  144. package/esm/core/Checkbox/Checkbox.d.ts +1 -29
  145. package/esm/core/Checkbox/Checkbox.js +3 -3
  146. package/esm/core/ColorPicker/ColorBuilder.js +17 -28
  147. package/esm/core/ColorPicker/ColorSwatch.d.ts +1 -1
  148. package/esm/core/ColorPicker/ColorSwatch.js +2 -7
  149. package/esm/core/ComboBox/ComboBoxDropdown.d.ts +1 -1
  150. package/esm/core/ComboBox/ComboBoxMenu.js +2 -4
  151. package/esm/core/Dialog/Dialog.d.ts +4 -4
  152. package/esm/core/Dialog/Dialog.js +1 -1
  153. package/esm/core/Dialog/DialogBackdrop.d.ts +1 -1
  154. package/esm/core/Dialog/DialogBackdrop.js +5 -2
  155. package/esm/core/Dialog/DialogMain.d.ts +1 -1
  156. package/esm/core/Dialog/DialogMain.js +7 -1
  157. package/esm/core/Dialog/DialogTitleBar.d.ts +1 -1
  158. package/esm/core/ExpandableBlock/ExpandableBlock.js +4 -4
  159. package/esm/core/Header/Header.d.ts +16 -6
  160. package/esm/core/Header/Header.js +7 -9
  161. package/esm/core/Header/HeaderBasicButton.d.ts +6 -0
  162. package/esm/core/Header/HeaderBasicButton.js +46 -0
  163. package/esm/core/Header/HeaderBreadcrumbs.js +6 -4
  164. package/esm/core/Header/HeaderButton.d.ts +3 -2
  165. package/esm/core/Header/HeaderButton.js +10 -18
  166. package/esm/core/Header/HeaderDropdownButton.d.ts +6 -0
  167. package/esm/core/Header/HeaderDropdownButton.js +50 -0
  168. package/esm/core/Header/HeaderLogo.js +3 -3
  169. package/esm/core/Header/HeaderSplitButton.d.ts +6 -0
  170. package/esm/core/Header/HeaderSplitButton.js +50 -0
  171. package/esm/core/Input/Input.d.ts +1 -1
  172. package/esm/core/Input/Input.js +3 -4
  173. package/esm/core/InputGroup/InputGroup.d.ts +1 -1
  174. package/esm/core/InputGroup/InputGroup.js +1 -1
  175. package/esm/core/Label/Label.d.ts +1 -1
  176. package/esm/core/Label/Label.js +1 -1
  177. package/esm/core/LabeledInput/LabeledInput.d.ts +2 -2
  178. package/esm/core/LabeledInput/LabeledInput.js +1 -1
  179. package/esm/core/LabeledSelect/LabeledSelect.d.ts +1 -1
  180. package/esm/core/LabeledSelect/LabeledSelect.js +1 -1
  181. package/esm/core/LabeledTextarea/LabeledTextarea.d.ts +1 -1
  182. package/esm/core/LabeledTextarea/LabeledTextarea.js +1 -1
  183. package/esm/core/Radio/Radio.d.ts +1 -29
  184. package/esm/core/Radio/Radio.js +3 -3
  185. package/esm/core/RadioTiles/RadioTileGroup.d.ts +1 -1
  186. package/esm/core/RadioTiles/RadioTileGroup.js +1 -1
  187. package/esm/core/Select/Select.d.ts +1 -1
  188. package/esm/core/Select/Select.js +9 -12
  189. package/esm/core/Select/SelectTag.d.ts +1 -1
  190. package/esm/core/Select/SelectTag.js +1 -1
  191. package/esm/core/SideNavigation/SidenavButton.js +1 -2
  192. package/esm/core/Stepper/Stepper.d.ts +40 -0
  193. package/esm/core/{Wizard/Wizard.js → Stepper/Stepper.js} +10 -27
  194. package/esm/core/{Wizard/Step.d.ts → Stepper/StepperStep.d.ts} +6 -7
  195. package/esm/core/{Wizard/Step.js → Stepper/StepperStep.js} +8 -8
  196. package/esm/core/Stepper/Wizard.d.ts +46 -0
  197. package/esm/core/Stepper/Wizard.js +49 -0
  198. package/esm/core/Stepper/WorkflowDiagram.d.ts +6 -0
  199. package/esm/core/Stepper/WorkflowDiagram.js +37 -0
  200. package/esm/core/Stepper/WorkflowDiagramStep.d.ts +5 -0
  201. package/esm/core/Stepper/WorkflowDiagramStep.js +35 -0
  202. package/esm/core/Stepper/index.d.ts +8 -0
  203. package/esm/core/{Wizard → Stepper}/index.js +2 -0
  204. package/esm/core/Surface/Surface.js +3 -5
  205. package/esm/core/Table/SubRowExpander.js +1 -1
  206. package/esm/core/Table/Table.d.ts +5 -4
  207. package/esm/core/Table/Table.js +30 -21
  208. package/esm/core/Table/TableCell.js +4 -4
  209. package/esm/core/Table/TablePaginator.js +14 -15
  210. package/esm/core/Table/TableRowMemoized.d.ts +2 -0
  211. package/esm/core/Table/TableRowMemoized.js +10 -13
  212. package/esm/core/Table/cells/DefaultCell.js +4 -9
  213. package/esm/core/Table/columns/actionColumn.js +1 -1
  214. package/esm/core/Table/columns/expanderColumn.js +1 -1
  215. package/esm/core/Table/filters/BaseFilter.js +1 -1
  216. package/esm/core/Table/filters/FilterToggle.js +1 -1
  217. package/esm/core/Table/hooks/useColumnDragAndDrop.js +4 -4
  218. package/esm/core/Table/hooks/useResizeColumns.js +110 -106
  219. package/esm/core/Tabs/Tab.d.ts +0 -8
  220. package/esm/core/Tabs/Tab.js +0 -4
  221. package/esm/core/Tabs/Tabs.js +9 -12
  222. package/esm/core/Tabs/index.d.ts +2 -2
  223. package/esm/core/Tabs/index.js +1 -1
  224. package/esm/core/Textarea/Textarea.d.ts +1 -1
  225. package/esm/core/Textarea/Textarea.js +2 -2
  226. package/esm/core/ThemeProvider/ThemeProvider.d.ts +27 -17
  227. package/esm/core/ThemeProvider/ThemeProvider.js +64 -6
  228. package/esm/core/Tile/Tile.d.ts +19 -1
  229. package/esm/core/Tile/Tile.js +36 -13
  230. package/esm/core/Toast/Toast.d.ts +3 -3
  231. package/esm/core/Toast/Toast.js +3 -3
  232. package/esm/core/Toast/ToastWrapper.d.ts +1 -1
  233. package/esm/core/Toast/ToastWrapper.js +1 -1
  234. package/esm/core/Tree/TreeNode.js +2 -8
  235. package/esm/core/index.d.ts +8 -8
  236. package/esm/core/index.js +4 -4
  237. package/esm/core/utils/components/Popover.d.ts +2 -2
  238. package/esm/core/utils/components/Popover.js +1 -1
  239. package/esm/core/utils/components/Resizer.d.ts +5 -0
  240. package/esm/core/utils/components/Resizer.js +7 -1
  241. package/esm/core/utils/components/VisuallyHidden.d.ts +1 -0
  242. package/esm/core/utils/components/VisuallyHidden.js +1 -0
  243. package/esm/core/utils/functions/colors.d.ts +1 -1
  244. package/esm/core/utils/functions/colors.js +1 -1
  245. package/esm/core/utils/hooks/index.d.ts +1 -0
  246. package/esm/core/utils/hooks/index.js +1 -0
  247. package/esm/core/utils/hooks/useIsomorphicLayoutEffect.d.ts +7 -0
  248. package/esm/core/utils/hooks/useIsomorphicLayoutEffect.js +11 -0
  249. package/esm/core/utils/hooks/useMediaQuery.js +2 -1
  250. package/esm/core/utils/hooks/useTheme.d.ts +20 -3
  251. package/esm/core/utils/hooks/useTheme.js +56 -57
  252. package/package.json +3 -2
  253. package/cjs/core/UserIcon/UserIcon.d.ts +0 -57
  254. package/cjs/core/UserIcon/index.d.ts +0 -4
  255. package/cjs/core/UserIconGroup/UserIconGroup.d.ts +0 -62
  256. package/cjs/core/UserIconGroup/index.d.ts +0 -4
  257. package/cjs/core/Wizard/Wizard.d.ts +0 -54
  258. package/cjs/core/Wizard/index.d.ts +0 -4
  259. package/esm/core/UserIcon/UserIcon.d.ts +0 -57
  260. package/esm/core/UserIcon/index.d.ts +0 -4
  261. package/esm/core/UserIconGroup/UserIconGroup.d.ts +0 -62
  262. package/esm/core/UserIconGroup/index.d.ts +0 -4
  263. package/esm/core/Wizard/Wizard.d.ts +0 -54
  264. package/esm/core/Wizard/index.d.ts +0 -4
@@ -3,77 +3,76 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import React from 'react';
6
+ import { ThemeContext } from '../../ThemeProvider/ThemeProvider';
7
+ import { getDocument, getWindow } from '../functions';
8
+ import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';
6
9
  import '@itwin/itwinui-css/css/global.css';
7
- import { getDocument, getWindow } from '../functions/dom';
8
- import { useMediaQuery } from './useMediaQuery';
10
+ import '@itwin/itwinui-variables/index.css';
9
11
  /**
10
- * Hook that applies styling and theme to all components.
11
- * Defaults to light theme if none provided or set elsewhere.
12
+ * Hook that conditionally applies styling and theme to all components.
13
+ * Defaults to light theme if none provided.
14
+ *
15
+ * If ThemeProvider is used as an ancestor, this hook will not do anything.
16
+ *
12
17
  * @param theme Light, dark, or based on OS setting.
13
18
  * @param themeOptions Options that override default theming behavior.
14
19
  */
15
20
  export var useTheme = function (theme, themeOptions) {
16
21
  var _a;
22
+ var themeContext = React.useContext(ThemeContext);
17
23
  var ownerDocument = (_a = themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.ownerDocument) !== null && _a !== void 0 ? _a : getDocument();
18
- var prefersHighContrast = useMediaQuery('(prefers-contrast: more)');
19
- var highContrast = React.useMemo(function () { var _a; return !!((_a = themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.highContrast) !== null && _a !== void 0 ? _a : prefersHighContrast); }, [prefersHighContrast, themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.highContrast]);
20
- React.useLayoutEffect(function () {
21
- if (!(ownerDocument === null || ownerDocument === void 0 ? void 0 : ownerDocument.body.classList.contains('iui-body'))) {
22
- ownerDocument === null || ownerDocument === void 0 ? void 0 : ownerDocument.body.classList.add('iui-body');
23
- }
24
- }, [ownerDocument]);
25
- React.useLayoutEffect(function () {
26
- var _a, _b, _c, _d, _e;
27
- if (!ownerDocument) {
24
+ useIsomorphicLayoutEffect(function () {
25
+ // exit early if theme was already set by provider
26
+ if (themeContext || !ownerDocument) {
28
27
  return;
29
28
  }
30
- var prefersDarkMediaQuery = (_b = (_a = getWindow()) === null || _a === void 0 ? void 0 : _a.matchMedia) === null || _b === void 0 ? void 0 : _b.call(_a, '(prefers-color-scheme: dark)');
31
- var addOSTheme = function (_a) {
32
- var isDark = _a.matches;
33
- if (isDark) {
34
- applyTheme('dark', { ownerDocument: ownerDocument, highContrast: highContrast });
35
- }
36
- else {
37
- applyTheme('light', { ownerDocument: ownerDocument, highContrast: highContrast });
38
- }
39
- };
29
+ ownerDocument.body.classList.toggle('iui-root', true);
40
30
  switch (theme) {
41
31
  case 'light':
42
- (_c = prefersDarkMediaQuery === null || prefersDarkMediaQuery === void 0 ? void 0 : prefersDarkMediaQuery.removeEventListener) === null || _c === void 0 ? void 0 : _c.call(prefersDarkMediaQuery, 'change', addOSTheme);
43
- applyTheme('light', { ownerDocument: ownerDocument, highContrast: highContrast });
44
- break;
45
32
  case 'dark':
46
- (_d = prefersDarkMediaQuery === null || prefersDarkMediaQuery === void 0 ? void 0 : prefersDarkMediaQuery.removeEventListener) === null || _d === void 0 ? void 0 : _d.call(prefersDarkMediaQuery, 'change', addOSTheme);
47
- applyTheme('dark', { ownerDocument: ownerDocument, highContrast: highContrast });
48
- break;
49
- case 'os':
50
- if (prefersDarkMediaQuery != undefined) {
51
- addOSTheme(prefersDarkMediaQuery);
52
- (_e = prefersDarkMediaQuery.addEventListener) === null || _e === void 0 ? void 0 : _e.call(prefersDarkMediaQuery, 'change', addOSTheme);
53
- }
54
- else {
55
- applyTheme('light', { ownerDocument: ownerDocument, highContrast: highContrast });
56
- }
57
- break;
58
- default:
59
- if (ownerDocument.documentElement.className.indexOf('iui-theme') === -1) {
60
- applyTheme('light', { ownerDocument: ownerDocument, highContrast: highContrast });
33
+ case 'os': {
34
+ return handleTheme(theme, ownerDocument, themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.highContrast);
35
+ }
36
+ default: {
37
+ // set light theme by default
38
+ if (ownerDocument.documentElement.dataset.iuiTheme == null) {
39
+ return handleTheme('light', ownerDocument, themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.highContrast);
61
40
  }
41
+ return;
42
+ }
62
43
  }
63
- return function () {
64
- var _a;
65
- (_a = prefersDarkMediaQuery === null || prefersDarkMediaQuery === void 0 ? void 0 : prefersDarkMediaQuery.removeEventListener) === null || _a === void 0 ? void 0 : _a.call(prefersDarkMediaQuery, 'change', addOSTheme);
66
- };
67
- }, [highContrast, ownerDocument, theme]);
44
+ }, [theme, themeContext, themeOptions === null || themeOptions === void 0 ? void 0 : themeOptions.highContrast, ownerDocument]);
68
45
  };
69
- var applyTheme = function (theme, _a) {
70
- var ownerDocument = _a.ownerDocument, highContrast = _a.highContrast;
71
- var classList = ownerDocument.documentElement.classList;
72
- var currentTheme = Array.from(classList).find(function (cls) {
73
- return cls.startsWith('iui-theme');
74
- });
75
- if (currentTheme) {
76
- classList.remove(currentTheme);
77
- }
78
- classList.add("iui-theme-".concat(theme).concat(highContrast ? '-hc' : ''));
46
+ /**
47
+ * Helper function to apply the specified theme, or detect the OS theme.
48
+ * Returns a cleanup function to remove the change handlers.
49
+ */
50
+ var handleTheme = function (theme, ownerDocument, highContrast) {
51
+ var _a, _b, _c, _d, _e;
52
+ var root = ownerDocument.documentElement;
53
+ var _window = (_a = ownerDocument.defaultView) !== null && _a !== void 0 ? _a : getWindow();
54
+ var applyThemeAttributes = function (isDark, isHC) {
55
+ if (isDark === void 0) { isDark = false; }
56
+ if (isHC === void 0) { isHC = false; }
57
+ root.dataset.iuiTheme = isDark ? 'dark' : 'light';
58
+ root.dataset.iuiContrast = isHC ? 'high' : 'default';
59
+ };
60
+ var prefersDarkQuery = (_b = _window === null || _window === void 0 ? void 0 : _window.matchMedia) === null || _b === void 0 ? void 0 : _b.call(_window, '(prefers-color-scheme: dark)');
61
+ var prefersHCQuery = (_c = _window === null || _window === void 0 ? void 0 : _window.matchMedia) === null || _c === void 0 ? void 0 : _c.call(_window, '(prefers-contrast: more)');
62
+ var changeHandler = function () {
63
+ var isDark = theme === 'dark' || (theme === 'os' && (prefersDarkQuery === null || prefersDarkQuery === void 0 ? void 0 : prefersDarkQuery.matches));
64
+ var isHC = highContrast !== null && highContrast !== void 0 ? highContrast : prefersHCQuery === null || prefersHCQuery === void 0 ? void 0 : prefersHCQuery.matches;
65
+ applyThemeAttributes(isDark, isHC);
66
+ };
67
+ // call handler once to set initial theme
68
+ changeHandler();
69
+ // add listeners in supported browsers
70
+ (_d = prefersDarkQuery === null || prefersDarkQuery === void 0 ? void 0 : prefersDarkQuery.addEventListener) === null || _d === void 0 ? void 0 : _d.call(prefersDarkQuery, 'change', changeHandler);
71
+ (_e = prefersHCQuery === null || prefersHCQuery === void 0 ? void 0 : prefersHCQuery.addEventListener) === null || _e === void 0 ? void 0 : _e.call(prefersHCQuery, 'change', changeHandler);
72
+ // return cleanup function to remove event listeners (should be returned from useEffect)
73
+ return function () {
74
+ var _a, _b;
75
+ (_a = prefersDarkQuery === null || prefersDarkQuery === void 0 ? void 0 : prefersDarkQuery.removeEventListener) === null || _a === void 0 ? void 0 : _a.call(prefersDarkQuery, 'change', changeHandler);
76
+ (_b = prefersHCQuery === null || prefersHCQuery === void 0 ? void 0 : prefersHCQuery.removeEventListener) === null || _b === void 0 ? void 0 : _b.call(prefersHCQuery, 'change', changeHandler);
77
+ };
79
78
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/itwinui-react",
3
- "version": "1.48.1",
3
+ "version": "2.0.0-dev.0",
4
4
  "author": "Bentley Systems",
5
5
  "license": "MIT",
6
6
  "main": "cjs/index.js",
@@ -44,9 +44,10 @@
44
44
  "createComponent": "node ../../scripts/createComponent.js"
45
45
  },
46
46
  "dependencies": {
47
- "@itwin/itwinui-css": "^0.63.0",
47
+ "@itwin/itwinui-css": "1.0.0-dev.13",
48
48
  "@itwin/itwinui-icons-react": "^1.10.1",
49
49
  "@itwin/itwinui-illustrations-react": "^1.3.1",
50
+ "@itwin/itwinui-variables": "1.0.0-dev.0",
50
51
  "@tippyjs/react": "^4.2.6",
51
52
  "@types/react-table": "^7.0.18",
52
53
  "classnames": "^2.2.6",
@@ -1,57 +0,0 @@
1
- /// <reference types="react" />
2
- import { CommonProps } from '../utils';
3
- import '@itwin/itwinui-css/css/user-icon.css';
4
- export declare type UserIconStatus = 'online' | 'busy' | 'away' | 'offline';
5
- export declare type StatusTitles = {
6
- [key in Exclude<UserIconStatus, ''>]: string;
7
- };
8
- export declare type UserIconProps = {
9
- /**
10
- * Size of a user icon.
11
- * @default 'small'
12
- */
13
- size?: 'small' | 'medium' | 'large' | 'x-large';
14
- /**
15
- * Status/Availability of a user.
16
- */
17
- status?: UserIconStatus;
18
- /**
19
- * Text which will appear when hovering over the icon.
20
- */
21
- title?: string;
22
- /**
23
- * Abbreviation to be displayed.
24
- */
25
- abbreviation?: string;
26
- /**
27
- * User image to be displayed. MUST be an <img> element!
28
- */
29
- image?: JSX.Element;
30
- /**
31
- * Color of the icon. You can use `getUserColor` function to generate color from user name or email.
32
- * @default 'white'
33
- */
34
- backgroundColor?: string;
35
- /**
36
- * Translated status messages shown on hover.
37
- */
38
- translatedStatusTitles?: StatusTitles;
39
- } & Omit<CommonProps, 'title'>;
40
- export declare const defaultStatusTitles: StatusTitles;
41
- /**
42
- * Basic user icon component
43
- * @example
44
- * <caption>Small icon with abbreviation</caption>
45
- * <UserIcon size='small' title='Terry Rivers' abbreviation='TR' backgroundColor='green'/>
46
- * @example
47
- * <caption>Medium icon with image</caption>
48
- * <UserIcon size='medium' title='Terry Rivers' abbreviation='TR' backgroundColor='green' image={<img src="https://cdn.example.com/user/profile/pic.png" />}/>
49
- * @example
50
- * <caption>Large icon with status</caption>
51
- * <UserIcon size='large' title='Terry Rivers' abbreviation='TR' backgroundColor='green' status='online' />
52
- * @example
53
- * <caption>X-large icon with image</caption>
54
- * <UserIcon size='x-large' title='Terry Rivers' abbreviation='TR' backgroundColor='green' image={<img src="https://cdn.example.com/user/profile/pic.png" />}/>
55
- */
56
- export declare const UserIcon: (props: UserIconProps) => JSX.Element;
57
- export default UserIcon;
@@ -1,4 +0,0 @@
1
- export { UserIcon } from './UserIcon';
2
- export type { UserIconProps, StatusTitles, UserIconStatus } from './UserIcon';
3
- declare const _default: "./UserIcon";
4
- export default _default;
@@ -1,62 +0,0 @@
1
- import React from 'react';
2
- import { CommonProps } from '../utils';
3
- import '@itwin/itwinui-css/css/user-icon.css';
4
- export declare type UserIconGroupProps = {
5
- /**
6
- * Max number of icons unstacked.
7
- * @default 5
8
- */
9
- maxIcons?: number;
10
- /**
11
- * If true, group will be stacked to take less space.
12
- * @default true
13
- */
14
- stacked?: boolean;
15
- /**
16
- * If true, group will be animated on hover.
17
- * @default false
18
- */
19
- animated?: boolean;
20
- /**
21
- * Size of user and count icons.
22
- * @default 'small'
23
- */
24
- iconSize?: 'small' | 'medium' | 'large' | 'x-large';
25
- /**
26
- * User Icons in the group.
27
- */
28
- children: React.ReactNode;
29
- /**
30
- * User Count Icon props.
31
- */
32
- countIconProps?: React.ComponentPropsWithRef<'div'>;
33
- } & Omit<CommonProps, 'title'>;
34
- /**
35
- * Group User Icons together.
36
- *
37
- * User Icons stacking is based on `maxIcons` count. If you provide 8 User Icons and keep default 5 `maxIcons` count,
38
- * this component will show 5 User Icons and User Count Icon with "3" in it.
39
- *
40
- * You can add custom User Count Icon behavior by using `countIconProps`.
41
- *
42
- * @example
43
- * <UserIconGroup iconSize='medium'>
44
- * <UserIcon
45
- * abbreviation="TR"
46
- * backgroundColor={getUserColor("Terry Rivers")}
47
- * title="Terry Rivers"
48
- * />
49
- * <UserIcon
50
- * abbreviation="RM"
51
- * backgroundColor={getUserColor("Robin Mercer")}
52
- * title="Robin Mercer"
53
- * />
54
- * <UserIcon
55
- * abbreviation="JM"
56
- * backgroundColor={getUserColor("Jean Mullins")}
57
- * title="Jean Mullins"
58
- * />
59
- * </UserIconGroup>
60
- */
61
- export declare const UserIconGroup: (props: UserIconGroupProps) => JSX.Element;
62
- export default UserIconGroup;
@@ -1,4 +0,0 @@
1
- export { UserIconGroup } from './UserIconGroup';
2
- export type { UserIconGroupProps } from './UserIconGroup';
3
- declare const _default: "./UserIconGroup";
4
- export default _default;
@@ -1,54 +0,0 @@
1
- import React from 'react';
2
- import '@itwin/itwinui-css/css/wizard.css';
3
- export declare type WizardLocalization = {
4
- stepsCountLabel: (currentStep: number, totalSteps: number) => string;
5
- };
6
- export declare type WizardType = 'default' | 'long' | 'workflow';
7
- export declare type StepProperties = {
8
- /**
9
- * The title/label of the step.
10
- */
11
- name: string;
12
- /**
13
- * A tooltip giving detailed description to this step.
14
- */
15
- description?: string;
16
- };
17
- export declare type WizardProps = {
18
- /**
19
- * Current step index, 0 - based.
20
- */
21
- currentStep?: number;
22
- /**
23
- * An array of step objects.
24
- */
25
- steps: StepProperties[];
26
- /**
27
- * The type of Wizard to display.
28
- * @default 'default'
29
- */
30
- type?: WizardType;
31
- /**
32
- * Option to provide localized strings.
33
- */
34
- localization?: WizardLocalization;
35
- /**
36
- * Click handler on completed step.
37
- */
38
- onStepClick?: (clickedIndex: number) => void;
39
- };
40
- /**
41
- * A wizard displays progress through a sequence of logical and numbered steps.
42
- * It may also be used for navigation.
43
- *
44
- * The `type` can be set to 'long' to show labels under steps.
45
- *
46
- * @example
47
- * <Wizard
48
- * steps=[{name: "Step One"}, {name: "Step Two"}, {name: "Step Three"}]
49
- * currentStep={0}
50
- * type='long'
51
- * />
52
- */
53
- export declare const Wizard: React.ForwardRefExoticComponent<WizardProps & React.RefAttributes<HTMLDivElement>>;
54
- export default Wizard;
@@ -1,4 +0,0 @@
1
- export { Wizard } from './Wizard';
2
- export type { WizardProps, StepProperties, WizardType, WizardLocalization, } from './Wizard';
3
- declare const _default: "./Wizard";
4
- export default _default;
@@ -1,57 +0,0 @@
1
- /// <reference types="react" />
2
- import { CommonProps } from '../utils';
3
- import '@itwin/itwinui-css/css/user-icon.css';
4
- export declare type UserIconStatus = 'online' | 'busy' | 'away' | 'offline';
5
- export declare type StatusTitles = {
6
- [key in Exclude<UserIconStatus, ''>]: string;
7
- };
8
- export declare type UserIconProps = {
9
- /**
10
- * Size of a user icon.
11
- * @default 'small'
12
- */
13
- size?: 'small' | 'medium' | 'large' | 'x-large';
14
- /**
15
- * Status/Availability of a user.
16
- */
17
- status?: UserIconStatus;
18
- /**
19
- * Text which will appear when hovering over the icon.
20
- */
21
- title?: string;
22
- /**
23
- * Abbreviation to be displayed.
24
- */
25
- abbreviation?: string;
26
- /**
27
- * User image to be displayed. MUST be an <img> element!
28
- */
29
- image?: JSX.Element;
30
- /**
31
- * Color of the icon. You can use `getUserColor` function to generate color from user name or email.
32
- * @default 'white'
33
- */
34
- backgroundColor?: string;
35
- /**
36
- * Translated status messages shown on hover.
37
- */
38
- translatedStatusTitles?: StatusTitles;
39
- } & Omit<CommonProps, 'title'>;
40
- export declare const defaultStatusTitles: StatusTitles;
41
- /**
42
- * Basic user icon component
43
- * @example
44
- * <caption>Small icon with abbreviation</caption>
45
- * <UserIcon size='small' title='Terry Rivers' abbreviation='TR' backgroundColor='green'/>
46
- * @example
47
- * <caption>Medium icon with image</caption>
48
- * <UserIcon size='medium' title='Terry Rivers' abbreviation='TR' backgroundColor='green' image={<img src="https://cdn.example.com/user/profile/pic.png" />}/>
49
- * @example
50
- * <caption>Large icon with status</caption>
51
- * <UserIcon size='large' title='Terry Rivers' abbreviation='TR' backgroundColor='green' status='online' />
52
- * @example
53
- * <caption>X-large icon with image</caption>
54
- * <UserIcon size='x-large' title='Terry Rivers' abbreviation='TR' backgroundColor='green' image={<img src="https://cdn.example.com/user/profile/pic.png" />}/>
55
- */
56
- export declare const UserIcon: (props: UserIconProps) => JSX.Element;
57
- export default UserIcon;
@@ -1,4 +0,0 @@
1
- export { UserIcon } from './UserIcon';
2
- export type { UserIconProps, StatusTitles, UserIconStatus } from './UserIcon';
3
- declare const _default: "./UserIcon";
4
- export default _default;
@@ -1,62 +0,0 @@
1
- import React from 'react';
2
- import { CommonProps } from '../utils';
3
- import '@itwin/itwinui-css/css/user-icon.css';
4
- export declare type UserIconGroupProps = {
5
- /**
6
- * Max number of icons unstacked.
7
- * @default 5
8
- */
9
- maxIcons?: number;
10
- /**
11
- * If true, group will be stacked to take less space.
12
- * @default true
13
- */
14
- stacked?: boolean;
15
- /**
16
- * If true, group will be animated on hover.
17
- * @default false
18
- */
19
- animated?: boolean;
20
- /**
21
- * Size of user and count icons.
22
- * @default 'small'
23
- */
24
- iconSize?: 'small' | 'medium' | 'large' | 'x-large';
25
- /**
26
- * User Icons in the group.
27
- */
28
- children: React.ReactNode;
29
- /**
30
- * User Count Icon props.
31
- */
32
- countIconProps?: React.ComponentPropsWithRef<'div'>;
33
- } & Omit<CommonProps, 'title'>;
34
- /**
35
- * Group User Icons together.
36
- *
37
- * User Icons stacking is based on `maxIcons` count. If you provide 8 User Icons and keep default 5 `maxIcons` count,
38
- * this component will show 5 User Icons and User Count Icon with "3" in it.
39
- *
40
- * You can add custom User Count Icon behavior by using `countIconProps`.
41
- *
42
- * @example
43
- * <UserIconGroup iconSize='medium'>
44
- * <UserIcon
45
- * abbreviation="TR"
46
- * backgroundColor={getUserColor("Terry Rivers")}
47
- * title="Terry Rivers"
48
- * />
49
- * <UserIcon
50
- * abbreviation="RM"
51
- * backgroundColor={getUserColor("Robin Mercer")}
52
- * title="Robin Mercer"
53
- * />
54
- * <UserIcon
55
- * abbreviation="JM"
56
- * backgroundColor={getUserColor("Jean Mullins")}
57
- * title="Jean Mullins"
58
- * />
59
- * </UserIconGroup>
60
- */
61
- export declare const UserIconGroup: (props: UserIconGroupProps) => JSX.Element;
62
- export default UserIconGroup;
@@ -1,4 +0,0 @@
1
- export { UserIconGroup } from './UserIconGroup';
2
- export type { UserIconGroupProps } from './UserIconGroup';
3
- declare const _default: "./UserIconGroup";
4
- export default _default;
@@ -1,54 +0,0 @@
1
- import React from 'react';
2
- import '@itwin/itwinui-css/css/wizard.css';
3
- export declare type WizardLocalization = {
4
- stepsCountLabel: (currentStep: number, totalSteps: number) => string;
5
- };
6
- export declare type WizardType = 'default' | 'long' | 'workflow';
7
- export declare type StepProperties = {
8
- /**
9
- * The title/label of the step.
10
- */
11
- name: string;
12
- /**
13
- * A tooltip giving detailed description to this step.
14
- */
15
- description?: string;
16
- };
17
- export declare type WizardProps = {
18
- /**
19
- * Current step index, 0 - based.
20
- */
21
- currentStep?: number;
22
- /**
23
- * An array of step objects.
24
- */
25
- steps: StepProperties[];
26
- /**
27
- * The type of Wizard to display.
28
- * @default 'default'
29
- */
30
- type?: WizardType;
31
- /**
32
- * Option to provide localized strings.
33
- */
34
- localization?: WizardLocalization;
35
- /**
36
- * Click handler on completed step.
37
- */
38
- onStepClick?: (clickedIndex: number) => void;
39
- };
40
- /**
41
- * A wizard displays progress through a sequence of logical and numbered steps.
42
- * It may also be used for navigation.
43
- *
44
- * The `type` can be set to 'long' to show labels under steps.
45
- *
46
- * @example
47
- * <Wizard
48
- * steps=[{name: "Step One"}, {name: "Step Two"}, {name: "Step Three"}]
49
- * currentStep={0}
50
- * type='long'
51
- * />
52
- */
53
- export declare const Wizard: React.ForwardRefExoticComponent<WizardProps & React.RefAttributes<HTMLDivElement>>;
54
- export default Wizard;
@@ -1,4 +0,0 @@
1
- export { Wizard } from './Wizard';
2
- export type { WizardProps, StepProperties, WizardType, WizardLocalization, } from './Wizard';
3
- declare const _default: "./Wizard";
4
- export default _default;