@osdk/react-components 0.33.0 → 0.34.0-main-d24cc61b1e7fde7722d8229ed2b6821f5ce1bf8a

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 (145) hide show
  1. package/AGENTS.md +3 -0
  2. package/CHANGELOG.md +19 -0
  3. package/README.md +14 -13
  4. package/build/browser/aip-agent-chat/AipAgentChat.js +113 -0
  5. package/build/browser/aip-agent-chat/AipAgentChat.js.map +1 -0
  6. package/build/browser/aip-agent-chat/AipAgentChat.module.css +231 -0
  7. package/build/browser/aip-agent-chat/AipAgentChat.module.css.js +29 -0
  8. package/build/browser/aip-agent-chat/AipAgentChatApi.js +2 -0
  9. package/build/browser/aip-agent-chat/AipAgentChatApi.js.map +1 -0
  10. package/build/browser/aip-agent-chat/BaseAipAgentChat.js +67 -0
  11. package/build/browser/aip-agent-chat/BaseAipAgentChat.js.map +1 -0
  12. package/build/browser/aip-agent-chat/components/AipAgentChatComposer.js +96 -0
  13. package/build/browser/aip-agent-chat/components/AipAgentChatComposer.js.map +1 -0
  14. package/build/browser/aip-agent-chat/components/AipAgentChatLoader.js +43 -0
  15. package/build/browser/aip-agent-chat/components/AipAgentChatLoader.js.map +1 -0
  16. package/build/browser/aip-agent-chat/components/AipAgentChatMessage.js +60 -0
  17. package/build/browser/aip-agent-chat/components/AipAgentChatMessage.js.map +1 -0
  18. package/build/browser/aip-agent-chat/components/AipAgentChatMessageList.js +60 -0
  19. package/build/browser/aip-agent-chat/components/AipAgentChatMessageList.js.map +1 -0
  20. package/build/browser/aip-agent-chat/components/AipAgentChatModelPicker.js +56 -0
  21. package/build/browser/aip-agent-chat/components/AipAgentChatModelPicker.js.map +1 -0
  22. package/build/browser/aip-agent-chat/hooks/useChatAutoScroll.js +61 -0
  23. package/build/browser/aip-agent-chat/hooks/useChatAutoScroll.js.map +1 -0
  24. package/build/browser/base-components/callout/Callout.js +65 -0
  25. package/build/browser/base-components/callout/Callout.js.map +1 -0
  26. package/build/browser/base-components/callout/Callout.module.css +59 -0
  27. package/build/browser/base-components/callout/Callout.module.css.js +15 -0
  28. package/build/browser/public/experimental/aip-agent-chat.js +22 -0
  29. package/build/browser/public/experimental/aip-agent-chat.js.map +1 -0
  30. package/build/browser/styles.css +402 -0
  31. package/build/browser/tokens/base-tokens/dark.css +10 -0
  32. package/build/browser/tokens/component-tokens/aip-agent-chat.css +56 -0
  33. package/build/browser/tokens/component-tokens/callout.css +40 -0
  34. package/build/browser/tokens.css +2 -0
  35. package/build/browser/util/UserAgent.js +1 -1
  36. package/build/browser/util/UserAgent.js.map +1 -1
  37. package/build/cjs/{chunk-N5NOB4G4.cjs → chunk-4SBWDLNA.cjs} +4 -4
  38. package/build/cjs/{chunk-N5NOB4G4.cjs.map → chunk-4SBWDLNA.cjs.map} +1 -1
  39. package/build/cjs/{chunk-PFGIO77A.cjs → chunk-5JPP5IKU.cjs} +4 -4
  40. package/build/cjs/{chunk-PFGIO77A.cjs.map → chunk-5JPP5IKU.cjs.map} +1 -1
  41. package/build/cjs/{chunk-56CFJTXV.cjs → chunk-73EYJP6Z.cjs} +6 -6
  42. package/build/cjs/{chunk-56CFJTXV.cjs.map → chunk-73EYJP6Z.cjs.map} +1 -1
  43. package/build/cjs/{chunk-XCZD54BD.cjs → chunk-ABKLMCWO.cjs} +4 -4
  44. package/build/cjs/{chunk-XCZD54BD.cjs.map → chunk-ABKLMCWO.cjs.map} +1 -1
  45. package/build/cjs/{chunk-QWFT3G4W.cjs → chunk-EOXGPHI7.cjs} +4 -4
  46. package/build/cjs/{chunk-QWFT3G4W.cjs.map → chunk-EOXGPHI7.cjs.map} +1 -1
  47. package/build/cjs/chunk-HM6F2PSA.cjs +11 -0
  48. package/build/cjs/{chunk-N7TOWLUY.cjs.map → chunk-HM6F2PSA.cjs.map} +1 -1
  49. package/build/cjs/chunk-ILBAVINW.cjs +11 -0
  50. package/build/cjs/{chunk-SUEZQS7M.cjs.map → chunk-ILBAVINW.cjs.map} +1 -1
  51. package/build/cjs/chunk-MSUA3D5M.cjs +11 -0
  52. package/build/cjs/{chunk-AEFCONAY.cjs.map → chunk-MSUA3D5M.cjs.map} +1 -1
  53. package/build/cjs/{chunk-4AGEVOFW.cjs → chunk-MV4WJDCS.cjs} +4 -4
  54. package/build/cjs/{chunk-4AGEVOFW.cjs.map → chunk-MV4WJDCS.cjs.map} +1 -1
  55. package/build/cjs/{chunk-LYAAHEAS.cjs → chunk-PSXAPQB3.cjs} +4 -4
  56. package/build/cjs/{chunk-LYAAHEAS.cjs.map → chunk-PSXAPQB3.cjs.map} +1 -1
  57. package/build/cjs/chunk-RCL5R3P4.cjs +11 -0
  58. package/build/cjs/{chunk-D6RQIMMX.cjs.map → chunk-RCL5R3P4.cjs.map} +1 -1
  59. package/build/cjs/{chunk-OTAWBR27.cjs → chunk-S7Z4MCUS.cjs} +4 -4
  60. package/build/cjs/{chunk-OTAWBR27.cjs.map → chunk-S7Z4MCUS.cjs.map} +1 -1
  61. package/build/cjs/{chunk-364UCCB2.cjs → chunk-WVRYCKJY.cjs} +3 -3
  62. package/build/cjs/chunk-WVRYCKJY.cjs.map +1 -0
  63. package/build/cjs/chunk-YNECVUTQ.cjs +11 -0
  64. package/build/cjs/{chunk-3MDT2TJK.cjs.map → chunk-YNECVUTQ.cjs.map} +1 -1
  65. package/build/cjs/public/experimental/action-form.cjs +4 -4
  66. package/build/cjs/public/experimental/aip-agent-chat.cjs +434 -0
  67. package/build/cjs/public/experimental/aip-agent-chat.cjs.map +1 -0
  68. package/build/cjs/public/experimental/aip-agent-chat.css +304 -0
  69. package/build/cjs/public/experimental/aip-agent-chat.css.map +1 -0
  70. package/build/cjs/public/experimental/aip-agent-chat.d.cts +202 -0
  71. package/build/cjs/public/experimental/cbac-picker.cjs +11 -11
  72. package/build/cjs/public/experimental/document-viewer.cjs +6 -6
  73. package/build/cjs/public/experimental/email-viewer.cjs +3 -3
  74. package/build/cjs/public/experimental/excel-viewer.cjs +3 -3
  75. package/build/cjs/public/experimental/filter-list.cjs +15 -15
  76. package/build/cjs/public/experimental/image-viewer.cjs +3 -3
  77. package/build/cjs/public/experimental/markdown-renderer.cjs +3 -3
  78. package/build/cjs/public/experimental/object-table.cjs +8 -8
  79. package/build/cjs/public/experimental/pdf-viewer.cjs +7 -7
  80. package/build/cjs/public/experimental/tiff-renderer.cjs +3 -3
  81. package/build/cjs/public/experimental/video-viewer.cjs +3 -3
  82. package/build/cjs/public/experimental/xml-viewer.cjs +3 -3
  83. package/build/cjs/public/experimental.cjs +74 -74
  84. package/build/esm/aip-agent-chat/AipAgentChat.js +113 -0
  85. package/build/esm/aip-agent-chat/AipAgentChat.js.map +1 -0
  86. package/build/esm/aip-agent-chat/AipAgentChat.module.css +231 -0
  87. package/build/esm/aip-agent-chat/AipAgentChatApi.js +2 -0
  88. package/build/esm/aip-agent-chat/AipAgentChatApi.js.map +1 -0
  89. package/build/esm/aip-agent-chat/BaseAipAgentChat.js +67 -0
  90. package/build/esm/aip-agent-chat/BaseAipAgentChat.js.map +1 -0
  91. package/build/esm/aip-agent-chat/components/AipAgentChatComposer.js +96 -0
  92. package/build/esm/aip-agent-chat/components/AipAgentChatComposer.js.map +1 -0
  93. package/build/esm/aip-agent-chat/components/AipAgentChatLoader.js +43 -0
  94. package/build/esm/aip-agent-chat/components/AipAgentChatLoader.js.map +1 -0
  95. package/build/esm/aip-agent-chat/components/AipAgentChatMessage.js +60 -0
  96. package/build/esm/aip-agent-chat/components/AipAgentChatMessage.js.map +1 -0
  97. package/build/esm/aip-agent-chat/components/AipAgentChatMessageList.js +60 -0
  98. package/build/esm/aip-agent-chat/components/AipAgentChatMessageList.js.map +1 -0
  99. package/build/esm/aip-agent-chat/components/AipAgentChatModelPicker.js +56 -0
  100. package/build/esm/aip-agent-chat/components/AipAgentChatModelPicker.js.map +1 -0
  101. package/build/esm/aip-agent-chat/hooks/useChatAutoScroll.js +61 -0
  102. package/build/esm/aip-agent-chat/hooks/useChatAutoScroll.js.map +1 -0
  103. package/build/esm/base-components/callout/Callout.js +65 -0
  104. package/build/esm/base-components/callout/Callout.js.map +1 -0
  105. package/build/esm/base-components/callout/Callout.module.css +59 -0
  106. package/build/esm/public/experimental/aip-agent-chat.js +22 -0
  107. package/build/esm/public/experimental/aip-agent-chat.js.map +1 -0
  108. package/build/esm/tokens/base-tokens/dark.css +10 -0
  109. package/build/esm/tokens/component-tokens/aip-agent-chat.css +56 -0
  110. package/build/esm/tokens/component-tokens/callout.css +40 -0
  111. package/build/esm/tokens.css +2 -0
  112. package/build/esm/util/UserAgent.js +1 -1
  113. package/build/esm/util/UserAgent.js.map +1 -1
  114. package/build/types/aip-agent-chat/AipAgentChat.d.ts +10 -0
  115. package/build/types/aip-agent-chat/AipAgentChat.d.ts.map +1 -0
  116. package/build/types/aip-agent-chat/AipAgentChatApi.d.ts +135 -0
  117. package/build/types/aip-agent-chat/AipAgentChatApi.d.ts.map +1 -0
  118. package/build/types/aip-agent-chat/BaseAipAgentChat.d.ts +55 -0
  119. package/build/types/aip-agent-chat/BaseAipAgentChat.d.ts.map +1 -0
  120. package/build/types/aip-agent-chat/components/AipAgentChatComposer.d.ts +19 -0
  121. package/build/types/aip-agent-chat/components/AipAgentChatComposer.d.ts.map +1 -0
  122. package/build/types/aip-agent-chat/components/AipAgentChatLoader.d.ts +9 -0
  123. package/build/types/aip-agent-chat/components/AipAgentChatLoader.d.ts.map +1 -0
  124. package/build/types/aip-agent-chat/components/AipAgentChatMessage.d.ts +12 -0
  125. package/build/types/aip-agent-chat/components/AipAgentChatMessage.d.ts.map +1 -0
  126. package/build/types/aip-agent-chat/components/AipAgentChatMessageList.d.ts +11 -0
  127. package/build/types/aip-agent-chat/components/AipAgentChatMessageList.d.ts.map +1 -0
  128. package/build/types/aip-agent-chat/components/AipAgentChatModelPicker.d.ts +16 -0
  129. package/build/types/aip-agent-chat/components/AipAgentChatModelPicker.d.ts.map +1 -0
  130. package/build/types/aip-agent-chat/hooks/useChatAutoScroll.d.ts +11 -0
  131. package/build/types/aip-agent-chat/hooks/useChatAutoScroll.d.ts.map +1 -0
  132. package/build/types/base-components/callout/Callout.d.ts +33 -0
  133. package/build/types/base-components/callout/Callout.d.ts.map +1 -0
  134. package/build/types/public/experimental/aip-agent-chat.d.ts +7 -0
  135. package/build/types/public/experimental/aip-agent-chat.d.ts.map +1 -0
  136. package/docs/AipAgentChat.md +207 -0
  137. package/docs/CSSVariables.md +52 -0
  138. package/docs/Welcome.md +1 -0
  139. package/package.json +24 -8
  140. package/build/cjs/chunk-364UCCB2.cjs.map +0 -1
  141. package/build/cjs/chunk-3MDT2TJK.cjs +0 -11
  142. package/build/cjs/chunk-AEFCONAY.cjs +0 -11
  143. package/build/cjs/chunk-D6RQIMMX.cjs +0 -11
  144. package/build/cjs/chunk-N7TOWLUY.cjs +0 -11
  145. package/build/cjs/chunk-SUEZQS7M.cjs +0 -11
