@genesislcap/foundation-header 14.139.2 → 14.141.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 (50) hide show
  1. package/dist/custom-elements.json +690 -160
  2. package/dist/dts/components/zero-components.d.ts +6 -0
  3. package/dist/dts/components/zero-components.d.ts.map +1 -0
  4. package/dist/dts/config/config.d.ts +33 -0
  5. package/dist/dts/config/config.d.ts.map +1 -0
  6. package/dist/dts/config/configure.d.ts +27 -0
  7. package/dist/dts/config/configure.d.ts.map +1 -0
  8. package/dist/dts/config/index.d.ts +2 -0
  9. package/dist/dts/config/index.d.ts.map +1 -1
  10. package/dist/dts/config/templates.d.ts +34 -0
  11. package/dist/dts/config/templates.d.ts.map +1 -0
  12. package/dist/dts/main/index.d.ts +1 -1
  13. package/dist/dts/main/index.d.ts.map +1 -1
  14. package/dist/dts/main/main.d.ts +53 -24
  15. package/dist/dts/main/main.d.ts.map +1 -1
  16. package/dist/dts/main/main.styles.d.ts.map +1 -1
  17. package/dist/dts/main/main.template.d.ts.map +1 -1
  18. package/dist/dts/tags/index.d.ts +2 -0
  19. package/dist/dts/tags/index.d.ts.map +1 -0
  20. package/dist/dts/tags/tags.d.ts +36 -0
  21. package/dist/dts/tags/tags.d.ts.map +1 -0
  22. package/dist/esm/components/zero-components.js +48 -0
  23. package/dist/esm/config/config.js +18 -0
  24. package/dist/esm/config/configure.js +56 -0
  25. package/dist/esm/config/index.js +2 -0
  26. package/dist/esm/config/templates.js +14 -0
  27. package/dist/esm/main/index.js +1 -1
  28. package/dist/esm/main/main.js +58 -23
  29. package/dist/esm/main/main.styles.js +56 -133
  30. package/dist/esm/main/main.template.js +32 -28
  31. package/dist/esm/tags/index.js +1 -0
  32. package/dist/esm/tags/tags.js +39 -0
  33. package/dist/foundation-header.api.json +219 -0
  34. package/dist/foundation-header.d.ts +187 -24
  35. package/docs/api/foundation-header.configure.md +46 -0
  36. package/docs/api/foundation-header.defaultheaderconfig.md +13 -0
  37. package/docs/api/foundation-header.headerconfig.md +21 -0
  38. package/docs/api/foundation-header.headerconfig.templateoptions.md +18 -0
  39. package/docs/api/foundation-header.md +14 -0
  40. package/docs/api/foundation-header.navigation.headerconfig.md +11 -0
  41. package/docs/api/foundation-header.navigation.md +1 -0
  42. package/docs/api/foundation-header.zeroheader.md +39 -0
  43. package/docs/api-report.md +46 -2
  44. package/package.json +14 -12
  45. package/dist/dts/components/components.d.ts +0 -9
  46. package/dist/dts/components/components.d.ts.map +0 -1
  47. package/dist/dts/components/index.d.ts +0 -2
  48. package/dist/dts/components/index.d.ts.map +0 -1
  49. package/dist/esm/components/components.js +0 -42
  50. package/dist/esm/components/index.js +0 -1
@@ -1,7 +1,6 @@
1
1
  import { getApp } from '@genesislcap/foundation-shell/app';
2
- import { neutralLayer2 } from '@microsoft/fast-components';
3
2
  import { css } from '@microsoft/fast-element';
