@tylertech/forge 3.10.4 → 3.11.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 (163) hide show
  1. package/custom-elements.json +343 -141
  2. package/dist/app-bar/forge-app-bar.css +11 -5
  3. package/dist/button/forge-button.css +12 -6
  4. package/dist/checkbox/forge-checkbox.css +21 -17
  5. package/dist/chips/forge-chips.css +10 -4
  6. package/dist/field/forge-field.css +7 -5
  7. package/dist/floating-action-button/forge-floating-action-button.css +10 -6
  8. package/dist/forge.css +6 -1
  9. package/dist/icon-button/forge-icon-button.css +10 -4
  10. package/dist/lib.js +22 -22
  11. package/dist/lib.js.map +4 -4
  12. package/dist/list/forge-list.css +57 -3
  13. package/dist/radio/forge-radio.css +20 -12
  14. package/dist/skip-link/forge-skip-link.css +36 -32
  15. package/dist/switch/forge-switch.css +7 -5
  16. package/dist/table/forge-table.css +6 -1
  17. package/dist/vscode.html-custom-data.json +53 -43
  18. package/esm/accordion/accordion.d.ts +2 -0
  19. package/esm/accordion/accordion.js +2 -0
  20. package/esm/app-bar/app-bar/app-bar-adapter.js +2 -2
  21. package/esm/app-bar/app-bar/app-bar.d.ts +1 -1
  22. package/esm/app-bar/app-bar/app-bar.js +1 -1
  23. package/esm/app-bar/help-button/app-bar-help-button.d.ts +1 -1
  24. package/esm/app-bar/help-button/app-bar-help-button.js +1 -1
  25. package/esm/app-bar/menu-button/app-bar-menu-button.d.ts +1 -1
  26. package/esm/app-bar/menu-button/app-bar-menu-button.js +1 -1
  27. package/esm/app-bar/notification-button/app-bar-notification-button.d.ts +2 -0
  28. package/esm/app-bar/notification-button/app-bar-notification-button.js +2 -0
  29. package/esm/app-bar/profile-button/app-bar-profile-button-adapter.d.ts +2 -1
  30. package/esm/app-bar/profile-button/app-bar-profile-button-adapter.js +2 -0
  31. package/esm/app-bar/profile-button/app-bar-profile-button.d.ts +2 -0
  32. package/esm/app-bar/profile-button/app-bar-profile-button.js +2 -0
  33. package/esm/app-bar/search/app-bar-search.d.ts +2 -0
  34. package/esm/app-bar/search/app-bar-search.js +2 -0
  35. package/esm/autocomplete/autocomplete.d.ts +2 -0
  36. package/esm/autocomplete/autocomplete.js +2 -0
  37. package/esm/backdrop/backdrop.d.ts +2 -0
  38. package/esm/backdrop/backdrop.js +2 -0
  39. package/esm/badge/badge.d.ts +2 -0
  40. package/esm/badge/badge.js +2 -0
  41. package/esm/button/base/base-button-adapter.js +2 -2
  42. package/esm/button-area/button-area-adapter.js +2 -2
  43. package/esm/button-toggle/button-toggle/button-toggle-adapter.js +2 -2
  44. package/esm/button-toggle/button-toggle/button-toggle.d.ts +2 -0
  45. package/esm/button-toggle/button-toggle/button-toggle.js +2 -0
  46. package/esm/button-toggle/button-toggle-group/button-toggle-group.d.ts +1 -1
  47. package/esm/button-toggle/button-toggle-group/button-toggle-group.js +1 -1
  48. package/esm/calendar/calendar-menu/calendar-menu.js +1 -1
  49. package/esm/calendar/calendar.d.ts +2 -0
  50. package/esm/calendar/calendar.js +3 -1
  51. package/esm/card/card.d.ts +2 -0
  52. package/esm/card/card.js +2 -0
  53. package/esm/chip-field/chip-field.d.ts +2 -0
  54. package/esm/chip-field/chip-field.js +2 -0
  55. package/esm/chips/chip/chip-adapter.js +2 -2
  56. package/esm/chips/chip/chip.d.ts +2 -0
  57. package/esm/chips/chip/chip.js +2 -0
  58. package/esm/color-picker/color-picker.d.ts +2 -0
  59. package/esm/color-picker/color-picker.js +3 -1
  60. package/esm/core/mixins/interactions/moveable/with-moveable.js +5 -7
  61. package/esm/core/utils/a11y-utils.js +17 -0
  62. package/esm/core/utils/utils.d.ts +16 -0
  63. package/esm/core/utils/utils.js +75 -2
  64. package/esm/date-picker/date-picker.d.ts +2 -0
  65. package/esm/date-picker/date-picker.js +2 -0
  66. package/esm/date-range-picker/date-range-picker.d.ts +2 -0
  67. package/esm/date-range-picker/date-range-picker.js +2 -0
  68. package/esm/deprecated/button/deprecated-button.js +3 -3
  69. package/esm/deprecated/icon-button/deprecated-icon-button.js +2 -2
  70. package/esm/dialog/dialog-adapter.d.ts +6 -0
  71. package/esm/dialog/dialog-adapter.js +16 -0
  72. package/esm/dialog/dialog-core.js +4 -0
  73. package/esm/drawer/drawer/drawer.d.ts +2 -0
  74. package/esm/drawer/drawer/drawer.js +3 -1
  75. package/esm/drawer/mini-drawer/mini-drawer.d.ts +2 -0
  76. package/esm/drawer/mini-drawer/mini-drawer.js +3 -1
  77. package/esm/drawer/modal-drawer/modal-drawer.d.ts +2 -0
  78. package/esm/drawer/modal-drawer/modal-drawer.js +3 -1
  79. package/esm/expansion-panel/expansion-panel-adapter.js +1 -1
  80. package/esm/expansion-panel/expansion-panel-core.js +3 -7
  81. package/esm/field/field-adapter.js +2 -2
  82. package/esm/field/field-core.d.ts +3 -3
  83. package/esm/focus-indicator/focus-indicator-constants.d.ts +1 -11
  84. package/esm/focus-indicator/focus-indicator-constants.js +2 -17
  85. package/esm/focus-indicator/focus-indicator.d.ts +52 -25
  86. package/esm/focus-indicator/focus-indicator.js +137 -61
  87. package/esm/focus-indicator/index.d.ts +0 -2
  88. package/esm/focus-indicator/index.js +0 -2
  89. package/esm/icon-button/icon-button.d.ts +2 -0
  90. package/esm/icon-button/icon-button.js +2 -0
  91. package/esm/keyboard-shortcut/keyboard-shortcut.d.ts +2 -0
  92. package/esm/keyboard-shortcut/keyboard-shortcut.js +2 -0
  93. package/esm/list/list/list.js +1 -1
  94. package/esm/list/list-item/list-item-constants.js +1 -1
  95. package/esm/list/list-item/list-item-core.d.ts +2 -0
  96. package/esm/list/list-item/list-item-core.js +29 -6
  97. package/esm/list/list-item/list-item.d.ts +1 -0
  98. package/esm/list/list-item/list-item.js +2 -1
  99. package/esm/list-dropdown/list-dropdown-constants.d.ts +6 -0
  100. package/esm/list-dropdown/list-dropdown-constants.js +6 -1
  101. package/esm/list-dropdown/list-dropdown-utils.js +28 -1
  102. package/esm/menu/menu-core.js +2 -2
  103. package/esm/menu/menu.d.ts +2 -0
  104. package/esm/menu/menu.js +2 -0
  105. package/esm/page-state/page-state.d.ts +2 -1
  106. package/esm/page-state/page-state.js +2 -1
  107. package/esm/paginator/paginator.d.ts +2 -0
  108. package/esm/paginator/paginator.js +2 -0
  109. package/esm/popover/popover.js +1 -1
  110. package/esm/profile-card/profile-card.d.ts +2 -0
  111. package/esm/profile-card/profile-card.js +2 -0
  112. package/esm/select/core/base-select-constants.d.ts +4 -0
  113. package/esm/select/core/base-select-core.d.ts +22 -2
  114. package/esm/select/core/base-select-core.js +217 -40
  115. package/esm/select/option/option.d.ts +2 -0
  116. package/esm/select/option/option.js +2 -0
  117. package/esm/select/option-group/option-group.d.ts +2 -0
  118. package/esm/select/option-group/option-group.js +2 -0
  119. package/esm/select/select/select-constants.d.ts +5 -0
  120. package/esm/select/select/select-constants.js +5 -2
  121. package/esm/select/select/select.d.ts +14 -2
  122. package/esm/select/select/select.js +22 -1
  123. package/esm/select/select-dropdown/select-dropdown.d.ts +2 -0
  124. package/esm/select/select-dropdown/select-dropdown.js +2 -0
  125. package/esm/split-button/split-button.js +1 -1
  126. package/esm/split-view/split-view/split-view.d.ts +2 -0
  127. package/esm/split-view/split-view/split-view.js +2 -0
  128. package/esm/split-view/split-view-panel/split-view-panel.d.ts +2 -0
  129. package/esm/split-view/split-view-panel/split-view-panel.js +3 -1
  130. package/esm/stepper/step/step.d.ts +2 -0
  131. package/esm/stepper/step/step.js +3 -1
  132. package/esm/stepper/stepper/stepper.d.ts +2 -0
  133. package/esm/stepper/stepper/stepper.js +2 -0
  134. package/esm/table/table-utils.js +3 -0
  135. package/esm/table/table.d.ts +2 -0
  136. package/esm/table/table.js +4 -1
  137. package/esm/tabs/tab/tab-adapter.js +2 -2
  138. package/esm/tabs/tab/tab.d.ts +2 -0
  139. package/esm/tabs/tab/tab.js +2 -0
  140. package/esm/time-picker/time-picker.d.ts +2 -0
  141. package/esm/time-picker/time-picker.js +2 -0
  142. package/esm/toast/toast-core.js +1 -0
  143. package/esm/tooltip/tooltip-adapter.d.ts +6 -0
  144. package/esm/tooltip/tooltip-adapter.js +9 -0
  145. package/esm/tooltip/tooltip-constants.d.ts +1 -0
  146. package/esm/tooltip/tooltip-constants.js +2 -1
  147. package/esm/tooltip/tooltip-core.d.ts +20 -0
  148. package/esm/tooltip/tooltip-core.js +96 -2
  149. package/esm/tooltip/tooltip.js +1 -1
  150. package/esm/view-switcher/view/view.d.ts +2 -0
  151. package/esm/view-switcher/view/view.js +2 -0
  152. package/esm/view-switcher/view-switcher.d.ts +2 -0
  153. package/esm/view-switcher/view-switcher.js +2 -0
  154. package/package.json +4 -4
  155. package/sass/focus-indicator/focus-indicator.scss +1 -1
  156. package/sass/icon-button/forge-icon-button.scss +3 -3
  157. package/sass/list/forge-list.scss +6 -6
  158. package/sass/table/_core.scss +13 -1
  159. package/sass/tooltip/_core.scss +0 -2
  160. package/esm/focus-indicator/focus-indicator-adapter.d.ts +0 -29
  161. package/esm/focus-indicator/focus-indicator-adapter.js +0 -37
  162. package/esm/focus-indicator/focus-indicator-core.d.ts +0 -48
  163. package/esm/focus-indicator/focus-indicator-core.js +0 -129
