@tylertech/forge-ai 0.13.1 → 0.13.3

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 (92) hide show
  1. package/custom-elements.json +4030 -2118
  2. package/dist/ai-agent-info/ai-agent-info.d.ts +1 -1
  3. package/dist/ai-agent-info/ai-agent-info.mjs +17 -62
  4. package/dist/ai-agent-info/ai-agent-info.scss.mjs +1 -1
  5. package/dist/ai-assistant-response/ai-assistant-response.scss.mjs +1 -1
  6. package/dist/ai-chat-header/ai-chat-header.d.ts +6 -0
  7. package/dist/ai-chat-header/ai-chat-header.mjs +51 -7
  8. package/dist/ai-chat-header/ai-chat-header.scss.mjs +1 -1
  9. package/dist/ai-chat-interface/ai-chat-interface.scss.mjs +1 -1
  10. package/dist/ai-chatbot/ai-chatbot-base.d.ts +37 -3
  11. package/dist/ai-chatbot/ai-chatbot-base.mjs +83 -24
  12. package/dist/ai-chatbot/ai-chatbot.d.ts +40 -1
  13. package/dist/ai-chatbot/ai-chatbot.mjs +242 -44
  14. package/dist/ai-chatbot/ai-chatbot.scss.mjs +1 -1
  15. package/dist/ai-chatbot/index.d.ts +1 -1
  16. package/dist/ai-chatbot/types.d.ts +39 -0
  17. package/dist/ai-chatbot/utils.d.ts +5 -0
  18. package/dist/ai-chatbot/utils.mjs +28 -0
  19. package/dist/ai-chatbot-launcher/ai-chatbot-launcher.d.ts +26 -0
  20. package/dist/ai-chatbot-launcher/ai-chatbot-launcher.mjs +155 -10
  21. package/dist/ai-chatbot-launcher/ai-chatbot-launcher.scss.mjs +1 -1
  22. package/dist/ai-confirmation-prompt/ai-confirmation-prompt.d.ts +6 -0
  23. package/dist/ai-confirmation-prompt/ai-confirmation-prompt.mjs +64 -19
  24. package/dist/ai-confirmation-prompt/ai-confirmation-prompt.scss.mjs +1 -1
  25. package/dist/ai-context-chip/ai-context-chip.d.ts +45 -0
  26. package/dist/ai-context-chip/ai-context-chip.mjs +169 -0
  27. package/dist/ai-context-chip/ai-context-chip.scss.mjs +4 -0
  28. package/dist/ai-context-chip/index.d.ts +2 -0
  29. package/dist/ai-context-chip/index.mjs +5 -0
  30. package/dist/ai-context-items/ai-context-items.d.ts +20 -0
  31. package/dist/ai-context-items/ai-context-items.mjs +78 -0
  32. package/dist/ai-context-items/ai-context-items.scss.mjs +4 -0
  33. package/dist/ai-context-items/index.d.ts +1 -0
  34. package/dist/ai-context-items/index.mjs +5 -0
  35. package/dist/ai-conversations-panel/ai-conversations-panel.d.ts +86 -0
  36. package/dist/ai-conversations-panel/ai-conversations-panel.mjs +558 -0
  37. package/dist/ai-conversations-panel/ai-conversations-panel.scss.mjs +4 -0
  38. package/dist/ai-conversations-panel/index.d.ts +2 -0
  39. package/dist/ai-conversations-panel/index.mjs +5 -0
  40. package/dist/ai-copy-button/ai-copy-button.d.ts +32 -0
  41. package/dist/ai-copy-button/ai-copy-button.mjs +116 -0
  42. package/dist/ai-copy-button/ai-copy-button.scss.mjs +4 -0
  43. package/dist/ai-copy-button/index.d.ts +1 -0
  44. package/dist/ai-copy-button/index.mjs +5 -0
  45. package/dist/ai-dialog/ai-dialog.scss.mjs +1 -1
  46. package/dist/ai-dropdown-menu/ai-dropdown-menu-item.scss.mjs +1 -1
  47. package/dist/ai-dropdown-menu/ai-dropdown-menu.d.ts +6 -1
  48. package/dist/ai-dropdown-menu/ai-dropdown-menu.mjs +14 -2
  49. package/dist/ai-dropdown-menu/ai-dropdown-menu.scss.mjs +1 -1
  50. package/dist/ai-edit-thread/ai-edit-thread.d.ts +34 -0
  51. package/dist/ai-edit-thread/ai-edit-thread.mjs +130 -0
  52. package/dist/ai-edit-thread/ai-edit-thread.scss.mjs +4 -0
  53. package/dist/ai-edit-thread/index.d.ts +1 -0
  54. package/dist/ai-edit-thread/index.mjs +5 -0
  55. package/dist/ai-message-thread/ai-message-thread.scss.mjs +1 -1
  56. package/dist/ai-modal/ai-modal.d.ts +11 -2
  57. package/dist/ai-modal/ai-modal.mjs +31 -6
  58. package/dist/ai-prompt/ai-prompt.d.ts +7 -1
  59. package/dist/ai-prompt/ai-prompt.mjs +29 -2
  60. package/dist/ai-sidebar/ai-sidebar.d.ts +11 -0
  61. package/dist/ai-sidebar/ai-sidebar.mjs +94 -4
  62. package/dist/ai-sidebar/ai-sidebar.scss.mjs +1 -1
  63. package/dist/ai-sidebar-chat/ai-sidebar-chat.d.ts +1 -0
  64. package/dist/ai-sidebar-chat/ai-sidebar-chat.mjs +5 -0
  65. package/dist/ai-spinner/ai-spinner.d.ts +1 -1
  66. package/dist/ai-spinner/ai-spinner.scss.mjs +1 -1
  67. package/dist/ai-thread-actions-menu/ai-thread-actions-menu.d.ts +44 -0
  68. package/dist/ai-thread-actions-menu/ai-thread-actions-menu.mjs +136 -0
  69. package/dist/ai-thread-actions-menu/ai-thread-actions-menu.scss.mjs +4 -0
  70. package/dist/ai-thread-actions-menu/index.d.ts +1 -0
  71. package/dist/ai-thread-actions-menu/index.mjs +5 -0
  72. package/dist/ai-threads/ai-threads.d.ts +45 -16
  73. package/dist/ai-threads/ai-threads.mjs +256 -98
  74. package/dist/ai-threads/ai-threads.scss.mjs +1 -1
  75. package/dist/ai-threads-search/ai-threads-search.d.ts +81 -0
  76. package/dist/ai-threads-search/ai-threads-search.mjs +414 -0
  77. package/dist/ai-threads-search/ai-threads-search.scss.mjs +4 -0
  78. package/dist/ai-threads-search/index.d.ts +1 -0
  79. package/dist/ai-threads-search/index.mjs +5 -0
  80. package/dist/core/index.d.ts +1 -0
  81. package/dist/core/index.mjs +3 -1
  82. package/dist/core/resize-controller.d.ts +25 -0
  83. package/dist/core/resize-controller.mjs +144 -0
  84. package/dist/index.d.ts +7 -0
  85. package/dist/index.mjs +21 -0
  86. package/dist/utils/delete-thread-controller.d.ts +14 -0
  87. package/dist/utils/delete-thread-controller.mjs +80 -0
  88. package/dist/utils/index.d.ts +3 -0
  89. package/dist/utils/index.mjs +8 -0
  90. package/dist/utils/infinite-scroll-controller.d.ts +33 -0
  91. package/dist/utils/infinite-scroll-controller.mjs +95 -0
  92. package/package.json +14 -14
