@tylertech/forge-ai 0.6.1 → 0.7.0
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.
- package/custom-elements.json +1959 -1365
- package/dist/ai-actions-toolbar/ai-actions-toolbar.mjs +1 -0
- package/dist/ai-assistant-response/ai-assistant-response.d.ts +45 -0
- package/dist/ai-assistant-response/ai-assistant-response.mjs +211 -0
- package/dist/ai-assistant-response/ai-assistant-response.scss.mjs +4 -0
- package/dist/ai-assistant-response/index.d.ts +1 -0
- package/dist/ai-assistant-response/index.mjs +5 -0
- package/dist/ai-chat-interface/ai-chat-interface.mjs +4 -1
- package/dist/ai-chatbot/ag-ui-adapter.mjs +44 -1
- package/dist/ai-chatbot/agent-adapter.d.ts +68 -0
- package/dist/ai-chatbot/agent-adapter.mjs +64 -1
- package/dist/ai-chatbot/ai-chatbot-tool-call.mjs +14 -12
- package/dist/ai-chatbot/ai-chatbot-tool-call.scss.mjs +1 -1
- package/dist/ai-chatbot/ai-chatbot.d.ts +3 -0
- package/dist/ai-chatbot/ai-chatbot.mjs +50 -60
- package/dist/ai-chatbot/ai-chatbot.scss.mjs +1 -1
- package/dist/ai-chatbot/index.d.ts +1 -1
- package/dist/ai-chatbot/message-state-controller.d.ts +16 -11
- package/dist/ai-chatbot/message-state-controller.mjs +216 -112
- package/dist/ai-chatbot/types.d.ts +19 -0
- package/dist/ai-fab/ai-fab.scss.mjs +1 -1
- package/dist/ai-message-thread/ai-message-thread.mjs +35 -17
- package/dist/ai-response-message/ai-response-message.d.ts +1 -20
- package/dist/ai-response-message/ai-response-message.mjs +4 -112
- package/dist/ai-response-message/ai-response-message.scss.mjs +1 -1
- package/dist/core/tooltip/tooltip.d.ts +1 -0
- package/dist/core/tooltip/tooltip.mjs +6 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +3 -0
- package/dist/tools/ai-data-table/ai-data-table-definition.mjs +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const styles = '/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/* prettier-ignore */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/* prettier-ignore */\n.forge-icon-button {\n --_icon-button-display: var(--forge-icon-button-display, inline-flex);\n --_icon-button-size: var(--forge-icon-button-size, 48px);\n --_icon-button-gap: var(--forge-icon-button-gap, 0);\n --_icon-button-icon-color: var(--forge-icon-button-icon-color, currentColor);\n --_icon-button-background-color: var(--forge-icon-button-background-color, none);\n --_icon-button-icon-size: var(--forge-icon-button-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.5));\n --_icon-button-cursor: var(--forge-icon-button-cursor, pointer);\n --_icon-button-padding: var(--forge-icon-button-padding, var(--forge-spacing-xxsmall, 4px));\n --_icon-button-border: var(--forge-icon-button-border, none);\n --_icon-button-shadow: var(--forge-icon-button-shadow, none);\n --_icon-button-transition-duration: var(--forge-icon-button-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_icon-button-transition-timing: var(--forge-icon-button-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_icon-button-shape: var(--forge-icon-button-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));\n --_icon-button-shape-start-start: var(--forge-icon-button-shape-start-start, var(--_icon-button-shape));\n --_icon-button-shape-start-end: var(--forge-icon-button-shape-start-end, var(--_icon-button-shape));\n --_icon-button-shape-end-start: var(--forge-icon-button-shape-end-start, var(--_icon-button-shape));\n --_icon-button-shape-end-end: var(--forge-icon-button-shape-end-end, var(--_icon-button-shape));\n --_icon-button-shape-squared: var(--forge-icon-button-shape-squared, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_icon-button-outlined-border-width: var(--forge-icon-button-outlined-border-width, 1px);\n --_icon-button-outlined-border-style: var(--forge-icon-button-outlined-border-style, solid);\n --_icon-button-outlined-border-color: var(--forge-icon-button-outlined-border-color, var(--_icon-button-icon-color));\n --_icon-button-tonal-icon-color: var(--forge-icon-button-tonal-icon-color, var(--forge-theme-on-primary-container, #222c62));\n --_icon-button-tonal-background-color: var(--forge-icon-button-tonal-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-filled-icon-color: var(--forge-icon-button-filled-icon-color, var(--forge-theme-on-primary, #ffffff));\n --_icon-button-filled-background-color: var(--forge-icon-button-filled-background-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-raised-shadow: var(--forge-icon-button-raised-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));\n --_icon-button-raised-hover-shadow: var(--forge-icon-button-raised-hover-shadow, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12));\n --_icon-button-raised-active-shadow: var(--forge-icon-button-raised-active-shadow, 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12));\n --_icon-button-raised-disabled-shadow: var(--forge-icon-button-raised-disabled-shadow, none);\n --_icon-button-density-small-size: var(--forge-icon-button-density-small-size, 24px);\n --_icon-button-density-small-padding: var(--forge-icon-button-density-small-padding, var(--forge-spacing-xxxsmall, 2px));\n --_icon-button-density-small-icon-size: var(--forge-icon-button-density-small-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.125));\n --_icon-button-density-medium-size: var(--forge-icon-button-density-medium-size, 36px);\n --_icon-button-density-medium-padding: var(--forge-icon-button-density-medium-padding, var(--forge-spacing-xxsmall, 4px));\n --_icon-button-density-large-size: var(--forge-icon-button-density-large-size, var(--_icon-button-size));\n --_icon-button-toggle-on-background-color: var(--forge-icon-button-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-toggle-on-icon-color: var(--forge-icon-button-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-outlined-toggle-on-background-color: var(--forge-icon-button-outlined-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-outlined-toggle-on-icon-color: var(--forge-icon-button-outlined-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-tonal-toggle-background-color: var(--forge-icon-button-tonal-toggle-background-color, var(--forge-theme-surface-container-low, #ebebeb));\n --_icon-button-tonal-toggle-on-background-color: var(--forge-icon-button-tonal-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-tonal-toggle-on-icon-color: var(--forge-icon-button-tonal-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-filled-toggle-background-color: var(--forge-icon-button-filled-toggle-background-color, var(--forge-theme-surface-container-low, #ebebeb));\n --_icon-button-filled-toggle-icon-color: var(--forge-icon-button-filled-toggle-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-filled-toggle-on-background-color: var(--forge-icon-button-filled-toggle-on-background-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-filled-toggle-on-icon-color: var(--forge-icon-button-filled-toggle-on-icon-color, var(--forge-theme-on-primary, #ffffff));\n --_icon-button-disabled-cursor: var(--forge-icon-button-disabled-cursor, not-allowed);\n --_icon-button-disabled-opacity: var(--forge-icon-button-disabled-opacity, 0.38);\n --_icon-button-popover-icon-padding: var(--forge-icon-button-popover-icon-padding, var(--forge-spacing-xsmall, 8px));\n --_icon-button-focus-indicator-color: var(--forge-icon-button-focus-indicator-color, var(--forge-theme-primary, #3f51b5));\n}\n\n.forge-icon-button {\n display: var(--_icon-button-display);\n position: relative;\n outline: none;\n -webkit-tap-highlight-color: transparent;\n position: relative;\n z-index: 0;\n display: var(--_icon-button-display);\n align-items: center;\n justify-content: center;\n gap: var(--_icon-button-gap);\n box-sizing: border-box;\n height: var(--_icon-button-density-large-size);\n min-width: var(--_icon-button-density-large-size);\n border: var(--_icon-button-border);\n border-start-start-radius: var(--_icon-button-shape-start-start);\n border-start-end-radius: var(--_icon-button-shape-start-end);\n border-end-start-radius: var(--_icon-button-shape-end-start);\n border-end-end-radius: var(--_icon-button-shape-end-end);\n padding: var(--_icon-button-padding);\n box-shadow: var(--_icon-button-shadow);\n color: var(--_icon-button-icon-color);\n background: var(--_icon-button-background-color);\n font-size: var(--_icon-button-icon-size);\n cursor: var(--_icon-button-cursor);\n user-select: none;\n transition-property: box-shadow, background;\n transition-duration: var(--_icon-button-transition-duration);\n transition-timing-function: var(--_icon-button-transition-timing);\n}\n\n.forge-icon-button img,\n.forge-icon-button svg {\n height: var(--_icon-button-icon-size);\n width: var(--_icon-button-icon-size);\n}\n\n.forge-icon-button svg {\n fill: currentColor;\n}\n\n.forge-icon-button:not(:disabled) {\n --_state-layer-display: var(--forge-state-layer-display, flex);\n --_state-layer-color: var(--forge-state-layer-color, var(--forge-theme-on-surface, #000000));\n --_state-layer-hover-color: var(--forge-state-layer-hover-color, var(--_state-layer-color));\n --_state-layer-hover-opacity: var(--forge-state-layer-hover-opacity, 0.08);\n --_state-layer-pressed-color: var(--forge-state-layer-pressed-color, var(--_state-layer-color));\n --_state-layer-pressed-opacity: var(--forge-state-layer-pressed-opacity, 0.12);\n --_state-layer-hover-duration: var(--forge-state-layer-hover-duration, 15ms);\n --_state-layer-pressed-duration: var(--forge-state-layer-pressed-duration, 105ms);\n --_state-layer-animation-duration: var(--forge-state-layer-animation-duration, 375ms);\n}\n\n.forge-icon-button:not(:disabled)::before {\n opacity: 0;\n position: absolute;\n backface-visibility: hidden;\n transform: translateZ(0);\n background-color: var(--_state-layer-hover-color);\n inset: 0;\n transition: opacity var(--_state-layer-hover-duration) linear, background-color var(--_state-layer-hover-duration) linear;\n --_state-layer-hover-duration: var(--forge-state-layer-hover-duration, 100ms);\n content: "";\n opacity: 0;\n border-radius: inherit;\n}\n\n.forge-icon-button:not(:disabled):hover::before {\n background-color: var(--_state-layer-hover-color);\n opacity: var(--_state-layer-hover-opacity);\n}\n\n.forge-icon-button:not(:disabled):active::before {\n opacity: var(--_state-layer-pressed-opacity);\n transition-duration: var(--_state-layer-pressed-duration);\n --_state-layer-pressed-opacity: var(--forge-state-layer-pressed-opacity, 0.18);\n}\n\n.forge-icon-button:not(:disabled) {\n --forge-state-layer-color: var(--_icon-button-icon-color);\n}\n\n@keyframes forge-focus-indicator-outward-grow {\n from {\n outline-width: 0;\n }\n to {\n outline-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-outward-shrink {\n from {\n outline-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-inward-grow {\n from {\n border-width: 0;\n }\n to {\n border-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-inward-shrink {\n from {\n border-width: var(--_focus-indicator-active-width);\n }\n}\n.forge-icon-button:not(:disabled) {\n outline: none;\n}\n\n.forge-icon-button:not(:disabled):focus-visible::after {\n --_focus-indicator-display: var(--forge-focus-indicator-display, flex);\n --_focus-indicator-width: var(--forge-focus-indicator-width, var(--forge-border-medium, 2px));\n --_focus-indicator-active-width: var(--forge-focus-indicator-active-width, 6px);\n --_focus-indicator-color: var(--forge-focus-indicator-color, var(--forge-theme-primary, #3f51b5));\n --_focus-indicator-shape: var(--forge-focus-indicator-shape, calc(var(--forge-shape-extra-small, 1px) * var(--forge-shape-factor, 1)));\n --_focus-indicator-duration: var(--forge-focus-indicator-duration, var(--forge-animation-duration-long4, 600ms));\n --_focus-indicator-easing: var(--forge-focus-indicator-easing, var(--forge-animation-easing-emphasized, cubic-bezier(0.2, 0, 0, 1)));\n --_focus-indicator-shape-start-start: var(--forge-focus-indicator-shape-start-start, var(--_focus-indicator-shape));\n --_focus-indicator-shape-start-end: var(--forge-focus-indicator-shape-start-end, var(--_focus-indicator-shape));\n --_focus-indicator-shape-end-end: var(--forge-focus-indicator-shape-end-end, var(--_focus-indicator-shape));\n --_focus-indicator-shape-end-start: var(--forge-focus-indicator-shape-end-start, var(--_focus-indicator-shape));\n --_focus-indicator-outward-offset: var(--forge-focus-indicator-outward-offset, var(--forge-spacing-xxsmall, 4px));\n --_focus-indicator-inward-offset: var(--forge-focus-indicator-inward-offset, 0px);\n --_focus-indicator-offset-block: var(--forge-focus-indicator-offset-block, 0);\n --_focus-indicator-offset-inline: var(--forge-focus-indicator-offset-inline, 0);\n}\n\n.forge-icon-button:not(:disabled):focus-visible::after {\n animation-delay: 0s, calc(var(--_focus-indicator-duration) * 0.25);\n animation-duration: calc(var(--_focus-indicator-duration) * 0.25), calc(var(--_focus-indicator-duration) * 0.75);\n animation-timing-function: var(--_focus-indicator-easing);\n box-sizing: border-box;\n color: var(--_focus-indicator-color);\n display: none;\n pointer-events: none;\n position: absolute;\n margin-block: var(--_focus-indicator-offset-block);\n margin-inline: var(--_focus-indicator-offset-inline);\n animation-name: forge-focus-indicator-outward-grow, forge-focus-indicator-outward-shrink;\n border-end-end-radius: calc(var(--_focus-indicator-shape-end-end) + var(--_focus-indicator-outward-offset));\n border-end-start-radius: calc(var(--_focus-indicator-shape-end-start) + var(--_focus-indicator-outward-offset));\n border-start-end-radius: calc(var(--_focus-indicator-shape-start-end) + var(--_focus-indicator-outward-offset));\n border-start-start-radius: calc(var(--_focus-indicator-shape-start-start) + var(--_focus-indicator-outward-offset));\n inset: calc(-1 * var(--_focus-indicator-outward-offset));\n outline: var(--_focus-indicator-width) solid currentColor;\n content: "";\n display: block;\n}\n\n.forge-icon-button:not(:disabled) {\n --forge-focus-indicator-color: var(--_icon-button-focus-indicator-color);\n --forge-focus-indicator-shape: var(--_icon-button-shape);\n}\n\n.forge-icon-button:not(:disabled):where(.forge-icon-button--text,\n:not(:where(.forge-icon-button--outlined, .forge-icon-button--tonal, .forge-icon-button--filled, .forge-icon-button--raised))) {\n --forge-focus-indicator-outward-offset: 0px;\n}\n\n.forge-icon-button--outlined {\n border-width: var(--_icon-button-outlined-border-width);\n border-style: var(--_icon-button-outlined-border-style);\n border-color: var(--_icon-button-outlined-border-color);\n}\n\n.forge-icon-button--tonal {\n --_icon-button-icon-color: var(--_icon-button-tonal-icon-color);\n --_icon-button-background-color: var(--_icon-button-tonal-background-color);\n}\n\n.forge-icon-button--filled, .forge-icon-button--raised {\n --_icon-button-icon-color: var(--_icon-button-filled-icon-color);\n --_icon-button-background-color: var(--_icon-button-filled-background-color);\n}\n\n.forge-icon-button--raised {\n --_icon-button-shadow: var(--_icon-button-raised-shadow);\n}\n\n.forge-icon-button--raised:hover {\n --_icon-button-raised-shadow: var(--_icon-button-raised-hover-shadow);\n}\n\n.forge-icon-button--raised:active {\n --_icon-button-raised-shadow: var(--_icon-button-raised-active-shadow);\n}\n\n.forge-icon-button--squared {\n --_icon-button-shape: var(--_icon-button-shape-squared);\n}\n\n.forge-icon-button--small {\n --_icon-button-size: var(--_icon-button-density-small-size);\n --_icon-button-icon-size: var(--_icon-button-density-small-icon-size);\n --_icon-button-padding: var(--_icon-button-density-small-padding);\n}\n\n.forge-icon-button--small > * {\n font-size: var(--_icon-button-density-small-icon-size);\n}\n\n.forge-icon-button--medium {\n --_icon-button-size: var(--_icon-button-density-medium-size);\n --_icon-button-padding: var(--_icon-button-density-medium-padding);\n}\n\n.forge-icon-button:disabled {\n pointer-events: none;\n opacity: var(--_icon-button-disabled-opacity);\n pointer-events: auto;\n cursor: not-allowed;\n}\n\n.forge-icon-button forge-circular-progress {\n --forge-circular-progress-indicator-color: var(--_icon-button-icon-color);\n --forge-circular-progress-track-color: transparent;\n --forge-circular-progress-size: 1em;\n}\n\n:host {\n display: block;\n}\n\n.tool-call {\n display: flex;\n align-items: center;\n gap: var(--forge-spacing-small, 12px);\n margin-block-end: var(--forge-spacing-small, 12px);\n}\n\n.debug-button {\n color: var(--forge-theme-on-error-container-low, #5f0011);\n --forge-icon-button-focus-indicator-color: var(--forge-theme-error, #b00020);\n --forge-icon-button-tonal-background-color: var(--forge-theme-error-container-low, #f6e0e4);\n}\n\n.tool-name {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-body1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-body1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-body1-font-weight, 400);\n line-height: var(--forge-typography-body1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-line-height-scale, 1.125)));\n letter-spacing: var(--forge-typography-body1-letter-spacing, 0.0357142857em);\n text-transform: var(--forge-typography-body1-text-transform, inherit);\n text-decoration: var(--forge-typography-body1-text-decoration, inherit);\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n\n.status-icon {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n\n.info-button {\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n.info-button:hover {\n color: var(--forge-theme-text-high, rgba(0, 0, 0, 0.87));\n}\n\n.tool-details {\n display: grid;\n gap: var(--forge-spacing-medium, 16px);\n padding: var(--forge-spacing-medium, 16px);\n min-width: 300px;\n max-width: 500px;\n min-height: 100px;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.tool-section {\n display: grid;\n gap: var(--forge-spacing-xsmall, 8px);\n}\n\n.section-label {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-heading1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-heading1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading1-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-heading1-font-weight, 500);\n line-height: var(--forge-typography-heading1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading1-line-height-scale, 1.125)));\n letter-spacing: var(--forge-typography-heading1-letter-spacing, 0.0178571429em);\n text-transform: var(--forge-typography-heading1-text-transform, inherit);\n text-decoration: var(--forge-typography-heading1-text-decoration, inherit);\n}\n\n.code-block {\n background-color: var(--forge-theme-surface-container-minimum, #f5f5f5);\n color: var(--forge-theme-on-surface-container-minimum, #000000);\n padding: var(--forge-spacing-small, 12px);\n border-radius: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));\n overflow-x: auto;\n margin: 0;\n font-family: monospace;\n font-size: 0.85em;\n white-space: pre-wrap;\n word-wrap: break-word;\n}';
|
|
1
|
+
const styles = '/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/* prettier-ignore */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/* prettier-ignore */\n.forge-icon-button {\n --_icon-button-display: var(--forge-icon-button-display, inline-flex);\n --_icon-button-size: var(--forge-icon-button-size, 48px);\n --_icon-button-gap: var(--forge-icon-button-gap, 0);\n --_icon-button-icon-color: var(--forge-icon-button-icon-color, currentColor);\n --_icon-button-background-color: var(--forge-icon-button-background-color, none);\n --_icon-button-icon-size: var(--forge-icon-button-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.5));\n --_icon-button-cursor: var(--forge-icon-button-cursor, pointer);\n --_icon-button-padding: var(--forge-icon-button-padding, var(--forge-spacing-xxsmall, 4px));\n --_icon-button-border: var(--forge-icon-button-border, none);\n --_icon-button-shadow: var(--forge-icon-button-shadow, none);\n --_icon-button-transition-duration: var(--forge-icon-button-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_icon-button-transition-timing: var(--forge-icon-button-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_icon-button-shape: var(--forge-icon-button-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));\n --_icon-button-shape-start-start: var(--forge-icon-button-shape-start-start, var(--_icon-button-shape));\n --_icon-button-shape-start-end: var(--forge-icon-button-shape-start-end, var(--_icon-button-shape));\n --_icon-button-shape-end-start: var(--forge-icon-button-shape-end-start, var(--_icon-button-shape));\n --_icon-button-shape-end-end: var(--forge-icon-button-shape-end-end, var(--_icon-button-shape));\n --_icon-button-shape-squared: var(--forge-icon-button-shape-squared, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_icon-button-outlined-border-width: var(--forge-icon-button-outlined-border-width, 1px);\n --_icon-button-outlined-border-style: var(--forge-icon-button-outlined-border-style, solid);\n --_icon-button-outlined-border-color: var(--forge-icon-button-outlined-border-color, var(--_icon-button-icon-color));\n --_icon-button-tonal-icon-color: var(--forge-icon-button-tonal-icon-color, var(--forge-theme-on-primary-container, #222c62));\n --_icon-button-tonal-background-color: var(--forge-icon-button-tonal-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-filled-icon-color: var(--forge-icon-button-filled-icon-color, var(--forge-theme-on-primary, #ffffff));\n --_icon-button-filled-background-color: var(--forge-icon-button-filled-background-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-raised-shadow: var(--forge-icon-button-raised-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));\n --_icon-button-raised-hover-shadow: var(--forge-icon-button-raised-hover-shadow, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12));\n --_icon-button-raised-active-shadow: var(--forge-icon-button-raised-active-shadow, 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12));\n --_icon-button-raised-disabled-shadow: var(--forge-icon-button-raised-disabled-shadow, none);\n --_icon-button-density-small-size: var(--forge-icon-button-density-small-size, 24px);\n --_icon-button-density-small-padding: var(--forge-icon-button-density-small-padding, var(--forge-spacing-xxxsmall, 2px));\n --_icon-button-density-small-icon-size: var(--forge-icon-button-density-small-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.125));\n --_icon-button-density-medium-size: var(--forge-icon-button-density-medium-size, 36px);\n --_icon-button-density-medium-padding: var(--forge-icon-button-density-medium-padding, var(--forge-spacing-xxsmall, 4px));\n --_icon-button-density-large-size: var(--forge-icon-button-density-large-size, var(--_icon-button-size));\n --_icon-button-toggle-on-background-color: var(--forge-icon-button-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-toggle-on-icon-color: var(--forge-icon-button-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-outlined-toggle-on-background-color: var(--forge-icon-button-outlined-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-outlined-toggle-on-icon-color: var(--forge-icon-button-outlined-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-tonal-toggle-background-color: var(--forge-icon-button-tonal-toggle-background-color, var(--forge-theme-surface-container-low, #ebebeb));\n --_icon-button-tonal-toggle-on-background-color: var(--forge-icon-button-tonal-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-tonal-toggle-on-icon-color: var(--forge-icon-button-tonal-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-filled-toggle-background-color: var(--forge-icon-button-filled-toggle-background-color, var(--forge-theme-surface-container-low, #ebebeb));\n --_icon-button-filled-toggle-icon-color: var(--forge-icon-button-filled-toggle-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-filled-toggle-on-background-color: var(--forge-icon-button-filled-toggle-on-background-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-filled-toggle-on-icon-color: var(--forge-icon-button-filled-toggle-on-icon-color, var(--forge-theme-on-primary, #ffffff));\n --_icon-button-disabled-cursor: var(--forge-icon-button-disabled-cursor, not-allowed);\n --_icon-button-disabled-opacity: var(--forge-icon-button-disabled-opacity, 0.38);\n --_icon-button-popover-icon-padding: var(--forge-icon-button-popover-icon-padding, var(--forge-spacing-xsmall, 8px));\n --_icon-button-focus-indicator-color: var(--forge-icon-button-focus-indicator-color, var(--forge-theme-primary, #3f51b5));\n}\n\n.forge-icon-button {\n display: var(--_icon-button-display);\n position: relative;\n outline: none;\n -webkit-tap-highlight-color: transparent;\n position: relative;\n z-index: 0;\n display: var(--_icon-button-display);\n align-items: center;\n justify-content: center;\n gap: var(--_icon-button-gap);\n box-sizing: border-box;\n height: var(--_icon-button-density-large-size);\n min-width: var(--_icon-button-density-large-size);\n border: var(--_icon-button-border);\n border-start-start-radius: var(--_icon-button-shape-start-start);\n border-start-end-radius: var(--_icon-button-shape-start-end);\n border-end-start-radius: var(--_icon-button-shape-end-start);\n border-end-end-radius: var(--_icon-button-shape-end-end);\n padding: var(--_icon-button-padding);\n box-shadow: var(--_icon-button-shadow);\n color: var(--_icon-button-icon-color);\n background: var(--_icon-button-background-color);\n font-size: var(--_icon-button-icon-size);\n cursor: var(--_icon-button-cursor);\n user-select: none;\n transition-property: box-shadow, background;\n transition-duration: var(--_icon-button-transition-duration);\n transition-timing-function: var(--_icon-button-transition-timing);\n}\n\n.forge-icon-button img,\n.forge-icon-button svg {\n height: var(--_icon-button-icon-size);\n width: var(--_icon-button-icon-size);\n}\n\n.forge-icon-button svg {\n fill: currentColor;\n}\n\n.forge-icon-button:not(:disabled) {\n --_state-layer-display: var(--forge-state-layer-display, flex);\n --_state-layer-color: var(--forge-state-layer-color, var(--forge-theme-on-surface, #000000));\n --_state-layer-hover-color: var(--forge-state-layer-hover-color, var(--_state-layer-color));\n --_state-layer-hover-opacity: var(--forge-state-layer-hover-opacity, 0.08);\n --_state-layer-pressed-color: var(--forge-state-layer-pressed-color, var(--_state-layer-color));\n --_state-layer-pressed-opacity: var(--forge-state-layer-pressed-opacity, 0.12);\n --_state-layer-hover-duration: var(--forge-state-layer-hover-duration, 15ms);\n --_state-layer-pressed-duration: var(--forge-state-layer-pressed-duration, 105ms);\n --_state-layer-animation-duration: var(--forge-state-layer-animation-duration, 375ms);\n}\n\n.forge-icon-button:not(:disabled)::before {\n opacity: 0;\n position: absolute;\n backface-visibility: hidden;\n transform: translateZ(0);\n background-color: var(--_state-layer-hover-color);\n inset: 0;\n transition: opacity var(--_state-layer-hover-duration) linear, background-color var(--_state-layer-hover-duration) linear;\n --_state-layer-hover-duration: var(--forge-state-layer-hover-duration, 100ms);\n content: "";\n opacity: 0;\n border-radius: inherit;\n}\n\n.forge-icon-button:not(:disabled):hover::before {\n background-color: var(--_state-layer-hover-color);\n opacity: var(--_state-layer-hover-opacity);\n}\n\n.forge-icon-button:not(:disabled):active::before {\n opacity: var(--_state-layer-pressed-opacity);\n transition-duration: var(--_state-layer-pressed-duration);\n --_state-layer-pressed-opacity: var(--forge-state-layer-pressed-opacity, 0.18);\n}\n\n.forge-icon-button:not(:disabled) {\n --forge-state-layer-color: var(--_icon-button-icon-color);\n}\n\n@keyframes forge-focus-indicator-outward-grow {\n from {\n outline-width: 0;\n }\n to {\n outline-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-outward-shrink {\n from {\n outline-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-inward-grow {\n from {\n border-width: 0;\n }\n to {\n border-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-inward-shrink {\n from {\n border-width: var(--_focus-indicator-active-width);\n }\n}\n.forge-icon-button:not(:disabled) {\n outline: none;\n}\n\n.forge-icon-button:not(:disabled):focus-visible::after {\n --_focus-indicator-display: var(--forge-focus-indicator-display, flex);\n --_focus-indicator-width: var(--forge-focus-indicator-width, var(--forge-border-medium, 2px));\n --_focus-indicator-active-width: var(--forge-focus-indicator-active-width, 6px);\n --_focus-indicator-color: var(--forge-focus-indicator-color, var(--forge-theme-primary, #3f51b5));\n --_focus-indicator-shape: var(--forge-focus-indicator-shape, calc(var(--forge-shape-extra-small, 1px) * var(--forge-shape-factor, 1)));\n --_focus-indicator-duration: var(--forge-focus-indicator-duration, var(--forge-animation-duration-long4, 600ms));\n --_focus-indicator-easing: var(--forge-focus-indicator-easing, var(--forge-animation-easing-emphasized, cubic-bezier(0.2, 0, 0, 1)));\n --_focus-indicator-shape-start-start: var(--forge-focus-indicator-shape-start-start, var(--_focus-indicator-shape));\n --_focus-indicator-shape-start-end: var(--forge-focus-indicator-shape-start-end, var(--_focus-indicator-shape));\n --_focus-indicator-shape-end-end: var(--forge-focus-indicator-shape-end-end, var(--_focus-indicator-shape));\n --_focus-indicator-shape-end-start: var(--forge-focus-indicator-shape-end-start, var(--_focus-indicator-shape));\n --_focus-indicator-outward-offset: var(--forge-focus-indicator-outward-offset, var(--forge-spacing-xxsmall, 4px));\n --_focus-indicator-inward-offset: var(--forge-focus-indicator-inward-offset, 0px);\n --_focus-indicator-offset-block: var(--forge-focus-indicator-offset-block, 0);\n --_focus-indicator-offset-inline: var(--forge-focus-indicator-offset-inline, 0);\n}\n\n.forge-icon-button:not(:disabled):focus-visible::after {\n animation-delay: 0s, calc(var(--_focus-indicator-duration) * 0.25);\n animation-duration: calc(var(--_focus-indicator-duration) * 0.25), calc(var(--_focus-indicator-duration) * 0.75);\n animation-timing-function: var(--_focus-indicator-easing);\n box-sizing: border-box;\n color: var(--_focus-indicator-color);\n display: none;\n pointer-events: none;\n position: absolute;\n margin-block: var(--_focus-indicator-offset-block);\n margin-inline: var(--_focus-indicator-offset-inline);\n animation-name: forge-focus-indicator-outward-grow, forge-focus-indicator-outward-shrink;\n border-end-end-radius: calc(var(--_focus-indicator-shape-end-end) + var(--_focus-indicator-outward-offset));\n border-end-start-radius: calc(var(--_focus-indicator-shape-end-start) + var(--_focus-indicator-outward-offset));\n border-start-end-radius: calc(var(--_focus-indicator-shape-start-end) + var(--_focus-indicator-outward-offset));\n border-start-start-radius: calc(var(--_focus-indicator-shape-start-start) + var(--_focus-indicator-outward-offset));\n inset: calc(-1 * var(--_focus-indicator-outward-offset));\n outline: var(--_focus-indicator-width) solid currentColor;\n content: "";\n display: block;\n}\n\n.forge-icon-button:not(:disabled) {\n --forge-focus-indicator-color: var(--_icon-button-focus-indicator-color);\n --forge-focus-indicator-shape: var(--_icon-button-shape);\n}\n\n.forge-icon-button:not(:disabled):where(.forge-icon-button--text,\n:not(:where(.forge-icon-button--outlined, .forge-icon-button--tonal, .forge-icon-button--filled, .forge-icon-button--raised))) {\n --forge-focus-indicator-outward-offset: 0px;\n}\n\n.forge-icon-button--outlined {\n border-width: var(--_icon-button-outlined-border-width);\n border-style: var(--_icon-button-outlined-border-style);\n border-color: var(--_icon-button-outlined-border-color);\n}\n\n.forge-icon-button--tonal {\n --_icon-button-icon-color: var(--_icon-button-tonal-icon-color);\n --_icon-button-background-color: var(--_icon-button-tonal-background-color);\n}\n\n.forge-icon-button--filled, .forge-icon-button--raised {\n --_icon-button-icon-color: var(--_icon-button-filled-icon-color);\n --_icon-button-background-color: var(--_icon-button-filled-background-color);\n}\n\n.forge-icon-button--raised {\n --_icon-button-shadow: var(--_icon-button-raised-shadow);\n}\n\n.forge-icon-button--raised:hover {\n --_icon-button-raised-shadow: var(--_icon-button-raised-hover-shadow);\n}\n\n.forge-icon-button--raised:active {\n --_icon-button-raised-shadow: var(--_icon-button-raised-active-shadow);\n}\n\n.forge-icon-button--squared {\n --_icon-button-shape: var(--_icon-button-shape-squared);\n}\n\n.forge-icon-button--small {\n --_icon-button-size: var(--_icon-button-density-small-size);\n --_icon-button-icon-size: var(--_icon-button-density-small-icon-size);\n --_icon-button-padding: var(--_icon-button-density-small-padding);\n}\n\n.forge-icon-button--small > * {\n font-size: var(--_icon-button-density-small-icon-size);\n}\n\n.forge-icon-button--medium {\n --_icon-button-size: var(--_icon-button-density-medium-size);\n --_icon-button-padding: var(--_icon-button-density-medium-padding);\n}\n\n.forge-icon-button:disabled {\n pointer-events: none;\n opacity: var(--_icon-button-disabled-opacity);\n pointer-events: auto;\n cursor: not-allowed;\n}\n\n.forge-icon-button forge-circular-progress {\n --forge-circular-progress-indicator-color: var(--_icon-button-icon-color);\n --forge-circular-progress-track-color: transparent;\n --forge-circular-progress-size: 1em;\n}\n\n:host {\n display: block;\n}\n\n.tool-call {\n display: flex;\n align-items: center;\n gap: var(--forge-spacing-xsmall, 8px);\n background: var(--forge-theme-surface-container-minimum, #f5f5f5);\n border-radius: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));\n border: 1px solid var(--forge-theme-outline, #e0e0e0);\n padding: var(--forge-spacing-xxsmall, 4px) var(--forge-spacing-xsmall, 8px);\n margin-block-end: var(--forge-spacing-medium, 16px);\n overflow: hidden;\n}\n\n.debug-button {\n color: var(--forge-theme-on-error-container-low, #5f0011);\n --forge-icon-button-focus-indicator-color: var(--forge-theme-error, #b00020);\n --forge-icon-button-tonal-background-color: var(--forge-theme-error-container-low, #f6e0e4);\n}\n\n.tool-name {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-body1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-body1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-body1-font-weight, 400);\n line-height: var(--forge-typography-body1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-body-line-height-scale, 1.125)));\n letter-spacing: var(--forge-typography-body1-letter-spacing, 0.0357142857em);\n text-transform: var(--forge-typography-body1-text-transform, inherit);\n text-decoration: var(--forge-typography-body1-text-decoration, inherit);\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.status-icon {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n\n.info-button {\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n.info-button:hover {\n color: var(--forge-theme-text-high, rgba(0, 0, 0, 0.87));\n}\n\n.tool-details {\n display: grid;\n gap: var(--forge-spacing-medium, 16px);\n padding: var(--forge-spacing-medium, 16px);\n min-width: 300px;\n max-width: 500px;\n min-height: 100px;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.tool-section {\n display: grid;\n gap: var(--forge-spacing-xsmall, 8px);\n}\n\n.tool-actions {\n display: flex;\n gap: var(--forge-spacing-small, 12px);\n margin-inline-start: auto;\n}\n\n.section-label {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-heading1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-heading1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading1-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-heading1-font-weight, 500);\n line-height: var(--forge-typography-heading1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading1-line-height-scale, 1.125)));\n letter-spacing: var(--forge-typography-heading1-letter-spacing, 0.0178571429em);\n text-transform: var(--forge-typography-heading1-text-transform, inherit);\n text-decoration: var(--forge-typography-heading1-text-decoration, inherit);\n}\n\n.code-block {\n background-color: var(--forge-theme-surface-container-minimum, #f5f5f5);\n color: var(--forge-theme-on-surface-container-minimum, #000000);\n padding: var(--forge-spacing-small, 12px);\n border-radius: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));\n overflow-x: auto;\n margin: 0;\n font-family: monospace;\n font-size: 0.85em;\n white-space: pre-wrap;\n word-wrap: break-word;\n}';
|
|
2
2
|
export {
|
|
3
3
|
styles as default
|
|
4
4
|
};
|
|
@@ -58,6 +58,7 @@ export type FeatureToggle = 'on' | 'off';
|
|
|
58
58
|
*
|
|
59
59
|
* @property {string} titleText - The title text to display in the header (default: 'AI Assistant')
|
|
60
60
|
* @property {HeadingLevel} headingLevel - Controls the heading level for the title content (default: 2)
|
|
61
|
+
* @property {string | null | undefined} disclaimerText - The disclaimer text to display below the prompt. Set to empty string, null, or undefined to hide.
|
|
61
62
|
*
|
|
62
63
|
* @event {CustomEvent<void>} forge-ai-chatbot-connected - Fired when adapter connects
|
|
63
64
|
* @event {CustomEvent<void>} forge-ai-chatbot-disconnected - Fired when adapter disconnects
|
|
@@ -76,6 +77,7 @@ export declare class AiChatbotComponent extends LitElement {
|
|
|
76
77
|
adapter?: AgentAdapter;
|
|
77
78
|
fileUpload: FeatureToggle;
|
|
78
79
|
voiceInput: FeatureToggle;
|
|
80
|
+
debugCommand: FeatureToggle;
|
|
79
81
|
placeholder: string;
|
|
80
82
|
suggestions?: Suggestion[];
|
|
81
83
|
showExpandButton: boolean;
|
|
@@ -87,6 +89,7 @@ export declare class AiChatbotComponent extends LitElement {
|
|
|
87
89
|
titleText: string;
|
|
88
90
|
headingLevel: HeadingLevel;
|
|
89
91
|
debugMode: boolean;
|
|
92
|
+
disclaimerText: string | null | undefined;
|
|
90
93
|
connectedCallback(): void;
|
|
91
94
|
disconnectedCallback(): void;
|
|
92
95
|
willUpdate(changedProperties: PropertyValues<this>): void;
|
|
@@ -42,7 +42,7 @@ var __privateWrapper = (obj, member, setter, getter) => ({
|
|
|
42
42
|
return __privateGet(obj, member, getter);
|
|
43
43
|
}
|
|
44
44
|
});
|
|
45
|
-
var _chatInterfaceRef, _messageThreadRef, _promptRef, _headerRef, _messageStateController, _fileUploadManager, _toolsMap, _adapterSubscriptions, _executingToolHandlers, _AiChatbotComponent_instances, slashCommands_get, messageItems_get, isStreaming_get, isUploading_get, hasMessages_get, tools_get, setupAdapter_fn, handleMessageStart_fn, handleMessageDelta_fn, handleMessageEnd_fn, handleToolCallStart_fn, handleToolCallArgs_fn, handleToolCallEnd_fn, createToolResponse_fn, handleToolCall_fn, executeToolHandler_fn, handleError_fn, handleRunAborted_fn, handleStateChange_fn, handleToolCallResult_fn, sendToolResult_fn, sendUserMessage_fn, handleSend_fn, handleStop_fn, handleCancel_fn, handleCopy_fn, handleRefresh_fn, handleThumbsUp_fn, handleThumbsDown_fn, processFileUpload_fn, handleFileSelect_fn, createFileUploadCallbacks_fn, handleFileError_fn, handleAttachmentRemove_fn, handleSuggestionSelect_fn, handleVoiceInputResult_fn, handleHeaderExpand_fn, handleHeaderMinimize_fn, handleHeaderClear_fn, handleHeaderInfo_fn, handleDebugToggle_fn, handleSlashCommand_fn, handleExport_fn, sessionFilesTemplate_get, promptSlot_get, messageThread_get, dispatchEvent_fn;
|
|
45
|
+
var _chatInterfaceRef, _messageThreadRef, _promptRef, _headerRef, _messageStateController, _fileUploadManager, _toolsMap, _adapterSubscriptions, _executingToolHandlers, _AiChatbotComponent_instances, slashCommands_get, messageItems_get, isStreaming_get, isUploading_get, hasMessages_get, tools_get, setupAdapter_fn, handleMessageStart_fn, handleMessageDelta_fn, handleMessageEnd_fn, handleRunFinished_fn, tryCompleteResponse_fn, handleToolCallStart_fn, handleToolCallArgs_fn, handleToolCallEnd_fn, createToolResponse_fn, handleToolCall_fn, executeToolHandler_fn, handleError_fn, handleRunAborted_fn, handleStateChange_fn, handleToolCallResult_fn, sendToolResult_fn, sendUserMessage_fn, handleSend_fn, handleStop_fn, handleCancel_fn, handleCopy_fn, handleRefresh_fn, handleThumbsUp_fn, handleThumbsDown_fn, processFileUpload_fn, handleFileSelect_fn, createFileUploadCallbacks_fn, handleFileError_fn, handleAttachmentRemove_fn, handleSuggestionSelect_fn, handleVoiceInputResult_fn, handleHeaderExpand_fn, handleHeaderMinimize_fn, handleHeaderClear_fn, handleHeaderInfo_fn, handleDebugToggle_fn, handleSlashCommand_fn, handleExport_fn, sessionFilesTemplate_get, promptSlot_get, messageThread_get, dispatchEvent_fn;
|
|
46
46
|
const AiChatbotComponentTagName = "forge-ai-chatbot";
|
|
47
47
|
let AiChatbotComponent = class extends LitElement {
|
|
48
48
|
constructor() {
|
|
@@ -50,6 +50,7 @@ let AiChatbotComponent = class extends LitElement {
|
|
|
50
50
|
__privateAdd(this, _AiChatbotComponent_instances);
|
|
51
51
|
this.fileUpload = "off";
|
|
52
52
|
this.voiceInput = "on";
|
|
53
|
+
this.debugCommand = "on";
|
|
53
54
|
this.placeholder = "Ask a question...";
|
|
54
55
|
this.showExpandButton = false;
|
|
55
56
|
this.showMinimizeButton = false;
|
|
@@ -59,6 +60,7 @@ let AiChatbotComponent = class extends LitElement {
|
|
|
59
60
|
this.titleText = "AI Assistant";
|
|
60
61
|
this.headingLevel = 2;
|
|
61
62
|
this.debugMode = false;
|
|
63
|
+
this.disclaimerText = "AI can make mistakes. Always verify responses.";
|
|
62
64
|
__privateAdd(this, _chatInterfaceRef, createRef());
|
|
63
65
|
__privateAdd(this, _messageThreadRef, createRef());
|
|
64
66
|
__privateAdd(this, _promptRef, createRef());
|
|
@@ -205,6 +207,7 @@ let AiChatbotComponent = class extends LitElement {
|
|
|
205
207
|
@forge-ai-chat-header-info=${__privateMethod(this, _AiChatbotComponent_instances, handleHeaderInfo_fn)}>
|
|
206
208
|
</forge-ai-chat-header>
|
|
207
209
|
${__privateGet(this, _AiChatbotComponent_instances, sessionFilesTemplate_get)} ${__privateGet(this, _AiChatbotComponent_instances, messageThread_get)} ${__privateGet(this, _AiChatbotComponent_instances, promptSlot_get)}
|
|
210
|
+
${when(this.disclaimerText, () => html`<div class="disclaimer" slot="disclaimer">${this.disclaimerText}</div>`)}
|
|
208
211
|
</forge-ai-chat-interface>
|
|
209
212
|
`;
|
|
210
213
|
}
|
|
@@ -226,11 +229,13 @@ slashCommands_get = function() {
|
|
|
226
229
|
commands.push({ id: "export", name: "Export", group: "Conversation" });
|
|
227
230
|
}
|
|
228
231
|
commands.push({ id: "info", name: "Info", group: "Help" });
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
232
|
+
if (this.debugCommand === "on") {
|
|
233
|
+
commands.push({
|
|
234
|
+
id: "debug",
|
|
235
|
+
name: `${this.debugMode ? "Disable debug mode" : "Enable debug mode"}`,
|
|
236
|
+
group: "Help"
|
|
237
|
+
});
|
|
238
|
+
}
|
|
234
239
|
return commands;
|
|
235
240
|
};
|
|
236
241
|
messageItems_get = function() {
|
|
@@ -267,6 +272,7 @@ setupAdapter_fn = async function() {
|
|
|
267
272
|
this.adapter.onToolCallEnd(__privateMethod(this, _AiChatbotComponent_instances, handleToolCallEnd_fn).bind(this)),
|
|
268
273
|
this.adapter.onToolCall(__privateMethod(this, _AiChatbotComponent_instances, handleToolCall_fn).bind(this)),
|
|
269
274
|
this.adapter.onToolCallResult(__privateMethod(this, _AiChatbotComponent_instances, handleToolCallResult_fn).bind(this)),
|
|
275
|
+
this.adapter.onRunFinished(__privateMethod(this, _AiChatbotComponent_instances, handleRunFinished_fn).bind(this)),
|
|
270
276
|
this.adapter.onRunAborted(__privateMethod(this, _AiChatbotComponent_instances, handleRunAborted_fn).bind(this)),
|
|
271
277
|
this.adapter.onError(__privateMethod(this, _AiChatbotComponent_instances, handleError_fn).bind(this)),
|
|
272
278
|
this.adapter.onStateChange(__privateMethod(this, _AiChatbotComponent_instances, handleStateChange_fn).bind(this))
|
|
@@ -276,36 +282,25 @@ setupAdapter_fn = async function() {
|
|
|
276
282
|
__privateMethod(this, _AiChatbotComponent_instances, dispatchEvent_fn).call(this, { type: "forge-ai-chatbot-connected" });
|
|
277
283
|
};
|
|
278
284
|
handleMessageStart_fn = function(event) {
|
|
279
|
-
|
|
280
|
-
id: event.messageId,
|
|
281
|
-
role: "assistant",
|
|
282
|
-
content: "",
|
|
283
|
-
timestamp: Date.now(),
|
|
284
|
-
status: "streaming"
|
|
285
|
-
};
|
|
286
|
-
__privateGet(this, _messageStateController).addMessage(message, event);
|
|
285
|
+
__privateGet(this, _messageStateController).addTextToResponse(event.messageId, "", event);
|
|
287
286
|
};
|
|
288
287
|
handleMessageDelta_fn = function(event) {
|
|
289
|
-
|
|
290
|
-
if (!message) {
|
|
291
|
-
__privateMethod(this, _AiChatbotComponent_instances, handleMessageStart_fn).call(this, { messageId: event.messageId });
|
|
292
|
-
return;
|
|
293
|
-
}
|
|
294
|
-
__privateGet(this, _messageStateController).appendToMessage(event.messageId, event.delta, event);
|
|
288
|
+
__privateGet(this, _messageStateController).appendTextDelta(event.messageId, event.delta, event);
|
|
295
289
|
this.scrollToBottom();
|
|
296
290
|
};
|
|
297
291
|
handleMessageEnd_fn = function(event) {
|
|
298
|
-
__privateGet(this, _messageStateController).
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
292
|
+
__privateGet(this, _messageStateController).markTextComplete(event.messageId, event);
|
|
293
|
+
};
|
|
294
|
+
handleRunFinished_fn = function() {
|
|
295
|
+
__privateMethod(this, _AiChatbotComponent_instances, tryCompleteResponse_fn).call(this);
|
|
296
|
+
};
|
|
297
|
+
tryCompleteResponse_fn = function() {
|
|
298
|
+
if (__privateGet(this, _executingToolHandlers) > 0 || this.adapter?.isRunning) {
|
|
299
|
+
return;
|
|
302
300
|
}
|
|
301
|
+
__privateGet(this, _messageStateController).completeResponse();
|
|
303
302
|
};
|
|
304
303
|
handleToolCallStart_fn = function(event) {
|
|
305
|
-
const message = __privateGet(this, _messageStateController).getMessage(event.messageId);
|
|
306
|
-
if (!message) {
|
|
307
|
-
__privateMethod(this, _AiChatbotComponent_instances, handleMessageStart_fn).call(this, { messageId: event.messageId });
|
|
308
|
-
}
|
|
309
304
|
const toolCall = {
|
|
310
305
|
id: event.id,
|
|
311
306
|
messageId: event.messageId,
|
|
@@ -315,7 +310,7 @@ handleToolCallStart_fn = function(event) {
|
|
|
315
310
|
status: "parsing",
|
|
316
311
|
type: __privateGet(this, _AiChatbotComponent_instances, tools_get).has(event.name) ? "client" : "agent"
|
|
317
312
|
};
|
|
318
|
-
__privateGet(this, _messageStateController).
|
|
313
|
+
__privateGet(this, _messageStateController).addToolCallToResponse(toolCall, event);
|
|
319
314
|
};
|
|
320
315
|
handleToolCallArgs_fn = function(event) {
|
|
321
316
|
const updates = {
|
|
@@ -323,7 +318,7 @@ handleToolCallArgs_fn = function(event) {
|
|
|
323
318
|
args: event.partialArgs ?? {}
|
|
324
319
|
};
|
|
325
320
|
const rawEvent = { eventType: "tool-call-args", event };
|
|
326
|
-
__privateGet(this, _messageStateController).
|
|
321
|
+
__privateGet(this, _messageStateController).updateToolCallInResponse(event.id, updates, rawEvent);
|
|
327
322
|
this.scrollToBottom();
|
|
328
323
|
};
|
|
329
324
|
handleToolCallEnd_fn = function(event) {
|
|
@@ -333,7 +328,7 @@ handleToolCallEnd_fn = function(event) {
|
|
|
333
328
|
status: "executing"
|
|
334
329
|
};
|
|
335
330
|
const rawEvent = { eventType: "tool-call-end", event };
|
|
336
|
-
__privateGet(this, _messageStateController).
|
|
331
|
+
__privateGet(this, _messageStateController).updateToolCallInResponse(event.id, updates, rawEvent);
|
|
337
332
|
};
|
|
338
333
|
createToolResponse_fn = function(toolName, handlerReturn) {
|
|
339
334
|
if (typeof handlerReturn === "string") {
|
|
@@ -345,13 +340,9 @@ createToolResponse_fn = function(toolName, handlerReturn) {
|
|
|
345
340
|
return `Tool '${toolName}' executed successfully`;
|
|
346
341
|
};
|
|
347
342
|
handleToolCall_fn = async function(event) {
|
|
348
|
-
const message = __privateGet(this, _messageStateController).getMessage(event.messageId);
|
|
349
|
-
if (!message) {
|
|
350
|
-
__privateMethod(this, _AiChatbotComponent_instances, handleMessageStart_fn).call(this, { messageId: event.messageId });
|
|
351
|
-
}
|
|
352
343
|
let toolCall = __privateGet(this, _messageStateController).getToolCall(event.id);
|
|
353
344
|
if (toolCall) {
|
|
354
|
-
__privateGet(this, _messageStateController).
|
|
345
|
+
__privateGet(this, _messageStateController).updateToolCallInResponse(event.id, {
|
|
355
346
|
args: event.args,
|
|
356
347
|
status: "executing"
|
|
357
348
|
});
|
|
@@ -364,7 +355,7 @@ handleToolCall_fn = async function(event) {
|
|
|
364
355
|
status: "executing",
|
|
365
356
|
type: __privateGet(this, _AiChatbotComponent_instances, tools_get).has(event.name) ? "client" : "agent"
|
|
366
357
|
};
|
|
367
|
-
__privateGet(this, _messageStateController).
|
|
358
|
+
__privateGet(this, _messageStateController).addToolCallToResponse(toolCall);
|
|
368
359
|
}
|
|
369
360
|
if (toolCall?.type === "client") {
|
|
370
361
|
__privateMethod(this, _AiChatbotComponent_instances, dispatchEvent_fn).call(this, {
|
|
@@ -396,12 +387,13 @@ executeToolHandler_fn = async function(toolCallId, toolName, handler, args) {
|
|
|
396
387
|
const handlerReturn = await handler(context);
|
|
397
388
|
await __privateMethod(this, _AiChatbotComponent_instances, sendToolResult_fn).call(this, toolCallId, __privateMethod(this, _AiChatbotComponent_instances, createToolResponse_fn).call(this, toolName, handlerReturn));
|
|
398
389
|
} catch (error) {
|
|
399
|
-
__privateGet(this, _messageStateController).
|
|
390
|
+
__privateGet(this, _messageStateController).updateToolCallInResponse(toolCallId, {
|
|
400
391
|
status: "error",
|
|
401
392
|
result: { error: error.message }
|
|
402
393
|
});
|
|
403
394
|
} finally {
|
|
404
395
|
__privateWrapper(this, _executingToolHandlers)._--;
|
|
396
|
+
__privateMethod(this, _AiChatbotComponent_instances, tryCompleteResponse_fn).call(this);
|
|
405
397
|
this.requestUpdate();
|
|
406
398
|
}
|
|
407
399
|
};
|
|
@@ -430,15 +422,14 @@ handleStateChange_fn = function(_state) {
|
|
|
430
422
|
this.requestUpdate();
|
|
431
423
|
};
|
|
432
424
|
handleToolCallResult_fn = function(event) {
|
|
433
|
-
__privateGet(this, _messageStateController).
|
|
434
|
-
__privateGet(this, _messageStateController).addMessage(event.message);
|
|
425
|
+
__privateGet(this, _messageStateController).completeToolCallInResponse(event.toolCallId, event.result, event);
|
|
435
426
|
};
|
|
436
427
|
sendToolResult_fn = async function(toolCallId, result) {
|
|
437
428
|
const toolCall = __privateGet(this, _messageStateController).getToolCall(toolCallId);
|
|
438
429
|
if (!toolCall || !this.adapter) {
|
|
439
430
|
return;
|
|
440
431
|
}
|
|
441
|
-
__privateGet(this, _messageStateController).
|
|
432
|
+
__privateGet(this, _messageStateController).completeToolCallInResponse(toolCallId, result);
|
|
442
433
|
this.adapter.sendToolResult(toolCallId, result, this.getMessages());
|
|
443
434
|
};
|
|
444
435
|
sendUserMessage_fn = async function(config) {
|
|
@@ -487,12 +478,16 @@ handleCancel_fn = function() {
|
|
|
487
478
|
__privateMethod(this, _AiChatbotComponent_instances, handleStop_fn).call(this);
|
|
488
479
|
};
|
|
489
480
|
handleCopy_fn = async function(evt) {
|
|
490
|
-
const
|
|
491
|
-
|
|
481
|
+
const responseId = evt.detail.messageId;
|
|
482
|
+
const responseItem = __privateGet(this, _AiChatbotComponent_instances, messageItems_get).find((item) => item.type === "assistant" && item.data.id === responseId);
|
|
483
|
+
if (!responseItem || responseItem.type !== "assistant") {
|
|
492
484
|
return;
|
|
493
485
|
}
|
|
486
|
+
const textContent = responseItem.data.children.filter(
|
|
487
|
+
(c) => c.type === "text"
|
|
488
|
+
).map((c) => c.content).join("\n\n");
|
|
494
489
|
try {
|
|
495
|
-
await navigator.clipboard.writeText(
|
|
490
|
+
await navigator.clipboard.writeText(textContent);
|
|
496
491
|
} catch {
|
|
497
492
|
}
|
|
498
493
|
};
|
|
@@ -500,25 +495,14 @@ handleRefresh_fn = function(evt) {
|
|
|
500
495
|
if (!this.adapter) {
|
|
501
496
|
return;
|
|
502
497
|
}
|
|
503
|
-
const
|
|
504
|
-
const
|
|
505
|
-
(item) => item.type === "
|
|
498
|
+
const responseId = evt.detail.messageId;
|
|
499
|
+
const responseIndex = __privateGet(this, _AiChatbotComponent_instances, messageItems_get).findIndex(
|
|
500
|
+
(item) => item.type === "assistant" && item.data.id === responseId
|
|
506
501
|
);
|
|
507
|
-
if (
|
|
508
|
-
return;
|
|
509
|
-
}
|
|
510
|
-
let userMessageIndex = -1;
|
|
511
|
-
for (let i = messageItemIndex - 1; i >= 0; i--) {
|
|
512
|
-
const item = __privateGet(this, _AiChatbotComponent_instances, messageItems_get)[i];
|
|
513
|
-
if (item.type === "message" && item.data.role === "user") {
|
|
514
|
-
userMessageIndex = i;
|
|
515
|
-
break;
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
if (userMessageIndex === -1) {
|
|
502
|
+
if (responseIndex === -1) {
|
|
519
503
|
return;
|
|
520
504
|
}
|
|
521
|
-
__privateGet(this, _messageStateController).
|
|
505
|
+
__privateGet(this, _messageStateController).removeMessageItemsFrom(responseIndex);
|
|
522
506
|
this.adapter.sendMessage(this.getMessages());
|
|
523
507
|
};
|
|
524
508
|
handleThumbsUp_fn = function(evt) {
|
|
@@ -774,6 +758,9 @@ __decorateClass([
|
|
|
774
758
|
__decorateClass([
|
|
775
759
|
property({ attribute: "voice-input" })
|
|
776
760
|
], AiChatbotComponent.prototype, "voiceInput", 2);
|
|
761
|
+
__decorateClass([
|
|
762
|
+
property({ attribute: "debug-command" })
|
|
763
|
+
], AiChatbotComponent.prototype, "debugCommand", 2);
|
|
777
764
|
__decorateClass([
|
|
778
765
|
property()
|
|
779
766
|
], AiChatbotComponent.prototype, "placeholder", 2);
|
|
@@ -807,6 +794,9 @@ __decorateClass([
|
|
|
807
794
|
__decorateClass([
|
|
808
795
|
property({ type: Boolean, attribute: "debug-mode" })
|
|
809
796
|
], AiChatbotComponent.prototype, "debugMode", 2);
|
|
797
|
+
__decorateClass([
|
|
798
|
+
property({ attribute: "disclaimer-text" })
|
|
799
|
+
], AiChatbotComponent.prototype, "disclaimerText", 2);
|
|
810
800
|
AiChatbotComponent = __decorateClass([
|
|
811
801
|
customElement(AiChatbotComponentTagName)
|
|
812
802
|
], AiChatbotComponent);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const styles = '/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/* prettier-ignore */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n:host {\n display: block;\n width: 100%;\n height: 100%;\n}\n\nforge-ai-chat-interface::part(messages) {\n overflow: hidden;\n}\nforge-ai-chat-interface forge-ai-message-thread {\n min-height: 0;\n}\n\n.session-files {\n display: flex;\n flex-direction: column;\n gap: var(--forge-spacing-xsmall, 8px);\n min-width: 0;\n}\n.session-files .session-files-header {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-label1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-label1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, 0.75)));\n font-weight: var(--forge-typography-label1-font-weight, 400);\n line-height: var(--forge-typography-label1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));\n letter-spacing: var(--forge-typography-label1-letter-spacing, 0.0357142857em);\n text-transform: var(--forge-typography-label1-text-transform, inherit);\n text-decoration: var(--forge-typography-label1-text-decoration, inherit);\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n.session-files .session-files-list::-webkit-scrollbar {\n height: var(--forge-scrollbar-height, 16px);\n width: var(--forge-scrollbar-width, 16px);\n}\n.session-files .session-files-list::-webkit-scrollbar-track {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.session-files .session-files-list::-webkit-scrollbar-track:hover {\n background-color: var(--forge-scrollbar-track-container-hover, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.session-files .session-files-list::-webkit-scrollbar-corner {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.session-files .session-files-list::-webkit-scrollbar-thumb {\n height: var(--forge-scrollbar-thumb-min-height, 32px);\n width: var(--forge-scrollbar-thumb-min-width, 32px);\n border-radius: var(--forge-scrollbar-border-radius, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));\n border-width: var(--forge-scrollbar-border-width, 3px);\n border-style: solid;\n border-color: transparent;\n background-color: var(--forge-scrollbar-thumb-container, var(--forge-theme-surface-container-medium, #c2c2c2));\n background-clip: content-box;\n}\n.session-files .session-files-list::-webkit-scrollbar-thumb:hover {\n background-color: var(--forge-scrollbar-thumb-container-hover, var(--forge-theme-surface-container-high, #9e9e9e));\n}\n.session-files .session-files-list {\n display: flex;\n gap: var(--forge-spacing-small, 12px);\n overflow-x: auto;\n padding-block-end: var(--forge-spacing-xsmall, 8px);\n}';
|
|
1
|
+
const styles = '/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/* prettier-ignore */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n:host {\n display: block;\n width: 100%;\n height: 100%;\n}\n\nforge-ai-chat-interface::part(messages) {\n overflow: hidden;\n}\nforge-ai-chat-interface forge-ai-message-thread {\n min-height: 0;\n}\n\n.session-files {\n display: flex;\n flex-direction: column;\n gap: var(--forge-spacing-xsmall, 8px);\n min-width: 0;\n}\n.session-files .session-files-header {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-label1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-label1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, 0.75)));\n font-weight: var(--forge-typography-label1-font-weight, 400);\n line-height: var(--forge-typography-label1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));\n letter-spacing: var(--forge-typography-label1-letter-spacing, 0.0357142857em);\n text-transform: var(--forge-typography-label1-text-transform, inherit);\n text-decoration: var(--forge-typography-label1-text-decoration, inherit);\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n.session-files .session-files-list::-webkit-scrollbar {\n height: var(--forge-scrollbar-height, 16px);\n width: var(--forge-scrollbar-width, 16px);\n}\n.session-files .session-files-list::-webkit-scrollbar-track {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.session-files .session-files-list::-webkit-scrollbar-track:hover {\n background-color: var(--forge-scrollbar-track-container-hover, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.session-files .session-files-list::-webkit-scrollbar-corner {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.session-files .session-files-list::-webkit-scrollbar-thumb {\n height: var(--forge-scrollbar-thumb-min-height, 32px);\n width: var(--forge-scrollbar-thumb-min-width, 32px);\n border-radius: var(--forge-scrollbar-border-radius, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));\n border-width: var(--forge-scrollbar-border-width, 3px);\n border-style: solid;\n border-color: transparent;\n background-color: var(--forge-scrollbar-thumb-container, var(--forge-theme-surface-container-medium, #c2c2c2));\n background-clip: content-box;\n}\n.session-files .session-files-list::-webkit-scrollbar-thumb:hover {\n background-color: var(--forge-scrollbar-thumb-container-hover, var(--forge-theme-surface-container-high, #9e9e9e));\n}\n.session-files .session-files-list {\n display: flex;\n gap: var(--forge-spacing-small, 12px);\n overflow-x: auto;\n padding-block-end: var(--forge-spacing-xsmall, 8px);\n}\n\n.disclaimer {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-label1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-label1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, 0.75)));\n font-weight: var(--forge-typography-label1-font-weight, 400);\n line-height: var(--forge-typography-label1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));\n letter-spacing: var(--forge-typography-label1-letter-spacing, 0.0357142857em);\n text-transform: var(--forge-typography-label1-text-transform, inherit);\n text-decoration: var(--forge-typography-label1-text-decoration, inherit);\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n text-align: center;\n margin-block-start: var(--forge-spacing-xxsmall, 4px);\n}';
|
|
2
2
|
export {
|
|
3
3
|
styles as default
|
|
4
4
|
};
|
|
@@ -2,7 +2,7 @@ export { AiChatbotComponent, AiChatbotComponentTagName } from './ai-chatbot.js';
|
|
|
2
2
|
export type { ForgeAiChatbotMessageEventData, ForgeAiChatbotToolCallEventData, ForgeAiChatbotErrorEventData, FeatureToggle } from './ai-chatbot.js';
|
|
3
3
|
export { AiChatbotToolCallComponent, AiChatbotToolCallComponentTagName } from './ai-chatbot-tool-call.js';
|
|
4
4
|
export type { Suggestion } from '../ai-suggestions/index.js';
|
|
5
|
-
export { AgentAdapter, type MessageStartEvent, type MessageDeltaEvent, type MessageEndEvent, type ToolCallEvent, type ToolCallStartEvent, type ToolCallArgsEvent, type ToolCallEndEvent, type FileUploadEvent, type FileRemoveEvent, type AdapterState, type ErrorEvent } from './agent-adapter.js';
|
|
5
|
+
export { AgentAdapter, type MessageStartEvent, type MessageDeltaEvent, type MessageEndEvent, type ToolCallEvent, type ToolCallStartEvent, type ToolCallArgsEvent, type ToolCallEndEvent, type FileUploadEvent, type FileRemoveEvent, type AdapterState, type ErrorEvent, type CustomAgentEvent, type RawAgentEvent, type RunStartedAgentEvent, type StepStartedAgentEvent, type StepFinishedAgentEvent, type StateSnapshotAgentEvent, type StateDeltaAgentEvent, type ActivitySnapshotAgentEvent, type ActivityDeltaAgentEvent } from './agent-adapter.js';
|
|
6
6
|
export type { ChatMessage, ToolDefinition, ToolCall, ToolRenderer, IToolRenderer, HandlerContext, FileAttachment, UploadedFileMetadata, FileUploadCallbacks, FileUploadHandler, FileRemoveCallbacks, ForgeAiChatbotFileSelectEventData, ThreadState } from './types.js';
|
|
7
7
|
export * from './ag-ui-adapter.js';
|
|
8
8
|
export * from './http-agent-with-credentials.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReactiveController, ReactiveControllerHost } from 'lit';
|
|
2
|
-
import { ChatMessage, MessageItem, ToolCall, ToolDefinition } from './types.js';
|
|
2
|
+
import { ChatMessage, MessageItem, ToolCall, ToolDefinition, AssistantResponse } from './types.js';
|
|
3
3
|
import { MessageStartEvent, MessageDeltaEvent, MessageEndEvent, ToolCallStartEvent, ToolCallArgsEvent, ToolCallEndEvent, ToolResultEvent } from './agent-adapter.js';
|
|
4
4
|
export interface MessageStateControllerConfig {
|
|
5
5
|
tools: Map<string, ToolDefinition>;
|
|
@@ -19,31 +19,36 @@ export declare class MessageStateController implements ReactiveController {
|
|
|
19
19
|
private _config;
|
|
20
20
|
private _messageItems;
|
|
21
21
|
private _toolCalls;
|
|
22
|
+
private _activeResponse;
|
|
22
23
|
constructor(_host: ReactiveControllerHost, _config: MessageStateControllerConfig);
|
|
23
24
|
hostConnected(): void;
|
|
24
25
|
hostDisconnected(): void;
|
|
25
26
|
updateConfig(config: Partial<MessageStateControllerConfig>): void;
|
|
26
27
|
get messageItems(): MessageItem[];
|
|
27
28
|
getToolCall(id: string): ToolCall | undefined;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
getActiveResponse(): AssistantResponse | null;
|
|
30
|
+
startResponse(): AssistantResponse;
|
|
31
|
+
addTextToResponse(messageId: string, content: string, event?: MessageStartEvent): void;
|
|
32
|
+
appendTextDelta(messageId: string, delta: string, event?: MessageDeltaEvent): void;
|
|
33
|
+
markTextComplete(messageId: string, event?: MessageEndEvent): void;
|
|
34
|
+
addToolCallToResponse(toolCall: ToolCall, event?: ToolCallStartEvent): void;
|
|
35
|
+
updateToolCallInResponse(toolCallId: string, updates: Partial<ToolCall>, eventData?: {
|
|
32
36
|
eventType: 'tool-call-args' | 'tool-call-end';
|
|
33
37
|
event: ToolCallArgsEvent | ToolCallEndEvent;
|
|
34
38
|
}): void;
|
|
35
|
-
|
|
39
|
+
completeToolCallInResponse(toolCallId: string, result: unknown, event?: ToolResultEvent): void;
|
|
40
|
+
completeResponse(): void;
|
|
41
|
+
addMessageItem(item: MessageItem): void;
|
|
42
|
+
addMessage(message: ChatMessage, event?: MessageStartEvent): void;
|
|
36
43
|
getMessage(id: string): ChatMessage | undefined;
|
|
37
44
|
updateMessageStatus(id: string, status: ChatMessage['status'], event?: MessageEndEvent): void;
|
|
38
45
|
removeMessageItem(index: number): void;
|
|
39
46
|
clearMessages(): void;
|
|
47
|
+
removeMessageItemsFrom(index: number): void;
|
|
40
48
|
/**
|
|
41
|
-
* Reconstructs the message hierarchy
|
|
42
|
-
*
|
|
43
|
-
* messageItems stores messages and tool calls in a flat, chronologically ordered list.
|
|
44
|
-
* This method rebuilds the hierarchical structure where each message contains its tool calls.
|
|
49
|
+
* Reconstructs the message hierarchy for API compatibility.
|
|
50
|
+
* Converts assistant responses back to ChatMessage format with tool calls.
|
|
45
51
|
*/
|
|
46
52
|
getMessages(): ChatMessage[];
|
|
47
53
|
setMessages(messages: ChatMessage[]): void;
|
|
48
|
-
completeToolCall(toolCallId: string, result: unknown, event?: ToolResultEvent): void;
|
|
49
54
|
}
|