@itwin/itwinui-react 3.0.0-dev.2 → 3.0.0-dev.4
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 +35 -0
- package/cjs/core/Alert/Alert.d.ts +2 -2
- package/cjs/core/Avatar/Avatar.d.ts +0 -4
- package/cjs/core/Avatar/Avatar.js +1 -5
- package/cjs/core/Avatar/index.d.ts +1 -1
- package/cjs/core/Avatar/index.js +1 -2
- package/cjs/core/AvatarGroup/AvatarGroup.d.ts +0 -4
- package/cjs/core/AvatarGroup/AvatarGroup.js +1 -5
- package/cjs/core/AvatarGroup/index.d.ts +1 -1
- package/cjs/core/AvatarGroup/index.js +1 -2
- package/cjs/core/FileUpload/FileUpload.d.ts +3 -4
- package/cjs/core/FileUpload/FileUpload.js +2 -2
- package/cjs/core/FileUpload/FileUploadTemplate.d.ts +1 -0
- package/cjs/core/FileUpload/FileUploadTemplate.js +1 -0
- package/cjs/core/Header/Header.d.ts +1 -20
- package/cjs/core/Header/Header.js +1 -2
- package/cjs/core/ProgressIndicators/ProgressRadial/ProgressRadial.d.ts +2 -2
- package/cjs/core/ProgressIndicators/ProgressRadial/ProgressRadial.js +10 -17
- package/cjs/core/Slider/Slider.d.ts +2 -1
- package/cjs/core/Slider/Thumb.d.ts +2 -2
- package/cjs/core/Slider/Thumb.js +1 -1
- package/cjs/core/Stepper/index.d.ts +0 -4
- package/cjs/core/Stepper/index.js +1 -4
- package/cjs/core/Tabs/Tabs.d.ts +0 -36
- package/cjs/core/Tabs/Tabs.js +1 -29
- package/cjs/core/Tabs/index.d.ts +1 -1
- package/cjs/core/Tabs/index.js +1 -3
- package/cjs/core/ThemeProvider/ThemeProvider.js +5 -2
- package/cjs/core/Tile/Tile.d.ts +157 -99
- package/cjs/core/Tile/Tile.js +273 -99
- package/cjs/core/Toast/Toast.d.ts +5 -10
- package/cjs/core/Toast/Toast.js +15 -13
- package/cjs/core/Toast/Toaster.d.ts +24 -26
- package/cjs/core/Toast/Toaster.js +91 -116
- package/cjs/core/Toast/index.d.ts +1 -4
- package/cjs/core/Toast/index.js +3 -6
- package/cjs/core/Tooltip/Tooltip.d.ts +67 -7
- package/cjs/core/Tooltip/Tooltip.js +96 -7
- package/cjs/core/index.d.ts +6 -7
- package/cjs/core/index.js +4 -12
- package/cjs/core/utils/components/Popover.d.ts +1 -1
- package/cjs/core/utils/functions/dom.d.ts +0 -8
- package/cjs/core/utils/functions/dom.js +1 -24
- package/cjs/core/utils/functions/polymorphic.d.ts +1 -1
- package/cjs/styles.js +1 -5
- package/esm/core/Alert/Alert.d.ts +2 -2
- package/esm/core/Avatar/Avatar.d.ts +0 -4
- package/esm/core/Avatar/Avatar.js +0 -4
- package/esm/core/Avatar/index.d.ts +1 -1
- package/esm/core/Avatar/index.js +1 -1
- package/esm/core/AvatarGroup/AvatarGroup.d.ts +0 -4
- package/esm/core/AvatarGroup/AvatarGroup.js +0 -4
- package/esm/core/AvatarGroup/index.d.ts +1 -1
- package/esm/core/AvatarGroup/index.js +1 -1
- package/esm/core/FileUpload/FileUpload.d.ts +3 -4
- package/esm/core/FileUpload/FileUpload.js +2 -2
- package/esm/core/FileUpload/FileUploadTemplate.d.ts +1 -0
- package/esm/core/FileUpload/FileUploadTemplate.js +1 -0
- package/esm/core/Header/Header.d.ts +1 -20
- package/esm/core/Header/Header.js +1 -2
- package/esm/core/ProgressIndicators/ProgressRadial/ProgressRadial.d.ts +2 -2
- package/esm/core/ProgressIndicators/ProgressRadial/ProgressRadial.js +11 -18
- package/esm/core/Slider/Slider.d.ts +2 -1
- package/esm/core/Slider/Thumb.d.ts +2 -2
- package/esm/core/Slider/Thumb.js +1 -1
- package/esm/core/Stepper/index.d.ts +0 -4
- package/esm/core/Stepper/index.js +0 -2
- package/esm/core/Tabs/Tabs.d.ts +0 -36
- package/esm/core/Tabs/Tabs.js +0 -26
- package/esm/core/Tabs/index.d.ts +1 -1
- package/esm/core/Tabs/index.js +1 -1
- package/esm/core/ThemeProvider/ThemeProvider.js +5 -2
- package/esm/core/Tile/Tile.d.ts +157 -99
- package/esm/core/Tile/Tile.js +273 -99
- package/esm/core/Toast/Toast.d.ts +5 -10
- package/esm/core/Toast/Toast.js +16 -14
- package/esm/core/Toast/Toaster.d.ts +24 -26
- package/esm/core/Toast/Toaster.js +85 -116
- package/esm/core/Toast/index.d.ts +1 -4
- package/esm/core/Toast/index.js +1 -3
- package/esm/core/Tooltip/Tooltip.d.ts +67 -7
- package/esm/core/Tooltip/Tooltip.js +97 -7
- package/esm/core/index.d.ts +6 -7
- package/esm/core/index.js +5 -5
- package/esm/core/utils/components/Popover.d.ts +1 -1
- package/esm/core/utils/functions/dom.d.ts +0 -8
- package/esm/core/utils/functions/dom.js +0 -19
- package/esm/core/utils/functions/polymorphic.d.ts +1 -1
- package/esm/styles.js +1 -5
- package/package.json +4 -3
- package/styles.css +55 -52
- package/cjs/core/Stepper/Wizard.d.ts +0 -46
- package/cjs/core/Stepper/Wizard.js +0 -55
- package/cjs/core/Toast/ToastWrapper.d.ts +0 -10
- package/cjs/core/Toast/ToastWrapper.js +0 -49
- package/esm/core/Stepper/Wizard.d.ts +0 -46
- package/esm/core/Stepper/Wizard.js +0 -29
- package/esm/core/Toast/ToastWrapper.d.ts +0 -10
- package/esm/core/Toast/ToastWrapper.js +0 -20
|
@@ -22,132 +22,107 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
25
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.ToasterStateContext = exports.ToastProvider = exports.Toaster = exports.useToaster = void 0;
|
|
26
30
|
/*---------------------------------------------------------------------------------------------
|
|
27
31
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
28
32
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
29
33
|
*--------------------------------------------------------------------------------------------*/
|
|
30
34
|
const React = __importStar(require("react"));
|
|
31
|
-
const
|
|
35
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
32
36
|
const index_js_1 = require("../utils/index.js");
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
const Toast_js_1 = require("./Toast.js");
|
|
38
|
+
// ----------------------------------------------------------------------------
|
|
39
|
+
const useToaster = () => {
|
|
40
|
+
const dispatch = (0, index_js_1.useSafeContext)(ToasterDispatchContext);
|
|
41
|
+
const showToast = React.useCallback((category) => (content, options) => {
|
|
42
|
+
const id = nextId();
|
|
43
|
+
dispatch({
|
|
44
|
+
type: 'add',
|
|
45
|
+
toast: { ...options, id, content, category },
|
|
46
|
+
});
|
|
47
|
+
return { close: () => dispatch({ type: 'remove', id }) };
|
|
48
|
+
}, [dispatch]);
|
|
49
|
+
return {
|
|
50
|
+
positive: showToast('positive'),
|
|
51
|
+
informational: showToast('informational'),
|
|
52
|
+
negative: showToast('negative'),
|
|
53
|
+
warning: showToast('warning'),
|
|
54
|
+
closeAll: () => {
|
|
55
|
+
dispatch({ type: 'close-all' });
|
|
56
|
+
},
|
|
57
|
+
setSettings: (settings) => {
|
|
58
|
+
dispatch({ type: 'settings', settings });
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
exports.useToaster = useToaster;
|
|
63
|
+
// ----------------------------------------------------------------------------
|
|
64
|
+
const Toaster = () => {
|
|
65
|
+
const { toasts, settings } = (0, index_js_1.useSafeContext)(exports.ToasterStateContext);
|
|
66
|
+
return (React.createElement(index_js_1.Box, { className: (0, classnames_1.default)(`iui-toast-wrapper`, `iui-placement-${settings.placement}`) }, toasts.map((toastProps) => {
|
|
67
|
+
return React.createElement(Toast_js_1.Toast, { key: toastProps.id, ...toastProps });
|
|
68
|
+
})));
|
|
69
|
+
};
|
|
70
|
+
exports.Toaster = Toaster;
|
|
71
|
+
// ----------------------------------------------------------------------------
|
|
72
|
+
const ToastProvider = ({ children }) => {
|
|
73
|
+
const [toasterState, dispatch] = React.useReducer(toastReducer, {
|
|
74
|
+
toasts: [],
|
|
75
|
+
settings: {
|
|
76
|
+
order: 'auto',
|
|
41
77
|
placement: 'top',
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
return (React.createElement(ToasterDispatchContext.Provider, { value: dispatch },
|
|
81
|
+
React.createElement(exports.ToasterStateContext.Provider, { value: toasterState }, children)));
|
|
82
|
+
};
|
|
83
|
+
exports.ToastProvider = ToastProvider;
|
|
84
|
+
const toastReducer = (state, action) => {
|
|
85
|
+
if (action.type === 'add') {
|
|
86
|
+
let order = state.settings.order;
|
|
87
|
+
if (order === 'auto') {
|
|
88
|
+
order = state.settings.placement.startsWith('top')
|
|
89
|
+
? 'descending'
|
|
90
|
+
: 'ascending';
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
...state,
|
|
94
|
+
toasts: [
|
|
95
|
+
...(order === 'ascending' ? state.toasts : []),
|
|
96
|
+
action.toast,
|
|
97
|
+
...(order === 'descending' ? state.toasts : []),
|
|
98
|
+
],
|
|
42
99
|
};
|
|
43
|
-
this.toastsRef = React.createRef();
|
|
44
|
-
this.isInitialized = false;
|
|
45
|
-
// Create container on demand.
|
|
46
|
-
// Cannot do it in constructor, because SSG/SSR apps would fail.
|
|
47
|
-
this.asyncInit = async () => {
|
|
48
|
-
if (this.isInitialized) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
const container = (0, index_js_1.getContainer)(TOASTS_CONTAINER_ID) ?? (0, index_js_1.getDocument)()?.body;
|
|
52
|
-
if (!container) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
this.isInitialized = true;
|
|
56
|
-
const toastWrapper = React.createElement(ToastWrapper_js_1.ToastWrapper, { ref: this.toastsRef });
|
|
57
|
-
const _ReactDOM = ReactDOM; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
58
|
-
// v18 mode
|
|
59
|
-
if (_ReactDOM.createRoot) {
|
|
60
|
-
const _ReactDOMInternals = _ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
61
|
-
// suppress warning about importing createRoot from react-dom/client
|
|
62
|
-
if (_ReactDOMInternals) {
|
|
63
|
-
_ReactDOMInternals.usingClientEntryPoint = true;
|
|
64
|
-
}
|
|
65
|
-
const root = _ReactDOM.createRoot(container);
|
|
66
|
-
root.render(toastWrapper);
|
|
67
|
-
// revert suppression, not to influence users app
|
|
68
|
-
if (_ReactDOMInternals) {
|
|
69
|
-
_ReactDOMInternals.usingClientEntryPoint = false;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
// v17 and before
|
|
74
|
-
ReactDOM.render(toastWrapper, container);
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Set global Toaster settings for toasts order and placement.
|
|
80
|
-
* Settings will be applied to new toasts on the page.
|
|
81
|
-
*/
|
|
82
|
-
setSettings(newSettings) {
|
|
83
|
-
newSettings.placement ?? (newSettings.placement = this.settings.placement);
|
|
84
|
-
newSettings.order ?? (newSettings.order = newSettings.placement?.startsWith('bottom')
|
|
85
|
-
? 'ascending'
|
|
86
|
-
: 'descending');
|
|
87
|
-
this.settings = newSettings;
|
|
88
|
-
this.asyncInit().then(() => {
|
|
89
|
-
this.toastsRef.current?.setPlacement(this.settings.placement ?? 'top');
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
positive(content, options) {
|
|
93
|
-
return this.createToast(content, 'positive', options);
|
|
94
|
-
}
|
|
95
|
-
informational(content, options) {
|
|
96
|
-
return this.createToast(content, 'informational', options);
|
|
97
100
|
}
|
|
98
|
-
|
|
99
|
-
return
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
createToast(content, category, options) {
|
|
105
|
-
++this.lastId;
|
|
106
|
-
const currentId = this.lastId;
|
|
107
|
-
this.toasts = [
|
|
108
|
-
...(this.settings.order === 'ascending' ? this.toasts : []),
|
|
109
|
-
{
|
|
110
|
-
...options,
|
|
111
|
-
content,
|
|
112
|
-
category,
|
|
113
|
-
onRemove: () => {
|
|
114
|
-
this.removeToast(currentId);
|
|
115
|
-
options?.onRemove?.();
|
|
116
|
-
},
|
|
117
|
-
id: currentId,
|
|
118
|
-
isVisible: true,
|
|
119
|
-
},
|
|
120
|
-
...(this.settings.order === 'descending' ? this.toasts : []),
|
|
121
|
-
];
|
|
122
|
-
this.updateView();
|
|
123
|
-
return { close: () => this.closeToast(currentId) };
|
|
124
|
-
}
|
|
125
|
-
removeToast(id) {
|
|
126
|
-
this.toasts = this.toasts.filter((toast) => toast.id !== id);
|
|
127
|
-
this.updateView();
|
|
128
|
-
}
|
|
129
|
-
updateView() {
|
|
130
|
-
this.asyncInit().then(() => {
|
|
131
|
-
this.toastsRef.current?.setToasts(this.toasts);
|
|
132
|
-
});
|
|
101
|
+
if (action.type === 'remove') {
|
|
102
|
+
return {
|
|
103
|
+
...state,
|
|
104
|
+
toasts: state.toasts.filter((toast) => toast.id !== action.id),
|
|
105
|
+
};
|
|
133
106
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
};
|
|
140
|
-
});
|
|
141
|
-
this.updateView();
|
|
107
|
+
if (action.type === 'close-all') {
|
|
108
|
+
return {
|
|
109
|
+
...state,
|
|
110
|
+
toasts: state.toasts.map((toast) => ({ ...toast, isVisible: false })),
|
|
111
|
+
};
|
|
142
112
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
return {
|
|
146
|
-
...toast,
|
|
147
|
-
isVisible: false,
|
|
148
|
-
};
|
|
149
|
-
});
|
|
150
|
-
this.updateView();
|
|
113
|
+
if (action.type === 'settings') {
|
|
114
|
+
return { ...state, settings: { ...state.settings, ...action.settings } };
|
|
151
115
|
}
|
|
152
|
-
|
|
153
|
-
|
|
116
|
+
return state;
|
|
117
|
+
};
|
|
118
|
+
// ----------------------------------------------------------------------------
|
|
119
|
+
exports.ToasterStateContext = React.createContext(undefined);
|
|
120
|
+
exports.ToasterStateContext.displayName = 'ToasterStateContext';
|
|
121
|
+
// ----------------------------------------------------------------------------
|
|
122
|
+
const ToasterDispatchContext = React.createContext(undefined);
|
|
123
|
+
ToasterDispatchContext.displayName = 'ToasterDispatchContext';
|
|
124
|
+
// ----------------------------------------------------------------------------
|
|
125
|
+
const nextId = (() => {
|
|
126
|
+
let count = 0;
|
|
127
|
+
return () => ++count;
|
|
128
|
+
})();
|
package/cjs/core/Toast/index.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useToaster = void 0;
|
|
6
4
|
/*---------------------------------------------------------------------------------------------
|
|
7
5
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
8
6
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
9
7
|
*--------------------------------------------------------------------------------------------*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
exports.default = toaster;
|
|
8
|
+
var Toaster_js_1 = require("./Toaster.js");
|
|
9
|
+
Object.defineProperty(exports, "useToaster", { enumerable: true, get: function () { return Toaster_js_1.useToaster; } });
|
|
@@ -1,6 +1,49 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import type {
|
|
3
|
-
|
|
2
|
+
import type { Placement } from '@floating-ui/react';
|
|
3
|
+
import type { PolymorphicForwardRefComponent } from '../utils/index.js';
|
|
4
|
+
declare type TooltipOptions = {
|
|
5
|
+
/**
|
|
6
|
+
* Placement of the Tooltip
|
|
7
|
+
* @default 'top'
|
|
8
|
+
*/
|
|
9
|
+
placement?: Placement;
|
|
10
|
+
/**
|
|
11
|
+
* Property for manual visibility control
|
|
12
|
+
*/
|
|
13
|
+
visible?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* autoUpdate options that recalculates position
|
|
16
|
+
* to ensure the floating element remains anchored
|
|
17
|
+
* to its reference element, such as when scrolling
|
|
18
|
+
* and resizing the screen
|
|
19
|
+
*
|
|
20
|
+
* https://floating-ui.com/docs/autoUpdate#options
|
|
21
|
+
*/
|
|
22
|
+
autoUpdateOptions?: {
|
|
23
|
+
ancestorScroll?: boolean;
|
|
24
|
+
ancestorResize?: boolean;
|
|
25
|
+
elementResize?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Use this if you want Tooltip to follow moving trigger element
|
|
28
|
+
*/
|
|
29
|
+
animationFrame?: boolean;
|
|
30
|
+
layoutShift?: boolean;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Tooltip middleware options.
|
|
34
|
+
* https://floating-ui.com/docs/offset
|
|
35
|
+
*/
|
|
36
|
+
middleware?: {
|
|
37
|
+
offset?: number;
|
|
38
|
+
flip?: boolean;
|
|
39
|
+
shift?: boolean;
|
|
40
|
+
size?: boolean;
|
|
41
|
+
autoPlacement?: boolean;
|
|
42
|
+
hide?: boolean;
|
|
43
|
+
inline?: boolean;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
declare type TooltipOwnProps = {
|
|
4
47
|
/**
|
|
5
48
|
* Content of the tooltip.
|
|
6
49
|
*/
|
|
@@ -9,18 +52,35 @@ export declare type TooltipProps = {
|
|
|
9
52
|
* Element to have tooltip on. Has to be a valid JSX element and needs to forward its ref.
|
|
10
53
|
* If not specified, the `reference` prop should be used instead.
|
|
11
54
|
*/
|
|
12
|
-
children?:
|
|
13
|
-
|
|
55
|
+
children?: React.ReactNode;
|
|
56
|
+
/**
|
|
57
|
+
* Element to portal tooltip to.
|
|
58
|
+
* Portals to ThemeProvider portalContainerRef by default.
|
|
59
|
+
* @default true;
|
|
60
|
+
*/
|
|
61
|
+
portal?: boolean | {
|
|
62
|
+
to: HTMLElement;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Sets reference point to user provided element.
|
|
66
|
+
* @example
|
|
67
|
+
* const buttonRef = React.useRef();
|
|
68
|
+
* ...
|
|
69
|
+
* <Button ref={buttonRef} />
|
|
70
|
+
* <Tooltip content='tooltip text' reference={buttonRef} />
|
|
71
|
+
*/
|
|
72
|
+
reference?: React.RefObject<HTMLElement>;
|
|
73
|
+
};
|
|
14
74
|
/**
|
|
15
75
|
* Basic tooltip component to display informative content when an element is hovered or focused.
|
|
16
|
-
* Uses
|
|
76
|
+
* Uses [FloatingUI](https://floating-ui.com/).
|
|
17
77
|
* @example
|
|
18
|
-
* <Tooltip content='tooltip text' placement='top'
|
|
78
|
+
* <Tooltip content='tooltip text' placement='top'>Hover here</Tooltip>
|
|
19
79
|
* @example
|
|
20
80
|
* const buttonRef = React.useRef();
|
|
21
81
|
* ...
|
|
22
82
|
* <Button ref={buttonRef} />
|
|
23
83
|
* <Tooltip content='tooltip text' reference={buttonRef} />
|
|
24
84
|
*/
|
|
25
|
-
export declare const Tooltip:
|
|
85
|
+
export declare const Tooltip: PolymorphicForwardRefComponent<"div", TooltipOwnProps & TooltipOptions>;
|
|
26
86
|
export default Tooltip;
|
|
@@ -33,21 +33,110 @@ exports.Tooltip = void 0;
|
|
|
33
33
|
*--------------------------------------------------------------------------------------------*/
|
|
34
34
|
const React = __importStar(require("react"));
|
|
35
35
|
const classnames_1 = __importDefault(require("classnames"));
|
|
36
|
+
const react_1 = require("@floating-ui/react");
|
|
36
37
|
const index_js_1 = require("../utils/index.js");
|
|
38
|
+
const react_dom_1 = __importDefault(require("react-dom"));
|
|
39
|
+
const useTooltip = (options = {}) => {
|
|
40
|
+
const { placement, visible: controlledOpen, middleware = {
|
|
41
|
+
flip: true,
|
|
42
|
+
shift: true,
|
|
43
|
+
}, autoUpdateOptions = {}, } = options;
|
|
44
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);
|
|
45
|
+
const open = controlledOpen ?? uncontrolledOpen;
|
|
46
|
+
const data = (0, react_1.useFloating)({
|
|
47
|
+
placement,
|
|
48
|
+
open,
|
|
49
|
+
onOpenChange: setUncontrolledOpen,
|
|
50
|
+
whileElementsMounted: (referenceEl, floatingEl, update) => (0, react_1.autoUpdate)(referenceEl, floatingEl, update, {
|
|
51
|
+
animationFrame: autoUpdateOptions.animationFrame,
|
|
52
|
+
ancestorScroll: autoUpdateOptions.ancestorScroll,
|
|
53
|
+
ancestorResize: autoUpdateOptions.ancestorResize,
|
|
54
|
+
elementResize: autoUpdateOptions.elementResize,
|
|
55
|
+
layoutShift: autoUpdateOptions.layoutShift,
|
|
56
|
+
}),
|
|
57
|
+
middleware: [
|
|
58
|
+
middleware.offset !== undefined ? (0, react_1.offset)(middleware.offset) : (0, react_1.offset)(4),
|
|
59
|
+
middleware.flip && (0, react_1.flip)(),
|
|
60
|
+
middleware.shift && (0, react_1.shift)(),
|
|
61
|
+
middleware.size && (0, react_1.size)(),
|
|
62
|
+
middleware.autoPlacement && (0, react_1.autoPlacement)(),
|
|
63
|
+
middleware.inline && (0, react_1.inline)(),
|
|
64
|
+
middleware.hide && (0, react_1.hide)(),
|
|
65
|
+
].filter(Boolean),
|
|
66
|
+
});
|
|
67
|
+
const context = data.context;
|
|
68
|
+
const hover = (0, react_1.useHover)(context, {
|
|
69
|
+
enabled: controlledOpen == null,
|
|
70
|
+
delay: {
|
|
71
|
+
open: 50,
|
|
72
|
+
close: 250,
|
|
73
|
+
},
|
|
74
|
+
handleClose: (0, react_1.safePolygon)({ buffer: -Infinity }),
|
|
75
|
+
});
|
|
76
|
+
const focus = (0, react_1.useFocus)(context, {
|
|
77
|
+
enabled: controlledOpen == null,
|
|
78
|
+
});
|
|
79
|
+
const click = (0, react_1.useClick)(context, {
|
|
80
|
+
enabled: controlledOpen == null,
|
|
81
|
+
});
|
|
82
|
+
const dismiss = (0, react_1.useDismiss)(context, {
|
|
83
|
+
enabled: controlledOpen == null,
|
|
84
|
+
});
|
|
85
|
+
const role = (0, react_1.useRole)(context, { role: 'tooltip' });
|
|
86
|
+
const interactions = (0, react_1.useInteractions)([click, hover, focus, dismiss, role]);
|
|
87
|
+
return React.useMemo(() => ({
|
|
88
|
+
open,
|
|
89
|
+
setUncontrolledOpen,
|
|
90
|
+
...interactions,
|
|
91
|
+
...data,
|
|
92
|
+
}), [open, interactions, data]);
|
|
93
|
+
};
|
|
37
94
|
/**
|
|
38
95
|
* Basic tooltip component to display informative content when an element is hovered or focused.
|
|
39
|
-
* Uses
|
|
96
|
+
* Uses [FloatingUI](https://floating-ui.com/).
|
|
40
97
|
* @example
|
|
41
|
-
* <Tooltip content='tooltip text' placement='top'
|
|
98
|
+
* <Tooltip content='tooltip text' placement='top'>Hover here</Tooltip>
|
|
42
99
|
* @example
|
|
43
100
|
* const buttonRef = React.useRef();
|
|
44
101
|
* ...
|
|
45
102
|
* <Button ref={buttonRef} />
|
|
46
103
|
* <Tooltip content='tooltip text' reference={buttonRef} />
|
|
47
104
|
*/
|
|
48
|
-
|
|
49
|
-
const { content, children,
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
105
|
+
exports.Tooltip = React.forwardRef((props, forwardRef) => {
|
|
106
|
+
const { content, children, portal = true, placement = 'top', autoUpdateOptions, middleware, style, className, visible, reference, ...rest } = props;
|
|
107
|
+
const tooltip = useTooltip({
|
|
108
|
+
placement,
|
|
109
|
+
visible,
|
|
110
|
+
autoUpdateOptions,
|
|
111
|
+
middleware,
|
|
112
|
+
});
|
|
113
|
+
const context = (0, index_js_1.useGlobals)();
|
|
114
|
+
React.useEffect(() => {
|
|
115
|
+
if (reference) {
|
|
116
|
+
tooltip.refs.setReference(reference.current);
|
|
117
|
+
}
|
|
118
|
+
}, [reference, tooltip.refs]);
|
|
119
|
+
const portalTo = typeof portal !== 'boolean'
|
|
120
|
+
? portal.to
|
|
121
|
+
: portal
|
|
122
|
+
? context?.portalContainerRef?.current ?? (0, index_js_1.getDocument)()?.body
|
|
123
|
+
: null;
|
|
124
|
+
const contentBox = (React.createElement(index_js_1.Box, { className: (0, classnames_1.default)('iui-tooltip', className), ref: (0, index_js_1.useMergedRefs)(tooltip.refs.setFloating, forwardRef), style: { ...tooltip.floatingStyles, ...style }, ...tooltip.getFloatingProps(), ...rest }, content));
|
|
125
|
+
const childrenRef = React.isValidElement(children) &&
|
|
126
|
+
(0, index_js_1.mergeRefs)(tooltip.refs.setReference,
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
128
|
+
children.ref);
|
|
129
|
+
return (React.createElement(React.Fragment, null,
|
|
130
|
+
React.isValidElement(children)
|
|
131
|
+
? React.cloneElement(children, tooltip.getReferenceProps({
|
|
132
|
+
ref: childrenRef,
|
|
133
|
+
...children.props,
|
|
134
|
+
}))
|
|
135
|
+
: null,
|
|
136
|
+
tooltip.open
|
|
137
|
+
? portalTo
|
|
138
|
+
? react_dom_1.default.createPortal(contentBox, portalTo)
|
|
139
|
+
: contentBox
|
|
140
|
+
: null));
|
|
141
|
+
});
|
|
53
142
|
exports.default = exports.Tooltip;
|
package/cjs/core/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { Alert } from './Alert/index.js';
|
|
2
|
-
export { Avatar
|
|
3
|
-
export { AvatarGroup
|
|
2
|
+
export { Avatar } from './Avatar/index.js';
|
|
3
|
+
export { AvatarGroup } from './AvatarGroup/index.js';
|
|
4
4
|
export { Backdrop } from './Backdrop/index.js';
|
|
5
5
|
export { Badge } from './Badge/index.js';
|
|
6
6
|
export { Breadcrumbs } from './Breadcrumbs/index.js';
|
|
@@ -23,7 +23,7 @@ export type { FooterElement, TitleTranslations } from './Footer/index.js';
|
|
|
23
23
|
export { Header, HeaderBreadcrumbs, HeaderButton, HeaderLogo, } from './Header/index.js';
|
|
24
24
|
export { List, ListItem } from './List/index.js';
|
|
25
25
|
export { TransferList } from './TransferList/index.js';
|
|
26
|
-
export {
|
|
26
|
+
export { Tabs, Tab } from './Tabs/index.js';
|
|
27
27
|
export { InformationPanel, InformationPanelWrapper, InformationPanelHeader, InformationPanelBody, InformationPanelContent, } from './InformationPanel/index.js';
|
|
28
28
|
export { Input } from './Input/index.js';
|
|
29
29
|
export { Label } from './Label/index.js';
|
|
@@ -51,8 +51,7 @@ export { Textarea } from './Textarea/index.js';
|
|
|
51
51
|
export { Tile } from './Tile/index.js';
|
|
52
52
|
export { TimePicker } from './TimePicker/index.js';
|
|
53
53
|
export type { MeridiemType } from './TimePicker/index.js';
|
|
54
|
-
export {
|
|
55
|
-
export type { ToastOptions } from './Toast/index.js';
|
|
54
|
+
export { useToaster } from './Toast/index.js';
|
|
56
55
|
export { ThemeProvider } from './ThemeProvider/index.js';
|
|
57
56
|
export type { ThemeType } from './ThemeProvider/index.js';
|
|
58
57
|
export { ToggleSwitch } from './ToggleSwitch/index.js';
|
|
@@ -60,7 +59,7 @@ export { Tooltip } from './Tooltip/index.js';
|
|
|
60
59
|
export { Tree, TreeNode, TreeNodeExpander } from './Tree/index.js';
|
|
61
60
|
export type { NodeData, NodeRenderProps } from './Tree/index.js';
|
|
62
61
|
export { Anchor, Blockquote, Code, Kbd, KbdKeys, Text, } from './Typography/index.js';
|
|
63
|
-
export {
|
|
64
|
-
export type { StepProperties,
|
|
62
|
+
export { Stepper, WorkflowDiagram } from './Stepper/index.js';
|
|
63
|
+
export type { StepProperties, StepperLocalization } from './Stepper/index.js';
|
|
65
64
|
export { SearchBox } from './SearchBox/index.js';
|
|
66
65
|
export { getUserColor, ColorValue, MiddleTextTruncation, LinkBox, LinkAction, Icon, Flex, VisuallyHidden, Divider, } from './utils/index.js';
|
package/cjs/core/index.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
exports.Tooltip = exports.ToggleSwitch = exports.ThemeProvider = exports.
|
|
8
|
-
exports.Divider = exports.VisuallyHidden = exports.Flex = exports.Icon = exports.LinkAction = exports.LinkBox = exports.MiddleTextTruncation = exports.ColorValue = exports.getUserColor = exports.SearchBox = exports.WorkflowDiagram = exports.Stepper = exports.
|
|
3
|
+
exports.Label = exports.Input = exports.InformationPanelContent = exports.InformationPanelBody = exports.InformationPanelHeader = exports.InformationPanelWrapper = exports.InformationPanel = exports.Tab = exports.Tabs = exports.TransferList = exports.ListItem = exports.List = exports.HeaderLogo = exports.HeaderButton = exports.HeaderBreadcrumbs = exports.Header = exports.defaultFooterElements = exports.Footer = exports.FileEmptyCard = exports.FileUploadCard = exports.FileUploadTemplate = exports.FileUpload = exports.Fieldset = exports.ExpandableBlock = exports.NonIdealState = exports.ErrorPage = exports.DropdownMenu = exports.Dialog = exports.generateLocalizedStrings = exports.DatePicker = exports.ComboBox = exports.ColorPalette = exports.ColorInputPanel = exports.ColorBuilder = exports.ColorSwatch = exports.ColorPicker = exports.Checkbox = exports.Carousel = exports.ButtonGroup = exports.SplitButton = exports.IdeasButton = exports.IconButton = exports.DropdownButton = exports.Button = exports.Breadcrumbs = exports.Badge = exports.Backdrop = exports.AvatarGroup = exports.Avatar = exports.Alert = void 0;
|
|
4
|
+
exports.Anchor = exports.TreeNodeExpander = exports.TreeNode = exports.Tree = exports.Tooltip = exports.ToggleSwitch = exports.ThemeProvider = exports.useToaster = exports.TimePicker = exports.Tile = exports.Textarea = exports.TagContainer = exports.Tag = exports.SelectionColumn = exports.ExpanderColumn = exports.ActionColumn = exports.TablePaginator = exports.EditableCell = exports.DefaultCell = exports.FilterButtonBar = exports.BaseFilter = exports.tableFilters = exports.Table = exports.Surface = exports.StatusMessage = exports.Slider = exports.SkipToContentLink = exports.SidenavSubmenuHeader = exports.SidenavSubmenu = exports.SidenavButton = exports.SideNavigation = exports.Select = exports.RadioTileGroup = exports.RadioTile = exports.Radio = exports.ProgressRadial = exports.ProgressLinear = exports.NotificationMarker = exports.ModalContent = exports.ModalButtonBar = exports.Modal = exports.MenuItemSkeleton = exports.MenuExtraContent = exports.MenuDivider = exports.MenuItem = exports.Menu = exports.LabeledTextarea = exports.LabeledSelect = exports.InputGroup = exports.LabeledInput = void 0;
|
|
5
|
+
exports.Divider = exports.VisuallyHidden = exports.Flex = exports.Icon = exports.LinkAction = exports.LinkBox = exports.MiddleTextTruncation = exports.ColorValue = exports.getUserColor = exports.SearchBox = exports.WorkflowDiagram = exports.Stepper = exports.Text = exports.KbdKeys = exports.Kbd = exports.Code = exports.Blockquote = void 0;
|
|
9
6
|
/*---------------------------------------------------------------------------------------------
|
|
10
7
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
11
8
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -14,10 +11,8 @@ var index_js_1 = require("./Alert/index.js");
|
|
|
14
11
|
Object.defineProperty(exports, "Alert", { enumerable: true, get: function () { return index_js_1.Alert; } });
|
|
15
12
|
var index_js_2 = require("./Avatar/index.js");
|
|
16
13
|
Object.defineProperty(exports, "Avatar", { enumerable: true, get: function () { return index_js_2.Avatar; } });
|
|
17
|
-
Object.defineProperty(exports, "UserIcon", { enumerable: true, get: function () { return index_js_2.UserIcon; } });
|
|
18
14
|
var index_js_3 = require("./AvatarGroup/index.js");
|
|
19
15
|
Object.defineProperty(exports, "AvatarGroup", { enumerable: true, get: function () { return index_js_3.AvatarGroup; } });
|
|
20
|
-
Object.defineProperty(exports, "UserIconGroup", { enumerable: true, get: function () { return index_js_3.UserIconGroup; } });
|
|
21
16
|
var index_js_4 = require("./Backdrop/index.js");
|
|
22
17
|
Object.defineProperty(exports, "Backdrop", { enumerable: true, get: function () { return index_js_4.Backdrop; } });
|
|
23
18
|
var index_js_5 = require("./Badge/index.js");
|
|
@@ -77,10 +72,8 @@ Object.defineProperty(exports, "ListItem", { enumerable: true, get: function ()
|
|
|
77
72
|
var index_js_23 = require("./TransferList/index.js");
|
|
78
73
|
Object.defineProperty(exports, "TransferList", { enumerable: true, get: function () { return index_js_23.TransferList; } });
|
|
79
74
|
var index_js_24 = require("./Tabs/index.js");
|
|
80
|
-
Object.defineProperty(exports, "VerticalTabs", { enumerable: true, get: function () { return index_js_24.VerticalTabs; } });
|
|
81
75
|
Object.defineProperty(exports, "Tabs", { enumerable: true, get: function () { return index_js_24.Tabs; } });
|
|
82
76
|
Object.defineProperty(exports, "Tab", { enumerable: true, get: function () { return index_js_24.Tab; } });
|
|
83
|
-
Object.defineProperty(exports, "HorizontalTabs", { enumerable: true, get: function () { return index_js_24.HorizontalTabs; } });
|
|
84
77
|
var index_js_25 = require("./InformationPanel/index.js");
|
|
85
78
|
Object.defineProperty(exports, "InformationPanel", { enumerable: true, get: function () { return index_js_25.InformationPanel; } });
|
|
86
79
|
Object.defineProperty(exports, "InformationPanelWrapper", { enumerable: true, get: function () { return index_js_25.InformationPanelWrapper; } });
|
|
@@ -155,7 +148,7 @@ Object.defineProperty(exports, "Tile", { enumerable: true, get: function () { re
|
|
|
155
148
|
var index_js_48 = require("./TimePicker/index.js");
|
|
156
149
|
Object.defineProperty(exports, "TimePicker", { enumerable: true, get: function () { return index_js_48.TimePicker; } });
|
|
157
150
|
var index_js_49 = require("./Toast/index.js");
|
|
158
|
-
Object.defineProperty(exports, "
|
|
151
|
+
Object.defineProperty(exports, "useToaster", { enumerable: true, get: function () { return index_js_49.useToaster; } });
|
|
159
152
|
var index_js_50 = require("./ThemeProvider/index.js");
|
|
160
153
|
Object.defineProperty(exports, "ThemeProvider", { enumerable: true, get: function () { return index_js_50.ThemeProvider; } });
|
|
161
154
|
var index_js_51 = require("./ToggleSwitch/index.js");
|
|
@@ -174,7 +167,6 @@ Object.defineProperty(exports, "Kbd", { enumerable: true, get: function () { ret
|
|
|
174
167
|
Object.defineProperty(exports, "KbdKeys", { enumerable: true, get: function () { return index_js_54.KbdKeys; } });
|
|
175
168
|
Object.defineProperty(exports, "Text", { enumerable: true, get: function () { return index_js_54.Text; } });
|
|
176
169
|
var index_js_55 = require("./Stepper/index.js");
|
|
177
|
-
Object.defineProperty(exports, "Wizard", { enumerable: true, get: function () { return index_js_55.Wizard; } });
|
|
178
170
|
Object.defineProperty(exports, "Stepper", { enumerable: true, get: function () { return index_js_55.Stepper; } });
|
|
179
171
|
Object.defineProperty(exports, "WorkflowDiagram", { enumerable: true, get: function () { return index_js_55.WorkflowDiagram; } });
|
|
180
172
|
var index_js_56 = require("./SearchBox/index.js");
|
|
@@ -25,7 +25,7 @@ export declare type PopoverProps = {
|
|
|
25
25
|
* with pre-configured props and plugins (e.g. lazy mounting, focus, etc).
|
|
26
26
|
* @private
|
|
27
27
|
*/
|
|
28
|
-
export declare const Popover: React.ForwardRefExoticComponent<Pick<PopoverProps, "disabled" | "className" | "role" | "offset" | "children" | "content" | "plugins" | "
|
|
28
|
+
export declare const Popover: React.ForwardRefExoticComponent<Pick<PopoverProps, "disabled" | "className" | "role" | "offset" | "children" | "content" | "plugins" | "placement" | "trigger" | "visible" | "render" | "animateFill" | "appendTo" | "aria" | "delay" | "duration" | "followCursor" | "getReferenceClientRect" | "hideOnClick" | "ignoreAttributes" | "inlinePositioning" | "interactive" | "interactiveBorder" | "interactiveDebounce" | "moveTransition" | "popperOptions" | "showOnCreate" | "sticky" | "touch" | "triggerTarget" | "onAfterUpdate" | "onBeforeUpdate" | "onCreate" | "onDestroy" | "onHidden" | "onHide" | "onMount" | "onShow" | "onShown" | "onTrigger" | "onUntrigger" | "onClickOutside" | "allowHTML" | "animation" | "arrow" | "inertia" | "maxWidth" | "theme" | "zIndex" | "singleton" | "reference"> & React.RefAttributes<unknown>>;
|
|
29
29
|
/**
|
|
30
30
|
* Plugin to hide Popover when either Esc key is pressed,
|
|
31
31
|
* or when the content inside is not tabbable and Tab key is pressed.
|
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
/**
|
|
3
|
-
* Get the container as a child of body, or create one if it doesn't exist.
|
|
4
|
-
* Mostly used for dynamic components like Modal or Toast.
|
|
5
|
-
*
|
|
6
|
-
* @param containerId id of the container to find or create
|
|
7
|
-
* @param ownerDocument Can be changed if the container should be in a different document (e.g. in popup).
|
|
8
|
-
*/
|
|
9
|
-
export declare const getContainer: (containerId: string, ownerDocument?: Document | undefined) => HTMLElement | undefined;
|
|
10
2
|
/**
|
|
11
3
|
* Get document if it is defined.
|
|
12
4
|
* Used to support SSR/SSG applications.
|
|
@@ -3,31 +3,8 @@
|
|
|
3
3
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
4
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
-
};
|
|
9
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.getTranslateValues = exports.mergeEventHandlers = exports.getWindow = exports.getDocument =
|
|
11
|
-
const styles_js_1 = __importDefault(require("../../../styles.js"));
|
|
12
|
-
/**
|
|
13
|
-
* Get the container as a child of body, or create one if it doesn't exist.
|
|
14
|
-
* Mostly used for dynamic components like Modal or Toast.
|
|
15
|
-
*
|
|
16
|
-
* @param containerId id of the container to find or create
|
|
17
|
-
* @param ownerDocument Can be changed if the container should be in a different document (e.g. in popup).
|
|
18
|
-
*/
|
|
19
|
-
const getContainer = (containerId, ownerDocument = (0, exports.getDocument)()) => {
|
|
20
|
-
let container = ownerDocument?.getElementById(containerId) ?? undefined;
|
|
21
|
-
if (container == null && !!ownerDocument) {
|
|
22
|
-
container = ownerDocument.createElement('div');
|
|
23
|
-
container.setAttribute('id', containerId);
|
|
24
|
-
const root = ownerDocument.querySelector(`.${styles_js_1.default['iui-root']}`) ??
|
|
25
|
-
ownerDocument.body;
|
|
26
|
-
root.appendChild(container);
|
|
27
|
-
}
|
|
28
|
-
return container;
|
|
29
|
-
};
|
|
30
|
-
exports.getContainer = getContainer;
|
|
7
|
+
exports.getTranslateValues = exports.mergeEventHandlers = exports.getWindow = exports.getDocument = void 0;
|
|
31
8
|
/**
|
|
32
9
|
* Get document if it is defined.
|
|
33
10
|
* Used to support SSR/SSG applications.
|