@tylertech/forge 3.8.2-dev.0 → 3.9.0-dev.1

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 (96) hide show
  1. package/custom-elements.json +9827 -9331
  2. package/dist/lib.js +27 -105
  3. package/dist/lib.js.map +4 -4
  4. package/dist/toolbar/forge-toolbar.css +1 -0
  5. package/dist/vscode.css-custom-data.json +950 -943
  6. package/dist/vscode.html-custom-data.json +819 -772
  7. package/esm/app-bar/help-button/app-bar-help-button.js +1 -1
  8. package/esm/app-bar/menu-button/app-bar-menu-button.js +1 -1
  9. package/esm/app-bar/notification-button/app-bar-notification-button.js +1 -1
  10. package/esm/app-bar/search/app-bar-search.js +1 -1
  11. package/esm/autocomplete/autocomplete.js +1 -1
  12. package/esm/banner/banner.js +1 -1
  13. package/esm/button/base/base-button-adapter.js +1 -1
  14. package/esm/button/base/base-button.js +1 -1
  15. package/esm/calendar/calendar.js +1 -1
  16. package/esm/chips/chip/chip.js +1 -1
  17. package/esm/color-picker/color-picker.js +1 -1
  18. package/esm/core/utils/dismissible-stack.d.ts +5 -1
  19. package/esm/core/utils/dismissible-stack.js +6 -0
  20. package/esm/data-table/body/body.d.ts +33 -0
  21. package/esm/data-table/body/body.js +42 -0
  22. package/esm/data-table/body/index.d.ts +6 -0
  23. package/esm/data-table/body/index.js +6 -0
  24. package/esm/data-table/cell/cell.d.ts +33 -0
  25. package/esm/data-table/cell/cell.js +42 -0
  26. package/esm/data-table/cell/index.d.ts +6 -0
  27. package/esm/data-table/cell/index.js +6 -0
  28. package/esm/data-table/column/column.d.ts +33 -0
  29. package/esm/data-table/column/column.js +42 -0
  30. package/esm/data-table/column/index.d.ts +6 -0
  31. package/esm/data-table/column/index.js +6 -0
  32. package/esm/data-table/footer/footer.d.ts +33 -0
  33. package/esm/data-table/footer/footer.js +42 -0
  34. package/esm/data-table/footer/index.d.ts +6 -0
  35. package/esm/data-table/footer/index.js +6 -0
  36. package/esm/data-table/head/head.d.ts +33 -0
  37. package/esm/data-table/head/head.js +42 -0
  38. package/esm/data-table/head/index.d.ts +6 -0
  39. package/esm/data-table/head/index.js +6 -0
  40. package/esm/data-table/index.d.ts +12 -0
  41. package/esm/data-table/index.js +12 -0
  42. package/esm/data-table/row/index.d.ts +6 -0
  43. package/esm/data-table/row/index.js +6 -0
  44. package/esm/data-table/row/row.d.ts +33 -0
  45. package/esm/data-table/row/row.js +42 -0
  46. package/esm/data-table/table/index.d.ts +6 -0
  47. package/esm/data-table/table/index.js +6 -0
  48. package/esm/data-table/table/table.d.ts +36 -0
  49. package/esm/data-table/table/table.js +40 -0
  50. package/esm/date-picker/date-picker.js +1 -1
  51. package/esm/date-range-picker/date-range-picker.js +1 -1
  52. package/esm/icon/icon-constants.d.ts +2 -1
  53. package/esm/icon/icon-constants.js +2 -1
  54. package/esm/icon/icon-core.js +6 -2
  55. package/esm/icon/icon-utils.d.ts +2 -1
  56. package/esm/icon/icon-utils.js +2 -2
  57. package/esm/icon/icon.d.ts +3 -1
  58. package/esm/icon/icon.js +1 -1
  59. package/esm/icon-button/icon-button-core.js +11 -2
  60. package/esm/list-dropdown/list-dropdown-utils.js +1 -1
  61. package/esm/list-dropdown/list-dropdown.js +1 -1
  62. package/esm/menu/menu.js +1 -1
  63. package/esm/open-icon/open-icon.js +1 -1
  64. package/esm/paginator/paginator.js +1 -1
  65. package/esm/popover/popover-constants.d.ts +3 -0
  66. package/esm/popover/popover-constants.js +4 -2
  67. package/esm/popover/popover-core.d.ts +4 -0
  68. package/esm/popover/popover-core.js +20 -0
  69. package/esm/popover/popover.d.ts +4 -0
  70. package/esm/popover/popover.js +8 -0
  71. package/esm/select/select/select.js +1 -1
  72. package/esm/split-view/split-view-panel/split-view-panel.js +3 -4
  73. package/esm/stepper/step/step.js +1 -1
  74. package/esm/table/table-core.js +1 -0
  75. package/esm/table/table.js +1 -1
  76. package/esm/tabs/tab-bar/tab-bar-adapter.js +1 -1
  77. package/esm/tabs/tab-bar/tab-bar-core.d.ts +1 -0
  78. package/esm/tabs/tab-bar/tab-bar-core.js +27 -30
  79. package/esm/tabs/tab-bar/tab-bar.js +1 -1
  80. package/esm/text-field/text-field.js +1 -1
  81. package/esm/time-picker/time-picker.js +1 -2
  82. package/esm/toast/toast.js +1 -1
  83. package/esm/toolbar/toolbar.js +1 -1
  84. package/package.json +2 -2
  85. package/sass/data-table/_core.scss +52 -0
  86. package/sass/data-table/_token-utils.scss +15 -0
  87. package/sass/data-table/body/body.scss +27 -0
  88. package/sass/data-table/cell/cell.scss +27 -0
  89. package/sass/data-table/column/column.scss +27 -0
  90. package/sass/data-table/footer/footer.scss +27 -0
  91. package/sass/data-table/head/head.scss +27 -0
  92. package/sass/data-table/index.scss +12 -0
  93. package/sass/data-table/row/row.scss +27 -0
  94. package/sass/data-table/table/table.scss +16 -0
  95. package/sass/toolbar/_core.scss +5 -0
  96. package/sass/toolbar/toolbar.scss +4 -0
