@assistant-ui/react 0.15.17 → 0.15.19

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 (169) hide show
  1. package/README.md +8 -2
  2. package/dist/context/providers/ThreadViewportProvider.js +2 -2
  3. package/dist/context/providers/ThreadViewportProvider.js.map +1 -1
  4. package/dist/hooks/useToolCallElapsed.js.map +1 -1
  5. package/dist/index.d.ts +7 -4
  6. package/dist/index.js +5 -3
  7. package/dist/mcp-apps/McpAppRenderer.d.ts +30 -8
  8. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  9. package/dist/mcp-apps/McpAppRenderer.js +91 -47
  10. package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
  11. package/dist/mcp-apps/app-frame.d.ts.map +1 -1
  12. package/dist/mcp-apps/app-frame.js +57 -33
  13. package/dist/mcp-apps/app-frame.js.map +1 -1
  14. package/dist/mcp-apps/bridge.js +9 -4
  15. package/dist/mcp-apps/bridge.js.map +1 -1
  16. package/dist/mcp-apps/index.d.ts +2 -2
  17. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
  18. package/dist/primitives/assistantModal/AssistantModalRoot.js +47 -79
  19. package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
  20. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -1
  21. package/dist/primitives/composer/ComposerAttachmentDropzone.js +61 -138
  22. package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
  23. package/dist/primitives/composer/ComposerInput.js +3 -8
  24. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  25. package/dist/primitives/composer/ComposerInputPluginContext.d.ts +1 -2
  26. package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -1
  27. package/dist/primitives/composer/ComposerInputPluginContext.js +1 -6
  28. package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -1
  29. package/dist/primitives/composer/trigger/TriggerPopoverAction.js +46 -15
  30. package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -1
  31. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js +40 -10
  32. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -1
  33. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts +6 -0
  34. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts.map +1 -0
  35. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.js +9 -0
  36. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.js.map +1 -0
  37. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -1
  38. package/dist/primitives/composer/trigger/triggerKeyboardResource.js +53 -61
  39. package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -1
  40. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -1
  41. package/dist/primitives/composer/trigger/triggerNavigationResource.js +129 -141
  42. package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -1
  43. package/dist/primitives/message/MessageParts.js +2 -14
  44. package/dist/primitives/message/MessageParts.js.map +1 -1
  45. package/dist/primitives/message/MessagePartsGrouped.d.ts +3 -3
  46. package/dist/primitives/message/MessagePartsGrouped.js +2 -2
  47. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  48. package/dist/primitives/messagePart/MessagePartText.d.ts +2 -0
  49. package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -1
  50. package/dist/primitives/messagePart/MessagePartText.js +13 -36
  51. package/dist/primitives/messagePart/MessagePartText.js.map +1 -1
  52. package/dist/primitives/reasoning/useScrollLock.js +3 -1
  53. package/dist/primitives/reasoning/useScrollLock.js.map +1 -1
  54. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
  55. package/dist/primitives/thread/useThreadViewportAutoScroll.js +3 -3
  56. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  57. package/dist/sandbox-host/SandboxHost.d.ts.map +1 -1
  58. package/dist/sandbox-host/SandboxHost.js +36 -9
  59. package/dist/sandbox-host/SandboxHost.js.map +1 -1
  60. package/dist/unstable/useLiveCompletionAdapter.js +24 -2
  61. package/dist/unstable/useLiveCompletionAdapter.js.map +1 -1
  62. package/dist/unstable/useMentionAdapter.d.ts +9 -3
  63. package/dist/unstable/useMentionAdapter.d.ts.map +1 -1
  64. package/dist/unstable/useMentionAdapter.js +50 -43
  65. package/dist/unstable/useMentionAdapter.js.map +1 -1
  66. package/dist/unstable/useMessageStallDetection.d.ts +4 -5
  67. package/dist/unstable/useMessageStallDetection.d.ts.map +1 -1
  68. package/dist/unstable/useMessageStallDetection.js +16 -15
  69. package/dist/unstable/useMessageStallDetection.js.map +1 -1
  70. package/dist/unstable/useModelContextSnapshot.d.ts +34 -0
  71. package/dist/unstable/useModelContextSnapshot.d.ts.map +1 -0
  72. package/dist/unstable/useModelContextSnapshot.js +61 -0
  73. package/dist/unstable/useModelContextSnapshot.js.map +1 -0
  74. package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -1
  75. package/dist/unstable/useSlashCommandAdapter.js +2 -8
  76. package/dist/unstable/useSlashCommandAdapter.js.map +1 -1
  77. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts +14 -0
  78. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts.map +1 -0
  79. package/dist/unstable/webmcp/WebMcpRegistrationResource.js +85 -0
  80. package/dist/unstable/webmcp/WebMcpRegistrationResource.js.map +1 -0
  81. package/dist/unstable/webmcp/convertTools.d.ts +21 -0
  82. package/dist/unstable/webmcp/convertTools.d.ts.map +1 -0
  83. package/dist/unstable/webmcp/convertTools.js +161 -0
  84. package/dist/unstable/webmcp/convertTools.js.map +1 -0
  85. package/dist/unstable/webmcp/useWebMcpProvider.d.ts +21 -0
  86. package/dist/unstable/webmcp/useWebMcpProvider.d.ts.map +1 -0
  87. package/dist/unstable/webmcp/useWebMcpProvider.js +106 -0
  88. package/dist/unstable/webmcp/useWebMcpProvider.js.map +1 -0
  89. package/dist/unstable/webmcp/webmcp-host.d.ts +39 -0
  90. package/dist/unstable/webmcp/webmcp-host.d.ts.map +1 -0
  91. package/dist/unstable/webmcp/webmcp-host.js +29 -0
  92. package/dist/unstable/webmcp/webmcp-host.js.map +1 -0
  93. package/dist/utils/Primitive.d.ts +10 -2
  94. package/dist/utils/Primitive.d.ts.map +1 -1
  95. package/dist/utils/Primitive.js +25 -6
  96. package/dist/utils/Primitive.js.map +1 -1
  97. package/dist/utils/getSelectionMessageId.d.ts.map +1 -1
  98. package/dist/utils/getSelectionMessageId.js +17 -3
  99. package/dist/utils/getSelectionMessageId.js.map +1 -1
  100. package/package.json +13 -13
  101. package/src/context/providers/ThreadViewportProvider.tsx +2 -2
  102. package/src/hooks/useToolCallElapsed.ts +3 -0
  103. package/src/index.ts +14 -1
  104. package/src/mcp-apps/McpAppRenderer.test.tsx +253 -5
  105. package/src/mcp-apps/McpAppRenderer.tsx +147 -52
  106. package/src/mcp-apps/app-frame.test.tsx +437 -1
  107. package/src/mcp-apps/app-frame.tsx +76 -21
  108. package/src/mcp-apps/bridge.test.ts +98 -0
  109. package/src/mcp-apps/bridge.ts +14 -3
  110. package/src/mcp-apps/index.ts +5 -1
  111. package/src/primitives/assistantModal/AssistantModalRoot.test.tsx +123 -0
  112. package/src/primitives/assistantModal/AssistantModalRoot.tsx +11 -31
  113. package/src/primitives/assistantModal/AssistantModalTrigger.test.tsx +1 -16
  114. package/src/primitives/composer/ComposerAttachmentDropzone.test.tsx +43 -0
  115. package/src/primitives/composer/ComposerAttachmentDropzone.tsx +2 -10
  116. package/src/primitives/composer/ComposerInput.test.tsx +22 -0
  117. package/src/primitives/composer/ComposerInput.tsx +5 -9
  118. package/src/primitives/composer/ComposerInputPluginContext.tsx +0 -10
  119. package/src/primitives/composer/trigger/TriggerPopoverAction.tsx +4 -2
  120. package/src/primitives/composer/trigger/TriggerPopoverBehavior.test.tsx +109 -0
  121. package/src/primitives/composer/trigger/TriggerPopoverDirective.tsx +4 -2
  122. package/src/primitives/composer/trigger/matchesTriggerItemQuery.test.ts +52 -0
  123. package/src/primitives/composer/trigger/matchesTriggerItemQuery.ts +13 -0
  124. package/src/primitives/composer/trigger/triggerKeyboardResource.ts +13 -7
  125. package/src/primitives/composer/trigger/triggerNavigationResource.ts +8 -13
  126. package/src/primitives/message/MessageParts.tsx +1 -21
  127. package/src/primitives/message/MessagePartsGrouped.test.tsx +93 -0
  128. package/src/primitives/message/MessagePartsGrouped.tsx +6 -6
  129. package/src/primitives/messagePart/MessagePartText.test.tsx +69 -0
  130. package/src/primitives/messagePart/MessagePartText.tsx +22 -9
  131. package/src/primitives/reasoning/useScrollLock.test.tsx +129 -0
  132. package/src/primitives/reasoning/useScrollLock.ts +15 -1
  133. package/src/primitives/thread/useThreadViewportAutoScroll.test.tsx +38 -1
  134. package/src/primitives/thread/useThreadViewportAutoScroll.ts +7 -6
  135. package/src/sandbox-host/SandboxHost.test.tsx +160 -2
  136. package/src/sandbox-host/SandboxHost.tsx +50 -10
  137. package/src/tests/MessageParts.rendererOptions.test.tsx +117 -0
  138. package/src/tests/toolCallTiming.test.tsx +55 -1
  139. package/src/unstable/useComposerInputHistory.test.tsx +2 -1
  140. package/src/unstable/useLiveCompletionAdapter.test.tsx +202 -1
  141. package/src/unstable/useLiveCompletionAdapter.ts +38 -8
  142. package/src/unstable/useMentionAdapter.test.tsx +383 -0
  143. package/src/unstable/useMentionAdapter.ts +94 -57
  144. package/src/unstable/useMessageStallDetection.ts +26 -19
  145. package/src/unstable/useModelContextSnapshot.test.tsx +132 -0
  146. package/src/unstable/useModelContextSnapshot.ts +67 -0
  147. package/src/unstable/useSlashCommandAdapter.ts +2 -9
  148. package/src/unstable/webmcp/WebMcpRegistrationResource.ts +92 -0
  149. package/src/unstable/webmcp/__tests__/webmcp.fake.tsx +168 -0
  150. package/src/unstable/webmcp/convertTools.test.ts +553 -0
  151. package/src/unstable/webmcp/convertTools.ts +260 -0
  152. package/src/unstable/webmcp/useWebMcpProvider.test.tsx +466 -0
  153. package/src/unstable/webmcp/useWebMcpProvider.ts +148 -0
  154. package/src/unstable/webmcp/webmcp-host.test.ts +142 -0
  155. package/src/unstable/webmcp/webmcp-host.ts +83 -0
  156. package/src/utils/Primitive.test.tsx +46 -1
  157. package/src/utils/Primitive.tsx +37 -7
  158. package/src/utils/getSelectionMessageId.test.ts +176 -1
  159. package/src/utils/getSelectionMessageId.ts +21 -3
  160. package/dist/utils/invokeCallbackSafely.d.ts +0 -5
  161. package/dist/utils/invokeCallbackSafely.d.ts.map +0 -1
  162. package/dist/utils/invokeCallbackSafely.js +0 -15
  163. package/dist/utils/invokeCallbackSafely.js.map +0 -1
  164. package/dist/utils/useToolArgsFieldStatus.d.ts +0 -19
  165. package/dist/utils/useToolArgsFieldStatus.d.ts.map +0 -1
  166. package/dist/utils/useToolArgsFieldStatus.js +0 -23
  167. package/dist/utils/useToolArgsFieldStatus.js.map +0 -1
  168. package/src/utils/invokeCallbackSafely.ts +0 -11
  169. package/src/utils/useToolArgsFieldStatus.ts +0 -18