@@ -1,4 +1,4 @@
1
- const styles = '/* prettier-ignore */\n/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\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: rgba(0, 0, 0, 0);\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, .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, :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/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\n.forge-icon {\n --_icon-color:var(--forge-icon-color, currentColor);\n --_icon-size:var(--forge-icon-size, 1em);\n --_icon-width:var(--forge-icon-width, var(--_icon-size));\n --_icon-height:var(--forge-icon-height, var(--_icon-size));\n --_icon-font-size:var(--forge-icon-font-size, calc(var(--forge-typography-font-size, 1rem) * 1.5));\n}\n\nimg.forge-icon, svg.forge-icon {\n display: inline-block;\n box-sizing: content-box;\n contain: content;\n font-size: var(--_icon-font-size);\n display: inline-block;\n}\n\nimg.forge-icon {\n width: var(--_icon-width);\n height: var(--_icon-height);\n}\n\nsvg {\n width: var(--_icon-width);\n height: var(--_icon-height);\n display: block;\n fill: var(--_icon-color);\n stroke: var(--_icon-color);\n stroke-width: 0;\n}\n\n/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\n.forge-scaffold {\n --_scaffold-height:var(--forge-scaffold-height, 100%);\n --_scaffold-width:var(--forge-scaffold-width, 100%);\n --_scaffold-overflow:var(--forge-scaffold-overflow, initial);\n --_scaffold-body-position:var(--forge-scaffold-body-position, relative);\n}\n\n.forge-scaffold {\n position: relative;\n display: grid;\n grid-template-areas: "left header right" "left body right" "left footer right";\n grid-template-rows: auto 1fr auto;\n grid-template-columns: auto 1fr auto;\n height: var(--_scaffold-height);\n width: var(--_scaffold-width);\n overflow: var(--_scaffold-overflow);\n}\n\n.forge-scaffold--viewport {\n --_scaffold-height:var(--forge-scaffold-height, 100dvh);\n --_scaffold-width:var(--forge-scaffold-width, 100dvw);\n}\n\n.forge-scaffold__left {\n grid-area: left;\n}\n\n.forge-scaffold__right {\n grid-area: right;\n}\n\n.forge-scaffold__header {\n grid-area: header;\n min-width: 0;\n min-height: 0;\n}\n\n.forge-scaffold__body {\n position: var(--_scaffold-body-position);\n grid-area: body;\n min-width: 0;\n min-height: 0;\n overflow: var(--_scaffold-overflow);\n}\n\n.forge-scaffold__body > * {\n overflow: auto;\n}\n\n.forge-scaffold__footer {\n grid-area: footer;\n}\n\n.forge-scaffold__left > *, .forge-scaffold__right > *, .forge-scaffold__header > *, .forge-scaffold__body > *, .forge-scaffold__footer > * {\n min-width: 0;\n min-height: 0;\n}\n\n/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\n.forge-toolbar {\n --_toolbar-background:var(--forge-toolbar-background, var(--forge-theme-surface, #ffffff));\n --_toolbar-height:var(--forge-toolbar-height, 56px);\n --_toolbar-min-height:var(--forge-toolbar-min-height, var(--_toolbar-height));\n --_toolbar-divider-width:var(--forge-toolbar-divider-width, var(--forge-border-thin, 1px));\n --_toolbar-divider-style:var(--forge-toolbar-divider-style, solid);\n --_toolbar-divider-color:var(--forge-toolbar-divider-color, var(--forge-theme-outline, #e0e0e0));\n --_toolbar-shape:var(--forge-toolbar-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_toolbar-start-start-shape:var(--forge-toolbar-start-start-shape, var(--_toolbar-shape));\n --_toolbar-start-end-shape:var(--forge-toolbar-start-end-shape, var(--_toolbar-shape));\n --_toolbar-end-start-shape:var(--forge-toolbar-end-start-shape, 0);\n --_toolbar-end-end-shape:var(--forge-toolbar-end-end-shape, 0);\n --_toolbar-padding:var(--forge-toolbar-padding, var(--forge-spacing-medium, 16px));\n --_toolbar-padding-block:var(--forge-toolbar-padding-block, 0);\n --_toolbar-padding-inline:var(--forge-toolbar-padding-inline, var(--_toolbar-padding));\n --_toolbar-columns:var(--forge-toolbar-columns, auto 1fr auto);\n}\n\n.forge-toolbar {\n display: grid;\n grid-template-columns: var(--_toolbar-columns);\n height: var(--_toolbar-height);\n min-height: var(--_toolbar-min-height);\n box-sizing: border-box;\n padding-inline: 0;\n border-block-end-width: var(--_toolbar-divider-width);\n border-block-end-style: var(--_toolbar-divider-style);\n border-block-end-color: var(--_toolbar-divider-color);\n border-start-start-radius: var(--_toolbar-start-start-shape);\n border-start-end-radius: var(--_toolbar-start-end-shape);\n border-end-start-radius: var(--_toolbar-end-start-shape);\n border-end-end-radius: var(--_toolbar-end-end-shape);\n background: var(--_toolbar-background);\n grid-template-columns: 1fr;\n grid-template-areas: "start";\n}\n\n.forge-toolbar:has(.forge-toolbar__center), .forge-toolbar:has(.forge-toolbar__end) {\n grid-template-columns: auto 1fr auto;\n grid-template-areas: "start center end";\n}\n\n.forge-toolbar:has(.forge-toolbar__end):not(:has(.forge-toolbar__center)) {\n grid-template-columns: 1fr auto;\n grid-template-areas: "start end";\n}\n\n.forge-toolbar--inverted {\n --_toolbar-start-start-shape:var(--forge-toolbar-start-start-shape, 0);\n --_toolbar-start-end-shape:var(--forge-toolbar-start-end-shape, 0);\n --_toolbar-end-start-shape:var(--_toolbar-shape);\n --_toolbar-end-end-shape:var(--_toolbar-shape);\n border-block-end: none;\n border-block-start-width: var(--_toolbar-divider-width);\n border-block-start-style: var(--_toolbar-divider-style);\n border-block-start-color: var(--_toolbar-divider-color);\n}\n\n.forge-toolbar--no-divider {\n border: none;\n}\n\n.forge-toolbar--auto-height {\n --_toolbar-height:var(--forge-toolbar-height, auto);\n}\n\n.forge-toolbar :where(h1, h2, h3, h4, h5, h6) {\n margin: 0;\n}\n\n.forge-toolbar__start, .forge-toolbar__center, .forge-toolbar__end {\n display: flex;\n align-items: center;\n width: 100%;\n box-sizing: border-box;\n}\n\n.forge-toolbar__start {\n grid-area: start;\n}\n\n.forge-toolbar__center {\n justify-content: center;\n min-width: 0;\n grid-area: center;\n}\n\n.forge-toolbar__end {\n justify-content: end;\n grid-area: end;\n}\n\n/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\n.forge-button {\n --_button-primary-color:var(--forge-button-primary-color, var(--forge-theme-primary, #3f51b5));\n --_button-text-color:var(--forge-button-text-color, var(--_button-primary-color));\n --_button-disabled-color:var(--forge-button-disabled-color, var(--forge-theme-surface-container, #e0e0e0));\n --_button-padding:var(--forge-button-padding, var(--forge-spacing-medium, 16px));\n --_button-display:var(--forge-button-display, inline-grid);\n --_button-justify:var(--forge-button-justify, center);\n --_button-shape:var(--forge-button-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_button-height:var(--forge-button-height, 36px);\n --_button-min-width:var(--forge-button-min-width, 64px);\n --_button-spacing:var(--forge-button-spacing, var(--forge-spacing-xsmall, 8px));\n --_button-border-width:var(--forge-button-border-width, medium);\n --_button-border-style:var(--forge-button-border-style, none);\n --_button-border-color:var(--forge-button-border-color, currentColor);\n --_button-shape-start-start-radius:var(--forge-button-shape-start-start-radius, var(--_button-shape));\n --_button-shape-start-end-radius:var(--forge-button-shape-start-end-radius, var(--_button-shape));\n --_button-shape-end-start-radius:var(--forge-button-shape-end-start-radius, var(--_button-shape));\n --_button-shape-end-end-radius:var(--forge-button-shape-end-end-radius, var(--_button-shape));\n --_button-padding-block:var(--forge-button-padding-block, var(--_button-0));\n --_button-padding-inline:var(--forge-button-padding-inline, var(--_button-padding));\n --_button-background:var(--forge-button-background, transparent);\n --_button-hover-background:var(--forge-button-hover-background, var(--_button-background));\n --_button-active-background:var(--forge-button-active-background, var(--_button-background));\n --_button-color:var(--forge-button-color, var(--_button-text-color));\n --_button-icon-size:var(--forge-button-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.125));\n --_button-shadow:var(--forge-button-shadow, none);\n --_button-hover-shadow:var(--forge-button-hover-shadow, none);\n --_button-active-shadow:var(--forge-button-active-shadow, none);\n --_button-cursor:var(--forge-button-cursor, pointer);\n --_button-transition-duration:var(--forge-button-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_button-transition-timing:var(--forge-button-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_button-text-padding-inline:var(--forge-button-text-padding-inline, var(--forge-spacing-xsmall, 8px));\n --_button-outlined-background:var(--forge-button-outlined-background, transparent);\n --_button-outlined-color:var(--forge-button-outlined-color, var(--_button-primary-color));\n --_button-outlined-border-width:var(--forge-button-outlined-border-width, var(--forge-border-thin, 1px));\n --_button-outlined-border-style:var(--forge-button-outlined-border-style, solid);\n --_button-outlined-border-color:var(--forge-button-outlined-border-color, var(--_button-primary-color));\n --_button-tonal-background:var(--forge-button-tonal-background, var(--forge-theme-primary-container, #d1d5ed));\n --_button-tonal-disabled-background:var(--forge-button-tonal-disabled-background, var(--_button-disabled-color));\n --_button-tonal-color:var(--forge-button-tonal-color, var(--forge-theme-on-primary-container, #222c62));\n --_button-tonal-disabled-color:var(--forge-button-tonal-disabled-color, var(--_button-disabled-text-color));\n --_button-filled-background:var(--forge-button-filled-background, var(--_button-primary-color));\n --_button-filled-disabled-background:var(--forge-button-filled-disabled-background, var(--_button-disabled-color));\n --_button-filled-color:var(--forge-button-filled-color, var(--forge-theme-on-primary, #ffffff));\n --_button-filled-disabled-color:var(--forge-button-filled-disabled-color, var(--_button-disabled-text-color));\n --_button-raised-background:var(--forge-button-raised-background, var(--_button-primary-color));\n --_button-raised-disabled-background:var(--forge-button-raised-disabled-background, var(--_button-disabled-color));\n --_button-raised-color:var(--forge-button-raised-color, var(--forge-theme-on-primary, #ffffff));\n --_button-raised-disabled-color:var(--forge-button-raised-disabled-color, var(--_button-disabled-text-color));\n --_button-raised-shadow:var(--forge-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 --_button-raised-hover-shadow:var(--forge-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 --_button-raised-active-shadow:var(--forge-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 --_button-raised-disabled-shadow:var(--forge-button-raised-disabled-shadow, none);\n --_button-link-color:var(--forge-button-link-color, var(--_button-primary-color));\n --_button-link-text-decoration:var(--forge-button-link-text-decoration, underline);\n --_button-link-height:var(--forge-button-link-height, auto);\n --_button-link-padding:var(--forge-button-link-padding, 0);\n --_button-link-line-height:var(--forge-button-link-line-height, normal);\n --_button-link-width:var(--forge-button-link-width, auto);\n --_button-link-hover-text-decoration:var(--forge-button-link-hover-text-decoration, none);\n --_button-link-active-opacity:var(--forge-button-link-active-opacity, 0.65);\n --_button-link-transition-duration:var(--forge-button-link-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_button-link-transition-timing:var(--forge-button-link-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_button-disabled-cursor:var(--forge-button-disabled-cursor, not-allowed);\n --_button-disabled-text-color:var(--forge-button-disabled-text-color, var(--forge-theme-text-low, rgba(0, 0, 0, 0.38)));\n --_button-disabled-background:var(--forge-button-disabled-background, transparent);\n --_button-disabled-border-color:var(--forge-button-disabled-border-color, var(--_button-disabled-color));\n --_button-disabled-shadow:var(--forge-button-disabled-shadow, none);\n --_button-dense-height:var(--forge-button-dense-height, 24px);\n --_button-pill-shape:var(--forge-button-pill-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));\n --_button-pill-padding-inline:var(--forge-button-pill-padding-inline, var(--forge-spacing-small, 12px));\n --_button-focus-indicator-offset:var(--forge-button-focus-indicator-offset, 4px);\n --_button-text-focus-indicator-offset:var(--forge-button-text-focus-indicator-offset, 0px);\n --_button-link-focus-indicator-offset:var(--forge-button-link-focus-indicator-offset, 2px);\n --_button-popover-icon-transition-duration:var(--forge-button-popover-icon-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_button-popover-icon-transition-timing:var(--forge-button-popover-icon-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_button-popover-icon-open-rotation:var(--forge-button-popover-icon-open-rotation, 180deg);\n}\n\n.forge-button {\n display: var(--_button-display);\n position: relative;\n outline: none;\n vertical-align: middle;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-button-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-button-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-button-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-button-font-weight, 500);\n line-height: var(--forge-typography-button-line-height, normal);\n letter-spacing: var(--forge-typography-button-letter-spacing, 0.0714285714em);\n text-transform: var(--forge-typography-button-text-transform, inherit);\n text-decoration: var(--forge-typography-button-text-decoration, inherit);\n position: relative;\n display: var(--_button-display);\n grid-auto-flow: column;\n align-items: center;\n justify-content: var(--_button-justify);\n gap: var(--_button-spacing);\n z-index: 0;\n box-sizing: border-box;\n min-inline-size: var(--_button-min-width);\n height: var(--_button-height);\n inline-size: 100%;\n border-width: var(--_button-border-width);\n border-style: var(--_button-border-style);\n border-color: var(--_button-border-color);\n border-start-start-radius: var(--_button-shape-start-start-radius);\n border-start-end-radius: var(--_button-shape-start-end-radius);\n border-end-start-radius: var(--_button-shape-end-start-radius);\n border-end-end-radius: var(--_button-shape-end-end-radius);\n padding-block: var(--_button-padding-block);\n padding-inline: var(--_button-padding-inline);\n box-shadow: var(--_button-shadow);\n outline: none;\n user-select: none;\n -webkit-appearance: none;\n vertical-align: middle;\n text-decoration: none;\n white-space: nowrap;\n background: var(--_button-background);\n color: var(--_button-color);\n cursor: var(--_button-cursor);\n transition-property: box-shadow, background;\n transition-duration: var(--_button-transition-duration);\n transition-timing-function: var(--_button-transition-timing);\n}\n\n.forge-button::-moz-focus-inner {\n padding: 0;\n border: 0;\n}\n\n.forge-button:hover {\n --_button-shadow:var(--_button-hover-shadow);\n background: var(--_button-hover-background);\n}\n\n.forge-button:active {\n --_button-shadow:var(--_button-active-shadow);\n background: var(--_button-active-background);\n}\n\n.forge-button {\n position: relative;\n inline-size: auto;\n}\n\n.forge-button:not(:disabled):not(.forge-button--link) {\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-button:not(:disabled):not(.forge-button--link)::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-button:not(:disabled):not(.forge-button--link):hover::before {\n background-color: var(--_state-layer-hover-color);\n opacity: var(--_state-layer-hover-opacity);\n}\n\n.forge-button:not(:disabled):not(.forge-button--link):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@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-button:not(:disabled) {\n outline: none;\n}\n\n.forge-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-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-button:not(:disabled) {\n --forge-focus-indicator-color: var(--_button-primary-color);\n}\n\n.forge-button:disabled {\n cursor: var(--_button-disabled-cursor);\n --_button-background:var(--_button-disabled-background);\n --_button-color:var(--_button-disabled-text-color);\n --_button-shadow:var(--_button-disabled-shadow);\n pointer-events: none;\n pointer-events: initial;\n}\n\n.forge-button:where(:not(.forge-button--outlined, .forge-button--tonal, .forge-button--filled, .forge-button--raised, .forge-button--link)), .forge-button--text {\n --_button-padding-inline:var(--_button-text-padding-inline);\n}\n\n.forge-button--outlined {\n --_button-background:var(--_button-outlined-background);\n --_button-color:var(--_button-outlined-color);\n --_button-border-width:var(--_button-outlined-border-width);\n --_button-border-style:var(--_button-outlined-border-style);\n --_button-border-color:var(--_button-outlined-border-color);\n}\n\n.forge-button--outlined:disabled {\n --_button-border-color:var(--_button-disabled-border-color);\n}\n\n.forge-button--tonal {\n --_button-background:var(--_button-tonal-background);\n --_button-color:var(--_button-tonal-color);\n}\n\n.forge-button--tonal:disabled {\n --_button-background:var(--_button-tonal-disabled-background);\n --_button-color:var(--_button-tonal-disabled-color);\n}\n\n.forge-button--filled, .forge-button--raised {\n --_button-background:var(--_button-filled-background);\n --_button-color:var(--_button-filled-color);\n --forge-state-layer-color: var(--_button-filled-color);\n}\n\n.forge-button--filled:disabled, .forge-button--raised:disabled {\n --_button-background:var(--_button-filled-disabled-background);\n --_button-color:var(--_button-filled-disabled-color);\n}\n\n.forge-button--raised {\n --_button-background:var(--_button-raised-background);\n --_button-color:var(--_button-raised-color);\n --_button-shadow:var(--_button-raised-shadow);\n}\n\n.forge-button--raised:hover {\n --_button-shadow:var(--_button-raised-hover-shadow);\n}\n\n.forge-button--raised:active {\n --_button-shadow:var(--_button-raised-active-shadow);\n}\n\n.forge-button--raised:disabled {\n --_button-background:var(--_button-raised-disabled-background);\n --_button-color:var(--_button-raised-disabled-color);\n --_button-shadow:var(--_button-raised-disabled-shadow);\n}\n\n.forge-button--link {\n --_button-color:var(--_button-link-color);\n --_button-height:var(--_button-link-height);\n --_button-padding:var(--_button-link-padding);\n --_button-focus-indicator-offset:var(--_button-link-focus-indicator-offset);\n text-decoration: var(--_button-link-text-decoration);\n line-height: var(--_button-link-line-height);\n transition: opacity var(--_button-link-transition-duration) var(--_button-link-transition-timing);\n inline-size: var(--_button-link-width);\n}\n\n.forge-button--link:hover {\n text-decoration: var(--_button-link-hover-text-decoration);\n}\n\n.forge-button--link:active {\n opacity: var(--_button-link-active-opacity);\n}\n\n.forge-button--pill {\n --_button-shape:var(--_button-pill-shape);\n --_button-padding-inline:var(--_button-pill-padding-inline);\n --forge-focus-indicator-shape: var(--_button-pill-shape);\n}\n\n.forge-button {\n --forge-icon-font-size: var(--_button-icon-size);\n}\n\n.forge-button--dense {\n --_button-height:var(--_button-dense-height);\n}\n\n:host {\n display: block;\n}\n\n.ai-icon-button,\n.ai-icon-button > svg {\n fill: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n\n.header {\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: center;\n min-height: 56px;\n padding-inline: var(--forge-spacing-medium, 16px) var(--forge-spacing-xxsmall, 4px);\n}\n\n.start {\n display: flex;\n align-items: center;\n gap: var(--forge-spacing-medium, 16px);\n overflow: visible;\n min-width: 0;\n --_ai-chat-header-icon-shape: var(--forge-ai-chat-header-icon-shape, calc(var(--forge-shape-round, 50%) * var(--forge-shape-factor, 1)));\n}\n.start ::slotted([slot=icon]) {\n border-radius: var(--_ai-chat-header-icon-shape);\n display: block;\n}\n.start .title {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-heading3-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-heading3-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading3-font-size-scale, 1.125)));\n font-weight: var(--forge-typography-heading3-font-weight, 500);\n line-height: var(--forge-typography-heading3-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading3-line-height-scale, 1.375)));\n letter-spacing: var(--forge-typography-heading3-letter-spacing, 0.0083333333em);\n text-transform: var(--forge-typography-heading3-text-transform, inherit);\n text-decoration: var(--forge-typography-heading3-text-decoration, inherit);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: normal;\n}\n.start forge-ai-agent-selector {\n min-width: 0;\n flex: 1;\n}\n\n.end {\n display: flex;\n align-items: center;\n justify-content: end;\n}\n\nforge-ai-dropdown-menu-item > svg[slot=start].forge-icon {\n width: 20px;\n height: 20px;\n}\n\nforge-ai-modal {\n --forge-ai-modal-width: fit-content;\n --forge-ai-modal-height: fit-content;\n}\n\n.forge-scaffold {\n display: flex;\n flex-direction: column;\n height: fit-content;\n width: 600px;\n max-width: 90vw;\n max-height: 80vh;\n}\n\n.forge-scaffold__header,\n.forge-scaffold__footer {\n flex-shrink: 0;\n}\n\n.forge-scaffold__body {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n}\n\n.agent-info-title {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-heading4-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-heading4-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading4-font-size-scale, 1.25)));\n font-weight: var(--forge-typography-heading4-font-weight, 500);\n line-height: var(--forge-typography-heading4-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading4-line-height-scale, 1.5)));\n letter-spacing: var(--forge-typography-heading4-letter-spacing, 0.005em);\n text-transform: var(--forge-typography-heading4-text-transform, inherit);\n text-decoration: var(--forge-typography-heading4-text-decoration, inherit);\n margin: 0;\n margin-inline-start: var(--forge-spacing-medium, 16px);\n}\n\n.agent-info-content {\n padding: var(--forge-spacing-medium, 16px);\n}\n\n.forge-scaffold__footer .forge-toolbar {\n justify-content: flex-end;\n align-items: center;\n padding-inline: var(--forge-spacing-small, 12px);\n}\n\nforge-ai-modal:state(fullscreen) .forge-scaffold {\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n}\nforge-ai-modal:state(fullscreen) .forge-scaffold__body {\n display: flex;\n flex-direction: column;\n}\nforge-ai-modal:state(fullscreen) .agent-info-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n}\nforge-ai-modal:state(fullscreen) forge-ai-agent-info {\n flex: 1;\n display: flex;\n flex-direction: column;\n}';
1
+ const styles = '/* prettier-ignore */\n/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\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: rgba(0, 0, 0, 0);\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, .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, :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/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\n.forge-icon {\n --_icon-color:var(--forge-icon-color, currentColor);\n --_icon-size:var(--forge-icon-size, 1em);\n --_icon-width:var(--forge-icon-width, var(--_icon-size));\n --_icon-height:var(--forge-icon-height, var(--_icon-size));\n --_icon-font-size:var(--forge-icon-font-size, calc(var(--forge-typography-font-size, 1rem) * 1.5));\n}\n\nimg.forge-icon, svg.forge-icon {\n display: inline-block;\n box-sizing: content-box;\n contain: content;\n font-size: var(--_icon-font-size);\n display: inline-block;\n}\n\nimg.forge-icon {\n width: var(--_icon-width);\n height: var(--_icon-height);\n}\n\nsvg {\n width: var(--_icon-width);\n height: var(--_icon-height);\n display: block;\n fill: var(--_icon-color);\n stroke: var(--_icon-color);\n stroke-width: 0;\n}\n\n/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\n.forge-scaffold {\n --_scaffold-height:var(--forge-scaffold-height, 100%);\n --_scaffold-width:var(--forge-scaffold-width, 100%);\n --_scaffold-overflow:var(--forge-scaffold-overflow, initial);\n --_scaffold-body-position:var(--forge-scaffold-body-position, relative);\n}\n\n.forge-scaffold {\n position: relative;\n display: grid;\n grid-template-areas: "left header right" "left body right" "left footer right";\n grid-template-rows: auto 1fr auto;\n grid-template-columns: auto 1fr auto;\n height: var(--_scaffold-height);\n width: var(--_scaffold-width);\n overflow: var(--_scaffold-overflow);\n}\n\n.forge-scaffold--viewport {\n --_scaffold-height:var(--forge-scaffold-height, 100dvh);\n --_scaffold-width:var(--forge-scaffold-width, 100dvw);\n}\n\n.forge-scaffold__left {\n grid-area: left;\n}\n\n.forge-scaffold__right {\n grid-area: right;\n}\n\n.forge-scaffold__header {\n grid-area: header;\n min-width: 0;\n min-height: 0;\n}\n\n.forge-scaffold__body {\n position: var(--_scaffold-body-position);\n grid-area: body;\n min-width: 0;\n min-height: 0;\n overflow: var(--_scaffold-overflow);\n}\n\n.forge-scaffold__body > * {\n overflow: auto;\n}\n\n.forge-scaffold__footer {\n grid-area: footer;\n}\n\n.forge-scaffold__left > *, .forge-scaffold__right > *, .forge-scaffold__header > *, .forge-scaffold__body > *, .forge-scaffold__footer > * {\n min-width: 0;\n min-height: 0;\n}\n\n/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\n.forge-toolbar {\n --_toolbar-background:var(--forge-toolbar-background, var(--forge-theme-surface, #ffffff));\n --_toolbar-height:var(--forge-toolbar-height, 56px);\n --_toolbar-min-height:var(--forge-toolbar-min-height, var(--_toolbar-height));\n --_toolbar-divider-width:var(--forge-toolbar-divider-width, var(--forge-border-thin, 1px));\n --_toolbar-divider-style:var(--forge-toolbar-divider-style, solid);\n --_toolbar-divider-color:var(--forge-toolbar-divider-color, var(--forge-theme-outline, #e0e0e0));\n --_toolbar-shape:var(--forge-toolbar-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_toolbar-start-start-shape:var(--forge-toolbar-start-start-shape, var(--_toolbar-shape));\n --_toolbar-start-end-shape:var(--forge-toolbar-start-end-shape, var(--_toolbar-shape));\n --_toolbar-end-start-shape:var(--forge-toolbar-end-start-shape, 0);\n --_toolbar-end-end-shape:var(--forge-toolbar-end-end-shape, 0);\n --_toolbar-padding:var(--forge-toolbar-padding, var(--forge-spacing-medium, 16px));\n --_toolbar-padding-block:var(--forge-toolbar-padding-block, 0);\n --_toolbar-padding-inline:var(--forge-toolbar-padding-inline, var(--_toolbar-padding));\n --_toolbar-columns:var(--forge-toolbar-columns, auto 1fr auto);\n}\n\n.forge-toolbar {\n display: grid;\n grid-template-columns: var(--_toolbar-columns);\n height: var(--_toolbar-height);\n min-height: var(--_toolbar-min-height);\n box-sizing: border-box;\n padding-inline: 0;\n border-block-end-width: var(--_toolbar-divider-width);\n border-block-end-style: var(--_toolbar-divider-style);\n border-block-end-color: var(--_toolbar-divider-color);\n border-start-start-radius: var(--_toolbar-start-start-shape);\n border-start-end-radius: var(--_toolbar-start-end-shape);\n border-end-start-radius: var(--_toolbar-end-start-shape);\n border-end-end-radius: var(--_toolbar-end-end-shape);\n background: var(--_toolbar-background);\n grid-template-columns: 1fr;\n grid-template-areas: "start";\n}\n\n.forge-toolbar:has(.forge-toolbar__center), .forge-toolbar:has(.forge-toolbar__end) {\n grid-template-columns: auto 1fr auto;\n grid-template-areas: "start center end";\n}\n\n.forge-toolbar:has(.forge-toolbar__end):not(:has(.forge-toolbar__center)) {\n grid-template-columns: 1fr auto;\n grid-template-areas: "start end";\n}\n\n.forge-toolbar--inverted {\n --_toolbar-start-start-shape:var(--forge-toolbar-start-start-shape, 0);\n --_toolbar-start-end-shape:var(--forge-toolbar-start-end-shape, 0);\n --_toolbar-end-start-shape:var(--_toolbar-shape);\n --_toolbar-end-end-shape:var(--_toolbar-shape);\n border-block-end: none;\n border-block-start-width: var(--_toolbar-divider-width);\n border-block-start-style: var(--_toolbar-divider-style);\n border-block-start-color: var(--_toolbar-divider-color);\n}\n\n.forge-toolbar--no-divider {\n border: none;\n}\n\n.forge-toolbar--auto-height {\n --_toolbar-height:var(--forge-toolbar-height, auto);\n}\n\n.forge-toolbar :where(h1, h2, h3, h4, h5, h6) {\n margin: 0;\n}\n\n.forge-toolbar__start, .forge-toolbar__center, .forge-toolbar__end {\n display: flex;\n align-items: center;\n width: 100%;\n box-sizing: border-box;\n}\n\n.forge-toolbar__start {\n grid-area: start;\n}\n\n.forge-toolbar__center {\n justify-content: center;\n min-width: 0;\n grid-area: center;\n}\n\n.forge-toolbar__end {\n justify-content: end;\n grid-area: end;\n}\n\n/**\n * @license\n * Copyright Tyler Technologies, Inc.\n * License: Apache-2.0\n */\n.forge-button {\n --_button-primary-color:var(--forge-button-primary-color, var(--forge-theme-primary, #3f51b5));\n --_button-text-color:var(--forge-button-text-color, var(--_button-primary-color));\n --_button-disabled-color:var(--forge-button-disabled-color, var(--forge-theme-surface-container, #e0e0e0));\n --_button-padding:var(--forge-button-padding, var(--forge-spacing-medium, 16px));\n --_button-display:var(--forge-button-display, inline-grid);\n --_button-justify:var(--forge-button-justify, center);\n --_button-shape:var(--forge-button-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_button-height:var(--forge-button-height, 36px);\n --_button-min-width:var(--forge-button-min-width, 64px);\n --_button-spacing:var(--forge-button-spacing, var(--forge-spacing-xsmall, 8px));\n --_button-border-width:var(--forge-button-border-width, medium);\n --_button-border-style:var(--forge-button-border-style, none);\n --_button-border-color:var(--forge-button-border-color, currentColor);\n --_button-shape-start-start-radius:var(--forge-button-shape-start-start-radius, var(--_button-shape));\n --_button-shape-start-end-radius:var(--forge-button-shape-start-end-radius, var(--_button-shape));\n --_button-shape-end-start-radius:var(--forge-button-shape-end-start-radius, var(--_button-shape));\n --_button-shape-end-end-radius:var(--forge-button-shape-end-end-radius, var(--_button-shape));\n --_button-padding-block:var(--forge-button-padding-block, var(--_button-0));\n --_button-padding-inline:var(--forge-button-padding-inline, var(--_button-padding));\n --_button-background:var(--forge-button-background, transparent);\n --_button-hover-background:var(--forge-button-hover-background, var(--_button-background));\n --_button-active-background:var(--forge-button-active-background, var(--_button-background));\n --_button-color:var(--forge-button-color, var(--_button-text-color));\n --_button-icon-size:var(--forge-button-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.125));\n --_button-shadow:var(--forge-button-shadow, none);\n --_button-hover-shadow:var(--forge-button-hover-shadow, none);\n --_button-active-shadow:var(--forge-button-active-shadow, none);\n --_button-cursor:var(--forge-button-cursor, pointer);\n --_button-transition-duration:var(--forge-button-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_button-transition-timing:var(--forge-button-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_button-text-padding-inline:var(--forge-button-text-padding-inline, var(--forge-spacing-xsmall, 8px));\n --_button-outlined-background:var(--forge-button-outlined-background, transparent);\n --_button-outlined-color:var(--forge-button-outlined-color, var(--_button-primary-color));\n --_button-outlined-border-width:var(--forge-button-outlined-border-width, var(--forge-border-thin, 1px));\n --_button-outlined-border-style:var(--forge-button-outlined-border-style, solid);\n --_button-outlined-border-color:var(--forge-button-outlined-border-color, var(--_button-primary-color));\n --_button-tonal-background:var(--forge-button-tonal-background, var(--forge-theme-primary-container, #d1d5ed));\n --_button-tonal-disabled-background:var(--forge-button-tonal-disabled-background, var(--_button-disabled-color));\n --_button-tonal-color:var(--forge-button-tonal-color, var(--forge-theme-on-primary-container, #222c62));\n --_button-tonal-disabled-color:var(--forge-button-tonal-disabled-color, var(--_button-disabled-text-color));\n --_button-filled-background:var(--forge-button-filled-background, var(--_button-primary-color));\n --_button-filled-disabled-background:var(--forge-button-filled-disabled-background, var(--_button-disabled-color));\n --_button-filled-color:var(--forge-button-filled-color, var(--forge-theme-on-primary, #ffffff));\n --_button-filled-disabled-color:var(--forge-button-filled-disabled-color, var(--_button-disabled-text-color));\n --_button-raised-background:var(--forge-button-raised-background, var(--_button-primary-color));\n --_button-raised-disabled-background:var(--forge-button-raised-disabled-background, var(--_button-disabled-color));\n --_button-raised-color:var(--forge-button-raised-color, var(--forge-theme-on-primary, #ffffff));\n --_button-raised-disabled-color:var(--forge-button-raised-disabled-color, var(--_button-disabled-text-color));\n --_button-raised-shadow:var(--forge-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 --_button-raised-hover-shadow:var(--forge-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 --_button-raised-active-shadow:var(--forge-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 --_button-raised-disabled-shadow:var(--forge-button-raised-disabled-shadow, none);\n --_button-link-color:var(--forge-button-link-color, var(--_button-primary-color));\n --_button-link-text-decoration:var(--forge-button-link-text-decoration, underline);\n --_button-link-height:var(--forge-button-link-height, auto);\n --_button-link-padding:var(--forge-button-link-padding, 0);\n --_button-link-line-height:var(--forge-button-link-line-height, normal);\n --_button-link-width:var(--forge-button-link-width, auto);\n --_button-link-hover-text-decoration:var(--forge-button-link-hover-text-decoration, none);\n --_button-link-active-opacity:var(--forge-button-link-active-opacity, 0.65);\n --_button-link-transition-duration:var(--forge-button-link-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_button-link-transition-timing:var(--forge-button-link-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_button-disabled-cursor:var(--forge-button-disabled-cursor, not-allowed);\n --_button-disabled-text-color:var(--forge-button-disabled-text-color, var(--forge-theme-text-low, rgba(0, 0, 0, 0.38)));\n --_button-disabled-background:var(--forge-button-disabled-background, transparent);\n --_button-disabled-border-color:var(--forge-button-disabled-border-color, var(--_button-disabled-color));\n --_button-disabled-shadow:var(--forge-button-disabled-shadow, none);\n --_button-dense-height:var(--forge-button-dense-height, 24px);\n --_button-pill-shape:var(--forge-button-pill-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));\n --_button-pill-padding-inline:var(--forge-button-pill-padding-inline, var(--forge-spacing-small, 12px));\n --_button-focus-indicator-offset:var(--forge-button-focus-indicator-offset, 4px);\n --_button-text-focus-indicator-offset:var(--forge-button-text-focus-indicator-offset, 0px);\n --_button-link-focus-indicator-offset:var(--forge-button-link-focus-indicator-offset, 2px);\n --_button-popover-icon-transition-duration:var(--forge-button-popover-icon-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_button-popover-icon-transition-timing:var(--forge-button-popover-icon-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_button-popover-icon-open-rotation:var(--forge-button-popover-icon-open-rotation, 180deg);\n}\n\n.forge-button {\n display: var(--_button-display);\n position: relative;\n outline: none;\n vertical-align: middle;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-button-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-button-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-button-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-button-font-weight, 500);\n line-height: var(--forge-typography-button-line-height, normal);\n letter-spacing: var(--forge-typography-button-letter-spacing, 0.0714285714em);\n text-transform: var(--forge-typography-button-text-transform, inherit);\n text-decoration: var(--forge-typography-button-text-decoration, inherit);\n position: relative;\n display: var(--_button-display);\n grid-auto-flow: column;\n align-items: center;\n justify-content: var(--_button-justify);\n gap: var(--_button-spacing);\n z-index: 0;\n box-sizing: border-box;\n min-inline-size: var(--_button-min-width);\n height: var(--_button-height);\n inline-size: 100%;\n border-width: var(--_button-border-width);\n border-style: var(--_button-border-style);\n border-color: var(--_button-border-color);\n border-start-start-radius: var(--_button-shape-start-start-radius);\n border-start-end-radius: var(--_button-shape-start-end-radius);\n border-end-start-radius: var(--_button-shape-end-start-radius);\n border-end-end-radius: var(--_button-shape-end-end-radius);\n padding-block: var(--_button-padding-block);\n padding-inline: var(--_button-padding-inline);\n box-shadow: var(--_button-shadow);\n outline: none;\n user-select: none;\n -webkit-appearance: none;\n vertical-align: middle;\n text-decoration: none;\n white-space: nowrap;\n background: var(--_button-background);\n color: var(--_button-color);\n cursor: var(--_button-cursor);\n transition-property: box-shadow, background;\n transition-duration: var(--_button-transition-duration);\n transition-timing-function: var(--_button-transition-timing);\n}\n\n.forge-button::-moz-focus-inner {\n padding: 0;\n border: 0;\n}\n\n.forge-button:hover {\n --_button-shadow:var(--_button-hover-shadow);\n background: var(--_button-hover-background);\n}\n\n.forge-button:active {\n --_button-shadow:var(--_button-active-shadow);\n background: var(--_button-active-background);\n}\n\n.forge-button {\n position: relative;\n inline-size: auto;\n}\n\n.forge-button:not(:disabled):not(.forge-button--link) {\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-button:not(:disabled):not(.forge-button--link)::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-button:not(:disabled):not(.forge-button--link):hover::before {\n background-color: var(--_state-layer-hover-color);\n opacity: var(--_state-layer-hover-opacity);\n}\n\n.forge-button:not(:disabled):not(.forge-button--link):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@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-button:not(:disabled) {\n outline: none;\n}\n\n.forge-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-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-button:not(:disabled) {\n --forge-focus-indicator-color: var(--_button-primary-color);\n}\n\n.forge-button:disabled {\n cursor: var(--_button-disabled-cursor);\n --_button-background:var(--_button-disabled-background);\n --_button-color:var(--_button-disabled-text-color);\n --_button-shadow:var(--_button-disabled-shadow);\n pointer-events: none;\n pointer-events: initial;\n}\n\n.forge-button:where(:not(.forge-button--outlined, .forge-button--tonal, .forge-button--filled, .forge-button--raised, .forge-button--link)), .forge-button--text {\n --_button-padding-inline:var(--_button-text-padding-inline);\n}\n\n.forge-button--outlined {\n --_button-background:var(--_button-outlined-background);\n --_button-color:var(--_button-outlined-color);\n --_button-border-width:var(--_button-outlined-border-width);\n --_button-border-style:var(--_button-outlined-border-style);\n --_button-border-color:var(--_button-outlined-border-color);\n}\n\n.forge-button--outlined:disabled {\n --_button-border-color:var(--_button-disabled-border-color);\n}\n\n.forge-button--tonal {\n --_button-background:var(--_button-tonal-background);\n --_button-color:var(--_button-tonal-color);\n}\n\n.forge-button--tonal:disabled {\n --_button-background:var(--_button-tonal-disabled-background);\n --_button-color:var(--_button-tonal-disabled-color);\n}\n\n.forge-button--filled, .forge-button--raised {\n --_button-background:var(--_button-filled-background);\n --_button-color:var(--_button-filled-color);\n --forge-state-layer-color: var(--_button-filled-color);\n}\n\n.forge-button--filled:disabled, .forge-button--raised:disabled {\n --_button-background:var(--_button-filled-disabled-background);\n --_button-color:var(--_button-filled-disabled-color);\n}\n\n.forge-button--raised {\n --_button-background:var(--_button-raised-background);\n --_button-color:var(--_button-raised-color);\n --_button-shadow:var(--_button-raised-shadow);\n}\n\n.forge-button--raised:hover {\n --_button-shadow:var(--_button-raised-hover-shadow);\n}\n\n.forge-button--raised:active {\n --_button-shadow:var(--_button-raised-active-shadow);\n}\n\n.forge-button--raised:disabled {\n --_button-background:var(--_button-raised-disabled-background);\n --_button-color:var(--_button-raised-disabled-color);\n --_button-shadow:var(--_button-raised-disabled-shadow);\n}\n\n.forge-button--link {\n --_button-color:var(--_button-link-color);\n --_button-height:var(--_button-link-height);\n --_button-padding:var(--_button-link-padding);\n --_button-focus-indicator-offset:var(--_button-link-focus-indicator-offset);\n text-decoration: var(--_button-link-text-decoration);\n line-height: var(--_button-link-line-height);\n transition: opacity var(--_button-link-transition-duration) var(--_button-link-transition-timing);\n inline-size: var(--_button-link-width);\n}\n\n.forge-button--link:hover {\n text-decoration: var(--_button-link-hover-text-decoration);\n}\n\n.forge-button--link:active {\n opacity: var(--_button-link-active-opacity);\n}\n\n.forge-button--pill {\n --_button-shape:var(--_button-pill-shape);\n --_button-padding-inline:var(--_button-pill-padding-inline);\n --forge-focus-indicator-shape: var(--_button-pill-shape);\n}\n\n.forge-button {\n --forge-icon-font-size: var(--_button-icon-size);\n}\n\n.forge-button--dense {\n --_button-height:var(--_button-dense-height);\n}\n\n:host {\n display: block;\n}\n\n.ai-icon-button,\n.ai-icon-button > svg {\n fill: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n\n.header {\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: center;\n min-height: 56px;\n padding-inline: var(--forge-spacing-medium, 16px) var(--forge-spacing-xsmall, 8px);\n}\n\n.start {\n display: flex;\n align-items: center;\n gap: var(--forge-spacing-medium, 16px);\n overflow: visible;\n min-width: 0;\n --_ai-chat-header-icon-shape: var(--forge-ai-chat-header-icon-shape, calc(var(--forge-shape-round, 50%) * var(--forge-shape-factor, 1)));\n}\n.start ::slotted([slot=icon]) {\n border-radius: var(--_ai-chat-header-icon-shape);\n display: block;\n}\n.start .conversations-button {\n margin-inline: calc(var(--forge-spacing-xxsmall, 4px) * -1) calc(var(--forge-spacing-small, 12px) * -1);\n}\n.start .title {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-heading3-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-heading3-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading3-font-size-scale, 1.125)));\n font-weight: var(--forge-typography-heading3-font-weight, 500);\n line-height: var(--forge-typography-heading3-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading3-line-height-scale, 1.375)));\n letter-spacing: var(--forge-typography-heading3-letter-spacing, 0.0083333333em);\n text-transform: var(--forge-typography-heading3-text-transform, inherit);\n text-decoration: var(--forge-typography-heading3-text-decoration, inherit);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: normal;\n}\n.start forge-ai-agent-selector {\n min-width: 0;\n flex: 1;\n}\n\n.end {\n display: flex;\n align-items: center;\n justify-content: end;\n}\n\nforge-ai-dropdown-menu-item > svg[slot=start].forge-icon {\n width: 20px;\n height: 20px;\n}\n\nforge-ai-modal {\n --forge-ai-modal-width: fit-content;\n --forge-ai-modal-height: fit-content;\n}\n\n.forge-scaffold {\n display: flex;\n flex-direction: column;\n height: fit-content;\n width: 600px;\n max-width: 90vw;\n max-height: 80vh;\n}\n\n.forge-scaffold__header,\n.forge-scaffold__footer {\n flex-shrink: 0;\n}\n\n.forge-scaffold__body {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n}\n\n.agent-info-title {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-heading4-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-heading4-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading4-font-size-scale, 1.25)));\n font-weight: var(--forge-typography-heading4-font-weight, 500);\n line-height: var(--forge-typography-heading4-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading4-line-height-scale, 1.5)));\n letter-spacing: var(--forge-typography-heading4-letter-spacing, 0.005em);\n text-transform: var(--forge-typography-heading4-text-transform, inherit);\n text-decoration: var(--forge-typography-heading4-text-decoration, inherit);\n margin: 0;\n margin-inline-start: var(--forge-spacing-medium, 16px);\n}\n\n.agent-info-content {\n padding: var(--forge-spacing-medium, 16px);\n}\n\n.forge-scaffold__footer .forge-toolbar {\n justify-content: flex-end;\n align-items: center;\n padding-inline: var(--forge-spacing-small, 12px);\n}\n\nforge-ai-modal:state(fullscreen) .forge-scaffold {\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n}\nforge-ai-modal:state(fullscreen) .forge-scaffold__body {\n display: flex;\n flex-direction: column;\n}\nforge-ai-modal:state(fullscreen) .agent-info-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n}\nforge-ai-modal:state(fullscreen) forge-ai-agent-info {\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.close-button {\n margin-inline-end: var(--forge-spacing-xsmall, 8px);\n}';
2
2
  export {
3
3
  styles as default
4
4
  };
