@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
@@ -118,12 +118,12 @@
118
118
  }
119
119
 
120
120
  &:has(
121
- button:not(:disabled),
122
- a,
123
- label,
124
- .forge-list-item--interactive:not(.forge-list-item--disabled),
125
- :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])
126
- ) {
121
+ button:not(:disabled),
122
+ a,
123
+ label,
124
+ .forge-list-item--interactive:not(.forge-list-item--disabled),
125
+ :is(forge-checkbox, forge-radio, forge-switch, input):not([disabled])
126
+ ) {
127
127
  a,
128
128
  button,
129
129
  label,
@@ -9,6 +9,7 @@
9
9
  @use '../core/styles/theme';
10
10
  @use '../core/styles/typography';
11
11
  @use '../core/styles/animation';
12
+ @use '../focus-indicator';
12
13
  @use './variables';
13
14
 
14
15
  @mixin host {
@@ -239,7 +240,18 @@
239
240
  font: inherit;
240
241
  color: inherit;
241
242
  width: 100%;
242
- outline-offset: #{spacing.variable(xxsmall)};
243
+ outline: none;
244
+ position: relative;
245
+
246
+ forge-focus-indicator {
247
+ border-radius: 4px;
248
+
249
+ @include focus-indicator.provide-theme(
250
+ (
251
+ 'offset-inline': -4px
252
+ )
253
+ );
254
+ }
243
255
  }
244
256
 
245
257
  // The base table body row styles for row interactions.
@@ -11,7 +11,6 @@
11
11
 
12
12
  @mixin host {
13
13
  display: contents;
14
- pointer-events: none;
15
14
  }
16
15
 
17
16
  @mixin base {
@@ -32,7 +31,6 @@
32
31
 
33
32
  width: #{token(width)};
34
33
  max-width: #{token(max-width)};
35
- pointer-events: none;
36
34
  text-align: #{token(content-align)};
37
35
  line-height: normal;
38
36
  white-space: normal;
@@ -1,29 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Tyler Technologies, Inc.
4
- * License: Apache-2.0
5
- */
6
- import { BaseAdapter, IBaseAdapter } from '../core';
7
- import { IFocusIndicatorComponent } from './focus-indicator';
8
- export interface IFocusIndicatorAdapter extends IBaseAdapter {
9
- destroy(): void;
10
- hasTargetElement(): boolean;
11
- addTargetListener(type: string, listener: EventListener): void;
12
- removeTargetListener(type: string, listener: EventListener): void;
13
- getTargetElement(): HTMLElement | null;
14
- setTargetElement(el: HTMLElement | null): void;
15
- trySetTarget(value: string | null): void;
16
- isActive(selector: string, el?: HTMLElement | null): boolean;
17
- }
18
- export declare class FocusIndicatorAdapter extends BaseAdapter<IFocusIndicatorComponent> implements IFocusIndicatorAdapter {
19
- private _targetElement;
20
- constructor(component: IFocusIndicatorComponent);
21
- destroy(): void;
22
- hasTargetElement(): boolean;
23
- addTargetListener(type: string, listener: EventListener): void;
24
- removeTargetListener(type: string, listener: EventListener): void;
25
- getTargetElement(): HTMLElement | null;
26
- setTargetElement(el: HTMLElement | null): void;
27
- trySetTarget(value: string | null): void;
28
- isActive(selector: string, el?: HTMLElement | null): boolean;
29
- }
@@ -1,37 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Tyler Technologies, Inc.
4
- * License: Apache-2.0
5
- */
6
- import { BaseAdapter, locateTargetHeuristic } from '../core';
7
- export class FocusIndicatorAdapter extends BaseAdapter {
8
- constructor(component) {
9
- super(component);
10
- this._targetElement = null;
11
- }
12
- destroy() {
13
- this._targetElement = null;
14
- }
15
- hasTargetElement() {
16
- return !!this._targetElement;
17
- }
18
- addTargetListener(type, listener) {
19
- this._targetElement?.addEventListener(type, listener);
20
- }
21
- removeTargetListener(type, listener) {
22
- this._targetElement?.removeEventListener(type, listener);
23
- }
24
- getTargetElement() {
25
- return this._targetElement;
26
- }
27
- setTargetElement(el) {
28
- this._targetElement = el;
29
- }
30
- trySetTarget(value) {
31
- this._targetElement = locateTargetHeuristic(this._component, value);
32
- }
33
- isActive(selector, el) {
34
- const targetedEl = el ?? this._targetElement;
35
- return !!targetedEl?.matches(selector);
36
- }
37
- }
@@ -1,48 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Tyler Technologies, Inc.
4
- * License: Apache-2.0
5
- */
6
- import { IFocusIndicatorAdapter } from './focus-indicator-adapter';
7
- import { FocusIndicatorFocusMode } from './focus-indicator-constants';
8
- export interface IFocusIndicatorCore {
9
- targetElement: HTMLElement | null;
10
- target: string | null;
11
- active: boolean;
12
- inward: boolean;
13
- circular: boolean;
14
- allowFocus: boolean;
15
- focusMode: FocusIndicatorFocusMode;
16
- initialize(): void;
17
- destroy(): void;
18
- }
19
- export declare class FocusIndicatorCore implements IFocusIndicatorCore {
20
- private _adapter;
21
- private _target;
22
- private _active;
23
- private _inward;
24
- private _circular;
25
- private _allowFocus;
26
- private _focusMode;
27
- private _interactionListener;
28
- constructor(_adapter: IFocusIndicatorAdapter);
29
- initialize(): void;
30
- destroy(): void;
31
- private _addListeners;
32
- private _removeListeners;
33
- private _onInteraction;
34
- get targetElement(): HTMLElement | null;
35
- set targetElement(value: HTMLElement | null);
36
- get target(): string | null;
37
- set target(value: string | null);
38
- get active(): boolean;
39
- set active(value: boolean);
40
- get inward(): boolean;
41
- set inward(value: boolean);
42
- get circular(): boolean;
43
- set circular(value: boolean);
44
- get allowFocus(): boolean;
45
- set allowFocus(value: boolean);
46
- get focusMode(): FocusIndicatorFocusMode;
47
- set focusMode(value: FocusIndicatorFocusMode);
48
- }
@@ -1,129 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Tyler Technologies, Inc.
4
- * License: Apache-2.0
5
- */
6
- import { FOCUS_INDICATOR_CONSTANTS } from './focus-indicator-constants';
7
- export class FocusIndicatorCore {
8
- constructor(_adapter) {
9
- this._adapter = _adapter;
10
- this._target = null;
11
- this._active = false;
12
- this._inward = false;
13
- this._circular = false;
14
- this._allowFocus = false;
15
- this._focusMode = FOCUS_INDICATOR_CONSTANTS.defaults.FOCUS_MODE;
16
- this._interactionListener = evt => this._onInteraction(evt);
17
- }
18
- initialize() {
19
- if (!this._adapter.hasTargetElement()) {
20
- this._adapter.trySetTarget(this._target);
21
- }
22
- this._addListeners();
23
- }
24
- destroy() {
25
- this._removeListeners(); // Must be called before destroying adapter
26
- this._adapter.destroy();
27
- }
28
- _addListeners() {
29
- this._adapter.addTargetListener(this._focusMode, this._interactionListener);
30
- this._adapter.addTargetListener('focusout', this._interactionListener);
31
- this._adapter.addTargetListener('pointerdown', this._interactionListener);
32
- }
33
- _removeListeners() {
34
- this._adapter.removeTargetListener(this._focusMode, this._interactionListener);
35
- this._adapter.removeTargetListener('focusout', this._interactionListener);
36
- this._adapter.removeTargetListener('pointerdown', this._interactionListener);
37
- }
38
- _onInteraction(evt) {
39
- const target = evt.target;
40
- switch (evt.type) {
41
- case this._focusMode:
42
- this.active = this._adapter.isActive(this._allowFocus ? ':focus' : ':focus-visible', target);
43
- break;
44
- case 'focusout':
45
- this.active = false;
46
- break;
47
- case 'pointerdown':
48
- this.active = this._allowFocus ? this._adapter.isActive(':focus', target) : this._adapter.isActive(':focus-visible', target);
49
- break;
50
- }
51
- }
52
- get targetElement() {
53
- return this._adapter.getTargetElement();
54
- }
55
- set targetElement(value) {
56
- this._removeListeners();
57
- this._adapter.setTargetElement(value);
58
- this._addListeners();
59
- }
60
- get target() {
61
- return this._adapter.getHostAttribute(FOCUS_INDICATOR_CONSTANTS.attributes.TARGET);
62
- }
63
- set target(value) {
64
- if (this._target !== value) {
65
- this._target = value;
66
- if (this._adapter.isConnected) {
67
- this._adapter.trySetTarget(value);
68
- }
69
- this._adapter.toggleHostAttribute(FOCUS_INDICATOR_CONSTANTS.attributes.TARGET, Boolean(this._target), this._target);
70
- }
71
- }
72
- get active() {
73
- return this._active;
74
- }
75
- set active(value) {
76
- value = Boolean(value);
77
- if (this._active !== value) {
78
- this._active = value;
79
- this._adapter.toggleHostAttribute(FOCUS_INDICATOR_CONSTANTS.attributes.ACTIVE, this._active);
80
- }
81
- }
82
- get inward() {
83
- return this._inward;
84
- }
85
- set inward(value) {
86
- value = Boolean(value);
87
- if (this._inward !== value) {
88
- this._inward = value;
89
- this._adapter.toggleHostAttribute(FOCUS_INDICATOR_CONSTANTS.attributes.INWARD, this._inward);
90
- }
91
- }
92
- get circular() {
93
- return this._circular;
94
- }
95
- set circular(value) {
96
- value = Boolean(value);
97
- if (this._circular !== value) {
98
- this._circular = value;
99
- this._adapter.toggleHostAttribute(FOCUS_INDICATOR_CONSTANTS.attributes.CIRCULAR, this._circular);
100
- }
101
- }
102
- get allowFocus() {
103
- return this._allowFocus;
104
- }
105
- set allowFocus(value) {
106
- value = Boolean(value);
107
- if (this._allowFocus !== value) {
108
- this._allowFocus = value;
109
- this._adapter.toggleHostAttribute(FOCUS_INDICATOR_CONSTANTS.attributes.ALLOW_FOCUS, this._allowFocus);
110
- }
111
- }
112
- get focusMode() {
113
- return this._focusMode;
114
- }
115
- set focusMode(value) {
116
- value ?? (value = FOCUS_INDICATOR_CONSTANTS.defaults.FOCUS_MODE);
117
- if (this._focusMode !== value) {
118
- if (this._adapter.isConnected) {
119
- this._removeListeners();
120
- }
121
- this._focusMode = value;
122
- if (this._adapter.isConnected) {
123
- this._addListeners();
124
- }
125
- const hasFocusMode = this._focusMode !== FOCUS_INDICATOR_CONSTANTS.defaults.FOCUS_MODE;
126
- this._adapter.toggleHostAttribute(FOCUS_INDICATOR_CONSTANTS.attributes.FOCUS_MODE, hasFocusMode, this._focusMode);
127
- }
128
- }
129
- }