@tylertech/forge-ai 0.13.5 → 0.13.7

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 (30) hide show
  1. package/custom-elements.json +141 -52
  2. package/dist/ai-assistant-response/ai-assistant-response.scss.mjs +1 -1
  3. package/dist/ai-chat-header/ai-chat-header.d.ts +2 -0
  4. package/dist/ai-chat-header/ai-chat-header.mjs +1 -1
  5. package/dist/ai-chatbot/ai-chatbot-base.d.ts +1 -0
  6. package/dist/ai-chatbot/ai-chatbot-base.mjs +4 -0
  7. package/dist/ai-chatbot/ai-chatbot.d.ts +5 -1
  8. package/dist/ai-chatbot/ai-chatbot.mjs +8 -8
  9. package/dist/ai-chatbot/ai-chatbot.scss.mjs +1 -1
  10. package/dist/ai-chatbot/index.d.ts +2 -2
  11. package/dist/ai-chatbot/index.mjs +3 -1
  12. package/dist/ai-chatbot/markdown-stream-controller.d.ts +1 -1
  13. package/dist/ai-chatbot/markdown-stream-controller.mjs +1 -1
  14. package/dist/ai-chatbot/utils.d.ts +1 -14
  15. package/dist/ai-chatbot/utils.mjs +2 -24
  16. package/dist/ai-chatbot-launcher/ai-chatbot-launcher.mjs +1 -1
  17. package/dist/ai-embedded-chat/ai-embedded-chat.mjs +1 -3
  18. package/dist/ai-message-thread/ai-message-thread.scss.mjs +1 -1
  19. package/dist/ai-tool-call-indicator/ai-tool-call-indicator.d.ts +2 -1
  20. package/dist/ai-tool-call-indicator/ai-tool-call-indicator.mjs +8 -3
  21. package/dist/ai-tool-call-indicator/ai-tool-call-indicator.scss.mjs +1 -1
  22. package/dist/index.mjs +3 -1
  23. package/dist/tools/ai-data-table/ai-data-table-definition.mjs +1 -3
  24. package/dist/tools/ai-data-table/ai-data-table.mjs +13 -2
  25. package/dist/tools/ai-data-table/ai-data-table.scss.mjs +1 -1
  26. package/dist/utils/index.d.ts +1 -0
  27. package/dist/utils/index.mjs +3 -0
  28. package/dist/utils/markdown.d.ts +34 -0
  29. package/dist/utils/markdown.mjs +45 -0
  30. package/package.json +1 -1
@@ -821,6 +821,12 @@
821
821
  "kind": "class",
822
822
  "description": "",
823
823
  "name": "AiChatHeaderComponent",
