@rblabs-dev/axiom 1.2.1 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +39 -13
  2. package/app-shell/package.json +4 -0
  3. package/brand-lockup/package.json +4 -0
  4. package/central-sign-in/package.json +4 -0
  5. package/cli/build-brand-assets.mjs +12 -18
  6. package/cli/project.mjs +6 -0
  7. package/cli/verify-production-assets.mjs +71 -6
  8. package/confirm-dialog/package.json +4 -0
  9. package/core/package.json +4 -0
  10. package/empty-state/package.json +4 -0
  11. package/fesm2022/rblabs-dev-axiom-app-shell.mjs +375 -0
  12. package/fesm2022/rblabs-dev-axiom-app-shell.mjs.map +1 -0
  13. package/fesm2022/rblabs-dev-axiom-brand-lockup.mjs +154 -0
  14. package/fesm2022/rblabs-dev-axiom-brand-lockup.mjs.map +1 -0
  15. package/fesm2022/rblabs-dev-axiom-central-sign-in.mjs +375 -0
  16. package/fesm2022/rblabs-dev-axiom-central-sign-in.mjs.map +1 -0
  17. package/fesm2022/rblabs-dev-axiom-confirm-dialog.mjs +329 -0
  18. package/fesm2022/rblabs-dev-axiom-confirm-dialog.mjs.map +1 -0
  19. package/fesm2022/rblabs-dev-axiom-core.mjs +181 -0
  20. package/fesm2022/rblabs-dev-axiom-core.mjs.map +1 -0
  21. package/fesm2022/rblabs-dev-axiom-empty-state.mjs +252 -0
  22. package/fesm2022/rblabs-dev-axiom-empty-state.mjs.map +1 -0
  23. package/fesm2022/rblabs-dev-axiom-message.mjs +194 -0
  24. package/fesm2022/rblabs-dev-axiom-message.mjs.map +1 -0
  25. package/fesm2022/rblabs-dev-axiom-monogram.mjs +102 -0
  26. package/fesm2022/rblabs-dev-axiom-monogram.mjs.map +1 -0
  27. package/fesm2022/rblabs-dev-axiom-page-header.mjs +199 -0
  28. package/fesm2022/rblabs-dev-axiom-page-header.mjs.map +1 -0
  29. package/fesm2022/rblabs-dev-axiom-panel.mjs +207 -0
  30. package/fesm2022/rblabs-dev-axiom-panel.mjs.map +1 -0
  31. package/fesm2022/rblabs-dev-axiom-public-shell.mjs +165 -0
  32. package/fesm2022/rblabs-dev-axiom-public-shell.mjs.map +1 -0
  33. package/fesm2022/rblabs-dev-axiom-shell-footer.mjs +73 -0
  34. package/fesm2022/rblabs-dev-axiom-shell-footer.mjs.map +1 -0
  35. package/fesm2022/rblabs-dev-axiom-status-chip.mjs +161 -0
  36. package/fesm2022/rblabs-dev-axiom-status-chip.mjs.map +1 -0
  37. package/fesm2022/rblabs-dev-axiom-technical-value.mjs +173 -0
  38. package/fesm2022/rblabs-dev-axiom-technical-value.mjs.map +1 -0
  39. package/fesm2022/rblabs-dev-axiom-theme-toggle.mjs +117 -0
  40. package/fesm2022/rblabs-dev-axiom-theme-toggle.mjs.map +1 -0
  41. package/fesm2022/rblabs-dev-axiom.mjs +15 -2955
  42. package/fonts/LICENSE +93 -0
  43. package/fonts/inter-latin-ext-wght-normal.woff2 +0 -0
  44. package/fonts/inter-latin-wght-normal.woff2 +0 -0
  45. package/message/package.json +4 -0
  46. package/monogram/package.json +4 -0
  47. package/package.json +77 -2
  48. package/page-header/package.json +4 -0
  49. package/panel/package.json +4 -0
  50. package/public-shell/package.json +4 -0
  51. package/shell-footer/package.json +4 -0
  52. package/status-chip/package.json +4 -0
  53. package/styles/_fonts.scss +7 -7
  54. package/styles/_index.scss +1 -1
  55. package/technical-value/package.json +4 -0
  56. package/theme-toggle/package.json +4 -0
  57. package/types/rblabs-dev-axiom-app-shell.d.ts +50 -0
  58. package/types/rblabs-dev-axiom-brand-lockup.d.ts +35 -0
  59. package/types/rblabs-dev-axiom-central-sign-in.d.ts +82 -0
  60. package/types/rblabs-dev-axiom-confirm-dialog.d.ts +76 -0
  61. package/types/rblabs-dev-axiom-core.d.ts +116 -0
  62. package/types/rblabs-dev-axiom-empty-state.d.ts +55 -0
  63. package/types/rblabs-dev-axiom-message.d.ts +48 -0
  64. package/types/rblabs-dev-axiom-monogram.d.ts +12 -0
  65. package/types/rblabs-dev-axiom-page-header.d.ts +44 -0
  66. package/types/rblabs-dev-axiom-panel.d.ts +44 -0
  67. package/types/rblabs-dev-axiom-public-shell.d.ts +28 -0
  68. package/types/rblabs-dev-axiom-shell-footer.d.ts +17 -0
  69. package/types/rblabs-dev-axiom-status-chip.d.ts +40 -0
  70. package/types/rblabs-dev-axiom-technical-value.d.ts +35 -0
  71. package/types/rblabs-dev-axiom-theme-toggle.d.ts +12 -0
  72. package/types/rblabs-dev-axiom.d.ts +15 -675
  73. package/fesm2022/rblabs-dev-axiom.mjs.map +0 -1
