@vsn-ux/ngx-gaia 0.7.0 → 0.7.2

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, makeEnvironmentProviders, inject, ElementRef, input, numberAttribute, computed, Component, ViewEncapsulation, Attribute, NgModule, ChangeDetectionStrategy, Injectable, booleanAttribute, output, contentChild, forwardRef, Injector, signal, linkedSignal, Directive, model, HostListener, TemplateRef, NgZone, Input, HostBinding, effect, DestroyRef, afterNextRender, Renderer2, afterRender, contentChildren, viewChild } from '@angular/core';
2
+ import { InjectionToken, makeEnvironmentProviders, inject, ElementRef, input, numberAttribute, computed, Component, ViewEncapsulation, Attribute, NgModule, Injectable, booleanAttribute, ChangeDetectionStrategy, output, contentChild, forwardRef, Injector, signal, linkedSignal, Directive, model, HostListener, TemplateRef, NgZone, Input, HostBinding, effect, DestroyRef, afterNextRender, Renderer2, afterRender, contentChildren, viewChild } from '@angular/core';
3
3
  import * as i1 from 'lucide-angular';
4
4
  import { LucideAngularModule, X, CircleCheck, TriangleAlert, OctagonAlert, Info, Minus, Check, ChevronUp, ChevronDown } from 'lucide-angular';
5
5
  import { NG_VALUE_ACCESSOR, NgControl, NG_VALIDATORS, CheckboxRequiredValidator, RequiredValidator } from '@angular/forms';
@@ -104,52 +104,221 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
104
104
  }]
105
105
  }] });
106
106
 
