@tylertech/forge 3.9.0-dev.1 → 3.9.0-dev.3

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.
@@ -3,10 +3,10 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import { tryDefine } from '@tylertech/forge-core';
7
- import { AVATAR_TAG_NAME, AvatarComponent } from './avatar';
6
+ import { defineCustomElement } from '@tylertech/forge-core';
7
+ import { AvatarComponent } from './avatar';
8
8
  export * from './avatar';
9
9
  export * from './avatar-constants';
10
10
  export function defineAvatarComponent() {
11
- tryDefine(AVATAR_TAG_NAME, AvatarComponent);
11
+ defineCustomElement(AvatarComponent);
12
12
  }
@@ -3,11 +3,11 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import { tryDefine } from '@tylertech/forge-core';
7
- import { BADGE_TAG_NAME, BadgeComponent } from './badge';
6
+ import { defineCustomElement } from '@tylertech/forge-core';
7
+ import { BadgeComponent } from './badge';
8
8
  export * from './badge-component-delegate';
9
9
  export * from './badge-constants';
10
10
  export * from './badge';
11
11
  export function defineBadgeComponent() {
12
- tryDefine(BADGE_TAG_NAME, BadgeComponent);
12
+ defineCustomElement(BadgeComponent);
13
13
  }
@@ -3,6 +3,6 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- export * from './card-constants';
7
6
  export * from './card';
7
+ export * from './card-constants';
8
8
  export declare function defineCardComponent(): void;
package/esm/card/index.js CHANGED
@@ -3,10 +3,10 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import { tryDefine } from '@tylertech/forge-core';
7
- import { CARD_TAG_NAME, CardComponent } from './card';
8
- export * from './card-constants';
6
+ import { defineCustomElement } from '@tylertech/forge-core';
7
+ import { CardComponent } from './card';
9
8
  export * from './card';
9
+ export * from './card-constants';
10
10
  export function defineCardComponent() {
11
- tryDefine(CARD_TAG_NAME, CardComponent);
11
+ defineCustomElement(CardComponent);
12
12
  }