@@ -0,0 +1,252 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation, input, output } from "@angular/core";
3
+ import { MatButton } from "@angular/material/button";
4
+ import { MatIcon } from "@angular/material/icon";
5
+ var RbEmptyStateComponent = class RbEmptyStateComponent {
6
+ title = input.required(...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
7
+ description = input("", ...ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []);
8
+ icon = input("inbox", ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
9
+ headingLevel = input(3, ...ngDevMode ? [{ debugName: "headingLevel" }] : /* istanbul ignore next */ []);
10
+ layout = input("centered", ...ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []);
11
+ actionLabel = input("", ...ngDevMode ? [{ debugName: "actionLabel" }] : /* istanbul ignore next */ []);
12
+ action = output();
13
+ static ɵfac = i0.ɵɵngDeclareFactory({
14
+ minVersion: "12.0.0",
15
+ version: "22.2.3",
16
+ ngImport: i0,
17
+ type: RbEmptyStateComponent,
18
+ deps: [],
19
+ target: i0.ɵɵFactoryTarget.Component
20
+ });
21
+ static ɵcmp = i0.ɵɵngDeclareComponent({
22
+ minVersion: "17.0.0",
23
+ version: "22.2.3",
24
+ type: RbEmptyStateComponent,
25
+ isStandalone: true,
26
+ selector: "rb-empty-state",
27
+ inputs: {
28
+ title: {
29
+ classPropertyName: "title",
30
+ publicName: "title",
31
+ isSignal: true,
32
+ isRequired: true,
33
+ transformFunction: null
34
+ },
35
+ description: {
36
+ classPropertyName: "description",
37
+ publicName: "description",
38
+ isSignal: true,
39
+ isRequired: false,
40
+ transformFunction: null
41
+ },
42
+ icon: {
43
+ classPropertyName: "icon",
44
+ publicName: "icon",
45
+ isSignal: true,
46
+ isRequired: false,
47
+ transformFunction: null
48
+ },
49
+ headingLevel: {
50
+ classPropertyName: "headingLevel",
51
+ publicName: "headingLevel",
52
+ isSignal: true,
53
+ isRequired: false,
54
+ transformFunction: null
55
+ },
56
+ layout: {
57
+ classPropertyName: "layout",
58
+ publicName: "layout",
59
+ isSignal: true,
60
+ isRequired: false,
61
+ transformFunction: null
62
+ },
63
+ actionLabel: {
64
+ classPropertyName: "actionLabel",
65
+ publicName: "actionLabel",
66
+ isSignal: true,
67
+ isRequired: false,
68
+ transformFunction: null
69
+ }
70
+ },
71
+ outputs: { action: "action" },
72
+ host: {
73
+ properties: {
74
+ "attr.title": "null",
75
+ "attr.data-layout": "layout()"
76
+ },
77
+ classAttribute: "rb-empty-state"
78
+ },
79
+ ngImport: i0,
80
+ template: `
81
+ <mat-icon class="rb-empty-state__icon" fontSet="material-symbols-outlined" aria-hidden="true">{{
82
+ icon()
83
+ }}</mat-icon>
84
+ <div class="rb-empty-state__copy">
85
+ @switch (headingLevel()) {
86
+ @case (2) {
87
+ <h2 class="rb-empty-state__title">{{ title() }}</h2>
88
+ }
89
+ @case (4) {
90
+ <h4 class="rb-empty-state__title">{{ title() }}</h4>
91
+ }
92
+ @case (5) {
93
+ <h5 class="rb-empty-state__title">{{ title() }}</h5>
94
+ }
95
+ @case (6) {
96
+ <h6 class="rb-empty-state__title">{{ title() }}</h6>
97
+ }
98
+ @default {
99
+ <h3 class="rb-empty-state__title">{{ title() }}</h3>
100
+ }
101
+ }
102
+ @if (description()) {
103
+ <p class="rb-empty-state__description">{{ description() }}</p>
104
+ }
105
+ <div class="rb-empty-state__actions">
106
+ @if (actionLabel()) {
107
+ <button matButton="outlined" type="button" (click)="action.emit()">
108
+ {{ actionLabel() }}
109
+ </button>
110
+ }
111
+ <ng-content select="[rbActions]" />
112
+ </div>
113
+ </div>
114
+ `,
115
+ isInline: true,
116
+ styles: ["rb-empty-state{display:flex;flex-direction:column;gap:var(--rb-space-3);align-items:center;min-width:0;padding:var(--rb-space-8) var(--rb-space-4);color:var(--rb-color-text-muted);text-align:center}rb-empty-state .rb-empty-state__icon{flex:none;width:var(--rb-space-10);height:var(--rb-space-10);color:var(--rb-color-primary);font-size:var(--rb-space-10)}rb-empty-state .rb-empty-state__copy{display:grid;gap:var(--rb-space-2);justify-items:center;min-width:0;max-width:30rem}rb-empty-state .rb-empty-state__title{margin:0;color:var(--rb-color-text-strong);font:var(--rb-type-title-medium);letter-spacing:var(--rb-type-title-medium-tracking);overflow-wrap:anywhere}rb-empty-state .rb-empty-state__description{margin:0;font:var(--rb-type-body-medium);overflow-wrap:anywhere}rb-empty-state .rb-empty-state__actions{display:flex;flex-wrap:wrap;gap:var(--rb-space-2);justify-content:center;margin-block-start:var(--rb-space-2)}rb-empty-state .rb-empty-state__actions:empty{display:none}rb-empty-state[data-layout=inline]{flex-direction:row;gap:var(--rb-space-3);align-items:flex-start;padding:var(--rb-space-4);border:1px dashed var(--rb-color-border-strong);border-radius:var(--rb-radius-md);background-color:var(--rb-color-surface-sunken);text-align:start}rb-empty-state[data-layout=inline] .rb-empty-state__icon{width:var(--rb-size-icon-lg);height:var(--rb-size-icon-lg);font-size:var(--rb-size-icon-lg)}rb-empty-state[data-layout=inline] .rb-empty-state__copy{gap:var(--rb-space-1);justify-items:start;max-width:none}rb-empty-state[data-layout=inline] .rb-empty-state__title{font:var(--rb-type-title-small);letter-spacing:var(--rb-type-title-small-tracking)}rb-empty-state[data-layout=inline] .rb-empty-state__actions{justify-content:flex-start}\n"],
117
+ dependencies: [{
118
+ kind: "component",
119
+ type: MatButton,
120
+ 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] ",
121
+ inputs: ["matButton"],
122
+ exportAs: ["matButton", "matAnchor"]
123
+ }, {
124
+ kind: "component",
125
+ type: MatIcon,
126
+ selector: "mat-icon",
127
+ inputs: [
128
+ "color",
129
+ "inline",
130
+ "svgIcon",
131
+ "fontSet",
132
+ "fontIcon"
133
+ ],
134
+ exportAs: ["matIcon"]
135
+ }],
136
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
137
+ encapsulation: i0.ViewEncapsulation.None
138
+ });
139
+ };
140
+ i0.ɵɵngDeclareClassMetadata({
141
+ minVersion: "12.0.0",
142
+ version: "22.2.3",
143
+ ngImport: i0,
144
+ type: RbEmptyStateComponent,
145
+ decorators: [{
146
+ type: Component,
147
+ args: [{
148
+ selector: "rb-empty-state",
149
+ imports: [MatButton, MatIcon],
150
+ changeDetection: ChangeDetectionStrategy.OnPush,
151
+ encapsulation: ViewEncapsulation.None,
152
+ host: {
153
+ class: "rb-empty-state",
154
+ "[attr.title]": "null",
155
+ "[attr.data-layout]": "layout()"
156
+ },
157
+ template: `
158
+ <mat-icon class="rb-empty-state__icon" fontSet="material-symbols-outlined" aria-hidden="true">{{
159
+ icon()
160
+ }}</mat-icon>
161
+ <div class="rb-empty-state__copy">
162
+ @switch (headingLevel()) {
163
+ @case (2) {
164
+ <h2 class="rb-empty-state__title">{{ title() }}</h2>
165
+ }
166
+ @case (4) {
167
+ <h4 class="rb-empty-state__title">{{ title() }}</h4>
168
+ }
169
+ @case (5) {
170
+ <h5 class="rb-empty-state__title">{{ title() }}</h5>
171
+ }
172
+ @case (6) {
173
+ <h6 class="rb-empty-state__title">{{ title() }}</h6>
174
+ }
175
+ @default {
176
+ <h3 class="rb-empty-state__title">{{ title() }}</h3>
177
+ }
178
+ }
179
+ @if (description()) {
180
+ <p class="rb-empty-state__description">{{ description() }}</p>
181
+ }
182
+ <div class="rb-empty-state__actions">
183
+ @if (actionLabel()) {
184
+ <button matButton="outlined" type="button" (click)="action.emit()">
185
+ {{ actionLabel() }}
186
+ </button>
187
+ }
188
+ <ng-content select="[rbActions]" />
189
+ </div>
190
+ </div>
191
+ `,
192
+ styles: ["rb-empty-state{display:flex;flex-direction:column;gap:var(--rb-space-3);align-items:center;min-width:0;padding:var(--rb-space-8) var(--rb-space-4);color:var(--rb-color-text-muted);text-align:center}rb-empty-state .rb-empty-state__icon{flex:none;width:var(--rb-space-10);height:var(--rb-space-10);color:var(--rb-color-primary);font-size:var(--rb-space-10)}rb-empty-state .rb-empty-state__copy{display:grid;gap:var(--rb-space-2);justify-items:center;min-width:0;max-width:30rem}rb-empty-state .rb-empty-state__title{margin:0;color:var(--rb-color-text-strong);font:var(--rb-type-title-medium);letter-spacing:var(--rb-type-title-medium-tracking);overflow-wrap:anywhere}rb-empty-state .rb-empty-state__description{margin:0;font:var(--rb-type-body-medium);overflow-wrap:anywhere}rb-empty-state .rb-empty-state__actions{display:flex;flex-wrap:wrap;gap:var(--rb-space-2);justify-content:center;margin-block-start:var(--rb-space-2)}rb-empty-state .rb-empty-state__actions:empty{display:none}rb-empty-state[data-layout=inline]{flex-direction:row;gap:var(--rb-space-3);align-items:flex-start;padding:var(--rb-space-4);border:1px dashed var(--rb-color-border-strong);border-radius:var(--rb-radius-md);background-color:var(--rb-color-surface-sunken);text-align:start}rb-empty-state[data-layout=inline] .rb-empty-state__icon{width:var(--rb-size-icon-lg);height:var(--rb-size-icon-lg);font-size:var(--rb-size-icon-lg)}rb-empty-state[data-layout=inline] .rb-empty-state__copy{gap:var(--rb-space-1);justify-items:start;max-width:none}rb-empty-state[data-layout=inline] .rb-empty-state__title{font:var(--rb-type-title-small);letter-spacing:var(--rb-type-title-small-tracking)}rb-empty-state[data-layout=inline] .rb-empty-state__actions{justify-content:flex-start}\n"]
193
+ }]
194
+ }],
195
+ propDecorators: {
196
+ title: [{
197
+ type: i0.Input,
198
+ args: [{
199
+ isSignal: true,
200
+ alias: "title",
201
+ required: true
202
+ }]
203
+ }],
204
+ description: [{
205
+ type: i0.Input,
206
+ args: [{
207
+ isSignal: true,
208
+ alias: "description",
209
+ required: false
210
+ }]
211
+ }],
212
+ icon: [{
213
+ type: i0.Input,
214
+ args: [{
215
+ isSignal: true,
216
+ alias: "icon",
217
+ required: false
218
+ }]
219
+ }],
220
+ headingLevel: [{
221
+ type: i0.Input,
222
+ args: [{
223
+ isSignal: true,
224
+ alias: "headingLevel",
225
+ required: false
226
+ }]
227
+ }],
228
+ layout: [{
229
+ type: i0.Input,
230
+ args: [{
231
+ isSignal: true,
232
+ alias: "layout",
233
+ required: false
234
+ }]
235
+ }],
236
+ actionLabel: [{
237
+ type: i0.Input,
238
+ args: [{
239
+ isSignal: true,
240
+ alias: "actionLabel",
241
+ required: false
242
+ }]
243
+ }],
244
+ action: [{
245
+ type: i0.Output,
246
+ args: ["action"]
247
+ }]
248
+ }
249
+ });
250
+ export { RbEmptyStateComponent };
251
+
252
+ //# sourceMappingURL=rblabs-dev-axiom-empty-state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rblabs-dev-axiom-empty-state.mjs","names":[],"sources":["../../../projects/axiom/empty-state/src/empty-state.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n input,\n output,\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { RbHeadingLevel } from '@rblabs-dev/axiom/panel';\n\nexport type RbEmptyStateLayout = 'centered' | 'inline';\n\n/**\n * Explains why a region has no content and, when there is one, offers the next step\n * (docs/design-system.md, section 15.4). `actionLabel` renders an outlined button that emits\n * `action`; elements marked `rbActions` are projected next to it, for links or several actions.\n */\n@Component({\n selector: 'rb-empty-state',\n imports: [MatButton, MatIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'rb-empty-state',\n // `title` is an input; a static `title=\"…\"` would also leave a native tooltip on the host.\n '[attr.title]': 'null',\n '[attr.data-layout]': 'layout()',\n },\n template: `\n <mat-icon class=\"rb-empty-state__icon\" fontSet=\"material-symbols-outlined\" aria-hidden=\"true\">{{\n icon()\n }}</mat-icon>\n <div class=\"rb-empty-state__copy\">\n @switch (headingLevel()) {\n @case (2) {\n <h2 class=\"rb-empty-state__title\">{{ title() }}</h2>\n }\n @case (4) {\n <h4 class=\"rb-empty-state__title\">{{ title() }}</h4>\n }\n @case (5) {\n <h5 class=\"rb-empty-state__title\">{{ title() }}</h5>\n }\n @case (6) {\n <h6 class=\"rb-empty-state__title\">{{ title() }}</h6>\n }\n @default {\n <h3 class=\"rb-empty-state__title\">{{ title() }}</h3>\n }\n }\n @if (description()) {\n <p class=\"rb-empty-state__description\">{{ description() }}</p>\n }\n <div class=\"rb-empty-state__actions\">\n @if (actionLabel()) {\n <button matButton=\"outlined\" type=\"button\" (click)=\"action.emit()\">\n {{ actionLabel() }}\n </button>\n }\n <ng-content select=\"[rbActions]\" />\n </div>\n </div>\n `,\n styleUrl: './empty-state.scss',\n})\nexport class RbEmptyStateComponent {\n readonly title = input.required<string>();\n readonly description = input<string>('');\n readonly icon = input<string>('inbox');\n /** Heading level of the title; follows the document outline, not the visual size. */\n readonly headingLevel = input<RbHeadingLevel>(3);\n /** `inline` is the compact variant for sidebars and narrow panels. */\n readonly layout = input<RbEmptyStateLayout>('centered');\n /** Label of the recovery button; leave empty for a purely informational state. */\n readonly actionLabel = input<string>('');\n readonly action = output<void>();\n}\n"],"mappings":";;;;AAkEA,IAAa,wBAAb,MAAa,sBAAqB;CACvB,QAAQ,MAAM,SAAkB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAChC,cAAc,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAC/B,OAAO,MAAc,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;CAE7B,eAAe,MAAsB,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;CAEvC,SAAS,MAA0B,YAAW,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CAE9C,cAAc,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAC/B,SAAS,OAAM;CAVb,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAqB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,QAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA,EAAA,QAAA,SAAA;EAAA,MAAA;GAAA,YAAA;IAAA,cAAA;IAAA,oBAAA;GAAA;GAAA,gBAAA;EAAA;EAAA,UAAA;EAAA,UArCtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCT,UAAA;EAAA,QAAA,CAAA,qtDAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MA3CS;GAAS,UAAA;GAAA,QAAA,CAAA,WAAA;GAAA,UAAA,CAAA,aAAA,WAAA;EAAA,GAAA;GAAA,MAAA;GAAA,MAAE;GAAO,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;GAAA,UAAA,CAAA,SAAA;EAAA,CAAA;EAAA,iBAAA,GAAA,wBAAA;EAAA,eAAA,GAAA,kBAAA;CAAA,CAAA;;AA8CjB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EAhDjC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAgB,SACjB,CAAC,WAAW,OAAO;GAAC,iBACZ,wBAAwB;GAAM,eAChC,kBAAkB;GAAI,MAC/B;IACJ,OAAO;IAEP,gBAAgB;IAChB,sBAAsB;GACvB;GAAA,UACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCT,QAAA,CAAA,qtDAAA;EAAA,CAAA"}
@@ -0,0 +1,194 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input } from "@angular/core";
3
+ import { MatIcon } from "@angular/material/icon";
4
+ import { RB_MESSAGE_TONE_LABELS, RB_TONE_ICONS } from "@rblabs-dev/axiom/core";
5
+ var RbMessageComponent = class RbMessageComponent {
6
+ tone = input("neutral", ...ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []);
7
+ title = input("", ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
8
+ icon = input("", ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
9
+ live = input("auto", ...ngDevMode ? [{ debugName: "live" }] : /* istanbul ignore next */ []);
10
+ resolvedIcon = computed(() => this.icon() || RB_TONE_ICONS[this.tone()] || "info", ...ngDevMode ? [{ debugName: "resolvedIcon" }] : /* istanbul ignore next */ []);
11
+ toneLabel = computed(() => RB_MESSAGE_TONE_LABELS[this.tone()], ...ngDevMode ? [{ debugName: "toneLabel" }] : /* istanbul ignore next */ []);
12
+ politeness = computed(() => {
13
+ const live = this.live();
14
+ if (live !== "auto") return live;
15
+ return this.tone() === "danger" ? "assertive" : "polite";
16
+ }, ...ngDevMode ? [{ debugName: "politeness" }] : /* istanbul ignore next */ []);
17
+ role = computed(() => {
18
+ const politeness = this.politeness();
19
+ if (politeness === "off") return null;
20
+ return politeness === "assertive" ? "alert" : "status";
21
+ }, ...ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []);
22
+ ariaLive = computed(() => {
23
+ const politeness = this.politeness();
24
+ return politeness === "off" ? null : politeness;
25
+ }, ...ngDevMode ? [{ debugName: "ariaLive" }] : /* istanbul ignore next */ []);
26
+ static ɵfac = i0.ɵɵngDeclareFactory({
27
+ minVersion: "12.0.0",
28
+ version: "22.2.3",
29
+ ngImport: i0,
30
+ type: RbMessageComponent,
31
+ deps: [],
32
+ target: i0.ɵɵFactoryTarget.Component
33
+ });
34
+ static ɵcmp = i0.ɵɵngDeclareComponent({
35
+ minVersion: "17.0.0",
36
+ version: "22.2.3",
37
+ type: RbMessageComponent,
38
+ isStandalone: true,
39
+ selector: "rb-message",
40
+ inputs: {
41
+ tone: {
42
+ classPropertyName: "tone",
43
+ publicName: "tone",
44
+ isSignal: true,
45
+ isRequired: false,
46
+ transformFunction: null
47
+ },
48
+ title: {
49
+ classPropertyName: "title",
50
+ publicName: "title",
51
+ isSignal: true,
52
+ isRequired: false,
53
+ transformFunction: null
54
+ },
55
+ icon: {
56
+ classPropertyName: "icon",
57
+ publicName: "icon",
58
+ isSignal: true,
59
+ isRequired: false,
60
+ transformFunction: null
61
+ },
62
+ live: {
63
+ classPropertyName: "live",
64
+ publicName: "live",
65
+ isSignal: true,
66
+ isRequired: false,
67
+ transformFunction: null
68
+ }
69
+ },
70
+ host: {
71
+ properties: {
72
+ "attr.title": "null",
73
+ "attr.data-tone": "tone()",
74
+ "attr.role": "role()",
75
+ "attr.aria-live": "ariaLive()"
76
+ },
77
+ classAttribute: "rb-message"
78
+ },
79
+ ngImport: i0,
80
+ template: `
81
+ <mat-icon class="rb-message__icon" fontSet="material-symbols-outlined" aria-hidden="true">{{
82
+ resolvedIcon()
83
+ }}</mat-icon>
84
+ <div class="rb-message__copy">
85
+ @if (title()) {
86
+ <p class="rb-message__title">
87
+ @if (toneLabel()) {
88
+ <span class="rb-visually-hidden">{{ toneLabel() }}: </span>
89
+ }
90
+ {{ title() }}
91
+ </p>
92
+ } @else if (toneLabel()) {
93
+ <span class="rb-visually-hidden">{{ toneLabel() }}: </span>
94
+ }
95
+ <div class="rb-message__body"><ng-content /></div>
96
+ </div>
97
+ `,
98
+ isInline: true,
99
+ styles: ["rb-message{display:flex;gap:var(--rb-space-3);align-items:flex-start;min-width:0;padding:var(--rb-space-3) var(--rb-space-4);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-md);background-color:var(--rb-color-surface-sunken);color:var(--rb-color-text);font:var(--rb-type-body-medium);letter-spacing:var(--rb-type-body-medium-tracking)}rb-message[data-tone=info]{border-color:var(--rb-color-info-border);background-color:var(--rb-color-info-soft);color:var(--rb-color-info)}rb-message[data-tone=success]{border-color:var(--rb-color-success-border);background-color:var(--rb-color-success-soft);color:var(--rb-color-success)}rb-message[data-tone=warning]{border-color:var(--rb-color-warning-border);background-color:var(--rb-color-warning-soft);color:var(--rb-color-warning)}rb-message[data-tone=danger]{border-color:var(--rb-color-danger-border);background-color:var(--rb-color-danger-soft);color:var(--rb-color-danger)}rb-message .rb-message__icon{flex:none;width:var(--rb-size-icon-md);height:var(--rb-size-icon-md);font-size:var(--rb-size-icon-md)}rb-message .rb-message__copy{display:grid;flex:1 1 auto;gap:var(--rb-space-1);min-width:0}rb-message .rb-message__title{margin:0;font-weight:var(--rb-font-weight-semibold)}rb-message .rb-message__body{min-width:0;overflow-wrap:anywhere}rb-message .rb-message__body:empty{display:none}rb-message .rb-message__body>:where(p,ul,ol){margin:0}rb-message .rb-message__body>*+*{margin-block-start:var(--rb-space-2)}rb-message .rb-message__body a{color:inherit;font-weight:var(--rb-font-weight-semibold)}\n"],
100
+ dependencies: [{
101
+ kind: "component",
102
+ type: MatIcon,
103
+ selector: "mat-icon",
104
+ inputs: [
105
+ "color",
106
+ "inline",
107
+ "svgIcon",
108
+ "fontSet",
109
+ "fontIcon"
110
+ ],
111
+ exportAs: ["matIcon"]
112
+ }],
113
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
114
+ encapsulation: i0.ViewEncapsulation.None
115
+ });
116
+ };
117
+ i0.ɵɵngDeclareClassMetadata({
118
+ minVersion: "12.0.0",
119
+ version: "22.2.3",
120
+ ngImport: i0,
121
+ type: RbMessageComponent,
122
+ decorators: [{
123
+ type: Component,
124
+ args: [{
125
+ selector: "rb-message",
126
+ imports: [MatIcon],
127
+ changeDetection: ChangeDetectionStrategy.OnPush,
128
+ encapsulation: ViewEncapsulation.None,
129
+ host: {
130
+ class: "rb-message",
131
+ "[attr.title]": "null",
132
+ "[attr.data-tone]": "tone()",
133
+ "[attr.role]": "role()",
134
+ "[attr.aria-live]": "ariaLive()"
135
+ },
136
+ template: `
137
+ <mat-icon class="rb-message__icon" fontSet="material-symbols-outlined" aria-hidden="true">{{
138
+ resolvedIcon()
139
+ }}</mat-icon>
140
+ <div class="rb-message__copy">
141
+ @if (title()) {
142
+ <p class="rb-message__title">
143
+ @if (toneLabel()) {
144
+ <span class="rb-visually-hidden">{{ toneLabel() }}: </span>
145
+ }
146
+ {{ title() }}
147
+ </p>
148
+ } @else if (toneLabel()) {
149
+ <span class="rb-visually-hidden">{{ toneLabel() }}: </span>
150
+ }
151
+ <div class="rb-message__body"><ng-content /></div>
152
+ </div>
153
+ `,
154
+ styles: ["rb-message{display:flex;gap:var(--rb-space-3);align-items:flex-start;min-width:0;padding:var(--rb-space-3) var(--rb-space-4);border:1px solid var(--rb-color-border);border-radius:var(--rb-radius-md);background-color:var(--rb-color-surface-sunken);color:var(--rb-color-text);font:var(--rb-type-body-medium);letter-spacing:var(--rb-type-body-medium-tracking)}rb-message[data-tone=info]{border-color:var(--rb-color-info-border);background-color:var(--rb-color-info-soft);color:var(--rb-color-info)}rb-message[data-tone=success]{border-color:var(--rb-color-success-border);background-color:var(--rb-color-success-soft);color:var(--rb-color-success)}rb-message[data-tone=warning]{border-color:var(--rb-color-warning-border);background-color:var(--rb-color-warning-soft);color:var(--rb-color-warning)}rb-message[data-tone=danger]{border-color:var(--rb-color-danger-border);background-color:var(--rb-color-danger-soft);color:var(--rb-color-danger)}rb-message .rb-message__icon{flex:none;width:var(--rb-size-icon-md);height:var(--rb-size-icon-md);font-size:var(--rb-size-icon-md)}rb-message .rb-message__copy{display:grid;flex:1 1 auto;gap:var(--rb-space-1);min-width:0}rb-message .rb-message__title{margin:0;font-weight:var(--rb-font-weight-semibold)}rb-message .rb-message__body{min-width:0;overflow-wrap:anywhere}rb-message .rb-message__body:empty{display:none}rb-message .rb-message__body>:where(p,ul,ol){margin:0}rb-message .rb-message__body>*+*{margin-block-start:var(--rb-space-2)}rb-message .rb-message__body a{color:inherit;font-weight:var(--rb-font-weight-semibold)}\n"]
155
+ }]
156
+ }],
157
+ propDecorators: {
158
+ tone: [{
159
+ type: i0.Input,
160
+ args: [{
161
+ isSignal: true,
162
+ alias: "tone",
163
+ required: false
164
+ }]
165
+ }],
166
+ title: [{
167
+ type: i0.Input,
168
+ args: [{
169
+ isSignal: true,
170
+ alias: "title",
171
+ required: false
172
+ }]
173
+ }],
174
+ icon: [{
175
+ type: i0.Input,
176
+ args: [{
177
+ isSignal: true,
178
+ alias: "icon",
179
+ required: false
180
+ }]
181
+ }],
182
+ live: [{
183
+ type: i0.Input,
184
+ args: [{
185
+ isSignal: true,
186
+ alias: "live",
187
+ required: false
188
+ }]
189
+ }]
190
+ }
191
+ });
192
+ export { RbMessageComponent };
193
+
194
+ //# sourceMappingURL=rblabs-dev-axiom-message.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rblabs-dev-axiom-message.mjs","names":[],"sources":["../../../projects/axiom/message/src/message.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { RB_MESSAGE_TONE_LABELS, RB_TONE_ICONS, RbMessageTone } from '@rblabs-dev/axiom/core';\n\n/**\n * How the message is announced. `auto` makes a danger message an assertive alert and every other\n * tone a polite status; `off` renders a static message with no live region.\n */\nexport type RbMessageLive = 'auto' | 'polite' | 'assertive' | 'off';\n\n/**\n * Inline status message (docs/design-system.md, section 15.3). The host is the live region, so keep\n * the component mounted and change its content: a region inserted together with its text is not\n * announced by most screen readers (section 9.5).\n */\n@Component({\n selector: 'rb-message',\n imports: [MatIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'rb-message',\n // `title` is an input; a static `title=\"…\"` would also leave a native tooltip on the host.\n '[attr.title]': 'null',\n '[attr.data-tone]': 'tone()',\n '[attr.role]': 'role()',\n '[attr.aria-live]': 'ariaLive()',\n },\n template: `\n <mat-icon class=\"rb-message__icon\" fontSet=\"material-symbols-outlined\" aria-hidden=\"true\">{{\n resolvedIcon()\n }}</mat-icon>\n <div class=\"rb-message__copy\">\n @if (title()) {\n <p class=\"rb-message__title\">\n @if (toneLabel()) {\n <span class=\"rb-visually-hidden\">{{ toneLabel() }}: </span>\n }\n {{ title() }}\n </p>\n } @else if (toneLabel()) {\n <span class=\"rb-visually-hidden\">{{ toneLabel() }}: </span>\n }\n <div class=\"rb-message__body\"><ng-content /></div>\n </div>\n `,\n styleUrl: './message.scss',\n})\nexport class RbMessageComponent {\n readonly tone = input<RbMessageTone>('neutral');\n /** Optional bold first line. */\n readonly title = input<string>('');\n /** Overrides the tone's default icon. */\n readonly icon = input<string>('');\n readonly live = input<RbMessageLive>('auto');\n\n protected readonly resolvedIcon = computed(\n () => this.icon() || RB_TONE_ICONS[this.tone()] || 'info',\n );\n protected readonly toneLabel = computed(() => RB_MESSAGE_TONE_LABELS[this.tone()]);\n\n private readonly politeness = computed(() => {\n const live = this.live();\n if (live !== 'auto') return live;\n return this.tone() === 'danger' ? 'assertive' : 'polite';\n });\n\n protected readonly role = computed(() => {\n const politeness = this.politeness();\n if (politeness === 'off') return null;\n return politeness === 'assertive' ? 'alert' : 'status';\n });\n\n protected readonly ariaLive = computed(() => {\n const politeness = this.politeness();\n return politeness === 'off' ? null : politeness;\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation } from "@angular/core";
3
+ let nextId = 0;
4
+ var RbMonogramComponent = class RbMonogramComponent {
5
+ gradientId = `rb-monogram-gradient-${nextId++}`;
6
+ static ɵfac = i0.ɵɵngDeclareFactory({
7
+ minVersion: "12.0.0",
8
+ version: "22.2.3",
9
+ ngImport: i0,
10
+ type: RbMonogramComponent,
11
+ deps: [],
12
+ target: i0.ɵɵFactoryTarget.Component
13
+ });
14
+ static ɵcmp = i0.ɵɵngDeclareComponent({
15
+ minVersion: "14.0.0",
16
+ version: "22.2.3",
17
+ type: RbMonogramComponent,
18
+ isStandalone: true,
19
+ selector: "rb-monogram",
20
+ host: {
21
+ attributes: { "aria-hidden": "true" },
22
+ classAttribute: "rb-monogram"
23
+ },
24
+ ngImport: i0,
25
+ template: `
26
+ <svg class="rb-monogram__svg" viewBox="0 0 64 64" focusable="false">
27
+ <defs>
28
+ <linearGradient
29
+ [attr.id]="gradientId"
30
+ x1="8"
31
+ y1="8"
32
+ x2="56"
33
+ y2="56"
34
+ gradientUnits="userSpaceOnUse"
35
+ >
36
+ <stop class="rb-monogram__gradient-start" />
37
+ <stop class="rb-monogram__gradient-end" offset="1" />
38
+ </linearGradient>
39
+ </defs>
40
+ <rect class="rb-monogram__frame" width="64" height="64" rx="16" />
41
+ <rect x="5" y="5" width="54" height="54" rx="14" [attr.fill]="'url(#' + gradientId + ')'" />
42
+ <g class="rb-monogram__letters">
43
+ <path d="M17 47V17h7.3c4.9 0 7.8 2.7 7.8 6.9s-2.9 6.8-7.8 6.8H17M24.3 30.7 34.5 47" />
44
+ <path
45
+ d="M40 17v30M40 17h6.8c4.4 0 7.1 2.6 7.1 6.2s-2.7 5.9-7.1 5.9H40M40 29.1h7.5c4.7 0 7.7 3.2 7.7 7.1s-3 7.8-7.7 7.8H40"
46
+ />
47
+ </g>
48
+ </svg>
49
+ `,
50
+ isInline: true,
51
+ styles: ["rb-monogram{display:inline-block;flex:none;inline-size:var(--rb-size-monogram);aspect-ratio:1;line-height:0}rb-monogram .rb-monogram__svg{display:block;inline-size:100%;block-size:100%}rb-monogram .rb-monogram__frame{fill:var(--rb-color-brand-navy)}rb-monogram .rb-monogram__gradient-start{stop-color:var(--rb-color-brand-start)}rb-monogram .rb-monogram__gradient-end{stop-color:var(--rb-color-brand-end)}rb-monogram .rb-monogram__letters{fill:none;stroke:var(--rb-color-brand-ink);stroke-linecap:round;stroke-linejoin:round;stroke-width:3.5}\n"],
52
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
53
+ encapsulation: i0.ViewEncapsulation.None
54
+ });
55
+ };
56
+ i0.ɵɵngDeclareClassMetadata({
57
+ minVersion: "12.0.0",
58
+ version: "22.2.3",
59
+ ngImport: i0,
60
+ type: RbMonogramComponent,
61
+ decorators: [{
62
+ type: Component,
63
+ args: [{
64
+ selector: "rb-monogram",
65
+ changeDetection: ChangeDetectionStrategy.OnPush,
66
+ encapsulation: ViewEncapsulation.None,
67
+ host: {
68
+ class: "rb-monogram",
69
+ "aria-hidden": "true"
70
+ },
71
+ template: `
72
+ <svg class="rb-monogram__svg" viewBox="0 0 64 64" focusable="false">
73
+ <defs>
74
+ <linearGradient
75
+ [attr.id]="gradientId"
76
+ x1="8"
77
+ y1="8"
78
+ x2="56"
79
+ y2="56"
80
+ gradientUnits="userSpaceOnUse"
81
+ >
82
+ <stop class="rb-monogram__gradient-start" />
83
+ <stop class="rb-monogram__gradient-end" offset="1" />
84
+ </linearGradient>
85
+ </defs>
86
+ <rect class="rb-monogram__frame" width="64" height="64" rx="16" />
87
+ <rect x="5" y="5" width="54" height="54" rx="14" [attr.fill]="'url(#' + gradientId + ')'" />
88
+ <g class="rb-monogram__letters">
89
+ <path d="M17 47V17h7.3c4.9 0 7.8 2.7 7.8 6.9s-2.9 6.8-7.8 6.8H17M24.3 30.7 34.5 47" />
90
+ <path
91
+ d="M40 17v30M40 17h6.8c4.4 0 7.1 2.6 7.1 6.2s-2.7 5.9-7.1 5.9H40M40 29.1h7.5c4.7 0 7.7 3.2 7.7 7.1s-3 7.8-7.7 7.8H40"
92
+ />
93
+ </g>
94
+ </svg>
95
+ `,
96
+ styles: ["rb-monogram{display:inline-block;flex:none;inline-size:var(--rb-size-monogram);aspect-ratio:1;line-height:0}rb-monogram .rb-monogram__svg{display:block;inline-size:100%;block-size:100%}rb-monogram .rb-monogram__frame{fill:var(--rb-color-brand-navy)}rb-monogram .rb-monogram__gradient-start{stop-color:var(--rb-color-brand-start)}rb-monogram .rb-monogram__gradient-end{stop-color:var(--rb-color-brand-end)}rb-monogram .rb-monogram__letters{fill:none;stroke:var(--rb-color-brand-ink);stroke-linecap:round;stroke-linejoin:round;stroke-width:3.5}\n"]
97
+ }]
98
+ }]
99
+ });
100
+ export { RbMonogramComponent };
101
+
102
+ //# sourceMappingURL=rblabs-dev-axiom-monogram.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rblabs-dev-axiom-monogram.mjs","names":[],"sources":["../../../projects/axiom/monogram/src/monogram.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nlet nextId = 0;\n\n/**\n * The RB monogram (docs/design-system.md, section 12.1), drawn inline from the brand tokens so it\n * needs no request and is identical in both themes. Decorative: the element that contains it (the\n * brand lockup link) carries the accessible name. Size it with `inline-size` on the host.\n */\n@Component({\n selector: 'rb-monogram',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'rb-monogram', 'aria-hidden': 'true' },\n template: `\n <svg class=\"rb-monogram__svg\" viewBox=\"0 0 64 64\" focusable=\"false\">\n <defs>\n <linearGradient\n [attr.id]=\"gradientId\"\n x1=\"8\"\n y1=\"8\"\n x2=\"56\"\n y2=\"56\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop class=\"rb-monogram__gradient-start\" />\n <stop class=\"rb-monogram__gradient-end\" offset=\"1\" />\n </linearGradient>\n </defs>\n <rect class=\"rb-monogram__frame\" width=\"64\" height=\"64\" rx=\"16\" />\n <rect x=\"5\" y=\"5\" width=\"54\" height=\"54\" rx=\"14\" [attr.fill]=\"'url(#' + gradientId + ')'\" />\n <g class=\"rb-monogram__letters\">\n <path d=\"M17 47V17h7.3c4.9 0 7.8 2.7 7.8 6.9s-2.9 6.8-7.8 6.8H17M24.3 30.7 34.5 47\" />\n <path\n d=\"M40 17v30M40 17h6.8c4.4 0 7.1 2.6 7.1 6.2s-2.7 5.9-7.1 5.9H40M40 29.1h7.5c4.7 0 7.7 3.2 7.7 7.1s-3 7.8-7.7 7.8H40\"\n />\n </g>\n </svg>\n `,\n styleUrl: './monogram.scss',\n})\nexport class RbMonogramComponent {\n /** Unique per instance: several monograms can share a page. */\n protected readonly gradientId = `rb-monogram-gradient-${nextId++}`;\n}\n"],"mappings":";;AAEA,IAAI,SAAS;AAuCb,IAAa,sBAAb,MAAa,oBAAmB;CAEX,aAAa,wBAAwB;CAF7C,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAmB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAnB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAmB,cAAA;EAAA,UAAA;EAAA,MAAA;GAAA,YAAA,EAAA,eAAA,OAAA;GAAA,gBAAA;EAAA;EAAA,UAAA;EAAA,UA3BpB;;;;;;;;;;;;;;;;;;;;;;;;;EAwBT,UAAA;EAAA,QAAA,CAAA,kiBAAA;EAAA,iBAAA,GAAA,wBAAA;EAAA,eAAA,GAAA,kBAAA;CAAA,CAAA;;AAGU,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAhC/B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAa,iBACN,wBAAwB;GAAM,eAChC,kBAAkB;GAAI,MAC/B;IAAE,OAAO;IAAe,eAAe;GAAM;GAAE,UAC3C;;;;;;;;;;;;;;;;;;;;;;;;;GAwBT,QAAA,CAAA,kiBAAA;EAAA,CAAA"}