@assistant-ui/react 0.14.4 → 0.14.6

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 (97) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +8 -2
  6. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
  7. package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
  8. package/dist/legacy-runtime/hooks/AssistantContext.d.ts +2 -2
  9. package/dist/legacy-runtime/hooks/AssistantContext.js +1 -1
  10. package/dist/legacy-runtime/hooks/AttachmentContext.d.ts +2 -2
  11. package/dist/legacy-runtime/hooks/AttachmentContext.js +1 -1
  12. package/dist/legacy-runtime/hooks/ComposerContext.d.ts +2 -2
  13. package/dist/legacy-runtime/hooks/ComposerContext.js +1 -1
  14. package/dist/legacy-runtime/hooks/MessageContext.d.ts +3 -3
  15. package/dist/legacy-runtime/hooks/MessageContext.js +2 -2
  16. package/dist/legacy-runtime/hooks/MessagePartContext.d.ts +2 -2
  17. package/dist/legacy-runtime/hooks/MessagePartContext.js +1 -1
  18. package/dist/legacy-runtime/hooks/ThreadContext.d.ts +4 -4
  19. package/dist/legacy-runtime/hooks/ThreadContext.js +2 -2
  20. package/dist/legacy-runtime/hooks/ThreadListItemContext.d.ts +2 -2
  21. package/dist/legacy-runtime/hooks/ThreadListItemContext.js +1 -1
  22. package/dist/mcp-apps/McpAppRenderer.d.ts +8 -0
  23. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  24. package/dist/mcp-apps/McpAppRenderer.js +8 -0
  25. package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
  26. package/dist/mcp-apps/McpAppsRemoteHost.d.ts +7 -0
  27. package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -1
  28. package/dist/mcp-apps/McpAppsRemoteHost.js +7 -0
  29. package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -1
  30. package/dist/mcp-apps/bridge.d.ts.map +1 -1
  31. package/dist/mcp-apps/bridge.js +15 -2
  32. package/dist/mcp-apps/bridge.js.map +1 -1
  33. package/dist/mcp-apps/utils.d.ts +7 -0
  34. package/dist/mcp-apps/utils.d.ts.map +1 -1
  35. package/dist/mcp-apps/utils.js +7 -0
  36. package/dist/mcp-apps/utils.js.map +1 -1
  37. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  38. package/dist/primitives/actionBar/ActionBarCopy.js +6 -1
  39. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  40. package/dist/primitives/messagePart/MessagePartInProgress.d.ts +1 -5
  41. package/dist/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
  42. package/dist/primitives/messagePart/MessagePartInProgress.js +1 -7
  43. package/dist/primitives/messagePart/MessagePartInProgress.js.map +1 -1
  44. package/dist/primitives/messagePart/useMessagePartData.d.ts +16 -0
  45. package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -1
  46. package/dist/primitives/messagePart/useMessagePartData.js +16 -0
  47. package/dist/primitives/messagePart/useMessagePartData.js.map +1 -1
  48. package/dist/primitives/messagePart/useMessagePartFile.d.ts +15 -0
  49. package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -1
  50. package/dist/primitives/messagePart/useMessagePartFile.js +15 -0
  51. package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -1
  52. package/dist/primitives/messagePart/useMessagePartImage.d.ts +15 -0
  53. package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -1
  54. package/dist/primitives/messagePart/useMessagePartImage.js +15 -0
  55. package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -1
  56. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +15 -0
  57. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -1
  58. package/dist/primitives/messagePart/useMessagePartReasoning.js +15 -0
  59. package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -1
  60. package/dist/primitives/messagePart/useMessagePartSource.d.ts +15 -0
  61. package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -1
  62. package/dist/primitives/messagePart/useMessagePartSource.js +15 -0
  63. package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -1
  64. package/dist/primitives/messagePart/useMessagePartText.d.ts +15 -0
  65. package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -1
  66. package/dist/primitives/messagePart/useMessagePartText.js +15 -0
  67. package/dist/primitives/messagePart/useMessagePartText.js.map +1 -1
  68. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts +1 -1
  69. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
  70. package/dist/primitives/thread/useThreadViewportAutoScroll.js +50 -27
  71. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  72. package/package.json +7 -7
  73. package/src/index.ts +6 -0
  74. package/src/legacy-runtime/AssistantRuntimeProvider.tsx +8 -2
  75. package/src/legacy-runtime/hooks/AssistantContext.ts +2 -2
  76. package/src/legacy-runtime/hooks/AttachmentContext.ts +2 -2
  77. package/src/legacy-runtime/hooks/ComposerContext.ts +2 -2
  78. package/src/legacy-runtime/hooks/MessageContext.ts +3 -3
  79. package/src/legacy-runtime/hooks/MessagePartContext.ts +2 -2
  80. package/src/legacy-runtime/hooks/ThreadContext.ts +4 -4
  81. package/src/legacy-runtime/hooks/ThreadListItemContext.ts +2 -2
  82. package/src/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.test.ts +254 -0
  83. package/src/mcp-apps/McpAppRenderer.tsx +8 -0
  84. package/src/mcp-apps/McpAppsRemoteHost.ts +7 -0
  85. package/src/mcp-apps/bridge.ts +18 -2
  86. package/src/mcp-apps/utils.ts +7 -0
  87. package/src/primitives/actionBar/ActionBarCopy.tsx +6 -1
  88. package/src/primitives/messagePart/MessagePartInProgress.ts +1 -17
  89. package/src/primitives/messagePart/useMessagePartData.ts +16 -0
  90. package/src/primitives/messagePart/useMessagePartFile.ts +15 -0
  91. package/src/primitives/messagePart/useMessagePartImage.ts +15 -0
  92. package/src/primitives/messagePart/useMessagePartReasoning.ts +15 -0
  93. package/src/primitives/messagePart/useMessagePartSource.ts +15 -0
  94. package/src/primitives/messagePart/useMessagePartText.ts +15 -0
  95. package/src/primitives/thread/useThreadViewportAutoScroll.test.tsx +320 -0
  96. package/src/primitives/thread/useThreadViewportAutoScroll.ts +59 -29
  97. package/src/tests/BaseComposerRuntimeCore.test.ts +1 -1