824
+ "cssProperties": [
825
+ {
826
+ "description": "The color of the title text. Defaults to `currentColor`.",
827
+ "name": "--forge-ai-chat-header-title-color"
828
+ }
829
+ ],
824
830
  "slots": [
825
831
  {
826
832
  "description": "Slot for custom icon (default: forge-ai-icon)",
@@ -2989,6 +2995,16 @@
2989
2995
  "default": "'on'",
2990
2996
  "attribute": "export-option"
2991
2997
  },
2998
+ {
2999
+ "kind": "field",
3000
+ "name": "clearOption",
3001
+ "type": {
3002
+ "text": "FeatureToggle"
3003
+ },
3004
+ "privacy": "public",
3005
+ "default": "'on'",
3006
+ "attribute": "clear-option"
3007
+ },
2992
3008
  {
2993
3009
  "kind": "field",
2994
3010
  "name": "agentInfo",
@@ -3274,6 +3290,14 @@
3274
3290
  "default": "'on'",
3275
3291
  "fieldName": "exportOption"
3276
3292
  },
3293
+ {
3294
+ "name": "clear-option",
3295
+ "type": {
3296
+ "text": "FeatureToggle"
3297
+ },
3298
+ "default": "'on'",
3299
+ "fieldName": "clearOption"
3300
+ },
3277
3301
  {
3278
3302
  "name": "selected-agent-id",
3279
3303
  "type": {
@@ -3404,6 +3428,10 @@
3404
3428
  {
3405
3429
  "description": "The text color for suggestion buttons. Defaults to `on-tertiary-container`.",
3406
3430
  "name": "--forge-ai-chatbot-suggestion-foreground"
3431
+ },
3432
+ {
3433
+ "description": "The color of the header title text. Defaults to `currentColor`.",
3434
+ "name": "--forge-ai-chatbot-header-title-color"
3407
3435
  }
3408
3436
  ],
3409
3437
  "slots": [
@@ -3520,6 +3548,17 @@
3520
3548
  "default": "false",
3521
3549
  "attribute": "show-conversation-delete"
3522
3550
  },
3551
+ {
3552
+ "kind": "field",
3553
+ "name": "selectedThreadId",
3554
+ "type": {
3555
+ "text": "string | null"
3556
+ },
3557
+ "privacy": "public",
3558
+ "default": "null",
3559
+ "description": "The id of the currently selected conversation thread. Set this to highlight a thread in the conversations panel (e.g. when restoring a conversation loaded from the backend). Updated internally when a thread is selected or a new chat starts.",
3560
+ "attribute": "selected-thread-id"
3561
+ },
3523
3562
  {
3524
3563
  "kind": "method",
3525
3564
  "name": "sendMessage",
@@ -3693,6 +3732,36 @@
3693
3732
  "module": "src/lib/ai-chatbot/ai-chatbot-base.ts"
3694
3733
  }
3695
3734
  },
3735
+ {
3736
+ "kind": "field",
3737
+ "name": "clearOption",
3738
+ "type": {
3739
+ "text": "FeatureToggle"
3740
+ },
3741
+ "privacy": "public",
3742
+ "default": "'on'",
3743
+ "attribute": "clear-option",
3744
+ "description": "Controls the clear-conversation header action. `'on'` (default) shows it when messages exist; `'off'` hides it entirely.",
3745
+ "inheritedFrom": {
3746
+ "name": "AiChatbotBase",
3747
+ "module": "src/lib/ai-chatbot/ai-chatbot-base.ts"
3748
+ }
3749
+ },
3750
+ {
3751
+ "kind": "field",
3752
+ "name": "exportOption",
3753
+ "type": {
3754
+ "text": "FeatureToggle"
3755
+ },
3756
+ "privacy": "public",
3757
+ "default": "'on'",
3758
+ "attribute": "export-option",
3759
+ "description": "Controls the export-conversation header action. `'on'` (default) shows it when messages exist; `'off'` hides it entirely.",
3760
+ "inheritedFrom": {
3761
+ "name": "AiChatbotBase",
3762
+ "module": "src/lib/ai-chatbot/ai-chatbot-base.ts"
3763
+ }
3764
+ },
3696
3765
  {
3697
3766
  "kind": "field",
3698
3767
  "name": "adapter",
@@ -3817,20 +3886,6 @@
3817
3886
  "module": "src/lib/ai-chatbot/ai-chatbot-base.ts"
3818
3887
  }
3819
3888
  },
3820
- {
3821
- "kind": "field",
3822
- "name": "exportOption",
3823
- "type": {
3824
- "text": "FeatureToggle"
3825
- },
3826
- "privacy": "public",
3827
- "default": "'on'",
3828
- "attribute": "export-option",
3829
- "inheritedFrom": {
3830
- "name": "AiChatbotBase",
3831
- "module": "src/lib/ai-chatbot/ai-chatbot-base.ts"
3832
- }
3833
- },
3834
3889
  {
3835
3890
  "kind": "field",
3836
3891
  "name": "selectedAgentId",
@@ -4218,6 +4273,15 @@
4218
4273
  "default": "false",
4219
4274
  "fieldName": "showConversationDelete"
4220
4275
  },
4276
+ {
4277
+ "name": "selected-thread-id",
4278
+ "type": {
4279
+ "text": "string | null"
4280
+ },
4281
+ "default": "null",
4282
+ "description": "The id of the currently selected conversation thread. Set this to highlight a thread in the conversations panel (e.g. when restoring a conversation loaded from the backend). Updated internally when a thread is selected or a new chat starts.",
4283
+ "fieldName": "selectedThreadId"
4284
+ },
4221
4285
  {
4222
4286
  "name": "file-upload",
4223
4287
  "type": {
@@ -4362,6 +4426,18 @@
4362
4426
  "module": "src/lib/ai-chatbot/ai-chatbot-base.ts"
4363
4427
  }
4364
4428
  },
4429
+ {
4430
+ "name": "clear-option",
4431
+ "type": {
4432
+ "text": "FeatureToggle"
4433
+ },
4434
+ "default": "'on'",
4435
+ "fieldName": "clearOption",
4436
+ "inheritedFrom": {
4437
+ "name": "AiChatbotBase",
4438
+ "module": "src/lib/ai-chatbot/ai-chatbot-base.ts"
4439
+ }
4440
+ },
4365
4441
  {
4366
4442
  "name": "selected-agent-id",
4367
4443
  "type": {
@@ -5574,31 +5650,6 @@
5574
5650
  },
5575
5651
  "description": "Generates a unique ID using UUID v4"
5576
5652
  },
