@joanroucoux/cairn-ui 0.10.1 → 0.11.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.
- package/CHANGELOG.md +11 -0
- package/fesm2022/joanroucoux-cairn-ui-action-bar.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-alert.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-amount.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-async.mjs +85 -81
- package/fesm2022/joanroucoux-cairn-ui-async.mjs.map +1 -1
- package/fesm2022/joanroucoux-cairn-ui-avatar.mjs +6 -6
- package/fesm2022/joanroucoux-cairn-ui-back-link.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-badge.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-button.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-card.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-choice-chips.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-delta.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-dialog.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-donut.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-drawer.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-empty.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-external-link.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-external-link.mjs.map +1 -1
- package/fesm2022/joanroucoux-cairn-ui-fact.mjs +6 -6
- package/fesm2022/joanroucoux-cairn-ui-field.mjs +9 -9
- package/fesm2022/joanroucoux-cairn-ui-filter-chips.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-group-header.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-icon-toggle.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-input.mjs +6 -6
- package/fesm2022/joanroucoux-cairn-ui-input.mjs.map +1 -1
- package/fesm2022/joanroucoux-cairn-ui-line-chart.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-menu.mjs +9 -9
- package/fesm2022/joanroucoux-cairn-ui-meter.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-motion.mjs +12 -12
- package/fesm2022/joanroucoux-cairn-ui-nav-item.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-result-group.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-row.mjs +15 -15
- package/fesm2022/joanroucoux-cairn-ui-segmented.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-select-pill.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-select.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-skeleton.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-stale-link.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-stat.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-switch.mjs +3 -3
- package/fesm2022/joanroucoux-cairn-ui-tab-bar.mjs +6 -6
- package/fesm2022/joanroucoux-cairn-ui-table.mjs +27 -27
- package/fesm2022/joanroucoux-cairn-ui-toast.mjs +6 -6
- package/mcp-manifest.json +1 -1
- package/package.json +1 -1
- package/styles/theme.css +4 -0
- package/styles/tokens.css +0 -4
- package/types/joanroucoux-cairn-ui-async.d.ts +4 -2
- package/types/joanroucoux-cairn-ui-external-link.d.ts +1 -1
- package/types/joanroucoux-cairn-ui-input.d.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.11.0
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- `styles/theme.css` sets `scrollbar-gutter: stable` on `html`, so a classic scrollbar appearing when content arrives no longer shifts the layout.
|
|
8
|
+
- `ui-async` reserves the skeleton's space while waiting: during the first 150 ms of a load the `[asyncLoading]` content is laid out but invisible and hidden from assistive technology.
|
|
9
|
+
|
|
10
|
+
### Removed
|
|
11
|
+
|
|
12
|
+
- The unused `--secondary`, `--secondary-foreground`, `--accent` and `--accent-foreground` tokens from `styles/tokens.css`.
|
|
13
|
+
|
|
3
14
|
## 0.10.1
|
|
4
15
|
|
|
5
16
|
### Added
|
|
@@ -20,7 +20,7 @@ var UiActionBar = class UiActionBar {
|
|
|
20
20
|
}
|
|
21
21
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
22
22
|
minVersion: "12.0.0",
|
|
23
|
-
version: "22.2.
|
|
23
|
+
version: "22.2.2",
|
|
24
24
|
ngImport: i0,
|
|
25
25
|
type: UiActionBar,
|
|
26
26
|
deps: [],
|
|
@@ -28,7 +28,7 @@ var UiActionBar = class UiActionBar {
|
|
|
28
28
|
});
|
|
29
29
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
30
30
|
minVersion: "14.0.0",
|
|
31
|
-
version: "22.2.
|
|
31
|
+
version: "22.2.2",
|
|
32
32
|
type: UiActionBar,
|
|
33
33
|
isStandalone: true,
|
|
34
34
|
selector: "ui-action-bar",
|
|
@@ -40,7 +40,7 @@ var UiActionBar = class UiActionBar {
|
|
|
40
40
|
};
|
|
41
41
|
i0.ɵɵngDeclareClassMetadata({
|
|
42
42
|
minVersion: "12.0.0",
|
|
43
|
-
version: "22.2.
|
|
43
|
+
version: "22.2.2",
|
|
44
44
|
ngImport: i0,
|
|
45
45
|
type: UiActionBar,
|
|
46
46
|
decorators: [{
|
|
@@ -27,7 +27,7 @@ var UiAlert = class UiAlert {
|
|
|
27
27
|
classes = computed(() => `${BASE_CLASSES} ${VARIANT_CLASSES[this.variant()]}${this.fadeIn() ? " ui-enter-fade" : ""}`, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
|
|
28
28
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
29
29
|
minVersion: "12.0.0",
|
|
30
|
-
version: "22.2.
|
|
30
|
+
version: "22.2.2",
|
|
31
31
|
ngImport: i0,
|
|
32
32
|
type: UiAlert,
|
|
33
33
|
deps: [],
|
|
@@ -35,7 +35,7 @@ var UiAlert = class UiAlert {
|
|
|
35
35
|
});
|
|
36
36
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
37
37
|
minVersion: "17.0.0",
|
|
38
|
-
version: "22.2.
|
|
38
|
+
version: "22.2.2",
|
|
39
39
|
type: UiAlert,
|
|
40
40
|
isStandalone: true,
|
|
41
41
|
selector: "ui-alert",
|
|
@@ -133,7 +133,7 @@ var UiAlert = class UiAlert {
|
|
|
133
133
|
};
|
|
134
134
|
i0.ɵɵngDeclareClassMetadata({
|
|
135
135
|
minVersion: "12.0.0",
|
|
136
|
-
version: "22.2.
|
|
136
|
+
version: "22.2.2",
|
|
137
137
|
ngImport: i0,
|
|
138
138
|
type: UiAlert,
|
|
139
139
|
decorators: [{
|
|
@@ -72,7 +72,7 @@ var UiAmount = class UiAmount {
|
|
|
72
72
|
}, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
|
|
73
73
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
74
74
|
minVersion: "12.0.0",
|
|
75
|
-
version: "22.2.
|
|
75
|
+
version: "22.2.2",
|
|
76
76
|
ngImport: i0,
|
|
77
77
|
type: UiAmount,
|
|
78
78
|
deps: [],
|
|
@@ -80,7 +80,7 @@ var UiAmount = class UiAmount {
|
|
|
80
80
|
});
|
|
81
81
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
82
82
|
minVersion: "17.1.0",
|
|
83
|
-
version: "22.2.
|
|
83
|
+
version: "22.2.2",
|
|
84
84
|
type: UiAmount,
|
|
85
85
|
isStandalone: true,
|
|
86
86
|
selector: "ui-amount",
|
|
@@ -146,7 +146,7 @@ var UiAmount = class UiAmount {
|
|
|
146
146
|
};
|
|
147
147
|
i0.ɵɵngDeclareClassMetadata({
|
|
148
148
|
minVersion: "12.0.0",
|
|
149
|
-
version: "22.2.
|
|
149
|
+
version: "22.2.2",
|
|
150
150
|
ngImport: i0,
|
|
151
151
|
type: UiAmount,
|
|
152
152
|
decorators: [{
|
|
@@ -178,7 +178,7 @@ var UiAsync = class UiAsync {
|
|
|
178
178
|
}
|
|
179
179
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
180
180
|
minVersion: "12.0.0",
|
|
181
|
-
version: "22.2.
|
|
181
|
+
version: "22.2.2",
|
|
182
182
|
ngImport: i0,
|
|
183
183
|
type: UiAsync,
|
|
184
184
|
deps: [],
|
|
@@ -186,7 +186,7 @@ var UiAsync = class UiAsync {
|
|
|
186
186
|
});
|
|
187
187
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
188
188
|
minVersion: "17.0.0",
|
|
189
|
-
version: "22.2.
|
|
189
|
+
version: "22.2.2",
|
|
190
190
|
type: UiAsync,
|
|
191
191
|
isStandalone: true,
|
|
192
192
|
selector: "ui-async",
|
|
@@ -263,48 +263,50 @@ var UiAsync = class UiAsync {
|
|
|
263
263
|
} },
|
|
264
264
|
ngImport: i0,
|
|
265
265
|
template: `
|
|
266
|
-
@
|
|
267
|
-
|
|
268
|
-
@case ('loading') {
|
|
266
|
+
@if (shown() === null || shown() === 'loading') {
|
|
267
|
+
<div class="contents" [attr.aria-hidden]="shown() === null ? 'true' : null" [class.invisible]="shown() === null">
|
|
269
268
|
<ng-content select="[asyncLoading]" />
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
<h2 [class]="titleClasses()">{{ errorTitle() }}</h2>
|
|
269
|
+
</div>
|
|
270
|
+
} @else {
|
|
271
|
+
@switch (shown()) {
|
|
272
|
+
@case ('error') {
|
|
273
|
+
<div aria-live="polite" role="alert" [class]="boxClasses()">
|
|
274
|
+
@if (variant() === 'inline') {
|
|
275
|
+
<span class="text-label text-(--muted-foreground)">{{ errorMessage() }}</span>
|
|
278
276
|
} @else {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
<svg
|
|
286
|
-
aria-hidden="true"
|
|
287
|
-
class="block flex-none fill-none stroke-current"
|
|
288
|
-
stroke-linecap="round"
|
|
289
|
-
stroke-linejoin="round"
|
|
290
|
-
stroke-width="1.75"
|
|
291
|
-
viewBox="0 0 24 24"
|
|
292
|
-
[attr.height]="iconSize()"
|
|
293
|
-
[attr.width]="iconSize()"
|
|
294
|
-
>
|
|
295
|
-
<path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8" />
|
|
296
|
-
<path d="M21 3v5h-5" />
|
|
297
|
-
</svg>
|
|
277
|
+
@if (variant() === 'emphasis') {
|
|
278
|
+
<h2 [class]="titleClasses()">{{ errorTitle() }}</h2>
|
|
279
|
+
} @else {
|
|
280
|
+
<span [class]="titleClasses()">{{ errorTitle() }}</span>
|
|
281
|
+
}
|
|
282
|
+
<span class="text-(--muted-foreground)" [class]="messageClasses()">{{ errorMessage() }}</span>
|
|
298
283
|
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
284
|
+
<button type="button" [class]="retryButtonClasses()" (click)="retry.emit()">
|
|
285
|
+
@if (retryIcon() || variant() !== 'inline') {
|
|
286
|
+
<svg
|
|
287
|
+
aria-hidden="true"
|
|
288
|
+
class="block flex-none fill-none stroke-current"
|
|
289
|
+
stroke-linecap="round"
|
|
290
|
+
stroke-linejoin="round"
|
|
291
|
+
stroke-width="1.75"
|
|
292
|
+
viewBox="0 0 24 24"
|
|
293
|
+
[attr.height]="iconSize()"
|
|
294
|
+
[attr.width]="iconSize()"
|
|
295
|
+
>
|
|
296
|
+
<path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8" />
|
|
297
|
+
<path d="M21 3v5h-5" />
|
|
298
|
+
</svg>
|
|
299
|
+
}
|
|
300
|
+
{{ retryLabel() }}
|
|
301
|
+
</button>
|
|
302
|
+
</div>
|
|
303
|
+
}
|
|
304
|
+
@case ('empty') {
|
|
305
|
+
<ng-content select="[asyncEmpty]" />
|
|
306
|
+
}
|
|
307
|
+
@default {
|
|
308
|
+
<ng-content />
|
|
309
|
+
}
|
|
308
310
|
}
|
|
309
311
|
}
|
|
310
312
|
`,
|
|
@@ -313,7 +315,7 @@ var UiAsync = class UiAsync {
|
|
|
313
315
|
};
|
|
314
316
|
i0.ɵɵngDeclareClassMetadata({
|
|
315
317
|
minVersion: "12.0.0",
|
|
316
|
-
version: "22.2.
|
|
318
|
+
version: "22.2.2",
|
|
317
319
|
ngImport: i0,
|
|
318
320
|
type: UiAsync,
|
|
319
321
|
decorators: [{
|
|
@@ -321,48 +323,50 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
321
323
|
args: [{
|
|
322
324
|
selector: "ui-async",
|
|
323
325
|
template: `
|
|
324
|
-
@
|
|
325
|
-
|
|
326
|
-
@case ('loading') {
|
|
326
|
+
@if (shown() === null || shown() === 'loading') {
|
|
327
|
+
<div class="contents" [attr.aria-hidden]="shown() === null ? 'true' : null" [class.invisible]="shown() === null">
|
|
327
328
|
<ng-content select="[asyncLoading]" />
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
<h2 [class]="titleClasses()">{{ errorTitle() }}</h2>
|
|
329
|
+
</div>
|
|
330
|
+
} @else {
|
|
331
|
+
@switch (shown()) {
|
|
332
|
+
@case ('error') {
|
|
333
|
+
<div aria-live="polite" role="alert" [class]="boxClasses()">
|
|
334
|
+
@if (variant() === 'inline') {
|
|
335
|
+
<span class="text-label text-(--muted-foreground)">{{ errorMessage() }}</span>
|
|
336
336
|
} @else {
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
<svg
|
|
344
|
-
aria-hidden="true"
|
|
345
|
-
class="block flex-none fill-none stroke-current"
|
|
346
|
-
stroke-linecap="round"
|
|
347
|
-
stroke-linejoin="round"
|
|
348
|
-
stroke-width="1.75"
|
|
349
|
-
viewBox="0 0 24 24"
|
|
350
|
-
[attr.height]="iconSize()"
|
|
351
|
-
[attr.width]="iconSize()"
|
|
352
|
-
>
|
|
353
|
-
<path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8" />
|
|
354
|
-
<path d="M21 3v5h-5" />
|
|
355
|
-
</svg>
|
|
337
|
+
@if (variant() === 'emphasis') {
|
|
338
|
+
<h2 [class]="titleClasses()">{{ errorTitle() }}</h2>
|
|
339
|
+
} @else {
|
|
340
|
+
<span [class]="titleClasses()">{{ errorTitle() }}</span>
|
|
341
|
+
}
|
|
342
|
+
<span class="text-(--muted-foreground)" [class]="messageClasses()">{{ errorMessage() }}</span>
|
|
356
343
|
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
344
|
+
<button type="button" [class]="retryButtonClasses()" (click)="retry.emit()">
|
|
345
|
+
@if (retryIcon() || variant() !== 'inline') {
|
|
346
|
+
<svg
|
|
347
|
+
aria-hidden="true"
|
|
348
|
+
class="block flex-none fill-none stroke-current"
|
|
349
|
+
stroke-linecap="round"
|
|
350
|
+
stroke-linejoin="round"
|
|
351
|
+
stroke-width="1.75"
|
|
352
|
+
viewBox="0 0 24 24"
|
|
353
|
+
[attr.height]="iconSize()"
|
|
354
|
+
[attr.width]="iconSize()"
|
|
355
|
+
>
|
|
356
|
+
<path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8" />
|
|
357
|
+
<path d="M21 3v5h-5" />
|
|
358
|
+
</svg>
|
|
359
|
+
}
|
|
360
|
+
{{ retryLabel() }}
|
|
361
|
+
</button>
|
|
362
|
+
</div>
|
|
363
|
+
}
|
|
364
|
+
@case ('empty') {
|
|
365
|
+
<ng-content select="[asyncEmpty]" />
|
|
366
|
+
}
|
|
367
|
+
@default {
|
|
368
|
+
<ng-content />
|
|
369
|
+
}
|
|
366
370
|
}
|
|
367
371
|
}
|
|
368
372
|
`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"joanroucoux-cairn-ui-async.mjs","names":[],"sources":["../../../projects/ui/async/delayed-state.ts","../../../projects/ui/async/async.ts"],"sourcesContent":["import { DestroyRef, type Signal, effect, inject, signal, untracked } from '@angular/core';\n\nimport type { AsyncState } from './async';\n\nexport const SKELETON_DELAY_MS = 150;\nexport const SKELETON_MIN_MS = 400;\n\n/**\n * Turns the live state of a call into the state to draw: `loading` only appears once the call has\n * lasted 150 ms and, once shown, stays at least 400 ms. Until then the previous state stays on\n * screen; `null` means nothing to draw yet (a first load under 150 ms). Call it in an injection context.\n *\n * @example\n * protected readonly shown = delayedState(this.state);\n */\nexport function delayedState(source: Signal<AsyncState>): Signal<AsyncState | null> {\n const displayed = signal<AsyncState | null>(null);\n let timer: ReturnType<typeof setTimeout> | undefined;\n let shownAt = 0;\n\n const clear = (): void => {\n clearTimeout(timer);\n timer = undefined;\n };\n\n inject(DestroyRef).onDestroy(clear);\n\n effect(() => {\n const state = source();\n\n untracked(() => {\n if (state === 'loading') {\n if (displayed() === 'loading') {\n clear();\n } else {\n timer = setTimeout(() => {\n timer = undefined;\n shownAt = Date.now();\n displayed.set('loading');\n }, SKELETON_DELAY_MS);\n }\n\n return;\n }\n\n clear();\n\n const remaining = shownAt + SKELETON_MIN_MS - Date.now();\n\n if (displayed() === 'loading' && remaining > 0) {\n timer = setTimeout(() => {\n timer = undefined;\n displayed.set(untracked(source));\n }, remaining);\n } else {\n displayed.set(state);\n }\n });\n });\n\n return displayed.asReadonly();\n}\n","import { Component, booleanAttribute, computed, input, output } from '@angular/core';\n\nimport { holdTransitionsUntilRendered } from '@joanroucoux/cairn-ui/motion';\n\nimport { delayedState } from './delayed-state';\n\n/** Available async block states. */\nexport const ASYNC_STATES = ['loading', 'error', 'empty', 'ready'] as const;\nexport type AsyncState = (typeof ASYNC_STATES)[number];\n\n/** Looks of the error block. */\nexport const ASYNC_VARIANTS = ['elevated', 'plain', 'emphasis', 'inline'] as const;\nexport type AsyncVariant = (typeof ASYNC_VARIANTS)[number];\n\n/** Alignments of the error block; `auto` is centered from 64rem. */\nexport const ASYNC_ALIGNS = ['start', 'center', 'auto'] as const;\nexport type AsyncAlign = (typeof ASYNC_ALIGNS)[number];\n\nconst RETRY_BASE_CLASSES =\n 'relative inline-flex items-center justify-center rounded-control font-medium whitespace-nowrap cursor-pointer select-none touch-manipulation transition-[scale,background-color] [transition-duration:var(--duration-press),var(--duration-fast)] ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) text-label';\n\nconst RETRY_OUTLINE_CLASSES =\n 'bg-(--card) text-(--foreground) shadow-[inset_0_0_0_1px_var(--border)] hover:bg-(--glow)';\n\nconst RETRY_PRIMARY_CLASSES = 'bg-(--primary) text-(--primary-foreground) hover:bg-(--primary-to)';\n\nconst RETRY_BLOCK_CLASSES = 'min-h-(--row-min) gap-2 pl-3 pr-4';\n\nconst RETRY_INLINE_CLASSES = 'h-11 pointer-fine:h-8 flex-none';\n\nconst RETRY_INLINE_ICON_CLASSES = 'gap-1.5 pl-2.5 pr-3';\n\nconst RETRY_INLINE_TEXT_CLASSES = 'px-3';\n\nconst ELEVATED_SURFACE_CLASSES = 'rounded-control bg-(--elevated)';\n\nconst CARD_SURFACE_CLASSES = 'rounded-container bg-(--card) shadow-[inset_0_0_0_1px_var(--border)]';\n\ntype BlockSpec = {\n surface: string;\n gap: string;\n padding: Record<AsyncAlign, string>;\n title: string;\n message: Record<AsyncAlign, string>;\n retryMargin: Record<AsyncAlign, string>;\n retry: string;\n};\n\nconst BLOCK_SPECS: Record<Exclude<AsyncVariant, 'inline'>, BlockSpec> = {\n elevated: {\n surface: ELEVATED_SURFACE_CLASSES,\n gap: 'gap-1',\n padding: { start: 'p-4', center: 'px-4 py-10', auto: 'p-4 lg:py-10' },\n title: 'text-body font-medium',\n message: { start: 'text-label', center: 'text-label', auto: 'text-label' },\n retryMargin: { start: 'mt-2', center: 'mt-2', auto: 'mt-2' },\n retry: RETRY_OUTLINE_CLASSES,\n },\n plain: {\n surface: '',\n gap: 'gap-1',\n padding: { start: 'px-4 py-5', center: 'px-4 py-12', auto: 'px-4 py-5 lg:py-12' },\n title: 'text-body leading-[normal] font-medium',\n message: {\n start: 'text-label leading-[normal]',\n center: 'text-label leading-[normal]',\n auto: 'text-label leading-[normal]',\n },\n retryMargin: { start: 'mt-2', center: 'mt-2', auto: 'mt-2' },\n retry: RETRY_OUTLINE_CLASSES,\n },\n emphasis: {\n surface: '',\n gap: 'gap-3',\n padding: { start: 'px-4 py-6', center: 'px-4 py-14', auto: 'px-4 py-6 lg:py-14' },\n title: 'text-title font-semibold',\n message: {\n start: 'text-label',\n center: 'text-body leading-[normal]',\n auto: 'text-label lg:text-body lg:leading-[normal]',\n },\n retryMargin: { start: 'mt-1', center: 'mt-2', auto: 'mt-1 lg:mt-2' },\n retry: RETRY_PRIMARY_CLASSES,\n },\n};\n\nconst ALIGN_CLASSES: Record<AsyncAlign, string> = {\n start: 'items-start',\n center: 'items-center text-center',\n auto: 'items-start lg:items-center lg:text-center',\n};\n\nconst INLINE_BOX_CLASSES = 'flex-row items-center justify-between gap-3 pt-1.5 pr-1.5 pb-2 pl-2.5';\n\n/**\n * The three states of a block that depends on a service call, next to the ready content.\n *\n * @example\n * <ui-async [state]=\"totalState()\" errorTitle=\"The total couldn’t be loaded\" errorMessage=\"The server didn’t respond.\" retryLabel=\"Try again\" (retry)=\"reload()\">\n * <span asyncLoading><ui-skeleton shape=\"figure\" /></span>\n * <span asyncEmpty>Add a holding to see your total.</span>\n * <span>{{ total() }}</span>\n * </ui-async>\n */\n@Component({\n selector: 'ui-async',\n template: `\n @switch (shown()) {\n @case (null) {}\n @case ('loading') {\n <ng-content select=\"[asyncLoading]\" />\n }\n @case ('error') {\n <div aria-live=\"polite\" role=\"alert\" [class]=\"boxClasses()\">\n @if (variant() === 'inline') {\n <span class=\"text-label text-(--muted-foreground)\">{{ errorMessage() }}</span>\n } @else {\n @if (variant() === 'emphasis') {\n <h2 [class]=\"titleClasses()\">{{ errorTitle() }}</h2>\n } @else {\n <span [class]=\"titleClasses()\">{{ errorTitle() }}</span>\n }\n <span class=\"text-(--muted-foreground)\" [class]=\"messageClasses()\">{{ errorMessage() }}</span>\n }\n <button type=\"button\" [class]=\"retryButtonClasses()\" (click)=\"retry.emit()\">\n @if (retryIcon() || variant() !== 'inline') {\n <svg\n aria-hidden=\"true\"\n class=\"block flex-none fill-none stroke-current\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n [attr.height]=\"iconSize()\"\n [attr.width]=\"iconSize()\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n }\n {{ retryLabel() }}\n </button>\n </div>\n }\n @case ('empty') {\n <ng-content select=\"[asyncEmpty]\" />\n }\n @default {\n <ng-content />\n }\n }\n `,\n host: {\n '[attr.aria-busy]': \"state() === 'loading' || null\",\n '[class.flex]': 'filling()',\n '[class.flex-col]': 'filling()',\n },\n})\nexport class UiAsync {\n readonly state = input.required<AsyncState>();\n readonly errorTitle = input<string>();\n readonly errorMessage = input<string>();\n readonly retryLabel = input<string>();\n /** Draws the rotate icon in the retry button. Only the `inline` variant honors `false`. */\n readonly retryIcon = input(true, { transform: booleanAttribute });\n readonly variant = input<AsyncVariant>('elevated');\n readonly align = input<AsyncAlign>('start');\n readonly card = input(false, { transform: booleanAttribute });\n readonly fill = input(false, { transform: booleanAttribute });\n readonly retry = output<void>();\n\n protected readonly shown = delayedState(this.state);\n\n protected readonly filling = computed(() => this.fill() && this.shown() === 'error');\n\n protected readonly iconSize = computed(() => (this.variant() === 'inline' ? 16 : 18));\n\n readonly #spec = computed(() => {\n const variant = this.variant();\n\n return variant === 'inline' ? null : BLOCK_SPECS[variant];\n });\n\n protected readonly boxClasses = computed(() => {\n const spec = this.#spec();\n const fill = this.fill() ? ' flex-1 justify-center' : '';\n\n if (spec === null) {\n return `flex ${INLINE_BOX_CLASSES}${this.card() ? ` ${CARD_SURFACE_CLASSES}` : ''}${this.fill() ? ' flex-1' : ''}`;\n }\n\n const surface = this.card() ? CARD_SURFACE_CLASSES : spec.surface;\n\n return `flex flex-col ${surface} ${spec.gap} ${ALIGN_CLASSES[this.align()]} ${spec.padding[this.align()]}${fill}`;\n });\n\n protected readonly titleClasses = computed(() => this.#spec()!.title);\n\n protected readonly messageClasses = computed(() => this.#spec()!.message[this.align()]);\n\n protected readonly retryButtonClasses = computed(() => {\n const spec = this.#spec();\n\n if (spec === null) {\n const spacing = this.retryIcon() ? RETRY_INLINE_ICON_CLASSES : RETRY_INLINE_TEXT_CLASSES;\n\n return `${RETRY_BASE_CLASSES} ${RETRY_OUTLINE_CLASSES} ${RETRY_INLINE_CLASSES} ${spacing}`;\n }\n\n return `${RETRY_BASE_CLASSES} ${spec.retry} ${RETRY_BLOCK_CLASSES} ${spec.retryMargin[this.align()]}`;\n });\n\n constructor() {\n holdTransitionsUntilRendered();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"joanroucoux-cairn-ui-async.mjs","names":[],"sources":["../../../projects/ui/async/delayed-state.ts","../../../projects/ui/async/async.ts"],"sourcesContent":["import { DestroyRef, type Signal, effect, inject, signal, untracked } from '@angular/core';\n\nimport type { AsyncState } from './async';\n\nexport const SKELETON_DELAY_MS = 150;\nexport const SKELETON_MIN_MS = 400;\n\n/**\n * Turns the live state of a call into the state to draw: `loading` only appears once the call has\n * lasted 150 ms and, once shown, stays at least 400 ms. Until then the previous state stays on\n * screen; `null` means no state to draw yet (a first load under 150 ms), which `ui-async` renders as an invisible skeleton. Call it in an injection context.\n *\n * @example\n * protected readonly shown = delayedState(this.state);\n */\nexport function delayedState(source: Signal<AsyncState>): Signal<AsyncState | null> {\n const displayed = signal<AsyncState | null>(null);\n let timer: ReturnType<typeof setTimeout> | undefined;\n let shownAt = 0;\n\n const clear = (): void => {\n clearTimeout(timer);\n timer = undefined;\n };\n\n inject(DestroyRef).onDestroy(clear);\n\n effect(() => {\n const state = source();\n\n untracked(() => {\n if (state === 'loading') {\n if (displayed() === 'loading') {\n clear();\n } else {\n timer = setTimeout(() => {\n timer = undefined;\n shownAt = Date.now();\n displayed.set('loading');\n }, SKELETON_DELAY_MS);\n }\n\n return;\n }\n\n clear();\n\n const remaining = shownAt + SKELETON_MIN_MS - Date.now();\n\n if (displayed() === 'loading' && remaining > 0) {\n timer = setTimeout(() => {\n timer = undefined;\n displayed.set(untracked(source));\n }, remaining);\n } else {\n displayed.set(state);\n }\n });\n });\n\n return displayed.asReadonly();\n}\n","import { Component, booleanAttribute, computed, input, output } from '@angular/core';\n\nimport { holdTransitionsUntilRendered } from '@joanroucoux/cairn-ui/motion';\n\nimport { delayedState } from './delayed-state';\n\n/** Available async block states. */\nexport const ASYNC_STATES = ['loading', 'error', 'empty', 'ready'] as const;\nexport type AsyncState = (typeof ASYNC_STATES)[number];\n\n/** Looks of the error block. */\nexport const ASYNC_VARIANTS = ['elevated', 'plain', 'emphasis', 'inline'] as const;\nexport type AsyncVariant = (typeof ASYNC_VARIANTS)[number];\n\n/** Alignments of the error block; `auto` is centered from 64rem. */\nexport const ASYNC_ALIGNS = ['start', 'center', 'auto'] as const;\nexport type AsyncAlign = (typeof ASYNC_ALIGNS)[number];\n\nconst RETRY_BASE_CLASSES =\n 'relative inline-flex items-center justify-center rounded-control font-medium whitespace-nowrap cursor-pointer select-none touch-manipulation transition-[scale,background-color] [transition-duration:var(--duration-press),var(--duration-fast)] ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) text-label';\n\nconst RETRY_OUTLINE_CLASSES =\n 'bg-(--card) text-(--foreground) shadow-[inset_0_0_0_1px_var(--border)] hover:bg-(--glow)';\n\nconst RETRY_PRIMARY_CLASSES = 'bg-(--primary) text-(--primary-foreground) hover:bg-(--primary-to)';\n\nconst RETRY_BLOCK_CLASSES = 'min-h-(--row-min) gap-2 pl-3 pr-4';\n\nconst RETRY_INLINE_CLASSES = 'h-11 pointer-fine:h-8 flex-none';\n\nconst RETRY_INLINE_ICON_CLASSES = 'gap-1.5 pl-2.5 pr-3';\n\nconst RETRY_INLINE_TEXT_CLASSES = 'px-3';\n\nconst ELEVATED_SURFACE_CLASSES = 'rounded-control bg-(--elevated)';\n\nconst CARD_SURFACE_CLASSES = 'rounded-container bg-(--card) shadow-[inset_0_0_0_1px_var(--border)]';\n\ntype BlockSpec = {\n surface: string;\n gap: string;\n padding: Record<AsyncAlign, string>;\n title: string;\n message: Record<AsyncAlign, string>;\n retryMargin: Record<AsyncAlign, string>;\n retry: string;\n};\n\nconst BLOCK_SPECS: Record<Exclude<AsyncVariant, 'inline'>, BlockSpec> = {\n elevated: {\n surface: ELEVATED_SURFACE_CLASSES,\n gap: 'gap-1',\n padding: { start: 'p-4', center: 'px-4 py-10', auto: 'p-4 lg:py-10' },\n title: 'text-body font-medium',\n message: { start: 'text-label', center: 'text-label', auto: 'text-label' },\n retryMargin: { start: 'mt-2', center: 'mt-2', auto: 'mt-2' },\n retry: RETRY_OUTLINE_CLASSES,\n },\n plain: {\n surface: '',\n gap: 'gap-1',\n padding: { start: 'px-4 py-5', center: 'px-4 py-12', auto: 'px-4 py-5 lg:py-12' },\n title: 'text-body leading-[normal] font-medium',\n message: {\n start: 'text-label leading-[normal]',\n center: 'text-label leading-[normal]',\n auto: 'text-label leading-[normal]',\n },\n retryMargin: { start: 'mt-2', center: 'mt-2', auto: 'mt-2' },\n retry: RETRY_OUTLINE_CLASSES,\n },\n emphasis: {\n surface: '',\n gap: 'gap-3',\n padding: { start: 'px-4 py-6', center: 'px-4 py-14', auto: 'px-4 py-6 lg:py-14' },\n title: 'text-title font-semibold',\n message: {\n start: 'text-label',\n center: 'text-body leading-[normal]',\n auto: 'text-label lg:text-body lg:leading-[normal]',\n },\n retryMargin: { start: 'mt-1', center: 'mt-2', auto: 'mt-1 lg:mt-2' },\n retry: RETRY_PRIMARY_CLASSES,\n },\n};\n\nconst ALIGN_CLASSES: Record<AsyncAlign, string> = {\n start: 'items-start',\n center: 'items-center text-center',\n auto: 'items-start lg:items-center lg:text-center',\n};\n\nconst INLINE_BOX_CLASSES = 'flex-row items-center justify-between gap-3 pt-1.5 pr-1.5 pb-2 pl-2.5';\n\n/**\n * The three states of a block that depends on a service call, next to the ready content. During the\n * first 150 ms of a load the `[asyncLoading]` content is laid out but invisible and hidden from\n * assistive technology, so the block already holds its skeleton's space.\n *\n * @example\n * <ui-async [state]=\"totalState()\" errorTitle=\"The total couldn’t be loaded\" errorMessage=\"The server didn’t respond.\" retryLabel=\"Try again\" (retry)=\"reload()\">\n * <span asyncLoading><ui-skeleton shape=\"figure\" /></span>\n * <span asyncEmpty>Add a holding to see your total.</span>\n * <span>{{ total() }}</span>\n * </ui-async>\n */\n@Component({\n selector: 'ui-async',\n template: `\n @if (shown() === null || shown() === 'loading') {\n <div class=\"contents\" [attr.aria-hidden]=\"shown() === null ? 'true' : null\" [class.invisible]=\"shown() === null\">\n <ng-content select=\"[asyncLoading]\" />\n </div>\n } @else {\n @switch (shown()) {\n @case ('error') {\n <div aria-live=\"polite\" role=\"alert\" [class]=\"boxClasses()\">\n @if (variant() === 'inline') {\n <span class=\"text-label text-(--muted-foreground)\">{{ errorMessage() }}</span>\n } @else {\n @if (variant() === 'emphasis') {\n <h2 [class]=\"titleClasses()\">{{ errorTitle() }}</h2>\n } @else {\n <span [class]=\"titleClasses()\">{{ errorTitle() }}</span>\n }\n <span class=\"text-(--muted-foreground)\" [class]=\"messageClasses()\">{{ errorMessage() }}</span>\n }\n <button type=\"button\" [class]=\"retryButtonClasses()\" (click)=\"retry.emit()\">\n @if (retryIcon() || variant() !== 'inline') {\n <svg\n aria-hidden=\"true\"\n class=\"block flex-none fill-none stroke-current\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.75\"\n viewBox=\"0 0 24 24\"\n [attr.height]=\"iconSize()\"\n [attr.width]=\"iconSize()\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n }\n {{ retryLabel() }}\n </button>\n </div>\n }\n @case ('empty') {\n <ng-content select=\"[asyncEmpty]\" />\n }\n @default {\n <ng-content />\n }\n }\n }\n `,\n host: {\n '[attr.aria-busy]': \"state() === 'loading' || null\",\n '[class.flex]': 'filling()',\n '[class.flex-col]': 'filling()',\n },\n})\nexport class UiAsync {\n readonly state = input.required<AsyncState>();\n readonly errorTitle = input<string>();\n readonly errorMessage = input<string>();\n readonly retryLabel = input<string>();\n /** Draws the rotate icon in the retry button. Only the `inline` variant honors `false`. */\n readonly retryIcon = input(true, { transform: booleanAttribute });\n readonly variant = input<AsyncVariant>('elevated');\n readonly align = input<AsyncAlign>('start');\n readonly card = input(false, { transform: booleanAttribute });\n readonly fill = input(false, { transform: booleanAttribute });\n readonly retry = output<void>();\n\n protected readonly shown = delayedState(this.state);\n\n protected readonly filling = computed(() => this.fill() && this.shown() === 'error');\n\n protected readonly iconSize = computed(() => (this.variant() === 'inline' ? 16 : 18));\n\n readonly #spec = computed(() => {\n const variant = this.variant();\n\n return variant === 'inline' ? null : BLOCK_SPECS[variant];\n });\n\n protected readonly boxClasses = computed(() => {\n const spec = this.#spec();\n const fill = this.fill() ? ' flex-1 justify-center' : '';\n\n if (spec === null) {\n return `flex ${INLINE_BOX_CLASSES}${this.card() ? ` ${CARD_SURFACE_CLASSES}` : ''}${this.fill() ? ' flex-1' : ''}`;\n }\n\n const surface = this.card() ? CARD_SURFACE_CLASSES : spec.surface;\n\n return `flex flex-col ${surface} ${spec.gap} ${ALIGN_CLASSES[this.align()]} ${spec.padding[this.align()]}${fill}`;\n });\n\n protected readonly titleClasses = computed(() => this.#spec()!.title);\n\n protected readonly messageClasses = computed(() => this.#spec()!.message[this.align()]);\n\n protected readonly retryButtonClasses = computed(() => {\n const spec = this.#spec();\n\n if (spec === null) {\n const spacing = this.retryIcon() ? RETRY_INLINE_ICON_CLASSES : RETRY_INLINE_TEXT_CLASSES;\n\n return `${RETRY_BASE_CLASSES} ${RETRY_OUTLINE_CLASSES} ${RETRY_INLINE_CLASSES} ${spacing}`;\n }\n\n return `${RETRY_BASE_CLASSES} ${spec.retry} ${RETRY_BLOCK_CLASSES} ${spec.retryMargin[this.align()]}`;\n });\n\n constructor() {\n holdTransitionsUntilRendered();\n }\n}\n"],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ var UiAvatar = class UiAvatar {
|
|
|
20
20
|
classes = computed(() => `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]}`, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
|
|
21
21
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
22
22
|
minVersion: "12.0.0",
|
|
23
|
-
version: "22.2.
|
|
23
|
+
version: "22.2.2",
|
|
24
24
|
ngImport: i0,
|
|
25
25
|
type: UiAvatar,
|
|
26
26
|
deps: [],
|
|
@@ -28,7 +28,7 @@ var UiAvatar = class UiAvatar {
|
|
|
28
28
|
});
|
|
29
29
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
30
30
|
minVersion: "17.1.0",
|
|
31
|
-
version: "22.2.
|
|
31
|
+
version: "22.2.2",
|
|
32
32
|
type: UiAvatar,
|
|
33
33
|
isStandalone: true,
|
|
34
34
|
selector: "ui-avatar",
|
|
@@ -69,7 +69,7 @@ var UiAvatar = class UiAvatar {
|
|
|
69
69
|
};
|
|
70
70
|
i0.ɵɵngDeclareClassMetadata({
|
|
71
71
|
minVersion: "12.0.0",
|
|
72
|
-
version: "22.2.
|
|
72
|
+
version: "22.2.2",
|
|
73
73
|
ngImport: i0,
|
|
74
74
|
type: UiAvatar,
|
|
75
75
|
decorators: [{
|
|
@@ -114,7 +114,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
114
114
|
var UiAvatarLink = class UiAvatarLink {
|
|
115
115
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
116
116
|
minVersion: "12.0.0",
|
|
117
|
-
version: "22.2.
|
|
117
|
+
version: "22.2.2",
|
|
118
118
|
ngImport: i0,
|
|
119
119
|
type: UiAvatarLink,
|
|
120
120
|
deps: [],
|
|
@@ -122,7 +122,7 @@ var UiAvatarLink = class UiAvatarLink {
|
|
|
122
122
|
});
|
|
123
123
|
static ɵdir = i0.ɵɵngDeclareDirective({
|
|
124
124
|
minVersion: "14.0.0",
|
|
125
|
-
version: "22.2.
|
|
125
|
+
version: "22.2.2",
|
|
126
126
|
type: UiAvatarLink,
|
|
127
127
|
isStandalone: true,
|
|
128
128
|
selector: "a[uiAvatarLink], button[uiAvatarLink]",
|
|
@@ -132,7 +132,7 @@ var UiAvatarLink = class UiAvatarLink {
|
|
|
132
132
|
};
|
|
133
133
|
i0.ɵɵngDeclareClassMetadata({
|
|
134
134
|
minVersion: "12.0.0",
|
|
135
|
-
version: "22.2.
|
|
135
|
+
version: "22.2.2",
|
|
136
136
|
ngImport: i0,
|
|
137
137
|
type: UiAvatarLink,
|
|
138
138
|
decorators: [{
|
|
@@ -30,7 +30,7 @@ var UiBackLink = class UiBackLink {
|
|
|
30
30
|
}
|
|
31
31
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
32
32
|
minVersion: "12.0.0",
|
|
33
|
-
version: "22.2.
|
|
33
|
+
version: "22.2.2",
|
|
34
34
|
ngImport: i0,
|
|
35
35
|
type: UiBackLink,
|
|
36
36
|
deps: [],
|
|
@@ -38,7 +38,7 @@ var UiBackLink = class UiBackLink {
|
|
|
38
38
|
});
|
|
39
39
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
40
40
|
minVersion: "17.1.0",
|
|
41
|
-
version: "22.2.
|
|
41
|
+
version: "22.2.2",
|
|
42
42
|
type: UiBackLink,
|
|
43
43
|
isStandalone: true,
|
|
44
44
|
selector: "a[ui-back-link], button[ui-back-link]",
|
|
@@ -75,7 +75,7 @@ var UiBackLink = class UiBackLink {
|
|
|
75
75
|
};
|
|
76
76
|
i0.ɵɵngDeclareClassMetadata({
|
|
77
77
|
minVersion: "12.0.0",
|
|
78
|
-
version: "22.2.
|
|
78
|
+
version: "22.2.2",
|
|
79
79
|
ngImport: i0,
|
|
80
80
|
type: UiBackLink,
|
|
81
81
|
decorators: [{
|
|
@@ -17,7 +17,7 @@ var UiBadge = class UiBadge {
|
|
|
17
17
|
classes = computed(() => `${BASE_CLASSES} ${SIZE_CLASSES[this.size()]} ${VARIANT_CLASSES[this.variant()]}`, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
|
|
18
18
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
19
19
|
minVersion: "12.0.0",
|
|
20
|
-
version: "22.2.
|
|
20
|
+
version: "22.2.2",
|
|
21
21
|
ngImport: i0,
|
|
22
22
|
type: UiBadge,
|
|
23
23
|
deps: [],
|
|
@@ -25,7 +25,7 @@ var UiBadge = class UiBadge {
|
|
|
25
25
|
});
|
|
26
26
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
27
27
|
minVersion: "17.1.0",
|
|
28
|
-
version: "22.2.
|
|
28
|
+
version: "22.2.2",
|
|
29
29
|
type: UiBadge,
|
|
30
30
|
isStandalone: true,
|
|
31
31
|
selector: "ui-badge",
|
|
@@ -53,7 +53,7 @@ var UiBadge = class UiBadge {
|
|
|
53
53
|
};
|
|
54
54
|
i0.ɵɵngDeclareClassMetadata({
|
|
55
55
|
minVersion: "12.0.0",
|
|
56
|
-
version: "22.2.
|
|
56
|
+
version: "22.2.2",
|
|
57
57
|
ngImport: i0,
|
|
58
58
|
type: UiBadge,
|
|
59
59
|
decorators: [{
|
|
@@ -82,7 +82,7 @@ var UiButton = class UiButton {
|
|
|
82
82
|
}
|
|
83
83
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
84
84
|
minVersion: "12.0.0",
|
|
85
|
-
version: "22.2.
|
|
85
|
+
version: "22.2.2",
|
|
86
86
|
ngImport: i0,
|
|
87
87
|
type: UiButton,
|
|
88
88
|
deps: [],
|
|
@@ -90,7 +90,7 @@ var UiButton = class UiButton {
|
|
|
90
90
|
});
|
|
91
91
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
92
92
|
minVersion: "17.0.0",
|
|
93
|
-
version: "22.2.
|
|
93
|
+
version: "22.2.2",
|
|
94
94
|
type: UiButton,
|
|
95
95
|
isStandalone: true,
|
|
96
96
|
selector: "button[ui-button], a[ui-button]",
|
|
@@ -144,7 +144,7 @@ var UiButton = class UiButton {
|
|
|
144
144
|
};
|
|
145
145
|
i0.ɵɵngDeclareClassMetadata({
|
|
146
146
|
minVersion: "12.0.0",
|
|
147
|
-
version: "22.2.
|
|
147
|
+
version: "22.2.2",
|
|
148
148
|
ngImport: i0,
|
|
149
149
|
type: UiButton,
|
|
150
150
|
decorators: [{
|
|
@@ -125,7 +125,7 @@ var UiCard = class UiCard {
|
|
|
125
125
|
}, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
|
|
126
126
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
127
127
|
minVersion: "12.0.0",
|
|
128
|
-
version: "22.2.
|
|
128
|
+
version: "22.2.2",
|
|
129
129
|
ngImport: i0,
|
|
130
130
|
type: UiCard,
|
|
131
131
|
deps: [],
|
|
@@ -133,7 +133,7 @@ var UiCard = class UiCard {
|
|
|
133
133
|
});
|
|
134
134
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
135
135
|
minVersion: "17.1.0",
|
|
136
|
-
version: "22.2.
|
|
136
|
+
version: "22.2.2",
|
|
137
137
|
type: UiCard,
|
|
138
138
|
isStandalone: true,
|
|
139
139
|
selector: "ui-card",
|
|
@@ -182,7 +182,7 @@ var UiCard = class UiCard {
|
|
|
182
182
|
};
|
|
183
183
|
i0.ɵɵngDeclareClassMetadata({
|
|
184
184
|
minVersion: "12.0.0",
|
|
185
|
-
version: "22.2.
|
|
185
|
+
version: "22.2.2",
|
|
186
186
|
ngImport: i0,
|
|
187
187
|
type: UiCard,
|
|
188
188
|
decorators: [{
|
|
@@ -67,7 +67,7 @@ var UiChoiceChips = class UiChoiceChips {
|
|
|
67
67
|
}
|
|
68
68
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
69
69
|
minVersion: "12.0.0",
|
|
70
|
-
version: "22.2.
|
|
70
|
+
version: "22.2.2",
|
|
71
71
|
ngImport: i0,
|
|
72
72
|
type: UiChoiceChips,
|
|
73
73
|
deps: [],
|
|
@@ -75,7 +75,7 @@ var UiChoiceChips = class UiChoiceChips {
|
|
|
75
75
|
});
|
|
76
76
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
77
77
|
minVersion: "17.0.0",
|
|
78
|
-
version: "22.2.
|
|
78
|
+
version: "22.2.2",
|
|
79
79
|
type: UiChoiceChips,
|
|
80
80
|
isStandalone: true,
|
|
81
81
|
selector: "ui-choice-chips",
|
|
@@ -213,7 +213,7 @@ var UiChoiceChips = class UiChoiceChips {
|
|
|
213
213
|
};
|
|
214
214
|
i0.ɵɵngDeclareClassMetadata({
|
|
215
215
|
minVersion: "12.0.0",
|
|
216
|
-
version: "22.2.
|
|
216
|
+
version: "22.2.2",
|
|
217
217
|
ngImport: i0,
|
|
218
218
|
type: UiChoiceChips,
|
|
219
219
|
decorators: [{
|
|
@@ -40,7 +40,7 @@ var UiDelta = class UiDelta {
|
|
|
40
40
|
}, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
|
|
41
41
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
42
42
|
minVersion: "12.0.0",
|
|
43
|
-
version: "22.2.
|
|
43
|
+
version: "22.2.2",
|
|
44
44
|
ngImport: i0,
|
|
45
45
|
type: UiDelta,
|
|
46
46
|
deps: [],
|
|
@@ -48,7 +48,7 @@ var UiDelta = class UiDelta {
|
|
|
48
48
|
});
|
|
49
49
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
50
50
|
minVersion: "17.0.0",
|
|
51
|
-
version: "22.2.
|
|
51
|
+
version: "22.2.2",
|
|
52
52
|
type: UiDelta,
|
|
53
53
|
isStandalone: true,
|
|
54
54
|
selector: "ui-delta",
|
|
@@ -104,7 +104,7 @@ var UiDelta = class UiDelta {
|
|
|
104
104
|
};
|
|
105
105
|
i0.ɵɵngDeclareClassMetadata({
|
|
106
106
|
minVersion: "12.0.0",
|
|
107
|
-
version: "22.2.
|
|
107
|
+
version: "22.2.2",
|
|
108
108
|
ngImport: i0,
|
|
109
109
|
type: UiDelta,
|
|
110
110
|
decorators: [{
|
|
@@ -314,7 +314,7 @@ var UiDialog = class UiDialog {
|
|
|
314
314
|
}
|
|
315
315
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
316
316
|
minVersion: "12.0.0",
|
|
317
|
-
version: "22.2.
|
|
317
|
+
version: "22.2.2",
|
|
318
318
|
ngImport: i0,
|
|
319
319
|
type: UiDialog,
|
|
320
320
|
deps: [],
|
|
@@ -322,7 +322,7 @@ var UiDialog = class UiDialog {
|
|
|
322
322
|
});
|
|
323
323
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
324
324
|
minVersion: "17.0.0",
|
|
325
|
-
version: "22.2.
|
|
325
|
+
version: "22.2.2",
|
|
326
326
|
type: UiDialog,
|
|
327
327
|
isStandalone: true,
|
|
328
328
|
selector: "ui-dialog",
|
|
@@ -483,7 +483,7 @@ var UiDialog = class UiDialog {
|
|
|
483
483
|
};
|
|
484
484
|
i0.ɵɵngDeclareClassMetadata({
|
|
485
485
|
minVersion: "12.0.0",
|
|
486
|
-
version: "22.2.
|
|
486
|
+
version: "22.2.2",
|
|
487
487
|
ngImport: i0,
|
|
488
488
|
type: UiDialog,
|
|
489
489
|
decorators: [{
|
|
@@ -120,7 +120,7 @@ var UiDonut = class UiDonut {
|
|
|
120
120
|
}
|
|
121
121
|
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
122
122
|
minVersion: "12.0.0",
|
|
123
|
-
version: "22.2.
|
|
123
|
+
version: "22.2.2",
|
|
124
124
|
ngImport: i0,
|
|
125
125
|
type: UiDonut,
|
|
126
126
|
deps: [],
|
|
@@ -128,7 +128,7 @@ var UiDonut = class UiDonut {
|
|
|
128
128
|
});
|
|
129
129
|
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
130
130
|
minVersion: "17.0.0",
|
|
131
|
-
version: "22.2.
|
|
131
|
+
version: "22.2.2",
|
|
132
132
|
type: UiDonut,
|
|
133
133
|
isStandalone: true,
|
|
134
134
|
selector: "ui-donut",
|
|
@@ -284,7 +284,7 @@ var UiDonut = class UiDonut {
|
|
|
284
284
|
};
|
|
285
285
|
i0.ɵɵngDeclareClassMetadata({
|
|
286
286
|
minVersion: "12.0.0",
|
|
287
|
-
version: "22.2.
|
|
287
|
+
version: "22.2.2",
|
|
288
288
|
ngImport: i0,
|
|
289
289
|
type: UiDonut,
|
|
290
290
|
decorators: [{
|