@@ -0,0 +1,207 @@
1
+ # AipAgentChat
2
+
3
+ A React component for rendering an AI chat surface backed by Foundry's
4
+ LMS via `useChat` from `@osdk/react/experimental/aip`. Importing the
5
+ component is sufficient — consumers do not need to import `useChat` or
6
+ `foundryModel` themselves.
7
+
8
+ ## Import
9
+
10
+ ```tsx
11
+ import {
12
+ AipAgentChat,
13
+ BaseAipAgentChat,
14
+ } from "@osdk/react-components/experimental/aip-agent-chat";
15
+ ```
16
+
17
+ - **`AipAgentChat`** — Primary component for OSDK usage. Accepts a
18
+ Foundry `PlatformClient` and an LMS model API name; constructs the
19
+ language-model handle, drives `useChat`, and renders the chat UI.
20
+ - **`BaseAipAgentChat`** — Lower-level OSDK-agnostic component that
21
+ accepts `messages`, `status`, and `onSendMessage` directly. Use this
22
+ when you already manage chat state yourself (a custom hook, a
23
+ non-OSDK backend, etc.).
24
+
25
+ ## Usage
26
+
27
+ ### Minimal
28
+
29
+ ```tsx
30
+ import { AipAgentChat } from "@osdk/react-components/experimental/aip-agent-chat";
31
+ import { platformClient } from "./foundryClient.js";
32
+
33
+ // `model` and `defaultModel` are both optional — falls back to "gpt-4o".
34
+ <AipAgentChat client={platformClient} />;
35
+ ```
36
+
37
+ ### Pinned model
38
+
39
+ ```tsx
40
+ <AipAgentChat
41
+ client={platformClient}
42
+ model="gpt-4o"
43
+ system="You are a concise assistant. Keep answers short."
44
+ />;
45
+ ```
46
+
47
+ ### With model picker (controlled)
48
+
49
+ ```tsx
50
+ function MyChat() {
51
+ const [model, setModel] = useState("gpt-4o");
52
+ return (
53
+ <AipAgentChat
54
+ client={platformClient}
55
+ model={model}
56
+ availableModels={["gpt-4o", "AnthropicClaude_4_6_Sonnet"]}
57
+ onModelChange={setModel}
58
+ />
59
+ );
60
+ }
61
+ ```
62
+
63
+ ### With model picker (uncontrolled)
64
+
65
+ ```tsx
66
+ <AipAgentChat
67
+ client={platformClient}
68
+ defaultModel="gpt-4o"
69
+ availableModels={["gpt-4o", "AnthropicClaude_4_6_Sonnet"]}
70
+ onModelChange={(modelName) => analytics.track({ modelName })}
71
+ />;
72
+ ```
73
+
74
+ The component manages model state internally; `onModelChange` is a
75
+ non-controlling listener (analytics, persistence, etc.).
76
+
77
+ ### Custom render
78
+
79
+ ```tsx
80
+ import {
81
+ AipAgentChat,
82
+ getUIMessageText,
83
+ type UIMessage,
84
+ } from "@osdk/react-components/experimental/aip-agent-chat";
85
+
86
+ <AipAgentChat
87
+ client={platformClient}
88
+ model="gpt-4o"
89
+ renderMessage={(message: UIMessage) => (
90
+ <div>
91
+ <strong>{message.role}:</strong> {getUIMessageText(message)}
92
+ </div>
93
+ )}
94
+ renderEmptyState={() => <p>Ready when you are.</p>}
95
+ />;
96
+ ```
97
+
98
+ ### Drop down to BaseAipAgentChat
99
+
100
+ `BaseAipAgentChat` is OSDK-agnostic — the consumer drives the chat by
101
+ passing the current `messages`, `status`, `error`, and an `onSendMessage`
102
+ callback that resolves once the user's message has been forwarded.
103
+ Use it for non-OSDK backends, custom transports, or unit tests.
104
+
105
+ ```tsx
106
+ import {
107
+ BaseAipAgentChat,
108
+ type ChatStatus,
109
+ type UIMessage,
110
+ } from "@osdk/react-components/experimental/aip-agent-chat";
111
+
112
+ function MyChat() {
113
+ const [messages, setMessages] = useState<ReadonlyArray<UIMessage>>([]);
114
+ const [status, setStatus] = useState<ChatStatus>("ready");
115
+ const [error, setError] = useState<Error | undefined>();
116
+
117
+ return (
118
+ <BaseAipAgentChat
119
+ messages={messages}
120
+ status={status}
121
+ error={error}
122
+ onSendMessage={async (text) => {
123
+ setStatus("submitted");
124
+ try {
125
+ const reply = await callMyBackend(text, { history: messages });
126
+ setMessages((prev) => [
127
+ ...prev,
128
+ {
129
+ id: crypto.randomUUID(),
130
+ role: "user",
131
+ parts: [{ type: "text", text }],
132
+ },
133
+ {
134
+ id: crypto.randomUUID(),
135
+ role: "assistant",
136
+ parts: [{ type: "text", text: reply }],
137
+ },
138
+ ]);
139
+ setStatus("ready");
140
+ } catch (err) {
141
+ setError(err as Error);
142
+ setStatus("error");
143
+ }
144
+ }}
145
+ onStop={() => setStatus("ready")}
146
+ onClearError={() => setError(undefined)}
147
+ />
148
+ );
149
+ }
150
+ ```
151
+
152
+ ### Drop further: useChat directly
153
+
154
+ For full control over the chat hook (regenerate, multi-step agent
155
+ loops, custom transports), call `useChat` from `@osdk/react/experimental/aip`
156
+ yourself and feed the result into your own UI.
157
+
158
+ ```tsx
159
+ import { foundryModel } from "@osdk/aip-core";
160
+ import { useChat } from "@osdk/react/experimental/aip";
161
+
162
+ function MyChat() {
163
+ const lmsModel = useMemo(
164
+ () => foundryModel({ client: platformClient, model: "gpt-4o" }),
165
+ [],
166
+ );
167
+ const { messages, status, error, sendMessage, stop, clearError } = useChat({
168
+ model: lmsModel,
169
+ });
170
+
171
+ return (
172
+ <YourCustomChatLayout
173
+ messages={messages}
174
+ status={status}
175
+ error={error}
176
+ onSend={(text) => void sendMessage({ text })}
177
+ onStop={stop}
178
+ onClearError={clearError}
179
+ />
180
+ );
181
+ }
182
+ ```
183
+
184
+ ## Props
185
+
186
+ See [`AipAgentChatApi.ts`](../src/aip-agent-chat/AipAgentChatApi.ts) for
187
+ the full prop list with JSDoc. `client` is the only required prop.
188
+ `model` (controlled) and `defaultModel` (uncontrolled) are both
189
+ optional; if neither is supplied the chat falls back to the first
190
+ entry of `availableModels` (when provided), or to `"gpt-4o"`. Notable
191
+ optional props:
192
+
193
+ - `availableModels` + `onModelChange` — render a model picker in the
194
+ composer footer.
195
+ - `system` — system prompt prepended to every request.
196
+ - `initialMessages` — seed conversation snapshot.
197
+ - `enableAutoScroll` (default `true`) — auto-pin to the bottom of the
198
+ message list as new tokens arrive.
199
+ - `renderEmptyState` / `renderMessage` — render overrides.
200
+ - `onError`, `onFinish` — listeners forwarded to `useChat`.
201
+
202
+ ## Theming
203
+
204
+ CSS variables are documented in
205
+ [`docs/CSSVariables.md`](./CSSVariables.md). The `--osdk-aip-agent-chat-*`
206
+ namespace covers spacing, bubble colors, composer styling, and the
207
+ 3-dot loader.
@@ -232,6 +232,58 @@ Component-specific semantic tokens that may reference Blueprint tokens or define
232
232
  | `--osdk-surface-border` | `var(--osdk-surface-border-width) solid var(--osdk-surface-border-color-default)` | Reusable border shorthand |