5577
- {
5578
- "kind": "function",
5579
- "name": "renderMarkdown",
5580
- "return": {
5581
- "type": {
5582
- "text": "string"
5583
- }
5584
- },
5585
- "parameters": [
5586
- {
5587
- "name": "content",
5588
- "type": {
5589
- "text": "string"
5590
- }
5591
- },
5592
- {
5593
- "name": "{ streaming = true }",
5594
- "default": "{}",
5595
- "type": {
5596
- "text": "RenderMarkdownOptions"
5597
- }
5598
- }
5599
- ],
5600
- "description": "Renders markdown content to sanitized HTML"
5601
- },
5602
5653
  {
5603
5654
  "kind": "function",
5604
5655
  "name": "downloadFile",
@@ -5714,17 +5765,33 @@
5714
5765
  "exports": [
5715
5766
  {
5716
5767
  "kind": "js",
5717
- "name": "generateId",
5768
+ "name": "renderMarkdown",
5718
5769
  "declaration": {
5719
- "name": "generateId",
5720
- "module": "src/lib/ai-chatbot/utils.ts"
5770
+ "name": "renderMarkdown",
5771
+ "module": "../utils/markdown.js"
5721
5772
  }
5722
5773
  },
5723
5774
  {
5724
5775
  "kind": "js",
5725
- "name": "renderMarkdown",
5776
+ "name": "renderInlineMarkdown",
5726
5777
  "declaration": {
5727
- "name": "renderMarkdown",
5778
+ "name": "renderInlineMarkdown",
5779
+ "module": "../utils/markdown.js"
5780
+ }
5781
+ },
5782
+ {
5783
+ "kind": "js",
5784
+ "name": "RenderMarkdownOptions",
5785
+ "declaration": {
5786
+ "name": "RenderMarkdownOptions",
5787
+ "module": "../utils/markdown.js"
5788
+ }
5789
+ },
5790
+ {
5791
+ "kind": "js",
5792
+ "name": "generateId",
5793
+ "declaration": {
5794
+ "name": "generateId",
5728
5795
  "module": "src/lib/ai-chatbot/utils.ts"
5729
5796
  }
5730
5797
  },
@@ -6232,6 +6299,20 @@
6232
6299
  "module": "src/lib/ai-chatbot/ai-chatbot-base.ts"
6233
6300
  }
6234
6301
  },
6302
+ {
6303
+ "kind": "field",
6304
+ "name": "clearOption",
6305
+ "type": {
6306
+ "text": "FeatureToggle"
6307
+ },
6308
+ "privacy": "public",
6309
+ "default": "'on'",
6310
+ "attribute": "clear-option",
6311
+ "inheritedFrom": {
6312
+ "name": "AiChatbotBase",
6313
+ "module": "src/lib/ai-chatbot/ai-chatbot-base.ts"
6314
+ }
6315
+ },
6235
6316
  {
6236
6317
  "kind": "field",
6237
6318
  "name": "contextItems",
@@ -6583,6 +6664,18 @@
6583
6664
  "module": "src/lib/ai-chatbot/ai-chatbot-base.ts"
6584
6665
  }
6585
6666
  },