@@ -148,10 +148,8 @@ export class ExpansionPanelCore {
148
148
  if (this._trigger !== value) {
149
149
  this._clearTrigger();
150
150
  this._trigger = value;
151
- if (this._adapter.isConnected) {
152
- this._adapter.setTriggerElementById(this._trigger);
153
- this._syncTrigger();
154
- }
151
+ this._adapter.setTriggerElementById(this._trigger);
152
+ this._syncTrigger();
155
153
  }
156
154
  }
157
155
  get triggerElement() {
@@ -161,9 +159,7 @@ export class ExpansionPanelCore {
161
159
  if (this._adapter.triggerElement !== el) {
162
160
  this._clearTrigger();
163
161
  this._adapter.setTriggerElement(el);
164
- if (this._adapter.isConnected) {
165
- this._syncTrigger();
166
- }
162
+ this._syncTrigger();
167
163
  }
168
164
  }
169
165
  }
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { addClass, getShadowElement, removeClass, toggleClass } from '@tylertech/forge-core';
7
7
  import { BaseAdapter } from '../core/base';
8
- import { FOCUS_INDICATOR_CONSTANTS } from '../focus-indicator';
8
+ import { FOCUS_INDICATOR_TAG_NAME } from '../focus-indicator';
9
9
  import { FIELD_CONSTANTS } from './field-constants';
