@tylertech/forge 3.8.0-dev.2 → 3.8.0-dev.4

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 (80) hide show
  1. package/custom-elements.json +1725 -928
  2. package/dist/app-bar/forge-app-bar.css +20 -3
  3. package/dist/forge.css +2 -2
  4. package/dist/lib.js +20 -20
  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 +94 -84
  8. package/dist/vscode.html-custom-data.json +190 -65
  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.js +1 -1
  19. package/esm/app-bar/search/app-bar-search.js +1 -1
  20. package/esm/autocomplete/autocomplete-core.js +5 -0
  21. package/esm/avatar/avatar.d.ts +7 -4
  22. package/esm/avatar/avatar.js +10 -6
  23. package/esm/badge/badge.d.ts +7 -3
  24. package/esm/badge/badge.js +9 -4
  25. package/esm/button/button-constants.d.ts +1 -1
  26. package/esm/button/button.js +1 -1
  27. package/esm/card/card.d.ts +7 -3
  28. package/esm/card/card.js +8 -3
  29. package/esm/core/base/base-lit-element.d.ts +9 -0
  30. package/esm/core/base/base-lit-element.js +12 -0
  31. package/esm/core/utils/lit-utils.d.ts +11 -0
  32. package/esm/core/utils/lit-utils.js +31 -0
  33. package/esm/dialog/dialog-adapter.d.ts +0 -1
  34. package/esm/dialog/dialog-adapter.js +4 -39
  35. package/esm/dialog/dialog-constants.d.ts +6 -2
  36. package/esm/dialog/dialog-constants.js +4 -4
  37. package/esm/dialog/dialog-core.d.ts +3 -3
  38. package/esm/dialog/dialog-core.js +8 -7
  39. package/esm/dialog/dialog.d.ts +3 -3
  40. package/esm/dialog/dialog.js +3 -3
  41. package/esm/icon-button/icon-button-constants.d.ts +1 -1
  42. package/esm/icon-button/icon-button.js +1 -1
  43. package/esm/key/key/index.js +2 -2
  44. package/esm/key/key/key.d.ts +7 -2
  45. package/esm/key/key/key.js +10 -3
  46. package/esm/key/key-item/index.js +2 -2
  47. package/esm/key/key-item/key-item.d.ts +7 -2
  48. package/esm/key/key-item/key-item.js +10 -3
  49. package/esm/list-dropdown/list-dropdown-aware-core.d.ts +22 -0
  50. package/esm/list-dropdown/list-dropdown-aware-core.js +30 -0
  51. package/esm/list-dropdown/list-dropdown-aware.d.ts +35 -0
  52. package/esm/list-dropdown/list-dropdown-aware.js +35 -16
  53. package/esm/list-dropdown/list-dropdown-constants.d.ts +22 -3
  54. package/esm/list-dropdown/list-dropdown-constants.js +9 -1
  55. package/esm/list-dropdown/list-dropdown-utils.js +6 -0
  56. package/esm/menu/menu-core.js +2 -0
  57. package/esm/menu/menu.js +1 -0
  58. package/esm/meter/meter/meter.d.ts +7 -2
  59. package/esm/meter/meter/meter.js +10 -3
  60. package/esm/meter/meter-group/index.js +2 -2
  61. package/esm/meter/meter-group/meter-group.d.ts +7 -2
  62. package/esm/meter/meter-group/meter-group.js +10 -4
  63. package/esm/overlay/base/overlay-aware.d.ts +4 -4
  64. package/esm/overlay/base/overlay-aware.js +3 -3
  65. package/esm/select/core/base-select-core.js +5 -0
  66. package/esm/select/select/select.d.ts +25 -1
  67. package/esm/select/select/select.js +26 -1
  68. package/esm/split-view/split-view-panel/split-view-panel.js +1 -1
  69. package/esm/tabs/tab-bar/tab-bar.js +1 -1
  70. package/package.json +1 -1
  71. package/sass/app-bar/app-bar/_core.scss +0 -1
  72. package/sass/app-bar/app-bar/app-bar.scss +51 -7
  73. package/sass/app-bar/forge-app-bar.scss +41 -11
  74. package/sass/app-bar/search/app-bar-search.scss +3 -0
  75. package/sass/button/button.scss +24 -0
  76. package/sass/core/styles/scrollbar/index.scss +14 -0
  77. package/sass/core/styles/tokens/app-bar/app-bar/_tokens.scss +4 -1
  78. package/sass/icon-button/icon-button.scss +14 -0
  79. package/sass/table/_core.scss +1 -1
  80. package/sass/tabs/tab-bar/tab-bar.scss +24 -0