233
233
  | `--osdk-disabled-opacity` | `0.5` | Disabled state opacity |
234
234
 
235
+ ### AIP Agent Chat
236
+
237
+ Tokens for the `AipAgentChat` chat surface (container, message bubbles, composer, empty state, loader, error banner).
238
+
239
+ | Variable | Default Value | Description |
240
+ | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
241
+ | `--osdk-aip-agent-chat-background` | `var(--osdk-background-primary)` | Chat container background |
242
+ | `--osdk-aip-agent-chat-border-color` | `var(--osdk-surface-border-color-default)` | Container and composer separator color |
243
+ | `--osdk-aip-agent-chat-border-radius` | `var(--osdk-surface-border-radius)` | Container corner radius |
244
+ | `--osdk-aip-agent-chat-padding` | `calc(var(--osdk-surface-spacing) * 5)` | Outer padding for message list and composer |
245
+ | `--osdk-aip-agent-chat-message-gap` | `calc(var(--osdk-surface-spacing) * 5)` | Vertical gap between messages |
246
+ | `--osdk-aip-agent-chat-section-gap` | `calc(var(--osdk-surface-spacing) * 2.5)` | Gap between composer rows / footer items |
247
+ | `--osdk-aip-agent-chat-content-max-width` | `780px` | Maximum width of the chat content area |
248
+ | `--osdk-aip-agent-chat-bubble-padding` | `calc(var(--osdk-surface-spacing) * 3)` | Padding inside each message bubble |
249
+ | `--osdk-aip-agent-chat-bubble-border-radius` | `var(--osdk-surface-border-radius)` | Bubble corner radius |
250
+ | `--osdk-aip-agent-chat-bubble-max-width` | `80%` | Maximum bubble width |
251
+ | `--osdk-aip-agent-chat-user-bubble-background` | `var(--osdk-background-secondary)` | User-message bubble background |
252
+ | `--osdk-aip-agent-chat-user-bubble-color` | `var(--osdk-typography-color-default-rest)` | User-message text color |
253
+ | `--osdk-aip-agent-chat-user-bubble-border-radius` | `var(--osdk-surface-border-radius) var(--osdk-surface-border-radius) 0 var(--osdk-surface-border-radius)` | User-message bubble corner radius (chat-tail shape) |
254
+ | `--osdk-aip-agent-chat-assistant-bubble-color` | `var(--osdk-typography-color-default-rest)` | Assistant-message text color |
255
+ | `--osdk-aip-agent-chat-composer-border-radius` | `calc(var(--osdk-surface-spacing) * 2.5)` | Composer input border radius |
256
+ | `--osdk-aip-agent-chat-composer-background` | `var(--osdk-surface-background-color-default-rest)` | Composer background |
257
+ | `--osdk-aip-agent-chat-composer-textarea-min-height` | `calc(var(--osdk-surface-spacing) * 14)` | Textarea minimum height |
258
+ | `--osdk-aip-agent-chat-composer-textarea-max-height` | `200px` | Textarea maximum height |
259
+ | `--osdk-aip-agent-chat-empty-color` | `var(--osdk-typography-color-muted)` | Empty-state subtext color |
260
+ | `--osdk-aip-agent-chat-empty-icon-color` | `var(--osdk-intent-primary-rest)` | Empty-state icon color |
261
+ | `--osdk-aip-agent-chat-empty-icon-size` | `calc(var(--osdk-surface-spacing) * 12)` | Empty-state icon size |
262
+ | `--osdk-aip-agent-chat-loader-color` | `var(--osdk-typography-color-muted)` | 3-dot streaming loader color |
263
+ | `--osdk-aip-agent-chat-loader-dot-size` | `calc(var(--osdk-surface-spacing) * 1.5)` | Loader dot diameter |
264
+ | `--osdk-aip-agent-chat-loader-dot-gap` | `calc(var(--osdk-surface-spacing) * 0.5)` | Loader dot gap |
265
+
266
+ ### Callout
267
+
268
+ Tokens for the `Callout` component used for error, warning, success, and info banners. In dark mode, the intent text colors switch to brighter `--rest` shades for readability.
269
+
270
+ | Variable | Default Value | Description |
271
+ | ----------------------------------- | ---------------------------------------------------------------------------- | ------------------------- |
272
+ | `--osdk-callout-padding` | `calc(var(--osdk-surface-spacing) * 4)` | Inner padding |
273
+ | `--osdk-callout-gap` | `calc(var(--osdk-surface-spacing) * 2)` | Gap between icon and text |
274
+ | `--osdk-callout-border-radius` | `var(--osdk-surface-border-radius)` | Corner radius |
275
+ | `--osdk-callout-title-font-size` | `var(--osdk-typography-size-body-medium)` | Title font size |
276
+ | `--osdk-callout-title-font-weight` | `var(--osdk-typography-weight-bold)` | Title font weight |
277
+ | `--osdk-callout-message-font-size` | `var(--osdk-typography-size-body-small)` | Message body font size |
278
+ | `--osdk-callout-error-background` | `color-mix(in srgb, var(--osdk-intent-danger-rest) 10%, transparent)` | Error intent background |
279
+ | `--osdk-callout-error-color` | `var(--osdk-intent-danger-hover)` (dark: `var(--osdk-intent-danger-rest)`) | Error intent text color |
280
+ | `--osdk-callout-warning-background` | `color-mix(in srgb, var(--osdk-intent-warning-rest) 10%, transparent)` | Warning intent background |
281
+ | `--osdk-callout-warning-color` | `var(--osdk-intent-warning-hover)` (dark: `var(--osdk-intent-warning-rest)`) | Warning intent text color |
282
+ | `--osdk-callout-success-background` | `color-mix(in srgb, var(--osdk-intent-success-rest) 10%, transparent)` | Success intent background |
283
+ | `--osdk-callout-success-color` | `var(--osdk-intent-success-hover)` (dark: `var(--osdk-intent-success-rest)`) | Success intent text color |
284
+ | `--osdk-callout-info-background` | `color-mix(in srgb, var(--osdk-intent-primary-rest) 10%, transparent)` | Info intent background |
285
+ | `--osdk-callout-info-color` | `var(--osdk-intent-primary-hover)` (dark: `var(--osdk-intent-primary-rest)`) | Info intent text color |
286
+
235
287
  ### Drag Handle
