@tylertech/forge-ai 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/custom-elements.json +4691 -637
  2. package/dist/ai-actions-toolbar/ai-actions-toolbar.d.ts +24 -1
  3. package/dist/ai-actions-toolbar/ai-actions-toolbar.mjs +171 -42
  4. package/dist/ai-actions-toolbar/ai-actions-toolbar.scss.mjs +1 -1
  5. package/dist/ai-agent-info/ai-agent-info.d.ts +29 -0
  6. package/dist/ai-agent-info/ai-agent-info.mjs +123 -0
  7. package/dist/ai-agent-info/ai-agent-info.scss.mjs +4 -0
  8. package/dist/ai-agent-info/index.d.ts +1 -0
  9. package/dist/ai-agent-info/index.mjs +5 -0
  10. package/dist/ai-artifact/ai-artifact.scss.mjs +1 -1
  11. package/dist/ai-attachment/ai-attachment.d.ts +39 -0
  12. package/dist/ai-attachment/ai-attachment.mjs +130 -0
  13. package/dist/ai-attachment/ai-attachment.scss.mjs +4 -0
  14. package/dist/ai-attachment/index.d.ts +1 -0
  15. package/dist/ai-attachment/index.mjs +5 -0
  16. package/dist/ai-button/ai-button.mjs +1 -0
  17. package/dist/ai-button/ai-button.scss.mjs +1 -1
  18. package/dist/ai-chain-of-thought/thought-base/thought-base.scss.mjs +1 -1
  19. package/dist/ai-chat-header/ai-chat-header.d.ts +35 -17
  20. package/dist/ai-chat-header/ai-chat-header.mjs +130 -30
  21. package/dist/ai-chat-header/ai-chat-header.scss.mjs +1 -1
  22. package/dist/ai-chat-header/index.d.ts +1 -0
  23. package/dist/ai-chat-interface/ai-chat-interface.d.ts +2 -4
  24. package/dist/ai-chat-interface/ai-chat-interface.mjs +24 -28
  25. package/dist/ai-chat-interface/ai-chat-interface.scss.mjs +1 -1
  26. package/dist/ai-chatbot/ag-ui-adapter.d.ts +22 -0
  27. package/dist/ai-chatbot/ag-ui-adapter.mjs +331 -0
  28. package/dist/ai-chatbot/agent-adapter.d.ts +125 -0
  29. package/dist/ai-chatbot/agent-adapter.mjs +136 -0
  30. package/dist/ai-chatbot/agent-runner.d.ts +41 -0
  31. package/dist/ai-chatbot/agent-runner.mjs +264 -0
  32. package/dist/ai-chatbot/ai-chatbot-tool-call.d.ts +21 -0
  33. package/dist/ai-chatbot/ai-chatbot-tool-call.mjs +189 -0
  34. package/dist/ai-chatbot/ai-chatbot-tool-call.scss.mjs +4 -0
  35. package/dist/ai-chatbot/ai-chatbot.d.ts +133 -0
  36. package/dist/ai-chatbot/ai-chatbot.mjs +755 -0
  37. package/dist/ai-chatbot/ai-chatbot.scss.mjs +4 -0
  38. package/dist/ai-chatbot/create-tool-renderer.d.ts +12 -0
  39. package/dist/ai-chatbot/create-tool-renderer.mjs +28 -0
  40. package/dist/ai-chatbot/event-emitter.d.ts +43 -0
  41. package/dist/ai-chatbot/event-emitter.mjs +81 -0
  42. package/dist/ai-chatbot/file-upload-manager.d.ts +27 -0
  43. package/dist/ai-chatbot/file-upload-manager.mjs +106 -0
  44. package/dist/ai-chatbot/http-agent-with-credentials.d.ts +8 -0
  45. package/dist/ai-chatbot/http-agent-with-credentials.mjs +14 -0
  46. package/dist/ai-chatbot/index.d.ts +15 -0
  47. package/dist/ai-chatbot/index.mjs +30 -0
  48. package/dist/ai-chatbot/markdown-stream-controller.d.ts +13 -0
  49. package/dist/ai-chatbot/markdown-stream-controller.mjs +49 -0
  50. package/dist/ai-chatbot/message-state-controller.d.ts +45 -0
  51. package/dist/ai-chatbot/message-state-controller.mjs +168 -0
  52. package/dist/ai-chatbot/types.d.ts +120 -0
  53. package/dist/ai-chatbot/utils.d.ts +12 -0
  54. package/dist/ai-chatbot/utils.mjs +31 -0
  55. package/dist/ai-confirmation-prompt/ai-confirmation-prompt.d.ts +28 -0
  56. package/dist/ai-confirmation-prompt/ai-confirmation-prompt.mjs +89 -0
  57. package/dist/ai-confirmation-prompt/ai-confirmation-prompt.scss.mjs +4 -0
  58. package/dist/ai-confirmation-prompt/index.d.ts +1 -0
  59. package/dist/ai-confirmation-prompt/index.mjs +5 -0
  60. package/dist/ai-dialog/ai-dialog.scss.mjs +1 -1
  61. package/dist/ai-dropdown-menu/ai-dropdown-menu-item.d.ts +0 -6
  62. package/dist/ai-dropdown-menu/ai-dropdown-menu-item.mjs +3 -16
  63. package/dist/ai-dropdown-menu/ai-dropdown-menu-item.scss.mjs +1 -1
  64. package/dist/ai-dropdown-menu/ai-dropdown-menu.d.ts +6 -0
  65. package/dist/ai-dropdown-menu/ai-dropdown-menu.mjs +6 -2
  66. package/dist/ai-dropdown-menu/ai-dropdown-menu.scss.mjs +1 -1
  67. package/dist/ai-embedded-chat/ai-embedded-chat.d.ts +18 -5
  68. package/dist/ai-embedded-chat/ai-embedded-chat.mjs +43 -18
  69. package/dist/ai-empty-state/ai-empty-state.d.ts +4 -2
  70. package/dist/ai-empty-state/ai-empty-state.mjs +237 -57
  71. package/dist/ai-empty-state/ai-empty-state.scss.mjs +1 -1
  72. package/dist/ai-error-message/ai-error-message.d.ts +19 -0
  73. package/dist/ai-error-message/ai-error-message.mjs +44 -0
  74. package/dist/ai-error-message/ai-error-message.scss.mjs +4 -0
  75. package/dist/ai-error-message/index.d.ts +1 -0
  76. package/dist/ai-error-message/index.mjs +5 -0
  77. package/dist/ai-fab/ai-fab.scss.mjs +1 -1
  78. package/dist/ai-file-picker/ai-file-picker.d.ts +20 -1
  79. package/dist/ai-file-picker/ai-file-picker.mjs +67 -20
  80. package/dist/ai-file-picker/ai-file-picker.scss.mjs +1 -1
  81. package/dist/ai-file-picker/index.d.ts +1 -1
  82. package/dist/ai-floating-chat/ai-floating-chat.d.ts +5 -30
  83. package/dist/ai-floating-chat/ai-floating-chat.mjs +19 -42
  84. package/dist/ai-message-thread/ai-message-thread.d.ts +58 -0
  85. package/dist/ai-message-thread/ai-message-thread.mjs +224 -0
  86. package/dist/ai-message-thread/ai-message-thread.scss.mjs +4 -0
  87. package/dist/ai-message-thread/index.d.ts +2 -0
  88. package/dist/ai-message-thread/index.mjs +5 -0
  89. package/dist/ai-modal/ai-modal.d.ts +6 -0
  90. package/dist/ai-modal/ai-modal.mjs +31 -14
  91. package/dist/ai-modal/ai-modal.scss.mjs +1 -1
  92. package/dist/ai-prompt/ai-prompt.mjs +3 -6
  93. package/dist/ai-prompt/ai-prompt.scss.mjs +1 -1
  94. package/dist/ai-prompt/prompt-button/prompt-button.scss.mjs +1 -1
  95. package/dist/ai-response-message/ai-response-message.d.ts +12 -21
  96. package/dist/ai-response-message/ai-response-message.mjs +32 -89
  97. package/dist/ai-response-message/ai-response-message.scss.mjs +1 -1
  98. package/dist/ai-sidebar/ai-sidebar.mjs +1 -1
  99. package/dist/ai-sidebar-chat/ai-sidebar-chat.d.ts +5 -29
  100. package/dist/ai-sidebar-chat/ai-sidebar-chat.mjs +23 -43
  101. package/dist/ai-spinner/ai-spinner.d.ts +24 -0
  102. package/dist/ai-spinner/ai-spinner.mjs +41 -0
  103. package/dist/ai-spinner/ai-spinner.scss.mjs +4 -0
  104. package/dist/ai-spinner/index.d.ts +1 -0
  105. package/dist/ai-spinner/index.mjs +5 -0
  106. package/dist/ai-suggestions/ai-suggestions.d.ts +2 -0
  107. package/dist/ai-suggestions/ai-suggestions.mjs +66 -7
  108. package/dist/ai-suggestions/ai-suggestions.scss.mjs +1 -1
  109. package/dist/ai-suggestions/index.d.ts +2 -1
  110. package/dist/ai-thinking-indicator/ai-thinking-indicator.d.ts +3 -1
  111. package/dist/ai-thinking-indicator/ai-thinking-indicator.mjs +83 -3
  112. package/dist/ai-thinking-indicator/ai-thinking-indicator.scss.mjs +317 -1
  113. package/dist/ai-threads/ai-threads.d.ts +9 -4
  114. package/dist/ai-threads/ai-threads.mjs +21 -41
  115. package/dist/ai-threads/ai-threads.scss.mjs +1 -1
  116. package/dist/ai-user-message/ai-user-message.scss.mjs +1 -1
  117. package/dist/ai-voice-input/ai-voice-input.scss.mjs +1 -1
  118. package/dist/core/drag-controller.mjs +3 -0
  119. package/dist/core/overlay/overlay.d.ts +10 -0
  120. package/dist/core/overlay/overlay.mjs +24 -4
  121. package/dist/core/popover/popover.d.ts +17 -7
  122. package/dist/core/popover/popover.mjs +17 -3
  123. package/dist/core/popover/popover.scss.mjs +1 -1
  124. package/dist/core/tooltip/tooltip.d.ts +8 -7
  125. package/dist/core/tooltip/tooltip.mjs +45 -16
  126. package/dist/core/tooltip/tooltip.scss.mjs +1 -1
  127. package/dist/index.d.ts +10 -4
  128. package/dist/index.mjs +52 -9
  129. package/package.json +64 -60