@@ -17,7 +17,7 @@ import { WithElementInternals } from '../../core/mixins/internals/with-element-i
17
17
  import { WithDefaultAria } from '../../core/mixins/internals/with-default-aria';
18
18
  import { setDefaultAria } from '../../constants';
19
19
  const template = '<template><div class=\"forge-tab-bar\" part=\"container\"><div class=\"scroll-container\" part=\"scroll-container\"><slot></slot></div></div></template>';
20
- const styles = ':host{position:relative;display:block}:host([hidden]){display:none}.forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, space-between);--_tab-bar-stretch:var(--forge-tab-bar-stretch, 1);--_tab-bar-divider-color:var(--forge-tab-bar-divider-color, var(--forge-theme-outline, #e0e0e0));--_tab-bar-divider-thickness:var(--forge-tab-bar-divider-thickness, 1px)}.forge-tab-bar{position:relative;display:grid;grid-template-columns:auto 1fr auto;max-width:100%;max-height:100%;align-items:center;border-bottom:var(--_tab-bar-divider-thickness) solid var(--_tab-bar-divider-color)}.scroll-container{position:relative;display:flex;justify-content:var(--_tab-bar-justify);align-items:flex-end;box-sizing:border-box;overflow:auto;scroll-behavior:smooth;scrollbar-width:none;grid-column:2}.scroll-container::-webkit-scrollbar{display:none}::slotted(*){flex:var(--_tab-bar-stretch);align-self:stretch}::slotted([selected]){z-index:1}forge-icon-button{--forge-icon-button-shape-squared:0px}:host([vertical]) .forge-tab-bar{grid-template-columns:none;grid-template-rows:auto 1fr auto;align-items:initial;border-bottom:none;border-right:var(--_tab-bar-divider-thickness) solid var(--_tab-bar-divider-color);height:100%}:host([vertical]) .scroll-container{display:inline-flex;flex-direction:column;align-items:stretch;gap:0;grid-column:auto;grid-row:2}:host([vertical]) .scroll-button{justify-self:center}:host([inverted]:not([vertical])) .forge-tab-bar{border-bottom:none;border-top:variale(divider-thickness) solid var(--_tab-bar-divider-color)}:host([inverted][vertical]) .forge-tab-bar{border-bottom:none;border-top:var(--_tab-bar-divider-thickness) solid var(--_tab-bar-divider-color)}:host([clustered]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, flex-start);--_tab-bar-stretch:var(--forge-tab-bar-stretch, 0)}:host([clustered=start]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, flex-start)}:host([clustered=center]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, center)}:host([clustered=end]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, flex-end)}';
20
+ const styles = ':host{position:relative;display:block}:host([hidden]){display:none}.forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, space-between);--_tab-bar-stretch:var(--forge-tab-bar-stretch, 1);--_tab-bar-divider-color:var(--forge-tab-bar-divider-color, var(--forge-theme-outline, #e0e0e0));--_tab-bar-divider-thickness:var(--forge-tab-bar-divider-thickness, 1px)}.forge-tab-bar{position:relative;display:grid;grid-template-columns:auto 1fr auto;max-width:100%;max-height:100%;align-items:center;border-bottom:var(--_tab-bar-divider-thickness) solid var(--_tab-bar-divider-color)}.scroll-container{position:relative;display:flex;justify-content:var(--_tab-bar-justify);align-items:flex-end;box-sizing:border-box;overflow:auto;scroll-behavior:smooth;scrollbar-width:none;grid-column:2}.scroll-container::-webkit-scrollbar{display:none}::slotted(*){flex:var(--_tab-bar-stretch);align-self:stretch}::slotted([selected]){z-index:1}forge-icon-button{--forge-icon-button-shape-squared:0px}:host([vertical]) .forge-tab-bar{grid-template-columns:none;grid-template-rows:auto 1fr auto;align-items:initial;border-bottom:none;border-right:var(--_tab-bar-divider-thickness) solid var(--_tab-bar-divider-color);height:100%}:host([vertical]) .scroll-container{display:inline-flex;flex-direction:column;align-items:stretch;gap:0;grid-column:auto;grid-row:2}:host([vertical]) .scroll-button{justify-self:center}:host([inverted]:not([vertical])) .forge-tab-bar{border-bottom:none;border-top:variale(divider-thickness) solid var(--_tab-bar-divider-color)}:host([inverted][vertical]) .forge-tab-bar{border-bottom:none;border-top:var(--_tab-bar-divider-thickness) solid var(--_tab-bar-divider-color)}:host([clustered]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, flex-start);--_tab-bar-stretch:var(--forge-tab-bar-stretch, 0)}:host([clustered=start]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, flex-start)}:host([clustered=center]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, center)}:host([clustered=end]) .forge-tab-bar{--_tab-bar-justify:var(--forge-tab-bar-justify, flex-end)}:host([theme=app-bar]){--forge-tab-active-color:var(--_app-bar-theme-foreground);--forge-tab-inactive-color:var(--_app-bar-theme-foreground-muted)}:host([theme=app-bar]) forge-icon-button{--forge-icon-button-icon-color:var(--_app-bar-theme-foreground)}';
21
21
  /**
22
22
  * @tag forge-tab-bar
23
23
  *
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.0-dev.2",
4
+ "version": "3.8.0-dev.4",
5
5
  "author": "Tyler Technologies, Inc.",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
@@ -93,7 +93,6 @@
93
93
  @mixin logo {
94
94
  font-size: #{token(logo-font-size)};
95
95
  height: 1em;
96
- width: 1em;
97
96
  }
98
97
 
99
98
  @mixin elevation-raised {
@@ -16,7 +16,7 @@
16
16
  // Host
17
17
  //
18
18
 
19
- $host-tokens: [background foreground];
19
+ $host-tokens: (background, foreground);
20
20
 
21
21
  :host {
22
22
  @include tokens($includes: $host-tokens);
@@ -34,7 +34,7 @@ $host-tokens: [background foreground];
34
34
  // Default theme
35
35
  //
36
36
 
37
- :host(:not([theme])) {
37
+ :host(:not([theme]):not([theme-mode='scoped'])) {
38
38
  @include theme.provide(
39
39
  (
40
40
  primary: #{token(foreground)},
@@ -49,6 +49,25 @@ $host-tokens: [background foreground];
49
49
  );
50
50
  }
51
51
 
52
+ :host([theme-mode='scoped']) {
53
+ .forge-app-bar {
54
+ color: inherit;
55
+
56
+ .logo-title-container {
57
+ color: #{token(foreground)};
58
+ }
59
+ }
60
+ }
61
+
62
+ :host {
63
+ @include provide-theme(
64
+ (
65
+ theme-foreground: #{token(foreground)},
66
+ theme-foreground-muted: rgba(white, color-emphasis.value(medium))
67
+ )
68
+ );
69
+ }
70
+
52
71
  //
53
72
  // Base
54
73
  //
@@ -123,6 +142,25 @@ $host-tokens: [background foreground];
123
142
  }
124
143
  }
125
144
 
145
+ //
146
+ // Slotted (scoped theme mode)
147
+ //
148
+ // Attempt to auto-theme any specific slotted elements directly
149
+ //
150
+
151
+ :host([theme-mode='scoped']) {
152
+ ::slotted(:where(forge-tab-bar, forge-icon-button, forge-button)) {
153
+ color: #{token(theme-foreground)};
154
+
155
+ @include tab.provide-theme(
156
+ (
157
+ active-color: #{token(theme-foreground)},
158
+ inactive-color: #{token(theme-foreground-muted)}
159
+ )
160
+ );
161
+ }
162
+ }
163
+
126
164
  //
127
165
  // Slotted - Tab bar
128
166
  //
@@ -156,6 +194,17 @@ $host-tokens: [background foreground];
156
194
  //
157
195
 
158
196
  :host([theme='white']) {
197
+ @include override(background, white, value);
198
+ @include override(foreground, black, value);
199
+
200
+ @include provide-theme(
201
+ (
202
+ theme-foreground-muted: rgba(black, color-emphasis.value(medium))
203
+ )
204
+ );
205
+ }
206
+
207
+ :host([theme='white']:not([theme-mode='scoped'])) {
159
208
  @include theme.provide(
160
209
  (
161
210
  primary: black,
@@ -163,9 +212,4 @@ $host-tokens: [background foreground];
163
212
  text-medium: rgba(black, color-emphasis.value(medium))
164
213
  )
165
214
  );
166
-
167
- .forge-app-bar {
168
- @include override(background, white, value);
169
- @include override(foreground, black, value);
170
- }
171
215
  }
@@ -15,18 +15,28 @@
15
15
 
16
16
  .forge-app-bar {
17
17
  @include core.tokens;
18
- @include theme.provide(
18
+
19
+ @include core.provide-theme(
19
20
  (
20
- primary: #{core.token(foreground)},
21
- on-primary: rgba(black, color-emphasis.value(highest)),
22
- text-high: rgba(white, color-emphasis.value(highest)),
23
- text-medium: rgba(white, color-emphasis.value(medium)),
24
- text-low: rgba(white, color-emphasis.value(medium-low)),
25
- outline-high: rgba(white, color-emphasis.value(highest)),
26
- outline-medium: rgba(white, color-emphasis.value(medium)),
27
- outline-low: rgba(white, color-emphasis.value(medium-low))
21
+ theme-foreground: #{core.token(foreground)},
22
+ theme-foreground-muted: rgba(white, color-emphasis.value(medium))
28
23
  )
29
24
  );
25
+
26
+ &:not(.forge-app-bar--scoped) {
27
+ @include theme.provide(
28
+ (
29
+ primary: #{core.token(foreground)},
30
+ on-primary: rgba(black, color-emphasis.value(highest)),
31
+ text-high: rgba(white, color-emphasis.value(highest)),
32
+ text-medium: rgba(white, color-emphasis.value(medium)),
33
+ text-low: rgba(white, color-emphasis.value(medium-low)),
34
+ outline-high: rgba(white, color-emphasis.value(highest)),
35
+ outline-medium: rgba(white, color-emphasis.value(medium)),
36
+ outline-low: rgba(white, color-emphasis.value(medium-low))
37
+ )
38
+ );
39
+ }
30
40
  }
31
41
 
32
42
  .forge-app-bar {
@@ -48,6 +58,16 @@
48
58
  grid-template-areas: 'start end';
49
59
  }
50
60
 
61
+ &--scoped {
62
+ color: inherit;
63
+
64
+ .forge-app-bar__logo,
65
+ .forge-app-bar__title h1,
66
+ .forge-app-bar__logo-title-container {
67
+ color: #{core.token(foreground)};
68
+ }
69
+ }
70
+
51
71
  &--raised {
52
72
  @include core.elevation-raised;
53
73
  }
@@ -79,7 +99,7 @@
79
99
  @include focus-indicator.standalone($type: inward);
80
100
  @include focus-indicator.provide-theme(
81
101
  (
82
- color: currentColor,
102
+ color: #{core.token(foreground)},
83
103
  offset-block: #{spacing.variable(xxsmall)},
84
104
  shape: #{shape.variable(medium)}
85
105
  )
@@ -96,7 +116,7 @@
96
116
  @include state-layer.standalone;
97
117
  @include state-layer.provide-theme(
98
118
  (
99
- color: currentColor
119
+ color: #{core.token(foreground)}
100
120
  )
101
121
  );
102
122
  }
@@ -143,4 +163,14 @@
143
163
  justify-content: end;
144
164
  }
145
165
  }
166
+
167
+ .forge-app-bar-theme {
168
+ color: #{core.token(theme-foreground)};
169
+
170
+ @include focus-indicator.provide-theme(
171
+ (
172
+ color: #{core.token(theme-foreground)}
173
+ )
174
+ );
175
+ }
146
176
  }
@@ -5,9 +5,12 @@
5
5
  */