6667
+ {
6668
+ "name": "clear-option",
6669
+ "type": {
6670
+ "text": "FeatureToggle"
6671
+ },
6672
+ "default": "'on'",
6673
+ "fieldName": "clearOption",
6674
+ "inheritedFrom": {
6675
+ "name": "AiChatbotBase",
6676
+ "module": "src/lib/ai-chatbot/ai-chatbot-base.ts"
6677
+ }
6678
+ },
6586
6679
  {
6587
6680
  "name": "selected-agent-id",
6588
6681
  "type": {
@@ -14326,7 +14419,7 @@
14326
14419
  },
14327
14420
  "AiChatHeaderComponent": {
14328
14421
  "path": "src/lib/ai-chat-header/ai-chat-header.ts",
14329
- "lineNumber": 79
14422
+ "lineNumber": 81
14330
14423
  },
14331
14424
  "AiChatInterfaceComponent": {
14332
14425
  "path": "src/lib/ai-chat-interface/ai-chat-interface.ts",
@@ -14490,7 +14583,7 @@
14490
14583
  },
14491
14584
  "AiChatbotComponent": {
14492
14585
  "path": "src/lib/ai-chatbot/ai-chatbot.ts",
14493
- "lineNumber": 171
14586
+ "lineNumber": 175
14494
14587
  },
14495
14588
  "CreateToolRendererElementConfig": {
14496
14589
  "path": "src/lib/ai-chatbot/create-tool-renderer.ts",
@@ -14684,10 +14777,6 @@
14684
14777
  "path": "src/lib/ai-chatbot/types.ts",
14685
14778
  "lineNumber": 320
14686
14779
  },
14687
- "RenderMarkdownOptions": {
14688
- "path": "src/lib/ai-chatbot/utils.ts",
14689
- "lineNumber": 6
14690
- },
14691
14780
  "LauncherViewState": {
14692
14781
  "path": "src/lib/ai-chatbot-launcher/ai-chatbot-launcher.ts",
14693
14782
  "lineNumber": 30
@@ -15218,11 +15307,11 @@
15218
15307
  },
15219
15308
  "TableData": {
15220
15309
  "path": "src/lib/tools/ai-data-table/ai-data-table.ts",
15221
- "lineNumber": 20
15310
+ "lineNumber": 22
15222
15311
  },
15223
15312
  "DataTableToolElement": {
15224
15313
  "path": "src/lib/tools/ai-data-table/ai-data-table.ts",
15225
- "lineNumber": 36
15314
+ "lineNumber": 38
15226
15315
  },
15227
15316
  "AiPaginator": {
15228
15317
  "path": "src/lib/tools/ai-paginator/ai-paginator.ts",
@@ -1,4 +1,4 @@
1
- const styles = '/**\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/* prettier-ignore */\n:host {\n display: block;\n box-sizing: border-box;\n}\n\n:host(:state(empty)) {\n display: none;\n}\n\n.assistant-response {\n position: relative;\n}\n\n.text-chunk {\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 font-size: var(--forge-ai-markdown-font-size, 0.875rem);\n line-height: var(--forge-ai-markdown-line-height, 1.5rem);\n color: var(--forge-theme-on-surface, #000000);\n overflow-wrap: break-word;\n}\n.text-chunk h1,\n.text-chunk h2,\n.text-chunk h3,\n.text-chunk h4,\n.text-chunk h5,\n.text-chunk h6 {\n margin: 1.75rem 0 var(--forge-spacing-small, 12px);\n}\n.text-chunk strong {\n font-weight: 500;\n}\n.text-chunk a {\n color: var(--forge-theme-primary, #3f51b5);\n}\n.text-chunk hr {\n border: none;\n border-top: 1px solid var(--forge-theme-outline, #e0e0e0);\n}\n.text-chunk code {\n color: var(--forge-theme-on-surface-container-low, #000000);\n background-color: var(--forge-theme-surface-container-low, #ebebeb);\n border-radius: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));\n padding: var(--forge-spacing-xxxsmall, 2px) var(--forge-spacing-xxsmall, 4px);\n font-size: 0.75em;\n}\n.text-chunk pre {\n border: 1px solid var(--forge-theme-outline, #e0e0e0);\n border-radius: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));\n margin-block: var(--forge-spacing-medium, 16px) 0;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n margin: 0;\n}\n.text-chunk pre code {\n display: block;\n padding: var(--forge-spacing-xsmall, 8px) var(--forge-spacing-small, 12px);\n color: var(--forge-theme-on-surface-container-minimum, #000000);\n background: var(--forge-theme-surface-container-minimum, #f5f5f5);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n overflow-x: visible;\n}\n.text-chunk table {\n width: 100%;\n border-spacing: 0;\n background-color: var(--forge-theme-surface, #ffffff);\n border-radius: calc(var(--forge-shape-large, 8px) * var(--forge-shape-factor, 1));\n overflow: hidden;\n margin-block: var(--forge-spacing-medium, 16px);\n}\n.text-chunk table thead {\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n font-weight: bold;\n text-align: left;\n font-size: calc(var(--forge-typography-font-size, 1rem) * 0.75);\n box-sizing: border-box;\n}\n.text-chunk table tr {\n height: 36px;\n height: 32px;\n}\n.text-chunk table tr:nth-child(even) {\n background-color: var(--forge-theme-surface-dim, #fafafa);\n}\n.text-chunk table tr:last-child td {\n border-bottom: none;\n}\n.text-chunk table th,\n.text-chunk table td {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-label1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-label1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, 0.75)));\n font-weight: var(--forge-typography-label1-font-weight, 400);\n line-height: var(--forge-typography-label1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));\n letter-spacing: var(--forge-typography-label1-letter-spacing, 0.0357142857em);\n text-transform: var(--forge-typography-label1-text-transform, inherit);\n text-decoration: var(--forge-typography-label1-text-decoration, inherit);\n padding-block: var(--forge-spacing-xsmall, 8px);\n padding-inline-start: var(--forge-spacing-xsmall, 8px);\n padding-inline-end: var(--forge-spacing-medium, 16px);\n border-bottom-width: 1px;\n border-bottom-style: solid;\n border-bottom-color: var(--forge-theme-outline, #e0e0e0);\n}\n.text-chunk table th {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-label2-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-label2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, 0.8125)));\n font-weight: var(--forge-typography-label2-font-weight, 400);\n line-height: var(--forge-typography-label2-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));\n letter-spacing: var(--forge-typography-label2-letter-spacing, 0.0096153846em);\n text-transform: var(--forge-typography-label2-text-transform, inherit);\n text-decoration: var(--forge-typography-label2-text-decoration, inherit);\n font-weight: 600;\n}\n.text-chunk > p:has(+ ol),\n.text-chunk > p:has(+ ul) {\n margin-block-end: var(--forge-spacing-small, 12px);\n}\n.text-chunk > ul {\n list-style-type: disc;\n padding-inline-start: 1.6875rem;\n}\n.text-chunk > ol {\n padding-inline-start: 1.75rem;\n}\n.text-chunk > ol,\n.text-chunk > ul {\n margin: var(--forge-spacing-xsmall, 8px) 0;\n margin-block-end: var(--forge-spacing-medium, 16px);\n}\n.text-chunk > :first-child {\n margin-block-start: 0;\n}\n.text-chunk > p {\n margin-block-end: var(--forge-spacing-medium, 16px);\n overflow-wrap: anywhere;\n}\n.text-chunk > p:first-child {\n margin-block-start: 0;\n}\n.text-chunk > p:last-child {\n margin-block-end: 0;\n}\n\n.toolbar-container {\n position: absolute;\n bottom: -28px;\n transition: opacity 200ms ease-in-out, transform 200ms ease-in-out;\n display: flex;\n align-items: center;\n gap: var(--forge-spacing-xxsmall, 4px);\n opacity: 0;\n transform: translateY(-8px);\n pointer-events: none;\n z-index: 1;\n left: 0;\n}\n\n.assistant-response[data-complete]:hover .toolbar-container,\n.assistant-response[data-complete] .toolbar-container:focus-within {\n opacity: 1;\n transform: translateY(0);\n pointer-events: auto;\n}\n\n:host(:not(:last-of-type)) .assistant-response[data-complete]::after {\n content: "";\n position: absolute;\n bottom: -40px;\n left: 0;\n right: 0;\n height: 40px;\n}\n\n:host(:last-of-type) .assistant-response[data-complete] .toolbar-container {\n opacity: 1;\n transform: translateY(0);\n pointer-events: auto;\n}\n\n.debug-button {\n color: var(--forge-theme-on-error-container-low, #5f0011);\n --forge-icon-button-focus-indicator-color: var(--forge-theme-error, #b00020);\n --forge-icon-button-tonal-background-color: var(--forge-theme-error-container-low, #f6e0e4);\n}';
1
+ const styles = '/**\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/* prettier-ignore */\n@keyframes fadein {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n:host {\n display: block;\n box-sizing: border-box;\n}\n\n:host(:state(empty)) {\n display: none;\n}\n\n.assistant-response {\n position: relative;\n}\n\n.text-chunk {\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 font-size: var(--forge-ai-markdown-font-size, 0.875rem);\n line-height: var(--forge-ai-markdown-line-height, 1.5rem);\n color: var(--forge-theme-on-surface, #000000);\n overflow-wrap: break-word;\n}\n.text-chunk h1,\n.text-chunk h2,\n.text-chunk h3,\n.text-chunk h4,\n.text-chunk h5,\n.text-chunk h6 {\n margin: 1.75rem 0 var(--forge-spacing-small, 12px);\n}\n.text-chunk strong {\n font-weight: 500;\n}\n.text-chunk a {\n color: var(--forge-theme-primary, #3f51b5);\n}\n.text-chunk hr {\n border: none;\n border-top: 1px solid var(--forge-theme-outline, #e0e0e0);\n}\n.text-chunk code {\n color: var(--forge-theme-on-surface-container-low, #000000);\n background-color: var(--forge-theme-surface-container-low, #ebebeb);\n border-radius: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));\n padding: var(--forge-spacing-xxxsmall, 2px) var(--forge-spacing-xxsmall, 4px);\n font-size: 0.75em;\n}\n.text-chunk pre {\n border: 1px solid var(--forge-theme-outline, #e0e0e0);\n border-radius: calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1));\n margin: 0;\n max-width: 100%;\n overflow-x: auto;\n}\n.text-chunk pre:focus-visible {\n outline: 2px solid var(--forge-theme-primary, #3f51b5);\n outline-offset: 2px;\n}\n.text-chunk pre code {\n display: block;\n padding: var(--forge-spacing-xsmall, 8px) var(--forge-spacing-small, 12px);\n color: var(--forge-theme-on-surface-container-minimum, #000000);\n background: var(--forge-theme-surface-container-minimum, #f5f5f5);\n white-space: pre;\n}\n.text-chunk [data-scroll-region=table] {\n max-width: 100%;\n overflow-x: auto;\n border-radius: calc(var(--forge-shape-large, 8px) * var(--forge-shape-factor, 1));\n margin-block: var(--forge-spacing-medium, 16px);\n}\n.text-chunk [data-scroll-region=table]:focus-visible {\n outline: 2px solid var(--forge-theme-primary, #3f51b5);\n outline-offset: 2px;\n}\n.text-chunk [data-scroll-region=table] table {\n margin-block: 0;\n}\n.text-chunk table {\n width: 100%;\n border-spacing: 0;\n background-color: var(--forge-theme-surface, #ffffff);\n border-radius: calc(var(--forge-shape-large, 8px) * var(--forge-shape-factor, 1));\n overflow: hidden;\n margin-block: var(--forge-spacing-medium, 16px);\n}\n.text-chunk table thead {\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n font-weight: bold;\n text-align: left;\n font-size: calc(var(--forge-typography-font-size, 1rem) * 0.75);\n box-sizing: border-box;\n}\n.text-chunk table tr {\n height: 36px;\n height: 32px;\n}\n.text-chunk table tr:nth-child(even) {\n background-color: var(--forge-theme-surface-dim, #fafafa);\n}\n.text-chunk table tr:last-child td {\n border-bottom: none;\n}\n.text-chunk table th,\n.text-chunk table td {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-label1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-label1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, 0.75)));\n font-weight: var(--forge-typography-label1-font-weight, 400);\n line-height: var(--forge-typography-label1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));\n letter-spacing: var(--forge-typography-label1-letter-spacing, 0.0357142857em);\n text-transform: var(--forge-typography-label1-text-transform, inherit);\n text-decoration: var(--forge-typography-label1-text-decoration, inherit);\n padding-block: var(--forge-spacing-xsmall, 8px);\n padding-inline-start: var(--forge-spacing-xsmall, 8px);\n padding-inline-end: var(--forge-spacing-medium, 16px);\n border-bottom-width: 1px;\n border-bottom-style: solid;\n border-bottom-color: var(--forge-theme-outline, #e0e0e0);\n}\n.text-chunk table th {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-label2-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-label2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, 0.8125)));\n font-weight: var(--forge-typography-label2-font-weight, 400);\n line-height: var(--forge-typography-label2-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));\n letter-spacing: var(--forge-typography-label2-letter-spacing, 0.0096153846em);\n text-transform: var(--forge-typography-label2-text-transform, inherit);\n text-decoration: var(--forge-typography-label2-text-decoration, inherit);\n font-weight: 600;\n}\n.text-chunk > p:has(+ ol),\n.text-chunk > p:has(+ ul) {\n margin-block-end: var(--forge-spacing-small, 12px);\n}\n.text-chunk > ul {\n list-style-type: disc;\n padding-inline-start: 1.6875rem;\n}\n.text-chunk > ol {\n padding-inline-start: 1.75rem;\n}\n.text-chunk > ol,\n.text-chunk > ul {\n margin: var(--forge-spacing-xsmall, 8px) 0;\n margin-block-end: var(--forge-spacing-medium, 16px);\n}\n.text-chunk > :first-child {\n margin-block-start: 0;\n}\n.text-chunk > p {\n margin-block-end: var(--forge-spacing-medium, 16px);\n overflow-wrap: anywhere;\n}\n.text-chunk > p:first-child {\n margin-block-start: 0;\n}\n.text-chunk > p:last-child {\n margin-block-end: 0;\n}\n\n.toolbar-container {\n position: absolute;\n bottom: -28px;\n transition: opacity 200ms ease-in-out, transform 200ms ease-in-out;\n display: flex;\n align-items: center;\n gap: var(--forge-spacing-xxsmall, 4px);\n opacity: 0;\n transform: translateY(-8px);\n pointer-events: none;\n z-index: 1;\n left: 0;\n}\n\n.assistant-response[data-complete]:hover .toolbar-container,\n.assistant-response[data-complete] .toolbar-container:focus-within {\n opacity: 1;\n transform: translateY(0);\n pointer-events: auto;\n}\n\n:host(:not(:last-of-type)) .assistant-response[data-complete]::after {\n content: "";\n position: absolute;\n bottom: -40px;\n left: 0;\n right: 0;\n height: 40px;\n}\n\n:host(:last-of-type) .assistant-response[data-complete] .toolbar-container {\n opacity: 1;\n transform: translateY(0);\n pointer-events: auto;\n}\n\n.debug-button {\n color: var(--forge-theme-on-error-container-low, #5f0011);\n --forge-icon-button-focus-indicator-color: var(--forge-theme-error, #b00020);\n --forge-icon-button-tonal-background-color: var(--forge-theme-error-container-low, #f6e0e4);\n}';
2
2
  export {
3
3
  styles as default
4
4
  };
@@ -47,6 +47,8 @@ export interface AgentInfo {
47
47
  * @property {HeadingLevel} headingLevel - Controls the heading level for the title content (default: 2)
48
48
  * @property {string} titleText - The title text to display in the header (default: 'AI Assistant')
49
49
  *
50
+ * @cssproperty --forge-ai-chat-header-title-color - The color of the title text. Defaults to `currentColor`.
51
+ *
50
52
  * @event forge-ai-chat-header-expand - Fired when the expand button is clicked
51
53
  * @event forge-ai-chat-header-minimize - Fired when the minimize button is clicked
52
54
  * @event forge-ai-chat-header-clear - Fired when the clear chat option is selected
@@ -193,7 +193,7 @@ let AiChatHeaderComponent = class extends LitElement {
193
193
  `
194
194
  )}
195
195
  ${when(
196
- this.agentInfo && (this.exportOption === "enabled" || this.clearOption === "enabled"),
196
+ this.clearOption === "enabled" && (this.agentInfo || this.exportOption === "enabled"),
197
197
  () => html`<forge-ai-dropdown-menu-separator></forge-ai-dropdown-menu-separator>`
198
198
  )}
199
199
  ${when(
@@ -29,6 +29,7 @@ export declare abstract class AiChatbotBase extends LitElement {
29
29
  disclaimerText: string | null | undefined;
30
30
  debugCommand: FeatureToggle;
31
31
  exportOption: FeatureToggle;
32
+ clearOption: FeatureToggle;
32
33
  agentInfo?: AgentInfo;
33
34
  agents: Agent[];
34
35
  selectedAgentId?: string;
@@ -26,6 +26,7 @@ class AiChatbotBase extends LitElement {
26
26
  this.disclaimerText = "AI can make mistakes. Always verify responses.";
27
27
  this.debugCommand = "on";
28
28
  this.exportOption = "on";
29
+ this.clearOption = "on";
29
30
  this.agents = [];
30
31
  this.contextItems = [];
31
32
  }
@@ -501,6 +502,9 @@ __decorateClass([
501
502
  __decorateClass([
502
503
  property({ attribute: "export-option" })
503
504
  ], AiChatbotBase.prototype, "exportOption");
505
+ __decorateClass([
506
+ property({ attribute: "clear-option" })
507
+ ], AiChatbotBase.prototype, "clearOption");
504
508
  __decorateClass([
505
509
  property({ type: Object, attribute: false })
506
510
  ], AiChatbotBase.prototype, "agentInfo");
@@ -97,10 +97,14 @@ export declare const AiChatbotComponentTagName: keyof HTMLElementTagNameMap;
97
97
  * @property {AgentInfo} agentInfo - Agent metadata for info dialog
98
98
  * @property {Agent[]} agents - List of available agents for selector
99
99
  * @property {Suggestion[]} suggestions - Suggestions to display in the empty state
100
+ * @property {FeatureToggle} clearOption - Controls the clear-conversation header action. `'on'` (default) shows it when messages exist; `'off'` hides it entirely.
101
+ * @property {FeatureToggle} exportOption - Controls the export-conversation header action. `'on'` (default) shows it when messages exist; `'off'` hides it entirely.
102
+ * @property {string | null} selectedThreadId - The id of the currently selected conversation thread. Set this to highlight a thread in the conversations panel (e.g. when restoring a conversation loaded from the backend). Updated internally when a thread is selected or a new chat starts.
100
103
  *
101
104
  * @cssproperty --forge-ai-chatbot-icon-color - The fill color for the AI icon. Defaults to `tertiary`.
102
105
  * @cssproperty --forge-ai-chatbot-suggestion-background - The background color for suggestion buttons. Defaults to `tertiary-container`.
103
106
  * @cssproperty --forge-ai-chatbot-suggestion-foreground - The text color for suggestion buttons. Defaults to `on-tertiary-container`.
107
+ * @cssproperty --forge-ai-chatbot-header-title-color - The color of the header title text. Defaults to `currentColor`.
104
108
  *
105
109
  * @event {CustomEvent<void>} forge-ai-chatbot-connected - Fired when adapter connects
106
110
  * @event {CustomEvent<void>} forge-ai-chatbot-disconnected - Fired when adapter disconnects
@@ -137,7 +141,7 @@ export declare class AiChatbotComponent extends AiChatbotBase {
137
141
  conversationsOpen: boolean;
138
142
  showConversationRename: boolean;
139
143
  showConversationDelete: boolean;
140
- private _selectedThreadId;
144
+ selectedThreadId: string | null;
141
145
  protected _messageThreadRef: Ref<AiMessageThreadComponent>;
142
146
  protected _promptRef: Ref<AiPromptComponent>;
143
147
  protected _handleInfo(): void;
@@ -1,5 +1,5 @@
1
1
  import { unsafeCSS, html } from "lit";
2
- import { property, state, customElement } from "lit/decorators.js";
2
+ import { property, customElement } from "lit/decorators.js";
3
3
  import { createRef, ref } from "lit/directives/ref.js";
4
4
  import { when } from "lit/directives/when.js";
5
5
  import { AiChatbotBase } from "./ai-chatbot-base.mjs";
@@ -47,7 +47,7 @@ let AiChatbotComponent = class extends AiChatbotBase {
47
47
  this.conversationsOpen = false;
48
48
  this.showConversationRename = false;
49
49
  this.showConversationDelete = false;
50
- this._selectedThreadId = null;
50
+ this.selectedThreadId = null;
51
51
  __privateAdd(this, _chatInterfaceRef, createRef());
52
52
  this._messageThreadRef = createRef();
53
53
  this._promptRef = createRef();
@@ -147,7 +147,7 @@ let AiChatbotComponent = class extends AiChatbotBase {
147
147
  */
148
148
  startNewChat() {
149
149
  super.startNewChat();
150
- this._selectedThreadId = null;
150
+ this.selectedThreadId = null;
151
151
  }
152
152
  toggleConversations() {
153
153
  if (this.conversationsOpen) {
@@ -174,7 +174,7 @@ let AiChatbotComponent = class extends AiChatbotBase {
174
174
  ?expanded=${this.expanded}
175
175
  ?disable-agent-selector=${this._isStreaming}
176
176
  export-option=${this.exportOption === "off" ? "off" : this._hasMessages ? "enabled" : "off"}
177
- clear-option=${this._hasMessages ? "enabled" : "off"}
177
+ clear-option=${this.clearOption === "off" ? "off" : this._hasMessages ? "enabled" : "off"}
178
178
  .minimizeIcon=${this.minimizeIcon}
179
179
  .agentInfo=${this.agentInfo}
180
180
  .headingLevel=${this.headingLevel}
@@ -213,7 +213,7 @@ let AiChatbotComponent = class extends AiChatbotBase {
213
213
  <forge-ai-conversations-panel
214
214
  ${ref(__privateGet(this, _conversationsPanelRef))}
215
215
  .recentThreads=${this.recentThreads}
216
- .selectedThreadId=${this._selectedThreadId}
216
+ .selectedThreadId=${this.selectedThreadId}
217
217
  ?show-back-button=${true}
218
218
  ?show-conversation-rename=${this.showConversationRename}
219
219
  ?show-conversation-delete=${this.showConversationDelete}
@@ -275,7 +275,7 @@ handleConversationsToggle_fn = function() {
275
275
  };
276
276
  handleThreadSelect_fn = function(evt) {
277
277
  const { id, title } = evt.detail;
278
- this._selectedThreadId = id;
278
+ this.selectedThreadId = id;
279
279
  this._dispatchHostEvent({
280
280
  type: "forge-ai-chatbot-conversation-select",
281
281
  detail: { id, title }
@@ -401,8 +401,8 @@ __decorateClass([
401
401
  property({ type: Boolean, attribute: "show-conversation-delete" })
402
402
  ], AiChatbotComponent.prototype, "showConversationDelete", 2);
403
403
  __decorateClass([
404
- state()
405
- ], AiChatbotComponent.prototype, "_selectedThreadId", 2);
404
+ property({ type: String, attribute: "selected-thread-id" })
405
+ ], AiChatbotComponent.prototype, "selectedThreadId", 2);
406
406
  AiChatbotComponent = __decorateClass([
407
407
  customElement(AiChatbotComponentTagName)
408
408
  ], AiChatbotComponent);