107
+ function GA_BUTTON_I18N_FACTORY() {
108
+ return new GaButtonI18nDefault();
109
+ }
110
+ class GaButtonI18n {
111
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaButtonI18n, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
112
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaButtonI18n, providedIn: 'root', useFactory: GA_BUTTON_I18N_FACTORY });
113
+ }
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaButtonI18n, decorators: [{
115
+ type: Injectable,
116
+ args: [{
117
+ providedIn: 'root',
118
+ useFactory: GA_BUTTON_I18N_FACTORY,
119
+ }]
120
+ }] });
121
+ class GaButtonI18nDefault extends GaButtonI18n {
122
+ /** A label for the default loading state */
123
+ loadingLabel = 'Loading...';
124
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaButtonI18nDefault, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
125
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaButtonI18nDefault });
126
+ }
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaButtonI18nDefault, decorators: [{
128
+ type: Injectable
129
+ }] });
130
+ function provideGaButtonI18n(value) {
131
+ return makeEnvironmentProviders([
132
+ typeof value === 'function'
133
+ ? { provide: GaButtonI18n, useFactory: value }
134
+ : { provide: GaButtonI18n, useValue: value },
135
+ ]);
136
+ }
137
+
138
+ class GaSpinnerComponent {
139
+ size = input(32, { transform: numberAttribute });
140
+ strokeWidth = computed(() => this.size() / 5);
141
+ center = computed(() => this.size() / 2);
142
+ radius = computed(() => (this.size() - this.strokeWidth()) / 2);
143
+ circumference = computed(() => 2 * Math.PI * this.radius());
144
+ arcCircumference = computed(() => this.circumference() * 0.25);
145
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
146
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.5", type: GaSpinnerComponent, isStandalone: true, selector: "ga-spinner", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "progressbar", "tabindex": "-1" }, properties: { "attr.aria-valuemin": "0", "attr.aria-valuemax": "100", "attr.mode": "'indeterminate'" }, classAttribute: "ga-spinner" }, ngImport: i0, template: `
147
+ <svg
148
+ [attr.width]="size()"
149
+ [attr.height]="size()"
150
+ [attr.viewBox]="'0 0 ' + size() + ' ' + size()"
151
+ xmlns="http://www.w3.org/2000/svg"
152
+ >
153
+ <circle
154
+ [attr.cx]="center()"
155
+ [attr.cy]="center()"
156
+ [attr.r]="radius()"
157
+ stroke="var(--ga-color-secondary)"
158
+ [attr.stroke-width]="strokeWidth()"
159
+ fill="none"
160
+ ></circle>
161
+ <circle
162
+ [attr.cx]="center()"
163
+ [attr.cy]="center()"
164
+ [attr.r]="radius()"
165
+ stroke="var(--ga-color-primary-70)"
166
+ [attr.stroke-width]="strokeWidth()"
167
+ stroke-linecap="round"
168
+ fill="none"
169
+ [attr.stroke-dasharray]="arcCircumference() + ' ' + circumference()"
170
+ style="transform-origin: center; animation: ga-spinner__animation 1100ms linear infinite;"
171
+ ></circle>
172
+ </svg>
173
+ `, isInline: true, styles: [".ga-spinner{display:inline-block}@keyframes ga-spinner__animation{0%{transform:rotate(0)}31.82%{transform:rotate(90deg)}63.64%{transform:rotate(180deg)}81.82%{transform:rotate(270deg)}to{transform:rotate(360deg)}}\n"], encapsulation: i0.ViewEncapsulation.None });
174
+ }
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaSpinnerComponent, decorators: [{
176
+ type: Component,
177
+ args: [{ selector: 'ga-spinner', template: `
178
+ <svg
179
+ [attr.width]="size()"
180
+ [attr.height]="size()"
181
+ [attr.viewBox]="'0 0 ' + size() + ' ' + size()"
182
+ xmlns="http://www.w3.org/2000/svg"
183
+ >
184
+ <circle
185
+ [attr.cx]="center()"
186
+ [attr.cy]="center()"
187
+ [attr.r]="radius()"
188
+ stroke="var(--ga-color-secondary)"
189
+ [attr.stroke-width]="strokeWidth()"
190
+ fill="none"
191
+ ></circle>
192
+ <circle
193
+ [attr.cx]="center()"
194
+ [attr.cy]="center()"
195
+ [attr.r]="radius()"
196
+ stroke="var(--ga-color-primary-70)"
197
+ [attr.stroke-width]="strokeWidth()"
198
+ stroke-linecap="round"
199
+ fill="none"
200
+ [attr.stroke-dasharray]="arcCircumference() + ' ' + circumference()"
201
+ style="transform-origin: center; animation: ga-spinner__animation 1100ms linear infinite;"
202
+ ></circle>
203
+ </svg>
204
+ `, encapsulation: ViewEncapsulation.None, host: {
205
+ class: 'ga-spinner',
206
+ role: 'progressbar',
207
+ '[attr.aria-valuemin]': '0',
208
+ '[attr.aria-valuemax]': '100',
209
+ '[attr.mode]': "'indeterminate'",
210
+ tabindex: '-1',
211
+ }, styles: [".ga-spinner{display:inline-block}@keyframes ga-spinner__animation{0%{transform:rotate(0)}31.82%{transform:rotate(90deg)}63.64%{transform:rotate(180deg)}81.82%{transform:rotate(270deg)}to{transform:rotate(360deg)}}\n"] }]
212
+ }] });
213
+
107
214
  class GaButtonDirective {
215
+ i18n = inject(GaButtonI18n);
216
+ el = inject(ElementRef);
108
217
  variant = input.required({
109
218
  alias: 'gaButton',
110
219
  });
220
+ isLoading = input(false, {
221
+ alias: 'gaButtonLoading',
222
+ transform: booleanAttribute,
223
+ });
224
+ loadingLabel = input(this.i18n.loadingLabel, {
225
+ alias: 'gaButtonLoadingLabel',
226
+ });
227
+ disabledImplicit = input(false, {
228
+ alias: 'disabled',
229
+ transform: booleanAttribute,
230
+ });
231
+ disabled = computed(() => {
232
+ if (this.el.nativeElement.tagName === 'A') {
233
+ return null;
234
+ }
235
+ return this.isLoading() || this.disabledImplicit() ? '' : null;
236
+ });
111
237
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Component });
112
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.5", type: GaButtonDirective, isStandalone: true, selector: "button[gaButton], a[gaButton]", inputs: { variant: { classPropertyName: "variant", publicName: "gaButton", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.ga-button--secondary": "!variant() || variant() === 'secondary'", "class.ga-button--primary": "variant() === 'primary'", "class.ga-button--ghost": "variant() === 'ghost'", "class.ga-button--transparent": "variant() === 'transparent'" }, classAttribute: "ga-button" }, ngImport: i0, template: `<ng-content />`, isInline: true });
238
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.5", type: GaButtonDirective, isStandalone: true, selector: "button[gaButton], a[gaButton]", inputs: { variant: { classPropertyName: "variant", publicName: "gaButton", isSignal: true, isRequired: true, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "gaButtonLoading", isSignal: true, isRequired: false, transformFunction: null }, loadingLabel: { classPropertyName: "loadingLabel", publicName: "gaButtonLoadingLabel", isSignal: true, isRequired: false, transformFunction: null }, disabledImplicit: { classPropertyName: "disabledImplicit", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.ga-button--secondary": "!variant() || variant() === 'secondary'", "class.ga-button--primary": "variant() === 'primary'", "class.ga-button--ghost": "variant() === 'ghost'", "class.ga-button--transparent": "variant() === 'transparent'", "attr.disabled": "disabled()", "attr.aria-busy": "isLoading() ? \"true\" : null" }, classAttribute: "ga-button" }, ngImport: i0, template: `
239
+ @if (isLoading()) {
240
+ <ga-spinner size="16" />
241
+ <span class="ga-button__loading-label">{{ loadingLabel() }}</span>
242
+ } @else {
243
+ <ng-content />
244
+ }
245
+ `, isInline: true, styles: [".ga-button__loading-label{color:var(--ga-color-text-body);font-weight:400;font-size:calc(var(--ga-text-sm-font-size) * var(--ga-base-scaling-factor, 1));line-height:calc(var(--ga-text-sm-line-height) * var(--ga-base-scaling-factor, 1));letter-spacing:0}\n"], dependencies: [{ kind: "component", type: GaSpinnerComponent, selector: "ga-spinner", inputs: ["size"] }], encapsulation: i0.ViewEncapsulation.None });
113
246
  }
114
247
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaButtonDirective, decorators: [{
115
248
  type: Component,
116
- args: [{
117
- selector: 'button[gaButton], a[gaButton]',
118
- host: {
249
+ args: [{ selector: 'button[gaButton], a[gaButton]', imports: [GaSpinnerComponent], template: `
250
+ @if (isLoading()) {
251
+ <ga-spinner size="16" />
252
+ <span class="ga-button__loading-label">{{ loadingLabel() }}</span>
253
+ } @else {
254
+ <ng-content />
255
+ }
256
+ `, encapsulation: ViewEncapsulation.None, host: {
119
257
  class: 'ga-button',
120
258
  '[class.ga-button--secondary]': `!variant() || variant() === 'secondary'`,
121
259
  '[class.ga-button--primary]': `variant() === 'primary'`,
122
260
  '[class.ga-button--ghost]': `variant() === 'ghost'`,
123
261
  '[class.ga-button--transparent]': `variant() === 'transparent'`,
124
- },
125
- template: `<ng-content />`,
126
- }]
262
+ '[attr.disabled]': 'disabled()',
263
+ '[attr.aria-busy]': 'isLoading() ? "true" : null',
264
+ }, styles: [".ga-button__loading-label{color:var(--ga-color-text-body);font-weight:400;font-size:calc(var(--ga-text-sm-font-size) * var(--ga-base-scaling-factor, 1));line-height:calc(var(--ga-text-sm-line-height) * var(--ga-base-scaling-factor, 1));letter-spacing:0}\n"] }]
127
265
  }] });
128
266
 
129
267
  class GaIconButtonDirective {
268
+ i18n = inject(GaButtonI18n);
269
+ el = inject(ElementRef);
130
270
  icon = input.required({
131
271
  alias: 'gaIconButton',
132
272
  });
133
273
  variant = input('secondary', {
134
274
  alias: 'gaIconButtonVariant',
135
275
  });
276
+ isLoading = input(false, {
277
+ alias: 'gaIconButtonLoading',
278
+ transform: booleanAttribute,
279
+ });
280
+ loadingLabel = input(this.i18n.loadingLabel, {
281
+ alias: 'gaIconButtonLoadingLabel',
282
+ });
283
+ disabledImplicit = input(false, {
284
+ alias: 'disabled',
285
+ transform: booleanAttribute,
286
+ });
287
+ disabled = computed(() => {
288
+ if (this.el.nativeElement.tagName === 'A') {
289
+ return null;
290
+ }
291
+ return this.isLoading() || this.disabledImplicit() ? '' : null;
292
+ });
136
293
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaIconButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Component });
137
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.5", type: GaIconButtonDirective, isStandalone: true, selector: "button[gaIconButton], a[gaIconButton]", inputs: { icon: { classPropertyName: "icon", publicName: "gaIconButton", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "gaIconButtonVariant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.ga-button--primary": "variant() === 'primary'", "class.ga-button--secondary": "variant() === 'secondary'", "class.ga-button--ghost": "variant() === 'ghost'", "class.ga-button--transparent": "variant() === 'transparent'" }, classAttribute: "ga-button ga-button--icon-only" }, ngImport: i0, template: `
138
- <ga-icon [icon]="icon()" />
139
- <span class="ga-button__icon-label"><ng-content /></span>
140
- `, isInline: true, styles: [".ga-button__icon-label{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;white-space:nowrap!important;border-width:0!important}\n"], dependencies: [{ kind: "ngmodule", type: GaIconModule }, { kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
294
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.5", type: GaIconButtonDirective, isStandalone: true, selector: "button[gaIconButton], a[gaIconButton]", inputs: { icon: { classPropertyName: "icon", publicName: "gaIconButton", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "gaIconButtonVariant", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "gaIconButtonLoading", isSignal: true, isRequired: false, transformFunction: null }, loadingLabel: { classPropertyName: "loadingLabel", publicName: "gaIconButtonLoadingLabel", isSignal: true, isRequired: false, transformFunction: null }, disabledImplicit: { classPropertyName: "disabledImplicit", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.ga-button--primary": "variant() === 'primary'", "class.ga-button--secondary": "variant() === 'secondary'", "class.ga-button--ghost": "variant() === 'ghost'", "class.ga-button--transparent": "variant() === 'transparent'", "attr.disabled": "disabled()", "attr.aria-busy": "isLoading() ? \"true\" : null" }, classAttribute: "ga-button ga-button--icon-only" }, ngImport: i0, template: `
295
+ @if (isLoading()) {
296
+ <ga-spinner size="16" />
297
+ <span class="ga-button__icon-label">{{ loadingLabel() }}</span>
298
+ } @else {
299
+ <ga-icon [icon]="icon()" />
300
+ <span class="ga-button__icon-label"><ng-content /></span>
301
+ }
302
+ `, isInline: true, styles: [".ga-button__icon-label{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;white-space:nowrap!important;border-width:0!important}\n"], dependencies: [{ kind: "ngmodule", type: GaIconModule }, { kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }, { kind: "component", type: GaSpinnerComponent, selector: "ga-spinner", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
141
303
  }
142
304
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaIconButtonDirective, decorators: [{
143
305
  type: Component,
144
- args: [{ selector: 'button[gaIconButton], a[gaIconButton]', imports: [GaIconModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
145
- <ga-icon [icon]="icon()" />
146
- <span class="ga-button__icon-label"><ng-content /></span>
306
+ args: [{ selector: 'button[gaIconButton], a[gaIconButton]', imports: [GaIconModule, GaSpinnerComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
307
+ @if (isLoading()) {
308
+ <ga-spinner size="16" />
309
+ <span class="ga-button__icon-label">{{ loadingLabel() }}</span>
310
+ } @else {
311
+ <ga-icon [icon]="icon()" />
312
+ <span class="ga-button__icon-label"><ng-content /></span>
313
+ }
147
314
  `, host: {
148
315
  class: 'ga-button ga-button--icon-only',
149
316
  '[class.ga-button--primary]': `variant() === 'primary'`,
150
317
  '[class.ga-button--secondary]': `variant() === 'secondary'`,
151
318
  '[class.ga-button--ghost]': `variant() === 'ghost'`,
152
319
  '[class.ga-button--transparent]': `variant() === 'transparent'`,
320
+ '[attr.disabled]': 'disabled()',
321
+ '[attr.aria-busy]': 'isLoading() ? "true" : null',
153
322
  }, styles: [".ga-button__icon-label{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;white-space:nowrap!important;border-width:0!important}\n"] }]