@@ -2,8 +2,6 @@ import { unsafeCSS, LitElement, html } from "lit";
2
2
  import { property, state, customElement } from "lit/decorators.js";
3
3
  import { createRef, ref } from "lit/directives/ref.js";
4
4
  import "../ai-dialog/ai-dialog.mjs";
5
- import "../ai-chat-interface/ai-chat-interface.mjs";
6
- import "../ai-chat-header/ai-chat-header.mjs";
7
5
  import styles from "./ai-floating-chat.scss.mjs";
8
6
  var __defProp = Object.defineProperty;
9
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -22,7 +20,7 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
22
20
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
23
21
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
24
22
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
25
- var _dialogRef, _AiFloatingChatComponent_instances, handleFullscreenChange_fn, handleHeaderExpand_fn, handleHeaderMinimize_fn, handleDialogClose_fn, dispatchEvent_fn;
23
+ var _dialogRef, _AiFloatingChatComponent_instances, handleFullscreenChange_fn, handleChatbotExpand_fn, handleChatbotMinimize_fn, handleDialogClose_fn, dispatchEvent_fn;
26
24
  const AiFloatingChatComponentTagName = "forge-ai-floating-chat";
27
25
  let AiFloatingChatComponent = class extends LitElement {
28
26
  constructor() {
@@ -30,14 +28,9 @@ let AiFloatingChatComponent = class extends LitElement {
30
28
  __privateAdd(this, _AiFloatingChatComponent_instances);
31
29
  this.open = false;
32
30
  this.expanded = false;
33
- this._isFullscreen = false;
31
+ this._userExpanded = false;
34
32
  __privateAdd(this, _dialogRef, createRef());
35
33
  }
36
- updated() {
37
- if (__privateGet(this, _dialogRef).value && this._isFullscreen !== __privateGet(this, _dialogRef).value.isFullscreen) {
38
- this._isFullscreen = __privateGet(this, _dialogRef).value.isFullscreen;
39
- }
40
- }
41
34
  render() {
42
35
  return html`
43
36
  <forge-ai-dialog
@@ -46,33 +39,16 @@ let AiFloatingChatComponent = class extends LitElement {
46
39
  ?expanded=${this.expanded}
47
40
  @forge-ai-dialog-fullscreen-change=${__privateMethod(this, _AiFloatingChatComponent_instances, handleFullscreenChange_fn)}
48
41
  @forge-ai-dialog-close=${__privateMethod(this, _AiFloatingChatComponent_instances, handleDialogClose_fn)}>
49
- <forge-ai-chat-interface>
50
- <forge-ai-chat-header
51
- slot="header"
52
- @forge-ai-chat-header-expand=${__privateMethod(this, _AiFloatingChatComponent_instances, handleHeaderExpand_fn)}
53
- @forge-ai-chat-header-minimize=${__privateMethod(this, _AiFloatingChatComponent_instances, handleHeaderMinimize_fn)}
54
- ?show-expand-button=${!this._isFullscreen}
55
- show-minimize-button
56
- minimize-icon="default"
57
- ?expanded=${this.expanded}>
58
- </forge-ai-chat-header>
59
- <slot></slot>
60
- <slot name="suggestions" slot="suggestions"></slot>
61
- <slot name="prompt" slot="prompt"></slot>
62
- </forge-ai-chat-interface>
42
+ <slot
43
+ @forge-ai-chatbot-expand=${__privateMethod(this, _AiFloatingChatComponent_instances, handleChatbotExpand_fn)}
44
+ @forge-ai-chatbot-minimize=${__privateMethod(this, _AiFloatingChatComponent_instances, handleChatbotMinimize_fn)}></slot>
63
45
  </forge-ai-dialog>
64
46
  `;
65
47
  }
66
- /**
67
- * Opens the chat.
68
- */
69
48
  show() {
70
49
  this.open = true;
71
50
  __privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-open");
72
51
  }
73
- /**
74
- * Closes the chat.
75
- */
76
52
  close() {
77
53
  if (this.expanded) {
78
54
  this.expanded = false;
@@ -81,9 +57,6 @@ let AiFloatingChatComponent = class extends LitElement {
81
57
  this.open = false;
82
58
  __privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-close");
83
59
  }
84
- /**
85
- * Toggles the chat open state.
86
- */
87
60
  toggle() {
88
61
  if (this.open) {
89
62
  this.close();
@@ -91,21 +64,17 @@ let AiFloatingChatComponent = class extends LitElement {
91
64
  this.show();
92
65
  }
93
66
  }
94
- /**
95
- * Expands the chat to full width.
96
- */
97
67
  expand() {
98
68
  if (!this.expanded) {
99
69
  this.expanded = true;
70
+ this._userExpanded = true;
100
71
  __privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-expand");
101
72
  }
102
73
  }
103
- /**
104
- * Collapses the chat to normal width.
105
- */
106
74
  collapse() {
107
75
  if (this.expanded) {
108
76
  this.expanded = false;
77
+ this._userExpanded = false;
109
78
  __privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-collapse");
110
79
  }
111
80
  }
@@ -113,17 +82,25 @@ let AiFloatingChatComponent = class extends LitElement {
113
82
  _dialogRef = /* @__PURE__ */ new WeakMap();
114
83
  _AiFloatingChatComponent_instances = /* @__PURE__ */ new WeakSet();
115
84
  handleFullscreenChange_fn = function(event) {
116
- this._isFullscreen = event.detail.isFullscreen;
85
+ const { isFullscreen } = event.detail;
86
+ if (isFullscreen && !this.expanded) {
87
+ this.expanded = true;
88
+ __privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-expand");
89
+ } else if (!isFullscreen && this.expanded && !this._userExpanded) {
90
+ this.expanded = false;
91
+ __privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-collapse");
92
+ }
117
93
  };
118
- handleHeaderExpand_fn = function() {
94
+ handleChatbotExpand_fn = function() {
119
95
  this.expanded = !this.expanded;
96
+ this._userExpanded = this.expanded;
120
97
  if (this.expanded) {
121
98
  __privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-expand");
122
99
  } else {
123
100
  __privateMethod(this, _AiFloatingChatComponent_instances, dispatchEvent_fn).call(this, "forge-ai-floating-chat-collapse");
124
101
  }
125
102
  };
126
- handleHeaderMinimize_fn = function() {
103
+ handleChatbotMinimize_fn = function() {
127
104
  this.close();
128
105
  };
129
106
  handleDialogClose_fn = function() {
@@ -147,7 +124,7 @@ __decorateClass([
147
124
  ], AiFloatingChatComponent.prototype, "expanded", 2);
148
125
  __decorateClass([
149
126
  state()
150
- ], AiFloatingChatComponent.prototype, "_isFullscreen", 2);
127
+ ], AiFloatingChatComponent.prototype, "_userExpanded", 2);
151
128
  AiFloatingChatComponent = __decorateClass([
152
129
  customElement(AiFloatingChatComponentTagName)
153
130
  ], AiFloatingChatComponent);
@@ -0,0 +1,58 @@
1
+ import { LitElement, TemplateResult, PropertyValues } from 'lit';
2
+ import { MessageItem, ToolDefinition } from '../ai-chatbot/types.js';
3
+ import { FeatureToggle } from '../ai-chatbot/ai-chatbot.js';
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ 'forge-ai-message-thread': AiMessageThreadComponent;
7
+ }
8
+ interface HTMLElementEventMap {
9
+ 'forge-ai-message-thread-copy': CustomEvent<ForgeAiMessageThreadCopyEventData>;
10
+ 'forge-ai-message-thread-refresh': CustomEvent<ForgeAiMessageThreadRefreshEventData>;
11
+ 'forge-ai-message-thread-thumbs-up': CustomEvent<ForgeAiMessageThreadThumbsEventData>;
12
+ 'forge-ai-message-thread-thumbs-down': CustomEvent<ForgeAiMessageThreadThumbsEventData>;
13
+ }
14
+ }
15
+ export interface ForgeAiMessageThreadCopyEventData {
16
+ messageItemIndex: number;
17
+ }
18
+ export interface ForgeAiMessageThreadRefreshEventData {
19
+ messageItemIndex: number;
20
+ }
21
+ export interface ForgeAiMessageThreadThumbsEventData {
22
+ messageId: string;
23
+ }
24
+ export declare const AiMessageThreadComponentTagName: keyof HTMLElementTagNameMap;
25
+ /**
26
+ * @tag forge-ai-message-thread
27
+ *
28
+ * @summary A primitive component for rendering a thread of chat messages, including user, assistant, system, and tool call messages.
29
+ *
30
+ * @description
31
+ * The AI Message Thread component displays a chronological list of messages with support for markdown rendering,
32
+ * tool calls, empty states, and thinking indicators. It handles its own scrolling behavior with auto-scroll support.
33
+ *
34
+ * @slot empty-state-heading - Slot for custom empty state heading content
35
+ * @slot empty-state-actions - Slot for custom empty state actions (e.g., suggestions)
36
+ *
37
+ * @event {CustomEvent<ForgeAiMessageThreadCopyEventData>} forge-ai-message-thread-copy - Fired when user clicks copy on a message
38
+ * @event {CustomEvent<ForgeAiMessageThreadRefreshEventData>} forge-ai-message-thread-refresh - Fired when user clicks refresh on a message
39
+ * @event {CustomEvent<ForgeAiMessageThreadThumbsEventData>} forge-ai-message-thread-thumbs-up - Fired when user gives thumbs up
40
+ * @event {CustomEvent<ForgeAiMessageThreadThumbsEventData>} forge-ai-message-thread-thumbs-down - Fired when user gives thumbs down
41
+ */
42
+ export declare class AiMessageThreadComponent extends LitElement {
43
+ #private;
44
+ static styles: import('lit').CSSResult;
45
+ messageItems: MessageItem[];
46
+ tools?: Map<string, ToolDefinition>;
47
+ enableReactions: boolean;
48
+ showThinking: boolean;
49
+ autoScroll: FeatureToggle;
50
+ private _messageThreadContainer;
51
+ connectedCallback(): void;
52
+ updated(changedProperties: PropertyValues<this>): void;
53
+ scrollToBottom({ force, behavior }?: {
54
+ force?: boolean;
55
+ behavior?: ScrollBehavior;
56
+ }): void;
57
+ render(): TemplateResult;
58
+ }
@@ -0,0 +1,224 @@
1
+ import { unsafeCSS, LitElement, html, nothing } from "lit";
2
+ import { property, query, customElement } from "lit/decorators.js";
3
+ import { unsafeHTML } from "lit/directives/unsafe-html.js";
4
+ import { when } from "lit/directives/when.js";
5
+ import { MarkdownStreamController } from "../ai-chatbot/markdown-stream-controller.mjs";
6
+ import "../ai-empty-state/ai-empty-state.mjs";
7
+ import "../ai-error-message/ai-error-message.mjs";
8
+ import "../ai-response-message/ai-response-message.mjs";
9
+ import "../ai-thinking-indicator/ai-thinking-indicator.mjs";
10
+ import "../ai-user-message/ai-user-message.mjs";
11
+ import "../ai-chatbot/ai-chatbot-tool-call.mjs";
12
+ import styles from "./ai-message-thread.scss.mjs";
13
+ var __defProp = Object.defineProperty;
14
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
15
+ var __typeError = (msg) => {
16
+ throw TypeError(msg);
17
+ };
18
+ var __decorateClass = (decorators, target, key, kind) => {
19
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
20
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
21
+ if (decorator = decorators[i])
22
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
23
+ if (kind && result) __defProp(target, key, result);
24
+ return result;
25
+ };
26
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
27
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
28
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
29
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
30
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
31
+ var _markdownController, _canAutoScroll, _handleScroll, _AiMessageThreadComponent_instances, handleCopy_fn, handleRefresh_fn, handleThumbsUp_fn, handleThumbsDown_fn, renderToolCall_fn, emptyState_get, thinkingIndicator_get, messages_get, dispatchEvent_fn;
32
+ const AiMessageThreadComponentTagName = "forge-ai-message-thread";
33
+ const SCROLL_THRESHOLD = 100;
34
+ let AiMessageThreadComponent = class extends LitElement {
35
+ constructor() {
36
+ super(...arguments);
37
+ __privateAdd(this, _AiMessageThreadComponent_instances);
38
+ this.messageItems = [];
39
+ this.enableReactions = false;
40
+ this.showThinking = false;
41
+ this.autoScroll = "on";
42
+ __privateAdd(this, _markdownController);
43
+ __privateAdd(this, _canAutoScroll, true);
44
+ __privateAdd(this, _handleScroll, () => {
45
+ const { scrollTop, scrollHeight, clientHeight } = this._messageThreadContainer;
46
+ __privateSet(this, _canAutoScroll, scrollTop + clientHeight >= scrollHeight - SCROLL_THRESHOLD);
47
+ });
48
+ }
49
+ connectedCallback() {
50
+ super.connectedCallback();
51
+ __privateSet(this, _markdownController, new MarkdownStreamController(this));
52
+ }
53
+ updated(changedProperties) {
54
+ super.updated(changedProperties);
55
+ if (this.autoScroll === "on" && (changedProperties.has("messageItems") || changedProperties.has("showThinking"))) {
56
+ this.scrollToBottom();
57
+ }
58
+ }
59
+ scrollToBottom({
60
+ force = false,
61
+ behavior = "smooth"
62
+ } = {}) {
63
+ if (!force && !__privateGet(this, _canAutoScroll)) {
64
+ return;
65
+ }
66
+ const container = this._messageThreadContainer;
67
+ container.scrollTo({
68
+ top: container.scrollHeight,
69
+ behavior
70
+ });
71
+ }
72
+ render() {
73
+ return html`
74
+ <div class="message-thread" @scroll=${this.autoScroll ? __privateGet(this, _handleScroll) : void 0}>
75
+ ${__privateGet(this, _AiMessageThreadComponent_instances, emptyState_get)} ${__privateGet(this, _AiMessageThreadComponent_instances, messages_get)} ${__privateGet(this, _AiMessageThreadComponent_instances, thinkingIndicator_get)}
76
+ </div>
77
+ `;
78
+ }
79
+ };
80
+ _markdownController = /* @__PURE__ */ new WeakMap();
81
+ _canAutoScroll = /* @__PURE__ */ new WeakMap();
82
+ _handleScroll = /* @__PURE__ */ new WeakMap();
83
+ _AiMessageThreadComponent_instances = /* @__PURE__ */ new WeakSet();
84
+ handleCopy_fn = function(messageItemIndex) {
85
+ __privateMethod(this, _AiMessageThreadComponent_instances, dispatchEvent_fn).call(this, {
86
+ type: "forge-ai-message-thread-copy",
87
+ detail: { messageItemIndex }
88
+ });
89
+ };
90
+ handleRefresh_fn = function(messageItemIndex) {
91
+ __privateMethod(this, _AiMessageThreadComponent_instances, dispatchEvent_fn).call(this, {
92
+ type: "forge-ai-message-thread-refresh",
93
+ detail: { messageItemIndex }
94
+ });
95
+ };
96
+ handleThumbsUp_fn = function(messageId) {
97
+ __privateMethod(this, _AiMessageThreadComponent_instances, dispatchEvent_fn).call(this, {
98
+ type: "forge-ai-message-thread-thumbs-up",
99
+ detail: { messageId }
100
+ });
101
+ };
102
+ handleThumbsDown_fn = function(messageId) {
103
+ __privateMethod(this, _AiMessageThreadComponent_instances, dispatchEvent_fn).call(this, {
104
+ type: "forge-ai-message-thread-thumbs-down",
105
+ detail: { messageId }
106
+ });
107
+ };
108
+ renderToolCall_fn = function(toolCall) {
109
+ const toolDefinition = this.tools?.get(toolCall.name);
110
+ return html`<forge-ai-chatbot-tool-call
111
+ .toolCall=${toolCall}
112
+ .toolDefinition=${toolDefinition}></forge-ai-chatbot-tool-call>`;
113
+ };
114
+ emptyState_get = function() {
115
+ if (this.messageItems.length) {
116
+ return nothing;
117
+ }
118
+ return html`
119
+ <forge-ai-empty-state>
120
+ <slot name="empty-state-heading" slot="heading">
121
+ <span>How can I help you today?</span>
122
+ </slot>
123
+ <slot name="empty-state-message" slot="body">
124
+ Start a conversation by asking a question or describing what you'd like help with.
125
+ </slot>
126
+ <slot name="empty-state-actions" slot="actions"></slot>
127
+ </forge-ai-empty-state>
128
+ `;
129
+ };
130
+ thinkingIndicator_get = function() {
131
+ if (!this.showThinking) {
132
+ return nothing;
133
+ }
134
+ const lastItem = this.messageItems[this.messageItems.length - 1];
135
+ const hasAssistantContent = lastItem?.type !== "toolCall" && lastItem?.type === "message" && lastItem.data.role === "assistant" && lastItem.data.content.trim().length;
136
+ if (hasAssistantContent) {
137
+ return nothing;
138
+ }
139
+ return html`<div class="thinking-indicator">
140
+ <forge-ai-thinking-indicator class="status-indicator"></forge-ai-thinking-indicator>
141
+ </div>`;
142
+ };
143
+ messages_get = function() {
144
+ const itemsToRender = this.messageItems.filter((item) => {
145
+ if (item.type === "toolCall") {
146
+ const toolDef = this.tools?.get(item.data.name);
147
+ return !!toolDef?.renderer;
148
+ }
149
+ if (item.type === "message") {
150
+ return item.data.role !== "tool";
151
+ }
152
+ return false;
153
+ });
154
+ return itemsToRender.map((item, index) => {
155
+ if (item.type === "toolCall") {
156
+ return __privateMethod(this, _AiMessageThreadComponent_instances, renderToolCall_fn).call(this, item.data);
157
+ }
158
+ const msg = item.data;
159
+ if (msg.role === "user") {
160
+ const renderedHtml = __privateGet(this, _markdownController).getCachedHtml(msg.id, msg.content);
161
+ return html`<forge-ai-user-message>${unsafeHTML(renderedHtml)}</forge-ai-user-message>`;
162
+ } else if (msg.role === "system") {
163
+ return html`<div class="system-message">${msg.content}</div>`;
164
+ } else if (msg.status === "error") {
165
+ const renderedHtml = __privateGet(this, _markdownController).getCachedHtml(msg.id, msg.content);
166
+ return html`
167
+ <forge-ai-error-message>
168
+ <span slot="title">Error</span>
169
+ ${unsafeHTML(renderedHtml)}
170
+ </forge-ai-error-message>
171
+ `;
172
+ } else {
173
+ return when(msg.content?.trim().length, () => {
174
+ const renderedHtml = __privateGet(this, _markdownController).getCachedHtml(msg.id, msg.content);
175
+ return html`
176
+ <forge-ai-response-message
177
+ ?complete=${msg.status === "complete"}
178
+ ?enable-reactions=${this.enableReactions}
179
+ @forge-ai-response-message-copy=${() => __privateMethod(this, _AiMessageThreadComponent_instances, handleCopy_fn).call(this, index)}
180
+ @forge-ai-response-message-refresh=${() => __privateMethod(this, _AiMessageThreadComponent_instances, handleRefresh_fn).call(this, index)}
181
+ @forge-ai-response-message-thumbs-up=${() => __privateMethod(this, _AiMessageThreadComponent_instances, handleThumbsUp_fn).call(this, msg.id)}
182
+ @forge-ai-response-message-thumbs-down=${() => __privateMethod(this, _AiMessageThreadComponent_instances, handleThumbsDown_fn).call(this, msg.id)}>
183
+ ${unsafeHTML(renderedHtml)}
184
+ </forge-ai-response-message>
185
+ `;
186
+ });
187
+ }
188
+ });
189
+ };
190
+ dispatchEvent_fn = function(config) {
191
+ const event = new CustomEvent(config.type, {
192
+ detail: config.detail,
193
+ bubbles: true,
194
+ composed: true
195
+ });
196
+ this.dispatchEvent(event);
197
+ return event;
198
+ };
199
+ AiMessageThreadComponent.styles = unsafeCSS(styles);
200
+ __decorateClass([
201
+ property({ attribute: false })
202
+ ], AiMessageThreadComponent.prototype, "messageItems", 2);
203
+ __decorateClass([
204
+ property({ attribute: false })
205
+ ], AiMessageThreadComponent.prototype, "tools", 2);
206
+ __decorateClass([
207
+ property({ type: Boolean, attribute: "enable-reactions" })
208
+ ], AiMessageThreadComponent.prototype, "enableReactions", 2);
209
+ __decorateClass([
210
+ property({ type: Boolean, attribute: "show-thinking" })
211
+ ], AiMessageThreadComponent.prototype, "showThinking", 2);
212
+ __decorateClass([
213
+ property({ attribute: "auto-scroll" })
214
+ ], AiMessageThreadComponent.prototype, "autoScroll", 2);
215
+ __decorateClass([
216
+ query(".message-thread")
217
+ ], AiMessageThreadComponent.prototype, "_messageThreadContainer", 2);
218
+ AiMessageThreadComponent = __decorateClass([
219
+ customElement(AiMessageThreadComponentTagName)
220
+ ], AiMessageThreadComponent);
221
+ export {
222
+ AiMessageThreadComponent,
223
+ AiMessageThreadComponentTagName
224
+ };
@@ -0,0 +1,4 @@
1
+ const styles = '/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/* prettier-ignore */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n:host {\n display: grid;\n height: 100%;\n}\n\n.message-thread::-webkit-scrollbar {\n height: var(--forge-scrollbar-height, 16px);\n width: var(--forge-scrollbar-width, 16px);\n}\n.message-thread::-webkit-scrollbar-track {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.message-thread::-webkit-scrollbar-track:hover {\n background-color: var(--forge-scrollbar-track-container-hover, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.message-thread::-webkit-scrollbar-corner {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.message-thread::-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.message-thread::-webkit-scrollbar-thumb:hover {\n background-color: var(--forge-scrollbar-thumb-container-hover, var(--forge-theme-surface-container-high, #9e9e9e));\n}\n.message-thread {\n display: flex;\n flex-direction: column;\n gap: var(--forge-spacing-medium, 16px);\n padding-block-end: var(--forge-spacing-large, 24px);\n overflow-y: auto;\n padding: var(--forge-spacing-medium, 16px) var(--forge-spacing-medium, 16px) var(--forge-spacing-xxlarge, 48px) var(--forge-spacing-medium, 16px);\n}\n@media not all and (min-resolution: 0.001dpcm) {\n @supports (-webkit-appearance: none) {\n .message-thread {\n overflow-y: scroll;\n }\n }\n}\n\n.thinking-indicator {\n margin-block-start: var(--forge-spacing-xsmall, 8px);\n}\n\n.system-message {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-subheading2-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-subheading2-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-subheading2-font-size-scale, 1)));\n font-weight: var(--forge-typography-subheading2-font-weight, 400);\n line-height: var(--forge-typography-subheading2-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-subheading2-line-height-scale, 1.25)));\n letter-spacing: var(--forge-typography-subheading2-letter-spacing, normal);\n text-transform: var(--forge-typography-subheading2-text-transform, inherit);\n text-decoration: var(--forge-typography-subheading2-text-decoration, inherit);\n color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n padding-block: var(--forge-spacing-small, 12px);\n}';
2
+ export {
3
+ styles as default
4
+ };
@@ -0,0 +1,2 @@
1
+ export { AiMessageThreadComponent, AiMessageThreadComponentTagName } from './ai-message-thread.js';
2
+ export type { ForgeAiMessageThreadCopyEventData, ForgeAiMessageThreadRefreshEventData, ForgeAiMessageThreadThumbsEventData } from './ai-message-thread.js';
@@ -0,0 +1,5 @@
1
+ import { AiMessageThreadComponent, AiMessageThreadComponentTagName } from "./ai-message-thread.mjs";
2
+ export {
3
+ AiMessageThreadComponent,
4
+ AiMessageThreadComponentTagName
5
+ };
@@ -19,6 +19,11 @@ declare global {
19
19
  * @event {CustomEvent<void>} forge-ai-modal-open - Fired when the modal is opened
20
20
  * @event {CustomEvent<void>} forge-ai-modal-close - Fired when the modal is closed
21
21
  * @event {CustomEvent<{ isFullscreen: boolean }>} forge-ai-modal-fullscreen-change - Fired when the fullscreen state changes
22
+ *
23
+ * @cssproperty --forge-ai-modal-width - Width of the modal in non-fullscreen mode
24
+ * @cssproperty --forge-ai-modal-height - Height of the modal in non-fullscreen mode
25
+ *
26
+ * @state fullscreen - The modal is in fullscreen mode
22
27
  */
23
28
  export declare class AiModalComponent extends LitElement {
24
29
  #private;
@@ -34,6 +39,7 @@ export declare class AiModalComponent extends LitElement {
34
39
  */
35
40
  fullscreen?: boolean;
36
41
  private _autoFullscreen;
42
+ constructor();
37
43
  render(): TemplateResult;
38
44
  connectedCallback(): void;
39
45
  disconnectedCallback(): void;
@@ -1,6 +1,7 @@
1
1
  import { unsafeCSS, LitElement, html } from "lit";
2
2
  import { query, property, state, customElement } from "lit/decorators.js";
3
3
  import { classMap } from "lit/directives/class-map.js";
4
+ import { toggleState } from "../utils.mjs";
4
5
  import styles from "./ai-modal.scss.mjs";
5
6
  var __defProp = Object.defineProperty;
6
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -20,27 +21,33 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
20
21
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
21
22
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
22
23
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
23
- var _mediaQuery, _AiModalComponent_instances, handleDialogClose_fn, handleDialogClick_fn, setupMediaQuery_fn, cleanupMediaQuery_fn, _handleMediaChange;
24
+ var _mediaQuery, _internals, _AiModalComponent_instances, updateFullscreenState_fn, handleDialogClose_fn, handleDialogClick_fn, setupMediaQuery_fn, cleanupMediaQuery_fn, _handleMediaChange;
24
25
  const FULLSCREEN_WIDTH_THRESHOLD = 768;
25
26
  let AiModalComponent = class extends LitElement {
26
27
  constructor() {
27
- super(...arguments);
28
+ super();
28
29
  __privateAdd(this, _AiModalComponent_instances);
29
30
  this.open = false;
30
31
  this._autoFullscreen = window.innerWidth <= FULLSCREEN_WIDTH_THRESHOLD;
31
32
  __privateAdd(this, _mediaQuery);
33
+ __privateAdd(this, _internals);
32
34
  __privateAdd(this, _handleMediaChange, (e) => {
33
35
  const previousFullscreen = this._autoFullscreen;
34
36
  this._autoFullscreen = e.matches;
35
- if (this.fullscreen === void 0 && previousFullscreen !== this._autoFullscreen) {
36
- const event = new CustomEvent("forge-ai-modal-fullscreen-change", {
37
- bubbles: true,
38
- composed: true,
39
- detail: { isFullscreen: this._autoFullscreen }
40
- });
41
- this.dispatchEvent(event);
37
+ if (previousFullscreen !== this._autoFullscreen) {
38
+ __privateMethod(this, _AiModalComponent_instances, updateFullscreenState_fn).call(this);
39
+ if (this.fullscreen === void 0) {
40
+ const event = new CustomEvent("forge-ai-modal-fullscreen-change", {
41
+ bubbles: true,
42
+ composed: true,
43
+ detail: { isFullscreen: this._autoFullscreen }
44
+ });
45
+ this.dispatchEvent(event);
46
+ }
42
47
  }
43
48
  });
49
+ __privateSet(this, _internals, this.attachInternals());
50
+ __privateMethod(this, _AiModalComponent_instances, updateFullscreenState_fn).call(this);
44
51
  }
45
52
  render() {
46
53
  const isFullscreen = this.fullscreen ?? this._autoFullscreen;
@@ -69,15 +76,20 @@ let AiModalComponent = class extends LitElement {
69
76
  updated(changedProperties) {
70
77
  if (changedProperties.has("open")) {
71
78
  if (this.open) {
72
- this._dialog?.showModal();
73
- this.dispatchEvent(new CustomEvent("forge-ai-modal-open", { bubbles: true, composed: true }));
79
+ if (this._dialog && !this._dialog.open) {
80
+ this._dialog.showModal();
81
+ this.dispatchEvent(new CustomEvent("forge-ai-modal-open", { bubbles: true, composed: true }));
82
+ }
74
83
  } else {
75
- this._dialog?.close();
76
- window.setTimeout(() => {
84
+ if (this._dialog?.open) {
85
+ this._dialog.close();
77
86
  this.dispatchEvent(new CustomEvent("forge-ai-modal-close", { bubbles: true, composed: true }));
78
- }, 100);
87
+ }
79
88
  }
80
89
  }
90
+ if (changedProperties.has("fullscreen")) {
91
+ __privateMethod(this, _AiModalComponent_instances, updateFullscreenState_fn).call(this);
92
+ }
81
93
  }
82
94
  /**
83
95
  * Shows the modal dialog.
@@ -93,7 +105,12 @@ let AiModalComponent = class extends LitElement {
93
105
  }
94
106
  };
95
107
  _mediaQuery = /* @__PURE__ */ new WeakMap();
108
+ _internals = /* @__PURE__ */ new WeakMap();
96
109
  _AiModalComponent_instances = /* @__PURE__ */ new WeakSet();
110
+ updateFullscreenState_fn = function() {
111
+ const isFullscreen = this.fullscreen ?? this._autoFullscreen;
112
+ toggleState(__privateGet(this, _internals), "fullscreen", isFullscreen);
113
+ };
97
114
  handleDialogClose_fn = function() {
98
115
  this.open = false;
99
116
  };
@@ -1,4 +1,4 @@
1
- const styles = "/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n@keyframes forge-dialog-zoom-in {\n from {\n opacity: var(--_dialog-zoom-opacity);\n scale: var(--_dialog-zoom-scale);\n }\n to {\n opacity: 1;\n scale: 1;\n }\n}\n@keyframes forge-dialog-zoom-out {\n from {\n opacity: 1;\n scale: 1;\n }\n to {\n opacity: var(--_dialog-zoom-opacity);\n scale: var(--_dialog-zoom-scale);\n }\n}\n@keyframes forge-dialog-fade-in {\n from {\n opacity: var(--_dialog-fade-opacity);\n }\n to {\n opacity: 1;\n }\n}\n@keyframes forge-dialog-fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: var(--_dialog-fade-opacity);\n }\n}\n@keyframes forge-dialog-slide-in {\n from {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n to {\n opacity: 1;\n translate: 0 0;\n }\n}\n@keyframes forge-dialog-slide-out {\n from {\n opacity: 1;\n translate: 0 0;\n }\n to {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n}\n.forge-dialog {\n --_dialog-background: var(--forge-dialog-background, var(--forge-theme-surface-bright, #ffffff));\n --_dialog-shape: var(--forge-dialog-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_dialog-elevation: var(--forge-dialog-elevation, 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12));\n --_dialog-spacing: var(--forge-dialog-spacing, auto);\n --_dialog-block-start-spacing: var(--forge-dialog-block-start-spacing, var(--_dialog-spacing));\n --_dialog-block-end-spacing: var(--forge-dialog-block-end-spacing, var(--_dialog-spacing));\n --_dialog-inline-start-spacing: var(--forge-dialog-inline-start-spacing, var(--_dialog-spacing));\n --_dialog-inline-end-spacing: var(--forge-dialog-inline-end-spacing, var(--_dialog-spacing));\n --_dialog-padding: var(--forge-dialog-padding, 0);\n --_dialog-width: var(--forge-dialog-width, fit-content);\n --_dialog-height: var(--forge-dialog-height, fit-content);\n --_dialog-min-width: var(--forge-dialog-min-width, 0);\n --_dialog-max-width: var(--forge-dialog-max-width, calc(100% - var(--forge-spacing-xxlarge, 48px)));\n --_dialog-min-height: var(--forge-dialog-min-height, 0);\n --_dialog-max-height: var(--forge-dialog-max-height, calc(100% - var(--forge-spacing-xxlarge, 48px)));\n --_dialog-z-index: var(--forge-dialog-z-index, var(--forge-z-index-dialog, 8));\n --_dialog-move-handle-color: var(--forge-dialog-move-handle-color, currentColor);\n --_dialog-move-handle-size: var(--forge-dialog-move-handle-size, 24px);\n --_dialog-move-handle-hover-cursor: var(--forge-dialog-move-handle-hover-cursor, grab);\n --_dialog-move-handle-active-cursor: var(--forge-dialog-move-handle-active-cursor, grabbing);\n --_dialog-move-handle-spacing: var(--forge-dialog-move-handle-spacing, calc(var(--forge-spacing-xxsmall, 4px) * -1) 0 0);\n --_dialog-move-transition-duration: var(--forge-dialog-move-transition-duration, var(--forge-animation-duration-short4, 200ms));\n --_dialog-move-transition-easing: var(--forge-dialog-move-transition-easing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_dialog-moving-opacity: var(--forge-dialog-moving-opacity, 0.54);\n --_dialog-enter-animation-duration: var(--forge-dialog-enter-animation-duration, var(--forge-animation-duration-medium1, 250ms));\n --_dialog-enter-animation-easing: var(--forge-dialog-enter-animation-easing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_dialog-exit-animation-duration: var(--forge-dialog-exit-animation-duration, var(--forge-animation-duration-short2, 100ms));\n --_dialog-exit-animation-easing: var(--forge-dialog-exit-animation-easing, var(--forge-animation-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15)));\n --_dialog-zoom-opacity: var(--forge-dialog-zoom-opacity, 0);\n --_dialog-zoom-scale: var(--forge-dialog-zoom-scale, 0.8);\n --_dialog-fade-opacity: var(--forge-dialog-fade-opacity, 0);\n --_dialog-slide-opacity: var(--forge-dialog-slide-opacity, 0);\n --_dialog-slide-translate: var(--forge-dialog-slide-translate, 0 -30%);\n --_dialog-backdrop-opacity: var(--forge-dialog-backdrop-opacity, var(--forge-backdrop-opacity, 0.54));\n --_dialog-nonmodal-elevation: var(--forge-dialog-nonmodal-elevation, 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 --_dialog-fullscreen-enter-animation-duration: var(--forge-dialog-fullscreen-enter-animation-duration, var(--forge-animation-duration-medium1, 250ms));\n --_dialog-fullscreen-exit-animation-duration: var(--forge-dialog-fullscreen-exit-animation-duration, var(--forge-animation-duration-short2, 100ms));\n --_dialog-position-x: var(--forge-dialog-position-x, 0);\n --_dialog-position-y: var(--forge-dialog-position-y, 0);\n --_dialog-preset-sheet-enter-animation-duration: var(--forge-dialog-preset-sheet-enter-animation-duration, var(--forge-animation-duration-medium1, 250ms));\n --_dialog-preset-sheet-exit-animation-duration: var(--forge-dialog-preset-sheet-exit-animation-duration, var(--forge-animation-duration-short3, 150ms));\n --_backdrop-background: var(--forge-backdrop-background, #000);\n --_backdrop-opacity: var(--forge-backdrop-opacity, 0.54);\n --_backdrop-z-index: var(--forge-backdrop-z-index, var(--forge-z-index-backdrop, 7));\n --_backdrop-enter-animation-duration: var(--forge-backdrop-enter-animation-duration, var(--forge-animation-duration-short4, 200ms));\n --_backdrop-enter-animation-easing: var(--forge-backdrop-enter-animation-easing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_backdrop-exit-animation-duration: var(--forge-backdrop-exit-animation-duration, var(--forge-animation-duration-short1, 50ms));\n --_backdrop-exit-animation-easing: var(--forge-backdrop-exit-animation-easing, var(--forge-animation-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15)));\n --forge-theme-surface: var(--forge-theme-surface-bright, #ffffff);\n}\n\n.forge-dialog {\n position: fixed;\n inset: 0;\n z-index: var(--_dialog-z-index);\n background-color: transparent;\n color: inherit;\n border: none;\n width: auto;\n height: auto;\n padding: 0;\n margin: 0;\n overflow: visible;\n max-width: 100%;\n max-height: 100%;\n box-sizing: border-box;\n position: absolute;\n inset: 0;\n display: flex;\n background: var(--_dialog-background);\n box-shadow: var(--_dialog-elevation);\n z-index: var(--_dialog-z-index);\n overflow: hidden;\n border-radius: var(--_dialog-shape);\n margin-block-start: var(--_dialog-block-start-spacing);\n margin-block-end: var(--_dialog-block-end-spacing);\n margin-inline-start: var(--_dialog-inline-start-spacing);\n margin-inline-end: var(--_dialog-inline-end-spacing);\n padding: var(--_dialog-padding);\n width: var(--_dialog-width);\n height: var(--_dialog-height);\n min-width: var(--_dialog-min-width);\n max-width: var(--_dialog-max-width);\n min-height: var(--_dialog-min-height);\n max-height: var(--_dialog-max-height);\n box-sizing: border-box;\n animation-duration: var(--_dialog-exit-animation-duration);\n animation-timing-function: var(--_dialog-exit-animation-easing);\n position: fixed;\n transition-property: display, opacity, overlay, scale;\n transition-behavior: allow-discrete;\n}\n\n.forge-dialog > forge-scaffold {\n height: auto;\n}\n\n.forge-dialog--fullscreen {\n --_dialog-enter-animation-duration: var(--_dialog-fullscreen-enter-animation-duration);\n --_dialog-exit-animation-duration: var(--_dialog-fullscreen-exit-animation-duration);\n height: 100%;\n width: 100%;\n max-width: none;\n max-height: none;\n border-radius: 0;\n box-shadow: none;\n}\n\n.forge-dialog:not(:modal) {\n --_dialog-elevation: var(--_dialog-nonmodal-elevation);\n pointer-events: all;\n}\n\n.forge-dialog--moveable {\n user-select: none;\n transition-property: opacity;\n transition-duration: var(--_dialog-move-transition-duration);\n transition-timing-function: var(--_dialog-move-transition-easing);\n}\n\n.forge-dialog--moved {\n margin: 0;\n}\n\n.forge-dialog--moving {\n opacity: var(--_dialog-moving-opacity);\n}\n\n.forge-dialog__move-handle {\n fill: var(--_dialog-move-handle-color);\n height: var(--_dialog-move-handle-size);\n width: var(--_dialog-move-handle-size);\n margin: var(--_dialog-move-handle-spacing);\n touch-action: none;\n}\n\n.forge-dialog__move-handle:hover {\n cursor: var(--_dialog-move-handle-hover-cursor);\n}\n\n.forge-dialog__move-handle:active {\n cursor: var(--_dialog-move-handle-active-cursor);\n}\n\n.forge-dialog__move-handle-container {\n position: absolute;\n top: 0;\n z-index: 1;\n display: flex;\n justify-content: center;\n width: 100%;\n}\n\n.forge-dialog--top {\n --_dialog-block-start-spacing: var(--forge-dialog-block-start-spacing, 0);\n top: 0;\n bottom: auto;\n}\n\n.forge-dialog--top-right {\n --_dialog-spacing: var(--forge-dialog-spacing, 0);\n top: 0;\n left: auto;\n right: 0;\n bottom: auto;\n}\n\n.forge-dialog--top-left {\n --_dialog-spacing: var(--forge-dialog-spacing, 0);\n top: 0;\n left: 0;\n right: auto;\n bottom: auto;\n}\n\n.forge-dialog--bottom {\n --_dialog-block-end-spacing: var(--forge-dialog-block-end-spacing, 0);\n top: auto;\n bottom: 0;\n}\n\n.forge-dialog--bottom-right {\n --_dialog-spacing: var(--forge-dialog-spacing, 0);\n top: auto;\n left: auto;\n right: 0;\n bottom: 0;\n}\n\n.forge-dialog--bottom-left {\n --_dialog-spacing: var(--forge-dialog-spacing, 0);\n top: auto;\n left: 0;\n right: auto;\n bottom: 0;\n}\n\n.forge-dialog--right {\n --_dialog-spacing: var(--forge-dialog-spacing, 0);\n top: auto;\n left: auto;\n right: 0;\n bottom: auto;\n}\n\n.forge-dialog--left {\n --_dialog-spacing: var(--forge-dialog-spacing, 0);\n top: auto;\n left: 0;\n right: auto;\n bottom: auto;\n}\n\n.forge-dialog--custom {\n margin: 0;\n top: var(--_dialog-position-x);\n left: var(--_dialog-position-y);\n}\n\n.forge-dialog--bottom-sheet {\n --_dialog-enter-animation-duration: var(--_dialog-preset-sheet-enter-animation-duration);\n --_dialog-exit-animation-duration: var(--_dialog-preset-sheet-exit-animation-duration);\n --_dialog-max-width: var(--forge-dialog-max-width, none);\n --_dialog-max-height: var(--forge-dialog-max-height, none);\n inset: auto;\n display: inline-flex;\n bottom: 0;\n left: 0;\n right: 0;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n --_dialog-slide-translate: var(--forge-dialog-slide-translate, 0 100%);\n}\n\n.forge-dialog--bottom-sheet.forge-dialog {\n transition-property: display, opacity, overlay, translate;\n}\n\n.forge-dialog--bottom-sheet.forge-dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n .forge-dialog--bottom-sheet.forge-dialog[open] {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n}\n.forge-dialog--bottom-sheet.forge-dialog:not([open]) {\n opacity: var(--_dialog-slide-opacity);\n scale: 1;\n translate: var(--_dialog-slide-translate);\n}\n\n.forge-dialog--left-sheet {\n --_dialog-enter-animation-duration: var(--_dialog-preset-sheet-enter-animation-duration);\n --_dialog-exit-animation-duration: var(--_dialog-preset-sheet-exit-animation-duration);\n --_dialog-max-width: var(--forge-dialog-max-width, none);\n --_dialog-max-height: var(--forge-dialog-max-height, none);\n inset: auto;\n display: inline-flex;\n left: 0;\n bottom: 0;\n top: 0;\n height: 100%;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n --_dialog-slide-translate: var(--forge-dialog-slide-translate, -100% 0);\n}\n\n.forge-dialog--left-sheet.forge-dialog {\n transition-property: display, opacity, overlay, translate;\n}\n\n.forge-dialog--left-sheet.forge-dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n .forge-dialog--left-sheet.forge-dialog[open] {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n}\n.forge-dialog--left-sheet.forge-dialog:not([open]) {\n opacity: var(--_dialog-slide-opacity);\n scale: 1;\n translate: var(--_dialog-slide-translate);\n}\n\n.forge-dialog--right-sheet {\n --_dialog-enter-animation-duration: var(--_dialog-preset-sheet-enter-animation-duration);\n --_dialog-exit-animation-duration: var(--_dialog-preset-sheet-exit-animation-duration);\n --_dialog-max-width: var(--forge-dialog-max-width, none);\n --_dialog-max-height: var(--forge-dialog-max-height, none);\n inset: auto;\n display: inline-flex;\n right: 0;\n bottom: 0;\n top: 0;\n height: 100%;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n --_dialog-slide-translate: var(--forge-dialog-slide-translate, 100% 0);\n}\n\n.forge-dialog--right-sheet.forge-dialog {\n transition-property: display, opacity, overlay, translate;\n}\n\n.forge-dialog--right-sheet.forge-dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n .forge-dialog--right-sheet.forge-dialog[open] {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n}\n.forge-dialog--right-sheet.forge-dialog:not([open]) {\n opacity: var(--_dialog-slide-opacity);\n scale: 1;\n translate: var(--_dialog-slide-translate);\n}\n\n.forge-dialog--top-sheet {\n --_dialog-enter-animation-duration: var(--_dialog-preset-sheet-enter-animation-duration);\n --_dialog-exit-animation-duration: var(--_dialog-preset-sheet-exit-animation-duration);\n --_dialog-max-width: var(--forge-dialog-max-width, none);\n --_dialog-max-height: var(--forge-dialog-max-height, none);\n inset: auto;\n display: inline-flex;\n top: 0;\n left: 0;\n right: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n --_dialog-slide-translate: var(--forge-dialog-slide-translate, 0 -100%);\n}\n\n.forge-dialog--top-sheet.forge-dialog {\n transition-property: display, opacity, overlay, translate;\n}\n\n.forge-dialog--top-sheet.forge-dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n .forge-dialog--top-sheet.forge-dialog[open] {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n}\n.forge-dialog--top-sheet.forge-dialog:not([open]) {\n opacity: var(--_dialog-slide-opacity);\n scale: 1;\n translate: var(--_dialog-slide-translate);\n}\n\n.forge-dialog::backdrop {\n --forge-backdrop-opacity: var(--_backdrop-opacity);\n --forge-backdrop-enter-animation-duration: var(--_backdrop-enter-animation-duration);\n --forge-backdrop-enter-animation-easing: var(--_backdrop-enter-animation-easing);\n --forge-backdrop-exit-animation-duration: var(--_backdrop-exit-animation-duration);\n --forge-backdrop-exit-animation-easing: var(--_backdrop-exit-animation-easing);\n position: absolute;\n inset: 0;\n z-index: var(--_backdrop-z-index);\n background: var(--_backdrop-background);\n opacity: 0;\n animation-fill-mode: forwards;\n transition-property: display, opacity, overlay;\n}\n\n.forge-dialog[open] {\n opacity: 1;\n scale: 1;\n transition-duration: var(--_dialog-enter-animation-duration);\n transition-timing-function: var(--_dialog-enter-animation-easing);\n}\n\n@starting-style {\n .forge-dialog[open] {\n opacity: var(--_dialog-zoom-opacity);\n scale: var(--_dialog-zoom-scale);\n }\n}\n.forge-dialog[open]::backdrop {\n opacity: var(--_backdrop-opacity);\n transition-duration: var(--_backdrop-enter-animation-duration);\n transition-timing-function: var(--_backdrop-enter-animation-easing);\n}\n\n@starting-style {\n .forge-dialog[open]::backdrop {\n opacity: 0;\n }\n}\n.forge-dialog:not([open]) {\n animation-duration: var(--_dialog-enter-animation-duration);\n animation-timing-function: var(--_dialog-enter-animation-easing);\n display: none;\n opacity: var(--_dialog-zoom-opacity);\n scale: var(--_dialog-zoom-scale);\n transition-duration: var(--_dialog-exit-animation-duration);\n transition-timing-function: var(--_dialog-exit-animation-easing);\n}\n\n.forge-dialog:not([open])::backdrop {\n transition-duration: var(--_backdrop-exit-animation-duration);\n transition-timing-function: var(--_backdrop-exit-animation-easing);\n}\n\n.forge-dialog--animation-fade.forge-dialog {\n transition-property: display, opacity, overlay;\n}\n\n@starting-style {\n .forge-dialog--animation-fade.forge-dialog[open] {\n opacity: var(--_dialog-fade-opacity);\n }\n}\n.forge-dialog--animation-fade.forge-dialog:not([open]) {\n opacity: var(--_dialog-fade-opacity);\n scale: 1;\n}\n\n.forge-dialog--animation-slide.forge-dialog {\n transition-property: display, opacity, overlay, translate;\n}\n\n.forge-dialog--animation-slide.forge-dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n .forge-dialog--animation-slide.forge-dialog[open] {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n}\n.forge-dialog--animation-slide.forge-dialog:not([open]) {\n opacity: var(--_dialog-slide-opacity);\n scale: 1;\n translate: var(--_dialog-slide-translate);\n}\n\n.forge-dialog--animation-none {\n --_dialog-enter-animation-duration: var(--forge-dialog-enter-animation-duration, 0s);\n --_dialog-exit-animation-duration: var(--forge-dialog-exit-animation-duration, 0s);\n --_backdrop-enter-animation-duration: var(--forge-backdrop-enter-animation-duration, 0s);\n --_backdrop-exit-animation-duration: var(--forge-backdrop-exit-animation-duration, 0s);\n}\n\n@media (prefers-reduced-motion) {\n .forge-dialog.forge-dialog {\n transition-property: display, opacity, overlay;\n }\n @starting-style {\n .forge-dialog.forge-dialog[open] {\n opacity: var(--_dialog-fade-opacity);\n }\n }\n .forge-dialog.forge-dialog:not([open]) {\n opacity: var(--_dialog-fade-opacity);\n scale: 1;\n }\n}\n:host {\n display: contents;\n}\n\ndialog.forge-dialog:not(.forge-dialog--fullscreen) {\n height: 80vh;\n width: 80vw;\n border-radius: calc(var(--forge-shape-large, 8px) * var(--forge-shape-factor, 1));\n}";
1
+ const styles = "/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n@keyframes forge-dialog-zoom-in {\n from {\n opacity: var(--_dialog-zoom-opacity);\n scale: var(--_dialog-zoom-scale);\n }\n to {\n opacity: 1;\n scale: 1;\n }\n}\n@keyframes forge-dialog-zoom-out {\n from {\n opacity: 1;\n scale: 1;\n }\n to {\n opacity: var(--_dialog-zoom-opacity);\n scale: var(--_dialog-zoom-scale);\n }\n}\n@keyframes forge-dialog-fade-in {\n from {\n opacity: var(--_dialog-fade-opacity);\n }\n to {\n opacity: 1;\n }\n}\n@keyframes forge-dialog-fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: var(--_dialog-fade-opacity);\n }\n}\n@keyframes forge-dialog-slide-in {\n from {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n to {\n opacity: 1;\n translate: 0 0;\n }\n}\n@keyframes forge-dialog-slide-out {\n from {\n opacity: 1;\n translate: 0 0;\n }\n to {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n}\n.forge-dialog {\n --_dialog-background: var(--forge-dialog-background, var(--forge-theme-surface-bright, #ffffff));\n --_dialog-shape: var(--forge-dialog-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_dialog-elevation: var(--forge-dialog-elevation, 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12));\n --_dialog-spacing: var(--forge-dialog-spacing, auto);\n --_dialog-block-start-spacing: var(--forge-dialog-block-start-spacing, var(--_dialog-spacing));\n --_dialog-block-end-spacing: var(--forge-dialog-block-end-spacing, var(--_dialog-spacing));\n --_dialog-inline-start-spacing: var(--forge-dialog-inline-start-spacing, var(--_dialog-spacing));\n --_dialog-inline-end-spacing: var(--forge-dialog-inline-end-spacing, var(--_dialog-spacing));\n --_dialog-padding: var(--forge-dialog-padding, 0);\n --_dialog-width: var(--forge-dialog-width, fit-content);\n --_dialog-height: var(--forge-dialog-height, fit-content);\n --_dialog-min-width: var(--forge-dialog-min-width, 0);\n --_dialog-max-width: var(--forge-dialog-max-width, calc(100% - var(--forge-spacing-xxlarge, 48px)));\n --_dialog-min-height: var(--forge-dialog-min-height, 0);\n --_dialog-max-height: var(--forge-dialog-max-height, calc(100% - var(--forge-spacing-xxlarge, 48px)));\n --_dialog-z-index: var(--forge-dialog-z-index, var(--forge-z-index-dialog, 8));\n --_dialog-move-handle-color: var(--forge-dialog-move-handle-color, currentColor);\n --_dialog-move-handle-size: var(--forge-dialog-move-handle-size, 24px);\n --_dialog-move-handle-hover-cursor: var(--forge-dialog-move-handle-hover-cursor, grab);\n --_dialog-move-handle-active-cursor: var(--forge-dialog-move-handle-active-cursor, grabbing);\n --_dialog-move-handle-spacing: var(--forge-dialog-move-handle-spacing, calc(var(--forge-spacing-xxsmall, 4px) * -1) 0 0);\n --_dialog-move-transition-duration: var(--forge-dialog-move-transition-duration, var(--forge-animation-duration-short4, 200ms));\n --_dialog-move-transition-easing: var(--forge-dialog-move-transition-easing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_dialog-moving-opacity: var(--forge-dialog-moving-opacity, 0.54);\n --_dialog-enter-animation-duration: var(--forge-dialog-enter-animation-duration, var(--forge-animation-duration-medium1, 250ms));\n --_dialog-enter-animation-easing: var(--forge-dialog-enter-animation-easing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_dialog-exit-animation-duration: var(--forge-dialog-exit-animation-duration, var(--forge-animation-duration-short2, 100ms));\n --_dialog-exit-animation-easing: var(--forge-dialog-exit-animation-easing, var(--forge-animation-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15)));\n --_dialog-zoom-opacity: var(--forge-dialog-zoom-opacity, 0);\n --_dialog-zoom-scale: var(--forge-dialog-zoom-scale, 0.8);\n --_dialog-fade-opacity: var(--forge-dialog-fade-opacity, 0);\n --_dialog-slide-opacity: var(--forge-dialog-slide-opacity, 0);\n --_dialog-slide-translate: var(--forge-dialog-slide-translate, 0 -30%);\n --_dialog-backdrop-opacity: var(--forge-dialog-backdrop-opacity, var(--forge-backdrop-opacity, 0.54));\n --_dialog-nonmodal-elevation: var(--forge-dialog-nonmodal-elevation, 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 --_dialog-fullscreen-enter-animation-duration: var(--forge-dialog-fullscreen-enter-animation-duration, var(--forge-animation-duration-medium1, 250ms));\n --_dialog-fullscreen-exit-animation-duration: var(--forge-dialog-fullscreen-exit-animation-duration, var(--forge-animation-duration-short2, 100ms));\n --_dialog-position-x: var(--forge-dialog-position-x, 0);\n --_dialog-position-y: var(--forge-dialog-position-y, 0);\n --_dialog-preset-sheet-enter-animation-duration: var(--forge-dialog-preset-sheet-enter-animation-duration, var(--forge-animation-duration-medium1, 250ms));\n --_dialog-preset-sheet-exit-animation-duration: var(--forge-dialog-preset-sheet-exit-animation-duration, var(--forge-animation-duration-short3, 150ms));\n --_backdrop-background: var(--forge-backdrop-background, #000);\n --_backdrop-opacity: var(--forge-backdrop-opacity, 0.54);\n --_backdrop-z-index: var(--forge-backdrop-z-index, var(--forge-z-index-backdrop, 7));\n --_backdrop-enter-animation-duration: var(--forge-backdrop-enter-animation-duration, var(--forge-animation-duration-short4, 200ms));\n --_backdrop-enter-animation-easing: var(--forge-backdrop-enter-animation-easing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_backdrop-exit-animation-duration: var(--forge-backdrop-exit-animation-duration, var(--forge-animation-duration-short1, 50ms));\n --_backdrop-exit-animation-easing: var(--forge-backdrop-exit-animation-easing, var(--forge-animation-easing-emphasized-accelerate, cubic-bezier(0.3, 0, 0.8, 0.15)));\n --forge-theme-surface: var(--forge-theme-surface-bright, #ffffff);\n}\n\n.forge-dialog {\n position: fixed;\n inset: 0;\n z-index: var(--_dialog-z-index);\n background-color: transparent;\n color: inherit;\n border: none;\n width: auto;\n height: auto;\n padding: 0;\n margin: 0;\n overflow: visible;\n max-width: 100%;\n max-height: 100%;\n box-sizing: border-box;\n position: absolute;\n inset: 0;\n display: flex;\n background: var(--_dialog-background);\n box-shadow: var(--_dialog-elevation);\n z-index: var(--_dialog-z-index);\n overflow: hidden;\n border-radius: var(--_dialog-shape);\n margin-block-start: var(--_dialog-block-start-spacing);\n margin-block-end: var(--_dialog-block-end-spacing);\n margin-inline-start: var(--_dialog-inline-start-spacing);\n margin-inline-end: var(--_dialog-inline-end-spacing);\n padding: var(--_dialog-padding);\n width: var(--_dialog-width);\n height: var(--_dialog-height);\n min-width: var(--_dialog-min-width);\n max-width: var(--_dialog-max-width);\n min-height: var(--_dialog-min-height);\n max-height: var(--_dialog-max-height);\n box-sizing: border-box;\n animation-duration: var(--_dialog-exit-animation-duration);\n animation-timing-function: var(--_dialog-exit-animation-easing);\n position: fixed;\n transition-property: display, opacity, overlay, scale;\n transition-behavior: allow-discrete;\n}\n\n.forge-dialog > forge-scaffold {\n height: auto;\n}\n\n.forge-dialog--fullscreen {\n --_dialog-enter-animation-duration: var(--_dialog-fullscreen-enter-animation-duration);\n --_dialog-exit-animation-duration: var(--_dialog-fullscreen-exit-animation-duration);\n height: 100%;\n width: 100%;\n max-width: none;\n max-height: none;\n border-radius: 0;\n box-shadow: none;\n}\n\n.forge-dialog:not(:modal) {\n --_dialog-elevation: var(--_dialog-nonmodal-elevation);\n pointer-events: all;\n}\n\n.forge-dialog--moveable {\n user-select: none;\n transition-property: opacity;\n transition-duration: var(--_dialog-move-transition-duration);\n transition-timing-function: var(--_dialog-move-transition-easing);\n}\n\n.forge-dialog--moved {\n margin: 0;\n}\n\n.forge-dialog--moving {\n opacity: var(--_dialog-moving-opacity);\n}\n\n.forge-dialog__move-handle {\n fill: var(--_dialog-move-handle-color);\n height: var(--_dialog-move-handle-size);\n width: var(--_dialog-move-handle-size);\n margin: var(--_dialog-move-handle-spacing);\n touch-action: none;\n}\n\n.forge-dialog__move-handle:hover {\n cursor: var(--_dialog-move-handle-hover-cursor);\n}\n\n.forge-dialog__move-handle:active {\n cursor: var(--_dialog-move-handle-active-cursor);\n}\n\n.forge-dialog__move-handle-container {\n position: absolute;\n top: 0;\n z-index: 1;\n display: flex;\n justify-content: center;\n width: 100%;\n}\n\n.forge-dialog--top {\n --_dialog-block-start-spacing: var(--forge-dialog-block-start-spacing, 0);\n top: 0;\n bottom: auto;\n}\n\n.forge-dialog--top-right {\n --_dialog-spacing: var(--forge-dialog-spacing, 0);\n top: 0;\n left: auto;\n right: 0;\n bottom: auto;\n}\n\n.forge-dialog--top-left {\n --_dialog-spacing: var(--forge-dialog-spacing, 0);\n top: 0;\n left: 0;\n right: auto;\n bottom: auto;\n}\n\n.forge-dialog--bottom {\n --_dialog-block-end-spacing: var(--forge-dialog-block-end-spacing, 0);\n top: auto;\n bottom: 0;\n}\n\n.forge-dialog--bottom-right {\n --_dialog-spacing: var(--forge-dialog-spacing, 0);\n top: auto;\n left: auto;\n right: 0;\n bottom: 0;\n}\n\n.forge-dialog--bottom-left {\n --_dialog-spacing: var(--forge-dialog-spacing, 0);\n top: auto;\n left: 0;\n right: auto;\n bottom: 0;\n}\n\n.forge-dialog--right {\n --_dialog-spacing: var(--forge-dialog-spacing, 0);\n top: auto;\n left: auto;\n right: 0;\n bottom: auto;\n}\n\n.forge-dialog--left {\n --_dialog-spacing: var(--forge-dialog-spacing, 0);\n top: auto;\n left: 0;\n right: auto;\n bottom: auto;\n}\n\n.forge-dialog--custom {\n margin: 0;\n top: var(--_dialog-position-x);\n left: var(--_dialog-position-y);\n}\n\n.forge-dialog--bottom-sheet {\n --_dialog-enter-animation-duration: var(--_dialog-preset-sheet-enter-animation-duration);\n --_dialog-exit-animation-duration: var(--_dialog-preset-sheet-exit-animation-duration);\n --_dialog-max-width: var(--forge-dialog-max-width, none);\n --_dialog-max-height: var(--forge-dialog-max-height, none);\n inset: auto;\n display: inline-flex;\n bottom: 0;\n left: 0;\n right: 0;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n --_dialog-slide-translate: var(--forge-dialog-slide-translate, 0 100%);\n}\n\n.forge-dialog--bottom-sheet.forge-dialog {\n transition-property: display, opacity, overlay, translate;\n}\n\n.forge-dialog--bottom-sheet.forge-dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n .forge-dialog--bottom-sheet.forge-dialog[open] {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n}\n.forge-dialog--bottom-sheet.forge-dialog:not([open]) {\n opacity: var(--_dialog-slide-opacity);\n scale: 1;\n translate: var(--_dialog-slide-translate);\n}\n\n.forge-dialog--left-sheet {\n --_dialog-enter-animation-duration: var(--_dialog-preset-sheet-enter-animation-duration);\n --_dialog-exit-animation-duration: var(--_dialog-preset-sheet-exit-animation-duration);\n --_dialog-max-width: var(--forge-dialog-max-width, none);\n --_dialog-max-height: var(--forge-dialog-max-height, none);\n inset: auto;\n display: inline-flex;\n left: 0;\n bottom: 0;\n top: 0;\n height: 100%;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n --_dialog-slide-translate: var(--forge-dialog-slide-translate, -100% 0);\n}\n\n.forge-dialog--left-sheet.forge-dialog {\n transition-property: display, opacity, overlay, translate;\n}\n\n.forge-dialog--left-sheet.forge-dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n .forge-dialog--left-sheet.forge-dialog[open] {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n}\n.forge-dialog--left-sheet.forge-dialog:not([open]) {\n opacity: var(--_dialog-slide-opacity);\n scale: 1;\n translate: var(--_dialog-slide-translate);\n}\n\n.forge-dialog--right-sheet {\n --_dialog-enter-animation-duration: var(--_dialog-preset-sheet-enter-animation-duration);\n --_dialog-exit-animation-duration: var(--_dialog-preset-sheet-exit-animation-duration);\n --_dialog-max-width: var(--forge-dialog-max-width, none);\n --_dialog-max-height: var(--forge-dialog-max-height, none);\n inset: auto;\n display: inline-flex;\n right: 0;\n bottom: 0;\n top: 0;\n height: 100%;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n --_dialog-slide-translate: var(--forge-dialog-slide-translate, 100% 0);\n}\n\n.forge-dialog--right-sheet.forge-dialog {\n transition-property: display, opacity, overlay, translate;\n}\n\n.forge-dialog--right-sheet.forge-dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n .forge-dialog--right-sheet.forge-dialog[open] {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n}\n.forge-dialog--right-sheet.forge-dialog:not([open]) {\n opacity: var(--_dialog-slide-opacity);\n scale: 1;\n translate: var(--_dialog-slide-translate);\n}\n\n.forge-dialog--top-sheet {\n --_dialog-enter-animation-duration: var(--_dialog-preset-sheet-enter-animation-duration);\n --_dialog-exit-animation-duration: var(--_dialog-preset-sheet-exit-animation-duration);\n --_dialog-max-width: var(--forge-dialog-max-width, none);\n --_dialog-max-height: var(--forge-dialog-max-height, none);\n inset: auto;\n display: inline-flex;\n top: 0;\n left: 0;\n right: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n --_dialog-slide-translate: var(--forge-dialog-slide-translate, 0 -100%);\n}\n\n.forge-dialog--top-sheet.forge-dialog {\n transition-property: display, opacity, overlay, translate;\n}\n\n.forge-dialog--top-sheet.forge-dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n .forge-dialog--top-sheet.forge-dialog[open] {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n}\n.forge-dialog--top-sheet.forge-dialog:not([open]) {\n opacity: var(--_dialog-slide-opacity);\n scale: 1;\n translate: var(--_dialog-slide-translate);\n}\n\n.forge-dialog::backdrop {\n --forge-backdrop-opacity: var(--_backdrop-opacity);\n --forge-backdrop-enter-animation-duration: var(--_backdrop-enter-animation-duration);\n --forge-backdrop-enter-animation-easing: var(--_backdrop-enter-animation-easing);\n --forge-backdrop-exit-animation-duration: var(--_backdrop-exit-animation-duration);\n --forge-backdrop-exit-animation-easing: var(--_backdrop-exit-animation-easing);\n position: absolute;\n inset: 0;\n z-index: var(--_backdrop-z-index);\n background: var(--_backdrop-background);\n opacity: 0;\n animation-fill-mode: forwards;\n transition-property: display, opacity, overlay;\n}\n\n.forge-dialog[open] {\n opacity: 1;\n scale: 1;\n transition-duration: var(--_dialog-enter-animation-duration);\n transition-timing-function: var(--_dialog-enter-animation-easing);\n}\n\n@starting-style {\n .forge-dialog[open] {\n opacity: var(--_dialog-zoom-opacity);\n scale: var(--_dialog-zoom-scale);\n }\n}\n.forge-dialog[open]::backdrop {\n opacity: var(--_backdrop-opacity);\n transition-duration: var(--_backdrop-enter-animation-duration);\n transition-timing-function: var(--_backdrop-enter-animation-easing);\n}\n\n@starting-style {\n .forge-dialog[open]::backdrop {\n opacity: 0;\n }\n}\n.forge-dialog:not([open]) {\n animation-duration: var(--_dialog-enter-animation-duration);\n animation-timing-function: var(--_dialog-enter-animation-easing);\n display: none;\n opacity: var(--_dialog-zoom-opacity);\n scale: var(--_dialog-zoom-scale);\n transition-duration: var(--_dialog-exit-animation-duration);\n transition-timing-function: var(--_dialog-exit-animation-easing);\n}\n\n.forge-dialog:not([open])::backdrop {\n transition-duration: var(--_backdrop-exit-animation-duration);\n transition-timing-function: var(--_backdrop-exit-animation-easing);\n}\n\n.forge-dialog--animation-fade.forge-dialog {\n transition-property: display, opacity, overlay;\n}\n\n@starting-style {\n .forge-dialog--animation-fade.forge-dialog[open] {\n opacity: var(--_dialog-fade-opacity);\n }\n}\n.forge-dialog--animation-fade.forge-dialog:not([open]) {\n opacity: var(--_dialog-fade-opacity);\n scale: 1;\n}\n\n.forge-dialog--animation-slide.forge-dialog {\n transition-property: display, opacity, overlay, translate;\n}\n\n.forge-dialog--animation-slide.forge-dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n .forge-dialog--animation-slide.forge-dialog[open] {\n opacity: var(--_dialog-slide-opacity);\n translate: var(--_dialog-slide-translate);\n }\n}\n.forge-dialog--animation-slide.forge-dialog:not([open]) {\n opacity: var(--_dialog-slide-opacity);\n scale: 1;\n translate: var(--_dialog-slide-translate);\n}\n\n.forge-dialog--animation-none {\n --_dialog-enter-animation-duration: var(--forge-dialog-enter-animation-duration, 0s);\n --_dialog-exit-animation-duration: var(--forge-dialog-exit-animation-duration, 0s);\n --_backdrop-enter-animation-duration: var(--forge-backdrop-enter-animation-duration, 0s);\n --_backdrop-exit-animation-duration: var(--forge-backdrop-exit-animation-duration, 0s);\n}\n\n@media (prefers-reduced-motion) {\n .forge-dialog.forge-dialog {\n transition-property: display, opacity, overlay;\n }\n @starting-style {\n .forge-dialog.forge-dialog[open] {\n opacity: var(--_dialog-fade-opacity);\n }\n }\n .forge-dialog.forge-dialog:not([open]) {\n opacity: var(--_dialog-fade-opacity);\n scale: 1;\n }\n}\n:host {\n display: contents;\n}\n\ndialog.forge-dialog:not(.forge-dialog--fullscreen) {\n height: var(--forge-ai-modal-height, 80vh);\n width: var(--forge-ai-modal-width, 80vw);\n border-radius: calc(var(--forge-shape-large, 8px) * var(--forge-shape-factor, 1));\n}";
2
2
  export {
3
3
  styles as default
4
4
  };