@tylertech/forge 3.8.0-dev.3 → 3.8.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 (78) hide show
  1. package/custom-elements.json +3948 -3215
  2. package/dist/app-bar/forge-app-bar.css +20 -11
  3. package/dist/forge.css +2 -2
  4. package/dist/lib.js +14 -14
  5. package/dist/lib.js.map +4 -4
  6. package/dist/table/forge-table.css +2 -2
  7. package/dist/vscode.css-custom-data.json +218 -208
  8. package/dist/vscode.html-custom-data.json +370 -245
  9. package/esm/app-bar/app-bar/app-bar-constants.d.ts +2 -0
  10. package/esm/app-bar/app-bar/app-bar-constants.js +2 -1
  11. package/esm/app-bar/app-bar/app-bar-core.d.ts +5 -1
  12. package/esm/app-bar/app-bar/app-bar-core.js +10 -0
  13. package/esm/app-bar/app-bar/app-bar.d.ts +9 -1
  14. package/esm/app-bar/app-bar/app-bar.js +15 -2
  15. package/esm/app-bar/help-button/app-bar-help-button.js +1 -1
  16. package/esm/app-bar/menu-button/app-bar-menu-button.js +1 -1
  17. package/esm/app-bar/notification-button/app-bar-notification-button.js +1 -1
  18. package/esm/app-bar/profile-button/app-bar-profile-button.d.ts +1 -1
  19. package/esm/app-bar/profile-button/app-bar-profile-button.js +13 -10
  20. package/esm/app-bar/search/app-bar-search.js +1 -1
  21. package/esm/autocomplete/autocomplete-core.js +5 -0
  22. package/esm/avatar/avatar.d.ts +4 -4
  23. package/esm/avatar/avatar.js +5 -6
  24. package/esm/badge/badge.d.ts +4 -3
  25. package/esm/badge/badge.js +5 -4
  26. package/esm/button/button-constants.d.ts +1 -1
  27. package/esm/button/button.js +1 -1
  28. package/esm/card/card.d.ts +4 -3
  29. package/esm/card/card.js +3 -2
  30. package/esm/core/base/base-lit-element.d.ts +9 -0
  31. package/esm/core/base/base-lit-element.js +12 -0
  32. package/esm/core/utils/lit-utils.d.ts +11 -0
  33. package/esm/core/utils/lit-utils.js +31 -0
  34. package/esm/dialog/dialog-adapter.d.ts +0 -1
  35. package/esm/dialog/dialog-adapter.js +4 -39
  36. package/esm/dialog/dialog-constants.d.ts +6 -2
  37. package/esm/dialog/dialog-constants.js +4 -4
  38. package/esm/dialog/dialog-core.d.ts +3 -3
  39. package/esm/dialog/dialog-core.js +8 -7
  40. package/esm/dialog/dialog.d.ts +3 -3
  41. package/esm/dialog/dialog.js +4 -4
  42. package/esm/icon-button/icon-button-constants.d.ts +1 -1
  43. package/esm/icon-button/icon-button.js +1 -1
  44. package/esm/key/key/key.d.ts +3 -2
  45. package/esm/key/key/key.js +3 -2
  46. package/esm/key/key-item/key-item.d.ts +3 -2
  47. package/esm/key/key-item/key-item.js +3 -2
  48. package/esm/list-dropdown/list-dropdown-aware-core.d.ts +22 -0
  49. package/esm/list-dropdown/list-dropdown-aware-core.js +30 -0
  50. package/esm/list-dropdown/list-dropdown-aware.d.ts +35 -0
  51. package/esm/list-dropdown/list-dropdown-aware.js +35 -16
  52. package/esm/list-dropdown/list-dropdown-constants.d.ts +22 -3
  53. package/esm/list-dropdown/list-dropdown-constants.js +9 -1
  54. package/esm/list-dropdown/list-dropdown-utils.js +6 -0
  55. package/esm/menu/menu-core.js +2 -0
  56. package/esm/menu/menu.js +1 -0
  57. package/esm/meter/meter/meter.d.ts +4 -2
  58. package/esm/meter/meter/meter.js +4 -2
  59. package/esm/meter/meter-group/meter-group.d.ts +3 -2
  60. package/esm/meter/meter-group/meter-group.js +3 -2
  61. package/esm/overlay/base/overlay-aware.d.ts +4 -4
  62. package/esm/overlay/base/overlay-aware.js +3 -3
  63. package/esm/select/core/base-select-core.js +5 -0
  64. package/esm/select/select/select.d.ts +25 -1
  65. package/esm/select/select/select.js +26 -1
  66. package/esm/split-view/split-view-panel/split-view-panel.js +1 -1
  67. package/esm/tabs/tab-bar/tab-bar.js +1 -1
  68. package/package.json +2 -2
  69. package/sass/app-bar/app-bar/_core.scss +0 -1
  70. package/sass/app-bar/app-bar/app-bar.scss +57 -23
  71. package/sass/app-bar/forge-app-bar.scss +41 -11
  72. package/sass/app-bar/search/app-bar-search.scss +3 -0
  73. package/sass/button/button.scss +24 -0
  74. package/sass/core/styles/scrollbar/index.scss +14 -0
  75. package/sass/core/styles/tokens/app-bar/app-bar/_tokens.scss +2 -8
  76. package/sass/icon-button/icon-button.scss +8 -9
  77. package/sass/table/_core.scss +1 -1
  78. package/sass/tabs/tab-bar/tab-bar.scss +24 -0
@@ -3,8 +3,9 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import { LitElement, TemplateResult } from 'lit';
6
+ import { TemplateResult } from 'lit';
7
7
  import { CUSTOM_ELEMENT_NAME_PROPERTY } from '@tylertech/forge-core';
8
+ import { BaseLitElement } from '../../core/base/base-lit-element';
8
9
  export declare const KEY_ITEM_TAG_NAME: keyof HTMLElementTagNameMap;
9
10
  /**
10
11
  * @tag forge-key-item
@@ -26,7 +27,7 @@ export declare const KEY_ITEM_TAG_NAME: keyof HTMLElementTagNameMap;
26
27
  * @csspart label - The label element.
27
28
  * @csspart value - The value element.
28
29
  */
