@rblabs-dev/axiom 0.0.0-stage → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2955 @@
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