4
- import { backgroundNavOption, ColorHEX, defaultBackgroundHover, defaultBackgroundItem, PrimaryRapidColorHEX, } from '../styles/colors';
3
+ import { optionTag, iconTag, flyoutTag } from '../tags';
5
4
  /**
6
5
  * Base styles for the foundation-header
7
6
  *
@@ -15,16 +14,14 @@ export const MainStyles = css `
15
14
  flex-direction: row;
16
15
 
17
16
  --primary-gradient-angle: -113.5deg;
18
- --design-unit: 2.5;
19
17
  }
20
18
 
21
- zero-design-system-provider,
22
19
  .dynamic-template {
23
20
  width: 100%;
24
21
  }
25
22
 
26
23
  .nav-listbox {
27
- background: ${neutralLayer2};
24
+ background: var(--neutral-layer-2);
28
25
  display: flex;
29
26
  flex: 1;
30
27
  flex-direction: row;
@@ -33,94 +30,61 @@ export const MainStyles = css `
33
30
  box-shadow: 0 0 15px 0 rgb(0 0 0 / 30%);
34
31
  }
35
32
 
36
- fast-listbox {
37
- border-color: var(--rapid-ag-background-color);
33
+ .nav-button {
34
+ height: calc(var(--base-height-multiplier) * (var(--design-unit) - 1) * 1px);
35
+ margin: 0;
38
36
  }
39
37
 
40
38
  .nav-leftside {
41
- background: ${neutralLayer2};
39
+ background: var(--neutral-layer-2);
42
40
  flex: 1;
41
+ display: flex;
43
42
  flex-direction: row;
44
43
  align-items: center;
45
- margin-left: calc(var(--design-unit) * 6px);
46
- display: flex;
44
+ margin-left: calc(var(--design-unit) * 4px);
45
+ gap: calc(var(--design-unit) * 2px);
47
46
  }
48
47
 
49
48
  .nav-leftside:focus-within {
50
49
  box-shadow: none;
51
50
  }
52
51
 
53
- ::slotted(fast-option),
54
- .nav-listbox fast-option {
52
+ ::slotted(${optionTag}),
53
+ .nav-listbox .nav-leftside ${optionTag} {
55
54
  margin: 0 calc(var(--design-unit) * 2px);
56
- padding: 0 calc(var(--design-unit) * 6px);
57
-
58
- --focus-stroke-width: 0;
59
- }
60
-
61
- ::slotted(fast-option.selected),
62
- .nav-listbox fast-option.selected {
63
- background: ${backgroundNavOption};
64
- color: ${ColorHEX.white};
55
+ padding: 0 calc(var(--design-unit) * 2px);
56
+ height: calc(var(--base-height-multiplier) * (var(--design-unit) - 1) * 1px + 2px);
57
+ border-radius: calc(var(--control-corner-radius) * 1px);
58
+ border: calc(var(--stroke-width) * 1px) solid
59
+ color-mix(in srgb, var(--neutral-foreground-rest), transparent 90%);
65
60
  }
66
61
 
67
- ::slotted(fast-option:not(.selected)),
68
- .nav-listbox fast-option:not(.selected) {
69
- background-color: ${defaultBackgroundItem};
70
- color: #c9c9c9;
62
+ ::slotted(${optionTag}.selected),
63
+ .nav-leftside ${optionTag}.selected {
64
+ background: color-mix(in srgb, var(--accent-fill-rest), transparent 95%);
65
+ color: var(--neutral-foreground-rest);
71
66
  }
72
67
 
73
- ::slotted(fast-option:not(.selected):hover),
74
- .nav-listbox fast-option:not(.selected):hover {
75
- background-color: ${defaultBackgroundHover};
76
- color: ${ColorHEX.white};
68
+ ::slotted(${optionTag}:not(.selected)),
69
+ .nav-leftside ${optionTag}:not(.selected) {
70
+ background-color: color-mix(in srgb, var(--neutral-foreground-rest), transparent 90%);
71
+ color: var(--neutral-foreground-rest);
77
72
  }
78
73
 
79
- .top-layout zero-icon {
80
- position: absolute;
81
- right: calc(var(--design-unit) * 6px);
82
- top: 50%;
83
- transform: translateY(-50%);
84
- font-size: 25px;
85
- opacity: 80%;
86
- cursor: pointer;
74
+ ::slotted(${optionTag}:not(.selected):hover),
75
+ .nav-leftside ${optionTag}:not(.selected):hover {
76
+ background-color: color-mix(in srgb, var(--neutral-foreground-rest), transparent 95%);
77
+ color: var(--neutral-foreground-rest);
87
78
  }
88
79
 
89
- .logout-container zero-icon {
80
+ .logout-container ${iconTag} {
90
81
  padding: 0 calc(var(--design-unit) * 3px);
91
82
  }
92
83
 
93
- .nav-listbox .bars-container {
94
- margin-right: calc(var(--design-unit) * 3px);
95
- }
96
-
97
- .user-container zero-icon {
98
- font-size: 20px;
99
- margin-right: calc(var(--design-unit) * 2px);
100
- color: #879ba6;
101
- }
102
-
103
- .group-container zero-icon {
104
- padding-right: 10px;
105
- color: #879ba6;
106
- }
107
-
108
- .nav-listbox .bars-container zero-icon {
84
+ .nav-visibility-icon {
109
85
  cursor: pointer;
110
- font-size: calc(var(--design-unit) * 8px);
111
- background:
112
- linear-gradient(
113
- var(--primary-gradient-angle),
114
- ${PrimaryRapidColorHEX.blue} 0%,
115
- ${PrimaryRapidColorHEX.purple} 100%
116
- )
117
- top/100% 1px,
118
- linear-gradient(
119
- var(--primary-gradient-angle),
120
- ${PrimaryRapidColorHEX.blue} 0%,
121
- ${PrimaryRapidColorHEX.purple} 100%
122
- )
123
- bottom/100% 1px;
86
+ font-size: var(--type-ramp-plus-6-font-size);
87
+ color: var(--neutral-fill-strong-rest);
124
88
  /* stylelint-disable-next-line property-no-vendor-prefix */