6
6
  @use './core' as *;
7
7
  @use '../../focus-indicator';
8
+ @use '../app-bar';
8
9
 
9
10
  :host {
10
11
  @include host;
12
+
13
+ color: #{app-bar.token(theme-foreground)};
11
14
  }
12
15
 
13
16
  :host([hidden]) {
@@ -8,6 +8,7 @@
8
8
  @use '../state-layer';
9
9
  @use '../focus-indicator';
10
10
  @use '../circular-progress';
11
+ @use '../app-bar/app-bar';
11
12
  @use '../icon';
12
13
 
13
14
  //
@@ -132,6 +133,29 @@ forge-focus-indicator {
132
133
  @include theme(warning);
133
134
  @include theme(info);
134
135
 
136
+ //
137
+ // App bar theme
138
+ //
139
+
140
+ :host([theme='app-bar']) {
141
+ @include provide-theme(
142
+ (
143
+ text-color: #{app-bar.token(theme-foreground)},
144
+ outlined-color: #{app-bar.token(theme-foreground)},
145
+ outlined-border-color: #{app-bar.token(theme-foreground)},
146
+ link-color: #{app-bar.token(theme-foreground)}
147
+ )
148
+ );
149
+
150
+ forge-focus-indicator {
151
+ @include focus-indicator.provide-theme(
152
+ (
153
+ color: #{app-bar.token(theme-foreground)}
154
+ )
155
+ );
156
+ }
157
+ }
158
+
135
159
  //
136
160
  // Variants
137
161
  //
@@ -5,6 +5,20 @@
5
5
  */
6
6
  @use '../tokens/scrollbar/tokens';
7
7
 
8
+ ///
9
+ /// Gets a CSS custom property declaration for a specific scrollbar token with its token value as the fallback value.
10
+ ///
11
+ /// Example:
12
+ /// ```scss
13
+ /// .my-class {
14
+ /// width: #{scrollbar.variable(width)}; // => width: var(--forge-scrollbar-width, 16px);
15
+ /// }
16
+ /// ```
17
+ ///
18
+ @function variable($key) {
19
+ @return tokens.get($key);
20
+ }
21
+
8
22
  ///
9
23
  /// Provides scrollbar styles.
10
24
  ///
@@ -23,7 +23,10 @@ $tokens: (
23
23
  title-padding: utils.module-val(app-bar, title-padding, spacing.variable(xsmall)),
24
24
  columns: utils.module-val(app-bar, columns, 1fr 1fr 1fr),
25
25
  transition-duration: utils.module-val(app-bar, transition-duration, animation.variable(duration-short4)),
26
- transition-timing: utils.module-val(app-bar, transition-timing, animation.variable(easing-standard))
26
+ transition-timing: utils.module-val(app-bar, transition-timing, animation.variable(easing-standard)),
27
+ // Scoped theming tokens for app bar children to optionally inherit
28
+ theme-foreground: utils.module-ref(app-bar, theme-foreground, foreground),
29
+ theme-foreground-muted: utils.module-val(app-bar, theme-foreground-muted, rgba(white, theme.emphasis(medium)))
27
30
  ) !default;
28
31
 
29
32
  @function get($key) {
@@ -10,6 +10,7 @@
10
10
  @use '../focus-indicator';
11
11
  @use '../badge';
12
12
  @use '../circular-progress';
13
+ @use '../app-bar/app-bar';
13
14
 
14
15
  //
15
16
  // Host
@@ -377,3 +378,16 @@ forge-state-layer {
377
378
  @include theme(error);
378
379
  @include theme(warning);
379
380
  @include theme(info);
381
+
382
+ //
383
+ // App Bar Theme
384
+ //
385
+
386
+ :host([theme='app-bar']) {
387
+ @include provide-theme(
388
+ (
389
+ icon-color: #{app-bar.token(theme-foreground)},
390
+ focus-indicator-color: #{app-bar.token(theme-foreground)}
391
+ )
392
+ );
393
+ }
@@ -18,7 +18,7 @@
18
18
  // The base styles for the `<table>` element.
19
19
  @mixin base {
20
20
  width: 100%;
21
- border-collapse: collapse;
21
+ border-spacing: 0;
22
22
  }
23
23
 
24
24
  // The base styles for the rows of the table.
@@ -4,7 +4,10 @@
4
4
  * License: Apache-2.0
5
5
  */
6
6
  @use './core' as *;
7
+ @use '../../app-bar/app-bar';
7
8
  @use '../../icon-button';
9
+ @use '../tab';
10
+ @use '../../core/styles/theme';
8
11
 
9
12
  //
10
13
  // Host
@@ -112,3 +115,24 @@ forge-icon-button {
112
115
  @include override(justify, flex-end, value);
113
116
  }
114
117
  }
118
+
119
+ //
120
+ // App Bar Theme
121
+ //
122
+
123
+ :host([theme='app-bar']) {
124
+ @include tab.provide-theme(
125
+ (
126
+ active-color: #{app-bar.token(theme-foreground)},
127
+ inactive-color: #{app-bar.token(theme-foreground-muted)}
128
+ )
129
+ );
130
+
131
+ forge-icon-button {
132
+ @include icon-button.provide-theme(
133
+ (
134
+ icon-color: #{app-bar.token(theme-foreground)}
135
+ )
136
+ );
137
+ }
138
+ }