ngx-strata 0.2.2 → 0.2.4
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/components/modal.scss +8 -8
- package/assets/styles/components/select.scss +17 -7
- package/dist/strata/strata.css +1 -1
- package/fesm2022/ngx-strata.mjs +99 -76
- package/fesm2022/ngx-strata.mjs.map +1 -1
- package/package.json +1 -1
- package/skills/ngx-strata/SKILL.md +63 -47
- package/skills/ngx-strata/components/shell.md +2 -2
- package/types/ngx-strata.d.ts +4 -1
package/fesm2022/ngx-strata.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ElementRef, input, model, output, computed, Directive, Injectable, provideAppInitializer, makeEnvironmentProviders,
|
|
3
|
-
import { computePosition, offset, arrow, autoUpdate, flip, shift } from '@floating-ui/dom';
|
|
2
|
+
import { inject, ElementRef, input, model, output, computed, Directive, Injectable, provideAppInitializer, makeEnvironmentProviders, DOCUMENT, signal, effect, InjectionToken, provideEnvironmentInitializer, Renderer2, Input, DestroyRef, HostListener, Component, contentChild, HostBinding, ViewContainerRef, viewChild, contentChildren, TemplateRef, Pipe, booleanAttribute, ContentChildren, Injector, LOCALE_ID } from '@angular/core';
|
|
3
|
+
import { computePosition, offset, arrow, autoUpdate, flip, shift, size } from '@floating-ui/dom';
|
|
4
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';
|
|
@@ -175,6 +175,73 @@ function provideIconRegistry() {
|
|
|
175
175
|
};
|
|
176
176
|
}
|
|
177
177
|
|
|
178
|
+
class DarkmodeService {
|
|
179
|
+
STORAGE_KEY = 'strata-darkmode';
|
|
180
|
+
document = inject(DOCUMENT);
|
|
181
|
+
osPrefersDark;
|
|
182
|
+
setting = signal('SYSTEM', /* @ts-ignore */
|
|
183
|
+
...(ngDevMode ? [{ debugName: "setting" }] : /* istanbul ignore next */ []));
|
|
184
|
+
darkmode = signal('LIGHT', /* @ts-ignore */
|
|
185
|
+
...(ngDevMode ? [{ debugName: "darkmode" }] : /* istanbul ignore next */ []));
|
|
186
|
+
currentMode = computed(() => this.darkmode(), /* @ts-ignore */
|
|
187
|
+
...(ngDevMode ? [{ debugName: "currentMode" }] : /* istanbul ignore next */ []));
|
|
188
|
+
currentSetting = computed(() => this.setting(), /* @ts-ignore */
|
|
189
|
+
...(ngDevMode ? [{ debugName: "currentSetting" }] : /* istanbul ignore next */ []));
|
|
190
|
+
constructor() {
|
|
191
|
+
effect(() => this.updateDarkmodeTagOnDOM(this.darkmode()));
|
|
192
|
+
this.setting.set(this.getSettingFromStorage());
|
|
193
|
+
this.osPrefersDark = this.getSystemDarkmodePreference();
|
|
194
|
+
this.calculateDarkmode();
|
|
195
|
+
this.saveSettingToStorage(this.setting());
|
|
196
|
+
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (event) => {
|
|
197
|
+
this.osPrefersDark = event.matches;
|
|
198
|
+
if (this.setting() === 'SYSTEM') {
|
|
199
|
+
this.calculateDarkmode();
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
setDarkmodeSetting(newSetting) {
|
|
204
|
+
this.saveSettingToStorage(newSetting);
|
|
205
|
+
return this.calculateDarkmode();
|
|
206
|
+
}
|
|
207
|
+
getSystemDarkmodePreference() {
|
|
208
|
+
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
209
|
+
}
|
|
210
|
+
calculateDarkmode() {
|
|
211
|
+
if (this.setting() === 'SYSTEM') {
|
|
212
|
+
this.darkmode.set(this.osPrefersDark ? 'DARK' : 'LIGHT');
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.darkmode.set(this.setting() === 'DARK' ? 'DARK' : 'LIGHT');
|
|
216
|
+
}
|
|
217
|
+
return this.darkmode();
|
|
218
|
+
}
|
|
219
|
+
updateDarkmodeTagOnDOM(mode) {
|
|
220
|
+
const documentNode = this.document.getElementsByTagName('html')[0];
|
|
221
|
+
if (mode === 'DARK') {
|
|
222
|
+
documentNode.setAttribute('data-theme', 'dark');
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
documentNode.setAttribute('data-theme', 'light');
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
saveSettingToStorage(newSetting) {
|
|
229
|
+
localStorage.setItem(this.STORAGE_KEY, newSetting);
|
|
230
|
+
this.setting.set(newSetting);
|
|
231
|
+
}
|
|
232
|
+
getSettingFromStorage() {
|
|
233
|
+
return localStorage.getItem(this.STORAGE_KEY) ?? 'SYSTEM';
|
|
234
|
+
}
|
|
235
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DarkmodeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
236
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DarkmodeService, providedIn: 'root' });
|
|
237
|
+
}
|
|
238
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DarkmodeService, decorators: [{
|
|
239
|
+
type: Injectable,
|
|
240
|
+
args: [{
|
|
241
|
+
providedIn: 'root'
|
|
242
|
+
}]
|
|
243
|
+
}], ctorParameters: () => [] });
|
|
244
|
+
|
|
178
245
|
const DEFAULT_CONFIG = {
|
|
179
246
|
includeBaseIcons: true,
|
|
180
247
|
tooltipDelayMs: 500,
|
|
@@ -184,7 +251,8 @@ const DEFAULT_CONFIG = {
|
|
|
184
251
|
ctrl: 'Ctrl',
|
|
185
252
|
shift: 'Shift',
|
|
186
253
|
alt: 'Alt'
|
|
187
|
-
}
|
|
254
|
+
},
|
|
255
|
+
overlayViewportBuffer: 16
|
|
188
256
|
};
|
|
189
257
|
function provideStrata(config = {}) {
|
|
190
258
|
const mergedConfig = {
|
|
@@ -199,6 +267,7 @@ function provideStrata(config = {}) {
|
|
|
199
267
|
provide: STRATA_CONFIG,
|
|
200
268
|
useValue: mergedConfig
|
|
201
269
|
},
|
|
270
|
+
provideEnvironmentInitializer(() => inject(DarkmodeService))
|
|
202
271
|
];
|
|
203
272
|
if (mergedConfig.includeBaseIcons) {
|
|
204
273
|
providers.push(provideBaseIcons());
|
|
@@ -318,73 +387,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
|
|
|
318
387
|
type: Input
|
|
319
388
|
}] } });
|
|
320
389
|
|
|
321
|
-
class DarkmodeService {
|
|
322
|
-
STORAGE_KEY = 'strata-darkmode';
|
|
323
|
-
document = inject(DOCUMENT);
|
|
324
|
-
osPrefersDark;
|
|
325
|
-
setting = signal('SYSTEM', /* @ts-ignore */
|
|
326
|
-
...(ngDevMode ? [{ debugName: "setting" }] : /* istanbul ignore next */ []));
|
|
327
|
-
darkmode = signal('LIGHT', /* @ts-ignore */
|
|
328
|
-
...(ngDevMode ? [{ debugName: "darkmode" }] : /* istanbul ignore next */ []));
|
|
329
|
-
currentMode = computed(() => this.darkmode(), /* @ts-ignore */
|
|
330
|
-
...(ngDevMode ? [{ debugName: "currentMode" }] : /* istanbul ignore next */ []));
|
|
331
|
-
currentSetting = computed(() => this.setting(), /* @ts-ignore */
|
|
332
|
-
...(ngDevMode ? [{ debugName: "currentSetting" }] : /* istanbul ignore next */ []));
|
|
333
|
-
constructor() {
|
|
334
|
-
effect(() => this.updateDarkmodeTagOnDOM(this.darkmode()));
|
|
335
|
-
this.setting.set(this.getSettingFromStorage());
|
|
336
|
-
this.osPrefersDark = this.getSystemDarkmodePreference();
|
|
337
|
-
this.calculateDarkmode();
|
|
338
|
-
this.saveSettingToStorage(this.setting());
|
|
339
|
-
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (event) => {
|
|
340
|
-
this.osPrefersDark = event.matches;
|
|
341
|
-
if (this.setting() === 'SYSTEM') {
|
|
342
|
-
this.calculateDarkmode();
|
|
343
|
-
}
|
|
344
|
-
});
|
|
345
|
-
}
|
|
346
|
-
setDarkmodeSetting(newSetting) {
|
|
347
|
-
this.saveSettingToStorage(newSetting);
|
|
348
|
-
return this.calculateDarkmode();
|
|
349
|
-
}
|
|
350
|
-
getSystemDarkmodePreference() {
|
|
351
|
-
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
352
|
-
}
|
|
353
|
-
calculateDarkmode() {
|
|
354
|
-
if (this.setting() === 'SYSTEM') {
|
|
355
|
-
this.darkmode.set(this.osPrefersDark ? 'DARK' : 'LIGHT');
|
|
356
|
-
}
|
|
357
|
-
else {
|
|
358
|
-
this.darkmode.set(this.setting() === 'DARK' ? 'DARK' : 'LIGHT');
|
|
359
|
-
}
|
|
360
|
-
return this.darkmode();
|
|
361
|
-
}
|
|
362
|
-
updateDarkmodeTagOnDOM(mode) {
|
|
363
|
-
const documentNode = this.document.getElementsByTagName('html')[0];
|
|
364
|
-
if (mode === 'DARK') {
|
|
365
|
-
documentNode.setAttribute('data-theme', 'dark');
|
|
366
|
-
}
|
|
367
|
-
else {
|
|
368
|
-
documentNode.setAttribute('data-theme', 'light');
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
saveSettingToStorage(newSetting) {
|
|
372
|
-
localStorage.setItem(this.STORAGE_KEY, newSetting);
|
|
373
|
-
this.setting.set(newSetting);
|
|
374
|
-
}
|
|
375
|
-
getSettingFromStorage() {
|
|
376
|
-
return localStorage.getItem(this.STORAGE_KEY) ?? 'SYSTEM';
|
|
377
|
-
}
|
|
378
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DarkmodeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
379
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DarkmodeService, providedIn: 'root' });
|
|
380
|
-
}
|
|
381
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: DarkmodeService, decorators: [{
|
|
382
|
-
type: Injectable,
|
|
383
|
-
args: [{
|
|
384
|
-
providedIn: 'root'
|
|
385
|
-
}]
|
|
386
|
-
}], ctorParameters: () => [] });
|
|
387
|
-
|
|
388
390
|
class HotkeyService {
|
|
389
391
|
config = inject(STRATA_CONFIG);
|
|
390
392
|
destroyRef = inject(DestroyRef);
|
|
@@ -724,8 +726,11 @@ class StrataOverlayDirective {
|
|
|
724
726
|
...(ngDevMode ? [{ debugName: "overlayPlacement" }] : /* istanbul ignore next */ []));
|
|
725
727
|
overlayOffset = input(8, /* @ts-ignore */
|
|
726
728
|
...(ngDevMode ? [{ debugName: "overlayOffset" }] : /* istanbul ignore next */ []));
|
|
729
|
+
overlayFitViewport = input(true, /* @ts-ignore */
|
|
730
|
+
...(ngDevMode ? [{ debugName: "overlayFitViewport" }] : /* istanbul ignore next */ []));
|
|
727
731
|
element = inject(ElementRef);
|
|
728
732
|
viewContainerRef = inject(ViewContainerRef);
|
|
733
|
+
config = inject(STRATA_CONFIG, { optional: true });
|
|
729
734
|
overlayEl;
|
|
730
735
|
cleanup;
|
|
731
736
|
viewRef;
|
|
@@ -749,10 +754,28 @@ class StrataOverlayDirective {
|
|
|
749
754
|
async updatePosition() {
|
|
750
755
|
if (!this.overlayEl)
|
|
751
756
|
return;
|
|
757
|
+
const middleware = [
|
|
758
|
+
offset(this.overlayOffset()),
|
|
759
|
+
flip(),
|
|
760
|
+
shift()
|
|
761
|
+
];
|
|
762
|
+
if (this.overlayFitViewport()) {
|
|
763
|
+
const buffer = this.config?.overlayViewportBuffer ?? 16;
|
|
764
|
+
middleware.push(size({
|
|
765
|
+
apply({ availableHeight, elements }) {
|
|
766
|
+
Object.assign(elements.floating.style, {
|
|
767
|
+
maxHeight: `${availableHeight - buffer}px`
|
|
768
|
+
});
|
|
769
|
+
}
|
|
770
|
+
}));
|
|
771
|
+
}
|
|
772
|
+
else {
|
|
773
|
+
this.overlayEl.style.maxHeight = '';
|
|
774
|
+
}
|
|
752
775
|
const { x, y } = await computePosition(this.element.nativeElement, this.overlayEl, {
|
|
753
776
|
placement: this.overlayPlacement(),
|
|
754
777
|
strategy: 'fixed',
|
|
755
|
-
middleware
|
|
778
|
+
middleware
|
|
756
779
|
});
|
|
757
780
|
if (!this.overlayEl)
|
|
758
781
|
return;
|
|
@@ -780,14 +803,14 @@ class StrataOverlayDirective {
|
|
|
780
803
|
this.destroy();
|
|
781
804
|
}
|
|
782
805
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
783
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", 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 });
|
|
806
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.1", 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 }, overlayFitViewport: { classPropertyName: "overlayFitViewport", publicName: "overlayFitViewport", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { overlayOpen: "overlayOpenChange" }, usesOnChanges: true, ngImport: i0 });
|
|
784
807
|
}
|
|
785
808
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataOverlayDirective, decorators: [{
|
|
786
809
|
type: Directive,
|
|
787
810
|
args: [{
|
|
788
811
|
selector: '[stOverlay]'
|
|
789
812
|
}]
|
|
790
|
-
}], 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 }] }] } });
|
|
813
|
+
}], 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 }] }], overlayFitViewport: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayFitViewport", required: false }] }] } });
|
|
791
814
|
|
|
792
815
|
class StrataActionMenuComponent {
|
|
793
816
|
projectedButton = contentChild(StrataButtonDirective, { ...(ngDevMode ? { debugName: "projectedButton" } : /* istanbul ignore next */ {}), descendants: true,
|
|
@@ -825,7 +848,7 @@ class StrataActionMenuComponent {
|
|
|
825
848
|
});
|
|
826
849
|
}
|
|
827
850
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataActionMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
828
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", 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"] }] });
|
|
851
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", 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", "overlayFitViewport"], outputs: ["overlayOpenChange"] }, { kind: "component", type: StrataIconComponent, selector: "st-icon", inputs: ["name", "size"], outputs: ["sizeChange"] }, { kind: "directive", type: StrataButtonDirective, selector: "[stButton]", inputs: ["variant", "size", "fullWidth"] }] });
|
|
829
852
|
}
|
|
830
853
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataActionMenuComponent, decorators: [{
|
|
831
854
|
type: Component,
|
|
@@ -1287,7 +1310,7 @@ class StrataSingleSelectComponent {
|
|
|
1287
1310
|
this.open.set(false);
|
|
1288
1311
|
}
|
|
1289
1312
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataSingleSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1290
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", 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"] }] });
|
|
1313
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.1", 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 <div class=\"single-select-items-container\">\n <ng-content select=\"st-select-item\"></ng-content>\n </div>\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", "overlayFitViewport"], 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"] }] });
|
|
1291
1314
|
}
|
|
1292
1315
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImport: i0, type: StrataSingleSelectComponent, decorators: [{
|
|
1293
1316
|
type: Component,
|
|
@@ -1299,7 +1322,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.1", ngImpor
|
|
|
1299
1322
|
FormsModule,
|
|
1300
1323
|
StrataNativeInputRefDirective,
|
|
1301
1324
|
StrataButtonDirective,
|
|
1302
|
-
], 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>" }]
|
|
1325
|
+
], 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 <div class=\"single-select-items-container\">\n <ng-content select=\"st-select-item\"></ng-content>\n </div>\n </div>\n</ng-template>" }]
|
|
1303
1326
|
}], 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 }] }] } });
|
|
1304
1327
|
|
|
1305
1328
|
class StrataDividerComponent {
|