10
10
  export class FieldAdapter extends BaseAdapter {
11
11
  get focusIndicator() {
@@ -22,7 +22,7 @@ export class FieldAdapter extends BaseAdapter {
22
22
  this._labelElement = getShadowElement(component, FIELD_CONSTANTS.selectors.LABEL);
23
23
  this._labelSlotElement = getShadowElement(component, FIELD_CONSTANTS.selectors.LABEL_SLOT);
24
24
  this._popoverIconElement = getShadowElement(component, FIELD_CONSTANTS.selectors.POPOVER_ICON);
25
- this._focusIndicatorElement = getShadowElement(component, FOCUS_INDICATOR_CONSTANTS.elementName);
25
+ this._focusIndicatorElement = getShadowElement(component, FOCUS_INDICATOR_TAG_NAME);
26
26
  }
27
27
  addRootListener(name, listener) {
28
28
  this._rootElement.addEventListener(name, listener);
@@ -23,7 +23,7 @@ export interface IFieldCore {
23
23
  popoverExpanded: boolean;
24
24
  multiline: boolean;
25
25
  supportTextInset: FieldSupportTextInset;
26
- focusIndicatorTargetElement: HTMLElement;
26
+ focusIndicatorTargetElement: HTMLElement | undefined;
27
27
  focusIndicatorFocusMode: FocusIndicatorFocusMode;
28
28
  focusIndicatorAllowFocus: boolean;
29
29
  initialize(): void;
@@ -88,8 +88,8 @@ export declare class FieldCore implements IFieldCore {
88
88
  set multiline(value: boolean);
89
89
  get supportTextInset(): FieldSupportTextInset;
90
90
  set supportTextInset(value: FieldSupportTextInset);
91
- get focusIndicatorTargetElement(): HTMLElement;
92
- set focusIndicatorTargetElement(value: HTMLElement);
91
+ get focusIndicatorTargetElement(): HTMLElement | undefined;
92
+ set focusIndicatorTargetElement(value: HTMLElement | undefined);
93
93
  get focusIndicatorFocusMode(): FocusIndicatorFocusMode;
94
94
  set focusIndicatorFocusMode(value: FocusIndicatorFocusMode);
95
95
  get focusIndicatorAllowFocus(): boolean;
@@ -4,17 +4,7 @@
4
4
  * License: Apache-2.0
5
5
  */
6
6
  export declare const FOCUS_INDICATOR_CONSTANTS: {
7
+ /** @deprecated use `FOCUS_INDICATOR_TAG_NAME` instead. */
7
8
  elementName: "forge-focus-indicator";
8
- attributes: {
9
- TARGET: string;
10
- ACTIVE: string;
11
- INWARD: string;
12
- CIRCULAR: string;
13
- ALLOW_FOCUS: string;
14
- FOCUS_MODE: string;
15
- };
16
- defaults: {
17
- FOCUS_MODE: FocusIndicatorFocusMode;
18
- };
19
9
  };
20
10
  export type FocusIndicatorFocusMode = 'focus' | 'focusin';
@@ -5,22 +5,7 @@
5
5
  */
6
6
  import { COMPONENT_NAME_PREFIX } from '../constants';
7
7
  const elementName = `${COMPONENT_NAME_PREFIX}focus-indicator`;
8
- const observedAttributes = {
9
- TARGET: 'target',
10
- ACTIVE: 'active',
11
- INWARD: 'inward',
12
- CIRCULAR: 'circular',
13
- ALLOW_FOCUS: 'allow-focus',
14
- FOCUS_MODE: 'focus-mode'
15
- };
16
- const attributes = {
17
- ...observedAttributes
18
- };
19
- const defaults = {
20
- FOCUS_MODE: 'focusin'
21
- };
22
8
  export const FOCUS_INDICATOR_CONSTANTS = {
23
- elementName,
24
- attributes,
25
- defaults
9
+ /** @deprecated use `FOCUS_INDICATOR_TAG_NAME` instead. */
10
+ elementName
26
11
  };
@@ -3,10 +3,13 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import { BaseComponent, IBaseComponent } from '../core/base/base-component';
6
+ import { CUSTOM_ELEMENT_NAME_PROPERTY } from '@tylertech/forge-core';
7
+ import { nothing, PropertyValues } from 'lit';
8
+ import { IBaseComponent } from '../core/base/base-component';
9
+ import { BaseLitElement } from '../core/base/base-lit-element';
7
10
  import { FocusIndicatorFocusMode } from './focus-indicator-constants';
8
11
  export interface IFocusIndicatorComponent extends IBaseComponent {
9
- targetElement: HTMLElement;
12
+ targetElement: HTMLElement | undefined;
10
13
  target: string | null;
11
14
  active: boolean;
12
15
  inward: boolean;
@@ -19,26 +22,12 @@ declare global {
19
22
  'forge-focus-indicator': IFocusIndicatorComponent;
20
23
  }
21
24
  }
25
+ export declare const FOCUS_INDICATOR_TAG_NAME: keyof HTMLElementTagNameMap;
22
26
  /**
23
27
  * @tag forge-focus-indicator
24
28
  *
25
29
  * @summary Renders a focus indicator when an attached element matches `:focus-visible`.
26
30
  *
27
- * @property {HTMLElement} targetElement - The element to attach the focus indicator to.
28
- * @property {string} target - The id of the element to attach the focus indicator to.
29
- * @property {boolean} [active=false] - Controls whether the indicator is active.
30
- * @property {boolean} [inward=false] - Controls whether the indicator renders inward.
31
- * @property {boolean} [circular=false] - Controls whether the indicator renders circular.
32
- * @property {boolean} [allowFocus=false] - Controls whether the indicator renders when the target element matches `:focus` instead of `:focus-visible`.
33
- * @property {FocusIndicatorFocusMode} [focusMode="focusin"] - The focus mode to use.
34
- *
35
- * @attribute {string} target - The id of the element to attach the focus indicator to.
36
- * @attribute {boolean} [active=false] - Controls whether the indicator is active.
37
- * @attribute {boolean} [inward=false] - Controls whether the indicator renders inward.
38
- * @attribute {boolean} [circular=false] - Controls whether the indicator renders circular.
39
- * @attribute {boolean} [allow-focus=false] - Controls whether the indicator renders when the target element matches `:focus` instead of `:focus-visible`.
40
- * @attribute {FocusIndicatorFocusMode} [focus-mode="focusin"] - The focus mode to use.
41
- *
42
31
  * @cssproperty --forge-focus-indicator-display - The `display` style. Defaults to `flex`.
43
32
  * @cssproperty --forge-focus-indicator-width - The width of the focus indicator when resting.
44
33
  * @cssproperty --forge-focus-indicator-active-width - The width of the focus indicator when active. When animating this is the max extent.
@@ -62,18 +51,56 @@ declare global {
62
51
  * @cssclass forge-focus-indicator--active - Forces the focus indicator to be visible.
63
52
  * @cssclass forge-focus-indicator--inward - Renders the focus inside the target element.
64
53
  */
65
- export declare class FocusIndicatorComponent extends BaseComponent implements IFocusIndicatorComponent {
66
- static get observedAttributes(): string[];
67
- private _core;
68
- constructor();
69
- connectedCallback(): void;
70
- disconnectedCallback(): void;
71
- attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
72
- targetElement: HTMLElement;
54
+ export declare class FocusIndicatorComponent extends BaseLitElement implements IFocusIndicatorComponent {
55
+ #private;
56
+ static styles: import("lit").CSSResult;
57
+ /** @deprecated Used for compatibility with legacy Forge @customElement decorator. */
58
+ static [CUSTOM_ELEMENT_NAME_PROPERTY]: keyof HTMLElementTagNameMap;
59
+ /**
60
+ * The element to attach the focus indicator to.
61
+ * @default undefined
62
+ */
63
+ set targetElement(value: HTMLElement | undefined);
64
+ get targetElement(): HTMLElement | undefined;
65
+ /**
66
+ * The id of the element to attach the focus indicator to.
67
+ * @default null
68
+ * @attribute
69
+ */
73
70
  target: string | null;
71
+ /**
72
+ * Controls whether the indicator is active.
73
+ * @default false
74
+ * @attribute
75
+ */
74
76
  active: boolean;
77
+ /**
78
+ * Controls whether the indicator renders inward.
79
+ * @default false
80
+ * @attribute
81
+ */
75
82
  inward: boolean;
83
+ /**
84
+ * Controls whether the indicator renders circular.
85
+ * @default false
86
+ * @attribute
87
+ */
76
88
  circular: boolean;
89
+ /**
90
+ * Controls whether the indicator renders when the target element matches `:focus` instead of `:focus-visible`.
91
+ * @default false
92
+ * @attribute allow-focus
93
+ */
77
94
  allowFocus: boolean;
95
+ /**
96
+ * The focus mode to use. Valid values are `focusin` (default) and `focus`.
97
+ * @default 'focusin'
98
+ * @attribute focus-mode
99
+ */
78
100
  focusMode: FocusIndicatorFocusMode;
101
+ constructor();
102
+ connectedCallback(): void;
103
+ disconnectedCallback(): void;
104
+ willUpdate(changedProperties: PropertyValues<this>): void;
105
+ render(): typeof nothing;
79
106
  }
@@ -3,34 +3,20 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import { __decorate } from "tslib";
7
- import { attachShadowTemplate, coerceBoolean, customElement, coreProperty } from '@tylertech/forge-core';
8
- import { BaseComponent } from '../core/base/base-component';
9
- import { FocusIndicatorAdapter } from './focus-indicator-adapter';
10
- import { FOCUS_INDICATOR_CONSTANTS } from './focus-indicator-constants';
11
- import { FocusIndicatorCore } from './focus-indicator-core';
12
- const template = '<template></template>';
13
- const styles = ':host{--_focus-indicator-display:var(--forge-focus-indicator-display, flex);--_focus-indicator-width:var(--forge-focus-indicator-width, var(--forge-border-medium, 2px));--_focus-indicator-active-width:var(--forge-focus-indicator-active-width, 6px);--_focus-indicator-color:var(--forge-focus-indicator-color, var(--forge-theme-primary, #3f51b5));--_focus-indicator-shape:var(--forge-focus-indicator-shape, calc(var(--forge-shape-extra-small, 1px) * var(--forge-shape-factor, 1)));--_focus-indicator-duration:var(--forge-focus-indicator-duration, var(--forge-animation-duration-long4, 600ms));--_focus-indicator-easing:var(--forge-focus-indicator-easing, var(--forge-animation-easing-emphasized, cubic-bezier(0.2, 0, 0, 1)));--_focus-indicator-shape-start-start:var(--forge-focus-indicator-shape-start-start, var(--_focus-indicator-shape));--_focus-indicator-shape-start-end:var(--forge-focus-indicator-shape-start-end, var(--_focus-indicator-shape));--_focus-indicator-shape-end-end:var(--forge-focus-indicator-shape-end-end, var(--_focus-indicator-shape));--_focus-indicator-shape-end-start:var(--forge-focus-indicator-shape-end-start, var(--_focus-indicator-shape));--_focus-indicator-outward-offset:var(--forge-focus-indicator-outward-offset, var(--forge-spacing-xxsmall, 4px));--_focus-indicator-inward-offset:var(--forge-focus-indicator-inward-offset, 0px);--_focus-indicator-offset-block:var(--forge-focus-indicator-offset-block, 0);--_focus-indicator-offset-inline:var(--forge-focus-indicator-offset-inline, 0)}:host{animation-delay:0s,calc(var(--_focus-indicator-duration) * .25);animation-duration:calc(var(--_focus-indicator-duration) * .25),calc(var(--_focus-indicator-duration) * .75);animation-timing-function:var(--_focus-indicator-easing);box-sizing:border-box;color:var(--_focus-indicator-color);display:none;pointer-events:none;position:absolute;margin-block:var(--_focus-indicator-offset-block);margin-inline:var(--_focus-indicator-offset-inline)}:host([hidden]){display:none}:host([active]){display:var(--_focus-indicator-display)}:host(:not([inward])){animation-name:forge-focus-indicator-outward-grow,forge-focus-indicator-outward-shrink;border-end-end-radius:calc(var(--_focus-indicator-shape-end-end) + var(--_focus-indicator-outward-offset));border-end-start-radius:calc(var(--_focus-indicator-shape-end-start) + var(--_focus-indicator-outward-offset));border-start-end-radius:calc(var(--_focus-indicator-shape-start-end) + var(--_focus-indicator-outward-offset));border-start-start-radius:calc(var(--_focus-indicator-shape-start-start) + var(--_focus-indicator-outward-offset));inset:calc(-1 * var(--_focus-indicator-outward-offset));outline:var(--_focus-indicator-width) solid currentColor}:host([inward]){animation-name:forge-focus-indicator-inward-grow,forge-focus-indicator-inward-shrink;border-end-end-radius:calc(var(--_focus-indicator-shape-end-end) - var(--_focus-indicator-inward-offset));border-end-start-radius:calc(var(--_focus-indicator-shape-end-start) - var(--_focus-indicator-inward-offset));border-start-end-radius:calc(var(--_focus-indicator-shape-start-end) - var(--_focus-indicator-inward-offset));border-start-start-radius:calc(var(--_focus-indicator-shape-start-start) - var(--_focus-indicator-inward-offset));border:var(--_focus-indicator-width) solid currentColor;inset:var(--_focus-indicator-inward-offset)}:host([circular]){--_focus-indicator-shape:var(--forge-focus-indicator-shape, 50%)}@keyframes forge-focus-indicator-outward-grow{from{outline-width:0}to{outline-width:var(--_focus-indicator-active-width)}}@keyframes forge-focus-indicator-outward-shrink{from{outline-width:var(--_focus-indicator-active-width)}}@keyframes forge-focus-indicator-inward-grow{from{border-width:0}to{border-width:var(--_focus-indicator-active-width)}}@keyframes forge-focus-indicator-inward-shrink{from{border-width:var(--_focus-indicator-active-width)}}@media (prefers-reduced-motion){:host{animation:none}}';
6
+ var _FocusIndicatorComponent_instances, _FocusIndicatorComponent_targetElement, _FocusIndicatorComponent_internals, _FocusIndicatorComponent_detachTargetListeners, _FocusIndicatorComponent_attachTargetListeners, _FocusIndicatorComponent_handleTargetInteraction, _FocusIndicatorComponent_isActive, _FocusIndicatorComponent_handleTargetChange, _FocusIndicatorComponent_handleActiveChange, _a;
7
+ import { __classPrivateFieldGet, __classPrivateFieldSet, __decorate } from "tslib";
8
+ import { CUSTOM_ELEMENT_NAME_PROPERTY } from '@tylertech/forge-core';
9
+ import { nothing, unsafeCSS } from 'lit';
10
+ import { customElement, property } from 'lit/decorators.js';
11
+ import { BaseLitElement } from '../core/base/base-lit-element';
12
+ import { locateTargetHeuristic, toggleState } from '../core/utils/utils';
13
+ const styles = ':host{--_focus-indicator-display:var(--forge-focus-indicator-display, flex);--_focus-indicator-width:var(--forge-focus-indicator-width, var(--forge-border-medium, 2px));--_focus-indicator-active-width:var(--forge-focus-indicator-active-width, 6px);--_focus-indicator-color:var(--forge-focus-indicator-color, var(--forge-theme-primary, #3f51b5));--_focus-indicator-shape:var(--forge-focus-indicator-shape, calc(var(--forge-shape-extra-small, 1px) * var(--forge-shape-factor, 1)));--_focus-indicator-duration:var(--forge-focus-indicator-duration, var(--forge-animation-duration-long4, 600ms));--_focus-indicator-easing:var(--forge-focus-indicator-easing, var(--forge-animation-easing-emphasized, cubic-bezier(0.2, 0, 0, 1)));--_focus-indicator-shape-start-start:var(--forge-focus-indicator-shape-start-start, var(--_focus-indicator-shape));--_focus-indicator-shape-start-end:var(--forge-focus-indicator-shape-start-end, var(--_focus-indicator-shape));--_focus-indicator-shape-end-end:var(--forge-focus-indicator-shape-end-end, var(--_focus-indicator-shape));--_focus-indicator-shape-end-start:var(--forge-focus-indicator-shape-end-start, var(--_focus-indicator-shape));--_focus-indicator-outward-offset:var(--forge-focus-indicator-outward-offset, var(--forge-spacing-xxsmall, 4px));--_focus-indicator-inward-offset:var(--forge-focus-indicator-inward-offset, 0px);--_focus-indicator-offset-block:var(--forge-focus-indicator-offset-block, 0);--_focus-indicator-offset-inline:var(--forge-focus-indicator-offset-inline, 0)}:host{animation-delay:0s,calc(var(--_focus-indicator-duration) * .25);animation-duration:calc(var(--_focus-indicator-duration) * .25),calc(var(--_focus-indicator-duration) * .75);animation-timing-function:var(--_focus-indicator-easing);box-sizing:border-box;color:var(--_focus-indicator-color);display:none;pointer-events:none;position:absolute;margin-block:var(--_focus-indicator-offset-block);margin-inline:var(--_focus-indicator-offset-inline)}:host([hidden]){display:none}:host(:where(:state(active),[active])){display:var(--_focus-indicator-display)}:host(:not([inward])){animation-name:forge-focus-indicator-outward-grow,forge-focus-indicator-outward-shrink;border-end-end-radius:calc(var(--_focus-indicator-shape-end-end) + var(--_focus-indicator-outward-offset));border-end-start-radius:calc(var(--_focus-indicator-shape-end-start) + var(--_focus-indicator-outward-offset));border-start-end-radius:calc(var(--_focus-indicator-shape-start-end) + var(--_focus-indicator-outward-offset));border-start-start-radius:calc(var(--_focus-indicator-shape-start-start) + var(--_focus-indicator-outward-offset));inset:calc(-1 * var(--_focus-indicator-outward-offset));outline:var(--_focus-indicator-width) solid currentColor}:host([inward]){animation-name:forge-focus-indicator-inward-grow,forge-focus-indicator-inward-shrink;border-end-end-radius:calc(var(--_focus-indicator-shape-end-end) - var(--_focus-indicator-inward-offset));border-end-start-radius:calc(var(--_focus-indicator-shape-end-start) - var(--_focus-indicator-inward-offset));border-start-end-radius:calc(var(--_focus-indicator-shape-start-end) - var(--_focus-indicator-inward-offset));border-start-start-radius:calc(var(--_focus-indicator-shape-start-start) - var(--_focus-indicator-inward-offset));border:var(--_focus-indicator-width) solid currentColor;inset:var(--_focus-indicator-inward-offset)}:host([circular]){--_focus-indicator-shape:var(--forge-focus-indicator-shape, 50%)}@keyframes forge-focus-indicator-outward-grow{from{outline-width:0}to{outline-width:var(--_focus-indicator-active-width)}}@keyframes forge-focus-indicator-outward-shrink{from{outline-width:var(--_focus-indicator-active-width)}}@keyframes forge-focus-indicator-inward-grow{from{border-width:0}to{border-width:var(--_focus-indicator-active-width)}}@keyframes forge-focus-indicator-inward-shrink{from{border-width:var(--_focus-indicator-active-width)}}@media (prefers-reduced-motion){:host{animation:none}}';
14
+ export const FOCUS_INDICATOR_TAG_NAME = 'forge-focus-indicator';
14
15
  /**
15
16
  * @tag forge-focus-indicator
16
17
  *
17
18
  * @summary Renders a focus indicator when an attached element matches `:focus-visible`.
18
19
  *
19
- * @property {HTMLElement} targetElement - The element to attach the focus indicator to.
20
- * @property {string} target - The id of the element to attach the focus indicator to.
21
- * @property {boolean} [active=false] - Controls whether the indicator is active.
22
- * @property {boolean} [inward=false] - Controls whether the indicator renders inward.
23
- * @property {boolean} [circular=false] - Controls whether the indicator renders circular.
24
- * @property {boolean} [allowFocus=false] - Controls whether the indicator renders when the target element matches `:focus` instead of `:focus-visible`.
25
- * @property {FocusIndicatorFocusMode} [focusMode="focusin"] - The focus mode to use.
26
- *
27
- * @attribute {string} target - The id of the element to attach the focus indicator to.
28
- * @attribute {boolean} [active=false] - Controls whether the indicator is active.
29
- * @attribute {boolean} [inward=false] - Controls whether the indicator renders inward.
30
- * @attribute {boolean} [circular=false] - Controls whether the indicator renders circular.
31
- * @attribute {boolean} [allow-focus=false] - Controls whether the indicator renders when the target element matches `:focus` instead of `:focus-visible`.
32
- * @attribute {FocusIndicatorFocusMode} [focus-mode="focusin"] - The focus mode to use.
33
- *
34
20
  * @cssproperty --forge-focus-indicator-display - The `display` style. Defaults to `flex`.
35
21
  * @cssproperty --forge-focus-indicator-width - The width of the focus indicator when resting.
36
22
  * @cssproperty --forge-focus-indicator-active-width - The width of the focus indicator when active. When animating this is the max extent.
@@ -54,68 +40,158 @@ const styles = ':host{--_focus-indicator-display:var(--forge-focus-indicator-dis
54
40
  * @cssclass forge-focus-indicator--active - Forces the focus indicator to be visible.
55
41
  * @cssclass forge-focus-indicator--inward - Renders the focus inside the target element.
56
42
  */
57
- let FocusIndicatorComponent = class FocusIndicatorComponent extends BaseComponent {
58
- static get observedAttributes() {
59
- return Object.values(FOCUS_INDICATOR_CONSTANTS.attributes);
43
+ let FocusIndicatorComponent = class FocusIndicatorComponent extends BaseLitElement {
44
+ /**
45
+ * The element to attach the focus indicator to.
46
+ * @default undefined
47
+ */
48
+ set targetElement(value) {
49
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_detachTargetListeners).call(this);
50
+ __classPrivateFieldSet(this, _FocusIndicatorComponent_targetElement, value, "f");
51
+ if (this.isConnected) {
52
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_attachTargetListeners).call(this);
53
+ }
54
+ }
55
+ get targetElement() {
56
+ return __classPrivateFieldGet(this, _FocusIndicatorComponent_targetElement, "f");
60
57
  }
61
58
  constructor() {
62
59
  super();
63
- attachShadowTemplate(this, template, styles);
64
- this._core = new FocusIndicatorCore(new FocusIndicatorAdapter(this));
60
+ _FocusIndicatorComponent_instances.add(this);
61
+ /**
62
+ * The id of the element to attach the focus indicator to.
63
+ * @default null
64
+ * @attribute
65
+ */
66
+ this.target = null;
67
+ /**
68
+ * Controls whether the indicator is active.
69
+ * @default false
70
+ * @attribute
71
+ */
72
+ this.active = false;
73
+ /**
74
+ * Controls whether the indicator renders inward.
75
+ * @default false
76
+ * @attribute
77
+ */
78
+ this.inward = false;
79
+ /**
80
+ * Controls whether the indicator renders circular.
81
+ * @default false
82
+ * @attribute
83
+ */
84
+ this.circular = false;
85
+ /**
86
+ * Controls whether the indicator renders when the target element matches `:focus` instead of `:focus-visible`.
87
+ * @default false
88
+ * @attribute allow-focus
89
+ */
90
+ this.allowFocus = false;
91
+ /**
92
+ * The focus mode to use. Valid values are `focusin` (default) and `focus`.
93
+ * @default 'focusin'
94
+ * @attribute focus-mode
95
+ */
96
+ this.focusMode = 'focusin';
97
+ _FocusIndicatorComponent_targetElement.set(this, void 0);
98
+ _FocusIndicatorComponent_internals.set(this, void 0);
99
+ __classPrivateFieldSet(this, _FocusIndicatorComponent_internals, this.attachInternals(), "f");
65
100
  }
66
101
  connectedCallback() {
67
- this._core.initialize();
102
+ super.connectedCallback();
103
+ if (!__classPrivateFieldGet(this, _FocusIndicatorComponent_targetElement, "f")) {
104
+ __classPrivateFieldSet(this, _FocusIndicatorComponent_targetElement, locateTargetHeuristic(this, this.target) ?? undefined, "f");
105
+ }
106
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_attachTargetListeners).call(this);
68
107
  }
69
108
  disconnectedCallback() {
70
- this._core.destroy();
109
+ super.disconnectedCallback();
110
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_detachTargetListeners).call(this);
111
+ __classPrivateFieldSet(this, _FocusIndicatorComponent_targetElement, undefined, "f");
71
112
  }
72
- attributeChangedCallback(name, oldValue, newValue) {
73
- switch (name) {
74
- case FOCUS_INDICATOR_CONSTANTS.attributes.TARGET:
75
- this.target = newValue;
76
- break;
77
- case FOCUS_INDICATOR_CONSTANTS.attributes.ACTIVE:
78
- this.active = coerceBoolean(newValue);
79
- break;
80
- case FOCUS_INDICATOR_CONSTANTS.attributes.INWARD:
81
- this.inward = coerceBoolean(newValue);
82
- break;
83
- case FOCUS_INDICATOR_CONSTANTS.attributes.CIRCULAR:
84
- this.circular = coerceBoolean(newValue);
85
- break;
86
- case FOCUS_INDICATOR_CONSTANTS.attributes.ALLOW_FOCUS:
87
- this.allowFocus = coerceBoolean(newValue);
88
- break;
89
- case FOCUS_INDICATOR_CONSTANTS.attributes.FOCUS_MODE:
90
- this.focusMode = newValue;
91
- break;
113
+ willUpdate(changedProperties) {
114
+ if (this.hasUpdated) {
115
+ if (changedProperties.has('target')) {
116
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_handleTargetChange).call(this);
117
+ }
118
+ }
119
+ if (changedProperties.has('active')) {
120
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_handleActiveChange).call(this);
92
121
  }
93
122
  }
123
+ render() {
124
+ return nothing; // This component does not render any elements, it only applies encapsulated styles to the host element.
125
+ }
126
+ };
127
+ _FocusIndicatorComponent_targetElement = new WeakMap();
128
+ _FocusIndicatorComponent_internals = new WeakMap();
129
+ _FocusIndicatorComponent_instances = new WeakSet();
130
+ _a = CUSTOM_ELEMENT_NAME_PROPERTY;
131
+ _FocusIndicatorComponent_detachTargetListeners = function _FocusIndicatorComponent_detachTargetListeners() {
132
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_targetElement, "f")?.removeEventListener(this.focusMode, __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_handleTargetInteraction).bind(this));
133
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_targetElement, "f")?.removeEventListener('focusout', __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_handleTargetInteraction).bind(this));
134
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_targetElement, "f")?.removeEventListener('pointerdown', __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_handleTargetInteraction).bind(this));
135
+ };
136
+ _FocusIndicatorComponent_attachTargetListeners = function _FocusIndicatorComponent_attachTargetListeners() {
137
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_targetElement, "f")?.addEventListener(this.focusMode, __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_handleTargetInteraction).bind(this));
138
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_targetElement, "f")?.addEventListener('focusout', __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_handleTargetInteraction).bind(this));
139
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_targetElement, "f")?.addEventListener('pointerdown', __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_handleTargetInteraction).bind(this));
140
+ };
141
+ _FocusIndicatorComponent_handleTargetInteraction = function _FocusIndicatorComponent_handleTargetInteraction(evt) {
142
+ const target = evt.target;
143
+ switch (evt.type) {
144
+ case this.focusMode:
145
+ this.active = __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_isActive).call(this, this.allowFocus ? ':focus' : ':focus-visible', target);
146
+ break;
147
+ case 'focusout':
148
+ this.active = false;
149
+ break;
150
+ case 'pointerdown':
151
+ this.active = this.allowFocus ? __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_isActive).call(this, ':focus', target) : __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_isActive).call(this, ':focus-visible', target);
152
+ break;
153
+ }
154
+ };
155
+ _FocusIndicatorComponent_isActive = function _FocusIndicatorComponent_isActive(selector, el) {
156
+ const targetedEl = el ?? __classPrivateFieldGet(this, _FocusIndicatorComponent_targetElement, "f");
157
+ return !!targetedEl?.matches(selector);
158
+ };
159
+ _FocusIndicatorComponent_handleTargetChange = function _FocusIndicatorComponent_handleTargetChange() {
160
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_detachTargetListeners).call(this);
161
+ if (this.isConnected) {
162
+ __classPrivateFieldSet(this, _FocusIndicatorComponent_targetElement, locateTargetHeuristic(this, this.target) ?? undefined, "f");
163
+ __classPrivateFieldGet(this, _FocusIndicatorComponent_instances, "m", _FocusIndicatorComponent_attachTargetListeners).call(this);
164
+ }
165
+ };
166
+ _FocusIndicatorComponent_handleActiveChange = function _FocusIndicatorComponent_handleActiveChange() {
167
+ this.toggleAttribute('active', this.active);
168
+ toggleState(__classPrivateFieldGet(this, _FocusIndicatorComponent_internals, "f"), 'active', this.active);
94
169
  };
