@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.
Files changed (77) hide show
  1. package/dist/AppShell/AppShell.d.ts.map +1 -1
  2. package/dist/AppShell/AppShell.js +2 -3
  3. package/dist/Chat/ChatComposer.d.ts +2 -2
  4. package/dist/Chat/ChatComposer.d.ts.map +1 -1
  5. package/dist/Chat/ChatComposer.js +24 -3
  6. package/dist/Chat/useChatNewMessages.js +3 -3
  7. package/dist/TabList/TabList.d.ts.map +1 -1
  8. package/dist/TabList/TabList.js +2 -3
  9. package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
  10. package/dist/Table/plugins/columnResize/useTableColumnResize.js +8 -9
  11. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  12. package/dist/Table/plugins/sortable/useTableSortable.js +9 -1
  13. package/dist/Text/useTruncation.d.ts +1 -1
  14. package/dist/Text/useTruncation.d.ts.map +1 -1
  15. package/dist/Text/useTruncation.js +8 -7
  16. package/dist/Toast/ToastViewport.d.ts.map +1 -1
  17. package/dist/Toast/ToastViewport.js +124 -77
  18. package/dist/Tokenizer/Tokenizer.d.ts +0 -38
  19. package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
  20. package/dist/Tokenizer/Tokenizer.js +94 -26
  21. package/dist/Tokenizer/useEndLaneReserve.d.ts +31 -0
  22. package/dist/Tokenizer/useEndLaneReserve.d.ts.map +1 -0
  23. package/dist/Tokenizer/useEndLaneReserve.js +136 -0
  24. package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
  25. package/dist/Typeahead/BaseTypeahead.js +52 -17
  26. package/dist/Typeahead/Typeahead.d.ts +0 -21
  27. package/dist/Typeahead/Typeahead.d.ts.map +1 -1
  28. package/dist/Typeahead/Typeahead.js +108 -67
  29. package/dist/Typeahead/busyIndicatorLane.d.ts +62 -0
  30. package/dist/Typeahead/busyIndicatorLane.d.ts.map +1 -0
  31. package/dist/Typeahead/busyIndicatorLane.js +98 -0
  32. package/dist/astryx.css +4 -5
  33. package/dist/hooks/useOverflow.js +11 -11
  34. package/dist/hooks/useScrollOverflow.d.ts.map +1 -1
  35. package/dist/hooks/useScrollOverflow.js +7 -4
  36. package/dist/theme/defineTheme.d.ts +13 -0
  37. package/dist/theme/defineTheme.d.ts.map +1 -1
  38. package/dist/theme/defineTheme.js +7 -0
  39. package/dist/theme/generateThemeRules.d.ts.map +1 -1
  40. package/dist/theme/generateThemeRules.js +1 -1
  41. package/dist/theme/localTokens.d.ts +18 -0
  42. package/dist/theme/localTokens.d.ts.map +1 -0
  43. package/dist/theme/localTokens.js +162 -0
  44. package/dist/utils/sharedResizeObserver.d.ts +17 -9
  45. package/dist/utils/sharedResizeObserver.d.ts.map +1 -1
  46. package/dist/utils/sharedResizeObserver.js +54 -12
  47. package/package.json +2 -2
  48. package/src/AppShell/AppShell.tsx +2 -3
  49. package/src/Chat/ChatComposer.doc.mjs +7 -4
  50. package/src/Chat/ChatComposer.test.tsx +84 -2
  51. package/src/Chat/ChatComposer.tsx +48 -3
  52. package/src/Chat/useChatNewMessages.ts +3 -3
  53. package/src/TabList/TabList.tsx +2 -3
  54. package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -12
  55. package/src/Table/plugins/sortable/useTableSortable.test.tsx +72 -0
  56. package/src/Table/plugins/sortable/useTableSortable.tsx +18 -1
  57. package/src/Text/useTruncation.ts +8 -7
  58. package/src/Toast/ToastViewport.test.tsx +177 -0
  59. package/src/Toast/ToastViewport.tsx +126 -58
  60. package/src/Tokenizer/Tokenizer.doc.mjs +2 -0
  61. package/src/Tokenizer/Tokenizer.test.tsx +335 -1
  62. package/src/Tokenizer/Tokenizer.tsx +129 -46
  63. package/src/Tokenizer/useEndLaneReserve.ts +146 -0
  64. package/src/Typeahead/BaseTypeahead.tsx +57 -16
  65. package/src/Typeahead/Typeahead.doc.mjs +6 -0
  66. package/src/Typeahead/Typeahead.spec.md +7 -1
  67. package/src/Typeahead/Typeahead.test.tsx +381 -1
  68. package/src/Typeahead/Typeahead.tsx +187 -69
  69. package/src/Typeahead/busyIndicatorLane.tsx +109 -0
  70. package/src/hooks/useOverflow.ts +11 -11
  71. package/src/hooks/useScrollOverflow.ts +7 -4
  72. package/src/theme/defineTheme.test.ts +227 -0
  73. package/src/theme/defineTheme.ts +30 -0
  74. package/src/theme/generateThemeRules.ts +4 -1
  75. package/src/theme/localTokens.ts +272 -0
  76. package/src/utils/sharedResizeObserver.test.ts +124 -5
  77. 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,qBAkZf;yBAjae,QAAQ"}
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, unobserveResize } from "../utils/sharedResizeObserver.js";
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 with the same rest / hover / focus treatment as a
50
- * text input (emphasized border → accent on focus, with matching inset rings).
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,EAKZ,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA0B5C,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;AAoMD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,qBAiLpD;yBAjLe,YAAY"}
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 (a CSS-only interaction state the component owns).
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
- ...stylex.props(styles.body, elevationStyles[elevation], density === 'compact' && styles.compact, xstyle),
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, unobserveResize } from "../utils/sharedResizeObserver.js";
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 = () => unobserveResize(el);
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,qBA+Ud;yBApWe,OAAO"}
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"}
@@ -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, unobserveResize } from "../utils/sharedResizeObserver.js";
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;AAWrB,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,CAuKhB"}
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, unobserveResize } from "../../../utils/sharedResizeObserver.js";
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
- if (observedTableRef.current) {
495
- unobserveResize(observedTableRef.current);
496
- observedTableRef.current = null;
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
- if (observedTableRef.current) {
518
- unobserveResize(observedTableRef.current);
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;AAiOD;;;;;;;;;;;;;;;;;;;;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"}
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/unobserveResize)
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,CA0ErB"}
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, unobserveResize } from "../utils/sharedResizeObserver.js";
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/unobserveResize)
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
- if (elementRef.current) {
80
- unobserveResize(elementRef.current);
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;AAwI3E,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;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAsB,EACtB,UAAc,EACd,KAAK,EACL,UAAiB,EACjB,QAAQ,GACT,EAAE,kBAAkB,+BAkWpB;yBAxWe,aAAa"}
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(prev => {
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
- const o = entry.options;
426
- const type = o.type ?? 'info';
427
- const isAutoHide = o.isAutoHide ?? (type === 'error' ? false : true);
428
- const dur = o.autoHideDuration ?? 5000;
429
- const isExiting = exitingIds.has(entry.id);
430
- return /*#__PURE__*/_jsx("div", {
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":"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"}
1
+ {"version":3,"file":"Tokenizer.d.ts","sourceRoot":"","sources":["../../src/Tokenizer/Tokenizer.tsx"],"names":[],"mappings":"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"}