@rblabs-dev/axiom 1.2.1 → 1.2.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.
Files changed (73) hide show
  1. package/README.md +39 -13
  2. package/app-shell/package.json +4 -0
  3. package/brand-lockup/package.json +4 -0
  4. package/central-sign-in/package.json +4 -0
  5. package/cli/build-brand-assets.mjs +12 -18
  6. package/cli/project.mjs +6 -0
  7. package/cli/verify-production-assets.mjs +71 -6
  8. package/confirm-dialog/package.json +4 -0
  9. package/core/package.json +4 -0
  10. package/empty-state/package.json +4 -0
  11. package/fesm2022/rblabs-dev-axiom-app-shell.mjs +375 -0
  12. package/fesm2022/rblabs-dev-axiom-app-shell.mjs.map +1 -0
  13. package/fesm2022/rblabs-dev-axiom-brand-lockup.mjs +154 -0
  14. package/fesm2022/rblabs-dev-axiom-brand-lockup.mjs.map +1 -0
  15. package/fesm2022/rblabs-dev-axiom-central-sign-in.mjs +375 -0
  16. package/fesm2022/rblabs-dev-axiom-central-sign-in.mjs.map +1 -0
  17. package/fesm2022/rblabs-dev-axiom-confirm-dialog.mjs +329 -0
  18. package/fesm2022/rblabs-dev-axiom-confirm-dialog.mjs.map +1 -0
  19. package/fesm2022/rblabs-dev-axiom-core.mjs +181 -0
  20. package/fesm2022/rblabs-dev-axiom-core.mjs.map +1 -0
  21. package/fesm2022/rblabs-dev-axiom-empty-state.mjs +252 -0
  22. package/fesm2022/rblabs-dev-axiom-empty-state.mjs.map +1 -0
  23. package/fesm2022/rblabs-dev-axiom-message.mjs +194 -0
  24. package/fesm2022/rblabs-dev-axiom-message.mjs.map +1 -0
  25. package/fesm2022/rblabs-dev-axiom-monogram.mjs +102 -0
  26. package/fesm2022/rblabs-dev-axiom-monogram.mjs.map +1 -0
  27. package/fesm2022/rblabs-dev-axiom-page-header.mjs +199 -0
  28. package/fesm2022/rblabs-dev-axiom-page-header.mjs.map +1 -0
  29. package/fesm2022/rblabs-dev-axiom-panel.mjs +207 -0
  30. package/fesm2022/rblabs-dev-axiom-panel.mjs.map +1 -0
  31. package/fesm2022/rblabs-dev-axiom-public-shell.mjs +165 -0
  32. package/fesm2022/rblabs-dev-axiom-public-shell.mjs.map +1 -0
  33. package/fesm2022/rblabs-dev-axiom-shell-footer.mjs +73 -0
  34. package/fesm2022/rblabs-dev-axiom-shell-footer.mjs.map +1 -0
  35. package/fesm2022/rblabs-dev-axiom-status-chip.mjs +161 -0
  36. package/fesm2022/rblabs-dev-axiom-status-chip.mjs.map +1 -0
  37. package/fesm2022/rblabs-dev-axiom-technical-value.mjs +173 -0
  38. package/fesm2022/rblabs-dev-axiom-technical-value.mjs.map +1 -0
  39. package/fesm2022/rblabs-dev-axiom-theme-toggle.mjs +117 -0
  40. package/fesm2022/rblabs-dev-axiom-theme-toggle.mjs.map +1 -0
  41. package/fesm2022/rblabs-dev-axiom.mjs +15 -2955
  42. package/fonts/LICENSE +93 -0
  43. package/fonts/inter-latin-ext-wght-normal.woff2 +0 -0
  44. package/fonts/inter-latin-wght-normal.woff2 +0 -0
  45. package/message/package.json +4 -0
  46. package/monogram/package.json +4 -0
  47. package/package.json +77 -2
  48. package/page-header/package.json +4 -0
  49. package/panel/package.json +4 -0
  50. package/public-shell/package.json +4 -0
  51. package/shell-footer/package.json +4 -0
  52. package/status-chip/package.json +4 -0
  53. package/styles/_fonts.scss +7 -7
  54. package/styles/_index.scss +1 -1
  55. package/technical-value/package.json +4 -0
  56. package/theme-toggle/package.json +4 -0
  57. package/types/rblabs-dev-axiom-app-shell.d.ts +50 -0
  58. package/types/rblabs-dev-axiom-brand-lockup.d.ts +35 -0
  59. package/types/rblabs-dev-axiom-central-sign-in.d.ts +82 -0
  60. package/types/rblabs-dev-axiom-confirm-dialog.d.ts +76 -0
  61. package/types/rblabs-dev-axiom-core.d.ts +116 -0
  62. package/types/rblabs-dev-axiom-empty-state.d.ts +55 -0
  63. package/types/rblabs-dev-axiom-message.d.ts +48 -0
  64. package/types/rblabs-dev-axiom-monogram.d.ts +12 -0
  65. package/types/rblabs-dev-axiom-page-header.d.ts +44 -0
  66. package/types/rblabs-dev-axiom-panel.d.ts +44 -0
  67. package/types/rblabs-dev-axiom-public-shell.d.ts +28 -0
  68. package/types/rblabs-dev-axiom-shell-footer.d.ts +17 -0
  69. package/types/rblabs-dev-axiom-status-chip.d.ts +40 -0
  70. package/types/rblabs-dev-axiom-technical-value.d.ts +35 -0
  71. package/types/rblabs-dev-axiom-theme-toggle.d.ts +12 -0
  72. package/types/rblabs-dev-axiom.d.ts +15 -675
  73. package/fesm2022/rblabs-dev-axiom.mjs.map +0 -1