170
+ FocusIndicatorComponent.styles = unsafeCSS(styles);
171
+ /** @deprecated Used for compatibility with legacy Forge @customElement decorator. */
172
+ FocusIndicatorComponent[_a] = FOCUS_INDICATOR_TAG_NAME;
95
173
  __decorate([
96
- coreProperty()
97
- ], FocusIndicatorComponent.prototype, "targetElement", void 0);
174
+ property({ attribute: false })
175
+ ], FocusIndicatorComponent.prototype, "targetElement", null);
98
176
  __decorate([
99
- coreProperty()
177
+ property({ type: String })
100
178
  ], FocusIndicatorComponent.prototype, "target", void 0);
101
179
  __decorate([
102
- coreProperty()
180
+ property({ type: Boolean, reflect: true })
103
181
  ], FocusIndicatorComponent.prototype, "active", void 0);
104
182
  __decorate([
105
- coreProperty()
183
+ property({ type: Boolean, reflect: true })
106
184
  ], FocusIndicatorComponent.prototype, "inward", void 0);
107
185
  __decorate([
108
- coreProperty()
186
+ property({ type: Boolean, reflect: true })
109
187
  ], FocusIndicatorComponent.prototype, "circular", void 0);
110
188
  __decorate([
111
- coreProperty()
189
+ property({ type: Boolean, attribute: 'allow-focus' })
112
190
  ], FocusIndicatorComponent.prototype, "allowFocus", void 0);
