@astryxdesign/core 0.5.2-canary.42129ab → 0.5.2-canary.42b2fdd
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/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +2 -3
- package/dist/Chat/ChatComposer.d.ts +2 -2
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +24 -3
- package/dist/Chat/useChatNewMessages.js +3 -3
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +2 -3
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +8 -9
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +9 -1
- package/dist/Text/useTruncation.d.ts +1 -1
- package/dist/Text/useTruncation.d.ts.map +1 -1
- package/dist/Text/useTruncation.js +8 -7
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +124 -77
- package/dist/Tokenizer/Tokenizer.d.ts +0 -38
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +94 -26
- package/dist/Tokenizer/useEndLaneReserve.d.ts +31 -0
- package/dist/Tokenizer/useEndLaneReserve.d.ts.map +1 -0
- package/dist/Tokenizer/useEndLaneReserve.js +136 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +52 -17
- package/dist/Typeahead/Typeahead.d.ts +0 -21
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +108 -67
- package/dist/Typeahead/busyIndicatorLane.d.ts +62 -0
- package/dist/Typeahead/busyIndicatorLane.d.ts.map +1 -0
- package/dist/Typeahead/busyIndicatorLane.js +98 -0
- package/dist/astryx.css +4 -5
- package/dist/hooks/useOverflow.js +11 -11
- package/dist/hooks/useScrollOverflow.d.ts.map +1 -1
- package/dist/hooks/useScrollOverflow.js +7 -4
- package/dist/theme/defineTheme.d.ts +13 -0
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +7 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +1 -1
- package/dist/theme/localTokens.d.ts +18 -0
- package/dist/theme/localTokens.d.ts.map +1 -0
- package/dist/theme/localTokens.js +162 -0
- package/dist/utils/sharedResizeObserver.d.ts +17 -9
- package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
- package/dist/utils/sharedResizeObserver.js +54 -12
- package/package.json +2 -2
- package/src/AppShell/AppShell.tsx +2 -3
- package/src/Chat/ChatComposer.doc.mjs +7 -4
- package/src/Chat/ChatComposer.test.tsx +84 -2
- package/src/Chat/ChatComposer.tsx +48 -3
- package/src/Chat/useChatNewMessages.ts +3 -3
- package/src/TabList/TabList.tsx +2 -3
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -12
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +72 -0
- package/src/Table/plugins/sortable/useTableSortable.tsx +18 -1
- package/src/Text/useTruncation.ts +8 -7
- package/src/Toast/ToastViewport.test.tsx +177 -0
- package/src/Toast/ToastViewport.tsx +126 -58
- package/src/Tokenizer/Tokenizer.doc.mjs +2 -0
- package/src/Tokenizer/Tokenizer.test.tsx +335 -1
- package/src/Tokenizer/Tokenizer.tsx +129 -46
- package/src/Tokenizer/useEndLaneReserve.ts +146 -0
- package/src/Typeahead/BaseTypeahead.tsx +57 -16
- package/src/Typeahead/Typeahead.doc.mjs +6 -0
- package/src/Typeahead/Typeahead.spec.md +7 -1
- package/src/Typeahead/Typeahead.test.tsx +381 -1
- package/src/Typeahead/Typeahead.tsx +187 -69
- package/src/Typeahead/busyIndicatorLane.tsx +109 -0
- package/src/hooks/useOverflow.ts +11 -11
- package/src/hooks/useScrollOverflow.ts +7 -4
- package/src/theme/defineTheme.test.ts +227 -0
- package/src/theme/defineTheme.ts +30 -0
- package/src/theme/generateThemeRules.ts +4 -1
- package/src/theme/localTokens.ts +272 -0
- package/src/utils/sharedResizeObserver.test.ts +124 -5
- package/src/utils/sharedResizeObserver.ts +60 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/AppShell/AppShell.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAmBf,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAO5C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AA+BhD;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAE7D;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,SAAS,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AA4KD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAoB,EACpB,MAAM,EACN,QAAQ,EACR,cAAc,EACd,aAAa,EAAE,UAAU,EACzB,MAAe,EACf,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../src/AppShell/AppShell.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAmBf,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAO5C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AA+BhD;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAE7D;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAEhC;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,WAAW,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,SAAS,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AA4KD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAoB,EACpB,MAAM,EACN,QAAQ,EACR,cAAc,EACd,aAAa,EAAE,UAAU,EACzB,MAAe,EACf,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,aAAa,qBAiZf;yBAhae,QAAQ"}
|
|
@@ -36,7 +36,7 @@ import { AppShellMobileContext } from "./AppShellMobileContext.js";
|
|
|
36
36
|
import { mergeProps, isRenderable } from "../utils/index.js";
|
|
37
37
|
import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
|
|
38
38
|
import { useMediaQuery } from "../hooks/useMediaQuery.js";
|
|
39
|
-
import { observeResize
|
|
39
|
+
import { observeResize } from "../utils/sharedResizeObserver.js";
|
|
40
40
|
import { themeProps } from "../utils/themeProps.js";
|
|
41
41
|
import { useTranslator } from "../i18n/index.js";
|
|
42
42
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
@@ -320,8 +320,7 @@ export function AppShell({
|
|
|
320
320
|
const height = headerEl.getBoundingClientRect().height;
|
|
321
321
|
shellEl.style.setProperty('--_app-shell-header-height', `${height}px`);
|
|
322
322
|
};
|
|
323
|
-
observeResize(headerEl, () => updateHeight());
|
|
324
|
-
return () => unobserveResize(headerEl);
|
|
323
|
+
return observeResize(headerEl, () => updateHeight());
|
|
325
324
|
}, [isAuto]);
|
|
326
325
|
|
|
327
326
|
// =========================================================================
|
|
@@ -46,8 +46,8 @@ export interface ChatComposerProps extends Omit<BaseProps<HTMLDivElement>, 'onCh
|
|
|
46
46
|
/**
|
|
47
47
|
* Resting elevation of the composer body. `low` (the default) keeps today's
|
|
48
48
|
* raised look — low at rest, bumping to med on hover / focus. `none` flattens
|
|
49
|
-
* it and draws a border
|
|
50
|
-
*
|
|
49
|
+
* it and draws a border. Keyboard focus in the editor adds the shared focus
|
|
50
|
+
* ring in either presentation; pointer focus does not add that ring.
|
|
51
51
|
* @default 'low'
|
|
52
52
|
*/
|
|
53
53
|
elevation?: 'none' | 'low';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatComposer.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatComposer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ChatComposer.d.ts","sourceRoot":"","sources":["../../src/Chat/ChatComposer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,EAMZ,KAAK,SAAS,EAGf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA+B5C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAEtE,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,GAAG,UAAU,CACxB;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sBAAsB;IACtB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAI3B,6GAA6G;IAC7G,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,yHAAyH;IACzH,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,yGAAyG;IACzG,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gHAAgH;IAChH,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,gHAAgH;IAChH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gDAAgD;IAChD,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,iEAAiE;IACjE,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,oDAAoD;IACpD,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CACnC;AA8MD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,qBA6MpD;yBA7Me,YAAY"}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* - /apps/storybook/stories/ChatComposer.stories.tsx
|
|
23
23
|
* - /packages/cli/assets/templates/blocks/components/ChatComposer/ (block examples)
|
|
24
24
|
*/
|
|
25
|
-
import React, { useState, useCallback, useRef, useMemo } from 'react';
|
|
25
|
+
import React, { useState, useEffect, useCallback, useRef, useMemo } from 'react';
|
|
26
26
|
import * as stylex from '@stylexjs/stylex';
|
|
27
27
|
import "../theme/tokens.stylex.js";
|
|
28
28
|
import { colorVars, spacingVars, radiusVars, shadowVars, durationVars, easeVars, borderVars, typeScaleVars, typographyVars } from "../theme/tokens.stylex.js";
|
|
@@ -33,6 +33,8 @@ import { ChatComposerContext } from "./ChatContext.js";
|
|
|
33
33
|
import { ChatSendButton } from "./ChatSendButton.js";
|
|
34
34
|
import { themeProps } from "../utils/themeProps.js";
|
|
35
35
|
import { useTranslator } from "../i18n/index.js";
|
|
36
|
+
import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
|
|
37
|
+
import { getInteractionModality, trackInteractionModality } from "../utils/interactionModality.js";
|
|
36
38
|
|
|
37
39
|
// =============================================================================
|
|
38
40
|
// Types
|
|
@@ -65,7 +67,8 @@ const styles = {
|
|
|
65
67
|
|
|
66
68
|
// Resting elevation for the composer body, narrowed to two steps.
|
|
67
69
|
// - `low` (default) preserves today's look: low at rest, bumping to med on
|
|
68
|
-
// hover / focus-within
|
|
70
|
+
// hover / focus-within. The WCAG focus indicator is a separate shared ring,
|
|
71
|
+
// gated to keyboard focus in the editor; the shadow change remains depth.
|
|
69
72
|
// - `none` is flat; depth comes from a border + inset rings instead. The
|
|
70
73
|
// border is drawn *inside* the padding — its width is subtracted from every
|
|
71
74
|
// side (like Card) so total inset (border + padding) equals the elevated
|
|
@@ -88,6 +91,9 @@ const elevationStyles = {
|
|
|
88
91
|
$$css: true
|
|
89
92
|
}
|
|
90
93
|
};
|
|
94
|
+
function isComposerEditor(target) {
|
|
95
|
+
return target instanceof HTMLElement && target.matches('textarea, [contenteditable="true"], [role="textbox"], input:not([type]), input[type="text"], input[type="search"], input[type="email"], input[type="url"], input[type="tel"], input[type="password"]');
|
|
96
|
+
}
|
|
91
97
|
|
|
92
98
|
// =============================================================================
|
|
93
99
|
// Component
|
|
@@ -134,6 +140,10 @@ export function ChatComposer(props) {
|
|
|
134
140
|
} = props;
|
|
135
141
|
const placeholder = placeholderFromProps ?? t('@astryx.chat.composer.placeholder');
|
|
136
142
|
const [internalValue, setInternalValue] = useState('');
|
|
143
|
+
const [hasKeyboardEditorFocus, setHasKeyboardEditorFocus] = useState(false);
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
trackInteractionModality();
|
|
146
|
+
}, []);
|
|
137
147
|
const isControlled = controlledValue !== undefined;
|
|
138
148
|
const currentValue = isControlled ? controlledValue : internalValue;
|
|
139
149
|
const updateValue = useCallback(newValue => {
|
|
@@ -175,6 +185,14 @@ export function ChatComposer(props) {
|
|
|
175
185
|
const editable = bodyRef.current?.querySelector('[contenteditable="true"], textarea');
|
|
176
186
|
editable?.focus();
|
|
177
187
|
}, []);
|
|
188
|
+
const handleBodyFocusCapture = useCallback(event => {
|
|
189
|
+
setHasKeyboardEditorFocus(isComposerEditor(event.target) && getInteractionModality() === 'keyboard');
|
|
190
|
+
}, []);
|
|
191
|
+
const handleBodyBlurCapture = useCallback(event => {
|
|
192
|
+
if (!event.currentTarget.contains(event.relatedTarget)) {
|
|
193
|
+
setHasKeyboardEditorFocus(false);
|
|
194
|
+
}
|
|
195
|
+
}, []);
|
|
178
196
|
const statusEl = status ? /*#__PURE__*/_jsxs("div", {
|
|
179
197
|
role: status.type === 'error' ? 'alert' : 'status',
|
|
180
198
|
...{
|
|
@@ -238,7 +256,10 @@ export function ChatComposer(props) {
|
|
|
238
256
|
children: [statusPosition === 'top' && statusEl, drawer, /*#__PURE__*/_jsxs("div", {
|
|
239
257
|
ref: bodyRef,
|
|
240
258
|
onClick: handleBodyClick,
|
|
241
|
-
|
|
259
|
+
onPointerDownCapture: () => setHasKeyboardEditorFocus(false),
|
|
260
|
+
onFocusCapture: handleBodyFocusCapture,
|
|
261
|
+
onBlurCapture: handleBodyBlurCapture,
|
|
262
|
+
...stylex.props(styles.body, elevationStyles[elevation], hasKeyboardEditorFocus && focusOutlineStyles.focusWithin, density === 'compact' && styles.compact, xstyle),
|
|
242
263
|
children: [(headerActions || headerContext) && /*#__PURE__*/_jsxs("div", {
|
|
243
264
|
...{
|
|
244
265
|
className: "x78zum5 x6s0dn4 x1qughib x1txdalj xe0p6wg"
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* - /packages/core/src/Chat/index.ts (exports)
|
|
24
24
|
*/
|
|
25
25
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
26
|
-
import { observeResize
|
|
26
|
+
import { observeResize } from "../utils/sharedResizeObserver.js";
|
|
27
27
|
|
|
28
28
|
// =============================================================================
|
|
29
29
|
// Types
|
|
@@ -49,7 +49,7 @@ export function useChatNewMessages({
|
|
|
49
49
|
const elementRef = useRef(null);
|
|
50
50
|
const cleanupRef = useRef(null);
|
|
51
51
|
const attach = useCallback(el => {
|
|
52
|
-
observeResize(el, () => {
|
|
52
|
+
const unobserve = observeResize(el, () => {
|
|
53
53
|
onResizeRef.current?.();
|
|
54
54
|
const messages = el.getElementsByClassName('astryx-chat-message');
|
|
55
55
|
const last = messages.length > 0 ? messages[messages.length - 1] : null;
|
|
@@ -60,7 +60,7 @@ export function useChatNewMessages({
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
});
|
|
63
|
-
cleanupRef.current =
|
|
63
|
+
cleanupRef.current = unobserve;
|
|
64
64
|
}, []);
|
|
65
65
|
const detach = useCallback(() => {
|
|
66
66
|
cleanupRef.current?.();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabList.d.ts","sourceRoot":"","sources":["../../src/TabList/TabList.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,EAKZ,KAAK,QAAQ,EACb,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAQlD,OAAO,EAAC,cAAc,EAAC,MAAM,mCAAmC,CAAC;AAsBjE;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAC5E,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAyLD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,OAAO,CAAC,EACtB,GAAG,EACH,KAAK,EACL,QAAQ,EACR,IAAI,EAAE,QAAQ,EACd,MAAc,EACd,UAAkB,EAClB,IAAI,EACJ,QAAiB,EACjB,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,kBAAkB,EAChC,iBAAiB,EAAE,cAAc,EACjC,kBAAkB,EAAE,gBAAgB,EACpC,CAAC,cAAc,CAAC,EAAE,aAAa,EAC/B,GAAG,SAAS,EACb,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"TabList.d.ts","sourceRoot":"","sources":["../../src/TabList/TabList.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,EAKZ,KAAK,QAAQ,EACb,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAQlD,OAAO,EAAC,cAAc,EAAC,MAAM,mCAAmC,CAAC;AAsBjE;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAC5E,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAyLD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,OAAO,CAAC,EACtB,GAAG,EACH,KAAK,EACL,QAAQ,EACR,IAAI,EAAE,QAAQ,EACd,MAAc,EACd,UAAkB,EAClB,IAAI,EACJ,QAAiB,EACjB,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,kBAAkB,EAChC,iBAAiB,EAAE,cAAc,EACjC,kBAAkB,EAAE,gBAAgB,EACpC,CAAC,cAAc,CAAC,EAAE,aAAa,EAC/B,GAAG,SAAS,EACb,EAAE,YAAY,qBA8Ud;yBAnWe,OAAO"}
|
package/dist/TabList/TabList.js
CHANGED
|
@@ -34,7 +34,7 @@ import { isRtlElement } from "../hooks/isRtlElement.js";
|
|
|
34
34
|
import { Icon } from "../Icon/index.js";
|
|
35
35
|
import { EDGE_COMP_ATTR } from "../Layout/edgeCompensation.stylex.js";
|
|
36
36
|
import { themeProps } from "../utils/themeProps.js";
|
|
37
|
-
import { observeResize
|
|
37
|
+
import { observeResize } from "../utils/sharedResizeObserver.js";
|
|
38
38
|
import { devWarn } from "../utils/devWarning.js";
|
|
39
39
|
import { focusOutlineProps } from "../utils/focusOutline.stylex.js";
|
|
40
40
|
import { useTranslator } from "../i18n/index.js";
|
|
@@ -372,8 +372,7 @@ export function TabList({
|
|
|
372
372
|
return;
|
|
373
373
|
}
|
|
374
374
|
const onResize = () => revealSelectedTabRef.current();
|
|
375
|
-
observeResize(root, onResize);
|
|
376
|
-
return () => unobserveResize(root);
|
|
375
|
+
return observeResize(root, onResize);
|
|
377
376
|
}, [hasScroll, listRef]);
|
|
378
377
|
const scrollByPage = useCallback(direction => {
|
|
379
378
|
const strip = stripRef.current;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableColumnResize.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/columnResize/useTableColumnResize.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,WAAW,EAEX,WAAW,EAEZ,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"useTableColumnResize.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/columnResize/useTableColumnResize.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,WAAW,EAEX,WAAW,EAEZ,MAAM,aAAa,CAAC;AAQrB,MAAM,WAAW,0BAA0B;IACzC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEtC;;;OAGG;IACH;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAE9D;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;CAClD;AAymBD,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpE,MAAM,EAAE,0BAA0B,GACjC,WAAW,CAAC,CAAC,CAAC,CAsKhB"}
|
|
@@ -17,7 +17,7 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
17
17
|
import "../../../theme/tokens.stylex.js";
|
|
18
18
|
import { colorVars } from "../../../theme/tokens.stylex.js";
|
|
19
19
|
import { DEFAULT_MIN_COLUMN_WIDTH } from "../../columnUtils.js";
|
|
20
|
-
import { observeResize
|
|
20
|
+
import { observeResize } from "../../../utils/sharedResizeObserver.js";
|
|
21
21
|
|
|
22
22
|
// =============================================================================
|
|
23
23
|
// Config Type
|
|
@@ -490,11 +490,11 @@ export function useTableColumnResize(config) {
|
|
|
490
490
|
// --table-resize-height on the <table> element. This is initialized
|
|
491
491
|
// entirely by the resize plugin — the base table has no knowledge of it.
|
|
492
492
|
const observedTableRef = useRef(null);
|
|
493
|
+
const unobserveTableRef = useRef(null);
|
|
493
494
|
const measureRef = useCallback(el => {
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
}
|
|
495
|
+
unobserveTableRef.current?.();
|
|
496
|
+
unobserveTableRef.current = null;
|
|
497
|
+
observedTableRef.current = null;
|
|
498
498
|
if (!el) {
|
|
499
499
|
return;
|
|
500
500
|
}
|
|
@@ -503,7 +503,7 @@ export function useTableColumnResize(config) {
|
|
|
503
503
|
tableRef.current = table;
|
|
504
504
|
}
|
|
505
505
|
if (table && typeof ResizeObserver !== 'undefined') {
|
|
506
|
-
observeResize(table, () => {
|
|
506
|
+
unobserveTableRef.current = observeResize(table, () => {
|
|
507
507
|
const height = table.getBoundingClientRect().height;
|
|
508
508
|
table.style.setProperty('--table-resize-height', `${height}px`);
|
|
509
509
|
});
|
|
@@ -514,9 +514,8 @@ export function useTableColumnResize(config) {
|
|
|
514
514
|
// Clean up observer on unmount
|
|
515
515
|
useEffect(() => {
|
|
516
516
|
return () => {
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
}
|
|
517
|
+
unobserveTableRef.current?.();
|
|
518
|
+
unobserveTableRef.current = null;
|
|
520
519
|
};
|
|
521
520
|
}, []);
|
|
522
521
|
return useMemo(() => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableSortable.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/sortable/useTableSortable.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,WAAW,EAIZ,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM;IAC9D,2EAA2E;IAC3E,OAAO,EAAE,QAAQ,CAAC;IAClB,0BAA0B;IAC1B,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,IACzD,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;AAM7B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,sBAAsB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM;IACtE,iEAAiE;IACjE,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE/B;;;OAGG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAEvD;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;
|
|
1
|
+
{"version":3,"file":"useTableSortable.d.ts","sourceRoot":"","sources":["../../../../src/Table/plugins/sortable/useTableSortable.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,WAAW,EAIZ,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM;IAC9D,2EAA2E;IAC3E,OAAO,EAAE,QAAQ,CAAC;IAClB,0BAA0B;IAC1B,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,IACzD,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;AAM7B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,sBAAsB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM;IACtE,iEAAiE;IACjE,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE/B;;;OAGG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAEvD;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAkPD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAChC,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CA2F1D"}
|
|
@@ -88,6 +88,14 @@ const sortStyles = {
|
|
|
88
88
|
k9WMMc: "x16tdsg8",
|
|
89
89
|
kaIpWk: "xx3sua9",
|
|
90
90
|
$$css: true
|
|
91
|
+
},
|
|
92
|
+
buttonAlignCenter: {
|
|
93
|
+
kjj79g: "xl56j7k",
|
|
94
|
+
$$css: true
|
|
95
|
+
},
|
|
96
|
+
buttonAlignEnd: {
|
|
97
|
+
kjj79g: "x13a6bvl",
|
|
98
|
+
$$css: true
|
|
91
99
|
}
|
|
92
100
|
};
|
|
93
101
|
|
|
@@ -212,7 +220,7 @@ function SortHeaderButton({
|
|
|
212
220
|
};
|
|
213
221
|
return /*#__PURE__*/_jsxs("button", {
|
|
214
222
|
type: "button",
|
|
215
|
-
...focusOutlineProps.focusVisible(sortStyles.button),
|
|
223
|
+
...focusOutlineProps.focusVisible(sortStyles.button, column.align === 'end' ? sortStyles.buttonAlignEnd : column.align === 'center' ? sortStyles.buttonAlignCenter : null),
|
|
216
224
|
"aria-label": ariaLabel,
|
|
217
225
|
onClick: handleClick,
|
|
218
226
|
children: [/*#__PURE__*/_jsx("span", {
|
|
@@ -32,7 +32,7 @@ export interface UseTruncationReturn {
|
|
|
32
32
|
/**
|
|
33
33
|
* Hook for detecting text overflow/truncation.
|
|
34
34
|
*
|
|
35
|
-
* Uses a shared ResizeObserver singleton (via observeResize
|
|
35
|
+
* Uses a shared ResizeObserver singleton (via observeResize)
|
|
36
36
|
* for efficient detection when content or container changes. A single
|
|
37
37
|
* ResizeObserver instance is shared across all mounted useTruncation hooks,
|
|
38
38
|
* so even hundreds of table cells only create one observer.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTruncation.d.ts","sourceRoot":"","sources":["../../src/Text/useTruncation.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,EAAgC,KAAK,WAAW,EAAC,MAAM,OAAO,CAAC;AAGtE,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAE9B;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,GAC5B,mBAAmB,
|
|
1
|
+
{"version":3,"file":"useTruncation.d.ts","sourceRoot":"","sources":["../../src/Text/useTruncation.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,EAAgC,KAAK,WAAW,EAAC,MAAM,OAAO,CAAC;AAGtE,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAE9B;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,GAC5B,mBAAmB,CA2ErB"}
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
* - /packages/core/src/Text/Text.doc.mjs
|
|
13
13
|
*/
|
|
14
14
|
import { useCallback, useRef, useState } from 'react';
|
|
15
|
-
import { observeResize
|
|
15
|
+
import { observeResize } from "../utils/sharedResizeObserver.js";
|
|
16
16
|
/**
|
|
17
17
|
* Hook for detecting text overflow/truncation.
|
|
18
18
|
*
|
|
19
|
-
* Uses a shared ResizeObserver singleton (via observeResize
|
|
19
|
+
* Uses a shared ResizeObserver singleton (via observeResize)
|
|
20
20
|
* for efficient detection when content or container changes. A single
|
|
21
21
|
* ResizeObserver instance is shared across all mounted useTruncation hooks,
|
|
22
22
|
* so even hundreds of table cells only create one observer.
|
|
@@ -43,6 +43,7 @@ export function useTruncation(options) {
|
|
|
43
43
|
const [isTruncated, setIsTruncated] = useState(false);
|
|
44
44
|
const [fullText, setFullText] = useState('');
|
|
45
45
|
const elementRef = useRef(null);
|
|
46
|
+
const unobserveRef = useRef(null);
|
|
46
47
|
const checkTruncation = useCallback(element => {
|
|
47
48
|
if (maxLines === 0) {
|
|
48
49
|
setIsTruncated(false);
|
|
@@ -75,17 +76,17 @@ export function useTruncation(options) {
|
|
|
75
76
|
}
|
|
76
77
|
}, [maxLines]);
|
|
77
78
|
const ref = useCallback(element => {
|
|
78
|
-
// Cleanup previous observation
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
// Cleanup previous observation. Unsubscribing by callback rather than
|
|
80
|
+
// by element leaves any other observer of the same node untouched.
|
|
81
|
+
unobserveRef.current?.();
|
|
82
|
+
unobserveRef.current = null;
|
|
82
83
|
elementRef.current = element;
|
|
83
84
|
if (element && maxLines > 0) {
|
|
84
85
|
// Observe via shared singleton (if available).
|
|
85
86
|
// observeResize fires the callback once on registration,
|
|
86
87
|
// so no separate initial check is needed.
|
|
87
88
|
if (typeof ResizeObserver !== 'undefined') {
|
|
88
|
-
observeResize(element, () => {
|
|
89
|
+
unobserveRef.current = observeResize(element, () => {
|
|
89
90
|
checkTruncation(element);
|
|
90
91
|
});
|
|
91
92
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToastViewport.d.ts","sourceRoot":"","sources":["../../src/Toast/ToastViewport.tsx"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAa,aAAa,EAAqB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ToastViewport.d.ts","sourceRoot":"","sources":["../../src/Toast/ToastViewport.tsx"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAa,aAAa,EAAqB,MAAM,SAAS,CAAC;AA6I3E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;IACtE;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAyGD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAsB,EACtB,UAAc,EACd,KAAK,EACL,UAAiB,EACjB,QAAQ,GACT,EAAE,kBAAkB,+BA0TpB;yBAhUe,aAAa"}
|
|
@@ -75,41 +75,6 @@ const styles = {
|
|
|
75
75
|
kGNEyG: "x1cy8zhl",
|
|
76
76
|
kXwgrk: "x3ieub6",
|
|
77
77
|
$$css: true
|
|
78
|
-
},
|
|
79
|
-
toastWrapper: {
|
|
80
|
-
kfzvcC: "x67bb7w",
|
|
81
|
-
k1xSpc: "xrvj5dj",
|
|
82
|
-
kzqmXN: "xh8yej3",
|
|
83
|
-
ks0D6T: "x1j9u4d2",
|
|
84
|
-
k7Eaqz: "xeuugli",
|
|
85
|
-
k9llMU: "x1tu4anv",
|
|
86
|
-
k1ekBW: "xjshnde",
|
|
87
|
-
kIyJzY: "xuedmi6 xsagj69",
|
|
88
|
-
kAMwcw: "xlr8y92",
|
|
89
|
-
ke1DCf: "x1sopeo2",
|
|
90
|
-
kNIiQF: "x5rzir7",
|
|
91
|
-
$$css: true
|
|
92
|
-
},
|
|
93
|
-
toastWrapperFromBottom: {
|
|
94
|
-
"--_toast-slide-y": "x1heqljd",
|
|
95
|
-
$$css: true
|
|
96
|
-
},
|
|
97
|
-
toastWrapperFromTop: {
|
|
98
|
-
"--_toast-slide-y": "x87gnkx",
|
|
99
|
-
$$css: true
|
|
100
|
-
},
|
|
101
|
-
toastWrapperGap: {
|
|
102
|
-
kGO01o: "x1wesfrj xup0pd7",
|
|
103
|
-
$$css: true
|
|
104
|
-
},
|
|
105
|
-
toastWrapperGapReversed: {
|
|
106
|
-
kGO01o: "x1wesfrj x1vjq31q",
|
|
107
|
-
$$css: true
|
|
108
|
-
},
|
|
109
|
-
toastWrapperExiting: {
|
|
110
|
-
k9llMU: "xihq33y",
|
|
111
|
-
kGO01o: "x18d9i69",
|
|
112
|
-
$$css: true
|
|
113
78
|
}
|
|
114
79
|
};
|
|
115
80
|
|
|
@@ -137,6 +102,118 @@ function getNodeText(node) {
|
|
|
137
102
|
}
|
|
138
103
|
return '';
|
|
139
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Drop an id from a Set of ids, keeping the Set's identity when the id is not
|
|
107
|
+
* in it so React can skip the re-render. The viewport tracks two of these
|
|
108
|
+
* (exiting rows, settled rows) and each has to be pruned from more than one
|
|
109
|
+
* place.
|
|
110
|
+
*/
|
|
111
|
+
const withoutId = id => prev => {
|
|
112
|
+
if (!prev.has(id)) {
|
|
113
|
+
return prev;
|
|
114
|
+
}
|
|
115
|
+
const next = new Set(prev);
|
|
116
|
+
next.delete(id);
|
|
117
|
+
return next;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* One row of the stack: the grid wrapper that opens and collapses, and the
|
|
121
|
+
* clip that releases once it is open so the card's elevation can paint.
|
|
122
|
+
*
|
|
123
|
+
* Settled state lives here, on the mounted row, rather than in a Set of ids on
|
|
124
|
+
* the viewport. A row leaves the DOM by more paths than dismissal — `maxVisible`
|
|
125
|
+
* evicts the oldest when a newer toast arrives, and a uniqueID overwrite swaps
|
|
126
|
+
* a new entry into a replaced toast's place — and on those paths nothing on the
|
|
127
|
+
* dismissal path runs to prune it. Holding the flag on the row makes every one
|
|
128
|
+
* of them the same event: the row unmounts, the flag goes with it, and a toast
|
|
129
|
+
* that resurfaces when the stack drains mounts clipped and runs its own entry
|
|
130
|
+
* transition. Re-clipping on dismissal is the same rule read forward, since the
|
|
131
|
+
* clip is released only while the row is settled *and* not exiting.
|
|
132
|
+
*/
|
|
133
|
+
function ToastRow({
|
|
134
|
+
entry,
|
|
135
|
+
isExiting,
|
|
136
|
+
isReversed,
|
|
137
|
+
onExited,
|
|
138
|
+
onDismiss
|
|
139
|
+
}) {
|
|
140
|
+
const o = entry.options;
|
|
141
|
+
const type = o.type ?? 'info';
|
|
142
|
+
const isAutoHide = o.isAutoHide ?? (type === 'error' ? false : true);
|
|
143
|
+
const dur = o.autoHideDuration ?? 5000;
|
|
144
|
+
const [isSettled, setIsSettled] = useState(false);
|
|
145
|
+
return /*#__PURE__*/_jsx("div", {
|
|
146
|
+
"data-toast-id": entry.id,
|
|
147
|
+
...{
|
|
148
|
+
0: {
|
|
149
|
+
className: "x67bb7w xrvj5dj xh8yej3 x1j9u4d2 xeuugli x1tu4anv xjshnde xuedmi6 xsagj69 xlr8y92 x1sopeo2 x5rzir7 x1heqljd x1wesfrj xup0pd7"
|
|
150
|
+
},
|
|
151
|
+
4: {
|
|
152
|
+
className: "x67bb7w xrvj5dj xh8yej3 x1j9u4d2 xeuugli x1tu4anv xjshnde xuedmi6 xsagj69 xlr8y92 x1sopeo2 x5rzir7 x87gnkx x1wesfrj xup0pd7"
|
|
153
|
+
},
|
|
154
|
+
2: {
|
|
155
|
+
className: "x67bb7w xrvj5dj xh8yej3 x1j9u4d2 xeuugli x1tu4anv xjshnde xuedmi6 xsagj69 xlr8y92 x1sopeo2 x5rzir7 x1heqljd x1wesfrj x1vjq31q"
|
|
156
|
+
},
|
|
157
|
+
6: {
|
|
158
|
+
className: "x67bb7w xrvj5dj xh8yej3 x1j9u4d2 xeuugli x1tu4anv xjshnde xuedmi6 xsagj69 xlr8y92 x1sopeo2 x5rzir7 x87gnkx x1wesfrj x1vjq31q"
|
|
159
|
+
},
|
|
160
|
+
1: {
|
|
161
|
+
className: "x67bb7w xrvj5dj xh8yej3 x1j9u4d2 xeuugli xjshnde xuedmi6 xsagj69 xlr8y92 x1sopeo2 x5rzir7 x1heqljd xihq33y x18d9i69"
|
|
162
|
+
},
|
|
163
|
+
5: {
|
|
164
|
+
className: "x67bb7w xrvj5dj xh8yej3 x1j9u4d2 xeuugli xjshnde xuedmi6 xsagj69 xlr8y92 x1sopeo2 x5rzir7 x87gnkx xihq33y x18d9i69"
|
|
165
|
+
},
|
|
166
|
+
3: {
|
|
167
|
+
className: "x67bb7w xrvj5dj xh8yej3 x1j9u4d2 xeuugli xjshnde xuedmi6 xsagj69 xlr8y92 x1sopeo2 x5rzir7 x1heqljd xihq33y x18d9i69"
|
|
168
|
+
},
|
|
169
|
+
7: {
|
|
170
|
+
className: "x67bb7w xrvj5dj xh8yej3 x1j9u4d2 xeuugli xjshnde xuedmi6 xsagj69 xlr8y92 x1sopeo2 x5rzir7 x87gnkx xihq33y x18d9i69"
|
|
171
|
+
}
|
|
172
|
+
}[!!isReversed << 2 | !!isReversed << 1 | !!isExiting << 0],
|
|
173
|
+
onTransitionEnd: e => {
|
|
174
|
+
// `grid-template-rows` is not private to this wrapper — any descendant
|
|
175
|
+
// may animate its own grid, and transitionend bubbles. Only the row's
|
|
176
|
+
// own transition says the row has finished opening or collapsing.
|
|
177
|
+
if (e.target !== e.currentTarget) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (e.propertyName !== 'grid-template-rows') {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (isExiting) {
|
|
184
|
+
onExited(entry.id);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
// The row is fully open now. Release only the paint clip; the wrapper
|
|
188
|
+
// still owns pointer events and restores the clip synchronously when
|
|
189
|
+
// dismissal starts.
|
|
190
|
+
setIsSettled(true);
|
|
191
|
+
},
|
|
192
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
193
|
+
...{
|
|
194
|
+
0: {
|
|
195
|
+
className: "xh8yej3 x193iq5w xeuugli x2lwn1j xb3r6kr"
|
|
196
|
+
},
|
|
197
|
+
1: {
|
|
198
|
+
className: "xh8yej3 x193iq5w xeuugli x2lwn1j x1rea2x4"
|
|
199
|
+
}
|
|
200
|
+
}[!!(isSettled && !isExiting) << 0],
|
|
201
|
+
children: /*#__PURE__*/_jsx(ToastSurface, {
|
|
202
|
+
type: type,
|
|
203
|
+
body: o.body,
|
|
204
|
+
endContent: o.endContent,
|
|
205
|
+
isAutoHide: isAutoHide,
|
|
206
|
+
autoHideDuration: dur,
|
|
207
|
+
isExiting: isExiting,
|
|
208
|
+
gestureDirection: isReversed ? -1 : 1,
|
|
209
|
+
onDismiss: reason => onDismiss(entry.id, reason),
|
|
210
|
+
renderContent: o.renderContent
|
|
211
|
+
})
|
|
212
|
+
})
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
ToastRow.displayName = 'ToastRow';
|
|
216
|
+
|
|
140
217
|
/**
|
|
141
218
|
* Container that renders and manages toast notifications. Place at the root
|
|
142
219
|
* of your app to enable useToast(). Toasts stack with enter/exit
|
|
@@ -230,6 +307,10 @@ export function ToastViewport({
|
|
|
230
307
|
// else to the polite region (role="status") — mirrors Toast.tsx.
|
|
231
308
|
announce(text, entry.options.type === 'error' ? 'assertive' : 'polite');
|
|
232
309
|
}
|
|
310
|
+
// An overwrite swaps a new entry, with a new id, into the replaced
|
|
311
|
+
// toast's place, so the old row leaves the DOM without ever being
|
|
312
|
+
// dismissed. Its settled id is dropped by the prune below, which covers
|
|
313
|
+
// every silent exit with one rule rather than one branch per path.
|
|
233
314
|
setToasts(prev => {
|
|
234
315
|
if (uniqueID) {
|
|
235
316
|
const existing = prev.find(t => t.options.uniqueID === uniqueID);
|
|
@@ -282,14 +363,7 @@ export function ToastViewport({
|
|
|
282
363
|
}, []);
|
|
283
364
|
const handleExited = useCallback(id => {
|
|
284
365
|
exitingIdsRef.current.delete(id);
|
|
285
|
-
setExitingIds(
|
|
286
|
-
if (!prev.has(id)) {
|
|
287
|
-
return prev;
|
|
288
|
-
}
|
|
289
|
-
const next = new Set(prev);
|
|
290
|
-
next.delete(id);
|
|
291
|
-
return next;
|
|
292
|
-
});
|
|
366
|
+
setExitingIds(withoutId(id));
|
|
293
367
|
setToasts(prev => prev.filter(t => t.id !== id));
|
|
294
368
|
}, []);
|
|
295
369
|
|
|
@@ -405,8 +479,6 @@ export function ToastViewport({
|
|
|
405
479
|
}, [hasToasts, getFocusable]);
|
|
406
480
|
const posStyle = position === 'topEnd' ? styles.topEnd : position === 'topStart' ? styles.topStart : position === 'bottomStart' ? styles.bottomStart : styles.bottomEnd;
|
|
407
481
|
const isReversed = position === 'topEnd' || position === 'topStart';
|
|
408
|
-
const toastWrapperPositionStyle = isReversed ? styles.toastWrapperFromTop : styles.toastWrapperFromBottom;
|
|
409
|
-
const gapStyle = isReversed ? styles.toastWrapperGapReversed : styles.toastWrapperGap;
|
|
410
482
|
return /*#__PURE__*/_jsxs(ToastContext, {
|
|
411
483
|
value: contextValue,
|
|
412
484
|
children: [children, /*#__PURE__*/_jsx("div", {
|
|
@@ -421,38 +493,13 @@ export function ToastViewport({
|
|
|
421
493
|
...mergeProps(stylex.props(styles.viewport, styles.viewportInlineSpan, posStyle), {
|
|
422
494
|
style: Object.keys(insetStyle).length > 0 ? insetStyle : undefined
|
|
423
495
|
}),
|
|
424
|
-
children: visibleToasts.map(entry => {
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
"data-toast-id": entry.id,
|
|
432
|
-
...stylex.props(styles.toastWrapper, toastWrapperPositionStyle, gapStyle, isExiting && styles.toastWrapperExiting),
|
|
433
|
-
onTransitionEnd: isExiting ? e => {
|
|
434
|
-
if (e.propertyName === 'grid-template-rows') {
|
|
435
|
-
handleExited(entry.id);
|
|
436
|
-
}
|
|
437
|
-
} : undefined,
|
|
438
|
-
children: /*#__PURE__*/_jsx("div", {
|
|
439
|
-
...{
|
|
440
|
-
className: "xh8yej3 x193iq5w xeuugli x2lwn1j xb3r6kr"
|
|
441
|
-
},
|
|
442
|
-
children: /*#__PURE__*/_jsx(ToastSurface, {
|
|
443
|
-
type: type,
|
|
444
|
-
body: o.body,
|
|
445
|
-
endContent: o.endContent,
|
|
446
|
-
isAutoHide: isAutoHide,
|
|
447
|
-
autoHideDuration: dur,
|
|
448
|
-
isExiting: isExiting,
|
|
449
|
-
gestureDirection: isReversed ? -1 : 1,
|
|
450
|
-
onDismiss: reason => removeToast(entry.id, reason),
|
|
451
|
-
renderContent: o.renderContent
|
|
452
|
-
})
|
|
453
|
-
})
|
|
454
|
-
}, entry.id);
|
|
455
|
-
})
|
|
496
|
+
children: visibleToasts.map(entry => /*#__PURE__*/_jsx(ToastRow, {
|
|
497
|
+
entry: entry,
|
|
498
|
+
isExiting: exitingIds.has(entry.id),
|
|
499
|
+
isReversed: isReversed,
|
|
500
|
+
onExited: handleExited,
|
|
501
|
+
onDismiss: removeToast
|
|
502
|
+
}, entry.id))
|
|
456
503
|
})]
|
|
457
504
|
});
|
|
458
505
|
}
|
|
@@ -176,44 +176,6 @@ export interface TokenizerProps<T extends SearchableItem> extends Omit<BaseProps
|
|
|
176
176
|
/** Imperative handle ref for focus/blur control. */
|
|
177
177
|
handleRef?: React.Ref<TokenizerHandle>;
|
|
178
178
|
}
|
|
179
|
-
/**
|
|
180
|
-
* Multi-select input with token chips and typeahead search.
|
|
181
|
-
*
|
|
182
|
-
* Composes BaseTypeahead for search and Token for selected items.
|
|
183
|
-
* Tokens render inline before the text input. Selecting an item adds a token
|
|
184
|
-
* and clears the query. Backspace on empty input removes the last token.
|
|
185
|
-
*
|
|
186
|
-
* @example
|
|
187
|
-
* ```
|
|
188
|
-
* const [members, setMembers] = useState<UserItem[]>([]);
|
|
189
|
-
* <Tokenizer
|
|
190
|
-
* label="Team members"
|
|
191
|
-
* searchSource={userSource}
|
|
192
|
-
* value={members}
|
|
193
|
-
* onChange={(items, change) => {
|
|
194
|
-
* setMembers(items);
|
|
195
|
-
* if (change.type === 'add') {
|
|
196
|
-
* console.log('Added:', change.item.label);
|
|
197
|
-
* }
|
|
198
|
-
* }}
|
|
199
|
-
* placeholder="Search people..."
|
|
200
|
-
* />
|
|
201
|
-
* <Tokenizer
|
|
202
|
-
* label="Tags"
|
|
203
|
-
* searchSource={tagSource}
|
|
204
|
-
* value={tags}
|
|
205
|
-
* onChange={(items) => setTags(items)}
|
|
206
|
-
* renderToken={(item, onRemove) => (
|
|
207
|
-
* <Token
|
|
208
|
-
* label={item.label}
|
|
209
|
-
* color={item.auxiliaryData.color}
|
|
210
|
-
* onRemove={onRemove}
|
|
211
|
-
* />
|
|
212
|
-
* )}
|
|
213
|
-
* maxEntries={5}
|
|
214
|
-
* />
|
|
215
|
-
* ```
|
|
216
|
-
*/
|
|
217
179
|
export declare function Tokenizer<T extends SearchableItem>({ label, isLabelHidden, description, isRequired, isOptional, status, statusVariant, startIcon, labelTooltip, searchSource, value, onChange, renderItem, renderToken, maxEntries, placeholder, hasEntriesOnFocus, maxMenuItems, menuWidth, minQueryLength, emptySearchResultsText, isDisabled, htmlName, disabledMessage, hasClear, endContent, hasAutoFocus, size: sizeProp, tokenOverflowBehavior, debounceMs, hasCreate, onChangeQuery, onFocus, onBlur, width, xstyle, className, style, 'data-testid': testId, ref, handleRef, }: TokenizerProps<T>): React.JSX.Element;
|
|
218
180
|
export declare namespace Tokenizer {
|
|
219
181
|
var displayName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tokenizer.d.ts","sourceRoot":"","sources":["../../src/Tokenizer/Tokenizer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAOZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Tokenizer.d.ts","sourceRoot":"","sources":["../../src/Tokenizer/Tokenizer.tsx"],"names":[],"mappings":"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"}
|