@tylertech/forge-ai 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +3 -0
- package/custom-elements.json +4963 -0
- package/dist/ai-actions-toolbar/ai-actions-toolbar.d.ts +25 -0
- package/dist/ai-actions-toolbar/ai-actions-toolbar.mjs +74 -0
- package/dist/ai-actions-toolbar/ai-actions-toolbar.scss.mjs +4 -0
- package/dist/ai-actions-toolbar/index.d.ts +1 -0
- package/dist/ai-actions-toolbar/index.mjs +5 -0
- package/dist/ai-artifact/ai-artifact.d.ts +20 -0
- package/dist/ai-artifact/ai-artifact.mjs +39 -0
- package/dist/ai-artifact/ai-artifact.scss.mjs +4 -0
- package/dist/ai-artifact/index.d.ts +1 -0
- package/dist/ai-artifact/index.mjs +5 -0
- package/dist/ai-button/ai-button.d.ts +21 -0
- package/dist/ai-button/ai-button.mjs +67 -0
- package/dist/ai-button/ai-button.scss.mjs +4 -0
- package/dist/ai-button/index.d.ts +1 -0
- package/dist/ai-button/index.mjs +5 -0
- package/dist/ai-chain-of-thought/ai-chain-of-thought.d.ts +17 -0
- package/dist/ai-chain-of-thought/ai-chain-of-thought.mjs +45 -0
- package/dist/ai-chain-of-thought/ai-chain-of-thought.scss.mjs +4 -0
- package/dist/ai-chain-of-thought/index.d.ts +5 -0
- package/dist/ai-chain-of-thought/index.mjs +17 -0
- package/dist/ai-chain-of-thought/thought-base/index.d.ts +1 -0
- package/dist/ai-chain-of-thought/thought-base/index.mjs +5 -0
- package/dist/ai-chain-of-thought/thought-base/thought-base.d.ts +20 -0
- package/dist/ai-chain-of-thought/thought-base/thought-base.mjs +43 -0
- package/dist/ai-chain-of-thought/thought-base/thought-base.scss.mjs +4 -0
- package/dist/ai-chain-of-thought/thought-detail/index.d.ts +1 -0
- package/dist/ai-chain-of-thought/thought-detail/index.mjs +5 -0
- package/dist/ai-chain-of-thought/thought-detail/thought-detail.d.ts +14 -0
- package/dist/ai-chain-of-thought/thought-detail/thought-detail.mjs +34 -0
- package/dist/ai-chain-of-thought/thought-detail/thought-detail.scss.mjs +4 -0
- package/dist/ai-chain-of-thought/thought-image/index.d.ts +1 -0
- package/dist/ai-chain-of-thought/thought-image/index.mjs +5 -0
- package/dist/ai-chain-of-thought/thought-image/thought-image.d.ts +16 -0
- package/dist/ai-chain-of-thought/thought-image/thought-image.mjs +43 -0
- package/dist/ai-chain-of-thought/thought-image/thought-image.scss.mjs +4 -0
- package/dist/ai-chain-of-thought/thought-search-result/index.d.ts +1 -0
- package/dist/ai-chain-of-thought/thought-search-result/index.mjs +5 -0
- package/dist/ai-chain-of-thought/thought-search-result/thought-search-result.d.ts +22 -0
- package/dist/ai-chain-of-thought/thought-search-result/thought-search-result.mjs +62 -0
- package/dist/ai-chain-of-thought/thought-search-result/thought-search-result.scss.mjs +4 -0
- package/dist/ai-chat-header/ai-chat-header.d.ts +54 -0
- package/dist/ai-chat-header/ai-chat-header.mjs +198 -0
- package/dist/ai-chat-header/ai-chat-header.scss.mjs +4 -0
- package/dist/ai-chat-header/index.d.ts +1 -0
- package/dist/ai-chat-header/index.mjs +5 -0
- package/dist/ai-chat-interface/ai-chat-interface.d.ts +38 -0
- package/dist/ai-chat-interface/ai-chat-interface.mjs +117 -0
- package/dist/ai-chat-interface/ai-chat-interface.scss.mjs +4 -0
- package/dist/ai-chat-interface/index.d.ts +1 -0
- package/dist/ai-chat-interface/index.mjs +5 -0
- package/dist/ai-dialog/ai-dialog.d.ts +56 -0
- package/dist/ai-dialog/ai-dialog.mjs +270 -0
- package/dist/ai-dialog/ai-dialog.scss.mjs +4 -0
- package/dist/ai-dialog/index.d.ts +1 -0
- package/dist/ai-dialog/index.mjs +5 -0
- package/dist/ai-dropdown-menu/ai-dropdown-menu-item-group.d.ts +26 -0
- package/dist/ai-dropdown-menu/ai-dropdown-menu-item-group.mjs +80 -0
- package/dist/ai-dropdown-menu/ai-dropdown-menu-item-group.scss.mjs +4 -0
- package/dist/ai-dropdown-menu/ai-dropdown-menu-item.d.ts +133 -0
- package/dist/ai-dropdown-menu/ai-dropdown-menu-item.mjs +335 -0
- package/dist/ai-dropdown-menu/ai-dropdown-menu-item.scss.mjs +4 -0
- package/dist/ai-dropdown-menu/ai-dropdown-menu-separator.d.ts +18 -0
- package/dist/ai-dropdown-menu/ai-dropdown-menu-separator.mjs +26 -0
- package/dist/ai-dropdown-menu/ai-dropdown-menu-separator.scss.mjs +4 -0
- package/dist/ai-dropdown-menu/ai-dropdown-menu.d.ts +143 -0
- package/dist/ai-dropdown-menu/ai-dropdown-menu.mjs +327 -0
- package/dist/ai-dropdown-menu/ai-dropdown-menu.scss.mjs +4 -0
- package/dist/ai-dropdown-menu/index.d.ts +4 -0
- package/dist/ai-dropdown-menu/index.mjs +10 -0
- package/dist/ai-dropdown-menu/navigation-controller.d.ts +79 -0
- package/dist/ai-dropdown-menu/navigation-controller.mjs +205 -0
- package/dist/ai-dropdown-menu/selection-manager.d.ts +145 -0
- package/dist/ai-dropdown-menu/selection-manager.mjs +183 -0
- package/dist/ai-embedded-chat/ai-embedded-chat.d.ts +47 -0
- package/dist/ai-embedded-chat/ai-embedded-chat.mjs +139 -0
- package/dist/ai-embedded-chat/ai-embedded-chat.scss.mjs +4 -0
- package/dist/ai-embedded-chat/index.d.ts +1 -0
- package/dist/ai-embedded-chat/index.mjs +5 -0
- package/dist/ai-empty-state/ai-empty-state.d.ts +19 -0
- package/dist/ai-empty-state/ai-empty-state.mjs +136 -0
- package/dist/ai-empty-state/ai-empty-state.scss.mjs +4 -0
- package/dist/ai-empty-state/index.d.ts +1 -0
- package/dist/ai-empty-state/index.mjs +5 -0
- package/dist/ai-fab/ai-fab.d.ts +23 -0
- package/dist/ai-fab/ai-fab.mjs +75 -0
- package/dist/ai-fab/ai-fab.scss.mjs +4 -0
- package/dist/ai-fab/index.d.ts +1 -0
- package/dist/ai-fab/index.mjs +5 -0
- package/dist/ai-file-picker/ai-file-picker.d.ts +77 -0
- package/dist/ai-file-picker/ai-file-picker.mjs +176 -0
- package/dist/ai-file-picker/ai-file-picker.scss.mjs +4 -0
- package/dist/ai-file-picker/index.d.ts +1 -0
- package/dist/ai-file-picker/index.mjs +4 -0
- package/dist/ai-floating-chat/ai-floating-chat.d.ts +65 -0
- package/dist/ai-floating-chat/ai-floating-chat.mjs +153 -0
- package/dist/ai-floating-chat/ai-floating-chat.scss.mjs +4 -0
- package/dist/ai-floating-chat/index.d.ts +1 -0
- package/dist/ai-floating-chat/index.mjs +5 -0
- package/dist/ai-gradient-container/ai-gradient-container.d.ts +26 -0
- package/dist/ai-gradient-container/ai-gradient-container.mjs +61 -0
- package/dist/ai-gradient-container/ai-gradient-container.scss.mjs +4 -0
- package/dist/ai-gradient-container/index.d.ts +1 -0
- package/dist/ai-gradient-container/index.mjs +5 -0
- package/dist/ai-icon/ai-icon.d.ts +22 -0
- package/dist/ai-icon/ai-icon.mjs +71 -0
- package/dist/ai-icon/ai-icon.scss.mjs +4 -0
- package/dist/ai-icon/index.d.ts +1 -0
- package/dist/ai-icon/index.mjs +5 -0
- package/dist/ai-modal/ai-modal.d.ts +49 -0
- package/dist/ai-modal/ai-modal.mjs +132 -0
- package/dist/ai-modal/ai-modal.scss.mjs +4 -0
- package/dist/ai-modal/index.d.ts +1 -0
- package/dist/ai-modal/index.mjs +4 -0
- package/dist/ai-prompt/ai-prompt.d.ts +42 -0
- package/dist/ai-prompt/ai-prompt.mjs +123 -0
- package/dist/ai-prompt/ai-prompt.scss.mjs +4 -0
- package/dist/ai-prompt/index.d.ts +1 -0
- package/dist/ai-prompt/index.mjs +5 -0
- package/dist/ai-prompt/prompt-button/index.d.ts +1 -0
- package/dist/ai-prompt/prompt-button/index.mjs +5 -0
- package/dist/ai-prompt/prompt-button/prompt-button.d.ts +16 -0
- package/dist/ai-prompt/prompt-button/prompt-button.mjs +40 -0
- package/dist/ai-prompt/prompt-button/prompt-button.scss.mjs +4 -0
- package/dist/ai-reasoning/ai-reasoning.d.ts +17 -0
- package/dist/ai-reasoning/ai-reasoning.mjs +44 -0
- package/dist/ai-reasoning/ai-reasoning.scss.mjs +4 -0
- package/dist/ai-reasoning/index.d.ts +2 -0
- package/dist/ai-reasoning/index.mjs +8 -0
- package/dist/ai-reasoning/reasoning-content/index.d.ts +1 -0
- package/dist/ai-reasoning/reasoning-content/index.mjs +5 -0
- package/dist/ai-reasoning/reasoning-content/reasoning-content.d.ts +22 -0
- package/dist/ai-reasoning/reasoning-content/reasoning-content.mjs +90 -0
- package/dist/ai-reasoning/reasoning-content/reasoning-content.scss.mjs +4 -0
- package/dist/ai-reasoning-header/ai-reasoning-header.d.ts +24 -0
- package/dist/ai-reasoning-header/ai-reasoning-header.mjs +68 -0
- package/dist/ai-reasoning-header/ai-reasoning-header.scss.mjs +4 -0
- package/dist/ai-reasoning-header/index.d.ts +1 -0
- package/dist/ai-reasoning-header/index.mjs +5 -0
- package/dist/ai-response-message/ai-response-message.d.ts +40 -0
- package/dist/ai-response-message/ai-response-message.mjs +137 -0
- package/dist/ai-response-message/ai-response-message.scss.mjs +4 -0
- package/dist/ai-response-message/index.d.ts +1 -0
- package/dist/ai-response-message/index.mjs +5 -0
- package/dist/ai-sidebar/ai-sidebar.d.ts +44 -0
- package/dist/ai-sidebar/ai-sidebar.mjs +105 -0
- package/dist/ai-sidebar/ai-sidebar.scss.mjs +4 -0
- package/dist/ai-sidebar/index.d.ts +1 -0
- package/dist/ai-sidebar/index.mjs +5 -0
- package/dist/ai-sidebar-chat/ai-sidebar-chat.d.ts +64 -0
- package/dist/ai-sidebar-chat/ai-sidebar-chat.mjs +170 -0
- package/dist/ai-sidebar-chat/ai-sidebar-chat.scss.mjs +4 -0
- package/dist/ai-sidebar-chat/index.d.ts +1 -0
- package/dist/ai-sidebar-chat/index.mjs +5 -0
- package/dist/ai-suggestions/ai-suggestions.d.ts +39 -0
- package/dist/ai-suggestions/ai-suggestions.mjs +96 -0
- package/dist/ai-suggestions/ai-suggestions.scss.mjs +4 -0
- package/dist/ai-suggestions/index.d.ts +1 -0
- package/dist/ai-suggestions/index.mjs +5 -0
- package/dist/ai-threads/ai-threads.d.ts +48 -0
- package/dist/ai-threads/ai-threads.mjs +203 -0
- package/dist/ai-threads/ai-threads.scss.mjs +4 -0
- package/dist/ai-threads/index.d.ts +1 -0
- package/dist/ai-threads/index.mjs +5 -0
- package/dist/ai-user-message/ai-user-message.d.ts +15 -0
- package/dist/ai-user-message/ai-user-message.mjs +43 -0
- package/dist/ai-user-message/ai-user-message.scss.mjs +4 -0
- package/dist/ai-user-message/index.d.ts +1 -0
- package/dist/ai-user-message/index.mjs +5 -0
- package/dist/ai-voice-input/ai-voice-input.d.ts +68 -0
- package/dist/ai-voice-input/ai-voice-input.mjs +107 -0
- package/dist/ai-voice-input/ai-voice-input.scss.mjs +4 -0
- package/dist/ai-voice-input/index.d.ts +1 -0
- package/dist/ai-voice-input/index.mjs +5 -0
- package/dist/core/drag-controller.d.ts +66 -0
- package/dist/core/drag-controller.mjs +219 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.mjs +4 -0
- package/dist/core/overlay/index.d.ts +1 -0
- package/dist/core/overlay/index.mjs +4 -0
- package/dist/core/overlay/overlay.d.ts +61 -0
- package/dist/core/overlay/overlay.mjs +142 -0
- package/dist/core/overlay/overlay.scss.mjs +4 -0
- package/dist/core/popover/index.d.ts +1 -0
- package/dist/core/popover/index.mjs +4 -0
- package/dist/core/popover/popover.d.ts +56 -0
- package/dist/core/popover/popover.mjs +71 -0
- package/dist/core/popover/popover.scss.mjs +4 -0
- package/dist/core/tooltip/index.d.ts +1 -0
- package/dist/core/tooltip/index.mjs +4 -0
- package/dist/core/tooltip/tooltip.d.ts +91 -0
- package/dist/core/tooltip/tooltip.mjs +243 -0
- package/dist/core/tooltip/tooltip.scss.mjs +4 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.mjs +98 -0
- package/dist/utils.d.ts +14 -0
- package/dist/utils.mjs +22 -0
- package/package.json +122 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { unsafeCSS, LitElement, html } from "lit";
|
|
2
|
+
import { customElement } from "lit/decorators.js";
|
|
3
|
+
import styles from "./ai-dropdown-menu-separator.scss.mjs";
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
6
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
7
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
8
|
+
if (decorator = decorators[i])
|
|
9
|
+
result = decorator(result) || result;
|
|
10
|
+
return result;
|
|
11
|
+
};
|
|
12
|
+
let ForgeAiDropdownMenuSeparatorComponent = class extends LitElement {
|
|
13
|
+
connectedCallback() {
|
|
14
|
+
super.connectedCallback();
|
|
15
|
+
}
|
|
16
|
+
render() {
|
|
17
|
+
return html`<div class="forge-divider" role="separator"></div>`;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
ForgeAiDropdownMenuSeparatorComponent.styles = unsafeCSS(styles);
|
|
21
|
+
ForgeAiDropdownMenuSeparatorComponent = __decorateClass([
|
|
22
|
+
customElement("forge-ai-dropdown-menu-separator")
|
|
23
|
+
], ForgeAiDropdownMenuSeparatorComponent);
|
|
24
|
+
export {
|
|
25
|
+
ForgeAiDropdownMenuSeparatorComponent
|
|
26
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const styles = "/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n.forge-divider {\n --_divider-color: var(--forge-divider-color, var(--forge-theme-outline, #e0e0e0));\n --_divider-width: var(--forge-divider-width, var(--forge-border-thin, 1px));\n --_divider-border-style: var(--forge-divider-border-style, solid);\n --_divider-margin: var(--forge-divider-margin, 0);\n}\n\n.forge-divider {\n display: block;\n margin: var(--_divider-margin);\n border: none;\n border-bottom-color: var(--_divider-color);\n border-bottom-width: var(--_divider-width);\n border-bottom-style: var(--_divider-border-style);\n height: 0;\n}\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: contents;\n}\n\n.forge-divider {\n margin: var(--forge-spacing-xsmall, 8px) 0;\n}";
|
|
2
|
+
export {
|
|
3
|
+
styles as default
|
|
4
|
+
};
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { LitElement, TemplateResult } from 'lit';
|
|
2
|
+
import { DropdownChangeEventDetail, DropdownMenuSelectionMode } from './selection-manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* Custom events for the dropdown menu component
|
|
5
|
+
*/
|
|
6
|
+
export interface DropdownMenuEvents {
|
|
7
|
+
'forge-ai-dropdown-menu-change': CustomEvent<DropdownChangeEventDetail>;
|
|
8
|
+
'forge-ai-dropdown-menu-open': CustomEvent<{
|
|
9
|
+
timestamp: number;
|
|
10
|
+
}>;
|
|
11
|
+
'forge-ai-dropdown-menu-close': CustomEvent<{
|
|
12
|
+
timestamp: number;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
declare global {
|
|
16
|
+
interface HTMLElementTagNameMap {
|
|
17
|
+
'forge-ai-dropdown-menu': ForgeAiDropdownMenuComponent;
|
|
18
|
+
}
|
|
19
|
+
interface HTMLElementEventMap extends DropdownMenuEvents {
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export type DropdownMenuVariant = 'button' | 'icon-button';
|
|
23
|
+
/**
|
|
24
|
+
* @summary An AI dropdown menu component with advanced selection modes and submenu support.
|
|
25
|
+
*
|
|
26
|
+
* @description
|
|
27
|
+
* A comprehensive dropdown menu component that provides flexible selection modes,
|
|
28
|
+
* keyboard navigation, accessibility features, and nested submenu support.
|
|
29
|
+
*
|
|
30
|
+
* ## Features
|
|
31
|
+
* - **Multiple Selection Modes**: 'none' (actions), 'single' (radio), 'multi' (checkbox)
|
|
32
|
+
* - **Keyboard Navigation**: Full keyboard support with arrow keys, Enter, Space, Escape
|
|
33
|
+
* - **Submenu Support**: Nested dropdowns with configurable trigger behavior
|
|
34
|
+
* - **Accessibility**: Complete ARIA implementation with screen reader support
|
|
35
|
+
* - **Type Safety**: Strongly typed events with mode-specific event details
|
|
36
|
+
* - **Customizable**: CSS custom properties for theming and configuration
|
|
37
|
+
*
|
|
38
|
+
* ## Selection Modes
|
|
39
|
+
* - **'none'**: Items act as actions only (menuitem role) - no persistent state
|
|
40
|
+
* - **'single'**: Single selection with radio button behavior (menuitemradio role)
|
|
41
|
+
* - **'multi'**: Multiple selection with checkbox behavior (menuitemcheckbox role)
|
|
42
|
+
*
|
|
43
|
+
* ## Events
|
|
44
|
+
* - **forge-ai-dropdown-menu-change**: Fired when selection changes with type-safe details
|
|
45
|
+
* - **forge-ai-dropdown-menu-open**: Fired when dropdown opens
|
|
46
|
+
* - **forge-ai-dropdown-menu-close**: Fired when dropdown closes
|
|
47
|
+
*
|
|
48
|
+
* @cssprop --ai-dropdown-menu-min-width - Minimum width of the dropdown menu.
|
|
49
|
+
* @cssprop --ai-dropdown-menu-max-width - Maximum width of the dropdown menu.
|
|
50
|
+
* @cssprop --ai-dropdown-menu-max-height - Maximum height of the dropdown menu.
|
|
51
|
+
* @cssprop --ai-dropdown-menu-padding - Padding inside the dropdown menu.
|
|
52
|
+
* @cssprop --ai-dropdown-menu-trigger-width - The width of the trigger button.
|
|
53
|
+
* @cssprop --ai-dropdown-menu-trigger-height - The height of the trigger button.
|
|
54
|
+
*
|
|
55
|
+
* @slot - The default slot for dropdown menu items, item groups, and separators.
|
|
56
|
+
* @slot header - The header content displayed at the top of the dropdown menu.
|
|
57
|
+
* @slot trigger-content - The content of the trigger button (text or icon) when no selection is made.
|
|
58
|
+
* @slot selected-text - Custom content for the trigger button when selections are made (overrides default selection text).
|
|
59
|
+
* @slot start - The start icon slot for additional trigger button content.
|
|
60
|
+
* @slot end - The end icon slot for additional trigger button content.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```html
|
|
64
|
+
* <!-- Basic dropdown with single selection -->
|
|
65
|
+
* <forge-ai-dropdown-menu selection-mode="single">
|
|
66
|
+
* <forge-ai-dropdown-menu-item value="option1">Option 1</forge-ai-dropdown-menu-item>
|
|
67
|
+
* <forge-ai-dropdown-menu-item value="option2">Option 2</forge-ai-dropdown-menu-item>
|
|
68
|
+
* </forge-ai-dropdown-menu>
|
|
69
|
+
*
|
|
70
|
+
* <!-- Dropdown with submenu -->
|
|
71
|
+
* <forge-ai-dropdown-menu>
|
|
72
|
+
* <forge-ai-dropdown-menu-item value="parent">
|
|
73
|
+
* Parent Item
|
|
74
|
+
* <forge-ai-dropdown-menu slot="submenu">
|
|
75
|
+
* <forge-ai-dropdown-menu-item value="child1">Child 1</forge-ai-dropdown-menu-item>
|
|
76
|
+
* <forge-ai-dropdown-menu-item value="child2">Child 2</forge-ai-dropdown-menu-item>
|
|
77
|
+
* </forge-ai-dropdown-menu>
|
|
78
|
+
* </forge-ai-dropdown-menu-item>
|
|
79
|
+
* </forge-ai-dropdown-menu>
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare class ForgeAiDropdownMenuComponent extends LitElement {
|
|
83
|
+
#private;
|
|
84
|
+
static styles: import('lit').CSSResult;
|
|
85
|
+
/**
|
|
86
|
+
* The variant of the dropdown menu trigger button.
|
|
87
|
+
*/
|
|
88
|
+
variant: DropdownMenuVariant;
|
|
89
|
+
/**
|
|
90
|
+
* Whether the dropdown is open.
|
|
91
|
+
*/
|
|
92
|
+
open: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Whether the dropdown menu is disabled.
|
|
95
|
+
*/
|
|
96
|
+
disabled: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* The selection mode for the dropdown menu.
|
|
99
|
+
* - 'none': No selection state, items act as actions only
|
|
100
|
+
* - 'single': Single selection with radio button behavior
|
|
101
|
+
* - 'multi': Multiple selection with checkbox behavior
|
|
102
|
+
*/
|
|
103
|
+
selectionMode: DropdownMenuSelectionMode;
|
|
104
|
+
/**
|
|
105
|
+
* The currently selected value(s).
|
|
106
|
+
* For single selection: string or null
|
|
107
|
+
* For multi selection: string array
|
|
108
|
+
* For none mode: null
|
|
109
|
+
*/
|
|
110
|
+
value: string | string[] | null;
|
|
111
|
+
private _triggerButtonId;
|
|
112
|
+
private _isSubmenu;
|
|
113
|
+
private _navigationController;
|
|
114
|
+
private _selectionManager;
|
|
115
|
+
private _triggerButton;
|
|
116
|
+
private _popover;
|
|
117
|
+
private _slottedItems;
|
|
118
|
+
connectedCallback(): void;
|
|
119
|
+
private _detectSubmenuMode;
|
|
120
|
+
private _initializeControllers;
|
|
121
|
+
firstUpdated(): void;
|
|
122
|
+
disconnectedCallback(): void;
|
|
123
|
+
updated(changedProperties: Map<string | number | symbol, unknown>): void;
|
|
124
|
+
private _updateItemSelectionState;
|
|
125
|
+
private _handleTriggerClick;
|
|
126
|
+
private _onKeyDown;
|
|
127
|
+
focusFirstItem(): void;
|
|
128
|
+
private _getMenuItems;
|
|
129
|
+
private _selectItem;
|
|
130
|
+
private _dispatchSelectionEvent;
|
|
131
|
+
private _dispatchOpenCloseEvent;
|
|
132
|
+
private _onPopoverToggle;
|
|
133
|
+
private _onItemClick;
|
|
134
|
+
private _onFocusOut;
|
|
135
|
+
private get _dropdownRole();
|
|
136
|
+
private get _ariaHasPopup();
|
|
137
|
+
private get _ariaMultiSelectable();
|
|
138
|
+
private get _popoverPlacement();
|
|
139
|
+
private get _popoverAnchor();
|
|
140
|
+
private get _selectedText();
|
|
141
|
+
private get _shouldShowSelectedText();
|
|
142
|
+
render(): TemplateResult;
|
|
143
|
+
}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import { unsafeCSS, LitElement, html } from "lit";
|
|
2
|
+
import { property, state, query, queryAssignedElements, customElement } from "lit/decorators.js";
|
|
3
|
+
import { classMap } from "lit/directives/class-map.js";
|
|
4
|
+
import { ifDefined } from "lit/directives/if-defined.js";
|
|
5
|
+
import { generateUniqueId } from "../utils.mjs";
|
|
6
|
+
import { DropdownNavigationController } from "./navigation-controller.mjs";
|
|
7
|
+
import { SelectionManager } from "./selection-manager.mjs";
|
|
8
|
+
import styles from "./ai-dropdown-menu.scss.mjs";
|
|
9
|
+
import "../core/popover/popover.mjs";
|
|
10
|
+
import "./ai-dropdown-menu-item-group.mjs";
|
|
11
|
+
import "./ai-dropdown-menu-item.mjs";
|
|
12
|
+
import "./ai-dropdown-menu-separator.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 __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
30
|
+
var _triggerTextSlot, _ForgeAiDropdownMenuComponent_instances, triggerText_get, handleSlotChange_fn, _dropdownContentTemplate, triggerButton_get, popoverTemplate_get;
|
|
31
|
+
let ForgeAiDropdownMenuComponent = class extends LitElement {
|
|
32
|
+
constructor() {
|
|
33
|
+
super(...arguments);
|
|
34
|
+
__privateAdd(this, _ForgeAiDropdownMenuComponent_instances);
|
|
35
|
+
this.variant = "button";
|
|
36
|
+
this.open = false;
|
|
37
|
+
this.disabled = false;
|
|
38
|
+
this.selectionMode = "none";
|
|
39
|
+
this.value = null;
|
|
40
|
+
this._triggerButtonId = generateUniqueId("dropdown-trigger");
|
|
41
|
+
this._isSubmenu = false;
|
|
42
|
+
this._onKeyDown = (event) => {
|
|
43
|
+
if (this.disabled || !this._navigationController) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this._navigationController.handleKeyDown(event, this.open, this._triggerButton);
|
|
47
|
+
};
|
|
48
|
+
__privateAdd(this, _triggerTextSlot, html`<slot name="trigger-content">Choose...</slot>`);
|
|
49
|
+
__privateAdd(this, _dropdownContentTemplate, html`
|
|
50
|
+
<slot name="header"></slot>
|
|
51
|
+
<slot></slot>
|
|
52
|
+
`);
|
|
53
|
+
}
|
|
54
|
+
connectedCallback() {
|
|
55
|
+
super.connectedCallback();
|
|
56
|
+
this._detectSubmenuMode();
|
|
57
|
+
this._initializeControllers();
|
|
58
|
+
this.addEventListener("keydown", this._onKeyDown);
|
|
59
|
+
this.addEventListener("focusout", this._onFocusOut);
|
|
60
|
+
}
|
|
61
|
+
_detectSubmenuMode() {
|
|
62
|
+
this._isSubmenu = this.parentElement?.tagName.toLowerCase() === "forge-ai-dropdown-menu-item";
|
|
63
|
+
if (this._isSubmenu) {
|
|
64
|
+
this.setAttribute("data-submenu", "true");
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
_initializeControllers() {
|
|
68
|
+
this._navigationController = new DropdownNavigationController(
|
|
69
|
+
this,
|
|
70
|
+
() => this._getMenuItems(),
|
|
71
|
+
(index) => this._selectItem(index),
|
|
72
|
+
() => {
|
|
73
|
+
this.open = false;
|
|
74
|
+
},
|
|
75
|
+
() => {
|
|
76
|
+
this.open = true;
|
|
77
|
+
},
|
|
78
|
+
() => this._isSubmenu
|
|
79
|
+
);
|
|
80
|
+
this._selectionManager = new SelectionManager(
|
|
81
|
+
() => this._getMenuItems(),
|
|
82
|
+
(detail) => this._dispatchSelectionEvent(detail),
|
|
83
|
+
{ mode: this.selectionMode }
|
|
84
|
+
);
|
|
85
|
+
this._selectionManager.value = this.value;
|
|
86
|
+
}
|
|
87
|
+
firstUpdated() {
|
|
88
|
+
this._updateItemSelectionState();
|
|
89
|
+
}
|
|
90
|
+
disconnectedCallback() {
|
|
91
|
+
super.disconnectedCallback();
|
|
92
|
+
this.removeEventListener("keydown", this._onKeyDown);
|
|
93
|
+
this.removeEventListener("focusout", this._onFocusOut);
|
|
94
|
+
}
|
|
95
|
+
updated(changedProperties) {
|
|
96
|
+
if (changedProperties.has("open")) {
|
|
97
|
+
this._popover.open = this.open;
|
|
98
|
+
if (this.open) {
|
|
99
|
+
this._navigationController?.onOpen();
|
|
100
|
+
this._dispatchOpenCloseEvent("open");
|
|
101
|
+
} else if (changedProperties.get("open") === true) {
|
|
102
|
+
this._dispatchOpenCloseEvent("close");
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (changedProperties.has("selectionMode")) {
|
|
106
|
+
this._selectionManager?.updateConfig({ mode: this.selectionMode });
|
|
107
|
+
}
|
|
108
|
+
if (changedProperties.has("value")) {
|
|
109
|
+
if (this._selectionManager) {
|
|
110
|
+
this._selectionManager.value = this.value;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
_updateItemSelectionState() {
|
|
115
|
+
if (this._selectionManager) {
|
|
116
|
+
this._selectionManager.value = this.value;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
_handleTriggerClick() {
|
|
120
|
+
if (this.disabled) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
this.open = !this.open;
|
|
124
|
+
}
|
|
125
|
+
focusFirstItem() {
|
|
126
|
+
this._navigationController?.focusFirstItem();
|
|
127
|
+
}
|
|
128
|
+
_getMenuItems() {
|
|
129
|
+
const items = [];
|
|
130
|
+
this._slottedItems.forEach((element) => {
|
|
131
|
+
if (element.tagName.toLowerCase() === "forge-ai-dropdown-menu-item") {
|
|
132
|
+
items.push(element);
|
|
133
|
+
} else if (element.tagName.toLowerCase() === "forge-ai-dropdown-menu-item-group") {
|
|
134
|
+
const groupItems = element.querySelectorAll("forge-ai-dropdown-menu-item");
|
|
135
|
+
items.push(...Array.from(groupItems));
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
return items;
|
|
139
|
+
}
|
|
140
|
+
_selectItem(index) {
|
|
141
|
+
const items = this._getMenuItems();
|
|
142
|
+
const selectedItem = items[index];
|
|
143
|
+
if (selectedItem && this._selectionManager) {
|
|
144
|
+
const result = this._selectionManager.selectItem(selectedItem);
|
|
145
|
+
if (result.shouldClose) {
|
|
146
|
+
this.open = false;
|
|
147
|
+
this._triggerButton.focus();
|
|
148
|
+
}
|
|
149
|
+
this.value = this._selectionManager.value;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
_dispatchSelectionEvent(detail) {
|
|
153
|
+
this.dispatchEvent(
|
|
154
|
+
new CustomEvent("forge-ai-dropdown-menu-change", {
|
|
155
|
+
detail,
|
|
156
|
+
bubbles: true,
|
|
157
|
+
composed: true
|
|
158
|
+
})
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
_dispatchOpenCloseEvent(type) {
|
|
162
|
+
const eventName = type === "open" ? "forge-ai-dropdown-menu-open" : "forge-ai-dropdown-menu-close";
|
|
163
|
+
this.dispatchEvent(
|
|
164
|
+
new CustomEvent(eventName, {
|
|
165
|
+
detail: { timestamp: Date.now() },
|
|
166
|
+
bubbles: true,
|
|
167
|
+
composed: true
|
|
168
|
+
})
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
_onPopoverToggle(event) {
|
|
172
|
+
this.open = event.detail.open;
|
|
173
|
+
}
|
|
174
|
+
_onItemClick(event) {
|
|
175
|
+
const clickedElement = event.target;
|
|
176
|
+
const menuItem = clickedElement.closest("forge-ai-dropdown-menu-item");
|
|
177
|
+
if (!menuItem) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const items = this._getMenuItems();
|
|
181
|
+
const index = items.findIndex((item) => item === menuItem);
|
|
182
|
+
if (index >= 0) {
|
|
183
|
+
const itemParentDropdown = menuItem.closest("forge-ai-dropdown-menu");
|
|
184
|
+
if (itemParentDropdown === this) {
|
|
185
|
+
const hasOpenSubmenu = menuItem.querySelector(
|
|
186
|
+
'forge-ai-dropdown-menu[data-submenu="true"]'
|
|
187
|
+
);
|
|
188
|
+
const submenuIsOpen = hasOpenSubmenu && hasOpenSubmenu.open;
|
|
189
|
+
if (!submenuIsOpen) {
|
|
190
|
+
this._selectItem(index);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
async _onFocusOut(_event) {
|
|
196
|
+
if (!this.open) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
window.setTimeout(() => {
|
|
200
|
+
if (!this.matches(":focus-within")) {
|
|
201
|
+
this.open = false;
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
get _dropdownRole() {
|
|
206
|
+
switch (this.selectionMode) {
|
|
207
|
+
case "single":
|
|
208
|
+
case "multi":
|
|
209
|
+
return "listbox";
|
|
210
|
+
case "none":
|
|
211
|
+
default:
|
|
212
|
+
return "menu";
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
get _ariaHasPopup() {
|
|
216
|
+
return this.selectionMode === "none" ? "menu" : "listbox";
|
|
217
|
+
}
|
|
218
|
+
get _ariaMultiSelectable() {
|
|
219
|
+
return this.selectionMode === "multi" ? "true" : void 0;
|
|
220
|
+
}
|
|
221
|
+
get _popoverPlacement() {
|
|
222
|
+
return this._isSubmenu ? "right-start" : "bottom-start";
|
|
223
|
+
}
|
|
224
|
+
get _popoverAnchor() {
|
|
225
|
+
return this._isSubmenu ? this.parentElement : this._triggerButton;
|
|
226
|
+
}
|
|
227
|
+
get _selectedText() {
|
|
228
|
+
return this._selectionManager?.getSelectedText() || "";
|
|
229
|
+
}
|
|
230
|
+
get _shouldShowSelectedText() {
|
|
231
|
+
return this._selectionManager?.shouldShowSelectedText() || false;
|
|
232
|
+
}
|
|
233
|
+
render() {
|
|
234
|
+
return html` ${this._isSubmenu ? "" : __privateGet(this, _ForgeAiDropdownMenuComponent_instances, triggerButton_get)} ${__privateGet(this, _ForgeAiDropdownMenuComponent_instances, popoverTemplate_get)} `;
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
_triggerTextSlot = /* @__PURE__ */ new WeakMap();
|
|
238
|
+
_ForgeAiDropdownMenuComponent_instances = /* @__PURE__ */ new WeakSet();
|
|
239
|
+
triggerText_get = function() {
|
|
240
|
+
if (this._shouldShowSelectedText) {
|
|
241
|
+
return html`<slot name="selected-text">${this._selectedText}</slot>`;
|
|
242
|
+
}
|
|
243
|
+
return __privateGet(this, _triggerTextSlot);
|
|
244
|
+
};
|
|
245
|
+
handleSlotChange_fn = function(evt) {
|
|
246
|
+
const slotName = evt.target.name;
|
|
247
|
+
if (slotName === "header" || slotName === "selected-text") {
|
|
248
|
+
this.requestUpdate();
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
_dropdownContentTemplate = /* @__PURE__ */ new WeakMap();
|
|
252
|
+
triggerButton_get = function() {
|
|
253
|
+
return html`
|
|
254
|
+
<button
|
|
255
|
+
id=${this._triggerButtonId}
|
|
256
|
+
class=${classMap({
|
|
257
|
+
"forge-button": this.variant === "button",
|
|
258
|
+
"forge-icon-button": this.variant === "icon-button"
|
|
259
|
+
})}
|
|
260
|
+
type="button"
|
|
261
|
+
aria-expanded=${this.open}
|
|
262
|
+
aria-haspopup=${this._ariaHasPopup}
|
|
263
|
+
?disabled=${this.disabled}
|
|
264
|
+
@click=${this._handleTriggerClick}>
|
|
265
|
+
<slot name="start"></slot>
|
|
266
|
+
${__privateGet(this, _ForgeAiDropdownMenuComponent_instances, triggerText_get)}
|
|
267
|
+
<slot name="end"></slot>
|
|
268
|
+
</button>
|
|
269
|
+
`;
|
|
270
|
+
};
|
|
271
|
+
popoverTemplate_get = function() {
|
|
272
|
+
return html`
|
|
273
|
+
<forge-ai-popover
|
|
274
|
+
.anchor=${this._popoverAnchor}
|
|
275
|
+
placement=${this._popoverPlacement}
|
|
276
|
+
.flip=${true}
|
|
277
|
+
@ai-popover-toggle=${this._onPopoverToggle}>
|
|
278
|
+
<div
|
|
279
|
+
role=${this._dropdownRole}
|
|
280
|
+
aria-labelledby=${this._triggerButtonId}
|
|
281
|
+
aria-multiselectable=${ifDefined(this._ariaMultiSelectable)}
|
|
282
|
+
@click=${this._onItemClick}
|
|
283
|
+
tabindex="0"
|
|
284
|
+
class="ai-dropdown-menu__dropdown"
|
|
285
|
+
@slotchange=${__privateMethod(this, _ForgeAiDropdownMenuComponent_instances, handleSlotChange_fn)}>
|
|
286
|
+
${__privateGet(this, _dropdownContentTemplate)}
|
|
287
|
+
</div>
|
|
288
|
+
</forge-ai-popover>
|
|
289
|
+
`;
|
|
290
|
+
};
|
|
291
|
+
ForgeAiDropdownMenuComponent.styles = unsafeCSS(styles);
|
|
292
|
+
__decorateClass([
|
|
293
|
+
property()
|
|
294
|
+
], ForgeAiDropdownMenuComponent.prototype, "variant", 2);
|
|
295
|
+
__decorateClass([
|
|
296
|
+
property({ type: Boolean, reflect: true })
|
|
297
|
+
], ForgeAiDropdownMenuComponent.prototype, "open", 2);
|
|
298
|
+
__decorateClass([
|
|
299
|
+
property({ type: Boolean, reflect: true })
|
|
300
|
+
], ForgeAiDropdownMenuComponent.prototype, "disabled", 2);
|
|
301
|
+
__decorateClass([
|
|
302
|
+
property({ attribute: "selection-mode" })
|
|
303
|
+
], ForgeAiDropdownMenuComponent.prototype, "selectionMode", 2);
|
|
304
|
+
__decorateClass([
|
|
305
|
+
property()
|
|
306
|
+
], ForgeAiDropdownMenuComponent.prototype, "value", 2);
|
|
307
|
+
__decorateClass([
|
|
308
|
+
state()
|
|
309
|
+
], ForgeAiDropdownMenuComponent.prototype, "_triggerButtonId", 2);
|
|
310
|
+
__decorateClass([
|
|
311
|
+
state()
|
|
312
|
+
], ForgeAiDropdownMenuComponent.prototype, "_isSubmenu", 2);
|
|
313
|
+
__decorateClass([
|
|
314
|
+
query(".forge-button,.forge-icon-button")
|
|
315
|
+
], ForgeAiDropdownMenuComponent.prototype, "_triggerButton", 2);
|
|
316
|
+
__decorateClass([
|
|
317
|
+
query("forge-ai-popover")
|
|
318
|
+
], ForgeAiDropdownMenuComponent.prototype, "_popover", 2);
|
|
319
|
+
__decorateClass([
|
|
320
|
+
queryAssignedElements({ flatten: true })
|
|
321
|
+
], ForgeAiDropdownMenuComponent.prototype, "_slottedItems", 2);
|
|
322
|
+
ForgeAiDropdownMenuComponent = __decorateClass([
|
|
323
|
+
customElement("forge-ai-dropdown-menu")
|
|
324
|
+
], ForgeAiDropdownMenuComponent);
|
|
325
|
+
export {
|
|
326
|
+
ForgeAiDropdownMenuComponent
|
|
327
|
+
};
|
|
@@ -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/**\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/* prettier-ignore */\n.forge-button {\n --_button-primary-color: var(--forge-button-primary-color, var(--forge-theme-primary, #3f51b5));\n --_button-text-color: var(--forge-button-text-color, var(--_button-primary-color));\n --_button-disabled-color: var(--forge-button-disabled-color, var(--forge-theme-surface-container, #e0e0e0));\n --_button-padding: var(--forge-button-padding, var(--forge-spacing-medium, 16px));\n --_button-display: var(--forge-button-display, inline-grid);\n --_button-justify: var(--forge-button-justify, center);\n --_button-shape: var(--forge-button-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_button-height: var(--forge-button-height, 36px);\n --_button-min-width: var(--forge-button-min-width, 64px);\n --_button-spacing: var(--forge-button-spacing, var(--forge-spacing-xsmall, 8px));\n --_button-border-width: var(--forge-button-border-width, medium);\n --_button-border-style: var(--forge-button-border-style, none);\n --_button-border-color: var(--forge-button-border-color, currentColor);\n --_button-shape-start-start-radius: var(--forge-button-shape-start-start-radius, var(--_button-shape));\n --_button-shape-start-end-radius: var(--forge-button-shape-start-end-radius, var(--_button-shape));\n --_button-shape-end-start-radius: var(--forge-button-shape-end-start-radius, var(--_button-shape));\n --_button-shape-end-end-radius: var(--forge-button-shape-end-end-radius, var(--_button-shape));\n --_button-padding-block: var(--forge-button-padding-block, var(--_button-0));\n --_button-padding-inline: var(--forge-button-padding-inline, var(--_button-padding));\n --_button-background: var(--forge-button-background, transparent);\n --_button-hover-background: var(--forge-button-hover-background, var(--_button-background));\n --_button-active-background: var(--forge-button-active-background, var(--_button-background));\n --_button-color: var(--forge-button-color, var(--_button-text-color));\n --_button-icon-size: var(--forge-button-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.125));\n --_button-shadow: var(--forge-button-shadow, none);\n --_button-hover-shadow: var(--forge-button-hover-shadow, none);\n --_button-active-shadow: var(--forge-button-active-shadow, none);\n --_button-cursor: var(--forge-button-cursor, pointer);\n --_button-transition-duration: var(--forge-button-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_button-transition-timing: var(--forge-button-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_button-text-padding-inline: var(--forge-button-text-padding-inline, var(--forge-spacing-xsmall, 8px));\n --_button-outlined-background: var(--forge-button-outlined-background, transparent);\n --_button-outlined-color: var(--forge-button-outlined-color, var(--_button-primary-color));\n --_button-outlined-border-width: var(--forge-button-outlined-border-width, var(--forge-border-thin, 1px));\n --_button-outlined-border-style: var(--forge-button-outlined-border-style, solid);\n --_button-outlined-border-color: var(--forge-button-outlined-border-color, var(--_button-primary-color));\n --_button-tonal-background: var(--forge-button-tonal-background, var(--forge-theme-primary-container, #d1d5ed));\n --_button-tonal-disabled-background: var(--forge-button-tonal-disabled-background, var(--_button-disabled-color));\n --_button-tonal-color: var(--forge-button-tonal-color, var(--forge-theme-on-primary-container, #222c62));\n --_button-tonal-disabled-color: var(--forge-button-tonal-disabled-color, var(--_button-disabled-text-color));\n --_button-filled-background: var(--forge-button-filled-background, var(--_button-primary-color));\n --_button-filled-disabled-background: var(--forge-button-filled-disabled-background, var(--_button-disabled-color));\n --_button-filled-color: var(--forge-button-filled-color, var(--forge-theme-on-primary, #ffffff));\n --_button-filled-disabled-color: var(--forge-button-filled-disabled-color, var(--_button-disabled-text-color));\n --_button-raised-background: var(--forge-button-raised-background, var(--_button-primary-color));\n --_button-raised-disabled-background: var(--forge-button-raised-disabled-background, var(--_button-disabled-color));\n --_button-raised-color: var(--forge-button-raised-color, var(--forge-theme-on-primary, #ffffff));\n --_button-raised-disabled-color: var(--forge-button-raised-disabled-color, var(--_button-disabled-text-color));\n --_button-raised-shadow: var(--forge-button-raised-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));\n --_button-raised-hover-shadow: var(--forge-button-raised-hover-shadow, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12));\n --_button-raised-active-shadow: var(--forge-button-raised-active-shadow, 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12));\n --_button-raised-disabled-shadow: var(--forge-button-raised-disabled-shadow, none);\n --_button-link-color: var(--forge-button-link-color, var(--_button-primary-color));\n --_button-link-text-decoration: var(--forge-button-link-text-decoration, underline);\n --_button-link-height: var(--forge-button-link-height, auto);\n --_button-link-padding: var(--forge-button-link-padding, 0);\n --_button-link-line-height: var(--forge-button-link-line-height, normal);\n --_button-link-width: var(--forge-button-link-width, auto);\n --_button-link-hover-text-decoration: var(--forge-button-link-hover-text-decoration, none);\n --_button-link-active-opacity: var(--forge-button-link-active-opacity, 0.65);\n --_button-link-transition-duration: var(--forge-button-link-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_button-link-transition-timing: var(--forge-button-link-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_button-disabled-cursor: var(--forge-button-disabled-cursor, not-allowed);\n --_button-disabled-text-color: var(--forge-button-disabled-text-color, var(--forge-theme-text-low, rgba(0, 0, 0, 0.38)));\n --_button-disabled-background: var(--forge-button-disabled-background, transparent);\n --_button-disabled-border-color: var(--forge-button-disabled-border-color, var(--_button-disabled-color));\n --_button-disabled-shadow: var(--forge-button-disabled-shadow, none);\n --_button-dense-height: var(--forge-button-dense-height, 24px);\n --_button-pill-shape: var(--forge-button-pill-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));\n --_button-pill-padding-inline: var(--forge-button-pill-padding-inline, var(--forge-spacing-small, 12px));\n --_button-focus-indicator-offset: var(--forge-button-focus-indicator-offset, 4px);\n --_button-text-focus-indicator-offset: var(--forge-button-text-focus-indicator-offset, 0px);\n --_button-link-focus-indicator-offset: var(--forge-button-link-focus-indicator-offset, 2px);\n --_button-popover-icon-transition-duration: var(--forge-button-popover-icon-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_button-popover-icon-transition-timing: var(--forge-button-popover-icon-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_button-popover-icon-open-rotation: var(--forge-button-popover-icon-open-rotation, 180deg);\n}\n\n.forge-button {\n display: var(--_button-display);\n position: relative;\n outline: none;\n vertical-align: middle;\n -webkit-tap-highlight-color: transparent;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-button-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-button-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-button-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-button-font-weight, 500);\n line-height: var(--forge-typography-button-line-height, normal);\n letter-spacing: var(--forge-typography-button-letter-spacing, 0.0714285714em);\n text-transform: var(--forge-typography-button-text-transform, inherit);\n text-decoration: var(--forge-typography-button-text-decoration, inherit);\n position: relative;\n display: var(--_button-display);\n grid-auto-flow: column;\n align-items: center;\n justify-content: var(--_button-justify);\n gap: var(--_button-spacing);\n z-index: 0;\n box-sizing: border-box;\n min-inline-size: var(--_button-min-width);\n height: var(--_button-height);\n inline-size: 100%;\n border-width: var(--_button-border-width);\n border-style: var(--_button-border-style);\n border-color: var(--_button-border-color);\n border-start-start-radius: var(--_button-shape-start-start-radius);\n border-start-end-radius: var(--_button-shape-start-end-radius);\n border-end-start-radius: var(--_button-shape-end-start-radius);\n border-end-end-radius: var(--_button-shape-end-end-radius);\n padding-block: var(--_button-padding-block);\n padding-inline: var(--_button-padding-inline);\n box-shadow: var(--_button-shadow);\n outline: none;\n user-select: none;\n -webkit-appearance: none;\n vertical-align: middle;\n text-decoration: none;\n white-space: nowrap;\n background: var(--_button-background);\n color: var(--_button-color);\n cursor: var(--_button-cursor);\n transition-property: box-shadow, background;\n transition-duration: var(--_button-transition-duration);\n transition-timing-function: var(--_button-transition-timing);\n}\n\n.forge-button::-moz-focus-inner {\n padding: 0;\n border: 0;\n}\n\n.forge-button:hover {\n --_button-shadow: var(--_button-hover-shadow);\n background: var(--_button-hover-background);\n}\n\n.forge-button:active {\n --_button-shadow: var(--_button-active-shadow);\n background: var(--_button-active-background);\n}\n\n.forge-button {\n position: relative;\n inline-size: auto;\n}\n\n.forge-button:not(:disabled):not(.forge-button--link) {\n --_state-layer-display: var(--forge-state-layer-display, flex);\n --_state-layer-color: var(--forge-state-layer-color, var(--forge-theme-on-surface, #000000));\n --_state-layer-hover-color: var(--forge-state-layer-hover-color, var(--_state-layer-color));\n --_state-layer-hover-opacity: var(--forge-state-layer-hover-opacity, 0.08);\n --_state-layer-pressed-color: var(--forge-state-layer-pressed-color, var(--_state-layer-color));\n --_state-layer-pressed-opacity: var(--forge-state-layer-pressed-opacity, 0.12);\n --_state-layer-hover-duration: var(--forge-state-layer-hover-duration, 15ms);\n --_state-layer-pressed-duration: var(--forge-state-layer-pressed-duration, 105ms);\n --_state-layer-animation-duration: var(--forge-state-layer-animation-duration, 375ms);\n}\n\n.forge-button:not(:disabled):not(.forge-button--link)::before {\n opacity: 0;\n position: absolute;\n background-color: var(--_state-layer-hover-color);\n inset: 0;\n transition: opacity var(--_state-layer-hover-duration) linear, background-color var(--_state-layer-hover-duration) linear;\n --_state-layer-hover-duration: var(--forge-state-layer-hover-duration, 100ms);\n content: "";\n opacity: 0;\n border-radius: inherit;\n}\n\n.forge-button:not(:disabled):not(.forge-button--link):hover::before {\n background-color: var(--_state-layer-hover-color);\n opacity: var(--_state-layer-hover-opacity);\n}\n\n.forge-button:not(:disabled):not(.forge-button--link):active::before {\n opacity: var(--_state-layer-pressed-opacity);\n transition-duration: var(--_state-layer-pressed-duration);\n --_state-layer-pressed-opacity: var(--forge-state-layer-pressed-opacity, 0.18);\n}\n\n@keyframes forge-focus-indicator-outward-grow {\n from {\n outline-width: 0;\n }\n to {\n outline-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-outward-shrink {\n from {\n outline-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-inward-grow {\n from {\n border-width: 0;\n }\n to {\n border-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-inward-shrink {\n from {\n border-width: var(--_focus-indicator-active-width);\n }\n}\n.forge-button:not(:disabled) {\n outline: none;\n}\n\n.forge-button:not(:disabled):focus-visible::after {\n --_focus-indicator-display: var(--forge-focus-indicator-display, flex);\n --_focus-indicator-width: var(--forge-focus-indicator-width, var(--forge-border-medium, 2px));\n --_focus-indicator-active-width: var(--forge-focus-indicator-active-width, 6px);\n --_focus-indicator-color: var(--forge-focus-indicator-color, var(--forge-theme-primary, #3f51b5));\n --_focus-indicator-shape: var(--forge-focus-indicator-shape, calc(var(--forge-shape-extra-small, 1px) * var(--forge-shape-factor, 1)));\n --_focus-indicator-duration: var(--forge-focus-indicator-duration, var(--forge-animation-duration-long4, 600ms));\n --_focus-indicator-easing: var(--forge-focus-indicator-easing, var(--forge-animation-easing-emphasized, cubic-bezier(0.2, 0, 0, 1)));\n --_focus-indicator-shape-start-start: var(--forge-focus-indicator-shape-start-start, var(--_focus-indicator-shape));\n --_focus-indicator-shape-start-end: var(--forge-focus-indicator-shape-start-end, var(--_focus-indicator-shape));\n --_focus-indicator-shape-end-end: var(--forge-focus-indicator-shape-end-end, var(--_focus-indicator-shape));\n --_focus-indicator-shape-end-start: var(--forge-focus-indicator-shape-end-start, var(--_focus-indicator-shape));\n --_focus-indicator-outward-offset: var(--forge-focus-indicator-outward-offset, var(--forge-spacing-xxsmall, 4px));\n --_focus-indicator-inward-offset: var(--forge-focus-indicator-inward-offset, 0px);\n --_focus-indicator-offset-block: var(--forge-focus-indicator-offset-block, 0);\n --_focus-indicator-offset-inline: var(--forge-focus-indicator-offset-inline, 0);\n}\n\n.forge-button:not(:disabled):focus-visible::after {\n animation-delay: 0s, calc(var(--_focus-indicator-duration) * 0.25);\n animation-duration: calc(var(--_focus-indicator-duration) * 0.25), calc(var(--_focus-indicator-duration) * 0.75);\n animation-timing-function: var(--_focus-indicator-easing);\n box-sizing: border-box;\n color: var(--_focus-indicator-color);\n display: none;\n pointer-events: none;\n position: absolute;\n margin-block: var(--_focus-indicator-offset-block);\n margin-inline: var(--_focus-indicator-offset-inline);\n animation-name: forge-focus-indicator-outward-grow, forge-focus-indicator-outward-shrink;\n border-end-end-radius: calc(var(--_focus-indicator-shape-end-end) + var(--_focus-indicator-outward-offset));\n border-end-start-radius: calc(var(--_focus-indicator-shape-end-start) + var(--_focus-indicator-outward-offset));\n border-start-end-radius: calc(var(--_focus-indicator-shape-start-end) + var(--_focus-indicator-outward-offset));\n border-start-start-radius: calc(var(--_focus-indicator-shape-start-start) + var(--_focus-indicator-outward-offset));\n inset: calc(-1 * var(--_focus-indicator-outward-offset));\n outline: var(--_focus-indicator-width) solid currentColor;\n content: "";\n display: block;\n}\n\n.forge-button:not(:disabled) {\n --forge-focus-indicator-color: var(--_button-primary-color);\n}\n\n.forge-button:disabled {\n cursor: var(--_button-disabled-cursor);\n --_button-background: var(--_button-disabled-background);\n --_button-color: var(--_button-disabled-text-color);\n --_button-shadow: var(--_button-disabled-shadow);\n pointer-events: none;\n pointer-events: initial;\n}\n\n.forge-button:where(:not(.forge-button--outlined, .forge-button--tonal, .forge-button--filled, .forge-button--raised, .forge-button--link)), .forge-button--text {\n --_button-padding-inline: var(--_button-text-padding-inline);\n}\n\n.forge-button--outlined {\n --_button-background: var(--_button-outlined-background);\n --_button-color: var(--_button-outlined-color);\n --_button-border-width: var(--_button-outlined-border-width);\n --_button-border-style: var(--_button-outlined-border-style);\n --_button-border-color: var(--_button-outlined-border-color);\n}\n\n.forge-button--outlined:disabled {\n --_button-border-color: var(--_button-disabled-border-color);\n}\n\n.forge-button--tonal {\n --_button-background: var(--_button-tonal-background);\n --_button-color: var(--_button-tonal-color);\n}\n\n.forge-button--tonal:disabled {\n --_button-background: var(--_button-tonal-disabled-background);\n --_button-color: var(--_button-tonal-disabled-color);\n}\n\n.forge-button--filled, .forge-button--raised {\n --_button-background: var(--_button-filled-background);\n --_button-color: var(--_button-filled-color);\n --forge-state-layer-color: var(--_button-filled-color);\n}\n\n.forge-button--filled:disabled, .forge-button--raised:disabled {\n --_button-background: var(--_button-filled-disabled-background);\n --_button-color: var(--_button-filled-disabled-color);\n}\n\n.forge-button--raised {\n --_button-background: var(--_button-raised-background);\n --_button-color: var(--_button-raised-color);\n --_button-shadow: var(--_button-raised-shadow);\n}\n\n.forge-button--raised:hover {\n --_button-shadow: var(--_button-raised-hover-shadow);\n}\n\n.forge-button--raised:active {\n --_button-shadow: var(--_button-raised-active-shadow);\n}\n\n.forge-button--raised:disabled {\n --_button-background: var(--_button-raised-disabled-background);\n --_button-color: var(--_button-raised-disabled-color);\n --_button-shadow: var(--_button-raised-disabled-shadow);\n}\n\n.forge-button--link {\n --_button-color: var(--_button-link-color);\n --_button-height: var(--_button-link-height);\n --_button-padding: var(--_button-link-padding);\n --_button-focus-indicator-offset: var(--_button-link-focus-indicator-offset);\n text-decoration: var(--_button-link-text-decoration);\n line-height: var(--_button-link-line-height);\n transition: opacity var(--_button-link-transition-duration) var(--_button-link-transition-timing);\n inline-size: var(--_button-link-width);\n}\n\n.forge-button--link:hover {\n text-decoration: var(--_button-link-hover-text-decoration);\n}\n\n.forge-button--link:active {\n opacity: var(--_button-link-active-opacity);\n}\n\n.forge-button--pill {\n --_button-shape: var(--_button-pill-shape);\n --_button-padding-inline: var(--_button-pill-padding-inline);\n --forge-focus-indicator-shape: var(--_button-pill-shape);\n}\n\n.forge-button {\n --forge-icon-font-size: var(--_button-icon-size);\n}\n\n.forge-button--dense {\n --_button-height: var(--_button-dense-height);\n}\n\n/**\n * @license\n * Copyright Tyler Technologies, Inc. \n * License: Apache-2.0\n */\n/* prettier-ignore */\n.forge-icon-button {\n --_icon-button-display: var(--forge-icon-button-display, inline-flex);\n --_icon-button-size: var(--forge-icon-button-size, 48px);\n --_icon-button-gap: var(--forge-icon-button-gap, 0);\n --_icon-button-icon-color: var(--forge-icon-button-icon-color, currentColor);\n --_icon-button-background-color: var(--forge-icon-button-background-color, none);\n --_icon-button-icon-size: var(--forge-icon-button-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.5));\n --_icon-button-cursor: var(--forge-icon-button-cursor, pointer);\n --_icon-button-padding: var(--forge-icon-button-padding, var(--forge-spacing-xxsmall, 4px));\n --_icon-button-border: var(--forge-icon-button-border, none);\n --_icon-button-shadow: var(--forge-icon-button-shadow, none);\n --_icon-button-transition-duration: var(--forge-icon-button-transition-duration, var(--forge-animation-duration-short3, 150ms));\n --_icon-button-transition-timing: var(--forge-icon-button-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));\n --_icon-button-shape: var(--forge-icon-button-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));\n --_icon-button-shape-start-start: var(--forge-icon-button-shape-start-start, var(--_icon-button-shape));\n --_icon-button-shape-start-end: var(--forge-icon-button-shape-start-end, var(--_icon-button-shape));\n --_icon-button-shape-end-start: var(--forge-icon-button-shape-end-start, var(--_icon-button-shape));\n --_icon-button-shape-end-end: var(--forge-icon-button-shape-end-end, var(--_icon-button-shape));\n --_icon-button-shape-squared: var(--forge-icon-button-shape-squared, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));\n --_icon-button-outlined-border-width: var(--forge-icon-button-outlined-border-width, 1px);\n --_icon-button-outlined-border-style: var(--forge-icon-button-outlined-border-style, solid);\n --_icon-button-outlined-border-color: var(--forge-icon-button-outlined-border-color, var(--_icon-button-icon-color));\n --_icon-button-tonal-icon-color: var(--forge-icon-button-tonal-icon-color, var(--forge-theme-on-primary-container, #222c62));\n --_icon-button-tonal-background-color: var(--forge-icon-button-tonal-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-filled-icon-color: var(--forge-icon-button-filled-icon-color, var(--forge-theme-on-primary, #ffffff));\n --_icon-button-filled-background-color: var(--forge-icon-button-filled-background-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-raised-shadow: var(--forge-icon-button-raised-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));\n --_icon-button-raised-hover-shadow: var(--forge-icon-button-raised-hover-shadow, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12));\n --_icon-button-raised-active-shadow: var(--forge-icon-button-raised-active-shadow, 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12));\n --_icon-button-raised-disabled-shadow: var(--forge-icon-button-raised-disabled-shadow, none);\n --_icon-button-density-small-size: var(--forge-icon-button-density-small-size, 24px);\n --_icon-button-density-small-padding: var(--forge-icon-button-density-small-padding, var(--forge-spacing-xxxsmall, 2px));\n --_icon-button-density-small-icon-size: var(--forge-icon-button-density-small-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.125));\n --_icon-button-density-medium-size: var(--forge-icon-button-density-medium-size, 36px);\n --_icon-button-density-medium-padding: var(--forge-icon-button-density-medium-padding, var(--forge-spacing-xxsmall, 4px));\n --_icon-button-density-large-size: var(--forge-icon-button-density-large-size, var(--_icon-button-size));\n --_icon-button-toggle-on-background-color: var(--forge-icon-button-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-toggle-on-icon-color: var(--forge-icon-button-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-outlined-toggle-on-background-color: var(--forge-icon-button-outlined-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-outlined-toggle-on-icon-color: var(--forge-icon-button-outlined-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-tonal-toggle-background-color: var(--forge-icon-button-tonal-toggle-background-color, var(--forge-theme-surface-container-low, #ebebeb));\n --_icon-button-tonal-toggle-on-background-color: var(--forge-icon-button-tonal-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));\n --_icon-button-tonal-toggle-on-icon-color: var(--forge-icon-button-tonal-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-filled-toggle-background-color: var(--forge-icon-button-filled-toggle-background-color, var(--forge-theme-surface-container-low, #ebebeb));\n --_icon-button-filled-toggle-icon-color: var(--forge-icon-button-filled-toggle-icon-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-filled-toggle-on-background-color: var(--forge-icon-button-filled-toggle-on-background-color, var(--forge-theme-primary, #3f51b5));\n --_icon-button-filled-toggle-on-icon-color: var(--forge-icon-button-filled-toggle-on-icon-color, var(--forge-theme-on-primary, #ffffff));\n --_icon-button-disabled-cursor: var(--forge-icon-button-disabled-cursor, not-allowed);\n --_icon-button-disabled-opacity: var(--forge-icon-button-disabled-opacity, 0.38);\n --_icon-button-popover-icon-padding: var(--forge-icon-button-popover-icon-padding, var(--forge-spacing-xsmall, 8px));\n --_icon-button-focus-indicator-color: var(--forge-icon-button-focus-indicator-color, var(--forge-theme-primary, #3f51b5));\n}\n\n.forge-icon-button {\n display: var(--_icon-button-display);\n position: relative;\n outline: none;\n -webkit-tap-highlight-color: transparent;\n position: relative;\n z-index: 0;\n display: var(--_icon-button-display);\n align-items: center;\n justify-content: center;\n gap: var(--_icon-button-gap);\n box-sizing: border-box;\n height: var(--_icon-button-density-large-size);\n min-width: var(--_icon-button-density-large-size);\n border: var(--_icon-button-border);\n border-start-start-radius: var(--_icon-button-shape-start-start);\n border-start-end-radius: var(--_icon-button-shape-start-end);\n border-end-start-radius: var(--_icon-button-shape-end-start);\n border-end-end-radius: var(--_icon-button-shape-end-end);\n padding: var(--_icon-button-padding);\n box-shadow: var(--_icon-button-shadow);\n color: var(--_icon-button-icon-color);\n background: var(--_icon-button-background-color);\n font-size: var(--_icon-button-icon-size);\n cursor: var(--_icon-button-cursor);\n user-select: none;\n transition-property: box-shadow, background;\n transition-duration: var(--_icon-button-transition-duration);\n transition-timing-function: var(--_icon-button-transition-timing);\n}\n\n.forge-icon-button img,\n.forge-icon-button svg {\n height: var(--_icon-button-icon-size);\n width: var(--_icon-button-icon-size);\n}\n\n.forge-icon-button svg {\n fill: currentColor;\n}\n\n.forge-icon-button:not(:disabled) {\n --_state-layer-display: var(--forge-state-layer-display, flex);\n --_state-layer-color: var(--forge-state-layer-color, var(--forge-theme-on-surface, #000000));\n --_state-layer-hover-color: var(--forge-state-layer-hover-color, var(--_state-layer-color));\n --_state-layer-hover-opacity: var(--forge-state-layer-hover-opacity, 0.08);\n --_state-layer-pressed-color: var(--forge-state-layer-pressed-color, var(--_state-layer-color));\n --_state-layer-pressed-opacity: var(--forge-state-layer-pressed-opacity, 0.12);\n --_state-layer-hover-duration: var(--forge-state-layer-hover-duration, 15ms);\n --_state-layer-pressed-duration: var(--forge-state-layer-pressed-duration, 105ms);\n --_state-layer-animation-duration: var(--forge-state-layer-animation-duration, 375ms);\n}\n\n.forge-icon-button:not(:disabled)::before {\n opacity: 0;\n position: absolute;\n background-color: var(--_state-layer-hover-color);\n inset: 0;\n transition: opacity var(--_state-layer-hover-duration) linear, background-color var(--_state-layer-hover-duration) linear;\n --_state-layer-hover-duration: var(--forge-state-layer-hover-duration, 100ms);\n content: "";\n opacity: 0;\n border-radius: inherit;\n}\n\n.forge-icon-button:not(:disabled):hover::before {\n background-color: var(--_state-layer-hover-color);\n opacity: var(--_state-layer-hover-opacity);\n}\n\n.forge-icon-button:not(:disabled):active::before {\n opacity: var(--_state-layer-pressed-opacity);\n transition-duration: var(--_state-layer-pressed-duration);\n --_state-layer-pressed-opacity: var(--forge-state-layer-pressed-opacity, 0.18);\n}\n\n.forge-icon-button:not(:disabled) {\n --forge-state-layer-color: var(--_icon-button-icon-color);\n}\n\n@keyframes forge-focus-indicator-outward-grow {\n from {\n outline-width: 0;\n }\n to {\n outline-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-outward-shrink {\n from {\n outline-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-inward-grow {\n from {\n border-width: 0;\n }\n to {\n border-width: var(--_focus-indicator-active-width);\n }\n}\n@keyframes forge-focus-indicator-inward-shrink {\n from {\n border-width: var(--_focus-indicator-active-width);\n }\n}\n.forge-icon-button:not(:disabled) {\n outline: none;\n}\n\n.forge-icon-button:not(:disabled):focus-visible::after {\n --_focus-indicator-display: var(--forge-focus-indicator-display, flex);\n --_focus-indicator-width: var(--forge-focus-indicator-width, var(--forge-border-medium, 2px));\n --_focus-indicator-active-width: var(--forge-focus-indicator-active-width, 6px);\n --_focus-indicator-color: var(--forge-focus-indicator-color, var(--forge-theme-primary, #3f51b5));\n --_focus-indicator-shape: var(--forge-focus-indicator-shape, calc(var(--forge-shape-extra-small, 1px) * var(--forge-shape-factor, 1)));\n --_focus-indicator-duration: var(--forge-focus-indicator-duration, var(--forge-animation-duration-long4, 600ms));\n --_focus-indicator-easing: var(--forge-focus-indicator-easing, var(--forge-animation-easing-emphasized, cubic-bezier(0.2, 0, 0, 1)));\n --_focus-indicator-shape-start-start: var(--forge-focus-indicator-shape-start-start, var(--_focus-indicator-shape));\n --_focus-indicator-shape-start-end: var(--forge-focus-indicator-shape-start-end, var(--_focus-indicator-shape));\n --_focus-indicator-shape-end-end: var(--forge-focus-indicator-shape-end-end, var(--_focus-indicator-shape));\n --_focus-indicator-shape-end-start: var(--forge-focus-indicator-shape-end-start, var(--_focus-indicator-shape));\n --_focus-indicator-outward-offset: var(--forge-focus-indicator-outward-offset, var(--forge-spacing-xxsmall, 4px));\n --_focus-indicator-inward-offset: var(--forge-focus-indicator-inward-offset, 0px);\n --_focus-indicator-offset-block: var(--forge-focus-indicator-offset-block, 0);\n --_focus-indicator-offset-inline: var(--forge-focus-indicator-offset-inline, 0);\n}\n\n.forge-icon-button:not(:disabled):focus-visible::after {\n animation-delay: 0s, calc(var(--_focus-indicator-duration) * 0.25);\n animation-duration: calc(var(--_focus-indicator-duration) * 0.25), calc(var(--_focus-indicator-duration) * 0.75);\n animation-timing-function: var(--_focus-indicator-easing);\n box-sizing: border-box;\n color: var(--_focus-indicator-color);\n display: none;\n pointer-events: none;\n position: absolute;\n margin-block: var(--_focus-indicator-offset-block);\n margin-inline: var(--_focus-indicator-offset-inline);\n animation-name: forge-focus-indicator-outward-grow, forge-focus-indicator-outward-shrink;\n border-end-end-radius: calc(var(--_focus-indicator-shape-end-end) + var(--_focus-indicator-outward-offset));\n border-end-start-radius: calc(var(--_focus-indicator-shape-end-start) + var(--_focus-indicator-outward-offset));\n border-start-end-radius: calc(var(--_focus-indicator-shape-start-end) + var(--_focus-indicator-outward-offset));\n border-start-start-radius: calc(var(--_focus-indicator-shape-start-start) + var(--_focus-indicator-outward-offset));\n inset: calc(-1 * var(--_focus-indicator-outward-offset));\n outline: var(--_focus-indicator-width) solid currentColor;\n content: "";\n display: block;\n}\n\n.forge-icon-button:not(:disabled) {\n --forge-focus-indicator-color: var(--_icon-button-focus-indicator-color);\n --forge-focus-indicator-shape: var(--_icon-button-shape);\n}\n\n.forge-icon-button:not(:disabled):where(.forge-icon-button--text,\n:not(:where(.forge-icon-button--outlined, .forge-icon-button--tonal, .forge-icon-button--filled, .forge-icon-button--raised))) {\n --forge-focus-indicator-outward-offset: 0px;\n}\n\n.forge-icon-button--outlined {\n border-width: var(--_icon-button-outlined-border-width);\n border-style: var(--_icon-button-outlined-border-style);\n border-color: var(--_icon-button-outlined-border-color);\n}\n\n.forge-icon-button--tonal {\n --_icon-button-icon-color: var(--_icon-button-tonal-icon-color);\n --_icon-button-background-color: var(--_icon-button-tonal-background-color);\n}\n\n.forge-icon-button--filled, .forge-icon-button--raised {\n --_icon-button-icon-color: var(--_icon-button-filled-icon-color);\n --_icon-button-background-color: var(--_icon-button-filled-background-color);\n}\n\n.forge-icon-button--raised {\n --_icon-button-shadow: var(--_icon-button-raised-shadow);\n}\n\n.forge-icon-button--raised:hover {\n --_icon-button-raised-shadow: var(--_icon-button-raised-hover-shadow);\n}\n\n.forge-icon-button--raised:active {\n --_icon-button-raised-shadow: var(--_icon-button-raised-active-shadow);\n}\n\n.forge-icon-button--squared {\n --_icon-button-shape: var(--_icon-button-shape-squared);\n}\n\n.forge-icon-button--small {\n --_icon-button-size: var(--_icon-button-density-small-size);\n --_icon-button-icon-size: var(--_icon-button-density-small-icon-size);\n --_icon-button-padding: var(--_icon-button-density-small-padding);\n}\n\n.forge-icon-button--small > * {\n font-size: var(--_icon-button-density-small-icon-size);\n}\n\n.forge-icon-button--medium {\n --_icon-button-size: var(--_icon-button-density-medium-size);\n --_icon-button-padding: var(--_icon-button-density-medium-padding);\n}\n\n.forge-icon-button:disabled {\n pointer-events: none;\n opacity: var(--_icon-button-disabled-opacity);\n pointer-events: auto;\n cursor: not-allowed;\n}\n\n.forge-icon-button forge-circular-progress {\n --forge-circular-progress-indicator-color: var(--_icon-button-icon-color);\n --forge-circular-progress-track-color: transparent;\n --forge-circular-progress-size: 1em;\n}\n\n:host {\n display: inline-block;\n position: relative;\n --ai-dropdown-menu-min-width: 200px;\n --ai-dropdown-menu-max-width: 400px;\n --ai-dropdown-menu-max-height: 300px;\n --ai-dropdown-menu-padding: var(--forge-spacing-xxsmall, 4px) 0;\n}\n\n.forge-button,\n.forge-icon-button {\n --forge-button-color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n --forge-icon-button-color: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n.forge-button ::slotted(svg),\n.forge-icon-button ::slotted(svg) {\n fill: var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6));\n}\n\n.ai-dropdown-menu__dropdown::-webkit-scrollbar {\n height: var(--forge-scrollbar-height, 16px);\n width: var(--forge-scrollbar-width, 16px);\n}\n.ai-dropdown-menu__dropdown::-webkit-scrollbar-track {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.ai-dropdown-menu__dropdown::-webkit-scrollbar-track:hover {\n background-color: var(--forge-scrollbar-track-container-hover, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.ai-dropdown-menu__dropdown::-webkit-scrollbar-corner {\n background-color: var(--forge-scrollbar-track-container, var(--forge-theme-surface-container-low, #ebebeb));\n}\n.ai-dropdown-menu__dropdown::-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.ai-dropdown-menu__dropdown::-webkit-scrollbar-thumb:hover {\n background-color: var(--forge-scrollbar-thumb-container-hover, var(--forge-theme-surface-container-high, #9e9e9e));\n}\n.ai-dropdown-menu__dropdown {\n min-width: var(--ai-dropdown-menu-min-width);\n max-width: var(--ai-dropdown-menu-max-width);\n max-height: var(--ai-dropdown-menu-max-height);\n overflow-y: auto;\n padding: var(--ai-dropdown-menu-padding);\n}\n\n::slotted([slot=header]) {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--forge-typography-heading1-font-family, var(--forge-typography-font-family, "Roboto", sans-serif));\n font-size: var(--forge-typography-heading1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading1-font-size-scale, 0.875)));\n font-weight: var(--forge-typography-heading1-font-weight, 500);\n line-height: var(--forge-typography-heading1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-heading1-line-height-scale, 1.125)));\n letter-spacing: var(--forge-typography-heading1-letter-spacing, 0.0178571429em);\n text-transform: var(--forge-typography-heading1-text-transform, inherit);\n text-decoration: var(--forge-typography-heading1-text-decoration, inherit);\n display: block;\n margin-block-start: var(--forge-spacing-xxsmall, 4px);\n margin-inline: var(--forge-spacing-small, 12px);\n}';
|
|
2
|
+
export {
|
|
3
|
+
styles as default
|
|
4
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ForgeAiDropdownMenuComponent, type DropdownMenuVariant } from './ai-dropdown-menu.js';
|
|
2
|
+
export { ForgeAiDropdownMenuItemComponent } from './ai-dropdown-menu-item.js';
|
|
3
|
+
export { ForgeAiDropdownMenuItemGroupComponent } from './ai-dropdown-menu-item-group.js';
|
|
4
|
+
export { ForgeAiDropdownMenuSeparatorComponent } from './ai-dropdown-menu-separator.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ForgeAiDropdownMenuComponent } from "./ai-dropdown-menu.mjs";
|
|
2
|
+
import { ForgeAiDropdownMenuItemComponent } from "./ai-dropdown-menu-item.mjs";
|
|
3
|
+
import { ForgeAiDropdownMenuItemGroupComponent } from "./ai-dropdown-menu-item-group.mjs";
|
|
4
|
+
import { ForgeAiDropdownMenuSeparatorComponent } from "./ai-dropdown-menu-separator.mjs";
|
|
5
|
+
export {
|
|
6
|
+
ForgeAiDropdownMenuComponent,
|
|
7
|
+
ForgeAiDropdownMenuItemComponent,
|
|
8
|
+
ForgeAiDropdownMenuItemGroupComponent,
|
|
9
|
+
ForgeAiDropdownMenuSeparatorComponent
|
|
10
|
+
};
|