236
288
 
237
289
  Shared tokens for drag handle styling across components.
package/docs/Welcome.md CHANGED
@@ -18,6 +18,7 @@ forms, and filters.
18
18
  | `FilterList` | Interactive filter panel with histogram filters, date ranges, and search |
19
19
  | `ActionForm` | Auto-generated form for executing Ontology Actions |
20
20
  | `DocumentViewer` | Unified media viewer that auto-detects file type (PDF, Excel, images, video) |
21
+ | `AipAgentChat` | Chat surface backed by Foundry LMS |
21
22
 
22
23
  All components are exported under `@osdk/react-components/experimental/*`
23
24
  sub-paths (e.g. `@osdk/react-components/experimental/object-table`).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osdk/react-components",
3
- "version": "0.33.0",
3
+ "version": "0.34.0-main-d24cc61b1e7fde7722d8229ed2b6821f5ce1bf8a",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -43,6 +43,15 @@
43
43
  "require": "./build/cjs/public/experimental/action-form.cjs",
44
44
  "default": "./build/browser/public/experimental/action-form.js"
45
45
  },
46
+ "./experimental/aip-agent-chat": {
47
+ "browser": "./build/browser/public/experimental/aip-agent-chat.js",
48
+ "import": {
49
+ "types": "./build/types/public/experimental/aip-agent-chat.d.ts",
50
+ "default": "./build/esm/public/experimental/aip-agent-chat.js"
51
+ },
52
+ "require": "./build/cjs/public/experimental/aip-agent-chat.cjs",
53
+ "default": "./build/browser/public/experimental/aip-agent-chat.js"
54
+ },
46
55
  "./experimental/cbac-picker": {
47
56
  "browser": "./build/browser/public/experimental/cbac-picker.js",
48
57
  "import": {
@@ -193,14 +202,20 @@
193
202
  "xlsx-republish": "0.20.3"
194
203
  },
195
204
  "peerDependencies": {
196
- "@osdk/api": "^2.8.0",
197
- "@osdk/client": "^2.8.0",
198
- "@osdk/react": "^2.8.0",
205
+ "@osdk/aip-core": ">=0.5.0 <1.0.0",
206
+ "@osdk/api": ">=2.41.0-beta.0",
207
+ "@osdk/client": ">=2.41.0-beta.0",
208
+ "@osdk/react": ">=2.41.0-beta.0",
199
209
  "@types/react": "^17 || ^18 || ^19",
200
210
  "classnames": "^2.0.0",
201
211
  "react": "^17 || ^18 || ^19",
202
212
  "react-dom": "^17 || ^18 || ^19"
203
213
  },
214
+ "peerDependenciesMeta": {
215
+ "@osdk/aip-core": {
216
+ "optional": true
217
+ }
218
+ },
204
219
  "devDependencies": {
205
220
  "@testing-library/react": "^16.3.0",
206
221
  "@types/lodash-es": "^4.17.12",
@@ -213,11 +228,12 @@
213
228
  "react": "^18.3.1",
214
229
  "react-dom": "^18.3.1",
215
230
  "typescript": "~5.5.4",
216
- "@osdk/client": "2.40.0",
231
+ "@osdk/aip-core": "0.6.0-main-d24cc61b1e7fde7722d8229ed2b6821f5ce1bf8a",
232
+ "@osdk/api": "2.41.0-main-d24cc61b1e7fde7722d8229ed2b6821f5ce1bf8a",
233
+ "@osdk/client": "2.41.0-main-d24cc61b1e7fde7722d8229ed2b6821f5ce1bf8a",
217
234
  "@osdk/monorepo.api-extractor": "~0.7.0",
218
- "@osdk/react": "2.40.0",
219
- "@osdk/api": "2.40.0",
220
- "@osdk/monorepo.tsconfig": "~0.7.0"
235
+ "@osdk/monorepo.tsconfig": "~0.7.0",
236
+ "@osdk/react": "2.41.0-main-d24cc61b1e7fde7722d8229ed2b6821f5ce1bf8a"
221
237
  },
222
238
  "publishConfig": {
223
239
  "access": "public"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/util/UserAgent.ts","../../src/util/withOsdkMetrics.ts"],"names":["useRegisterUserAgent","React"],"mappings":";;;;;;;;;;;;AAgBA,IAAM,kBAAA,GAAqB,yBAAyB,QAA2B,CAAA,CAAA;AACxE,SAAS,mBAAmB,aAAA,EAAe;AAChD,EAAA,OAAO,CAAA,EAAG,kBAAkB,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA;AAC/C;;;ACKO,SAAS,eAAA,CAAgB,WAAW,IAAA,EAAM;AAC/C,EAAA,MAAM,UAAU,CAAA,KAAA,KAAS;AACvB,IAAAA,0BAAA,CAAqB,kBAAA,CAAmB,IAAI,CAAC,CAAA;AAC7C,IAAA,uBAAoBC,sBAAA,CAAM,aAAA,CAAc,SAAA,EAAW,KAAK,CAAA;AAAA,EAC1D,CAAA;AACA,EAAA,OAAA,CAAQ,WAAA,GAAc,mBAAmB,IAAI,CAAA,CAAA,CAAA;AAC7C,EAAA,OAAO,OAAA;AACT","file":"chunk-364UCCB2.cjs","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst PACKAGE_USER_AGENT = `osdk-react-components/${process.env.PACKAGE_VERSION}`;\nexport function componentUserAgent(componentName) {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}","/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useRegisterUserAgent } from \"@osdk/react\";\nimport React from \"react\";\nimport { componentUserAgent } from \"./UserAgent.js\";\n\n// `any` is required: FunctionComponent defaults to FunctionComponent<{}> which\n// rejects components with required props. A generic P parameter doesn't help\n// because TS can't infer both P and C simultaneously from a single argument.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withOsdkMetrics(Component, name) {\n const Wrapped = props => {\n useRegisterUserAgent(componentUserAgent(name));\n return /*#__PURE__*/React.createElement(Component, props);\n };\n Wrapped.displayName = `withOsdkMetrics(${name})`;\n return Wrapped;\n}"]}