113
191
  __decorate([
114
- coreProperty()
192
+ property({ attribute: 'focus-mode' })
115
193
  ], FocusIndicatorComponent.prototype, "focusMode", void 0);
116
194
  FocusIndicatorComponent = __decorate([
117
- customElement({
118
- name: FOCUS_INDICATOR_CONSTANTS.elementName
119
- })
195
+ customElement(FOCUS_INDICATOR_TAG_NAME)
120
196
  ], FocusIndicatorComponent);
121
197
  export { FocusIndicatorComponent };
@@ -3,8 +3,6 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- export * from './focus-indicator-adapter';
7
6
  export * from './focus-indicator-constants';
8
- export * from './focus-indicator-core';
9
7
  export * from './focus-indicator';
10
8
  export declare function defineFocusIndicatorComponent(): void;
@@ -5,9 +5,7 @@
5
5
  */
6
6
  import { defineCustomElement } from '@tylertech/forge-core';
7
7
  import { FocusIndicatorComponent } from './focus-indicator';
8
- export * from './focus-indicator-adapter';
9
8
  export * from './focus-indicator-constants';
10
- export * from './focus-indicator-core';
11
9
  export * from './focus-indicator';
12
10
  export function defineFocusIndicatorComponent() {
13
11
  defineCustomElement(FocusIndicatorComponent);
@@ -25,6 +25,8 @@ declare global {
25
25
  }
26
26
  }