154
323
  }] });
155
324
 
@@ -247,7 +416,7 @@ class GaAlertComponent {
247
416
  return `${progressValue}%`;
248
417
  });
249
418
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaAlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
250
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.5", type: GaAlertComponent, isStandalone: true, selector: "ga-alert", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, explicitIcon: { classPropertyName: "explicitIcon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null }, progress: { classPropertyName: "progress", publicName: "progress", isSignal: true, isRequired: false, transformFunction: null }, progressLabel: { classPropertyName: "progressLabel", publicName: "progressLabel", isSignal: true, isRequired: false, transformFunction: null }, progressLabelledBy: { classPropertyName: "progressLabelledBy", publicName: "progressLabelledBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismiss: "dismiss" }, host: { attributes: { "role": "alert" }, properties: { "class": "variantClass()" } }, queries: [{ propertyName: "title", first: true, predicate: GaAlertTitleComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (icon()) {\n <ga-icon [icon]=\"icon()!\" class=\"ga-notification__icon\" />\n}\n<div class=\"ga-notification__content\">\n @if (title()) {\n <div class=\"ga-notification__heading\">\n <ng-content select=\"ga-alert-title\" />\n <ng-content select=\"ga-alert-title-actions\" />\n </div>\n }\n <div class=\"ga-notification__description\">\n <ng-content />\n </div>\n</div>\n\n@if (hasProgress()) {\n <div\n role=\"progressbar\"\n class=\"ga-notification__progress\"\n [class.ga-notification__progress--indeterminate]=\"\n progress() === 'indeterminate'\n \"\n [id]=\"progressId\"\n [attr.aria-label]=\"progressLabel()\"\n [attr.aria-labelledby]=\"progressLabelledBy()\"\n [attr.aria-valuenow]=\"progressValue()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <div\n class=\"ga-notification__progress-bar\"\n [style.width]=\"progressBarWidth()\"\n ></div>\n </div>\n}\n\n@if (dismissible()) {\n <button\n type=\"button\"\n [gaIconButton]=\"dismissIcon\"\n gaIconButtonVariant=\"ghost\"\n (click)=\"dismiss.emit()\"\n >\n {{ i18n.dismissLabel }}\n </button>\n}\n", dependencies: [{ kind: "ngmodule", type: GaIconModule }, { kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }, { kind: "ngmodule", type: GaButtonModule }, { kind: "component", type: GaIconButtonDirective, selector: "button[gaIconButton], a[gaIconButton]", inputs: ["gaIconButton", "gaIconButtonVariant"] }] });
419
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.5", type: GaAlertComponent, isStandalone: true, selector: "ga-alert", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, explicitIcon: { classPropertyName: "explicitIcon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null }, progress: { classPropertyName: "progress", publicName: "progress", isSignal: true, isRequired: false, transformFunction: null }, progressLabel: { classPropertyName: "progressLabel", publicName: "progressLabel", isSignal: true, isRequired: false, transformFunction: null }, progressLabelledBy: { classPropertyName: "progressLabelledBy", publicName: "progressLabelledBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismiss: "dismiss" }, host: { attributes: { "role": "alert" }, properties: { "class": "variantClass()" } }, queries: [{ propertyName: "title", first: true, predicate: GaAlertTitleComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (icon()) {\n <ga-icon [icon]=\"icon()!\" class=\"ga-notification__icon\" />\n}\n<div class=\"ga-notification__content\">\n @if (title()) {\n <div class=\"ga-notification__heading\">\n <ng-content select=\"ga-alert-title\" />\n <ng-content select=\"ga-alert-title-actions\" />\n </div>\n }\n <div class=\"ga-notification__description\">\n <ng-content />\n </div>\n</div>\n\n@if (hasProgress()) {\n <div\n role=\"progressbar\"\n class=\"ga-notification__progress\"\n [class.ga-notification__progress--indeterminate]=\"\n progress() === 'indeterminate'\n \"\n [id]=\"progressId\"\n [attr.aria-label]=\"progressLabel()\"\n [attr.aria-labelledby]=\"progressLabelledBy()\"\n [attr.aria-valuenow]=\"progressValue()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <div\n class=\"ga-notification__progress-bar\"\n [style.width]=\"progressBarWidth()\"\n ></div>\n </div>\n}\n\n@if (dismissible()) {\n <button\n type=\"button\"\n [gaIconButton]=\"dismissIcon\"\n gaIconButtonVariant=\"ghost\"\n (click)=\"dismiss.emit()\"\n >\n {{ i18n.dismissLabel }}\n </button>\n}\n", dependencies: [{ kind: "ngmodule", type: GaIconModule }, { kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }, { kind: "ngmodule", type: GaButtonModule }, { kind: "component", type: GaIconButtonDirective, selector: "button[gaIconButton], a[gaIconButton]", inputs: ["gaIconButton", "gaIconButtonVariant", "gaIconButtonLoading", "gaIconButtonLoadingLabel", "disabled"] }] });
251
420
  }