125
89
  -webkit-background-clip: text;
126
90
  -webkit-text-fill-color: transparent;
@@ -129,12 +93,11 @@ export const MainStyles = css `
129
93
  .logo-container {
130
94
  display: flex;
131
95
  align-items: center;
132
- margin-right: calc(var(--design-unit) * 3px);
133
96
  }
134
97
 
135
98
  .logo {
136
- height: calc(var(--design-unit) * 8px);
137
- width: calc(var(--design-unit) * 10px);
99
+ height: calc(var(--design-unit) * 5px);
100
+ width: calc(var(--design-unit) * 6px);
138
101
  }
139
102
 
140
103
  .nav-rightside {
@@ -143,83 +106,28 @@ export const MainStyles = css `
143
106
  flex-direction: row;
144
107
  align-items: center;
145
108
  justify-content: flex-end;
146
- margin-right: calc(var(--design-unit) * 6px);
147
- color: #c9c9c9;
148
- }
149
-
150
- .user-container {
151
- background-color: ${defaultBackgroundItem};
152
- padding: calc(var(--design-unit) * 1px);
153
- font-size: 14px;
154
- display: flex;
155
- align-items: center;
156
- border-radius: calc(var(--control-corner-radius) * 1px);
157
- cursor: pointer;
109
+ margin-right: calc(var(--design-unit) * 4px);
110
+ gap: calc(var(--design-unit) * 2px);
158
111
  }
159
112
 
160
113
  .icon-container {
161
- font-size: 20px;
114
+ font-size: var(--type-ramp-plus-6-font-size);
162
115
  padding: calc(var(--design-unit) * 3px);
163
- margin-right: calc(var(--design-unit) * 4px);
164
- color: #879ba6;
116
+ color: var(--neutral-fill-strong-rest);
165
117
  cursor: pointer;
166
- }
167
-
168
- .connection-indicator-container {
169
- margin-right: calc(var(--design-unit) * 4px);
118
+ position: relative;
170
119
  }
171
120
 
172
121
  .open-nav {
173
122
  width: 300px;
174
123
  }