27
27
  /**
28
+ * @summary A clickable button component that displays an icon with support for different variants, themes, toggle states, and accessibility features.
29
+ *
28
30
  * @tag forge-icon-button
29
31
  *
30
32
  * @globalconfig variant
@@ -16,6 +16,8 @@ import { IconButtonAdapter } from './icon-button-adapter';
16
16
  const template = '<template><div class=\"forge-icon-button\" part=\"root\"><slot name=\"start\"></slot><slot></slot><slot name=\"on\"></slot><slot name=\"end\"></slot><slot name=\"badge\"></slot><forge-focus-indicator target=\":host\" part=\"focus-indicator\"></forge-focus-indicator><forge-state-layer target=\":host\" exportparts=\"surface:state-layer\"></forge-state-layer></div></template>';
17
17
  const styles = ':host{--_icon-button-display:var(--forge-icon-button-display, inline-flex);--_icon-button-disabled-cursor:var(--forge-icon-button-disabled-cursor, not-allowed)}:host{display:var(--_icon-button-display);position:relative;outline:0;-webkit-tap-highlight-color:transparent}:host([hidden]){display:none}.forge-icon-button{--_icon-button-size:var(--forge-icon-button-size, 48px);--_icon-button-gap:var(--forge-icon-button-gap, 0);--_icon-button-icon-color:var(--forge-icon-button-icon-color, currentColor);--_icon-button-background-color:var(--forge-icon-button-background-color, none);--_icon-button-icon-size:var(--forge-icon-button-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.5));--_icon-button-cursor:var(--forge-icon-button-cursor, pointer);--_icon-button-padding:var(--forge-icon-button-padding, var(--forge-spacing-xxsmall, 4px));--_icon-button-border:var(--forge-icon-button-border, none);--_icon-button-shadow:var(--forge-icon-button-shadow, none);--_icon-button-transition-duration:var(--forge-icon-button-transition-duration, var(--forge-animation-duration-short3, 150ms));--_icon-button-transition-timing:var(--forge-icon-button-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)));--_icon-button-shape:var(--forge-icon-button-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)));--_icon-button-shape-start-start:var(--forge-icon-button-shape-start-start, var(--_icon-button-shape));--_icon-button-shape-start-end:var(--forge-icon-button-shape-start-end, var(--_icon-button-shape));--_icon-button-shape-end-start:var(--forge-icon-button-shape-end-start, var(--_icon-button-shape));--_icon-button-shape-end-end:var(--forge-icon-button-shape-end-end, var(--_icon-button-shape));--_icon-button-shape-squared:var(--forge-icon-button-shape-squared, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));--_icon-button-outlined-border-width:var(--forge-icon-button-outlined-border-width, 1px);--_icon-button-outlined-border-style:var(--forge-icon-button-outlined-border-style, solid);--_icon-button-outlined-border-color:var(--forge-icon-button-outlined-border-color, var(--_icon-button-icon-color));--_icon-button-tonal-icon-color:var(--forge-icon-button-tonal-icon-color, var(--forge-theme-on-primary-container, #222c62));--_icon-button-tonal-background-color:var(--forge-icon-button-tonal-background-color, var(--forge-theme-primary-container, #d1d5ed));--_icon-button-filled-icon-color:var(--forge-icon-button-filled-icon-color, var(--forge-theme-on-primary, #ffffff));--_icon-button-filled-background-color:var(--forge-icon-button-filled-background-color, var(--forge-theme-primary, #3f51b5));--_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));--_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));--_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));--_icon-button-raised-disabled-shadow:var(--forge-icon-button-raised-disabled-shadow, none);--_icon-button-density-small-size:var(--forge-icon-button-density-small-size, 24px);--_icon-button-density-small-padding:var(--forge-icon-button-density-small-padding, var(--forge-spacing-xxxsmall, 2px));--_icon-button-density-small-icon-size:var(--forge-icon-button-density-small-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1.125));--_icon-button-density-medium-size:var(--forge-icon-button-density-medium-size, 36px);--_icon-button-density-medium-padding:var(--forge-icon-button-density-medium-padding, var(--forge-spacing-xxsmall, 4px));--_icon-button-density-large-size:var(--forge-icon-button-density-large-size, var(--_icon-button-size));--_icon-button-toggle-on-background-color:var(--forge-icon-button-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));--_icon-button-toggle-on-icon-color:var(--forge-icon-button-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));--_icon-button-outlined-toggle-on-background-color:var(--forge-icon-button-outlined-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));--_icon-button-outlined-toggle-on-icon-color:var(--forge-icon-button-outlined-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));--_icon-button-tonal-toggle-background-color:var(--forge-icon-button-tonal-toggle-background-color, var(--forge-theme-surface-container-low, #ebebeb));--_icon-button-tonal-toggle-on-background-color:var(--forge-icon-button-tonal-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));--_icon-button-tonal-toggle-on-icon-color:var(--forge-icon-button-tonal-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5));--_icon-button-filled-toggle-background-color:var(--forge-icon-button-filled-toggle-background-color, var(--forge-theme-surface-container-low, #ebebeb));--_icon-button-filled-toggle-icon-color:var(--forge-icon-button-filled-toggle-icon-color, var(--forge-theme-primary, #3f51b5));--_icon-button-filled-toggle-on-background-color:var(--forge-icon-button-filled-toggle-on-background-color, var(--forge-theme-primary, #3f51b5));--_icon-button-filled-toggle-on-icon-color:var(--forge-icon-button-filled-toggle-on-icon-color, var(--forge-theme-on-primary, #ffffff));--_icon-button-disabled-opacity:var(--forge-icon-button-disabled-opacity, 0.38);--_icon-button-popover-icon-padding:var(--forge-icon-button-popover-icon-padding, var(--forge-spacing-xsmall, 8px));--_icon-button-focus-indicator-color:var(--forge-icon-button-focus-indicator-color, var(--forge-theme-primary, #3f51b5))}.forge-icon-button{position:relative;z-index:0;display:var(--_icon-button-display);align-items:center;justify-content:center;gap:var(--_icon-button-gap);box-sizing:border-box;height:var(--_icon-button-density-large-size);min-width:var(--_icon-button-density-large-size);border:var(--_icon-button-border);border-start-start-radius:var(--_icon-button-shape-start-start);border-start-end-radius:var(--_icon-button-shape-start-end);border-end-start-radius:var(--_icon-button-shape-end-start);border-end-end-radius:var(--_icon-button-shape-end-end);padding:var(--_icon-button-padding);box-shadow:var(--_icon-button-shadow);color:var(--_icon-button-icon-color);background:var(--_icon-button-background-color);font-size:var(--_icon-button-icon-size);cursor:var(--_icon-button-cursor);user-select:none;transition-property:box-shadow,background;transition-duration:var(--_icon-button-transition-duration);transition-timing-function:var(--_icon-button-transition-timing)}.forge-icon-button ::slotted(:is([slot=start],[slot=end])){font-size:var(--_icon-button-icon-size);height:var(--_icon-button-icon-size);width:var(--_icon-button-icon-size);font-weight:inherit}::slotted(a){height:100%;width:100%;outline:0;border-radius:var(--_icon-button-shape);padding-inline:var(--_icon-button-padding);display:flex;align-items:center;justify-content:center;gap:var(--_icon-button-gap);color:var(--_icon-button-icon-color);text-decoration:none}forge-focus-indicator{--forge-focus-indicator-color:var(--_icon-button-focus-indicator-color);--forge-focus-indicator-shape-start-start:var(--_icon-button-shape-start-start);--forge-focus-indicator-shape-start-end:var(--_icon-button-shape-start-end);--forge-focus-indicator-shape-end-start:var(--_icon-button-shape-end-start);--forge-focus-indicator-shape-end-end:var(--_icon-button-shape-end-end)}:host(:is([variant=icon],:not([variant]))){--forge-focus-indicator-outward-offset:0px}forge-state-layer{--forge-state-layer-color:var(--_icon-button-icon-color)}:host([popover-icon]) .forge-icon-button{--_icon-button-padding:var(--_icon-button-popover-icon-padding)}:host([variant=outlined]) .forge-icon-button{border-width:var(--_icon-button-outlined-border-width);border-style:var(--_icon-button-outlined-border-style);border-color:var(--_icon-button-outlined-border-color)}:host([variant=tonal]) .forge-icon-button{--_icon-button-icon-color:var(--_icon-button-tonal-icon-color);--_icon-button-background-color:var(--_icon-button-tonal-background-color)}:host(:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--_icon-button-filled-icon-color);--_icon-button-background-color:var(--_icon-button-filled-background-color)}:host([variant=raised]) .forge-icon-button{--_icon-button-shadow:var(--_icon-button-raised-shadow)}:host([variant=raised]) .forge-icon-button:hover{--_icon-button-raised-shadow:var(--_icon-button-raised-hover-shadow)}:host([variant=raised]) .forge-icon-button:active{--_icon-button-raised-shadow:var(--_icon-button-raised-active-shadow)}:host(:is(:not([toggle]),[toggle]:not([pressed]))) slot[name=on]{display:none}:host([toggle][pressed]) slot:not([name]){display:none}:host([toggle][pressed]:is(:not([variant]),[variant=icon])) .forge-icon-button{--_icon-button-background-color:var(--_icon-button-toggle-on-background-color);--_icon-button-icon-color:var(--_icon-button-toggle-on-icon-color)}:host([toggle][pressed][variant=outlined]) .forge-icon-button{--_icon-button-background-color:var(--_icon-button-outlined-toggle-on-background-color);--_icon-button-icon-color:var(--_icon-button-outlined-toggle-on-icon-color)}:host([toggle]:not([pressed])[variant=tonal]) .forge-icon-button{--_icon-button-background-color:var(--_icon-button-tonal-toggle-background-color)}:host([toggle][pressed][variant=tonal]) .forge-icon-button{--_icon-button-icon-color:var(--_icon-button-tonal-toggle-on-icon-color);--_icon-button-background-color:var(--_icon-button-tonal-toggle-on-background-color)}:host([toggle]:not([pressed]):is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--_icon-button-filled-toggle-icon-color);--_icon-button-background-color:var(--_icon-button-filled-toggle-background-color)}:host([toggle][pressed]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--_icon-button-filled-toggle-on-icon-color);--_icon-button-background-color:var(--_icon-button-filled-toggle-on-background-color)}::slotted([slot=badge]){position:absolute;top:0;left:60%;z-index:1;pointer-events:none}::slotted(forge-badge[slot=badge][dot]){top:8px}:host(:is([dense],[density=small],[density=medium])) ::slotted(forge-badge[slot=badge]:not([dot])){top:-25%}:host(:is([dense],[density=small],[density=medium])) ::slotted(forge-badge[slot=badge][dot]){top:0}:host(:is([dense],[density=small])) ::slotted(forge-badge[slot=badge]){--forge-typography-label1-line-height:normal;--forge-badge-height:auto}::slotted(forge-circular-progress){--forge-circular-progress-indicator-color:var(--_icon-button-icon-color);--forge-circular-progress-track-color:transparent;--forge-circular-progress-size:1em}:host(:is([dense],[density=small])) .forge-icon-button{--_icon-button-size:var(--_icon-button-density-small-size);--_icon-button-icon-size:var(--_icon-button-density-small-icon-size);--_icon-button-padding:var(--_icon-button-density-small-padding)}:host(:is([dense],[density=small])) ::slotted(*){font-size:var(--_icon-button-density-small-icon-size)}:host([density=medium]) .forge-icon-button{--_icon-button-size:var(--_icon-button-density-medium-size);--_icon-button-padding:var(--_icon-button-density-medium-padding)}:host([shape=squared]) .forge-icon-button{--_icon-button-shape:var(--_icon-button-shape-squared)}:host([disabled]){cursor:var(--_icon-button-disabled-cursor)}:host([disabled]) .forge-icon-button{pointer-events:none;opacity:var(--_icon-button-disabled-opacity)}:host([disabled][variant=raised]) .forge-icon-button{--_icon-button-raised-shadow:var(--_icon-button-raised-disabled-shadow)}:host(:not([toggle])[theme=primary]:is(:not([variant]),[variant=icon],[variant=outlined])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-primary, #3f51b5))}:host([toggle][theme=primary]:is(:not([variant]),[variant=icon])) .forge-icon-button{--_icon-button-toggle-on-icon-color:var(--forge-icon-button-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5))}:host([toggle][theme=primary][variant=outlined]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-primary, #3f51b5));--_icon-button-outlined-toggle-on-background-color:var(--forge-icon-button-outlined-toggle-on-background-color, var(--forge-theme-primary-container, #d1d5ed));--_icon-button-outlined-toggle-on-icon-color:var(--forge-icon-button-outlined-toggle-on-icon-color, var(--forge-theme-primary, #3f51b5))}:host([theme=primary]) .forge-icon-button{--_icon-button-focus-indicator-color:var(--forge-icon-button-focus-indicator-color, var(--forge-theme-primary, #3f51b5))}:host(:not([toggle])[theme=secondary]:is(:not([variant]),[variant=icon],[variant=outlined])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-secondary, #ffc107))}:host([toggle][theme=secondary]:is(:not([variant]),[variant=icon])) .forge-icon-button{--_icon-button-toggle-on-icon-color:var(--forge-icon-button-toggle-on-icon-color, var(--forge-theme-secondary, #ffc107))}:host([toggle][theme=secondary][variant=outlined]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-secondary, #ffc107));--_icon-button-outlined-toggle-on-background-color:var(--forge-icon-button-outlined-toggle-on-background-color, var(--forge-theme-secondary-container, #fff0c3));--_icon-button-outlined-toggle-on-icon-color:var(--forge-icon-button-outlined-toggle-on-icon-color, var(--forge-theme-secondary, #ffc107))}:host(:not([toggle])[theme=secondary][variant=tonal]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-on-secondary-container, #8a6804));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-secondary-container, #fff0c3))}:host([toggle]:not([pressed])[theme=secondary][variant=tonal]) .forge-icon-button{--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-secondary-container, #fff0c3))}:host([toggle][theme=secondary][variant=tonal]) .forge-icon-button{--_icon-button-tonal-toggle-on-background-color:var(--forge-icon-button-tonal-toggle-on-background-color, var(--forge-theme-secondary-container, #fff0c3));--_icon-button-tonal-toggle-on-icon-color:var(--forge-icon-button-tonal-toggle-on-icon-color, var(--forge-theme-on-secondary-container, #8a6804))}:host(:not([toggle])[theme=secondary]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-on-secondary, #000000));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-secondary, #ffc107))}:host([toggle]:not([pressed])[theme=secondary]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-secondary, #ffc107));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-secondary-container, #fff0c3))}:host([toggle][theme=secondary]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-filled-toggle-on-background-color:var(--forge-icon-button-filled-toggle-on-background-color, var(--forge-theme-secondary, #ffc107));--_icon-button-filled-toggle-on-icon-color:var(--forge-icon-button-filled-toggle-on-icon-color, var(--forge-theme-on-secondary, #000000))}:host([theme=secondary]) .forge-icon-button{--_icon-button-focus-indicator-color:var(--forge-icon-button-focus-indicator-color, var(--forge-theme-secondary, #ffc107))}:host(:not([toggle])[theme=tertiary]:is(:not([variant]),[variant=icon],[variant=outlined])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-tertiary, #3d5afe))}:host([toggle][theme=tertiary]:is(:not([variant]),[variant=icon])) .forge-icon-button{--_icon-button-toggle-on-icon-color:var(--forge-icon-button-toggle-on-icon-color, var(--forge-theme-tertiary, #3d5afe))}:host([toggle][theme=tertiary][variant=outlined]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-tertiary, #3d5afe));--_icon-button-outlined-toggle-on-background-color:var(--forge-icon-button-outlined-toggle-on-background-color, var(--forge-theme-tertiary-container, #d0d7ff));--_icon-button-outlined-toggle-on-icon-color:var(--forge-icon-button-outlined-toggle-on-icon-color, var(--forge-theme-tertiary, #3d5afe))}:host(:not([toggle])[theme=tertiary][variant=tonal]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-on-tertiary-container, #213189));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-tertiary-container, #d0d7ff))}:host([toggle]:not([pressed])[theme=tertiary][variant=tonal]) .forge-icon-button{--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-tertiary-container, #d0d7ff))}:host([toggle][theme=tertiary][variant=tonal]) .forge-icon-button{--_icon-button-tonal-toggle-on-background-color:var(--forge-icon-button-tonal-toggle-on-background-color, var(--forge-theme-tertiary-container, #d0d7ff));--_icon-button-tonal-toggle-on-icon-color:var(--forge-icon-button-tonal-toggle-on-icon-color, var(--forge-theme-on-tertiary-container, #213189))}:host(:not([toggle])[theme=tertiary]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-on-tertiary, #ffffff));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-tertiary, #3d5afe))}:host([toggle]:not([pressed])[theme=tertiary]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-tertiary, #3d5afe));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-tertiary-container, #d0d7ff))}:host([toggle][theme=tertiary]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-filled-toggle-on-background-color:var(--forge-icon-button-filled-toggle-on-background-color, var(--forge-theme-tertiary, #3d5afe));--_icon-button-filled-toggle-on-icon-color:var(--forge-icon-button-filled-toggle-on-icon-color, var(--forge-theme-on-tertiary, #ffffff))}:host([theme=tertiary]) .forge-icon-button{--_icon-button-focus-indicator-color:var(--forge-icon-button-focus-indicator-color, var(--forge-theme-tertiary, #3d5afe))}:host(:not([toggle])[theme=success]:is(:not([variant]),[variant=icon],[variant=outlined])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-success, #2e7d32))}:host([toggle][theme=success]:is(:not([variant]),[variant=icon])) .forge-icon-button{--_icon-button-toggle-on-icon-color:var(--forge-icon-button-toggle-on-icon-color, var(--forge-theme-success, #2e7d32))}:host([toggle][theme=success][variant=outlined]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-success, #2e7d32));--_icon-button-outlined-toggle-on-background-color:var(--forge-icon-button-outlined-toggle-on-background-color, var(--forge-theme-success-container, #cde0ce));--_icon-button-outlined-toggle-on-icon-color:var(--forge-icon-button-outlined-toggle-on-icon-color, var(--forge-theme-success, #2e7d32))}:host(:not([toggle])[theme=success][variant=tonal]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-on-success-container, #19441b));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-success-container, #cde0ce))}:host([toggle]:not([pressed])[theme=success][variant=tonal]) .forge-icon-button{--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-success-container, #cde0ce))}:host([toggle][theme=success][variant=tonal]) .forge-icon-button{--_icon-button-tonal-toggle-on-background-color:var(--forge-icon-button-tonal-toggle-on-background-color, var(--forge-theme-success-container, #cde0ce));--_icon-button-tonal-toggle-on-icon-color:var(--forge-icon-button-tonal-toggle-on-icon-color, var(--forge-theme-on-success-container, #19441b))}:host(:not([toggle])[theme=success]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-on-success, #ffffff));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-success, #2e7d32))}:host([toggle]:not([pressed])[theme=success]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-success, #2e7d32));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-success-container, #cde0ce))}:host([toggle][theme=success]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-filled-toggle-on-background-color:var(--forge-icon-button-filled-toggle-on-background-color, var(--forge-theme-success, #2e7d32));--_icon-button-filled-toggle-on-icon-color:var(--forge-icon-button-filled-toggle-on-icon-color, var(--forge-theme-on-success, #ffffff))}:host([theme=success]) .forge-icon-button{--_icon-button-focus-indicator-color:var(--forge-icon-button-focus-indicator-color, var(--forge-theme-success, #2e7d32))}:host(:not([toggle])[theme=error]:is(:not([variant]),[variant=icon],[variant=outlined])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-error, #b00020))}:host([toggle][theme=error]:is(:not([variant]),[variant=icon])) .forge-icon-button{--_icon-button-toggle-on-icon-color:var(--forge-icon-button-toggle-on-icon-color, var(--forge-theme-error, #b00020))}:host([toggle][theme=error][variant=outlined]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-error, #b00020));--_icon-button-outlined-toggle-on-background-color:var(--forge-icon-button-outlined-toggle-on-background-color, var(--forge-theme-error-container, #ecc2c9));--_icon-button-outlined-toggle-on-icon-color:var(--forge-icon-button-outlined-toggle-on-icon-color, var(--forge-theme-error, #b00020))}:host(:not([toggle])[theme=error][variant=tonal]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-on-error-container, #5f0011));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-error-container, #ecc2c9))}:host([toggle]:not([pressed])[theme=error][variant=tonal]) .forge-icon-button{--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-error-container, #ecc2c9))}:host([toggle][theme=error][variant=tonal]) .forge-icon-button{--_icon-button-tonal-toggle-on-background-color:var(--forge-icon-button-tonal-toggle-on-background-color, var(--forge-theme-error-container, #ecc2c9));--_icon-button-tonal-toggle-on-icon-color:var(--forge-icon-button-tonal-toggle-on-icon-color, var(--forge-theme-on-error-container, #5f0011))}:host(:not([toggle])[theme=error]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-on-error, #ffffff));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-error, #b00020))}:host([toggle]:not([pressed])[theme=error]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-error, #b00020));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-error-container, #ecc2c9))}:host([toggle][theme=error]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-filled-toggle-on-background-color:var(--forge-icon-button-filled-toggle-on-background-color, var(--forge-theme-error, #b00020));--_icon-button-filled-toggle-on-icon-color:var(--forge-icon-button-filled-toggle-on-icon-color, var(--forge-theme-on-error, #ffffff))}:host([theme=error]) .forge-icon-button{--_icon-button-focus-indicator-color:var(--forge-icon-button-focus-indicator-color, var(--forge-theme-error, #b00020))}:host(:not([toggle])[theme=warning]:is(:not([variant]),[variant=icon],[variant=outlined])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-warning, #d14900))}:host([toggle][theme=warning]:is(:not([variant]),[variant=icon])) .forge-icon-button{--_icon-button-toggle-on-icon-color:var(--forge-icon-button-toggle-on-icon-color, var(--forge-theme-warning, #d14900))}:host([toggle][theme=warning][variant=outlined]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-warning, #d14900));--_icon-button-outlined-toggle-on-background-color:var(--forge-icon-button-outlined-toggle-on-background-color, var(--forge-theme-warning-container, #f4d3c2));--_icon-button-outlined-toggle-on-icon-color:var(--forge-icon-button-outlined-toggle-on-icon-color, var(--forge-theme-warning, #d14900))}:host(:not([toggle])[theme=warning][variant=tonal]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-on-warning-container, #712700));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-warning-container, #f4d3c2))}:host([toggle]:not([pressed])[theme=warning][variant=tonal]) .forge-icon-button{--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-warning-container, #f4d3c2))}:host([toggle][theme=warning][variant=tonal]) .forge-icon-button{--_icon-button-tonal-toggle-on-background-color:var(--forge-icon-button-tonal-toggle-on-background-color, var(--forge-theme-warning-container, #f4d3c2));--_icon-button-tonal-toggle-on-icon-color:var(--forge-icon-button-tonal-toggle-on-icon-color, var(--forge-theme-on-warning-container, #712700))}:host(:not([toggle])[theme=warning]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-on-warning, #ffffff));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-warning, #d14900))}:host([toggle]:not([pressed])[theme=warning]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-warning, #d14900));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-warning-container, #f4d3c2))}:host([toggle][theme=warning]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-filled-toggle-on-background-color:var(--forge-icon-button-filled-toggle-on-background-color, var(--forge-theme-warning, #d14900));--_icon-button-filled-toggle-on-icon-color:var(--forge-icon-button-filled-toggle-on-icon-color, var(--forge-theme-on-warning, #ffffff))}:host([theme=warning]) .forge-icon-button{--_icon-button-focus-indicator-color:var(--forge-icon-button-focus-indicator-color, var(--forge-theme-warning, #d14900))}:host(:not([toggle])[theme=info]:is(:not([variant]),[variant=icon],[variant=outlined])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-info, #1565c0))}:host([toggle][theme=info]:is(:not([variant]),[variant=icon])) .forge-icon-button{--_icon-button-toggle-on-icon-color:var(--forge-icon-button-toggle-on-icon-color, var(--forge-theme-info, #1565c0))}:host([toggle][theme=info][variant=outlined]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-info, #1565c0));--_icon-button-outlined-toggle-on-background-color:var(--forge-icon-button-outlined-toggle-on-background-color, var(--forge-theme-info-container, #c7daf0));--_icon-button-outlined-toggle-on-icon-color:var(--forge-icon-button-outlined-toggle-on-icon-color, var(--forge-theme-info, #1565c0))}:host(:not([toggle])[theme=info][variant=tonal]) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-on-info-container, #0b3768));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-info-container, #c7daf0))}:host([toggle]:not([pressed])[theme=info][variant=tonal]) .forge-icon-button{--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-info-container, #c7daf0))}:host([toggle][theme=info][variant=tonal]) .forge-icon-button{--_icon-button-tonal-toggle-on-background-color:var(--forge-icon-button-tonal-toggle-on-background-color, var(--forge-theme-info-container, #c7daf0));--_icon-button-tonal-toggle-on-icon-color:var(--forge-icon-button-tonal-toggle-on-icon-color, var(--forge-theme-on-info-container, #0b3768))}:host(:not([toggle])[theme=info]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-on-info, #ffffff));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-info, #1565c0))}:host([toggle]:not([pressed])[theme=info]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-icon-color:var(--forge-icon-button-icon-color, var(--forge-theme-info, #1565c0));--_icon-button-background-color:var(--forge-icon-button-background-color, var(--forge-theme-info-container, #c7daf0))}:host([toggle][theme=info]:is([variant=filled],[variant=raised])) .forge-icon-button{--_icon-button-filled-toggle-on-background-color:var(--forge-icon-button-filled-toggle-on-background-color, var(--forge-theme-info, #1565c0));--_icon-button-filled-toggle-on-icon-color:var(--forge-icon-button-filled-toggle-on-icon-color, var(--forge-theme-on-info, #ffffff))}:host([theme=info]) .forge-icon-button{--_icon-button-focus-indicator-color:var(--forge-icon-button-focus-indicator-color, var(--forge-theme-info, #1565c0))}:host([theme=app-bar]){--forge-icon-button-icon-color:var(--_app-bar-theme-foreground);--forge-icon-button-focus-indicator-color:var(--_app-bar-theme-foreground)}';
18
18
  /**
19
+ * @summary A clickable button component that displays an icon with support for different variants, themes, toggle states, and accessibility features.
20
+ *
19
21
  * @tag forge-icon-button
20
22
  *
21
23
  * @globalconfig variant
@@ -26,6 +26,8 @@ declare global {
26
26
  }
27
27
  }
28
28
  /**
29
+ * @summary A utility component that listens for keyboard shortcut combinations and triggers callbacks or events when the specified key bindings are activated.
30
+ *
29
31
  * @tag forge-keyboard-shortcut
30
32
  *
31
33
  * @event {CustomEvent<KeyboardEvent>} forge-keyboard-shortcut-activate - Event fired when the keyboard shortcut is activated.
@@ -10,6 +10,8 @@ import { KeyboardShortcutCore } from './keyboard-shortcut-core';
10
10
  import { KEYBOARD_SHORTCUT_CONSTANTS } from './keyboard-shortcut-constants';
11
11
  import { BaseComponent } from '../core/base/base-component';
12
12
  /**
13
+ * @summary A utility component that listens for keyboard shortcut combinations and triggers callbacks or events when the specified key bindings are activated.
14
+ *
13
15
  * @tag forge-keyboard-shortcut
14
16
  *
15
17
  * @event {CustomEvent<KeyboardEvent>} forge-keyboard-shortcut-activate - Event fired when the keyboard shortcut is activated.
@@ -14,7 +14,7 @@ import { setDefaultAria } from '../../constants';
14
14
  import { WithElementInternals } from '../../core/mixins/internals/with-element-internals';
15
15
  import { WithDefaultAria } from '../../core/mixins/internals/with-default-aria';
16
16
  const template = '<template><div class=\"forge-list\" part=\"root\"><div class=\"inner\"><slot></slot></div></div></template>';
17
- const styles = ':host{--_list-navlist-spacing:var(--forge-list-navlist-spacing, var(--forge-spacing-xxsmall, 4px));--_list-navlist-margin:var(--forge-list-navlist-margin, var(--forge-spacing-xxsmall, 4px) var(--forge-spacing-xsmall, 8px));--_list-navlist-height:var(--forge-list-navlist-height, 40px);--_list-navlist-padding:var(--forge-list-navlist-padding, 0 var(--forge-spacing-xsmall, 8px));--_list-navlist-shape:var(--forge-list-navlist-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));--_list-navlist-font-size:var(--forge-list-navlist-font-size, calc(var(--forge-typography-font-size, 1rem) * 0.875));--_list-navlist-font-weight:var(--forge-list-navlist-font-weight, 500)}:host{display:block}:host([hidden]){display:none}:host([navlist]){--forge-list-item-height:var(--_list-navlist-height);--forge-list-item-margin:var(--_list-navlist-margin);--forge-list-item-padding:var(--_list-navlist-padding);--forge-list-item-shape:var(--_list-navlist-shape);--forge-list-item-text-font-size:var(--_list-navlist-font-size);--forge-list-item-text-font-weight:var(--_list-navlist-font-weight)}:host([navlist]) .forge-list{margin-block:var(--_list-navlist-spacing)}.forge-list{--_list-spacing:var(--forge-list-spacing, 0);--_list-container-color:var(--forge-list-container-color, transparent)}.forge-list{outline:0;background-color:var(--_list-container-color);margin:0;border-radius:inherit;min-width:inherit}.inner{display:grid;gap:var(--_list-spacing);min-width:0}.inner ::slotted(*){min-width:0}';
17
+ const styles = ':host{--_list-navlist-spacing:var(--forge-list-navlist-spacing, var(--forge-spacing-xxsmall, 4px));--_list-navlist-margin:var(--forge-list-navlist-margin, var(--forge-spacing-xxsmall, 4px) var(--forge-spacing-xsmall, 8px));--_list-navlist-height:var(--forge-list-navlist-height, 40px);--_list-navlist-padding:var(--forge-list-navlist-padding, 0 var(--forge-spacing-xsmall, 8px));--_list-navlist-shape:var(--forge-list-navlist-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));--_list-navlist-font-size:var(--forge-list-navlist-font-size, calc(var(--forge-typography-font-size, 1rem) * 0.875));--_list-navlist-font-weight:var(--forge-list-navlist-font-weight, 500)}:host{display:block}:host([hidden]){display:none}:host([navlist]) .forge-list{margin-block:var(--_list-navlist-spacing)}:host([navlist]){--forge-list-item-height:var(--_list-navlist-height);--forge-list-item-margin:var(--_list-navlist-margin);--forge-list-item-padding:var(--_list-navlist-padding);--forge-list-item-shape:var(--_list-navlist-shape);--forge-list-item-text-font-size:var(--_list-navlist-font-size);--forge-list-item-text-font-weight:var(--_list-navlist-font-weight)}.forge-list{--_list-spacing:var(--forge-list-spacing, 0);--_list-container-color:var(--forge-list-container-color, transparent)}.forge-list{outline:0;background-color:var(--_list-container-color);margin:0;border-radius:inherit;min-width:inherit}.inner{display:grid;gap:var(--_list-spacing);min-width:0}.inner ::slotted(*){min-width:0}';
18
18
  /**
19
19
  * @tag forge-list
20
20
  *
@@ -33,7 +33,7 @@ const selectors = {
33
33
  ROOT: `.${classes.ROOT}`,
34
34
  FORM_CONTROL_LIKE: ':is([forge-list-item-interactive],forge-radio,forge-checkbox,forge-switch,input[type=checkbox],input[type=radio]):is([slot=start],[slot=end],[slot=leading],[slot=trailing]):not([forge-ignore])',
35
35
  BUTTON_LIKE: ':is(button,[role=button][tabindex]:not([tabindex=-1]),[forge-list-item-interactive]):not([forge-ignore])',
36
- IGNORE: '[forge-ignore],[data-forge-ignore]',
36
+ IGNORE: '[forge-ignore],[data-forge-ignore],[slot="additional-content"]',
37
37
  INTERNAL_ANCHOR: `#${ids.INTERNAL_ANCHOR}`,
38
38
  SLOTTED_START_END: ':is([slot=start],[slot=end],[slot=leading],[slot=trailing])'
39
39
  };