@ng-render/angular-material 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1116 @@
1
+ import { z } from 'zod';
2
+ import { defineCatalog } from '@json-render/core';
3
+ import { schema, ChildrenOutletDirective, SpecStateService, defineRegistry, provideNgRender } from '@ng-render/angular';
4
+ import * as i0 from '@angular/core';
5
+ import { input, ViewChild, Component, computed, inject, signal } from '@angular/core';
6
+ import * as i1 from '@angular/material/card';
7
+ import { MatCardModule } from '@angular/material/card';
8
+ import * as i1$1 from '@angular/material/button';
9
+ import { MatButtonModule } from '@angular/material/button';
10
+ import * as i2 from '@angular/material/icon';
11
+ import { MatIconModule } from '@angular/material/icon';
12
+ import * as i1$2 from '@angular/material/form-field';
13
+ import { MatFormFieldModule } from '@angular/material/form-field';
14
+ import * as i2$1 from '@angular/material/input';
15
+ import { MatInputModule } from '@angular/material/input';
16
+ import * as i1$3 from '@angular/material/checkbox';
17
+ import { MatCheckboxModule } from '@angular/material/checkbox';
18
+ import * as i1$4 from '@angular/material/chips';
19
+ import { MatChipsModule } from '@angular/material/chips';
20
+ import * as i1$5 from '@angular/material/divider';
21
+ import { MatDividerModule } from '@angular/material/divider';
22
+ import * as i2$2 from '@angular/material/select';
23
+ import { MatSelectModule } from '@angular/material/select';
24
+ import * as i1$6 from '@angular/material/slider';
25
+ import { MatSliderModule } from '@angular/material/slider';
26
+ import * as i3 from '@angular/material/datepicker';
27
+ import { MatDatepickerModule } from '@angular/material/datepicker';
28
+ import * as i1$7 from '@angular/material/tabs';
29
+ import { MatTabsModule } from '@angular/material/tabs';
30
+ import * as i1$8 from '@angular/material/toolbar';
31
+ import { MatToolbarModule } from '@angular/material/toolbar';
32
+ import * as i1$9 from '@angular/material/progress-bar';
33
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
34
+ import * as i2$3 from '@angular/material/progress-spinner';
35
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
36
+ import * as i1$a from '@angular/material/slide-toggle';
37
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
38
+ import * as i1$b from '@angular/material/radio';
39
+ import { MatRadioModule } from '@angular/material/radio';
40
+
41
+ const materialCatalog = defineCatalog(schema, {
42
+ components: {
43
+ // ── Base components (drop-in replacements) ──────────────
44
+ Card: {
45
+ props: z.object({
46
+ title: z.string().optional(),
47
+ subtitle: z.string().optional(),
48
+ appearance: z.enum(['outlined', 'raised']).optional(),
49
+ }),
50
+ slots: ['default'],
51
+ description: 'A Material card container with optional title, subtitle, and appearance',
52
+ },
53
+ Button: {
54
+ props: z.object({
55
+ label: z.string(),
56
+ variant: z.enum(['primary', 'secondary', 'danger']).optional(),
57
+ appearance: z.enum(['basic', 'raised', 'stroked', 'flat', 'icon', 'fab', 'mini-fab']).optional(),
58
+ icon: z.string().optional(),
59
+ disabled: z.boolean().optional(),
60
+ }),
61
+ slots: [],
62
+ description: 'A Material button with variant, appearance, and optional icon',
63
+ },
64
+ Text: {
65
+ props: z.object({
66
+ content: z.string(),
67
+ variant: z.enum(['body', 'heading', 'caption']).optional(),
68
+ }),
69
+ slots: [],
70
+ description: 'Text rendered with Material typography classes',
71
+ },
72
+ Metric: {
73
+ props: z.object({
74
+ label: z.string(),
75
+ value: z.union([z.string(), z.number()]),
76
+ icon: z.string().optional(),
77
+ }),
78
+ slots: [],
79
+ description: 'A metric display using an outlined Material card with optional icon',
80
+ },
81
+ Stack: {
82
+ props: z.object({
83
+ direction: z.enum(['horizontal', 'vertical']).optional(),
84
+ gap: z.number().optional(),
85
+ align: z.enum(['start', 'center', 'end', 'stretch']).optional(),
86
+ }),
87
+ slots: ['default'],
88
+ description: 'A flex layout container for arranging children',
89
+ },
90
+ Input: {
91
+ props: z.object({
92
+ label: z.string().optional(),
93
+ type: z.enum(['text', 'email', 'password', 'number']).optional(),
94
+ placeholder: z.string().optional(),
95
+ value: z.string().optional(),
96
+ disabled: z.boolean().optional(),
97
+ appearance: z.enum(['fill', 'outline']).optional(),
98
+ hint: z.string().optional(),
99
+ }),
100
+ slots: [],
101
+ description: 'A Material form field with matInput, appearance, and hint',
102
+ },
103
+ Checkbox: {
104
+ props: z.object({
105
+ label: z.string().optional(),
106
+ checked: z.boolean().optional(),
107
+ disabled: z.boolean().optional(),
108
+ color: z.enum(['primary', 'accent', 'warn']).optional(),
109
+ }),
110
+ slots: [],
111
+ description: 'A Material checkbox with color and two-way binding',
112
+ },
113
+ Badge: {
114
+ props: z.object({
115
+ text: z.string(),
116
+ variant: z.enum(['info', 'success', 'warning', 'danger']).optional(),
117
+ }),
118
+ slots: [],
119
+ description: 'A Material chip used as a colored badge/tag',
120
+ },
121
+ Divider: {
122
+ props: z.object({
123
+ inset: z.boolean().optional(),
124
+ vertical: z.boolean().optional(),
125
+ }),
126
+ slots: [],
127
+ description: 'A Material divider line',
128
+ },
129
+ // ── New Material-specific components ────────────────────
130
+ Select: {
131
+ props: z.object({
132
+ label: z.string().optional(),
133
+ value: z.string().optional(),
134
+ options: z.array(z.object({ value: z.string(), label: z.string() })),
135
+ disabled: z.boolean().optional(),
136
+ appearance: z.enum(['fill', 'outline']).optional(),
137
+ }),
138
+ slots: [],
139
+ description: 'A Material select dropdown with options array',
140
+ },
141
+ Slider: {
142
+ props: z.object({
143
+ min: z.number().optional(),
144
+ max: z.number().optional(),
145
+ step: z.number().optional(),
146
+ value: z.number().optional(),
147
+ disabled: z.boolean().optional(),
148
+ }),
149
+ slots: [],
150
+ description: 'A Material slider for numeric range selection',
151
+ },
152
+ DatePicker: {
153
+ props: z.object({
154
+ label: z.string().optional(),
155
+ value: z.string().optional(),
156
+ disabled: z.boolean().optional(),
157
+ appearance: z.enum(['fill', 'outline']).optional(),
158
+ }),
159
+ slots: [],
160
+ description: 'A Material datepicker with form field',
161
+ },
162
+ Tabs: {
163
+ props: z.object({
164
+ labels: z.array(z.string()),
165
+ selectedIndex: z.number().optional(),
166
+ }),
167
+ slots: ['default'],
168
+ description: 'A Material tab group — each child element becomes a tab panel',
169
+ },
170
+ Toolbar: {
171
+ props: z.object({
172
+ color: z.enum(['primary', 'accent', 'warn']).optional(),
173
+ }),
174
+ slots: ['default'],
175
+ description: 'A Material toolbar container',
176
+ },
177
+ Progress: {
178
+ props: z.object({
179
+ value: z.number().optional(),
180
+ mode: z.enum(['determinate', 'indeterminate', 'buffer', 'query']).optional(),
181
+ type: z.enum(['bar', 'spinner']).optional(),
182
+ color: z.enum(['primary', 'accent', 'warn']).optional(),
183
+ }),
184
+ slots: [],
185
+ description: 'A Material progress bar or spinner',
186
+ },
187
+ Chip: {
188
+ props: z.object({
189
+ items: z.array(z.object({
190
+ label: z.string(),
191
+ removable: z.boolean().optional(),
192
+ color: z.enum(['primary', 'accent', 'warn']).optional(),
193
+ })),
194
+ }),
195
+ slots: [],
196
+ description: 'A Material chip set displaying a list of chips',
197
+ },
198
+ Toggle: {
199
+ props: z.object({
200
+ label: z.string().optional(),
201
+ checked: z.boolean().optional(),
202
+ disabled: z.boolean().optional(),
203
+ color: z.enum(['primary', 'accent', 'warn']).optional(),
204
+ }),
205
+ slots: [],
206
+ description: 'A Material slide toggle with two-way binding',
207
+ },
208
+ Radio: {
209
+ props: z.object({
210
+ label: z.string().optional(),
211
+ value: z.string().optional(),
212
+ options: z.array(z.object({ value: z.string(), label: z.string() })),
213
+ disabled: z.boolean().optional(),
214
+ color: z.enum(['primary', 'accent', 'warn']).optional(),
215
+ }),
216
+ slots: [],
217
+ description: 'A Material radio group with options array',
218
+ },
219
+ },
220
+ actions: {},
221
+ });
222
+
223
+ class MatCardComponent {
224
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
225
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
226
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
227
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
228
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
229
+ childrenOutlet;
230
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
231
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MatCardComponent, isStandalone: true, selector: "jrm-card", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "childrenOutlet", first: true, predicate: ChildrenOutletDirective, descendants: true, static: true }], ngImport: i0, template: `
232
+ <mat-card [appearance]="$any(element().props['appearance']) ?? 'outlined'">
233
+ @if (element().props['title'] || element().props['subtitle']) {
234
+ <mat-card-header>
235
+ <mat-card-title>{{ element().props['title'] ?? '' }}</mat-card-title>
236
+ @if (element().props['subtitle']) {
237
+ <mat-card-subtitle>{{ element().props['subtitle'] }}</mat-card-subtitle>
238
+ }
239
+ </mat-card-header>
240
+ }
241
+ <mat-card-content>
242
+ <ng-template jrChildren></ng-template>
243
+ </mat-card-content>
244
+ </mat-card>
245
+ `, isInline: true, styles: ["mat-card{margin:0}mat-card-content{display:flex;flex-direction:column;gap:12px}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i1.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i1.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: ChildrenOutletDirective, selector: "[jrChildren]", exportAs: ["jrChildren"] }] });
246
+ }
247
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatCardComponent, decorators: [{
248
+ type: Component,
249
+ args: [{ selector: 'jrm-card', standalone: true, imports: [MatCardModule, ChildrenOutletDirective], template: `
250
+ <mat-card [appearance]="$any(element().props['appearance']) ?? 'outlined'">
251
+ @if (element().props['title'] || element().props['subtitle']) {
252
+ <mat-card-header>
253
+ <mat-card-title>{{ element().props['title'] ?? '' }}</mat-card-title>
254
+ @if (element().props['subtitle']) {
255
+ <mat-card-subtitle>{{ element().props['subtitle'] }}</mat-card-subtitle>
256
+ }
257
+ </mat-card-header>
258
+ }
259
+ <mat-card-content>
260
+ <ng-template jrChildren></ng-template>
261
+ </mat-card-content>
262
+ </mat-card>
263
+ `, styles: ["mat-card{margin:0}mat-card-content{display:flex;flex-direction:column;gap:12px}\n"] }]
264
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], childrenOutlet: [{
265
+ type: ViewChild,
266
+ args: [ChildrenOutletDirective, { static: true }]
267
+ }] } });
268
+
269
+ class MatButtonComponent {
270
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
271
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
272
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
273
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
274
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
275
+ appearance = computed(() => this.element().props['appearance'] ?? 'basic', ...(ngDevMode ? [{ debugName: "appearance" }] : []));
276
+ icon = computed(() => this.element().props['icon'], ...(ngDevMode ? [{ debugName: "icon" }] : []));
277
+ color = computed(() => {
278
+ const variant = this.element().props['variant'];
279
+ if (variant === 'danger')
280
+ return 'warn';
281
+ if (variant === 'secondary')
282
+ return 'accent';
283
+ return 'primary';
284
+ }, ...(ngDevMode ? [{ debugName: "color" }] : []));
285
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
286
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MatButtonComponent, isStandalone: true, selector: "jrm-button", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
287
+ @switch (appearance()) {
288
+ @case ('raised') {
289
+ <button mat-raised-button [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
290
+ @if (icon()) { <mat-icon>{{ icon() }}</mat-icon> }
291
+ {{ element().props['label'] }}
292
+ </button>
293
+ }
294
+ @case ('stroked') {
295
+ <button mat-stroked-button [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
296
+ @if (icon()) { <mat-icon>{{ icon() }}</mat-icon> }
297
+ {{ element().props['label'] }}
298
+ </button>
299
+ }
300
+ @case ('flat') {
301
+ <button mat-flat-button [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
302
+ @if (icon()) { <mat-icon>{{ icon() }}</mat-icon> }
303
+ {{ element().props['label'] }}
304
+ </button>
305
+ }
306
+ @case ('icon') {
307
+ <button mat-icon-button [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
308
+ <mat-icon>{{ icon() ?? 'more_vert' }}</mat-icon>
309
+ </button>
310
+ }
311
+ @case ('fab') {
312
+ <button mat-fab [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
313
+ <mat-icon>{{ icon() ?? 'add' }}</mat-icon>
314
+ </button>
315
+ }
316
+ @case ('mini-fab') {
317
+ <button mat-mini-fab [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
318
+ <mat-icon>{{ icon() ?? 'add' }}</mat-icon>
319
+ </button>
320
+ }
321
+ @default {
322
+ <button mat-button [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
323
+ @if (icon()) { <mat-icon>{{ icon() }}</mat-icon> }
324
+ {{ element().props['label'] }}
325
+ </button>
326
+ }
327
+ }
328
+ `, isInline: true, styles: [":host{display:inline-block}mat-icon{margin-right:4px;font-size:18px;width:18px;height:18px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatButton, 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] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$1.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$1.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
329
+ }
330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatButtonComponent, decorators: [{
331
+ type: Component,
332
+ args: [{ selector: 'jrm-button', standalone: true, imports: [MatButtonModule, MatIconModule], template: `
333
+ @switch (appearance()) {
334
+ @case ('raised') {
335
+ <button mat-raised-button [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
336
+ @if (icon()) { <mat-icon>{{ icon() }}</mat-icon> }
337
+ {{ element().props['label'] }}
338
+ </button>
339
+ }
340
+ @case ('stroked') {
341
+ <button mat-stroked-button [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
342
+ @if (icon()) { <mat-icon>{{ icon() }}</mat-icon> }
343
+ {{ element().props['label'] }}
344
+ </button>
345
+ }
346
+ @case ('flat') {
347
+ <button mat-flat-button [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
348
+ @if (icon()) { <mat-icon>{{ icon() }}</mat-icon> }
349
+ {{ element().props['label'] }}
350
+ </button>
351
+ }
352
+ @case ('icon') {
353
+ <button mat-icon-button [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
354
+ <mat-icon>{{ icon() ?? 'more_vert' }}</mat-icon>
355
+ </button>
356
+ }
357
+ @case ('fab') {
358
+ <button mat-fab [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
359
+ <mat-icon>{{ icon() ?? 'add' }}</mat-icon>
360
+ </button>
361
+ }
362
+ @case ('mini-fab') {
363
+ <button mat-mini-fab [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
364
+ <mat-icon>{{ icon() ?? 'add' }}</mat-icon>
365
+ </button>
366
+ }
367
+ @default {
368
+ <button mat-button [color]="color()" [disabled]="$any(element().props['disabled']) ?? false" (click)="emit()('press')">
369
+ @if (icon()) { <mat-icon>{{ icon() }}</mat-icon> }
370
+ {{ element().props['label'] }}
371
+ </button>
372
+ }
373
+ }
374
+ `, styles: [":host{display:inline-block}mat-icon{margin-right:4px;font-size:18px;width:18px;height:18px}\n"] }]
375
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
376
+
377
+ class MatTextComponent {
378
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
379
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
380
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
381
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
382
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
383
+ variant() {
384
+ return this.element().props['variant'] ?? 'body';
385
+ }
386
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
387
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MatTextComponent, isStandalone: true, selector: "jrm-text", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
388
+ @switch (variant()) {
389
+ @case ('heading') {
390
+ <h2 class="mat-headline-5">{{ element().props['content'] }}</h2>
391
+ }
392
+ @case ('caption') {
393
+ <span class="mat-caption">{{ element().props['content'] }}</span>
394
+ }
395
+ @default {
396
+ <p class="mat-body-1">{{ element().props['content'] }}</p>
397
+ }
398
+ }
399
+ `, isInline: true, styles: ["h2,p{margin:0}\n"] });
400
+ }
401
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatTextComponent, decorators: [{
402
+ type: Component,
403
+ args: [{ selector: 'jrm-text', standalone: true, template: `
404
+ @switch (variant()) {
405
+ @case ('heading') {
406
+ <h2 class="mat-headline-5">{{ element().props['content'] }}</h2>
407
+ }
408
+ @case ('caption') {
409
+ <span class="mat-caption">{{ element().props['content'] }}</span>
410
+ }
411
+ @default {
412
+ <p class="mat-body-1">{{ element().props['content'] }}</p>
413
+ }
414
+ }
415
+ `, styles: ["h2,p{margin:0}\n"] }]
416
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
417
+
418
+ class MatMetricComponent {
419
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
420
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
421
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
422
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
423
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
424
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatMetricComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
425
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MatMetricComponent, isStandalone: true, selector: "jrm-metric", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
426
+ <mat-card appearance="outlined" class="metric-card">
427
+ <mat-card-content>
428
+ <div class="metric-layout">
429
+ @if (element().props['icon']) {
430
+ <mat-icon class="metric-icon">{{ element().props['icon'] }}</mat-icon>
431
+ }
432
+ <div class="metric-text">
433
+ <span class="mat-caption metric-label">{{ element().props['label'] }}</span>
434
+ <span class="metric-value">{{ element().props['value'] }}</span>
435
+ </div>
436
+ </div>
437
+ </mat-card-content>
438
+ </mat-card>
439
+ `, isInline: true, styles: [".metric-card{margin:0}.metric-layout{display:flex;align-items:center;gap:12px}.metric-icon{color:var(--mat-sys-primary);font-size:32px;width:32px;height:32px}.metric-text{display:flex;flex-direction:column;gap:2px}.metric-label{text-transform:uppercase;letter-spacing:.05em}.metric-value{font-size:24px;font-weight:700}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
440
+ }
441
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatMetricComponent, decorators: [{
442
+ type: Component,
443
+ args: [{ selector: 'jrm-metric', standalone: true, imports: [MatCardModule, MatIconModule], template: `
444
+ <mat-card appearance="outlined" class="metric-card">
445
+ <mat-card-content>
446
+ <div class="metric-layout">
447
+ @if (element().props['icon']) {
448
+ <mat-icon class="metric-icon">{{ element().props['icon'] }}</mat-icon>
449
+ }
450
+ <div class="metric-text">
451
+ <span class="mat-caption metric-label">{{ element().props['label'] }}</span>
452
+ <span class="metric-value">{{ element().props['value'] }}</span>
453
+ </div>
454
+ </div>
455
+ </mat-card-content>
456
+ </mat-card>
457
+ `, styles: [".metric-card{margin:0}.metric-layout{display:flex;align-items:center;gap:12px}.metric-icon{color:var(--mat-sys-primary);font-size:32px;width:32px;height:32px}.metric-text{display:flex;flex-direction:column;gap:2px}.metric-label{text-transform:uppercase;letter-spacing:.05em}.metric-value{font-size:24px;font-weight:700}\n"] }]
458
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
459
+
460
+ class MatStackComponent {
461
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
462
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
463
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
464
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
465
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
466
+ childrenOutlet;
467
+ flexDirection = computed(() => {
468
+ const dir = this.element().props['direction'];
469
+ return dir === 'horizontal' ? 'row' : 'column';
470
+ }, ...(ngDevMode ? [{ debugName: "flexDirection" }] : []));
471
+ gap = computed(() => this.element().props['gap'] ?? 12, ...(ngDevMode ? [{ debugName: "gap" }] : []));
472
+ alignItems = computed(() => {
473
+ const align = this.element().props['align'];
474
+ if (align === 'center')
475
+ return 'center';
476
+ if (align === 'end')
477
+ return 'flex-end';
478
+ if (align === 'stretch')
479
+ return 'stretch';
480
+ return 'flex-start';
481
+ }, ...(ngDevMode ? [{ debugName: "alignItems" }] : []));
482
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatStackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
483
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: MatStackComponent, isStandalone: true, selector: "jrm-stack", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "childrenOutlet", first: true, predicate: ChildrenOutletDirective, descendants: true, static: true }], ngImport: i0, template: `
484
+ <div
485
+ class="stack"
486
+ [style.flex-direction]="flexDirection()"
487
+ [style.gap.px]="gap()"
488
+ [style.align-items]="alignItems()">
489
+ <ng-template jrChildren></ng-template>
490
+ </div>
491
+ `, isInline: true, styles: [".stack{display:flex;width:100%}\n"], dependencies: [{ kind: "directive", type: ChildrenOutletDirective, selector: "[jrChildren]", exportAs: ["jrChildren"] }] });
492
+ }
493
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatStackComponent, decorators: [{
494
+ type: Component,
495
+ args: [{ selector: 'jrm-stack', standalone: true, imports: [ChildrenOutletDirective], template: `
496
+ <div
497
+ class="stack"
498
+ [style.flex-direction]="flexDirection()"
499
+ [style.gap.px]="gap()"
500
+ [style.align-items]="alignItems()">
501
+ <ng-template jrChildren></ng-template>
502
+ </div>
503
+ `, styles: [".stack{display:flex;width:100%}\n"] }]
504
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], childrenOutlet: [{
505
+ type: ViewChild,
506
+ args: [ChildrenOutletDirective, { static: true }]
507
+ }] } });
508
+
509
+ class MatInputComponent {
510
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
511
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
512
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
513
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
514
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
515
+ stateService = inject(SpecStateService);
516
+ onInput(event) {
517
+ const value = event.target.value;
518
+ const bindingPath = this.bindings()?.['value'];
519
+ if (bindingPath) {
520
+ this.stateService.set(bindingPath, value);
521
+ }
522
+ }
523
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
524
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MatInputComponent, isStandalone: true, selector: "jrm-input", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
525
+ <mat-form-field [appearance]="$any(element().props['appearance']) ?? 'outline'" class="full-width">
526
+ @if (element().props['label']) {
527
+ <mat-label>{{ element().props['label'] }}</mat-label>
528
+ }
529
+ <input
530
+ matInput
531
+ [type]="$any(element().props['type']) ?? 'text'"
532
+ [placeholder]="$any(element().props['placeholder']) ?? ''"
533
+ [value]="$any(element().props['value']) ?? ''"
534
+ [disabled]="$any(element().props['disabled']) ?? false"
535
+ (input)="onInput($event)"
536
+ (change)="emit()('change')" />
537
+ @if (element().props['hint']) {
538
+ <mat-hint>{{ element().props['hint'] }}</mat-hint>
539
+ }
540
+ </mat-form-field>
541
+ `, isInline: true, styles: [".full-width{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }] });
542
+ }
543
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatInputComponent, decorators: [{
544
+ type: Component,
545
+ args: [{ selector: 'jrm-input', standalone: true, imports: [MatFormFieldModule, MatInputModule], template: `
546
+ <mat-form-field [appearance]="$any(element().props['appearance']) ?? 'outline'" class="full-width">
547
+ @if (element().props['label']) {
548
+ <mat-label>{{ element().props['label'] }}</mat-label>
549
+ }
550
+ <input
551
+ matInput
552
+ [type]="$any(element().props['type']) ?? 'text'"
553
+ [placeholder]="$any(element().props['placeholder']) ?? ''"
554
+ [value]="$any(element().props['value']) ?? ''"
555
+ [disabled]="$any(element().props['disabled']) ?? false"
556
+ (input)="onInput($event)"
557
+ (change)="emit()('change')" />
558
+ @if (element().props['hint']) {
559
+ <mat-hint>{{ element().props['hint'] }}</mat-hint>
560
+ }
561
+ </mat-form-field>
562
+ `, styles: [".full-width{width:100%}\n"] }]
563
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
564
+
565
+ class MatCheckboxComponent {
566
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
567
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
568
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
569
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
570
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
571
+ stateService = inject(SpecStateService);
572
+ onChange(event) {
573
+ const checked = event.checked;
574
+ const bindingPath = this.bindings()?.['checked'];
575
+ if (bindingPath) {
576
+ this.stateService.set(bindingPath, checked);
577
+ }
578
+ this.emit()('change');
579
+ }
580
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
581
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: MatCheckboxComponent, isStandalone: true, selector: "jrm-checkbox", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
582
+ <mat-checkbox
583
+ [checked]="$any(element().props['checked']) ?? false"
584
+ [disabled]="$any(element().props['disabled']) ?? false"
585
+ [color]="$any(element().props['color']) ?? 'primary'"
586
+ (change)="onChange($event)">
587
+ {{ element().props['label'] ?? '' }}
588
+ </mat-checkbox>
589
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i1$3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] });
590
+ }
591
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatCheckboxComponent, decorators: [{
592
+ type: Component,
593
+ args: [{
594
+ selector: 'jrm-checkbox',
595
+ standalone: true,
596
+ imports: [MatCheckboxModule],
597
+ template: `
598
+ <mat-checkbox
599
+ [checked]="$any(element().props['checked']) ?? false"
600
+ [disabled]="$any(element().props['disabled']) ?? false"
601
+ [color]="$any(element().props['color']) ?? 'primary'"
602
+ (change)="onChange($event)">
603
+ {{ element().props['label'] ?? '' }}
604
+ </mat-checkbox>
605
+ `,
606
+ }]
607
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
608
+
609
+ class MatBadgeComponent {
610
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
611
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
612
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
613
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
614
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
615
+ chipClass = computed(() => {
616
+ const variant = this.element().props['variant'] ?? 'info';
617
+ return `badge-${variant}`;
618
+ }, ...(ngDevMode ? [{ debugName: "chipClass" }] : []));
619
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
620
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: MatBadgeComponent, isStandalone: true, selector: "jrm-badge", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
621
+ <mat-chip-set>
622
+ <mat-chip [highlighted]="true" [class]="chipClass()">
623
+ {{ element().props['text'] ?? '' }}
624
+ </mat-chip>
625
+ </mat-chip-set>
626
+ `, isInline: true, styles: [".badge-info{--mdc-chip-elevated-container-color: #dbeafe;--mdc-chip-label-text-color: #1e40af}.badge-success{--mdc-chip-elevated-container-color: #dcfce7;--mdc-chip-label-text-color: #166534}.badge-warning{--mdc-chip-elevated-container-color: #fef3c7;--mdc-chip-label-text-color: #92400e}.badge-danger{--mdc-chip-elevated-container-color: #fee2e2;--mdc-chip-label-text-color: #991b1b}\n"], dependencies: [{ kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i1$4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i1$4.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }] });
627
+ }
628
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatBadgeComponent, decorators: [{
629
+ type: Component,
630
+ args: [{ selector: 'jrm-badge', standalone: true, imports: [MatChipsModule], template: `
631
+ <mat-chip-set>
632
+ <mat-chip [highlighted]="true" [class]="chipClass()">
633
+ {{ element().props['text'] ?? '' }}
634
+ </mat-chip>
635
+ </mat-chip-set>
636
+ `, styles: [".badge-info{--mdc-chip-elevated-container-color: #dbeafe;--mdc-chip-label-text-color: #1e40af}.badge-success{--mdc-chip-elevated-container-color: #dcfce7;--mdc-chip-label-text-color: #166534}.badge-warning{--mdc-chip-elevated-container-color: #fef3c7;--mdc-chip-label-text-color: #92400e}.badge-danger{--mdc-chip-elevated-container-color: #fee2e2;--mdc-chip-label-text-color: #991b1b}\n"] }]
637
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
638
+
639
+ class MatDividerComponent {
640
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
641
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
642
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
643
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
644
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
645
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatDividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
646
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: MatDividerComponent, isStandalone: true, selector: "jrm-divider", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
647
+ <mat-divider
648
+ [inset]="$any(element().props['inset']) ?? false"
649
+ [vertical]="$any(element().props['vertical']) ?? false">
650
+ </mat-divider>
651
+ `, isInline: true, styles: [":host{display:block;margin:8px 0}\n"], dependencies: [{ kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i1$5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }] });
652
+ }
653
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatDividerComponent, decorators: [{
654
+ type: Component,
655
+ args: [{ selector: 'jrm-divider', standalone: true, imports: [MatDividerModule], template: `
656
+ <mat-divider
657
+ [inset]="$any(element().props['inset']) ?? false"
658
+ [vertical]="$any(element().props['vertical']) ?? false">
659
+ </mat-divider>
660
+ `, styles: [":host{display:block;margin:8px 0}\n"] }]
661
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
662
+
663
+ class MatSelectComponent {
664
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
665
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
666
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
667
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
668
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
669
+ stateService = inject(SpecStateService);
670
+ options() {
671
+ return this.element().props['options'] ?? [];
672
+ }
673
+ onSelectionChange(event) {
674
+ const value = event.value;
675
+ const bindingPath = this.bindings()?.['value'];
676
+ if (bindingPath) {
677
+ this.stateService.set(bindingPath, value);
678
+ }
679
+ this.emit()('change');
680
+ }
681
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
682
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MatSelectComponent, isStandalone: true, selector: "jrm-select", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
683
+ <mat-form-field [appearance]="$any(element().props['appearance']) ?? 'outline'" class="full-width">
684
+ @if (element().props['label']) {
685
+ <mat-label>{{ element().props['label'] }}</mat-label>
686
+ }
687
+ <mat-select
688
+ [value]="$any(element().props['value']) ?? ''"
689
+ [disabled]="$any(element().props['disabled']) ?? false"
690
+ (selectionChange)="onSelectionChange($event)">
691
+ @for (opt of options(); track opt.value) {
692
+ <mat-option [value]="opt.value">{{ opt.label }}</mat-option>
693
+ }
694
+ </mat-select>
695
+ </mat-form-field>
696
+ `, isInline: true, styles: [".full-width{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$2.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2$2.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }] });
697
+ }
698
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatSelectComponent, decorators: [{
699
+ type: Component,
700
+ args: [{ selector: 'jrm-select', standalone: true, imports: [MatFormFieldModule, MatSelectModule], template: `
701
+ <mat-form-field [appearance]="$any(element().props['appearance']) ?? 'outline'" class="full-width">
702
+ @if (element().props['label']) {
703
+ <mat-label>{{ element().props['label'] }}</mat-label>
704
+ }
705
+ <mat-select
706
+ [value]="$any(element().props['value']) ?? ''"
707
+ [disabled]="$any(element().props['disabled']) ?? false"
708
+ (selectionChange)="onSelectionChange($event)">
709
+ @for (opt of options(); track opt.value) {
710
+ <mat-option [value]="opt.value">{{ opt.label }}</mat-option>
711
+ }
712
+ </mat-select>
713
+ </mat-form-field>
714
+ `, styles: [".full-width{width:100%}\n"] }]
715
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
716
+
717
+ class MatSliderComponent {
718
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
719
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
720
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
721
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
722
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
723
+ stateService = inject(SpecStateService);
724
+ onValueChange(value) {
725
+ const bindingPath = this.bindings()?.['value'];
726
+ if (bindingPath) {
727
+ this.stateService.set(bindingPath, value);
728
+ }
729
+ this.emit()('change');
730
+ }
731
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
732
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: MatSliderComponent, isStandalone: true, selector: "jrm-slider", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
733
+ <mat-slider
734
+ [min]="$any(element().props['min']) ?? 0"
735
+ [max]="$any(element().props['max']) ?? 100"
736
+ [step]="$any(element().props['step']) ?? 1"
737
+ [disabled]="$any(element().props['disabled']) ?? false"
738
+ class="full-width">
739
+ <input matSliderThumb [value]="$any(element().props['value']) ?? 0" (valueChange)="onValueChange($event)" />
740
+ </mat-slider>
741
+ `, isInline: true, styles: [".full-width{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i1$6.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i1$6.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }] });
742
+ }
743
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatSliderComponent, decorators: [{
744
+ type: Component,
745
+ args: [{ selector: 'jrm-slider', standalone: true, imports: [MatSliderModule], template: `
746
+ <mat-slider
747
+ [min]="$any(element().props['min']) ?? 0"
748
+ [max]="$any(element().props['max']) ?? 100"
749
+ [step]="$any(element().props['step']) ?? 1"
750
+ [disabled]="$any(element().props['disabled']) ?? false"
751
+ class="full-width">
752
+ <input matSliderThumb [value]="$any(element().props['value']) ?? 0" (valueChange)="onValueChange($event)" />
753
+ </mat-slider>
754
+ `, styles: [".full-width{width:100%}\n"] }]
755
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
756
+
757
+ class MatDatepickerComponent {
758
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
759
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
760
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
761
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
762
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
763
+ stateService = inject(SpecStateService);
764
+ onDateChange(event) {
765
+ const date = event.value;
766
+ const iso = date ? date.toISOString() : '';
767
+ const bindingPath = this.bindings()?.['value'];
768
+ if (bindingPath) {
769
+ this.stateService.set(bindingPath, iso);
770
+ }
771
+ this.emit()('change');
772
+ }
773
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatDatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
774
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MatDatepickerComponent, isStandalone: true, selector: "jrm-datepicker", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
775
+ <mat-form-field [appearance]="$any(element().props['appearance']) ?? 'outline'" class="full-width">
776
+ @if (element().props['label']) {
777
+ <mat-label>{{ element().props['label'] }}</mat-label>
778
+ }
779
+ <input
780
+ matInput
781
+ [matDatepicker]="picker"
782
+ [disabled]="$any(element().props['disabled']) ?? false"
783
+ (dateChange)="onDateChange($event)" />
784
+ <mat-datepicker-toggle matIconSuffix [for]="picker"></mat-datepicker-toggle>
785
+ <mat-datepicker #picker></mat-datepicker>
786
+ </mat-form-field>
787
+ `, isInline: true, styles: [".full-width{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i3.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i3.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i3.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }] });
788
+ }
789
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatDatepickerComponent, decorators: [{
790
+ type: Component,
791
+ args: [{ selector: 'jrm-datepicker', standalone: true, imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule], template: `
792
+ <mat-form-field [appearance]="$any(element().props['appearance']) ?? 'outline'" class="full-width">
793
+ @if (element().props['label']) {
794
+ <mat-label>{{ element().props['label'] }}</mat-label>
795
+ }
796
+ <input
797
+ matInput
798
+ [matDatepicker]="picker"
799
+ [disabled]="$any(element().props['disabled']) ?? false"
800
+ (dateChange)="onDateChange($event)" />
801
+ <mat-datepicker-toggle matIconSuffix [for]="picker"></mat-datepicker-toggle>
802
+ <mat-datepicker #picker></mat-datepicker>
803
+ </mat-form-field>
804
+ `, styles: [".full-width{width:100%}\n"] }]
805
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
806
+
807
+ class MatTabsComponent {
808
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
809
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
810
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
811
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
812
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
813
+ childrenOutlet;
814
+ selectedIndex = signal(0, ...(ngDevMode ? [{ debugName: "selectedIndex" }] : []));
815
+ labels() {
816
+ return this.element().props['labels'] ?? [];
817
+ }
818
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
819
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MatTabsComponent, isStandalone: true, selector: "jrm-tabs", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "childrenOutlet", first: true, predicate: ChildrenOutletDirective, descendants: true, static: true }], ngImport: i0, template: `
820
+ <mat-tab-group
821
+ [selectedIndex]="selectedIndex()"
822
+ (selectedIndexChange)="selectedIndex.set($event)">
823
+ @for (label of labels(); track label; let i = $index) {
824
+ <mat-tab [label]="label">
825
+ @if (selectedIndex() === i) {
826
+ <ng-template jrChildren></ng-template>
827
+ }
828
+ </mat-tab>
829
+ }
830
+ </mat-tab-group>
831
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i1$7.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i1$7.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: ChildrenOutletDirective, selector: "[jrChildren]", exportAs: ["jrChildren"] }] });
832
+ }
833
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatTabsComponent, decorators: [{
834
+ type: Component,
835
+ args: [{
836
+ selector: 'jrm-tabs',
837
+ standalone: true,
838
+ imports: [MatTabsModule, ChildrenOutletDirective],
839
+ template: `
840
+ <mat-tab-group
841
+ [selectedIndex]="selectedIndex()"
842
+ (selectedIndexChange)="selectedIndex.set($event)">
843
+ @for (label of labels(); track label; let i = $index) {
844
+ <mat-tab [label]="label">
845
+ @if (selectedIndex() === i) {
846
+ <ng-template jrChildren></ng-template>
847
+ }
848
+ </mat-tab>
849
+ }
850
+ </mat-tab-group>
851
+ `,
852
+ }]
853
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], childrenOutlet: [{
854
+ type: ViewChild,
855
+ args: [ChildrenOutletDirective, { static: true }]
856
+ }] } });
857
+
858
+ class MatToolbarComponent {
859
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
860
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
861
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
862
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
863
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
864
+ childrenOutlet;
865
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
866
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: MatToolbarComponent, isStandalone: true, selector: "jrm-toolbar", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "childrenOutlet", first: true, predicate: ChildrenOutletDirective, descendants: true, static: true }], ngImport: i0, template: `
867
+ <mat-toolbar [color]="$any(element().props['color']) ?? 'primary'">
868
+ <ng-template jrChildren></ng-template>
869
+ </mat-toolbar>
870
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i1$8.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: ChildrenOutletDirective, selector: "[jrChildren]", exportAs: ["jrChildren"] }] });
871
+ }
872
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatToolbarComponent, decorators: [{
873
+ type: Component,
874
+ args: [{
875
+ selector: 'jrm-toolbar',
876
+ standalone: true,
877
+ imports: [MatToolbarModule, ChildrenOutletDirective],
878
+ template: `
879
+ <mat-toolbar [color]="$any(element().props['color']) ?? 'primary'">
880
+ <ng-template jrChildren></ng-template>
881
+ </mat-toolbar>
882
+ `,
883
+ }]
884
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], childrenOutlet: [{
885
+ type: ViewChild,
886
+ args: [ChildrenOutletDirective, { static: true }]
887
+ }] } });
888
+
889
+ class MatProgressComponent {
890
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
891
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
892
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
893
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
894
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
895
+ progressType = computed(() => this.element().props['type'] ?? 'bar', ...(ngDevMode ? [{ debugName: "progressType" }] : []));
896
+ barMode = computed(() => this.element().props['mode'] ?? 'determinate', ...(ngDevMode ? [{ debugName: "barMode" }] : []));
897
+ spinnerMode = computed(() => {
898
+ const mode = this.element().props['mode'];
899
+ return mode === 'indeterminate' ? 'indeterminate' : 'determinate';
900
+ }, ...(ngDevMode ? [{ debugName: "spinnerMode" }] : []));
901
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
902
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MatProgressComponent, isStandalone: true, selector: "jrm-progress", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
903
+ @if (progressType() === 'spinner') {
904
+ <mat-spinner
905
+ [value]="$any(element().props['value']) ?? 0"
906
+ [mode]="spinnerMode()"
907
+ [color]="$any(element().props['color']) ?? 'primary'">
908
+ </mat-spinner>
909
+ } @else {
910
+ <mat-progress-bar
911
+ [value]="$any(element().props['value']) ?? 0"
912
+ [mode]="barMode()"
913
+ [color]="$any(element().props['color']) ?? 'primary'">
914
+ </mat-progress-bar>
915
+ }
916
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i1$9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2$3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] });
917
+ }
918
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatProgressComponent, decorators: [{
919
+ type: Component,
920
+ args: [{
921
+ selector: 'jrm-progress',
922
+ standalone: true,
923
+ imports: [MatProgressBarModule, MatProgressSpinnerModule],
924
+ template: `
925
+ @if (progressType() === 'spinner') {
926
+ <mat-spinner
927
+ [value]="$any(element().props['value']) ?? 0"
928
+ [mode]="spinnerMode()"
929
+ [color]="$any(element().props['color']) ?? 'primary'">
930
+ </mat-spinner>
931
+ } @else {
932
+ <mat-progress-bar
933
+ [value]="$any(element().props['value']) ?? 0"
934
+ [mode]="barMode()"
935
+ [color]="$any(element().props['color']) ?? 'primary'">
936
+ </mat-progress-bar>
937
+ }
938
+ `,
939
+ }]
940
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
941
+
942
+ class MatChipComponent {
943
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
944
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
945
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
946
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
947
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
948
+ items() {
949
+ return this.element().props['items'] ?? [];
950
+ }
951
+ onRemove(label) {
952
+ this.emit()('remove');
953
+ }
954
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatChipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
955
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MatChipComponent, isStandalone: true, selector: "jrm-chip", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
956
+ <mat-chip-set>
957
+ @for (item of items(); track item.label) {
958
+ <mat-chip [removable]="item.removable ?? false" (removed)="onRemove(item.label)">
959
+ {{ item.label }}
960
+ </mat-chip>
961
+ }
962
+ </mat-chip-set>
963
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i1$4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i1$4.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }] });
964
+ }
965
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatChipComponent, decorators: [{
966
+ type: Component,
967
+ args: [{
968
+ selector: 'jrm-chip',
969
+ standalone: true,
970
+ imports: [MatChipsModule],
971
+ template: `
972
+ <mat-chip-set>
973
+ @for (item of items(); track item.label) {
974
+ <mat-chip [removable]="item.removable ?? false" (removed)="onRemove(item.label)">
975
+ {{ item.label }}
976
+ </mat-chip>
977
+ }
978
+ </mat-chip-set>
979
+ `,
980
+ }]
981
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
982
+
983
+ class MatToggleComponent {
984
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
985
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
986
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
987
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
988
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
989
+ stateService = inject(SpecStateService);
990
+ onChange(event) {
991
+ const checked = event.checked;
992
+ const bindingPath = this.bindings()?.['checked'];
993
+ if (bindingPath) {
994
+ this.stateService.set(bindingPath, checked);
995
+ }
996
+ this.emit()('change');
997
+ }
998
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
999
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: MatToggleComponent, isStandalone: true, selector: "jrm-toggle", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1000
+ <mat-slide-toggle
1001
+ [checked]="$any(element().props['checked']) ?? false"
1002
+ [disabled]="$any(element().props['disabled']) ?? false"
1003
+ [color]="$any(element().props['color']) ?? 'primary'"
1004
+ (change)="onChange($event)">
1005
+ {{ element().props['label'] ?? '' }}
1006
+ </mat-slide-toggle>
1007
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i1$a.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }] });
1008
+ }
1009
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatToggleComponent, decorators: [{
1010
+ type: Component,
1011
+ args: [{
1012
+ selector: 'jrm-toggle',
1013
+ standalone: true,
1014
+ imports: [MatSlideToggleModule],
1015
+ template: `
1016
+ <mat-slide-toggle
1017
+ [checked]="$any(element().props['checked']) ?? false"
1018
+ [disabled]="$any(element().props['disabled']) ?? false"
1019
+ [color]="$any(element().props['color']) ?? 'primary'"
1020
+ (change)="onChange($event)">
1021
+ {{ element().props['label'] ?? '' }}
1022
+ </mat-slide-toggle>
1023
+ `,
1024
+ }]
1025
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
1026
+
1027
+ class MatRadioComponent {
1028
+ element = input.required(...(ngDevMode ? [{ debugName: "element" }] : []));
1029
+ emit = input.required(...(ngDevMode ? [{ debugName: "emit" }] : []));
1030
+ on = input.required(...(ngDevMode ? [{ debugName: "on" }] : []));
1031
+ bindings = input(...(ngDevMode ? [undefined, { debugName: "bindings" }] : []));
1032
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
1033
+ stateService = inject(SpecStateService);
1034
+ options() {
1035
+ return this.element().props['options'] ?? [];
1036
+ }
1037
+ onChange(event) {
1038
+ const value = event.value;
1039
+ const bindingPath = this.bindings()?.['value'];
1040
+ if (bindingPath) {
1041
+ this.stateService.set(bindingPath, value);
1042
+ }
1043
+ this.emit()('change');
1044
+ }
1045
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatRadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1046
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MatRadioComponent, isStandalone: true, selector: "jrm-radio", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, emit: { classPropertyName: "emit", publicName: "emit", isSignal: true, isRequired: true, transformFunction: null }, on: { classPropertyName: "on", publicName: "on", isSignal: true, isRequired: true, transformFunction: null }, bindings: { classPropertyName: "bindings", publicName: "bindings", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1047
+ @if (element().props['label']) {
1048
+ <label class="mat-body-2 radio-label">{{ element().props['label'] }}</label>
1049
+ }
1050
+ <mat-radio-group
1051
+ [value]="$any(element().props['value']) ?? ''"
1052
+ [disabled]="$any(element().props['disabled']) ?? false"
1053
+ [color]="$any(element().props['color']) ?? 'primary'"
1054
+ (change)="onChange($event)">
1055
+ @for (opt of options(); track opt.value) {
1056
+ <mat-radio-button [value]="opt.value">{{ opt.label }}</mat-radio-button>
1057
+ }
1058
+ </mat-radio-group>
1059
+ `, isInline: true, styles: [":host{display:flex;flex-direction:column;gap:4px}mat-radio-group{display:flex;flex-direction:column;gap:4px}.radio-label{margin-bottom:4px}\n"], dependencies: [{ kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i1$b.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i1$b.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }] });
1060
+ }
1061
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MatRadioComponent, decorators: [{
1062
+ type: Component,
1063
+ args: [{ selector: 'jrm-radio', standalone: true, imports: [MatRadioModule], template: `
1064
+ @if (element().props['label']) {
1065
+ <label class="mat-body-2 radio-label">{{ element().props['label'] }}</label>
1066
+ }
1067
+ <mat-radio-group
1068
+ [value]="$any(element().props['value']) ?? ''"
1069
+ [disabled]="$any(element().props['disabled']) ?? false"
1070
+ [color]="$any(element().props['color']) ?? 'primary'"
1071
+ (change)="onChange($event)">
1072
+ @for (opt of options(); track opt.value) {
1073
+ <mat-radio-button [value]="opt.value">{{ opt.label }}</mat-radio-button>
1074
+ }
1075
+ </mat-radio-group>
1076
+ `, styles: [":host{display:flex;flex-direction:column;gap:4px}mat-radio-group{display:flex;flex-direction:column;gap:4px}.radio-label{margin-bottom:4px}\n"] }]
1077
+ }], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], emit: [{ type: i0.Input, args: [{ isSignal: true, alias: "emit", required: true }] }], on: [{ type: i0.Input, args: [{ isSignal: true, alias: "on", required: true }] }], bindings: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindings", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }] } });
1078
+
1079
+ const { registry: materialRegistry } = defineRegistry(materialCatalog, {
1080
+ components: {
1081
+ Card: MatCardComponent,
1082
+ Button: MatButtonComponent,
1083
+ Text: MatTextComponent,
1084
+ Metric: MatMetricComponent,
1085
+ Stack: MatStackComponent,
1086
+ Input: MatInputComponent,
1087
+ Checkbox: MatCheckboxComponent,
1088
+ Badge: MatBadgeComponent,
1089
+ Divider: MatDividerComponent,
1090
+ Select: MatSelectComponent,
1091
+ Slider: MatSliderComponent,
1092
+ DatePicker: MatDatepickerComponent,
1093
+ Tabs: MatTabsComponent,
1094
+ Toolbar: MatToolbarComponent,
1095
+ Progress: MatProgressComponent,
1096
+ Chip: MatChipComponent,
1097
+ Toggle: MatToggleComponent,
1098
+ Radio: MatRadioComponent,
1099
+ },
1100
+ });
1101
+
1102
+ function provideNgRenderMaterial(options) {
1103
+ return provideNgRender({ registry: materialRegistry, ...options });
1104
+ }
1105
+
1106
+ /*
1107
+ * Public API Surface of @ng-render/angular-material
1108
+ */
1109
+ // Catalog
1110
+
1111
+ /**
1112
+ * Generated bundle index. Do not edit.
1113
+ */
1114
+
1115
+ export { MatBadgeComponent, MatButtonComponent, MatCardComponent, MatCheckboxComponent, MatChipComponent, MatDatepickerComponent, MatDividerComponent, MatInputComponent, MatMetricComponent, MatProgressComponent, MatRadioComponent, MatSelectComponent, MatSliderComponent, MatStackComponent, MatTabsComponent, MatTextComponent, MatToggleComponent, MatToolbarComponent, materialCatalog, materialRegistry, provideNgRenderMaterial };
1116
+ //# sourceMappingURL=ng-render-angular-material.mjs.map