252
421
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaAlertComponent, decorators: [{
253
422
  type: Component,
@@ -1468,11 +1637,12 @@ class GaModalService {
1468
1637
  }
1469
1638
  /** @ignore */
1470
1639
  createOverlay() {
1640
+ const modalStackIndex = this.activeModals().length;
1471
1641
  const positionStrategy = this.overlay
1472
1642
  .position()
1473
1643
  .global()
1474
1644
  .centerHorizontally()
1475
- .top('calc(4rem*var(--ga-base-scaling-factor,1))');
1645
+ .top(`calc(4rem * var(--ga-base-scaling-factor, 1) * ${modalStackIndex + 1})`);
1476
1646
  const scrollStrategy = this.overlay.scrollStrategies.block();
1477
1647
  return this.overlay.create({
1478
1648
  positionStrategy,
@@ -1482,6 +1652,7 @@ class GaModalService {
1482
1652
  // NOTE: handled manually inside the modal component
1483
1653
  disposeOnNavigation: false,
1484
1654
  height: 'auto',
1655
+ maxHeight: `calc(100vh - 4rem * var(--ga-base-scaling-factor, 1) * (2 + ${modalStackIndex}))`,
1485
1656
  });
1486
1657
  }
1487
1658
  /** @ignore */
@@ -1560,7 +1731,6 @@ class GaModalComponent {
1560
1731
  closeSubject = new Subject();
1561
1732
  overlayRef = inject(OverlayRef);
1562
1733
  destroyRef = inject(DestroyRef);
1563
- _modalService = inject(GaModalService);
1564
1734
  router = inject(Router, { optional: true });
1565
1735
  globalOptions = inject(GaModalOptions, { optional: true });
1566
1736
  options = this.createOptions();
@@ -1568,7 +1738,6 @@ class GaModalComponent {
1568
1738
  data = inject(GA_MODAL_DATA);
1569
1739
  labelledBy = signal(null);
1570
1740
  describedBy = signal(null);
1571
- modalStackIndex = computed(() => this._modalService.activeModals().length - 1);
1572
1741
  constructor() {
1573
1742
  this.trapfocus.enabled = true;
1574
1743
  this.trapfocus.autoCapture = true;
@@ -1646,7 +1815,7 @@ class GaModalComponent {
1646
1815
  };
1647
1816
  }
1648
1817
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1649
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: GaModalComponent, isStandalone: true, selector: "ng-component", host: { properties: { "attr.role": "options.role", "attr.aria-labelledby": "options.labelledBy ?? labelledBy()", "attr.aria-describedby": "options.describedBy ?? describedBy()", "class.ga-modal--small": "options.size === 'sm'", "class.ga-modal--medium": "options.size === 'md'", "class.ga-modal--large": "options.size === 'lg'", "class.ga-modal--information": "options.type === 'info'", "class.ga-modal--danger": "options.type === 'danger'", "class.ga-modal--warning": "options.type === 'warning'", "class.ga-modal--success": "options.type === 'success'", "style.margin-top": "'calc(var(--ga-base-scaling-factor, 1)*4rem*'+modalStackIndex()+')'" }, classAttribute: "ga-modal" }, hostDirectives: [{ directive: i1$2.CdkTrapFocus }], ngImport: i0, template: '', isInline: true });
1818
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: GaModalComponent, isStandalone: true, selector: "ng-component", host: { properties: { "attr.role": "options.role", "attr.aria-labelledby": "options.labelledBy ?? labelledBy()", "attr.aria-describedby": "options.describedBy ?? describedBy()", "class.ga-modal--small": "options.size === 'sm'", "class.ga-modal--medium": "options.size === 'md'", "class.ga-modal--large": "options.size === 'lg'", "class.ga-modal--information": "options.type === 'info'", "class.ga-modal--danger": "options.type === 'danger'", "class.ga-modal--warning": "options.type === 'warning'", "class.ga-modal--success": "options.type === 'success'" }, classAttribute: "ga-modal" }, hostDirectives: [{ directive: i1$2.CdkTrapFocus }], ngImport: i0, template: '', isInline: true });
1650
1819
  }