@@ -1,2955 +1,15 @@
1
- import * as i0 from "@angular/core";
2
- import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, Injectable, InjectionToken, ViewEncapsulation, afterNextRender, afterRenderEffect, booleanAttribute, computed, inject, input, makeEnvironmentProviders, output, provideAppInitializer, signal, viewChild } from "@angular/core";
3
- import { NavigationEnd, Router, RouterLink } from "@angular/router";
4
- import * as i1 from "@angular/forms";
5
- import { FormControl, ReactiveFormsModule } from "@angular/forms";
6
- import { MatButton, MatIconButton } from "@angular/material/button";
7
- import { MAT_DIALOG_DATA, MatDialog, MatDialogActions, MatDialogContent, MatDialogRef, MatDialogTitle } from "@angular/material/dialog";
8
- import { MatIcon, MatIconRegistry } from "@angular/material/icon";
9
- import { filter, firstValueFrom } from "rxjs";
10
- import { MatTooltip } from "@angular/material/tooltip";
11
- import { DOCUMENT, NgTemplateOutlet } from "@angular/common";
12
- import { BreakpointObserver } from "@angular/cdk/layout";
13
- import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
14
- import { MatSidenav, MatSidenavContainer, MatSidenavContent } from "@angular/material/sidenav";
15
- let nextId$2 = 0;
16
- var RbMonogramComponent = class RbMonogramComponent {
17
- gradientId = `rb-monogram-gradient-${nextId$2++}`;
18
- static ɵfac = i0.ɵɵngDeclareFactory({
19
- minVersion: "12.0.0",
20
- version: "22.2.3",
21
- ngImport: i0,
22
- type: RbMonogramComponent,
23
- deps: [],
24
- target: i0.ɵɵFactoryTarget.Component
25
- });
26
- static ɵcmp = i0.ɵɵngDeclareComponent({
27
- minVersion: "14.0.0",
28
- version: "22.2.3",
29
- type: RbMonogramComponent,
30
- isStandalone: true,
31
- selector: "rb-monogram",
32
- host: {
33
- attributes: { "aria-hidden": "true" },
34
- classAttribute: "rb-monogram"
35
- },
36
- ngImport: i0,
37
- template: `
38
- <svg class="rb-monogram__svg" viewBox="0 0 64 64" focusable="false">
39
- <defs>
40
- <linearGradient
41
- [attr.id]="gradientId"
42
- x1="8"
43
- y1="8"
44
- x2="56"
45
- y2="56"
46
- gradientUnits="userSpaceOnUse"
47
- >
48
- <stop class="rb-monogram__gradient-start" />
49
- <stop class="rb-monogram__gradient-end" offset="1" />
50
- </linearGradient>
51
- </defs>
52
- <rect class="rb-monogram__frame" width="64" height="64" rx="16" />
53
- <rect x="5" y="5" width="54" height="54" rx="14" [attr.fill]="'url(#' + gradientId + ')'" />
54
- <g class="rb-monogram__letters">
55
- <path d="M17 47V17h7.3c4.9 0 7.8 2.7 7.8 6.9s-2.9 6.8-7.8 6.8H17M24.3 30.7 34.5 47" />
56
- <path
57
- d="M40 17v30M40 17h6.8c4.4 0 7.1 2.6 7.1 6.2s-2.7 5.9-7.1 5.9H40M40 29.1h7.5c4.7 0 7.7 3.2 7.7 7.1s-3 7.8-7.7 7.8H40"
58
- />
59
- </g>
60
- </svg>
61
- `,
62
- isInline: true,
63
- styles: ["rb-monogram{display:inline-block;flex:none;inline-size:var(--rb-size-monogram);aspect-ratio:1;line-height:0}rb-monogram .rb-monogram__svg{display:block;inline-size:100%;block-size:100%}rb-monogram .rb-monogram__frame{fill:var(--rb-color-brand-navy)}rb-monogram .rb-monogram__gradient-start{stop-color:var(--rb-color-brand-start)}rb-monogram .rb-monogram__gradient-end{stop-color:var(--rb-color-brand-end)}rb-monogram .rb-monogram__letters{fill:none;stroke:var(--rb-color-brand-ink);stroke-linecap:round;stroke-linejoin:round;stroke-width:3.5}\n"],
64
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
65
- encapsulation: i0.ViewEncapsulation.None
66
- });
67
- };
68
- i0.ɵɵngDeclareClassMetadata({
69
- minVersion: "12.0.0",
70
- version: "22.2.3",
71
- ngImport: i0,
72
- type: RbMonogramComponent,
73
- decorators: [{
74
- type: Component,
75
- args: [{
76
- selector: "rb-monogram",
77
- changeDetection: ChangeDetectionStrategy.OnPush,
78
- encapsulation: ViewEncapsulation.None,
79
- host: {
80
- class: "rb-monogram",
81
- "aria-hidden": "true"
82
- },
83
- template: `
84
- <svg class="rb-monogram__svg" viewBox="0 0 64 64" focusable="false">
85
- <defs>
86
- <linearGradient
87
- [attr.id]="gradientId"
88
- x1="8"
89
- y1="8"
90
- x2="56"
91
- y2="56"
92
- gradientUnits="userSpaceOnUse"
93
- >
94
- <stop class="rb-monogram__gradient-start" />
95
- <stop class="rb-monogram__gradient-end" offset="1" />
96
- </linearGradient>
97
- </defs>
98
- <rect class="rb-monogram__frame" width="64" height="64" rx="16" />
99
- <rect x="5" y="5" width="54" height="54" rx="14" [attr.fill]="'url(#' + gradientId + ')'" />
100
- <g class="rb-monogram__letters">
101
- <path d="M17 47V17h7.3c4.9 0 7.8 2.7 7.8 6.9s-2.9 6.8-7.8 6.8H17M24.3 30.7 34.5 47" />
102
- <path
103
- d="M40 17v30M40 17h6.8c4.4 0 7.1 2.6 7.1 6.2s-2.7 5.9-7.1 5.9H40M40 29.1h7.5c4.7 0 7.7 3.2 7.7 7.1s-3 7.8-7.7 7.8H40"
104
- />
105
- </g>
106
- </svg>
107
- `,
108
- styles: ["rb-monogram{display:inline-block;flex:none;inline-size:var(--rb-size-monogram);aspect-ratio:1;line-height:0}rb-monogram .rb-monogram__svg{display:block;inline-size:100%;block-size:100%}rb-monogram .rb-monogram__frame{fill:var(--rb-color-brand-navy)}rb-monogram .rb-monogram__gradient-start{stop-color:var(--rb-color-brand-start)}rb-monogram .rb-monogram__gradient-end{stop-color:var(--rb-color-brand-end)}rb-monogram .rb-monogram__letters{fill:none;stroke:var(--rb-color-brand-ink);stroke-linecap:round;stroke-linejoin:round;stroke-width:3.5}\n"]
109
- }]
110
- }]
111
- });
112
- var RbBrandLockupComponent = class RbBrandLockupComponent {
113
- appName = input.required(...ngDevMode ? [{ debugName: "appName" }] : /* istanbul ignore next */ []);
114
- link = input("/", ...ngDevMode ? [{ debugName: "link" }] : /* istanbul ignore next */ []);
115
- compact = input(false, {
116
- ...ngDevMode ? { debugName: "compact" } : /* istanbul ignore next */ {},
117
- transform: (value) => value === "" ? true : value
118
- });
119
- accessibleName = computed(() => `RB Labs ${this.appName()} home`, ...ngDevMode ? [{ debugName: "accessibleName" }] : /* istanbul ignore next */ []);
120
- compactAttribute = computed(() => {
121
- const compact = this.compact();
122
- return compact === true ? "always" : compact || null;
123
- }, ...ngDevMode ? [{ debugName: "compactAttribute" }] : /* istanbul ignore next */ []);
124
- static ɵfac = i0.ɵɵngDeclareFactory({
125
- minVersion: "12.0.0",
126
- version: "22.2.3",
127
- ngImport: i0,
128
- type: RbBrandLockupComponent,
129
- deps: [],
130
- target: i0.ɵɵFactoryTarget.Component
131
- });
132
- static ɵcmp = i0.ɵɵngDeclareComponent({
133
- minVersion: "17.1.0",
134
- version: "22.2.3",
135
- type: RbBrandLockupComponent,
136
- isStandalone: true,
137
- selector: "rb-brand-lockup",
138
- inputs: {
139
- appName: {
140
- classPropertyName: "appName",
141
- publicName: "appName",
142
- isSignal: true,
143
- isRequired: true,
144
- transformFunction: null
145
- },
146
- link: {
147
- classPropertyName: "link",
148
- publicName: "link",
149
- isSignal: true,
150
- isRequired: false,
151
- transformFunction: null
152
- },
153
- compact: {
154
- classPropertyName: "compact",
155
- publicName: "compact",
156
- isSignal: true,
157
- isRequired: false,
158
- transformFunction: null
159
- }
160
- },
161
- host: {
162
- properties: { "attr.data-compact": "compactAttribute()" },
163
- classAttribute: "rb-brand-lockup"
164
- },
165
- ngImport: i0,
166
- template: `
167
- <a class="rb-brand-lockup__link" [routerLink]="link()" [attr.aria-label]="accessibleName()">
168
- <rb-monogram class="rb-brand-lockup__mark" />
169
- <span class="rb-brand-lockup__wordmark">
170
- <span class="rb-brand-lockup__brand">RB Labs</span>
171
- <span class="rb-brand-lockup__app"><span aria-hidden="true">·</span> {{ appName() }}</span>
172
- </span>
173
- </a>
174
- `,
175
- isInline: true,
176
- styles: ["rb-brand-lockup{display:inline-flex;min-width:0}rb-brand-lockup .rb-brand-lockup__link{display:inline-flex;min-width:0;gap:var(--rb-space-3);align-items:center;border-radius:var(--rb-radius-sm);color:inherit;text-decoration:none}rb-brand-lockup .rb-brand-lockup__wordmark{display:inline-flex;min-width:0;gap:var(--rb-space-1);align-items:baseline;font:var(--rb-type-title-small);white-space:nowrap}rb-brand-lockup .rb-brand-lockup__brand{color:var(--rb-color-text-strong)}rb-brand-lockup .rb-brand-lockup__app{overflow:hidden;color:var(--rb-color-text-muted);font-weight:var(--rb-font-weight-medium);text-overflow:ellipsis}rb-brand-lockup[data-compact=always] .rb-brand-lockup__mark{inline-size:var(--rb-size-monogram-sm)}rb-brand-lockup[data-compact=always] .rb-brand-lockup__wordmark{display:none}@media(width<40rem){rb-brand-lockup[data-compact=below-sm] .rb-brand-lockup__mark{inline-size:var(--rb-size-monogram-sm)}rb-brand-lockup[data-compact=below-sm] .rb-brand-lockup__wordmark{display:none}}\n"],
177
- dependencies: [{
178
- kind: "component",
179
- type: RbMonogramComponent,
180
- selector: "rb-monogram"
181
- }, {
182
- kind: "directive",
183
- type: RouterLink,
184
- selector: "[routerLink]",
185
- inputs: [
186
- "target",
187
- "queryParams",
188
- "fragment",
189
- "queryParamsHandling",
190
- "state",
191
- "info",
192
- "relativeTo",
193
- "preserveFragment",
194
- "skipLocationChange",
195
- "replaceUrl",
196
- "browserUrl",
197
- "routerLink"
198
- ]
199
- }],
200
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
201
- encapsulation: i0.ViewEncapsulation.None
202
- });
203
- };
204
- i0.ɵɵngDeclareClassMetadata({
205
- minVersion: "12.0.0",
206
- version: "22.2.3",
207
- ngImport: i0,
208
- type: RbBrandLockupComponent,
209
- decorators: [{
210
- type: Component,
211
- args: [{
212
- selector: "rb-brand-lockup",
213
- imports: [RbMonogramComponent, RouterLink],
214
- changeDetection: ChangeDetectionStrategy.OnPush,
215
- encapsulation: ViewEncapsulation.None,
216
- host: {
217
- class: "rb-brand-lockup",
218
- "[attr.data-compact]": "compactAttribute()"
219
- },
220
- template: `
221
- <a class="rb-brand-lockup__link" [routerLink]="link()" [attr.aria-label]="accessibleName()">
222
- <rb-monogram class="rb-brand-lockup__mark" />
223
- <span class="rb-brand-lockup__wordmark">
224
- <span class="rb-brand-lockup__brand">RB Labs</span>
225
- <span class="rb-brand-lockup__app"><span aria-hidden="true">·</span> {{ appName() }}</span>
226
- </span>
227
- </a>
228
- `,
229
- styles: ["rb-brand-lockup{display:inline-flex;min-width:0}rb-brand-lockup .rb-brand-lockup__link{display:inline-flex;min-width:0;gap:var(--rb-space-3);align-items:center;border-radius:var(--rb-radius-sm);color:inherit;text-decoration:none}rb-brand-lockup .rb-brand-lockup__wordmark{display:inline-flex;min-width:0;gap:var(--rb-space-1);align-items:baseline;font:var(--rb-type-title-small);white-space:nowrap}rb-brand-lockup .rb-brand-lockup__brand{color:var(--rb-color-text-strong)}rb-brand-lockup .rb-brand-lockup__app{overflow:hidden;color:var(--rb-color-text-muted);font-weight:var(--rb-font-weight-medium);text-overflow:ellipsis}rb-brand-lockup[data-compact=always] .rb-brand-lockup__mark{inline-size:var(--rb-size-monogram-sm)}rb-brand-lockup[data-compact=always] .rb-brand-lockup__wordmark{display:none}@media(width<40rem){rb-brand-lockup[data-compact=below-sm] .rb-brand-lockup__mark{inline-size:var(--rb-size-monogram-sm)}rb-brand-lockup[data-compact=below-sm] .rb-brand-lockup__wordmark{display:none}}\n"]
230
- }]
231
- }],
232
- propDecorators: {
233
- appName: [{
234
- type: i0.Input,
235
- args: [{
236
- isSignal: true,
237
- alias: "appName",
238
- required: true
239
- }]
240
- }],
241
- link: [{
242
- type: i0.Input,
243
- args: [{
244
- isSignal: true,
245
- alias: "link",
246
- required: false
247
- }]
248
- }],
249
- compact: [{
250
- type: i0.Input,
251
- args: [{
252
- isSignal: true,
253
- alias: "compact",
254
- required: false
255
- }]
256
- }]
257
- }
258
- });
259
- const RB_BREAKPOINT_WIDTHS = {
260
- xs: "30rem",
261
- sm: "40rem",
262
- md: "48rem",
263
- lg: "60rem",
264
- xl: "75rem",
265
- "2xl": "87.5rem"
266
- };
267
- const RB_BREAKPOINTS = {
268
- belowXs: "(width < 30rem)",
269
- belowSm: "(width < 40rem)",
270
- belowMd: "(width < 48rem)",
271
- belowLg: "(width < 60rem)",
272
- belowXl: "(width < 75rem)",
273
- below2xl: "(width < 87.5rem)",
274
- aboveXs: "(width >= 30rem)",
275
- aboveSm: "(width >= 40rem)",
276
- aboveMd: "(width >= 48rem)",
277
- aboveLg: "(width >= 60rem)",
278
- aboveXl: "(width >= 75rem)",
279
- above2xl: "(width >= 87.5rem)"
280
- };
281
- let nextId$1 = 0;
282
- function rbConfirmDialogId() {
283
- return `rb-confirm-dialog-${nextId$1++}`;
284
- }
285
- var RbConfirmDialogComponent = class RbConfirmDialogComponent {
286
- data = inject(MAT_DIALOG_DATA);
287
- dialogRef = inject(MatDialogRef);
288
- reasonInput = viewChild("reasonInput", ...ngDevMode ? [{ debugName: "reasonInput" }] : /* istanbul ignore next */ []);
289
- id = rbConfirmDialogId();
290
- descriptionId = this.data.descriptionId ?? `${this.id}-description`;
291
- reasonId = `${this.id}-reason`;
292
- tone = this.data.tone ?? "primary";
293
- minimumReasonLength = this.data.reason?.minimumLength ?? 3;
294
- trimmedMinLength = (control) => String(control.value).trim().length >= this.minimumReasonLength ? null : { trimmedMinLength: true };
295
- reason = new FormControl("", {
296
- nonNullable: true,
297
- validators: this.data.reason ? [this.trimmedMinLength] : []
298
- });
299
- submitted = signal(false, ...ngDevMode ? [{ debugName: "submitted" }] : /* istanbul ignore next */ []);
300
- showReasonError() {
301
- return this.submitted() && this.reason.invalid;
302
- }
303
- reasonDescribedBy() {
304
- const ids = [this.data.reason?.hint ? `${this.reasonId}-hint` : null, this.showReasonError() ? `${this.reasonId}-error` : null].filter((value) => value !== null);
305
- return ids.length > 0 ? ids.join(" ") : null;
306
- }
307
- cancel() {
308
- this.dialogRef.close({ confirmed: false });
309
- }
310
- confirm() {
311
- if (this.data.reason) {
312
- this.submitted.set(true);
313
- if (this.reason.invalid) {
314
- this.reasonInput()?.nativeElement.focus();
315
- return;
316
- }
317
- }
318
- this.dialogRef.close({
319
- confirmed: true,
320
- ...this.data.reason ? { reason: this.reason.value.trim() } : {}
321
- });
322
- }
323
- static ɵfac = i0.ɵɵngDeclareFactory({
324
- minVersion: "12.0.0",
325
- version: "22.2.3",
326
- ngImport: i0,
327
- type: RbConfirmDialogComponent,
328
- deps: [],
329
- target: i0.ɵɵFactoryTarget.Component
330
- });
331
- static ɵcmp = i0.ɵɵngDeclareComponent({
332
- minVersion: "17.0.0",
333
- version: "22.2.3",
334
- type: RbConfirmDialogComponent,
335
- isStandalone: true,
336
- selector: "rb-confirm-dialog",
337
- host: {
338
- properties: { "attr.data-tone": "tone" },
339
- classAttribute: "rb-confirm-dialog"
340
- },
341
- viewQueries: [{
342
- propertyName: "reasonInput",
343
- first: true,
344
- predicate: ["reasonInput"],
345
- descendants: true,
346
- isSignal: true
347
- }],
348
- ngImport: i0,
349
- template: `
350
- <div class="rb-confirm-dialog__layout">
351
- <span class="rb-confirm-dialog__icon" aria-hidden="true">
352
- <mat-icon fontSet="material-symbols-outlined">{{
353
- tone === 'danger' ? 'warning' : 'help'
354
- }}</mat-icon>
355
- </span>
356
- <div class="rb-confirm-dialog__body">
357
- <h2 mat-dialog-title class="rb-confirm-dialog__title">{{ data.title }}</h2>
358
- <mat-dialog-content class="rb-confirm-dialog__content">
359
- <p class="rb-confirm-dialog__description" [id]="descriptionId">{{ data.description }}</p>
360
- @if (data.reason) {
361
- <div class="rb-field" [class.rb-field--invalid]="showReasonError()">
362
- <label class="rb-field__label" [for]="reasonId">{{
363
- data.reason.label ?? 'Reason'
364
- }}</label>
365
- <input
366
- #reasonInput
367
- class="rb-field__control"
368
- type="text"
369
- autocomplete="off"
370
- [id]="reasonId"
371
- [formControl]="reason"
372
- [attr.aria-invalid]="showReasonError() ? 'true' : null"
373
- [attr.aria-describedby]="reasonDescribedBy()"
374
- />
375
- @if (data.reason.hint) {
376
- <p class="rb-field__hint" [id]="reasonId + '-hint'">{{ data.reason.hint }}</p>
377
- }
378
- @if (showReasonError()) {
379
- <p class="rb-field__error" [id]="reasonId + '-error'">
380
- Enter at least {{ minimumReasonLength }} characters.
381
- </p>
382
- }
383
- </div>
384
- }
385
- </mat-dialog-content>
386
- </div>
387
- </div>
388
- <mat-dialog-actions align="end" class="rb-confirm-dialog__actions">
389
- <button matButton type="button" (click)="cancel()">{{ data.cancelLabel ?? 'Cancel' }}</button>
390
- <button
391
- matButton="filled"
392
- type="button"
393
- [color]="tone === 'danger' ? 'warn' : 'primary'"
394
- (click)="confirm()"
395
- >
396
- {{ data.confirmLabel }}
397
- </button>
398
- </mat-dialog-actions>
399
- `,
400
- isInline: true,
401
- styles: ["rb-confirm-dialog{--mat-dialog-headline-padding: 0;--mat-dialog-content-padding: 0;--mat-dialog-with-actions-content-padding: 0;--mat-dialog-actions-padding: var(--rb-space-6);--mat-dialog-subhead-color: var(--rb-color-text-strong);--mat-dialog-subhead-font: var(--rb-font-sans);--mat-dialog-subhead-size: var(--rb-type-title-large-size);--mat-dialog-subhead-line-height: var(--rb-type-title-large-line-height);--mat-dialog-subhead-weight: var(--rb-type-title-large-weight);--mat-dialog-subhead-tracking: var(--rb-type-title-large-tracking);--mat-dialog-supporting-text-color: var(--rb-color-text-muted);--mat-dialog-supporting-text-font: var(--rb-font-sans);--mat-dialog-supporting-text-size: var(--rb-type-body-medium-size);--mat-dialog-supporting-text-line-height: var(--rb-type-body-medium-line-height);--mat-dialog-supporting-text-weight: var(--rb-type-body-medium-weight);--mat-dialog-supporting-text-tracking: var(--rb-type-body-medium-tracking)}rb-confirm-dialog .rb-confirm-dialog__layout{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--rb-space-4);min-height:0;padding:var(--rb-space-6) var(--rb-space-6) 0}@media(width<30rem){rb-confirm-dialog .rb-confirm-dialog__layout{gap:var(--rb-space-3);padding-inline:var(--rb-space-4)}}rb-confirm-dialog .rb-confirm-dialog__icon{display:grid;width:var(--rb-size-touch-target);height:var(--rb-size-touch-target);place-items:center;border-radius:var(--rb-radius-full);background-color:var(--rb-color-primary-soft);color:var(--rb-color-on-primary-soft)}rb-confirm-dialog[data-tone=danger] .rb-confirm-dialog__icon{background-color:var(--rb-color-danger-soft);color:var(--rb-color-danger)}rb-confirm-dialog .rb-confirm-dialog__body{display:grid;gap:var(--rb-space-1);min-width:0}rb-confirm-dialog .rb-confirm-dialog__title{overflow-wrap:anywhere}rb-confirm-dialog .rb-confirm-dialog__content{display:grid;gap:var(--rb-space-5);overflow-wrap:anywhere}rb-confirm-dialog .rb-confirm-dialog__description{margin:0}rb-confirm-dialog .rb-confirm-dialog__actions{gap:var(--rb-space-2);min-height:0}@media(width<30rem){rb-confirm-dialog .rb-confirm-dialog__actions{padding-inline:var(--rb-space-4)}}\n"],
402
- dependencies: [
403
- {
404
- kind: "component",
405
- type: MatButton,
406
- selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ",
407
- inputs: ["matButton"],
408
- exportAs: ["matButton", "matAnchor"]
409
- },
410
- {
411
- kind: "directive",
412
- type: MatDialogActions,
413
- selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]",
414
- inputs: ["align"]
415
- },
416
- {
417
- kind: "directive",
418
- type: MatDialogContent,
419
- selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]"
420
- },
421
- {
422
- kind: "directive",
423
- type: MatDialogTitle,
424
- selector: "[mat-dialog-title], [matDialogTitle]",
425
- inputs: ["id"],
426
- exportAs: ["matDialogTitle"]
427
- },
428
- {
429
- kind: "component",
430
- type: MatIcon,
431
- selector: "mat-icon",
432
- inputs: [
433
- "color",
434
- "inline",
435
- "svgIcon",
436
- "fontSet",
437
- "fontIcon"
438
- ],
439
- exportAs: ["matIcon"]
440
- },
441
- {
442
- kind: "ngmodule",
443
- type: ReactiveFormsModule
444
- },
445
- {
446
- kind: "directive",
447
- type: i1.DefaultValueAccessor,
448
- selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]"
449
- },
450
- {
451
- kind: "directive",
452
- type: i1.NgControlStatus,
453
- selector: "[formControlName],[ngModel],[formControl]"
454
- },
455
- {
456
- kind: "directive",
457
- type: i1.FormControlDirective,
458
- selector: "[formControl]",
459
- inputs: [
460
- "formControl",
461
- "disabled",
462
- "ngModel"
463
- ],
464
- outputs: ["ngModelChange"],
465
- exportAs: ["ngForm"]
466
- }
467
- ],
468
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
469
- encapsulation: i0.ViewEncapsulation.None
470
- });
471
- };
472
- i0.ɵɵngDeclareClassMetadata({
473
- minVersion: "12.0.0",
474
- version: "22.2.3",
475
- ngImport: i0,
476
- type: RbConfirmDialogComponent,
477
- decorators: [{
478
- type: Component,
479
- args: [{
480
- selector: "rb-confirm-dialog",
481
- imports: [
482
- MatButton,
483
- MatDialogActions,
484
- MatDialogContent,
485
- MatDialogTitle,
486
- MatIcon,
487
- ReactiveFormsModule
488
- ],
489
- changeDetection: ChangeDetectionStrategy.OnPush,
490
- encapsulation: ViewEncapsulation.None,
491
- host: {
492
- class: "rb-confirm-dialog",
493
- "[attr.data-tone]": "tone"
494
- },
495
- template: `
496
- <div class="rb-confirm-dialog__layout">
497
- <span class="rb-confirm-dialog__icon" aria-hidden="true">
498
- <mat-icon fontSet="material-symbols-outlined">{{
499
- tone === 'danger' ? 'warning' : 'help'
500
- }}</mat-icon>
501
- </span>
502
- <div class="rb-confirm-dialog__body">
503
- <h2 mat-dialog-title class="rb-confirm-dialog__title">{{ data.title }}</h2>
504
- <mat-dialog-content class="rb-confirm-dialog__content">
505
- <p class="rb-confirm-dialog__description" [id]="descriptionId">{{ data.description }}</p>
506
- @if (data.reason) {
507
- <div class="rb-field" [class.rb-field--invalid]="showReasonError()">
508
- <label class="rb-field__label" [for]="reasonId">{{
509
- data.reason.label ?? 'Reason'
510
- }}</label>
511
- <input
512
- #reasonInput
513
- class="rb-field__control"
514
- type="text"
515
- autocomplete="off"
516
- [id]="reasonId"
517
- [formControl]="reason"
518
- [attr.aria-invalid]="showReasonError() ? 'true' : null"
519
- [attr.aria-describedby]="reasonDescribedBy()"
520
- />
521
- @if (data.reason.hint) {
522
- <p class="rb-field__hint" [id]="reasonId + '-hint'">{{ data.reason.hint }}</p>
523
- }
524
- @if (showReasonError()) {
525
- <p class="rb-field__error" [id]="reasonId + '-error'">
526
- Enter at least {{ minimumReasonLength }} characters.
527
- </p>
528
- }
529
- </div>
530
- }
531
- </mat-dialog-content>
532
- </div>
533
- </div>
534
- <mat-dialog-actions align="end" class="rb-confirm-dialog__actions">
535
- <button matButton type="button" (click)="cancel()">{{ data.cancelLabel ?? 'Cancel' }}</button>
536
- <button
537
- matButton="filled"
538
- type="button"
539
- [color]="tone === 'danger' ? 'warn' : 'primary'"
540
- (click)="confirm()"
541
- >
542
- {{ data.confirmLabel }}
543
- </button>
544
- </mat-dialog-actions>
545
- `,
546
- styles: ["rb-confirm-dialog{--mat-dialog-headline-padding: 0;--mat-dialog-content-padding: 0;--mat-dialog-with-actions-content-padding: 0;--mat-dialog-actions-padding: var(--rb-space-6);--mat-dialog-subhead-color: var(--rb-color-text-strong);--mat-dialog-subhead-font: var(--rb-font-sans);--mat-dialog-subhead-size: var(--rb-type-title-large-size);--mat-dialog-subhead-line-height: var(--rb-type-title-large-line-height);--mat-dialog-subhead-weight: var(--rb-type-title-large-weight);--mat-dialog-subhead-tracking: var(--rb-type-title-large-tracking);--mat-dialog-supporting-text-color: var(--rb-color-text-muted);--mat-dialog-supporting-text-font: var(--rb-font-sans);--mat-dialog-supporting-text-size: var(--rb-type-body-medium-size);--mat-dialog-supporting-text-line-height: var(--rb-type-body-medium-line-height);--mat-dialog-supporting-text-weight: var(--rb-type-body-medium-weight);--mat-dialog-supporting-text-tracking: var(--rb-type-body-medium-tracking)}rb-confirm-dialog .rb-confirm-dialog__layout{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--rb-space-4);min-height:0;padding:var(--rb-space-6) var(--rb-space-6) 0}@media(width<30rem){rb-confirm-dialog .rb-confirm-dialog__layout{gap:var(--rb-space-3);padding-inline:var(--rb-space-4)}}rb-confirm-dialog .rb-confirm-dialog__icon{display:grid;width:var(--rb-size-touch-target);height:var(--rb-size-touch-target);place-items:center;border-radius:var(--rb-radius-full);background-color:var(--rb-color-primary-soft);color:var(--rb-color-on-primary-soft)}rb-confirm-dialog[data-tone=danger] .rb-confirm-dialog__icon{background-color:var(--rb-color-danger-soft);color:var(--rb-color-danger)}rb-confirm-dialog .rb-confirm-dialog__body{display:grid;gap:var(--rb-space-1);min-width:0}rb-confirm-dialog .rb-confirm-dialog__title{overflow-wrap:anywhere}rb-confirm-dialog .rb-confirm-dialog__content{display:grid;gap:var(--rb-space-5);overflow-wrap:anywhere}rb-confirm-dialog .rb-confirm-dialog__description{margin:0}rb-confirm-dialog .rb-confirm-dialog__actions{gap:var(--rb-space-2);min-height:0}@media(width<30rem){rb-confirm-dialog .rb-confirm-dialog__actions{padding-inline:var(--rb-space-4)}}\n"]
547
- }]
548
- }],
549
- propDecorators: { reasonInput: [{
550
- type: i0.ViewChild,
551
- args: ["reasonInput", { isSignal: true }]
552
- }] }
553
- });
554
- var RbConfirmDialogService = class RbConfirmDialogService {
555
- dialog = inject(MatDialog);
556
- async confirm(data) {
557
- const descriptionId = `${rbConfirmDialogId()}-description`;
558
- const dialogRef = this.dialog.open(RbConfirmDialogComponent, {
559
- data: {
560
- ...data,
561
- descriptionId
562
- },
563
- role: data.tone === "danger" ? "alertdialog" : "dialog",
564
- ariaDescribedBy: descriptionId,
565
- autoFocus: "first-tabbable",
566
- restoreFocus: true,
567
- width: "min(var(--rb-size-card-wide), calc(100vw - 2 * var(--rb-space-4)))",
568
- maxWidth: "100vw",
569
- panelClass: ["rb-confirm-dialog-panel", "rb-scope"]
570
- });
571
- return await firstValueFrom(dialogRef.afterClosed()) ?? { confirmed: false };
572
- }
573
- static ɵfac = i0.ɵɵngDeclareFactory({
574
- minVersion: "12.0.0",
575
- version: "22.2.3",
576
- ngImport: i0,
577
- type: RbConfirmDialogService,
578
- deps: [],
579
- target: i0.ɵɵFactoryTarget.Injectable
580
- });
581
- static ɵprov = i0.ɵɵngDeclareInjectable({
582
- minVersion: "12.0.0",
583
- version: "22.2.3",
584
- ngImport: i0,
585
- type: RbConfirmDialogService,
586
- providedIn: "root"
587
- });
588
- };
589
- i0.ɵɵngDeclareClassMetadata({
590
- minVersion: "12.0.0",
591
- version: "22.2.3",
592
- ngImport: i0,
593
- type: RbConfirmDialogService,
594
- decorators: [{
595
- type: Injectable,
596
- args: [{ providedIn: "root" }]
597
- }]
598
- });
599
- var RbEmptyStateComponent = class RbEmptyStateComponent {
600
- title = input.required(...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
601
- description = input("", ...ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []);
602
- icon = input("inbox", ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
603
- headingLevel = input(3, ...ngDevMode ? [{ debugName: "headingLevel" }] : /* istanbul ignore next */ []);
604
- layout = input("centered", ...ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []);
605
- actionLabel = input("", ...ngDevMode ? [{ debugName: "actionLabel" }] : /* istanbul ignore next */ []);
606
- action = output();
607
- static ɵfac = i0.ɵɵngDeclareFactory({
608
- minVersion: "12.0.0",
609
- version: "22.2.3",
610
- ngImport: i0,
611
- type: RbEmptyStateComponent,
612
- deps: [],
613
- target: i0.ɵɵFactoryTarget.Component
614
- });
615
- static ɵcmp = i0.ɵɵngDeclareComponent({
616
- minVersion: "17.0.0",
617
- version: "22.2.3",
618
- type: RbEmptyStateComponent,
619
- isStandalone: true,
620
- selector: "rb-empty-state",
621
- inputs: {
622
- title: {
623
- classPropertyName: "title",
624
- publicName: "title",
625
- isSignal: true,
626
- isRequired: true,
627
- transformFunction: null
628
- },
629
- description: {
630
- classPropertyName: "description",
631
- publicName: "description",
632
- isSignal: true,
633
- isRequired: false,
634
- transformFunction: null
635
- },
636
- icon: {
637
- classPropertyName: "icon",
638
- publicName: "icon",
639
- isSignal: true,
640
- isRequired: false,
641
- transformFunction: null
642
- },
643
- headingLevel: {
644
- classPropertyName: "headingLevel",
645
- publicName: "headingLevel",
646
- isSignal: true,
647
- isRequired: false,
648
- transformFunction: null
649
- },
650
- layout: {
651
- classPropertyName: "layout",
652
- publicName: "layout",
653
- isSignal: true,
654
- isRequired: false,
655
- transformFunction: null
656
- },
657
- actionLabel: {
658
- classPropertyName: "actionLabel",
659
- publicName: "actionLabel",
660
- isSignal: true,
661
- isRequired: false,
662
- transformFunction: null
663
- }
664
- },
665
- outputs: { action: "action" },
666
- host: {
667
- properties: {
668
- "attr.title": "null",
669
- "attr.data-layout": "layout()"
670
- },
671
- classAttribute: "rb-empty-state"
672
- },
673
- ngImport: i0,
674
- template: `
675
- <mat-icon class="rb-empty-state__icon" fontSet="material-symbols-outlined" aria-hidden="true">{{
676
- icon()
677
- }}</mat-icon>
678
- <div class="rb-empty-state__copy">
679
- @switch (headingLevel()) {
680
- @case (2) {
681
- <h2 class="rb-empty-state__title">{{ title() }}</h2>
682
- }
683
- @case (4) {
684
- <h4 class="rb-empty-state__title">{{ title() }}</h4>
685
- }
686
- @case (5) {
687
- <h5 class="rb-empty-state__title">{{ title() }}</h5>
688
- }
689
- @case (6) {
690
- <h6 class="rb-empty-state__title">{{ title() }}</h6>
691
- }
692
- @default {
693
- <h3 class="rb-empty-state__title">{{ title() }}</h3>
694
- }
695
- }
696
- @if (description()) {
697
- <p class="rb-empty-state__description">{{ description() }}</p>
698
- }
699
- <div class="rb-empty-state__actions">
700
- @if (actionLabel()) {
701
- <button matButton="outlined" type="button" (click)="action.emit()">
702
- {{ actionLabel() }}
703
- </button>
704
- }
705
- <ng-content select="[rbActions]" />
706
- </div>
707
- </div>
708
- `,
709
- isInline: true,
710
- styles: ["rb-empty-state{display:flex;flex-direction:column;gap:var(--rb-space-3);align-items:center;min-width:0;padding:var(--rb-space-8) var(--rb-space-4);color:var(--rb-color-text-muted);text-align:center}rb-empty-state .rb-empty-state__icon{flex:none;width:var(--rb-space-10);height:var(--rb-space-10);color:var(--rb-color-primary);font-size:var(--rb-space-10)}rb-empty-state .rb-empty-state__copy{display:grid;gap:var(--rb-space-2);justify-items:center;min-width:0;max-width:30rem}rb-empty-state .rb-empty-state__title{margin:0;color:var(--rb-color-text-strong);font:var(--rb-type-title-medium);letter-spacing:var(--rb-type-title-medium-tracking);overflow-wrap:anywhere}rb-empty-state .rb-empty-state__description{margin:0;font:var(--rb-type-body-medium);overflow-wrap:anywhere}rb-empty-state .rb-empty-state__actions{display:flex;flex-wrap:wrap;gap:var(--rb-space-2);justify-content:center;margin-block-start:var(--rb-space-2)}rb-empty-state .rb-empty-state__actions:empty{display:none}rb-empty-state[data-layout=inline]{flex-direction:row;gap:var(--rb-space-3);align-items:flex-start;padding:var(--rb-space-4);border:1px dashed var(--rb-color-border-strong);border-radius:var(--rb-radius-md);background-color:var(--rb-color-surface-sunken);text-align:start}rb-empty-state[data-layout=inline] .rb-empty-state__icon{width:var(--rb-size-icon-lg);height:var(--rb-size-icon-lg);font-size:var(--rb-size-icon-lg)}rb-empty-state[data-layout=inline] .rb-empty-state__copy{gap:var(--rb-space-1);justify-items:start;max-width:none}rb-empty-state[data-layout=inline] .rb-empty-state__title{font:var(--rb-type-title-small);letter-spacing:var(--rb-type-title-small-tracking)}rb-empty-state[data-layout=inline] .rb-empty-state__actions{justify-content:flex-start}\n"],
711
- dependencies: [{
712
- kind: "component",
713
- type: MatButton,
714
- selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ",
715
- inputs: ["matButton"],
716
- exportAs: ["matButton", "matAnchor"]
717
- }, {
718
- kind: "component",
719
- type: MatIcon,
720
- selector: "mat-icon",
721
- inputs: [
722
- "color",
723
- "inline",
724
- "svgIcon",
725
- "fontSet",
726
- "fontIcon"
727
- ],
728
- exportAs: ["matIcon"]
729
- }],
730
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
731
- encapsulation: i0.ViewEncapsulation.None
732
- });
733
- };
734
- i0.ɵɵngDeclareClassMetadata({
735
- minVersion: "12.0.0",
736
- version: "22.2.3",
737
- ngImport: i0,
738
- type: RbEmptyStateComponent,
739
- decorators: [{
740
- type: Component,
741
- args: [{
742
- selector: "rb-empty-state",
743
- imports: [MatButton, MatIcon],
744
- changeDetection: ChangeDetectionStrategy.OnPush,
745
- encapsulation: ViewEncapsulation.None,
746
- host: {
747
- class: "rb-empty-state",
748
- "[attr.title]": "null",
749
- "[attr.data-layout]": "layout()"
750
- },
751
- template: `
752
- <mat-icon class="rb-empty-state__icon" fontSet="material-symbols-outlined" aria-hidden="true">{{
753
- icon()
754
- }}</mat-icon>
755
- <div class="rb-empty-state__copy">
756
- @switch (headingLevel()) {
757
- @case (2) {
758
- <h2 class="rb-empty-state__title">{{ title() }}</h2>
759
- }
760
- @case (4) {
761
- <h4 class="rb-empty-state__title">{{ title() }}</h4>
762
- }
763
- @case (5) {
764
- <h5 class="rb-empty-state__title">{{ title() }}</h5>
765
- }
766
- @case (6) {
767
- <h6 class="rb-empty-state__title">{{ title() }}</h6>
768
- }
769
- @default {
770
- <h3 class="rb-empty-state__title">{{ title() }}</h3>
771
- }
772
- }
773
- @if (description()) {
774
- <p class="rb-empty-state__description">{{ description() }}</p>
775
- }
776
- <div class="rb-empty-state__actions">
777
- @if (actionLabel()) {
778
- <button matButton="outlined" type="button" (click)="action.emit()">
779
- {{ actionLabel() }}
780
- </button>
781
- }
782
- <ng-content select="[rbActions]" />
783
- </div>
784
- </div>
785
- `,
786
- styles: ["rb-empty-state{display:flex;flex-direction:column;gap:var(--rb-space-3);align-items:center;min-width:0;padding:var(--rb-space-8) var(--rb-space-4);color:var(--rb-color-text-muted);text-align:center}rb-empty-state .rb-empty-state__icon{flex:none;width:var(--rb-space-10);height:var(--rb-space-10);color:var(--rb-color-primary);font-size:var(--rb-space-10)}rb-empty-state .rb-empty-state__copy{display:grid;gap:var(--rb-space-2);justify-items:center;min-width:0;max-width:30rem}rb-empty-state .rb-empty-state__title{margin:0;color:var(--rb-color-text-strong);font:var(--rb-type-title-medium);letter-spacing:var(--rb-type-title-medium-tracking);overflow-wrap:anywhere}rb-empty-state .rb-empty-state__description{margin:0;font:var(--rb-type-body-medium);overflow-wrap:anywhere}rb-empty-state .rb-empty-state__actions{display:flex;flex-wrap:wrap;gap:var(--rb-space-2);justify-content:center;margin-block-start:var(--rb-space-2)}rb-empty-state .rb-empty-state__actions:empty{display:none}rb-empty-state[data-layout=inline]{flex-direction:row;gap:var(--rb-space-3);align-items:flex-start;padding:var(--rb-space-4);border:1px dashed var(--rb-color-border-strong);border-radius:var(--rb-radius-md);background-color:var(--rb-color-surface-sunken);text-align:start}rb-empty-state[data-layout=inline] .rb-empty-state__icon{width:var(--rb-size-icon-lg);height:var(--rb-size-icon-lg);font-size:var(--rb-size-icon-lg)}rb-empty-state[data-layout=inline] .rb-empty-state__copy{gap:var(--rb-space-1);justify-items:start;max-width:none}rb-empty-state[data-layout=inline] .rb-empty-state__title{font:var(--rb-type-title-small);letter-spacing:var(--rb-type-title-small-tracking)}rb-empty-state[data-layout=inline] .rb-empty-state__actions{justify-content:flex-start}\n"]
787
- }]
788
- }],
789
- propDecorators: {
790
- title: [{
791
- type: i0.Input,
792
- args: [{
793
- isSignal: true,
794
- alias: "title",
795
- required: true
796
- }]
797
- }],
798
- description: [{
799
- type: i0.Input,
800
- args: [{
801
- isSignal: true,
802
- alias: "description",
803
- required: false
804
- }]
805
- }],
806
- icon: [{
807
- type: i0.Input,
808
- args: [{
809
- isSignal: true,
810
- alias: "icon",
811
- required: false
812
- }]
813
- }],
814
- headingLevel: [{
815
- type: i0.Input,
816
- args: [{
817
- isSignal: true,
818
- alias: "headingLevel",
819
- required: false
820
- }]
821
- }],
822
- layout: [{
823
- type: i0.Input,
824
- args: [{
825
- isSignal: true,
826
- alias: "layout",
827
- required: false
828
- }]
829
- }],
830
- actionLabel: [{
831
- type: i0.Input,
832
- args: [{
833
- isSignal: true,
834
- alias: "actionLabel",
835
- required: false
836
- }]
837
- }],
838
- action: [{
839
- type: i0.Output,
840
- args: ["action"]
841
- }]
842
- }
843
- });
844
- const RB_TONE_ICONS = {
845
- neutral: null,
846
- info: "info",
847
- active: "autorenew",
848
- success: "check_circle",
849
- warning: "warning",
850
- danger: "error"
851
- };
852
- const RB_MESSAGE_TONE_LABELS = {
853
- neutral: null,
854
- info: "Information",
855
- success: "Success",
856
- warning: "Warning",
857
- danger: "Error"
858
- };
859
- var RbMessageComponent = class RbMessageComponent {
860
- tone = input("neutral", ...ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []);
861
- title = input("", ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
862
- icon = input("", ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
863
- live = input("auto", ...ngDevMode ? [{ debugName: "live" }] : /* istanbul ignore next */ []);
864
- resolvedIcon = computed(() => this.icon() || RB_TONE_ICONS[this.tone()] || "info", ...ngDevMode ? [{ debugName: "resolvedIcon" }] : /* istanbul ignore next */ []);
865
- toneLabel = computed(() => RB_MESSAGE_TONE_LABELS[this.tone()], ...ngDevMode ? [{ debugName: "toneLabel" }] : /* istanbul ignore next */ []);
866
- politeness = computed(() => {
867
- const live = this.live();
868
- if (live !== "auto") return live;
869
- return this.tone() === "danger" ? "assertive" : "polite";
870
- }, ...ngDevMode ? [{ debugName: "politeness" }] : /* istanbul ignore next */ []);
871
- role = computed(() => {
872
- const politeness = this.politeness();
873
- if (politeness === "off") return null;
874
- return politeness === "assertive" ? "alert" : "status";
875
- }, ...ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []);
876
- ariaLive = computed(() => {
877
- const politeness = this.politeness();
878
- return politeness === "off" ? null : politeness;
879
- }, ...ngDevMode ? [{ debugName: "ariaLive" }] : /* istanbul ignore next */ []);
880
- static ɵfac = i0.ɵɵngDeclareFactory({
881
- minVersion: "12.0.0",
882
- version: "22.2.3",
883
- ngImport: i0,
884
- type: RbMessageComponent,
885
- deps: [],
886
- target: i0.ɵɵFactoryTarget.Component
887
- });
888
- static ɵcmp = i0.ɵɵngDeclareComponent({
889
- minVersion: "17.0.0",
890
- version: "22.2.3",
891
- type: RbMessageComponent,
892
- isStandalone: true,
893
- selector: "rb-message",
894
- inputs: {
895
- tone: {
896
- classPropertyName: "tone",
897
- publicName: "tone",
898
- isSignal: true,
899
- isRequired: false,
900
- transformFunction: null
901
- },
902
- title: {
903
- classPropertyName: "title",
904
- publicName: "title",
905
- isSignal: true,
906
- isRequired: false,
907
- transformFunction: null
908
- },
909
- icon: {
910
- classPropertyName: "icon",
911
- publicName: "icon",
912
- isSignal: true,
913
- isRequired: false,
914
- transformFunction: null
915
- },
916
- live: {
917
- classPropertyName: "live",
918
- publicName: "live",
919
- isSignal: true,
920
- isRequired: false,
921
- transformFunction: null
922
- }
923
- },
924
- host: {
925
- properties: {
926
- "attr.title": "null",
927
- "attr.data-tone": "tone()",
928
- "attr.role": "role()",
929
- "attr.aria-live": "ariaLive()"
930
- },
931
- classAttribute: "rb-message"
932
- },
933
- ngImport: i0,
934
- template: `
935
- <mat-icon class="rb-message__icon" fontSet="material-symbols-outlined" aria-hidden="true">{{
936
- resolvedIcon()
937
- }}</mat-icon>
938
- <div class="rb-message__copy">
939
- @if (title()) {
940
- <p class="rb-message__title">
941
- @if (toneLabel()) {
942
- <span class="rb-visually-hidden">{{ toneLabel() }}: </span>
943
- }
944
- {{ title() }}
945
- </p>
946
- } @else if (toneLabel()) {
947
- <span class="rb-visually-hidden">{{ toneLabel() }}: </span>
948
- }
949
- <div class="rb-message__body"><ng-content /></div>
950
- </div>
951
- `,
952
- isInline: true,
953
- styles: ["rb-message{display:flex;gap:var(--rb-space-3);align-items:flex-start;min-width:0;padding:var(--rb-space-3) var(--rb-space-4);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-md);background-color:var(--rb-color-surface-sunken);color:var(--rb-color-text);font:var(--rb-type-body-medium);letter-spacing:var(--rb-type-body-medium-tracking)}rb-message[data-tone=info]{border-color:var(--rb-color-info-border);background-color:var(--rb-color-info-soft);color:var(--rb-color-info)}rb-message[data-tone=success]{border-color:var(--rb-color-success-border);background-color:var(--rb-color-success-soft);color:var(--rb-color-success)}rb-message[data-tone=warning]{border-color:var(--rb-color-warning-border);background-color:var(--rb-color-warning-soft);color:var(--rb-color-warning)}rb-message[data-tone=danger]{border-color:var(--rb-color-danger-border);background-color:var(--rb-color-danger-soft);color:var(--rb-color-danger)}rb-message .rb-message__icon{flex:none;width:var(--rb-size-icon-md);height:var(--rb-size-icon-md);font-size:var(--rb-size-icon-md)}rb-message .rb-message__copy{display:grid;flex:1 1 auto;gap:var(--rb-space-1);min-width:0}rb-message .rb-message__title{margin:0;font-weight:var(--rb-font-weight-semibold)}rb-message .rb-message__body{min-width:0;overflow-wrap:anywhere}rb-message .rb-message__body:empty{display:none}rb-message .rb-message__body>:where(p,ul,ol){margin:0}rb-message .rb-message__body>*+*{margin-block-start:var(--rb-space-2)}rb-message .rb-message__body a{color:inherit;font-weight:var(--rb-font-weight-semibold)}\n"],
954
- dependencies: [{
955
- kind: "component",
956
- type: MatIcon,
957
- selector: "mat-icon",
958
- inputs: [
959
- "color",
960
- "inline",
961
- "svgIcon",
962
- "fontSet",
963
- "fontIcon"
964
- ],
965
- exportAs: ["matIcon"]
966
- }],
967
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
968
- encapsulation: i0.ViewEncapsulation.None
969
- });
970
- };
971
- i0.ɵɵngDeclareClassMetadata({
972
- minVersion: "12.0.0",
973
- version: "22.2.3",
974
- ngImport: i0,
975
- type: RbMessageComponent,
976
- decorators: [{
977
- type: Component,
978
- args: [{
979
- selector: "rb-message",
980
- imports: [MatIcon],
981
- changeDetection: ChangeDetectionStrategy.OnPush,
982
- encapsulation: ViewEncapsulation.None,
983
- host: {
984
- class: "rb-message",
985
- "[attr.title]": "null",
986
- "[attr.data-tone]": "tone()",
987
- "[attr.role]": "role()",
988
- "[attr.aria-live]": "ariaLive()"
989
- },
990
- template: `
991
- <mat-icon class="rb-message__icon" fontSet="material-symbols-outlined" aria-hidden="true">{{
992
- resolvedIcon()
993
- }}</mat-icon>
994
- <div class="rb-message__copy">
995
- @if (title()) {
996
- <p class="rb-message__title">
997
- @if (toneLabel()) {
998
- <span class="rb-visually-hidden">{{ toneLabel() }}: </span>
999
- }
1000
- {{ title() }}
1001
- </p>
1002
- } @else if (toneLabel()) {
1003
- <span class="rb-visually-hidden">{{ toneLabel() }}: </span>
1004
- }
1005
- <div class="rb-message__body"><ng-content /></div>
1006
- </div>
1007
- `,
1008
- styles: ["rb-message{display:flex;gap:var(--rb-space-3);align-items:flex-start;min-width:0;padding:var(--rb-space-3) var(--rb-space-4);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-md);background-color:var(--rb-color-surface-sunken);color:var(--rb-color-text);font:var(--rb-type-body-medium);letter-spacing:var(--rb-type-body-medium-tracking)}rb-message[data-tone=info]{border-color:var(--rb-color-info-border);background-color:var(--rb-color-info-soft);color:var(--rb-color-info)}rb-message[data-tone=success]{border-color:var(--rb-color-success-border);background-color:var(--rb-color-success-soft);color:var(--rb-color-success)}rb-message[data-tone=warning]{border-color:var(--rb-color-warning-border);background-color:var(--rb-color-warning-soft);color:var(--rb-color-warning)}rb-message[data-tone=danger]{border-color:var(--rb-color-danger-border);background-color:var(--rb-color-danger-soft);color:var(--rb-color-danger)}rb-message .rb-message__icon{flex:none;width:var(--rb-size-icon-md);height:var(--rb-size-icon-md);font-size:var(--rb-size-icon-md)}rb-message .rb-message__copy{display:grid;flex:1 1 auto;gap:var(--rb-space-1);min-width:0}rb-message .rb-message__title{margin:0;font-weight:var(--rb-font-weight-semibold)}rb-message .rb-message__body{min-width:0;overflow-wrap:anywhere}rb-message .rb-message__body:empty{display:none}rb-message .rb-message__body>:where(p,ul,ol){margin:0}rb-message .rb-message__body>*+*{margin-block-start:var(--rb-space-2)}rb-message .rb-message__body a{color:inherit;font-weight:var(--rb-font-weight-semibold)}\n"]
1009
- }]
1010
- }],
1011
- propDecorators: {
1012
- tone: [{
1013
- type: i0.Input,
1014
- args: [{
1015
- isSignal: true,
1016
- alias: "tone",
1017
- required: false
1018
- }]
1019
- }],
1020
- title: [{
1021
- type: i0.Input,
1022
- args: [{
1023
- isSignal: true,
1024
- alias: "title",
1025
- required: false
1026
- }]
1027
- }],
1028
- icon: [{
1029
- type: i0.Input,
1030
- args: [{
1031
- isSignal: true,
1032
- alias: "icon",
1033
- required: false
1034
- }]
1035
- }],
1036
- live: [{
1037
- type: i0.Input,
1038
- args: [{
1039
- isSignal: true,
1040
- alias: "live",
1041
- required: false
1042
- }]
1043
- }]
1044
- }
1045
- });
1046
- var RbPageHeaderComponent = class RbPageHeaderComponent {
1047
- title = input.required(...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
1048
- eyebrow = input("", ...ngDevMode ? [{ debugName: "eyebrow" }] : /* istanbul ignore next */ []);
1049
- description = input("", ...ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []);
1050
- metrics = input([], ...ngDevMode ? [{ debugName: "metrics" }] : /* istanbul ignore next */ []);
1051
- toneIcon(metric) {
1052
- return RB_TONE_ICONS[metric.tone ?? "neutral"];
1053
- }
1054
- static ɵfac = i0.ɵɵngDeclareFactory({
1055
- minVersion: "12.0.0",
1056
- version: "22.2.3",
1057
- ngImport: i0,
1058
- type: RbPageHeaderComponent,
1059
- deps: [],
1060
- target: i0.ɵɵFactoryTarget.Component
1061
- });
1062
- static ɵcmp = i0.ɵɵngDeclareComponent({
1063
- minVersion: "17.0.0",
1064
- version: "22.2.3",
1065
- type: RbPageHeaderComponent,
1066
- isStandalone: true,
1067
- selector: "rb-page-header",
1068
- inputs: {
1069
- title: {
1070
- classPropertyName: "title",
1071
- publicName: "title",
1072
- isSignal: true,
1073
- isRequired: true,
1074
- transformFunction: null
1075
- },
1076
- eyebrow: {
1077
- classPropertyName: "eyebrow",
1078
- publicName: "eyebrow",
1079
- isSignal: true,
1080
- isRequired: false,
1081
- transformFunction: null
1082
- },
1083
- description: {
1084
- classPropertyName: "description",
1085
- publicName: "description",
1086
- isSignal: true,
1087
- isRequired: false,
1088
- transformFunction: null
1089
- },
1090
- metrics: {
1091
- classPropertyName: "metrics",
1092
- publicName: "metrics",
1093
- isSignal: true,
1094
- isRequired: false,
1095
- transformFunction: null
1096
- }
1097
- },
1098
- host: {
1099
- properties: { "attr.title": "null" },
1100
- classAttribute: "rb-page-header"
1101
- },
1102
- ngImport: i0,
1103
- template: `
1104
- <header class="rb-page-header__main">
1105
- <div class="rb-page-header__copy">
1106
- @if (eyebrow()) {
1107
- <p class="rb-page-header__eyebrow">{{ eyebrow() }}</p>
1108
- }
1109
- <h1 class="rb-page-header__title">{{ title() }}</h1>
1110
- @if (description()) {
1111
- <p class="rb-page-header__description">{{ description() }}</p>
1112
- }
1113
- </div>
1114
- <div class="rb-page-header__actions"><ng-content select="[rbActions]" /></div>
1115
- </header>
1116
- @if (metrics().length > 0) {
1117
- <dl class="rb-page-header__metrics">
1118
- @for (metric of metrics(); track metric.label) {
1119
- <div class="rb-page-header__metric" [attr.data-tone]="metric.tone ?? 'neutral'">
1120
- <dt class="rb-page-header__metric-label">{{ metric.label }}</dt>
1121
- <dd class="rb-page-header__metric-value">
1122
- @if (toneIcon(metric); as icon) {
1123
- <mat-icon fontSet="material-symbols-outlined" aria-hidden="true">{{
1124
- icon
1125
- }}</mat-icon>
1126
- }
1127
- <span>{{ metric.value }}</span>
1128
- </dd>
1129
- </div>
1130
- }
1131
- </dl>
1132
- }
1133
- `,
1134
- isInline: true,
1135
- styles: ["rb-page-header{display:grid;gap:var(--rb-space-5);min-width:0}rb-page-header .rb-page-header__main{display:flex;gap:var(--rb-space-5);align-items:flex-start;justify-content:space-between;min-width:0}@media(width<40rem){rb-page-header .rb-page-header__main{flex-direction:column;gap:var(--rb-space-4)}}rb-page-header .rb-page-header__copy{display:grid;gap:var(--rb-space-2);min-width:0;max-width:48rem}rb-page-header .rb-page-header__eyebrow{margin:0;color:var(--rb-color-primary);font:var(--rb-type-label-small);letter-spacing:var(--rb-type-label-small-tracking);text-transform:uppercase}rb-page-header .rb-page-header__title{margin:0;color:var(--rb-color-text-strong);font:var(--rb-type-page-title);letter-spacing:var(--rb-type-page-title-tracking);overflow-wrap:anywhere}rb-page-header .rb-page-header__description{margin:0;color:var(--rb-color-text-muted);font:var(--rb-type-body-large)}rb-page-header .rb-page-header__actions{display:flex;flex:none;flex-wrap:wrap;gap:var(--rb-space-2);align-items:center;justify-content:flex-end}@media(width<40rem){rb-page-header .rb-page-header__actions{justify-content:flex-start}}rb-page-header .rb-page-header__actions:empty{display:none}rb-page-header .rb-page-header__metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,9rem),1fr));gap:var(--rb-space-3);margin:0}rb-page-header .rb-page-header__metric{display:grid;gap:var(--rb-space-1);align-content:start;min-width:0;padding:var(--rb-space-3) var(--rb-space-4);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-md);background-color:var(--rb-color-surface)}rb-page-header .rb-page-header__metric-label{color:var(--rb-color-text-subtle);font:var(--rb-type-label-small);letter-spacing:var(--rb-type-label-small-tracking);text-transform:uppercase}rb-page-header .rb-page-header__metric-value{display:flex;gap:var(--rb-space-2);align-items:center;min-width:0;margin:0;color:var(--rb-color-text-strong);font:var(--rb-type-title-large);letter-spacing:var(--rb-type-title-large-tracking);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}rb-page-header .rb-page-header__metric-value .mat-icon{flex:none;width:var(--rb-size-icon-md);height:var(--rb-size-icon-md);font-size:var(--rb-size-icon-md)}rb-page-header .rb-page-header__metric[data-tone=active]{border-color:var(--rb-color-info-border)}rb-page-header .rb-page-header__metric[data-tone=active] .mat-icon{color:var(--rb-color-info)}rb-page-header .rb-page-header__metric[data-tone=success]{border-color:var(--rb-color-success-border)}rb-page-header .rb-page-header__metric[data-tone=success] .mat-icon{color:var(--rb-color-success)}rb-page-header .rb-page-header__metric[data-tone=warning]{border-color:var(--rb-color-warning-border)}rb-page-header .rb-page-header__metric[data-tone=warning] .mat-icon{color:var(--rb-color-warning)}rb-page-header .rb-page-header__metric[data-tone=danger]{border-color:var(--rb-color-danger-border)}rb-page-header .rb-page-header__metric[data-tone=danger] .mat-icon{color:var(--rb-color-danger)}\n"],
1136
- dependencies: [{
1137
- kind: "component",
1138
- type: MatIcon,
1139
- selector: "mat-icon",
1140
- inputs: [
1141
- "color",
1142
- "inline",
1143
- "svgIcon",
1144
- "fontSet",
1145
- "fontIcon"
1146
- ],
1147
- exportAs: ["matIcon"]
1148
- }],
1149
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
1150
- encapsulation: i0.ViewEncapsulation.None
1151
- });
1152
- };
1153
- i0.ɵɵngDeclareClassMetadata({
1154
- minVersion: "12.0.0",
1155
- version: "22.2.3",
1156
- ngImport: i0,
1157
- type: RbPageHeaderComponent,
1158
- decorators: [{
1159
- type: Component,
1160
- args: [{
1161
- selector: "rb-page-header",
1162
- imports: [MatIcon],
1163
- changeDetection: ChangeDetectionStrategy.OnPush,
1164
- encapsulation: ViewEncapsulation.None,
1165
- host: {
1166
- class: "rb-page-header",
1167
- "[attr.title]": "null"
1168
- },
1169
- template: `
1170
- <header class="rb-page-header__main">
1171
- <div class="rb-page-header__copy">
1172
- @if (eyebrow()) {
1173
- <p class="rb-page-header__eyebrow">{{ eyebrow() }}</p>
1174
- }
1175
- <h1 class="rb-page-header__title">{{ title() }}</h1>
1176
- @if (description()) {
1177
- <p class="rb-page-header__description">{{ description() }}</p>
1178
- }
1179
- </div>
1180
- <div class="rb-page-header__actions"><ng-content select="[rbActions]" /></div>
1181
- </header>
1182
- @if (metrics().length > 0) {
1183
- <dl class="rb-page-header__metrics">
1184
- @for (metric of metrics(); track metric.label) {
1185
- <div class="rb-page-header__metric" [attr.data-tone]="metric.tone ?? 'neutral'">
1186
- <dt class="rb-page-header__metric-label">{{ metric.label }}</dt>
1187
- <dd class="rb-page-header__metric-value">
1188
- @if (toneIcon(metric); as icon) {
1189
- <mat-icon fontSet="material-symbols-outlined" aria-hidden="true">{{
1190
- icon
1191
- }}</mat-icon>
1192
- }
1193
- <span>{{ metric.value }}</span>
1194
- </dd>
1195
- </div>
1196
- }
1197
- </dl>
1198
- }
1199
- `,
1200
- styles: ["rb-page-header{display:grid;gap:var(--rb-space-5);min-width:0}rb-page-header .rb-page-header__main{display:flex;gap:var(--rb-space-5);align-items:flex-start;justify-content:space-between;min-width:0}@media(width<40rem){rb-page-header .rb-page-header__main{flex-direction:column;gap:var(--rb-space-4)}}rb-page-header .rb-page-header__copy{display:grid;gap:var(--rb-space-2);min-width:0;max-width:48rem}rb-page-header .rb-page-header__eyebrow{margin:0;color:var(--rb-color-primary);font:var(--rb-type-label-small);letter-spacing:var(--rb-type-label-small-tracking);text-transform:uppercase}rb-page-header .rb-page-header__title{margin:0;color:var(--rb-color-text-strong);font:var(--rb-type-page-title);letter-spacing:var(--rb-type-page-title-tracking);overflow-wrap:anywhere}rb-page-header .rb-page-header__description{margin:0;color:var(--rb-color-text-muted);font:var(--rb-type-body-large)}rb-page-header .rb-page-header__actions{display:flex;flex:none;flex-wrap:wrap;gap:var(--rb-space-2);align-items:center;justify-content:flex-end}@media(width<40rem){rb-page-header .rb-page-header__actions{justify-content:flex-start}}rb-page-header .rb-page-header__actions:empty{display:none}rb-page-header .rb-page-header__metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,9rem),1fr));gap:var(--rb-space-3);margin:0}rb-page-header .rb-page-header__metric{display:grid;gap:var(--rb-space-1);align-content:start;min-width:0;padding:var(--rb-space-3) var(--rb-space-4);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-md);background-color:var(--rb-color-surface)}rb-page-header .rb-page-header__metric-label{color:var(--rb-color-text-subtle);font:var(--rb-type-label-small);letter-spacing:var(--rb-type-label-small-tracking);text-transform:uppercase}rb-page-header .rb-page-header__metric-value{display:flex;gap:var(--rb-space-2);align-items:center;min-width:0;margin:0;color:var(--rb-color-text-strong);font:var(--rb-type-title-large);letter-spacing:var(--rb-type-title-large-tracking);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}rb-page-header .rb-page-header__metric-value .mat-icon{flex:none;width:var(--rb-size-icon-md);height:var(--rb-size-icon-md);font-size:var(--rb-size-icon-md)}rb-page-header .rb-page-header__metric[data-tone=active]{border-color:var(--rb-color-info-border)}rb-page-header .rb-page-header__metric[data-tone=active] .mat-icon{color:var(--rb-color-info)}rb-page-header .rb-page-header__metric[data-tone=success]{border-color:var(--rb-color-success-border)}rb-page-header .rb-page-header__metric[data-tone=success] .mat-icon{color:var(--rb-color-success)}rb-page-header .rb-page-header__metric[data-tone=warning]{border-color:var(--rb-color-warning-border)}rb-page-header .rb-page-header__metric[data-tone=warning] .mat-icon{color:var(--rb-color-warning)}rb-page-header .rb-page-header__metric[data-tone=danger]{border-color:var(--rb-color-danger-border)}rb-page-header .rb-page-header__metric[data-tone=danger] .mat-icon{color:var(--rb-color-danger)}\n"]
1201
- }]
1202
- }],
1203
- propDecorators: {
1204
- title: [{
1205
- type: i0.Input,
1206
- args: [{
1207
- isSignal: true,
1208
- alias: "title",
1209
- required: true
1210
- }]
1211
- }],
1212
- eyebrow: [{
1213
- type: i0.Input,
1214
- args: [{
1215
- isSignal: true,
1216
- alias: "eyebrow",
1217
- required: false
1218
- }]
1219
- }],
1220
- description: [{
1221
- type: i0.Input,
1222
- args: [{
1223
- isSignal: true,
1224
- alias: "description",
1225
- required: false
1226
- }]
1227
- }],
1228
- metrics: [{
1229
- type: i0.Input,
1230
- args: [{
1231
- isSignal: true,
1232
- alias: "metrics",
1233
- required: false
1234
- }]
1235
- }]
1236
- }
1237
- });
1238
- var RbPanelComponent = class RbPanelComponent {
1239
- title = input("", ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
1240
- description = input("", ...ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []);
1241
- variant = input("default", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
1242
- headingLevel = input(2, ...ngDevMode ? [{ debugName: "headingLevel" }] : /* istanbul ignore next */ []);
1243
- flush = input(false, {
1244
- ...ngDevMode ? { debugName: "flush" } : /* istanbul ignore next */ {},
1245
- transform: booleanAttribute
1246
- });
1247
- static ɵfac = i0.ɵɵngDeclareFactory({
1248
- minVersion: "12.0.0",
1249
- version: "22.2.3",
1250
- ngImport: i0,
1251
- type: RbPanelComponent,
1252
- deps: [],
1253
- target: i0.ɵɵFactoryTarget.Component
1254
- });
1255
- static ɵcmp = i0.ɵɵngDeclareComponent({
1256
- minVersion: "17.0.0",
1257
- version: "22.2.3",
1258
- type: RbPanelComponent,
1259
- isStandalone: true,
1260
- selector: "rb-panel",
1261
- inputs: {
1262
- title: {
1263
- classPropertyName: "title",
1264
- publicName: "title",
1265
- isSignal: true,
1266
- isRequired: false,
1267
- transformFunction: null
1268
- },
1269
- description: {
1270
- classPropertyName: "description",
1271
- publicName: "description",
1272
- isSignal: true,
1273
- isRequired: false,
1274
- transformFunction: null
1275
- },
1276
- variant: {
1277
- classPropertyName: "variant",
1278
- publicName: "variant",
1279
- isSignal: true,
1280
- isRequired: false,
1281
- transformFunction: null
1282
- },
1283
- headingLevel: {
1284
- classPropertyName: "headingLevel",
1285
- publicName: "headingLevel",
1286
- isSignal: true,
1287
- isRequired: false,
1288
- transformFunction: null
1289
- },
1290
- flush: {
1291
- classPropertyName: "flush",
1292
- publicName: "flush",
1293
- isSignal: true,
1294
- isRequired: false,
1295
- transformFunction: null
1296
- }
1297
- },
1298
- host: {
1299
- properties: {
1300
- "attr.title": "null",
1301
- "attr.data-variant": "variant()",
1302
- "attr.data-flush": "flush() ? \"\" : null"
1303
- },
1304
- classAttribute: "rb-panel"
1305
- },
1306
- ngImport: i0,
1307
- template: `
1308
- @if (title() || description()) {
1309
- <header class="rb-panel__header">
1310
- <div class="rb-panel__heading">
1311
- @if (title()) {
1312
- @switch (headingLevel()) {
1313
- @case (3) {
1314
- <h3 class="rb-panel__title">{{ title() }}</h3>
1315
- }
1316
- @case (4) {
1317
- <h4 class="rb-panel__title">{{ title() }}</h4>
1318
- }
1319
- @case (5) {
1320
- <h5 class="rb-panel__title">{{ title() }}</h5>
1321
- }
1322
- @case (6) {
1323
- <h6 class="rb-panel__title">{{ title() }}</h6>
1324
- }
1325
- @default {
1326
- <h2 class="rb-panel__title">{{ title() }}</h2>
1327
- }
1328
- }
1329
- }
1330
- @if (description()) {
1331
- <p class="rb-panel__description">{{ description() }}</p>
1332
- }
1333
- </div>
1334
- <div class="rb-panel__actions"><ng-content select="[rbActions]" /></div>
1335
- </header>
1336
- }
1337
- <div class="rb-panel__body"><ng-content /></div>
1338
- `,
1339
- isInline: true,
1340
- styles: ["rb-panel{display:block;min-width:0;border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-lg);background-color:var(--rb-color-surface);color:var(--rb-color-text);box-shadow:var(--rb-elevation-1)}rb-panel[data-variant=soft]{background-color:var(--rb-color-surface-sunken);box-shadow:var(--rb-elevation-0)}rb-panel[data-variant=elevated]{border-color:transparent;background-color:var(--rb-color-surface-raised);box-shadow:var(--rb-elevation-2)}rb-panel[data-variant=danger]{border-color:var(--rb-color-danger-border)}rb-panel[data-variant=danger] .rb-panel__title{color:var(--rb-color-danger)}rb-panel .rb-panel__header{display:flex;gap:var(--rb-space-4);align-items:flex-start;justify-content:space-between;padding:var(--rb-space-5) var(--rb-space-6);border-block-end:1px solid var(--rb-color-border)}@media(width<40rem){rb-panel .rb-panel__header{flex-direction:column;gap:var(--rb-space-3);padding:var(--rb-space-4)}}rb-panel[data-variant=danger] .rb-panel__header{border-block-end-color:var(--rb-color-danger-border)}rb-panel .rb-panel__heading{display:grid;gap:var(--rb-space-1);min-width:0}rb-panel .rb-panel__title{margin:0;color:var(--rb-color-text-strong);font:var(--rb-type-title-medium);letter-spacing:var(--rb-type-title-medium-tracking);overflow-wrap:anywhere}rb-panel .rb-panel__description{margin:0;color:var(--rb-color-text-muted);font:var(--rb-type-body-medium)}rb-panel .rb-panel__actions{display:flex;flex:none;flex-wrap:wrap;gap:var(--rb-space-2);align-items:center}rb-panel .rb-panel__actions:empty{display:none}rb-panel .rb-panel__body{min-width:0;padding:var(--rb-space-6)}@media(width<40rem){rb-panel .rb-panel__body{padding:var(--rb-space-4)}}rb-panel[data-flush] .rb-panel__body{padding:0}rb-panel[data-flush] .rb-panel__body>.rb-table-scroll{border:0;border-radius:0 0 var(--rb-radius-lg) var(--rb-radius-lg);background-color:transparent}\n"],
1341
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
1342
- encapsulation: i0.ViewEncapsulation.None
1343
- });
1344
- };
1345
- i0.ɵɵngDeclareClassMetadata({
1346
- minVersion: "12.0.0",
1347
- version: "22.2.3",
1348
- ngImport: i0,
1349
- type: RbPanelComponent,
1350
- decorators: [{
1351
- type: Component,
1352
- args: [{
1353
- selector: "rb-panel",
1354
- changeDetection: ChangeDetectionStrategy.OnPush,
1355
- encapsulation: ViewEncapsulation.None,
1356
- host: {
1357
- class: "rb-panel",
1358
- "[attr.title]": "null",
1359
- "[attr.data-variant]": "variant()",
1360
- "[attr.data-flush]": "flush() ? \"\" : null"
1361
- },
1362
- template: `
1363
- @if (title() || description()) {
1364
- <header class="rb-panel__header">
1365
- <div class="rb-panel__heading">
1366
- @if (title()) {
1367
- @switch (headingLevel()) {
1368
- @case (3) {
1369
- <h3 class="rb-panel__title">{{ title() }}</h3>
1370
- }
1371
- @case (4) {
1372
- <h4 class="rb-panel__title">{{ title() }}</h4>
1373
- }
1374
- @case (5) {
1375
- <h5 class="rb-panel__title">{{ title() }}</h5>
1376
- }
1377
- @case (6) {
1378
- <h6 class="rb-panel__title">{{ title() }}</h6>
1379
- }
1380
- @default {
1381
- <h2 class="rb-panel__title">{{ title() }}</h2>
1382
- }
1383
- }
1384
- }
1385
- @if (description()) {
1386
- <p class="rb-panel__description">{{ description() }}</p>
1387
- }
1388
- </div>
1389
- <div class="rb-panel__actions"><ng-content select="[rbActions]" /></div>
1390
- </header>
1391
- }
1392
- <div class="rb-panel__body"><ng-content /></div>
1393
- `,
1394
- styles: ["rb-panel{display:block;min-width:0;border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-lg);background-color:var(--rb-color-surface);color:var(--rb-color-text);box-shadow:var(--rb-elevation-1)}rb-panel[data-variant=soft]{background-color:var(--rb-color-surface-sunken);box-shadow:var(--rb-elevation-0)}rb-panel[data-variant=elevated]{border-color:transparent;background-color:var(--rb-color-surface-raised);box-shadow:var(--rb-elevation-2)}rb-panel[data-variant=danger]{border-color:var(--rb-color-danger-border)}rb-panel[data-variant=danger] .rb-panel__title{color:var(--rb-color-danger)}rb-panel .rb-panel__header{display:flex;gap:var(--rb-space-4);align-items:flex-start;justify-content:space-between;padding:var(--rb-space-5) var(--rb-space-6);border-block-end:1px solid var(--rb-color-border)}@media(width<40rem){rb-panel .rb-panel__header{flex-direction:column;gap:var(--rb-space-3);padding:var(--rb-space-4)}}rb-panel[data-variant=danger] .rb-panel__header{border-block-end-color:var(--rb-color-danger-border)}rb-panel .rb-panel__heading{display:grid;gap:var(--rb-space-1);min-width:0}rb-panel .rb-panel__title{margin:0;color:var(--rb-color-text-strong);font:var(--rb-type-title-medium);letter-spacing:var(--rb-type-title-medium-tracking);overflow-wrap:anywhere}rb-panel .rb-panel__description{margin:0;color:var(--rb-color-text-muted);font:var(--rb-type-body-medium)}rb-panel .rb-panel__actions{display:flex;flex:none;flex-wrap:wrap;gap:var(--rb-space-2);align-items:center}rb-panel .rb-panel__actions:empty{display:none}rb-panel .rb-panel__body{min-width:0;padding:var(--rb-space-6)}@media(width<40rem){rb-panel .rb-panel__body{padding:var(--rb-space-4)}}rb-panel[data-flush] .rb-panel__body{padding:0}rb-panel[data-flush] .rb-panel__body>.rb-table-scroll{border:0;border-radius:0 0 var(--rb-radius-lg) var(--rb-radius-lg);background-color:transparent}\n"]
1395
- }]
1396
- }],
1397
- propDecorators: {
1398
- title: [{
1399
- type: i0.Input,
1400
- args: [{
1401
- isSignal: true,
1402
- alias: "title",
1403
- required: false
1404
- }]
1405
- }],
1406
- description: [{
1407
- type: i0.Input,
1408
- args: [{
1409
- isSignal: true,
1410
- alias: "description",
1411
- required: false
1412
- }]
1413
- }],
1414
- variant: [{
1415
- type: i0.Input,
1416
- args: [{
1417
- isSignal: true,
1418
- alias: "variant",
1419
- required: false
1420
- }]
1421
- }],
1422
- headingLevel: [{
1423
- type: i0.Input,
1424
- args: [{
1425
- isSignal: true,
1426
- alias: "headingLevel",
1427
- required: false
1428
- }]
1429
- }],
1430
- flush: [{
1431
- type: i0.Input,
1432
- args: [{
1433
- isSignal: true,
1434
- alias: "flush",
1435
- required: false
1436
- }]
1437
- }]
1438
- }
1439
- });
1440
- var RbStatusChipComponent = class RbStatusChipComponent {
1441
- label = input.required(...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
1442
- tone = input("neutral", ...ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []);
1443
- icon = input("", ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
1444
- size = input("default", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
1445
- resolvedIcon = computed(() => this.icon() || RB_TONE_ICONS[this.tone()], ...ngDevMode ? [{ debugName: "resolvedIcon" }] : /* istanbul ignore next */ []);
1446
- static ɵfac = i0.ɵɵngDeclareFactory({
1447
- minVersion: "12.0.0",
1448
- version: "22.2.3",
1449
- ngImport: i0,
1450
- type: RbStatusChipComponent,
1451
- deps: [],
1452
- target: i0.ɵɵFactoryTarget.Component
1453
- });
1454
- static ɵcmp = i0.ɵɵngDeclareComponent({
1455
- minVersion: "17.0.0",
1456
- version: "22.2.3",
1457
- type: RbStatusChipComponent,
1458
- isStandalone: true,
1459
- selector: "rb-status-chip",
1460
- inputs: {
1461
- label: {
1462
- classPropertyName: "label",
1463
- publicName: "label",
1464
- isSignal: true,
1465
- isRequired: true,
1466
- transformFunction: null
1467
- },
1468
- tone: {
1469
- classPropertyName: "tone",
1470
- publicName: "tone",
1471
- isSignal: true,
1472
- isRequired: false,
1473
- transformFunction: null
1474
- },
1475
- icon: {
1476
- classPropertyName: "icon",
1477
- publicName: "icon",
1478
- isSignal: true,
1479
- isRequired: false,
1480
- transformFunction: null
1481
- },
1482
- size: {
1483
- classPropertyName: "size",
1484
- publicName: "size",
1485
- isSignal: true,
1486
- isRequired: false,
1487
- transformFunction: null
1488
- }
1489
- },
1490
- host: {
1491
- properties: {
1492
- "attr.data-tone": "tone()",
1493
- "attr.data-size": "size()"
1494
- },
1495
- classAttribute: "rb-status-chip"
1496
- },
1497
- ngImport: i0,
1498
- template: `
1499
- @if (resolvedIcon(); as icon) {
1500
- <mat-icon
1501
- class="rb-status-chip__icon"
1502
- fontSet="material-symbols-outlined"
1503
- aria-hidden="true"
1504
- >{{ icon }}</mat-icon
1505
- >
1506
- }
1507
- <span class="rb-status-chip__label">{{ label() }}</span>
1508
- `,
1509
- isInline: true,
1510
- styles: ["rb-status-chip{display:inline-flex;gap:var(--rb-space-1);align-items:center;max-width:100%;min-height:var(--rb-size-control-height-sm);padding:0 var(--rb-space-3);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-full);background-color:var(--rb-color-surface-sunken);color:var(--rb-color-text-muted);font:var(--rb-type-label-medium);letter-spacing:var(--rb-type-label-medium-tracking);vertical-align:middle;white-space:nowrap}rb-status-chip[data-size=compact]{min-height:var(--rb-space-6);padding:0 var(--rb-space-2)}rb-status-chip .rb-status-chip__icon{flex:none;width:var(--rb-size-icon-sm);height:var(--rb-size-icon-sm);font-size:var(--rb-size-icon-sm)}rb-status-chip .rb-status-chip__label{min-width:0;overflow:hidden;text-overflow:ellipsis}rb-status-chip[data-tone=active]{border-color:var(--rb-color-info-border);background-color:var(--rb-color-info-soft);color:var(--rb-color-info)}rb-status-chip[data-tone=success]{border-color:var(--rb-color-success-border);background-color:var(--rb-color-success-soft);color:var(--rb-color-success)}rb-status-chip[data-tone=warning]{border-color:var(--rb-color-warning-border);background-color:var(--rb-color-warning-soft);color:var(--rb-color-warning)}rb-status-chip[data-tone=danger]{border-color:var(--rb-color-danger-border);background-color:var(--rb-color-danger-soft);color:var(--rb-color-danger)}\n"],
1511
- dependencies: [{
1512
- kind: "component",
1513
- type: MatIcon,
1514
- selector: "mat-icon",
1515
- inputs: [
1516
- "color",
1517
- "inline",
1518
- "svgIcon",
1519
- "fontSet",
1520
- "fontIcon"
1521
- ],
1522
- exportAs: ["matIcon"]
1523
- }],
1524
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
1525
- encapsulation: i0.ViewEncapsulation.None
1526
- });
1527
- };
1528
- i0.ɵɵngDeclareClassMetadata({
1529
- minVersion: "12.0.0",
1530
- version: "22.2.3",
1531
- ngImport: i0,
1532
- type: RbStatusChipComponent,
1533
- decorators: [{
1534
- type: Component,
1535
- args: [{
1536
- selector: "rb-status-chip",
1537
- imports: [MatIcon],
1538
- changeDetection: ChangeDetectionStrategy.OnPush,
1539
- encapsulation: ViewEncapsulation.None,
1540
- host: {
1541
- class: "rb-status-chip",
1542
- "[attr.data-tone]": "tone()",
1543
- "[attr.data-size]": "size()"
1544
- },
1545
- template: `
1546
- @if (resolvedIcon(); as icon) {
1547
- <mat-icon
1548
- class="rb-status-chip__icon"
1549
- fontSet="material-symbols-outlined"
1550
- aria-hidden="true"
1551
- >{{ icon }}</mat-icon
1552
- >
1553
- }
1554
- <span class="rb-status-chip__label">{{ label() }}</span>
1555
- `,
1556
- styles: ["rb-status-chip{display:inline-flex;gap:var(--rb-space-1);align-items:center;max-width:100%;min-height:var(--rb-size-control-height-sm);padding:0 var(--rb-space-3);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-full);background-color:var(--rb-color-surface-sunken);color:var(--rb-color-text-muted);font:var(--rb-type-label-medium);letter-spacing:var(--rb-type-label-medium-tracking);vertical-align:middle;white-space:nowrap}rb-status-chip[data-size=compact]{min-height:var(--rb-space-6);padding:0 var(--rb-space-2)}rb-status-chip .rb-status-chip__icon{flex:none;width:var(--rb-size-icon-sm);height:var(--rb-size-icon-sm);font-size:var(--rb-size-icon-sm)}rb-status-chip .rb-status-chip__label{min-width:0;overflow:hidden;text-overflow:ellipsis}rb-status-chip[data-tone=active]{border-color:var(--rb-color-info-border);background-color:var(--rb-color-info-soft);color:var(--rb-color-info)}rb-status-chip[data-tone=success]{border-color:var(--rb-color-success-border);background-color:var(--rb-color-success-soft);color:var(--rb-color-success)}rb-status-chip[data-tone=warning]{border-color:var(--rb-color-warning-border);background-color:var(--rb-color-warning-soft);color:var(--rb-color-warning)}rb-status-chip[data-tone=danger]{border-color:var(--rb-color-danger-border);background-color:var(--rb-color-danger-soft);color:var(--rb-color-danger)}\n"]
1557
- }]
1558
- }],
1559
- propDecorators: {
1560
- label: [{
1561
- type: i0.Input,
1562
- args: [{
1563
- isSignal: true,
1564
- alias: "label",
1565
- required: true
1566
- }]
1567
- }],
1568
- tone: [{
1569
- type: i0.Input,
1570
- args: [{
1571
- isSignal: true,
1572
- alias: "tone",
1573
- required: false
1574
- }]
1575
- }],
1576
- icon: [{
1577
- type: i0.Input,
1578
- args: [{
1579
- isSignal: true,
1580
- alias: "icon",
1581
- required: false
1582
- }]
1583
- }],
1584
- size: [{
1585
- type: i0.Input,
1586
- args: [{
1587
- isSignal: true,
1588
- alias: "size",
1589
- required: false
1590
- }]
1591
- }]
1592
- }
1593
- });
1594
- var RbTechnicalValueComponent = class RbTechnicalValueComponent {
1595
- value = input.required(...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
1596
- displayValue = input("", ...ngDevMode ? [{ debugName: "displayValue" }] : /* istanbul ignore next */ []);
1597
- host = inject(ElementRef);
1598
- destroyRef = inject(DestroyRef);
1599
- text = viewChild.required("text", ...ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []);
1600
- truncated = signal(false, ...ngDevMode ? [{ debugName: "truncated" }] : /* istanbul ignore next */ []);
1601
- shownValue = computed(() => this.displayValue() || this.value(), ...ngDevMode ? [{ debugName: "shownValue" }] : /* istanbul ignore next */ []);
1602
- shortened = computed(() => this.shownValue() !== this.value(), ...ngDevMode ? [{ debugName: "shortened" }] : /* istanbul ignore next */ []);
1603
- tooltipEnabled = computed(() => this.value() !== "" && (this.shortened() || this.truncated()), ...ngDevMode ? [{ debugName: "tooltipEnabled" }] : /* istanbul ignore next */ []);
1604
- constructor() {
1605
- afterRenderEffect({ read: () => {
1606
- this.shownValue();
1607
- this.measure();
1608
- } });
1609
- afterNextRender(() => {
1610
- if (typeof ResizeObserver === "undefined") return;
1611
- const observer = new ResizeObserver(() => this.measure());
1612
- observer.observe(this.text().nativeElement);
1613
- this.destroyRef.onDestroy(() => observer.disconnect());
1614
- });
1615
- }
1616
- copyFullValue(event) {
1617
- if (!this.shortened() || !event.clipboardData) return;
1618
- const selection = this.host.nativeElement.ownerDocument.getSelection();
1619
- const host = this.host.nativeElement;
1620
- if (!selection || !host.contains(selection.anchorNode) || !host.contains(selection.focusNode)) return;
1621
- event.clipboardData.setData("text/plain", this.value());
1622
- event.preventDefault();
1623
- }
1624
- measure() {
1625
- const element = this.text().nativeElement;
1626
- this.truncated.set(element.scrollWidth > element.clientWidth);
1627
- }
1628
- static ɵfac = i0.ɵɵngDeclareFactory({
1629
- minVersion: "12.0.0",
1630
- version: "22.2.3",
1631
- ngImport: i0,
1632
- type: RbTechnicalValueComponent,
1633
- deps: [],
1634
- target: i0.ɵɵFactoryTarget.Component
1635
- });
1636
- static ɵcmp = i0.ɵɵngDeclareComponent({
1637
- minVersion: "17.0.0",
1638
- version: "22.2.3",
1639
- type: RbTechnicalValueComponent,
1640
- isStandalone: true,
1641
- selector: "rb-technical-value",
1642
- inputs: {
1643
- value: {
1644
- classPropertyName: "value",
1645
- publicName: "value",
1646
- isSignal: true,
1647
- isRequired: true,
1648
- transformFunction: null
1649
- },
1650
- displayValue: {
1651
- classPropertyName: "displayValue",
1652
- publicName: "displayValue",
1653
- isSignal: true,
1654
- isRequired: false,
1655
- transformFunction: null
1656
- }
1657
- },
1658
- host: {
1659
- listeners: { "copy": "copyFullValue($event)" },
1660
- classAttribute: "rb-technical-value"
1661
- },
1662
- viewQueries: [{
1663
- propertyName: "text",
1664
- first: true,
1665
- predicate: ["text"],
1666
- descendants: true,
1667
- isSignal: true
1668
- }],
1669
- ngImport: i0,
1670
- template: `
1671
- <span
1672
- #text
1673
- class="rb-technical-value__text"
1674
- [matTooltip]="value()"
1675
- [matTooltipDisabled]="!tooltipEnabled()"
1676
- [attr.aria-hidden]="shortened() ? 'true' : null"
1677
- >{{ shownValue() }}</span
1678
- >
1679
- @if (shortened()) {
1680
- <span class="rb-visually-hidden">{{ value() }}</span>
1681
- }
1682
- `,
1683
- isInline: true,
1684
- styles: ["rb-technical-value{display:block;min-width:0;max-width:100%}rb-technical-value .rb-technical-value__text{display:block;min-width:0;max-width:100%;overflow:hidden;color:inherit;font-family:var(--rb-font-mono);text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:all;user-select:all}\n"],
1685
- dependencies: [{
1686
- kind: "directive",
1687
- type: MatTooltip,
1688
- selector: "[matTooltip]",
1689
- inputs: [
1690
- "matTooltipPosition",
1691
- "matTooltipPositionAtOrigin",
1692
- "matTooltipDisabled",
1693
- "matTooltipShowDelay",
1694
- "matTooltipHideDelay",
1695
- "matTooltipTouchGestures",
1696
- "matTooltip",
1697
- "matTooltipClass"
1698
- ],
1699
- exportAs: ["matTooltip"]
1700
- }],
1701
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
1702
- encapsulation: i0.ViewEncapsulation.None
1703
- });
1704
- };
1705
- i0.ɵɵngDeclareClassMetadata({
1706
- minVersion: "12.0.0",
1707
- version: "22.2.3",
1708
- ngImport: i0,
1709
- type: RbTechnicalValueComponent,
1710
- decorators: [{
1711
- type: Component,
1712
- args: [{
1713
- selector: "rb-technical-value",
1714
- imports: [MatTooltip],
1715
- changeDetection: ChangeDetectionStrategy.OnPush,
1716
- encapsulation: ViewEncapsulation.None,
1717
- host: {
1718
- class: "rb-technical-value",
1719
- "(copy)": "copyFullValue($event)"
1720
- },
1721
- template: `
1722
- <span
1723
- #text
1724
- class="rb-technical-value__text"
1725
- [matTooltip]="value()"
1726
- [matTooltipDisabled]="!tooltipEnabled()"
1727
- [attr.aria-hidden]="shortened() ? 'true' : null"
1728
- >{{ shownValue() }}</span
1729
- >
1730
- @if (shortened()) {
1731
- <span class="rb-visually-hidden">{{ value() }}</span>
1732
- }
1733
- `,
1734
- styles: ["rb-technical-value{display:block;min-width:0;max-width:100%}rb-technical-value .rb-technical-value__text{display:block;min-width:0;max-width:100%;overflow:hidden;color:inherit;font-family:var(--rb-font-mono);text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:all;user-select:all}\n"]
1735
- }]
1736
- }],
1737
- ctorParameters: () => [],
1738
- propDecorators: {
1739
- value: [{
1740
- type: i0.Input,
1741
- args: [{
1742
- isSignal: true,
1743
- alias: "value",
1744
- required: true
1745
- }]
1746
- }],
1747
- displayValue: [{
1748
- type: i0.Input,
1749
- args: [{
1750
- isSignal: true,
1751
- alias: "displayValue",
1752
- required: false
1753
- }]
1754
- }],
1755
- text: [{
1756
- type: i0.ViewChild,
1757
- args: ["text", { isSignal: true }]
1758
- }]
1759
- }
1760
- });
1761
- const RB_THEME_STORAGE_KEY = "rb-theme";
1762
- const RB_THEME_COLORS = {
1763
- light: "#f4f7fb",
1764
- dark: "#08111d"
1765
- };
1766
- const RB_THEME_OPTIONS = new InjectionToken("RB_THEME_OPTIONS", {
1767
- providedIn: "root",
1768
- factory: () => ({})
1769
- });
1770
- const DARK_SCHEME_QUERY = "(prefers-color-scheme: dark)";
1771
- function isTheme(value) {
1772
- return value === "light" || value === "dark";
1773
- }
1774
- var ThemeService = class ThemeService {
1775
- document = inject(DOCUMENT);
1776
- options = inject(RB_THEME_OPTIONS);
1777
- window = this.document.defaultView;
1778
- darkScheme = this.window?.matchMedia?.(DARK_SCHEME_QUERY) ?? null;
1779
- systemTheme = signal(this.darkScheme?.matches ? "dark" : "light", ...ngDevMode ? [{ debugName: "systemTheme" }] : /* istanbul ignore next */ []);
1780
- storedTheme = signal(null, ...ngDevMode ? [{ debugName: "storedTheme" }] : /* istanbul ignore next */ []);
1781
- forcedTheme = signal(this.options.forcedTheme ?? null, ...ngDevMode ? [{ debugName: "forcedTheme" }] : /* istanbul ignore next */ []);
1782
- initialized = false;
1783
- preference = this.storedTheme.asReadonly();
1784
- theme = computed(() => this.forcedTheme() ?? this.storedTheme() ?? this.systemTheme(), ...ngDevMode ? [{ debugName: "theme" }] : /* istanbul ignore next */ []);
1785
- isDark = computed(() => this.theme() === "dark", ...ngDevMode ? [{ debugName: "isDark" }] : /* istanbul ignore next */ []);
1786
- isForced = computed(() => this.forcedTheme() !== null, ...ngDevMode ? [{ debugName: "isForced" }] : /* istanbul ignore next */ []);
1787
- constructor() {
1788
- const onSystemChange = (event) => {
1789
- this.systemTheme.set(event.matches ? "dark" : "light");
1790
- this.apply();
1791
- };
1792
- this.darkScheme?.addEventListener("change", onSystemChange);
1793
- inject(DestroyRef).onDestroy(() => this.darkScheme?.removeEventListener("change", onSystemChange));
1794
- }
1795
- initialize() {
1796
- if (!this.initialized) {
1797
- this.initialized = true;
1798
- this.storedTheme.set(this.readStoredTheme());
1799
- }
1800
- this.apply();
1801
- }
1802
- toggle() {
1803
- this.setTheme(this.theme() === "dark" ? "light" : "dark");
1804
- }
1805
- setTheme(theme) {
1806
- this.initialized = true;
1807
- this.storedTheme.set(theme);
1808
- this.write(RB_THEME_STORAGE_KEY, theme);
1809
- this.apply();
1810
- }
1811
- clearPreference() {
1812
- this.initialized = true;
1813
- this.storedTheme.set(null);
1814
- this.remove(RB_THEME_STORAGE_KEY);
1815
- this.apply();
1816
- }
1817
- forceTheme(theme) {
1818
- this.forcedTheme.set(theme);
1819
- this.apply();
1820
- }
1821
- apply() {
1822
- const root = this.document.documentElement;
1823
- const theme = this.theme();
1824
- const explicit = this.forcedTheme() ?? this.storedTheme();
1825
- root.dataset["theme"] = theme;
1826
- if (explicit) root.style.colorScheme = explicit;
1827
- else root.style.removeProperty("color-scheme");
1828
- for (const meta of Array.from(this.document.querySelectorAll("meta[name=\"theme-color\"]"))) meta.content = RB_THEME_COLORS[theme];
1829
- }
1830
- readStoredTheme() {
1831
- const stored = this.read(RB_THEME_STORAGE_KEY);
1832
- let theme = isTheme(stored) ? stored : null;
1833
- for (const legacyKey of this.options.legacyStorageKeys ?? []) {
1834
- const legacy = this.read(legacyKey);
1835
- if (theme === null && isTheme(legacy)) {
1836
- theme = legacy;
1837
- this.write(RB_THEME_STORAGE_KEY, legacy);
1838
- }
1839
- if (legacy !== null) this.remove(legacyKey);
1840
- }
1841
- return theme;
1842
- }
1843
- read(key) {
1844
- try {
1845
- return this.window?.localStorage.getItem(key) ?? null;
1846
- } catch {
1847
- return null;
1848
- }
1849
- }
1850
- write(key, value) {
1851
- try {
1852
- this.window?.localStorage.setItem(key, value);
1853
- } catch {}
1854
- }
1855
- remove(key) {
1856
- try {
1857
- this.window?.localStorage.removeItem(key);
1858
- } catch {}
1859
- }
1860
- static ɵfac = i0.ɵɵngDeclareFactory({
1861
- minVersion: "12.0.0",
1862
- version: "22.2.3",
1863
- ngImport: i0,
1864
- type: ThemeService,
1865
- deps: [],
1866
- target: i0.ɵɵFactoryTarget.Injectable
1867
- });
1868
- static ɵprov = i0.ɵɵngDeclareInjectable({
1869
- minVersion: "12.0.0",
1870
- version: "22.2.3",
1871
- ngImport: i0,
1872
- type: ThemeService,
1873
- providedIn: "root"
1874
- });
1875
- };
1876
- i0.ɵɵngDeclareClassMetadata({
1877
- minVersion: "12.0.0",
1878
- version: "22.2.3",
1879
- ngImport: i0,
1880
- type: ThemeService,
1881
- decorators: [{
1882
- type: Injectable,
1883
- args: [{ providedIn: "root" }]
1884
- }],
1885
- ctorParameters: () => []
1886
- });
1887
- const RB_ICON_FONT_SET = "material-symbols-outlined";
1888
- function provideRbDesignSystem(options = {}) {
1889
- return makeEnvironmentProviders([{
1890
- provide: RB_THEME_OPTIONS,
1891
- useValue: options
1892
- }, provideAppInitializer(() => {
1893
- inject(ThemeService).initialize();
1894
- inject(MatIconRegistry).setDefaultFontSetClass(RB_ICON_FONT_SET);
1895
- })]);
1896
- }
1897
- var RbThemeToggleComponent = class RbThemeToggleComponent {
1898
- theme = inject(ThemeService);
1899
- static ɵfac = i0.ɵɵngDeclareFactory({
1900
- minVersion: "12.0.0",
1901
- version: "22.2.3",
1902
- ngImport: i0,
1903
- type: RbThemeToggleComponent,
1904
- deps: [],
1905
- target: i0.ɵɵFactoryTarget.Component
1906
- });
1907
- static ɵcmp = i0.ɵɵngDeclareComponent({
1908
- minVersion: "17.0.0",
1909
- version: "22.2.3",
1910
- type: RbThemeToggleComponent,
1911
- isStandalone: true,
1912
- selector: "rb-theme-toggle",
1913
- ngImport: i0,
1914
- template: `
1915
- @if (!theme.isForced()) {
1916
- <button
1917
- mat-icon-button
1918
- type="button"
1919
- class="rb-theme-toggle"
1920
- aria-label="Dark theme"
1921
- matTooltip="Dark theme"
1922
- [attr.aria-pressed]="theme.isDark()"
1923
- (click)="theme.toggle()"
1924
- >
1925
- <mat-icon fontSet="material-symbols-outlined" aria-hidden="true">dark_mode</mat-icon>
1926
- </button>
1927
- }
1928
- `,
1929
- isInline: true,
1930
- styles: [":host{display:inline-flex}.rb-theme-toggle[aria-pressed=true]{background-color:var(--rb-color-primary-soft);color:var(--rb-color-on-primary-soft)}\n"],
1931
- dependencies: [
1932
- {
1933
- kind: "component",
1934
- type: MatIconButton,
1935
- selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]",
1936
- exportAs: ["matButton", "matAnchor"]
1937
- },
1938
- {
1939
- kind: "component",
1940
- type: MatIcon,
1941
- selector: "mat-icon",
1942
- inputs: [
1943
- "color",
1944
- "inline",
1945
- "svgIcon",
1946
- "fontSet",
1947
- "fontIcon"
1948
- ],
1949
- exportAs: ["matIcon"]
1950
- },
1951
- {
1952
- kind: "directive",
1953
- type: MatTooltip,
1954
- selector: "[matTooltip]",
1955
- inputs: [
1956
- "matTooltipPosition",
1957
- "matTooltipPositionAtOrigin",
1958
- "matTooltipDisabled",
1959
- "matTooltipShowDelay",
1960
- "matTooltipHideDelay",
1961
- "matTooltipTouchGestures",
1962
- "matTooltip",
1963
- "matTooltipClass"
1964
- ],
1965
- exportAs: ["matTooltip"]
1966
- }
1967
- ],
1968
- changeDetection: i0.ChangeDetectionStrategy.OnPush
1969
- });
1970
- };
1971
- i0.ɵɵngDeclareClassMetadata({
1972
- minVersion: "12.0.0",
1973
- version: "22.2.3",
1974
- ngImport: i0,
1975
- type: RbThemeToggleComponent,
1976
- decorators: [{
1977
- type: Component,
1978
- args: [{
1979
- selector: "rb-theme-toggle",
1980
- imports: [
1981
- MatIconButton,
1982
- MatIcon,
1983
- MatTooltip
1984
- ],
1985
- changeDetection: ChangeDetectionStrategy.OnPush,
1986
- template: `
1987
- @if (!theme.isForced()) {
1988
- <button
1989
- mat-icon-button
1990
- type="button"
1991
- class="rb-theme-toggle"
1992
- aria-label="Dark theme"
1993
- matTooltip="Dark theme"
1994
- [attr.aria-pressed]="theme.isDark()"
1995
- (click)="theme.toggle()"
1996
- >
1997
- <mat-icon fontSet="material-symbols-outlined" aria-hidden="true">dark_mode</mat-icon>
1998
- </button>
1999
- }
2000
- `,
2001
- styles: [":host{display:inline-flex}.rb-theme-toggle[aria-pressed=true]{background-color:var(--rb-color-primary-soft);color:var(--rb-color-on-primary-soft)}\n"]
2002
- }]
2003
- }]
2004
- });
2005
- var RbShellFooterComponent = class RbShellFooterComponent {
2006
- appName = input.required(...ngDevMode ? [{ debugName: "appName" }] : /* istanbul ignore next */ []);
2007
- year = (/* @__PURE__ */ new Date()).getFullYear();
2008
- static ɵfac = i0.ɵɵngDeclareFactory({
2009
- minVersion: "12.0.0",
2010
- version: "22.2.3",
2011
- ngImport: i0,
2012
- type: RbShellFooterComponent,
2013
- deps: [],
2014
- target: i0.ɵɵFactoryTarget.Component
2015
- });
2016
- static ɵcmp = i0.ɵɵngDeclareComponent({
2017
- minVersion: "17.1.0",
2018
- version: "22.2.3",
2019
- type: RbShellFooterComponent,
2020
- isStandalone: true,
2021
- selector: "rb-shell-footer",
2022
- inputs: { appName: {
2023
- classPropertyName: "appName",
2024
- publicName: "appName",
2025
- isSignal: true,
2026
- isRequired: true,
2027
- transformFunction: null
2028
- } },
2029
- host: { classAttribute: "rb-shell-footer" },
2030
- ngImport: i0,
2031
- template: `
2032
- <footer class="rb-shell-footer__inner">
2033
- <p class="rb-shell-footer__copy">© {{ year }} RB Labs · {{ appName() }}</p>
2034
- <div class="rb-shell-footer__extra"><ng-content /></div>
2035
- </footer>
2036
- `,
2037
- isInline: true,
2038
- styles: ["@charset \"UTF-8\";rb-shell-footer{display:block;border-block-start:1px solid var(--rb-color-border);color:var(--rb-color-text-subtle);font:var(--rb-type-body-small)}rb-shell-footer .rb-shell-footer__inner{display:flex;flex-wrap:wrap;gap:var(--rb-space-1) var(--rb-space-2);align-items:center;inline-size:min(100%,var(--rb-size-content-max));margin-inline:auto;padding:var(--rb-space-4) var(--rb-space-page)}rb-shell-footer .rb-shell-footer__copy{margin:0}rb-shell-footer .rb-shell-footer__extra{display:inline-flex;flex-wrap:wrap;gap:var(--rb-space-1) var(--rb-space-3);align-items:center}rb-shell-footer .rb-shell-footer__extra:before{content:\"\\b7\"/\"\"}rb-shell-footer .rb-shell-footer__extra:empty{display:none}rb-shell-footer .rb-shell-footer__extra a{color:inherit;text-decoration:underline;text-underline-offset:.2em}rb-shell-footer .rb-shell-footer__extra a:hover{color:var(--rb-color-text-strong)}\n"],
2039
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
2040
- encapsulation: i0.ViewEncapsulation.None
2041
- });
2042
- };
2043
- i0.ɵɵngDeclareClassMetadata({
2044
- minVersion: "12.0.0",
2045
- version: "22.2.3",
2046
- ngImport: i0,
2047
- type: RbShellFooterComponent,
2048
- decorators: [{
2049
- type: Component,
2050
- args: [{
2051
- selector: "rb-shell-footer",
2052
- changeDetection: ChangeDetectionStrategy.OnPush,
2053
- encapsulation: ViewEncapsulation.None,
2054
- host: { class: "rb-shell-footer" },
2055
- template: `
2056
- <footer class="rb-shell-footer__inner">
2057
- <p class="rb-shell-footer__copy">© {{ year }} RB Labs · {{ appName() }}</p>
2058
- <div class="rb-shell-footer__extra"><ng-content /></div>
2059
- </footer>
2060
- `,
2061
- styles: ["@charset \"UTF-8\";rb-shell-footer{display:block;border-block-start:1px solid var(--rb-color-border);color:var(--rb-color-text-subtle);font:var(--rb-type-body-small)}rb-shell-footer .rb-shell-footer__inner{display:flex;flex-wrap:wrap;gap:var(--rb-space-1) var(--rb-space-2);align-items:center;inline-size:min(100%,var(--rb-size-content-max));margin-inline:auto;padding:var(--rb-space-4) var(--rb-space-page)}rb-shell-footer .rb-shell-footer__copy{margin:0}rb-shell-footer .rb-shell-footer__extra{display:inline-flex;flex-wrap:wrap;gap:var(--rb-space-1) var(--rb-space-3);align-items:center}rb-shell-footer .rb-shell-footer__extra:before{content:\"\\b7\"/\"\"}rb-shell-footer .rb-shell-footer__extra:empty{display:none}rb-shell-footer .rb-shell-footer__extra a{color:inherit;text-decoration:underline;text-underline-offset:.2em}rb-shell-footer .rb-shell-footer__extra a:hover{color:var(--rb-color-text-strong)}\n"]
2062
- }]
2063
- }],
2064
- propDecorators: { appName: [{
2065
- type: i0.Input,
2066
- args: [{
2067
- isSignal: true,
2068
- alias: "appName",
2069
- required: true
2070
- }]
2071
- }] }
2072
- });
2073
- var RbAppShellComponent = class RbAppShellComponent {
2074
- appName = input.required(...ngDevMode ? [{ debugName: "appName" }] : /* istanbul ignore next */ []);
2075
- homeLink = input("/", ...ngDevMode ? [{ debugName: "homeLink" }] : /* istanbul ignore next */ []);
2076
- navigation = input("none", ...ngDevMode ? [{ debugName: "navigation" }] : /* istanbul ignore next */ []);
2077
- hasSidenav = computed(() => this.navigation() === "sidenav", ...ngDevMode ? [{ debugName: "hasSidenav" }] : /* istanbul ignore next */ []);
2078
- breakpointObserver = inject(BreakpointObserver);
2079
- isDrawer = signal(this.breakpointObserver.isMatched(RB_BREAKPOINTS.belowLg), ...ngDevMode ? [{ debugName: "isDrawer" }] : /* istanbul ignore next */ []);
2080
- drawerOpen = signal(false, ...ngDevMode ? [{ debugName: "drawerOpen" }] : /* istanbul ignore next */ []);
2081
- main = viewChild.required("main", ...ngDevMode ? [{ debugName: "main" }] : /* istanbul ignore next */ []);
2082
- constructor() {
2083
- const destroyRef = inject(DestroyRef);
2084
- this.breakpointObserver.observe(RB_BREAKPOINTS.belowLg).pipe(takeUntilDestroyed(destroyRef)).subscribe(({ matches }) => {
2085
- this.isDrawer.set(matches);
2086
- if (!matches) this.drawerOpen.set(false);
2087
- });
2088
- inject(Router).events.pipe(filter((event) => event instanceof NavigationEnd), takeUntilDestroyed(destroyRef)).subscribe(() => this.drawerOpen.set(false));
2089
- }
2090
- toggleDrawer() {
2091
- this.drawerOpen.update((open) => !open);
2092
- }
2093
- skipToMain(event) {
2094
- event.preventDefault();
2095
- this.main().nativeElement.focus();
2096
- }
2097
- static ɵfac = i0.ɵɵngDeclareFactory({
2098
- minVersion: "12.0.0",
2099
- version: "22.2.3",
2100
- ngImport: i0,
2101
- type: RbAppShellComponent,
2102
- deps: [],
2103
- target: i0.ɵɵFactoryTarget.Component
2104
- });
2105
- static ɵcmp = i0.ɵɵngDeclareComponent({
2106
- minVersion: "17.0.0",
2107
- version: "22.2.3",
2108
- type: RbAppShellComponent,
2109
- isStandalone: true,
2110
- selector: "rb-app-shell",
2111
- inputs: {
2112
- appName: {
2113
- classPropertyName: "appName",
2114
- publicName: "appName",
2115
- isSignal: true,
2116
- isRequired: true,
2117
- transformFunction: null
2118
- },
2119
- homeLink: {
2120
- classPropertyName: "homeLink",
2121
- publicName: "homeLink",
2122
- isSignal: true,
2123
- isRequired: false,
2124
- transformFunction: null
2125
- },
2126
- navigation: {
2127
- classPropertyName: "navigation",
2128
- publicName: "navigation",
2129
- isSignal: true,
2130
- isRequired: false,
2131
- transformFunction: null
2132
- }
2133
- },
2134
- host: {
2135
- properties: {
2136
- "attr.data-navigation": "navigation()",
2137
- "attr.data-drawer": "isDrawer() ? \"\" : null"
2138
- },
2139
- classAttribute: "rb-app-shell"
2140
- },
2141
- viewQueries: [{
2142
- propertyName: "main",
2143
- first: true,
2144
- predicate: ["main"],
2145
- descendants: true,
2146
- isSignal: true
2147
- }],
2148
- ngImport: i0,
2149
- template: `
2150
- <a class="rb-skip-link" href="#main-content" (click)="skipToMain($event)"
2151
- >Skip to main content</a
2152
- >
2153
-
2154
- <header class="rb-app-shell__topbar">
2155
- @if (hasSidenav() && isDrawer()) {
2156
- <button
2157
- matIconButton
2158
- type="button"
2159
- class="rb-app-shell__menu"
2160
- aria-label="Navigation"
2161
- matTooltip="Navigation"
2162
- aria-controls="rb-app-shell-sidenav"
2163
- [attr.aria-expanded]="drawerOpen()"
2164
- (click)="toggleDrawer()"
2165
- >
2166
- <mat-icon fontSet="material-symbols-outlined" aria-hidden="true">menu</mat-icon>
2167
- </button>
2168
- }
2169
- <rb-brand-lockup [appName]="appName()" [link]="homeLink()" compact="below-sm" />
2170
- <div class="rb-app-shell__title"><ng-content select="[rbShellTitle]" /></div>
2171
- <div class="rb-app-shell__actions">
2172
- <ng-content select="[rbShellActions]" />
2173
- <rb-theme-toggle />
2174
- </div>
2175
- </header>
2176
-
2177
- @if (hasSidenav()) {
2178
- <mat-sidenav-container class="rb-app-shell__container">
2179
- <mat-sidenav
2180
- id="rb-app-shell-sidenav"
2181
- class="rb-app-shell__sidenav"
2182
- [mode]="isDrawer() ? 'over' : 'side'"
2183
- [opened]="!isDrawer() || drawerOpen()"
2184
- (closedStart)="drawerOpen.set(false)"
2185
- >
2186
- <ng-content select="[rbShellSidenav]" />
2187
- </mat-sidenav>
2188
- <mat-sidenav-content class="rb-app-shell__scroller">
2189
- <ng-container [ngTemplateOutlet]="body" />
2190
- </mat-sidenav-content>
2191
- </mat-sidenav-container>
2192
- } @else {
2193
- <ng-container [ngTemplateOutlet]="body" />
2194
- }
2195
-
2196
- <ng-template #body>
2197
- <div class="rb-app-shell__body">
2198
- @if (navigation() === 'modules') {
2199
- <div class="rb-app-shell__module-nav"><ng-content select="[rbShellModuleNav]" /></div>
2200
- }
2201
- <main #main class="rb-app-shell__main" id="main-content" tabindex="-1">
2202
- <ng-content />
2203
- </main>
2204
- </div>
2205
- <rb-shell-footer [appName]="appName()"
2206
- ><ng-content select="[rbShellFooter]"
2207
- /></rb-shell-footer>
2208
- </ng-template>
2209
- `,
2210
- isInline: true,
2211
- styles: ["html:has(rb-app-shell:not([data-navigation=sidenav])){scroll-padding-block-start:calc(var(--rb-size-shell-topbar) + var(--rb-space-4))}rb-app-shell{display:flex;flex-direction:column;min-block-size:100dvh}rb-app-shell[data-navigation=sidenav]{block-size:100dvh}rb-app-shell .rb-app-shell__topbar{position:sticky;inset-block-start:0;z-index:var(--rb-z-sticky);display:flex;flex:none;gap:var(--rb-space-3);align-items:center;block-size:var(--rb-size-shell-topbar);padding-inline:var(--rb-space-page);border-block-end:1px solid var(--rb-color-border);background-color:var(--rb-color-glass);box-shadow:var(--rb-elevation-1);-webkit-backdrop-filter:blur(var(--rb-space-4));backdrop-filter:blur(var(--rb-space-4))}rb-app-shell .rb-app-shell__menu{flex:none;margin-inline-start:calc(-1 * var(--rb-space-2))}rb-app-shell .rb-app-shell__title{display:flex;flex:1 1 auto;min-width:0;align-items:center;padding-inline-start:var(--rb-space-3);border-inline-start:1px solid var(--rb-color-border);overflow:hidden;color:var(--rb-color-text-muted);font:var(--rb-type-label-large);text-overflow:ellipsis;white-space:nowrap}@media(width<40rem){rb-app-shell .rb-app-shell__title{visibility:hidden;border-inline-start:0}}rb-app-shell .rb-app-shell__title:empty{border-inline-start:0}rb-app-shell .rb-app-shell__actions{display:flex;flex:none;gap:var(--rb-space-2);align-items:center}rb-app-shell .rb-app-shell__container{flex:1 1 auto;min-block-size:0;background-color:transparent}rb-app-shell .rb-app-shell__sidenav{inline-size:var(--rb-size-shell-nav);border-inline-end:1px solid var(--rb-color-border);border-radius:0;background-color:var(--rb-color-surface-nav);color:var(--rb-color-text)}rb-app-shell[data-drawer] .rb-app-shell__sidenav{box-shadow:var(--rb-elevation-3)}rb-app-shell .rb-app-shell__scroller{display:flex;flex-direction:column}rb-app-shell [rbShellSidenav]{display:grid;gap:var(--rb-space-1);align-content:start;padding:var(--rb-space-4) var(--rb-space-3)}rb-app-shell .rb-app-shell__body{display:grid;flex:1 0 auto;gap:var(--rb-space-6);align-content:start;inline-size:min(100%,var(--rb-size-content-max));margin-inline:auto;padding:var(--rb-space-page)}rb-app-shell[data-navigation=modules] .rb-app-shell__body{grid-template-columns:var(--rb-size-shell-module-nav) minmax(0,1fr);align-items:start}@media(width<60rem){rb-app-shell[data-navigation=modules] .rb-app-shell__body{grid-template-columns:minmax(0,1fr);gap:var(--rb-space-4)}}rb-app-shell .rb-app-shell__module-nav{position:sticky;inset-block-start:calc(var(--rb-size-shell-topbar) + var(--rb-space-page));min-width:0}@media(width<60rem){rb-app-shell .rb-app-shell__module-nav{position:static}}rb-app-shell [rbShellModuleNav]{display:flex;flex-direction:column;gap:var(--rb-space-1);padding:var(--rb-space-2);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-lg);background-color:var(--rb-color-surface);box-shadow:var(--rb-elevation-1)}@media(width<60rem){rb-app-shell [rbShellModuleNav]{flex-flow:row wrap}}@media(width<40rem){rb-app-shell [rbShellModuleNav]{display:grid;grid-auto-columns:minmax(0,1fr);grid-auto-flow:column;padding:var(--rb-space-1)}}rb-app-shell .rb-app-shell__main{min-width:0}rb-app-shell .rb-app-shell__main:focus{outline:none}rb-app-shell rb-shell-footer{flex:none}rb-app-shell .rb-shell-nav-heading{margin:var(--rb-space-4) 0 var(--rb-space-1);padding-inline:var(--rb-space-3);color:var(--rb-color-text-subtle);font:var(--rb-type-label-small);letter-spacing:var(--rb-type-label-small-tracking);text-transform:uppercase}rb-app-shell .rb-shell-nav-heading:first-child{margin-block-start:0}rb-app-shell .rb-shell-nav-link{display:flex;gap:var(--rb-space-3);align-items:center;min-block-size:var(--rb-size-control-height);padding:var(--rb-space-2) var(--rb-space-3);border-radius:var(--rb-radius-sm);color:var(--rb-color-text-muted);font:var(--rb-type-label-large);text-decoration:none;transition:background-color var(--rb-motion-duration-fast) var(--rb-motion-easing-standard),color var(--rb-motion-duration-fast) var(--rb-motion-easing-standard)}@media(pointer:coarse){rb-app-shell .rb-shell-nav-link{min-block-size:var(--rb-size-touch-target)}}rb-app-shell .rb-shell-nav-link mat-icon{flex:none;inline-size:var(--rb-size-icon-md);block-size:var(--rb-size-icon-md);font-size:var(--rb-size-icon-md)}rb-app-shell .rb-shell-nav-link:hover{background-color:var(--rb-color-overlay-hover);color:var(--rb-color-text-strong)}rb-app-shell .rb-shell-nav-link[aria-current=page]{background-color:var(--rb-color-primary-soft);color:var(--rb-color-on-primary-soft)}@media(width<40rem){rb-app-shell [rbShellModuleNav] .rb-shell-nav-link{flex-direction:column;gap:var(--rb-space-1);justify-content:center;min-block-size:var(--rb-space-12);padding-inline:var(--rb-space-1);font:var(--rb-type-label-medium);text-align:center;overflow-wrap:anywhere}}\n"],
2212
- dependencies: [
2213
- {
2214
- kind: "component",
2215
- type: MatIcon,
2216
- selector: "mat-icon",
2217
- inputs: [
2218
- "color",
2219
- "inline",
2220
- "svgIcon",
2221
- "fontSet",
2222
- "fontIcon"
2223
- ],
2224
- exportAs: ["matIcon"]
2225
- },
2226
- {
2227
- kind: "component",
2228
- type: MatIconButton,
2229
- selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]",
2230
- exportAs: ["matButton", "matAnchor"]
2231
- },
2232
- {
2233
- kind: "component",
2234
- type: MatSidenav,
2235
- selector: "mat-sidenav",
2236
- inputs: [
2237
- "fixedInViewport",
2238
- "fixedTopGap",
2239
- "fixedBottomGap"
2240
- ],
2241
- exportAs: ["matSidenav"]
2242
- },
2243
- {
2244
- kind: "component",
2245
- type: MatSidenavContainer,
2246
- selector: "mat-sidenav-container",
2247
- exportAs: ["matSidenavContainer"]
2248
- },
2249
- {
2250
- kind: "component",
2251
- type: MatSidenavContent,
2252
- selector: "mat-sidenav-content"
2253
- },
2254
- {
2255
- kind: "directive",
2256
- type: MatTooltip,
2257
- selector: "[matTooltip]",
2258
- inputs: [
2259
- "matTooltipPosition",
2260
- "matTooltipPositionAtOrigin",
2261
- "matTooltipDisabled",
2262
- "matTooltipShowDelay",
2263
- "matTooltipHideDelay",
2264
- "matTooltipTouchGestures",
2265
- "matTooltip",
2266
- "matTooltipClass"
2267
- ],
2268
- exportAs: ["matTooltip"]
2269
- },
2270
- {
2271
- kind: "directive",
2272
- type: NgTemplateOutlet,
2273
- selector: "[ngTemplateOutlet]",
2274
- inputs: [
2275
- "ngTemplateOutletContext",
2276
- "ngTemplateOutlet",
2277
- "ngTemplateOutletInjector"
2278
- ]
2279
- },
2280
- {
2281
- kind: "component",
2282
- type: RbBrandLockupComponent,
2283
- selector: "rb-brand-lockup",
2284
- inputs: [
2285
- "appName",
2286
- "link",
2287
- "compact"
2288
- ]
2289
- },
2290
- {
2291
- kind: "component",
2292
- type: RbShellFooterComponent,
2293
- selector: "rb-shell-footer",
2294
- inputs: ["appName"]
2295
- },
2296
- {
2297
- kind: "component",
2298
- type: RbThemeToggleComponent,
2299
- selector: "rb-theme-toggle"
2300
- }
2301
- ],
2302
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
2303
- encapsulation: i0.ViewEncapsulation.None
2304
- });
2305
- };
2306
- i0.ɵɵngDeclareClassMetadata({
2307
- minVersion: "12.0.0",
2308
- version: "22.2.3",
2309
- ngImport: i0,
2310
- type: RbAppShellComponent,
2311
- decorators: [{
2312
- type: Component,
2313
- args: [{
2314
- selector: "rb-app-shell",
2315
- imports: [
2316
- MatIcon,
2317
- MatIconButton,
2318
- MatSidenav,
2319
- MatSidenavContainer,
2320
- MatSidenavContent,
2321
- MatTooltip,
2322
- NgTemplateOutlet,
2323
- RbBrandLockupComponent,
2324
- RbShellFooterComponent,
2325
- RbThemeToggleComponent
2326
- ],
2327
- changeDetection: ChangeDetectionStrategy.OnPush,
2328
- encapsulation: ViewEncapsulation.None,
2329
- host: {
2330
- class: "rb-app-shell",
2331
- "[attr.data-navigation]": "navigation()",
2332
- "[attr.data-drawer]": "isDrawer() ? \"\" : null"
2333
- },
2334
- template: `
2335
- <a class="rb-skip-link" href="#main-content" (click)="skipToMain($event)"
2336
- >Skip to main content</a
2337
- >
2338
-
2339
- <header class="rb-app-shell__topbar">
2340
- @if (hasSidenav() && isDrawer()) {
2341
- <button
2342
- matIconButton
2343
- type="button"
2344
- class="rb-app-shell__menu"
2345
- aria-label="Navigation"
2346
- matTooltip="Navigation"
2347
- aria-controls="rb-app-shell-sidenav"
2348
- [attr.aria-expanded]="drawerOpen()"
2349
- (click)="toggleDrawer()"
2350
- >
2351
- <mat-icon fontSet="material-symbols-outlined" aria-hidden="true">menu</mat-icon>
2352
- </button>
2353
- }
2354
- <rb-brand-lockup [appName]="appName()" [link]="homeLink()" compact="below-sm" />
2355
- <div class="rb-app-shell__title"><ng-content select="[rbShellTitle]" /></div>
2356
- <div class="rb-app-shell__actions">
2357
- <ng-content select="[rbShellActions]" />
2358
- <rb-theme-toggle />
2359
- </div>
2360
- </header>
2361
-
2362
- @if (hasSidenav()) {
2363
- <mat-sidenav-container class="rb-app-shell__container">
2364
- <mat-sidenav
2365
- id="rb-app-shell-sidenav"
2366
- class="rb-app-shell__sidenav"
2367
- [mode]="isDrawer() ? 'over' : 'side'"
2368
- [opened]="!isDrawer() || drawerOpen()"
2369
- (closedStart)="drawerOpen.set(false)"
2370
- >
2371
- <ng-content select="[rbShellSidenav]" />
2372
- </mat-sidenav>
2373
- <mat-sidenav-content class="rb-app-shell__scroller">
2374
- <ng-container [ngTemplateOutlet]="body" />
2375
- </mat-sidenav-content>
2376
- </mat-sidenav-container>
2377
- } @else {
2378
- <ng-container [ngTemplateOutlet]="body" />
2379
- }
2380
-
2381
- <ng-template #body>
2382
- <div class="rb-app-shell__body">
2383
- @if (navigation() === 'modules') {
2384
- <div class="rb-app-shell__module-nav"><ng-content select="[rbShellModuleNav]" /></div>
2385
- }
2386
- <main #main class="rb-app-shell__main" id="main-content" tabindex="-1">
2387
- <ng-content />
2388
- </main>
2389
- </div>
2390
- <rb-shell-footer [appName]="appName()"
2391
- ><ng-content select="[rbShellFooter]"
2392
- /></rb-shell-footer>
2393
- </ng-template>
2394
- `,
2395
- styles: ["html:has(rb-app-shell:not([data-navigation=sidenav])){scroll-padding-block-start:calc(var(--rb-size-shell-topbar) + var(--rb-space-4))}rb-app-shell{display:flex;flex-direction:column;min-block-size:100dvh}rb-app-shell[data-navigation=sidenav]{block-size:100dvh}rb-app-shell .rb-app-shell__topbar{position:sticky;inset-block-start:0;z-index:var(--rb-z-sticky);display:flex;flex:none;gap:var(--rb-space-3);align-items:center;block-size:var(--rb-size-shell-topbar);padding-inline:var(--rb-space-page);border-block-end:1px solid var(--rb-color-border);background-color:var(--rb-color-glass);box-shadow:var(--rb-elevation-1);-webkit-backdrop-filter:blur(var(--rb-space-4));backdrop-filter:blur(var(--rb-space-4))}rb-app-shell .rb-app-shell__menu{flex:none;margin-inline-start:calc(-1 * var(--rb-space-2))}rb-app-shell .rb-app-shell__title{display:flex;flex:1 1 auto;min-width:0;align-items:center;padding-inline-start:var(--rb-space-3);border-inline-start:1px solid var(--rb-color-border);overflow:hidden;color:var(--rb-color-text-muted);font:var(--rb-type-label-large);text-overflow:ellipsis;white-space:nowrap}@media(width<40rem){rb-app-shell .rb-app-shell__title{visibility:hidden;border-inline-start:0}}rb-app-shell .rb-app-shell__title:empty{border-inline-start:0}rb-app-shell .rb-app-shell__actions{display:flex;flex:none;gap:var(--rb-space-2);align-items:center}rb-app-shell .rb-app-shell__container{flex:1 1 auto;min-block-size:0;background-color:transparent}rb-app-shell .rb-app-shell__sidenav{inline-size:var(--rb-size-shell-nav);border-inline-end:1px solid var(--rb-color-border);border-radius:0;background-color:var(--rb-color-surface-nav);color:var(--rb-color-text)}rb-app-shell[data-drawer] .rb-app-shell__sidenav{box-shadow:var(--rb-elevation-3)}rb-app-shell .rb-app-shell__scroller{display:flex;flex-direction:column}rb-app-shell [rbShellSidenav]{display:grid;gap:var(--rb-space-1);align-content:start;padding:var(--rb-space-4) var(--rb-space-3)}rb-app-shell .rb-app-shell__body{display:grid;flex:1 0 auto;gap:var(--rb-space-6);align-content:start;inline-size:min(100%,var(--rb-size-content-max));margin-inline:auto;padding:var(--rb-space-page)}rb-app-shell[data-navigation=modules] .rb-app-shell__body{grid-template-columns:var(--rb-size-shell-module-nav) minmax(0,1fr);align-items:start}@media(width<60rem){rb-app-shell[data-navigation=modules] .rb-app-shell__body{grid-template-columns:minmax(0,1fr);gap:var(--rb-space-4)}}rb-app-shell .rb-app-shell__module-nav{position:sticky;inset-block-start:calc(var(--rb-size-shell-topbar) + var(--rb-space-page));min-width:0}@media(width<60rem){rb-app-shell .rb-app-shell__module-nav{position:static}}rb-app-shell [rbShellModuleNav]{display:flex;flex-direction:column;gap:var(--rb-space-1);padding:var(--rb-space-2);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-lg);background-color:var(--rb-color-surface);box-shadow:var(--rb-elevation-1)}@media(width<60rem){rb-app-shell [rbShellModuleNav]{flex-flow:row wrap}}@media(width<40rem){rb-app-shell [rbShellModuleNav]{display:grid;grid-auto-columns:minmax(0,1fr);grid-auto-flow:column;padding:var(--rb-space-1)}}rb-app-shell .rb-app-shell__main{min-width:0}rb-app-shell .rb-app-shell__main:focus{outline:none}rb-app-shell rb-shell-footer{flex:none}rb-app-shell .rb-shell-nav-heading{margin:var(--rb-space-4) 0 var(--rb-space-1);padding-inline:var(--rb-space-3);color:var(--rb-color-text-subtle);font:var(--rb-type-label-small);letter-spacing:var(--rb-type-label-small-tracking);text-transform:uppercase}rb-app-shell .rb-shell-nav-heading:first-child{margin-block-start:0}rb-app-shell .rb-shell-nav-link{display:flex;gap:var(--rb-space-3);align-items:center;min-block-size:var(--rb-size-control-height);padding:var(--rb-space-2) var(--rb-space-3);border-radius:var(--rb-radius-sm);color:var(--rb-color-text-muted);font:var(--rb-type-label-large);text-decoration:none;transition:background-color var(--rb-motion-duration-fast) var(--rb-motion-easing-standard),color var(--rb-motion-duration-fast) var(--rb-motion-easing-standard)}@media(pointer:coarse){rb-app-shell .rb-shell-nav-link{min-block-size:var(--rb-size-touch-target)}}rb-app-shell .rb-shell-nav-link mat-icon{flex:none;inline-size:var(--rb-size-icon-md);block-size:var(--rb-size-icon-md);font-size:var(--rb-size-icon-md)}rb-app-shell .rb-shell-nav-link:hover{background-color:var(--rb-color-overlay-hover);color:var(--rb-color-text-strong)}rb-app-shell .rb-shell-nav-link[aria-current=page]{background-color:var(--rb-color-primary-soft);color:var(--rb-color-on-primary-soft)}@media(width<40rem){rb-app-shell [rbShellModuleNav] .rb-shell-nav-link{flex-direction:column;gap:var(--rb-space-1);justify-content:center;min-block-size:var(--rb-space-12);padding-inline:var(--rb-space-1);font:var(--rb-type-label-medium);text-align:center;overflow-wrap:anywhere}}\n"]
2396
- }]
2397
- }],
2398
- ctorParameters: () => [],
2399
- propDecorators: {
2400
- appName: [{
2401
- type: i0.Input,
2402
- args: [{
2403
- isSignal: true,
2404
- alias: "appName",
2405
- required: true
2406
- }]
2407
- }],
2408
- homeLink: [{
2409
- type: i0.Input,
2410
- args: [{
2411
- isSignal: true,
2412
- alias: "homeLink",
2413
- required: false
2414
- }]
2415
- }],
2416
- navigation: [{
2417
- type: i0.Input,
2418
- args: [{
2419
- isSignal: true,
2420
- alias: "navigation",
2421
- required: false
2422
- }]
2423
- }],
2424
- main: [{
2425
- type: i0.ViewChild,
2426
- args: ["main", { isSignal: true }]
2427
- }]
2428
- }
2429
- });
2430
- let nextId = 0;
2431
- var RbCentralSignInComponent = class RbCentralSignInComponent {
2432
- appName = input.required(...ngDevMode ? [{ debugName: "appName" }] : /* istanbul ignore next */ []);
2433
- title = input("", ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
2434
- eyebrow = input("", ...ngDevMode ? [{ debugName: "eyebrow" }] : /* istanbul ignore next */ []);
2435
- description = input("", ...ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []);
2436
- icon = input("login", ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
2437
- authHost = input("auth.rblabs.dev", ...ngDevMode ? [{ debugName: "authHost" }] : /* istanbul ignore next */ []);
2438
- note = input("", ...ngDevMode ? [{ debugName: "note" }] : /* istanbul ignore next */ []);
2439
- error = input(null, ...ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []);
2440
- backLink = input("/", ...ngDevMode ? [{ debugName: "backLink" }] : /* istanbul ignore next */ []);
2441
- signIn = output();
2442
- titleId = `rb-central-sign-in-title-${nextId++}`;
2443
- resolvedTitle = computed(() => this.title() || `Sign in to RB Labs ${this.appName()}`, ...ngDevMode ? [{ debugName: "resolvedTitle" }] : /* istanbul ignore next */ []);
2444
- resolvedDescription = computed(() => this.description() || `You will be taken to RB Labs Auth to sign in, then returned to ${this.appName()}.`, ...ngDevMode ? [{ debugName: "resolvedDescription" }] : /* istanbul ignore next */ []);
2445
- static ɵfac = i0.ɵɵngDeclareFactory({
2446
- minVersion: "12.0.0",
2447
- version: "22.2.3",
2448
- ngImport: i0,
2449
- type: RbCentralSignInComponent,
2450
- deps: [],
2451
- target: i0.ɵɵFactoryTarget.Component
2452
- });
2453
- static ɵcmp = i0.ɵɵngDeclareComponent({
2454
- minVersion: "17.0.0",
2455
- version: "22.2.3",
2456
- type: RbCentralSignInComponent,
2457
- isStandalone: true,
2458
- selector: "rb-central-sign-in",
2459
- inputs: {
2460
- appName: {
2461
- classPropertyName: "appName",
2462
- publicName: "appName",
2463
- isSignal: true,
2464
- isRequired: true,
2465
- transformFunction: null
2466
- },
2467
- title: {
2468
- classPropertyName: "title",
2469
- publicName: "title",
2470
- isSignal: true,
2471
- isRequired: false,
2472
- transformFunction: null
2473
- },
2474
- eyebrow: {
2475
- classPropertyName: "eyebrow",
2476
- publicName: "eyebrow",
2477
- isSignal: true,
2478
- isRequired: false,
2479
- transformFunction: null
2480
- },
2481
- description: {
2482
- classPropertyName: "description",
2483
- publicName: "description",
2484
- isSignal: true,
2485
- isRequired: false,
2486
- transformFunction: null
2487
- },
2488
- icon: {
2489
- classPropertyName: "icon",
2490
- publicName: "icon",
2491
- isSignal: true,
2492
- isRequired: false,
2493
- transformFunction: null
2494
- },
2495
- authHost: {
2496
- classPropertyName: "authHost",
2497
- publicName: "authHost",
2498
- isSignal: true,
2499
- isRequired: false,
2500
- transformFunction: null
2501
- },
2502
- note: {
2503
- classPropertyName: "note",
2504
- publicName: "note",
2505
- isSignal: true,
2506
- isRequired: false,
2507
- transformFunction: null
2508
- },
2509
- error: {
2510
- classPropertyName: "error",
2511
- publicName: "error",
2512
- isSignal: true,
2513
- isRequired: false,
2514
- transformFunction: null
2515
- },
2516
- backLink: {
2517
- classPropertyName: "backLink",
2518
- publicName: "backLink",
2519
- isSignal: true,
2520
- isRequired: false,
2521
- transformFunction: null
2522
- }
2523
- },
2524
- outputs: { signIn: "signIn" },
2525
- host: {
2526
- properties: { "attr.title": "null" },
2527
- classAttribute: "rb-central-sign-in"
2528
- },
2529
- ngImport: i0,
2530
- template: `
2531
- <section class="rb-central-sign-in__card" [attr.aria-labelledby]="titleId">
2532
- <div class="rb-central-sign-in__intro">
2533
- <span class="rb-central-sign-in__icon" aria-hidden="true">
2534
- <mat-icon fontSet="material-symbols-outlined">{{ icon() }}</mat-icon>
2535
- </span>
2536
- @if (eyebrow()) {
2537
- <p class="rb-central-sign-in__eyebrow">{{ eyebrow() }}</p>
2538
- }
2539
- <h1 class="rb-central-sign-in__title" [id]="titleId">{{ resolvedTitle() }}</h1>
2540
- <p class="rb-central-sign-in__description">{{ resolvedDescription() }}</p>
2541
- </div>
2542
-
2543
- <div class="rb-central-sign-in__provider">
2544
- <rb-monogram class="rb-central-sign-in__mark" />
2545
- <span class="rb-central-sign-in__provider-name">
2546
- <strong>RB Labs Auth</strong>
2547
- <code>{{ authHost() }}</code>
2548
- </span>
2549
- </div>
2550
-
2551
- @if (error()) {
2552
- <rb-message tone="danger">
2553
- <p>{{ error() }}</p>
2554
- </rb-message>
2555
- }
2556
-
2557
- <div class="rb-central-sign-in__actions">
2558
- <button
2559
- class="rb-central-sign-in__continue"
2560
- matButton="filled"
2561
- type="button"
2562
- (click)="signIn.emit()"
2563
- >
2564
- Continue to RB Labs Auth
2565
- <mat-icon fontSet="material-symbols-outlined" aria-hidden="true" iconPositionEnd
2566
- >arrow_forward</mat-icon
2567
- >
2568
- </button>
2569
- <a class="rb-central-sign-in__back" matButton="outlined" [routerLink]="backLink()"
2570
- >Back to home</a
2571
- >
2572
- </div>
2573
-
2574
- @if (note()) {
2575
- <p class="rb-central-sign-in__note">{{ note() }}</p>
2576
- }
2577
- </section>
2578
- `,
2579
- isInline: true,
2580
- styles: ["rb-central-sign-in{display:block;inline-size:min(100%,var(--rb-size-card))}rb-central-sign-in .rb-central-sign-in__card{display:grid;gap:var(--rb-space-6);padding:var(--rb-space-8);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-lg);background-color:var(--rb-color-surface-raised);color:var(--rb-color-text);box-shadow:var(--rb-elevation-2)}@media(width<40rem){rb-central-sign-in .rb-central-sign-in__card{gap:var(--rb-space-5);padding:var(--rb-space-6) var(--rb-space-5)}}rb-central-sign-in .rb-central-sign-in__intro{display:grid;gap:var(--rb-space-2);min-width:0}rb-central-sign-in .rb-central-sign-in__icon{display:grid;place-items:center;inline-size:var(--rb-space-12);block-size:var(--rb-space-12);margin-block-end:var(--rb-space-2);border-radius:var(--rb-radius-md);background-color:var(--rb-color-primary-soft);color:var(--rb-color-on-primary-soft)}rb-central-sign-in .rb-central-sign-in__icon mat-icon{inline-size:var(--rb-size-icon-lg);block-size:var(--rb-size-icon-lg);font-size:var(--rb-size-icon-lg)}rb-central-sign-in .rb-central-sign-in__eyebrow{margin:0;color:var(--rb-color-primary);font:var(--rb-type-label-small);letter-spacing:var(--rb-type-label-small-tracking);text-transform:uppercase}rb-central-sign-in .rb-central-sign-in__title{margin:0;color:var(--rb-color-text-strong);font:var(--rb-type-headline-small);letter-spacing:var(--rb-type-headline-small-tracking);overflow-wrap:anywhere}rb-central-sign-in .rb-central-sign-in__description{margin:0;color:var(--rb-color-text-muted);font:var(--rb-type-body-medium)}rb-central-sign-in .rb-central-sign-in__provider{display:flex;gap:var(--rb-space-3);align-items:center;padding:var(--rb-space-3) var(--rb-space-4);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-md);background-color:var(--rb-color-surface-sunken)}rb-central-sign-in .rb-central-sign-in__mark{flex:none;inline-size:var(--rb-size-monogram-sm)}rb-central-sign-in .rb-central-sign-in__provider-name{display:grid;min-width:0}rb-central-sign-in .rb-central-sign-in__provider-name strong{color:var(--rb-color-text-strong);font:var(--rb-type-title-small);letter-spacing:var(--rb-type-title-small-tracking)}rb-central-sign-in .rb-central-sign-in__provider-name code{color:var(--rb-color-text-muted);font:var(--rb-type-body-small);font-family:var(--rb-font-mono);overflow-wrap:anywhere}rb-central-sign-in .rb-central-sign-in__actions{display:grid;gap:var(--rb-space-3)}rb-central-sign-in .rb-central-sign-in__note{margin:0;padding-block-start:var(--rb-space-4);border-block-start:1px solid var(--rb-color-border);color:var(--rb-color-text-muted);font:var(--rb-type-body-small)}\n"],
2581
- dependencies: [
2582
- {
2583
- kind: "component",
2584
- type: MatButton,
2585
- selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ",
2586
- inputs: ["matButton"],
2587
- exportAs: ["matButton", "matAnchor"]
2588
- },
2589
- {
2590
- kind: "component",
2591
- type: MatIcon,
2592
- selector: "mat-icon",
2593
- inputs: [
2594
- "color",
2595
- "inline",
2596
- "svgIcon",
2597
- "fontSet",
2598
- "fontIcon"
2599
- ],
2600
- exportAs: ["matIcon"]
2601
- },
2602
- {
2603
- kind: "component",
2604
- type: RbMessageComponent,
2605
- selector: "rb-message",
2606
- inputs: [
2607
- "tone",
2608
- "title",
2609
- "icon",
2610
- "live"
2611
- ]
2612
- },
2613
- {
2614
- kind: "component",
2615
- type: RbMonogramComponent,
2616
- selector: "rb-monogram"
2617
- },
2618
- {
2619
- kind: "directive",
2620
- type: RouterLink,
2621
- selector: "[routerLink]",
2622
- inputs: [
2623
- "target",
2624
- "queryParams",
2625
- "fragment",
2626
- "queryParamsHandling",
2627
- "state",
2628
- "info",
2629
- "relativeTo",
2630
- "preserveFragment",
2631
- "skipLocationChange",
2632
- "replaceUrl",
2633
- "browserUrl",
2634
- "routerLink"
2635
- ]
2636
- }
2637
- ],
2638
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
2639
- encapsulation: i0.ViewEncapsulation.None
2640
- });
2641
- };
2642
- i0.ɵɵngDeclareClassMetadata({
2643
- minVersion: "12.0.0",
2644
- version: "22.2.3",
2645
- ngImport: i0,
2646
- type: RbCentralSignInComponent,
2647
- decorators: [{
2648
- type: Component,
2649
- args: [{
2650
- selector: "rb-central-sign-in",
2651
- imports: [
2652
- MatButton,
2653
- MatIcon,
2654
- RbMessageComponent,
2655
- RbMonogramComponent,
2656
- RouterLink
2657
- ],
2658
- changeDetection: ChangeDetectionStrategy.OnPush,
2659
- encapsulation: ViewEncapsulation.None,
2660
- host: {
2661
- class: "rb-central-sign-in",
2662
- "[attr.title]": "null"
2663
- },
2664
- template: `
2665
- <section class="rb-central-sign-in__card" [attr.aria-labelledby]="titleId">
2666
- <div class="rb-central-sign-in__intro">
2667
- <span class="rb-central-sign-in__icon" aria-hidden="true">
2668
- <mat-icon fontSet="material-symbols-outlined">{{ icon() }}</mat-icon>
2669
- </span>
2670
- @if (eyebrow()) {
2671
- <p class="rb-central-sign-in__eyebrow">{{ eyebrow() }}</p>
2672
- }
2673
- <h1 class="rb-central-sign-in__title" [id]="titleId">{{ resolvedTitle() }}</h1>
2674
- <p class="rb-central-sign-in__description">{{ resolvedDescription() }}</p>
2675
- </div>
2676
-
2677
- <div class="rb-central-sign-in__provider">
2678
- <rb-monogram class="rb-central-sign-in__mark" />
2679
- <span class="rb-central-sign-in__provider-name">
2680
- <strong>RB Labs Auth</strong>
2681
- <code>{{ authHost() }}</code>
2682
- </span>
2683
- </div>
2684
-
2685
- @if (error()) {
2686
- <rb-message tone="danger">
2687
- <p>{{ error() }}</p>
2688
- </rb-message>
2689
- }
2690
-
2691
- <div class="rb-central-sign-in__actions">
2692
- <button
2693
- class="rb-central-sign-in__continue"
2694
- matButton="filled"
2695
- type="button"
2696
- (click)="signIn.emit()"
2697
- >
2698
- Continue to RB Labs Auth
2699
- <mat-icon fontSet="material-symbols-outlined" aria-hidden="true" iconPositionEnd
2700
- >arrow_forward</mat-icon
2701
- >
2702
- </button>
2703
- <a class="rb-central-sign-in__back" matButton="outlined" [routerLink]="backLink()"
2704
- >Back to home</a
2705
- >
2706
- </div>
2707
-
2708
- @if (note()) {
2709
- <p class="rb-central-sign-in__note">{{ note() }}</p>
2710
- }
2711
- </section>
2712
- `,
2713
- styles: ["rb-central-sign-in{display:block;inline-size:min(100%,var(--rb-size-card))}rb-central-sign-in .rb-central-sign-in__card{display:grid;gap:var(--rb-space-6);padding:var(--rb-space-8);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-lg);background-color:var(--rb-color-surface-raised);color:var(--rb-color-text);box-shadow:var(--rb-elevation-2)}@media(width<40rem){rb-central-sign-in .rb-central-sign-in__card{gap:var(--rb-space-5);padding:var(--rb-space-6) var(--rb-space-5)}}rb-central-sign-in .rb-central-sign-in__intro{display:grid;gap:var(--rb-space-2);min-width:0}rb-central-sign-in .rb-central-sign-in__icon{display:grid;place-items:center;inline-size:var(--rb-space-12);block-size:var(--rb-space-12);margin-block-end:var(--rb-space-2);border-radius:var(--rb-radius-md);background-color:var(--rb-color-primary-soft);color:var(--rb-color-on-primary-soft)}rb-central-sign-in .rb-central-sign-in__icon mat-icon{inline-size:var(--rb-size-icon-lg);block-size:var(--rb-size-icon-lg);font-size:var(--rb-size-icon-lg)}rb-central-sign-in .rb-central-sign-in__eyebrow{margin:0;color:var(--rb-color-primary);font:var(--rb-type-label-small);letter-spacing:var(--rb-type-label-small-tracking);text-transform:uppercase}rb-central-sign-in .rb-central-sign-in__title{margin:0;color:var(--rb-color-text-strong);font:var(--rb-type-headline-small);letter-spacing:var(--rb-type-headline-small-tracking);overflow-wrap:anywhere}rb-central-sign-in .rb-central-sign-in__description{margin:0;color:var(--rb-color-text-muted);font:var(--rb-type-body-medium)}rb-central-sign-in .rb-central-sign-in__provider{display:flex;gap:var(--rb-space-3);align-items:center;padding:var(--rb-space-3) var(--rb-space-4);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-md);background-color:var(--rb-color-surface-sunken)}rb-central-sign-in .rb-central-sign-in__mark{flex:none;inline-size:var(--rb-size-monogram-sm)}rb-central-sign-in .rb-central-sign-in__provider-name{display:grid;min-width:0}rb-central-sign-in .rb-central-sign-in__provider-name strong{color:var(--rb-color-text-strong);font:var(--rb-type-title-small);letter-spacing:var(--rb-type-title-small-tracking)}rb-central-sign-in .rb-central-sign-in__provider-name code{color:var(--rb-color-text-muted);font:var(--rb-type-body-small);font-family:var(--rb-font-mono);overflow-wrap:anywhere}rb-central-sign-in .rb-central-sign-in__actions{display:grid;gap:var(--rb-space-3)}rb-central-sign-in .rb-central-sign-in__note{margin:0;padding-block-start:var(--rb-space-4);border-block-start:1px solid var(--rb-color-border);color:var(--rb-color-text-muted);font:var(--rb-type-body-small)}\n"]
2714
- }]
2715
- }],
2716
- propDecorators: {
2717
- appName: [{
2718
- type: i0.Input,
2719
- args: [{
2720
- isSignal: true,
2721
- alias: "appName",
2722
- required: true
2723
- }]
2724
- }],
2725
- title: [{
2726
- type: i0.Input,
2727
- args: [{
2728
- isSignal: true,
2729
- alias: "title",
2730
- required: false
2731
- }]
2732
- }],
2733
- eyebrow: [{
2734
- type: i0.Input,
2735
- args: [{
2736
- isSignal: true,
2737
- alias: "eyebrow",
2738
- required: false
2739
- }]
2740
- }],
2741
- description: [{
2742
- type: i0.Input,
2743
- args: [{
2744
- isSignal: true,
2745
- alias: "description",
2746
- required: false
2747
- }]
2748
- }],
2749
- icon: [{
2750
- type: i0.Input,
2751
- args: [{
2752
- isSignal: true,
2753
- alias: "icon",
2754
- required: false
2755
- }]
2756
- }],
2757
- authHost: [{
2758
- type: i0.Input,
2759
- args: [{
2760
- isSignal: true,
2761
- alias: "authHost",
2762
- required: false
2763
- }]
2764
- }],
2765
- note: [{
2766
- type: i0.Input,
2767
- args: [{
2768
- isSignal: true,
2769
- alias: "note",
2770
- required: false
2771
- }]
2772
- }],
2773
- error: [{
2774
- type: i0.Input,
2775
- args: [{
2776
- isSignal: true,
2777
- alias: "error",
2778
- required: false
2779
- }]
2780
- }],
2781
- backLink: [{
2782
- type: i0.Input,
2783
- args: [{
2784
- isSignal: true,
2785
- alias: "backLink",
2786
- required: false
2787
- }]
2788
- }],
2789
- signIn: [{
2790
- type: i0.Output,
2791
- args: ["signIn"]
2792
- }]
2793
- }
2794
- });
2795
- var RbPublicShellComponent = class RbPublicShellComponent {
2796
- appName = input.required(...ngDevMode ? [{ debugName: "appName" }] : /* istanbul ignore next */ []);
2797
- homeLink = input("/", ...ngDevMode ? [{ debugName: "homeLink" }] : /* istanbul ignore next */ []);
2798
- main = viewChild.required("main", ...ngDevMode ? [{ debugName: "main" }] : /* istanbul ignore next */ []);
2799
- skipToMain(event) {
2800
- event.preventDefault();
2801
- this.main().nativeElement.focus();
2802
- }
2803
- static ɵfac = i0.ɵɵngDeclareFactory({
2804
- minVersion: "12.0.0",
2805
- version: "22.2.3",
2806
- ngImport: i0,
2807
- type: RbPublicShellComponent,
2808
- deps: [],
2809
- target: i0.ɵɵFactoryTarget.Component
2810
- });
2811
- static ɵcmp = i0.ɵɵngDeclareComponent({
2812
- minVersion: "17.2.0",
2813
- version: "22.2.3",
2814
- type: RbPublicShellComponent,
2815
- isStandalone: true,
2816
- selector: "rb-public-shell",
2817
- inputs: {
2818
- appName: {
2819
- classPropertyName: "appName",
2820
- publicName: "appName",
2821
- isSignal: true,
2822
- isRequired: true,
2823
- transformFunction: null
2824
- },
2825
- homeLink: {
2826
- classPropertyName: "homeLink",
2827
- publicName: "homeLink",
2828
- isSignal: true,
2829
- isRequired: false,
2830
- transformFunction: null
2831
- }
2832
- },
2833
- host: { classAttribute: "rb-public-shell" },
2834
- viewQueries: [{
2835
- propertyName: "main",
2836
- first: true,
2837
- predicate: ["main"],
2838
- descendants: true,
2839
- isSignal: true
2840
- }],
2841
- ngImport: i0,
2842
- template: `
2843
- <a class="rb-skip-link" href="#main-content" (click)="skipToMain($event)"
2844
- >Skip to main content</a
2845
- >
2846
-
2847
- <header class="rb-public-shell__header">
2848
- <rb-brand-lockup [appName]="appName()" [link]="homeLink()" />
2849
- <div class="rb-public-shell__actions">
2850
- <ng-content select="[rbShellActions]" />
2851
- <rb-theme-toggle />
2852
- </div>
2853
- </header>
2854
-
2855
- <main #main class="rb-public-shell__main" id="main-content" tabindex="-1">
2856
- <ng-content />
2857
- </main>
2858
-
2859
- <rb-shell-footer [appName]="appName()"><ng-content select="[rbShellFooter]" /></rb-shell-footer>
2860
- `,
2861
- isInline: true,
2862
- styles: ["rb-public-shell{display:flex;flex-direction:column;min-block-size:100dvh;background:radial-gradient(circle at 12% 18%,var(--rb-color-primary-soft),transparent 26rem),radial-gradient(circle at 88% 82%,var(--rb-color-primary-soft),transparent 30rem),var(--rb-color-bg)}rb-public-shell .rb-public-shell__header{display:flex;flex:none;gap:var(--rb-space-4);align-items:center;justify-content:space-between;inline-size:min(100%,var(--rb-size-content-max));min-block-size:var(--rb-size-shell-topbar);margin-inline:auto;padding-inline:var(--rb-space-page)}rb-public-shell .rb-public-shell__actions{display:flex;gap:var(--rb-space-2);align-items:center}rb-public-shell .rb-public-shell__main{display:grid;flex:1 0 auto;align-content:center;justify-items:center;inline-size:min(100%,var(--rb-size-content-max));margin-inline:auto;padding:var(--rb-space-8) var(--rb-space-page)}rb-public-shell .rb-public-shell__main:focus{outline:none}@media(width<40rem){rb-public-shell .rb-public-shell__main{align-content:start;padding-block:var(--rb-space-4) var(--rb-space-8)}}rb-public-shell rb-shell-footer{flex:none;border-block-start-color:transparent}\n"],
2863
- dependencies: [
2864
- {
2865
- kind: "component",
2866
- type: RbBrandLockupComponent,
2867
- selector: "rb-brand-lockup",
2868
- inputs: [
2869
- "appName",
2870
- "link",
2871
- "compact"
2872
- ]
2873
- },
2874
- {
2875
- kind: "component",
2876
- type: RbShellFooterComponent,
2877
- selector: "rb-shell-footer",
2878
- inputs: ["appName"]
2879
- },
2880
- {
2881
- kind: "component",
2882
- type: RbThemeToggleComponent,
2883
- selector: "rb-theme-toggle"
2884
- }
2885
- ],
2886
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
2887
- encapsulation: i0.ViewEncapsulation.None
2888
- });
2889
- };
2890
- i0.ɵɵngDeclareClassMetadata({
2891
- minVersion: "12.0.0",
2892
- version: "22.2.3",
2893
- ngImport: i0,
2894
- type: RbPublicShellComponent,
2895
- decorators: [{
2896
- type: Component,
2897
- args: [{
2898
- selector: "rb-public-shell",
2899
- imports: [
2900
- RbBrandLockupComponent,
2901
- RbShellFooterComponent,
2902
- RbThemeToggleComponent
2903
- ],
2904
- changeDetection: ChangeDetectionStrategy.OnPush,
2905
- encapsulation: ViewEncapsulation.None,
2906
- host: { class: "rb-public-shell" },
2907
- template: `
2908
- <a class="rb-skip-link" href="#main-content" (click)="skipToMain($event)"
2909
- >Skip to main content</a
2910
- >
2911
-
2912
- <header class="rb-public-shell__header">
2913
- <rb-brand-lockup [appName]="appName()" [link]="homeLink()" />
2914
- <div class="rb-public-shell__actions">
2915
- <ng-content select="[rbShellActions]" />
2916
- <rb-theme-toggle />
2917
- </div>
2918
- </header>
2919
-
2920
- <main #main class="rb-public-shell__main" id="main-content" tabindex="-1">
2921
- <ng-content />
2922
- </main>
2923
-
2924
- <rb-shell-footer [appName]="appName()"><ng-content select="[rbShellFooter]" /></rb-shell-footer>
2925
- `,
2926
- styles: ["rb-public-shell{display:flex;flex-direction:column;min-block-size:100dvh;background:radial-gradient(circle at 12% 18%,var(--rb-color-primary-soft),transparent 26rem),radial-gradient(circle at 88% 82%,var(--rb-color-primary-soft),transparent 30rem),var(--rb-color-bg)}rb-public-shell .rb-public-shell__header{display:flex;flex:none;gap:var(--rb-space-4);align-items:center;justify-content:space-between;inline-size:min(100%,var(--rb-size-content-max));min-block-size:var(--rb-size-shell-topbar);margin-inline:auto;padding-inline:var(--rb-space-page)}rb-public-shell .rb-public-shell__actions{display:flex;gap:var(--rb-space-2);align-items:center}rb-public-shell .rb-public-shell__main{display:grid;flex:1 0 auto;align-content:center;justify-items:center;inline-size:min(100%,var(--rb-size-content-max));margin-inline:auto;padding:var(--rb-space-8) var(--rb-space-page)}rb-public-shell .rb-public-shell__main:focus{outline:none}@media(width<40rem){rb-public-shell .rb-public-shell__main{align-content:start;padding-block:var(--rb-space-4) var(--rb-space-8)}}rb-public-shell rb-shell-footer{flex:none;border-block-start-color:transparent}\n"]
2927
- }]
2928
- }],
2929
- propDecorators: {
2930
- appName: [{
2931
- type: i0.Input,
2932
- args: [{
2933
- isSignal: true,
2934
- alias: "appName",
2935
- required: true
2936
- }]
2937
- }],
2938
- homeLink: [{
2939
- type: i0.Input,
2940
- args: [{
2941
- isSignal: true,
2942
- alias: "homeLink",
2943
- required: false
2944
- }]
2945
- }],
2946
- main: [{
2947
- type: i0.ViewChild,
2948
- args: ["main", { isSignal: true }]
2949
- }]
2950
- }
2951
- });
2952
- const RB_DESIGN_SYSTEM_VERSION = "1.2.1";
2953
- export { RB_BREAKPOINTS, RB_BREAKPOINT_WIDTHS, RB_DESIGN_SYSTEM_VERSION, RB_ICON_FONT_SET, RB_MESSAGE_TONE_LABELS, RB_THEME_COLORS, RB_THEME_OPTIONS, RB_THEME_STORAGE_KEY, RB_TONE_ICONS, RbAppShellComponent, RbBrandLockupComponent, RbCentralSignInComponent, RbConfirmDialogComponent, RbConfirmDialogService, RbEmptyStateComponent, RbMessageComponent, RbMonogramComponent, RbPageHeaderComponent, RbPanelComponent, RbPublicShellComponent, RbShellFooterComponent, RbStatusChipComponent, RbTechnicalValueComponent, RbThemeToggleComponent, ThemeService, provideRbDesignSystem, rbConfirmDialogId };
2954
-
2955
- //# sourceMappingURL=rblabs-dev-axiom.mjs.map
1
+ export * from "@rblabs-dev/axiom/app-shell";
2
+ export * from "@rblabs-dev/axiom/brand-lockup";
3
+ export * from "@rblabs-dev/axiom/central-sign-in";
4
+ export * from "@rblabs-dev/axiom/confirm-dialog";
5
+ export * from "@rblabs-dev/axiom/core";
6
+ export * from "@rblabs-dev/axiom/empty-state";
7
+ export * from "@rblabs-dev/axiom/message";
8
+ export * from "@rblabs-dev/axiom/monogram";
9
+ export * from "@rblabs-dev/axiom/page-header";
10
+ export * from "@rblabs-dev/axiom/panel";
11
+ export * from "@rblabs-dev/axiom/public-shell";
12
+ export * from "@rblabs-dev/axiom/shell-footer";
13
+ export * from "@rblabs-dev/axiom/status-chip";
14
+ export * from "@rblabs-dev/axiom/technical-value";
15
+ export * from "@rblabs-dev/axiom/theme-toggle";