@assistant-ui/react 0.15.25 → 0.15.26

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 (144) hide show
  1. package/dist/hooks/useToolCallElapsed.d.ts.map +1 -1
  2. package/dist/hooks/useToolCallElapsed.js +3 -2
  3. package/dist/hooks/useToolCallElapsed.js.map +1 -1
  4. package/dist/index.d.ts +30 -4
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  7. package/dist/mcp-apps/McpAppRenderer.js +3 -2
  8. package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
  9. package/dist/mcp-apps/app-frame.d.ts.map +1 -1
  10. package/dist/mcp-apps/app-frame.js +56 -46
  11. package/dist/mcp-apps/app-frame.js.map +1 -1
  12. package/dist/mcp-apps/csp.d.ts +4 -0
  13. package/dist/mcp-apps/csp.d.ts.map +1 -0
  14. package/dist/mcp-apps/csp.js +93 -0
  15. package/dist/mcp-apps/csp.js.map +1 -0
  16. package/dist/mcp-apps/types.d.ts +1 -0
  17. package/dist/mcp-apps/types.d.ts.map +1 -1
  18. package/dist/mcp-apps/types.js.map +1 -1
  19. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +1 -0
  20. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
  21. package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
  22. package/dist/primitives/attachment.d.ts +3 -1
  23. package/dist/primitives/attachment.d.ts.map +1 -1
  24. package/dist/primitives/attachment.js.map +1 -1
  25. package/dist/primitives/composer/ComposerCancel.d.ts +5 -1
  26. package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
  27. package/dist/primitives/composer/ComposerCancel.js +14 -1
  28. package/dist/primitives/composer/ComposerCancel.js.map +1 -1
  29. package/dist/primitives/composer/ComposerInput.d.ts +14 -0
  30. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  31. package/dist/primitives/composer/ComposerInput.js +4 -3
  32. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  33. package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
  34. package/dist/primitives/composer/ComposerRoot.js +24 -19
  35. package/dist/primitives/composer/ComposerRoot.js.map +1 -1
  36. package/dist/primitives/composer/composerInputSelector.d.ts +3 -0
  37. package/dist/primitives/composer/composerInputSelector.d.ts.map +1 -0
  38. package/dist/primitives/composer/composerInputSelector.js +7 -0
  39. package/dist/primitives/composer/composerInputSelector.js.map +1 -0
  40. package/dist/primitives/composer/useComposerCancelWithFocus.d.ts +2 -0
  41. package/dist/primitives/composer/useComposerCancelWithFocus.d.ts.map +1 -0
  42. package/dist/primitives/composer/useComposerCancelWithFocus.js +42 -0
  43. package/dist/primitives/composer/useComposerCancelWithFocus.js.map +1 -0
  44. package/dist/primitives/composer.d.ts +35 -14
  45. package/dist/primitives/composer.d.ts.map +1 -1
  46. package/dist/primitives/composer.js.map +1 -1
  47. package/dist/primitives/message/MessagePartsGrouped.d.ts +8 -1
  48. package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
  49. package/dist/primitives/message/MessagePartsGrouped.js +58 -278
  50. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  51. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts.map +1 -1
  52. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +5 -2
  53. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
  54. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
  55. package/dist/primitives/thread/ThreadViewport.js +4 -3
  56. package/dist/primitives/thread/ThreadViewport.js.map +1 -1
  57. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js +2 -2
  58. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js.map +1 -1
  59. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
  60. package/dist/primitives/thread/useThreadViewportAutoScroll.js +90 -21
  61. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  62. package/dist/sandbox-host/SandboxHost.d.ts.map +1 -1
  63. package/dist/sandbox-host/SandboxHost.js +3 -2
  64. package/dist/sandbox-host/SandboxHost.js.map +1 -1
  65. package/dist/unstable/useComposerInput.d.ts +7 -4
  66. package/dist/unstable/useComposerInput.d.ts.map +1 -1
  67. package/dist/unstable/useComposerInput.js +4 -4
  68. package/dist/unstable/useComposerInput.js.map +1 -1
  69. package/dist/unstable/useComposerInputHistory.d.ts +3 -2
  70. package/dist/unstable/useComposerInputHistory.d.ts.map +1 -1
  71. package/dist/unstable/useComposerInputHistory.js +2 -2
  72. package/dist/unstable/useComposerInputHistory.js.map +1 -1
  73. package/dist/unstable/useLiveCompletionAdapter.d.ts +3 -2
  74. package/dist/unstable/useLiveCompletionAdapter.d.ts.map +1 -1
  75. package/dist/unstable/useLiveCompletionAdapter.js +8 -7
  76. package/dist/unstable/useLiveCompletionAdapter.js.map +1 -1
  77. package/dist/unstable/useMentionAdapter.d.ts +12 -3
  78. package/dist/unstable/useMentionAdapter.d.ts.map +1 -1
  79. package/dist/unstable/useMentionAdapter.js +2 -2
  80. package/dist/unstable/useMentionAdapter.js.map +1 -1
  81. package/dist/unstable/useMessageStallDetection.d.ts +4 -2
  82. package/dist/unstable/useMessageStallDetection.d.ts.map +1 -1
  83. package/dist/unstable/useMessageStallDetection.js +2 -2
  84. package/dist/unstable/useMessageStallDetection.js.map +1 -1
  85. package/dist/unstable/useSlashCommandAdapter.d.ts +5 -2
  86. package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -1
  87. package/dist/unstable/useSlashCommandAdapter.js +5 -4
  88. package/dist/unstable/useSlashCommandAdapter.js.map +1 -1
  89. package/dist/unstable/webmcp/useWebMcpProvider.d.ts +4 -0
  90. package/dist/unstable/webmcp/useWebMcpProvider.d.ts.map +1 -1
  91. package/dist/unstable/webmcp/useWebMcpProvider.js +2 -0
  92. package/dist/unstable/webmcp/useWebMcpProvider.js.map +1 -1
  93. package/dist/utils/getSelectionMessageId.d.ts.map +1 -1
  94. package/dist/utils/getSelectionMessageId.js +31 -8
  95. package/dist/utils/getSelectionMessageId.js.map +1 -1
  96. package/dist/utils/hooks/useOnResizeContent.d.ts.map +1 -1
  97. package/dist/utils/hooks/useOnResizeContent.js +2 -22
  98. package/dist/utils/hooks/useOnResizeContent.js.map +1 -1
  99. package/dist/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  100. package/dist/utils/useIsomorphicLayoutEffect.d.ts.map +1 -0
  101. package/dist/utils/useIsomorphicLayoutEffect.js +6 -0
  102. package/dist/utils/useIsomorphicLayoutEffect.js.map +1 -0
  103. package/package.json +10 -10
  104. package/src/hooks/useToolCallElapsed.test.tsx +4 -2
  105. package/src/hooks/useToolCallElapsed.ts +3 -2
  106. package/src/index.ts +19 -2
  107. package/src/mcp-apps/McpAppRenderer.tsx +3 -9
  108. package/src/mcp-apps/app-frame.test.tsx +38 -0
  109. package/src/mcp-apps/app-frame.tsx +5 -8
  110. package/src/mcp-apps/csp.test.ts +112 -0
  111. package/src/mcp-apps/csp.ts +124 -0
  112. package/src/mcp-apps/types.ts +1 -0
  113. package/src/model-context/frame/AssistantFrame.test.ts +45 -0
  114. package/src/model-context/frame/SPEC_AssistantFrame.md +1 -0
  115. package/src/primitives/assistantModal/AssistantModalRoot.tsx +1 -0
  116. package/src/primitives/attachment.ts +4 -1
  117. package/src/primitives/composer/ComposerCancel.focus.test.tsx +307 -0
  118. package/src/primitives/composer/ComposerCancel.ts +8 -1
  119. package/src/primitives/composer/ComposerInput.tsx +19 -1
  120. package/src/primitives/composer/ComposerRoot.tsx +6 -5
  121. package/src/primitives/composer/composerInputSelector.ts +4 -0
  122. package/src/primitives/composer/useComposerCancelWithFocus.ts +57 -0
  123. package/src/primitives/composer.ts +56 -21
  124. package/src/primitives/message/MessagePartsGrouped.test.tsx +106 -2
  125. package/src/primitives/message/MessagePartsGrouped.tsx +36 -134
  126. package/src/primitives/selectionToolbar/SelectionToolbarRoot.test.tsx +20 -12
  127. package/src/primitives/selectionToolbar/SelectionToolbarRoot.tsx +6 -2
  128. package/src/primitives/thread/ThreadViewport.tsx +3 -3
  129. package/src/primitives/thread/topAnchor/useTopAnchorReserve.ts +2 -2
  130. package/src/primitives/thread/useThreadViewportAutoScroll.test.tsx +666 -63
  131. package/src/primitives/thread/useThreadViewportAutoScroll.ts +201 -73
  132. package/src/sandbox-host/SandboxHost.tsx +3 -8
  133. package/src/unstable/useComposerInput.ts +7 -4
  134. package/src/unstable/useComposerInputHistory.ts +3 -2
  135. package/src/unstable/useLiveCompletionAdapter.ts +9 -14
  136. package/src/unstable/useMentionAdapter.ts +12 -3
  137. package/src/unstable/useMessageStallDetection.ts +4 -2
  138. package/src/unstable/useSlashCommandAdapter.ts +8 -4
  139. package/src/unstable/webmcp/useWebMcpProvider.ts +4 -0
  140. package/src/utils/getSelectionMessageId.test.ts +231 -0
  141. package/src/utils/getSelectionMessageId.ts +45 -7
  142. package/src/utils/hooks/useOnResizeContent.ts +2 -29
  143. package/src/utils/useIsomorphicLayoutEffect.test.tsx +21 -0
  144. package/src/utils/useIsomorphicLayoutEffect.ts +9 -0