175
124
 
176
- .top-layout {
177
- background:
178
- linear-gradient(
179
- var(--primary-gradient-angle),
180
- ${PrimaryRapidColorHEX.blue} 0%,
181
- ${PrimaryRapidColorHEX.purple} 100%
182
- )
183
- top/100% 1px,
184
- linear-gradient(
185
- var(--primary-gradient-angle),
186
- ${PrimaryRapidColorHEX.blue} 0%,
187
- ${PrimaryRapidColorHEX.purple} 100%
188
- )
189
- bottom/100% 1px;
190
- background-origin: border-box;
191
- background-size: cover;
192
- background-repeat: no-repeat;
193
- width: 100%;
194
- height: 15%;
195
- max-height: 120px;
196
- display: flex;
197
- flex-direction: row;
198
- align-items: center;
199
- position: relative;
200
- }
201
-
202
- .top-layout img {
203
- width: 50px;
204
- margin-left: calc(var(--design-unit) * 6px);
205
- }
206
-
207
- .top-layout zero-icon:hover {
208
- opacity: 100%;
209
- }
210
-
211
- .group-container {
212
- height: 100%;
213
- display: flex;
214
- flex-direction: column;
215
- }
216
-
217
125
  ::slotted(zero-tree-view) {
218
126
  --type-ramp-base-font-size: 12px;
219
127
  }
220
128
 
221
129
  ::slotted(div) {
222
- color: ${PrimaryRapidColorHEX.blue};
130
+ color: var(--accent-fill-rest);
223
131
  font-size: var(--type-ramp-minus-1-font-size);
224
132
  margin-bottom: calc(var(--design-unit) * 4px);
225
133
  padding-left: calc(var(--design-unit) * 4px);
@@ -238,7 +146,8 @@ export const MainStyles = css `
238
146
  .logout-container {
239
147
  align-items: center;
240
148
  background-color: var(--neutral-fill-rest);
241
- border: calc(var(--stroke-width) * 1px) solid ${defaultBackgroundItem};
149
+ border: calc(var(--stroke-width) * 1px) solid
150
+ color-mix(in srgb, var(--neutral-foreground-rest), transparent 90%);
242
151
  cursor: pointer;
243
152
  display: flex;
244
153
  flex-direction: row;
@@ -262,4 +171,18 @@ export const MainStyles = css `
262
171
  .language-selector:focus-within {
263
172
  border-color: #333;
264
173
  }
174
+
175
+ ${flyoutTag}::part(flyout),
176
+ ${flyoutTag}::part(footer) {
177
+ padding: 0;
178
+ }
179
+
180
+ ${flyoutTag}::part(header),
181
+ ${flyoutTag}::part(content) {
182
+ padding: calc(var(--design-unit) * 2px);
183
+ }
184
+
185
+ .notifications-button {
186
+ padding-right: calc((var(--design-unit) - 1) * 2px);
187
+ }
265
188
  `.withBehaviors(getApp().registerStylesTarget('header'));
@@ -1,8 +1,9 @@
1
1
  import { getApp } from '@genesislcap/foundation-shell/app';
2
2
  import { html, repeat, when } from '@microsoft/fast-element';
3
+ import { buttonTag, iconTag, flyoutTag, optionTag, connectionIndicatorTag, selectTag, } from '../tags';
3
4
  const app = getApp();
4
5
  const sideNavTemplate = html `
5
- <zero-flyout
6
+ <${flyoutTag}
6
7
  position="left"
7
8
  ?closed=${(x) => !x.sideNavOpen}
8
9
  @closed=${(x) => x.toggleNavVisibility()}
@@ -22,40 +23,43 @@ const sideNavTemplate = html `
22
23
  data-test-id="logout-button"
23
24
  @click=${(x) => x.logout()}
24
25
  >
25
- <zero-icon name="sign-out-alt"></zero-icon>
26
+ <${iconTag} name="sign-out-alt"></${iconTag}>
26
27
  Sign out
27
28
  </div>
28
- </zero-flyout>
29
+ </${flyoutTag}>
29
30
  `;
30
31
  const defaultRouteNavItemsTemplate = html `
31
- <zero-button
32
+ <${buttonTag}
32
33
  appearance="neutral-grey"
34
+ class="nav-button"
35
+ value="1"
33
36
  @click=${(x) => x.navigateTo('protected')}
34
37
  data-test-id="home-button"
35
38
  >
36
- <zero-icon name="home"></zero-icon>
39
+ <${iconTag} name="home"></${iconTag}>
37
40
  Home
38
- </zero-button>
39
- <zero-button @click=${(x) => x.navigateTo('not-found')} data-test-id="profiles-button">
40
- <zero-icon name="users"></zero-icon>
41
+ </${buttonTag}>
42
+ <${optionTag} @click=${(x) => x.navigateTo('not-found')} data-test-id="profiles-button">
43
+ <${iconTag} name="users"></${iconTag}>
41
44
  Profiles
42
- </zero-button>
45
+ </${optionTag}>
43
46
  `;
44
47
  const routeNavItemsTemplate = html `
45
48
  <template>
46
49
  ${repeat((x) => x.routeNavItems, html `
47
- <zero-button
50
+ <${buttonTag}
48
51
  appearance="neutral-grey"
52
+ class="nav-button"
49
53
  slot="routes"
50
54
  @click=${(x, c) => c.parent.navigateTo(x.routePath)}
51
55
  data-test-id="${(x) => `${x.routePath}-button`}"
52
56
  >
53
57
  ${when((x) => x.icon, html `
54
- <zero-icon
58
+ <${iconTag}
55
59
  name="${(x) => x.icon.name}"
56
60
  variant="${(x) => x.icon.variant}"
57
61
  size="${(x) => x.icon.size}"
58
- ></zero-icon>
62
+ ></${iconTag}>
59
63
  `)}
60
64
  ${(x, c) => c.parent.toLocalisedText(x.title)}
61
65
  </zero-button>
@@ -87,7 +91,7 @@ export const NavTemplate = html `
87
91
  @click=${(x) => x.toggleNavVisibility()}
88
92
  data-test-id="hamburger-menu"
89
93
  >
90
- <zero-icon name="bars" part="nav-visibility-icon"></zero-icon>
94
+ <${iconTag} name="bars" part="nav-visibility-icon" class="nav-visibility-icon"></${iconTag}>
91
95
  </div>
92
96
  `)}