@@ -1,201 +1,189 @@
1
+ import { matchesTriggerItemQuery } from "./matchesTriggerItemQuery.js";
1
2
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
2
- import { useEffect, useEffectEvent, useState } from "@assistant-ui/tap/react-shim";
3
+ import { useEffectEvent, useState } from "@assistant-ui/tap/react-shim";
3
4
  import { resource } from "@assistant-ui/tap";
4
5
  //#region src/primitives/composer/trigger/triggerNavigationResource.ts
5
- function matchesQuery(item, lower) {
6
- return item.id.toLowerCase().includes(lower) || item.label.toLowerCase().includes(lower) || (item.description?.toLowerCase().includes(lower) ?? false);
7
- }
8
6
  /**
9
7
  * Computes categories, items, search results, and navigation state from the
10
8
  * adapter + current query. Pure derivation — no side effects on the composer.
11
9
  */
12
10
  const useTriggerNavigationResource = (t0) => {
13
- const $ = c(38);
11
+ const $ = c(35);
14
12
  const { adapter, query, open } = t0;
15
13
  const [activeCategoryId, setActiveCategoryId] = useState(null);
16
- let t1;
17
- let t2;
18
- if ($[0] !== open) {
19
- t1 = () => {
20
- if (!open) setActiveCategoryId(null);
21
- };
22
- t2 = [open];
23
- $[0] = open;
24
- $[1] = t1;
25
- $[2] = t2;
26
- } else {
27
- t1 = $[1];
28
- t2 = $[2];
14
+ const [wasOpen, setWasOpen] = useState(open);
15
+ if (wasOpen !== open) {
16
+ setWasOpen(open);
17
+ if (!open) setActiveCategoryId(null);
29
18
  }
30
- useEffect(t1, t2);
31
- let t3;
19
+ let t1;
32
20
  bb0: {
33
21
  if (!open || !adapter) {
34
- let t4;
35
- if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
36
- t4 = [];
37
- $[3] = t4;
38
- } else t4 = $[3];
39
- t3 = t4;
22
+ let t2;
23
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
24
+ t2 = [];
25
+ $[0] = t2;
26
+ } else t2 = $[0];
27
+ t1 = t2;
40
28
  break bb0;
41
29
  }
42
- let t4;
43
- if ($[4] !== adapter) {
44
- t4 = adapter.categories();
45
- $[4] = adapter;
46
- $[5] = t4;
47
- } else t4 = $[5];
48
- t3 = t4;
30
+ let t2;
31
+ if ($[1] !== adapter) {
32
+ t2 = adapter.categories();
33
+ $[1] = adapter;
34
+ $[2] = t2;
35
+ } else t2 = $[2];
36
+ t1 = t2;
49
37
  }