1651
1820
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaModalComponent, decorators: [{
1652
1821
  type: Component,
@@ -1664,7 +1833,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
1664
1833
  '[class.ga-modal--danger]': "options.type === 'danger'",
1665
1834
  '[class.ga-modal--warning]': "options.type === 'warning'",
1666
1835
  '[class.ga-modal--success]': "options.type === 'success'",
1667
- '[style.margin-top]': `'calc(var(--ga-base-scaling-factor, 1)*4rem*'+modalStackIndex()+')'`,
1668
1836
  },
1669
1837
  hostDirectives: [CdkTrapFocus],
1670
1838
  }]
@@ -1871,7 +2039,7 @@ class GaModalHeaderComponent {
1871
2039
  >
1872
2040
  {{ i18n.dismissLabel }}
1873
2041
  </button>
1874
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: GaButtonModule }, { kind: "component", type: GaIconButtonDirective, selector: "button[gaIconButton], a[gaIconButton]", inputs: ["gaIconButton", "gaIconButtonVariant"] }, { kind: "ngmodule", type: GaIconModule }, { kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }] });
2042
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: GaButtonModule }, { kind: "component", type: GaIconButtonDirective, selector: "button[gaIconButton], a[gaIconButton]", inputs: ["gaIconButton", "gaIconButtonVariant", "gaIconButtonLoading", "gaIconButtonLoadingLabel", "disabled"] }, { kind: "ngmodule", type: GaIconModule }, { kind: "component", type: GaIconComponent, selector: "ga-icon", inputs: ["icon", "size", "color", "strokeWidth"] }] });
1875
2043
  }