93
97
  <div class="logo-container" data-test-id="nav-bar-logo">
@@ -106,41 +110,41 @@ export const NavTemplate = html `
106
110
  data-test-id="luminance-toggle-button"
107
111
  part="luminance-button"
108
112
  >
109
- <zero-icon
113
+ <${iconTag}
110
114
  @click=${(x) => x.luminanceIconEvent()}
111
115
  variant="regular"
112
116
  name="moon"
113
117
  part="luminance-icon"
114
- ></zero-icon>
118
+ ></${iconTag}>
115
119
  </div>
116
120
  `)}
117
121
  ${when((x) => x.showMiscToggleButton, html `
118
122
  <div class="icon-container" data-test-id="misc-toggle-button" part="misc-button">
119
- <zero-icon @click=${(x) => x.miscIconEvent()} name="th" part="misc-icon"></zero-icon>
123
+ <${iconTag} @click=${(x) => x.miscIconEvent()} name="th" part="misc-icon"></${iconTag}>
120
124
  </div>
121
125
  `)}
122
- ${when((x) => x.showNotificationsButton, html `
126
+ <!-- ${when((x) => x.showNotificationsButton, html `
123
127
  <div
124
128
  class="icon-container"
125
129
  data-test-id="notifications-button"
126
130
  part="notifications-button"
127
131
  >
128
- <zero-icon
132
+ <${iconTag}
129
133
  variant="regular"
130
134
  @click=${(x) => x.notificationIconEvent()}
131
135
  name="bell"
132
136
  part="notifications-icon"
133
- ></zero-icon>
137
+ ></${iconTag}>
134
138
  <slot name="notifications-icon-end"></slot>
135
139
  </div>
136
- `)}
140
+ `)} -->
137
141
  ${when((x) => x.showConnectionIndicator, html `
138
142
  <div class="connection-indicator-container" data-test-id="connection-indicator">
139
- <zero-connection-indicator show-label="false"></zero-connection-indicator>
143
+ <${connectionIndicatorTag} show-label="false"></${connectionIndicatorTag}>
140
144
  </div>
141
145
  `)}