50
- const categories = t3;
38
+ const categories = t1;
51
39
  const effectiveActiveCategoryId = open ? activeCategoryId : null;
52
- let t4;
40
+ let t2;
53
41
  bb1: {
54
42
  if (!effectiveActiveCategoryId || !adapter) {
55
- let t5;
56
- if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
57
- t5 = [];
58
- $[6] = t5;
59
- } else t5 = $[6];
60
- t4 = t5;
43
+ let t3;
44
+ if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
45
+ t3 = [];
46
+ $[3] = t3;
47
+ } else t3 = $[3];
48
+ t2 = t3;
61
49
  break bb1;
62
50
  }
63
- let t5;
64
- if ($[7] !== adapter || $[8] !== effectiveActiveCategoryId) {
65
- t5 = adapter.categoryItems(effectiveActiveCategoryId);
66
- $[7] = adapter;
67
- $[8] = effectiveActiveCategoryId;
68
- $[9] = t5;
69
- } else t5 = $[9];
70
- t4 = t5;
51
+ let t3;
52
+ if ($[4] !== adapter || $[5] !== effectiveActiveCategoryId) {
53
+ t3 = adapter.categoryItems(effectiveActiveCategoryId);
54
+ $[4] = adapter;
55
+ $[5] = effectiveActiveCategoryId;
56
+ $[6] = t3;
57
+ } else t3 = $[6];
58
+ t2 = t3;
71
59
  }
72
- const allItems = t4;
73
- let t5;
60
+ const allItems = t2;
61
+ let t3;
74
62
  bb2: {
75
63
  if (!open || !adapter || effectiveActiveCategoryId) {
76
- t5 = null;
64
+ t3 = null;
77
65
  break bb2;
78
66
  }
79
67
  if (!query && categories.length > 0) {
80
- t5 = null;
68
+ t3 = null;
81
69
  break bb2;
82
70
  }
83
71
  if (adapter.search) {
84
- let t6;
85
- if ($[10] !== adapter || $[11] !== query) {
86
- t6 = adapter.search(query);
87
- $[10] = adapter;
88
- $[11] = query;
89
- $[12] = t6;
90
- } else t6 = $[12];
91
- t5 = t6;
72
+ let t4;
73
+ if ($[7] !== adapter || $[8] !== query) {
74
+ t4 = adapter.search(query);
75
+ $[7] = adapter;
76
+ $[8] = query;
77
+ $[9] = t4;
78
+ } else t4 = $[9];
79
+ t3 = t4;
92
80
  break bb2;
93
81
  }
94
82
  let all;
95
- if ($[13] !== adapter || $[14] !== categories || $[15] !== query) {
83
+ if ($[10] !== adapter || $[11] !== categories || $[12] !== query) {
96
84
  all = [];
97
85
  const lower = query.toLowerCase();
98
- for (const cat of categories) for (const item of adapter.categoryItems(cat.id)) if (matchesQuery(item, lower)) all.push(item);
99
- $[13] = adapter;
100
- $[14] = categories;
101
- $[15] = query;
102
- $[16] = all;
103
- } else all = $[16];
104
- t5 = all;
86
+ for (const cat of categories) for (const item of adapter.categoryItems(cat.id)) if (matchesTriggerItemQuery(item, lower)) all.push(item);
87
+ $[10] = adapter;
88
+ $[11] = categories;
89
+ $[12] = query;
90
+ $[13] = all;
91
+ } else all = $[13];
92
+ t3 = all;
105
93
  }
106
- const searchResults = t5;
94
+ const searchResults = t3;
107
95
  const isSearchMode = searchResults !== null;
108
- let t6;
96
+ let t4;
109
97
  bb3: {
110
98
  if (isSearchMode) {
111
- let t7;
112
- if ($[17] === Symbol.for("react.memo_cache_sentinel")) {
113
- t7 = [];
114
- $[17] = t7;
115
- } else t7 = $[17];
116
- t6 = t7;
99
+ let t5;
100
+ if ($[14] === Symbol.for("react.memo_cache_sentinel")) {
101
+ t5 = [];
102
+ $[14] = t5;
103
+ } else t5 = $[14];
104
+ t4 = t5;
117
105
  break bb3;
118
106
  }
119
107
  if (!query) {
120
- t6 = categories;
108
+ t4 = categories;
121
109
  break bb3;
122
110
  }
123
- let t7;
124
- if ($[18] !== categories || $[19] !== query) {
111
+ let t5;
112
+ if ($[15] !== categories || $[16] !== query) {
125
113
  const lower_0 = query.toLowerCase();
126
- t7 = categories.filter((cat_0) => cat_0.label.toLowerCase().includes(lower_0));
127
- $[18] = categories;
128
- $[19] = query;
129
- $[20] = t7;
130
- } else t7 = $[20];
131
- t6 = t7;
114
+ t5 = categories.filter((cat_0) => cat_0.label.toLowerCase().includes(lower_0));
115
+ $[15] = categories;
116
+ $[16] = query;
117
+ $[17] = t5;
118
+ } else t5 = $[17];
119
+ t4 = t5;
132
120
  }
