@itwin/itwinui-react 3.14.2 → 3.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +76 -2
- package/DEV-cjs/core/Carousel/CarouselDotsList.js +11 -4
- package/DEV-cjs/core/Carousel/CarouselSlider.js +3 -3
- package/DEV-cjs/core/ColorPicker/ColorBuilder.js +72 -24
- package/DEV-cjs/core/ColorPicker/ColorInputPanel.js +35 -7
- package/DEV-cjs/core/ColorPicker/ColorPalette.js +21 -3
- package/DEV-cjs/core/ComboBox/ComboBox.js +2 -1
- package/DEV-cjs/core/ComboBox/ComboBoxMenu.js +2 -2
- package/DEV-cjs/core/DropdownMenu/DropdownMenu.js +20 -19
- package/DEV-cjs/core/Overlay/Overlay.js +0 -18
- package/DEV-cjs/core/Popover/Popover.js +17 -10
- package/DEV-cjs/core/Select/Select.js +4 -2
- package/DEV-cjs/core/Table/Table.js +50 -25
- package/DEV-cjs/core/Table/TableExpandableContentMemoized.js +47 -0
- package/DEV-cjs/core/Table/TableRowMemoized.js +0 -18
- package/DEV-cjs/core/Table/hooks/useColumnDragAndDrop.js +12 -14
- package/DEV-cjs/core/ThemeProvider/ThemeProvider.js +18 -0
- package/DEV-cjs/core/Toast/Toast.js +6 -7
- package/DEV-cjs/core/Tooltip/Tooltip.js +7 -4
- package/DEV-cjs/styles.js +1 -1
- package/DEV-cjs/utils/components/ShadowRoot.js +22 -8
- package/DEV-cjs/utils/hooks/useWarningLogger.js +5 -3
- package/DEV-esm/core/Carousel/CarouselDotsList.js +10 -5
- package/DEV-esm/core/Carousel/CarouselSlider.js +2 -3
- package/DEV-esm/core/ColorPicker/ColorBuilder.js +56 -22
- package/DEV-esm/core/ColorPicker/ColorInputPanel.js +37 -8
- package/DEV-esm/core/ColorPicker/ColorPalette.js +18 -3
- package/DEV-esm/core/ComboBox/ComboBox.js +2 -1
- package/DEV-esm/core/ComboBox/ComboBoxMenu.js +2 -2
- package/DEV-esm/core/DropdownMenu/DropdownMenu.js +20 -19
- package/DEV-esm/core/Overlay/Overlay.js +1 -19
- package/DEV-esm/core/Popover/Popover.js +18 -10
- package/DEV-esm/core/Select/Select.js +4 -2
- package/DEV-esm/core/Table/Table.js +50 -25
- package/DEV-esm/core/Table/TableExpandableContentMemoized.js +33 -0
- package/DEV-esm/core/Table/TableRowMemoized.js +1 -21
- package/DEV-esm/core/Table/hooks/useColumnDragAndDrop.js +12 -6
- package/DEV-esm/core/ThemeProvider/ThemeProvider.js +18 -0
- package/DEV-esm/core/Toast/Toast.js +5 -5
- package/DEV-esm/core/Tooltip/Tooltip.js +7 -4
- package/DEV-esm/styles.js +1 -1
- package/DEV-esm/utils/components/ShadowRoot.js +22 -8
- package/DEV-esm/utils/hooks/useWarningLogger.js +4 -3
- package/cjs/core/Buttons/SplitButton.d.ts +5 -0
- package/cjs/core/Carousel/CarouselDotsList.js +11 -4
- package/cjs/core/Carousel/CarouselSlider.js +3 -3
- package/cjs/core/ColorPicker/ColorBuilder.d.ts +22 -1
- package/cjs/core/ColorPicker/ColorBuilder.js +72 -24
- package/cjs/core/ColorPicker/ColorInputPanel.d.ts +18 -0
- package/cjs/core/ColorPicker/ColorInputPanel.js +35 -7
- package/cjs/core/ColorPicker/ColorPalette.d.ts +8 -0
- package/cjs/core/ColorPicker/ColorPalette.js +21 -3
- package/cjs/core/ComboBox/ComboBox.d.ts +3 -2
- package/cjs/core/ComboBox/ComboBox.js +2 -1
- package/cjs/core/ComboBox/ComboBoxMenu.js +2 -2
- package/cjs/core/DropdownMenu/DropdownMenu.d.ts +11 -0
- package/cjs/core/DropdownMenu/DropdownMenu.js +20 -19
- package/cjs/core/Overlay/Overlay.js +0 -18
- package/cjs/core/Popover/Popover.d.ts +4 -1
- package/cjs/core/Popover/Popover.js +17 -10
- package/cjs/core/Select/Select.d.ts +14 -2
- package/cjs/core/Select/Select.js +4 -2
- package/cjs/core/Table/Table.js +50 -25
- package/cjs/core/Table/TableExpandableContentMemoized.d.ts +10 -0
- package/cjs/core/Table/TableExpandableContentMemoized.js +47 -0
- package/cjs/core/Table/TableRowMemoized.js +0 -18
- package/cjs/core/Table/hooks/useColumnDragAndDrop.js +12 -14
- package/cjs/core/ThemeProvider/ThemeProvider.js +18 -0
- package/cjs/core/Toast/Toast.js +6 -7
- package/cjs/core/Tooltip/Tooltip.js +7 -4
- package/cjs/styles.js +1 -1
- package/cjs/utils/components/ShadowRoot.js +22 -8
- package/cjs/utils/hooks/useWarningLogger.js +1 -0
- package/esm/core/Buttons/SplitButton.d.ts +5 -0
- package/esm/core/Carousel/CarouselDotsList.js +10 -5
- package/esm/core/Carousel/CarouselSlider.js +2 -3
- package/esm/core/ColorPicker/ColorBuilder.d.ts +22 -1
- package/esm/core/ColorPicker/ColorBuilder.js +56 -22
- package/esm/core/ColorPicker/ColorInputPanel.d.ts +18 -0
- package/esm/core/ColorPicker/ColorInputPanel.js +37 -8
- package/esm/core/ColorPicker/ColorPalette.d.ts +8 -0
- package/esm/core/ColorPicker/ColorPalette.js +18 -3
- package/esm/core/ComboBox/ComboBox.d.ts +3 -2
- package/esm/core/ComboBox/ComboBox.js +2 -1
- package/esm/core/ComboBox/ComboBoxMenu.js +2 -2
- package/esm/core/DropdownMenu/DropdownMenu.d.ts +11 -0
- package/esm/core/DropdownMenu/DropdownMenu.js +20 -19
- package/esm/core/Overlay/Overlay.js +1 -19
- package/esm/core/Popover/Popover.d.ts +4 -1
- package/esm/core/Popover/Popover.js +18 -10
- package/esm/core/Select/Select.d.ts +14 -2
- package/esm/core/Select/Select.js +4 -2
- package/esm/core/Table/Table.js +50 -25
- package/esm/core/Table/TableExpandableContentMemoized.d.ts +10 -0
- package/esm/core/Table/TableExpandableContentMemoized.js +33 -0
- package/esm/core/Table/TableRowMemoized.js +1 -21
- package/esm/core/Table/hooks/useColumnDragAndDrop.js +12 -6
- package/esm/core/ThemeProvider/ThemeProvider.js +18 -0
- package/esm/core/Toast/Toast.js +5 -5
- package/esm/core/Tooltip/Tooltip.js +7 -4
- package/esm/styles.js +1 -1
- package/esm/utils/components/ShadowRoot.js +22 -8
- package/esm/utils/hooks/useWarningLogger.js +1 -0
- package/package.json +8 -6
- package/styles.css +8 -8
package/esm/core/Table/Table.js
CHANGED
|
@@ -48,6 +48,7 @@ import {
|
|
|
48
48
|
} from './actionHandlers/index.js';
|
|
49
49
|
import { SELECTION_CELL_ID } from './columns/index.js';
|
|
50
50
|
import { ColumnHeader } from './ColumnHeader.js';
|
|
51
|
+
import { TableExpandableContentMemoized } from './TableExpandableContentMemoized.js';
|
|
51
52
|
let singleRowSelectedAction = 'singleRowSelected';
|
|
52
53
|
let shiftRowSelectedAction = 'shiftRowSelected';
|
|
53
54
|
export const tableResizeStartAction = 'tableResizeStart';
|
|
@@ -239,6 +240,17 @@ export const Table = (props) => {
|
|
|
239
240
|
),
|
|
240
241
|
[data, getSubRows],
|
|
241
242
|
);
|
|
243
|
+
let [rowHasParent] = React.useState(() => new WeakSet());
|
|
244
|
+
let getSubRowsWithSubComponents = React.useCallback(
|
|
245
|
+
(originalRow) => {
|
|
246
|
+
if (!rowHasParent.has(originalRow)) {
|
|
247
|
+
rowHasParent.add(originalRow);
|
|
248
|
+
return [originalRow];
|
|
249
|
+
}
|
|
250
|
+
return originalRow.subRows || [];
|
|
251
|
+
},
|
|
252
|
+
[rowHasParent],
|
|
253
|
+
);
|
|
242
254
|
let instance = useTable(
|
|
243
255
|
{
|
|
244
256
|
manualPagination: !paginatorRenderer,
|
|
@@ -251,7 +263,7 @@ export const Table = (props) => {
|
|
|
251
263
|
filterTypes,
|
|
252
264
|
selectSubRows,
|
|
253
265
|
data,
|
|
254
|
-
getSubRows,
|
|
266
|
+
getSubRows: subComponent ? getSubRowsWithSubComponents : getSubRows,
|
|
255
267
|
initialState: {
|
|
256
268
|
pageSize,
|
|
257
269
|
...props.initialState,
|
|
@@ -443,39 +455,54 @@ export const Table = (props) => {
|
|
|
443
455
|
useLayoutEffect(() => {
|
|
444
456
|
if (scrollToIndex)
|
|
445
457
|
virtualizer.scrollToIndex(scrollToIndex, {
|
|
446
|
-
align: '
|
|
458
|
+
align: 'start',
|
|
447
459
|
});
|
|
448
460
|
}, [virtualizer, scrollToIndex]);
|
|
449
461
|
let getPreparedRow = React.useCallback(
|
|
450
462
|
(index, virtualItem, virtualizer) => {
|
|
451
463
|
let row = page[index];
|
|
452
464
|
prepareRow(row);
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
465
|
+
if (row.subRows.length > 0 || !subComponent)
|
|
466
|
+
return React.createElement(TableRowMemoized, {
|
|
467
|
+
row: row,
|
|
468
|
+
rowProps: rowProps,
|
|
469
|
+
isLast: index === page.length - 1,
|
|
470
|
+
onRowInViewport: onRowInViewportRef,
|
|
471
|
+
onBottomReached: onBottomReachedRef,
|
|
472
|
+
intersectionMargin: intersectionMargin,
|
|
473
|
+
state: state,
|
|
474
|
+
key: row.getRowProps().key,
|
|
475
|
+
onClick: onRowClickHandler,
|
|
476
|
+
subComponent: subComponent,
|
|
477
|
+
isDisabled: !!isRowDisabled?.(row.original),
|
|
478
|
+
tableHasSubRows: hasAnySubRows,
|
|
479
|
+
tableInstance: instance,
|
|
480
|
+
expanderCell: expanderCell,
|
|
481
|
+
scrollContainerRef: tableRef.current,
|
|
482
|
+
tableRowRef: enableVirtualization ? void 0 : tableRowRef(row),
|
|
483
|
+
density: density,
|
|
484
|
+
virtualItem: virtualItem,
|
|
485
|
+
virtualizer: virtualizer,
|
|
486
|
+
});
|
|
487
|
+
return React.createElement(
|
|
488
|
+
TableExpandableContentMemoized,
|
|
489
|
+
{
|
|
490
|
+
key: row.getRowProps().key,
|
|
491
|
+
virtualItem: virtualItem,
|
|
492
|
+
ref: enableVirtualization
|
|
493
|
+
? virtualizer?.measureElement
|
|
494
|
+
: tableRowRef(row),
|
|
495
|
+
isDisabled: !!isRowDisabled?.(row.original),
|
|
496
|
+
},
|
|
497
|
+
subComponent(row),
|
|
498
|
+
);
|
|
474
499
|
},
|
|
475
500
|
[
|
|
476
501
|
page,
|
|
477
502
|
prepareRow,
|
|
478
503
|
rowProps,
|
|
504
|
+
onRowInViewportRef,
|
|
505
|
+
onBottomReachedRef,
|
|
479
506
|
intersectionMargin,
|
|
480
507
|
state,
|
|
481
508
|
onRowClickHandler,
|
|
@@ -487,8 +514,6 @@ export const Table = (props) => {
|
|
|
487
514
|
enableVirtualization,
|
|
488
515
|
tableRowRef,
|
|
489
516
|
density,
|
|
490
|
-
onBottomReachedRef,
|
|
491
|
-
onRowInViewportRef,
|
|
492
517
|
],
|
|
493
518
|
);
|
|
494
519
|
let updateStickyState = () => {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { PolymorphicForwardRefComponent } from '../../utils/index.js';
|
|
3
|
+
import type { VirtualItem } from '@tanstack/react-virtual';
|
|
4
|
+
type TableExpandableContentProps = {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
virtualItem?: VirtualItem<Element>;
|
|
7
|
+
isDisabled?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const TableExpandableContentMemoized: React.MemoExoticComponent<PolymorphicForwardRefComponent<"div", TableExpandableContentProps>>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import cx from 'classnames';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Box } from '../../utils/index.js';
|
|
4
|
+
let TableExpandableContent = React.forwardRef((props, ref) => {
|
|
5
|
+
let { children, className, style, isDisabled, virtualItem, ...rest } = props;
|
|
6
|
+
return React.createElement(
|
|
7
|
+
Box,
|
|
8
|
+
{
|
|
9
|
+
className: cx('iui-table-row', 'iui-table-expanded-content', className),
|
|
10
|
+
style: {
|
|
11
|
+
flex: '0 0 auto',
|
|
12
|
+
minWidth: '100%',
|
|
13
|
+
...(null != virtualItem
|
|
14
|
+
? {
|
|
15
|
+
transform: `translateY(${virtualItem.start}px)`,
|
|
16
|
+
}
|
|
17
|
+
: {}),
|
|
18
|
+
...style,
|
|
19
|
+
},
|
|
20
|
+
'aria-disabled': isDisabled,
|
|
21
|
+
'data-iui-index': virtualItem?.index,
|
|
22
|
+
...(null != virtualItem && {
|
|
23
|
+
'data-iui-virtualizer': 'item',
|
|
24
|
+
}),
|
|
25
|
+
ref: ref,
|
|
26
|
+
...rest,
|
|
27
|
+
},
|
|
28
|
+
children,
|
|
29
|
+
);
|
|
30
|
+
});
|
|
31
|
+
export const TableExpandableContentMemoized = React.memo(
|
|
32
|
+
TableExpandableContent,
|
|
33
|
+
);
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import cx from 'classnames';
|
|
3
|
-
import {
|
|
4
|
-
Box,
|
|
5
|
-
useIntersection,
|
|
6
|
-
useMergedRefs,
|
|
7
|
-
WithCSSTransition,
|
|
8
|
-
} from '../../utils/index.js';
|
|
3
|
+
import { Box, useIntersection, useMergedRefs } from '../../utils/index.js';
|
|
9
4
|
import { TableCell } from './TableCell.js';
|
|
10
5
|
export const TableRow = (props) => {
|
|
11
6
|
let {
|
|
@@ -106,21 +101,6 @@ export const TableRow = (props) => {
|
|
|
106
101
|
}),
|
|
107
102
|
),
|
|
108
103
|
),
|
|
109
|
-
subComponent &&
|
|
110
|
-
React.createElement(
|
|
111
|
-
WithCSSTransition,
|
|
112
|
-
{
|
|
113
|
-
in: row.isExpanded,
|
|
114
|
-
},
|
|
115
|
-
React.createElement(
|
|
116
|
-
Box,
|
|
117
|
-
{
|
|
118
|
-
className: cx('iui-table-row', 'iui-table-expanded-content'),
|
|
119
|
-
'aria-disabled': isDisabled,
|
|
120
|
-
},
|
|
121
|
-
subComponent(row),
|
|
122
|
-
),
|
|
123
|
-
),
|
|
124
104
|
);
|
|
125
105
|
};
|
|
126
106
|
let hasAnySelectedSubRow = (row, selectedRowIds) => {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { actions, makePropGetter, useGetLatest } from 'react-table';
|
|
2
2
|
import { styles } from '../../../styles.js';
|
|
3
|
+
let leftClassName = styles['iui-table-reorder-column-left'];
|
|
4
|
+
let rightClassName = styles['iui-table-reorder-column-right'];
|
|
3
5
|
let REORDER_ACTIONS = {
|
|
4
6
|
columnDragStart: 'columnDragStart',
|
|
5
7
|
columnDragEnd: 'columnDragEnd',
|
|
@@ -21,12 +23,16 @@ let defaultGetDragAndDropProps =
|
|
|
21
23
|
};
|
|
22
24
|
let setOnDragColumnStyle = (event, position) => {
|
|
23
25
|
let columnElement = event.currentTarget;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
columnElement.classList.add(
|
|
26
|
+
if ('left' === position) {
|
|
27
|
+
columnElement.classList.remove(rightClassName);
|
|
28
|
+
columnElement.classList.add(leftClassName);
|
|
29
|
+
} else if ('right' === position) {
|
|
30
|
+
columnElement.classList.remove(leftClassName);
|
|
31
|
+
columnElement.classList.add(rightClassName);
|
|
32
|
+
} else {
|
|
33
|
+
columnElement.classList.remove(leftClassName);
|
|
34
|
+
columnElement.classList.remove(rightClassName);
|
|
35
|
+
}
|
|
30
36
|
};
|
|
31
37
|
let reorderColumns = (tableColumns, srcIndex, dstIndex) => {
|
|
32
38
|
let newTableColumns = [...tableColumns];
|
|
@@ -32,6 +32,7 @@ export const ThemeProvider = React.forwardRef((props, forwardedRef) => {
|
|
|
32
32
|
includeCss = 'inherit' === themeProp,
|
|
33
33
|
...rest
|
|
34
34
|
} = props;
|
|
35
|
+
useInertPolyfill();
|
|
35
36
|
let [rootElement, setRootElement] = React.useState(null);
|
|
36
37
|
let parent = useParentThemeAndContext(rootElement);
|
|
37
38
|
let theme = 'inherit' === themeProp ? parent.theme || 'light' : themeProp;
|
|
@@ -254,3 +255,20 @@ let useIuiDebugRef = () => {
|
|
|
254
255
|
var version, version1;
|
|
255
256
|
_globalThis1.__iui.versions.add(JSON.stringify(meta));
|
|
256
257
|
};
|
|
258
|
+
let useInertPolyfill = () => {
|
|
259
|
+
let loaded = React.useRef(false);
|
|
260
|
+
let modulePath =
|
|
261
|
+
'https://cdn.jsdelivr.net/npm/wicg-inert@3.1.2/dist/inert.min.js';
|
|
262
|
+
React.useEffect(() => {
|
|
263
|
+
(async () => {
|
|
264
|
+
if (
|
|
265
|
+
!HTMLElement.prototype.hasOwnProperty('inert') &&
|
|
266
|
+
!loaded.current &&
|
|
267
|
+
!isUnitTest
|
|
268
|
+
) {
|
|
269
|
+
await new Function('url', 'return import(url)')(modulePath);
|
|
270
|
+
loaded.current = true;
|
|
271
|
+
}
|
|
272
|
+
})();
|
|
273
|
+
}, []);
|
|
274
|
+
};
|
package/esm/core/Toast/Toast.js
CHANGED
|
@@ -8,11 +8,10 @@ import {
|
|
|
8
8
|
Box,
|
|
9
9
|
useSafeContext,
|
|
10
10
|
ButtonBase,
|
|
11
|
+
useMediaQuery,
|
|
11
12
|
} from '../../utils/index.js';
|
|
12
13
|
import { IconButton } from '../Buttons/IconButton.js';
|
|
13
14
|
import { ToasterStateContext } from './Toaster.js';
|
|
14
|
-
let isMotionOk = () =>
|
|
15
|
-
getWindow()?.matchMedia?.('(prefers-reduced-motion: no-preference)')?.matches;
|
|
16
15
|
export const Toast = (props) => {
|
|
17
16
|
let {
|
|
18
17
|
content,
|
|
@@ -34,6 +33,7 @@ export const Toast = (props) => {
|
|
|
34
33
|
let [height, setHeight] = React.useState(0);
|
|
35
34
|
let thisElement = React.useRef(null);
|
|
36
35
|
let [margin, setMargin] = React.useState(0);
|
|
36
|
+
let motionOk = useMediaQuery('(prefers-reduced-motion: no-preference)');
|
|
37
37
|
let marginStyle = () => {
|
|
38
38
|
if ('top' === placementPosition)
|
|
39
39
|
return {
|
|
@@ -98,16 +98,16 @@ export const Toast = (props) => {
|
|
|
98
98
|
appear: true,
|
|
99
99
|
unmountOnExit: true,
|
|
100
100
|
onEnter: (node) => {
|
|
101
|
-
if (
|
|
101
|
+
if (motionOk) {
|
|
102
102
|
node.style.transform = 'translateY(15%)';
|
|
103
103
|
node.style.transitionTimingFunction = 'ease';
|
|
104
104
|
}
|
|
105
105
|
},
|
|
106
106
|
onEntered: (node) => {
|
|
107
|
-
if (
|
|
107
|
+
if (motionOk) node.style.transform = 'translateY(0)';
|
|
108
108
|
},
|
|
109
109
|
onExiting: (node) => {
|
|
110
|
-
if (
|
|
110
|
+
if (motionOk) {
|
|
111
111
|
let { translateX, translateY } = calculateOutAnimation(node);
|
|
112
112
|
node.style.transform = animateOutTo
|
|
113
113
|
? `scale(0.9) translate(${translateX}px,${translateY}px)`
|
|
@@ -118,10 +118,13 @@ let useTooltip = (options = {}) => {
|
|
|
118
118
|
});
|
|
119
119
|
let interactions = useInteractions([
|
|
120
120
|
useHover(floating.context, {
|
|
121
|
-
delay:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
121
|
+
delay:
|
|
122
|
+
0 !== delay
|
|
123
|
+
? delay
|
|
124
|
+
: {
|
|
125
|
+
open: 50,
|
|
126
|
+
close: 250,
|
|
127
|
+
},
|
|
125
128
|
handleClose: safePolygon({
|
|
126
129
|
buffer: -1 / 0,
|
|
127
130
|
}),
|
package/esm/styles.js
CHANGED
|
@@ -50,6 +50,19 @@ function useShadowRoot(templateRef, { css = '' }) {
|
|
|
50
50
|
let styleSheet = React.useRef();
|
|
51
51
|
let latestCss = useLatestRef(css);
|
|
52
52
|
let latestShadowRoot = useLatestRef(shadowRoot);
|
|
53
|
+
let createStyleSheet = React.useCallback(
|
|
54
|
+
(shadow) => {
|
|
55
|
+
if (shadow && supportsAdoptedStylesheets) {
|
|
56
|
+
let currentWindow = shadow.ownerDocument.defaultView || globalThis;
|
|
57
|
+
if (styleSheet.current instanceof currentWindow.CSSStyleSheet) return;
|
|
58
|
+
styleSheet.current = new currentWindow.CSSStyleSheet();
|
|
59
|
+
shadow.adoptedStyleSheets.push(styleSheet.current);
|
|
60
|
+
if (latestCss.current)
|
|
61
|
+
styleSheet.current.replaceSync(latestCss.current);
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
[latestCss],
|
|
65
|
+
);
|
|
53
66
|
useLayoutEffect(() => {
|
|
54
67
|
let parent = templateRef.current?.parentElement;
|
|
55
68
|
if (!parent) return;
|
|
@@ -61,22 +74,23 @@ function useShadowRoot(templateRef, { css = '' }) {
|
|
|
61
74
|
parent.attachShadow({
|
|
62
75
|
mode: 'open',
|
|
63
76
|
});
|
|
64
|
-
|
|
65
|
-
let currentWindow = shadow.ownerDocument.defaultView || globalThis;
|
|
66
|
-
styleSheet.current = new currentWindow.CSSStyleSheet();
|
|
67
|
-
shadow.adoptedStyleSheets = [styleSheet.current];
|
|
68
|
-
if (latestCss.current)
|
|
69
|
-
styleSheet.current.replaceSync(latestCss.current);
|
|
70
|
-
}
|
|
77
|
+
createStyleSheet(shadow);
|
|
71
78
|
ReactDOM.flushSync(() => setShadowRoot(shadow));
|
|
72
79
|
};
|
|
73
80
|
queueMicrotask(() => {
|
|
74
81
|
setupOrReuseShadowRoot();
|
|
75
82
|
});
|
|
76
83
|
return () => void setShadowRoot(null);
|
|
77
|
-
}, [templateRef,
|
|
84
|
+
}, [templateRef, createStyleSheet, latestShadowRoot]);
|
|
78
85
|
useLayoutEffect(() => {
|
|
79
86
|
if (css && supportsAdoptedStylesheets) styleSheet.current?.replaceSync(css);
|
|
80
87
|
}, [css]);
|
|
88
|
+
React.useEffect(() => {
|
|
89
|
+
let listener = () => createStyleSheet(latestShadowRoot.current);
|
|
90
|
+
window.addEventListener('appui:reparent', listener);
|
|
91
|
+
return () => {
|
|
92
|
+
window.removeEventListener('appui:reparent', listener);
|
|
93
|
+
};
|
|
94
|
+
}, [createStyleSheet, latestShadowRoot]);
|
|
81
95
|
return shadowRoot;
|
|
82
96
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { isUnitTest } from '../functions/dev.js';
|
|
3
|
+
import { getWindow } from '../functions/dom.js';
|
|
3
4
|
let _React = React;
|
|
4
5
|
let ReactInternals = _React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
5
6
|
export const useWarningLogger = () => () => {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/itwinui-react",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.15.1",
|
|
4
4
|
"author": "Bentley Systems",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"react": "^18.0.0",
|
|
107
107
|
"react-dom": "^18.0.0",
|
|
108
108
|
"typescript": "5",
|
|
109
|
-
"vite": "
|
|
109
|
+
"vite": "~5.1.8",
|
|
110
110
|
"vitest": "^1.2.1"
|
|
111
111
|
},
|
|
112
112
|
"peerDependencies": {
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
"build:types": "tsc -p tsconfig.build.json --outDir esm && tsc -p tsconfig.build.json --outDir cjs",
|
|
131
131
|
"build:styles": "vite build src/styles.js",
|
|
132
132
|
"build:post": "node ./scripts/postBuild.mjs",
|
|
133
|
-
"clean:build": "rimraf esm && rimraf cjs && rimraf DEV-esm && rimraf DEV-cjs",
|
|
133
|
+
"clean:build": "rimraf esm && rimraf cjs && rimraf DEV-esm && rimraf DEV-cjs && rimraf styles.css",
|
|
134
134
|
"clean:coverage": "rimraf coverage",
|
|
135
135
|
"clean": "rimraf .turbo && pnpm clean:coverage && pnpm clean:build && rimraf node_modules",
|
|
136
136
|
"test": "pnpm test:types && pnpm test:unit",
|
|
@@ -140,9 +140,11 @@
|
|
|
140
140
|
"format": "prettier --config .prettierrc **/*.{tsx,ts,js} --ignore-path .gitignore --write",
|
|
141
141
|
"lint": "eslint \"**/*.{js,ts,tsx}\" --max-warnings=0",
|
|
142
142
|
"lint:fix": "pnpm lint --fix && node ../../scripts/copyrightLinter.js --fix \"*/**/*.{js,ts,tsx}\"",
|
|
143
|
-
"dev": "pnpm clean:build && concurrently \"pnpm dev:esm\" \"pnpm dev:cjs\" \"pnpm dev:styles\" \"pnpm dev:types\"",
|
|
144
|
-
"dev:esm": "swc src -d esm --watch --strip-leading-paths",
|
|
145
|
-
"dev:
|
|
143
|
+
"dev": "pnpm clean:build && concurrently \"pnpm dev:esm\" \"pnpm dev:dev-esm\" \"pnpm dev:cjs\" \"pnpm dev:dev-cjs\" \"pnpm dev:styles\" \"pnpm dev:types\"",
|
|
144
|
+
"dev:esm": "swc src -d esm --env-name='production' --watch --strip-leading-paths",
|
|
145
|
+
"dev:dev-esm": "swc src -d DEV-esm --env-name='development' --watch --strip-leading-paths",
|
|
146
|
+
"dev:cjs": "swc src -d cjs --env-name='production' --watch --strip-leading-paths -C module.type=commonjs",
|
|
147
|
+
"dev:dev-cjs": "swc src -d DEV-cjs --env-name='development' --watch --strip-leading-paths -C module.type=commonjs",
|
|
146
148
|
"dev:types": "concurrently \"tsc -p tsconfig.build.json --outDir esm --watch --preserveWatchOutput\" \"tsc -p tsconfig.build.json --outDir cjs --watch --preserveWatchOutput\"",
|
|
147
149
|
"dev:styles": "pnpm build:styles --watch"
|
|
148
150
|
}
|