142
146
  ${when((x) => x.showLanguageSelector && x.languageOptions, html `
143
- <zero-select
147
+ <${selectTag}
144
148
  class="language-selector"
145
149
  position="below"
146
150
  data-test-id="language-selector"
@@ -148,20 +152,20 @@ export const NavTemplate = html `
148
152
  @change="${(x, c) => x.changeLanguage(c.event)}"
149
153
  >
150
154
  ${repeat((x) => x.languageOptions.availableLanguages, html `
151
- <zero-option
155
+ <${optionTag}
152
156
  value="${(x) => x}"
153
157
  ?selected="${(x, c) => x === c.parent.languageOptions.selectedLanguage}"
154
158
  >
155
159
  ${(x) => x.toUpperCase()}
156
- </zero-option>
160
+ </${optionTag}>
157
161
  `)}
158
- </zero-select>
162
+ </${selectTag}>
159
163
  `)}
160
164
 
161
- <zero-button appearance="neutral-grey" data-test-id="user-button">
162
- <zero-icon name="user-circle"></zero-icon>
165
+ <${buttonTag} appearance="neutral-grey" data-test-id="user-button" class="nav-button">
166
+ <${iconTag} name="user-circle"></${iconTag}>
163
167
  ${(x) => x.userName}
164
- </zero-button>
168
+ </${buttonTag}>
165
169
  </div>
166
170
  ${app.registerElementsTarget(['header', 'header-end'])}
167
171
  </div>
@@ -0,0 +1 @@
1
+ export * from './tags';
@@ -0,0 +1,39 @@
1
+ import { tagFor } from '@genesislcap/foundation-ui';
2
+ import { DI } from '@microsoft/fast-foundation';
3
+ import { HeaderConfig } from '../config/config';
4
+ import { defaultTemplateOptions } from '../config/templates';
5
+ /**
6
+ * It's important this file isn't referenced ahead of a `configure` call, otherwise these values may remain fixed at
7
+ * their defaults. Consumers must use the `/config` subpath to help avoid this. Files with references to tags should be
8
+ * lazily loaded. There is an alternative `getTags` utility at the end which could offer another approach, but direct
9
+ * tag exports and inline template references feel cleaner than having to convert all component `template` and `styles`
10
+ * exports to functions to call `getTags` on execution.
11
+ */
12
+ /**
13
+ * @internal
14
+ */
15
+ export const { templateOptions = defaultTemplateOptions } = DI.getOrCreateDOMContainer().get(HeaderConfig);
16
+ /**
17
+ * @internal
18
+ */
19
+ export const iconTag = tagFor(templateOptions.icon);
20
+ /**
21
+ * @internal
22
+ */
23
+ export const buttonTag = tagFor(templateOptions.button);
24
+ /**
25
+ * @internal
26
+ */
27
+ export const connectionIndicatorTag = tagFor(templateOptions.connectionIndicator);
28
+ /**
29
+ * @internal
30
+ */
31
+ export const selectTag = tagFor(templateOptions.select);
32
+ /**
33
+ * @internal
34
+ */
35
+ export const optionTag = tagFor(templateOptions.option);
36
+ /**
37
+ * @internal
38
+ */
39
+ export const flyoutTag = tagFor(templateOptions.flyout);