@@ -4,7 +4,7 @@
4
4
  * License: Apache-2.0
5
5
  */
6
6
  import { getShadowElement, toggleAttribute } from '@tylertech/forge-core';
7
- import { tylIconKeyboardArrowLeft, tylIconKeyboardArrowRight, tylIconKeyboardArrowUp, tylIconKeyboardArrowDown } from '@tylertech/tyler-icons/standard';
7
+ import { tylIconKeyboardArrowLeft, tylIconKeyboardArrowRight, tylIconKeyboardArrowUp, tylIconKeyboardArrowDown } from '@tylertech/tyler-icons';
8
8
  import { BaseAdapter } from '../../core/base/base-adapter';
9
9
  import { TAB_CONSTANTS } from '../tab/tab-constants';
10
10
  import { TAB_BAR_CONSTANTS } from './tab-bar-constants';
@@ -29,6 +29,7 @@ export declare class TabBarCore implements ITabBarCore {
29
29
  private _inverted;
30
30
  private _autoActivate;
31
31
  private _scrollButtons;
32
+ private _tabs;
32
33
  private _scrollButtonsVisible;
33
34
  private _tabScrollAnimationFrame;
34
35
  private _tabsChangedListener;
@@ -18,6 +18,7 @@ export class TabBarCore {
18
18
  this._inverted = false;
19
19
  this._autoActivate = false;
20
20
  this._scrollButtons = false;
21
+ this._tabs = [];
21
22
  this._scrollButtonsVisible = false;
22
23
  this._tabsChangedListener = () => this._onTabsChanged();
23
24
  this._tabSelectedListener = (evt) => this._onTabSelected(evt);
@@ -37,7 +38,7 @@ export class TabBarCore {
37
38
  this._adapter.initializeScrollObserver(this._scrollListener);
38
39
  this._updateScrollState();
39
40
  }
40
- this._syncTabState();
41
+ this._tryScrollActiveTabIntoView();
41
42
  this._isInitialized = true;
42
43
  }
43
44
  destroy() {
@@ -46,6 +47,7 @@ export class TabBarCore {
46
47
  this._isInitialized = false;
47
48
  }
48
49
  async _onTabsChanged() {
50
+ this._tabs = this._adapter.getTabs();
49
51
  this._syncTabState();
50
52
  if (this._scrollButtons) {
51
53
  this._detectScrollableStatus();
@@ -63,25 +65,24 @@ export class TabBarCore {
63
65
  }
64
66
  evt.preventDefault();
65
67
  let index = -1;
66
- const tabs = this._adapter.getTabs();
67
68
  if (evt.key === 'Home') {
68
69
  // Locate the first non-disabled tab
69
- index = tabs.findIndex(tab => !tab.disabled);
70
+ index = this._tabs.findIndex(tab => !tab.disabled);
70
71
  }
71
72
  else if (evt.key === 'End') {
72
73
  // Locate the last non-disabled tab
73
- index = tabs.reduceRight((acc, tab, i) => (!tab.disabled && acc === -1 ? i : acc), -1);
74
+ index = this._tabs.reduceRight((acc, tab, i) => (!tab.disabled && acc === -1 ? i : acc), -1);
74
75
  }
75
76
  else {
76
77
  // Locate the next or previous tab based on the key that was pressed
77
- const currentIndex = tabs.findIndex(tab => tab.matches(':focus'));
78
+ const currentIndex = this._tabs.findIndex(tab => tab.matches(':focus'));
78
79
  const isPrevKey = evt.key === 'ArrowLeft' || evt.key === 'ArrowUp';
79
80
  const calcIndex = (startIndex) => {
80
81
  index = startIndex + (isPrevKey ? -1 : 1);
81
- index = index < 0 ? tabs.length - 1 : index % tabs.length;
82
+ index = index < 0 ? this._tabs.length - 1 : index % this._tabs.length;
82
83
  // Try to recurse until we find a non-disabled tab (unless all tabs are disabled already)
83
- const isAllTabsDisabled = tabs.every(tab => tab.disabled);
84
- if (!isAllTabsDisabled && tabs[index]?.disabled) {
84
+ const isAllTabsDisabled = this._tabs.every(tab => tab.disabled);
85
+ if (!isAllTabsDisabled && this._tabs[index]?.disabled) {
85
86
  calcIndex(index);
86
87
  }
87
88
  };
@@ -91,24 +92,23 @@ export class TabBarCore {
91
92
  return;
92
93
  }
93
94
  if (this._autoActivate) {
94
- this._selectTab({ tab: tabs[index], focusTab: true });
95
+ this._selectTab({ tab: this._tabs[index], focusTab: true });
95
96
  }
96
97
  else {
97
- tabs[index].focus({ preventScroll: true, focusVisible: true });
98
- await this._adapter.tryScrollTabIntoView(tabs[index]);
98
+ this._tabs[index].focus({ preventScroll: true, focusVisible: true });
99
+ await this._adapter.tryScrollTabIntoView(this._tabs[index]);
99
100
  }
100
101
  }
101
102
  async _selectTab({ tab, emitEvent = true, focusTab = false }) {
102
103
  if (!tab || tab.disabled) {
103
104
  return;
104
105
  }
105
- const tabs = this._adapter.getTabs();
106
- const currentSelectedTab = tabs.find(t => t.selected);
106
+ const currentSelectedTab = this._tabs.find(t => t.selected);
107
107
  if (currentSelectedTab === tab) {
108
108
  return;
109
109
  }
110
110
  if (emitEvent) {
111
- const index = tabs.indexOf(tab);
111
+ const index = this._tabs.indexOf(tab);
112
112
  const event = new CustomEvent(TAB_BAR_CONSTANTS.events.CHANGE, {
113
113
  detail: { index },
114
114
  bubbles: true,
@@ -132,7 +132,7 @@ export class TabBarCore {
132
132
  if (currentSelectedTab) {
133
133
  currentSelectedTab.selected = false;
134
134
  }
135
- this._activeTab = tabs.indexOf(tab);
135
+ this._activeTab = this._tabs.indexOf(tab);
136
136
  }
137
137
  /**
138
138
  * Ensures that all tabs have the correct state based on the tab bar state.
@@ -140,14 +140,13 @@ export class TabBarCore {
140
140
  * This is called whenever a child tab is added to the DOM.
141
141
  */
142
142
  _syncTabState() {
143
- const tabs = this._adapter.getTabs();
144
- tabs.forEach((tab, index) => {
143
+ this._tabs.forEach((tab, index) => {
145
144
  tab.selected = index === this._activeTab;
146
- if (this._disabled) {
145
+ if (this._disabled)
147
146
  tab.disabled = this._disabled;
148
- }
149
147
  tab.vertical = this._vertical;
150
148
  tab.stacked = this._stacked;
149
+ tab.secondary = this._secondary;
151
150
  tab.inverted = this._inverted;
152
151
  });
153
152
  }
@@ -200,11 +199,10 @@ export class TabBarCore {
200
199
  }
201
200
  // We batch the tab scrolling into a single animation frame to unnecessarily scrolling for each tab
202
201
  this._tabScrollAnimationFrame = window.requestAnimationFrame(() => {
203
- const tabs = this._adapter.getTabs();
204
202
  this._tabScrollAnimationFrame = undefined;
205
203
  if (this._adapter.isScrollable()) {
206
- if (typeof this._activeTab === 'number' && this._activeTab >= 0 && tabs[this._activeTab]) {
207
- this._adapter.tryScrollTabIntoView(tabs[this._activeTab]);
204
+ if (typeof this._activeTab === 'number' && this._activeTab >= 0 && this._tabs[this._activeTab]) {
205
+ this._adapter.tryScrollTabIntoView(this._tabs[this._activeTab]);
208
206
  }
209
207
  }
210
208
  });
@@ -216,7 +214,7 @@ export class TabBarCore {
216
214
  value = Boolean(value);
217
215
  if (this._disabled !== value) {
218
216
  this._disabled = value;
219
- this._adapter.getTabs().forEach(tab => (tab.disabled = this._disabled));
217
+ this._tabs.forEach(tab => (tab.disabled = this._disabled));
220
218
  this._adapter.toggleHostAttribute(TAB_BAR_CONSTANTS.attributes.DISABLED, this._disabled);
221
219
  }
222
220
  }
@@ -226,14 +224,13 @@ export class TabBarCore {
226
224
  set activeTab(value) {
227
225
  if (this._activeTab !== value) {
228
226
  this._activeTab = value ?? undefined;
229
- const tabs = this._adapter.getTabs();
230
227
  if (typeof this._activeTab === 'number') {
231
- const newSelectedTab = tabs[this._activeTab];
228
+ const newSelectedTab = this._tabs[this._activeTab];
232
229
  this._selectTab({ tab: newSelectedTab, emitEvent: false, focusTab: false });
233
230
  this._adapter.setHostAttribute(TAB_BAR_CONSTANTS.attributes.ACTIVE_TAB, String(this._activeTab));
234
231
  }
235
232
  else {
236
- tabs.forEach(tab => (tab.selected = false));
233
+ this._tabs.forEach(tab => (tab.selected = false));
237
234
  this._adapter.removeHostAttribute(TAB_BAR_CONSTANTS.attributes.ACTIVE_TAB);
238
235
  }
239
236
  }
@@ -248,7 +245,7 @@ export class TabBarCore {
248
245
  if (this._isInitialized) {
249
246
  this._adapter.setVertical(this._vertical);
250
247
  }
251
- this._adapter.getTabs().forEach(tab => (tab.vertical = this._vertical));
248
+ this._tabs.forEach(tab => (tab.vertical = this._vertical));
252
249
  if (this._scrollButtonsVisible) {
253
250
  this._adapter.updateScrollButtonIcons(this._vertical);
254
251
  }
@@ -272,7 +269,7 @@ export class TabBarCore {
272
269
  value = Boolean(value);
273
270
  if (this._stacked !== value) {
274
271
  this._stacked = value;
275
- this._adapter.getTabs().forEach(tab => (tab.stacked = this._stacked));
272
+ this._tabs.forEach(tab => (tab.stacked = this._stacked));
276
273
  this._adapter.toggleHostAttribute(TAB_BAR_CONSTANTS.attributes.STACKED, this._stacked);
277
274
  }
278
275
  }
@@ -283,7 +280,7 @@ export class TabBarCore {
283
280
  value = Boolean(value);
284
281
  if (this._secondary !== value) {
285
282
  this._secondary = value;
286
- this._adapter.getTabs().forEach(tab => (tab.secondary = this._secondary));
283
+ this._tabs.forEach(tab => (tab.secondary = this._secondary));
287
284
  this._adapter.toggleHostAttribute(TAB_BAR_CONSTANTS.attributes.SECONDARY, this._secondary);
288
285
  }
289
286
  }
@@ -294,7 +291,7 @@ export class TabBarCore {
294
291
  value = Boolean(value);
295
292
  if (this._inverted !== value) {
296
293
  this._inverted = value;
297
- this._adapter.getTabs().forEach(tab => (tab.inverted = this._inverted));
294
+ this._tabs.forEach(tab => (tab.inverted = this._inverted));
298
295
  this._adapter.toggleHostAttribute(TAB_BAR_CONSTANTS.attributes.INVERTED, this._inverted);
299
296
  }
300
297
  }
@@ -12,7 +12,7 @@ import { TabComponent } from '../tab/tab';
12
12
  import { TabBarAdapter } from './tab-bar-adapter';
13
13
  import { TAB_BAR_CONSTANTS } from './tab-bar-constants';
14
14
  import { TabBarCore } from './tab-bar-core';
15
- import { tylIconKeyboardArrowLeft, tylIconKeyboardArrowRight, tylIconKeyboardArrowUp, tylIconKeyboardArrowDown } from '@tylertech/tyler-icons/standard';
15
+ import { tylIconKeyboardArrowLeft, tylIconKeyboardArrowRight, tylIconKeyboardArrowUp, tylIconKeyboardArrowDown } from '@tylertech/tyler-icons';
16
16
  import { WithElementInternals } from '../../core/mixins/internals/with-element-internals';
17
17
  import { WithDefaultAria } from '../../core/mixins/internals/with-default-aria';
18
18
  import { setDefaultAria } from '../../constants';
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { __decorate } from "tslib";
7
7
  import { attachShadowTemplate, coerceBoolean, customElement, coreProperty } from '@tylertech/forge-core';
8
- import { tylIconClear } from '@tylertech/tyler-icons/standard';
8
+ import { tylIconClear } from '@tylertech/tyler-icons';
9
9
  import { BASE_FIELD_CONSTANTS, FieldComponent } from '../field';
10
10
  import { BaseField } from '../field/base/base-field';
11
11
  import { IconRegistry } from '../icon';
@@ -5,8 +5,7 @@
5
5
  */
6
6
  import { __decorate } from "tslib";
7
7
  import { customElement, attachShadowTemplate, coreProperty, coerceBoolean, coerceNumber, ensureChild } from '@tylertech/forge-core';
8
- import { tylIconClockOutline } from '@tylertech/tyler-icons/extended';
9
- import { tylIconClose } from '@tylertech/tyler-icons/standard';
8
+ import { tylIconClockOutline, tylIconClose } from '@tylertech/tyler-icons';
10
9
  import { TimePickerAdapter } from './time-picker-adapter';
11
10
  import { TimePickerCore } from './time-picker-core';
12
11
  import { TIME_PICKER_CONSTANTS } from './time-picker-constants';
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { __decorate } from "tslib";
7
7
  import { attachShadowTemplate, coerceBoolean, customElement, coreProperty } from '@tylertech/forge-core';
8
- import { tylIconClose } from '@tylertech/tyler-icons/standard';
8
+ import { tylIconClose } from '@tylertech/tyler-icons';
9
9
  import { ButtonComponent } from '../button';
10
10
  import { setDefaultAria } from '../constants';
11
11
  import { BaseComponent } from '../core/base/base-component';
@@ -8,7 +8,7 @@ import { customElement, attachShadowTemplate, coerceBoolean } from '@tylertech/f
8
8
  import { BaseComponent } from '../core/base/base-component';
9
9
  import { TOOLBAR_CONSTANTS } from './toolbar-constants';
10
10
  const template = '<template><div class=\"forge-toolbar\" part=\"root\"><div class=\"section\" part=\"before-section-start\"><slot name=\"before-start\"></slot></div><div class=\"inner center\" part=\"inner\"><div class=\"section\" part=\"section-start\"><slot name=\"start\"></slot><slot></slot></div><div class=\"section center\" part=\"section-center\"><slot name=\"center\"></slot></div><div class=\"section end\" part=\"section-end\"><slot name=\"end\"></slot></div></div><div class=\"section end\" part=\"after-section-end\"><slot name=\"after-end\"></slot></div></div></template>';
11
- const styles = ':host{display:block}:host([hidden]){display:none}.forge-toolbar{--_toolbar-background:var(--forge-toolbar-background, var(--forge-theme-surface, #ffffff));--_toolbar-height:var(--forge-toolbar-height, 56px);--_toolbar-min-height:var(--forge-toolbar-min-height, var(--_toolbar-height));--_toolbar-divider-width:var(--forge-toolbar-divider-width, var(--forge-border-thin, 1px));--_toolbar-divider-style:var(--forge-toolbar-divider-style, solid);--_toolbar-divider-color:var(--forge-toolbar-divider-color, var(--forge-theme-outline, #e0e0e0));--_toolbar-shape:var(--forge-toolbar-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));--_toolbar-start-start-shape:var(--forge-toolbar-start-start-shape, var(--_toolbar-shape));--_toolbar-start-end-shape:var(--forge-toolbar-start-end-shape, var(--_toolbar-shape));--_toolbar-end-start-shape:var(--forge-toolbar-end-start-shape, 0);--_toolbar-end-end-shape:var(--forge-toolbar-end-end-shape, 0);--_toolbar-padding:var(--forge-toolbar-padding, var(--forge-spacing-medium, 16px));--_toolbar-padding-block:var(--forge-toolbar-padding-block, 0);--_toolbar-padding-inline:var(--forge-toolbar-padding-inline, var(--_toolbar-padding));--_toolbar-columns:var(--forge-toolbar-columns, auto 1fr auto)}.forge-toolbar{display:grid;grid-template-columns:var(--_toolbar-columns);height:var(--_toolbar-height);min-height:var(--_toolbar-min-height);box-sizing:border-box;padding-inline:0;border-block-end-width:var(--_toolbar-divider-width);border-block-end-style:var(--_toolbar-divider-style);border-block-end-color:var(--_toolbar-divider-color);border-start-start-radius:var(--_toolbar-start-start-shape);border-start-end-radius:var(--_toolbar-start-end-shape);border-end-start-radius:var(--_toolbar-end-start-shape);border-end-end-radius:var(--_toolbar-end-end-shape);background:var(--_toolbar-background)}.inner{display:grid;grid-template-columns:var(--_toolbar-columns);padding-inline:var(--_toolbar-padding-inline);padding-block:var(--_toolbar-padding-block);box-sizing:border-box}.section{display:flex;align-items:center;width:100%;box-sizing:border-box}.section.center{justify-content:center}.section.end{justify-content:end}:host([inverted]) .forge-toolbar{--_toolbar-start-start-shape:var(--forge-toolbar-start-start-shape, 0);--_toolbar-start-end-shape:var(--forge-toolbar-start-end-shape, 0);--_toolbar-end-start-shape:var(--_toolbar-shape);--_toolbar-end-end-shape:var(--_toolbar-shape);border-block-end:none;border-block-start-width:var(--_toolbar-divider-width);border-block-start-style:var(--_toolbar-divider-style);border-block-start-color:var(--_toolbar-divider-color)}:host(:is([no-divider],[no-border])) .forge-toolbar{border:none}:host([no-padding]) .forge-toolbar{--_toolbar-padding:var(--forge-toolbar-padding, 0)}:host([auto-height]) .forge-toolbar{--_toolbar-height:var(--forge-toolbar-height, auto)}::slotted(:is(h1,h2,h3,h4,h5,h6,p)){margin:0}';
11
+ const styles = ':host{display:block}:host([hidden]){display:none}.forge-toolbar{--_toolbar-background:var(--forge-toolbar-background, var(--forge-theme-surface, #ffffff));--_toolbar-height:var(--forge-toolbar-height, 56px);--_toolbar-min-height:var(--forge-toolbar-min-height, var(--_toolbar-height));--_toolbar-divider-width:var(--forge-toolbar-divider-width, var(--forge-border-thin, 1px));--_toolbar-divider-style:var(--forge-toolbar-divider-style, solid);--_toolbar-divider-color:var(--forge-toolbar-divider-color, var(--forge-theme-outline, #e0e0e0));--_toolbar-shape:var(--forge-toolbar-shape, calc(var(--forge-shape-medium, 4px) * var(--forge-shape-factor, 1)));--_toolbar-start-start-shape:var(--forge-toolbar-start-start-shape, var(--_toolbar-shape));--_toolbar-start-end-shape:var(--forge-toolbar-start-end-shape, var(--_toolbar-shape));--_toolbar-end-start-shape:var(--forge-toolbar-end-start-shape, 0);--_toolbar-end-end-shape:var(--forge-toolbar-end-end-shape, 0);--_toolbar-padding:var(--forge-toolbar-padding, var(--forge-spacing-medium, 16px));--_toolbar-padding-block:var(--forge-toolbar-padding-block, 0);--_toolbar-padding-inline:var(--forge-toolbar-padding-inline, var(--_toolbar-padding));--_toolbar-columns:var(--forge-toolbar-columns, auto 1fr auto)}.forge-toolbar{display:grid;grid-template-columns:var(--_toolbar-columns);height:var(--_toolbar-height);min-height:var(--_toolbar-min-height);box-sizing:border-box;padding-inline:0;border-block-end-width:var(--_toolbar-divider-width);border-block-end-style:var(--_toolbar-divider-style);border-block-end-color:var(--_toolbar-divider-color);border-start-start-radius:var(--_toolbar-start-start-shape);border-start-end-radius:var(--_toolbar-start-end-shape);border-end-start-radius:var(--_toolbar-end-start-shape);border-end-end-radius:var(--_toolbar-end-end-shape);background:var(--_toolbar-background)}.inner{display:grid;grid-template-columns:var(--_toolbar-columns);padding-inline:var(--_toolbar-padding-inline);padding-block:var(--_toolbar-padding-block);box-sizing:border-box}.inner.center{min-width:0}.section{display:flex;align-items:center;width:100%;box-sizing:border-box}.section.center{justify-content:center;min-width:0}.section.end{justify-content:end}:host([inverted]) .forge-toolbar{--_toolbar-start-start-shape:var(--forge-toolbar-start-start-shape, 0);--_toolbar-start-end-shape:var(--forge-toolbar-start-end-shape, 0);--_toolbar-end-start-shape:var(--_toolbar-shape);--_toolbar-end-end-shape:var(--_toolbar-shape);border-block-end:none;border-block-start-width:var(--_toolbar-divider-width);border-block-start-style:var(--_toolbar-divider-style);border-block-start-color:var(--_toolbar-divider-color)}:host(:is([no-divider],[no-border])) .forge-toolbar{border:none}:host([no-padding]) .forge-toolbar{--_toolbar-padding:var(--forge-toolbar-padding, 0)}:host([auto-height]) .forge-toolbar{--_toolbar-height:var(--forge-toolbar-height, auto)}::slotted(:is(h1,h2,h3,h4,h5,h6,p)){margin:0}';
12
12
  /**
13
13
  * @tag forge-toolbar
14
14
  *
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.8.2-dev.0",
4
+ "version": "3.9.0-dev.1",
5
5
  "author": "Tyler Technologies, Inc.",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
@@ -15,7 +15,7 @@
15
15
  "dependencies": {
16
16
  "@floating-ui/dom": "^1.6.13",
17
17
  "@tylertech/forge-core": "^3.1.0",
18
- "@tylertech/tyler-icons": "^1.12.0",
18
+ "@tylertech/tyler-icons": "^2.0.1",
19
19
  "imask": "^7.6.1",
20
20
  "lit": "^3.2.1",
21
21
  "tslib": "^2.8.1"
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @license
3
+ * Copyright Tyler Technologies, Inc.
4
+ * License: Apache-2.0
5
+ */
6
+ @use '../core/styles/typography';
7
+ @use './token-utils' as *;
8
+
9
+ @forward './token-utils';
10
+
11
+ // Common mixins for data-table components
12
+ @mixin host() {
13
+ display: block;
14
+ }
15
+
16
+ // Base data-table styles
17
+ @mixin base-table() {
18
+ display: table;
19
+ width: 100%;
20
+ border-collapse: collapse;
21
+ }
22
+
23
+ // Base column styles
24
+ @mixin base-column() {
25
+ display: table-column;
26
+ }
27
+
28
+ // Base cell styles
29
+ @mixin base-cell() {
30
+ display: table-cell;
31
+ padding: 0.5rem;
32
+ }
33
+
34
+ // Base row styles
35
+ @mixin base-row() {
36
+ display: table-row;
37
+ }
38
+
39
+ // Base header styles
40
+ @mixin base-head() {
41
+ display: table-header-group;
42
+ }
43
+
44
+ // Base body styles
45
+ @mixin base-body() {
46
+ display: table-row-group;
47
+ }
48
+
49
+ // Base footer styles
50
+ @mixin base-footer() {
51
+ display: table-footer-group;
52
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @license
3
+ * Copyright Tyler Technologies, Inc.
4
+ * License: Apache-2.0
5
+ */
6
+ @use '../core/styles/tokens';
7
+
8
+ // Add your data-table token variables here
9
+ @mixin tokens {
10
+ // Common tokens
11
+ }
12
+
13
+ @function token($name) {
14
+ @return var(--forge-data-table-#{$name});
15
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright Tyler Technologies, Inc.
4
+ * License: Apache-2.0
5
+ */
6
+ @use '../core' as *;
7
+
8
+ //
9
+ // Host
10
+ //
11
+
12
+ :host {
13
+ @include host;
14
+ }
15
+
16
+ :host([hidden]) {
17
+ display: none;
18
+ }
19
+
20
+ //
21
+ // Base
22
+ //
23
+
24
+ .forge-data-table-body {
25
+ @include tokens;
26
+ @include base-body;
27
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright Tyler Technologies, Inc.
4
+ * License: Apache-2.0
5
+ */
6
+ @use '../core' as *;
7
+
8
+ //
9
+ // Host
10
+ //
11
+
12
+ :host {
13
+ @include host;
14
+ }
15
+
16
+ :host([hidden]) {
17
+ display: none;
18
+ }
19
+
20
+ //
21
+ // Base
22
+ //
23
+
24
+ .forge-data-table-cell {
25
+ @include tokens;
26
+ @include base-cell;
27
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright Tyler Technologies, Inc.
4
+ * License: Apache-2.0
5
+ */
6
+ @use '../core' as *;
7
+
8
+ //
9
+ // Host
10
+ //
11
+
12
+ :host {
13
+ @include host;
14
+ }
15
+
16
+ :host([hidden]) {
17
+ display: none;
18
+ }
19
+
20
+ //
21
+ // Base
22
+ //
23
+
24
+ .forge-data-table-column {
25
+ @include tokens;
26
+ @include base-column;
27
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright Tyler Technologies, Inc.
4
+ * License: Apache-2.0
5
+ */
6
+ @use '../core' as *;
7
+
8
+ //
9
+ // Host
10
+ //
11
+
12
+ :host {
13
+ @include host;
14
+ }
15
+
16
+ :host([hidden]) {
17
+ display: none;
18
+ }
19
+
20
+ //
21
+ // Base
22
+ //
23
+
24
+ .forge-data-table-footer {
25
+ @include tokens;
26
+ @include base-footer;
27
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright Tyler Technologies, Inc.
4
+ * License: Apache-2.0
5
+ */
6
+ @use '../core' as *;
7
+
8
+ //
9
+ // Host
10
+ //
11
+
12
+ :host {
13
+ @include host;
14
+ }
15
+
16
+ :host([hidden]) {
17
+ display: none;
18
+ }
19
+
20
+ //
21
+ // Base
22
+ //
23
+
24
+ .forge-data-table-head {
25
+ @include tokens;
26
+ @include base-head;
27
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @license
3
+ * Copyright Tyler Technologies, Inc.
4
+ * License: Apache-2.0
5
+ */
6
+ @forward './table/table';
7
+ @forward './column/column';
8
+ @forward './cell/cell';
9
+ @forward './row/row';
10
+ @forward './head/head';
11
+ @forward './body/body';
12
+ @forward './footer/footer';
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright Tyler Technologies, Inc.
4
+ * License: Apache-2.0
5
+ */
6
+ @use '../core' as *;
7
+
8
+ //
9
+ // Host
10
+ //
11
+
12
+ :host {
13
+ @include host;
14
+ }
15
+
16
+ :host([hidden]) {
17
+ display: none;
18
+ }
19
+
20
+ //
21
+ // Base
22
+ //
23
+
24
+ .forge-data-table-row {
25
+ @include tokens;
26
+ @include base-row;
27
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright Tyler Technologies, Inc.
4
+ * License: Apache-2.0
5
+ */
6
+ @use '../core' as *;
7
+
8
+ :host {
9
+ @include host;
10
+ @include tokens;
11
+ @include base-table;
12
+ }
13
+
14
+ :host([hidden]) {
15
+ display: none;
16
+ }
@@ -44,6 +44,10 @@
44
44
  box-sizing: border-box;
45
45
  }
46
46
 
47
+ @mixin inner-center {
48
+ min-width: 0;
49
+ }
50
+
47
51
  @mixin section {
48
52
  display: flex;
49
53
  align-items: center;
@@ -53,6 +57,7 @@
53
57
 
54
58
  @mixin center {
55
59
  justify-content: center;
60
+ min-width: 0;
56
61
  }
57
62
 
58
63
  @mixin end {
@@ -31,6 +31,10 @@
31
31
 
32
32
  .inner {
33
33
  @include inner;
34
+
35
+ &.center {
36
+ @include inner-center;
37
+ }
34
38
  }
35
39
 
36
40
  .section {