@@ -1,11 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkVOROB7KJ_cjs = require('./chunk-VOROB7KJ.cjs');
4
- var chunk364UCCB2_cjs = require('./chunk-364UCCB2.cjs');
5
-
6
- // src/public/experimental/image-viewer.ts
7
- var ImageViewer2 = chunk364UCCB2_cjs.withOsdkMetrics(chunkVOROB7KJ_cjs.ImageViewer, "ImageViewer");
8
-
9
- exports.ImageViewer = ImageViewer2;
10
- //# sourceMappingURL=chunk-3MDT2TJK.cjs.map
11
- //# sourceMappingURL=chunk-3MDT2TJK.cjs.map
@@ -1,11 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkKHMOMROL_cjs = require('./chunk-KHMOMROL.cjs');
4
- var chunk364UCCB2_cjs = require('./chunk-364UCCB2.cjs');
5
-
6
- // src/public/experimental/video-viewer.ts
7
- var VideoViewer2 = chunk364UCCB2_cjs.withOsdkMetrics(chunkKHMOMROL_cjs.VideoViewer, "VideoViewer");
8
-
9
- exports.VideoViewer = VideoViewer2;
10
- //# sourceMappingURL=chunk-AEFCONAY.cjs.map
11
- //# sourceMappingURL=chunk-AEFCONAY.cjs.map
@@ -1,11 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkPKJFOG2Z_cjs = require('./chunk-PKJFOG2Z.cjs');
4
- var chunk364UCCB2_cjs = require('./chunk-364UCCB2.cjs');
5
-
6
- // src/public/experimental/email-viewer.ts
7
- var EmailViewer2 = chunk364UCCB2_cjs.withOsdkMetrics(chunkPKJFOG2Z_cjs.EmailViewer, "EmailViewer");
8
-
9
- exports.EmailViewer = EmailViewer2;
10
- //# sourceMappingURL=chunk-D6RQIMMX.cjs.map
11
- //# sourceMappingURL=chunk-D6RQIMMX.cjs.map
@@ -1,11 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkOUJQJQ7N_cjs = require('./chunk-OUJQJQ7N.cjs');
4
- var chunk364UCCB2_cjs = require('./chunk-364UCCB2.cjs');
5
-
6
- // src/public/experimental/xml-viewer.ts
7
- var XmlViewer2 = chunk364UCCB2_cjs.withOsdkMetrics(chunkOUJQJQ7N_cjs.XmlViewer, "XmlViewer");
8
-
9
- exports.XmlViewer = XmlViewer2;
10
- //# sourceMappingURL=chunk-N7TOWLUY.cjs.map
11
- //# sourceMappingURL=chunk-N7TOWLUY.cjs.map
@@ -1,11 +0,0 @@
1
- 'use strict';
2
-
3
- var chunk3SJODG6U_cjs = require('./chunk-3SJODG6U.cjs');
4
- var chunk364UCCB2_cjs = require('./chunk-364UCCB2.cjs');
5
-
6
- // src/public/experimental/excel-viewer.ts
7
- var ExcelViewer2 = chunk364UCCB2_cjs.withOsdkMetrics(chunk3SJODG6U_cjs.ExcelViewer, "ExcelViewer");
8
-
9
- exports.ExcelViewer = ExcelViewer2;
10
- //# sourceMappingURL=chunk-SUEZQS7M.cjs.map
11
- //# sourceMappingURL=chunk-SUEZQS7M.cjs.map