@@ -32,7 +32,12 @@ import { useAuiState } from "@assistant-ui/store";
32
32
  const useActionBarPrimitiveCopy = ({ copiedDuration = 3000, } = {}) => {
33
33
  const { copy, disabled } = useActionBarCopy({
34
34
  copiedDuration,
35
- copyToClipboard: (text) => navigator.clipboard.writeText(text),
35
+ copyToClipboard: (text) => {
36
+ if (typeof navigator === "undefined" || !navigator.clipboard) {
37
+ return Promise.reject(new Error("Clipboard API is unavailable"));
38
+ }
39
+ return navigator.clipboard.writeText(text);
40
+ },
36
41
  });
37
42
  if (disabled)
38
43
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"ActionBarCopy.js","sourceRoot":"","sources":["../../../src/primitives/actionBar/ActionBarCopy.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,iCAA8B;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,yBAAyB,GAAG,CAAC,EACjC,cAAc,GAAG,IAAI,MAGnB,EAAE,EAAE,EAAE;IACR,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC;QAC1C,cAAc;QACd,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;KAC/D,CAAC,CAAC;IACH,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAWF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAG9C,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE;IAClE,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAC/D,OAAO,CACL,KAAC,SAAS,CAAC,MAAM,IACf,IAAI,EAAC,QAAQ,KACT,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC3C,KAAK,EACT,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,QAAQ,IAAI,CAAC,QAAQ,EAC/B,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1C,QAAQ,EAAE,EAAE,CAAC;QACf,CAAC,CAAC,GACF,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,sBAAsB,CAAC,WAAW,GAAG,yBAAyB,CAAC"}
1
+ {"version":3,"file":"ActionBarCopy.js","sourceRoot":"","sources":["../../../src/primitives/actionBar/ActionBarCopy.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,iCAA8B;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,yBAAyB,GAAG,CAAC,EACjC,cAAc,GAAG,IAAI,MAGnB,EAAE,EAAE,EAAE;IACR,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC;QAC1C,cAAc;QACd,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;gBAC7D,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC,CAAC;IACH,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAWF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAG9C,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE;IAClE,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;IAC/D,OAAO,CACL,KAAC,SAAS,CAAC,MAAM,IACf,IAAI,EAAC,QAAQ,KACT,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC3C,KAAK,EACT,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,QAAQ,IAAI,CAAC,QAAQ,EAC/B,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1C,QAAQ,EAAE,EAAE,CAAC;QACf,CAAC,CAAC,GACF,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,sBAAsB,CAAC,WAAW,GAAG,yBAAyB,CAAC"}
@@ -1,6 +1,2 @@
1
- import type { FC, PropsWithChildren } from "react";
2
- export declare namespace MessagePartPrimitiveInProgress {
3
- type Props = PropsWithChildren;
4
- }
5
- export declare const MessagePartPrimitiveInProgress: FC<MessagePartPrimitiveInProgress.Props>;
1
+ export { MessagePartPrimitiveInProgress } from "@assistant-ui/core/react";
6
2
  //# sourceMappingURL=MessagePartInProgress.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MessagePartInProgress.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/MessagePartInProgress.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAGnD,yBAAiB,8BAA8B,CAAC;IAC9C,KAAY,KAAK,GAAG,iBAAiB,CAAC;CACvC;AAGD,eAAO,MAAM,8BAA8B,EAAE,EAAE,CAC7C,8BAA8B,CAAC,KAAK,CAKrC,CAAC"}
1
+ {"version":3,"file":"MessagePartInProgress.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/MessagePartInProgress.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,9 +1,3 @@
1
1
  "use client";
2
- import { useAuiState } from "@assistant-ui/store";
3
- // TODO should this be renamed to IsRunning?
4
- export const MessagePartPrimitiveInProgress = ({ children }) => {
5
- const isInProgress = useAuiState((s) => s.part.status.type === "running");
6
- return isInProgress ? children : null;
7
- };
8
- MessagePartPrimitiveInProgress.displayName = "MessagePartPrimitive.InProgress";
2
+ export { MessagePartPrimitiveInProgress } from "@assistant-ui/core/react";
9
3
  //# sourceMappingURL=MessagePartInProgress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MessagePartInProgress.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/MessagePartInProgress.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMlD,4CAA4C;AAC5C,MAAM,CAAC,MAAM,8BAA8B,GAEvC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACnB,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAE1E,OAAO,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC,CAAC;AAEF,8BAA8B,CAAC,WAAW,GAAG,iCAAiC,CAAC"}
1
+ {"version":3,"file":"MessagePartInProgress.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/MessagePartInProgress.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,3 +1,19 @@
1
1
  import type { DataMessagePart } from "@assistant-ui/core";
2
+ /**
3
+ * @deprecated Use {@link useAuiState} to select and narrow `s.part`.
4
+ * Return `null` for optional rendering, or throw inside the selector to
5
+ * preserve the old hook's strict behavior.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const part = useAuiState((s) =>
10
+ * s.part.type === "data" && (!name || s.part.name === name)
11
+ * ? s.part
12
+ * : null,
13
+ * );
14
+ * ```
15
+ *
16
+ * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
17
+ */
2
18
  export declare const useMessagePartData: <T = any>(name?: string) => DataMessagePart<T> | null;
3
19
  //# sourceMappingURL=useMessagePartData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartData.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartData.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,eAAO,MAAM,kBAAkB,GAAI,CAAC,GAAG,GAAG,EAAE,OAAO,MAAM,8BAiBxD,CAAC"}
1
+ {"version":3,"file":"useMessagePartData.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartData.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,GAAG,GAAG,EAAE,OAAO,MAAM,8BAiBxD,CAAC"}
@@ -1,5 +1,21 @@
1
1
  "use client";
2
2
  import { useAuiState } from "@assistant-ui/store";
3
+ /**
4
+ * @deprecated Use {@link useAuiState} to select and narrow `s.part`.
5
+ * Return `null` for optional rendering, or throw inside the selector to
6
+ * preserve the old hook's strict behavior.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const part = useAuiState((s) =>
11
+ * s.part.type === "data" && (!name || s.part.name === name)
12
+ * ? s.part
13
+ * : null,
14
+ * );
15
+ * ```
16
+ *
17
+ * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
18
+ */
3
19
  export const useMessagePartData = (name) => {
4
20
  const part = useAuiState((s) => {
5
21
  if (s.part.type !== "data") {
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartData.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartData.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAU,IAAa,EAAE,EAAE;IAC3D,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,CAAC,IAA0B,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
1
+ {"version":3,"file":"useMessagePartData.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartData.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAU,IAAa,EAAE,EAAE;IAC3D,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,CAAC,IAA0B,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
@@ -1,4 +1,19 @@
1
1
  import type { FileMessagePart } from "@assistant-ui/core";
2
+ /**
3
+ * @deprecated Use {@link useAuiState} to select and narrow `s.part`.
4
+ * Return `null` for optional rendering, or throw inside the selector to
5
+ * preserve the old hook's strict behavior.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const file = useAuiState((s) => {
10
+ * if (s.part.type !== "file") return null;
11
+ * return s.part;
12
+ * });
13
+ * ```
14
+ *
15
+ * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
16
+ */
2
17
  export declare const useMessagePartFile: () => FileMessagePart & {
3
18
  readonly status: import("@assistant-ui/core").MessagePartStatus | import("@assistant-ui/core").ToolCallMessagePartStatus;
4
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartFile.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartFile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,oBAAoB,CAAC;AAG5E,eAAO,MAAM,kBAAkB;;CAW9B,CAAC"}
1
+ {"version":3,"file":"useMessagePartFile.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartFile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,oBAAoB,CAAC;AAG5E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB;;CAW9B,CAAC"}
@@ -1,5 +1,20 @@
1
1
  "use client";
2
2
  import { useAuiState } from "@assistant-ui/store";
3
+ /**
4
+ * @deprecated Use {@link useAuiState} to select and narrow `s.part`.
5
+ * Return `null` for optional rendering, or throw inside the selector to
6
+ * preserve the old hook's strict behavior.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const file = useAuiState((s) => {
11
+ * if (s.part.type !== "file") return null;
12
+ * return s.part;
13
+ * });
14
+ * ```
15
+ *
16
+ * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
17
+ */
3
18
  export const useMessagePartFile = () => {
4
19
  const file = useAuiState((s) => {
5
20
  if (s.part.type !== "file")
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartFile.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartFile.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM;YACxB,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;QAEJ,OAAO,CAAC,CAAC,IAA0C,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
1
+ {"version":3,"file":"useMessagePartFile.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartFile.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM;YACxB,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;QAEJ,OAAO,CAAC,CAAC,IAA0C,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
@@ -1,4 +1,19 @@
1
1
  import type { ImageMessagePart } from "@assistant-ui/core";
2
+ /**
3
+ * @deprecated Use {@link useAuiState} to select and narrow `s.part`.
4
+ * Return `null` for optional rendering, or throw inside the selector to
5
+ * preserve the old hook's strict behavior.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const image = useAuiState((s) => {
10
+ * if (s.part.type !== "image") return null;
11
+ * return s.part;
12
+ * });
13
+ * ```
14
+ *
15
+ * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
16
+ */
2
17
  export declare const useMessagePartImage: () => ImageMessagePart & {
3
18
  readonly status: import("@assistant-ui/core").MessagePartStatus | import("@assistant-ui/core").ToolCallMessagePartStatus;
4
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartImage.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartImage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AAG7E,eAAO,MAAM,mBAAmB;;CAW/B,CAAC"}
1
+ {"version":3,"file":"useMessagePartImage.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartImage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AAG7E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB;;CAW/B,CAAC"}
@@ -1,5 +1,20 @@
1
1
  "use client";
2
2
  import { useAuiState } from "@assistant-ui/store";
3
+ /**
4
+ * @deprecated Use {@link useAuiState} to select and narrow `s.part`.
5
+ * Return `null` for optional rendering, or throw inside the selector to
6
+ * preserve the old hook's strict behavior.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const image = useAuiState((s) => {
11
+ * if (s.part.type !== "image") return null;
12
+ * return s.part;
13
+ * });
14
+ * ```
15
+ *
16
+ * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
17
+ */
3
18
  export const useMessagePartImage = () => {
4
19
  const image = useAuiState((s) => {
5
20
  if (s.part.type !== "image")
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartImage.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartImage.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO;YACzB,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;QAEJ,OAAO,CAAC,CAAC,IAA2C,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
1
+ {"version":3,"file":"useMessagePartImage.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartImage.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO;YACzB,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;QAEJ,OAAO,CAAC,CAAC,IAA2C,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -1,4 +1,19 @@
1
1
  import type { ReasoningMessagePart } from "@assistant-ui/core";
2
+ /**
3
+ * @deprecated Use {@link useAuiState} to select and narrow `s.part`.
4
+ * Return `null` for optional rendering, or throw inside the selector to
5
+ * preserve the old hook's strict behavior.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const reasoning = useAuiState((s) => {
10
+ * if (s.part.type !== "reasoning") return null;
11
+ * return s.part;
12
+ * });
13
+ * ```
14
+ *
15
+ * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
16
+ */
2
17
  export declare const useMessagePartReasoning: () => ReasoningMessagePart & {
3
18
  readonly status: import("@assistant-ui/core").MessagePartStatus | import("@assistant-ui/core").ToolCallMessagePartStatus;
4
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartReasoning.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartReasoning.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,oBAAoB,CAAC;AAG5B,eAAO,MAAM,uBAAuB;;CAWnC,CAAC"}
1
+ {"version":3,"file":"useMessagePartReasoning.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartReasoning.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,oBAAoB,CAAC;AAG5B;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB;;CAWnC,CAAC"}
@@ -1,5 +1,20 @@
1
1
  "use client";
2
2
  import { useAuiState } from "@assistant-ui/store";
3
+ /**
4
+ * @deprecated Use {@link useAuiState} to select and narrow `s.part`.
5
+ * Return `null` for optional rendering, or throw inside the selector to
6
+ * preserve the old hook's strict behavior.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const reasoning = useAuiState((s) => {
11
+ * if (s.part.type !== "reasoning") return null;
12
+ * return s.part;
13
+ * });
14
+ * ```
15
+ *
16
+ * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
17
+ */
3
18
  export const useMessagePartReasoning = () => {
4
19
  const text = useAuiState((s) => {
5
20
  if (s.part.type !== "reasoning")
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartReasoning.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartReasoning.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAMb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW;YAC7B,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;QAEJ,OAAO,CAAC,CAAC,IAA+C,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
1
+ {"version":3,"file":"useMessagePartReasoning.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartReasoning.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAMb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW;YAC7B,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;QAEJ,OAAO,CAAC,CAAC,IAA+C,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
@@ -1,3 +1,18 @@
1
+ /**
2
+ * @deprecated Use {@link useAuiState} to select and narrow `s.part`.
3
+ * Return `null` for optional rendering, or throw inside the selector to
4
+ * preserve the old hook's strict behavior.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * const source = useAuiState((s) => {
9
+ * if (s.part.type !== "source") return null;
10
+ * return s.part;
11
+ * });
12
+ * ```
13
+ *
14
+ * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
15
+ */
1
16
  export declare const useMessagePartSource: () => ({
2
17
  readonly type: "source";
3
18
  readonly sourceType: "url";
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartSource.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartSource.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;EAWhC,CAAC"}
1
+ {"version":3,"file":"useMessagePartSource.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartSource.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;EAWhC,CAAC"}
@@ -1,5 +1,20 @@
1
1
  "use client";
2
2
  import { useAuiState } from "@assistant-ui/store";
3
+ /**
4
+ * @deprecated Use {@link useAuiState} to select and narrow `s.part`.
5
+ * Return `null` for optional rendering, or throw inside the selector to
6
+ * preserve the old hook's strict behavior.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const source = useAuiState((s) => {
11
+ * if (s.part.type !== "source") return null;
12
+ * return s.part;
13
+ * });
14
+ * ```
15
+ *
16
+ * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
17
+ */
3
18
  export const useMessagePartSource = () => {
4
19
  const source = useAuiState((s) => {
5
20
  if (s.part.type !== "source")
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartSource.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartSource.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE;IACvC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC1B,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;QAEJ,OAAO,CAAC,CAAC,IAA4C,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
1
+ {"version":3,"file":"useMessagePartSource.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartSource.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE;IACvC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC1B,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;QAEJ,OAAO,CAAC,CAAC,IAA4C,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -1,4 +1,19 @@
1
1
  import type { TextMessagePart, ReasoningMessagePart } from "@assistant-ui/core";
2
+ /**
3
+ * @deprecated Use {@link useAuiState} to select and narrow `s.part`.
4
+ * Return `null` for optional rendering, or throw inside the selector to
5
+ * preserve the old hook's strict behavior.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const text = useAuiState((s) => {
10
+ * if (s.part.type !== "text" && s.part.type !== "reasoning") return null;
11
+ * return s.part;
12
+ * });
13
+ * ```
14
+ *
15
+ * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
16
+ */
2
17
  export declare const useMessagePartText: () => (TextMessagePart & {
3
18
  readonly status: import("@assistant-ui/core").MessagePartStatus | import("@assistant-ui/core").ToolCallMessagePartStatus;
4
19
  }) | (ReasoningMessagePart & {
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartText.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartText.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EAErB,MAAM,oBAAoB,CAAC;AAG5B,eAAO,MAAM,kBAAkB;;;;EAY9B,CAAC"}
1
+ {"version":3,"file":"useMessagePartText.d.ts","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartText.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EAErB,MAAM,oBAAoB,CAAC;AAG5B;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB;;;;EAY9B,CAAC"}
@@ -1,5 +1,20 @@
1
1
  "use client";
2
2
  import { useAuiState } from "@assistant-ui/store";
3
+ /**
4
+ * @deprecated Use {@link useAuiState} to select and narrow `s.part`.
5
+ * Return `null` for optional rendering, or throw inside the selector to
6
+ * preserve the old hook's strict behavior.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const text = useAuiState((s) => {
11
+ * if (s.part.type !== "text" && s.part.type !== "reasoning") return null;
12
+ * return s.part;
13
+ * });
14
+ * ```
15
+ *
16
+ * See the {@link https://assistant-ui.com/docs/migrations/v0-12 migration guide}.
17
+ */
3
18
  export const useMessagePartText = () => {
4
19
  const text = useAuiState((s) => {
5
20
  if (s.part.type !== "text" && s.part.type !== "reasoning")
@@ -1 +1 @@
1
- {"version":3,"file":"useMessagePartText.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartText.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAOb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW;YACvD,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;QAEJ,OAAO,CAAC,CAAC,IACiC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
1
+ {"version":3,"file":"useMessagePartText.js","sourceRoot":"","sources":["../../../src/primitives/messagePart/useMessagePartText.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAOb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW;YACvD,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;QAEJ,OAAO,CAAC,CAAC,IACiC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
@@ -15,7 +15,7 @@ export declare namespace useThreadViewportAutoScroll {
15
15
  */
16
16
  scrollToBottomOnRunStart?: boolean | undefined;
17
17
  /**
18
- * Whether to scroll to bottom when thread history is first loaded.
18
+ * Whether to scroll to bottom when messages first appear in the thread.
19
19
  *
20
20
  * Defaults to true.
21
21
  */
@@ -1 +1 @@
1
- {"version":3,"file":"useThreadViewportAutoScroll.d.ts","sourceRoot":"","sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,OAAO,CAAC;AAQ9D,yBAAiB,2BAA2B,CAAC;IAC3C,KAAY,OAAO,GAAG;QACpB;;;;;WAKG;QACH,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAEjC;;;;WAIG;QACH,wBAAwB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAE/C;;;;WAIG;QACH,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAEjD;;;;WAIG;QACH,4BAA4B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KACpD,CAAC;CACH;AAED,eAAO,MAAM,2BAA2B,GAAI,QAAQ,SAAS,WAAW,EAAE,qGAKvE,2BAA2B,CAAC,OAAO,KAAG,WAAW,CAAC,QAAQ,CAqH5D,CAAC"}
1
+ {"version":3,"file":"useThreadViewportAutoScroll.d.ts","sourceRoot":"","sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,OAAO,CAAC;AAQ/E,yBAAiB,2BAA2B,CAAC;IAC3C,KAAY,OAAO,GAAG;QACpB;;;;;WAKG;QACH,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAEjC;;;;WAIG;QACH,wBAAwB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAE/C;;;;WAIG;QACH,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAEjD;;;;WAIG;QACH,4BAA4B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KACpD,CAAC;CACH;AAED,eAAO,MAAM,2BAA2B,GAAI,QAAQ,SAAS,WAAW,EAAE,qGAKvE,2BAA2B,CAAC,OAAO,KAAG,WAAW,CAAC,QAAQ,CAmJ5D,CAAC"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { useComposedRefs } from "@radix-ui/react-compose-refs";
3
- import { useCallback, useRef } from "react";
4
- import { useAuiEvent } from "@assistant-ui/store";
3
+ import { useCallback, useLayoutEffect, useRef } from "react";
4
+ import { useAuiEvent, useAuiState } from "@assistant-ui/store";
5
5
  import { useOnResizeContent } from "../../utils/hooks/useOnResizeContent.js";
6
6
  import { useOnScrollToBottom } from "../../utils/hooks/useOnScrollToBottom.js";
7
7
  import { useManagedRef } from "../../utils/hooks/useManagedRef.js";
@@ -9,14 +9,16 @@ import { writableStore } from "../../context/ReadonlyStore.js";
9
9
  import { useThreadViewportStore } from "../../context/react/ThreadViewportContext.js";
10
10
  export const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunStart = true, scrollToBottomOnInitialize = true, scrollToBottomOnThreadSwitch = true, }) => {
11
11
  const divRef = useRef(null);
12
+ const hasMessages = useAuiState((s) => s.thread.messages.length > 0);
13
+ const initializeScrollRequestedRef = useRef(false);
14
+ const scheduledFrameRef = useRef(null);
12
15
  const threadViewportStore = useThreadViewportStore();
13
16
  if (autoScroll === undefined) {
14
17
  autoScroll = threadViewportStore.getState().turnAnchor !== "top";
15
18
  }
16
19
  const lastScrollTop = useRef(0);
17
- // bug: when ScrollToBottom's button changes its disabled state, the scroll stops
18
- // fix: delay the state change until the scroll is done
19
- // stores the scroll behavior to reuse during content resize, or null if not scrolling
20
+ // Pending bottom-scroll intent. Planted by initialize/run-start/switch/button
21
+ // triggers, cleared only when handleScroll confirms we reached bottom.
20
22
  const scrollingToBottomBehaviorRef = useRef(null);
21
23
  const scrollToBottom = useCallback((behavior) => {
22
24
  const div = divRef.current;
@@ -25,6 +27,21 @@ export const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunSta
25
27
  scrollingToBottomBehaviorRef.current = behavior;
26
28
  div.scrollTo({ top: div.scrollHeight, behavior });
27
29
  }, []);
30
+ const scheduleScrollToBottom = useCallback((behavior) => {
31
+ scrollingToBottomBehaviorRef.current = behavior;
32
+ if (scheduledFrameRef.current !== null) {
33
+ cancelAnimationFrame(scheduledFrameRef.current);
34
+ }
35
+ scheduledFrameRef.current = requestAnimationFrame(() => {
36
+ scheduledFrameRef.current = null;
37
+ scrollToBottom(behavior);
38
+ });
39
+ }, [scrollToBottom]);
40
+ useLayoutEffect(() => () => {
41
+ if (scheduledFrameRef.current !== null) {
42
+ cancelAnimationFrame(scheduledFrameRef.current);
43
+ }
44
+ }, []);
28
45
  const hasActiveTopAnchor = useCallback(() => {
29
46
  const state = threadViewportStore.getState();
30
47
  return (state.turnAnchor === "top" &&
@@ -38,12 +55,19 @@ export const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunSta
38
55
  const isAtBottom = threadViewportStore.getState().isAtBottom;
39
56
  const newIsAtBottom = Math.abs(div.scrollHeight - div.scrollTop - div.clientHeight) < 1 ||
40
57
  div.scrollHeight <= div.clientHeight;
41
- if (!newIsAtBottom && lastScrollTop.current < div.scrollTop) {
42
- // ignore scroll down
58
+ const isInFlightDownwardScroll = !newIsAtBottom && lastScrollTop.current < div.scrollTop;
59
+ if (isInFlightDownwardScroll) {
60
+ // no-op: a smooth scroll-to-bottom fires many midpoint scroll events
61
+ // before landing, don't flicker isAtBottom or clear intent mid-animation
43
62
  }
44
63
  else {
45
64
  if (newIsAtBottom) {
46
- scrollingToBottomBehaviorRef.current = null;
65
+ // newIsAtBottom is ambiguous when the viewport doesn't overflow —
66
+ // keep intent alive until content can actually scroll
67
+ const viewportOverflows = div.scrollHeight > div.clientHeight + 1;
68
+ if (viewportOverflows) {
69
+ scrollingToBottomBehaviorRef.current = null;
70
+ }
47
71
  }
48
72
  const shouldUpdate = newIsAtBottom || scrollingToBottomBehaviorRef.current === null;
49
73
  if (shouldUpdate && newIsAtBottom !== isAtBottom) {
@@ -74,37 +98,36 @@ export const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunSta
74
98
  el.removeEventListener("scroll", handleScroll);
75
99
  };
76
100
  });
101
+ useLayoutEffect(() => {
102
+ if (!scrollToBottomOnInitialize)
103
+ return;
104
+ if (!hasMessages) {
105
+ initializeScrollRequestedRef.current = false;
106
+ return;
107
+ }
108
+ if (initializeScrollRequestedRef.current)
109
+ return;
110
+ initializeScrollRequestedRef.current = true;
111
+ // defer to an in-flight run (e.g. first message on a new thread) that
112
+ // already planted intent — otherwise we'd downgrade its "auto" to "instant"
113
+ if (scrollingToBottomBehaviorRef.current !== null)
114
+ return;
115
+ scheduleScrollToBottom("instant");
116
+ }, [hasMessages, scheduleScrollToBottom, scrollToBottomOnInitialize]);
77
117
  useOnScrollToBottom(({ behavior }) => {
78
118
  scrollToBottom(behavior);
79
119
  });
80
- // autoscroll on run start
81
120
  useAuiEvent("thread.runStart", () => {
82
121
  if (!scrollToBottomOnRunStart)
83
122
  return;
84
123
  if (threadViewportStore.getState().turnAnchor === "top")
85
124
  return;
86
- scrollingToBottomBehaviorRef.current = "auto";
87
- requestAnimationFrame(() => {
88
- scrollToBottom("auto");
89
- });
125
+ scheduleScrollToBottom("auto");
90
126
  });
91
- // scroll to bottom instantly when thread history is first loaded
92
- useAuiEvent("thread.initialize", () => {
93
- if (!scrollToBottomOnInitialize)
94
- return;
95
- scrollingToBottomBehaviorRef.current = "instant";
96
- requestAnimationFrame(() => {
97
- scrollToBottom("instant");
98
- });
99
- });
100
- // scroll to bottom instantly when switching threads
101
127
  useAuiEvent("threadListItem.switchedTo", () => {
102
128
  if (!scrollToBottomOnThreadSwitch)
103
129
  return;
104
- scrollingToBottomBehaviorRef.current = "instant";
105
- requestAnimationFrame(() => {
106
- scrollToBottom("instant");
107
- });
130
+ scheduleScrollToBottom("instant");
108
131
  });
109
132
  const autoScrollRef = useComposedRefs(resizeRef, scrollRef, divRef);
110
133
  return autoScrollRef;
@@ -1 +1 @@
1
- {"version":3,"file":"useThreadViewportAutoScroll.js","sourceRoot":"","sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useThreadViewportAutoScroll.js","sourceRoot":"","sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/react",
3
- "version": "0.14.4",
3
+ "version": "0.14.6",
4
4
  "description": "Open-source TypeScript/React library for building production-grade AI chat experiences",
5
5
  "keywords": [
6
6
  "radix-ui",
@@ -48,8 +48,8 @@
48
48
  ],
49
49
  "sideEffects": false,
50
50
  "dependencies": {
51
- "@assistant-ui/core": "^0.2.2",
52
- "@assistant-ui/store": "^0.2.10",
51
+ "@assistant-ui/core": "^0.2.3",
52
+ "@assistant-ui/store": "^0.2.11",
53
53
  "@assistant-ui/tap": "^0.5.11",
54
54
  "@radix-ui/primitive": "^1.1.3",
55
55
  "@radix-ui/react-compose-refs": "^1.1.2",
@@ -57,8 +57,8 @@
57
57
  "@radix-ui/react-primitive": "^2.1.4",
58
58
  "@radix-ui/react-use-callback-ref": "^1.1.1",
59
59
  "@radix-ui/react-use-escape-keydown": "^1.1.1",
60
- "assistant-cloud": "^0.1.27",
61
- "assistant-stream": "^0.3.14",
60
+ "assistant-cloud": "^0.1.28",
61
+ "assistant-stream": "^0.3.15",
62
62
  "nanoid": "^5.1.11",
63
63
  "radix-ui": "^1.4.3",
64
64
  "react-textarea-autosize": "^8.5.9",
@@ -90,11 +90,11 @@
90
90
  "react": "^19.2.5",
91
91
  "react-dom": "^19.2.5",
92
92
  "vitest": "^4.1.5",
93
- "@assistant-ui/x-buildutils": "0.0.7"
93
+ "@assistant-ui/x-buildutils": "0.0.8"
94
94
  },
95
95
  "publishConfig": {
96
96
  "access": "public",
97
- "provenance": false
97
+ "provenance": true
98
98
  },
99
99
  "homepage": "https://www.assistant-ui.com/",
100
100
  "repository": {
package/src/index.ts CHANGED
@@ -378,6 +378,12 @@ export {
378
378
  type RegisteredTrigger as Unstable_RegisteredTrigger,
379
379
  type TriggerBehavior as Unstable_TriggerBehavior,
380
380
  } from "./primitives/composer/trigger";
381
+ export type {
382
+ Unstable_DirectiveFormatter,
383
+ Unstable_DirectiveSegment,
384
+ Unstable_TriggerItem,
385
+ } from "@assistant-ui/core";
386
+ export { unstable_defaultDirectiveFormatter } from "@assistant-ui/core";
381
387
 
382
388
  export type { Assistant } from "./augmentations";
383
389