@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,7 +1,8 @@
1
1
  "use client";
2
2
  import { useTriggerBehaviorRegistration } from "./TriggerPopover.js";
3
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
4
  import { unstable_defaultDirectiveFormatter } from "@assistant-ui/core";
4
- import { useEffect, useRef } from "@assistant-ui/tap/react-shim";
5
+ import { useEffect, useInsertionEffect, useRef } from "@assistant-ui/tap/react-shim";
5
6
  //#region src/primitives/composer/trigger/TriggerPopoverDirective.tsx
6
7
  /**
7
8
  * Configures a `<TriggerPopover>` to insert a directive chip when an item is
@@ -19,17 +20,46 @@ import { useEffect, useRef } from "@assistant-ui/tap/react-shim";
19
20
  * </ComposerPrimitive.Unstable_TriggerPopover>
20
21
  * ```
21
22
  */
22
- const ComposerPrimitiveTriggerPopoverDirective = ({ formatter, onInserted }) => {
23
+ const ComposerPrimitiveTriggerPopoverDirective = (t0) => {
24
+ const $ = c(7);
25
+ const { formatter, onInserted } = t0;
23
26
  const { register } = useTriggerBehaviorRegistration();
24
27
  const onInsertedRef = useRef(onInserted);
25
- onInsertedRef.current = onInserted;
26
- useEffect(() => {
27
- return register({
28
- kind: "directive",
29
- formatter: formatter ?? unstable_defaultDirectiveFormatter,
30
- onInserted: (item) => onInsertedRef.current?.(item)
31
- });
32
- }, [register, formatter]);
28
+ let t1;
29
+ let t2;
30
+ if ($[0] !== onInserted) {
31
+ t1 = () => {
32
+ onInsertedRef.current = onInserted;
33
+ };
34
+ t2 = [onInserted];
35
+ $[0] = onInserted;
36
+ $[1] = t1;
37
+ $[2] = t2;
38
+ } else {
39
+ t1 = $[1];
40
+ t2 = $[2];
41
+ }
42
+ useInsertionEffect(t1, t2);
43
+ let t3;
44
+ let t4;
45
+ if ($[3] !== formatter || $[4] !== register) {
46
+ t3 = () => {
47
+ return register({
48
+ kind: "directive",
49
+ formatter: formatter ?? unstable_defaultDirectiveFormatter,
50
+ onInserted: (item) => onInsertedRef.current?.(item)
51
+ });
52
+ };
53
+ t4 = [register, formatter];
54
+ $[3] = formatter;
55
+ $[4] = register;
56
+ $[5] = t3;
57
+ $[6] = t4;
58
+ } else {
59
+ t3 = $[5];
60
+ t4 = $[6];
61
+ }
62
+ useEffect(t3, t4);
33
63
  return null;
34
64
  };
35
65
  ComposerPrimitiveTriggerPopoverDirective.displayName = "ComposerPrimitive.TriggerPopoverDirective";
@@ -1 +1 @@
1
- {"version":3,"file":"TriggerPopoverDirective.js","names":["Unstable_DirectiveFormatter","Unstable_TriggerItem","unstable_defaultDirectiveFormatter","useEffect","useRef","FC","useTriggerBehaviorRegistration","TriggerBehavior","ComposerPrimitiveTriggerPopoverDirective","Props","formatter","onInserted","item","register","onInsertedRef","current","behavior","kind","displayName"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverDirective.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n Unstable_DirectiveFormatter,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport { unstable_defaultDirectiveFormatter } from \"@assistant-ui/core\";\nimport { useEffect, useRef, type FC } from \"react\";\nimport { useTriggerBehaviorRegistration } from \"./TriggerPopover\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\n\nexport namespace ComposerPrimitiveTriggerPopoverDirective {\n export type Props = {\n /** Defaults to `unstable_defaultDirectiveFormatter`. */\n readonly formatter?: Unstable_DirectiveFormatter | undefined;\n /** Fires after an item has been inserted into the composer. */\n readonly onInserted?: ((item: Unstable_TriggerItem) => void) | undefined;\n };\n}\n\n/**\n * Configures a `<TriggerPopover>` to insert a directive chip when an item is\n * selected. Render exactly one behavior sub-primitive per `<TriggerPopover>`.\n *\n * Exposed as `ComposerPrimitive.Unstable_TriggerPopover.Directive`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"@\" adapter={mentionAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Directive\n * formatter={unstable_defaultDirectiveFormatter}\n * onInserted={(item) => track(\"mention\", item.id)}\n * />\n * </ComposerPrimitive.Unstable_TriggerPopover>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopoverDirective: FC<\n ComposerPrimitiveTriggerPopoverDirective.Props\n> = ({ formatter, onInserted }) => {\n const { register } = useTriggerBehaviorRegistration();\n const onInsertedRef = useRef(onInserted);\n onInsertedRef.current = onInserted;\n\n useEffect(() => {\n const behavior: TriggerBehavior = {\n kind: \"directive\",\n formatter: formatter ?? unstable_defaultDirectiveFormatter,\n onInserted: (item) => onInsertedRef.current?.(item),\n };\n return register(behavior);\n }, [register, formatter]);\n\n return null;\n};\n\nComposerPrimitiveTriggerPopoverDirective.displayName =\n \"ComposerPrimitive.TriggerPopoverDirective\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoCA,MAAaQ,4CAER,EAAEE,WAAWC,iBAAiB;CACjC,MAAM,EAAEE,aAAaP,+BAA+B;CACpD,MAAMQ,gBAAgBV,OAAOO,UAAU;CACvCG,cAAcC,UAAUJ;CAExBR,gBAAgB;EAMd,OAAOU,SAASG;GAJdC,MAAM;GACNP,WAAWA,aAAaR;GACxBS,aAAaC,SAASE,cAAcC,UAAUH,IAAI;EAEpCI,CAAQ;CAC1B,GAAG,CAACH,UAAUH,SAAS,CAAC;CAExB,OAAO;AACT;AAEAF,yCAAyCU,cACvC"}
1
+ {"version":3,"file":"TriggerPopoverDirective.js","names":["c","_c","Unstable_DirectiveFormatter","Unstable_TriggerItem","unstable_defaultDirectiveFormatter","useEffect","useInsertionEffect","useRef","FC","useTriggerBehaviorRegistration","TriggerBehavior","ComposerPrimitiveTriggerPopoverDirective","Props","formatter","onInserted","item","t0","$","register","onInsertedRef","t1","t2","current","t3","t4","behavior","kind","displayName"],"sources":["../../../../src/primitives/composer/trigger/TriggerPopoverDirective.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n Unstable_DirectiveFormatter,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\nimport { unstable_defaultDirectiveFormatter } from \"@assistant-ui/core\";\nimport { useEffect, useInsertionEffect, useRef, type FC } from \"react\";\nimport { useTriggerBehaviorRegistration } from \"./TriggerPopover\";\nimport type { TriggerBehavior } from \"./triggerSelectionResource\";\n\nexport namespace ComposerPrimitiveTriggerPopoverDirective {\n export type Props = {\n /** Defaults to `unstable_defaultDirectiveFormatter`. */\n readonly formatter?: Unstable_DirectiveFormatter | undefined;\n /** Fires after an item has been inserted into the composer. */\n readonly onInserted?: ((item: Unstable_TriggerItem) => void) | undefined;\n };\n}\n\n/**\n * Configures a `<TriggerPopover>` to insert a directive chip when an item is\n * selected. Render exactly one behavior sub-primitive per `<TriggerPopover>`.\n *\n * Exposed as `ComposerPrimitive.Unstable_TriggerPopover.Directive`.\n *\n * @example\n * ```tsx\n * <ComposerPrimitive.Unstable_TriggerPopover char=\"@\" adapter={mentionAdapter}>\n * <ComposerPrimitive.Unstable_TriggerPopover.Directive\n * formatter={unstable_defaultDirectiveFormatter}\n * onInserted={(item) => track(\"mention\", item.id)}\n * />\n * </ComposerPrimitive.Unstable_TriggerPopover>\n * ```\n */\nexport const ComposerPrimitiveTriggerPopoverDirective: FC<\n ComposerPrimitiveTriggerPopoverDirective.Props\n> = ({ formatter, onInserted }) => {\n const { register } = useTriggerBehaviorRegistration();\n const onInsertedRef = useRef(onInserted);\n useInsertionEffect(() => {\n onInsertedRef.current = onInserted;\n }, [onInserted]);\n\n useEffect(() => {\n const behavior: TriggerBehavior = {\n kind: \"directive\",\n formatter: formatter ?? unstable_defaultDirectiveFormatter,\n onInserted: (item) => onInsertedRef.current?.(item),\n };\n return register(behavior);\n }, [register, formatter]);\n\n return null;\n};\n\nComposerPrimitiveTriggerPopoverDirective.displayName =\n \"ComposerPrimitive.TriggerPopoverDirective\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAoCA,MAAaW,4CAETK,OAAA;CAAA,MAAAC,IAAAhB,EAAA,CAAA;CAAC,MAAA,EAAAY,WAAAC,eAAAE;CACH,MAAA,EAAAE,aAAqBT,+BAA+B;CACpD,MAAAU,gBAAsBZ,OAAOO,UAAU;CAAE,IAAAM;CAAA,IAAAC;CAAA,IAAAJ,EAAA,OAAAH,YAAA;EACtBM,WAAA;GACjBD,cAAaG,UAAWR;EAAH;EACpBO,KAAA,CAACP,UAAU;EAACG,EAAA,KAAAH;EAAAG,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAA;EAAAD,KAAAH,EAAA;EAAAI,KAAAJ,EAAA;CAAA;CAFfX,mBAAmBc,IAEhBC,EAAY;CAAC,IAAAE;CAAA,IAAAC;CAAA,IAAAP,EAAA,OAAAJ,aAAAI,EAAA,OAAAC,UAAA;EAENK,WAAA;GAKN,OACKL,SAASO;IALkBC,MAC1B;IAAWb,WACNA,aAAAT;IAA+CU,aAC9CC,SAAUI,cAAaG,UAAWP,IAAI;GAEpCU,CAAQ;EAAC;EACxBD,KAAA,CAACN,UAAUL,SAAS;EAACI,EAAA,KAAAJ;EAAAI,EAAA,KAAAC;EAAAD,EAAA,KAAAM;EAAAN,EAAA,KAAAO;CAAA,OAAA;EAAAD,KAAAN,EAAA;EAAAO,KAAAP,EAAA;CAAA;CAPxBZ,UAAUkB,IAOPC,EAAqB;CAAC,OAElB;AAAI;AAGbb,yCAAyCgB,cACvC"}
@@ -0,0 +1,6 @@
1
+ import { Unstable_TriggerItem } from "@assistant-ui/core";
2
+ //#region src/primitives/composer/trigger/matchesTriggerItemQuery.d.ts
3
+ declare function matchesTriggerItemQuery(item: Unstable_TriggerItem, lowerQuery: string): boolean;
4
+ //#endregion
5
+ export { matchesTriggerItemQuery };
6
+ //# sourceMappingURL=matchesTriggerItemQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchesTriggerItemQuery.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/matchesTriggerItemQuery.ts"],"mappings":";;iBAEgB,wBACd,MAAM,sBACN"}
@@ -0,0 +1,9 @@
1
+ //#region src/primitives/composer/trigger/matchesTriggerItemQuery.ts
2
+ function matchesTriggerItemQuery(item, lowerQuery) {
3
+ if (!lowerQuery) return true;
4
+ return item.id.toLowerCase().includes(lowerQuery) || item.label.toLowerCase().includes(lowerQuery) || (item.description?.toLowerCase().includes(lowerQuery) ?? false);
5
+ }
6
+ //#endregion
7
+ export { matchesTriggerItemQuery };
8
+
9
+ //# sourceMappingURL=matchesTriggerItemQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchesTriggerItemQuery.js","names":["Unstable_TriggerItem","matchesTriggerItemQuery","item","lowerQuery","id","toLowerCase","includes","label","description"],"sources":["../../../../src/primitives/composer/trigger/matchesTriggerItemQuery.ts"],"sourcesContent":["import type { Unstable_TriggerItem } from \"@assistant-ui/core\";\n\nexport function matchesTriggerItemQuery(\n item: Unstable_TriggerItem,\n lowerQuery: string,\n): boolean {\n if (!lowerQuery) return true;\n return (\n item.id.toLowerCase().includes(lowerQuery) ||\n item.label.toLowerCase().includes(lowerQuery) ||\n (item.description?.toLowerCase().includes(lowerQuery) ?? false)\n );\n}\n"],"mappings":";AAEA,SAAgBC,wBACdC,MACAC,YACS;CACT,IAAI,CAACA,YAAY,OAAO;CACxB,OACED,KAAKE,GAAGC,YAAY,CAAC,CAACC,SAASH,UAAU,KACzCD,KAAKK,MAAMF,YAAY,CAAC,CAACC,SAASH,UAAU,MAC3CD,KAAKM,aAAaH,YAAY,CAAC,CAACC,SAASH,UAAU,KAAK;AAE7D"}
@@ -1 +1 @@
1
- {"version":3,"file":"triggerKeyboardResource.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/triggerKeyboardResource.ts"],"mappings":";;;KAeY;WACD;WACA;EACT;;KAGU;;WAED;;WAEA;;EAET,eAAe;;EAEf,cAAc,GAAG;;cAkHN,qDAAuB,SAAA;EA/FnB,yBAAU,2BAA2B;EACtC;EACI;EACX;EACI;EACL;EACM,aAAC,MAAM;EACH,iBAAC;EACT;EACD"}
1
+ {"version":3,"file":"triggerKeyboardResource.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/triggerKeyboardResource.ts"],"mappings":";;;KAeY;WACD;WACA;EACT;;KAGU;;WAED;;WAEA;;EAET,eAAe;;EAEf,cAAc,GAAG;;cAwHN,qDAAuB,SAAA;EArGnB,yBAAU,2BAA2B;EACtC;EACI;EACX;EACI;EACL;EACM,aAAC,MAAM;EACH,iBAAC;EACT;EACD"}
@@ -1,5 +1,5 @@
1
1
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
2
- import { useEffect, useEffectEvent, useState } from "@assistant-ui/tap/react-shim";
2
+ import { useEffectEvent, useState } from "@assistant-ui/tap/react-shim";
3
3
  import { resource } from "@assistant-ui/tap";
4
4
  //#region src/primitives/composer/trigger/triggerKeyboardResource.ts
5
5
  /** Relies on `Unstable_TriggerCategory` never carrying a `type` field. */
@@ -11,53 +11,45 @@ function isTriggerItem(x) {
11
11
  * category drill-in, back, and close to the callbacks supplied by the parent.
12
12
  */
13
13
  const useTriggerKeyboardResource = (t0) => {
14
- const $ = c(25);
14
+ const $ = c(22);
15
15
  const { navigableList, isSearchMode, activeCategoryId, query, popoverId, open, selectItem, selectCategory, goBack, close } = t0;
16
16
  const [highlightedIndex, setHighlightedIndex] = useState(0);
17
17
  let t1;
18
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
19
- t1 = () => {
20
- setHighlightedIndex(0);
18
+ if ($[0] !== activeCategoryId || $[1] !== isSearchMode || $[2] !== navigableList) {
19
+ t1 = {
20
+ navigableList,
21
+ isSearchMode,
22
+ activeCategoryId
21
23
  };
22
- $[0] = t1;
23
- } else t1 = $[0];
24
+ $[0] = activeCategoryId;
25
+ $[1] = isSearchMode;
26
+ $[2] = navigableList;
27
+ $[3] = t1;
28
+ } else t1 = $[3];
29
+ const [highlightScope, setHighlightScope] = useState(t1);
30
+ if (highlightScope.navigableList !== navigableList || highlightScope.isSearchMode !== isSearchMode || highlightScope.activeCategoryId !== activeCategoryId) {
31
+ setHighlightScope({
32
+ navigableList,
33
+ isSearchMode,
34
+ activeCategoryId
35
+ });
36
+ setHighlightedIndex(0);
37
+ }
24
38
  let t2;
25
- if ($[1] !== navigableList) {
26
- t2 = [navigableList];
27
- $[1] = navigableList;
28
- $[2] = t2;
29
- } else t2 = $[2];
30
- useEffect(t1, t2);
31
- let t3;
32
- if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
33
- t3 = () => {
34
- setHighlightedIndex(0);
35
- };
36
- $[3] = t3;
37
- } else t3 = $[3];
38
- let t4;
39
- if ($[4] !== activeCategoryId || $[5] !== isSearchMode) {
40
- t4 = [isSearchMode, activeCategoryId];
41
- $[4] = activeCategoryId;
42
- $[5] = isSearchMode;
43
- $[6] = t4;
44
- } else t4 = $[6];
45
- useEffect(t3, t4);
46
- let t5;
47
- if ($[7] !== highlightedIndex || $[8] !== navigableList.length) {
48
- t5 = (index) => {
39
+ if ($[4] !== highlightedIndex || $[5] !== navigableList.length) {
40
+ t2 = (index) => {
49
41
  if (index < 0 || index >= navigableList.length) return;
50
42
  if (index === highlightedIndex) return;
51
43
  setHighlightedIndex(index);
52
44
  };
53
- $[7] = highlightedIndex;
54
- $[8] = navigableList.length;
55
- $[9] = t5;
56
- } else t5 = $[9];
57
- const highlightIndex = useEffectEvent(t5);
58
- let t6;
59
- if ($[10] !== activeCategoryId || $[11] !== close || $[12] !== goBack || $[13] !== highlightedIndex || $[14] !== navigableList || $[15] !== open || $[16] !== query || $[17] !== selectCategory || $[18] !== selectItem) {
60
- t6 = (e) => {
45
+ $[4] = highlightedIndex;
46
+ $[5] = navigableList.length;
47
+ $[6] = t2;
48
+ } else t2 = $[6];
49
+ const highlightIndex = useEffectEvent(t2);
50
+ let t3;
51
+ if ($[7] !== activeCategoryId || $[8] !== close || $[9] !== goBack || $[10] !== highlightedIndex || $[11] !== navigableList || $[12] !== open || $[13] !== query || $[14] !== selectCategory || $[15] !== selectItem) {
52
+ t3 = (e) => {
61
53
  if (!open) return false;
62
54
  switch (e.key) {
63
55
  case "ArrowDown":
@@ -100,35 +92,35 @@ const useTriggerKeyboardResource = (t0) => {
100
92
  default: return false;
101
93
  }
102
94
  };
103
- $[10] = activeCategoryId;
104
- $[11] = close;
105
- $[12] = goBack;
106
- $[13] = highlightedIndex;
107
- $[14] = navigableList;
108
- $[15] = open;
109
- $[16] = query;
110
- $[17] = selectCategory;
111
- $[18] = selectItem;
112
- $[19] = t6;
113
- } else t6 = $[19];
114
- const handleKeyDown = useEffectEvent(t6);
95
+ $[7] = activeCategoryId;
96
+ $[8] = close;
97
+ $[9] = goBack;
98
+ $[10] = highlightedIndex;
99
+ $[11] = navigableList;
100
+ $[12] = open;
101
+ $[13] = query;
102
+ $[14] = selectCategory;
103
+ $[15] = selectItem;
104
+ $[16] = t3;
105
+ } else t3 = $[16];
106
+ const handleKeyDown = useEffectEvent(t3);
115
107
  const highlightedEntry = navigableList[highlightedIndex];
116
108
  const highlightedItemId = open && highlightedEntry ? `${popoverId}-option-${highlightedEntry.id}` : void 0;
117
- let t7;
118
- if ($[20] !== handleKeyDown || $[21] !== highlightIndex || $[22] !== highlightedIndex || $[23] !== highlightedItemId) {
119
- t7 = {
109
+ let t4;
110
+ if ($[17] !== handleKeyDown || $[18] !== highlightIndex || $[19] !== highlightedIndex || $[20] !== highlightedItemId) {
111
+ t4 = {
120
112
  highlightedIndex,
121
113
  highlightedItemId,
122
114
  highlightIndex,
123
115
  handleKeyDown
124
116
  };
125
- $[20] = handleKeyDown;
126
- $[21] = highlightIndex;
127
- $[22] = highlightedIndex;
128
- $[23] = highlightedItemId;
129
- $[24] = t7;
130
- } else t7 = $[24];
131
- return t7;
117
+ $[17] = handleKeyDown;
118
+ $[18] = highlightIndex;
119
+ $[19] = highlightedIndex;
120
+ $[20] = highlightedItemId;
121
+ $[21] = t4;
122
+ } else t4 = $[21];
123
+ return t4;
132
124
  };
133
125
  const TriggerKeyboardResource = resource(useTriggerKeyboardResource);
134
126
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"triggerKeyboardResource.js","names":["useEffect","useEffectEvent","useState","resource","Unstable_TriggerCategory","Unstable_TriggerItem","isTriggerItem","x","TriggerPopoverKeyEvent","key","shiftKey","preventDefault","TriggerKeyboardResourceOutput","highlightedIndex","highlightedItemId","highlightIndex","index","handleKeyDown","e","useTriggerKeyboardResource","t0","$","_c","navigableList","isSearchMode","activeCategoryId","query","popoverId","open","selectItem","selectCategory","goBack","close","setHighlightedIndex","t1","Symbol","for","t2","t3","t4","t5","length","t6","prev_0","len_0","len","prev","item","id","highlightedEntry","undefined","t7","TriggerKeyboardResource"],"sources":["../../../../src/primitives/composer/trigger/triggerKeyboardResource.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\n\n/** Relies on `Unstable_TriggerCategory` never carrying a `type` field. */\nfunction isTriggerItem(\n x: Unstable_TriggerItem | Unstable_TriggerCategory,\n): x is Unstable_TriggerItem {\n return \"type\" in x;\n}\n\n/** Key event shape accepted by the keyboard handler. */\nexport type TriggerPopoverKeyEvent = {\n readonly key: string;\n readonly shiftKey: boolean;\n preventDefault(): void;\n};\n\nexport type TriggerKeyboardResourceOutput = {\n /** Index of the currently highlighted entry within the navigable list. */\n readonly highlightedIndex: number;\n /** ID of the currently highlighted item (for `aria-activedescendant`). */\n readonly highlightedItemId: string | undefined;\n /** Move the highlight to an entry index (e.g. from pointer hover). Out-of-range values are ignored. */\n highlightIndex(index: number): void;\n /** Handle a key event; returns `true` if it was consumed. */\n handleKeyDown(e: TriggerPopoverKeyEvent): boolean;\n};\n\n/**\n * Owns keyboard-driven highlight state for the popover. Delegates selection,\n * category drill-in, back, and close to the callbacks supplied by the parent.\n */\nconst useTriggerKeyboardResource = ({\n navigableList,\n isSearchMode,\n activeCategoryId,\n query,\n popoverId,\n open,\n selectItem,\n selectCategory,\n goBack,\n close,\n}: {\n navigableList: readonly (Unstable_TriggerCategory | Unstable_TriggerItem)[];\n isSearchMode: boolean;\n activeCategoryId: string | null;\n query: string;\n popoverId: string;\n open: boolean;\n selectItem: (item: Unstable_TriggerItem) => void;\n selectCategory: (categoryId: string) => void;\n goBack: () => void;\n close: () => void;\n}): TriggerKeyboardResourceOutput => {\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n\n useEffect(() => {\n setHighlightedIndex(0);\n }, [navigableList]);\n\n useEffect(() => {\n setHighlightedIndex(0);\n }, [isSearchMode, activeCategoryId]);\n\n const highlightIndex = useEffectEvent((index: number) => {\n if (index < 0 || index >= navigableList.length) return;\n if (index === highlightedIndex) return;\n setHighlightedIndex(index);\n });\n\n const handleKeyDown = useEffectEvent((e: TriggerPopoverKeyEvent): boolean => {\n if (!open) return false;\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const len = navigableList.length;\n if (len === 0) return 0;\n return prev < len - 1 ? prev + 1 : 0;\n });\n return true;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const len = navigableList.length;\n if (len === 0) return 0;\n return prev > 0 ? prev - 1 : len - 1;\n });\n return true;\n }\n case \"Enter\":\n case \"Tab\": {\n if (e.shiftKey) return false;\n e.preventDefault();\n const item = navigableList[highlightedIndex];\n if (!item) return true;\n\n if (isTriggerItem(item)) {\n selectItem(item);\n } else {\n selectCategory(item.id);\n }\n return true;\n }\n case \"Escape\": {\n e.preventDefault();\n close();\n return true;\n }\n case \"Backspace\": {\n if (activeCategoryId && query === \"\") {\n e.preventDefault();\n goBack();\n return true;\n }\n return false;\n }\n default:\n return false;\n }\n });\n\n const highlightedEntry = navigableList[highlightedIndex];\n const highlightedItemId =\n open && highlightedEntry\n ? `${popoverId}-option-${highlightedEntry.id}`\n : undefined;\n\n return {\n highlightedIndex,\n highlightedItemId,\n highlightIndex,\n handleKeyDown,\n };\n};\n\nexport const TriggerKeyboardResource = resource(useTriggerKeyboardResource);\n"],"mappings":"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"}
1
+ {"version":3,"file":"triggerKeyboardResource.js","names":["useEffectEvent","useState","resource","Unstable_TriggerCategory","Unstable_TriggerItem","isTriggerItem","x","TriggerPopoverKeyEvent","key","shiftKey","preventDefault","TriggerKeyboardResourceOutput","highlightedIndex","highlightedItemId","highlightIndex","index","handleKeyDown","e","useTriggerKeyboardResource","t0","$","_c","navigableList","isSearchMode","activeCategoryId","query","popoverId","open","selectItem","selectCategory","goBack","close","setHighlightedIndex","t1","highlightScope","setHighlightScope","t2","length","t3","prev_0","len_0","len","prev","item","id","highlightedEntry","undefined","t4","TriggerKeyboardResource"],"sources":["../../../../src/primitives/composer/trigger/triggerKeyboardResource.ts"],"sourcesContent":["import { useEffectEvent, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type {\n Unstable_TriggerCategory,\n Unstable_TriggerItem,\n} from \"@assistant-ui/core\";\n\n/** Relies on `Unstable_TriggerCategory` never carrying a `type` field. */\nfunction isTriggerItem(\n x: Unstable_TriggerItem | Unstable_TriggerCategory,\n): x is Unstable_TriggerItem {\n return \"type\" in x;\n}\n\n/** Key event shape accepted by the keyboard handler. */\nexport type TriggerPopoverKeyEvent = {\n readonly key: string;\n readonly shiftKey: boolean;\n preventDefault(): void;\n};\n\nexport type TriggerKeyboardResourceOutput = {\n /** Index of the currently highlighted entry within the navigable list. */\n readonly highlightedIndex: number;\n /** ID of the currently highlighted item (for `aria-activedescendant`). */\n readonly highlightedItemId: string | undefined;\n /** Move the highlight to an entry index (e.g. from pointer hover). Out-of-range values are ignored. */\n highlightIndex(index: number): void;\n /** Handle a key event; returns `true` if it was consumed. */\n handleKeyDown(e: TriggerPopoverKeyEvent): boolean;\n};\n\n/**\n * Owns keyboard-driven highlight state for the popover. Delegates selection,\n * category drill-in, back, and close to the callbacks supplied by the parent.\n */\nconst useTriggerKeyboardResource = ({\n navigableList,\n isSearchMode,\n activeCategoryId,\n query,\n popoverId,\n open,\n selectItem,\n selectCategory,\n goBack,\n close,\n}: {\n navigableList: readonly (Unstable_TriggerCategory | Unstable_TriggerItem)[];\n isSearchMode: boolean;\n activeCategoryId: string | null;\n query: string;\n popoverId: string;\n open: boolean;\n selectItem: (item: Unstable_TriggerItem) => void;\n selectCategory: (categoryId: string) => void;\n goBack: () => void;\n close: () => void;\n}): TriggerKeyboardResourceOutput => {\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n const [highlightScope, setHighlightScope] = useState({\n navigableList,\n isSearchMode,\n activeCategoryId,\n });\n\n if (\n highlightScope.navigableList !== navigableList ||\n highlightScope.isSearchMode !== isSearchMode ||\n highlightScope.activeCategoryId !== activeCategoryId\n ) {\n setHighlightScope({ navigableList, isSearchMode, activeCategoryId });\n setHighlightedIndex(0);\n }\n\n const highlightIndex = useEffectEvent((index: number) => {\n if (index < 0 || index >= navigableList.length) return;\n if (index === highlightedIndex) return;\n setHighlightedIndex(index);\n });\n\n const handleKeyDown = useEffectEvent((e: TriggerPopoverKeyEvent): boolean => {\n if (!open) return false;\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const len = navigableList.length;\n if (len === 0) return 0;\n return prev < len - 1 ? prev + 1 : 0;\n });\n return true;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n setHighlightedIndex((prev) => {\n const len = navigableList.length;\n if (len === 0) return 0;\n return prev > 0 ? prev - 1 : len - 1;\n });\n return true;\n }\n case \"Enter\":\n case \"Tab\": {\n if (e.shiftKey) return false;\n e.preventDefault();\n const item = navigableList[highlightedIndex];\n if (!item) return true;\n\n if (isTriggerItem(item)) {\n selectItem(item);\n } else {\n selectCategory(item.id);\n }\n return true;\n }\n case \"Escape\": {\n e.preventDefault();\n close();\n return true;\n }\n case \"Backspace\": {\n if (activeCategoryId && query === \"\") {\n e.preventDefault();\n goBack();\n return true;\n }\n return false;\n }\n default:\n return false;\n }\n });\n\n const highlightedEntry = navigableList[highlightedIndex];\n const highlightedItemId =\n open && highlightedEntry\n ? `${popoverId}-option-${highlightedEntry.id}`\n : undefined;\n\n return {\n highlightedIndex,\n highlightedItemId,\n highlightIndex,\n handleKeyDown,\n };\n};\n\nexport const TriggerKeyboardResource = resource(useTriggerKeyboardResource);\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"triggerNavigationResource.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/triggerNavigationResource.ts"],"mappings":";;KAgBY;;WAED,qBAAqB;;WAErB,gBAAgB;;WAEhB;;WAEA;;WAEA,yBACL,2BACA;;EAGJ,eAAe;;EAEf;;cAoGW,uDAAyB,SAAA;EAxF3B,SAAA;EACF;EACD"}
1
+ {"version":3,"file":"triggerNavigationResource.d.ts","names":[],"sources":["../../../../src/primitives/composer/trigger/triggerNavigationResource.ts"],"mappings":";;KASY;;WAED,qBAAqB;;WAErB,gBAAgB;;WAEhB;;WAEA;;WAEA,yBACL,2BACA;;EAGJ,eAAe;;EAEf;;cAsGW,uDAAyB,SAAA;EA1F3B,SAAA;EACF;EACD"}