@@ -1,4 +1,4 @@
1
- const styles = '/* prettier-ignore */\n:host {\n display: block;\n height: 100%;\n flex-grow: 1;\n border-radius: inherit;\n --_ai-chat-interface-message-container-padding: 0;\n}\n\n.ai-chat-interface {\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-on-surface, #000000);\n display: flex;\n flex-direction: column;\n height: 100%;\n background: linear-gradient(to top, var(--forge-theme-primary-container-minimum, #f7f8fc), var(--forge-theme-surface, #ffffff));\n border-radius: inherit;\n}\n\n.messages-container::-webkit-scrollbar {\n height: var(--forge-scrollbar-height, 16px);\n width: var(--forge-scrollbar-width, 16px);\n}\n.messages-container::-webkit-scrollbar-track {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.messages-container::-webkit-scrollbar-track:hover {\n background-color: var(--forge-scrollbar-track-container-hover, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.messages-container::-webkit-scrollbar-corner {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.messages-container::-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.messages-container::-webkit-scrollbar-thumb:hover {\n background-color: var(--forge-scrollbar-thumb-container-hover, var(--forge-theme-surface-container-high, #9e9e9e));\n}\n.messages-container {\n padding: var(--forge-ai-chat-interface-message-container-padding, var(--_ai-chat-interface-message-container-padding));\n overflow-y: auto;\n display: grid;\n flex-grow: 1;\n gap: var(--forge-spacing-medium, 16px);\n}\n@media not all and (min-resolution: 0.001dpcm) {\n @supports (-webkit-appearance: none) {\n .messages-container {\n overflow-y: scroll;\n }\n }\n}\n\n.suggestions-container {\n padding-inline: var(--forge-spacing-medium, 16px);\n padding-block-start: var(--forge-spacing-medium, 16px);\n}\n\n.attachments-container {\n padding-block-end: var(--forge-spacing-medium, 16px);\n padding: var(--forge-spacing-xsmall, 8px) var(--forge-spacing-medium, 16px) 0;\n}\n\n.prompt-container {\n padding: var(--forge-spacing-medium, 16px);\n}';
1
+ const styles = '/* prettier-ignore */\n:host {\n display: block;\n height: 100%;\n border-radius: inherit;\n overflow: hidden;\n --_ai-chat-interface-message-container-padding: 0;\n}\n\n.ai-chat-interface {\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-on-surface, #000000);\n display: flex;\n flex-direction: column;\n height: 100%;\n background: linear-gradient(to top, var(--forge-theme-primary-container-minimum, #f7f8fc), var(--forge-theme-surface, #ffffff));\n border-radius: inherit;\n overflow: hidden;\n}\n\n.messages-container::-webkit-scrollbar {\n height: var(--forge-scrollbar-height, 16px);\n width: var(--forge-scrollbar-width, 16px);\n}\n.messages-container::-webkit-scrollbar-track {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.messages-container::-webkit-scrollbar-track:hover {\n background-color: var(--forge-scrollbar-track-container-hover, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.messages-container::-webkit-scrollbar-corner {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.messages-container::-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.messages-container::-webkit-scrollbar-thumb:hover {\n background-color: var(--forge-scrollbar-thumb-container-hover, var(--forge-theme-surface-container-high, #9e9e9e));\n}\n.messages-container {\n padding: var(--forge-ai-chat-interface-message-container-padding, var(--_ai-chat-interface-message-container-padding));\n overflow-y: auto;\n display: grid;\n flex-grow: 1;\n gap: var(--forge-spacing-medium, 16px);\n}\n@media not all and (min-resolution: 0.001dpcm) {\n @supports (-webkit-appearance: none) {\n .messages-container {\n overflow-y: scroll;\n }\n }\n}\n\n.suggestions-container {\n padding-inline: var(--forge-spacing-medium, 16px);\n padding-block-start: var(--forge-spacing-medium, 16px);\n}\n\n.attachments-container {\n padding-block-end: var(--forge-spacing-medium, 16px);\n padding: var(--forge-spacing-xsmall, 8px) var(--forge-spacing-medium, 16px) 0;\n}\n\n.prompt-container {\n padding: var(--forge-spacing-medium, 16px);\n}';
2
2
  export {
3
3
  styles as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { nothing, LitElement, PropertyValues, TemplateResult } from 'lit';
1
+ import { LitElement, PropertyValues } from 'lit';
2
2
  import { Ref } from 'lit/directives/ref.js';
3
3
  import { AgentInfo } from '../ai-agent-info';
4
4
  import { ForgeAiChatHeaderAgentChangeEventData } from '../ai-chat-header';
@@ -10,7 +10,7 @@ import { ForgeAiSuggestionsEventData, Suggestion } from '../ai-suggestions';
10
10
  import { ForgeAiVoiceInputResultEvent } from '../ai-voice-input';
11
11
  import { AgentAdapter } from './agent-adapter.js';
12
12
  import { ChatbotCoreController } from '../core/chatbot-core-controller.js';
13
- import { Agent, ChatMessage, HeadingLevel, MessageItem, SlashCommand, ThreadState, ToolCall, ToolDefinition } from './types.js';
13
+ import { Agent, ChatMessage, ContextItem, HeadingLevel, MessageItem, SlashCommand, ThreadState, ToolCall, ToolDefinition } from './types.js';
14
14
  export type FeatureToggle = 'on' | 'off';
15
15
  export declare abstract class AiChatbotBase extends LitElement {
16
16
  protected abstract _messageThreadRef: Ref<AiMessageThreadComponent>;
@@ -29,12 +29,14 @@ export declare abstract class AiChatbotBase extends LitElement {
29
29
  agentInfo?: AgentInfo;
30
30
  agents: Agent[];
31
31
  selectedAgentId?: string;
32
+ contextItems: ContextItem[];
32
33
  protected _coreController: ChatbotCoreController;
33
34
  protected get _isStreaming(): boolean;
34
35
  protected get _isUploading(): boolean;
35
36
  protected get _tools(): Map<string, ToolDefinition>;
36
37
  protected get _messageItems(): MessageItem[];
37
38
  protected get _hasMessages(): boolean;
39
+ protected get _allContextItems(): ContextItem[];
38
40
  connectedCallback(): void;
39
41
  willUpdate(changedProperties: PropertyValues<this>): void;
40
42
  protected _onConnected(): void;
@@ -44,7 +46,14 @@ export declare abstract class AiChatbotBase extends LitElement {
44
46
  protected _handleAgentChange(event: CustomEvent<ForgeAiChatHeaderAgentChangeEventData>): void;
45
47
  protected _handleDebugToggle(): void;
46
48
  protected _handleAttachmentRemove(evt: CustomEvent<ForgeAiAttachmentRemoveEventData>): void;
47
- protected get _sessionFilesTemplate(): TemplateResult | typeof nothing;
49
+ protected _handleContextChipRemove(evt: CustomEvent<{
50
+ id: string;
51
+ item: ContextItem;
52
+ }>): void;
53
+ protected _handlePromptContextRemove(evt: CustomEvent<{
54
+ id: string;
55
+ item: ContextItem;
56
+ }>): void;
48
57
  protected _handleSend(evt: CustomEvent<ForgeAiPromptSendEventData>): Promise<void>;
49
58
  protected _handleStop(): void;
50
59
  protected _handleCancel(): void;
@@ -71,7 +80,32 @@ export declare abstract class AiChatbotBase extends LitElement {
71
80
  protected _handleFileError(evt: CustomEvent<ForgeAiFilePickerErrorEventData>): void;
72
81
  protected _handleSuggestionSelect(evt: CustomEvent<ForgeAiSuggestionsEventData>): Promise<void>;
73
82
  protected _handleVoiceInputResult(evt: CustomEvent<ForgeAiVoiceInputResultEvent>): void;
83
+ /**
84
+ * Clears all messages from the chat.
85
+ *
86
+ * This is a lower-level operation that removes message history without
87
+ * the semantic meaning of "starting a new conversation". For user-facing
88
+ * "new chat" actions, prefer {@link startNewChat} which provides
89
+ * conversation-level cleanup.
90
+ *
91
+ * @returns true if messages were cleared, false if prevented via event.preventDefault()
92
+ * @fires forge-ai-chatbot-clear - Cancelable event fired before clearing
93
+ */
74
94
  clearMessages(): boolean;
95
+ /**
96
+ * Starts a new chat conversation.
97
+ *
98
+ * This clears all messages and resets the conversation to a fresh state.
99
+ * Use this when the user explicitly wants to begin a new conversation.
100
+ *
101
+ * Contrast with {@link clearMessages}, which fires events and can be prevented.
102
+ * This method does not fire events - it's meant for programmatic use.
103
+ * For user-initiated actions, use event handlers that fire events before calling this.
104
+ *
105
+ * Subclasses may override this to add conversation-specific cleanup like
106
+ * resetting thread IDs or closing panels.
107
+ */
108
+ startNewChat(): void;
75
109
  getMessages(): ChatMessage[];
76
110
  setMessages(messages: ChatMessage[]): void;
77
111
  sendMessage(content: string, files?: File[]): Promise<void>;
@@ -1,7 +1,7 @@
1
- import { LitElement, nothing, html } from "lit";
1
+ import { LitElement } from "lit";
2
2
  import { property } from "lit/decorators.js";
3
3
  import { ChatbotCoreController } from "../core/chatbot-core-controller.mjs";
4
- import { generateId, downloadFile } from "./utils.mjs";
4
+ import { fileAttachmentsToContextItems, generateId, downloadFile } from "./utils.mjs";
5
5
  var __defProp = Object.defineProperty;
6
6
  var __decorateClass = (decorators, target, key, kind) => {
7
7
  var result = void 0;
@@ -24,6 +24,7 @@ class AiChatbotBase extends LitElement {
24
24
  this.disclaimerText = "AI can make mistakes. Always verify responses.";
25
25
  this.debugCommand = "on";
26
26
  this.agents = [];
27
+ this.contextItems = [];
27
28
  }
28
29
  get _isStreaming() {
29
30
  return this._coreController?.isStreaming ?? false;
@@ -40,6 +41,15 @@ class AiChatbotBase extends LitElement {
40
41
  get _hasMessages() {
41
42
  return this._coreController?.hasMessages ?? false;
42
43
  }
44
+ get _allContextItems() {
45
+ return [
46
+ ...this.contextItems,
47
+ ...fileAttachmentsToContextItems(
48
+ this._coreController?.completedAttachments ?? [],
49
+ this._coreController?.pendingAttachments ?? []
50
+ )
51
+ ];
52
+ }
43
53
  connectedCallback() {
44
54
  super.connectedCallback();
45
55
  this._coreController = new ChatbotCoreController(this, {
@@ -138,29 +148,48 @@ class AiChatbotBase extends LitElement {
138
148
  this._coreController.removeCompletedAttachment(completedAttachment.id);
139
149
  }
140
150
  }
141
- get _sessionFilesTemplate() {
142
- const completed = this._coreController?.completedAttachments ?? [];
143
- const uploading = this._coreController?.pendingAttachments ?? [];
144
- const allFiles = [...uploading, ...completed];
145
- if (allFiles.length === 0) {
146
- return nothing;
151
+ _handleContextChipRemove(evt) {
152
+ const { id, item } = evt.detail;
153
+ const hostEvent = this._dispatchHostEvent({
154
+ type: "forge-ai-chatbot-context-remove",
155
+ detail: { id, item },
156
+ cancelable: true
157
+ });
158
+ if (!hostEvent.defaultPrevented) {
159
+ this.contextItems = this.contextItems.filter((i) => i.id !== id);
147
160
  }
148
- return html`
149
- <div class="session-files-header">Session Files (${allFiles.length})</div>
150
- <div class="session-files-list">
151
- ${allFiles.map(
152
- (attachment) => html`
153
- <forge-ai-attachment
154
- .filename=${attachment.filename}
155
- .size=${attachment.size}
156
- ?uploading=${attachment.uploading ?? false}
157
- removable
158
- @forge-ai-attachment-remove=${this._handleAttachmentRemove}>
159
- </forge-ai-attachment>
160
- `
161
- )}
162
- </div>
163
- `;
161
+ }
162
+ _handlePromptContextRemove(evt) {
163
+ const { id, item } = evt.detail;
164
+ if (item.type === "file") {
165
+ const hostEvent = this._dispatchHostEvent({
166
+ type: "forge-ai-chatbot-context-remove",
167
+ detail: { id, item },
168
+ cancelable: true
169
+ });
170
+ if (hostEvent.defaultPrevented) {
171
+ return;
172
+ }
173
+ const pendingFile = this._coreController?.pendingAttachments.find((a) => a.id === id);
174
+ if (pendingFile) {
175
+ this._handleAttachmentRemove(
176
+ new CustomEvent("forge-ai-attachment-remove", {
177
+ detail: { filename: pendingFile.filename }
178
+ })
179
+ );
180
+ return;
181
+ }
182
+ const completedFile = this._coreController?.completedAttachments.find((a) => a.id === id);
183
+ if (completedFile) {
184
+ this._handleAttachmentRemove(
185
+ new CustomEvent("forge-ai-attachment-remove", {
186
+ detail: { filename: completedFile.filename }
187
+ })
188
+ );
189
+ }
190
+ return;
191
+ }
192
+ this._handleContextChipRemove(evt);
164
193
  }
165
194
  async _handleSend(evt) {
166
195
  const pendingAttachments = [...this._coreController.pendingAttachments];
@@ -307,6 +336,17 @@ class AiChatbotBase extends LitElement {
307
336
  this._promptRef.value.value = transcript;
308
337
  }
309
338
  }
339
+ /**
340
+ * Clears all messages from the chat.
341
+ *
342
+ * This is a lower-level operation that removes message history without
343
+ * the semantic meaning of "starting a new conversation". For user-facing
344
+ * "new chat" actions, prefer {@link startNewChat} which provides
345
+ * conversation-level cleanup.
346
+ *
347
+ * @returns true if messages were cleared, false if prevented via event.preventDefault()
348
+ * @fires forge-ai-chatbot-clear - Cancelable event fired before clearing
349
+ */
310
350
  clearMessages() {
311
351
  const event = this._dispatchHostEvent({ type: "forge-ai-chatbot-clear", cancelable: true });
312
352
  if (event.defaultPrevented) {
@@ -315,6 +355,22 @@ class AiChatbotBase extends LitElement {
315
355
  this._coreController.clearMessages();
316
356
  return true;
317
357
  }
358
+ /**
359
+ * Starts a new chat conversation.
360
+ *
361
+ * This clears all messages and resets the conversation to a fresh state.
362
+ * Use this when the user explicitly wants to begin a new conversation.
363
+ *
364
+ * Contrast with {@link clearMessages}, which fires events and can be prevented.
365
+ * This method does not fire events - it's meant for programmatic use.
366
+ * For user-initiated actions, use event handlers that fire events before calling this.
367
+ *
368
+ * Subclasses may override this to add conversation-specific cleanup like
369
+ * resetting thread IDs or closing panels.
370
+ */
371
+ startNewChat() {
372
+ this._coreController.clearMessages();
373
+ }
318
374
  getMessages() {
319
375
  return this._coreController.getMessages();
320
376
  }
@@ -462,6 +518,9 @@ __decorateClass([
462
518
  __decorateClass([
463
519
  property({ attribute: "selected-agent-id" })
464
520
  ], AiChatbotBase.prototype, "selectedAgentId");
521
+ __decorateClass([
522
+ property({ attribute: false })
523
+ ], AiChatbotBase.prototype, "contextItems");
465
524
  export {
466
525
  AiChatbotBase
467
526
  };
@@ -2,7 +2,7 @@ import { TemplateResult, CSSResult } from 'lit';
2
2
  import { AiMessageThreadComponent } from '../ai-message-thread';
3
3
  import { AiPromptComponent } from '../ai-prompt';
4
4
  import { AiChatbotBase } from './ai-chatbot-base.js';
5
- import { Agent, ChatMessage } from './types.js';
5
+ import { Agent, ChatMessage, ForgeAiChatbotConversationSelectEventData, ForgeAiChatbotConversationSearchEventData, ForgeAiChatbotConversationLoadMoreEventData, ForgeAiChatbotConversationRenameEventData, ForgeAiChatbotConversationDeleteEventData, ForgeAiChatbotContextRemoveEventData, Thread } from './types.js';
6
6
  import { Ref } from 'lit/directives/ref.js';
7
7
  declare global {
8
8
  interface HTMLElementTagNameMap {
@@ -25,6 +25,15 @@ declare global {
25
25
  'forge-ai-chatbot-response-feedback': CustomEvent<ForgeAiChatbotResponseFeedbackEventData>;
26
26
  'forge-ai-chatbot-agent-change': CustomEvent<ForgeAiChatbotAgentChangeEventData>;
27
27
  'forge-ai-chatbot-thread-state-change': CustomEvent<void>;
28
+ 'forge-ai-chatbot-conversations-open': CustomEvent<void>;
29
+ 'forge-ai-chatbot-conversations-close': CustomEvent<void>;
30
+ 'forge-ai-chatbot-conversation-select': CustomEvent<ForgeAiChatbotConversationSelectEventData>;
31
+ 'forge-ai-chatbot-new-chat': CustomEvent<void>;
32
+ 'forge-ai-chatbot-conversation-search': CustomEvent<ForgeAiChatbotConversationSearchEventData>;
33
+ 'forge-ai-chatbot-conversation-load-more': CustomEvent<ForgeAiChatbotConversationLoadMoreEventData>;
34
+ 'forge-ai-chatbot-conversation-rename': CustomEvent<ForgeAiChatbotConversationRenameEventData>;
35
+ 'forge-ai-chatbot-conversation-delete': CustomEvent<ForgeAiChatbotConversationDeleteEventData>;
36
+ 'forge-ai-chatbot-context-remove': CustomEvent<ForgeAiChatbotContextRemoveEventData>;
28
37
  }
29
38
  }
30
39
  export interface ForgeAiChatbotMessageEventData {
@@ -84,6 +93,7 @@ export declare const AiChatbotComponentTagName: keyof HTMLElementTagNameMap;
84
93
  * @property {string} titleText - The title text to display in the header (default: 'AI Assistant')
85
94
  * @property {HeadingLevel} headingLevel - Controls the heading level for the title content (default: 2)
86
95
  * @property {string | null | undefined} disclaimerText - The disclaimer text to display below the prompt. Set to empty string, null, or undefined to hide.
96
+ * @property {boolean} showConversationsButton - Controls conversations button visibility (default: false)
87
97
  * @property {AgentInfo} agentInfo - Agent metadata for info dialog
88
98
  * @property {Agent[]} agents - List of available agents for selector
89
99
  * @property {Suggestion[]} suggestions - Suggestions to display in the empty state
@@ -106,6 +116,14 @@ export declare const AiChatbotComponentTagName: keyof HTMLElementTagNameMap;
106
116
  * @event {CustomEvent<ForgeAiChatbotResponseFeedbackEventData>} forge-ai-chatbot-response-feedback - Fired when user provides feedback on a response (thumbs up/down)
107
117
  * @event {CustomEvent<ForgeAiChatbotAgentChangeEventData>} forge-ai-chatbot-agent-change - Fired when user changes agent from the header
108
118
  * @event {CustomEvent<void>} forge-ai-chatbot-thread-state-change - Fired when there is a change to the thread state (messages, files, selected agent, etc). Use this to capture the latest thread state for persistence.
119
+ * @event {CustomEvent<void>} forge-ai-chatbot-conversations-open - Fired when conversations panel opens
120
+ * @event {CustomEvent<void>} forge-ai-chatbot-conversations-close - Fired when conversations panel closes
121
+ * @event {CustomEvent<ForgeAiChatbotConversationSelectEventData>} forge-ai-chatbot-conversation-select - Fired when user selects a conversation thread
122
+ * @event {CustomEvent<void>} forge-ai-chatbot-new-chat - Fired when user clicks new chat button (cancelable)
123
+ * @event {CustomEvent<ForgeAiChatbotConversationSearchEventData>} forge-ai-chatbot-conversation-search - Fired when search query changes in conversations panel (debounced, cancelable)
124
+ * @event {CustomEvent<ForgeAiChatbotConversationLoadMoreEventData>} forge-ai-chatbot-conversation-load-more - Fired when scrolling near bottom in recent chats or search chats. Query field differentiates contexts.
125
+ * @event {CustomEvent<ForgeAiChatbotConversationRenameEventData>} forge-ai-chatbot-conversation-rename - Fired when user renames a conversation thread. Cancelable - if prevented, call onSuccess() to commit or onError() to revert.
126
+ * @event {CustomEvent<ForgeAiChatbotConversationDeleteEventData>} forge-ai-chatbot-conversation-delete - Fired when user deletes a conversation thread. Cancelable - if prevented, call onSuccess() to commit deletion or onError() to revert. Otherwise optimistically removed.
109
127
  */
110
128
  export declare class AiChatbotComponent extends AiChatbotBase {
111
129
  #private;
@@ -114,11 +132,32 @@ export declare class AiChatbotComponent extends AiChatbotBase {
114
132
  showMinimizeButton: boolean;
115
133
  expanded: boolean;
116
134
  minimizeIcon: 'default' | 'panel';
135
+ showConversationsButton: boolean;
136
+ recentThreads: Thread[];
137
+ conversationsOpen: boolean;
138
+ showConversationRename: boolean;
139
+ showConversationDelete: boolean;
140
+ private _selectedThreadId;
117
141
  protected _messageThreadRef: Ref<AiMessageThreadComponent>;
118
142
  protected _promptRef: Ref<AiPromptComponent>;
119
143
  protected _handleInfo(): void;
120
144
  sendMessage(content: string, files?: File[]): Promise<void>;
121
145
  focus(): void;
146
+ showConversations(): void;
147
+ hideConversations(): void;
148
+ /**
149
+ * Starts a new chat conversation by clearing messages and resetting conversation state.
150
+ *
151
+ * This method:
152
+ * - Clears all messages via the controller
153
+ * - Resets the selected thread ID
154
+ *
155
+ * Does not fire events - meant for programmatic use.
156
+ * For user-initiated actions, the event handler fires the event before calling this.
157
+ */
158
+ startNewChat(): void;
159
+ toggleConversations(): void;
122
160
  render(): TemplateResult;
123
161
  }
124
162
  export type { FeatureToggle } from './ai-chatbot-base.js';
163
+ export type { Thread, ForgeAiChatbotConversationSelectEventData, ForgeAiChatbotConversationSearchEventData, ForgeAiChatbotConversationLoadMoreEventData, ForgeAiChatbotConversationRenameEventData, ForgeAiChatbotConversationDeleteEventData } from './types.js';