@@ -50,8 +50,11 @@ export class DismissibleStack {
50
50
  * @param state The state to pass to the dismiss method of each element
51
51
  */
52
52
  async dismiss(el, state) {
53
- const elements = Array.from(this._dismissibleElements);
54
- const elementsAfter = elements.slice(elements.indexOf(el)).reverse();
53
+ const elements = DismissibleStack.instance.getAll();
54
+ const elementsAfter = elements
55
+ .slice(elements.indexOf(el))
56
+ .filter(element => element === el || element.contains(el))
57
+ .reverse();
55
58
  for (const element of elementsAfter) {
56
59
  if (!element[tryDismiss](state)) {
57
60
  break;
@@ -3,9 +3,9 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import { tryDefine } from '@tylertech/forge-core';
7
- import { KEY_TAG_NAME, KeyComponent } from './key';
6
+ import { defineCustomElement } from '@tylertech/forge-core';
7
+ import { KeyComponent } from './key';
8
8
  export * from './key';
9
9
  export function defineKeyComponent() {
10
- tryDefine(KEY_TAG_NAME, KeyComponent);
10
+ defineCustomElement(KeyComponent);
11
11
  }
@@ -3,9 +3,9 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import { tryDefine } from '@tylertech/forge-core';
7
- import { KEY_ITEM_TAG_NAME, KeyItemComponent } from './key-item';
6
+ import { defineCustomElement } from '@tylertech/forge-core';
7
+ import { KeyItemComponent } from './key-item';
8
8
  export * from './key-item';
9
9
  export function defineKeyItemComponent() {
10
- tryDefine(KEY_ITEM_TAG_NAME, KeyItemComponent);
10
+ defineCustomElement(KeyItemComponent);
11
11
  }
@@ -3,9 +3,9 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import { tryDefine } from '@tylertech/forge-core';
6
+ import { defineCustomElement } from '@tylertech/forge-core';
7
7
  import { MeterComponent } from './meter';
8
8
  export * from './meter';
9
9
  export function defineMeterComponent() {
10
- tryDefine('forge-meter', MeterComponent);
10
+ defineCustomElement(MeterComponent);
11
11
  }
@@ -3,9 +3,9 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- import { tryDefine } from '@tylertech/forge-core';
7
- import { METER_GROUP_TAG_NAME, MeterGroupComponent } from './meter-group';
6
+ import { defineCustomElement } from '@tylertech/forge-core';
7
+ import { MeterGroupComponent } from './meter-group';
8
8
  export * from './meter-group';
9
9
  export function defineMeterGroupComponent() {
10
- tryDefine(METER_GROUP_TAG_NAME, MeterGroupComponent);
10
+ defineCustomElement(MeterGroupComponent);
11
11
  }
@@ -50,7 +50,6 @@ export declare const POPOVER_CONSTANTS: {
50
50
  TRIGGER_TYPE: PopoverTriggerType;
51
51
  HOVER_DELAY: number;
52
52
  PRESET: PopoverPreset;
53
- DISTINCT: string;
54
53
  };
55
54
  };
56
55
  export declare const POPOVER_HOVER_TIMEOUT = 500;
@@ -40,8 +40,7 @@ const events = {
40
40
  const defaults = {
41
41
  TRIGGER_TYPE: 'click',
42
42
  HOVER_DELAY: 0,
43
- PRESET: 'popover',
44
- DISTINCT: '<default>'
43
+ PRESET: 'popover'
45
44
  };
46
45
  export const POPOVER_CONSTANTS = {
47
46
  elementName,
@@ -103,10 +103,13 @@ export class PopoverCore extends WithLongpressListener((OverlayAwareCore)) {
103
103
  }
104
104
  this._previouslyFocusedElement = this._adapter.captureFocusedElement();
105
105
  this._adapter.setOverlayOpen(true);
106
- if (this._distinct) {
106
+ // Popovers can be distinct from each other, meaning that only one popover with the same distinct
107
+ // value can be open at a time. Let's capture the distinct group context and close any other popovers
108
+ // that are open in the same context.
109
+ if (this._distinct != null) {
107
110
  const allPopovers = DismissibleStack.instance.getAll().filter(el => el.tagName.toLowerCase() === 'forge-popover');
108
- const contextPopovers = allPopovers.filter(popover => popover.distinct === this._distinct);
109
- contextPopovers.filter(popover => popover !== this._adapter.hostElement).forEach(popover => (popover.open = false));
111
+ const contextPopovers = allPopovers.filter(popover => popover.distinct === this._distinct && !popover.persistent);
112
+ contextPopovers.filter(popover => popover !== this._adapter.hostElement).forEach(popover => popover.hideAsync());
110
113
  }
111
114
  if (!this.overlayElement.persistent) {
112
115
  DismissibleStack.instance.add(this._adapter.hostElement);
@@ -528,14 +531,6 @@ export class PopoverCore extends WithLongpressListener((OverlayAwareCore)) {
528
531
  return this._distinct;
529
532
  }
530
533
  set distinct(value) {
531
- value = value ?? null;
532
- if (this._distinct !== value) {
533
- if (this._adapter.hasHostAttribute(POPOVER_CONSTANTS.attributes.DISTINCT) && !value) {
534
- this._distinct = POPOVER_CONSTANTS.defaults.DISTINCT;
535
- }
536
- else {
537
- this._distinct = value;
538
- }
539
- }
534
+ this._distinct = value;
540
535
  }
541
536
  }
@@ -45,7 +45,7 @@ declare global {
45
45
  * @property {number} [hoverDismissDelay=500] - The delay in milliseconds before the popover is dismissed when the user hovers outside of the popover.
46
46
  * @property {number} [hoverDelay=0] - The delay in milliseconds before the popover is shown.
47
47
  * @property {PopoverPreset} [preset="popover"] - The preset to use for the popover.
48
- * @property {string | null} [distinct=null] - Enforces that this popover should be the only one open in the same context. Use a unique name otherwise a default context will be used.
48
+ * @property {string | null} [distinct=null] - Enforces that this popover should be the only one open with the same unique value.
49
49
  *
50
50
  * @globalconfig placement
51
51
  * @globalconfig animationType
@@ -66,7 +66,7 @@ declare global {
66
66
  * @attribute {string} [hover-dismiss-delay=500] - The delay in milliseconds before the popover is dismissed when the user hovers outside of the popover.
67
67
  * @attribute {number} [hover-delay=0] - The delay in milliseconds before the popover is shown.
68
68
  * @attribute {string} [preset="popover"] - The preset to use for the popover.
69
- * @attribute {string | null} [distinct=null] - Enforces that this popover should be the only one open in the same context. Use a unique name otherwise a default context will be used.
69
+ * @attribute {string | null} [distinct=null] - Enforces that this popover should be the only one open with the same unique value.
70
70
  *
71
71
  * @event {CustomEvent<IPopoverToggleEventData>} forge-popover-beforetoggle - Dispatches before the popover is toggled, and is cancelable.
72
72
  * @event {CustomEvent<IPopoverToggleEventData>} forge-popover-toggle - Dispatches after the popover is toggled.
@@ -29,7 +29,7 @@ const styles = '@keyframes zoomin{from{transform:scale(.8)}to{transform:scale(1)
29
29
  * @property {number} [hoverDismissDelay=500] - The delay in milliseconds before the popover is dismissed when the user hovers outside of the popover.
30
30
  * @property {number} [hoverDelay=0] - The delay in milliseconds before the popover is shown.
31
31
  * @property {PopoverPreset} [preset="popover"] - The preset to use for the popover.
32
- * @property {string | null} [distinct=null] - Enforces that this popover should be the only one open in the same context. Use a unique name otherwise a default context will be used.
32
+ * @property {string | null} [distinct=null] - Enforces that this popover should be the only one open with the same unique value.
33
33
  *
34
34
  * @globalconfig placement
35
35
  * @globalconfig animationType
@@ -50,7 +50,7 @@ const styles = '@keyframes zoomin{from{transform:scale(.8)}to{transform:scale(1)
50
50
  * @attribute {string} [hover-dismiss-delay=500] - The delay in milliseconds before the popover is dismissed when the user hovers outside of the popover.
51
51
  * @attribute {number} [hover-delay=0] - The delay in milliseconds before the popover is shown.
52
52
  * @attribute {string} [preset="popover"] - The preset to use for the popover.
53
- * @attribute {string | null} [distinct=null] - Enforces that this popover should be the only one open in the same context. Use a unique name otherwise a default context will be used.
53
+ * @attribute {string | null} [distinct=null] - Enforces that this popover should be the only one open with the same unique value.
54
54
  *
55
55
  * @event {CustomEvent<IPopoverToggleEventData>} forge-popover-beforetoggle - Dispatches before the popover is toggled, and is cancelable.
56
56
  * @event {CustomEvent<IPopoverToggleEventData>} forge-popover-toggle - Dispatches after the popover is toggled.
@@ -142,7 +142,7 @@ let PopoverComponent = class PopoverComponent extends OverlayAware {
142
142
  this.preset = newValue;
143
143
  return;
144
144
  case POPOVER_CONSTANTS.observedAttributes.DISTINCT:
145
- this.distinct = !newValue ? null : newValue.trim();
145
+ this.distinct = newValue;
146
146
  return;
147
147
  }
148
148
  super.attributeChangedCallback(name, oldValue, newValue);
@@ -14,7 +14,7 @@ import { IconComponent, IconRegistry } from '../../icon';
14
14
  import { StateLayerComponent } from '../../state-layer';
15
15
  import { FocusIndicatorComponent } from '../../focus-indicator';
16
16
  const template = '<template><div class=\"forge-split-view-panel\" id=\"root\" part=\"root\"><div class=\"forge-split-view-panel__handle\" id=\"handle\" part=\"handle\" role=\"separator\" aria-controls=\"content\" aria-grabbed=\"false\" tabindex=\"0\"><forge-icon class=\"forge-split-view-panel__icon\" id=\"icon\" part=\"icon\"></forge-icon><forge-state-layer target=\"handle\" id=\"state-layer\" exportparts=\"surface:state-layer\"></forge-state-layer><forge-focus-indicator inward target=\"handle\" part=\"focus-indicator\"></forge-focus-indicator></div><div class=\"forge-split-view-panel__content\" id=\"content\" part=\"content\" role=\"group\"><slot></slot></div></div></template>';
17
- const styles = '.forge-split-view-panel{display:flex;width:100%;height:100%;overflow:hidden}.forge-split-view-panel__handle{color:var(--forge-theme-text-medium,rgba(0,0,0,.6));background-color:var(--forge-theme-outline,#e0e0e0);position:relative;display:flex;flex-shrink:0;justify-content:center;align-items:center;outline:0}.forge-split-view-panel__content{flex:1;overflow:hidden}.forge-split-view-panel--closed{display:none}.forge-split-view-panel--disabled #handle{pointer-events:none}.forge-split-view-panel--disabled .forge-split-view-panel__icon{display:none}.forge-split-view-panel[orientation=horizontal]{min-width:var(--forge-split-view-handle-width,8px);width:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:row}.forge-split-view-panel[orientation=horizontal] .forge-split-view-panel__handle{width:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:uwedhbm;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes uwedhbm{from{transform:none}to{transform:translateX(-100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=start]{position:absolute;top:0;right:0;animation-name:uwedhbz;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes uwedhbz{from{transform:none}to{transform:translateX(100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--opening[resizable=end]{position:absolute;top:0;left:0;animation-name:uwedhcs;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes uwedhcs{from{transform:none}to{transform:translateX(-100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--opening[resizable=start]{position:absolute;top:0;right:0;animation-name:uwedhd4;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes uwedhd4{from{transform:none}to{transform:translateX(100%)}}.forge-split-view-panel[orientation=vertical]{min-height:var(--forge-split-view-handle-width,8px);height:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:column}.forge-split-view-panel[orientation=vertical] .forge-split-view-panel__handle{height:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:uwedhd8;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes uwedhd8{from{transform:none}to{transform:translateY(-100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--closing[resizable=start]{position:absolute;bottom:0;left:0;animation-name:uwedhds;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes uwedhds{from{transform:none}to{transform:translateY(100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--opening[resizable=end]{position:absolute;top:0;left:0;animation-name:uwedheb;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes uwedheb{from{transform:none}to{transform:translateY(-100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--opening[resizable=start]{position:absolute;bottom:0;left:0;animation-name:uwedher;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes uwedher{from{transform:none}to{transform:translateY(100%)}}:host{z-index:var(--forge-split-view-animating-layer)!important;display:block;position:relative;height:100%;width:100%;flex:0}:host([hidden]){display:none}:host(:not([resizable=start],[resizable=end])){flex:1}:host(:not([resizable=start],[resizable=end])) .forge-split-view-panel{width:100%;height:100%;min-width:0;min-height:0}:host(:not([resizable=start],[resizable=end])) .forge-split-view-panel__handle{display:none}forge-focus-indicator{--forge-focus-indicator-active-width:2px}';
17
+ const styles = '.forge-split-view-panel{display:flex;width:100%;height:100%;overflow:hidden}.forge-split-view-panel__handle{color:var(--forge-theme-text-medium,rgba(0,0,0,.6));background-color:var(--forge-theme-outline,#e0e0e0);position:relative;display:flex;flex-shrink:0;justify-content:center;align-items:center;outline:0}.forge-split-view-panel__content{flex:1;overflow:hidden}.forge-split-view-panel--closed{display:none}.forge-split-view-panel--disabled #handle{pointer-events:none}.forge-split-view-panel--disabled .forge-split-view-panel__icon{display:none}.forge-split-view-panel[orientation=horizontal]{min-width:var(--forge-split-view-handle-width,8px);width:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:row}.forge-split-view-panel[orientation=horizontal] .forge-split-view-panel__handle{width:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:ud3jlhz;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes ud3jlhz{from{transform:none}to{transform:translateX(-100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=start]{position:absolute;top:0;right:0;animation-name:ud3jli1;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes ud3jli1{from{transform:none}to{transform:translateX(100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--opening[resizable=end]{position:absolute;top:0;left:0;animation-name:ud3jliz;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes ud3jliz{from{transform:none}to{transform:translateX(-100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--opening[resizable=start]{position:absolute;top:0;right:0;animation-name:ud3jlj0;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes ud3jlj0{from{transform:none}to{transform:translateX(100%)}}.forge-split-view-panel[orientation=vertical]{min-height:var(--forge-split-view-handle-width,8px);height:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:column}.forge-split-view-panel[orientation=vertical] .forge-split-view-panel__handle{height:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:ud3jlje;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes ud3jlje{from{transform:none}to{transform:translateY(-100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--closing[resizable=start]{position:absolute;bottom:0;left:0;animation-name:ud3jljg;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes ud3jljg{from{transform:none}to{transform:translateY(100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--opening[resizable=end]{position:absolute;top:0;left:0;animation-name:ud3jljo;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes ud3jljo{from{transform:none}to{transform:translateY(-100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--opening[resizable=start]{position:absolute;bottom:0;left:0;animation-name:ud3jlk5;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes ud3jlk5{from{transform:none}to{transform:translateY(100%)}}:host{z-index:var(--forge-split-view-animating-layer)!important;display:block;position:relative;height:100%;width:100%;flex:0}:host([hidden]){display:none}:host(:not([resizable=start],[resizable=end])){flex:1}:host(:not([resizable=start],[resizable=end])) .forge-split-view-panel{width:100%;height:100%;min-width:0;min-height:0}:host(:not([resizable=start],[resizable=end])) .forge-split-view-panel__handle{display:none}forge-focus-indicator{--forge-focus-indicator-active-width:2px}';
18
18
  /**
19
19
  * @tag forge-split-view-panel
20
20
  *
@@ -88,6 +88,7 @@ export declare const TABLE_CONSTANTS: {
88
88
  FILTER: string;
89
89
  INITIALIZED: string;
90
90
  COLUMN_RESIZE: string;
91
+ BODY_RENDERED: string;
91
92
  };
92
93
  strings: {
93
94
  SELECT_ALL: string;
@@ -89,7 +89,8 @@ const events = {
89
89
  SORT: `${elementName}-sort`,
90
90
  FILTER: `${elementName}-filter`,
91
91
  INITIALIZED: `${elementName}-initialized`,
92
- COLUMN_RESIZE: `${elementName}-column-resize`
92
+ COLUMN_RESIZE: `${elementName}-column-resize`,
93
+ BODY_RENDERED: `${elementName}-body-rendered`
93
94
  };
94
95
  const strings = {
95
96
  SELECT_ALL: 'select-all',
@@ -443,6 +443,7 @@ export class TableCore {
443
443
  this._adapter.createTable(this._tableConfiguration);
444
444
  this._renderSelections();
445
445
  this._rendered = true;
446
+ this._adapter.emitHostEvent(TABLE_CONSTANTS.events.BODY_RENDERED, undefined, false);
446
447
  }
447
448
  /**
448
449
  * Renders the table body only.
@@ -453,6 +454,7 @@ export class TableCore {
453
454
  }
454
455
  this._adapter.recreateTableBody(this._tableConfiguration);
455
456
  this._renderSelections();
457
+ this._adapter.emitHostEvent(TABLE_CONSTANTS.events.BODY_RENDERED, undefined, false);
456
458
  }
457
459
  _renderSelections() {
458
460
  if (this.select) {
@@ -59,6 +59,7 @@ declare global {
59
59
  'forge-table-filter': CustomEvent<ITableFilterEventData>;
60
60
  'forge-table-initialized': CustomEvent<void>;
61
61
  'forge-table-column-resize': CustomEvent<ITableColumnResizeEventData>;
62
+ 'forge-table-body-rendered': CustomEvent<void>;
62
63
  }
63
64
  }
64
65
  /**
@@ -77,6 +78,7 @@ declare global {
77
78
  * @event {CustomEvent<ITableFilterEventData>} forge-table-filter - Dispatched when a column is filtered. Only applies when `filter` is specified.
78
79
  * @event {CustomEvent<void>} forge-table-initialized - Dispatched when the table is initialized in the DOM for the first time.
79
80
  * @event {CustomEvent<ITableColumnResizeEventData>} forge-table-column-resize - Dispatched when a column is resized.
81
+ * @event {CustomEvent<void>} forge-table-body-rendered - Dispatched when the table body is rendered.
80
82
  *
81
83
  * @cssclass forge-data-table - The base table class.
82
84
  */
@@ -31,6 +31,7 @@ import { TooltipComponent } from '../tooltip';
31
31
  * @event {CustomEvent<ITableFilterEventData>} forge-table-filter - Dispatched when a column is filtered. Only applies when `filter` is specified.
32
32
  * @event {CustomEvent<void>} forge-table-initialized - Dispatched when the table is initialized in the DOM for the first time.
33
33
  * @event {CustomEvent<ITableColumnResizeEventData>} forge-table-column-resize - Dispatched when a column is resized.
34
+ * @event {CustomEvent<void>} forge-table-body-rendered - Dispatched when the table body is rendered.
34
35
  *
35
36
  * @cssclass forge-data-table - The base table class.
36
37
  */
@@ -22,6 +22,11 @@ declare global {
22
22
  * @tag forge-view-switcher
23
23
  *
24
24
  * @dependency forge-view
25
+ *
26
+ * @cssproperty --forge-view-switcher-height - The `height` of the view switcher.
27
+ * @cssproperty --forge-view-switcher-width - The `width` of the view switcher.
28
+ * @cssproperty --forge-view-switcher-animation-duration - The duration of view switching animations.
29
+ * @cssproperty --forge-view-switcher-animation-easing - The timing function of view switching animations.
25
30
  */
26
31
  export declare class ViewSwitcherComponent extends BaseComponent implements IViewSwitcherComponent {
27
32
  static get observedAttributes(): string[];
@@ -11,11 +11,16 @@ import { VIEW_SWITCHER_CONSTANTS } from './view-switcher-constants';
11
11
  import { ViewComponent } from './view/view';
12
12
  import { BaseComponent } from '../core/base/base-component';
13
13
  const template = '<template><div class=\"forge-view-switcher\" part=\"root\"><slot></slot></div></template>';
14
- const styles = ':host{height:var(--_view-switcher-height);width:var(--_view-switcher-width);display:block}:host([hidden]){display:none}.forge-view-switcher{--_view-switcher-height:var(--forge-view-switcher-height, auto);--_view-switcher-width:var(--forge-view-switcher-width, auto);--_view-switcher-animation-duration:var(--forge-view-switcher-animation-duration, var(--forge-animation-duration-medium2, 300ms));--_view-switcher-animation-easing:var(--forge-view-switcher-animation-easing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)))}.forge-view-switcher{height:var(--_view-switcher-height);width:var(--_view-switcher-width);position:relative;overflow:hidden;transition-property:height;transition-duration:var(--_view-switcher-animation-duration);transition-timing-function:var(--_view-switcher-animation-easing)}.forge-view-switcher ::slotted(.forge-view-switcher__view--hidden){position:absolute;top:0;right:0;bottom:0;left:0}:host(.slide) ::slotted(forge-view){transition-property:transform;transition-duration:var(--_view-switcher-animation-duration);transition-timing-function:var(--_view-switcher-animation-easing);will-change:transform}:host(.fade) ::slotted(forge-view){transition-property:opacity;transition-duration:var(--_view-switcher-animation-duration);transition-timing-function:var(--_view-switcher-animation-easing);will-change:opacity}:host(.fade) ::slotted(.forge-view-switcher__view--hidden){opacity:0}';
14
+ const styles = ':host{height:var(--_view-switcher-height);width:var(--_view-switcher-width);display:block}:host{--_view-switcher-height:var(--forge-view-switcher-height, auto);--_view-switcher-width:var(--forge-view-switcher-width, auto)}:host([hidden]){display:none}.forge-view-switcher{--_view-switcher-animation-duration:var(--forge-view-switcher-animation-duration, var(--forge-animation-duration-medium2, 300ms));--_view-switcher-animation-easing:var(--forge-view-switcher-animation-easing, var(--forge-animation-easing-standard, cubic-bezier(0.2, 0, 0, 1)))}.forge-view-switcher{height:var(--_view-switcher-height);width:var(--_view-switcher-width);position:relative;overflow:hidden;transition-property:height;transition-duration:var(--_view-switcher-animation-duration);transition-timing-function:var(--_view-switcher-animation-easing)}.forge-view-switcher ::slotted(.forge-view-switcher__view--hidden){position:absolute;top:0;right:0;bottom:0;left:0}:host(.slide) ::slotted(forge-view){transition-property:transform;transition-duration:var(--_view-switcher-animation-duration);transition-timing-function:var(--_view-switcher-animation-easing);will-change:transform}:host(.fade) ::slotted(forge-view){transition-property:opacity;transition-duration:var(--_view-switcher-animation-duration);transition-timing-function:var(--_view-switcher-animation-easing);will-change:opacity}:host(.fade) ::slotted(.forge-view-switcher__view--hidden){opacity:0}';
15
15
  /**
16
16
  * @tag forge-view-switcher
17
17
  *
18
18
  * @dependency forge-view
19
+ *
20
+ * @cssproperty --forge-view-switcher-height - The `height` of the view switcher.
21
+ * @cssproperty --forge-view-switcher-width - The `width` of the view switcher.
22
+ * @cssproperty --forge-view-switcher-animation-duration - The duration of view switching animations.
23
+ * @cssproperty --forge-view-switcher-animation-easing - The timing function of view switching animations.
19
24
  */
20
25
  let ViewSwitcherComponent = class ViewSwitcherComponent extends BaseComponent {
21
26
  static get observedAttributes() {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tylertech/forge",
3
3
  "description": "Tyler Forge™ Web Components library",
4
- "version": "3.9.0-dev.1",
4
+ "version": "3.9.0-dev.3",
5
5
  "author": "Tyler Technologies, Inc.",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
@@ -3,14 +3,20 @@
3
3
  * Copyright Tyler Technologies, Inc.
4
4
  * License: Apache-2.0
5
5
  */
6
- @use './core';
6
+ @use './core' as *;
7
7
 
8
8
  //
9
9
  // Host
10
10
  //
11
11
 
12
+ $host-tokens: (height, width);
13
+
14
+ :host {
15
+ @include host;
16
+ }
17
+
12
18
  :host {
13
- @include core.host;
19
+ @include tokens($includes: $host-tokens);
14
20
  }
15
21
 
16
22
  :host([hidden]) {
@@ -22,14 +28,14 @@
22
28
  //
23
29
 
24
30
  .forge-view-switcher {
25
- @include core.tokens;
31
+ @include tokens($excludes: $host-tokens);
26
32
  }
27
33
 
28
34
  .forge-view-switcher {
29
- @include core.base;
35
+ @include base;
30
36
 
31
37
  ::slotted(.forge-view-switcher__view--hidden) {
32
- @include core.view-hidden;
38
+ @include view-hidden;
33
39
  }
34
40
  }
35
41
 
@@ -39,7 +45,7 @@
39
45
 
40
46
  :host(.slide) {
41
47
  ::slotted(forge-view) {
42
- @include core.view-slidable;
48
+ @include view-slidable;
43
49
  }
44
50
  }
45
51
 
@@ -49,7 +55,7 @@
49
55
 
50
56
  :host(.fade) {
51
57
  ::slotted(forge-view) {
52
- @include core.view-fadeable;
58
+ @include view-fadeable;
53
59
  }
54
60
 
55
61
  ::slotted(.forge-view-switcher__view--hidden) {