29
- export declare class KeyItemComponent extends LitElement {
30
+ export declare class KeyItemComponent extends BaseLitElement {
30
31
  static styles: import("lit").CSSResult;
31
32
  /** @deprecated Used for compatibility with legacy Forge @customElement decorator. */
32
33
  static [CUSTOM_ELEMENT_NAME_PROPERTY]: keyof HTMLElementTagNameMap;
@@ -5,11 +5,12 @@
5
5
  */
6
6
  var _a;
7
7
  import { __decorate } from "tslib";
8
- import { LitElement, html, unsafeCSS } from 'lit';
8
+ import { html, unsafeCSS } from 'lit';
9
9
  import { customElement, property, queryAssignedNodes, state } from 'lit/decorators.js';
10
10
  import { classMap } from 'lit/directives/class-map.js';
11
11
  import { setDefaultAria } from '../../core/utils/a11y-utils';
12
12
  import { CUSTOM_ELEMENT_NAME_PROPERTY } from '@tylertech/forge-core';
13
+ import { BaseLitElement } from '../../core/base/base-lit-element';
13
14
  const styles = ':host{display:inline}.forge-key-item{--_key-item-icon-color:var(--forge-key-item-icon-color, var(--forge-theme-tertiary, #3d5afe));--_key-item-label-color:var(--forge-key-item-label-color, var(--forge-theme-text-high, rgba(0, 0, 0, 0.87)));--_key-item-value-color:var(--forge-key-item-value-color, var(--forge-theme-text-medium, rgba(0, 0, 0, 0.6)));--_key-item-gap:var(--forge-key-item-gap, var(--forge-spacing-xsmall, 8px));--_key-item-icon-size:var(--forge-key-item-icon-size, calc(var(--forge-typography-font-size, 1rem) * 1))}.forge-key-item{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-label1-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-label1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, .75)));font-weight:var(--forge-typography-label1-font-weight,400);line-height:var(--forge-typography-label1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));letter-spacing:var(--forge-typography-label1-letter-spacing, .0357142857em);text-transform:var(--forge-typography-label1-text-transform,inherit);text-decoration:var(--forge-typography-label1-text-decoration,inherit);box-sizing:border-box;display:grid;grid-template:\"icon label\" \"icon value\";column-gap:var(--_key-item-gap);inline-size:fit-content;line-height:normal}.forge-key-item.inline{grid-template:\"icon label value\";grid-template-columns:auto 1fr auto;align-items:center;inline-size:auto}.forge-key-item.no-value{grid-template:\"icon label\";align-items:center}.forge-key-item.no-value .value{display:none}.forge-key-item:not(.inline,.no-value) .label{padding-block-start:1px}.icon{--forge-icon-size:var(--_key-item-icon-size);grid-area:icon;color:var(--_key-item-icon-color)}.label{grid-area:label;color:var(--_key-item-label-color)}.value{grid-area:value;color:var(--_key-item-value-color)}.default-icon{block-size:calc(var(--_key-item-icon-size) - 1px);inline-size:calc(var(--_key-item-icon-size) - 1px);border-radius:50%;background:currentColor}';
14
15
  export const KEY_ITEM_TAG_NAME = 'forge-key-item';
15
16
  /**
@@ -32,7 +33,7 @@ export const KEY_ITEM_TAG_NAME = 'forge-key-item';
32
33
  * @csspart label - The label element.
33
34
  * @csspart value - The value element.
34
35
  */
35
- let KeyItemComponent = class KeyItemComponent extends LitElement {
36
+ let KeyItemComponent = class KeyItemComponent extends BaseLitElement {
36
37
  constructor() {
37
38
  super();
38
39
  /**
@@ -3,6 +3,8 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
+ import { PositionPlacement } from '../core/utils/position-utils';
7
+ import { IOverlayOffset, OverlayFlipState, OverlayPlacement, OverlayShiftState } from '../overlay/overlay-constants';
6
8
  import { ListDropdownHeaderBuilder, ListDropdownFooterBuilder } from './list-dropdown-constants';
7
9
  export interface IListDropdownAwareCore {
8
10
  popupClasses: string | string[];
@@ -14,6 +16,11 @@ export interface IListDropdownAwareCore {
14
16
  observeScrollThreshold: number;
15
17
  constrainPopupWidth: boolean;
16
18
  wrapOptionText: boolean;
19
+ popoverPlacement: OverlayPlacement;
20
+ popoverOffset: IOverlayOffset;
21
+ popoverFlip: OverlayFlipState;
22
+ popoverShift: OverlayShiftState;
23
+ popoverFallbackPlacements: PositionPlacement[] | null;
17
24
  }
18
25
  export declare abstract class ListDropdownAwareCore implements IListDropdownAwareCore {
19
26
  protected _popupClasses: string | string[];
@@ -25,6 +32,11 @@ export declare abstract class ListDropdownAwareCore implements IListDropdownAwar
25
32
  protected _observeScrollThreshold: number;
26
33
  protected _constrainPopupWidth: boolean;
27
34
  protected _wrapOptionText: boolean;
35
+ protected _popoverPlacement: OverlayPlacement;
36
+ protected _popoverOffset: IOverlayOffset;
37
+ protected _popoverFlip: OverlayFlipState;
38
+ protected _popoverShift: OverlayShiftState;
39
+ protected _popoverFallbackPlacements: PositionPlacement[] | null;
28
40
  get syncPopupWidth(): boolean;
29
41
  set syncPopupWidth(value: boolean);
30
42
  get popupClasses(): string | string[];
@@ -43,5 +55,15 @@ export declare abstract class ListDropdownAwareCore implements IListDropdownAwar
43
55
  set constrainPopupWidth(value: boolean);
44
56
  get wrapOptionText(): boolean;
45
57
  set wrapOptionText(value: boolean);
58
+ get popoverPlacement(): OverlayPlacement;
59
+ set popoverPlacement(value: OverlayPlacement);
60
+ get popoverOffset(): IOverlayOffset;
61
+ set popoverOffset(value: IOverlayOffset);
62
+ get popoverFlip(): OverlayFlipState;
63
+ set popoverFlip(value: OverlayFlipState);
64
+ get popoverShift(): OverlayShiftState;
65
+ set popoverShift(value: OverlayShiftState);
66
+ get popoverFallbackPlacements(): PositionPlacement[] | null;
67
+ set popoverFallbackPlacements(value: PositionPlacement[] | null);
46
68
  protected _applySelection(): void;
47
69
  }
@@ -72,5 +72,35 @@ export class ListDropdownAwareCore {
72
72
  set wrapOptionText(value) {
73
73
  this._wrapOptionText = value;
74
74
  }
75
+ get popoverPlacement() {
76
+ return this._popoverPlacement;
77
+ }
78
+ set popoverPlacement(value) {
79
+ this._popoverPlacement = value;
80
+ }
81
+ get popoverOffset() {
82
+ return this._popoverOffset;
83
+ }
84
+ set popoverOffset(value) {
85
+ this._popoverOffset = value;
86
+ }
87
+ get popoverFlip() {
88
+ return this._popoverFlip;
89
+ }
90
+ set popoverFlip(value) {
91
+ this._popoverFlip = value;
92
+ }
93
+ get popoverShift() {
94
+ return this._popoverShift;
95
+ }
96
+ set popoverShift(value) {
97
+ this._popoverShift = value;
98
+ }
99
+ get popoverFallbackPlacements() {
100
+ return this._popoverFallbackPlacements;
101
+ }
102
+ set popoverFallbackPlacements(value) {
103
+ this._popoverFallbackPlacements = value;
104
+ }
75
105
  _applySelection() { }
76
106
  }
@@ -5,6 +5,8 @@
5
5
  */
6
6
  import { BaseComponent, IBaseComponent } from '../core/base/base-component';
7
7
  import { ListDropdownHeaderBuilder, ListDropdownFooterBuilder } from './list-dropdown-constants';
8
+ import { PositionPlacement } from '../core/utils/position-utils';
9
+ import { OverlayPlacement, IOverlayOffset, OverlayFlipState, OverlayShiftState } from '../overlay/overlay-constants';
8
10
  export interface IListDropdownAware extends IBaseComponent {
9
11
  popupClasses: string | string[];
10
12
  popupHeaderBuilder: ListDropdownHeaderBuilder;
@@ -15,6 +17,11 @@ export interface IListDropdownAware extends IBaseComponent {
15
17
  observeScrollThreshold: number;
16
18
  constrainPopupWidth: boolean;
17
19
  wrapOptionText: boolean;
20
+ popoverPlacement: OverlayPlacement;
21
+ popoverOffset: IOverlayOffset;
22
+ popoverFlip: OverlayFlipState;
23
+ popoverShift: OverlayShiftState;
24
+ popoverFallbackPlacements: PositionPlacement[] | null;
18
25
  }
19
26
  export declare class ListDropdownAware extends BaseComponent {
20
27
  static get observedAttributes(): string[];
@@ -66,4 +73,32 @@ export declare class ListDropdownAware extends BaseComponent {
66
73
  * @attribute wrap-option-text
67
74
  */
68
75
  wrapOptionText: boolean;
76
+ /**
77
+ * Gets/sets the placement of the popover.
78
+ * @default 'bottom'
79
+ * @attribute popover-placement
80
+ */
81
+ popoverPlacement: OverlayPlacement;
82
+ /**
83
+ * Gets/sets the offset of the popover.
84
+ * @attribute popover-offset
85
+ */
86
+ popoverOffset: IOverlayOffset;
87
+ /**
88
+ * Gets/sets the flip state of the popover.
89
+ * @default 'auto'
90
+ * @attribute popover-flip
91
+ */
92
+ popoverFlip: OverlayFlipState;
93
+ /**
94
+ * Gets/sets whether the popover should shift to fit within the viewport.
95
+ * @default 'auto'
96
+ * @attribute popover-shift
97
+ */
98
+ popoverShift: OverlayShiftState;
99
+ /**
100
+ * Gets/sets the fallback placements of the popover.
101
+ * @attribute popover-fallback-placements
102
+ */
103
+ popoverFallbackPlacements: PositionPlacement[] | null;
69
104
  }
@@ -9,42 +9,46 @@ import { BaseComponent } from '../core/base/base-component';
9
9
  import { LIST_DROPDOWN_CONSTANTS } from './list-dropdown-constants';
10
10
  export class ListDropdownAware extends BaseComponent {
11
11
  static get observedAttributes() {
12
- return [
13
- LIST_DROPDOWN_CONSTANTS.attributes.POPUP_CLASSES,
14
- LIST_DROPDOWN_CONSTANTS.attributes.OPTION_LIMIT,
15
- LIST_DROPDOWN_CONSTANTS.attributes.OBSERVE_SCROLL,
16
- LIST_DROPDOWN_CONSTANTS.attributes.OBSERVE_SCROLL_THRESHOLD,
17
- LIST_DROPDOWN_CONSTANTS.attributes.SYNC_POPUP_WIDTH,
18
- LIST_DROPDOWN_CONSTANTS.attributes.CONSTRAIN_POPUP_WIDTH,
19
- LIST_DROPDOWN_CONSTANTS.attributes.WRAP_OPTION_TEXT
20
- ];
12
+ return Object.values(LIST_DROPDOWN_CONSTANTS.observedAttributes);
21
13
  }
22
14
  constructor() {
23
15
  super();
24
16
  }
25
17
  attributeChangedCallback(name, oldValue, newValue) {
26
18
  switch (name) {
27
- case LIST_DROPDOWN_CONSTANTS.attributes.POPUP_CLASSES:
19
+ case LIST_DROPDOWN_CONSTANTS.observedAttributes.POPUP_CLASSES:
28
20
  this.popupClasses = newValue;
29
21
  break;
30
- case LIST_DROPDOWN_CONSTANTS.attributes.OPTION_LIMIT:
22
+ case LIST_DROPDOWN_CONSTANTS.observedAttributes.OPTION_LIMIT:
31
23
  this.optionLimit = coerceNumber(newValue);
32
24
  break;
33
- case LIST_DROPDOWN_CONSTANTS.attributes.OBSERVE_SCROLL:
25
+ case LIST_DROPDOWN_CONSTANTS.observedAttributes.OBSERVE_SCROLL:
34
26
  this.observeScroll = coerceBoolean(newValue);
35
27
  break;
36
- case LIST_DROPDOWN_CONSTANTS.attributes.OBSERVE_SCROLL_THRESHOLD:
28
+ case LIST_DROPDOWN_CONSTANTS.observedAttributes.OBSERVE_SCROLL_THRESHOLD:
37
29
  this.observeScrollThreshold = coerceNumber(newValue);
38
30
  break;
39
- case LIST_DROPDOWN_CONSTANTS.attributes.SYNC_POPUP_WIDTH:
31
+ case LIST_DROPDOWN_CONSTANTS.observedAttributes.SYNC_POPUP_WIDTH:
40
32
  this.syncPopupWidth = coerceBoolean(newValue);
41
33
  break;
42
- case LIST_DROPDOWN_CONSTANTS.attributes.CONSTRAIN_POPUP_WIDTH:
34
+ case LIST_DROPDOWN_CONSTANTS.observedAttributes.CONSTRAIN_POPUP_WIDTH:
43
35
  this.constrainPopupWidth = coerceBoolean(newValue);
44
36
  break;
45
- case LIST_DROPDOWN_CONSTANTS.attributes.WRAP_OPTION_TEXT:
37
+ case LIST_DROPDOWN_CONSTANTS.observedAttributes.WRAP_OPTION_TEXT:
46
38
  this.wrapOptionText = coerceBoolean(newValue);
47
39
  break;
40
+ case LIST_DROPDOWN_CONSTANTS.observedAttributes.POPOVER_PLACEMENT:
41
+ this.popoverPlacement = newValue;
42
+ break;
43
+ case LIST_DROPDOWN_CONSTANTS.observedAttributes.POPOVER_OFFSET:
44
+ this.popoverOffset = JSON.parse(newValue);
45
+ break;
46
+ case LIST_DROPDOWN_CONSTANTS.observedAttributes.POPOVER_FLIP:
47
+ this.popoverFlip = newValue;
48
+ break;
49
+ case LIST_DROPDOWN_CONSTANTS.observedAttributes.POPOVER_SHIFT:
50
+ this.popoverShift = newValue;
51
+ break;
48
52
  }
49
53
  }
50
54
  }
@@ -75,3 +79,18 @@ __decorate([
75
79
  __decorate([
76
80
  coreProperty()
77
81
  ], ListDropdownAware.prototype, "wrapOptionText", void 0);
82
+ __decorate([
83
+ coreProperty()
84
+ ], ListDropdownAware.prototype, "popoverPlacement", void 0);
85
+ __decorate([
86
+ coreProperty()
87
+ ], ListDropdownAware.prototype, "popoverOffset", void 0);
88
+ __decorate([
89
+ coreProperty()
90
+ ], ListDropdownAware.prototype, "popoverFlip", void 0);
91
+ __decorate([
92
+ coreProperty()
93
+ ], ListDropdownAware.prototype, "popoverShift", void 0);
94
+ __decorate([
95
+ coreProperty()
96
+ ], ListDropdownAware.prototype, "popoverFallbackPlacements", void 0);
@@ -4,11 +4,11 @@
4
4
  * License: Apache-2.0
5
5
  */
6
6
  import type { IIconComponent } from '../icon';
7
- import type { IOverlayOffset } from '../overlay/overlay-constants';
7
+ import type { IOverlayOffset, OverlayFlipState, OverlayShiftState } from '../overlay/overlay-constants';
8
8
  import { PositionPlacement } from '../core/utils/position-utils';
9
9
  import { TooltipPlacement, TooltipType } from '../tooltip';
10
10
  export declare const LIST_DROPDOWN_CONSTANTS: {
11
- attributes: {
11
+ observedAttributes: {
12
12
  POPUP_CLASSES: string;
13
13
  OPTION_LIMIT: string;
14
14
  OBSERVE_SCROLL: string;
@@ -16,8 +16,25 @@ export declare const LIST_DROPDOWN_CONSTANTS: {
16
16
  SYNC_POPUP_WIDTH: string;
17
17
  CONSTRAIN_POPUP_WIDTH: string;
18
18
  WRAP_OPTION_TEXT: string;
19
+ POPOVER_PLACEMENT: string;
20
+ POPOVER_OFFSET: string;
21
+ POPOVER_FLIP: string;
22
+ POPOVER_SHIFT: string;
23
+ };
24
+ attributes: {
19
25
  CHECKBOX_ELEMENT: string;
20
26
  DATA_ALLOW_FOCUS: string;
27
+ POPUP_CLASSES: string;
28
+ OPTION_LIMIT: string;
29
+ OBSERVE_SCROLL: string;
30
+ OBSERVE_SCROLL_THRESHOLD: string;
31
+ SYNC_POPUP_WIDTH: string;
32
+ CONSTRAIN_POPUP_WIDTH: string;
33
+ WRAP_OPTION_TEXT: string;
34
+ POPOVER_PLACEMENT: string;
35
+ POPOVER_OFFSET: string;
36
+ POPOVER_FLIP: string;
37
+ POPOVER_SHIFT: string;
21
38
  };
22
39
  classes: {
23
40
  GROUP_WRAPPER: string;
@@ -85,7 +102,9 @@ export interface IListDropdownConfig<T = any> {
85
102
  popupOffset?: IOverlayOffset;
86
103
  popupStatic?: boolean;
87
104
  popupPlacement?: PositionPlacement;
88
- popupFallbackPlacements?: PositionPlacement[];
105
+ popupFlip?: OverlayFlipState;
106
+ popupShift?: OverlayShiftState;
107
+ popupFallbackPlacements?: PositionPlacement[] | null;
89
108
  optionLimit?: number;
90
109
  optionBuilder?: ListDropdownOptionBuilder;
91
110
  observeScroll?: boolean;
@@ -3,7 +3,7 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- const attributes = {
6
+ const observedAttributes = {
7
7
  POPUP_CLASSES: 'popup-classes',
8
8
  OPTION_LIMIT: 'option-limit',
9
9
  OBSERVE_SCROLL: 'observe-scroll',
@@ -11,6 +11,13 @@ const attributes = {
11
11
  SYNC_POPUP_WIDTH: 'sync-popup-width',
12
12
  CONSTRAIN_POPUP_WIDTH: 'constrain-popup-width',
13
13
  WRAP_OPTION_TEXT: 'wrap-option-text',
14
+ POPOVER_PLACEMENT: 'popover-placement',
15
+ POPOVER_OFFSET: 'popover-offset',
16
+ POPOVER_FLIP: 'popover-flip',
17
+ POPOVER_SHIFT: 'popover-shift'
18
+ };
19
+ const attributes = {
20
+ ...observedAttributes,
14
21
  // Internal
15
22
  CHECKBOX_ELEMENT: 'data-list-dropdown-checkbox',
16
23
  DATA_ALLOW_FOCUS: 'data-list-dropdown-allow-focus'
@@ -19,6 +26,7 @@ const classes = {
19
26
  GROUP_WRAPPER: 'forge-list-dropdown__group-wrapper'
20
27
  };
21
28
  export const LIST_DROPDOWN_CONSTANTS = {
29
+ observedAttributes,
22
30
  attributes,
23
31
  classes
24
32
  };
@@ -60,6 +60,12 @@ export function createPopupDropdown(config, targetElement) {
60
60
  if (config.popupOffset) {
61
61
  popoverElement.offset = config.popupOffset;
62
62
  }
63
+ if (config.popupFlip) {
64
+ popoverElement.flip = config.popupFlip;
65
+ }
66
+ if (config.popupShift !== undefined) {
67
+ popoverElement.shift = config.popupShift;
68
+ }
63
69
  // Set the animations based on our type
64
70
  if (config.type === ListDropdownType.None) {
65
71
  popoverElement.animationType = 'none';
@@ -238,6 +238,8 @@ export class MenuCore extends CascadingListDropdownAwareCore {
238
238
  observeScroll: this._observeScroll,
239
239
  observeScrollThreshold: this._observeScrollThreshold,
240
240
  popupPlacement: this._placement,
241
+ popupFlip: this._popoverFlip,
242
+ popupShift: this._popoverShift,
241
243
  popupFallbackPlacements: this._fallbackPlacements,
242
244
  activeStartIndex: fromKeyboard ? 0 : undefined,
243
245
  popupClasses: [MENU_CONSTANTS.classes.POPUP, ...this._popupClasses],
package/esm/menu/menu.js CHANGED
@@ -25,6 +25,7 @@ const styles = ':host{display:inline-flex}:host([hidden]){display:none}';
25
25
  let MenuComponent = class MenuComponent extends ListDropdownAware {
26
26
  static get observedAttributes() {
27
27
  return [
28
+ ...ListDropdownAware.observedAttributes,
28
29
  MENU_CONSTANTS.attributes.OPEN,
29
30
  MENU_CONSTANTS.attributes.PLACEMENT,
30
31
  MENU_CONSTANTS.attributes.SELECTED_INDEX,
@@ -3,9 +3,10 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import { LitElement, PropertyValues, TemplateResult } from 'lit';
6
+ import { PropertyValues, TemplateResult } from 'lit';
7
7
  import { Theme } from '../../constants';
8
8
  import { CUSTOM_ELEMENT_NAME_PROPERTY } from '@tylertech/forge-core';
9
+ import { BaseLitElement } from '../../core/base/base-lit-element';
9
10
  export declare const METER_TAG_NAME: keyof HTMLElementTagNameMap;
10
11
  export type MeterDirection = 'horizontal' | 'vertical';
11
12
  export type MeterDensity = 'default' | 'small' | 'medium' | 'large';
@@ -49,9 +50,10 @@ export type MeterValueMode = 'manual' | 'percentage' | 'value';
49
50
  * @slot - The default slot for the meter's label.
50
51
  * @slot value - A textual representation of the meter's value.
51
52
  */
52
- export declare class MeterComponent extends LitElement {
53
+ export declare class MeterComponent extends BaseLitElement {
53
54
  static styles: import("lit").CSSResult;
54
55
  static formAssociated: boolean;
56
+ /** @deprecated Used for compatibility with legacy Forge @customElement decorator. */
55
57
  static [CUSTOM_ELEMENT_NAME_PROPERTY]: keyof HTMLElementTagNameMap;
56
58
  /**
57
59
  * The current value of the meter.
@@ -5,13 +5,14 @@
5
5
  */
6
6
  var _a;
7
7
  import { __decorate } from "tslib";
8
- import { LitElement, html, unsafeCSS } from 'lit';
8
+ import { html, unsafeCSS } from 'lit';
9
9
  import { customElement, property, queryAssignedNodes, state } from 'lit/decorators.js';
10
10
  import { classMap } from 'lit/directives/class-map.js';
11
11
  import { styleMap } from 'lit/directives/style-map.js';
12
12
  import { setDefaultAria } from '../../core/utils/a11y-utils';
13
13
  import { toggleState } from '../../core/utils/utils';
14
14
  import { CUSTOM_ELEMENT_NAME_PROPERTY } from '@tylertech/forge-core';
15
+ import { BaseLitElement } from '../../core/base/base-lit-element';
15
16
  const styles = ':host{display:inline}.forge-meter{--_meter-background:var(--forge-meter-background, var(--forge-theme-tertiary-container-low, #e8ebff));--_meter-color:var(--forge-meter-color, var(--forge-theme-tertiary, #3d5afe));--_meter-height:var(--forge-meter-height, var(--forge-spacing-medium, 16px));--_meter-shape:var(--forge-meter-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));--_meter-inner-shape:var(--forge-meter-inner-shape, 0);--_meter-inner-elevation:var(--forge-meter-inner-elevation, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12));--_meter-tickmarks:var(--forge-meter-tickmarks, 10);--_meter-tickmark-opacity:var(--forge-meter-tickmark-opacity, 54%);--_meter-transition-duration:var(--forge-meter-transition-duration, var(--forge-animation-duration-short4, 200ms));--_meter-transition-timing:var(--forge-meter-transition-timing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)))}.forge-meter{box-sizing:border-box}.forge-meter .heading{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-label1-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-label1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, .75)));font-weight:var(--forge-typography-label1-font-weight,400);line-height:var(--forge-typography-label1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));letter-spacing:var(--forge-typography-label1-letter-spacing, .0357142857em);text-transform:var(--forge-typography-label1-text-transform,inherit);text-decoration:var(--forge-typography-label1-text-decoration,inherit);display:flex;align-items:center;justify-content:space-between;line-height:normal}.forge-meter .heading.not-empty{margin-bottom:var(--forge-spacing-xxsmall,4px)}.forge-meter .label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.forge-meter .value{color:var(--forge-theme-text-medium,rgba(0,0,0,.6))}.forge-meter .track{position:relative;block-size:var(--_meter-height);border-radius:var(--_meter-shape);overflow:hidden;background:var(--_meter-background)}.forge-meter .track.segmented{--_meter-background:var(--forge-meter-background, var(--forge-theme-warning-container-low, #f9e9e0));--_meter-color:var(--forge-meter-color, var(--forge-theme-warning, #d14900));transition-property:background;transition-duration:var(--_meter-transition-duration);transition-timing-function:var(--_meter-transition-timing)}.forge-meter .track.segmented.least-optimal{--_meter-background:var(--forge-meter-background, var(--forge-theme-error-container-low, #f6e0e4));--_meter-color:var(--forge-meter-color, var(--forge-theme-error, #b00020))}.forge-meter .track.segmented.optimal{--_meter-background:var(--forge-meter-background, var(--forge-theme-success-container-low, #e6efe6));--_meter-color:var(--forge-meter-color, var(--forge-theme-success, #2e7d32))}.forge-meter .track.segmented .bar{transition-property:translate,box-shadow,background;transition-duration:var(--_meter-transition-duration);transition-timing-function:var(--_meter-transition-timing)}.forge-meter .track.lowest{--_meter-inner-elevation:var(--forge-meter-inner-elevation, 0)}.forge-meter .track.tickmarks::after{content:\"\";position:relative;display:block;width:100%;height:100%;margin-left:2px;background:repeating-linear-gradient(90deg,var(--_meter-color) 0,var(--_meter-color) 1px,var(--_meter-background) 1px,var(--_meter-background) 2px,transparent 2px,transparent calc(100% / (var(--_meter-tickmarks) + 1) + 0px));background-position-x:-2px;opacity:var(--_meter-tickmark-opacity);pointer-events:none;transition-property:background;transition-duration:var(--_meter-transition-duration);transition-timing-function:var(--_meter-transition-timing)}.forge-meter .bar{position:absolute;left:-100%;width:100%;height:100%;border-radius:var(--_meter-inner-shape);box-shadow:var(--_meter-inner-elevation);background:var(--_meter-color);translate:var(--_meter-percentage) 0;transition-property:translate,box-shadow;transition-duration:var(--_meter-transition-duration);transition-timing-function:var(--_meter-transition-timing)}.forge-meter.grouped{display:block;position:absolute;z-index:var(--_meter-z-index);top:0;left:var(--_meter-inset);width:calc(var(--_meter-percentage) + var(--_meter-group-height) * .5);height:100%;border-radius:var(--_meter-inner-shape);border-top-left-radius:0;border-bottom-left-radius:0;margin-left:calc(-1 * var(--_meter-group-height) * .5);background:var(--_meter-color);box-shadow:var(--_meter-inner-elevation)}.forge-meter.grouped.muted{--_meter-color:var(--forge-meter-color, var(--forge-theme-tertiary-container-high, #b5c0ff))}.forge-meter.density--small{--_meter-height:var(--forge-meter-height, var(--forge-spacing-xsmall, 8px))}.forge-meter.density--medium{--_meter-height:var(--forge-meter-height, var(--forge-spacing-medium, 16px))}.forge-meter.density--large{--_meter-height:var(--forge-meter-height, var(--forge-spacing-large, 24px))}.forge-meter.shape--default{--_meter-shape:var(--forge-meter-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)))}.forge-meter.shape--rounded{--_meter-shape:var(--forge-meter-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)))}.forge-meter.shape--squared{--_meter-shape:var(--forge-meter-shape, 0)}.forge-meter.inner-shape--inherit{--_meter-inner-shape:var(--_meter-shape)}.forge-meter.muted .track{--_meter-background:var(--forge-meter-background, var(--forge-theme-tertiary-container-minimum, #f7f8ff));--_meter-color:var(--forge-meter-color, var(--forge-theme-tertiary-container-high, #b5c0ff))}.forge-meter.muted .track.segmented{--_meter-background:var(--forge-meter-background, var(--forge-theme-warning-container-minimum, #fdf8f5));--_meter-color:var(--forge-meter-color, var(--forge-theme-warning-container-high, #eeba9e))}.forge-meter.muted .track.segmented.least-optimal{--_meter-background:var(--forge-meter-background, var(--forge-theme-error-container-minimum, #fcf5f6));--_meter-color:var(--forge-meter-color, var(--forge-theme-error-container-high, #e19eaa))}.forge-meter.muted .track.segmented.optimal{--_meter-background:var(--forge-meter-background, var(--forge-theme-success-container-minimum, #f7faf7));--_meter-color:var(--forge-meter-color, var(--forge-theme-success-container-high, #b0ceb1))}:host(:is(:state(vertical),:--vertical)){display:block}:host(:is(:state(vertical),:--vertical)) .forge-meter{display:flex;flex-direction:row-reverse;align-items:end;width:fit-content;height:100%;max-width:100%}:host(:is(:state(vertical),:--vertical)) .forge-meter .heading{flex-direction:column;align-items:start}:host(:is(:state(vertical),:--vertical)) .forge-meter .heading.not-empty{margin-bottom:0;margin-left:var(--forge-spacing-xsmall,8px)}:host(:is(:state(vertical),:--vertical)) .forge-meter .track{width:var(--_meter-height);height:100%}:host(:is(:state(vertical),:--vertical)) .forge-meter .track.tickmarks::after{margin-top:-2px;margin-left:0;background:repeating-linear-gradient(0,var(--_meter-color) 0,var(--_meter-color) 1px,var(--_meter-background) 1px,var(--_meter-background) 2px,transparent 2px,transparent calc(100% / (var(--_meter-tickmarks) + 1) + 0px));background-position-x:0;background-position-y:2px}:host(:is(:state(vertical),:--vertical)) .forge-meter .bar{left:initial;top:100%;translate:0 calc(-1 * var(--_meter-percentage))}:host(:is(:state(vertical),:--vertical)) .forge-meter.grouped{display:block;top:calc(100% - var(--_meter-percentage) - var(--_meter-inset));left:0;width:100%;height:calc(var(--_meter-percentage) + var(--_meter-group-height) * .5);max-width:initial;border-radius:var(--_meter-inner-shape);border-bottom-left-radius:0;border-bottom-right-radius:0;margin-left:0;margin-bottom:calc(-1 * var(--_meter-group-height) * .5)}.theme--primary:not(.muted) .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-primary-container-low, #e8eaf6));--_meter-color:var(--forge-meter-color, var(--forge-theme-primary, #3f51b5))}.theme--primary:not(.muted).grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-primary-container-low, #e8eaf6));--_meter-color:var(--forge-meter-color, var(--forge-theme-primary, #3f51b5))}.theme--primary.muted .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-primary-container-minimum, #f7f8fc));--_meter-color:var(--forge-meter-color, var(--forge-theme-primary-container-high, #b6bde3))}.theme--primary.muted .grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-primary-container-minimum, #f7f8fc));--_meter-color:var(--forge-meter-color, var(--forge-theme-primary-container-high, #b6bde3))}.theme--secondary:not(.muted) .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-secondary-container-low, #fff8e1));--_meter-color:var(--forge-meter-color, var(--forge-theme-secondary, #ffc107))}.theme--secondary:not(.muted).grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-secondary-container-low, #fff8e1));--_meter-color:var(--forge-meter-color, var(--forge-theme-secondary, #ffc107))}.theme--secondary.muted .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-secondary-container-minimum, #fffdf5));--_meter-color:var(--forge-meter-color, var(--forge-theme-secondary-container-high, #ffe7a1))}.theme--secondary.muted .grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-secondary-container-minimum, #fffdf5));--_meter-color:var(--forge-meter-color, var(--forge-theme-secondary-container-high, #ffe7a1))}.theme--tertiary:not(.muted) .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-tertiary-container-low, #e8ebff));--_meter-color:var(--forge-meter-color, var(--forge-theme-tertiary, #3d5afe))}.theme--tertiary:not(.muted).grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-tertiary-container-low, #e8ebff));--_meter-color:var(--forge-meter-color, var(--forge-theme-tertiary, #3d5afe))}.theme--tertiary.muted .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-tertiary-container-minimum, #f7f8ff));--_meter-color:var(--forge-meter-color, var(--forge-theme-tertiary-container-high, #b5c0ff))}.theme--tertiary.muted .grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-tertiary-container-minimum, #f7f8ff));--_meter-color:var(--forge-meter-color, var(--forge-theme-tertiary-container-high, #b5c0ff))}.theme--success:not(.muted) .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-success-container-low, #e6efe6));--_meter-color:var(--forge-meter-color, var(--forge-theme-success, #2e7d32))}.theme--success:not(.muted).grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-success-container-low, #e6efe6));--_meter-color:var(--forge-meter-color, var(--forge-theme-success, #2e7d32))}.theme--success.muted .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-success-container-minimum, #f7faf7));--_meter-color:var(--forge-meter-color, var(--forge-theme-success-container-high, #b0ceb1))}.theme--success.muted .grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-success-container-minimum, #f7faf7));--_meter-color:var(--forge-meter-color, var(--forge-theme-success-container-high, #b0ceb1))}.theme--warning:not(.muted) .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-warning-container-low, #f9e9e0));--_meter-color:var(--forge-meter-color, var(--forge-theme-warning, #d14900))}.theme--warning:not(.muted).grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-warning-container-low, #f9e9e0));--_meter-color:var(--forge-meter-color, var(--forge-theme-warning, #d14900))}.theme--warning.muted .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-warning-container-minimum, #fdf8f5));--_meter-color:var(--forge-meter-color, var(--forge-theme-warning-container-high, #eeba9e))}.theme--warning.muted .grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-warning-container-minimum, #fdf8f5));--_meter-color:var(--forge-meter-color, var(--forge-theme-warning-container-high, #eeba9e))}.theme--error:not(.muted) .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-error-container-low, #f6e0e4));--_meter-color:var(--forge-meter-color, var(--forge-theme-error, #b00020))}.theme--error:not(.muted).grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-error-container-low, #f6e0e4));--_meter-color:var(--forge-meter-color, var(--forge-theme-error, #b00020))}.theme--error.muted .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-error-container-minimum, #fcf5f6));--_meter-color:var(--forge-meter-color, var(--forge-theme-error-container-high, #e19eaa))}.theme--error.muted .grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-error-container-minimum, #fcf5f6));--_meter-color:var(--forge-meter-color, var(--forge-theme-error-container-high, #e19eaa))}.theme--info:not(.muted) .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-info-container-low, #e3edf7));--_meter-color:var(--forge-meter-color, var(--forge-theme-info, #1565c0))}.theme--info:not(.muted).grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-info-container-low, #e3edf7));--_meter-color:var(--forge-meter-color, var(--forge-theme-info, #1565c0))}.theme--info.muted .track:not(.segmented){--_meter-background:var(--forge-meter-background, var(--forge-theme-info-container-minimum, #f6f9fc));--_meter-color:var(--forge-meter-color, var(--forge-theme-info-container-high, #a6c4e7))}.theme--info.muted .grouped{--_meter-background:var(--forge-meter-background, var(--forge-theme-info-container-minimum, #f6f9fc));--_meter-color:var(--forge-meter-color, var(--forge-theme-info-container-high, #a6c4e7))}@media (prefers-reduced-motion:reduce){.track{--_meter-transition-duration:var(--forge-meter-transition-duration, 0)}}@media (forced-colors:active){.track{border:1px solid CanvasText}.track .bar{background:CanvasText}.grouped{border-inline-end:1px solid Canvas!important;background:CanvasText!important}:host(:is(:state(vertical),:--vertical)) .grouped{border-block-start:1px solid CanvasText!important;border-inline-end:initial!important}}';
16
17
  export const METER_TAG_NAME = 'forge-meter';
17
18
  const VALUE_STATE_MAP = new Map([
@@ -54,7 +55,7 @@ const VALUE_STATE_MAP = new Map([
54
55
  * @slot - The default slot for the meter's label.
55
56
  * @slot value - A textual representation of the meter's value.
56
57
  */
57
- let MeterComponent = class MeterComponent extends LitElement {
58
+ let MeterComponent = class MeterComponent extends BaseLitElement {
58
59
  /**
59
60
  * Gets the percentage of the meter that's filled.
60
61
  * @readonly
@@ -295,6 +296,7 @@ let MeterComponent = class MeterComponent extends LitElement {
295
296
  _a = CUSTOM_ELEMENT_NAME_PROPERTY;
296
297
  MeterComponent.styles = unsafeCSS(styles);
297
298
  MeterComponent.formAssociated = true;
299
+ /** @deprecated Used for compatibility with legacy Forge @customElement decorator. */
298
300
  MeterComponent[_a] = METER_TAG_NAME;
299
301
  __decorate([
300
302
  property({ type: Number })
@@ -4,8 +4,9 @@
4
4
  * License: Apache-2.0
5
5
  */
6
6
  import { CUSTOM_ELEMENT_NAME_PROPERTY } from '@tylertech/forge-core';
7
- import { LitElement, PropertyValues, TemplateResult } from 'lit';
7
+ import { PropertyValues, TemplateResult } from 'lit';
8
8
  import { MeterDensity, MeterDirection, MeterInnerShape, MeterShape } from '../meter/meter';
9
+ import { BaseLitElement } from '../../core/base/base-lit-element';
9
10
  export declare const METER_GROUP_TAG_NAME: keyof HTMLElementTagNameMap;
10
11
  /**
11
12
  * @tag forge-meter-group
@@ -28,7 +29,7 @@ export declare const METER_GROUP_TAG_NAME: keyof HTMLElementTagNameMap;
28
29
  * @slot label - Positions a label above the meter group.
29
30
  * @slot value - A textual representation of the meter's value.
30
31
  */
31
- export declare class MeterGroupComponent extends LitElement {
32
+ export declare class MeterGroupComponent extends BaseLitElement {
32
33
  static styles: import("lit").CSSResult;
33
34
  static formAssociated: boolean;
34
35
  /** @deprecated Used for compatibility with legacy Forge @customElement decorator. */
@@ -6,11 +6,12 @@
6
6
  var _a;
7
7
  import { __decorate } from "tslib";
8
8
  import { CUSTOM_ELEMENT_NAME_PROPERTY, debounce } from '@tylertech/forge-core';
9
- import { html, LitElement, unsafeCSS } from 'lit';
9
+ import { html, unsafeCSS } from 'lit';
10
10
  import { customElement, property, queryAssignedElements, queryAssignedNodes, state } from 'lit/decorators.js';
11
11
  import { classMap } from 'lit/directives/class-map.js';
12
12
  import { setDefaultAria } from '../../core/utils/a11y-utils';
13
13
  import { toggleState } from '../../core/utils/utils';
14
+ import { BaseLitElement } from '../../core/base/base-lit-element';
14
15
  const styles = ':host{display:inline}.forge-meter-group{--_meter-group-background:var(--forge-meter-group-background, var(--forge-theme-surface-container-low, #ebebeb));--_meter-group-height:var(--forge-meter-group-height, var(--forge-spacing-medium, 16px));--_meter-group-shape:var(--forge-meter-group-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));--_meter-group-tickmarks:var(--forge-meter-group-tickmarks, 10);--_meter-group-tickmark-color:var(--forge-meter-group-tickmark-color, var(--forge-theme-outline-high, #212121));--_meter-group-tickmark-opacity:var(--forge-meter-group-tickmark-opacity, 54%)}.forge-meter-group{box-sizing:border-box}.forge-meter-group .heading{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--forge-typography-label1-font-family, var(--forge-typography-font-family, \"Roboto\", sans-serif));font-size:var(--forge-typography-label1-font-size, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-font-size-scale, .75)));font-weight:var(--forge-typography-label1-font-weight,400);line-height:var(--forge-typography-label1-line-height, calc(var(--forge-typography-font-size, 1rem) * var(--forge-typography-label-line-height-scale, 1.25)));letter-spacing:var(--forge-typography-label1-letter-spacing, .0357142857em);text-transform:var(--forge-typography-label1-text-transform,inherit);text-decoration:var(--forge-typography-label1-text-decoration,inherit);display:flex;align-items:center;justify-content:space-between;line-height:normal}.forge-meter-group .heading.not-empty{margin-bottom:var(--forge-spacing-xxsmall,4px)}.forge-meter-group .label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.forge-meter-group .value{color:var(--forge-theme-text-medium,rgba(0,0,0,.6))}.forge-meter-group .track{position:relative;height:var(--_meter-group-height);border-radius:var(--_meter-group-shape);overflow:hidden;background:var(--_meter-group-background)}.forge-meter-group .track.tickmarks::after{content:\"\";position:relative;display:block;z-index:9999;width:100%;height:100%;margin-left:-1px;background:repeating-linear-gradient(90deg,var(--_meter-group-tickmark-color) 0,var(--_meter-group-tickmark-color) 1px,transparent 1px,transparent calc(100% / (var(--_meter-group-tickmarks) + 1) + 0px));opacity:var(--_meter-group-tickmark-opacity);pointer-events:none}.forge-meter-group .track.inner-shape--inherit{--forge-meter-inner-shape:var(--_meter-group-shape)}.forge-meter-group .track.shape--default{--_meter-group-shape:var(--forge-meter-group-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)))}.forge-meter-group .track.shape--rounded{--_meter-group-shape:var(--forge-meter-group-shape, calc(var(--forge-shape-full, 9999px) * var(--forge-shape-factor, 1)))}.forge-meter-group .track.shape--squared{--_meter-group-shape:var(--forge-meter-group-shape, 0)}.forge-meter-group .track.density--small{--_meter-group-height:var(--forge-meter-group-height, var(--forge-spacing-xsmall, 8px))}.forge-meter-group .track.density--medium{--_meter-group-height:var(--forge-meter-group-height, var(--forge-spacing-medium, 16px))}.forge-meter-group .track.density--large{--_meter-group-height:var(--forge-meter-group-height, var(--forge-spacing-large, 24px))}:host(:is(:state(vertical),:--vertical)){display:block}:host(:is(:state(vertical),:--vertical)) .forge-meter-group{display:flex;flex-direction:row-reverse;align-items:end;width:fit-content;height:100%;max-width:100%}:host(:is(:state(vertical),:--vertical)) .forge-meter-group .heading{flex-direction:column;align-items:start}:host(:is(:state(vertical),:--vertical)) .forge-meter-group .heading.not-empty{margin-bottom:0;margin-left:var(--forge-spacing-xsmall,8px)}:host(:is(:state(vertical),:--vertical)) .forge-meter-group .track{width:var(--_meter-group-height);height:100%}:host(:is(:state(vertical),:--vertical)) .forge-meter-group .track.tickmarks::after{margin-top:1px;margin-left:0;background:repeating-linear-gradient(90deg,var(--_meter-group-tickmark-color),true 0,var(--_meter-group-tickmark-color),true 1px,transparent 1px,transparent calc(100% / (var(--_meter-group-tickmarks) + 1) + 0px))}@media (forced-colors:active){.track{border:1px solid CanvasText}}';
15
16
  export const METER_GROUP_TAG_NAME = 'forge-meter-group';
16
17
  /**
@@ -34,7 +35,7 @@ export const METER_GROUP_TAG_NAME = 'forge-meter-group';
34
35
  * @slot label - Positions a label above the meter group.
35
36
  * @slot value - A textual representation of the meter's value.
36
37
  */
37
- let MeterGroupComponent = class MeterGroupComponent extends LitElement {
38
+ let MeterGroupComponent = class MeterGroupComponent extends BaseLitElement {
38
39
  get labels() {
39
40
  return this._internals.labels;
40
41
  }
@@ -6,7 +6,7 @@
6
6
  import { BaseComponent, IBaseComponent } from '../../core/base/base-component';
7
7
  import { IOverlayComponent } from '../overlay';
8
8
  import { IOverlayAwareCore } from './overlay-aware-core';
9
- import { IOverlayOffset, OverlayFlipState, OverlayHideState, OverlayPlacement, OverlayPositionStrategy } from '../overlay-constants';
9
+ import { IOverlayOffset, OverlayFlipState, OverlayHideState, OverlayPlacement, OverlayPositionStrategy, OverlayShiftState } from '../overlay-constants';
10
10
  import { PositionPlacement, VirtualElement } from '../../core/utils/position-utils';
11
11
  import { IBaseOverlay } from './base-overlay';
12
12
  export interface IOverlayAware extends IBaseComponent, IBaseOverlay {
@@ -21,7 +21,7 @@ export interface IOverlayAware extends IBaseComponent, IBaseOverlay {
21
21
  * @property {OverlayPlacement} [placement="bottom"] - The placement of the overlay.
22
22
  * @property {OverlayPositionStrategy} [positionStrategy="fixed"] - The position strategy of the overlay.
23
23
  * @property {IOverlayOffset} [offset={}] - The offset of the overlay.
24
- * @property {boolean} [shift=false] - Whether the overlay should shift to fit within the viewport.
24
+ * @property {OverlayShiftState} [shift="auto"] - Whether the overlay should shift to fit within the viewport.
25
25
  * @property {OverlayHideState} [hide="anchor-hidden"] - The hide state of the overlay.
26
26
  * @property {boolean} [persistent=false] - Whether the overlay should persist when the anchor is removed.
27
27
  * @property {OverlayFlipState} [flip="auto"] - Whether the overlay should flip placements to another side fit within the viewport.
@@ -37,7 +37,7 @@ export interface IOverlayAware extends IBaseComponent, IBaseOverlay {
37
37
  * @attribute {OverlayPlacement} [placement="bottom"] - The placement of the overlay.
38
38
  * @attribute {OverlayPositionStrategy} [position-strategy="fixed"] - The position strategy of the overlay.
39
39
  * @attribute {IOverlayOffset} offset - The offset of the overlay.
40
- * @attribute {boolean} [shift=false] - Whether the overlay should shift to fit within the viewport.
40
+ * @attribute {OverlayShiftState} [shift="auto"] - Whether the overlay should shift to fit within the viewport.
41
41
  * @attribute {OverlayHideState} [hide="anchor-hidden"] - The hide state of the overlay.
42
42
  * @attribute {boolean} [persistent=false] - Whether the overlay should persist when the anchor is removed.
43
43
  * @attribute {OverlayFlipState} [flip="auto"] - Whether the overlay should flip placements to another side fit within the viewport.
@@ -60,7 +60,7 @@ export declare abstract class OverlayAware<T extends IOverlayAwareCore> extends
60
60
  placement: OverlayPlacement;
61
61
  positionStrategy: OverlayPositionStrategy;
62
62
  offset: IOverlayOffset;
63
- shift: boolean;
63
+ shift: OverlayShiftState;
64
64
  hide: OverlayHideState;
65
65
  persistent: boolean;
66
66
  flip: OverlayFlipState;
@@ -16,7 +16,7 @@ import { OVERLAY_CONSTANTS } from '../overlay-constants';
16
16
  * @property {OverlayPlacement} [placement="bottom"] - The placement of the overlay.
17
17
  * @property {OverlayPositionStrategy} [positionStrategy="fixed"] - The position strategy of the overlay.
18
18
  * @property {IOverlayOffset} [offset={}] - The offset of the overlay.
19
- * @property {boolean} [shift=false] - Whether the overlay should shift to fit within the viewport.
19
+ * @property {OverlayShiftState} [shift="auto"] - Whether the overlay should shift to fit within the viewport.
20
20
  * @property {OverlayHideState} [hide="anchor-hidden"] - The hide state of the overlay.
21
21
  * @property {boolean} [persistent=false] - Whether the overlay should persist when the anchor is removed.
22
22
  * @property {OverlayFlipState} [flip="auto"] - Whether the overlay should flip placements to another side fit within the viewport.
@@ -32,7 +32,7 @@ import { OVERLAY_CONSTANTS } from '../overlay-constants';
32
32
  * @attribute {OverlayPlacement} [placement="bottom"] - The placement of the overlay.
33
33
  * @attribute {OverlayPositionStrategy} [position-strategy="fixed"] - The position strategy of the overlay.
34
34
  * @attribute {IOverlayOffset} offset - The offset of the overlay.
35
- * @attribute {boolean} [shift=false] - Whether the overlay should shift to fit within the viewport.
35
+ * @attribute {OverlayShiftState} [shift="auto"] - Whether the overlay should shift to fit within the viewport.
36
36
  * @attribute {OverlayHideState} [hide="anchor-hidden"] - The hide state of the overlay.
37
37
  * @attribute {boolean} [persistent=false] - Whether the overlay should persist when the anchor is removed.
38
38
  * @attribute {OverlayFlipState} [flip="auto"] - Whether the overlay should flip placements to another side fit within the viewport.
@@ -75,7 +75,7 @@ export class OverlayAware extends BaseComponent {
75
75
  this.persistent = coerceBoolean(newValue);
76
76
  break;
77
77
  case OVERLAY_CONSTANTS.observedAttributes.SHIFT:
78
- this.shift = coerceBoolean(newValue);
78
+ this.shift = newValue;
79
79
  break;
80
80
  case OVERLAY_CONSTANTS.observedAttributes.FLIP:
81
81
  this.flip = newValue;
@@ -127,6 +127,11 @@ export class BaseSelectCore extends ListDropdownAwareCore {
127
127
  scrollEndListener: this._dropdownScrollEndListener,
128
128
  activeChangeCallback: this._activeChangeListener,
129
129
  targetWidthCallback: this._targetWidthCallback,
130
+ popupPlacement: this._popoverPlacement,
131
+ popupOffset: this._popoverOffset,
132
+ popupFlip: this._popoverFlip,
133
+ popupShift: this._popoverShift,
134
+ popupFallbackPlacements: this._popoverFallbackPlacements,
130
135
  popupClasses: this._popupClasses,
131
136
  optionLimit: this._optionLimit,
132
137
  headerBuilder: this._popupHeaderBuilder,