@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 @@
1
+ {"version":3,"sources":["../../../../src/base-components/callout/Callout.module.css","../../../../src/base-components/callout/Callout.tsx","../../../../src/aip-agent-chat/AipAgentChat.module.css","../../../../src/aip-agent-chat/components/AipAgentChatComposer.tsx","../../../../src/aip-agent-chat/hooks/useChatAutoScroll.ts","../../../../src/aip-agent-chat/components/AipAgentChatLoader.tsx","../../../../src/aip-agent-chat/components/AipAgentChatMessage.tsx","../../../../src/aip-agent-chat/components/AipAgentChatMessageList.tsx","../../../../src/aip-agent-chat/BaseAipAgentChat.tsx","../../../../src/aip-agent-chat/components/AipAgentChatModelPicker.tsx","../../../../src/aip-agent-chat/AipAgentChat.tsx"],"names":["ErrorIcon","WarningSign","Tick","InfoSign","React","Callout","classNames","React2","Input","ActionButton","React3","React4","getUIMessageText","React5","React6","Chat","React7","BaseAipAgentChat","React8","React9","foundryModel","useChat"],"mappings":"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","file":"aip-agent-chat.cjs","sourcesContent":[".callout {\n align-items: flex-start;\n border-radius: var(--osdk-callout-border-radius);\n display: flex;\n gap: var(--osdk-callout-gap);\n padding: var(--osdk-callout-padding);\n}\n\n.error {\n background: var(--osdk-callout-error-background);\n color: var(--osdk-callout-error-color);\n}\n\n.warning {\n background: var(--osdk-callout-warning-background);\n color: var(--osdk-callout-warning-color);\n}\n\n.success {\n background: var(--osdk-callout-success-background);\n color: var(--osdk-callout-success-color);\n}\n\n.info {\n background: var(--osdk-callout-info-background);\n color: var(--osdk-callout-info-color);\n}\n\n.icon {\n flex: 0 0 auto;\n line-height: 0;\n padding-top: 1px;\n}\n\n.body {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n gap: calc(var(--osdk-surface-spacing) * 1);\n min-width: 0;\n}\n\n.title {\n font-size: var(--osdk-callout-title-font-size);\n font-weight: var(--osdk-callout-title-font-weight);\n}\n\n.message {\n font-size: var(--osdk-callout-message-font-size);\n word-break: break-word;\n}\n\n.actions {\n align-items: center;\n align-self: stretch;\n display: flex;\n flex: 0 0 auto;\n justify-content: center;\n}\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 { Error as ErrorIcon, InfoSign, Tick, WarningSign } from \"@blueprintjs/icons\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport styles from \"./Callout.module.css\";\nconst DEFAULT_ICONS = {\n error: ErrorIcon,\n warning: WarningSign,\n success: Tick,\n info: InfoSign\n};\nconst INTENT_STYLES = {\n error: styles.error,\n warning: styles.warning,\n success: styles.success,\n info: styles.info\n};\n\n/**\n * A styled alert banner supporting four intent levels with an icon,\n * title, message body, and action slot.\n */\nexport const Callout = /*#__PURE__*/React.memo(function Callout({\n intent,\n title,\n children,\n actions,\n icon,\n className\n}) {\n const IconComponent = icon ?? DEFAULT_ICONS[intent];\n return /*#__PURE__*/React.createElement(\"div\", {\n \"aria-live\": \"polite\",\n className: classNames(styles.callout, INTENT_STYLES[intent], className),\n role: \"alert\"\n }, IconComponent != null && /*#__PURE__*/React.createElement(\"span\", {\n className: styles.icon\n }, /*#__PURE__*/React.createElement(IconComponent, {\n size: 16\n })), /*#__PURE__*/React.createElement(\"div\", {\n className: styles.body\n }, title != null && /*#__PURE__*/React.createElement(\"div\", {\n className: styles.title\n }, title), children != null && /*#__PURE__*/React.createElement(\"div\", {\n className: styles.message\n }, children)), actions != null && /*#__PURE__*/React.createElement(\"div\", {\n className: styles.actions\n }, actions));\n});",".chat {\n background: var(--osdk-aip-agent-chat-background);\n border: 1px solid var(--osdk-aip-agent-chat-border-color);\n border-radius: var(--osdk-aip-agent-chat-border-radius);\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n width: 100%;\n}\n\n.messageList {\n align-items: center;\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n gap: var(--osdk-aip-agent-chat-message-gap);\n min-height: 0;\n overflow-y: auto;\n padding: var(--osdk-aip-agent-chat-padding);\n}\n\n.messageList:not(.empty) > * {\n max-width: var(--osdk-aip-agent-chat-content-max-width);\n width: 100%;\n}\n\n.empty {\n align-items: center;\n color: var(--osdk-aip-agent-chat-empty-color);\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n gap: var(--osdk-aip-agent-chat-message-gap);\n justify-content: center;\n padding: var(--osdk-aip-agent-chat-padding);\n text-align: center;\n}\n\n.emptyIcon {\n color: var(--osdk-aip-agent-chat-empty-icon-color);\n font-size: var(--osdk-aip-agent-chat-empty-icon-size);\n}\n\n.emptyTitle {\n color: var(--osdk-typography-color-default-rest);\n font-size: var(--osdk-typography-size-body-large);\n font-weight: var(--osdk-typography-weight-bold);\n}\n\n.message {\n display: flex;\n flex-direction: column;\n}\n\n.userMessage {\n align-items: flex-end;\n}\n\n.assistantMessage {\n align-items: flex-start;\n}\n\n.systemMessage {\n align-items: center;\n}\n\n.bubble {\n border-radius: var(--osdk-aip-agent-chat-bubble-border-radius);\n max-width: var(--osdk-aip-agent-chat-bubble-max-width);\n overflow-wrap: break-word;\n padding: var(--osdk-aip-agent-chat-bubble-padding);\n text-align: left;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.userBubble {\n background: var(--osdk-aip-agent-chat-user-bubble-background);\n border-radius: var(--osdk-aip-agent-chat-user-bubble-border-radius);\n color: var(--osdk-aip-agent-chat-user-bubble-color);\n}\n\n.assistantBubble {\n background: transparent;\n color: var(--osdk-aip-agent-chat-assistant-bubble-color);\n padding: 0;\n}\n\n.systemBubble {\n background: var(--osdk-background-tertiary);\n color: var(--osdk-typography-color-muted);\n font-size: var(--osdk-typography-size-body-small);\n font-style: italic;\n}\n\n.streamingPlaceholder {\n color: var(--osdk-typography-color-muted);\n}\n\n.composer {\n align-items: center;\n background: var(--osdk-aip-agent-chat-composer-background);\n\n display: flex;\n flex: 0 0 auto;\n flex-direction: column;\n gap: var(--osdk-aip-agent-chat-section-gap);\n padding: var(--osdk-aip-agent-chat-padding);\n}\n\n.composer > * {\n max-width: var(--osdk-aip-agent-chat-content-max-width);\n width: 100%;\n}\n\n.inputWrapper {\n background: var(--osdk-background-primary);\n border: 1px solid var(--osdk-surface-border-color-default);\n border-radius: var(--osdk-aip-agent-chat-composer-border-radius);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.inputWrapper:focus-within {\n border-color: var(--osdk-emphasis-focus-color);\n}\n\n.textarea {\n background: transparent;\n border: none;\n color: var(--osdk-typography-color-default-rest);\n font-family: inherit;\n font-size: var(--osdk-typography-size-body-medium);\n line-height: var(--osdk-typography-line-height-default);\n max-height: var(--osdk-aip-agent-chat-composer-textarea-max-height);\n min-height: var(--osdk-aip-agent-chat-composer-textarea-min-height);\n outline: none;\n padding: var(--osdk-aip-agent-chat-section-gap);\n resize: none;\n width: 100%;\n}\n\n.inputActions {\n align-items: center;\n display: flex;\n justify-content: flex-end;\n padding: 0 var(--osdk-aip-agent-chat-section-gap)\n var(--osdk-aip-agent-chat-section-gap);\n}\n\n.composerFooterLeft {\n align-items: center;\n display: flex;\n flex: 1 1 auto;\n gap: var(--osdk-aip-agent-chat-section-gap);\n min-width: 0;\n}\n\n.modelPicker {\n background: var(--osdk-background-primary);\n border: 1px solid var(--osdk-surface-border-color-default);\n border-radius: var(--osdk-aip-agent-chat-border-radius);\n color: var(--osdk-typography-color-default-rest);\n font-family: inherit;\n font-size: var(--osdk-typography-size-body-small);\n outline: none;\n padding: calc(var(--osdk-surface-spacing) * 1)\n calc(var(--osdk-surface-spacing) * 2);\n}\n\n.modelPicker:focus {\n border-color: var(--osdk-emphasis-focus-color);\n}\n\n.modelPicker:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.modelPickerLabel {\n color: var(--osdk-typography-color-muted);\n font-size: var(--osdk-typography-size-body-small);\n}\n\n.loader {\n align-items: center;\n color: var(--osdk-aip-agent-chat-loader-color);\n display: inline-flex;\n gap: var(--osdk-aip-agent-chat-loader-dot-gap);\n}\n\n.loaderDot {\n animation-duration: 1.4s;\n animation-iteration-count: infinite;\n animation-name: aipAgentChatLoaderBounce;\n animation-timing-function: ease-in-out;\n background: currentColor;\n border-radius: 50%;\n display: inline-block;\n height: var(--osdk-aip-agent-chat-loader-dot-size);\n width: var(--osdk-aip-agent-chat-loader-dot-size);\n}\n\n.loaderDot:nth-child(1) {\n animation-delay: 0s;\n}\n\n.loaderDot:nth-child(2) {\n animation-delay: 0.2s;\n}\n\n.loaderDot:nth-child(3) {\n animation-delay: 0.4s;\n}\n\n@keyframes aipAgentChatLoaderBounce {\n 0%,\n 60%,\n 100% {\n opacity: 0.3;\n transform: translateY(0);\n }\n\n 30% {\n opacity: 1;\n transform: translateY(-25%);\n }\n}\n","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\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 { Input } from \"@base-ui/react/input\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport { ActionButton } from \"../../base-components/action-button/ActionButton.js\";\nimport styles from \"../AipAgentChat.module.css\";\n/**\n * Textarea + send/stop button. Enter sends; Shift+Enter inserts a newline.\n * The button toggles to \"Stop\" while a stream is in flight (when an\n * `onStop` callback is provided).\n */\nexport function AipAgentChatComposer({\n isInFlight,\n onSendMessage,\n onStop,\n placeholder,\n className,\n footerLeft\n}) {\n const [draft, setDraft] = React.useState(\"\");\n const canSend = !isInFlight && draft.trim().length > 0;\n const handleSend = React.useCallback(() => {\n const trimmed = draft.trim();\n if (trimmed.length === 0) {\n return;\n }\n // Absorb sync throws and unhandled rejections; chat-level errors are\n // surfaced via `onError` on the upstream useChat hook.\n try {\n const result = onSendMessage(trimmed);\n if (result instanceof Promise) {\n result.catch(noop);\n }\n } catch {\n // swallow sync throws\n }\n setDraft(\"\");\n }, [draft, onSendMessage]);\n const handleKeyDown = React.useCallback(event => {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n if (!isInFlight) {\n handleSend();\n }\n }\n }, [handleSend, isInFlight]);\n\n // Attach the keydown handler in the `render` prop so it can be typed against\n // the actual rendered <textarea> element rather than base-ui's HTMLInputElement.\n const renderTextarea = React.useCallback(props => /*#__PURE__*/React.createElement(\"textarea\", _extends({}, props, {\n onKeyDown: handleKeyDown,\n rows: 3\n })), [handleKeyDown]);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(styles.composer, className)\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: styles.inputWrapper\n }, /*#__PURE__*/React.createElement(Input, {\n \"aria-label\": \"Message input\",\n className: styles.textarea,\n onValueChange: setDraft,\n placeholder: placeholder,\n value: draft,\n render: renderTextarea\n }), /*#__PURE__*/React.createElement(\"div\", {\n className: styles.inputActions\n }, isInFlight && onStop != null ? /*#__PURE__*/React.createElement(ActionButton, {\n onClick: onStop,\n type: \"button\"\n }, \"Stop\") : /*#__PURE__*/React.createElement(ActionButton, {\n disabled: !canSend,\n onClick: handleSend,\n type: \"button\",\n variant: \"primary\"\n }, \"Send\"))), footerLeft != null && /*#__PURE__*/React.createElement(\"div\", {\n className: styles.composerFooterLeft\n }, footerLeft));\n}\nfunction noop() {}","/*\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 * as React from \"react\";\n\n/**\n * Keeps a scrollable container pinned to its bottom whenever `signal` changes\n * (typically a string encoding the messages array length and streaming token\n * count).\n *\n * Disengages temporarily once the user scrolls up — pinning resumes when the\n * user scrolls back near the bottom. Returns a callback ref to attach to the\n * scrollable element; the listener follows the element across re-mounts.\n */\nexport function useChatAutoScroll(signal, enabled) {\n const elRef = React.useRef(null);\n const cleanupRef = React.useRef(null);\n const isPinnedRef = React.useRef(true);\n const setRef = React.useCallback(el => {\n cleanupRef.current?.();\n cleanupRef.current = null;\n elRef.current = el;\n if (el == null) {\n return;\n }\n const onScroll = () => {\n const distanceFromBottom = el.scrollHeight - el.scrollTop - el.clientHeight;\n isPinnedRef.current = distanceFromBottom <= NEAR_BOTTOM_THRESHOLD_PX;\n };\n el.addEventListener(\"scroll\", onScroll, {\n passive: true\n });\n cleanupRef.current = () => el.removeEventListener(\"scroll\", onScroll);\n }, []);\n React.useEffect(() => {\n if (!enabled) {\n return;\n }\n const el = elRef.current;\n if (el == null || !isPinnedRef.current) {\n return;\n }\n el.scrollTop = el.scrollHeight;\n }, [signal, enabled]);\n return setRef;\n}\nconst NEAR_BOTTOM_THRESHOLD_PX = 32;","/*\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 classNames from \"classnames\";\nimport * as React from \"react\";\nimport styles from \"../AipAgentChat.module.css\";\n/**\n * Three-dot bouncing animation rendered while the agent is responding.\n */\nexport function AipAgentChatLoader({\n className,\n label = \"Assistant is responding\"\n}) {\n return /*#__PURE__*/React.createElement(\"div\", {\n \"aria-label\": label,\n \"aria-live\": \"polite\",\n className: classNames(styles.loader, className),\n role: \"status\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n \"aria-hidden\": \"true\",\n className: styles.loaderDot\n }), /*#__PURE__*/React.createElement(\"span\", {\n \"aria-hidden\": \"true\",\n className: styles.loaderDot\n }), /*#__PURE__*/React.createElement(\"span\", {\n \"aria-hidden\": \"true\",\n className: styles.loaderDot\n }));\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 { getUIMessageText } from \"@osdk/aip-core\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport styles from \"../AipAgentChat.module.css\";\n/**\n * Default rendering for a single chat message bubble. User messages are\n * right-aligned with a primary background; assistant messages are\n * left-aligned with a secondary background; system messages render\n * centered in muted style.\n */\nexport function AipAgentChatMessage({\n message\n}) {\n const text = getUIMessageText(message);\n const role = message.role;\n const styling = ROLE_STYLING[role];\n return /*#__PURE__*/React.createElement(\"div\", {\n \"aria-label\": styling.label,\n className: classNames(styles.message, styling.container),\n role: \"group\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(styles.bubble, styling.bubble)\n }, text.length > 0 ? text : /*#__PURE__*/React.createElement(\"span\", {\n className: styles.streamingPlaceholder\n }, \"\\u2026\")));\n}\nconst ROLE_STYLING = {\n user: {\n container: styles.userMessage,\n bubble: styles.userBubble,\n label: \"User message\"\n },\n assistant: {\n container: styles.assistantMessage,\n bubble: styles.assistantBubble,\n label: \"Assistant message\"\n },\n system: {\n container: styles.systemMessage,\n bubble: styles.systemBubble,\n label: \"System message\"\n }\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 { Chat } from \"@blueprintjs/icons\";\nimport { getUIMessageText } from \"@osdk/aip-core\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport styles from \"../AipAgentChat.module.css\";\nimport { useChatAutoScroll } from \"../hooks/useChatAutoScroll.js\";\nimport { AipAgentChatLoader } from \"./AipAgentChatLoader.js\";\nimport { AipAgentChatMessage } from \"./AipAgentChatMessage.js\";\nconst DEFAULT_EMPTY_STATE = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Chat, {\n className: styles.emptyIcon,\n size: 64\n}), /*#__PURE__*/React.createElement(\"div\", {\n className: styles.emptyTitle\n}, \"Start a conversation\"), /*#__PURE__*/React.createElement(\"div\", null, \"Type a message below to chat with the assistant.\"));\nexport function AipAgentChatMessageList({\n messages,\n isStreaming,\n enableAutoScroll,\n className,\n renderEmptyState,\n renderMessage\n}) {\n const lastMessage = messages.at(-1);\n const lastMessageTextLength = lastMessage != null ? getUIMessageText(lastMessage).length : 0;\n const scrollSignal = `${messages.length}:${lastMessageTextLength}`;\n const setContainerRef = useChatAutoScroll(scrollSignal, enableAutoScroll);\n const isEmpty = messages.length === 0 && !isStreaming;\n const showLoader = isStreaming && lastMessage?.role !== \"assistant\";\n return /*#__PURE__*/React.createElement(\"div\", {\n \"aria-live\": isEmpty ? undefined : \"polite\",\n className: classNames(styles.messageList, isEmpty && styles.empty, className),\n ref: setContainerRef,\n role: isEmpty ? undefined : \"log\"\n }, isEmpty ? renderEmptyState != null ? renderEmptyState() : DEFAULT_EMPTY_STATE : /*#__PURE__*/React.createElement(React.Fragment, null, messages.map(message => /*#__PURE__*/React.createElement(React.Fragment, {\n key: message.id\n }, renderMessage != null ? renderMessage(message) : /*#__PURE__*/React.createElement(AipAgentChatMessage, {\n message: message\n }))), showLoader && /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(styles.message, styles.assistantMessage)\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(styles.bubble, styles.assistantBubble)\n }, /*#__PURE__*/React.createElement(AipAgentChatLoader, null)))));\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 classNames from \"classnames\";\nimport * as React from \"react\";\nimport { ActionButton } from \"../base-components/action-button/ActionButton.js\";\nimport { Callout } from \"../base-components/callout/Callout.js\";\nimport styles from \"./AipAgentChat.module.css\";\nimport { AipAgentChatComposer } from \"./components/AipAgentChatComposer.js\";\nimport { AipAgentChatMessageList } from \"./components/AipAgentChatMessageList.js\";\n/**\n * OSDK-agnostic chat surface. Manages conversation state, streaming UI,\n * and error display internally; the consumer provides the current state\n * and callbacks for sending messages and managing state.\n */\nexport const BaseAipAgentChat = /*#__PURE__*/React.memo(function BaseAipAgentChat({\n messages,\n status,\n error,\n onSendMessage,\n onStop,\n onClearError,\n composerFooter,\n className,\n placeholder = \"Type a message...\",\n enableAutoScroll = true,\n renderEmptyState,\n renderMessage\n}) {\n const isInFlight = status === \"submitted\" || status === \"streaming\";\n return /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(styles.chat, className)\n }, error != null && /*#__PURE__*/React.createElement(Callout, {\n actions: /*#__PURE__*/React.createElement(ActionButton, {\n onClick: onClearError,\n type: \"button\"\n }, \"Dismiss\"),\n intent: \"error\",\n title: \"Something went wrong\"\n }, error.message.length > 0 ? error.message : \"An unknown error occurred. Try again, or dismiss to keep the conversation.\"), /*#__PURE__*/React.createElement(AipAgentChatMessageList, {\n enableAutoScroll: enableAutoScroll,\n isStreaming: isInFlight,\n messages: messages,\n renderEmptyState: renderEmptyState,\n renderMessage: renderMessage\n }), /*#__PURE__*/React.createElement(AipAgentChatComposer, {\n footerLeft: composerFooter,\n isInFlight: isInFlight,\n onSendMessage: onSendMessage,\n onStop: onStop,\n placeholder: placeholder\n }));\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 classNames from \"classnames\";\nimport * as React from \"react\";\nimport styles from \"../AipAgentChat.module.css\";\n/**\n * Native-select model picker rendered in the composer footer when the\n * OSDK wrapper is given an `availableModels` list. Operates on Foundry\n * LMS model API names. Renders a read-only label when exactly one model\n * is available so the active model stays visible without offering a\n * dropdown the user can't act on; renders nothing when the list is empty.\n */\nexport function AipAgentChatModelPicker({\n models,\n activeModel,\n onModelChange,\n disabled,\n className\n}) {\n const handleChange = React.useCallback(event => {\n onModelChange(event.target.value);\n }, [onModelChange]);\n if (models.length === 0) {\n return null;\n }\n if (models.length === 1) {\n return /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(styles.modelPickerLabel, className)\n }, \"Model: \", activeModel);\n }\n return /*#__PURE__*/React.createElement(\"select\", {\n \"aria-label\": \"Active model\",\n className: classNames(styles.modelPicker, className),\n disabled: disabled,\n onChange: handleChange,\n value: activeModel\n }, models.map(modelName => /*#__PURE__*/React.createElement(\"option\", {\n key: modelName,\n value: modelName\n }, modelName)));\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 { foundryModel } from \"@osdk/aip-core\";\nimport { useChat } from \"@osdk/react/experimental/aip\";\nimport * as React from \"react\";\nimport { BaseAipAgentChat } from \"./BaseAipAgentChat.js\";\nimport { AipAgentChatModelPicker } from \"./components/AipAgentChatModelPicker.js\";\nconst FALLBACK_MODEL_API_NAME = \"gpt-4o\";\n\n/**\n * OSDK-aware chat surface backed by Foundry's Language Model Service.\n * Constructs the LMS-backed model internally and uses `useChat` to\n * manage conversation state, so consumers never need to import `useChat`,\n * `streamText`, or `foundryModel` themselves.\n */\nexport function AipAgentChat({\n client,\n model: controlledModel,\n defaultModel,\n availableModels,\n onModelChange,\n system,\n initialMessages,\n className,\n placeholder,\n enableAutoScroll,\n onError,\n onFinish,\n renderEmptyState,\n renderMessage\n}) {\n // Internal state used only in uncontrolled mode. Initialized once\n // from the first available source: `controlledModel` → `defaultModel`\n // → first entry of `availableModels` → `FALLBACK_MODEL_API_NAME`.\n const [internalModel, setInternalModel] = React.useState(() => controlledModel ?? defaultModel ?? availableModels?.[0] ?? FALLBACK_MODEL_API_NAME);\n const isControlled = controlledModel != null;\n const activeModel = isControlled ? controlledModel : internalModel;\n const handleModelChange = React.useCallback(next => {\n if (!isControlled) {\n setInternalModel(next);\n }\n onModelChange?.(next);\n }, [isControlled, onModelChange]);\n const model = React.useMemo(() => foundryModel({\n client,\n model: activeModel\n }), [client, activeModel]);\n const {\n messages,\n status,\n error,\n sendMessage,\n stop,\n clearError\n } = useChat({\n model,\n system,\n messages: initialMessages,\n onError,\n onFinish\n });\n\n // Snap the uncontrolled model to the first available option whenever the\n // current selection isn't in `availableModels` (e.g. on first async resolve).\n React.useEffect(() => {\n if (isControlled || availableModels == null || availableModels.length === 0) {\n return;\n }\n if (!availableModels.includes(internalModel)) {\n setInternalModel(availableModels[0]);\n }\n }, [isControlled, availableModels, internalModel]);\n const handleSendMessage = React.useCallback(text => {\n return sendMessage({\n text\n });\n }, [sendMessage]);\n const isInFlight = status === \"submitted\" || status === \"streaming\";\n const composerFooter = availableModels != null && availableModels.length > 0 ? /*#__PURE__*/React.createElement(AipAgentChatModelPicker, {\n activeModel: activeModel,\n models: availableModels,\n onModelChange: handleModelChange,\n disabled: isInFlight\n }) : undefined;\n return /*#__PURE__*/React.createElement(BaseAipAgentChat, {\n className: className,\n composerFooter: composerFooter,\n enableAutoScroll: enableAutoScroll,\n messages: messages,\n status: status,\n error: error,\n onClearError: clearError,\n onSendMessage: handleSendMessage,\n onStop: stop,\n placeholder: placeholder,\n renderEmptyState: renderEmptyState,\n renderMessage: renderMessage\n });\n}"]}
@@ -0,0 +1,304 @@
1
+ /* src/base-components/action-button/ActionButton.module.css */
2
+ .button {
3
+ min-height: var(--osdk-button-min-height);
4
+ padding: calc(var(--osdk-surface-spacing) * 1.5) calc(var(--osdk-surface-spacing) * 1.75);
5
+ border: var(--osdk-button-border);
6
+ border-radius: var(--osdk-surface-border-radius);
7
+ box-shadow: var(--osdk-button-shadow);
8
+ font-size: var(--osdk-typography-size-body-medium);
9
+ cursor: pointer;
10
+ &:focus-visible {
11
+ outline: var(--osdk-focus-outline);
12
+ outline-offset: var(--osdk-focus-visible-outline-offset);
13
+ }
14
+ &:disabled {
15
+ opacity: 0.5;
16
+ cursor: not-allowed;
17
+ }
18
+ }
19
+ .secondaryButton {
20
+ background-color: var(--osdk-button-secondary-bg);
21
+ border-color: var(--osdk-button-secondary-border-color);
22
+ color: var(--osdk-button-secondary-color);
23
+ &:hover:not(:disabled) {
24
+ background-color: var(--osdk-button-secondary-bg-hover);
25
+ }
26
+ &:active:not(:disabled) {
27
+ background-color: var(--osdk-button-secondary-bg-active);
28
+ }
29
+ }
30
+ .primaryButton {
31
+ background-color: var(--osdk-button-primary-bg);
32
+ border-color: var(--osdk-button-primary-border-color);
33
+ color: var(--osdk-button-primary-color);
34
+ &:hover:not(:disabled) {
35
+ background-color: var(--osdk-button-primary-bg-hover);
36
+ }
37
+ &:active:not(:disabled) {
38
+ background-color: var(--osdk-button-primary-bg-active);
39
+ }
40
+ }
41
+ .minimalButton {
42
+ background-color: var(--osdk-button-minimal-bg);
43
+ border: var(--osdk-button-minimal-border);
44
+ box-shadow: var(--osdk-button-minimal-shadow);
45
+ color: var(--osdk-button-secondary-minimal-color);
46
+ &:hover:not(:disabled) {
47
+ background-color: var(--osdk-button-minimal-bg-hover);
48
+ }
49
+ &:active:not(:disabled) {
50
+ background-color: var(--osdk-button-minimal-bg-active);
51
+ }
52
+ }
53
+ .primaryButton.minimalButton {
54
+ color: var(--osdk-button-primary-minimal-color);
55
+ }
56
+
57
+ /* src/base-components/callout/Callout.module.css */
58
+ .callout {
59
+ align-items: flex-start;
60
+ border-radius: var(--osdk-callout-border-radius);
61
+ display: flex;
62
+ gap: var(--osdk-callout-gap);
63
+ padding: var(--osdk-callout-padding);
64
+ }
65
+ .error {
66
+ background: var(--osdk-callout-error-background);
67
+ color: var(--osdk-callout-error-color);
68
+ }
69
+ .warning {
70
+ background: var(--osdk-callout-warning-background);
71
+ color: var(--osdk-callout-warning-color);
72
+ }
73
+ .success {
74
+ background: var(--osdk-callout-success-background);
75
+ color: var(--osdk-callout-success-color);
76
+ }
77
+ .info {
78
+ background: var(--osdk-callout-info-background);
79
+ color: var(--osdk-callout-info-color);
80
+ }
81
+ .icon {
82
+ flex: 0 0 auto;
83
+ line-height: 0;
84
+ padding-top: 1px;
85
+ }
86
+ .body {
87
+ display: flex;
88
+ flex: 1 1 auto;
89
+ flex-direction: column;
90
+ gap: calc(var(--osdk-surface-spacing) * 1);
91
+ min-width: 0;
92
+ }
93
+ .title {
94
+ font-size: var(--osdk-callout-title-font-size);
95
+ font-weight: var(--osdk-callout-title-font-weight);
96
+ }
97
+ .message {
98
+ font-size: var(--osdk-callout-message-font-size);
99
+ word-break: break-word;
100
+ }
101
+ .actions {
102
+ align-items: center;
103
+ align-self: stretch;
104
+ display: flex;
105
+ flex: 0 0 auto;
106
+ justify-content: center;
107
+ }
108
+
109
+ /* src/aip-agent-chat/AipAgentChat.module.css */
110
+ .chat {
111
+ background: var(--osdk-aip-agent-chat-background);
112
+ border: 1px solid var(--osdk-aip-agent-chat-border-color);
113
+ border-radius: var(--osdk-aip-agent-chat-border-radius);
114
+ display: flex;
115
+ flex-direction: column;
116
+ height: 100%;
117
+ min-height: 0;
118
+ overflow: hidden;
119
+ width: 100%;
120
+ }
121
+ .messageList {
122
+ align-items: center;
123
+ display: flex;
124
+ flex: 1 1 auto;
125
+ flex-direction: column;
126
+ gap: var(--osdk-aip-agent-chat-message-gap);
127
+ min-height: 0;
128
+ overflow-y: auto;
129
+ padding: var(--osdk-aip-agent-chat-padding);
130
+ }
131
+ .messageList:not(.empty) > * {
132
+ max-width: var(--osdk-aip-agent-chat-content-max-width);
133
+ width: 100%;
134
+ }
135
+ .empty {
136
+ align-items: center;
137
+ color: var(--osdk-aip-agent-chat-empty-color);
138
+ display: flex;
139
+ flex: 1 1 auto;
140
+ flex-direction: column;
141
+ gap: var(--osdk-aip-agent-chat-message-gap);
142
+ justify-content: center;
143
+ padding: var(--osdk-aip-agent-chat-padding);
144
+ text-align: center;
145
+ }
146
+ .emptyIcon {
147
+ color: var(--osdk-aip-agent-chat-empty-icon-color);
148
+ font-size: var(--osdk-aip-agent-chat-empty-icon-size);
149
+ }
150
+ .emptyTitle {
151
+ color: var(--osdk-typography-color-default-rest);
152
+ font-size: var(--osdk-typography-size-body-large);
153
+ font-weight: var(--osdk-typography-weight-bold);
154
+ }
155
+ .message {
156
+ display: flex;
157
+ flex-direction: column;
158
+ }
159
+ .userMessage {
160
+ align-items: flex-end;
161
+ }
162
+ .assistantMessage {
163
+ align-items: flex-start;
164
+ }
165
+ .systemMessage {
166
+ align-items: center;
167
+ }
168
+ .bubble {
169
+ border-radius: var(--osdk-aip-agent-chat-bubble-border-radius);
170
+ max-width: var(--osdk-aip-agent-chat-bubble-max-width);
171
+ overflow-wrap: break-word;
172
+ padding: var(--osdk-aip-agent-chat-bubble-padding);
173
+ text-align: left;
174
+ white-space: pre-wrap;
175
+ word-break: break-word;
176
+ }
177
+ .userBubble {
178
+ background: var(--osdk-aip-agent-chat-user-bubble-background);
179
+ border-radius: var(--osdk-aip-agent-chat-user-bubble-border-radius);
180
+ color: var(--osdk-aip-agent-chat-user-bubble-color);
181
+ }
182
+ .assistantBubble {
183
+ background: transparent;
184
+ color: var(--osdk-aip-agent-chat-assistant-bubble-color);
185
+ padding: 0;
186
+ }
187
+ .systemBubble {
188
+ background: var(--osdk-background-tertiary);
189
+ color: var(--osdk-typography-color-muted);
190
+ font-size: var(--osdk-typography-size-body-small);
191
+ font-style: italic;
192
+ }
193
+ .streamingPlaceholder {
194
+ color: var(--osdk-typography-color-muted);
195
+ }
196
+ .composer {
197
+ align-items: center;
198
+ background: var(--osdk-aip-agent-chat-composer-background);
199
+ display: flex;
200
+ flex: 0 0 auto;
201
+ flex-direction: column;
202
+ gap: var(--osdk-aip-agent-chat-section-gap);
203
+ padding: var(--osdk-aip-agent-chat-padding);
204
+ }
205
+ .composer > * {
206
+ max-width: var(--osdk-aip-agent-chat-content-max-width);
207
+ width: 100%;
208
+ }
209
+ .inputWrapper {
210
+ background: var(--osdk-background-primary);
211
+ border: 1px solid var(--osdk-surface-border-color-default);
212
+ border-radius: var(--osdk-aip-agent-chat-composer-border-radius);
213
+ display: flex;
214
+ flex-direction: column;
215
+ overflow: hidden;
216
+ }
217
+ .inputWrapper:focus-within {
218
+ border-color: var(--osdk-emphasis-focus-color);
219
+ }
220
+ .textarea {
221
+ background: transparent;
222
+ border: none;
223
+ color: var(--osdk-typography-color-default-rest);
224
+ font-family: inherit;
225
+ font-size: var(--osdk-typography-size-body-medium);
226
+ line-height: var(--osdk-typography-line-height-default);
227
+ max-height: var(--osdk-aip-agent-chat-composer-textarea-max-height);
228
+ min-height: var(--osdk-aip-agent-chat-composer-textarea-min-height);
229
+ outline: none;
230
+ padding: var(--osdk-aip-agent-chat-section-gap);
231
+ resize: none;
232
+ width: 100%;
233
+ }
234
+ .inputActions {
235
+ align-items: center;
236
+ display: flex;
237
+ justify-content: flex-end;
238
+ padding: 0 var(--osdk-aip-agent-chat-section-gap) var(--osdk-aip-agent-chat-section-gap);
239
+ }
240
+ .composerFooterLeft {
241
+ align-items: center;
242
+ display: flex;
243
+ flex: 1 1 auto;
244
+ gap: var(--osdk-aip-agent-chat-section-gap);
245
+ min-width: 0;
246
+ }
247
+ .modelPicker {
248
+ background: var(--osdk-background-primary);
249
+ border: 1px solid var(--osdk-surface-border-color-default);
250
+ border-radius: var(--osdk-aip-agent-chat-border-radius);
251
+ color: var(--osdk-typography-color-default-rest);
252
+ font-family: inherit;
253
+ font-size: var(--osdk-typography-size-body-small);
254
+ outline: none;
255
+ padding: calc(var(--osdk-surface-spacing) * 1) calc(var(--osdk-surface-spacing) * 2);
256
+ }
257
+ .modelPicker:focus {
258
+ border-color: var(--osdk-emphasis-focus-color);
259
+ }
260
+ .modelPicker:disabled {
261
+ cursor: not-allowed;
262
+ opacity: 0.6;
263
+ }
264
+ .modelPickerLabel {
265
+ color: var(--osdk-typography-color-muted);
266
+ font-size: var(--osdk-typography-size-body-small);
267
+ }
268
+ .loader {
269
+ align-items: center;
270
+ color: var(--osdk-aip-agent-chat-loader-color);
271
+ display: inline-flex;
272
+ gap: var(--osdk-aip-agent-chat-loader-dot-gap);
273
+ }
274
+ .loaderDot {
275
+ animation-duration: 1.4s;
276
+ animation-iteration-count: infinite;
277
+ animation-name: aipAgentChatLoaderBounce;
278
+ animation-timing-function: ease-in-out;
279
+ background: currentColor;
280
+ border-radius: 50%;
281
+ display: inline-block;
282
+ height: var(--osdk-aip-agent-chat-loader-dot-size);
283
+ width: var(--osdk-aip-agent-chat-loader-dot-size);
284
+ }
285
+ .loaderDot:nth-child(1) {
286
+ animation-delay: 0s;
287
+ }
288
+ .loaderDot:nth-child(2) {
289
+ animation-delay: 0.2s;
290
+ }
291
+ .loaderDot:nth-child(3) {
292
+ animation-delay: 0.4s;
293
+ }
294
+ @keyframes aipAgentChatLoaderBounce {
295
+ 0%, 60%, 100% {
296
+ opacity: 0.3;
297
+ transform: translateY(0);
298
+ }
299
+ 30% {
300
+ opacity: 1;
301
+ transform: translateY(-25%);
302
+ }
303
+ }
304
+ /*# sourceMappingURL=aip-agent-chat.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/base-components/action-button/ActionButton.module.css","../../../../src/base-components/callout/Callout.module.css","../../../../src/aip-agent-chat/AipAgentChat.module.css"],"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\n.button {\n min-height: var(--osdk-button-min-height);\n padding: calc(var(--osdk-surface-spacing) * 1.5)\n calc(var(--osdk-surface-spacing) * 1.75);\n border: var(--osdk-button-border);\n border-radius: var(--osdk-surface-border-radius);\n box-shadow: var(--osdk-button-shadow);\n font-size: var(--osdk-typography-size-body-medium);\n cursor: pointer;\n\n &:focus-visible {\n outline: var(--osdk-focus-outline);\n outline-offset: var(--osdk-focus-visible-outline-offset);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n}\n\n.secondaryButton {\n background-color: var(--osdk-button-secondary-bg);\n border-color: var(--osdk-button-secondary-border-color);\n color: var(--osdk-button-secondary-color);\n\n &:hover:not(:disabled) {\n background-color: var(--osdk-button-secondary-bg-hover);\n }\n\n &:active:not(:disabled) {\n background-color: var(--osdk-button-secondary-bg-active);\n }\n}\n\n.primaryButton {\n background-color: var(--osdk-button-primary-bg);\n border-color: var(--osdk-button-primary-border-color);\n color: var(--osdk-button-primary-color);\n\n &:hover:not(:disabled) {\n background-color: var(--osdk-button-primary-bg-hover);\n }\n\n &:active:not(:disabled) {\n background-color: var(--osdk-button-primary-bg-active);\n }\n}\n\n.minimalButton {\n background-color: var(--osdk-button-minimal-bg);\n border: var(--osdk-button-minimal-border);\n box-shadow: var(--osdk-button-minimal-shadow);\n color: var(--osdk-button-secondary-minimal-color);\n\n &:hover:not(:disabled) {\n background-color: var(--osdk-button-minimal-bg-hover);\n }\n\n &:active:not(:disabled) {\n background-color: var(--osdk-button-minimal-bg-active);\n }\n}\n\n.primaryButton.minimalButton {\n color: var(--osdk-button-primary-minimal-color);\n}\n",".callout {\n align-items: flex-start;\n border-radius: var(--osdk-callout-border-radius);\n display: flex;\n gap: var(--osdk-callout-gap);\n padding: var(--osdk-callout-padding);\n}\n\n.error {\n background: var(--osdk-callout-error-background);\n color: var(--osdk-callout-error-color);\n}\n\n.warning {\n background: var(--osdk-callout-warning-background);\n color: var(--osdk-callout-warning-color);\n}\n\n.success {\n background: var(--osdk-callout-success-background);\n color: var(--osdk-callout-success-color);\n}\n\n.info {\n background: var(--osdk-callout-info-background);\n color: var(--osdk-callout-info-color);\n}\n\n.icon {\n flex: 0 0 auto;\n line-height: 0;\n padding-top: 1px;\n}\n\n.body {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n gap: calc(var(--osdk-surface-spacing) * 1);\n min-width: 0;\n}\n\n.title {\n font-size: var(--osdk-callout-title-font-size);\n font-weight: var(--osdk-callout-title-font-weight);\n}\n\n.message {\n font-size: var(--osdk-callout-message-font-size);\n word-break: break-word;\n}\n\n.actions {\n align-items: center;\n align-self: stretch;\n display: flex;\n flex: 0 0 auto;\n justify-content: center;\n}\n",".chat {\n background: var(--osdk-aip-agent-chat-background);\n border: 1px solid var(--osdk-aip-agent-chat-border-color);\n border-radius: var(--osdk-aip-agent-chat-border-radius);\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n width: 100%;\n}\n\n.messageList {\n align-items: center;\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n gap: var(--osdk-aip-agent-chat-message-gap);\n min-height: 0;\n overflow-y: auto;\n padding: var(--osdk-aip-agent-chat-padding);\n}\n\n.messageList:not(.empty) > * {\n max-width: var(--osdk-aip-agent-chat-content-max-width);\n width: 100%;\n}\n\n.empty {\n align-items: center;\n color: var(--osdk-aip-agent-chat-empty-color);\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n gap: var(--osdk-aip-agent-chat-message-gap);\n justify-content: center;\n padding: var(--osdk-aip-agent-chat-padding);\n text-align: center;\n}\n\n.emptyIcon {\n color: var(--osdk-aip-agent-chat-empty-icon-color);\n font-size: var(--osdk-aip-agent-chat-empty-icon-size);\n}\n\n.emptyTitle {\n color: var(--osdk-typography-color-default-rest);\n font-size: var(--osdk-typography-size-body-large);\n font-weight: var(--osdk-typography-weight-bold);\n}\n\n.message {\n display: flex;\n flex-direction: column;\n}\n\n.userMessage {\n align-items: flex-end;\n}\n\n.assistantMessage {\n align-items: flex-start;\n}\n\n.systemMessage {\n align-items: center;\n}\n\n.bubble {\n border-radius: var(--osdk-aip-agent-chat-bubble-border-radius);\n max-width: var(--osdk-aip-agent-chat-bubble-max-width);\n overflow-wrap: break-word;\n padding: var(--osdk-aip-agent-chat-bubble-padding);\n text-align: left;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.userBubble {\n background: var(--osdk-aip-agent-chat-user-bubble-background);\n border-radius: var(--osdk-aip-agent-chat-user-bubble-border-radius);\n color: var(--osdk-aip-agent-chat-user-bubble-color);\n}\n\n.assistantBubble {\n background: transparent;\n color: var(--osdk-aip-agent-chat-assistant-bubble-color);\n padding: 0;\n}\n\n.systemBubble {\n background: var(--osdk-background-tertiary);\n color: var(--osdk-typography-color-muted);\n font-size: var(--osdk-typography-size-body-small);\n font-style: italic;\n}\n\n.streamingPlaceholder {\n color: var(--osdk-typography-color-muted);\n}\n\n.composer {\n align-items: center;\n background: var(--osdk-aip-agent-chat-composer-background);\n\n display: flex;\n flex: 0 0 auto;\n flex-direction: column;\n gap: var(--osdk-aip-agent-chat-section-gap);\n padding: var(--osdk-aip-agent-chat-padding);\n}\n\n.composer > * {\n max-width: var(--osdk-aip-agent-chat-content-max-width);\n width: 100%;\n}\n\n.inputWrapper {\n background: var(--osdk-background-primary);\n border: 1px solid var(--osdk-surface-border-color-default);\n border-radius: var(--osdk-aip-agent-chat-composer-border-radius);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.inputWrapper:focus-within {\n border-color: var(--osdk-emphasis-focus-color);\n}\n\n.textarea {\n background: transparent;\n border: none;\n color: var(--osdk-typography-color-default-rest);\n font-family: inherit;\n font-size: var(--osdk-typography-size-body-medium);\n line-height: var(--osdk-typography-line-height-default);\n max-height: var(--osdk-aip-agent-chat-composer-textarea-max-height);\n min-height: var(--osdk-aip-agent-chat-composer-textarea-min-height);\n outline: none;\n padding: var(--osdk-aip-agent-chat-section-gap);\n resize: none;\n width: 100%;\n}\n\n.inputActions {\n align-items: center;\n display: flex;\n justify-content: flex-end;\n padding: 0 var(--osdk-aip-agent-chat-section-gap)\n var(--osdk-aip-agent-chat-section-gap);\n}\n\n.composerFooterLeft {\n align-items: center;\n display: flex;\n flex: 1 1 auto;\n gap: var(--osdk-aip-agent-chat-section-gap);\n min-width: 0;\n}\n\n.modelPicker {\n background: var(--osdk-background-primary);\n border: 1px solid var(--osdk-surface-border-color-default);\n border-radius: var(--osdk-aip-agent-chat-border-radius);\n color: var(--osdk-typography-color-default-rest);\n font-family: inherit;\n font-size: var(--osdk-typography-size-body-small);\n outline: none;\n padding: calc(var(--osdk-surface-spacing) * 1)\n calc(var(--osdk-surface-spacing) * 2);\n}\n\n.modelPicker:focus {\n border-color: var(--osdk-emphasis-focus-color);\n}\n\n.modelPicker:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.modelPickerLabel {\n color: var(--osdk-typography-color-muted);\n font-size: var(--osdk-typography-size-body-small);\n}\n\n.loader {\n align-items: center;\n color: var(--osdk-aip-agent-chat-loader-color);\n display: inline-flex;\n gap: var(--osdk-aip-agent-chat-loader-dot-gap);\n}\n\n.loaderDot {\n animation-duration: 1.4s;\n animation-iteration-count: infinite;\n animation-name: aipAgentChatLoaderBounce;\n animation-timing-function: ease-in-out;\n background: currentColor;\n border-radius: 50%;\n display: inline-block;\n height: var(--osdk-aip-agent-chat-loader-dot-size);\n width: var(--osdk-aip-agent-chat-loader-dot-size);\n}\n\n.loaderDot:nth-child(1) {\n animation-delay: 0s;\n}\n\n.loaderDot:nth-child(2) {\n animation-delay: 0.2s;\n}\n\n.loaderDot:nth-child(3) {\n animation-delay: 0.4s;\n}\n\n@keyframes aipAgentChatLoaderBounce {\n 0%,\n 60%,\n 100% {\n opacity: 0.3;\n transform: translateY(0);\n }\n\n 30% {\n opacity: 1;\n transform: translateY(-25%);\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,202 @@
1
+ import * as React from 'react';
2
+ import { UIMessage } from '@osdk/aip-core';
3
+ export { UIMessage, UIMessageRole, getUIMessageText } from '@osdk/aip-core';
4
+ import { PlatformClient } from '@osdk/client';
5
+ import { ChatStatus } from '@osdk/react/experimental/aip';
6
+ export { ChatStatus } from '@osdk/react/experimental/aip';
7
+
8
+ /**
9
+ * Props for {@link AipAgentChat}, an OSDK-aware chat surface backed by
10
+ * Foundry's Language Model Service. Consumers do not need to import
11
+ * `streamText` or `foundryModel` themselves — passing the platform
12
+ * client is enough to render a working chat.
13
+ *
14
+ * If neither `model` nor `defaultModel` is supplied, the chat falls
15
+ * back to the first entry of `availableModels` (when provided), or to
16
+ * the LMS model API name `"gpt-4o"`.
17
+ *
18
+ * Default rendering is feature-complete with no overrides supplied;
19
+ * render slots and `on*` listeners are layered on top of the built-in
20
+ * behavior.
21
+ */
22
+ interface AipAgentChatProps {
23
+ /**
24
+ * Foundry platform client returned by `createPlatformClient` from
25
+ * `@osdk/client`. Used internally to construct the LMS-backed model
26
+ * for `useChat`.
27
+ */
28
+ client: PlatformClient;
29
+ /**
30
+ * Active LMS model API name (for example `"gpt-4o"`). Resolved
31
+ * internally via `foundryModel({ client, model })`.
32
+ *
33
+ * Controlled mode: when provided, the consumer holds the model state.
34
+ * Updates from the picker fire {@link AipAgentChatProps.onModelChange};
35
+ * the consumer is expected to update this prop in response.
36
+ *
37
+ * Uncontrolled mode: omit and pass {@link AipAgentChatProps.defaultModel}
38
+ * instead. If both are omitted, the chat falls back to the first
39
+ * entry of {@link AipAgentChatProps.availableModels} (when provided),
40
+ * or to `"gpt-4o"`.
41
+ */
42
+ model?: string;
43
+ /**
44
+ * Initial LMS model API name for uncontrolled mode. The component
45
+ * manages model state internally, switching when the user picks a
46
+ * different option from the picker. Ignored when
47
+ * {@link AipAgentChatProps.model} is also provided (controlled mode
48
+ * wins).
49
+ *
50
+ * @default the first entry of {@link AipAgentChatProps.availableModels}
51
+ * when provided, otherwise `"gpt-4o"`.
52
+ */
53
+ defaultModel?: string;
54
+ /**
55
+ * When provided, the chat renders a model picker in the composer
56
+ * footer populated with these API names.
57
+ *
58
+ * If omitted, no picker is rendered.
59
+ */
60
+ availableModels?: ReadonlyArray<string>;
61
+ /**
62
+ * Fires when the user selects a different model API name from the
63
+ * picker.
64
+ *
65
+ * - **Controlled mode** (`model` is set): the consumer is expected to
66
+ * update {@link AipAgentChatProps.model} in response.
67
+ * - **Uncontrolled mode** (only `defaultModel` is set): a
68
+ * non-controlling listener; the picker still mutates internal state
69
+ * regardless. Use this for analytics or to persist the user's
70
+ * choice.
71
+ *
72
+ * Has no effect unless {@link AipAgentChatProps.availableModels} is
73
+ * provided.
74
+ *
75
+ * @param model The model API name the user just selected.
76
+ */
77
+ onModelChange?: (model: string) => void;
78
+ /**
79
+ * System prompt prepended to every request.
80
+ */
81
+ system?: string;
82
+ /**
83
+ * Seed messages — used as the initial conversation snapshot. Forwarded
84
+ * to `useChat`'s `messages` option.
85
+ */
86
+ initialMessages?: ReadonlyArray<UIMessage>;
87
+ /**
88
+ * Additional CSS class name applied to the root chat container.
89
+ */
90
+ className?: string;
91
+ /**
92
+ * Placeholder text for the message composer input.
93
+ *
94
+ * @default "Type a message..."
95
+ */
96
+ placeholder?: string;
97
+ /**
98
+ * Whether the message list automatically scrolls to the most recent
99
+ * message as the conversation grows.
100
+ *
101
+ * @default true
102
+ */
103
+ enableAutoScroll?: boolean;
104
+ /**
105
+ * Listener fired when the underlying chat hook surfaces an error
106
+ * (for example a failed send or a dropped stream). Forwarded to
107
+ * `useChat`'s `onError`.
108
+ *
109
+ * @param error The error reported by the chat backend.
110
+ */
111
+ onError?: (error: Error) => void;
112
+ /**
113
+ * Listener fired once after a stream completes successfully. Forwarded
114
+ * to `useChat`'s `onFinish`.
115
+ *
116
+ * @param event The completed assistant message and the resulting
117
+ * messages array.
118
+ */
119
+ onFinish?: (event: {
120
+ message: UIMessage;
121
+ messages: ReadonlyArray<UIMessage>;
122
+ }) => void;
123
+ /**
124
+ * Render override for the empty state shown when no messages exist
125
+ * yet. If omitted, a default welcome panel is rendered.
126
+ *
127
+ * @returns A React node rendered in place of the default empty state.
128
+ */
129
+ renderEmptyState?: () => React.ReactNode;
130
+ /**
131
+ * Render override for an individual message bubble. If omitted, the
132
+ * default user/assistant bubble layout is used.
133
+ *
134
+ * @param message The {@link UIMessage} to render.
135
+ * @returns A React node rendered in place of the default message
136
+ * bubble.
137
+ */
138
+ renderMessage?: (message: UIMessage) => React.ReactNode;
139
+ }
140
+
141
+ /**
142
+ * OSDK-aware chat surface backed by Foundry's Language Model Service.
143
+ * Constructs the LMS-backed model internally and uses `useChat` to
144
+ * manage conversation state, so consumers never need to import `useChat`,
145
+ * `streamText`, or `foundryModel` themselves.
146
+ */
147
+ declare function AipAgentChat({ client, model: controlledModel, defaultModel, availableModels, onModelChange, system, initialMessages, className, placeholder, enableAutoScroll, onError, onFinish, renderEmptyState, renderMessage, }: AipAgentChatProps): React.ReactElement;
148
+
149
+ interface BaseAipAgentChatProps {
150
+ /**
151
+ * Current messages in the conversation.
152
+ */
153
+ messages: ReadonlyArray<UIMessage>;
154
+ /**
155
+ * Current status of the chat lifecycle.
156
+ */
157
+ status: ChatStatus;
158
+ /**
159
+ * Current error, if any.
160
+ */
161
+ error: Error | undefined;
162
+ /**
163
+ * Called when the user sends a message. Should return a promise that
164
+ * resolves when the message has been sent.
165
+ *
166
+ * @param text The text the user just submitted (already trimmed).
167
+ */
168
+ onSendMessage: (text: string) => Promise<void>;
169
+ /**
170
+ * Called to stop an in-flight request.
171
+ */
172
+ onStop: () => void;
173
+ /**
174
+ * Called to clear the current error.
175
+ */
176
+ onClearError: () => void;
177
+ /**
178
+ * Optional content rendered in the composer footer, to the left of
179
+ * the send button. The OSDK wrapper uses this slot for the model
180
+ * picker.
181
+ */
182
+ composerFooter?: React.ReactNode;
183
+ className?: string;
184
+ /**
185
+ * @default "Type a message..."
186
+ */
187
+ placeholder?: string;
188
+ /**
189
+ * @default true
190
+ */
191
+ enableAutoScroll?: boolean;
192
+ renderEmptyState?: () => React.ReactNode;
193
+ renderMessage?: (message: UIMessage) => React.ReactNode;
194
+ }
195
+ /**
196
+ * OSDK-agnostic chat surface. Manages conversation state, streaming UI,
197
+ * and error display internally; the consumer provides the current state
198
+ * and callbacks for sending messages and managing state.
199
+ */
200
+ declare const BaseAipAgentChat: React.NamedExoticComponent<BaseAipAgentChatProps>;
201
+
202
+ export { AipAgentChat, type AipAgentChatProps, BaseAipAgentChat, type BaseAipAgentChatProps };