133
- const filteredCategories = t6;
134
- let t7;
121
+ const filteredCategories = t4;
122
+ let t5;
135
123
  bb4: {
136
124
  if (isSearchMode) {
137
- let t8;
138
- if ($[21] !== searchResults) {
139
- t8 = searchResults ?? [];
140
- $[21] = searchResults;
141
- $[22] = t8;
142
- } else t8 = $[22];
143
- t7 = t8;
125
+ let t6;
126
+ if ($[18] !== searchResults) {
127
+ t6 = searchResults ?? [];
128
+ $[18] = searchResults;
129
+ $[19] = t6;
130
+ } else t6 = $[19];
131
+ t5 = t6;
144
132
  break bb4;
145
133
  }
146
134
  if (!query) {
147
- t7 = allItems;
135
+ t5 = allItems;
148
136
  break bb4;
149
137
  }
150
- let t8;
151
- if ($[23] !== allItems || $[24] !== query) {
138
+ let t6;
139
+ if ($[20] !== allItems || $[21] !== query) {
152
140
  const lower_1 = query.toLowerCase();
153
- t8 = allItems.filter((item_0) => matchesQuery(item_0, lower_1));
154
- $[23] = allItems;
155
- $[24] = query;
156
- $[25] = t8;
157
- } else t8 = $[25];
158
- t7 = t8;
141
+ t6 = allItems.filter((item_0) => matchesTriggerItemQuery(item_0, lower_1));
142
+ $[20] = allItems;
143
+ $[21] = query;
144
+ $[22] = t6;
145
+ } else t6 = $[22];
146
+ t5 = t6;
159
147
  }
160
- const filteredItems = t7;
161
- let t8;
148
+ const filteredItems = t5;
149
+ let t6;
162
150
  bb5: {
163
151
  if (isSearchMode) {
164
- let t9;
165
- if ($[26] !== searchResults) {
166
- t9 = searchResults ?? [];
167
- $[26] = searchResults;
168
- $[27] = t9;
169
- } else t9 = $[27];
170
- t8 = t9;
152
+ let t7;
153
+ if ($[23] !== searchResults) {
154
+ t7 = searchResults ?? [];
155
+ $[23] = searchResults;
156
+ $[24] = t7;
157
+ } else t7 = $[24];
158
+ t6 = t7;
171
159
  break bb5;
172
160
  }
173
161
  if (effectiveActiveCategoryId) {
174
- t8 = filteredItems;
162
+ t6 = filteredItems;
175
163
  break bb5;
176
164
  }
177
- t8 = filteredCategories;
165
+ t6 = filteredCategories;
178
166
  }
