ngx-strata 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/styles/base.scss +7 -3
- package/assets/styles/colors.scss +3 -11
- package/assets/styles/components/_breadcrumb.scss +68 -0
- package/assets/styles/components/accordion.scss +4 -2
- package/assets/styles/components/action-menu.scss +14 -3
- package/assets/styles/components/alert.scss +112 -0
- package/assets/styles/components/avatar.scss +40 -22
- package/assets/styles/components/button.scss +27 -20
- package/assets/styles/components/card.scss +21 -13
- package/assets/styles/components/checkbox.scss +11 -9
- package/assets/styles/components/icon.scss +5 -0
- package/assets/styles/components/input-field.scss +6 -3
- package/assets/styles/components/item.scss +11 -1
- package/assets/styles/components/modal.scss +3 -9
- package/assets/styles/components/notification.scss +40 -20
- package/assets/styles/components/overlay.scss +4 -0
- package/assets/styles/components/pagination.scss +16 -8
- package/assets/styles/components/progress.scss +32 -22
- package/assets/styles/components/radio.scss +101 -0
- package/assets/styles/components/segmented-control.scss +41 -9
- package/assets/styles/components/select.scss +24 -30
- package/assets/styles/components/sidemenu.scss +62 -0
- package/assets/styles/components/spinner.scss +10 -7
- package/assets/styles/components/table.scss +4 -2
- package/assets/styles/components/tabs.scss +71 -0
- package/assets/styles/components/tag.scss +17 -13
- package/assets/styles/components/toggle.scss +69 -40
- package/assets/styles/focus-outline.scss +2 -1
- package/assets/styles/primitives/color-primitives.scss +88 -0
- package/assets/styles/primitives/spacing-primitives.scss +16 -0
- package/assets/styles/public-api.scss +43 -34
- package/assets/styles/semantics/color-semantic.scss +121 -0
- package/assets/styles/typography.scss +123 -34
- package/dist/strata/strata.css +1 -1
- package/fesm2022/ngx-strata.mjs +1154 -439
- package/fesm2022/ngx-strata.mjs.map +1 -1
- package/package.json +3 -3
- package/skills/ngx-strata/SKILL.md +106 -0
- package/skills/ngx-strata/components/accordion.md +38 -0
- package/skills/ngx-strata/components/action-menu.md +36 -0
- package/skills/ngx-strata/components/alert.md +28 -0
- package/skills/ngx-strata/components/avatar.md +33 -0
- package/skills/ngx-strata/components/breadcrumb.md +32 -0
- package/skills/ngx-strata/components/button.md +34 -0
- package/skills/ngx-strata/components/card.md +24 -0
- package/skills/ngx-strata/components/checkbox.md +22 -0
- package/skills/ngx-strata/components/divider.md +19 -0
- package/skills/ngx-strata/components/icon.md +21 -0
- package/skills/ngx-strata/components/input-field.md +29 -0
- package/skills/ngx-strata/components/item.md +31 -0
- package/skills/ngx-strata/components/kbd.md +18 -0
- package/skills/ngx-strata/components/message-state.md +32 -0
- package/skills/ngx-strata/components/modal.md +86 -0
- package/skills/ngx-strata/components/notification.md +46 -0
- package/skills/ngx-strata/components/number-display.md +26 -0
- package/skills/ngx-strata/components/overlay.md +20 -0
- package/skills/ngx-strata/components/pagination.md +23 -0
- package/skills/ngx-strata/components/progress.md +46 -0
- package/skills/ngx-strata/components/radio.md +29 -0
- package/skills/ngx-strata/components/segmented-control.md +38 -0
- package/skills/ngx-strata/components/shell.md +18 -0
- package/skills/ngx-strata/components/sidemenu.md +41 -0
- package/skills/ngx-strata/components/single-select.md +45 -0
- package/skills/ngx-strata/components/slider.md +24 -0
- package/skills/ngx-strata/components/spinner.md +17 -0
- package/skills/ngx-strata/components/tabs.md +27 -0
- package/skills/ngx-strata/components/tag.md +17 -0
- package/skills/ngx-strata/components/text-stack.md +21 -0
- package/skills/ngx-strata/components/theming.md +19 -0
- package/skills/ngx-strata/components/toggle.md +22 -0
- package/types/ngx-strata.d.ts +464 -228
- package/dist/my-lib/strata.css +0 -1
package/fesm2022/ngx-strata.mjs
CHANGED
|
@@ -1,13 +1,45 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { inject, ElementRef, input, model, output, computed, Directive, Injectable, provideAppInitializer, makeEnvironmentProviders, InjectionToken, DOCUMENT, Input, Inject, signal, effect, DestroyRef, HostListener, Component, contentChild, HostBinding, ViewContainerRef, viewChild, contentChildren, Renderer2, TemplateRef, Pipe, booleanAttribute, ContentChildren, Injector, LOCALE_ID } from '@angular/core';
|
|
3
3
|
import { computePosition, offset, arrow, autoUpdate, flip, shift } from '@floating-ui/dom';
|
|
4
|
-
import { Observable, tap, map,
|
|
4
|
+
import { Observable, tap, map, fromEvent, switchMap, filter } from 'rxjs';
|
|
5
5
|
import { HttpClient } from '@angular/common/http';
|
|
6
6
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
7
|
-
import
|
|
7
|
+
import { takeUntilDestroyed, toSignal, toObservable } from '@angular/core/rxjs-interop';
|
|
8
|
+
import * as i1 from '@angular/common';
|
|
9
|
+
import { CommonModule, NgTemplateOutlet, DecimalPipe, formatNumber, getLocaleNumberSymbol, NumberSymbol } from '@angular/common';
|
|
10
|
+
import * as i1$1 from '@angular/forms';
|
|
8
11
|
import { FormsModule } from '@angular/forms';
|
|
9
|
-
import
|
|
10
|
-
|
|
12
|
+
import { Router, NavigationEnd, RouterLinkActive } from '@angular/router';
|
|
13
|
+
|
|
14
|
+
class StrataActivatableDirective {
|
|
15
|
+
_elementRef = inject(ElementRef);
|
|
16
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
17
|
+
interactable = model(true, ...(ngDevMode ? [{ debugName: "interactable" }] : []));
|
|
18
|
+
activated = output();
|
|
19
|
+
isFocusable = computed(() => this.interactable() && !this.disabled(), ...(ngDevMode ? [{ debugName: "isFocusable" }] : []));
|
|
20
|
+
onKeyDown(event) {
|
|
21
|
+
if (!this.isFocusable()) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (event.key === ' ' || event.key === 'Enter') {
|
|
25
|
+
event.preventDefault();
|
|
26
|
+
this.activated.emit(event);
|
|
27
|
+
this._elementRef.nativeElement.click();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataActivatableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
31
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: StrataActivatableDirective, isStandalone: true, selector: "[stActivatable]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, interactable: { classPropertyName: "interactable", publicName: "interactable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { interactable: "interactableChange", activated: "activated" }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "attr.tabindex": "isFocusable() ? \"0\" : null" } }, ngImport: i0 });
|
|
32
|
+
}
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataActivatableDirective, decorators: [{
|
|
34
|
+
type: Directive,
|
|
35
|
+
args: [{
|
|
36
|
+
selector: '[stActivatable]',
|
|
37
|
+
host: {
|
|
38
|
+
'(keydown)': 'onKeyDown($event)',
|
|
39
|
+
'[attr.tabindex]': 'isFocusable() ? "0" : null',
|
|
40
|
+
},
|
|
41
|
+
}]
|
|
42
|
+
}], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], interactable: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactable", required: false }] }, { type: i0.Output, args: ["interactableChange"] }], activated: [{ type: i0.Output, args: ["activated"] }] } });
|
|
11
43
|
|
|
12
44
|
class IconLoader {
|
|
13
45
|
}
|
|
@@ -146,9 +178,20 @@ function provideIconRegistry() {
|
|
|
146
178
|
const DEFAULT_CONFIG = {
|
|
147
179
|
includeBaseIcons: true,
|
|
148
180
|
tooltipDelayMs: 500,
|
|
181
|
+
crossPlatformHotkeys: true,
|
|
182
|
+
shortcutLabels: {
|
|
183
|
+
meta: '⌘',
|
|
184
|
+
ctrl: 'Ctrl',
|
|
185
|
+
shift: 'Shift',
|
|
186
|
+
alt: 'Alt',
|
|
187
|
+
},
|
|
149
188
|
};
|
|
150
189
|
function provideStrata(config = {}) {
|
|
151
|
-
const mergedConfig = {
|
|
190
|
+
const mergedConfig = {
|
|
191
|
+
...DEFAULT_CONFIG,
|
|
192
|
+
...config,
|
|
193
|
+
shortcutLabels: { ...DEFAULT_CONFIG.shortcutLabels, ...config.shortcutLabels },
|
|
194
|
+
};
|
|
152
195
|
const providers = [
|
|
153
196
|
provideIconLoader(),
|
|
154
197
|
provideIconRegistry(),
|
|
@@ -164,7 +207,7 @@ function provideStrata(config = {}) {
|
|
|
164
207
|
}
|
|
165
208
|
const STRATA_CONFIG = new InjectionToken('STRATA_CONFIG');
|
|
166
209
|
|
|
167
|
-
class
|
|
210
|
+
class StrataTooltipDirective {
|
|
168
211
|
document;
|
|
169
212
|
element;
|
|
170
213
|
renderer;
|
|
@@ -259,16 +302,17 @@ class TooltipDirective {
|
|
|
259
302
|
}
|
|
260
303
|
this.tooltipContentElement?.removeAttribute('data-show');
|
|
261
304
|
this.tooltipContentElement?.setAttribute('aria-hidden', 'true');
|
|
262
|
-
this.autoUpdateCleanupFunction
|
|
305
|
+
if (this.autoUpdateCleanupFunction) {
|
|
306
|
+
this.autoUpdateCleanupFunction();
|
|
307
|
+
}
|
|
263
308
|
}
|
|
264
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
265
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type:
|
|
309
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataTooltipDirective, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
310
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: StrataTooltipDirective, isStandalone: true, selector: "[stSimpleTooltip]", inputs: { stSimpleTooltip: { classPropertyName: "stSimpleTooltip", publicName: "stSimpleTooltip", isSignal: true, isRequired: true, transformFunction: null }, tooltipEnabled: { classPropertyName: "tooltipEnabled", publicName: "tooltipEnabled", isSignal: false, isRequired: false, transformFunction: null }, tooltipPlacement: { classPropertyName: "tooltipPlacement", publicName: "tooltipPlacement", isSignal: false, isRequired: false, transformFunction: null }, tooltipAlwaysShow: { classPropertyName: "tooltipAlwaysShow", publicName: "tooltipAlwaysShow", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
266
311
|
}
|
|
267
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
312
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataTooltipDirective, decorators: [{
|
|
268
313
|
type: Directive,
|
|
269
314
|
args: [{
|
|
270
315
|
selector: '[stSimpleTooltip]',
|
|
271
|
-
standalone: true,
|
|
272
316
|
}]
|
|
273
317
|
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
274
318
|
type: Inject,
|
|
@@ -344,7 +388,96 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
344
388
|
}]
|
|
345
389
|
}], ctorParameters: () => [] });
|
|
346
390
|
|
|
347
|
-
class
|
|
391
|
+
class HotkeyService {
|
|
392
|
+
config = inject(STRATA_CONFIG);
|
|
393
|
+
destroyRef = inject(DestroyRef);
|
|
394
|
+
registrations = new Map();
|
|
395
|
+
constructor() {
|
|
396
|
+
fromEvent(document, 'keydown')
|
|
397
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
398
|
+
.subscribe((event) => this.handleKeydown(event));
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Register a keyboard shortcut.
|
|
402
|
+
*
|
|
403
|
+
* @param combo - A combo string like `'meta+k'`, `'ctrl+shift+p'`, `'shift+?'`.
|
|
404
|
+
* Use `'meta'` for ⌘ on Mac / Win key on Windows. When `crossPlatformHotkeys` is
|
|
405
|
+
* enabled in StrataConfig (default), registering `meta+k` also fires on `ctrl+k`
|
|
406
|
+
* and vice-versa.
|
|
407
|
+
* @param handler - Callback invoked when the combo is matched.
|
|
408
|
+
* @param options - Optional configuration per registration.
|
|
409
|
+
* @returns A teardown function — call it to unregister the hotkey.
|
|
410
|
+
*/
|
|
411
|
+
register(combo, handler, options = {}) {
|
|
412
|
+
const id = Symbol();
|
|
413
|
+
const parsed = this.parseCombo(combo);
|
|
414
|
+
const combos = this.config.crossPlatformHotkeys ? this.expandCrossPlatform(parsed) : [parsed];
|
|
415
|
+
this.registrations.set(id, {
|
|
416
|
+
combos,
|
|
417
|
+
handler,
|
|
418
|
+
options: { allowInInput: false, ...options },
|
|
419
|
+
});
|
|
420
|
+
return () => this.registrations.delete(id);
|
|
421
|
+
}
|
|
422
|
+
handleKeydown(event) {
|
|
423
|
+
for (const registration of this.registrations.values()) {
|
|
424
|
+
if (!registration.options.allowInInput && this.isInputFocused(event)) {
|
|
425
|
+
continue;
|
|
426
|
+
}
|
|
427
|
+
if (registration.combos.some((combo) => this.matchesCombo(event, combo))) {
|
|
428
|
+
event.preventDefault();
|
|
429
|
+
registration.handler();
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
matchesCombo(event, combo) {
|
|
434
|
+
return (event.key.toLowerCase() === combo.key &&
|
|
435
|
+
event.metaKey === combo.meta &&
|
|
436
|
+
event.ctrlKey === combo.ctrl &&
|
|
437
|
+
event.shiftKey === combo.shift &&
|
|
438
|
+
event.altKey === combo.alt);
|
|
439
|
+
}
|
|
440
|
+
parseCombo(combo) {
|
|
441
|
+
const parts = combo.toLowerCase().split('+');
|
|
442
|
+
const key = parts[parts.length - 1];
|
|
443
|
+
return {
|
|
444
|
+
key,
|
|
445
|
+
meta: parts.includes('meta'),
|
|
446
|
+
ctrl: parts.includes('ctrl'),
|
|
447
|
+
shift: parts.includes('shift'),
|
|
448
|
+
alt: parts.includes('alt'),
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* When crossPlatformHotkeys is enabled, mirror meta ↔ ctrl so that
|
|
453
|
+
* a single `register('meta+k', ...)` call fires on both ⌘K (Mac) and Ctrl+K (Win/Linux).
|
|
454
|
+
*/
|
|
455
|
+
expandCrossPlatform(parsed) {
|
|
456
|
+
const combos = [parsed];
|
|
457
|
+
if (parsed.meta && !parsed.ctrl) {
|
|
458
|
+
combos.push({ ...parsed, meta: false, ctrl: true });
|
|
459
|
+
}
|
|
460
|
+
else if (parsed.ctrl && !parsed.meta) {
|
|
461
|
+
combos.push({ ...parsed, ctrl: false, meta: true });
|
|
462
|
+
}
|
|
463
|
+
return combos;
|
|
464
|
+
}
|
|
465
|
+
isInputFocused(event) {
|
|
466
|
+
const target = event.target;
|
|
467
|
+
if (!target)
|
|
468
|
+
return false;
|
|
469
|
+
const tag = target.tagName.toLowerCase();
|
|
470
|
+
return tag === 'input' || tag === 'textarea' || target.isContentEditable;
|
|
471
|
+
}
|
|
472
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HotkeyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
473
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HotkeyService, providedIn: 'root' });
|
|
474
|
+
}
|
|
475
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: HotkeyService, decorators: [{
|
|
476
|
+
type: Injectable,
|
|
477
|
+
args: [{ providedIn: 'root' }]
|
|
478
|
+
}], ctorParameters: () => [] });
|
|
479
|
+
|
|
480
|
+
class StrataCheckboxComponent {
|
|
348
481
|
value = model(false, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
349
482
|
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
350
483
|
name = input(undefined, ...(ngDevMode ? [{ debugName: "name" }] : []));
|
|
@@ -352,10 +485,10 @@ class CheckboxComponent {
|
|
|
352
485
|
event.stopImmediatePropagation();
|
|
353
486
|
this.value.set(!this.value());
|
|
354
487
|
}
|
|
355
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
356
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
488
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
489
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataCheckboxComponent, isStandalone: true, selector: "st-checkbox", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { listeners: { "click": "onClick($event)" } }, ngImport: i0, template: "<input type=\"checkbox\" [checked]=\"value()\" />\n<div class=\"checkbox-visual\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path\n d=\"M9.9997 15.1709L19.1921 5.97852L20.6063 7.39273L9.9997 17.9993L3.63574 11.6354L5.04996 10.2212L9.9997 15.1709Z\"\n ></path>\n </svg>\n</div>\n@if (label()) {\n <label [for]=\"name()\"> {{ label() }}</label>\n}\n" });
|
|
357
490
|
}
|
|
358
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
491
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataCheckboxComponent, decorators: [{
|
|
359
492
|
type: Component,
|
|
360
493
|
args: [{ selector: 'st-checkbox', imports: [], template: "<input type=\"checkbox\" [checked]=\"value()\" />\n<div class=\"checkbox-visual\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path\n d=\"M9.9997 15.1709L19.1921 5.97852L20.6063 7.39273L9.9997 17.9993L3.63574 11.6354L5.04996 10.2212L9.9997 15.1709Z\"\n ></path>\n </svg>\n</div>\n@if (label()) {\n <label [for]=\"name()\"> {{ label() }}</label>\n}\n" }]
|
|
361
494
|
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], onClick: [{
|
|
@@ -363,59 +496,75 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
363
496
|
args: ['click', ['$event']]
|
|
364
497
|
}] } });
|
|
365
498
|
|
|
366
|
-
class
|
|
499
|
+
class StrataToggleComponent {
|
|
500
|
+
_activatable = inject(StrataActivatableDirective);
|
|
367
501
|
checked = model(false, ...(ngDevMode ? [{ debugName: "checked" }] : []));
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
502
|
+
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
503
|
+
labelPosition = input('after', ...(ngDevMode ? [{ debugName: "labelPosition" }] : []));
|
|
504
|
+
disabled = this._activatable.disabled;
|
|
505
|
+
onCheckChanged(event) {
|
|
506
|
+
if (this.disabled()) {
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
if (event) {
|
|
510
|
+
event.stopPropagation();
|
|
511
|
+
}
|
|
376
512
|
this.checked.set(!this.checked());
|
|
377
513
|
}
|
|
378
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
379
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
514
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
515
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataToggleComponent, isStandalone: true, selector: "st-toggle", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelPosition: { classPropertyName: "labelPosition", publicName: "labelPosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange" }, host: { attributes: { "role": "switch" }, listeners: { "click": "onCheckChanged($event)" }, properties: { "attr.aria-checked": "checked()", "attr.aria-disabled": "disabled()", "attr.data-checked": "checked()", "attr.data-disabled": "disabled()", "class.st-toggle-label-before": "labelPosition() === 'before'", "class.st-toggle-label-after": "labelPosition() === 'after'" } }, hostDirectives: [{ directive: StrataActivatableDirective, inputs: ["disabled", "disabled"], outputs: ["activated", "activated"] }], ngImport: i0, template: "<div class=\"st-toggle-track\">\n <div class=\"toggle-handle\"></div>\n</div>\n@if (label()) {\n <span class=\"st-toggle-label\">{{ label() }}</span>\n}\n<ng-content></ng-content>\n" });
|
|
380
516
|
}
|
|
381
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
517
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataToggleComponent, decorators: [{
|
|
382
518
|
type: Component,
|
|
383
|
-
args: [{ selector: 'st-toggle', imports: [],
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
519
|
+
args: [{ selector: 'st-toggle', imports: [], hostDirectives: [
|
|
520
|
+
{
|
|
521
|
+
directive: StrataActivatableDirective,
|
|
522
|
+
inputs: ['disabled'],
|
|
523
|
+
outputs: ['activated'],
|
|
524
|
+
},
|
|
525
|
+
], host: {
|
|
526
|
+
'(click)': 'onCheckChanged($event)',
|
|
527
|
+
role: 'switch',
|
|
528
|
+
'[attr.aria-checked]': 'checked()',
|
|
529
|
+
'[attr.aria-disabled]': 'disabled()',
|
|
530
|
+
'[attr.data-checked]': 'checked()',
|
|
531
|
+
'[attr.data-disabled]': 'disabled()',
|
|
532
|
+
'[class.st-toggle-label-before]': "labelPosition() === 'before'",
|
|
533
|
+
'[class.st-toggle-label-after]': "labelPosition() === 'after'",
|
|
534
|
+
}, template: "<div class=\"st-toggle-track\">\n <div class=\"toggle-handle\"></div>\n</div>\n@if (label()) {\n <span class=\"st-toggle-label\">{{ label() }}</span>\n}\n<ng-content></ng-content>\n" }]
|
|
535
|
+
}], propDecorators: { checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], labelPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelPosition", required: false }] }] } });
|
|
394
536
|
|
|
395
|
-
class
|
|
396
|
-
checkbox = contentChild(
|
|
397
|
-
toggle = contentChild(
|
|
537
|
+
class StrataActionMenuItemComponent {
|
|
538
|
+
checkbox = contentChild(StrataCheckboxComponent, { ...(ngDevMode ? { debugName: "checkbox" } : {}), read: ElementRef });
|
|
539
|
+
toggle = contentChild(StrataToggleComponent, { ...(ngDevMode ? { debugName: "toggle" } : {}), read: ElementRef });
|
|
398
540
|
closeMenuOnClick = input(true, ...(ngDevMode ? [{ debugName: "closeMenuOnClick" }] : []));
|
|
399
|
-
|
|
541
|
+
active = input(false, ...(ngDevMode ? [{ debugName: "active" }] : []));
|
|
542
|
+
get isActive() {
|
|
543
|
+
return this.active();
|
|
544
|
+
}
|
|
545
|
+
menuItemClicked = output();
|
|
400
546
|
elementRef = inject(ElementRef);
|
|
401
547
|
onHostClick(event) {
|
|
402
|
-
this.
|
|
548
|
+
this.menuItemClicked.emit(this.closeMenuOnClick());
|
|
403
549
|
event.stopPropagation();
|
|
404
550
|
this.checkbox()?.nativeElement.click();
|
|
405
551
|
this.toggle()?.nativeElement.click();
|
|
406
552
|
}
|
|
407
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
408
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type:
|
|
553
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataActionMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
554
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: StrataActionMenuItemComponent, isStandalone: true, selector: "st-action-menu-item", inputs: { closeMenuOnClick: { classPropertyName: "closeMenuOnClick", publicName: "closeMenuOnClick", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { menuItemClicked: "menuItemClicked" }, host: { listeners: { "click": "onHostClick($event)" }, properties: { "class.active": "this.isActive" } }, queries: [{ propertyName: "checkbox", first: true, predicate: StrataCheckboxComponent, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "toggle", first: true, predicate: StrataToggleComponent, descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<span class=\"item-start\">\n <ng-content select=\"[area='start']\"></ng-content\n></span>\n<span class=\"item-default\"> <ng-content></ng-content></span>\n<span class=\"item-end\">\n <ng-content select=\"[area='end']\"></ng-content>\n</span>\n", styles: [":host{height:48px}\n"] });
|
|
409
555
|
}
|
|
410
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
556
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataActionMenuItemComponent, decorators: [{
|
|
411
557
|
type: Component,
|
|
412
558
|
args: [{ selector: 'st-action-menu-item', imports: [], template: "<span class=\"item-start\">\n <ng-content select=\"[area='start']\"></ng-content\n></span>\n<span class=\"item-default\"> <ng-content></ng-content></span>\n<span class=\"item-end\">\n <ng-content select=\"[area='end']\"></ng-content>\n</span>\n", styles: [":host{height:48px}\n"] }]
|
|
413
|
-
}], propDecorators: { checkbox: [{ type: i0.ContentChild, args: [i0.forwardRef(() =>
|
|
559
|
+
}], propDecorators: { checkbox: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StrataCheckboxComponent), { ...{ read: ElementRef }, isSignal: true }] }], toggle: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StrataToggleComponent), { ...{ read: ElementRef }, isSignal: true }] }], closeMenuOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeMenuOnClick", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], isActive: [{
|
|
560
|
+
type: HostBinding,
|
|
561
|
+
args: ['class.active']
|
|
562
|
+
}], menuItemClicked: [{ type: i0.Output, args: ["menuItemClicked"] }], onHostClick: [{
|
|
414
563
|
type: HostListener,
|
|
415
564
|
args: ['click', ['$event']]
|
|
416
565
|
}] } });
|
|
417
566
|
|
|
418
|
-
class
|
|
567
|
+
class StrataButtonDirective {
|
|
419
568
|
host = inject(ElementRef);
|
|
420
569
|
variant = input('secondary', ...(ngDevMode ? [{ debugName: "variant" }] : []));
|
|
421
570
|
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
@@ -423,7 +572,6 @@ class ButtonDirective {
|
|
|
423
572
|
iconAtStart = signal(false, ...(ngDevMode ? [{ debugName: "iconAtStart" }] : []));
|
|
424
573
|
iconAtEnd = signal(false, ...(ngDevMode ? [{ debugName: "iconAtEnd" }] : []));
|
|
425
574
|
iconOnly = signal(false, ...(ngDevMode ? [{ debugName: "iconOnly" }] : []));
|
|
426
|
-
constructor() { }
|
|
427
575
|
get classes() {
|
|
428
576
|
return [
|
|
429
577
|
'st-button',
|
|
@@ -448,7 +596,7 @@ class ButtonDirective {
|
|
|
448
596
|
this.iconAtEnd.set(this.nodeIsStIcon(nodes[nodes.length - 1]));
|
|
449
597
|
}
|
|
450
598
|
nodeIsStIcon(node) {
|
|
451
|
-
if (node.nodeType === Node.TEXT_NODE && !node.textContent
|
|
599
|
+
if (node.nodeType === Node.TEXT_NODE && !node.textContent?.trim()) {
|
|
452
600
|
return false;
|
|
453
601
|
}
|
|
454
602
|
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
@@ -457,20 +605,21 @@ class ButtonDirective {
|
|
|
457
605
|
}
|
|
458
606
|
return false;
|
|
459
607
|
}
|
|
460
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
461
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type:
|
|
608
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
609
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: StrataButtonDirective, isStandalone: true, selector: "[stButton]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.classes" } }, ngImport: i0 });
|
|
462
610
|
}
|
|
463
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
611
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataButtonDirective, decorators: [{
|
|
464
612
|
type: Directive,
|
|
465
613
|
args: [{
|
|
466
614
|
selector: '[stButton]',
|
|
467
615
|
}]
|
|
468
|
-
}],
|
|
616
|
+
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], classes: [{
|
|
469
617
|
type: HostBinding,
|
|
470
618
|
args: ['class']
|
|
471
619
|
}] } });
|
|
472
620
|
|
|
473
|
-
class
|
|
621
|
+
class StrataCardComponent {
|
|
622
|
+
elementRef = inject(ElementRef);
|
|
474
623
|
elevated = input(false, ...(ngDevMode ? [{ debugName: "elevated" }] : []));
|
|
475
624
|
selectable = input(false, ...(ngDevMode ? [{ debugName: "selectable" }] : []));
|
|
476
625
|
padding = input(true, ...(ngDevMode ? [{ debugName: "padding" }] : []));
|
|
@@ -493,12 +642,18 @@ class CardComponent {
|
|
|
493
642
|
get isOutline() {
|
|
494
643
|
return this.variant() === 'outline';
|
|
495
644
|
}
|
|
496
|
-
|
|
497
|
-
|
|
645
|
+
handleKeyboardEvent(event) {
|
|
646
|
+
if (this.selectable()) {
|
|
647
|
+
event.preventDefault();
|
|
648
|
+
this.elementRef.nativeElement.click();
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
652
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: StrataCardComponent, isStandalone: true, selector: "st-card", inputs: { elevated: { classPropertyName: "elevated", publicName: "elevated", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown.enter": "handleKeyboardEvent($event)", "keydown.space": "handleKeyboardEvent($event)" }, properties: { "class.with-padding": "this.withPadding", "class.selectable": "this.isSelectable", "attr.tabindex": "this.tabIndex", "class.elevated": "this.isElevated", "class.flat": "this.isFlat", "class.outline": "this.isOutline" } }, ngImport: i0, template: "<div class=\"cover-area\">\n <ng-content select=\"[area='cover']\"></ng-content>\n</div>\n<div class=\"card-content\">\n <ng-content></ng-content>\n</div>\n" });
|
|
498
653
|
}
|
|
499
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
654
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataCardComponent, decorators: [{
|
|
500
655
|
type: Component,
|
|
501
|
-
args: [{ selector: 'st-card', imports: [],
|
|
656
|
+
args: [{ selector: 'st-card', imports: [], template: "<div class=\"cover-area\">\n <ng-content select=\"[area='cover']\"></ng-content>\n</div>\n<div class=\"card-content\">\n <ng-content></ng-content>\n</div>\n" }]
|
|
502
657
|
}], propDecorators: { elevated: [{ type: i0.Input, args: [{ isSignal: true, alias: "elevated", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], withPadding: [{
|
|
503
658
|
type: HostBinding,
|
|
504
659
|
args: ['class.with-padding']
|
|
@@ -517,71 +672,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
517
672
|
}], isOutline: [{
|
|
518
673
|
type: HostBinding,
|
|
519
674
|
args: ['class.outline']
|
|
675
|
+
}], handleKeyboardEvent: [{
|
|
676
|
+
type: HostListener,
|
|
677
|
+
args: ['keydown.enter', ['$event']]
|
|
678
|
+
}, {
|
|
679
|
+
type: HostListener,
|
|
680
|
+
args: ['keydown.space', ['$event']]
|
|
520
681
|
}] } });
|
|
521
682
|
|
|
522
|
-
class
|
|
523
|
-
defaultIcon = 'question';
|
|
524
|
-
name = input.required(...(ngDevMode ? [{ debugName: "name" }] : []));
|
|
525
|
-
size = model('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
526
|
-
get sizeClass() {
|
|
527
|
-
return this.size() === 'xs';
|
|
528
|
-
}
|
|
529
|
-
get sizeSmClass() {
|
|
530
|
-
return this.size() === 'sm';
|
|
531
|
-
}
|
|
532
|
-
get sizeMdClass() {
|
|
533
|
-
return this.size() === 'md';
|
|
534
|
-
}
|
|
535
|
-
get sizeLgClass() {
|
|
536
|
-
return this.size() === 'lg';
|
|
537
|
-
}
|
|
538
|
-
svgMarkdown;
|
|
539
|
-
iconSubscription;
|
|
683
|
+
class StrataIconComponent {
|
|
540
684
|
iconRegistry = inject(IconRegistry);
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
}
|
|
546
|
-
ngOnChanges() {
|
|
547
|
-
const name = this.name();
|
|
548
|
-
if (!name) {
|
|
549
|
-
this.setIcon(this.defaultIcon);
|
|
550
|
-
}
|
|
551
|
-
else {
|
|
552
|
-
this.setIcon(name);
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
setIcon(iconName) {
|
|
556
|
-
this.iconSubscription = this.iconRegistry.getIcon(iconName).subscribe((value) => {
|
|
557
|
-
this.svgMarkdown = value;
|
|
558
|
-
});
|
|
559
|
-
}
|
|
560
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
561
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: IconComponent, isStandalone: true, selector: "st-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { size: "sizeChange" }, host: { properties: { "class.xs": "this.sizeClass", "class.sm": "this.sizeSmClass", "class.md": "this.sizeMdClass", "class.lg": "this.sizeLgClass" } }, usesOnChanges: true, ngImport: i0, template: '<span [innerHTML]="svgMarkdown"></span>', isInline: true });
|
|
685
|
+
name = input('question', ...(ngDevMode ? [{ debugName: "name" }] : []));
|
|
686
|
+
size = model('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
687
|
+
svgMarkdown = toSignal(toObservable(this.name).pipe(switchMap((name) => this.iconRegistry.getIcon(name || 'question'))));
|
|
688
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
689
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: StrataIconComponent, isStandalone: true, selector: "st-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { size: "sizeChange" }, host: { properties: { "class.xs": "size() === \"xs\"", "class.sm": "size() === \"sm\"", "class.md": "size() === \"md\"", "class.lg": "size() === \"lg\"" } }, ngImport: i0, template: "<span [innerHTML]=\"svgMarkdown()\"></span>\n" });
|
|
562
690
|
}
|
|
563
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
691
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataIconComponent, decorators: [{
|
|
564
692
|
type: Component,
|
|
565
|
-
args: [{
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
args: ['class.xs']
|
|
573
|
-
}], sizeSmClass: [{
|
|
574
|
-
type: HostBinding,
|
|
575
|
-
args: ['class.sm']
|
|
576
|
-
}], sizeMdClass: [{
|
|
577
|
-
type: HostBinding,
|
|
578
|
-
args: ['class.md']
|
|
579
|
-
}], sizeLgClass: [{
|
|
580
|
-
type: HostBinding,
|
|
581
|
-
args: ['class.lg']
|
|
582
|
-
}] } });
|
|
693
|
+
args: [{ selector: 'st-icon', imports: [], host: {
|
|
694
|
+
'[class.xs]': 'size() === "xs"',
|
|
695
|
+
'[class.sm]': 'size() === "sm"',
|
|
696
|
+
'[class.md]': 'size() === "md"',
|
|
697
|
+
'[class.lg]': 'size() === "lg"',
|
|
698
|
+
}, template: "<span [innerHTML]=\"svgMarkdown()\"></span>\n" }]
|
|
699
|
+
}], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }, { type: i0.Output, args: ["sizeChange"] }] } });
|
|
583
700
|
|
|
584
|
-
class
|
|
701
|
+
class StrataOverlayDirective {
|
|
585
702
|
stOverlay = input.required(...(ngDevMode ? [{ debugName: "stOverlay" }] : []));
|
|
586
703
|
overlayOpen = model(false, ...(ngDevMode ? [{ debugName: "overlayOpen" }] : []));
|
|
587
704
|
overlayPlacement = input('bottom', ...(ngDevMode ? [{ debugName: "overlayPlacement" }] : []));
|
|
@@ -590,7 +707,7 @@ class OverlayDirective {
|
|
|
590
707
|
viewContainerRef = inject(ViewContainerRef);
|
|
591
708
|
overlayEl;
|
|
592
709
|
cleanup;
|
|
593
|
-
|
|
710
|
+
viewRef;
|
|
594
711
|
ngOnChanges() {
|
|
595
712
|
if (this.overlayOpen()) {
|
|
596
713
|
this.create();
|
|
@@ -602,9 +719,9 @@ class OverlayDirective {
|
|
|
602
719
|
async create() {
|
|
603
720
|
if (this.overlayEl)
|
|
604
721
|
return;
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
this.overlayEl =
|
|
722
|
+
this.viewRef = this.viewContainerRef.createEmbeddedView(this.stOverlay());
|
|
723
|
+
this.viewRef.detectChanges();
|
|
724
|
+
this.overlayEl = this.viewRef.rootNodes[0];
|
|
608
725
|
document.body.appendChild(this.overlayEl);
|
|
609
726
|
this.cleanup = autoUpdate(this.element.nativeElement, this.overlayEl, () => this.updatePosition());
|
|
610
727
|
}
|
|
@@ -613,15 +730,17 @@ class OverlayDirective {
|
|
|
613
730
|
return;
|
|
614
731
|
const { x, y } = await computePosition(this.element.nativeElement, this.overlayEl, {
|
|
615
732
|
placement: this.overlayPlacement(),
|
|
733
|
+
strategy: 'fixed',
|
|
616
734
|
middleware: [offset(this.overlayOffset()), flip(), shift()],
|
|
617
735
|
});
|
|
618
736
|
if (!this.overlayEl)
|
|
619
737
|
return;
|
|
620
|
-
const { width
|
|
738
|
+
const { width } = this.element.nativeElement.getBoundingClientRect();
|
|
621
739
|
Object.assign(this.overlayEl.style, {
|
|
622
|
-
position: '
|
|
740
|
+
position: 'fixed',
|
|
623
741
|
left: `${x}px`,
|
|
624
742
|
top: `${y}px`,
|
|
743
|
+
zIndex: '10000',
|
|
625
744
|
});
|
|
626
745
|
this.overlayEl.style.setProperty('--st-overlay-anchor-element-width', `${width}px`);
|
|
627
746
|
}
|
|
@@ -630,63 +749,148 @@ class OverlayDirective {
|
|
|
630
749
|
this.cleanup();
|
|
631
750
|
if (this.overlayEl)
|
|
632
751
|
this.overlayEl.remove();
|
|
752
|
+
if (this.viewRef) {
|
|
753
|
+
this.viewRef.destroy();
|
|
754
|
+
this.viewRef = undefined;
|
|
755
|
+
}
|
|
633
756
|
this.overlayEl = undefined;
|
|
634
757
|
}
|
|
635
758
|
ngOnDestroy() {
|
|
636
759
|
this.destroy();
|
|
637
760
|
}
|
|
638
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
639
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type:
|
|
761
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
762
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: StrataOverlayDirective, isStandalone: true, selector: "[stOverlay]", inputs: { stOverlay: { classPropertyName: "stOverlay", publicName: "stOverlay", isSignal: true, isRequired: true, transformFunction: null }, overlayOpen: { classPropertyName: "overlayOpen", publicName: "overlayOpen", isSignal: true, isRequired: false, transformFunction: null }, overlayPlacement: { classPropertyName: "overlayPlacement", publicName: "overlayPlacement", isSignal: true, isRequired: false, transformFunction: null }, overlayOffset: { classPropertyName: "overlayOffset", publicName: "overlayOffset", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { overlayOpen: "overlayOpenChange" }, usesOnChanges: true, ngImport: i0 });
|
|
640
763
|
}
|
|
641
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
764
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataOverlayDirective, decorators: [{
|
|
642
765
|
type: Directive,
|
|
643
766
|
args: [{
|
|
644
767
|
selector: '[stOverlay]',
|
|
645
768
|
}]
|
|
646
|
-
}],
|
|
769
|
+
}], propDecorators: { stOverlay: [{ type: i0.Input, args: [{ isSignal: true, alias: "stOverlay", required: true }] }], overlayOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayOpen", required: false }] }, { type: i0.Output, args: ["overlayOpenChange"] }], overlayPlacement: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayPlacement", required: false }] }], overlayOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayOffset", required: false }] }] } });
|
|
647
770
|
|
|
648
|
-
class
|
|
649
|
-
projectedButton = contentChild(
|
|
771
|
+
class StrataActionMenuComponent {
|
|
772
|
+
projectedButton = contentChild(StrataButtonDirective, { ...(ngDevMode ? { debugName: "projectedButton" } : {}), descendants: true,
|
|
650
773
|
read: ElementRef });
|
|
651
|
-
defaultButton = viewChild(
|
|
652
|
-
actionMenuItems = contentChildren(
|
|
774
|
+
defaultButton = viewChild(StrataButtonDirective, { ...(ngDevMode ? { debugName: "defaultButton" } : {}), read: ElementRef });
|
|
775
|
+
actionMenuItems = contentChildren(StrataActionMenuItemComponent, ...(ngDevMode ? [{ debugName: "actionMenuItems" }] : []));
|
|
653
776
|
placement = input('bottom-end', ...(ngDevMode ? [{ debugName: "placement" }] : []));
|
|
654
777
|
renderer = inject(Renderer2);
|
|
655
778
|
menuOpen = signal(false, ...(ngDevMode ? [{ debugName: "menuOpen" }] : []));
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
779
|
+
constructor() {
|
|
780
|
+
effect((onCleanup) => {
|
|
781
|
+
const button = this.projectedButton() ?? this.defaultButton();
|
|
782
|
+
if (!button) {
|
|
783
|
+
return;
|
|
784
|
+
}
|
|
785
|
+
const unlisten = this.renderer.listen(button.nativeElement, 'click', () => {
|
|
786
|
+
this.menuOpen.set(!this.menuOpen());
|
|
787
|
+
});
|
|
788
|
+
onCleanup(() => {
|
|
789
|
+
unlisten();
|
|
790
|
+
});
|
|
660
791
|
});
|
|
661
|
-
|
|
662
|
-
item.
|
|
792
|
+
effect((onCleanup) => {
|
|
793
|
+
const subs = this.actionMenuItems().map((item) => item.menuItemClicked.subscribe((shouldClose) => {
|
|
663
794
|
if (shouldClose) {
|
|
664
795
|
this.menuOpen.set(false);
|
|
665
796
|
}
|
|
797
|
+
}));
|
|
798
|
+
onCleanup(() => {
|
|
799
|
+
subs.forEach((sub) => sub.unsubscribe());
|
|
666
800
|
});
|
|
667
801
|
});
|
|
668
802
|
}
|
|
669
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
670
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
803
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataActionMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
804
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataActionMenuComponent, isStandalone: true, selector: "st-action-menu", inputs: { placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "projectedButton", first: true, predicate: StrataButtonDirective, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "actionMenuItems", predicate: StrataActionMenuItemComponent, isSignal: true }], viewQueries: [{ propertyName: "defaultButton", first: true, predicate: StrataButtonDirective, descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<div [stOverlay]=\"menu\" [overlayOpen]=\"menuOpen()\" [overlayPlacement]=\"placement()\">\n <ng-content select=\"button[stButton]\"></ng-content>\n @if (!projectedButton()) {\n <button stButton><st-icon name=\"more\"></st-icon></button>\n }\n</div>\n\n<ng-template #menu>\n <st-card [padding]=\"false\" class=\"action-menu-card\"><ng-content select=\"st-action-menu-item\"></ng-content></st-card>\n</ng-template>\n", styles: ["st-card{width:fit-content}\n"], dependencies: [{ kind: "component", type: StrataCardComponent, selector: "st-card", inputs: ["elevated", "selectable", "padding", "variant"] }, { kind: "directive", type: StrataOverlayDirective, selector: "[stOverlay]", inputs: ["stOverlay", "overlayOpen", "overlayPlacement", "overlayOffset"], outputs: ["overlayOpenChange"] }, { kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size"], outputs: ["sizeChange"] }, { kind: "directive", type: StrataButtonDirective, selector: "[stButton]", inputs: ["variant", "size", "fullWidth"] }] });
|
|
671
805
|
}
|
|
672
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
806
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataActionMenuComponent, decorators: [{
|
|
673
807
|
type: Component,
|
|
674
|
-
args: [{ selector: 'st-action-menu', imports: [
|
|
675
|
-
}], propDecorators: { projectedButton: [{ type: i0.ContentChild, args: [i0.forwardRef(() =>
|
|
808
|
+
args: [{ selector: 'st-action-menu', imports: [StrataCardComponent, StrataOverlayDirective, StrataIconComponent, StrataButtonDirective], template: "<div [stOverlay]=\"menu\" [overlayOpen]=\"menuOpen()\" [overlayPlacement]=\"placement()\">\n <ng-content select=\"button[stButton]\"></ng-content>\n @if (!projectedButton()) {\n <button stButton><st-icon name=\"more\"></st-icon></button>\n }\n</div>\n\n<ng-template #menu>\n <st-card [padding]=\"false\" class=\"action-menu-card\"><ng-content select=\"st-action-menu-item\"></ng-content></st-card>\n</ng-template>\n", styles: ["st-card{width:fit-content}\n"] }]
|
|
809
|
+
}], ctorParameters: () => [], propDecorators: { projectedButton: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StrataButtonDirective), { ...{
|
|
676
810
|
descendants: true,
|
|
677
811
|
read: ElementRef,
|
|
678
|
-
}, isSignal: true }] }], defaultButton: [{ type: i0.ViewChild, args: [i0.forwardRef(() =>
|
|
812
|
+
}, isSignal: true }] }], defaultButton: [{ type: i0.ViewChild, args: [i0.forwardRef(() => StrataButtonDirective), { ...{
|
|
679
813
|
read: ElementRef,
|
|
680
|
-
}, isSignal: true }] }], actionMenuItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() =>
|
|
814
|
+
}, isSignal: true }] }], actionMenuItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataActionMenuItemComponent), { isSignal: true }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }] } });
|
|
815
|
+
|
|
816
|
+
class StrataTextStackComponent {
|
|
817
|
+
overflow = input('truncate', ...(ngDevMode ? [{ debugName: "overflow" }] : []));
|
|
818
|
+
get cssClasses() {
|
|
819
|
+
return [this.overflow()];
|
|
820
|
+
}
|
|
821
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataTextStackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
822
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: StrataTextStackComponent, isStandalone: true, selector: "st-text-stack", inputs: { overflow: { classPropertyName: "overflow", publicName: "overflow", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.cssClasses" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [""] });
|
|
823
|
+
}
|
|
824
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataTextStackComponent, decorators: [{
|
|
825
|
+
type: Component,
|
|
826
|
+
args: [{ selector: 'st-text-stack', imports: [], template: "<ng-content></ng-content>\n" }]
|
|
827
|
+
}], propDecorators: { overflow: [{ type: i0.Input, args: [{ isSignal: true, alias: "overflow", required: false }] }], cssClasses: [{
|
|
828
|
+
type: HostBinding,
|
|
829
|
+
args: ['class']
|
|
830
|
+
}] } });
|
|
831
|
+
|
|
832
|
+
class StrataAlertComponent {
|
|
833
|
+
header = input(undefined, ...(ngDevMode ? [{ debugName: "header" }] : []));
|
|
834
|
+
message = input.required(...(ngDevMode ? [{ debugName: "message" }] : []));
|
|
835
|
+
iconName = input(undefined, ...(ngDevMode ? [{ debugName: "iconName" }] : []));
|
|
836
|
+
dismissible = input(false, ...(ngDevMode ? [{ debugName: "dismissible" }] : []));
|
|
837
|
+
dismiss = output();
|
|
838
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
839
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataAlertComponent, isStandalone: true, selector: "st-alert", inputs: { header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, iconName: { classPropertyName: "iconName", publicName: "iconName", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismiss: "dismiss" }, ngImport: i0, template: "<div class=\"st-alert-container\">\n @if (iconName()) {\n <div class=\"st-alert-icon\">\n <st-icon [name]=\"iconName()!\"></st-icon>\n </div>\n }\n\n <div class=\"st-alert-content\">\n <st-text-stack overflow=\"wrap\">\n @if (header()) {\n <p class=\"st-body-bold st-alert-header\">{{ header() }}</p>\n }\n <p class=\"st-alert-message\">{{ message() }}</p>\n </st-text-stack>\n </div>\n\n\n\n\n <div class=\"st-alert-actions\">\n <ng-content select=\"[actions]\"></ng-content>\n </div>\n\n @if (dismissible()) {\n <button stButton variant=\"ghost\" size=\"sm\" class=\"st-alert-dismiss\" (click)=\"dismiss.emit()\"\n aria-label=\"Dismiss alert\">\n <st-icon name=\"close\"></st-icon>\n </button>\n }\n</div>", dependencies: [{ kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size"], outputs: ["sizeChange"] }, { kind: "directive", type: StrataButtonDirective, selector: "[stButton]", inputs: ["variant", "size", "fullWidth"] }, { kind: "component", type: StrataTextStackComponent, selector: "st-text-stack", inputs: ["overflow"] }] });
|
|
840
|
+
}
|
|
841
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAlertComponent, decorators: [{
|
|
842
|
+
type: Component,
|
|
843
|
+
args: [{ selector: 'st-alert', imports: [StrataIconComponent, StrataButtonDirective, StrataTextStackComponent], template: "<div class=\"st-alert-container\">\n @if (iconName()) {\n <div class=\"st-alert-icon\">\n <st-icon [name]=\"iconName()!\"></st-icon>\n </div>\n }\n\n <div class=\"st-alert-content\">\n <st-text-stack overflow=\"wrap\">\n @if (header()) {\n <p class=\"st-body-bold st-alert-header\">{{ header() }}</p>\n }\n <p class=\"st-alert-message\">{{ message() }}</p>\n </st-text-stack>\n </div>\n\n\n\n\n <div class=\"st-alert-actions\">\n <ng-content select=\"[actions]\"></ng-content>\n </div>\n\n @if (dismissible()) {\n <button stButton variant=\"ghost\" size=\"sm\" class=\"st-alert-dismiss\" (click)=\"dismiss.emit()\"\n aria-label=\"Dismiss alert\">\n <st-icon name=\"close\"></st-icon>\n </button>\n }\n</div>" }]
|
|
844
|
+
}], propDecorators: { header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }], iconName: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconName", required: false }] }], dismissible: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissible", required: false }] }], dismiss: [{ type: i0.Output, args: ["dismiss"] }] } });
|
|
845
|
+
|
|
846
|
+
class StrataBreadcrumbItemComponent {
|
|
847
|
+
text = input.required(...(ngDevMode ? [{ debugName: "text" }] : []));
|
|
848
|
+
icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
|
|
849
|
+
interactable = input(false, ...(ngDevMode ? [{ debugName: "interactable" }] : []));
|
|
850
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
851
|
+
activated = output();
|
|
852
|
+
separatorIcon = signal(undefined, ...(ngDevMode ? [{ debugName: "separatorIcon" }] : []));
|
|
853
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataBreadcrumbItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
854
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataBreadcrumbItemComponent, isStandalone: true, selector: "st-breadcrumb-item", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, interactable: { classPropertyName: "interactable", publicName: "interactable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activated: "activated" }, host: { classAttribute: "st-breadcrumb-item" }, ngImport: i0, template: "<li class=\"st-breadcrumb-item-container\">\n <div class=\"st-breadcrumb-item-content\"\n stActivatable\n [interactable]=\"interactable()\"\n [disabled]=\"disabled()\"\n (click)=\"activated.emit($event)\">\n @if (icon()) {\n <st-icon [name]=\"icon()!\" size=\"sm\" class=\"st-breadcrumb-item-icon\"></st-icon>\n }\n <span class=\"st-breadcrumb-item-text\">{{ text() }}</span>\n </div>\n\n @if (separatorIcon()) {\n <st-icon [name]=\"separatorIcon()!\" size=\"sm\" class=\"st-breadcrumb-separator\"></st-icon>\n }\n</li>\n", dependencies: [{ kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size"], outputs: ["sizeChange"] }, { kind: "directive", type: StrataActivatableDirective, selector: "[stActivatable]", inputs: ["disabled", "interactable"], outputs: ["interactableChange", "activated"] }] });
|
|
855
|
+
}
|
|
856
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataBreadcrumbItemComponent, decorators: [{
|
|
857
|
+
type: Component,
|
|
858
|
+
args: [{ selector: 'st-breadcrumb-item', imports: [StrataIconComponent, StrataActivatableDirective], host: {
|
|
859
|
+
'class': 'st-breadcrumb-item',
|
|
860
|
+
}, template: "<li class=\"st-breadcrumb-item-container\">\n <div class=\"st-breadcrumb-item-content\"\n stActivatable\n [interactable]=\"interactable()\"\n [disabled]=\"disabled()\"\n (click)=\"activated.emit($event)\">\n @if (icon()) {\n <st-icon [name]=\"icon()!\" size=\"sm\" class=\"st-breadcrumb-item-icon\"></st-icon>\n }\n <span class=\"st-breadcrumb-item-text\">{{ text() }}</span>\n </div>\n\n @if (separatorIcon()) {\n <st-icon [name]=\"separatorIcon()!\" size=\"sm\" class=\"st-breadcrumb-separator\"></st-icon>\n }\n</li>\n" }]
|
|
861
|
+
}], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], interactable: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], activated: [{ type: i0.Output, args: ["activated"] }] } });
|
|
862
|
+
|
|
863
|
+
class StrataBreadcrumbComponent {
|
|
864
|
+
separatorIcon = input('arrow-right', ...(ngDevMode ? [{ debugName: "separatorIcon" }] : []));
|
|
865
|
+
items = contentChildren(StrataBreadcrumbItemComponent, { ...(ngDevMode ? { debugName: "items" } : {}), descendants: true });
|
|
866
|
+
constructor() {
|
|
867
|
+
effect(() => {
|
|
868
|
+
const items = this.items();
|
|
869
|
+
const separator = this.separatorIcon();
|
|
870
|
+
items.forEach((item, index) => {
|
|
871
|
+
const isLast = index === items.length - 1;
|
|
872
|
+
item.separatorIcon.set(isLast ? undefined : separator);
|
|
873
|
+
});
|
|
874
|
+
});
|
|
875
|
+
}
|
|
876
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
877
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: StrataBreadcrumbComponent, isStandalone: true, selector: "st-breadcrumb", inputs: { separatorIcon: { classPropertyName: "separatorIcon", publicName: "separatorIcon", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "st-breadcrumb" }, queries: [{ propertyName: "items", predicate: StrataBreadcrumbItemComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<nav aria-label=\"Breadcrumb\">\n <ol class=\"st-breadcrumb-list\">\n <ng-content></ng-content>\n </ol>\n</nav>\n" });
|
|
878
|
+
}
|
|
879
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataBreadcrumbComponent, decorators: [{
|
|
880
|
+
type: Component,
|
|
881
|
+
args: [{ selector: 'st-breadcrumb', imports: [], host: {
|
|
882
|
+
'class': 'st-breadcrumb',
|
|
883
|
+
}, template: "<nav aria-label=\"Breadcrumb\">\n <ol class=\"st-breadcrumb-list\">\n <ng-content></ng-content>\n </ol>\n</nav>\n" }]
|
|
884
|
+
}], ctorParameters: () => [], propDecorators: { separatorIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "separatorIcon", required: false }] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataBreadcrumbItemComponent), { ...{ descendants: true }, isSignal: true }] }] } });
|
|
681
885
|
|
|
682
|
-
class
|
|
886
|
+
class StrataAccordionItemComponent {
|
|
683
887
|
title = input.required(...(ngDevMode ? [{ debugName: "title" }] : []));
|
|
684
888
|
open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
|
|
685
889
|
toggled = output();
|
|
686
890
|
constructor() {
|
|
687
891
|
let firstRun = true;
|
|
688
892
|
effect(() => {
|
|
689
|
-
|
|
893
|
+
const value = this.open();
|
|
690
894
|
if (!firstRun) {
|
|
691
895
|
this.toggled.emit(value);
|
|
692
896
|
}
|
|
@@ -697,10 +901,10 @@ class AccordionItemComponent {
|
|
|
697
901
|
get isOpen() {
|
|
698
902
|
return this.open();
|
|
699
903
|
}
|
|
700
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
701
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type:
|
|
904
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAccordionItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
905
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: StrataAccordionItemComponent, isStandalone: true, selector: "st-accordion-item", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", toggled: "toggled" }, host: { properties: { "attr.open": "this.isOpen" } }, ngImport: i0, template: "<div class=\"accordion-header\" (click)=\"this.open.set(!this.open())\">\n {{ title() }}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path\n d=\"M11.9999 13.1714L16.9497 8.22168L18.3639 9.63589L11.9999 15.9999L5.63599 9.63589L7.0502 8.22168L11.9999 13.1714Z\"\n ></path>\n </svg>\n</div>\n\n<div class=\"accordion-content\">\n <ng-content></ng-content>\n</div>\n" });
|
|
702
906
|
}
|
|
703
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
907
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAccordionItemComponent, decorators: [{
|
|
704
908
|
type: Component,
|
|
705
909
|
args: [{ selector: 'st-accordion-item', imports: [], template: "<div class=\"accordion-header\" (click)=\"this.open.set(!this.open())\">\n {{ title() }}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path\n d=\"M11.9999 13.1714L16.9497 8.22168L18.3639 9.63589L11.9999 15.9999L5.63599 9.63589L7.0502 8.22168L11.9999 13.1714Z\"\n ></path>\n </svg>\n</div>\n\n<div class=\"accordion-content\">\n <ng-content></ng-content>\n</div>\n" }]
|
|
706
910
|
}], ctorParameters: () => [], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], toggled: [{ type: i0.Output, args: ["toggled"] }], isOpen: [{
|
|
@@ -708,15 +912,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
708
912
|
args: ['attr.open']
|
|
709
913
|
}] } });
|
|
710
914
|
|
|
711
|
-
class
|
|
712
|
-
items = contentChildren(
|
|
915
|
+
class StrataAccordionGroupComponent {
|
|
916
|
+
items = contentChildren(StrataAccordionItemComponent, ...(ngDevMode ? [{ debugName: "items" }] : []));
|
|
713
917
|
allowMultipleOpen = input(false, ...(ngDevMode ? [{ debugName: "allowMultipleOpen" }] : []));
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
item.toggled.subscribe((open) => {
|
|
918
|
+
constructor() {
|
|
919
|
+
effect((onCleanup) => {
|
|
920
|
+
const subs = this.items().map((item) => item.toggled.subscribe((open) => {
|
|
717
921
|
if (open && !this.allowMultipleOpen()) {
|
|
718
922
|
this.closeOtherItems(item);
|
|
719
923
|
}
|
|
924
|
+
}));
|
|
925
|
+
onCleanup(() => {
|
|
926
|
+
subs.forEach((sub) => sub.unsubscribe());
|
|
720
927
|
});
|
|
721
928
|
});
|
|
722
929
|
}
|
|
@@ -727,16 +934,16 @@ class AccordionGroupComponent {
|
|
|
727
934
|
}
|
|
728
935
|
});
|
|
729
936
|
}
|
|
730
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
731
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type:
|
|
937
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAccordionGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
938
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: StrataAccordionGroupComponent, isStandalone: true, selector: "st-accordion-group", inputs: { allowMultipleOpen: { classPropertyName: "allowMultipleOpen", publicName: "allowMultipleOpen", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "items", predicate: StrataAccordionItemComponent, isSignal: true }], ngImport: i0, template: "<ng-content></ng-content>\n" });
|
|
732
939
|
}
|
|
733
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
940
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAccordionGroupComponent, decorators: [{
|
|
734
941
|
type: Component,
|
|
735
942
|
args: [{ selector: 'st-accordion-group', imports: [], template: "<ng-content></ng-content>\n" }]
|
|
736
|
-
}], propDecorators: { items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() =>
|
|
943
|
+
}], ctorParameters: () => [], propDecorators: { items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataAccordionItemComponent), { isSignal: true }] }], allowMultipleOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowMultipleOpen", required: false }] }] } });
|
|
737
944
|
|
|
738
|
-
class
|
|
739
|
-
iconComponents = contentChildren(
|
|
945
|
+
class StrataAvatarComponent {
|
|
946
|
+
iconComponents = contentChildren(StrataIconComponent, { ...(ngDevMode ? { debugName: "iconComponents" } : {}), descendants: true });
|
|
740
947
|
text = input(null, ...(ngDevMode ? [{ debugName: "text" }] : []));
|
|
741
948
|
size = model('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
742
949
|
get elementClasses() {
|
|
@@ -749,19 +956,19 @@ class AvatarComponent {
|
|
|
749
956
|
});
|
|
750
957
|
});
|
|
751
958
|
}
|
|
752
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
753
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
959
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
960
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataAvatarComponent, isStandalone: true, selector: "st-avatar", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { size: "sizeChange" }, host: { properties: { "class": "this.elementClasses" } }, queries: [{ propertyName: "iconComponents", predicate: StrataIconComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (text() !== null) {\n <span>{{ text() }}</span>\n}\n<ng-content></ng-content>\n" });
|
|
754
961
|
}
|
|
755
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
962
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAvatarComponent, decorators: [{
|
|
756
963
|
type: Component,
|
|
757
964
|
args: [{ selector: 'st-avatar', imports: [], template: "@if (text() !== null) {\n <span>{{ text() }}</span>\n}\n<ng-content></ng-content>\n" }]
|
|
758
|
-
}], propDecorators: { iconComponents: [{ type: i0.ContentChildren, args: [i0.forwardRef(() =>
|
|
965
|
+
}], propDecorators: { iconComponents: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataIconComponent), { ...{ descendants: true }, isSignal: true }] }], text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }, { type: i0.Output, args: ["sizeChange"] }], elementClasses: [{
|
|
759
966
|
type: HostBinding,
|
|
760
967
|
args: ['class']
|
|
761
968
|
}] } });
|
|
762
969
|
|
|
763
|
-
class
|
|
764
|
-
avatarRefs = contentChildren(
|
|
970
|
+
class StrataAvatarStackComponent {
|
|
971
|
+
avatarRefs = contentChildren(StrataAvatarComponent, { ...(ngDevMode ? { debugName: "avatarRefs" } : {}), descendants: true,
|
|
765
972
|
read: ElementRef });
|
|
766
973
|
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
767
974
|
spacing = input('mid', ...(ngDevMode ? [{ debugName: "spacing" }] : []));
|
|
@@ -799,13 +1006,13 @@ class AvatarStackComponent {
|
|
|
799
1006
|
});
|
|
800
1007
|
}, 1);
|
|
801
1008
|
}
|
|
802
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
803
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type:
|
|
1009
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAvatarStackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1010
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: StrataAvatarStackComponent, isStandalone: true, selector: "st-avatar-stack", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null }, firstOnFront: { classPropertyName: "firstOnFront", publicName: "firstOnFront", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.xs": "this.xsClass", "class.sm": "this.smClass", "class.md": "this.mdClass", "class.lg": "this.lgClass", "class.first-on-front": "this.firstOnFrontClass", "class.loose": "this.looseClass", "class.mid": "this.midClass", "class.tight": "this.tightClass" } }, queries: [{ propertyName: "avatarRefs", predicate: StrataAvatarComponent, descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<ng-content></ng-content>\n" });
|
|
804
1011
|
}
|
|
805
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1012
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAvatarStackComponent, decorators: [{
|
|
806
1013
|
type: Component,
|
|
807
1014
|
args: [{ selector: 'st-avatar-stack', imports: [], template: "<ng-content></ng-content>\n" }]
|
|
808
|
-
}], propDecorators: { avatarRefs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() =>
|
|
1015
|
+
}], propDecorators: { avatarRefs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataAvatarComponent), { ...{
|
|
809
1016
|
descendants: true,
|
|
810
1017
|
read: ElementRef,
|
|
811
1018
|
}, isSignal: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], spacing: [{ type: i0.Input, args: [{ isSignal: true, alias: "spacing", required: false }] }], firstOnFront: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstOnFront", required: false }] }], xsClass: [{
|
|
@@ -834,33 +1041,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
834
1041
|
args: ['class.tight']
|
|
835
1042
|
}] } });
|
|
836
1043
|
|
|
837
|
-
class
|
|
1044
|
+
class StrataButtonGroupComponent {
|
|
838
1045
|
renderer = inject(Renderer2);
|
|
839
1046
|
justification = input('start', ...(ngDevMode ? [{ debugName: "justification" }] : []));
|
|
840
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
841
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type:
|
|
1047
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataButtonGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1048
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: StrataButtonGroupComponent, isStandalone: true, selector: "st-button-group", inputs: { justification: { classPropertyName: "justification", publicName: "justification", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ng-content select=\"[stButton], st-divider\" #buttons></ng-content>\n" });
|
|
842
1049
|
}
|
|
843
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1050
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataButtonGroupComponent, decorators: [{
|
|
844
1051
|
type: Component,
|
|
845
1052
|
args: [{ selector: 'st-button-group', imports: [], template: "<ng-content select=\"[stButton], st-divider\" #buttons></ng-content>\n" }]
|
|
846
1053
|
}], propDecorators: { justification: [{ type: i0.Input, args: [{ isSignal: true, alias: "justification", required: false }] }] } });
|
|
847
1054
|
|
|
848
|
-
class
|
|
1055
|
+
class StrataNativeInputRefDirective {
|
|
849
1056
|
el = inject((ElementRef));
|
|
850
|
-
|
|
851
|
-
static
|
|
852
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: NativeInputRefDirective, isStandalone: true, selector: "input[stInput], textarea[stInput]", ngImport: i0 });
|
|
1057
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataNativeInputRefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1058
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: StrataNativeInputRefDirective, isStandalone: true, selector: "input[stInput], textarea[stInput]", ngImport: i0 });
|
|
853
1059
|
}
|
|
854
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1060
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataNativeInputRefDirective, decorators: [{
|
|
855
1061
|
type: Directive,
|
|
856
1062
|
args: [{
|
|
857
1063
|
selector: 'input[stInput], textarea[stInput]',
|
|
858
1064
|
}]
|
|
859
|
-
}]
|
|
1065
|
+
}] });
|
|
860
1066
|
|
|
861
|
-
class
|
|
862
|
-
iconComponents = contentChildren(
|
|
863
|
-
inputField = contentChild(
|
|
1067
|
+
class StrataInputFieldComponent {
|
|
1068
|
+
iconComponents = contentChildren(StrataIconComponent, { ...(ngDevMode ? { debugName: "iconComponents" } : {}), descendants: true });
|
|
1069
|
+
inputField = contentChild(StrataNativeInputRefDirective, { ...(ngDevMode ? { debugName: "inputField" } : {}), descendants: true });
|
|
864
1070
|
pendingFocus = signal(false, ...(ngDevMode ? [{ debugName: "pendingFocus" }] : []));
|
|
865
1071
|
constructor() {
|
|
866
1072
|
effect(() => {
|
|
@@ -875,7 +1081,6 @@ class InputFieldComponent {
|
|
|
875
1081
|
setTimeout(() => this.iconComponents().forEach((icon) => icon.size.set('sm')), 1);
|
|
876
1082
|
}
|
|
877
1083
|
focus() {
|
|
878
|
-
const input = this.inputField();
|
|
879
1084
|
this.pendingFocus.set(true);
|
|
880
1085
|
}
|
|
881
1086
|
blur() {
|
|
@@ -884,17 +1089,70 @@ class InputFieldComponent {
|
|
|
884
1089
|
get nativeInput() {
|
|
885
1090
|
return this.inputField()?.el.nativeElement;
|
|
886
1091
|
}
|
|
887
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
888
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type:
|
|
1092
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataInputFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1093
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: StrataInputFieldComponent, isStandalone: true, selector: "st-input-field", queries: [{ propertyName: "iconComponents", predicate: StrataIconComponent, descendants: true, isSignal: true }, { propertyName: "inputField", first: true, predicate: StrataNativeInputRefDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-content select=\"label\"></ng-content>\n<div class=\"st-input-wrapper\">\n <div class=\"affix\">\n <ng-content select=\"[prefix]\"></ng-content>\n </div>\n <ng-content select=\"input,textarea\"></ng-content>\n <div class=\"affix\">\n <ng-content select=\"[suffix]\"></ng-content>\n </div>\n</div>\n" });
|
|
889
1094
|
}
|
|
890
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1095
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataInputFieldComponent, decorators: [{
|
|
891
1096
|
type: Component,
|
|
892
|
-
args: [{ selector: 'st-input-field', imports: [],
|
|
893
|
-
}], ctorParameters: () => [], propDecorators: { iconComponents: [{ type: i0.ContentChildren, args: [i0.forwardRef(() =>
|
|
1097
|
+
args: [{ selector: 'st-input-field', imports: [], template: "<ng-content select=\"label\"></ng-content>\n<div class=\"st-input-wrapper\">\n <div class=\"affix\">\n <ng-content select=\"[prefix]\"></ng-content>\n </div>\n <ng-content select=\"input,textarea\"></ng-content>\n <div class=\"affix\">\n <ng-content select=\"[suffix]\"></ng-content>\n </div>\n</div>\n" }]
|
|
1098
|
+
}], ctorParameters: () => [], propDecorators: { iconComponents: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataIconComponent), { ...{ descendants: true }, isSignal: true }] }], inputField: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StrataNativeInputRefDirective), { ...{
|
|
894
1099
|
descendants: true,
|
|
895
1100
|
}, isSignal: true }] }] } });
|
|
896
1101
|
|
|
897
|
-
class
|
|
1102
|
+
class StrataSelectItemComponent {
|
|
1103
|
+
value = input.required(...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
1104
|
+
text = input.required(...(ngDevMode ? [{ debugName: "text" }] : []));
|
|
1105
|
+
itemClicked = output();
|
|
1106
|
+
hidden = signal(false, ...(ngDevMode ? [{ debugName: "hidden" }] : []));
|
|
1107
|
+
elementRef = inject(ElementRef);
|
|
1108
|
+
get display() {
|
|
1109
|
+
return this.hidden() ? 'none' : 'block';
|
|
1110
|
+
}
|
|
1111
|
+
onClick(event) {
|
|
1112
|
+
this.itemClicked.emit(this);
|
|
1113
|
+
event.stopPropagation();
|
|
1114
|
+
}
|
|
1115
|
+
onMouseOver(event) {
|
|
1116
|
+
event.stopPropagation();
|
|
1117
|
+
event.stopImmediatePropagation();
|
|
1118
|
+
event.preventDefault();
|
|
1119
|
+
}
|
|
1120
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSelectItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1121
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: StrataSelectItemComponent, isStandalone: true, selector: "st-select-item", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { itemClicked: "itemClicked" }, host: { listeners: { "click": "onClick($event)", "mouseover": "onMouseOver($event)" }, properties: { "style.display": "this.display" }, classAttribute: "single-select-item" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
|
|
1122
|
+
}
|
|
1123
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSelectItemComponent, decorators: [{
|
|
1124
|
+
type: Component,
|
|
1125
|
+
args: [{
|
|
1126
|
+
selector: 'st-select-item',
|
|
1127
|
+
imports: [],
|
|
1128
|
+
template: '<ng-content></ng-content>',
|
|
1129
|
+
host: {
|
|
1130
|
+
class: 'single-select-item',
|
|
1131
|
+
},
|
|
1132
|
+
}]
|
|
1133
|
+
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], itemClicked: [{ type: i0.Output, args: ["itemClicked"] }], display: [{
|
|
1134
|
+
type: HostBinding,
|
|
1135
|
+
args: ['style.display']
|
|
1136
|
+
}], onClick: [{
|
|
1137
|
+
type: HostListener,
|
|
1138
|
+
args: ['click', ['$event']]
|
|
1139
|
+
}], onMouseOver: [{
|
|
1140
|
+
type: HostListener,
|
|
1141
|
+
args: ['mouseover', ['$event']]
|
|
1142
|
+
}] } });
|
|
1143
|
+
|
|
1144
|
+
class StrataSelectTriggerDirective {
|
|
1145
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSelectTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1146
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: StrataSelectTriggerDirective, isStandalone: true, selector: "[stSelectTrigger]", ngImport: i0 });
|
|
1147
|
+
}
|
|
1148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSelectTriggerDirective, decorators: [{
|
|
1149
|
+
type: Directive,
|
|
1150
|
+
args: [{
|
|
1151
|
+
selector: '[stSelectTrigger]',
|
|
1152
|
+
}]
|
|
1153
|
+
}] });
|
|
1154
|
+
|
|
1155
|
+
class StrataSingleSelectComponent {
|
|
898
1156
|
open = signal(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
|
|
899
1157
|
placeholder = input('Select', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
|
|
900
1158
|
placement = input('bottom-start', ...(ngDevMode ? [{ debugName: "placement" }] : []));
|
|
@@ -902,23 +1160,45 @@ class DropdownComponent {
|
|
|
902
1160
|
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
903
1161
|
name = input(...(ngDevMode ? [undefined, { debugName: "name" }] : []));
|
|
904
1162
|
selected = model(...(ngDevMode ? [undefined, { debugName: "selected" }] : []));
|
|
905
|
-
|
|
1163
|
+
selectedItem = computed(() => {
|
|
1164
|
+
const val = this.selected();
|
|
1165
|
+
if (val === undefined)
|
|
1166
|
+
return undefined;
|
|
1167
|
+
return this.selectItems().find(item => item.value() === val);
|
|
1168
|
+
}, ...(ngDevMode ? [{ debugName: "selectedItem" }] : []));
|
|
906
1169
|
searchable = input(false, ...(ngDevMode ? [{ debugName: "searchable" }] : []));
|
|
907
1170
|
searchQuery = model(...(ngDevMode ? [undefined, { debugName: "searchQuery" }] : []));
|
|
908
1171
|
searchPlaceholder = input('Search', ...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : []));
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
1172
|
+
itemSelected = output();
|
|
1173
|
+
selectItems = contentChildren(StrataSelectItemComponent, ...(ngDevMode ? [{ debugName: "selectItems" }] : []));
|
|
1174
|
+
triggerTemplate = contentChild(StrataSelectTriggerDirective, { ...(ngDevMode ? { debugName: "triggerTemplate" } : {}), read: TemplateRef });
|
|
1175
|
+
inputField = viewChild(StrataInputFieldComponent, ...(ngDevMode ? [{ debugName: "inputField" }] : []));
|
|
1176
|
+
destroyRef = inject(DestroyRef);
|
|
1177
|
+
constructor() {
|
|
1178
|
+
effect((onCleanup) => {
|
|
1179
|
+
const items = this.selectItems();
|
|
1180
|
+
const subs = items.map((item) => item.itemClicked.subscribe((clickedItem) => {
|
|
1181
|
+
this.onItemClick(clickedItem);
|
|
1182
|
+
}));
|
|
1183
|
+
onCleanup(() => {
|
|
1184
|
+
subs.forEach((sub) => sub.unsubscribe());
|
|
1185
|
+
});
|
|
1186
|
+
});
|
|
1187
|
+
}
|
|
1188
|
+
onSearchChange(query) {
|
|
1189
|
+
const q = query?.toLowerCase().trim() || '';
|
|
1190
|
+
const items = this.selectItems();
|
|
1191
|
+
for (const item of items) {
|
|
1192
|
+
if (!q) {
|
|
1193
|
+
item.hidden.set(false);
|
|
1194
|
+
}
|
|
1195
|
+
else {
|
|
1196
|
+
const match = item.text().toLowerCase().includes(q);
|
|
1197
|
+
item.hidden.set(!match);
|
|
1198
|
+
}
|
|
913
1199
|
}
|
|
914
|
-
return this.dropdownItems().filter((item) => item.text.toLowerCase().includes(this.searchQuery().toLowerCase().trim()));
|
|
915
|
-
}, ...(ngDevMode ? [{ debugName: "shownItems" }] : []));
|
|
916
|
-
onSelect = output();
|
|
917
|
-
inputField = viewChild(InputFieldComponent, ...(ngDevMode ? [{ debugName: "inputField" }] : []));
|
|
918
|
-
get classList() {
|
|
919
|
-
return [this.size()];
|
|
920
1200
|
}
|
|
921
|
-
|
|
1201
|
+
toggle(event) {
|
|
922
1202
|
if (event) {
|
|
923
1203
|
event.preventDefault();
|
|
924
1204
|
event.stopPropagation();
|
|
@@ -930,16 +1210,10 @@ class DropdownComponent {
|
|
|
930
1210
|
this.show();
|
|
931
1211
|
}
|
|
932
1212
|
}
|
|
933
|
-
onItemClick(item
|
|
934
|
-
this.
|
|
935
|
-
|
|
936
|
-
this.
|
|
937
|
-
this.onSelect.emit(item);
|
|
938
|
-
}
|
|
939
|
-
onItemHover(mouseEvent) {
|
|
940
|
-
mouseEvent.stopPropagation();
|
|
941
|
-
mouseEvent.stopImmediatePropagation();
|
|
942
|
-
mouseEvent.preventDefault();
|
|
1213
|
+
onItemClick(item) {
|
|
1214
|
+
this.hide();
|
|
1215
|
+
this.selected.set(item.value());
|
|
1216
|
+
this.itemSelected.emit(item.value());
|
|
943
1217
|
}
|
|
944
1218
|
show() {
|
|
945
1219
|
this.open.set(true);
|
|
@@ -950,45 +1224,43 @@ class DropdownComponent {
|
|
|
950
1224
|
hide() {
|
|
951
1225
|
this.open.set(false);
|
|
952
1226
|
}
|
|
953
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
954
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
1227
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSingleSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1228
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataSingleSelectComponent, isStandalone: true, selector: "st-single-select", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, searchQuery: { classPropertyName: "searchQuery", publicName: "searchQuery", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selectedChange", searchQuery: "searchQueryChange", itemSelected: "itemSelected" }, queries: [{ propertyName: "selectItems", predicate: StrataSelectItemComponent, isSignal: true }, { propertyName: "triggerTemplate", first: true, predicate: StrataSelectTriggerDirective, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "inputField", first: true, predicate: StrataInputFieldComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (label()) {\n<label class=\"st-label\" [for]=\"name()\"> {{ label() }}</label>\n}\n<div class=\"single-select-input\" [id]=\"name()\" #singleSelectInput (click)=\"toggle($event)\" [attr.data-open]=\"open()\"\n tabindex=\"0\" [stOverlay]=\"selector\" [overlayOpen]=\"open()\" [overlayPlacement]=\"placement()\">\n @if (selectedItem()) {\n @if (triggerTemplate()) {\n <ng-container *ngTemplateOutlet=\"triggerTemplate()!\"></ng-container>\n } @else {\n {{ selectedItem()!.text() }}\n }\n } @else {\n <span class=\"placeholder-text\">{{ placeholder() }}</span>\n }\n\n <st-icon name=\"expand-up-down\"></st-icon>\n</div>\n\n<ng-template #selector>\n <div class=\"single-select-selector\" #singleSelectSelector [class.full-width]=\"fullWidth()\">\n @if (searchable()) {\n <st-input-field>\n <input stInput #searchField type=\"text\" [value]=\"searchQuery() || ''\" (input)=\"searchQuery.set($any($event.target).value); onSearchChange(searchQuery())\" [placeholder]=\"searchPlaceholder()\" />\n <button stButton variant=\"ghost\" [class.visible]=\"searchQuery() !== undefined && searchQuery()!.length > 0\" suffix\n size=\"sm\" (click)=\"searchQuery.set(undefined); onSearchChange(undefined)\">\n x\n </button>\n </st-input-field>\n }\n <ng-content select=\"st-select-item\"></ng-content>\n </div>\n</ng-template>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size"], outputs: ["sizeChange"] }, { kind: "directive", type: StrataOverlayDirective, selector: "[stOverlay]", inputs: ["stOverlay", "overlayOpen", "overlayPlacement", "overlayOffset"], outputs: ["overlayOpenChange"] }, { kind: "component", type: StrataInputFieldComponent, selector: "st-input-field" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: StrataNativeInputRefDirective, selector: "input[stInput], textarea[stInput]" }, { kind: "directive", type: StrataButtonDirective, selector: "[stButton]", inputs: ["variant", "size", "fullWidth"] }] });
|
|
955
1229
|
}
|
|
956
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSingleSelectComponent, decorators: [{
|
|
957
1231
|
type: Component,
|
|
958
|
-
args: [{ selector: 'st-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
1232
|
+
args: [{ selector: 'st-single-select', imports: [
|
|
1233
|
+
CommonModule,
|
|
1234
|
+
StrataIconComponent,
|
|
1235
|
+
StrataOverlayDirective,
|
|
1236
|
+
StrataInputFieldComponent,
|
|
962
1237
|
FormsModule,
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
], template: "@if (label()) {\n
|
|
966
|
-
}], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }],
|
|
967
|
-
type: HostBinding,
|
|
968
|
-
args: ['class']
|
|
969
|
-
}] } });
|
|
1238
|
+
StrataNativeInputRefDirective,
|
|
1239
|
+
StrataButtonDirective,
|
|
1240
|
+
], template: "@if (label()) {\n<label class=\"st-label\" [for]=\"name()\"> {{ label() }}</label>\n}\n<div class=\"single-select-input\" [id]=\"name()\" #singleSelectInput (click)=\"toggle($event)\" [attr.data-open]=\"open()\"\n tabindex=\"0\" [stOverlay]=\"selector\" [overlayOpen]=\"open()\" [overlayPlacement]=\"placement()\">\n @if (selectedItem()) {\n @if (triggerTemplate()) {\n <ng-container *ngTemplateOutlet=\"triggerTemplate()!\"></ng-container>\n } @else {\n {{ selectedItem()!.text() }}\n }\n } @else {\n <span class=\"placeholder-text\">{{ placeholder() }}</span>\n }\n\n <st-icon name=\"expand-up-down\"></st-icon>\n</div>\n\n<ng-template #selector>\n <div class=\"single-select-selector\" #singleSelectSelector [class.full-width]=\"fullWidth()\">\n @if (searchable()) {\n <st-input-field>\n <input stInput #searchField type=\"text\" [value]=\"searchQuery() || ''\" (input)=\"searchQuery.set($any($event.target).value); onSearchChange(searchQuery())\" [placeholder]=\"searchPlaceholder()\" />\n <button stButton variant=\"ghost\" [class.visible]=\"searchQuery() !== undefined && searchQuery()!.length > 0\" suffix\n size=\"sm\" (click)=\"searchQuery.set(undefined); onSearchChange(undefined)\">\n x\n </button>\n </st-input-field>\n }\n <ng-content select=\"st-select-item\"></ng-content>\n </div>\n</ng-template>" }]
|
|
1241
|
+
}], ctorParameters: () => [], propDecorators: { placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchQuery: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchQuery", required: false }] }, { type: i0.Output, args: ["searchQueryChange"] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], itemSelected: [{ type: i0.Output, args: ["itemSelected"] }], selectItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataSelectItemComponent), { isSignal: true }] }], triggerTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StrataSelectTriggerDirective), { ...{ read: TemplateRef }, isSignal: true }] }], inputField: [{ type: i0.ViewChild, args: [i0.forwardRef(() => StrataInputFieldComponent), { isSignal: true }] }] } });
|
|
970
1242
|
|
|
971
|
-
class
|
|
1243
|
+
class StrataDividerComponent {
|
|
972
1244
|
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
973
1245
|
margin = input(true, ...(ngDevMode ? [{ debugName: "margin" }] : []));
|
|
974
1246
|
vertical = input(false, ...(ngDevMode ? [{ debugName: "vertical" }] : []));
|
|
975
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
976
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
1247
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataDividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1248
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataDividerComponent, isStandalone: true, selector: "st-divider", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, margin: { classPropertyName: "margin", publicName: "margin", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (!label() || vertical()) {\n <div class=\"divider-line\" [class.divider-margin]=\"margin()\" [class.vertical]=\"vertical()\"></div>\n} @else {\n <div class=\"divider-line-with-text\" [class.divider-margin]=\"margin()\">\n <div class=\"divider-line\"></div>\n <span>{{ label() }}</span>\n <div class=\"divider-line\"></div>\n </div>\n}\n" });
|
|
977
1249
|
}
|
|
978
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1250
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataDividerComponent, decorators: [{
|
|
979
1251
|
type: Component,
|
|
980
1252
|
args: [{ selector: 'st-divider', imports: [], template: "@if (!label() || vertical()) {\n <div class=\"divider-line\" [class.divider-margin]=\"margin()\" [class.vertical]=\"vertical()\"></div>\n} @else {\n <div class=\"divider-line-with-text\" [class.divider-margin]=\"margin()\">\n <div class=\"divider-line\"></div>\n <span>{{ label() }}</span>\n <div class=\"divider-line\"></div>\n </div>\n}\n" }]
|
|
981
1253
|
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], margin: [{ type: i0.Input, args: [{ isSignal: true, alias: "margin", required: false }] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }] } });
|
|
982
1254
|
|
|
983
|
-
class
|
|
1255
|
+
class StrataTagComponent {
|
|
984
1256
|
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
985
1257
|
get class() {
|
|
986
1258
|
return this.size();
|
|
987
1259
|
}
|
|
988
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
989
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type:
|
|
1260
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1261
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: StrataTagComponent, isStandalone: true, selector: "st-tag", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.class" } }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
|
|
990
1262
|
}
|
|
991
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1263
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataTagComponent, decorators: [{
|
|
992
1264
|
type: Component,
|
|
993
1265
|
args: [{
|
|
994
1266
|
selector: 'st-tag',
|
|
@@ -1000,47 +1272,156 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1000
1272
|
args: ['class']
|
|
1001
1273
|
}] } });
|
|
1002
1274
|
|
|
1003
|
-
class
|
|
1004
|
-
|
|
1275
|
+
class StrataKbdComponent {
|
|
1276
|
+
config = inject(STRATA_CONFIG);
|
|
1277
|
+
/**
|
|
1278
|
+
* The sequence of keys to display.
|
|
1279
|
+
* Can be an array like `['⌘', 'K']` or a string combo like `'meta+k'`.
|
|
1280
|
+
*/
|
|
1281
|
+
keys = input([], ...(ngDevMode ? [{ debugName: "keys" }] : []));
|
|
1282
|
+
resolvedKeys = computed(() => {
|
|
1283
|
+
const rawKeys = this.keys();
|
|
1284
|
+
const labels = this.config.shortcutLabels;
|
|
1285
|
+
const parseKey = (part) => {
|
|
1286
|
+
const p = part.trim().toLowerCase();
|
|
1287
|
+
if (p === 'meta')
|
|
1288
|
+
return labels?.meta || '⌘';
|
|
1289
|
+
if (p === 'ctrl')
|
|
1290
|
+
return labels?.ctrl || 'Ctrl';
|
|
1291
|
+
if (p === 'shift')
|
|
1292
|
+
return labels?.shift || 'Shift';
|
|
1293
|
+
if (p === 'alt')
|
|
1294
|
+
return labels?.alt || 'Alt';
|
|
1295
|
+
return p.length === 1 ? p.toUpperCase() : part.trim();
|
|
1296
|
+
};
|
|
1297
|
+
if (typeof rawKeys === 'string') {
|
|
1298
|
+
return rawKeys.split('+').map(parseKey);
|
|
1299
|
+
}
|
|
1300
|
+
return Array.isArray(rawKeys) ? rawKeys.map(parseKey) : [];
|
|
1301
|
+
}, ...(ngDevMode ? [{ debugName: "resolvedKeys" }] : []));
|
|
1302
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataKbdComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1303
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataKbdComponent, isStandalone: true, selector: "st-kbd", inputs: { keys: { classPropertyName: "keys", publicName: "keys", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (key of resolvedKeys(); track key) {\n<kbd class=\"st-kbd-key st-mono-s\">{{ key }}</kbd>\n}", styles: [":host{--st-kbd-bg: transparent;--st-kbd-border: var(--st-color-text-secondary);--st-kbd-text: var(--st-color-text-secondary);display:inline-flex;align-items:center;gap:4px}:host .st-kbd-key{font-style:normal;line-height:1;padding:3px 6px;border-radius:var(--st-border-radius-sm);background:var(--st-kbd-bg);border:1px solid var(--st-kbd-border);color:var(--st-kbd-text);white-space:nowrap;-webkit-user-select:none;user-select:none}\n"] });
|
|
1304
|
+
}
|
|
1305
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataKbdComponent, decorators: [{
|
|
1306
|
+
type: Component,
|
|
1307
|
+
args: [{ selector: 'st-kbd', imports: [], template: "@for (key of resolvedKeys(); track key) {\n<kbd class=\"st-kbd-key st-mono-s\">{{ key }}</kbd>\n}", styles: [":host{--st-kbd-bg: transparent;--st-kbd-border: var(--st-color-text-secondary);--st-kbd-text: var(--st-color-text-secondary);display:inline-flex;align-items:center;gap:4px}:host .st-kbd-key{font-style:normal;line-height:1;padding:3px 6px;border-radius:var(--st-border-radius-sm);background:var(--st-kbd-bg);border:1px solid var(--st-kbd-border);color:var(--st-kbd-text);white-space:nowrap;-webkit-user-select:none;user-select:none}\n"] }]
|
|
1308
|
+
}], propDecorators: { keys: [{ type: i0.Input, args: [{ isSignal: true, alias: "keys", required: false }] }] } });
|
|
1309
|
+
|
|
1310
|
+
class StrataRadioComponent {
|
|
1311
|
+
value = input.required(...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
1312
|
+
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
1313
|
+
checked = model(false, ...(ngDevMode ? [{ debugName: "checked" }] : []));
|
|
1314
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
1315
|
+
select = output();
|
|
1316
|
+
get isChecked() {
|
|
1317
|
+
return this.checked();
|
|
1318
|
+
}
|
|
1319
|
+
get isDisabled() {
|
|
1320
|
+
return this.disabled();
|
|
1321
|
+
}
|
|
1322
|
+
onClick(event) {
|
|
1323
|
+
if (this.disabled()) {
|
|
1324
|
+
return;
|
|
1325
|
+
}
|
|
1326
|
+
event.stopImmediatePropagation();
|
|
1327
|
+
this.select.emit();
|
|
1328
|
+
this.checked.set(true);
|
|
1329
|
+
}
|
|
1330
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataRadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1331
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataRadioComponent, isStandalone: true, selector: "st-radio", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", select: "select" }, host: { listeners: { "click": "onClick($event)" }, properties: { "attr.data-checked": "this.isChecked", "attr.data-disabled": "this.isDisabled" } }, ngImport: i0, template: "<input type=\"radio\" [checked]=\"checked()\" [disabled]=\"disabled()\" />\n<div class=\"radio-visual\"></div>\n@if (label()) {\n <label>{{ label() }}</label>\n}\n" });
|
|
1332
|
+
}
|
|
1333
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataRadioComponent, decorators: [{
|
|
1334
|
+
type: Component,
|
|
1335
|
+
args: [{ selector: 'st-radio', imports: [], template: "<input type=\"radio\" [checked]=\"checked()\" [disabled]=\"disabled()\" />\n<div class=\"radio-visual\"></div>\n@if (label()) {\n <label>{{ label() }}</label>\n}\n" }]
|
|
1336
|
+
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], select: [{ type: i0.Output, args: ["select"] }], isChecked: [{
|
|
1337
|
+
type: HostBinding,
|
|
1338
|
+
args: ['attr.data-checked']
|
|
1339
|
+
}], isDisabled: [{
|
|
1340
|
+
type: HostBinding,
|
|
1341
|
+
args: ['attr.data-disabled']
|
|
1342
|
+
}], onClick: [{
|
|
1343
|
+
type: HostListener,
|
|
1344
|
+
args: ['click', ['$event']]
|
|
1345
|
+
}] } });
|
|
1346
|
+
|
|
1347
|
+
class StrataItemComponent {
|
|
1348
|
+
element = inject(ElementRef);
|
|
1349
|
+
_activatable = inject(StrataActivatableDirective);
|
|
1350
|
+
checkbox = contentChild(StrataCheckboxComponent, { ...(ngDevMode ? { debugName: "checkbox" } : {}), read: ElementRef });
|
|
1351
|
+
toggle = contentChild(StrataToggleComponent, { ...(ngDevMode ? { debugName: "toggle" } : {}), read: ElementRef });
|
|
1352
|
+
radio = contentChild(StrataRadioComponent, { ...(ngDevMode ? { debugName: "radio" } : {}), read: ElementRef });
|
|
1353
|
+
interactable = this._activatable.interactable;
|
|
1354
|
+
disabled = this._activatable.disabled;
|
|
1355
|
+
constructor() {
|
|
1356
|
+
this.interactable.set(false);
|
|
1357
|
+
}
|
|
1005
1358
|
get isInteractable() {
|
|
1006
|
-
return this.
|
|
1359
|
+
return this._activatable.isFocusable();
|
|
1007
1360
|
}
|
|
1008
|
-
get
|
|
1009
|
-
return this.
|
|
1361
|
+
get isDisabledClass() {
|
|
1362
|
+
return this.disabled();
|
|
1363
|
+
}
|
|
1364
|
+
onHostClick(event) {
|
|
1365
|
+
if (this.disabled() || !this.interactable()) {
|
|
1366
|
+
return;
|
|
1367
|
+
}
|
|
1368
|
+
// Only trigger if we didn't click an interactive element within the item
|
|
1369
|
+
const target = event.target;
|
|
1370
|
+
const isControl = target.closest('st-checkbox, st-toggle, st-radio');
|
|
1371
|
+
if (!isControl) {
|
|
1372
|
+
this.onActivated();
|
|
1373
|
+
}
|
|
1374
|
+
}
|
|
1375
|
+
onActivated() {
|
|
1376
|
+
if (this.disabled())
|
|
1377
|
+
return;
|
|
1378
|
+
// Trigger children if they exist
|
|
1379
|
+
this.checkbox()?.nativeElement.click();
|
|
1380
|
+
this.toggle()?.nativeElement.click();
|
|
1381
|
+
this.radio()?.nativeElement.click();
|
|
1010
1382
|
}
|
|
1011
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1012
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
1383
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1384
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: StrataItemComponent, isStandalone: true, selector: "st-item", host: { listeners: { "click": "onHostClick($event)" }, properties: { "class.interactable": "this.isInteractable", "class.disabled": "this.isDisabledClass" } }, queries: [{ propertyName: "checkbox", first: true, predicate: StrataCheckboxComponent, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "toggle", first: true, predicate: StrataToggleComponent, descendants: true, read: ElementRef, isSignal: true }, { propertyName: "radio", first: true, predicate: StrataRadioComponent, descendants: true, read: ElementRef, isSignal: true }], hostDirectives: [{ directive: StrataActivatableDirective, inputs: ["disabled", "disabled", "interactable", "interactable"], outputs: ["activated", "activated"] }], ngImport: i0, template: "<span class=\"item-start\">\n <ng-content select=\"[area='start']\"></ng-content\n></span>\n<span class=\"item-default\"> <ng-content></ng-content></span>\n<span class=\"item-end\">\n <ng-content select=\"[area='end']\"></ng-content>\n</span>\n", styles: [""] });
|
|
1013
1385
|
}
|
|
1014
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1386
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataItemComponent, decorators: [{
|
|
1015
1387
|
type: Component,
|
|
1016
|
-
args: [{ selector: 'st-item', imports: [],
|
|
1017
|
-
|
|
1388
|
+
args: [{ selector: 'st-item', imports: [], hostDirectives: [
|
|
1389
|
+
{
|
|
1390
|
+
directive: StrataActivatableDirective,
|
|
1391
|
+
inputs: ['disabled', 'interactable'],
|
|
1392
|
+
outputs: ['activated'],
|
|
1393
|
+
},
|
|
1394
|
+
], template: "<span class=\"item-start\">\n <ng-content select=\"[area='start']\"></ng-content\n></span>\n<span class=\"item-default\"> <ng-content></ng-content></span>\n<span class=\"item-end\">\n <ng-content select=\"[area='end']\"></ng-content>\n</span>\n" }]
|
|
1395
|
+
}], ctorParameters: () => [], propDecorators: { checkbox: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StrataCheckboxComponent), { ...{ read: ElementRef }, isSignal: true }] }], toggle: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StrataToggleComponent), { ...{ read: ElementRef }, isSignal: true }] }], radio: [{ type: i0.ContentChild, args: [i0.forwardRef(() => StrataRadioComponent), { ...{ read: ElementRef }, isSignal: true }] }], isInteractable: [{
|
|
1018
1396
|
type: HostBinding,
|
|
1019
1397
|
args: ['class.interactable']
|
|
1020
|
-
}],
|
|
1398
|
+
}], isDisabledClass: [{
|
|
1021
1399
|
type: HostBinding,
|
|
1022
|
-
args: ['
|
|
1400
|
+
args: ['class.disabled']
|
|
1401
|
+
}], onHostClick: [{
|
|
1402
|
+
type: HostListener,
|
|
1403
|
+
args: ['click', ['$event']]
|
|
1023
1404
|
}] } });
|
|
1024
1405
|
|
|
1025
|
-
class
|
|
1406
|
+
class StrataItemListComponent {
|
|
1026
1407
|
items = input.required(...(ngDevMode ? [{ debugName: "items" }] : []));
|
|
1027
1408
|
dividers = input(true, ...(ngDevMode ? [{ debugName: "dividers" }] : []));
|
|
1028
1409
|
template = input(...(ngDevMode ? [undefined, { debugName: "template" }] : []));
|
|
1029
1410
|
get hostClasses() {
|
|
1030
1411
|
return [this.dividers() ? 'with-dividers' : ''];
|
|
1031
1412
|
}
|
|
1032
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1033
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
1413
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataItemListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1414
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataItemListComponent, isStandalone: true, selector: "st-item-list", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, dividers: { classPropertyName: "dividers", publicName: "dividers", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "@for (item of items(); track item; let last = $last) {\n <ng-template #defaultItemTemplate>\n <st-item>{{ item }}</st-item>\n </ng-template>\n <ng-container\n [ngTemplateOutlet]=\"template() || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n}\n", dependencies: [{ kind: "component", type: StrataItemComponent, selector: "st-item" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: CommonModule }] });
|
|
1034
1415
|
}
|
|
1035
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1416
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataItemListComponent, decorators: [{
|
|
1036
1417
|
type: Component,
|
|
1037
|
-
args: [{ selector: 'st-item-list', imports: [
|
|
1418
|
+
args: [{ selector: 'st-item-list', imports: [StrataItemComponent, NgTemplateOutlet, CommonModule], template: "@for (item of items(); track item; let last = $last) {\n <ng-template #defaultItemTemplate>\n <st-item>{{ item }}</st-item>\n </ng-template>\n <ng-container\n [ngTemplateOutlet]=\"template() || defaultItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n}\n" }]
|
|
1038
1419
|
}], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], dividers: [{ type: i0.Input, args: [{ isSignal: true, alias: "dividers", required: false }] }], template: [{ type: i0.Input, args: [{ isSignal: true, alias: "template", required: false }] }], hostClasses: [{
|
|
1039
1420
|
type: HostBinding,
|
|
1040
1421
|
args: ['class']
|
|
1041
1422
|
}] } });
|
|
1042
1423
|
|
|
1043
|
-
class
|
|
1424
|
+
class StrataAutoResizeDirective {
|
|
1044
1425
|
minimumRows = input(1, ...(ngDevMode ? [{ debugName: "minimumRows" }] : []));
|
|
1045
1426
|
maximumRows = input(...(ngDevMode ? [undefined, { debugName: "maximumRows" }] : []));
|
|
1046
1427
|
lineHeight = 0;
|
|
@@ -1051,7 +1432,6 @@ class AutoResizeDirective {
|
|
|
1051
1432
|
onWindowResize() {
|
|
1052
1433
|
this.resize();
|
|
1053
1434
|
}
|
|
1054
|
-
constructor() { }
|
|
1055
1435
|
ngAfterViewInit() {
|
|
1056
1436
|
this.calculateLineHeight();
|
|
1057
1437
|
this.resize();
|
|
@@ -1083,15 +1463,15 @@ class AutoResizeDirective {
|
|
|
1083
1463
|
textarea.style.height = `${newHeight}px`;
|
|
1084
1464
|
textarea.style.overflowY = scrollHeight > maxHeight ? 'auto' : 'hidden';
|
|
1085
1465
|
}
|
|
1086
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1087
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type:
|
|
1466
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAutoResizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1467
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: StrataAutoResizeDirective, isStandalone: true, selector: "[stAutoResize]", inputs: { minimumRows: { classPropertyName: "minimumRows", publicName: "minimumRows", isSignal: true, isRequired: false, transformFunction: null }, maximumRows: { classPropertyName: "maximumRows", publicName: "maximumRows", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "onInput()", "window:resize": "onWindowResize()" } }, usesOnChanges: true, ngImport: i0 });
|
|
1088
1468
|
}
|
|
1089
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1469
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAutoResizeDirective, decorators: [{
|
|
1090
1470
|
type: Directive,
|
|
1091
1471
|
args: [{
|
|
1092
1472
|
selector: '[stAutoResize]',
|
|
1093
1473
|
}]
|
|
1094
|
-
}],
|
|
1474
|
+
}], propDecorators: { minimumRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "minimumRows", required: false }] }], maximumRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "maximumRows", required: false }] }], onInput: [{
|
|
1095
1475
|
type: HostListener,
|
|
1096
1476
|
args: ['input']
|
|
1097
1477
|
}], onWindowResize: [{
|
|
@@ -1099,15 +1479,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1099
1479
|
args: ['window:resize']
|
|
1100
1480
|
}] } });
|
|
1101
1481
|
|
|
1102
|
-
class
|
|
1482
|
+
class StrataPaginationComponent {
|
|
1103
1483
|
currentPage = model(1, ...(ngDevMode ? [{ debugName: "currentPage" }] : []));
|
|
1104
1484
|
totalPages = input.required(...(ngDevMode ? [{ debugName: "totalPages" }] : []));
|
|
1105
|
-
|
|
1485
|
+
pageSelected = output();
|
|
1106
1486
|
pageButtons = computed(() => this.calculatePageButtons(this.currentPage(), this.totalPages()), ...(ngDevMode ? [{ debugName: "pageButtons" }] : []));
|
|
1107
1487
|
hideNextPreviousAtStartEnd = input(false, ...(ngDevMode ? [{ debugName: "hideNextPreviousAtStartEnd" }] : []));
|
|
1108
1488
|
changePage(newPage) {
|
|
1109
1489
|
this.currentPage.set(newPage);
|
|
1110
|
-
this.
|
|
1490
|
+
this.pageSelected.emit(this.currentPage());
|
|
1111
1491
|
}
|
|
1112
1492
|
calculatePageButtons(currentPage, totalPages) {
|
|
1113
1493
|
const buttons = [];
|
|
@@ -1168,19 +1548,19 @@ class PaginationComponent {
|
|
|
1168
1548
|
clickable: true,
|
|
1169
1549
|
};
|
|
1170
1550
|
}
|
|
1171
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1172
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
1551
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1552
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataPaginationComponent, isStandalone: true, selector: "st-pagination", inputs: { currentPage: { classPropertyName: "currentPage", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, totalPages: { classPropertyName: "totalPages", publicName: "totalPages", isSignal: true, isRequired: true, transformFunction: null }, hideNextPreviousAtStartEnd: { classPropertyName: "hideNextPreviousAtStartEnd", publicName: "hideNextPreviousAtStartEnd", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { currentPage: "currentPageChange", pageSelected: "pageSelected" }, ngImport: i0, template: "<button\n [disabled]=\"currentPage() === 1\"\n [class.clickable]=\"true\"\n [class.hideOnDisabled]=\"hideNextPreviousAtStartEnd()\"\n (click)=\"changePage(currentPage() - 1)\"\n>\n Previous\n</button>\n@for (page of pageButtons(); track page) {\n <button\n [class.selected]=\"page.page === currentPage()\"\n [class.clickable]=\"page.clickable\"\n (click)=\"page.page ? changePage(page.page) : null\"\n >\n {{ page.text }}\n </button>\n}\n<button\n [disabled]=\"currentPage() === totalPages()\"\n (click)=\"changePage(currentPage() + 1)\"\n [class.clickable]=\"true\"\n [class.hideOnDisabled]=\"hideNextPreviousAtStartEnd()\"\n>\n Next\n</button>\n" });
|
|
1173
1553
|
}
|
|
1174
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1554
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataPaginationComponent, decorators: [{
|
|
1175
1555
|
type: Component,
|
|
1176
1556
|
args: [{ selector: 'st-pagination', imports: [], template: "<button\n [disabled]=\"currentPage() === 1\"\n [class.clickable]=\"true\"\n [class.hideOnDisabled]=\"hideNextPreviousAtStartEnd()\"\n (click)=\"changePage(currentPage() - 1)\"\n>\n Previous\n</button>\n@for (page of pageButtons(); track page) {\n <button\n [class.selected]=\"page.page === currentPage()\"\n [class.clickable]=\"page.clickable\"\n (click)=\"page.page ? changePage(page.page) : null\"\n >\n {{ page.text }}\n </button>\n}\n<button\n [disabled]=\"currentPage() === totalPages()\"\n (click)=\"changePage(currentPage() + 1)\"\n [class.clickable]=\"true\"\n [class.hideOnDisabled]=\"hideNextPreviousAtStartEnd()\"\n>\n Next\n</button>\n" }]
|
|
1177
|
-
}], propDecorators: { currentPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentPage", required: false }] }, { type: i0.Output, args: ["currentPageChange"] }], totalPages: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalPages", required: true }] }],
|
|
1557
|
+
}], propDecorators: { currentPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentPage", required: false }] }, { type: i0.Output, args: ["currentPageChange"] }], totalPages: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalPages", required: true }] }], pageSelected: [{ type: i0.Output, args: ["pageSelected"] }], hideNextPreviousAtStartEnd: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideNextPreviousAtStartEnd", required: false }] }] } });
|
|
1178
1558
|
|
|
1179
1559
|
class CapitalizePipe {
|
|
1180
1560
|
static capitalize(value) {
|
|
1181
1561
|
return value.substring(0, 1).toLocaleUpperCase() + value.substring(1);
|
|
1182
1562
|
}
|
|
1183
|
-
transform(value, ...
|
|
1563
|
+
transform(value, ..._args) {
|
|
1184
1564
|
return CapitalizePipe.capitalize(value);
|
|
1185
1565
|
}
|
|
1186
1566
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CapitalizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
@@ -1195,16 +1575,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1195
1575
|
}]
|
|
1196
1576
|
}] });
|
|
1197
1577
|
|
|
1198
|
-
class
|
|
1578
|
+
class StrataProgressLinearComponent {
|
|
1199
1579
|
min = input(0, ...(ngDevMode ? [{ debugName: "min" }] : []));
|
|
1200
1580
|
max = input(100, ...(ngDevMode ? [{ debugName: "max" }] : []));
|
|
1201
1581
|
value = input.required(...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
1202
|
-
type = input('linear', ...(ngDevMode ? [{ debugName: "type" }] : []));
|
|
1203
1582
|
showLabel = input(true, ...(ngDevMode ? [{ debugName: "showLabel" }] : []));
|
|
1204
1583
|
labelFormat = input('percentage', ...(ngDevMode ? [{ debugName: "labelFormat" }] : []));
|
|
1205
1584
|
growDirection = input('right', ...(ngDevMode ? [{ debugName: "growDirection" }] : []));
|
|
1206
|
-
size = input(120, ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
1207
|
-
strokeWidth = input(10, ...(ngDevMode ? [{ debugName: "strokeWidth" }] : []));
|
|
1208
1585
|
percentage = computed(() => {
|
|
1209
1586
|
if (this.max() <= this.min()) {
|
|
1210
1587
|
return 0;
|
|
@@ -1214,22 +1591,19 @@ class ProgressComponent {
|
|
|
1214
1591
|
const progressableValues = this.max() - this.min();
|
|
1215
1592
|
return (progressedValue / progressableValues) * 100;
|
|
1216
1593
|
}, ...(ngDevMode ? [{ debugName: "percentage" }] : []));
|
|
1217
|
-
radius = computed(() => (this.size() - this.strokeWidth()) / 2, ...(ngDevMode ? [{ debugName: "radius" }] : []));
|
|
1218
|
-
circumference = computed(() => 2 * Math.PI * this.radius(), ...(ngDevMode ? [{ debugName: "circumference" }] : []));
|
|
1219
|
-
dashOffset = computed(() => this.circumference() * (1 - this.percentage() / 100), ...(ngDevMode ? [{ debugName: "dashOffset" }] : []));
|
|
1220
1594
|
get cssClasses() {
|
|
1221
|
-
return [
|
|
1595
|
+
return [`grow-${this.growDirection()}`];
|
|
1222
1596
|
}
|
|
1223
1597
|
get percentageProperty() {
|
|
1224
1598
|
return this.percentage();
|
|
1225
1599
|
}
|
|
1226
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1227
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
1600
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataProgressLinearComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1601
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataProgressLinearComponent, isStandalone: true, selector: "st-progress-linear", inputs: { min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, labelFormat: { classPropertyName: "labelFormat", publicName: "labelFormat", isSignal: true, isRequired: false, transformFunction: null }, growDirection: { classPropertyName: "growDirection", publicName: "growDirection", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.cssClasses", "style.--st-progress-percentage": "this.percentageProperty" } }, ngImport: i0, template: "<div class=\"linear-container\">\n <div class=\"linear-bar\" [style.width.%]=\"percentage()\"></div>\n</div>\n\n<ng-container [ngTemplateOutlet]=\"label\"></ng-container>\n\n<ng-template #label>\n @if (showLabel()) {\n <span class=\"label\">\n @switch (labelFormat()) {\n @case (\"percentage\") {\n {{ percentage() | number: \"1.0-0\" }}%\n }\n @case (\"value\") {\n {{ value() | number: \"1.0-0\" }}\n }\n }\n </span>\n }\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: DecimalPipe, name: "number" }] });
|
|
1228
1602
|
}
|
|
1229
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1603
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataProgressLinearComponent, decorators: [{
|
|
1230
1604
|
type: Component,
|
|
1231
|
-
args: [{ selector: 'st-progress', imports: [DecimalPipe, NgTemplateOutlet], template: "
|
|
1232
|
-
}], propDecorators: { min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }],
|
|
1605
|
+
args: [{ selector: 'st-progress-linear', imports: [DecimalPipe, NgTemplateOutlet], template: "<div class=\"linear-container\">\n <div class=\"linear-bar\" [style.width.%]=\"percentage()\"></div>\n</div>\n\n<ng-container [ngTemplateOutlet]=\"label\"></ng-container>\n\n<ng-template #label>\n @if (showLabel()) {\n <span class=\"label\">\n @switch (labelFormat()) {\n @case (\"percentage\") {\n {{ percentage() | number: \"1.0-0\" }}%\n }\n @case (\"value\") {\n {{ value() | number: \"1.0-0\" }}\n }\n }\n </span>\n }\n</ng-template>\n" }]
|
|
1606
|
+
}], propDecorators: { min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], labelFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelFormat", required: false }] }], growDirection: [{ type: i0.Input, args: [{ isSignal: true, alias: "growDirection", required: false }] }], cssClasses: [{
|
|
1233
1607
|
type: HostBinding,
|
|
1234
1608
|
args: ['class']
|
|
1235
1609
|
}], percentageProperty: [{
|
|
@@ -1237,11 +1611,79 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1237
1611
|
args: ['style.--st-progress-percentage']
|
|
1238
1612
|
}] } });
|
|
1239
1613
|
|
|
1240
|
-
class
|
|
1614
|
+
class StrataProgressRadialComponent {
|
|
1615
|
+
min = input(0, ...(ngDevMode ? [{ debugName: "min" }] : []));
|
|
1616
|
+
max = input(100, ...(ngDevMode ? [{ debugName: "max" }] : []));
|
|
1617
|
+
value = input.required(...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
1618
|
+
showLabel = input(true, ...(ngDevMode ? [{ debugName: "showLabel" }] : []));
|
|
1619
|
+
labelFormat = input('percentage', ...(ngDevMode ? [{ debugName: "labelFormat" }] : []));
|
|
1620
|
+
size = input(120, ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
1621
|
+
strokeWidth = input(10, ...(ngDevMode ? [{ debugName: "strokeWidth" }] : []));
|
|
1622
|
+
percentage = computed(() => {
|
|
1623
|
+
if (this.max() <= this.min()) {
|
|
1624
|
+
return 0;
|
|
1625
|
+
}
|
|
1626
|
+
const clampedValue = Math.min(Math.max(this.value(), this.min()), this.max());
|
|
1627
|
+
const progressedValue = clampedValue - this.min();
|
|
1628
|
+
const progressableValues = this.max() - this.min();
|
|
1629
|
+
return (progressedValue / progressableValues) * 100;
|
|
1630
|
+
}, ...(ngDevMode ? [{ debugName: "percentage" }] : []));
|
|
1631
|
+
radius = computed(() => (this.size() - this.strokeWidth()) / 2, ...(ngDevMode ? [{ debugName: "radius" }] : []));
|
|
1632
|
+
circumference = computed(() => 2 * Math.PI * this.radius(), ...(ngDevMode ? [{ debugName: "circumference" }] : []));
|
|
1633
|
+
dashOffset = computed(() => this.circumference() * (1 - this.percentage() / 100), ...(ngDevMode ? [{ debugName: "dashOffset" }] : []));
|
|
1634
|
+
get percentageProperty() {
|
|
1635
|
+
return this.percentage();
|
|
1636
|
+
}
|
|
1637
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataProgressRadialComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1638
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataProgressRadialComponent, isStandalone: true, selector: "st-progress-radial", inputs: { min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, labelFormat: { classPropertyName: "labelFormat", publicName: "labelFormat", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, strokeWidth: { classPropertyName: "strokeWidth", publicName: "strokeWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--st-progress-percentage": "this.percentageProperty" } }, ngImport: i0, template: "<div class=\"radial-container\">\n <svg width=\"100%\" height=\"100%\">\n <circle class=\"background\"></circle>\n\n <circle class=\"progress\" stroke-linecap=\"round\"></circle>\n </svg>\n\n <ng-container [ngTemplateOutlet]=\"label\"></ng-container>\n</div>\n\n<ng-template #label>\n @if (showLabel()) {\n <span class=\"label\">\n @switch (labelFormat()) {\n @case (\"percentage\") {\n {{ percentage() | number: \"1.0-0\" }}%\n }\n @case (\"value\") {\n {{ value() | number: \"1.0-0\" }}\n }\n }\n </span>\n }\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: DecimalPipe, name: "number" }] });
|
|
1639
|
+
}
|
|
1640
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataProgressRadialComponent, decorators: [{
|
|
1641
|
+
type: Component,
|
|
1642
|
+
args: [{ selector: 'st-progress-radial', imports: [DecimalPipe, NgTemplateOutlet], template: "<div class=\"radial-container\">\n <svg width=\"100%\" height=\"100%\">\n <circle class=\"background\"></circle>\n\n <circle class=\"progress\" stroke-linecap=\"round\"></circle>\n </svg>\n\n <ng-container [ngTemplateOutlet]=\"label\"></ng-container>\n</div>\n\n<ng-template #label>\n @if (showLabel()) {\n <span class=\"label\">\n @switch (labelFormat()) {\n @case (\"percentage\") {\n {{ percentage() | number: \"1.0-0\" }}%\n }\n @case (\"value\") {\n {{ value() | number: \"1.0-0\" }}\n }\n }\n </span>\n }\n</ng-template>\n" }]
|
|
1643
|
+
}], propDecorators: { min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], labelFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelFormat", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], strokeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "strokeWidth", required: false }] }], percentageProperty: [{
|
|
1644
|
+
type: HostBinding,
|
|
1645
|
+
args: ['style.--st-progress-percentage']
|
|
1646
|
+
}] } });
|
|
1647
|
+
|
|
1648
|
+
class StrataRadioGroupComponent {
|
|
1649
|
+
value = model('', ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
1650
|
+
radios = contentChildren(StrataRadioComponent, { ...(ngDevMode ? { debugName: "radios" } : {}), descendants: true });
|
|
1651
|
+
constructor() {
|
|
1652
|
+
// Sync group value -> children checked state
|
|
1653
|
+
effect(() => {
|
|
1654
|
+
const currentValue = this.value();
|
|
1655
|
+
this.radios().forEach((radio) => {
|
|
1656
|
+
radio.checked.set(radio.value() === currentValue);
|
|
1657
|
+
});
|
|
1658
|
+
});
|
|
1659
|
+
// Handle child selection -> update group value
|
|
1660
|
+
effect((onCleanup) => {
|
|
1661
|
+
const radios = this.radios();
|
|
1662
|
+
const subs = radios.map((radio) => radio.select.subscribe(() => {
|
|
1663
|
+
this.value.set(radio.value());
|
|
1664
|
+
}));
|
|
1665
|
+
onCleanup(() => {
|
|
1666
|
+
subs.forEach((s) => s.unsubscribe());
|
|
1667
|
+
});
|
|
1668
|
+
});
|
|
1669
|
+
}
|
|
1670
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataRadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1671
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: StrataRadioGroupComponent, isStandalone: true, selector: "st-radio-group", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, queries: [{ propertyName: "radios", predicate: StrataRadioComponent, descendants: true, isSignal: true }], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
|
|
1672
|
+
}
|
|
1673
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataRadioGroupComponent, decorators: [{
|
|
1674
|
+
type: Component,
|
|
1675
|
+
args: [{
|
|
1676
|
+
selector: 'st-radio-group',
|
|
1677
|
+
imports: [],
|
|
1678
|
+
template: `<ng-content></ng-content>`,
|
|
1679
|
+
}]
|
|
1680
|
+
}], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], radios: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataRadioComponent), { ...{ descendants: true }, isSignal: true }] }] } });
|
|
1681
|
+
|
|
1682
|
+
class StrataSegmentedControlItemComponent {
|
|
1241
1683
|
text = input.required(...(ngDevMode ? [{ debugName: "text" }] : []));
|
|
1242
1684
|
selected = model(false, ...(ngDevMode ? [{ debugName: "selected" }] : []));
|
|
1243
1685
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
1244
|
-
|
|
1686
|
+
selectionChanged = output();
|
|
1245
1687
|
get tabIndex() {
|
|
1246
1688
|
return this.selected() || this.disabled() ? null : 0;
|
|
1247
1689
|
}
|
|
@@ -1250,17 +1692,17 @@ class SegmentedControlItemComponent {
|
|
|
1250
1692
|
}
|
|
1251
1693
|
onClick() {
|
|
1252
1694
|
this.selected.set(true);
|
|
1253
|
-
this.
|
|
1695
|
+
this.selectionChanged.emit();
|
|
1254
1696
|
}
|
|
1255
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1256
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type:
|
|
1697
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSegmentedControlItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1698
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: StrataSegmentedControlItemComponent, isStandalone: true, selector: "st-segmented-control-item", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selectedChange", selectionChanged: "selectionChanged" }, host: { listeners: { "click": "onClick()" }, properties: { "attr.tabindex": "this.tabIndex", "attr.disabled": "this.disabledAttribute" } }, ngImport: i0, template: "{{ text() }}\n", styles: [""] });
|
|
1257
1699
|
}
|
|
1258
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1700
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSegmentedControlItemComponent, decorators: [{
|
|
1259
1701
|
type: Component,
|
|
1260
|
-
args: [{ selector: 'st-segmented-control-item', imports: [],
|
|
1702
|
+
args: [{ selector: 'st-segmented-control-item', imports: [], host: {
|
|
1261
1703
|
'(click)': 'onClick()',
|
|
1262
|
-
} }]
|
|
1263
|
-
}], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }],
|
|
1704
|
+
}, template: "{{ text() }}\n" }]
|
|
1705
|
+
}], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], selectionChanged: [{ type: i0.Output, args: ["selectionChanged"] }], tabIndex: [{
|
|
1264
1706
|
type: HostBinding,
|
|
1265
1707
|
args: ['attr.tabindex']
|
|
1266
1708
|
}], disabledAttribute: [{
|
|
@@ -1268,27 +1710,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1268
1710
|
args: ['attr.disabled']
|
|
1269
1711
|
}] } });
|
|
1270
1712
|
|
|
1271
|
-
class
|
|
1272
|
-
|
|
1273
|
-
|
|
1713
|
+
class StrataSegmentedControlComponent {
|
|
1714
|
+
elementRef = inject(ElementRef);
|
|
1715
|
+
destroyRef = inject(DestroyRef);
|
|
1716
|
+
fullWidth = input(false, { ...(ngDevMode ? { debugName: "fullWidth" } : {}), transform: booleanAttribute });
|
|
1717
|
+
segmentItems = contentChildren(StrataSegmentedControlItemComponent, ...(ngDevMode ? [{ debugName: "segmentItems" }] : []));
|
|
1718
|
+
segmentItemsRefs = contentChildren(StrataSegmentedControlItemComponent, { ...(ngDevMode ? { debugName: "segmentItemsRefs" } : {}), read: ElementRef });
|
|
1274
1719
|
selectedItem = signal(null, ...(ngDevMode ? [{ debugName: "selectedItem" }] : []));
|
|
1275
1720
|
selectedIndex = signal(0, ...(ngDevMode ? [{ debugName: "selectedIndex" }] : []));
|
|
1276
|
-
|
|
1277
|
-
|
|
1721
|
+
offsets = signal([], ...(ngDevMode ? [{ debugName: "offsets" }] : []));
|
|
1722
|
+
itemWidths = signal([], ...(ngDevMode ? [{ debugName: "itemWidths" }] : []));
|
|
1723
|
+
tops = signal([], ...(ngDevMode ? [{ debugName: "tops" }] : []));
|
|
1724
|
+
heights = signal([], ...(ngDevMode ? [{ debugName: "heights" }] : []));
|
|
1725
|
+
offset = computed(() => this.offsets()[this.selectedIndex()] ?? 0, ...(ngDevMode ? [{ debugName: "offset" }] : []));
|
|
1726
|
+
indicatorWidth = computed(() => this.itemWidths()[this.selectedIndex()] ?? 0, ...(ngDevMode ? [{ debugName: "indicatorWidth" }] : []));
|
|
1727
|
+
indicatorTop = computed(() => this.tops()[this.selectedIndex()] ?? 0, ...(ngDevMode ? [{ debugName: "indicatorTop" }] : []));
|
|
1728
|
+
indicatorHeight = computed(() => this.heights()[this.selectedIndex()] ?? 0, ...(ngDevMode ? [{ debugName: "indicatorHeight" }] : []));
|
|
1278
1729
|
ngAfterViewInit() {
|
|
1279
1730
|
if (this.segmentItems().length === 0) {
|
|
1280
1731
|
return;
|
|
1281
1732
|
}
|
|
1282
|
-
|
|
1283
|
-
for (let i = 0; i < this.segmentItems().length; i++) {
|
|
1284
|
-
widths.push(this.calculateOffset(i));
|
|
1285
|
-
}
|
|
1286
|
-
this.widths.set(widths);
|
|
1287
|
-
for (const item of this.segmentItems()) {
|
|
1288
|
-
item.onSelection.subscribe(() => {
|
|
1289
|
-
this.selectItem(item);
|
|
1290
|
-
});
|
|
1291
|
-
}
|
|
1733
|
+
this.updateDimensions();
|
|
1292
1734
|
const initiallySelected = this.segmentItems().find((item) => item.selected());
|
|
1293
1735
|
if (!initiallySelected) {
|
|
1294
1736
|
const firstItem = this.segmentItems()[0];
|
|
@@ -1298,31 +1740,152 @@ class SegmentedControlComponent {
|
|
|
1298
1740
|
else {
|
|
1299
1741
|
this.selectItem(initiallySelected);
|
|
1300
1742
|
}
|
|
1743
|
+
const observer = new ResizeObserver(() => {
|
|
1744
|
+
this.updateDimensions();
|
|
1745
|
+
});
|
|
1746
|
+
observer.observe(this.elementRef.nativeElement);
|
|
1747
|
+
this.destroyRef.onDestroy(() => observer.disconnect());
|
|
1748
|
+
}
|
|
1749
|
+
constructor() {
|
|
1750
|
+
effect((onCleanup) => {
|
|
1751
|
+
const items = this.segmentItems();
|
|
1752
|
+
const subs = items.map((item) => item.selectionChanged.subscribe(() => {
|
|
1753
|
+
this.selectItem(item);
|
|
1754
|
+
}));
|
|
1755
|
+
// Also update dimensions when items change
|
|
1756
|
+
this.updateDimensions();
|
|
1757
|
+
onCleanup(() => {
|
|
1758
|
+
subs.forEach((sub) => sub.unsubscribe());
|
|
1759
|
+
});
|
|
1760
|
+
});
|
|
1301
1761
|
}
|
|
1302
1762
|
selectItem(selectedItem) {
|
|
1303
1763
|
this.selectedItem.set(selectedItem);
|
|
1304
1764
|
this.selectedIndex.set(this.segmentItems().indexOf(selectedItem));
|
|
1305
1765
|
}
|
|
1306
|
-
|
|
1307
|
-
const
|
|
1308
|
-
if (
|
|
1309
|
-
return
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1766
|
+
updateDimensions() {
|
|
1767
|
+
const refs = this.segmentItemsRefs();
|
|
1768
|
+
if (!refs || refs.length === 0)
|
|
1769
|
+
return;
|
|
1770
|
+
const offsets = refs.map(ref => ref.nativeElement.offsetLeft);
|
|
1771
|
+
const widths = refs.map(ref => ref.nativeElement.offsetWidth);
|
|
1772
|
+
const tops = refs.map(ref => ref.nativeElement.offsetTop);
|
|
1773
|
+
const heights = refs.map(ref => ref.nativeElement.offsetHeight);
|
|
1774
|
+
this.offsets.set(offsets);
|
|
1775
|
+
this.itemWidths.set(widths);
|
|
1776
|
+
this.tops.set(tops);
|
|
1777
|
+
this.heights.set(heights);
|
|
1778
|
+
}
|
|
1779
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSegmentedControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1780
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: StrataSegmentedControlComponent, isStandalone: true, selector: "st-segmented-control", inputs: { fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.st-segmented-control-full-width": "fullWidth()" } }, queries: [{ propertyName: "segmentItems", predicate: StrataSegmentedControlItemComponent, isSignal: true }, { propertyName: "segmentItemsRefs", predicate: StrataSegmentedControlItemComponent, read: ElementRef, isSignal: true }], ngImport: i0, template: "<ng-content select=\"st-segmented-control-item\"></ng-content>\n<div class=\"selection-item\" id=\"selection-indicator\" \n [style.left]=\"this.offset() + 'px'\"\n [style.top]=\"this.indicatorTop() + 'px'\"\n [style.width]=\"this.indicatorWidth() + 'px'\"\n [style.height]=\"this.indicatorHeight() + 'px'\">\n {{ this.selectedItem()?.text() }}\n</div>\n" });
|
|
1317
1781
|
}
|
|
1318
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1782
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSegmentedControlComponent, decorators: [{
|
|
1319
1783
|
type: Component,
|
|
1320
|
-
args: [{ selector: 'st-segmented-control', imports: [],
|
|
1321
|
-
|
|
1784
|
+
args: [{ selector: 'st-segmented-control', imports: [], host: {
|
|
1785
|
+
'[class.st-segmented-control-full-width]': 'fullWidth()',
|
|
1786
|
+
}, template: "<ng-content select=\"st-segmented-control-item\"></ng-content>\n<div class=\"selection-item\" id=\"selection-indicator\" \n [style.left]=\"this.offset() + 'px'\"\n [style.top]=\"this.indicatorTop() + 'px'\"\n [style.width]=\"this.indicatorWidth() + 'px'\"\n [style.height]=\"this.indicatorHeight() + 'px'\">\n {{ this.selectedItem()?.text() }}\n</div>\n" }]
|
|
1787
|
+
}], ctorParameters: () => [], propDecorators: { fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], segmentItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataSegmentedControlItemComponent), { isSignal: true }] }], segmentItemsRefs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataSegmentedControlItemComponent), { ...{
|
|
1322
1788
|
read: ElementRef,
|
|
1323
1789
|
}, isSignal: true }] }] } });
|
|
1324
1790
|
|
|
1325
|
-
class
|
|
1791
|
+
class StrataSidemenuComponent {
|
|
1792
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSidemenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1793
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: StrataSidemenuComponent, isStandalone: true, selector: "st-sidemenu", ngImport: i0, template: "<div class=\"st-sidemenu-header\">\n <ng-content select=\"[st-sidemenu-header]\"></ng-content>\n</div>\n<div class=\"st-sidemenu-content\">\n <ng-content></ng-content>\n</div>\n<div class=\"st-sidemenu-footer\">\n <ng-content select=\"[st-sidemenu-footer]\"></ng-content>\n</div>\n", styles: [":host{--st-sidemenu-min-width: 200px;--st-sidemenu-padding: var(--st-size-xs, 12px);--st-sidemenu-header-spacing: var(--st-size-sm, 16px);--st-sidemenu-footer-spacing: var(--st-size-sm, 16px);--st-sidemenu-bg: var(--st-color-bg-default);display:flex;flex-direction:column;height:100%;width:max-content;min-width:var(--st-sidemenu-min-width);box-sizing:border-box;background-color:var(--st-sidemenu-bg)}:host .st-sidemenu-header{display:flex;flex-direction:column;margin-bottom:var(--st-sidemenu-header-spacing)}:host .st-sidemenu-header:empty{display:none;margin-bottom:0}:host .st-sidemenu-content{display:flex;flex-direction:column;flex:1;overflow-y:auto;padding:var(--st-sidemenu-padding)}:host .st-sidemenu-footer{display:flex;flex-direction:column;margin-top:auto;padding-top:var(--st-sidemenu-footer-spacing)}:host .st-sidemenu-footer:empty{display:none;padding-top:0}\n"] });
|
|
1794
|
+
}
|
|
1795
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSidemenuComponent, decorators: [{
|
|
1796
|
+
type: Component,
|
|
1797
|
+
args: [{ selector: 'st-sidemenu', template: "<div class=\"st-sidemenu-header\">\n <ng-content select=\"[st-sidemenu-header]\"></ng-content>\n</div>\n<div class=\"st-sidemenu-content\">\n <ng-content></ng-content>\n</div>\n<div class=\"st-sidemenu-footer\">\n <ng-content select=\"[st-sidemenu-footer]\"></ng-content>\n</div>\n", styles: [":host{--st-sidemenu-min-width: 200px;--st-sidemenu-padding: var(--st-size-xs, 12px);--st-sidemenu-header-spacing: var(--st-size-sm, 16px);--st-sidemenu-footer-spacing: var(--st-size-sm, 16px);--st-sidemenu-bg: var(--st-color-bg-default);display:flex;flex-direction:column;height:100%;width:max-content;min-width:var(--st-sidemenu-min-width);box-sizing:border-box;background-color:var(--st-sidemenu-bg)}:host .st-sidemenu-header{display:flex;flex-direction:column;margin-bottom:var(--st-sidemenu-header-spacing)}:host .st-sidemenu-header:empty{display:none;margin-bottom:0}:host .st-sidemenu-content{display:flex;flex-direction:column;flex:1;overflow-y:auto;padding:var(--st-sidemenu-padding)}:host .st-sidemenu-footer{display:flex;flex-direction:column;margin-top:auto;padding-top:var(--st-sidemenu-footer-spacing)}:host .st-sidemenu-footer:empty{display:none;padding-top:0}\n"] }]
|
|
1798
|
+
}] });
|
|
1799
|
+
|
|
1800
|
+
class StrataSidemenuSectionComponent {
|
|
1801
|
+
label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
|
|
1802
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSidemenuSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1803
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataSidemenuSectionComponent, isStandalone: true, selector: "st-sidemenu-section", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (label()) {\n<p class=\"st-sidemenu-section-header st-label\">{{ label() }}</p>\n}\n<div class=\"st-sidemenu-section-content\">\n <ng-content></ng-content>\n</div>", styles: [":host{--st-sidemenu-section-spacing: var(--st-size-sm, 16px);--st-sidemenu-section-header-padding: var(--st-size-xxs, 8px) var(--st-size-xs, 12px);--st-sidemenu-section-header-spacing: var(--st-size-xxxs, 4px);--st-sidemenu-section-gap: var(--st-size-xxxs, 4px);display:flex;flex-direction:column;width:100%;margin-block-end:var(--st-sidemenu-section-spacing)}.st-sidemenu-section-header{padding:var(--st-sidemenu-section-header-padding);margin-block-end:var(--st-sidemenu-section-header-spacing)}.st-sidemenu-section-content{display:flex;flex-direction:column;gap:var(--st-sidemenu-section-gap)}\n"] });
|
|
1804
|
+
}
|
|
1805
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSidemenuSectionComponent, decorators: [{
|
|
1806
|
+
type: Component,
|
|
1807
|
+
args: [{ selector: 'st-sidemenu-section', template: "@if (label()) {\n<p class=\"st-sidemenu-section-header st-label\">{{ label() }}</p>\n}\n<div class=\"st-sidemenu-section-content\">\n <ng-content></ng-content>\n</div>", styles: [":host{--st-sidemenu-section-spacing: var(--st-size-sm, 16px);--st-sidemenu-section-header-padding: var(--st-size-xxs, 8px) var(--st-size-xs, 12px);--st-sidemenu-section-header-spacing: var(--st-size-xxxs, 4px);--st-sidemenu-section-gap: var(--st-size-xxxs, 4px);display:flex;flex-direction:column;width:100%;margin-block-end:var(--st-sidemenu-section-spacing)}.st-sidemenu-section-header{padding:var(--st-sidemenu-section-header-padding);margin-block-end:var(--st-sidemenu-section-header-spacing)}.st-sidemenu-section-content{display:flex;flex-direction:column;gap:var(--st-sidemenu-section-gap)}\n"] }]
|
|
1808
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
|
|
1809
|
+
|
|
1810
|
+
class StrataSidemenuItemDirective {
|
|
1811
|
+
active = input(false, ...(ngDevMode ? [{ debugName: "active" }] : []));
|
|
1812
|
+
elementRef = inject(ElementRef);
|
|
1813
|
+
constructor() {
|
|
1814
|
+
effect(() => {
|
|
1815
|
+
if (this.active()) {
|
|
1816
|
+
this.elementRef.nativeElement.scrollIntoView({
|
|
1817
|
+
block: 'nearest',
|
|
1818
|
+
inline: 'nearest',
|
|
1819
|
+
});
|
|
1820
|
+
}
|
|
1821
|
+
});
|
|
1822
|
+
}
|
|
1823
|
+
isSidemenuItem = true;
|
|
1824
|
+
get isSelected() {
|
|
1825
|
+
return this.active();
|
|
1826
|
+
}
|
|
1827
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSidemenuItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1828
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: StrataSidemenuItemDirective, isStandalone: true, selector: "[stSidemenuItem]", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.st-sidemenu-item": "this.isSidemenuItem", "class.selected": "this.isSelected" } }, ngImport: i0 });
|
|
1829
|
+
}
|
|
1830
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSidemenuItemDirective, decorators: [{
|
|
1831
|
+
type: Directive,
|
|
1832
|
+
args: [{
|
|
1833
|
+
selector: '[stSidemenuItem]'
|
|
1834
|
+
}]
|
|
1835
|
+
}], ctorParameters: () => [], propDecorators: { active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], isSidemenuItem: [{
|
|
1836
|
+
type: HostBinding,
|
|
1837
|
+
args: ['class.st-sidemenu-item']
|
|
1838
|
+
}], isSelected: [{
|
|
1839
|
+
type: HostBinding,
|
|
1840
|
+
args: ['class.selected']
|
|
1841
|
+
}] } });
|
|
1842
|
+
|
|
1843
|
+
class StrataSidemenuItemGroupComponent {
|
|
1844
|
+
label = input.required(...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
1845
|
+
expanded = signal(false, ...(ngDevMode ? [{ debugName: "expanded" }] : []));
|
|
1846
|
+
hasActiveChild = signal(false, ...(ngDevMode ? [{ debugName: "hasActiveChild" }] : []));
|
|
1847
|
+
router = inject(Router, { optional: true });
|
|
1848
|
+
destroyRef = inject(DestroyRef);
|
|
1849
|
+
routerLinks;
|
|
1850
|
+
ngAfterContentInit() {
|
|
1851
|
+
setTimeout(() => {
|
|
1852
|
+
this.checkActiveState();
|
|
1853
|
+
});
|
|
1854
|
+
if (this.router) {
|
|
1855
|
+
this.router.events
|
|
1856
|
+
.pipe(filter((e) => e instanceof NavigationEnd), takeUntilDestroyed(this.destroyRef))
|
|
1857
|
+
.subscribe(() => {
|
|
1858
|
+
// Wait a tick for RouterLinkActive to update its isActive status
|
|
1859
|
+
setTimeout(() => {
|
|
1860
|
+
this.checkActiveState();
|
|
1861
|
+
});
|
|
1862
|
+
});
|
|
1863
|
+
}
|
|
1864
|
+
}
|
|
1865
|
+
toggle() {
|
|
1866
|
+
this.expanded.update((e) => !e);
|
|
1867
|
+
}
|
|
1868
|
+
checkActiveState() {
|
|
1869
|
+
if (!this.routerLinks)
|
|
1870
|
+
return;
|
|
1871
|
+
const isActive = this.routerLinks.some((rla) => rla.isActive);
|
|
1872
|
+
this.hasActiveChild.set(isActive);
|
|
1873
|
+
if (isActive) {
|
|
1874
|
+
this.expanded.set(true);
|
|
1875
|
+
}
|
|
1876
|
+
}
|
|
1877
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSidemenuItemGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1878
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: StrataSidemenuItemGroupComponent, isStandalone: true, selector: "st-sidemenu-item-group", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null } }, queries: [{ propertyName: "routerLinks", predicate: RouterLinkActive, descendants: true }], ngImport: i0, template: "<button stSidemenuItem type=\"button\" [active]=\"hasActiveChild()\" (click)=\"toggle()\">\n <span class=\"st-sidemenu-item-group-label\">{{ label() }}</span>\n <st-icon name=\"arrow-down\" size=\"sm\" class=\"st-sidemenu-item-group-icon\" [class.expanded]=\"expanded()\"></st-icon>\n</button>\n\n<div class=\"st-sidemenu-item-group-content\" [hidden]=\"!expanded()\">\n <ng-content></ng-content>\n</div>\n", styles: [":host{--st-sidemenu-item-group-gap: var(--st-size-xxxs, 4px);--st-sidemenu-item-group-indent: var(--st-size-sm, 16px);--st-sidemenu-item-group-spacing: var(--st-size-xxxs, 4px);display:flex;flex-direction:column;width:100%}.st-sidemenu-item-group-icon{margin-left:auto;color:var(--st-color-text-secondary);transition:transform .2s ease}.st-sidemenu-item-group-icon.expanded{transform:rotate(180deg)}.st-sidemenu-item-group-content{display:flex;flex-direction:column;gap:var(--st-sidemenu-item-group-gap);padding-left:var(--st-sidemenu-item-group-indent);margin-top:var(--st-sidemenu-item-group-spacing)}.st-sidemenu-item-group-content[hidden]{display:none!important}\n"], dependencies: [{ kind: "directive", type: StrataSidemenuItemDirective, selector: "[stSidemenuItem]", inputs: ["active"] }, { kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size"], outputs: ["sizeChange"] }] });
|
|
1879
|
+
}
|
|
1880
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSidemenuItemGroupComponent, decorators: [{
|
|
1881
|
+
type: Component,
|
|
1882
|
+
args: [{ selector: 'st-sidemenu-item-group', imports: [StrataSidemenuItemDirective, StrataIconComponent], template: "<button stSidemenuItem type=\"button\" [active]=\"hasActiveChild()\" (click)=\"toggle()\">\n <span class=\"st-sidemenu-item-group-label\">{{ label() }}</span>\n <st-icon name=\"arrow-down\" size=\"sm\" class=\"st-sidemenu-item-group-icon\" [class.expanded]=\"expanded()\"></st-icon>\n</button>\n\n<div class=\"st-sidemenu-item-group-content\" [hidden]=\"!expanded()\">\n <ng-content></ng-content>\n</div>\n", styles: [":host{--st-sidemenu-item-group-gap: var(--st-size-xxxs, 4px);--st-sidemenu-item-group-indent: var(--st-size-sm, 16px);--st-sidemenu-item-group-spacing: var(--st-size-xxxs, 4px);display:flex;flex-direction:column;width:100%}.st-sidemenu-item-group-icon{margin-left:auto;color:var(--st-color-text-secondary);transition:transform .2s ease}.st-sidemenu-item-group-icon.expanded{transform:rotate(180deg)}.st-sidemenu-item-group-content{display:flex;flex-direction:column;gap:var(--st-sidemenu-item-group-gap);padding-left:var(--st-sidemenu-item-group-indent);margin-top:var(--st-sidemenu-item-group-spacing)}.st-sidemenu-item-group-content[hidden]{display:none!important}\n"] }]
|
|
1883
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], routerLinks: [{
|
|
1884
|
+
type: ContentChildren,
|
|
1885
|
+
args: [RouterLinkActive, { descendants: true }]
|
|
1886
|
+
}] } });
|
|
1887
|
+
|
|
1888
|
+
class StrataSliderComponent {
|
|
1326
1889
|
wrapper = viewChild.required('wrapper');
|
|
1327
1890
|
resizeObserver;
|
|
1328
1891
|
value = model(...(ngDevMode ? [undefined, { debugName: "value" }] : []));
|
|
@@ -1367,23 +1930,23 @@ class SliderComponent {
|
|
|
1367
1930
|
const size = styles.getPropertyValue('--st-slider-thumb-size');
|
|
1368
1931
|
return parseFloat(size);
|
|
1369
1932
|
}
|
|
1370
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1371
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type:
|
|
1933
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1934
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: StrataSliderComponent, isStandalone: true, selector: "st-slider", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, minimum: { classPropertyName: "minimum", publicName: "minimum", isSignal: true, isRequired: true, transformFunction: null }, maximum: { classPropertyName: "maximum", publicName: "maximum", isSignal: true, isRequired: true, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, viewQueries: [{ propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n #wrapper\n class=\"range-wrapper\"\n [style.--steps]=\"steps()\"\n [class.stepped]=\"isStepped()\"\n>\n <input\n type=\"range\"\n [(ngModel)]=\"value\"\n [min]=\"minimum()\"\n [max]=\"maximum()\"\n [step]=\"computedStep()\"\n />\n</div>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
1372
1935
|
}
|
|
1373
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1936
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSliderComponent, decorators: [{
|
|
1374
1937
|
type: Component,
|
|
1375
1938
|
args: [{ selector: 'st-slider', imports: [FormsModule], template: "<div\n #wrapper\n class=\"range-wrapper\"\n [style.--steps]=\"steps()\"\n [class.stepped]=\"isStepped()\"\n>\n <input\n type=\"range\"\n [(ngModel)]=\"value\"\n [min]=\"minimum()\"\n [max]=\"maximum()\"\n [step]=\"computedStep()\"\n />\n</div>\n" }]
|
|
1376
1939
|
}], propDecorators: { wrapper: [{ type: i0.ViewChild, args: ['wrapper', { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], minimum: [{ type: i0.Input, args: [{ isSignal: true, alias: "minimum", required: true }] }], maximum: [{ type: i0.Input, args: [{ isSignal: true, alias: "maximum", required: true }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }] } });
|
|
1377
1940
|
|
|
1378
|
-
class
|
|
1941
|
+
class StrataSpinnerComponent {
|
|
1379
1942
|
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
1380
1943
|
get cssClasses() {
|
|
1381
1944
|
return [this.size()];
|
|
1382
1945
|
}
|
|
1383
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1384
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type:
|
|
1946
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1947
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: StrataSpinnerComponent, isStandalone: true, selector: "st-spinner", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.cssClasses" } }, ngImport: i0, template: "<span class=\"st-spinner\"></span>\n" });
|
|
1385
1948
|
}
|
|
1386
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1949
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataSpinnerComponent, decorators: [{
|
|
1387
1950
|
type: Component,
|
|
1388
1951
|
args: [{ selector: 'st-spinner', imports: [], template: "<span class=\"st-spinner\"></span>\n" }]
|
|
1389
1952
|
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], cssClasses: [{
|
|
@@ -1391,23 +1954,151 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1391
1954
|
args: ['class']
|
|
1392
1955
|
}] } });
|
|
1393
1956
|
|
|
1394
|
-
class
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1957
|
+
class StrataTabItemComponent {
|
|
1958
|
+
/**
|
|
1959
|
+
* The text label for the tab.
|
|
1960
|
+
* Can also be provided via content projection.
|
|
1961
|
+
*/
|
|
1962
|
+
text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
|
|
1963
|
+
/**
|
|
1964
|
+
* Whether the tab is currently selected.
|
|
1965
|
+
*/
|
|
1966
|
+
selected = model(false, ...(ngDevMode ? [{ debugName: "selected" }] : []));
|
|
1967
|
+
/**
|
|
1968
|
+
* Whether the tab is disabled.
|
|
1969
|
+
*/
|
|
1970
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
1971
|
+
/**
|
|
1972
|
+
* Emitted when the tab is clicked.
|
|
1973
|
+
*/
|
|
1974
|
+
selectionChanged = output();
|
|
1975
|
+
get isSelected() {
|
|
1976
|
+
return this.selected();
|
|
1977
|
+
}
|
|
1978
|
+
get isDisabled() {
|
|
1979
|
+
return this.disabled();
|
|
1980
|
+
}
|
|
1981
|
+
get tabIndex() {
|
|
1982
|
+
return this.selected() || this.disabled() ? null : 0;
|
|
1983
|
+
}
|
|
1984
|
+
get activeClass() {
|
|
1985
|
+
return this.selected();
|
|
1986
|
+
}
|
|
1987
|
+
get disabledClass() {
|
|
1988
|
+
return this.disabled();
|
|
1989
|
+
}
|
|
1990
|
+
onClick() {
|
|
1991
|
+
if (this.disabled()) {
|
|
1992
|
+
return;
|
|
1993
|
+
}
|
|
1994
|
+
this.selected.set(true);
|
|
1995
|
+
this.selectionChanged.emit();
|
|
1398
1996
|
}
|
|
1399
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1400
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
1997
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataTabItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1998
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataTabItemComponent, isStandalone: true, selector: "st-tab-item", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selectedChange", selectionChanged: "selectionChanged" }, host: { attributes: { "role": "tab" }, listeners: { "click": "onClick()" }, properties: { "attr.aria-selected": "this.isSelected", "attr.aria-disabled": "this.isDisabled", "attr.tabindex": "this.tabIndex", "class.active": "this.activeClass", "class.disabled": "this.disabledClass" } }, ngImport: i0, template: "@if (text()) {\n {{ text() }}\n} @else {\n <ng-content></ng-content>\n}\n" });
|
|
1401
1999
|
}
|
|
1402
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
2000
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataTabItemComponent, decorators: [{
|
|
1403
2001
|
type: Component,
|
|
1404
|
-
args: [{ selector: 'st-
|
|
1405
|
-
|
|
2002
|
+
args: [{ selector: 'st-tab-item', imports: [], host: {
|
|
2003
|
+
'role': 'tab',
|
|
2004
|
+
'(click)': 'onClick()',
|
|
2005
|
+
}, template: "@if (text()) {\n {{ text() }}\n} @else {\n <ng-content></ng-content>\n}\n" }]
|
|
2006
|
+
}], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }, { type: i0.Output, args: ["selectedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], selectionChanged: [{ type: i0.Output, args: ["selectionChanged"] }], isSelected: [{
|
|
1406
2007
|
type: HostBinding,
|
|
1407
|
-
args: ['
|
|
2008
|
+
args: ['attr.aria-selected']
|
|
2009
|
+
}], isDisabled: [{
|
|
2010
|
+
type: HostBinding,
|
|
2011
|
+
args: ['attr.aria-disabled']
|
|
2012
|
+
}], tabIndex: [{
|
|
2013
|
+
type: HostBinding,
|
|
2014
|
+
args: ['attr.tabindex']
|
|
2015
|
+
}], activeClass: [{
|
|
2016
|
+
type: HostBinding,
|
|
2017
|
+
args: ['class.active']
|
|
2018
|
+
}], disabledClass: [{
|
|
2019
|
+
type: HostBinding,
|
|
2020
|
+
args: ['class.disabled']
|
|
1408
2021
|
}] } });
|
|
1409
2022
|
|
|
1410
|
-
class
|
|
2023
|
+
class StrataTabsComponent {
|
|
2024
|
+
tabItems = contentChildren(StrataTabItemComponent, { ...(ngDevMode ? { debugName: "tabItems" } : {}), descendants: true });
|
|
2025
|
+
tabItemsRefs = contentChildren(StrataTabItemComponent, { ...(ngDevMode ? { debugName: "tabItemsRefs" } : {}), descendants: true,
|
|
2026
|
+
read: ElementRef });
|
|
2027
|
+
indicator = viewChild('indicator', ...(ngDevMode ? [{ debugName: "indicator" }] : []));
|
|
2028
|
+
selectedTab = signal(null, ...(ngDevMode ? [{ debugName: "selectedTab" }] : []));
|
|
2029
|
+
selectedIndex = signal(0, ...(ngDevMode ? [{ debugName: "selectedIndex" }] : []));
|
|
2030
|
+
resizeObserver;
|
|
2031
|
+
constructor() {
|
|
2032
|
+
// Coordinate child selection
|
|
2033
|
+
effect((onCleanup) => {
|
|
2034
|
+
const items = this.tabItems();
|
|
2035
|
+
const subs = items.map((item, index) => item.selectionChanged.subscribe(() => {
|
|
2036
|
+
this.selectTab(item, index);
|
|
2037
|
+
}));
|
|
2038
|
+
onCleanup(() => {
|
|
2039
|
+
subs.forEach((sub) => sub.unsubscribe());
|
|
2040
|
+
});
|
|
2041
|
+
});
|
|
2042
|
+
// Handle responsive indicator updates
|
|
2043
|
+
effect((onCleanup) => {
|
|
2044
|
+
const indicatorEl = this.indicator()?.nativeElement;
|
|
2045
|
+
const refs = this.tabItemsRefs();
|
|
2046
|
+
const index = this.selectedIndex();
|
|
2047
|
+
if (!indicatorEl || refs.length === 0 || index < 0)
|
|
2048
|
+
return;
|
|
2049
|
+
const activeRef = refs[index].nativeElement;
|
|
2050
|
+
// Update immediately
|
|
2051
|
+
this.updateIndicator(activeRef, indicatorEl);
|
|
2052
|
+
// And on every resize of the active tab
|
|
2053
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
2054
|
+
this.updateIndicator(activeRef, indicatorEl);
|
|
2055
|
+
});
|
|
2056
|
+
this.resizeObserver.observe(activeRef);
|
|
2057
|
+
onCleanup(() => this.resizeObserver?.disconnect());
|
|
2058
|
+
});
|
|
2059
|
+
}
|
|
2060
|
+
ngAfterViewInit() {
|
|
2061
|
+
// Set initial selection
|
|
2062
|
+
const items = this.tabItems();
|
|
2063
|
+
if (items.length > 0) {
|
|
2064
|
+
const initiallySelected = items.find((item) => item.selected());
|
|
2065
|
+
if (initiallySelected) {
|
|
2066
|
+
this.selectTab(initiallySelected, items.indexOf(initiallySelected));
|
|
2067
|
+
}
|
|
2068
|
+
else {
|
|
2069
|
+
this.selectTab(items[0], 0);
|
|
2070
|
+
}
|
|
2071
|
+
}
|
|
2072
|
+
}
|
|
2073
|
+
updateIndicator(activeElement, indicatorElement) {
|
|
2074
|
+
indicatorElement.style.width = `${activeElement.offsetWidth}px`;
|
|
2075
|
+
indicatorElement.style.left = `${activeElement.offsetLeft}px`;
|
|
2076
|
+
}
|
|
2077
|
+
selectTab(tab, index) {
|
|
2078
|
+
// Unselect others
|
|
2079
|
+
this.tabItems().forEach((item) => {
|
|
2080
|
+
if (item !== tab) {
|
|
2081
|
+
item.selected.set(false);
|
|
2082
|
+
}
|
|
2083
|
+
});
|
|
2084
|
+
tab.selected.set(true);
|
|
2085
|
+
this.selectedTab.set(tab);
|
|
2086
|
+
this.selectedIndex.set(index);
|
|
2087
|
+
}
|
|
2088
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2089
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: StrataTabsComponent, isStandalone: true, selector: "st-tabs", host: { classAttribute: "st-tabs-host" }, queries: [{ propertyName: "tabItems", predicate: StrataTabItemComponent, descendants: true, isSignal: true }, { propertyName: "tabItemsRefs", predicate: StrataTabItemComponent, descendants: true, read: ElementRef, isSignal: true }], viewQueries: [{ propertyName: "indicator", first: true, predicate: ["indicator"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"tabs-container\" role=\"tablist\">\n <ng-content></ng-content>\n <div #indicator class=\"selection-indicator\"></div>\n</div>\n" });
|
|
2090
|
+
}
|
|
2091
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataTabsComponent, decorators: [{
|
|
2092
|
+
type: Component,
|
|
2093
|
+
args: [{ selector: 'st-tabs', imports: [], host: {
|
|
2094
|
+
'class': 'st-tabs-host',
|
|
2095
|
+
}, template: "<div class=\"tabs-container\" role=\"tablist\">\n <ng-content></ng-content>\n <div #indicator class=\"selection-indicator\"></div>\n</div>\n" }]
|
|
2096
|
+
}], ctorParameters: () => [], propDecorators: { tabItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataTabItemComponent), { ...{ descendants: true }, isSignal: true }] }], tabItemsRefs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => StrataTabItemComponent), { ...{
|
|
2097
|
+
descendants: true,
|
|
2098
|
+
read: ElementRef,
|
|
2099
|
+
}, isSignal: true }] }], indicator: [{ type: i0.ViewChild, args: ['indicator', { isSignal: true }] }] } });
|
|
2100
|
+
|
|
2101
|
+
class StrataThemeDirective {
|
|
1411
2102
|
element = inject(ElementRef);
|
|
1412
2103
|
stTheme = input.required(...(ngDevMode ? [{ debugName: "stTheme" }] : []));
|
|
1413
2104
|
constructor() {
|
|
@@ -1423,57 +2114,31 @@ class ThemeDirective {
|
|
|
1423
2114
|
el.classList.add(`st-theme-${theme}`);
|
|
1424
2115
|
});
|
|
1425
2116
|
}
|
|
1426
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1427
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type:
|
|
2117
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataThemeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2118
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: StrataThemeDirective, isStandalone: true, selector: "[stTheme]", inputs: { stTheme: { classPropertyName: "stTheme", publicName: "stTheme", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
|
|
1428
2119
|
}
|
|
1429
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
2120
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataThemeDirective, decorators: [{
|
|
1430
2121
|
type: Directive,
|
|
1431
2122
|
args: [{
|
|
1432
2123
|
selector: '[stTheme]',
|
|
1433
|
-
standalone: true,
|
|
1434
2124
|
}]
|
|
1435
2125
|
}], ctorParameters: () => [], propDecorators: { stTheme: [{ type: i0.Input, args: [{ isSignal: true, alias: "stTheme", required: true }] }] } });
|
|
1436
2126
|
|
|
1437
|
-
class Stack {
|
|
1438
|
-
items = [];
|
|
1439
|
-
push(item) {
|
|
1440
|
-
this.items.push(item);
|
|
1441
|
-
}
|
|
1442
|
-
pop() {
|
|
1443
|
-
const lastItem = this.items.pop();
|
|
1444
|
-
if (lastItem === undefined) {
|
|
1445
|
-
throw new Error();
|
|
1446
|
-
}
|
|
1447
|
-
return lastItem;
|
|
1448
|
-
}
|
|
1449
|
-
peek() {
|
|
1450
|
-
return this.items[this.items.length - 1];
|
|
1451
|
-
}
|
|
1452
|
-
empty() {
|
|
1453
|
-
return this.items.length === 0;
|
|
1454
|
-
}
|
|
1455
|
-
size() {
|
|
1456
|
-
return this.items.length;
|
|
1457
|
-
}
|
|
1458
|
-
}
|
|
1459
|
-
|
|
1460
2127
|
class ModalService {
|
|
1461
|
-
|
|
1462
|
-
|
|
2128
|
+
_modals = signal([], ...(ngDevMode ? [{ debugName: "_modals" }] : []));
|
|
2129
|
+
modals = this._modals.asReadonly();
|
|
1463
2130
|
showModal(config) {
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
});
|
|
1469
|
-
this.currentModals.next(this.stack);
|
|
2131
|
+
if (!config.size) {
|
|
2132
|
+
config.size = 'md';
|
|
2133
|
+
}
|
|
2134
|
+
this._modals.update((prev) => [...prev, config]);
|
|
1470
2135
|
}
|
|
1471
2136
|
showAlert(config, callback) {
|
|
1472
2137
|
this.showModal({
|
|
1473
|
-
component:
|
|
2138
|
+
component: StrataAlertContentComponent,
|
|
1474
2139
|
size: 'xs',
|
|
1475
2140
|
hideCloseButton: true,
|
|
1476
|
-
onModalClosed: callback,
|
|
2141
|
+
onModalClosed: (val) => callback(val),
|
|
1477
2142
|
disableBackdropClosure: true,
|
|
1478
2143
|
inputs: {
|
|
1479
2144
|
title: config.title,
|
|
@@ -1486,10 +2151,26 @@ class ModalService {
|
|
|
1486
2151
|
});
|
|
1487
2152
|
}
|
|
1488
2153
|
closeCurrentModal(value) {
|
|
1489
|
-
const
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
2154
|
+
const currentStack = this._modals();
|
|
2155
|
+
if (currentStack.length === 0) {
|
|
2156
|
+
return;
|
|
2157
|
+
}
|
|
2158
|
+
const modalToClose = currentStack[currentStack.length - 1];
|
|
2159
|
+
this.close(modalToClose, value);
|
|
2160
|
+
}
|
|
2161
|
+
close(config, value) {
|
|
2162
|
+
const currentStack = this._modals();
|
|
2163
|
+
const index = currentStack.lastIndexOf(config);
|
|
2164
|
+
if (index === -1) {
|
|
2165
|
+
return;
|
|
2166
|
+
}
|
|
2167
|
+
this._modals.update((prev) => {
|
|
2168
|
+
const next = [...prev];
|
|
2169
|
+
next.splice(index, 1);
|
|
2170
|
+
return next;
|
|
2171
|
+
});
|
|
2172
|
+
if (config.onModalClosed) {
|
|
2173
|
+
config.onModalClosed(value);
|
|
1493
2174
|
}
|
|
1494
2175
|
}
|
|
1495
2176
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -1502,7 +2183,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1502
2183
|
}]
|
|
1503
2184
|
}] });
|
|
1504
2185
|
|
|
1505
|
-
class
|
|
2186
|
+
class StrataAlertContentComponent {
|
|
1506
2187
|
modalService;
|
|
1507
2188
|
title = input.required(...(ngDevMode ? [{ debugName: "title" }] : []));
|
|
1508
2189
|
message = input(...(ngDevMode ? [undefined, { debugName: "message" }] : []));
|
|
@@ -1522,15 +2203,24 @@ class AlertContentComponent {
|
|
|
1522
2203
|
onCancel() {
|
|
1523
2204
|
this.modalService.closeCurrentModal(false);
|
|
1524
2205
|
}
|
|
1525
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1526
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
2206
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAlertContentComponent, deps: [{ token: ModalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2207
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataAlertContentComponent, isStandalone: true, selector: "st-alert-content", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, affirmativeButton: { classPropertyName: "affirmativeButton", publicName: "affirmativeButton", isSignal: true, isRequired: true, transformFunction: null }, cancelButton: { classPropertyName: "cancelButton", publicName: "cancelButton", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"alert-content\">\n @if (icon() !== undefined) {\n <st-avatar size=\"lg\" [stTheme]=\"theme()\">\n <st-icon [name]=\"computedIcon()\"></st-icon>\n </st-avatar>\n }\n\n <p class=\"alert-title\">{{ title() }}</p>\n @if (message()) {\n <p class=\"alert-message\">{{ message() }}</p>\n }\n</div>\n<st-button-group justification=\"expand\">\n @if (cancelButton()) {\n <button stButton (click)=\"onCancel()\">{{ cancelButton() }}</button>\n }\n <button stButton [stTheme]=\"theme()\" variant=\"primary\" (click)=\"onAffirmation()\">{{ affirmativeButton() }}</button>\n</st-button-group>\n", dependencies: [{ kind: "component", type: StrataAvatarComponent, selector: "st-avatar", inputs: ["text", "size"], outputs: ["sizeChange"] }, { kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size"], outputs: ["sizeChange"] }, { kind: "directive", type: StrataThemeDirective, selector: "[stTheme]", inputs: ["stTheme"] }, { kind: "component", type: StrataButtonGroupComponent, selector: "st-button-group", inputs: ["justification"] }, { kind: "directive", type: StrataButtonDirective, selector: "[stButton]", inputs: ["variant", "size", "fullWidth"] }] });
|
|
1527
2208
|
}
|
|
1528
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
2209
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataAlertContentComponent, decorators: [{
|
|
1529
2210
|
type: Component,
|
|
1530
|
-
args: [{ selector: 'st-alert-content', imports: [
|
|
2211
|
+
args: [{ selector: 'st-alert-content', imports: [
|
|
2212
|
+
StrataAvatarComponent,
|
|
2213
|
+
StrataIconComponent,
|
|
2214
|
+
StrataThemeDirective,
|
|
2215
|
+
StrataButtonGroupComponent,
|
|
2216
|
+
StrataButtonDirective,
|
|
2217
|
+
], template: "<div class=\"alert-content\">\n @if (icon() !== undefined) {\n <st-avatar size=\"lg\" [stTheme]=\"theme()\">\n <st-icon [name]=\"computedIcon()\"></st-icon>\n </st-avatar>\n }\n\n <p class=\"alert-title\">{{ title() }}</p>\n @if (message()) {\n <p class=\"alert-message\">{{ message() }}</p>\n }\n</div>\n<st-button-group justification=\"expand\">\n @if (cancelButton()) {\n <button stButton (click)=\"onCancel()\">{{ cancelButton() }}</button>\n }\n <button stButton [stTheme]=\"theme()\" variant=\"primary\" (click)=\"onAffirmation()\">{{ affirmativeButton() }}</button>\n</st-button-group>\n" }]
|
|
1531
2218
|
}], ctorParameters: () => [{ type: ModalService }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], affirmativeButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "affirmativeButton", required: true }] }], cancelButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "cancelButton", required: false }] }] } });
|
|
1532
2219
|
|
|
1533
|
-
class
|
|
2220
|
+
class StrataModalRef {
|
|
2221
|
+
}
|
|
2222
|
+
|
|
2223
|
+
class StrataModalHeaderComponent {
|
|
1534
2224
|
modalService = inject(ModalService);
|
|
1535
2225
|
title = input(null, ...(ngDevMode ? [{ debugName: "title" }] : []));
|
|
1536
2226
|
showCloseButton = input(true, ...(ngDevMode ? [{ debugName: "showCloseButton" }] : []));
|
|
@@ -1538,15 +2228,17 @@ class ModalHeaderComponent {
|
|
|
1538
2228
|
this.modalService.closeCurrentModal();
|
|
1539
2229
|
event.stopPropagation();
|
|
1540
2230
|
}
|
|
1541
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1542
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
2231
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataModalHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2232
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataModalHeaderComponent, isStandalone: true, selector: "st-modal-header", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (title()) {\n<span class=\"st-body-l-bold\">{{ title() }}</span>\n}\n@if (showCloseButton()) {\n<button stButton (click)=\"onCloseButtonClicked($event)\" variant=\"ghost\">\n <st-icon name=\"close\" size=\"sm\"></st-icon>\n</button>\n}", dependencies: [{ kind: "directive", type: StrataButtonDirective, selector: "[stButton]", inputs: ["variant", "size", "fullWidth"] }, { kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size"], outputs: ["sizeChange"] }] });
|
|
1543
2233
|
}
|
|
1544
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
2234
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataModalHeaderComponent, decorators: [{
|
|
1545
2235
|
type: Component,
|
|
1546
|
-
args: [{ selector: 'st-modal-header', imports: [
|
|
2236
|
+
args: [{ selector: 'st-modal-header', imports: [StrataButtonDirective, StrataIconComponent], template: "@if (title()) {\n<span class=\"st-body-l-bold\">{{ title() }}</span>\n}\n@if (showCloseButton()) {\n<button stButton (click)=\"onCloseButtonClicked($event)\" variant=\"ghost\">\n <st-icon name=\"close\" size=\"sm\"></st-icon>\n</button>\n}" }]
|
|
1547
2237
|
}], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], showCloseButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCloseButton", required: false }] }] } });
|
|
1548
2238
|
|
|
1549
|
-
class
|
|
2239
|
+
class StrataModalComponent {
|
|
2240
|
+
modalService = inject(ModalService);
|
|
2241
|
+
injector = inject(Injector);
|
|
1550
2242
|
modalContents = viewChild.required('modalBody', {
|
|
1551
2243
|
read: ViewContainerRef,
|
|
1552
2244
|
});
|
|
@@ -1559,7 +2251,16 @@ class ModalComponent {
|
|
|
1559
2251
|
if (this.size() === undefined) {
|
|
1560
2252
|
this.size.set('md');
|
|
1561
2253
|
}
|
|
1562
|
-
const
|
|
2254
|
+
const modalRef = {
|
|
2255
|
+
close: (value) => this.modalService.close(this.configuration(), value),
|
|
2256
|
+
};
|
|
2257
|
+
const customInjector = Injector.create({
|
|
2258
|
+
providers: [{ provide: StrataModalRef, useValue: modalRef }],
|
|
2259
|
+
parent: this.injector,
|
|
2260
|
+
});
|
|
2261
|
+
const injectedComponent = this.modalContents().createComponent(this.configuration().component, {
|
|
2262
|
+
injector: customInjector,
|
|
2263
|
+
});
|
|
1563
2264
|
if (this.configuration().inputs) {
|
|
1564
2265
|
this.setInputsOnInjectedComponent(injectedComponent, this.configuration().inputs);
|
|
1565
2266
|
}
|
|
@@ -1572,12 +2273,12 @@ class ModalComponent {
|
|
|
1572
2273
|
onCardClick(event) {
|
|
1573
2274
|
event.stopPropagation();
|
|
1574
2275
|
}
|
|
1575
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1576
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
2276
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2277
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataModalComponent, isStandalone: true, selector: "st-modal", inputs: { configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { size: "sizeChange" }, host: { properties: { "class": "this.sizeClass" } }, viewQueries: [{ propertyName: "modalContents", first: true, predicate: ["modalBody"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "@if (configuration().title || !configuration().hideCloseButton) {\n <st-modal-header\n [title]=\"configuration().title\"\n [showCloseButton]=\"configuration().hideCloseButton === true ? false : true\"\n (click)=\"onCardClick($event)\"></st-modal-header>\n}\n\n<div class=\"modal-content\">\n <ng-template #modalBody></ng-template>\n</div>\n", dependencies: [{ kind: "component", type: StrataModalHeaderComponent, selector: "st-modal-header", inputs: ["title", "showCloseButton"] }] });
|
|
1577
2278
|
}
|
|
1578
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
2279
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataModalComponent, decorators: [{
|
|
1579
2280
|
type: Component,
|
|
1580
|
-
args: [{ selector: 'st-modal', imports: [
|
|
2281
|
+
args: [{ selector: 'st-modal', imports: [StrataModalHeaderComponent], template: "@if (configuration().title || !configuration().hideCloseButton) {\n <st-modal-header\n [title]=\"configuration().title\"\n [showCloseButton]=\"configuration().hideCloseButton === true ? false : true\"\n (click)=\"onCardClick($event)\"></st-modal-header>\n}\n\n<div class=\"modal-content\">\n <ng-template #modalBody></ng-template>\n</div>\n" }]
|
|
1581
2282
|
}], propDecorators: { modalContents: [{ type: i0.ViewChild, args: ['modalBody', { ...{
|
|
1582
2283
|
read: ViewContainerRef,
|
|
1583
2284
|
}, isSignal: true }] }], configuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "configuration", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }, { type: i0.Output, args: ["sizeChange"] }], sizeClass: [{
|
|
@@ -1585,38 +2286,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1585
2286
|
args: ['class']
|
|
1586
2287
|
}] } });
|
|
1587
2288
|
|
|
1588
|
-
class
|
|
2289
|
+
class StrataModalContainerComponent {
|
|
1589
2290
|
modalService;
|
|
1590
|
-
injectedComponent;
|
|
1591
|
-
currentModal = null;
|
|
1592
|
-
stack = new Stack();
|
|
1593
|
-
subscription;
|
|
1594
2291
|
constructor(modalService) {
|
|
1595
2292
|
this.modalService = modalService;
|
|
1596
|
-
this.subscription = this.modalService['currentModals'].asObservable().subscribe((modalStack) => {
|
|
1597
|
-
this.stack = modalStack;
|
|
1598
|
-
});
|
|
1599
|
-
}
|
|
1600
|
-
ngOnDestroy() {
|
|
1601
|
-
this.subscription.unsubscribe();
|
|
1602
2293
|
}
|
|
1603
2294
|
onBackdropClick(event) {
|
|
1604
2295
|
event.stopPropagation();
|
|
1605
|
-
const
|
|
1606
|
-
|
|
2296
|
+
const modals = this.modalService.modals();
|
|
2297
|
+
const currentModal = modals[modals.length - 1];
|
|
2298
|
+
if (!currentModal || currentModal.disableBackdropClosure) {
|
|
1607
2299
|
return;
|
|
1608
2300
|
}
|
|
1609
2301
|
this.modalService.closeCurrentModal();
|
|
1610
2302
|
}
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
}
|
|
1614
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ModalContainerComponent, deps: [{ token: ModalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1615
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ModalContainerComponent, isStandalone: true, selector: "st-modal-container", ngImport: i0, template: "<div class=\"modal-wrapper\">\n @for (modal of stack.items; track modal.id; let last = $last) {\n <st-modal [ngClass]=\"{ 'hidden-under-other-modal': !last }\" [configuration]=\"modal\" [size]=\"modal.size\"> </st-modal>\n }\n</div>\n@if (!stack.empty()) {\n <div class=\"st-internal-backdrop active\" (click)=\"onBackdropClick($event)\"></div>\n}\n", dependencies: [{ kind: "component", type: ModalComponent, selector: "st-modal", inputs: ["configuration", "size"], outputs: ["sizeChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
2303
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataModalContainerComponent, deps: [{ token: ModalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2304
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataModalContainerComponent, isStandalone: true, selector: "st-modal-container", ngImport: i0, template: "<div class=\"modal-wrapper\">\n @for (modal of modalService.modals(); track modal; let last = $last) {\n <st-modal [ngClass]=\"{ 'hidden-under-other-modal': !last }\" [configuration]=\"modal\" [size]=\"modal.size\"> </st-modal>\n }\n</div>\n@if (modalService.modals().length > 0) {\n <div class=\"st-internal-backdrop active\" (click)=\"onBackdropClick($event)\"></div>\n}\n", dependencies: [{ kind: "component", type: StrataModalComponent, selector: "st-modal", inputs: ["configuration", "size"], outputs: ["sizeChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
1616
2305
|
}
|
|
1617
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
2306
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataModalContainerComponent, decorators: [{
|
|
1618
2307
|
type: Component,
|
|
1619
|
-
args: [{ selector: 'st-modal-container', imports: [
|
|
2308
|
+
args: [{ selector: 'st-modal-container', imports: [StrataModalComponent, CommonModule], template: "<div class=\"modal-wrapper\">\n @for (modal of modalService.modals(); track modal; let last = $last) {\n <st-modal [ngClass]=\"{ 'hidden-under-other-modal': !last }\" [configuration]=\"modal\" [size]=\"modal.size\"> </st-modal>\n }\n</div>\n@if (modalService.modals().length > 0) {\n <div class=\"st-internal-backdrop active\" (click)=\"onBackdropClick($event)\"></div>\n}\n" }]
|
|
1620
2309
|
}], ctorParameters: () => [{ type: ModalService }] });
|
|
1621
2310
|
|
|
1622
2311
|
const DEFAULT_THEME = 'info';
|
|
@@ -1628,14 +2317,16 @@ class NotificationService {
|
|
|
1628
2317
|
const newNotificationId = crypto.randomUUID();
|
|
1629
2318
|
const duration = config.duration ?? DEFAULT_DURATION;
|
|
1630
2319
|
const currentStack = this.notificationStack();
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
2320
|
+
this.notificationStack.set([
|
|
2321
|
+
...currentStack,
|
|
2322
|
+
{
|
|
2323
|
+
id: newNotificationId,
|
|
2324
|
+
message: config.message,
|
|
2325
|
+
duration: duration,
|
|
2326
|
+
theme: config.theme ?? DEFAULT_THEME,
|
|
2327
|
+
icon: config.icon,
|
|
2328
|
+
}
|
|
2329
|
+
]);
|
|
1639
2330
|
this.hideNotification(newNotificationId, duration);
|
|
1640
2331
|
}
|
|
1641
2332
|
hideNotification(notificationId, duration) {
|
|
@@ -1654,34 +2345,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1654
2345
|
}]
|
|
1655
2346
|
}] });
|
|
1656
2347
|
|
|
1657
|
-
class
|
|
2348
|
+
class StrataNotificationComponent {
|
|
1658
2349
|
icon;
|
|
1659
2350
|
message;
|
|
1660
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1661
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
2351
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2352
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataNotificationComponent, isStandalone: true, selector: "st-notification", inputs: { icon: "icon", message: "message" }, ngImport: i0, template: "@if (icon) {\n <st-icon [name]=\"icon\"></st-icon>\n}\n{{ message }}\n", dependencies: [{ kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size"], outputs: ["sizeChange"] }] });
|
|
1662
2353
|
}
|
|
1663
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
2354
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataNotificationComponent, decorators: [{
|
|
1664
2355
|
type: Component,
|
|
1665
|
-
args: [{ selector: 'st-notification', imports: [
|
|
2356
|
+
args: [{ selector: 'st-notification', imports: [StrataIconComponent], template: "@if (icon) {\n <st-icon [name]=\"icon\"></st-icon>\n}\n{{ message }}\n" }]
|
|
1666
2357
|
}], propDecorators: { icon: [{
|
|
1667
2358
|
type: Input
|
|
1668
2359
|
}], message: [{
|
|
1669
2360
|
type: Input
|
|
1670
2361
|
}] } });
|
|
1671
2362
|
|
|
1672
|
-
class
|
|
2363
|
+
class StrataNotificationContainerComponent {
|
|
1673
2364
|
notificationService = inject(NotificationService);
|
|
1674
2365
|
notifications = this.notificationService.notificationStack;
|
|
1675
|
-
|
|
1676
|
-
static
|
|
1677
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: NotificationContainerComponent, isStandalone: true, selector: "st-notification-container", ngImport: i0, template: "@for (notification of notifications(); track notification.id) {\n <st-notification [icon]=\"notification.icon\" [message]=\"notification.message\" [stTheme]=\"notification.theme ?? 'info'\">\n </st-notification>\n}\n", dependencies: [{ kind: "component", type: NotificationComponent, selector: "st-notification", inputs: ["icon", "message"] }, { kind: "directive", type: ThemeDirective, selector: "[stTheme]", inputs: ["stTheme"] }] });
|
|
2366
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataNotificationContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2367
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataNotificationContainerComponent, isStandalone: true, selector: "st-notification-container", ngImport: i0, template: "@for (notification of notifications(); track notification.id) {\n <st-notification [icon]=\"notification.icon\" [message]=\"notification.message\" [stTheme]=\"notification.theme ?? 'info'\">\n </st-notification>\n}\n", dependencies: [{ kind: "component", type: StrataNotificationComponent, selector: "st-notification", inputs: ["icon", "message"] }, { kind: "directive", type: StrataThemeDirective, selector: "[stTheme]", inputs: ["stTheme"] }] });
|
|
1678
2368
|
}
|
|
1679
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
2369
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataNotificationContainerComponent, decorators: [{
|
|
1680
2370
|
type: Component,
|
|
1681
|
-
args: [{ selector: 'st-notification-container', imports: [
|
|
1682
|
-
}]
|
|
2371
|
+
args: [{ selector: 'st-notification-container', imports: [StrataNotificationComponent, StrataThemeDirective], template: "@for (notification of notifications(); track notification.id) {\n <st-notification [icon]=\"notification.icon\" [message]=\"notification.message\" [stTheme]=\"notification.theme ?? 'info'\">\n </st-notification>\n}\n" }]
|
|
2372
|
+
}] });
|
|
1683
2373
|
|
|
1684
|
-
class
|
|
2374
|
+
class StrataNumberDisplayComponent {
|
|
1685
2375
|
locale = inject(LOCALE_ID);
|
|
1686
2376
|
value = input.required(...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
1687
2377
|
decimals = input(2, ...(ngDevMode ? [{ debugName: "decimals" }] : []));
|
|
@@ -1700,14 +2390,39 @@ class NumberDisplayComponent {
|
|
|
1700
2390
|
showPlus = input(false, ...(ngDevMode ? [{ debugName: "showPlus" }] : []));
|
|
1701
2391
|
deemphasizeDecimals = input(true, ...(ngDevMode ? [{ debugName: "deemphasizeDecimals" }] : []));
|
|
1702
2392
|
decimalPoint = computed(() => getLocaleNumberSymbol(this.locale, NumberSymbol.Decimal), ...(ngDevMode ? [{ debugName: "decimalPoint" }] : []));
|
|
1703
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
1704
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
2393
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataNumberDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2394
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataNumberDisplayComponent, isStandalone: true, selector: "st-number-display", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, decimals: { classPropertyName: "decimals", publicName: "decimals", isSignal: true, isRequired: false, transformFunction: null }, changedValue: { classPropertyName: "changedValue", publicName: "changedValue", isSignal: true, isRequired: false, transformFunction: null }, showPlus: { classPropertyName: "showPlus", publicName: "showPlus", isSignal: true, isRequired: false, transformFunction: null }, deemphasizeDecimals: { classPropertyName: "deemphasizeDecimals", publicName: "deemphasizeDecimals", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<p\n [ngClass]=\"{\n positive: changedValue() && value() > 0,\n negative: changedValue() && value() < 0,\n }\"\n>\n @if (showPlus() && this.value() > 0) {\n +\n }\n <span class=\"integer-value\">{{ separatedDigits().integer }}</span>\n @if (separatedDigits().decimals) {\n <span\n class=\"decimal-number\"\n [ngClass]=\"{ deemphasize: deemphasizeDecimals }\"\n >{{ decimalPoint() }}{{ separatedDigits().decimals }}</span\n >\n }\n</p>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
1705
2395
|
}
|
|
1706
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
2396
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataNumberDisplayComponent, decorators: [{
|
|
1707
2397
|
type: Component,
|
|
1708
2398
|
args: [{ selector: 'st-number-display', imports: [CommonModule], template: "<p\n [ngClass]=\"{\n positive: changedValue() && value() > 0,\n negative: changedValue() && value() < 0,\n }\"\n>\n @if (showPlus() && this.value() > 0) {\n +\n }\n <span class=\"integer-value\">{{ separatedDigits().integer }}</span>\n @if (separatedDigits().decimals) {\n <span\n class=\"decimal-number\"\n [ngClass]=\"{ deemphasize: deemphasizeDecimals }\"\n >{{ decimalPoint() }}{{ separatedDigits().decimals }}</span\n >\n }\n</p>\n" }]
|
|
1709
2399
|
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], decimals: [{ type: i0.Input, args: [{ isSignal: true, alias: "decimals", required: false }] }], changedValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "changedValue", required: false }] }], showPlus: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPlus", required: false }] }], deemphasizeDecimals: [{ type: i0.Input, args: [{ isSignal: true, alias: "deemphasizeDecimals", required: false }] }] } });
|
|
1710
2400
|
|
|
2401
|
+
class StrataShellComponent {
|
|
2402
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2403
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: StrataShellComponent, isStandalone: true, selector: "st-shell", ngImport: i0, template: "<st-notification-container></st-notification-container>\n<st-modal-container></st-modal-container>\n<ng-content></ng-content>", dependencies: [{ kind: "component", type: StrataModalContainerComponent, selector: "st-modal-container" }, { kind: "component", type: StrataNotificationContainerComponent, selector: "st-notification-container" }] });
|
|
2404
|
+
}
|
|
2405
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataShellComponent, decorators: [{
|
|
2406
|
+
type: Component,
|
|
2407
|
+
args: [{ selector: 'st-shell', imports: [StrataModalContainerComponent, StrataNotificationContainerComponent], template: "<st-notification-container></st-notification-container>\n<st-modal-container></st-modal-container>\n<ng-content></ng-content>" }]
|
|
2408
|
+
}] });
|
|
2409
|
+
|
|
2410
|
+
class StrataMessageStateComponent {
|
|
2411
|
+
header = input.required(...(ngDevMode ? [{ debugName: "header" }] : []));
|
|
2412
|
+
subtitle = input(undefined, ...(ngDevMode ? [{ debugName: "subtitle" }] : []));
|
|
2413
|
+
primaryActionText = input(undefined, ...(ngDevMode ? [{ debugName: "primaryActionText" }] : []));
|
|
2414
|
+
primaryActionTheme = input(undefined, ...(ngDevMode ? [{ debugName: "primaryActionTheme" }] : []));
|
|
2415
|
+
secondaryActionText = input(undefined, ...(ngDevMode ? [{ debugName: "secondaryActionText" }] : []));
|
|
2416
|
+
primaryAction = output();
|
|
2417
|
+
secondaryAction = output();
|
|
2418
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataMessageStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2419
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: StrataMessageStateComponent, isStandalone: true, selector: "st-message-state", inputs: { header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: true, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, primaryActionText: { classPropertyName: "primaryActionText", publicName: "primaryActionText", isSignal: true, isRequired: false, transformFunction: null }, primaryActionTheme: { classPropertyName: "primaryActionTheme", publicName: "primaryActionTheme", isSignal: true, isRequired: false, transformFunction: null }, secondaryActionText: { classPropertyName: "secondaryActionText", publicName: "secondaryActionText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { primaryAction: "primaryAction", secondaryAction: "secondaryAction" }, ngImport: i0, template: "<div class=\"st-message-state-graphic\">\n <ng-content></ng-content>\n</div>\n\n<st-text-stack>\n <h3 class=\"st-message-state-header\">{{ header() }}</h3>\n @if (subtitle()) {\n <p class=\"st-message-state-subtitle\">{{ subtitle() }}</p>\n }\n</st-text-stack>\n\n@if (primaryActionText() || secondaryActionText()) {\n <div class=\"st-message-state-actions\">\n @if (secondaryActionText()) {\n <button \n stButton \n variant=\"secondary\" \n (click)=\"secondaryAction.emit()\">\n {{ secondaryActionText() }}\n </button>\n }\n @if (primaryActionText()) {\n <button \n stButton \n variant=\"primary\" \n [stTheme]=\"primaryActionTheme() || 'default'\" \n (click)=\"primaryAction.emit()\">\n {{ primaryActionText() }}\n </button>\n }\n </div>\n}\n", styles: [":host{--st-message-state-align-items: center;--st-message-state-text-align: center;--st-message-state-gap: var(--st-size-lg, 32px);--st-message-state-content-gap: var(--st-size-xxs, 8px);--st-message-state-actions-gap: var(--st-size-sm, 16px);--st-message-state-padding: var(--st-size-lg, 32px);display:flex;flex-direction:column;align-items:var(--st-message-state-align-items);text-align:var(--st-message-state-text-align);gap:var(--st-message-state-gap);padding:var(--st-message-state-padding);width:100%;box-sizing:border-box}.st-message-state-graphic{display:flex;justify-content:center;align-items:center}.st-message-state-content{display:flex;flex-direction:column;align-items:var(--st-message-state-align-items);gap:var(--st-message-state-content-gap);width:100%}.st-message-state-header{color:var(--st-color-text-primary);margin:0}.st-message-state-subtitle{color:var(--st-color-text-secondary);margin:0}.st-message-state-actions{display:flex;justify-content:center;gap:var(--st-message-state-actions-gap)}\n"], dependencies: [{ kind: "component", type: StrataTextStackComponent, selector: "st-text-stack", inputs: ["overflow"] }, { kind: "directive", type: StrataButtonDirective, selector: "[stButton]", inputs: ["variant", "size", "fullWidth"] }, { kind: "directive", type: StrataThemeDirective, selector: "[stTheme]", inputs: ["stTheme"] }] });
|
|
2420
|
+
}
|
|
2421
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: StrataMessageStateComponent, decorators: [{
|
|
2422
|
+
type: Component,
|
|
2423
|
+
args: [{ selector: 'st-message-state', imports: [StrataTextStackComponent, StrataButtonDirective, StrataThemeDirective], template: "<div class=\"st-message-state-graphic\">\n <ng-content></ng-content>\n</div>\n\n<st-text-stack>\n <h3 class=\"st-message-state-header\">{{ header() }}</h3>\n @if (subtitle()) {\n <p class=\"st-message-state-subtitle\">{{ subtitle() }}</p>\n }\n</st-text-stack>\n\n@if (primaryActionText() || secondaryActionText()) {\n <div class=\"st-message-state-actions\">\n @if (secondaryActionText()) {\n <button \n stButton \n variant=\"secondary\" \n (click)=\"secondaryAction.emit()\">\n {{ secondaryActionText() }}\n </button>\n }\n @if (primaryActionText()) {\n <button \n stButton \n variant=\"primary\" \n [stTheme]=\"primaryActionTheme() || 'default'\" \n (click)=\"primaryAction.emit()\">\n {{ primaryActionText() }}\n </button>\n }\n </div>\n}\n", styles: [":host{--st-message-state-align-items: center;--st-message-state-text-align: center;--st-message-state-gap: var(--st-size-lg, 32px);--st-message-state-content-gap: var(--st-size-xxs, 8px);--st-message-state-actions-gap: var(--st-size-sm, 16px);--st-message-state-padding: var(--st-size-lg, 32px);display:flex;flex-direction:column;align-items:var(--st-message-state-align-items);text-align:var(--st-message-state-text-align);gap:var(--st-message-state-gap);padding:var(--st-message-state-padding);width:100%;box-sizing:border-box}.st-message-state-graphic{display:flex;justify-content:center;align-items:center}.st-message-state-content{display:flex;flex-direction:column;align-items:var(--st-message-state-align-items);gap:var(--st-message-state-content-gap);width:100%}.st-message-state-header{color:var(--st-color-text-primary);margin:0}.st-message-state-subtitle{color:var(--st-color-text-secondary);margin:0}.st-message-state-actions{display:flex;justify-content:center;gap:var(--st-message-state-actions-gap)}\n"] }]
|
|
2424
|
+
}], propDecorators: { header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: true }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], primaryActionText: [{ type: i0.Input, args: [{ isSignal: true, alias: "primaryActionText", required: false }] }], primaryActionTheme: [{ type: i0.Input, args: [{ isSignal: true, alias: "primaryActionTheme", required: false }] }], secondaryActionText: [{ type: i0.Input, args: [{ isSignal: true, alias: "secondaryActionText", required: false }] }], primaryAction: [{ type: i0.Output, args: ["primaryAction"] }], secondaryAction: [{ type: i0.Output, args: ["secondaryAction"] }] } });
|
|
2425
|
+
|
|
1711
2426
|
/*
|
|
1712
2427
|
* Public API Surface of ngx-strata
|
|
1713
2428
|
*/
|
|
@@ -1716,5 +2431,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1716
2431
|
* Generated bundle index. Do not edit.
|
|
1717
2432
|
*/
|
|
1718
2433
|
|
|
1719
|
-
export {
|
|
2434
|
+
export { CapitalizePipe, DEFAULT_DURATION, DEFAULT_THEME, DarkmodeService, HotkeyService, HttpIconLoader, IconLoader, IconRegistry, IconRegistryService, ModalService, NotificationService, STRATA_CONFIG, StrataAccordionGroupComponent, StrataAccordionItemComponent, StrataActionMenuComponent, StrataActionMenuItemComponent, StrataActivatableDirective, StrataAlertComponent, StrataAlertContentComponent, StrataAutoResizeDirective, StrataAvatarComponent, StrataAvatarStackComponent, StrataBreadcrumbComponent, StrataBreadcrumbItemComponent, StrataButtonDirective, StrataButtonGroupComponent, StrataCardComponent, StrataCheckboxComponent, StrataDividerComponent, StrataIconComponent, StrataInputFieldComponent, StrataItemComponent, StrataItemListComponent, StrataKbdComponent, StrataMessageStateComponent, StrataModalComponent, StrataModalContainerComponent, StrataModalHeaderComponent, StrataModalRef, StrataNativeInputRefDirective, StrataNotificationComponent, StrataNotificationContainerComponent, StrataNumberDisplayComponent, StrataOverlayDirective, StrataPaginationComponent, StrataProgressLinearComponent, StrataProgressRadialComponent, StrataRadioComponent, StrataRadioGroupComponent, StrataSegmentedControlComponent, StrataSegmentedControlItemComponent, StrataSelectItemComponent, StrataSelectTriggerDirective, StrataShellComponent, StrataSidemenuComponent, StrataSidemenuItemDirective, StrataSidemenuItemGroupComponent, StrataSidemenuSectionComponent, StrataSingleSelectComponent, StrataSliderComponent, StrataSpinnerComponent, StrataTabItemComponent, StrataTabsComponent, StrataTagComponent, StrataTextStackComponent, StrataThemeDirective, StrataToggleComponent, StrataTooltipDirective, provideBaseIcons, provideIcons, provideStrata };
|
|
1720
2435
|
//# sourceMappingURL=ngx-strata.mjs.map
|