@ojiepermana/angular-theme 22.0.34 → 22.0.36
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/README.md +38 -19
- package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +6 -6
- package/fesm2022/ojiepermana-angular-theme-layout-wrapper.mjs +51 -35
- package/fesm2022/ojiepermana-angular-theme-layout.mjs +24 -24
- package/fesm2022/ojiepermana-angular-theme-page.mjs +24 -24
- package/fesm2022/ojiepermana-angular-theme-styles.mjs +359 -56
- package/package.json +3 -3
- package/styles/README.md +10 -3
- package/styles/css/{seasonal/base → base}/tailwind.css +9 -5
- package/styles/css/{seasonal/base → base}/theme.css +1 -6
- package/styles/css/{seasonal/base → base}/tokens.css +26 -16
- package/styles/css/color/amber.css +50 -0
- package/styles/css/color/blue.css +50 -0
- package/styles/css/color/brand.css +16 -0
- package/styles/css/color/cyan.css +50 -0
- package/styles/css/color/emerald.css +50 -0
- package/styles/css/color/fuchsia.css +50 -0
- package/styles/css/color/green.css +50 -0
- package/styles/css/color/index.css +19 -0
- package/styles/css/color/indigo.css +50 -0
- package/styles/css/color/lime.css +50 -0
- package/styles/css/color/orange.css +50 -0
- package/styles/css/color/pink.css +50 -0
- package/styles/css/color/purple.css +50 -0
- package/styles/css/color/red.css +50 -0
- package/styles/css/color/rose.css +50 -0
- package/styles/css/color/sky.css +50 -0
- package/styles/css/color/teal.css +50 -0
- package/styles/css/color/violet.css +50 -0
- package/styles/css/color/yellow.css +50 -0
- package/styles/css/index.css +15 -6
- package/styles/css/neutral/gray.css +34 -0
- package/styles/css/neutral/index.css +11 -0
- package/styles/css/neutral/mauve.css +34 -0
- package/styles/css/neutral/mist.css +34 -0
- package/styles/css/neutral/neutral.css +34 -0
- package/styles/css/neutral/olive.css +34 -0
- package/styles/css/neutral/slate.css +34 -0
- package/styles/css/neutral/stone.css +34 -0
- package/styles/css/neutral/taupe.css +34 -0
- package/styles/css/neutral/zinc.css +34 -0
- package/styles/css/radius/index.css +29 -0
- package/styles/css/space/index.css +24 -0
- package/types/ojiepermana-angular-theme-layout-wrapper.d.ts +10 -2
- package/types/ojiepermana-angular-theme-styles.d.ts +168 -37
- package/styles/css/seasonal/ied/package.css +0 -4
- package/styles/css/seasonal/ied/theme.css +0 -78
- package/styles/css/seasonal/imlek/components.css +0 -87
- package/styles/css/seasonal/imlek/package.css +0 -6
- package/styles/css/seasonal/imlek/tailwind.css +0 -144
- package/styles/css/seasonal/imlek/theme.css +0 -95
- package/styles/css/seasonal/imlek/tokens.css +0 -152
- package/styles/css/seasonal/index.css +0 -6
- package/styles/css/seasonal/natal/package.css +0 -4
- package/styles/css/seasonal/natal/theme.css +0 -78
- package/styles/css/seasonal/new-year/package.css +0 -4
- package/styles/css/seasonal/new-year/theme.css +0 -78
- package/styles/css/seasonal/ramadhan/package.css +0 -4
- package/styles/css/seasonal/ramadhan/theme.css +0 -78
- /package/styles/css/{seasonal/base → base}/components.css +0 -0
- /package/styles/css/{seasonal/base → base}/package.css +0 -0
|
@@ -108,10 +108,10 @@ class PageStateService {
|
|
|
108
108
|
this.sideOpenRequestVersionState.update((version) => version + 1);
|
|
109
109
|
return open;
|
|
110
110
|
}
|
|
111
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
112
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
111
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
112
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageStateService });
|
|
113
113
|
}
|
|
114
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageStateService, decorators: [{
|
|
115
115
|
type: Injectable
|
|
116
116
|
}] });
|
|
117
117
|
|
|
@@ -186,10 +186,10 @@ class PageSideComponent {
|
|
|
186
186
|
onCleanup(() => defaultView.removeEventListener('keydown', handler));
|
|
187
187
|
});
|
|
188
188
|
}
|
|
189
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
190
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.
|
|
189
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageSideComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
190
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.3", type: PageSideComponent, isStandalone: true, selector: "PageSide", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, closeOnEsc: { classPropertyName: "closeOnEsc", publicName: "closeOnEsc", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.id": "resolvedId", "attr.data-page-slot": "\"side\"", "attr.data-page-side-mode": "resolvedMode()", "attr.data-page-side-open": "page.sideOpen()", "attr.data-page-position": "resolvedPosition()", "attr.aria-hidden": "ariaHidden()", "style.--page-side-width": "resolvedWidth()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
191
191
|
}
|
|
192
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
192
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageSideComponent, decorators: [{
|
|
193
193
|
type: Component,
|
|
194
194
|
args: [{
|
|
195
195
|
selector: 'PageSide',
|
|
@@ -282,8 +282,8 @@ class PageComponent {
|
|
|
282
282
|
handleBackdropClick() {
|
|
283
283
|
this.page.closeSide();
|
|
284
284
|
}
|
|
285
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
286
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
285
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
286
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.3", type: PageComponent, isStandalone: true, selector: "Page", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, scroll: { classPropertyName: "scroll", publicName: "scroll", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, sideMode: { classPropertyName: "sideMode", publicName: "sideMode", isSignal: true, isRequired: false, transformFunction: null }, sideOpen: { classPropertyName: "sideOpen", publicName: "sideOpen", isSignal: true, isRequired: false, transformFunction: null }, sideWidth: { classPropertyName: "sideWidth", publicName: "sideWidth", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sideOpenChange: "sideOpenChange" }, host: { properties: { "class": "hostClasses()", "attr.data-page-variant": "variant()", "attr.data-page-height": "height()", "attr.data-page-scroll": "scroll()", "attr.data-page-position": "resolvedPosition()", "attr.data-page-side-mode": "resolvedSideMode()", "attr.data-page-side-open": "page.sideOpen()", "style.--page-side-width": "sideWidth()" } }, providers: [PageStateService], queries: [{ propertyName: "projectedSide", first: true, predicate: PageSideComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
287
287
|
@if (showsOverlayBackdrop()) {
|
|
288
288
|
<button
|
|
289
289
|
type="button"
|
|
@@ -309,7 +309,7 @@ class PageComponent {
|
|
|
309
309
|
</div>
|
|
310
310
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
311
311
|
}
|
|
312
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
312
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageComponent, decorators: [{
|
|
313
313
|
type: Component,
|
|
314
314
|
args: [{
|
|
315
315
|
selector: 'Page',
|
|
@@ -367,8 +367,8 @@ class PageSideToggleComponent {
|
|
|
367
367
|
handleClick() {
|
|
368
368
|
this.toggled.emit(this.page.toggleSide());
|
|
369
369
|
}
|
|
370
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
371
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.
|
|
370
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageSideToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
371
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.3", type: PageSideToggleComponent, isStandalone: true, selector: "PageSideToggle", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { toggled: "toggled" }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
|
|
372
372
|
<button
|
|
373
373
|
type="button"
|
|
374
374
|
[class]="buttonClasses()"
|
|
@@ -382,7 +382,7 @@ class PageSideToggleComponent {
|
|
|
382
382
|
</button>
|
|
383
383
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
384
384
|
}
|
|
385
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
385
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageSideToggleComponent, decorators: [{
|
|
386
386
|
type: Component,
|
|
387
387
|
args: [{
|
|
388
388
|
selector: 'PageSideToggle',
|
|
@@ -417,10 +417,10 @@ class PageHeaderComponent {
|
|
|
417
417
|
...(ngDevMode ? [{ debugName: "resolvedHeight" }] : /* istanbul ignore next */ []));
|
|
418
418
|
classes = computed(() => cn('block shrink-0 border-b border-border bg-background', this.class(), this.resolvedHeight() === 'fix' && 'h-12 overflow-hidden'), /* @ts-ignore */
|
|
419
419
|
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
420
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
421
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.
|
|
420
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
421
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.3", type: PageHeaderComponent, isStandalone: true, selector: "PageHeader", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-page-slot": "header" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
422
422
|
}
|
|
423
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
423
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageHeaderComponent, decorators: [{
|
|
424
424
|
type: Component,
|
|
425
425
|
args: [{
|
|
426
426
|
selector: 'PageHeader',
|
|
@@ -440,10 +440,10 @@ class PageContentComponent {
|
|
|
440
440
|
...(ngDevMode ? [{ debugName: "resolvedScroll" }] : /* istanbul ignore next */ []));
|
|
441
441
|
classes = computed(() => buildPageBodyClasses(this.resolvedScroll(), this.class()), /* @ts-ignore */
|
|
442
442
|
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
443
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
444
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.
|
|
443
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
444
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.3", type: PageContentComponent, isStandalone: true, selector: "PageContent", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-page-slot": "content" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
445
445
|
}
|
|
446
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
446
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageContentComponent, decorators: [{
|
|
447
447
|
type: Component,
|
|
448
448
|
args: [{
|
|
449
449
|
selector: 'PageContent',
|
|
@@ -463,10 +463,10 @@ class PageDashboardComponent {
|
|
|
463
463
|
...(ngDevMode ? [{ debugName: "resolvedScroll" }] : /* istanbul ignore next */ []));
|
|
464
464
|
classes = computed(() => buildPageBodyClasses(this.resolvedScroll(), this.class()), /* @ts-ignore */
|
|
465
465
|
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
466
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
467
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.
|
|
466
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageDashboardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
467
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.3", type: PageDashboardComponent, isStandalone: true, selector: "PageDashboard", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-page-slot": "dashboard" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
468
468
|
}
|
|
469
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
469
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageDashboardComponent, decorators: [{
|
|
470
470
|
type: Component,
|
|
471
471
|
args: [{
|
|
472
472
|
selector: 'PageDashboard',
|
|
@@ -486,10 +486,10 @@ class PageFooterComponent {
|
|
|
486
486
|
...(ngDevMode ? [{ debugName: "resolvedHeight" }] : /* istanbul ignore next */ []));
|
|
487
487
|
classes = computed(() => cn('block shrink-0 border-t border-border bg-background', this.class(), this.resolvedHeight() === 'fix' && 'h-12 overflow-hidden'), /* @ts-ignore */
|
|
488
488
|
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
489
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
490
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.
|
|
489
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
490
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.3", type: PageFooterComponent, isStandalone: true, selector: "PageFooter", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-page-slot": "footer" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
491
491
|
}
|
|
492
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
492
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: PageFooterComponent, decorators: [{
|
|
493
493
|
type: Component,
|
|
494
494
|
args: [{
|
|
495
495
|
selector: 'PageFooter',
|
|
@@ -7,25 +7,103 @@ const THEME_OPTIONS = new InjectionToken('THEME_OPTIONS');
|
|
|
7
7
|
|
|
8
8
|
const THEME_MODES = ['light', 'dark', 'system'];
|
|
9
9
|
const RESOLVED_THEME_MODES = ['light', 'dark'];
|
|
10
|
-
|
|
10
|
+
/**
|
|
11
|
+
* FluxUI-style accent palettes (axis `theme-color`). `base` = core theme (no
|
|
12
|
+
* override); `brand` = the consumer's `--brand` color. Others re-tint the full
|
|
13
|
+
* palette. Order mirrors the FluxUI accent picker (base…rose) + `brand`.
|
|
14
|
+
*/
|
|
15
|
+
const THEME_COLORS = [
|
|
16
|
+
'base',
|
|
17
|
+
'red',
|
|
18
|
+
'orange',
|
|
19
|
+
'amber',
|
|
20
|
+
'yellow',
|
|
21
|
+
'lime',
|
|
22
|
+
'green',
|
|
23
|
+
'emerald',
|
|
24
|
+
'teal',
|
|
25
|
+
'cyan',
|
|
26
|
+
'sky',
|
|
27
|
+
'blue',
|
|
28
|
+
'indigo',
|
|
29
|
+
'violet',
|
|
30
|
+
'purple',
|
|
31
|
+
'fuchsia',
|
|
32
|
+
'pink',
|
|
33
|
+
'rose',
|
|
34
|
+
'brand',
|
|
35
|
+
];
|
|
36
|
+
/**
|
|
37
|
+
* Neutral (gray) families (axis `theme-neutral`). `base` = core theme neutrals.
|
|
38
|
+
* Overrides only the gray family, composing with any accent.
|
|
39
|
+
*/
|
|
40
|
+
const THEME_NEUTRALS = [
|
|
41
|
+
'base',
|
|
42
|
+
'slate',
|
|
43
|
+
'gray',
|
|
44
|
+
'zinc',
|
|
45
|
+
'neutral',
|
|
46
|
+
'stone',
|
|
47
|
+
'mauve',
|
|
48
|
+
'olive',
|
|
49
|
+
'mist',
|
|
50
|
+
'taupe',
|
|
51
|
+
];
|
|
52
|
+
/**
|
|
53
|
+
* Corner radius presets (axis `theme-radius`). Each drives the single
|
|
54
|
+
* `--radius-base` knob; the whole `--radius-*` scale + `rounded-*` utilities
|
|
55
|
+
* follow. `md` = the 0.625rem default; `full` is the pill extreme.
|
|
56
|
+
*/
|
|
57
|
+
const THEME_RADII = ['none', 'sm', 'md', 'lg', 'xl', 'full'];
|
|
58
|
+
/**
|
|
59
|
+
* Spacing density presets (axis `theme-space`). Each drives the single
|
|
60
|
+
* `--spacing-base` knob; every `p-*`/`m-*`/`gap-*`/`w-*`/`h-*` utility follows.
|
|
61
|
+
* `normal` = the 0.25rem default (no-op baseline).
|
|
62
|
+
*/
|
|
63
|
+
const THEME_SPACES = ['compact', 'normal', 'relaxed', 'spacious'];
|
|
11
64
|
const DEFAULT_THEME_MODE = 'system';
|
|
12
|
-
const
|
|
65
|
+
const DEFAULT_THEME_COLOR = 'base';
|
|
66
|
+
const DEFAULT_THEME_NEUTRAL = 'base';
|
|
67
|
+
const DEFAULT_THEME_RADIUS = 'md';
|
|
68
|
+
const DEFAULT_THEME_SPACE = 'normal';
|
|
13
69
|
const THEME_MODE_STORAGE_KEY = 'theme-mode';
|
|
14
|
-
const
|
|
70
|
+
const THEME_COLOR_STORAGE_KEY = 'theme-color';
|
|
71
|
+
const THEME_NEUTRAL_STORAGE_KEY = 'theme-neutral';
|
|
72
|
+
const THEME_BRAND_STORAGE_KEY = 'theme-brand';
|
|
73
|
+
const THEME_RADIUS_STORAGE_KEY = 'theme-radius';
|
|
74
|
+
const THEME_SPACE_STORAGE_KEY = 'theme-space';
|
|
15
75
|
function isThemeMode(value) {
|
|
16
76
|
return typeof value === 'string' && THEME_MODES.includes(value);
|
|
17
77
|
}
|
|
18
78
|
function isResolvedThemeMode(value) {
|
|
19
79
|
return typeof value === 'string' && RESOLVED_THEME_MODES.includes(value);
|
|
20
80
|
}
|
|
21
|
-
function
|
|
22
|
-
return typeof value === 'string' &&
|
|
81
|
+
function isThemeColor(value) {
|
|
82
|
+
return typeof value === 'string' && THEME_COLORS.includes(value);
|
|
83
|
+
}
|
|
84
|
+
function isThemeNeutral(value) {
|
|
85
|
+
return typeof value === 'string' && THEME_NEUTRALS.includes(value);
|
|
86
|
+
}
|
|
87
|
+
function isThemeRadius(value) {
|
|
88
|
+
return typeof value === 'string' && THEME_RADII.includes(value);
|
|
89
|
+
}
|
|
90
|
+
function isThemeSpace(value) {
|
|
91
|
+
return typeof value === 'string' && THEME_SPACES.includes(value);
|
|
23
92
|
}
|
|
24
93
|
function normalizeThemeMode(value) {
|
|
25
94
|
return isThemeMode(value) ? value : DEFAULT_THEME_MODE;
|
|
26
95
|
}
|
|
27
|
-
function
|
|
28
|
-
return
|
|
96
|
+
function normalizeThemeColor(value) {
|
|
97
|
+
return isThemeColor(value) ? value : DEFAULT_THEME_COLOR;
|
|
98
|
+
}
|
|
99
|
+
function normalizeThemeNeutral(value) {
|
|
100
|
+
return isThemeNeutral(value) ? value : DEFAULT_THEME_NEUTRAL;
|
|
101
|
+
}
|
|
102
|
+
function normalizeThemeRadius(value) {
|
|
103
|
+
return isThemeRadius(value) ? value : DEFAULT_THEME_RADIUS;
|
|
104
|
+
}
|
|
105
|
+
function normalizeThemeSpace(value) {
|
|
106
|
+
return isThemeSpace(value) ? value : DEFAULT_THEME_SPACE;
|
|
29
107
|
}
|
|
30
108
|
|
|
31
109
|
class ThemeModeService {
|
|
@@ -120,74 +198,177 @@ class ThemeModeService {
|
|
|
120
198
|
return;
|
|
121
199
|
}
|
|
122
200
|
}
|
|
123
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
124
|
-
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.
|
|
201
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: ThemeModeService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
202
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.3", ngImport: i0, type: ThemeModeService });
|
|
125
203
|
}
|
|
126
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
204
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: ThemeModeService, decorators: [{
|
|
127
205
|
type: Service
|
|
128
206
|
}], ctorParameters: () => [] });
|
|
129
207
|
|
|
130
|
-
|
|
208
|
+
const DEFAULT_BRAND_FOREGROUND = '0 0% 100%';
|
|
209
|
+
/**
|
|
210
|
+
* Consumer-configurable brand color. Writes `--brand` / `--brand-foreground` as
|
|
211
|
+
* inline custom properties on `<html>` so `bg-brand` / `text-brand-foreground`
|
|
212
|
+
* and the `theme-color='brand'` accent preset resolve to it.
|
|
213
|
+
*
|
|
214
|
+
* Default comes from `provideUiTheme({ brand })`; `setBrand()` overrides at
|
|
215
|
+
* runtime and persists. When unset, `--brand` falls back to `var(--primary)`.
|
|
216
|
+
*/
|
|
217
|
+
class ThemeBrandService {
|
|
131
218
|
documentRef = inject(DOCUMENT, { optional: true });
|
|
132
219
|
options = inject(THEME_OPTIONS, { optional: true });
|
|
133
|
-
|
|
134
|
-
...(ngDevMode ? [{ debugName: "
|
|
135
|
-
|
|
220
|
+
brandState = signal(null, /* @ts-ignore */
|
|
221
|
+
...(ngDevMode ? [{ debugName: "brandState" }] : /* istanbul ignore next */ []));
|
|
222
|
+
brand = this.brandState.asReadonly();
|
|
136
223
|
constructor() {
|
|
137
224
|
this.ensureDefaults();
|
|
138
225
|
effect(() => {
|
|
139
|
-
const
|
|
140
|
-
this.
|
|
141
|
-
this.
|
|
142
|
-
this.ensureSeasonStylesheet(season);
|
|
226
|
+
const brand = this.brandState();
|
|
227
|
+
this.persist(brand);
|
|
228
|
+
this.applyBrand(brand);
|
|
143
229
|
});
|
|
144
230
|
}
|
|
145
|
-
|
|
146
|
-
|
|
231
|
+
/** Set the brand color. `color`/`foreground` are HSL triplets (e.g. `'221 83% 53%'`). */
|
|
232
|
+
setBrand(color, foreground = DEFAULT_BRAND_FOREGROUND) {
|
|
233
|
+
this.brandState.set({ color, foreground });
|
|
234
|
+
}
|
|
235
|
+
/** Clear the consumer brand → `--brand` falls back to `var(--primary)`. */
|
|
236
|
+
clearBrand() {
|
|
237
|
+
this.brandState.set(null);
|
|
147
238
|
}
|
|
148
239
|
ensureDefaults() {
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
240
|
+
const stored = this.readStoredBrand();
|
|
241
|
+
if (stored) {
|
|
242
|
+
this.brandState.set(stored);
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
const fromOptions = this.normalizeOption(this.options?.brand);
|
|
246
|
+
if (fromOptions) {
|
|
247
|
+
this.brandState.set(fromOptions);
|
|
248
|
+
}
|
|
152
249
|
}
|
|
153
|
-
|
|
154
|
-
|
|
250
|
+
normalizeOption(brand) {
|
|
251
|
+
if (!brand) {
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
if (typeof brand === 'string') {
|
|
255
|
+
return { color: brand, foreground: DEFAULT_BRAND_FOREGROUND };
|
|
256
|
+
}
|
|
257
|
+
return { color: brand.color, foreground: brand.foreground ?? DEFAULT_BRAND_FOREGROUND };
|
|
155
258
|
}
|
|
156
|
-
|
|
259
|
+
applyBrand(brand) {
|
|
157
260
|
const root = this.documentRef?.documentElement;
|
|
158
261
|
if (!root) {
|
|
159
262
|
return;
|
|
160
263
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
* Lazily loads the active season's stylesheet via `<link>` when the app
|
|
165
|
-
* configured `seasonalCssUrl`, so only base CSS ships in the main bundle.
|
|
166
|
-
*/
|
|
167
|
-
ensureSeasonStylesheet(season) {
|
|
168
|
-
const doc = this.documentRef;
|
|
169
|
-
const resolveUrl = this.options?.seasonalCssUrl;
|
|
170
|
-
if (!doc || !resolveUrl) {
|
|
264
|
+
if (!brand) {
|
|
265
|
+
root.style.removeProperty('--brand');
|
|
266
|
+
root.style.removeProperty('--brand-foreground');
|
|
171
267
|
return;
|
|
172
268
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
return;
|
|
269
|
+
root.style.setProperty('--brand', brand.color);
|
|
270
|
+
root.style.setProperty('--brand-foreground', brand.foreground);
|
|
271
|
+
}
|
|
272
|
+
storage() {
|
|
273
|
+
try {
|
|
274
|
+
return this.documentRef?.defaultView?.localStorage ?? null;
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
readStoredBrand() {
|
|
281
|
+
try {
|
|
282
|
+
const raw = this.storage()?.getItem(THEME_BRAND_STORAGE_KEY);
|
|
283
|
+
if (!raw) {
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
286
|
+
const parsed = JSON.parse(raw);
|
|
287
|
+
if (typeof parsed?.color === 'string') {
|
|
288
|
+
return {
|
|
289
|
+
color: parsed.color,
|
|
290
|
+
foreground: typeof parsed.foreground === 'string' ? parsed.foreground : DEFAULT_BRAND_FOREGROUND,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
return null;
|
|
179
294
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
295
|
+
catch {
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
persist(brand) {
|
|
300
|
+
try {
|
|
301
|
+
const storage = this.storage();
|
|
302
|
+
if (!storage) {
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
if (!brand) {
|
|
306
|
+
storage.removeItem(THEME_BRAND_STORAGE_KEY);
|
|
307
|
+
return;
|
|
183
308
|
}
|
|
309
|
+
storage.setItem(THEME_BRAND_STORAGE_KEY, JSON.stringify(brand));
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
184
312
|
return;
|
|
185
313
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
314
|
+
}
|
|
315
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: ThemeBrandService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
316
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.3", ngImport: i0, type: ThemeBrandService });
|
|
317
|
+
}
|
|
318
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: ThemeBrandService, decorators: [{
|
|
319
|
+
type: Service
|
|
320
|
+
}], ctorParameters: () => [] });
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Drives the two FluxUI-style color axes:
|
|
324
|
+
* - accent → `<html theme-color>` (full tinted palette per color)
|
|
325
|
+
* - neutral → `<html theme-neutral>` (gray family only)
|
|
326
|
+
*
|
|
327
|
+
* Both persist to localStorage and seed from `provideUiTheme({ color, neutral })`
|
|
328
|
+
* (a persisted choice wins over the configured default). `base` on either axis
|
|
329
|
+
* means "no override" — the core base theme applies.
|
|
330
|
+
*/
|
|
331
|
+
class ThemeColorService {
|
|
332
|
+
documentRef = inject(DOCUMENT, { optional: true });
|
|
333
|
+
options = inject(THEME_OPTIONS, { optional: true });
|
|
334
|
+
colorState = signal(DEFAULT_THEME_COLOR, /* @ts-ignore */
|
|
335
|
+
...(ngDevMode ? [{ debugName: "colorState" }] : /* istanbul ignore next */ []));
|
|
336
|
+
neutralState = signal(DEFAULT_THEME_NEUTRAL, /* @ts-ignore */
|
|
337
|
+
...(ngDevMode ? [{ debugName: "neutralState" }] : /* istanbul ignore next */ []));
|
|
338
|
+
color = this.colorState.asReadonly();
|
|
339
|
+
neutral = this.neutralState.asReadonly();
|
|
340
|
+
constructor() {
|
|
341
|
+
this.ensureDefaults();
|
|
342
|
+
effect(() => {
|
|
343
|
+
const color = this.colorState();
|
|
344
|
+
this.persist(THEME_COLOR_STORAGE_KEY, color);
|
|
345
|
+
this.applyAttribute('theme-color', color);
|
|
346
|
+
});
|
|
347
|
+
effect(() => {
|
|
348
|
+
const neutral = this.neutralState();
|
|
349
|
+
this.persist(THEME_NEUTRAL_STORAGE_KEY, neutral);
|
|
350
|
+
this.applyAttribute('theme-neutral', neutral);
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
setColor(color) {
|
|
354
|
+
this.colorState.set(color);
|
|
355
|
+
}
|
|
356
|
+
setNeutral(neutral) {
|
|
357
|
+
this.neutralState.set(neutral);
|
|
358
|
+
}
|
|
359
|
+
ensureDefaults() {
|
|
360
|
+
// A configured brand with no explicit accent defaults the accent to 'brand'
|
|
361
|
+
// so the consumer's brand color becomes the primary (FluxUI-style).
|
|
362
|
+
const configuredColor = this.options?.color ?? (this.options?.brand ? 'brand' : undefined);
|
|
363
|
+
const defaultColor = normalizeThemeColor(configuredColor);
|
|
364
|
+
const storedColor = this.readStorage(THEME_COLOR_STORAGE_KEY) ?? defaultColor;
|
|
365
|
+
this.colorState.set(normalizeThemeColor(storedColor));
|
|
366
|
+
const defaultNeutral = normalizeThemeNeutral(this.options?.neutral);
|
|
367
|
+
const storedNeutral = this.readStorage(THEME_NEUTRAL_STORAGE_KEY) ?? defaultNeutral;
|
|
368
|
+
this.neutralState.set(normalizeThemeNeutral(storedNeutral));
|
|
369
|
+
}
|
|
370
|
+
applyAttribute(attribute, value) {
|
|
371
|
+
this.documentRef?.documentElement?.setAttribute(attribute, value);
|
|
191
372
|
}
|
|
192
373
|
storage() {
|
|
193
374
|
try {
|
|
@@ -205,7 +386,7 @@ class ThemeSeasonService {
|
|
|
205
386
|
return null;
|
|
206
387
|
}
|
|
207
388
|
}
|
|
208
|
-
|
|
389
|
+
persist(key, value) {
|
|
209
390
|
try {
|
|
210
391
|
this.storage()?.setItem(key, value);
|
|
211
392
|
}
|
|
@@ -213,10 +394,129 @@ class ThemeSeasonService {
|
|
|
213
394
|
return;
|
|
214
395
|
}
|
|
215
396
|
}
|
|
216
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
217
|
-
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.
|
|
397
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: ThemeColorService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
398
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.3", ngImport: i0, type: ThemeColorService });
|
|
399
|
+
}
|
|
400
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: ThemeColorService, decorators: [{
|
|
401
|
+
type: Service
|
|
402
|
+
}], ctorParameters: () => [] });
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Corner radius axis. Writes `<html theme-radius>`; each preset CSS sets the
|
|
406
|
+
* single `--radius-base` knob so the whole `--radius-*` scale + `rounded-*`
|
|
407
|
+
* utilities rescale. Persists to localStorage and seeds from
|
|
408
|
+
* `provideUiTheme({ radius })` (a persisted choice wins over the default).
|
|
409
|
+
*/
|
|
410
|
+
class ThemeRadiusService {
|
|
411
|
+
documentRef = inject(DOCUMENT, { optional: true });
|
|
412
|
+
options = inject(THEME_OPTIONS, { optional: true });
|
|
413
|
+
radiusState = signal(DEFAULT_THEME_RADIUS, /* @ts-ignore */
|
|
414
|
+
...(ngDevMode ? [{ debugName: "radiusState" }] : /* istanbul ignore next */ []));
|
|
415
|
+
radius = this.radiusState.asReadonly();
|
|
416
|
+
constructor() {
|
|
417
|
+
this.ensureDefaults();
|
|
418
|
+
effect(() => {
|
|
419
|
+
const radius = this.radiusState();
|
|
420
|
+
this.persist(radius);
|
|
421
|
+
this.documentRef?.documentElement?.setAttribute('theme-radius', radius);
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
setRadius(radius) {
|
|
425
|
+
this.radiusState.set(radius);
|
|
426
|
+
}
|
|
427
|
+
ensureDefaults() {
|
|
428
|
+
const fallback = normalizeThemeRadius(this.options?.radius);
|
|
429
|
+
const stored = this.readStorage() ?? fallback;
|
|
430
|
+
this.radiusState.set(normalizeThemeRadius(stored));
|
|
431
|
+
}
|
|
432
|
+
storage() {
|
|
433
|
+
try {
|
|
434
|
+
return this.documentRef?.defaultView?.localStorage ?? null;
|
|
435
|
+
}
|
|
436
|
+
catch {
|
|
437
|
+
return null;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
readStorage() {
|
|
441
|
+
try {
|
|
442
|
+
return this.storage()?.getItem(THEME_RADIUS_STORAGE_KEY) ?? null;
|
|
443
|
+
}
|
|
444
|
+
catch {
|
|
445
|
+
return null;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
persist(radius) {
|
|
449
|
+
try {
|
|
450
|
+
this.storage()?.setItem(THEME_RADIUS_STORAGE_KEY, radius);
|
|
451
|
+
}
|
|
452
|
+
catch {
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: ThemeRadiusService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
457
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.3", ngImport: i0, type: ThemeRadiusService });
|
|
458
|
+
}
|
|
459
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: ThemeRadiusService, decorators: [{
|
|
460
|
+
type: Service
|
|
461
|
+
}], ctorParameters: () => [] });
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Spacing density axis. Writes `<html theme-space>`; each preset CSS sets the
|
|
465
|
+
* single `--spacing-base` knob, which Tailwind's `--spacing` derives from, so
|
|
466
|
+
* every `p-*`/`m-*`/`gap-*`/`w-*`/`h-*` utility rescales. Persists to
|
|
467
|
+
* localStorage and seeds from `provideUiTheme({ space })` (a persisted choice
|
|
468
|
+
* wins over the default).
|
|
469
|
+
*/
|
|
470
|
+
class ThemeSpaceService {
|
|
471
|
+
documentRef = inject(DOCUMENT, { optional: true });
|
|
472
|
+
options = inject(THEME_OPTIONS, { optional: true });
|
|
473
|
+
spaceState = signal(DEFAULT_THEME_SPACE, /* @ts-ignore */
|
|
474
|
+
...(ngDevMode ? [{ debugName: "spaceState" }] : /* istanbul ignore next */ []));
|
|
475
|
+
space = this.spaceState.asReadonly();
|
|
476
|
+
constructor() {
|
|
477
|
+
this.ensureDefaults();
|
|
478
|
+
effect(() => {
|
|
479
|
+
const space = this.spaceState();
|
|
480
|
+
this.persist(space);
|
|
481
|
+
this.documentRef?.documentElement?.setAttribute('theme-space', space);
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
setSpace(space) {
|
|
485
|
+
this.spaceState.set(space);
|
|
486
|
+
}
|
|
487
|
+
ensureDefaults() {
|
|
488
|
+
const fallback = normalizeThemeSpace(this.options?.space);
|
|
489
|
+
const stored = this.readStorage() ?? fallback;
|
|
490
|
+
this.spaceState.set(normalizeThemeSpace(stored));
|
|
491
|
+
}
|
|
492
|
+
storage() {
|
|
493
|
+
try {
|
|
494
|
+
return this.documentRef?.defaultView?.localStorage ?? null;
|
|
495
|
+
}
|
|
496
|
+
catch {
|
|
497
|
+
return null;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
readStorage() {
|
|
501
|
+
try {
|
|
502
|
+
return this.storage()?.getItem(THEME_SPACE_STORAGE_KEY) ?? null;
|
|
503
|
+
}
|
|
504
|
+
catch {
|
|
505
|
+
return null;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
persist(space) {
|
|
509
|
+
try {
|
|
510
|
+
this.storage()?.setItem(THEME_SPACE_STORAGE_KEY, space);
|
|
511
|
+
}
|
|
512
|
+
catch {
|
|
513
|
+
return;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: ThemeSpaceService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
517
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.3", ngImport: i0, type: ThemeSpaceService });
|
|
218
518
|
}
|
|
219
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
519
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.3", ngImport: i0, type: ThemeSpaceService, decorators: [{
|
|
220
520
|
type: Service
|
|
221
521
|
}], ctorParameters: () => [] });
|
|
222
522
|
|
|
@@ -235,7 +535,10 @@ function provideUiTheme(options = {}) {
|
|
|
235
535
|
inject(MaterialSymbolsService).ensureLoaded();
|
|
236
536
|
}
|
|
237
537
|
inject(ThemeModeService);
|
|
238
|
-
inject(
|
|
538
|
+
inject(ThemeColorService);
|
|
539
|
+
inject(ThemeBrandService);
|
|
540
|
+
inject(ThemeRadiusService);
|
|
541
|
+
inject(ThemeSpaceService);
|
|
239
542
|
}),
|
|
240
543
|
]);
|
|
241
544
|
}
|
|
@@ -244,4 +547,4 @@ function provideUiTheme(options = {}) {
|
|
|
244
547
|
* Generated bundle index. Do not edit.
|
|
245
548
|
*/
|
|
246
549
|
|
|
247
|
-
export { DEFAULT_THEME_MODE,
|
|
550
|
+
export { DEFAULT_THEME_COLOR, DEFAULT_THEME_MODE, DEFAULT_THEME_NEUTRAL, DEFAULT_THEME_RADIUS, DEFAULT_THEME_SPACE, RESOLVED_THEME_MODES, THEME_BRAND_STORAGE_KEY, THEME_COLORS, THEME_COLOR_STORAGE_KEY, THEME_MODES, THEME_MODE_STORAGE_KEY, THEME_NEUTRALS, THEME_NEUTRAL_STORAGE_KEY, THEME_OPTIONS, THEME_RADII, THEME_RADIUS_STORAGE_KEY, THEME_SPACES, THEME_SPACE_STORAGE_KEY, ThemeBrandService, ThemeColorService, ThemeModeService, ThemeRadiusService, ThemeSpaceService, isResolvedThemeMode, isThemeColor, isThemeMode, isThemeNeutral, isThemeRadius, isThemeSpace, normalizeThemeColor, normalizeThemeMode, normalizeThemeNeutral, normalizeThemeRadius, normalizeThemeSpace, provideUiTheme };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ojiepermana/angular-theme",
|
|
3
|
-
"version": "22.0.
|
|
3
|
+
"version": "22.0.36",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/edsis/angular.git"
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"@angular/common": ">=22.0.0",
|
|
14
14
|
"@angular/core": ">=22.0.0",
|
|
15
15
|
"@angular/router": ">=22.0.0",
|
|
16
|
-
"@ojiepermana/angular-navigation": "^22.0.
|
|
17
|
-
"@ojiepermana/angular-component": "^22.0.
|
|
16
|
+
"@ojiepermana/angular-navigation": "^22.0.36",
|
|
17
|
+
"@ojiepermana/angular-component": "^22.0.36",
|
|
18
18
|
"rxjs": ">=7.8.0"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|