179
- const navigableList = t8;
180
- let t9;
181
- if ($[28] === Symbol.for("react.memo_cache_sentinel")) {
182
- t9 = (categoryId) => {
167
+ const navigableList = t6;
168
+ let t7;
169
+ if ($[25] === Symbol.for("react.memo_cache_sentinel")) {
170
+ t7 = (categoryId) => {
183
171
  setActiveCategoryId(categoryId);
184
172
  };
185
- $[28] = t9;
186
- } else t9 = $[28];
187
- const selectCategory = useEffectEvent(t9);
188
- let t10;
189
- if ($[29] === Symbol.for("react.memo_cache_sentinel")) {
190
- t10 = () => {
173
+ $[25] = t7;
174
+ } else t7 = $[25];
175
+ const selectCategory = useEffectEvent(t7);
176
+ let t8;
177
+ if ($[26] === Symbol.for("react.memo_cache_sentinel")) {
178
+ t8 = () => {
191
179
  setActiveCategoryId(null);
192
180
  };
193
- $[29] = t10;
194
- } else t10 = $[29];
195
- const goBack = useEffectEvent(t10);
196
- let t11;
197
- if ($[30] !== effectiveActiveCategoryId || $[31] !== filteredCategories || $[32] !== filteredItems || $[33] !== goBack || $[34] !== isSearchMode || $[35] !== navigableList || $[36] !== selectCategory) {
198
- t11 = {
181
+ $[26] = t8;
182
+ } else t8 = $[26];
183
+ const goBack = useEffectEvent(t8);
184
+ let t9;
185
+ if ($[27] !== effectiveActiveCategoryId || $[28] !== filteredCategories || $[29] !== filteredItems || $[30] !== goBack || $[31] !== isSearchMode || $[32] !== navigableList || $[33] !== selectCategory) {
186
+ t9 = {
199
187
  categories: filteredCategories,
200
188
  items: filteredItems,
201
189
  isSearchMode,
@@ -204,16 +192,16 @@ const useTriggerNavigationResource = (t0) => {
204
192
  selectCategory,
205
193
  goBack
206
194
  };
207
- $[30] = effectiveActiveCategoryId;
208
- $[31] = filteredCategories;
209
- $[32] = filteredItems;
210
- $[33] = goBack;
211
- $[34] = isSearchMode;
212
- $[35] = navigableList;
213
- $[36] = selectCategory;
214
- $[37] = t11;
215
- } else t11 = $[37];
216
- return t11;
195
+ $[27] = effectiveActiveCategoryId;
196
+ $[28] = filteredCategories;
197
+ $[29] = filteredItems;
198
+ $[30] = goBack;
199
+ $[31] = isSearchMode;
200
+ $[32] = navigableList;
201
+ $[33] = selectCategory;
202
+ $[34] = t9;
203
+ } else t9 = $[34];
204
+ return t9;
217
205
  };
218
206
  const TriggerNavigationResource = resource(useTriggerNavigationResource);
219
207
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"triggerNavigationResource.js","names":["useEffect","useEffectEvent","useMemo","useState","resource","Unstable_TriggerAdapter","Unstable_TriggerCategory","Unstable_TriggerItem","matchesQuery","item","lower","id","toLowerCase","includes","label","description","TriggerNavigationResourceOutput","categories","items","isSearchMode","activeCategoryId","navigableList","selectCategory","categoryId","goBack","useTriggerNavigationResource","t0","$","_c","adapter","query","open","setActiveCategoryId","t1","t2","t3","bb0","t4","Symbol","for","effectiveActiveCategoryId","bb1","t5","categoryItems","allItems","bb2","length","search","t6","all","cat","push","searchResults","bb3","t7","lower_0","filter","cat_0","filteredCategories","bb4","t8","lower_1","item_0","filteredItems","bb5","t9","t10","t11","TriggerNavigationResource"],"sources":["../../../../src/primitives/composer/trigger/triggerNavigationResource.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_TriggerAdapter,\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\n\nfunction matchesQuery(item: Unstable_TriggerItem, lower: string): boolean {\n return (\n item.id.toLowerCase().includes(lower) ||\n item.label.toLowerCase().includes(lower) ||\n (item.description?.toLowerCase().includes(lower) ?? false)\n );\n}\n\nexport type TriggerNavigationResourceOutput = {\n /** Filtered categories visible in the list (empty in search mode). */\n readonly categories: readonly Unstable_TriggerCategory[];\n /** Filtered items visible in the list. */\n readonly items: readonly Unstable_TriggerItem[];\n /** `true` when the current list is search results rather than categories. */\n readonly isSearchMode: boolean;\n /** Currently drilled-into category id (or `null` for the top level). */\n readonly activeCategoryId: string | null;\n /** Flat list used for keyboard navigation (categories or items). */\n readonly navigableList: readonly (\n | Unstable_TriggerCategory\n | Unstable_TriggerItem\n )[];\n /** Drill into a category. */\n selectCategory(categoryId: string): void;\n /** Return to the top-level category list. */\n goBack(): void;\n};\n\n/**\n * Computes categories, items, search results, and navigation state from the\n * adapter + current query. Pure derivation — no side effects on the composer.\n */\nconst useTriggerNavigationResource = ({\n adapter,\n query,\n open,\n}: {\n adapter: Unstable_TriggerAdapter | undefined;\n query: string;\n open: boolean;\n}): TriggerNavigationResourceOutput => {\n const [activeCategoryId, setActiveCategoryId] = useState<string | null>(null);\n\n useEffect(() => {\n if (!open) setActiveCategoryId(null);\n }, [open]);\n\n const categories = useMemo<readonly Unstable_TriggerCategory[]>(() => {\n if (!open || !adapter) return [];\n return adapter.categories();\n }, [open, adapter]);\n\n const effectiveActiveCategoryId = open ? activeCategoryId : null;\n\n const allItems = useMemo<readonly Unstable_TriggerItem[]>(() => {\n if (!effectiveActiveCategoryId || !adapter) return [];\n return adapter.categoryItems(effectiveActiveCategoryId);\n }, [effectiveActiveCategoryId, adapter]);\n\n const searchResults = useMemo<readonly Unstable_TriggerItem[] | null>(() => {\n if (!open || !adapter || effectiveActiveCategoryId) return null;\n // If categories exist and query is empty, show categories first (not search)\n if (!query && categories.length > 0) return null;\n if (adapter.search) return adapter.search(query);\n\n // fallback: no adapter.search\n const all: Unstable_TriggerItem[] = [];\n const lower = query.toLowerCase();\n for (const cat of categories) {\n for (const item of adapter.categoryItems(cat.id)) {\n if (matchesQuery(item, lower)) {\n all.push(item);\n }\n }\n }\n return all;\n }, [open, adapter, query, effectiveActiveCategoryId, categories]);\n\n const isSearchMode = searchResults !== null;\n\n const filteredCategories = useMemo(() => {\n if (isSearchMode) return [];\n if (!query) return categories;\n const lower = query.toLowerCase();\n return categories.filter((cat) => cat.label.toLowerCase().includes(lower));\n }, [categories, query, isSearchMode]);\n\n const filteredItems = useMemo(() => {\n if (isSearchMode) return searchResults ?? [];\n if (!query) return allItems;\n const lower = query.toLowerCase();\n return allItems.filter((item) => matchesQuery(item, lower));\n }, [allItems, query, isSearchMode, searchResults]);\n\n const navigableList = useMemo(() => {\n if (isSearchMode) return searchResults ?? [];\n if (effectiveActiveCategoryId) return filteredItems;\n return filteredCategories;\n }, [\n isSearchMode,\n searchResults,\n effectiveActiveCategoryId,\n filteredItems,\n filteredCategories,\n ]);\n\n const selectCategory = useEffectEvent((categoryId: string) => {\n setActiveCategoryId(categoryId);\n });\n\n const goBack = useEffectEvent(() => {\n setActiveCategoryId(null);\n });\n\n return {\n categories: filteredCategories,\n items: filteredItems,\n isSearchMode,\n activeCategoryId: effectiveActiveCategoryId,\n navigableList,\n selectCategory,\n goBack,\n };\n};\n\nexport const TriggerNavigationResource = resource(useTriggerNavigationResource);\n"],"mappings":"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"}
1
+ {"version":3,"file":"triggerNavigationResource.js","names":["useEffectEvent","useMemo","useState","resource","Unstable_TriggerAdapter","Unstable_TriggerCategory","Unstable_TriggerItem","matchesTriggerItemQuery","TriggerNavigationResourceOutput","categories","items","isSearchMode","activeCategoryId","navigableList","selectCategory","categoryId","goBack","useTriggerNavigationResource","t0","$","_c","adapter","query","open","setActiveCategoryId","wasOpen","setWasOpen","t1","bb0","t2","Symbol","for","effectiveActiveCategoryId","bb1","t3","categoryItems","allItems","bb2","length","search","t4","all","lower","toLowerCase","cat","item","id","push","searchResults","bb3","t5","lower_0","filter","cat_0","label","includes","filteredCategories","bb4","t6","lower_1","item_0","filteredItems","bb5","t7","t8","t9","TriggerNavigationResource"],"sources":["../../../../src/primitives/composer/trigger/triggerNavigationResource.ts"],"sourcesContent":["import { useEffectEvent, useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_TriggerAdapter,\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport { matchesTriggerItemQuery } from \"./matchesTriggerItemQuery\";\n\nexport type TriggerNavigationResourceOutput = {\n /** Filtered categories visible in the list (empty in search mode). */\n readonly categories: readonly Unstable_TriggerCategory[];\n /** Filtered items visible in the list. */\n readonly items: readonly Unstable_TriggerItem[];\n /** `true` when the current list is search results rather than categories. */\n readonly isSearchMode: boolean;\n /** Currently drilled-into category id (or `null` for the top level). */\n readonly activeCategoryId: string | null;\n /** Flat list used for keyboard navigation (categories or items). */\n readonly navigableList: readonly (\n | Unstable_TriggerCategory\n | Unstable_TriggerItem\n )[];\n /** Drill into a category. */\n selectCategory(categoryId: string): void;\n /** Return to the top-level category list. */\n goBack(): void;\n};\n\n/**\n * Computes categories, items, search results, and navigation state from the\n * adapter + current query. Pure derivation — no side effects on the composer.\n */\nconst useTriggerNavigationResource = ({\n adapter,\n query,\n open,\n}: {\n adapter: Unstable_TriggerAdapter | undefined;\n query: string;\n open: boolean;\n}): TriggerNavigationResourceOutput => {\n const [activeCategoryId, setActiveCategoryId] = useState<string | null>(null);\n const [wasOpen, setWasOpen] = useState(open);\n\n if (wasOpen !== open) {\n setWasOpen(open);\n if (!open) setActiveCategoryId(null);\n }\n\n const categories = useMemo<readonly Unstable_TriggerCategory[]>(() => {\n if (!open || !adapter) return [];\n return adapter.categories();\n }, [open, adapter]);\n\n const effectiveActiveCategoryId = open ? activeCategoryId : null;\n\n const allItems = useMemo<readonly Unstable_TriggerItem[]>(() => {\n if (!effectiveActiveCategoryId || !adapter) return [];\n return adapter.categoryItems(effectiveActiveCategoryId);\n }, [effectiveActiveCategoryId, adapter]);\n\n const searchResults = useMemo<readonly Unstable_TriggerItem[] | null>(() => {\n if (!open || !adapter || effectiveActiveCategoryId) return null;\n // If categories exist and query is empty, show categories first (not search)\n if (!query && categories.length > 0) return null;\n if (adapter.search) return adapter.search(query);\n\n // fallback: no adapter.search\n const all: Unstable_TriggerItem[] = [];\n const lower = query.toLowerCase();\n for (const cat of categories) {\n for (const item of adapter.categoryItems(cat.id)) {\n if (matchesTriggerItemQuery(item, lower)) {\n all.push(item);\n }\n }\n }\n return all;\n }, [open, adapter, query, effectiveActiveCategoryId, categories]);\n\n const isSearchMode = searchResults !== null;\n\n const filteredCategories = useMemo(() => {\n if (isSearchMode) return [];\n if (!query) return categories;\n const lower = query.toLowerCase();\n return categories.filter((cat) => cat.label.toLowerCase().includes(lower));\n }, [categories, query, isSearchMode]);\n\n const filteredItems = useMemo(() => {\n if (isSearchMode) return searchResults ?? [];\n if (!query) return allItems;\n const lower = query.toLowerCase();\n return allItems.filter((item) => matchesTriggerItemQuery(item, lower));\n }, [allItems, query, isSearchMode, searchResults]);\n\n const navigableList = useMemo(() => {\n if (isSearchMode) return searchResults ?? [];\n if (effectiveActiveCategoryId) return filteredItems;\n return filteredCategories;\n }, [\n isSearchMode,\n searchResults,\n effectiveActiveCategoryId,\n filteredItems,\n filteredCategories,\n ]);\n\n const selectCategory = useEffectEvent((categoryId: string) => {\n setActiveCategoryId(categoryId);\n });\n\n const goBack = useEffectEvent(() => {\n setActiveCategoryId(null);\n });\n\n return {\n categories: filteredCategories,\n items: filteredItems,\n isSearchMode,\n activeCategoryId: effectiveActiveCategoryId,\n navigableList,\n selectCategory,\n goBack,\n };\n};\n\nexport const TriggerNavigationResource = resource(useTriggerNavigationResource);\n"],"mappings":"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"}
@@ -45,21 +45,9 @@ const MessagePrimitiveParts = (props) => {
45
45
  let t0;
46
46
  if ($[5] !== components) {
47
47
  t0 = components ? {
48
+ ...components,
48
49
  Text: components.Text ?? webDefaultComponents.Text,
49
- Image: components.Image ?? webDefaultComponents.Image,
50
- Reasoning: components.Reasoning ?? messagePartsDefaultComponents.Reasoning,
51
- Source: components.Source ?? messagePartsDefaultComponents.Source,
52
- File: components.File ?? messagePartsDefaultComponents.File,
53
- Unstable_Audio: components.Unstable_Audio ?? messagePartsDefaultComponents.Unstable_Audio,
54
- ..."ChainOfThought" in components ? { ChainOfThought: components.ChainOfThought } : {
55
- tools: components.tools,
56
- data: components.data,
57
- ToolGroup: components.ToolGroup ?? messagePartsDefaultComponents.ToolGroup,
58
- ReasoningGroup: components.ReasoningGroup ?? messagePartsDefaultComponents.ReasoningGroup
59
- },
60
- Empty: components.Empty,
61
- Quote: components.Quote,
62
- generativeUI: components.generativeUI
50
+ Image: components.Image ?? webDefaultComponents.Image
63
51
  } : webDefaultComponents;
64
52
  $[5] = components;
65
53
  $[6] = t0;
@@ -1 +1 @@
1
- {"version":3,"file":"MessageParts.js","names":["c","_c","FC","MessagePrimitiveParts","MessagePrimitivePartsBase","MessagePartComponent","MessagePartComponentBase","MessagePrimitivePartByIndex","MessagePrimitivePartByIndexBase","messagePartsDefaultComponents","MessagePartPrimitiveText","MessagePartPrimitiveImage","MessagePartPrimitiveInProgress","webDefaultComponents","Text","whiteSpace","fontFamily","Image","Props","props","$","t0","children","components","rest","Reasoning","Source","File","Unstable_Audio","ChainOfThought","tools","data","ToolGroup","ReasoningGroup","Empty","Quote","generativeUI","merged","t1","t2","displayName"],"sources":["../../../src/primitives/message/MessageParts.tsx"],"sourcesContent":["\"use client\";\n\nimport type { FC } from \"react\";\nimport {\n MessagePrimitiveParts as MessagePrimitivePartsBase,\n MessagePartComponent as MessagePartComponentBase,\n MessagePrimitivePartByIndex as MessagePrimitivePartByIndexBase,\n messagePartsDefaultComponents,\n} from \"@assistant-ui/core/react\";\nimport { MessagePartPrimitiveText } from \"../messagePart/MessagePartText\";\nimport { MessagePartPrimitiveImage } from \"../messagePart/MessagePartImage\";\nimport { MessagePartPrimitiveInProgress } from \"../messagePart/MessagePartInProgress\";\n\nconst webDefaultComponents = {\n ...messagePartsDefaultComponents,\n Text: () => (\n <p style={{ whiteSpace: \"pre-line\" }}>\n <MessagePartPrimitiveText />\n <MessagePartPrimitiveInProgress>\n <span style={{ fontFamily: \"revert\" }}>{\" \\u25CF\"}</span>\n </MessagePartPrimitiveInProgress>\n </p>\n ),\n Image: () => <MessagePartPrimitiveImage />,\n} satisfies MessagePrimitiveParts.Props[\"components\"];\n\nexport namespace MessagePrimitiveParts {\n export type Props = MessagePrimitivePartsBase.Props;\n}\n\n/**\n * Renders the parts of a message with web-specific default components.\n */\nexport const MessagePrimitiveParts: FC<MessagePrimitiveParts.Props> = (\n props,\n) => {\n if (\"children\" in props) {\n return (\n <MessagePrimitivePartsBase>{props.children}</MessagePrimitivePartsBase>\n );\n }\n\n const { components, ...rest } = props;\n const merged = components\n ? {\n Text: components.Text ?? webDefaultComponents.Text,\n Image: components.Image ?? webDefaultComponents.Image,\n Reasoning:\n components.Reasoning ?? messagePartsDefaultComponents.Reasoning,\n Source: components.Source ?? messagePartsDefaultComponents.Source,\n File: components.File ?? messagePartsDefaultComponents.File,\n Unstable_Audio:\n components.Unstable_Audio ??\n messagePartsDefaultComponents.Unstable_Audio,\n ...(\"ChainOfThought\" in components\n ? { ChainOfThought: components.ChainOfThought }\n : {\n tools: components.tools,\n data: components.data,\n ToolGroup:\n components.ToolGroup ?? messagePartsDefaultComponents.ToolGroup,\n ReasoningGroup:\n components.ReasoningGroup ??\n messagePartsDefaultComponents.ReasoningGroup,\n }),\n Empty: components.Empty,\n Quote: components.Quote,\n generativeUI: components.generativeUI,\n }\n : webDefaultComponents;\n\n return <MessagePrimitivePartsBase components={merged as any} {...rest} />;\n};\n\nMessagePrimitiveParts.displayName = \"MessagePrimitive.Parts\";\n\n// Re-export everything else unchanged\nexport {\n MessagePartComponentBase as MessagePartComponent,\n MessagePrimitivePartByIndexBase as MessagePrimitivePartByIndex,\n};\n"],"mappings":";;;;;;;;AAaA,MAAMa,uBAAuB;CAC3B,GAAGJ;CACHK,YACE,qBAAC,KAAD;EAAG,OAAO,EAAEC,YAAY,WAAW;EAAnC,UAAA,CACE,oBAAC,0BAAD,CAAyB,CAAA,GACzB,oBAAC,gCAAD,EAAA,UACE,oBAAC,QAAD;GAAM,OAAO,EAAEC,YAAY,SAAS;GAAI,UAAA;EAAgB,CAAA,EAC1B,CAAA,CAC/B;;CAELC,aAAa,oBAAC,2BAAD,CAA0B,CAAA;AACzC;;;;AASA,MAAad,yBAAyDgB,UAAA;CAAA,MAAAC,IAAAnB,EAAA,EAAA;CAGpE,IAAI,cAAckB,OAAK;EAAA,IAAAE;EAAA,IAAAD,EAAA,OAAAD,MAAAG,UAAA;GAEnBD,KAAA,oBAAC,yBAAD,EAAA,UAA4BF,MAAKG,SAAP,CAAA;GAA6CF,EAAA,KAAAD,MAAAG;GAAAF,EAAA,KAAAC;EAAA,OAAAA,KAAAD,EAAA;EAAA,OAAvEC;CAAuE;CAE1E,IAAAE;CAAA,IAAAC;CAAA,IAAAJ,EAAA,OAAAD,OAAA;EAED,CAAA,CAAAI,YAAA,GAAAC,QAAgCL;EAAMC,EAAA,KAAAD;EAAAC,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAA;EAAAD,aAAAH,EAAA;EAAAI,OAAAJ,EAAA;CAAA;CAAA,IAAAC;CAAA,IAAAD,EAAA,OAAAG,YAAA;EACvBF,KAAAE,aAAA;GAAAT,MAEHS,WAAUT,QAASD,qBAAoBC;GAAKG,OAC3CM,WAAUN,SAAUJ,qBAAoBI;GAAMQ,WAEnDF,WAAUE,aAAchB,8BAA6BgB;GAAUC,QACzDH,WAAUG,UAAWjB,8BAA6BiB;GAAOC,MAC3DJ,WAAUI,QAASlB,8BAA6BkB;GAAKC,gBAEzDL,WAAUK,kBACVnB,8BAA6BmB;GAAe,GAC1C,oBAAoBL,aAApB,EAAAM,gBACkBN,WAAUM,eAS5B,IAVA;IAAAC,OAGSP,WAAUO;IAAMC,MACjBR,WAAUQ;IAAKC,WAEnBT,WAAUS,aAAcvB,8BAA6BuB;IAAUC,gBAE/DV,WAAUU,kBACVxB,8BAA6BwB;GACjC;GAACC,OACEX,WAAUW;GAAMC,OAChBZ,WAAUY;GAAMC,cACTb,WAAUa;EAEP,IA1BRvB;EA0BSO,EAAA,KAAAG;EAAAH,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAEsB,MAAAkB,KAAAD;CAAa,IAAAE;CAAA,IAAAnB,EAAA,OAAAI,QAAAJ,EAAA,OAAAkB,IAAA;EAApDC,KAAA,oBAAC,yBAAD;GAAuC,YAAAD;GAAa,GAAMd;EAAI,CAAA;EAAIJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAkB;EAAAlB,EAAA,KAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAAA,OAAlEmB;AAAkE;AAG3EpC,sBAAsBqC,cAAc"}
1
+ {"version":3,"file":"MessageParts.js","names":["c","_c","FC","MessagePrimitiveParts","MessagePrimitivePartsBase","MessagePartComponent","MessagePartComponentBase","MessagePrimitivePartByIndex","MessagePrimitivePartByIndexBase","messagePartsDefaultComponents","MessagePartPrimitiveText","MessagePartPrimitiveImage","MessagePartPrimitiveInProgress","webDefaultComponents","Text","whiteSpace","fontFamily","Image","Props","props","$","t0","children","components","rest","merged","t1","t2","displayName"],"sources":["../../../src/primitives/message/MessageParts.tsx"],"sourcesContent":["\"use client\";\n\nimport type { FC } from \"react\";\nimport {\n MessagePrimitiveParts as MessagePrimitivePartsBase,\n MessagePartComponent as MessagePartComponentBase,\n MessagePrimitivePartByIndex as MessagePrimitivePartByIndexBase,\n messagePartsDefaultComponents,\n} from \"@assistant-ui/core/react\";\nimport { MessagePartPrimitiveText } from \"../messagePart/MessagePartText\";\nimport { MessagePartPrimitiveImage } from \"../messagePart/MessagePartImage\";\nimport { MessagePartPrimitiveInProgress } from \"../messagePart/MessagePartInProgress\";\n\nconst webDefaultComponents = {\n ...messagePartsDefaultComponents,\n Text: () => (\n <p style={{ whiteSpace: \"pre-line\" }}>\n <MessagePartPrimitiveText />\n <MessagePartPrimitiveInProgress>\n <span style={{ fontFamily: \"revert\" }}>{\" \\u25CF\"}</span>\n </MessagePartPrimitiveInProgress>\n </p>\n ),\n Image: () => <MessagePartPrimitiveImage />,\n} satisfies MessagePrimitiveParts.Props[\"components\"];\n\nexport namespace MessagePrimitiveParts {\n export type Props = MessagePrimitivePartsBase.Props;\n}\n\n/**\n * Renders the parts of a message with web-specific default components.\n */\nexport const MessagePrimitiveParts: FC<MessagePrimitiveParts.Props> = (\n props,\n) => {\n if (\"children\" in props) {\n return (\n <MessagePrimitivePartsBase>{props.children}</MessagePrimitivePartsBase>\n );\n }\n\n const { components, ...rest } = props;\n const merged = components\n ? {\n ...components,\n Text: components.Text ?? webDefaultComponents.Text,\n Image: components.Image ?? webDefaultComponents.Image,\n }\n : webDefaultComponents;\n\n return <MessagePrimitivePartsBase components={merged as any} {...rest} />;\n};\n\nMessagePrimitiveParts.displayName = \"MessagePrimitive.Parts\";\n\n// Re-export everything else unchanged\nexport {\n MessagePartComponentBase as MessagePartComponent,\n MessagePrimitivePartByIndexBase as MessagePrimitivePartByIndex,\n};\n"],"mappings":";;;;;;;;AAaA,MAAMa,uBAAuB;CAC3B,GAAGJ;CACHK,YACE,qBAAC,KAAD;EAAG,OAAO,EAAEC,YAAY,WAAW;EAAnC,UAAA,CACE,oBAAC,0BAAD,CAAyB,CAAA,GACzB,oBAAC,gCAAD,EAAA,UACE,oBAAC,QAAD;GAAM,OAAO,EAAEC,YAAY,SAAS;GAAI,UAAA;EAAgB,CAAA,EAC1B,CAAA,CAC/B;;CAELC,aAAa,oBAAC,2BAAD,CAA0B,CAAA;AACzC;;;;AASA,MAAad,yBAAyDgB,UAAA;CAAA,MAAAC,IAAAnB,EAAA,EAAA;CAGpE,IAAI,cAAckB,OAAK;EAAA,IAAAE;EAAA,IAAAD,EAAA,OAAAD,MAAAG,UAAA;GAEnBD,KAAA,oBAAC,yBAAD,EAAA,UAA4BF,MAAKG,SAAP,CAAA;GAA6CF,EAAA,KAAAD,MAAAG;GAAAF,EAAA,KAAAC;EAAA,OAAAA,KAAAD,EAAA;EAAA,OAAvEC;CAAuE;CAE1E,IAAAE;CAAA,IAAAC;CAAA,IAAAJ,EAAA,OAAAD,OAAA;EAED,CAAA,CAAAI,YAAA,GAAAC,QAAgCL;EAAMC,EAAA,KAAAD;EAAAC,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAA;EAAAD,aAAAH,EAAA;EAAAI,OAAAJ,EAAA;CAAA;CAAA,IAAAC;CAAA,IAAAD,EAAA,OAAAG,YAAA;EACvBF,KAAAE,aAAA;GAAA,GAENA;GAAUT,MACPS,WAAUT,QAASD,qBAAoBC;GAAKG,OAC3CM,WAAUN,SAAUJ,qBAAoBI;EAE9B,IANRJ;EAMSO,EAAA,KAAAG;EAAAH,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAEsB,MAAAM,KAAAD;CAAa,IAAAE;CAAA,IAAAP,EAAA,OAAAI,QAAAJ,EAAA,OAAAM,IAAA;EAApDC,KAAA,oBAAC,yBAAD;GAAuC,YAAAD;GAAa,GAAMF;EAAI,CAAA;EAAIJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAM;EAAAN,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,OAAlEO;AAAkE;AAG3ExB,sBAAsByB,cAAc"}
@@ -16,15 +16,15 @@ declare namespace MessagePrimitiveUnstable_PartsGrouped {
16
16
  * ```tsx
17
17
  * // Group by parent ID (default behavior)
18
18
  * groupingFunction={(parts) => {
19
- * const groups = new Map<string, number[]>();
19
+ * const groups = new Map<string | number, number[]>();
20
20
  * parts.forEach((part, i) => {
21
- * const key = part.parentId ?? `__ungrouped_${i}`;
21
+ * const key = part.parentId ?? i;
22
22
  * const indices = groups.get(key) ?? [];
23
23
  * indices.push(i);
24
24
  * groups.set(key, indices);
25
25
  * });
26
26
  * return Array.from(groups.entries()).map(([key, indices]) => ({
27
- * key: key.startsWith("__ungrouped_") ? undefined : key,
27
+ * groupKey: typeof key === "string" ? key : undefined,
28
28
  * indices
29
29
  * }));
30
30
  * }}
@@ -17,14 +17,14 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
17
17
  const groupMessagePartsByParentId = (parts) => {
18
18
  const groupMap = /* @__PURE__ */ new Map();
19
19
  for (let i = 0; i < parts.length; i++) {
20
- const groupId = parts[i]?.parentId ?? `__ungrouped_${i}`;
20
+ const groupId = parts[i]?.parentId ?? i;
21
21
  const indices = groupMap.get(groupId) ?? [];
22
22
  indices.push(i);
23
23
  groupMap.set(groupId, indices);
24
24
  }
25
25
  const groups = [];
26
26
  for (const [groupId, indices] of groupMap) {
27
- const groupKey = groupId.startsWith("__ungrouped_") ? void 0 : groupId;
27
+ const groupKey = typeof groupId === "string" ? groupId : void 0;
28
28
  groups.push({
29
29
  groupKey,
30
30
  indices