@@ -2,14 +2,13 @@
2
2
  import { Primitive as Primitive$1 } from "../../utils/Primitive.js";
3
3
  import { useComposerSend } from "./ComposerSend.js";
4
4
  import { ComposerCompactContext } from "./ComposerCompactContext.js";
5
+ import { COMPOSER_INPUT_SELECTOR, CONTENT_EDITABLE_SELECTOR } from "./composerInputSelector.js";
5
6
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
6
7
  import { forwardRef, useState } from "@assistant-ui/tap/react-shim";
7
8
  import { useAuiState } from "@assistant-ui/store";
8
9
  import { jsx } from "react/jsx-runtime";
9
10
  import { composeEventHandlers } from "radix-ui/internal";
10
11
  //#region src/primitives/composer/ComposerRoot.tsx
11
- const CONTENT_EDITABLE_SELECTOR = "[contenteditable]:not([contenteditable='false'])";
12
- const COMPOSER_INPUT_SELECTOR = `textarea:not(:disabled), ${CONTENT_EDITABLE_SELECTOR}`;
13
12
  const INTERACTIVE_ELEMENT_SELECTOR = [
14
13
  "a",
15
14
  "audio[controls]",
@@ -47,7 +46,7 @@ const INTERACTIVE_ELEMENT_SELECTOR = [
47
46
  * ```
48
47
  */
49
48
  const ComposerPrimitiveRoot = forwardRef((t0, forwardedRef) => {
50
- const $ = c(24);
49
+ const $ = c(25);
51
50
  let compact;
52
51
  let onMouseDown;
53
52
  let onSubmit;
@@ -66,6 +65,7 @@ const ComposerPrimitiveRoot = forwardRef((t0, forwardedRef) => {
66
65
  rest = $[4];
67
66
  }
68
67
  const send = useComposerSend();
68
+ const composerType = useAuiState(_temp);
69
69
  const [multiline, setMultiline] = useState(false);
70
70
  let t1;
71
71
  if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
@@ -75,7 +75,7 @@ const ComposerPrimitiveRoot = forwardRef((t0, forwardedRef) => {
75
75
  const compactContext = t1;
76
76
  let t2;
77
77
  if ($[6] !== compact) {
78
- t2 = (s) => compact ? s.composer.attachments.length === 0 && s.composer.quote == null && s.composer.queue.length === 0 && s.composer.dictation == null && !s.composer.text.includes("\n") : false;
78
+ t2 = (s_0) => compact ? s_0.composer.attachments.length === 0 && s_0.composer.quote == null && s_0.composer.queue.length === 0 && s_0.composer.dictation == null && !s_0.composer.text.includes("\n") : false;
79
79
  $[6] = compact;
80
80
  $[7] = t2;
81
81
  } else t2 = $[7];
@@ -91,7 +91,7 @@ const ComposerPrimitiveRoot = forwardRef((t0, forwardedRef) => {
91
91
  $[9] = t3;
92
92
  } else t3 = $[9];
93
93
  const handleSubmit = t3;
94
- const handleMouseDown = _temp;
94
+ const handleMouseDown = _temp2;
95
95
  const t4 = compact ? compactContext : null;
96
96
  const t5 = isCompact ? "" : void 0;
97
97
  let t6;
@@ -108,35 +108,40 @@ const ComposerPrimitiveRoot = forwardRef((t0, forwardedRef) => {
108
108
  $[14] = t7;
109
109
  } else t7 = $[14];
110
110
  let t8;
111
- if ($[15] !== forwardedRef || $[16] !== rest || $[17] !== t5 || $[18] !== t6 || $[19] !== t7) {
111
+ if ($[15] !== composerType || $[16] !== forwardedRef || $[17] !== rest || $[18] !== t5 || $[19] !== t6 || $[20] !== t7) {
112
112
  t8 = /* @__PURE__ */ jsx(Primitive$1.form, {
113
113
  ...rest,
114
+ "data-aui-composer-type": composerType,
114
115
  "data-compact": t5,
115
116
  ref: forwardedRef,
116
117
  onSubmit: t6,
117
118
  onMouseDown: t7
118
119
  });
119
- $[15] = forwardedRef;
120
- $[16] = rest;
121
- $[17] = t5;
122
- $[18] = t6;
123
- $[19] = t7;
124
- $[20] = t8;
125
- } else t8 = $[20];
120
+ $[15] = composerType;
121
+ $[16] = forwardedRef;
122
+ $[17] = rest;
123
+ $[18] = t5;
124
+ $[19] = t6;
125
+ $[20] = t7;
126
+ $[21] = t8;
127
+ } else t8 = $[21];
126
128
  let t9;
127
- if ($[21] !== t4 || $[22] !== t8) {
129
+ if ($[22] !== t4 || $[23] !== t8) {
128
130
  t9 = /* @__PURE__ */ jsx(ComposerCompactContext.Provider, {
129
131
  value: t4,
130
132
  children: t8
131
133
  });
132
- $[21] = t4;
133
- $[22] = t8;
134
- $[23] = t9;
135
- } else t9 = $[23];
134
+ $[22] = t4;
135
+ $[23] = t8;
136
+ $[24] = t9;
137
+ } else t9 = $[24];
136
138
  return t9;
137
139
  });
138
140
  ComposerPrimitiveRoot.displayName = "ComposerPrimitive.Root";
139
- function _temp(e_0) {
141
+ function _temp(s) {
142
+ return s.composer.type;
143
+ }
144
+ function _temp2(e_0) {
140
145
  if (e_0.button !== 0) return;
141
146
  const target = e_0.target;
142
147
  if (!(target instanceof Element) || !e_0.currentTarget.contains(target)) return;
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerRoot.js","names":["c","_c","composeEventHandlers","useAuiState","Primitive","ComponentRef","FormEvent","forwardRef","ComponentPropsWithoutRef","MouseEvent","useMemo","useState","useComposerSend","ComposerCompactContext","CONTENT_EDITABLE_SELECTOR","COMPOSER_INPUT_SELECTOR","INTERACTIVE_ELEMENT_SELECTOR","join","ComposerPrimitiveRoot","Element","form","Props","compact","t0","forwardedRef","$","onMouseDown","onSubmit","rest","send","multiline","setMultiline","t1","Symbol","for","compactContext","t2","s","composer","attachments","length","quote","queue","dictation","text","includes","stateAllowsCompact","isCompact","t3","e","preventDefault","handleSubmit","handleMouseDown","_temp","t4","t5","undefined","t6","t7","t8","t9","displayName","e_0","button","target","currentTarget","contains","interactive","closest","input","querySelector","focus","_c","Primitive"],"sources":["../../../src/primitives/composer/ComposerRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { composeEventHandlers } from \"radix-ui/internal\";\nimport { useAuiState } from \"@assistant-ui/store\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n type FormEvent,\n forwardRef,\n type ComponentPropsWithoutRef,\n type MouseEvent,\n useMemo,\n useState,\n} from \"react\";\nimport { useComposerSend } from \"./ComposerSend\";\nimport { ComposerCompactContext } from \"./ComposerCompactContext\";\n\nconst CONTENT_EDITABLE_SELECTOR =\n \"[contenteditable]:not([contenteditable='false'])\";\n\nconst COMPOSER_INPUT_SELECTOR = `textarea:not(:disabled), ${CONTENT_EDITABLE_SELECTOR}`;\n\n// Keeps tabindex=\"-1\": roving-tabindex widgets click-focus items at -1.\nconst INTERACTIVE_ELEMENT_SELECTOR = [\n \"a\",\n \"audio[controls]\",\n \"button\",\n \"details\",\n \"embed\",\n \"iframe\",\n \"input\",\n \"label\",\n \"select\",\n \"summary\",\n \"textarea\",\n \"video[controls]\",\n CONTENT_EDITABLE_SELECTOR,\n \"[tabindex]\",\n].join(\", \");\n\nexport namespace ComposerPrimitiveRoot {\n export type Element = ComponentRef<typeof Primitive.form>;\n /**\n * Props for the ComposerPrimitive.Root component.\n * Accepts all standard form element props.\n */\n export type Props = ComponentPropsWithoutRef<typeof Primitive.form> & {\n /**\n * Opt the composer into compact mode. While the input holds at most a single\n * line of text and there are no attachments, quote, queued messages, or\n * active dictation, the root renders a `data-compact` attribute so styles\n * can collapse the composer into a single row. It expands automatically\n * when any of those conditions stop holding.\n * @default false\n */\n compact?: boolean | undefined;\n };\n}\n\n/**\n * The root form container for message composition.\n *\n * This component provides a form wrapper that handles message submission when the form\n * is submitted (e.g., via Enter key or submit button). It automatically prevents the\n * default form submission and triggers the composer's send functionality.\n *\n * Clicking blank form space focuses the composer input (the first textarea or\n * contenteditable inside the form). Text selection cannot start from blank\n * areas; descendants that need native mousedown defaults can call\n * `stopPropagation()` in their own `onMouseDown`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Root>\n * <ComposerPrimitive.Input placeholder=\"Type your message...\" />\n * <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>\n * </ComposerPrimitive.Root>\n * ```\n */\nexport const ComposerPrimitiveRoot = forwardRef<\n ComposerPrimitiveRoot.Element,\n ComposerPrimitiveRoot.Props\n>(({ onSubmit, onMouseDown, compact, ...rest }, forwardedRef) => {\n const send = useComposerSend();\n\n const [multiline, setMultiline] = useState(false);\n const compactContext = useMemo(() => ({ setMultiline }), []);\n const stateAllowsCompact = useAuiState((s) =>\n compact\n ? s.composer.attachments.length === 0 &&\n s.composer.quote == null &&\n s.composer.queue.length === 0 &&\n s.composer.dictation == null &&\n !s.composer.text.includes(\"\\n\")\n : false,\n );\n const isCompact = stateAllowsCompact && !multiline;\n\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n\n if (!send) return;\n send();\n };\n\n const handleMouseDown = (e: MouseEvent<HTMLFormElement>) => {\n if (e.button !== 0) return;\n const target = e.target;\n // Portaled descendants (e.g. a dialog overlay) propagate mousedown through\n // the React tree while their DOM nodes live outside the form.\n if (!(target instanceof Element) || !e.currentTarget.contains(target))\n return;\n // Bound the ancestor walk to the form: hosts like AssistantModal render\n // the composer inside a wrapper carrying tabindex=\"-1\" (Radix FocusScope).\n const interactive = target.closest(INTERACTIVE_ELEMENT_SELECTOR);\n if (interactive && e.currentTarget.contains(interactive)) return;\n const input = e.currentTarget.querySelector<HTMLElement>(\n COMPOSER_INPUT_SELECTOR,\n );\n if (!input) return;\n e.preventDefault();\n input.focus();\n };\n\n return (\n <ComposerCompactContext.Provider value={compact ? compactContext : null}>\n <Primitive.form\n {...rest}\n data-compact={isCompact ? \"\" : undefined}\n ref={forwardedRef}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n onMouseDown={composeEventHandlers(onMouseDown, handleMouseDown)}\n />\n </ComposerCompactContext.Provider>\n );\n});\n\nComposerPrimitiveRoot.displayName = \"ComposerPrimitive.Root\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"ComposerRoot.js","names":["c","_c","composeEventHandlers","useAuiState","Primitive","ComponentRef","FormEvent","forwardRef","ComponentPropsWithoutRef","MouseEvent","useMemo","useState","useComposerSend","ComposerCompactContext","COMPOSER_INPUT_SELECTOR","CONTENT_EDITABLE_SELECTOR","INTERACTIVE_ELEMENT_SELECTOR","join","ComposerPrimitiveRoot","Element","form","Props","compact","t0","forwardedRef","$","onMouseDown","onSubmit","rest","send","composerType","_temp","multiline","setMultiline","t1","Symbol","for","compactContext","t2","s_0","s","composer","attachments","length","quote","queue","dictation","text","includes","stateAllowsCompact","isCompact","t3","e","preventDefault","handleSubmit","handleMouseDown","_temp2","t4","t5","undefined","t6","t7","t8","t9","displayName","type","e_0","button","target","currentTarget","contains","interactive","closest","input","querySelector","focus","_c","Primitive"],"sources":["../../../src/primitives/composer/ComposerRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { composeEventHandlers } from \"radix-ui/internal\";\nimport { useAuiState } from \"@assistant-ui/store\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n type FormEvent,\n forwardRef,\n type ComponentPropsWithoutRef,\n type MouseEvent,\n useMemo,\n useState,\n} from \"react\";\nimport { useComposerSend } from \"./ComposerSend\";\nimport { ComposerCompactContext } from \"./ComposerCompactContext\";\nimport {\n COMPOSER_INPUT_SELECTOR,\n CONTENT_EDITABLE_SELECTOR,\n} from \"./composerInputSelector\";\n\n// Keeps tabindex=\"-1\": roving-tabindex widgets click-focus items at -1.\nconst INTERACTIVE_ELEMENT_SELECTOR = [\n \"a\",\n \"audio[controls]\",\n \"button\",\n \"details\",\n \"embed\",\n \"iframe\",\n \"input\",\n \"label\",\n \"select\",\n \"summary\",\n \"textarea\",\n \"video[controls]\",\n CONTENT_EDITABLE_SELECTOR,\n \"[tabindex]\",\n].join(\", \");\n\nexport namespace ComposerPrimitiveRoot {\n export type Element = ComponentRef<typeof Primitive.form>;\n /**\n * Props for the ComposerPrimitive.Root component.\n * Accepts all standard form element props.\n */\n export type Props = ComponentPropsWithoutRef<typeof Primitive.form> & {\n /**\n * Opt the composer into compact mode. While the input holds at most a single\n * line of text and there are no attachments, quote, queued messages, or\n * active dictation, the root renders a `data-compact` attribute so styles\n * can collapse the composer into a single row. It expands automatically\n * when any of those conditions stop holding.\n * @default false\n */\n compact?: boolean | undefined;\n };\n}\n\n/**\n * The root form container for message composition.\n *\n * This component provides a form wrapper that handles message submission when the form\n * is submitted (e.g., via Enter key or submit button). It automatically prevents the\n * default form submission and triggers the composer's send functionality.\n *\n * Clicking blank form space focuses the composer input (the first textarea or\n * contenteditable inside the form). Text selection cannot start from blank\n * areas; descendants that need native mousedown defaults can call\n * `stopPropagation()` in their own `onMouseDown`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Root>\n * <ComposerPrimitive.Input placeholder=\"Type your message...\" />\n * <ComposerPrimitive.Send>Send</ComposerPrimitive.Send>\n * </ComposerPrimitive.Root>\n * ```\n */\nexport const ComposerPrimitiveRoot = forwardRef<\n ComposerPrimitiveRoot.Element,\n ComposerPrimitiveRoot.Props\n>(({ onSubmit, onMouseDown, compact, ...rest }, forwardedRef) => {\n const send = useComposerSend();\n const composerType = useAuiState((s) => s.composer.type);\n\n const [multiline, setMultiline] = useState(false);\n const compactContext = useMemo(() => ({ setMultiline }), []);\n const stateAllowsCompact = useAuiState((s) =>\n compact\n ? s.composer.attachments.length === 0 &&\n s.composer.quote == null &&\n s.composer.queue.length === 0 &&\n s.composer.dictation == null &&\n !s.composer.text.includes(\"\\n\")\n : false,\n );\n const isCompact = stateAllowsCompact && !multiline;\n\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n\n if (!send) return;\n send();\n };\n\n const handleMouseDown = (e: MouseEvent<HTMLFormElement>) => {\n if (e.button !== 0) return;\n const target = e.target;\n // Portaled descendants (e.g. a dialog overlay) propagate mousedown through\n // the React tree while their DOM nodes live outside the form.\n if (!(target instanceof Element) || !e.currentTarget.contains(target))\n return;\n // Bound the ancestor walk to the form: hosts like AssistantModal render\n // the composer inside a wrapper carrying tabindex=\"-1\" (Radix FocusScope).\n const interactive = target.closest(INTERACTIVE_ELEMENT_SELECTOR);\n if (interactive && e.currentTarget.contains(interactive)) return;\n const input = e.currentTarget.querySelector<HTMLElement>(\n COMPOSER_INPUT_SELECTOR,\n );\n if (!input) return;\n e.preventDefault();\n input.focus();\n };\n\n return (\n <ComposerCompactContext.Provider value={compact ? compactContext : null}>\n <Primitive.form\n {...rest}\n data-aui-composer-type={composerType}\n data-compact={isCompact ? \"\" : undefined}\n ref={forwardedRef}\n onSubmit={composeEventHandlers(onSubmit, handleSubmit)}\n onMouseDown={composeEventHandlers(onMouseDown, handleMouseDown)}\n />\n </ComposerCompactContext.Provider>\n );\n});\n\nComposerPrimitiveRoot.displayName = \"ComposerPrimitive.Root\";\n"],"mappings":";;;;;;;;;;;AAsBA,MAAMgB,+BAA+B;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACAD;CACA;AAAY,CACb,CAACE,KAAK,IAAI;;;;;;;;;;;;;;;;;;;;;AAyCX,MAAaC,wBAAwBX,YAGnCgB,IAAAC,iBAAA;CAAA,MAAAC,IAAAxB,EAAA,EAAA;CAAA,IAAAqB;CAAA,IAAAI;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAH,EAAA,OAAAF,IAAA;EAAC,CAAA,CAAAI,UAAAD,aAAAJ,SAAA,GAAAM,QAAAL;EAA2CE,EAAA,KAAAF;EAAAE,EAAA,KAAAH;EAAAG,EAAA,KAAAC;EAAAD,EAAA,KAAAE;EAAAF,EAAA,KAAAG;CAAA,OAAA;EAAAN,UAAAG,EAAA;EAAAC,cAAAD,EAAA;EAAAE,WAAAF,EAAA;EAAAG,OAAAH,EAAA;CAAA;CAC5C,MAAAI,OAAajB,gBAAgB;CAC7B,MAAAkB,eAAqB3B,YAAY4B,KAAsB;CAEvD,MAAA,CAAAC,WAAAC,gBAAkCtB,SAAS,KAAK;CAAE,IAAAuB;CAAA,IAAAT,EAAA,OAAAU,OAAAC,IAAA,2BAAA,GAAA;EACZF,KAAA,EAAAD,aAAe;EAACR,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAtD,MAAAY,iBAAsCH;CAAuB,IAAAI;CAAA,IAAAb,EAAA,OAAAH,SAAA;EACtBgB,MAAAC,QACrCjB,UACIkB,IAACC,SAASC,YAAYC,WAAY,KAClCH,IAACC,SAASG,SAAU,QACpBJ,IAACC,SAASI,MAAMF,WAAY,KAC5BH,IAACC,SAASK,aAAc,QAHxB,CAICN,IAACC,SAASM,KAAKC,SAAU,IAAI,IALlC;EAMSvB,EAAA,KAAAH;EAAAG,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAEX,MAAAyB,YAT2B/C,YAAYmC,EASrBW,KAAA,CAAuBjB;CAAU,IAAAmB;CAAA,IAAA1B,EAAA,OAAAI,MAAA;EAE9BsB,MAAAC,MAAA;GACnBA,EAACC,eAAgB;GAEjB,IAAI,CAACxB,MAAI;GACTA,KAAK;EAAC;EACPJ,EAAA,KAAAI;EAAAJ,EAAA,KAAA0B;CAAA,OAAAA,KAAA1B,EAAA;CALD,MAAA6B,eAAqBH;CAOrB,MAAAI,kBAAwBC;CAoBkB,MAAAC,KAAAnC,UAAAe,iBAAA;CAItB,MAAAqB,KAAAR,YAAA,KAAAS,KAAAA;CAA0B,IAAAC;CAAA,IAAAnC,EAAA,QAAA6B,gBAAA7B,EAAA,QAAAE,UAAA;EAE9BiC,KAAA1D,qBAAqByB,UAAU2B,YAAY;EAAC7B,EAAA,MAAA6B;EAAA7B,EAAA,MAAAE;EAAAF,EAAA,MAAAmC;CAAA,OAAAA,KAAAnC,EAAA;CAAA,IAAAoC;CAAA,IAAApC,EAAA,QAAAC,aAAA;EACzCmC,KAAA3D,qBAAqBwB,aAAa6B,eAAe;EAAC9B,EAAA,MAAAC;EAAAD,EAAA,MAAAoC;CAAA,OAAAA,KAAApC,EAAA;CAAA,IAAAqC;CAAA,IAAArC,EAAA,QAAAK,gBAAAL,EAAA,QAAAD,gBAAAC,EAAA,QAAAG,QAAAH,EAAA,QAAAiC,MAAAjC,EAAA,QAAAmC,MAAAnC,EAAA,QAAAoC,IAAA;EANjEC,KAAA,oBAAAe,YAAA,MAAA;GAAA,GACMjD;GACoBE,0BAAAA;GACV,gBAAA4B;GACTlC,KAAAA;GACK,UAAAoC;GACG,aAAAC;EAAkD,CAAA;EAC/DpC,EAAA,MAAAK;EAAAL,EAAA,MAAAD;EAAAC,EAAA,MAAAG;EAAAH,EAAA,MAAAiC;EAAAjC,EAAA,MAAAmC;EAAAnC,EAAA,MAAAoC;EAAApC,EAAA,MAAAqC;CAAA,OAAAA,KAAArC,EAAA;CAAA,IAAAsC;CAAA,IAAAtC,EAAA,QAAAgC,MAAAhC,EAAA,QAAAqC,IAAA;EARJC,KAAA,oBAAA,uBAAA,UAAA;GAAwC,OAAAN;GACtCK,UAAAA;EAQF,CAAA;EAAkCrC,EAAA,MAAAgC;EAAAhC,EAAA,MAAAqC;EAAArC,EAAA,MAAAsC;CAAA,OAAAA,KAAAtC,EAAA;CAAA,OATlCsC;AASkC,CAErC;AAED7C,sBAAsB8C,cAAc;AAzDlC,SAAAjC,MAAAS,GAAA;CAAA,OAEwCA,EAACC,SAASwB;AAAK;AAFvD,SAAAT,OAAAU,KAAA;CAyBE,IAAId,IAACe,WAAY,GAAC;CAClB,MAAAC,SAAehB,IAACgB;CAGhB,IAAI,EAAEA,kBAAkBjD,YAApB,CAAiCiC,IAACiB,cAAcC,SAAUF,MAAM,GAAC;CAIrE,MAAAG,cAAoBH,OAAMI,QAASxD,4BAA4B;CAC/D,IAAIuD,eAAenB,IAACiB,cAAcC,SAAUC,WAAW,GAAC;CACxD,MAAAE,QAAcrB,IAACiB,cAAcK,cAC3B5D,uBACF;CACA,IAAI,CAAC2D,OAAK;CACVrB,IAACC,eAAgB;CACjBoB,MAAKE,MAAO;AAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const CONTENT_EDITABLE_SELECTOR = "[contenteditable]:not([contenteditable='false'])";
2
+ export declare const COMPOSER_INPUT_SELECTOR = "textarea:not(:disabled), [contenteditable]:not([contenteditable='false'])";
3
+ //# sourceMappingURL=composerInputSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composerInputSelector.d.ts","sourceRoot":"","sources":["../../../src/primitives/composer/composerInputSelector.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,qDACc,CAAC;AAErD,eAAO,MAAM,uBAAuB,8EAA0D,CAAC"}
@@ -0,0 +1,7 @@
1
+ //#region src/primitives/composer/composerInputSelector.ts
2
+ const CONTENT_EDITABLE_SELECTOR = "[contenteditable]:not([contenteditable='false'])";
3
+ const COMPOSER_INPUT_SELECTOR = `textarea:not(:disabled), ${CONTENT_EDITABLE_SELECTOR}`;
4
+ //#endregion
5
+ export { COMPOSER_INPUT_SELECTOR, CONTENT_EDITABLE_SELECTOR };
6
+
7
+ //# sourceMappingURL=composerInputSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composerInputSelector.js","names":["CONTENT_EDITABLE_SELECTOR","COMPOSER_INPUT_SELECTOR"],"sources":["../../../src/primitives/composer/composerInputSelector.ts"],"sourcesContent":["export const CONTENT_EDITABLE_SELECTOR =\n \"[contenteditable]:not([contenteditable='false'])\";\n\nexport const COMPOSER_INPUT_SELECTOR = `textarea:not(:disabled), ${CONTENT_EDITABLE_SELECTOR}`;\n"],"mappings":";AAAA,MAAaA,4BACX;AAEF,MAAaC,0BAA0B,4BAA4BD"}
@@ -0,0 +1,2 @@
1
+ export declare const useComposerCancelWithFocus: (cancel: () => void) => (source: HTMLElement | null) => void;
2
+ //# sourceMappingURL=useComposerCancelWithFocus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useComposerCancelWithFocus.d.ts","sourceRoot":"","sources":["../../../src/primitives/composer/useComposerCancelWithFocus.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,0BAA0B,GAAI,QAAQ,MAAM,IAAI,cAKhD,WAAW,GAAG,IAAI,SAyC9B,CAAC"}
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import { COMPOSER_INPUT_SELECTOR } from "./composerInputSelector.js";
3
+ import { useThreadRootElementRef } from "../thread/ThreadRootElementContext.js";
4
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
+ import "@assistant-ui/tap/react-shim";
6
+ import { useAui } from "@assistant-ui/store";
7
+ //#region src/primitives/composer/useComposerCancelWithFocus.ts
8
+ const COMPOSER_SELECTOR = "[data-aui-composer-type]";
9
+ const THREAD_SELECTOR = "[data-aui-thread-root]";
10
+ const useComposerCancelWithFocus = (cancel) => {
11
+ const $ = c(4);
12
+ const aui = useAui();
13
+ const threadRootRef = useThreadRootElementRef();
14
+ let t0;
15
+ if ($[0] !== aui.composer || $[1] !== cancel || $[2] !== threadRootRef) {
16
+ t0 = (source) => {
17
+ const root = threadRootRef?.current;
18
+ const doc = source?.ownerDocument;
19
+ const active = doc?.activeElement;
20
+ const composer = source?.closest(COMPOSER_SELECTOR);
21
+ const shouldRestore = aui.composer.getState().type === "edit" && root && active && composer?.getAttribute("data-aui-composer-type") === "edit" && composer.contains(active) && composer.closest(THREAD_SELECTOR) === root;
22
+ const candidates = shouldRestore ? Array.from(root.querySelectorAll(COMPOSER_INPUT_SELECTOR)).filter((input) => input.closest(THREAD_SELECTOR) === root && input.closest(COMPOSER_SELECTOR)?.getAttribute("data-aui-composer-type") === "thread") : [];
23
+ cancel();
24
+ if (!doc || !active || !shouldRestore) return;
25
+ if (doc.activeElement !== active && doc.activeElement !== doc.body) return;
26
+ for (const input_0 of candidates) {
27
+ if (!input_0.isConnected || input_0.closest("[hidden], [inert]")) continue;
28
+ input_0.focus({ preventScroll: true });
29
+ if (doc.activeElement !== active && doc.activeElement !== doc.body) break;
30
+ }
31
+ };
32
+ $[0] = aui.composer;
33
+ $[1] = cancel;
34
+ $[2] = threadRootRef;
35
+ $[3] = t0;
36
+ } else t0 = $[3];
37
+ return t0;
38
+ };
39
+ //#endregion
40
+ export { useComposerCancelWithFocus };
41
+
42
+ //# sourceMappingURL=useComposerCancelWithFocus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useComposerCancelWithFocus.js","names":["c","_c","useCallback","useAui","useThreadRootElementRef","COMPOSER_INPUT_SELECTOR","COMPOSER_SELECTOR","THREAD_SELECTOR","useComposerCancelWithFocus","cancel","$","aui","threadRootRef","t0","composer","source","root","current","doc","ownerDocument","active","activeElement","closest","shouldRestore","getState","type","getAttribute","contains","candidates","Array","from","querySelectorAll","filter","input","body","input_0","isConnected","focus","preventScroll","cancelWithFocus","_c","cancelWithFocus"],"sources":["../../../src/primitives/composer/useComposerCancelWithFocus.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useThreadRootElementRef } from \"../thread/ThreadRootElementContext\";\nimport { COMPOSER_INPUT_SELECTOR } from \"./composerInputSelector\";\n\nconst COMPOSER_SELECTOR = \"[data-aui-composer-type]\";\nconst THREAD_SELECTOR = \"[data-aui-thread-root]\";\n\nexport const useComposerCancelWithFocus = (cancel: () => void) => {\n const aui = useAui();\n const threadRootRef = useThreadRootElementRef();\n\n const cancelWithFocus = useCallback(\n (source: HTMLElement | null) => {\n const root = threadRootRef?.current;\n const doc = source?.ownerDocument;\n const active = doc?.activeElement;\n const composer = source?.closest(COMPOSER_SELECTOR);\n const shouldRestore =\n aui.composer.getState().type === \"edit\" &&\n root &&\n active &&\n composer?.getAttribute(\"data-aui-composer-type\") === \"edit\" &&\n composer.contains(active) &&\n composer.closest(THREAD_SELECTOR) === root;\n const candidates = shouldRestore\n ? Array.from(\n root.querySelectorAll<HTMLElement>(COMPOSER_INPUT_SELECTOR),\n ).filter(\n (input) =>\n input.closest(THREAD_SELECTOR) === root &&\n input\n .closest(COMPOSER_SELECTOR)\n ?.getAttribute(\"data-aui-composer-type\") === \"thread\",\n )\n : [];\n\n cancel();\n\n if (!doc || !active || !shouldRestore) return;\n if (doc.activeElement !== active && doc.activeElement !== doc.body)\n return;\n\n for (const input of candidates) {\n if (!input.isConnected || input.closest(\"[hidden], [inert]\")) continue;\n input.focus({ preventScroll: true });\n if (doc.activeElement !== active && doc.activeElement !== doc.body)\n break;\n }\n },\n [aui, cancel, threadRootRef],\n );\n\n return cancelWithFocus;\n};\n"],"mappings":";;;;;;;AAOA,MAAMM,oBAAoB;AAC1B,MAAMC,kBAAkB;AAExB,MAAaC,8BAA6BC,WAAA;CAAA,MAAAC,IAAAT,EAAA,CAAA;CACxC,MAAAU,MAAYR,OAAO;CACnB,MAAAS,gBAAsBR,wBAAwB;CAAE,IAAAS;CAAA,IAAAH,EAAA,OAAAC,IAAAG,YAAAJ,EAAA,OAAAD,UAAAC,EAAA,OAAAE,eAAA;EAG9CC,MAAAE,WAAA;GACE,MAAAC,OAAaJ,eAAaK;GAC1B,MAAAC,MAAYH,QAAMI;GAClB,MAAAC,SAAeF,KAAGG;GAClB,MAAAP,WAAiBC,QAAMO,QAAUhB,iBAAiB;GAClD,MAAAiB,gBACEZ,IAAGG,SAASU,SAAU,CAAC,CAAAC,SAAU,UAAjCT,QAAAI,UAGAN,UAAQY,aAAe,wBAAwB,MAAM,UACrDZ,SAAQa,SAAUP,MAAM,KACxBN,SAAQQ,QAASf,eAAe,MAAMS;GACxC,MAAAY,aAAmBL,gBACfM,MAAKC,KACHd,KAAIe,iBAA+B1B,uBAAuB,CAC5D,CAAC,CAAA2B,QACCC,UACEA,MAAKX,QAASf,eAAe,MAAMS,QACnCiB,MAAKX,QACMhB,iBACI,CAAC,EAAAoB,aAAC,wBAAwB,MAAM,QAElD,IAVc,CAAA;GAYnBjB,OAAO;GAEP,IAAI,CAACS,OAAD,CAASE,UAAT,CAAoBG,eAAa;GACrC,IAAIL,IAAGG,kBAAmBD,UAAUF,IAAGG,kBAAmBH,IAAGgB,MAAK;GAGlE,KAAK,MAAAC,WAAeP,YAAU;IAC5B,IAAI,CAACK,QAAKG,eAAgBH,QAAKX,QAAS,mBAAmB,GAAG;IAC9DW,QAAKI,MAAO,EAAAC,eAAiB,KAAK,CAAC;IACnC,IAAIpB,IAAGG,kBAAmBD,UAAUF,IAAGG,kBAAmBH,IAAGgB,MAC3D;GAAM;EACT;EACFxB,EAAA,KAAAC,IAAAG;EAAAJ,EAAA,KAAAD;EAAAC,EAAA,KAAAE;EAAAF,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAED,OAEK6B;AAAe"}
@@ -16,33 +16,54 @@ export { ComposerPrimitiveQuoteText as QuoteText } from "./composer/ComposerQuot
16
16
  export { ComposerPrimitiveQuoteDismiss as QuoteDismiss } from "./composer/ComposerQuote.js";
17
17
  export { ComposerPrimitiveQueue as Queue } from "./composer/ComposerQueue.js";
18
18
  export { ComposerPrimitiveTriggerPopover as TriggerPopover } from "./composer/trigger/index.js";
19
+ export {
19
20
  /** @deprecated Use `ComposerPrimitive.TriggerPopover` instead. */
20
- export { ComposerPrimitiveTriggerPopover as Unstable_TriggerPopover } from "./composer/trigger/index.js";
21
+ ComposerPrimitiveTriggerPopover as Unstable_TriggerPopover, } from "./composer/trigger/index.js";
21
22
  export { ComposerPrimitiveTriggerPopoverRoot as TriggerPopoverRoot } from "./composer/trigger/index.js";
23
+ export {
22
24
  /** @deprecated Use `ComposerPrimitive.TriggerPopoverRoot` instead. */
23
- export { ComposerPrimitiveTriggerPopoverRoot as Unstable_TriggerPopoverRoot } from "./composer/trigger/index.js";
25
+ ComposerPrimitiveTriggerPopoverRoot as Unstable_TriggerPopoverRoot, } from "./composer/trigger/index.js";
24
26
  export { ComposerPrimitiveTriggerPopoverCategories as TriggerPopoverCategories } from "./composer/trigger/index.js";
27
+ export {
25
28
  /** @deprecated Use `ComposerPrimitive.TriggerPopoverCategories` instead. */
26
- export { ComposerPrimitiveTriggerPopoverCategories as Unstable_TriggerPopoverCategories } from "./composer/trigger/index.js";
29
+ ComposerPrimitiveTriggerPopoverCategories as Unstable_TriggerPopoverCategories, } from "./composer/trigger/index.js";
27
30
  export { ComposerPrimitiveTriggerPopoverCategoryItem as TriggerPopoverCategoryItem } from "./composer/trigger/index.js";
31
+ export {
28
32
  /** @deprecated Use `ComposerPrimitive.TriggerPopoverCategoryItem` instead. */
29
- export { ComposerPrimitiveTriggerPopoverCategoryItem as Unstable_TriggerPopoverCategoryItem } from "./composer/trigger/index.js";
33
+ ComposerPrimitiveTriggerPopoverCategoryItem as Unstable_TriggerPopoverCategoryItem, } from "./composer/trigger/index.js";
30
34
  export { ComposerPrimitiveTriggerPopoverItems as TriggerPopoverItems } from "./composer/trigger/index.js";
35
+ export {
31
36
  /** @deprecated Use `ComposerPrimitive.TriggerPopoverItems` instead. */
32
- export { ComposerPrimitiveTriggerPopoverItems as Unstable_TriggerPopoverItems } from "./composer/trigger/index.js";
37
+ ComposerPrimitiveTriggerPopoverItems as Unstable_TriggerPopoverItems, } from "./composer/trigger/index.js";
33
38
  export { ComposerPrimitiveTriggerPopoverItem as TriggerPopoverItem } from "./composer/trigger/index.js";
39
+ export {
34
40
  /** @deprecated Use `ComposerPrimitive.TriggerPopoverItem` instead. */
35
- export { ComposerPrimitiveTriggerPopoverItem as Unstable_TriggerPopoverItem } from "./composer/trigger/index.js";
41
+ ComposerPrimitiveTriggerPopoverItem as Unstable_TriggerPopoverItem, } from "./composer/trigger/index.js";
36
42
  export { ComposerPrimitiveTriggerPopoverBack as TriggerPopoverBack } from "./composer/trigger/index.js";
43
+ export {
37
44
  /** @deprecated Use `ComposerPrimitive.TriggerPopoverBack` instead. */
38
- export { ComposerPrimitiveTriggerPopoverBack as Unstable_TriggerPopoverBack } from "./composer/trigger/index.js";
39
- export { useTriggerPopoverRootContext as unstable_useTriggerPopoverRootContext } from "./composer/trigger/index.js";
40
- export { useTriggerPopoverRootContextOptional as unstable_useTriggerPopoverRootContextOptional } from "./composer/trigger/index.js";
41
- export { useTriggerPopoverScopeContext as unstable_useTriggerPopoverScopeContext } from "./composer/trigger/index.js";
42
- export { useTriggerPopoverScopeContextOptional as unstable_useTriggerPopoverScopeContextOptional } from "./composer/trigger/index.js";
43
- export { useTriggerPopoverTriggers as unstable_useTriggerPopoverTriggers } from "./composer/trigger/index.js";
44
- export { useTriggerPopoverTriggersOptional as unstable_useTriggerPopoverTriggersOptional } from "./composer/trigger/index.js";
45
- export type { RegisteredTrigger as Unstable_RegisteredTrigger } from "./composer/trigger/index.js";
45
+ ComposerPrimitiveTriggerPopoverBack as Unstable_TriggerPopoverBack, } from "./composer/trigger/index.js";
46
+ export {
47
+ /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
48
+ useTriggerPopoverRootContext as unstable_useTriggerPopoverRootContext, } from "./composer/trigger/index.js";
49
+ export {
50
+ /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
51
+ useTriggerPopoverRootContextOptional as unstable_useTriggerPopoverRootContextOptional, } from "./composer/trigger/index.js";
52
+ export {
53
+ /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
54
+ useTriggerPopoverScopeContext as unstable_useTriggerPopoverScopeContext, } from "./composer/trigger/index.js";
55
+ export {
56
+ /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
57
+ useTriggerPopoverScopeContextOptional as unstable_useTriggerPopoverScopeContextOptional, } from "./composer/trigger/index.js";
58
+ export {
59
+ /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
60
+ useTriggerPopoverTriggers as unstable_useTriggerPopoverTriggers, } from "./composer/trigger/index.js";
61
+ export {
62
+ /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
63
+ useTriggerPopoverTriggersOptional as unstable_useTriggerPopoverTriggersOptional, } from "./composer/trigger/index.js";
64
+ export type {
65
+ /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */
66
+ RegisteredTrigger as Unstable_RegisteredTrigger, } from "./composer/trigger/index.js";
46
67
  export type { TriggerMatch, TriggerMatcher } from "./composer/trigger/index.js";
47
68
  /** @deprecated Use `TriggerMatcher` instead. */
48
69
  export type Unstable_TriggerMatcher = TriggerMatcher;
@@ -1 +1 @@
1
- {"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../src/primitives/composer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,oCAA2B;AAEvE,OAAO,EAAE,qBAAqB,IAAI,IAAI,EAAE,mCAAgC;AACxE,OAAO,EAAE,sBAAsB,IAAI,KAAK,EAAE,oCAAiC;AAC3E,OAAO,EAAE,qBAAqB,IAAI,IAAI,EAAE,mCAAgC;AACxE,OAAO,EAAE,uBAAuB,IAAI,MAAM,EAAE,qCAAkC;AAC9E,OAAO,EAAE,8BAA8B,IAAI,aAAa,EAAE,4CAAyC;AACnG,OAAO,EAAE,4BAA4B,IAAI,WAAW,EAAE,0CAAuC;AAC7F,OAAO,EAAE,kCAAkC,IAAI,iBAAiB,EAAE,0CAAuC;AACzG,OAAO,EAAE,mCAAmC,IAAI,kBAAkB,EAAE,iDAA8C;AAClH,OAAO,EAAE,wBAAwB,IAAI,OAAO,EAAE,sCAAmC;AACjF,OAAO,EAAE,8BAA8B,IAAI,aAAa,EAAE,4CAAyC;AACnG,OAAO,EAAE,oCAAoC,IAAI,mBAAmB,EAAE,kDAA+C;AACrH,OAAO,EAAE,mBAAmB,IAAI,EAAE,EAAE,iCAA8B;AAClE,OAAO,EAAE,sBAAsB,IAAI,KAAK,EAAE,oCAAiC;AAC3E,OAAO,EAAE,0BAA0B,IAAI,SAAS,EAAE,oCAAiC;AACnF,OAAO,EAAE,6BAA6B,IAAI,YAAY,EAAE,oCAAiC;AACzF,OAAO,EAAE,sBAAsB,IAAI,KAAK,EAAE,oCAAiC;AAE3E,OAAO,EAAE,+BAA+B,IAAI,cAAc,EAAE,oCAA2B;AACvF,kEAAkE;AAClE,OAAO,EAAE,+BAA+B,IAAI,uBAAuB,EAAE,oCAA2B;AAChG,OAAO,EAAE,mCAAmC,IAAI,kBAAkB,EAAE,oCAA2B;AAC/F,sEAAsE;AACtE,OAAO,EAAE,mCAAmC,IAAI,2BAA2B,EAAE,oCAA2B;AACxG,OAAO,EAAE,yCAAyC,IAAI,wBAAwB,EAAE,oCAA2B;AAC3G,4EAA4E;AAC5E,OAAO,EAAE,yCAAyC,IAAI,iCAAiC,EAAE,oCAA2B;AACpH,OAAO,EAAE,2CAA2C,IAAI,0BAA0B,EAAE,oCAA2B;AAC/G,8EAA8E;AAC9E,OAAO,EAAE,2CAA2C,IAAI,mCAAmC,EAAE,oCAA2B;AACxH,OAAO,EAAE,oCAAoC,IAAI,mBAAmB,EAAE,oCAA2B;AACjG,uEAAuE;AACvE,OAAO,EAAE,oCAAoC,IAAI,4BAA4B,EAAE,oCAA2B;AAC1G,OAAO,EAAE,mCAAmC,IAAI,kBAAkB,EAAE,oCAA2B;AAC/F,sEAAsE;AACtE,OAAO,EAAE,mCAAmC,IAAI,2BAA2B,EAAE,oCAA2B;AACxG,OAAO,EAAE,mCAAmC,IAAI,kBAAkB,EAAE,oCAA2B;AAC/F,sEAAsE;AACtE,OAAO,EAAE,mCAAmC,IAAI,2BAA2B,EAAE,oCAA2B;AACxG,OAAO,EAAE,4BAA4B,IAAI,qCAAqC,EAAE,oCAA2B;AAC3G,OAAO,EAAE,oCAAoC,IAAI,6CAA6C,EAAE,oCAA2B;AAC3H,OAAO,EAAE,6BAA6B,IAAI,sCAAsC,EAAE,oCAA2B;AAC7G,OAAO,EAAE,qCAAqC,IAAI,8CAA8C,EAAE,oCAA2B;AAC7H,OAAO,EAAE,yBAAyB,IAAI,kCAAkC,EAAE,oCAA2B;AACrG,OAAO,EAAE,iCAAiC,IAAI,0CAA0C,EAAE,oCAA2B;AACrH,YAAY,EAAE,iBAAiB,IAAI,0BAA0B,EAAE,oCAA2B;AAC1F,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,oCAA2B;AACvE,gDAAgD;AAChD,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC;AACrD,8CAA8C;AAC9C,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC"}
1
+ {"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../src/primitives/composer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"composer.js","names":["TriggerMatch","TriggerMatcher","ComposerPrimitiveRoot","Root","ComposerPrimitiveInput","Input","ComposerPrimitiveSend","Send","ComposerPrimitiveCancel","Cancel","ComposerPrimitiveAddAttachment","AddAttachment","ComposerPrimitiveAttachments","Attachments","ComposerPrimitiveAttachmentByIndex","AttachmentByIndex","ComposerPrimitiveAttachmentDropzone","AttachmentDropzone","ComposerPrimitiveDictate","Dictate","ComposerPrimitiveStopDictation","StopDictation","ComposerPrimitiveDictationTranscript","DictationTranscript","ComposerPrimitiveIf","If","ComposerPrimitiveQuote","Quote","ComposerPrimitiveQuoteText","QuoteText","ComposerPrimitiveQuoteDismiss","QuoteDismiss","ComposerPrimitiveQueue","Queue","ComposerPrimitiveTriggerPopover","TriggerPopover","Unstable_TriggerPopover","ComposerPrimitiveTriggerPopoverRoot","TriggerPopoverRoot","Unstable_TriggerPopoverRoot","ComposerPrimitiveTriggerPopoverCategories","TriggerPopoverCategories","Unstable_TriggerPopoverCategories","ComposerPrimitiveTriggerPopoverCategoryItem","TriggerPopoverCategoryItem","Unstable_TriggerPopoverCategoryItem","ComposerPrimitiveTriggerPopoverItems","TriggerPopoverItems","Unstable_TriggerPopoverItems","ComposerPrimitiveTriggerPopoverItem","TriggerPopoverItem","Unstable_TriggerPopoverItem","ComposerPrimitiveTriggerPopoverBack","TriggerPopoverBack","Unstable_TriggerPopoverBack","useTriggerPopoverRootContext","unstable_useTriggerPopoverRootContext","useTriggerPopoverRootContextOptional","unstable_useTriggerPopoverRootContextOptional","useTriggerPopoverScopeContext","unstable_useTriggerPopoverScopeContext","useTriggerPopoverScopeContextOptional","unstable_useTriggerPopoverScopeContextOptional","useTriggerPopoverTriggers","unstable_useTriggerPopoverTriggers","useTriggerPopoverTriggersOptional","unstable_useTriggerPopoverTriggersOptional","RegisteredTrigger","Unstable_RegisteredTrigger","Unstable_TriggerMatcher","Unstable_TriggerMatch"],"sources":["../../src/primitives/composer.ts"],"sourcesContent":["import type { TriggerMatch, TriggerMatcher } from \"./composer/trigger\";\n\nexport { ComposerPrimitiveRoot as Root } from \"./composer/ComposerRoot\";\nexport { ComposerPrimitiveInput as Input } from \"./composer/ComposerInput\";\nexport { ComposerPrimitiveSend as Send } from \"./composer/ComposerSend\";\nexport { ComposerPrimitiveCancel as Cancel } from \"./composer/ComposerCancel\";\nexport { ComposerPrimitiveAddAttachment as AddAttachment } from \"./composer/ComposerAddAttachment\";\nexport { ComposerPrimitiveAttachments as Attachments } from \"./composer/ComposerAttachments\";\nexport { ComposerPrimitiveAttachmentByIndex as AttachmentByIndex } from \"./composer/ComposerAttachments\";\nexport { ComposerPrimitiveAttachmentDropzone as AttachmentDropzone } from \"./composer/ComposerAttachmentDropzone\";\nexport { ComposerPrimitiveDictate as Dictate } from \"./composer/ComposerDictate\";\nexport { ComposerPrimitiveStopDictation as StopDictation } from \"./composer/ComposerStopDictation\";\nexport { ComposerPrimitiveDictationTranscript as DictationTranscript } from \"./composer/ComposerDictationTranscript\";\nexport { ComposerPrimitiveIf as If } from \"./composer/ComposerIf\";\nexport { ComposerPrimitiveQuote as Quote } from \"./composer/ComposerQuote\";\nexport { ComposerPrimitiveQuoteText as QuoteText } from \"./composer/ComposerQuote\";\nexport { ComposerPrimitiveQuoteDismiss as QuoteDismiss } from \"./composer/ComposerQuote\";\nexport { ComposerPrimitiveQueue as Queue } from \"./composer/ComposerQueue\";\n\nexport { ComposerPrimitiveTriggerPopover as TriggerPopover } from \"./composer/trigger\";\n/** @deprecated Use `ComposerPrimitive.TriggerPopover` instead. */\nexport { ComposerPrimitiveTriggerPopover as Unstable_TriggerPopover } from \"./composer/trigger\";\nexport { ComposerPrimitiveTriggerPopoverRoot as TriggerPopoverRoot } from \"./composer/trigger\";\n/** @deprecated Use `ComposerPrimitive.TriggerPopoverRoot` instead. */\nexport { ComposerPrimitiveTriggerPopoverRoot as Unstable_TriggerPopoverRoot } from \"./composer/trigger\";\nexport { ComposerPrimitiveTriggerPopoverCategories as TriggerPopoverCategories } from \"./composer/trigger\";\n/** @deprecated Use `ComposerPrimitive.TriggerPopoverCategories` instead. */\nexport { ComposerPrimitiveTriggerPopoverCategories as Unstable_TriggerPopoverCategories } from \"./composer/trigger\";\nexport { ComposerPrimitiveTriggerPopoverCategoryItem as TriggerPopoverCategoryItem } from \"./composer/trigger\";\n/** @deprecated Use `ComposerPrimitive.TriggerPopoverCategoryItem` instead. */\nexport { ComposerPrimitiveTriggerPopoverCategoryItem as Unstable_TriggerPopoverCategoryItem } from \"./composer/trigger\";\nexport { ComposerPrimitiveTriggerPopoverItems as TriggerPopoverItems } from \"./composer/trigger\";\n/** @deprecated Use `ComposerPrimitive.TriggerPopoverItems` instead. */\nexport { ComposerPrimitiveTriggerPopoverItems as Unstable_TriggerPopoverItems } from \"./composer/trigger\";\nexport { ComposerPrimitiveTriggerPopoverItem as TriggerPopoverItem } from \"./composer/trigger\";\n/** @deprecated Use `ComposerPrimitive.TriggerPopoverItem` instead. */\nexport { ComposerPrimitiveTriggerPopoverItem as Unstable_TriggerPopoverItem } from \"./composer/trigger\";\nexport { ComposerPrimitiveTriggerPopoverBack as TriggerPopoverBack } from \"./composer/trigger\";\n/** @deprecated Use `ComposerPrimitive.TriggerPopoverBack` instead. */\nexport { ComposerPrimitiveTriggerPopoverBack as Unstable_TriggerPopoverBack } from \"./composer/trigger\";\nexport { useTriggerPopoverRootContext as unstable_useTriggerPopoverRootContext } from \"./composer/trigger\";\nexport { useTriggerPopoverRootContextOptional as unstable_useTriggerPopoverRootContextOptional } from \"./composer/trigger\";\nexport { useTriggerPopoverScopeContext as unstable_useTriggerPopoverScopeContext } from \"./composer/trigger\";\nexport { useTriggerPopoverScopeContextOptional as unstable_useTriggerPopoverScopeContextOptional } from \"./composer/trigger\";\nexport { useTriggerPopoverTriggers as unstable_useTriggerPopoverTriggers } from \"./composer/trigger\";\nexport { useTriggerPopoverTriggersOptional as unstable_useTriggerPopoverTriggersOptional } from \"./composer/trigger\";\nexport type { RegisteredTrigger as Unstable_RegisteredTrigger } from \"./composer/trigger\";\nexport type { TriggerMatch, TriggerMatcher } from \"./composer/trigger\";\n/** @deprecated Use `TriggerMatcher` instead. */\nexport type Unstable_TriggerMatcher = TriggerMatcher;\n/** @deprecated Use `TriggerMatch` instead. */\nexport type Unstable_TriggerMatch = TriggerMatch;\n"],"mappings":""}
1
+ {"version":3,"file":"composer.js","names":["TriggerMatch","TriggerMatcher","ComposerPrimitiveRoot","Root","ComposerPrimitiveInput","Input","ComposerPrimitiveSend","Send","ComposerPrimitiveCancel","Cancel","ComposerPrimitiveAddAttachment","AddAttachment","ComposerPrimitiveAttachments","Attachments","ComposerPrimitiveAttachmentByIndex","AttachmentByIndex","ComposerPrimitiveAttachmentDropzone","AttachmentDropzone","ComposerPrimitiveDictate","Dictate","ComposerPrimitiveStopDictation","StopDictation","ComposerPrimitiveDictationTranscript","DictationTranscript","ComposerPrimitiveIf","If","ComposerPrimitiveQuote","Quote","ComposerPrimitiveQuoteText","QuoteText","ComposerPrimitiveQuoteDismiss","QuoteDismiss","ComposerPrimitiveQueue","Queue","ComposerPrimitiveTriggerPopover","TriggerPopover","Unstable_TriggerPopover","ComposerPrimitiveTriggerPopoverRoot","TriggerPopoverRoot","Unstable_TriggerPopoverRoot","ComposerPrimitiveTriggerPopoverCategories","TriggerPopoverCategories","Unstable_TriggerPopoverCategories","ComposerPrimitiveTriggerPopoverCategoryItem","TriggerPopoverCategoryItem","Unstable_TriggerPopoverCategoryItem","ComposerPrimitiveTriggerPopoverItems","TriggerPopoverItems","Unstable_TriggerPopoverItems","ComposerPrimitiveTriggerPopoverItem","TriggerPopoverItem","Unstable_TriggerPopoverItem","ComposerPrimitiveTriggerPopoverBack","TriggerPopoverBack","Unstable_TriggerPopoverBack","useTriggerPopoverRootContext","unstable_useTriggerPopoverRootContext","useTriggerPopoverRootContextOptional","unstable_useTriggerPopoverRootContextOptional","useTriggerPopoverScopeContext","unstable_useTriggerPopoverScopeContext","useTriggerPopoverScopeContextOptional","unstable_useTriggerPopoverScopeContextOptional","useTriggerPopoverTriggers","unstable_useTriggerPopoverTriggers","useTriggerPopoverTriggersOptional","unstable_useTriggerPopoverTriggersOptional","RegisteredTrigger","Unstable_RegisteredTrigger","Unstable_TriggerMatcher","Unstable_TriggerMatch"],"sources":["../../src/primitives/composer.ts"],"sourcesContent":["import type { TriggerMatch, TriggerMatcher } from \"./composer/trigger\";\n\nexport { ComposerPrimitiveRoot as Root } from \"./composer/ComposerRoot\";\nexport { ComposerPrimitiveInput as Input } from \"./composer/ComposerInput\";\nexport { ComposerPrimitiveSend as Send } from \"./composer/ComposerSend\";\nexport { ComposerPrimitiveCancel as Cancel } from \"./composer/ComposerCancel\";\nexport { ComposerPrimitiveAddAttachment as AddAttachment } from \"./composer/ComposerAddAttachment\";\nexport { ComposerPrimitiveAttachments as Attachments } from \"./composer/ComposerAttachments\";\nexport { ComposerPrimitiveAttachmentByIndex as AttachmentByIndex } from \"./composer/ComposerAttachments\";\nexport { ComposerPrimitiveAttachmentDropzone as AttachmentDropzone } from \"./composer/ComposerAttachmentDropzone\";\nexport { ComposerPrimitiveDictate as Dictate } from \"./composer/ComposerDictate\";\nexport { ComposerPrimitiveStopDictation as StopDictation } from \"./composer/ComposerStopDictation\";\nexport { ComposerPrimitiveDictationTranscript as DictationTranscript } from \"./composer/ComposerDictationTranscript\";\nexport { ComposerPrimitiveIf as If } from \"./composer/ComposerIf\";\nexport { ComposerPrimitiveQuote as Quote } from \"./composer/ComposerQuote\";\nexport { ComposerPrimitiveQuoteText as QuoteText } from \"./composer/ComposerQuote\";\nexport { ComposerPrimitiveQuoteDismiss as QuoteDismiss } from \"./composer/ComposerQuote\";\nexport { ComposerPrimitiveQueue as Queue } from \"./composer/ComposerQueue\";\n\nexport { ComposerPrimitiveTriggerPopover as TriggerPopover } from \"./composer/trigger\";\nexport {\n /** @deprecated Use `ComposerPrimitive.TriggerPopover` instead. */\n ComposerPrimitiveTriggerPopover as Unstable_TriggerPopover,\n} from \"./composer/trigger\";\nexport { ComposerPrimitiveTriggerPopoverRoot as TriggerPopoverRoot } from \"./composer/trigger\";\nexport {\n /** @deprecated Use `ComposerPrimitive.TriggerPopoverRoot` instead. */\n ComposerPrimitiveTriggerPopoverRoot as Unstable_TriggerPopoverRoot,\n} from \"./composer/trigger\";\nexport { ComposerPrimitiveTriggerPopoverCategories as TriggerPopoverCategories } from \"./composer/trigger\";\nexport {\n /** @deprecated Use `ComposerPrimitive.TriggerPopoverCategories` instead. */\n ComposerPrimitiveTriggerPopoverCategories as Unstable_TriggerPopoverCategories,\n} from \"./composer/trigger\";\nexport { ComposerPrimitiveTriggerPopoverCategoryItem as TriggerPopoverCategoryItem } from \"./composer/trigger\";\nexport {\n /** @deprecated Use `ComposerPrimitive.TriggerPopoverCategoryItem` instead. */\n ComposerPrimitiveTriggerPopoverCategoryItem as Unstable_TriggerPopoverCategoryItem,\n} from \"./composer/trigger\";\nexport { ComposerPrimitiveTriggerPopoverItems as TriggerPopoverItems } from \"./composer/trigger\";\nexport {\n /** @deprecated Use `ComposerPrimitive.TriggerPopoverItems` instead. */\n ComposerPrimitiveTriggerPopoverItems as Unstable_TriggerPopoverItems,\n} from \"./composer/trigger\";\nexport { ComposerPrimitiveTriggerPopoverItem as TriggerPopoverItem } from \"./composer/trigger\";\nexport {\n /** @deprecated Use `ComposerPrimitive.TriggerPopoverItem` instead. */\n ComposerPrimitiveTriggerPopoverItem as Unstable_TriggerPopoverItem,\n} from \"./composer/trigger\";\nexport { ComposerPrimitiveTriggerPopoverBack as TriggerPopoverBack } from \"./composer/trigger\";\nexport {\n /** @deprecated Use `ComposerPrimitive.TriggerPopoverBack` instead. */\n ComposerPrimitiveTriggerPopoverBack as Unstable_TriggerPopoverBack,\n} from \"./composer/trigger\";\nexport {\n /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\n useTriggerPopoverRootContext as unstable_useTriggerPopoverRootContext,\n} from \"./composer/trigger\";\nexport {\n /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\n useTriggerPopoverRootContextOptional as unstable_useTriggerPopoverRootContextOptional,\n} from \"./composer/trigger\";\nexport {\n /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\n useTriggerPopoverScopeContext as unstable_useTriggerPopoverScopeContext,\n} from \"./composer/trigger\";\nexport {\n /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\n useTriggerPopoverScopeContextOptional as unstable_useTriggerPopoverScopeContextOptional,\n} from \"./composer/trigger\";\nexport {\n /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\n useTriggerPopoverTriggers as unstable_useTriggerPopoverTriggers,\n} from \"./composer/trigger\";\nexport {\n /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\n useTriggerPopoverTriggersOptional as unstable_useTriggerPopoverTriggersOptional,\n} from \"./composer/trigger\";\nexport type {\n /** @deprecated Experimental since 2026-04-15. Not scheduled for removal; the API may change in any release. */\n RegisteredTrigger as Unstable_RegisteredTrigger,\n} from \"./composer/trigger\";\nexport type { TriggerMatch, TriggerMatcher } from \"./composer/trigger\";\n/** @deprecated Use `TriggerMatcher` instead. */\nexport type Unstable_TriggerMatcher = TriggerMatcher;\n/** @deprecated Use `TriggerMatch` instead. */\nexport type Unstable_TriggerMatch = TriggerMatch;\n"],"mappings":""}
@@ -1,10 +1,17 @@
1
1
  import { type ComponentType, type FC, type PropsWithChildren } from "react";
2
- import type { Unstable_AudioMessagePartComponent, DataMessagePartComponent, EmptyMessagePartComponent, TextMessagePartComponent, ImageMessagePartComponent, SourceMessagePartComponent, ToolCallMessagePartComponent, ToolCallMessagePartProps, FileMessagePartComponent, ReasoningMessagePartComponent } from "@assistant-ui/core/react";
2
+ import { type Unstable_AudioMessagePartComponent, type DataMessagePartComponent, type EmptyMessagePartComponent, type TextMessagePartComponent, type ImageMessagePartComponent, type SourceMessagePartComponent, type ToolCallMessagePartComponent, type ToolCallMessagePartProps, type FileMessagePartComponent, type ReasoningMessagePartComponent } from "@assistant-ui/core/react";
3
3
  type MessagePartGroup = {
4
4
  groupKey: string | undefined;
5
5
  indices: number[];
6
6
  };
7
7
  export type GroupingFunction = (parts: readonly any[]) => MessagePartGroup[];
8
+ /**
9
+ * @deprecated Prefer `<MessagePrimitive.GroupedParts>` for adjacent
10
+ * grouping — it dispatches all rendering through one `switch (part.type)`
11
+ * and supports nested group paths. Keep this primitive only for
12
+ * non-adjacent clustering (e.g., gathering parts with the same parent-id
13
+ * across the message).
14
+ */
8
15
  export declare namespace MessagePrimitiveUnstable_PartsGrouped {
9
16
  type Props = {
10
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"MessagePartsGrouped.d.ts","sourceRoot":"","sources":["../../../src/primitives/message/MessagePartsGrouped.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,EAAE,EAEP,KAAK,iBAAiB,EAEvB,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,EACV,kCAAkC,EAClC,wBAAwB,EAExB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,EAC9B,MAAM,0BAA0B,CAAC;AAKlC,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,KAAK,gBAAgB,EAAE,CAAC;AAoD7E,yBAAiB,qCAAqC,CAAC;IACrD,KAAY,KAAK,GAAG;QAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA0CG;QACH,gBAAgB,EAAE,gBAAgB,CAAC;QAEnC;;;;;WAKG;QACH,UAAU,EACN;YACE,6CAA6C;YAC7C,KAAK,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;YAC9C,2CAA2C;YAC3C,IAAI,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;YAC5C,mEAAmE;YACnE,SAAS,CAAC,EAAE,6BAA6B,GAAG,SAAS,CAAC;YACtD,6CAA6C;YAC7C,MAAM,CAAC,EAAE,0BAA0B,GAAG,SAAS,CAAC;YAChD,4CAA4C;YAC5C,KAAK,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;YAC9C,2CAA2C;YAC3C,IAAI,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;YAC5C;;;;;eAKG;YACH,cAAc,CAAC,EAAE,kCAAkC,GAAG,SAAS,CAAC;YAChE,4CAA4C;YAC5C,IAAI,CAAC,EACD;gBACE,kDAAkD;gBAClD,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC,GACpD,SAAS,CAAC;gBACd,mDAAmD;gBACnD,QAAQ,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;aACjD,GACD,SAAS,CAAC;YACd,4CAA4C;YAC5C,KAAK,CAAC,EACF;gBACE,qDAAqD;gBACrD,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,4BAA4B,GAAG,SAAS,CAAC,GACxD,SAAS,CAAC;gBACd,gDAAgD;gBAChD,QAAQ,CAAC,EAAE,aAAa,CAAC,wBAAwB,CAAC,GAAG,SAAS,CAAC;aAChE,GACD;gBACE,qDAAqD;gBACrD,QAAQ,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;aACnD,GACD,SAAS,CAAC;YAEd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAgCG;YACH,KAAK,CAAC,EAAE,aAAa,CACnB,iBAAiB,CAAC;gBAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;gBAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;aACnB,CAAC,CACH,CAAC;SACH,GACD,SAAS,CAAC;KACf,CAAC;CACH;AAuMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,qCAAqC,EAAE,EAAE,CACpD,qCAAqC,CAAC,KAAK,CAsC5C,CAAC;AAKF;;;;;GAKG;AACH,eAAO,MAAM,+CAA+C,EAAE,EAAE,CAC9D,IAAI,CAAC,qCAAqC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAStE,CAAC"}
1
+ {"version":3,"file":"MessagePartsGrouped.d.ts","sourceRoot":"","sources":["../../../src/primitives/message/MessagePartsGrouped.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,EAAE,EAEP,KAAK,iBAAiB,EAEvB,MAAM,OAAO,CAAC;AAMf,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EACnC,MAAM,0BAA0B,CAAC;AAKlC,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,KAAK,gBAAgB,EAAE,CAAC;AAoD7E;;;;;;GAMG;AACH,yBAAiB,qCAAqC,CAAC;IACrD,KAAY,KAAK,GAAG;QAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA0CG;QACH,gBAAgB,EAAE,gBAAgB,CAAC;QAEnC;;;;;WAKG;QACH,UAAU,EACN;YACE,6CAA6C;YAC7C,KAAK,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;YAC9C,2CAA2C;YAC3C,IAAI,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;YAC5C,mEAAmE;YACnE,SAAS,CAAC,EAAE,6BAA6B,GAAG,SAAS,CAAC;YACtD,6CAA6C;YAC7C,MAAM,CAAC,EAAE,0BAA0B,GAAG,SAAS,CAAC;YAChD,4CAA4C;YAC5C,KAAK,CAAC,EAAE,yBAAyB,GAAG,SAAS,CAAC;YAC9C,2CAA2C;YAC3C,IAAI,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;YAC5C;;;;;eAKG;YACH,cAAc,CAAC,EAAE,kCAAkC,GAAG,SAAS,CAAC;YAChE,4CAA4C;YAC5C,IAAI,CAAC,EACD;gBACE,kDAAkD;gBAClD,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC,GACpD,SAAS,CAAC;gBACd,mDAAmD;gBACnD,QAAQ,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAAC;aACjD,GACD,SAAS,CAAC;YACd,4CAA4C;YAC5C,KAAK,CAAC,EACF;gBACE,qDAAqD;gBACrD,OAAO,CAAC,EACJ,MAAM,CAAC,MAAM,EAAE,4BAA4B,GAAG,SAAS,CAAC,GACxD,SAAS,CAAC;gBACd,gDAAgD;gBAChD,QAAQ,CAAC,EAAE,aAAa,CAAC,wBAAwB,CAAC,GAAG,SAAS,CAAC;aAChE,GACD;gBACE,qDAAqD;gBACrD,QAAQ,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;aACnD,GACD,SAAS,CAAC;YAEd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAgCG;YACH,KAAK,CAAC,EAAE,aAAa,CACnB,iBAAiB,CAAC;gBAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;gBAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;aACnB,CAAC,CACH,CAAC;SACH,GACD,SAAS,CAAC;KACf,CAAC;CACH;AAmFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,qCAAqC,EAAE,EAAE,CACpD,qCAAqC,CAAC,KAAK,CAiD5C,CAAC;AAKF;;;;;GAKG;AACH,eAAO,MAAM,+CAA+C,EAAE,EAAE,CAC9D,IAAI,CAAC,qCAAqC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAStE,CAAC"}