1876
2044
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaModalHeaderComponent, decorators: [{
1877
2045
  type: Component,
@@ -2550,82 +2718,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
2550
2718
  }]
2551
2719
  }] });
2552
2720
 
2553
- class GaSpinnerComponent {
2554
- size = input(32, { transform: numberAttribute });
2555
- strokeWidth = computed(() => this.size() / 5);
2556
- center = computed(() => this.size() / 2);
2557
- radius = computed(() => (this.size() - this.strokeWidth()) / 2);
2558
- circumference = computed(() => 2 * Math.PI * this.radius());
2559
- arcCircumference = computed(() => this.circumference() * 0.25);
2560
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2561
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.1.5", type: GaSpinnerComponent, isStandalone: true, selector: "ga-spinner", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "progressbar", "tabindex": "-1" }, properties: { "attr.aria-valuemin": "0", "attr.aria-valuemax": "100", "attr.mode": "'indeterminate'" }, classAttribute: "ga-spinner" }, ngImport: i0, template: `
2562
- <svg
2563
- [attr.width]="size()"
2564
- [attr.height]="size()"
2565
- [attr.viewBox]="'0 0 ' + size() + ' ' + size()"
2566
- xmlns="http://www.w3.org/2000/svg"
2567
- >
2568
- <circle
2569
- [attr.cx]="center()"
2570
- [attr.cy]="center()"
2571
- [attr.r]="radius()"
2572
- stroke="var(--ga-color-secondary)"
2573
- [attr.stroke-width]="strokeWidth()"
2574
- fill="none"
2575
- ></circle>
2576
- <circle
2577
- [attr.cx]="center()"
2578
- [attr.cy]="center()"
2579
- [attr.r]="radius()"
2580
- stroke="var(--ga-color-primary-70)"
2581
- [attr.stroke-width]="strokeWidth()"
2582
- stroke-linecap="round"
2583
- fill="none"
2584
- [attr.stroke-dasharray]="arcCircumference() + ' ' + circumference()"
2585
- style="transform-origin: center; animation: ga-spinner__animation 1100ms linear infinite;"
2586
- ></circle>
2587
- </svg>
2588
- `, isInline: true, styles: [".ga-spinner{display:inline-block}@keyframes ga-spinner__animation{0%{transform:rotate(0)}31.82%{transform:rotate(90deg)}63.64%{transform:rotate(180deg)}81.82%{transform:rotate(270deg)}to{transform:rotate(360deg)}}\n"], encapsulation: i0.ViewEncapsulation.None });
2589
- }
2590
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaSpinnerComponent, decorators: [{
2591
- type: Component,
2592
- args: [{ selector: 'ga-spinner', template: `
2593
- <svg
2594
- [attr.width]="size()"
2595
- [attr.height]="size()"
2596
- [attr.viewBox]="'0 0 ' + size() + ' ' + size()"
2597
- xmlns="http://www.w3.org/2000/svg"
2598
- >
2599
- <circle
2600
- [attr.cx]="center()"
2601
- [attr.cy]="center()"
2602
- [attr.r]="radius()"
2603
- stroke="var(--ga-color-secondary)"
2604
- [attr.stroke-width]="strokeWidth()"
2605
- fill="none"
2606
- ></circle>
2607
- <circle
2608
- [attr.cx]="center()"
2609
- [attr.cy]="center()"
2610
- [attr.r]="radius()"
2611
- stroke="var(--ga-color-primary-70)"
2612
- [attr.stroke-width]="strokeWidth()"
2613
- stroke-linecap="round"
2614
- fill="none"
2615
- [attr.stroke-dasharray]="arcCircumference() + ' ' + circumference()"
2616
- style="transform-origin: center; animation: ga-spinner__animation 1100ms linear infinite;"
2617
- ></circle>
2618
- </svg>
2619
- `, encapsulation: ViewEncapsulation.None, host: {
2620
- class: 'ga-spinner',
2621
- role: 'progressbar',
2622
- '[attr.aria-valuemin]': '0',
2623
- '[attr.aria-valuemax]': '100',
2624
- '[attr.mode]': "'indeterminate'",
2625
- tabindex: '-1',
2626
- }, styles: [".ga-spinner{display:inline-block}@keyframes ga-spinner__animation{0%{transform:rotate(0)}31.82%{transform:rotate(90deg)}63.64%{transform:rotate(180deg)}81.82%{transform:rotate(270deg)}to{transform:rotate(360deg)}}\n"] }]
2627
- }] });
2628
-
2629
2721
  class GaSpinnerModule {
2630
2722
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: GaSpinnerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2631
2723
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.5", ngImport: i0, type: GaSpinnerModule, imports: [GaSpinnerComponent], exports: [GaSpinnerComponent] });
@@ -2870,5 +2962,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
2870
2962
  * Generated bundle index. Do not edit.
2871
2963
  */
2872
2964
 
2873
- export { CHECKBOX_CONTROL_VALUE_ACCESSOR, DEFAULT_MODAL_OPTIONS, GA_ALERT_I18N_FACTORY, GA_BASE_FONT_SIZE, GA_CHECKBOX_REQUIRED_VALIDATOR, GA_FORM_CONTROL, GA_ICON_DEFAULT_SIZE, GA_MODAL_DATA, GA_MODAL_I18N_FACTORY, GA_SELECT_REQUIRED_VALIDATOR, GA_TOOLTIP_DEFAULT_OFFSET, GaAlertComponent, GaAlertI18n, GaAlertI18nDefault, GaAlertModule, GaAlertTitleActionsComponent, GaAlertTitleComponent, GaBadgeComponent, GaBadgeModule, GaButtonDirective, GaButtonModule, GaCardComponent, GaCardModule, GaCheckboxComponent, GaCheckboxModule, GaCheckboxRequiredValidator, GaFieldInfoComponent, GaFieldLabelComponent, GaFormControlDirective, GaFormFieldComponent, GaFormFieldModule, GaIconButtonDirective, GaIconComponent, GaIconModule, GaInputComponent, GaInputDirective, GaInputModule, GaLinkDirective, GaLinkModule, GaMenuComponent, GaMenuItemComponent, GaMenuModule, GaMenuSeparatorComponent, GaMenuTitleComponent, GaMenuTriggerDirective, GaMenuTriggerIconComponent, GaModalActionsComponent, GaModalCloseDirective, GaModalComponent, GaModalContentComponent, GaModalDescriptionComponent, GaModalDescriptionDirective, GaModalHeaderComponent, GaModalI18n, GaModalI18nDefault, GaModalModule, GaModalOptions, GaModalRef, GaModalService, GaModalTitleDirective, GaOptgroupComponent, GaOptionComponent, GaRadioButtonComponent, GaRadioGroupComponent, GaRadioModule, GaSegmentedControlButtonDirective, GaSegmentedControlComponent, GaSegmentedControlIconButtonComponent, GaSegmentedControlModule, GaSegmentedControlTextButtonComponent, GaSelectComponent, GaSelectDropdownComponent, GaSelectDropdownSpinnerComponent, GaSelectModule, GaSelectRequiredValidator, GaSelectValueComponent, GaSpinnerComponent, GaSpinnerModule, GaTextAreaDirective, GaTextAreaModule, GaTooltipComponent, GaTooltipDirective, GaTooltipModule, RADIO_CONTROL_VALUE_ACCESSOR, provideGaAlertI18n, provideGaBaseFontSize, provideGaModalI18n, provideGaModalOptions };
2965
+ export { CHECKBOX_CONTROL_VALUE_ACCESSOR, DEFAULT_MODAL_OPTIONS, GA_ALERT_I18N_FACTORY, GA_BASE_FONT_SIZE, GA_BUTTON_I18N_FACTORY, GA_CHECKBOX_REQUIRED_VALIDATOR, GA_FORM_CONTROL, GA_ICON_DEFAULT_SIZE, GA_MODAL_DATA, GA_MODAL_I18N_FACTORY, GA_SELECT_REQUIRED_VALIDATOR, GA_TOOLTIP_DEFAULT_OFFSET, GaAlertComponent, GaAlertI18n, GaAlertI18nDefault, GaAlertModule, GaAlertTitleActionsComponent, GaAlertTitleComponent, GaBadgeComponent, GaBadgeModule, GaButtonDirective, GaButtonI18n, GaButtonI18nDefault, GaButtonModule, GaCardComponent, GaCardModule, GaCheckboxComponent, GaCheckboxModule, GaCheckboxRequiredValidator, GaFieldInfoComponent, GaFieldLabelComponent, GaFormControlDirective, GaFormFieldComponent, GaFormFieldModule, GaIconButtonDirective, GaIconComponent, GaIconModule, GaInputComponent, GaInputDirective, GaInputModule, GaLinkDirective, GaLinkModule, GaMenuComponent, GaMenuItemComponent, GaMenuModule, GaMenuSeparatorComponent, GaMenuTitleComponent, GaMenuTriggerDirective, GaMenuTriggerIconComponent, GaModalActionsComponent, GaModalCloseDirective, GaModalComponent, GaModalContentComponent, GaModalDescriptionComponent, GaModalDescriptionDirective, GaModalHeaderComponent, GaModalI18n, GaModalI18nDefault, GaModalModule, GaModalOptions, GaModalRef, GaModalService, GaModalTitleDirective, GaOptgroupComponent, GaOptionComponent, GaRadioButtonComponent, GaRadioGroupComponent, GaRadioModule, GaSegmentedControlButtonDirective, GaSegmentedControlComponent, GaSegmentedControlIconButtonComponent, GaSegmentedControlModule, GaSegmentedControlTextButtonComponent, GaSelectComponent, GaSelectDropdownComponent, GaSelectDropdownSpinnerComponent, GaSelectModule, GaSelectRequiredValidator, GaSelectValueComponent, GaSpinnerComponent, GaSpinnerModule, GaTextAreaDirective, GaTextAreaModule, GaTooltipComponent, GaTooltipDirective, GaTooltipModule, RADIO_CONTROL_VALUE_ACCESSOR, provideGaAlertI18n, provideGaBaseFontSize, provideGaButtonI18n, provideGaModalI18n, provideGaModalOptions };
2874
2966
  //# sourceMappingURL=vsn-ux-ngx-gaia.mjs.map