@ojiepermana/angular-theme 22.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +364 -0
  2. package/fesm2022/ojiepermana-angular-theme-layout-services.mjs.map +1 -0
  3. package/fesm2022/ojiepermana-angular-theme-layout-types.mjs +32 -0
  4. package/fesm2022/ojiepermana-angular-theme-layout-types.mjs.map +1 -0
  5. package/fesm2022/ojiepermana-angular-theme-layout.mjs +574 -0
  6. package/fesm2022/ojiepermana-angular-theme-layout.mjs.map +1 -0
  7. package/fesm2022/ojiepermana-angular-theme-page.mjs +510 -0
  8. package/fesm2022/ojiepermana-angular-theme-page.mjs.map +1 -0
  9. package/fesm2022/ojiepermana-angular-theme-styles.mjs +244 -0
  10. package/fesm2022/ojiepermana-angular-theme-styles.mjs.map +1 -0
  11. package/fesm2022/ojiepermana-angular-theme.mjs +11 -0
  12. package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -0
  13. package/layout/README.md +471 -0
  14. package/package.json +60 -0
  15. package/page/README.md +239 -0
  16. package/styles/README.md +28 -0
  17. package/styles/css/index.css +9 -0
  18. package/styles/css/seasonal/base/components.css +129 -0
  19. package/styles/css/seasonal/base/package.css +6 -0
  20. package/styles/css/seasonal/base/tailwind.css +144 -0
  21. package/styles/css/seasonal/base/theme.css +287 -0
  22. package/styles/css/seasonal/base/tokens.css +152 -0
  23. package/styles/css/seasonal/ied/package.css +4 -0
  24. package/styles/css/seasonal/ied/theme.css +78 -0
  25. package/styles/css/seasonal/imlek/components.css +87 -0
  26. package/styles/css/seasonal/imlek/package.css +6 -0
  27. package/styles/css/seasonal/imlek/tailwind.css +144 -0
  28. package/styles/css/seasonal/imlek/theme.css +95 -0
  29. package/styles/css/seasonal/imlek/tokens.css +152 -0
  30. package/styles/css/seasonal/index.css +6 -0
  31. package/styles/css/seasonal/natal/package.css +4 -0
  32. package/styles/css/seasonal/natal/theme.css +78 -0
  33. package/styles/css/seasonal/new-year/package.css +4 -0
  34. package/styles/css/seasonal/new-year/theme.css +78 -0
  35. package/styles/css/seasonal/ramadhan/package.css +4 -0
  36. package/styles/css/seasonal/ramadhan/theme.css +78 -0
  37. package/types/ojiepermana-angular-theme-layout-services.d.ts +120 -0
  38. package/types/ojiepermana-angular-theme-layout-types.d.ts +33 -0
  39. package/types/ojiepermana-angular-theme-layout.d.ts +117 -0
  40. package/types/ojiepermana-angular-theme-page.d.ts +168 -0
  41. package/types/ojiepermana-angular-theme-styles.d.ts +89 -0
  42. package/types/ojiepermana-angular-theme.d.ts +2 -0
@@ -0,0 +1,120 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { LayoutSurface, LayoutStyle, LayoutType, LayoutWidth } from '@ojiepermana/angular-theme/layout/types';
3
+ import { HttpContextToken, HttpInterceptorFn } from '@angular/common/http';
4
+
5
+ interface LayoutMutationOptions {
6
+ persist?: boolean;
7
+ }
8
+ declare class LayoutService {
9
+ private readonly platformId;
10
+ private readonly surfaceState;
11
+ private readonly typeState;
12
+ private readonly styleState;
13
+ private readonly widthState;
14
+ readonly surface: _angular_core.Signal<"flat" | "grid" | "honeycome" | "line-vertical" | "line-horizontal">;
15
+ readonly type: _angular_core.Signal<"vertical" | "horizontal" | "empty" | "fluid">;
16
+ readonly appearance: _angular_core.Signal<"flat" | "border-rail">;
17
+ readonly width: _angular_core.Signal<"fluid" | "full" | "wide" | "container">;
18
+ registerDefaults(defaults: {
19
+ surface?: LayoutSurface;
20
+ appearance?: LayoutStyle;
21
+ type?: LayoutType;
22
+ width?: LayoutWidth;
23
+ }): this;
24
+ registerSurface(surface: LayoutSurface): void;
25
+ registerType(type: LayoutType): void;
26
+ registerAppearance(appearance: LayoutStyle): void;
27
+ registerWidth(width: LayoutWidth): void;
28
+ setSurface(surface: LayoutSurface, options?: LayoutMutationOptions): void;
29
+ setType(type: LayoutType, options?: LayoutMutationOptions): void;
30
+ setAppearance(appearance: LayoutStyle, options?: LayoutMutationOptions): void;
31
+ setWidth(width: LayoutWidth, options?: LayoutMutationOptions): void;
32
+ getStoredSurface(): LayoutSurface;
33
+ getStoredType(): LayoutType;
34
+ getStoredAppearance(): LayoutStyle;
35
+ getStoredStyle(): LayoutStyle;
36
+ getStoredWidth(): LayoutWidth;
37
+ private readStorage;
38
+ private removeStorage;
39
+ private writeStorage;
40
+ private getStorage;
41
+ private readStoredAppearance;
42
+ private getStoredAppearanceOrDefault;
43
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutService, never>;
44
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<LayoutService>;
45
+ }
46
+
47
+ /** Progres awal saat bar mulai tampil, supaya garis langsung terlihat bergerak. */
48
+ declare const LAYOUT_LOADING_INITIAL_PROGRESS = 8;
49
+ /** Batas atas progres trickle; sisanya menunggu seluruh pekerjaan selesai. */
50
+ declare const LAYOUT_LOADING_TRICKLE_CEILING = 90;
51
+ /** Interval kenaikan progres trickle selama masih ada pekerjaan tertunda. */
52
+ declare const LAYOUT_LOADING_TRICKLE_INTERVAL_MS = 250;
53
+ /** Jeda setelah progres 100% sebelum bar disembunyikan, agar transisi terbaca. */
54
+ declare const LAYOUT_LOADING_HIDE_DELAY_MS = 200;
55
+ /**
56
+ * Pelacak loading global untuk garis progres di tepi atas browser.
57
+ *
58
+ * Otomatis aktif saat router memulai navigasi (membuka halaman) dan saat
59
+ * request HTTP berjalan lewat `layoutLoadingInterceptor`. Sumber loading lain
60
+ * (mis. pemuatan data manual) bisa ikut dilacak lewat pasangan
61
+ * `start()`/`done()` yang dihitung secara ref-count.
62
+ */
63
+ declare class LayoutLoadingService {
64
+ private readonly platformId;
65
+ private readonly router;
66
+ private readonly pendingCount;
67
+ private readonly activeState;
68
+ private readonly progressState;
69
+ /** Bar sedang tampil (termasuk jeda singkat penyelesaian ke 100%). */
70
+ readonly active: _angular_core.Signal<boolean>;
71
+ /** Progres garis 0–100. */
72
+ readonly progress: _angular_core.Signal<number>;
73
+ /** Masih ada pekerjaan (navigasi/request/data) yang belum selesai. */
74
+ readonly pending: _angular_core.Signal<boolean>;
75
+ private readonly hostRegistry;
76
+ /**
77
+ * Host `LayoutLoading` terdaftar paling awal yang menggambar bar. Instance
78
+ * lain (mis. di dalam `Layout` saat app root juga memasang `LayoutLoading`)
79
+ * menjadi inert supaya garis progres tidak dirender ganda.
80
+ */
81
+ readonly primaryHostId: _angular_core.Signal<number>;
82
+ private trickleTimer;
83
+ private hideTimer;
84
+ private navigationPending;
85
+ private nextHostId;
86
+ constructor();
87
+ /** Menandai satu pekerjaan dimulai; bar tampil saat pekerjaan pertama masuk. */
88
+ start(): void;
89
+ /** Menandai satu pekerjaan selesai; bar dituntaskan saat hitungan kembali nol. */
90
+ done(): void;
91
+ /** Mendaftarkan satu host `LayoutLoading`; mengembalikan id untuk unregister. */
92
+ registerHost(): number;
93
+ /** Melepas host; host terdaftar berikutnya otomatis menjadi primary. */
94
+ unregisterHost(hostId: number): void;
95
+ /** Memaksa nilai progres (0–100) selama bar aktif, mis. untuk upload besar. */
96
+ setProgress(value: number): void;
97
+ private observeRouterNavigation;
98
+ private show;
99
+ private finish;
100
+ private hide;
101
+ private startTrickle;
102
+ private stopTrickle;
103
+ private cancelScheduledHide;
104
+ private isBrowser;
105
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutLoadingService, never>;
106
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<LayoutLoadingService>;
107
+ }
108
+
109
+ /**
110
+ * Set `true` pada `HttpContext` request untuk mengecualikannya dari garis
111
+ * progres, mis. polling/heartbeat yang tidak boleh memicu indikator loading.
112
+ */
113
+ declare const LAYOUT_LOADING_SKIP: HttpContextToken<boolean>;
114
+ /**
115
+ * Interceptor yang menyalakan garis progres `LayoutLoading` selama request
116
+ * HTTP berjalan. Daftarkan lewat `withInterceptors([...])` di aplikasi.
117
+ */
118
+ declare const layoutLoadingInterceptor: HttpInterceptorFn;
119
+
120
+ export { LAYOUT_LOADING_HIDE_DELAY_MS, LAYOUT_LOADING_INITIAL_PROGRESS, LAYOUT_LOADING_SKIP, LAYOUT_LOADING_TRICKLE_CEILING, LAYOUT_LOADING_TRICKLE_INTERVAL_MS, LayoutLoadingService, LayoutService, layoutLoadingInterceptor };
@@ -0,0 +1,33 @@
1
+ import { Signal } from '@angular/core';
2
+
3
+ declare const LAYOUT_TYPES: readonly ["vertical", "horizontal", "empty", "fluid"];
4
+ declare const LAYOUT_SURFACES: readonly ["flat", "grid", "honeycome", "line-vertical", "line-horizontal"];
5
+ declare const LAYOUT_STYLES: readonly ["flat", "border-rail"];
6
+ declare const LAYOUT_WIDTHS: readonly ["full", "wide", "container", "fluid"];
7
+ type LayoutType = (typeof LAYOUT_TYPES)[number];
8
+ type LayoutSurface = (typeof LAYOUT_SURFACES)[number];
9
+ type LayoutStyle = (typeof LAYOUT_STYLES)[number];
10
+ type LayoutWidth = (typeof LAYOUT_WIDTHS)[number];
11
+ declare const LAYOUT_DEFAULT_SURFACE: LayoutSurface;
12
+ declare const LAYOUT_DEFAULT_TYPE: LayoutType;
13
+ declare const LAYOUT_DEFAULT_STYLE: LayoutStyle;
14
+ declare const LAYOUT_DEFAULT_WIDTH: LayoutWidth;
15
+ declare const LAYOUT_SURFACE_STORAGE_KEY = "layout-surface";
16
+ declare const LAYOUT_APPEARANCE_STORAGE_KEY = "layout-appearance";
17
+ declare const LAYOUT_TYPE_STORAGE_KEY = "layout-type";
18
+ declare const LAYOUT_STYLE_STORAGE_KEY = "layout-style";
19
+ declare const LAYOUT_WIDTH_STORAGE_KEY = "layout-width";
20
+ interface LayoutContextValue {
21
+ surface: Signal<LayoutSurface>;
22
+ type: Signal<LayoutType>;
23
+ appearance: Signal<LayoutStyle>;
24
+ style: Signal<LayoutStyle>;
25
+ width: Signal<LayoutWidth>;
26
+ }
27
+ declare function isUiLayoutSurface(value: string | null): value is LayoutSurface;
28
+ declare function isUiLayoutType(value: string | null): value is LayoutType;
29
+ declare function isUiLayoutStyle(value: string | null): value is LayoutStyle;
30
+ declare function isUiLayoutWidth(value: string | null): value is LayoutWidth;
31
+
32
+ export { LAYOUT_APPEARANCE_STORAGE_KEY, LAYOUT_DEFAULT_STYLE, LAYOUT_DEFAULT_SURFACE, LAYOUT_DEFAULT_TYPE, LAYOUT_DEFAULT_WIDTH, LAYOUT_STYLES, LAYOUT_STYLE_STORAGE_KEY, LAYOUT_SURFACES, LAYOUT_SURFACE_STORAGE_KEY, LAYOUT_TYPES, LAYOUT_TYPE_STORAGE_KEY, LAYOUT_WIDTHS, LAYOUT_WIDTH_STORAGE_KEY, isUiLayoutStyle, isUiLayoutSurface, isUiLayoutType, isUiLayoutWidth };
33
+ export type { LayoutContextValue, LayoutStyle, LayoutSurface, LayoutType, LayoutWidth };
@@ -0,0 +1,117 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { LayoutService, LayoutLoadingService } from '@ojiepermana/angular-theme/layout/services';
3
+ export { LAYOUT_LOADING_HIDE_DELAY_MS, LAYOUT_LOADING_INITIAL_PROGRESS, LAYOUT_LOADING_SKIP, LAYOUT_LOADING_TRICKLE_CEILING, LAYOUT_LOADING_TRICKLE_INTERVAL_MS, LayoutLoadingService, LayoutService, layoutLoadingInterceptor } from '@ojiepermana/angular-theme/layout/services';
4
+ import { NavigationContainerComponent } from '@ojiepermana/angular-navigation';
5
+ export { LAYOUT_APPEARANCE_STORAGE_KEY, LAYOUT_DEFAULT_STYLE, LAYOUT_DEFAULT_SURFACE, LAYOUT_DEFAULT_TYPE, LAYOUT_DEFAULT_WIDTH, LAYOUT_STYLES, LAYOUT_STYLE_STORAGE_KEY, LAYOUT_SURFACES, LAYOUT_SURFACE_STORAGE_KEY, LAYOUT_TYPES, LAYOUT_TYPE_STORAGE_KEY, LAYOUT_WIDTHS, LAYOUT_WIDTH_STORAGE_KEY, LayoutContextValue, LayoutStyle, LayoutSurface, LayoutType, LayoutWidth, isUiLayoutStyle, isUiLayoutSurface, isUiLayoutType, isUiLayoutWidth } from '@ojiepermana/angular-theme/layout/types';
6
+
7
+ declare class LayoutComponent {
8
+ protected readonly layout: LayoutService;
9
+ readonly surface: _angular_core.InputSignal<"flat" | "grid" | "honeycome" | "line-vertical" | "line-horizontal" | null>;
10
+ readonly appearance: _angular_core.InputSignal<"flat" | "border-rail" | null>;
11
+ readonly layoutStyleAttribute: _angular_core.InputSignal<"flat" | "border-rail" | null>;
12
+ readonly width: _angular_core.InputSignal<"full" | "wide" | "container" | "fluid" | null>;
13
+ readonly class: _angular_core.InputSignal<string>;
14
+ protected readonly appearanceInput: _angular_core.Signal<"flat" | "border-rail" | null>;
15
+ protected readonly resolvedSurface: _angular_core.Signal<"flat" | "grid" | "honeycome" | "line-vertical" | "line-horizontal">;
16
+ protected readonly resolvedAppearance: _angular_core.Signal<"flat" | "border-rail">;
17
+ protected readonly resolvedStyle: _angular_core.Signal<"flat" | "border-rail">;
18
+ protected readonly resolvedWidth: _angular_core.Signal<"full" | "wide" | "container" | "fluid">;
19
+ protected readonly isBorderRail: _angular_core.Signal<boolean>;
20
+ protected readonly isFluidFrame: _angular_core.Signal<boolean>;
21
+ protected readonly showsInsetRails: _angular_core.Signal<boolean>;
22
+ protected readonly frameStageClasses: _angular_core.Signal<string>;
23
+ protected readonly railAnchorClasses: _angular_core.Signal<string>;
24
+ protected readonly contentShellClasses: _angular_core.Signal<string>;
25
+ protected readonly hostClasses: _angular_core.Signal<string>;
26
+ protected readonly frameClasses: _angular_core.Signal<string>;
27
+ protected readonly frameLayerClasses: _angular_core.Signal<string>;
28
+ constructor();
29
+ private surfaceClasses;
30
+ private widthPaddingClasses;
31
+ private frameSizeClasses;
32
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutComponent, never>;
33
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutComponent, "Layout", never, { "surface": { "alias": "surface"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "layoutStyleAttribute": { "alias": "layout-style"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
34
+ }
35
+
36
+ declare class LayoutVerticalComponent {
37
+ private readonly layout;
38
+ readonly class: _angular_core.InputSignal<string>;
39
+ protected readonly classes: _angular_core.Signal<string>;
40
+ constructor();
41
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutVerticalComponent, never>;
42
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutVerticalComponent, "LayoutVertical", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
43
+ }
44
+
45
+ declare class LayoutHorizontalComponent {
46
+ private readonly layout;
47
+ readonly class: _angular_core.InputSignal<string>;
48
+ protected readonly classes: _angular_core.Signal<string>;
49
+ constructor();
50
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutHorizontalComponent, never>;
51
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutHorizontalComponent, "LayoutHorizontal", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
52
+ }
53
+
54
+ declare class LayoutEmptyComponent {
55
+ private readonly layout;
56
+ readonly class: _angular_core.InputSignal<string>;
57
+ protected readonly classes: _angular_core.Signal<string>;
58
+ constructor();
59
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutEmptyComponent, never>;
60
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutEmptyComponent, "LayoutEmpty", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
61
+ }
62
+
63
+ declare class LayoutFluidComponent {
64
+ private readonly layout;
65
+ readonly class: _angular_core.InputSignal<string>;
66
+ protected readonly classes: _angular_core.Signal<string>;
67
+ constructor();
68
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutFluidComponent, never>;
69
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutFluidComponent, "LayoutFluid", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
70
+ }
71
+
72
+ declare class LayoutNavigationComponent {
73
+ protected readonly layout: LayoutService;
74
+ protected readonly projectedNav: _angular_core.Signal<NavigationContainerComponent | undefined>;
75
+ readonly ariaLabel: _angular_core.InputSignal<string>;
76
+ readonly railOffset: _angular_core.InputSignal<string | null>;
77
+ readonly class: _angular_core.InputSignal<string>;
78
+ protected readonly showsVerticalRail: _angular_core.Signal<boolean>;
79
+ protected readonly resolvedRailOffset: _angular_core.Signal<string>;
80
+ protected readonly railTransform: _angular_core.Signal<string>;
81
+ protected readonly classes: _angular_core.Signal<string>;
82
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutNavigationComponent, never>;
83
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutNavigationComponent, "LayoutNavigation", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "railOffset": { "alias": "railOffset"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, ["projectedNav"], ["*"], true, never>;
84
+ }
85
+
86
+ declare class LayoutContentComponent {
87
+ protected readonly layout: LayoutService;
88
+ readonly class: _angular_core.InputSignal<string>;
89
+ protected readonly classes: _angular_core.Signal<string>;
90
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutContentComponent, never>;
91
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutContentComponent, "LayoutContent", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
92
+ }
93
+
94
+ /**
95
+ * Garis progres tipis di tepi atas browser yang bergerak dari kiri ke kanan.
96
+ * Dirender otomatis oleh `Layout` dan dikendalikan `LayoutLoadingService`,
97
+ * sehingga aktif sendiri saat navigasi halaman atau pemuatan data berjalan.
98
+ *
99
+ * Boleh juga dipasang langsung di root aplikasi agar bar sudah tampil sejak
100
+ * navigasi awal; instance tambahan di dalam `Layout` otomatis inert sehingga
101
+ * garis tidak pernah dirender ganda.
102
+ */
103
+ declare class LayoutLoadingComponent {
104
+ protected readonly loading: LayoutLoadingService;
105
+ private readonly hostId;
106
+ readonly class: _angular_core.InputSignal<string>;
107
+ readonly ariaLabel: _angular_core.InputSignal<string>;
108
+ protected readonly isPrimary: _angular_core.Signal<boolean>;
109
+ protected readonly state: _angular_core.Signal<"inert" | "active" | "idle">;
110
+ protected readonly hostClasses: _angular_core.Signal<string>;
111
+ protected readonly roundedProgress: _angular_core.Signal<number>;
112
+ constructor();
113
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutLoadingComponent, never>;
114
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LayoutLoadingComponent, "LayoutLoading", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
115
+ }
116
+
117
+ export { LayoutComponent, LayoutContentComponent, LayoutEmptyComponent, LayoutFluidComponent, LayoutHorizontalComponent, LayoutLoadingComponent, LayoutNavigationComponent, LayoutVerticalComponent };
@@ -0,0 +1,168 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ declare const PAGE_VARIANTS: readonly ["stacked", "side"];
4
+ declare const PAGE_SIDE_POSITIONS: readonly ["left", "right"];
5
+ declare const PAGE_SIDE_MODES: readonly ["sticky", "drawer", "overlay"];
6
+ declare const PAGE_SCROLL_VALUES: readonly ["content", "page"];
7
+ declare const PAGE_HEIGHT_VALUES: readonly ["auto", "fix"];
8
+ type PageVariant = (typeof PAGE_VARIANTS)[number];
9
+ type PageSidePosition = (typeof PAGE_SIDE_POSITIONS)[number];
10
+ type PageSideMode = (typeof PAGE_SIDE_MODES)[number];
11
+ type PageScroll = (typeof PAGE_SCROLL_VALUES)[number];
12
+ type PageHeight = (typeof PAGE_HEIGHT_VALUES)[number];
13
+ declare const PAGE_DEFAULT_VARIANT: PageVariant;
14
+ declare const PAGE_DEFAULT_SIDE_POSITION: PageSidePosition;
15
+ declare const PAGE_DEFAULT_SIDE_MODE: PageSideMode;
16
+ declare const PAGE_DEFAULT_SCROLL: PageScroll;
17
+ declare const PAGE_DEFAULT_HEIGHT: PageHeight;
18
+ declare const PAGE_DEFAULT_SIDE_WIDTH = "16rem";
19
+ declare function isUiPageVariant(value: string | null): value is PageVariant;
20
+ declare function isUiPageSidePosition(value: string | null): value is PageSidePosition;
21
+ declare function isUiPageSideMode(value: string | null): value is PageSideMode;
22
+ declare function isUiPageScroll(value: string | null): value is PageScroll;
23
+ declare function isUiPageHeight(value: string | null): value is PageHeight;
24
+
25
+ declare class PageStateService {
26
+ private readonly variantState;
27
+ private readonly heightState;
28
+ private readonly scrollState;
29
+ private readonly positionState;
30
+ private readonly sideModeState;
31
+ private readonly internalSideOpenState;
32
+ private readonly controlledSideOpenState;
33
+ private readonly sideWidthState;
34
+ private readonly sideIdState;
35
+ private readonly sideOpenRequestState;
36
+ private readonly sideOpenRequestVersionState;
37
+ readonly variant: _angular_core.Signal<"stacked" | "side">;
38
+ readonly height: _angular_core.Signal<"auto" | "fix">;
39
+ readonly scroll: _angular_core.Signal<"content" | "page">;
40
+ readonly position: _angular_core.Signal<"left" | "right">;
41
+ readonly sideMode: _angular_core.Signal<"sticky" | "drawer" | "overlay">;
42
+ readonly sideWidth: _angular_core.Signal<string>;
43
+ readonly sideId: _angular_core.Signal<string | null>;
44
+ readonly sideOpenRequest: _angular_core.Signal<boolean | null>;
45
+ readonly sideOpenRequestVersion: _angular_core.Signal<number>;
46
+ readonly sideOpen: _angular_core.Signal<boolean>;
47
+ readonly isSideInteractive: _angular_core.Signal<boolean>;
48
+ readonly isSideVisible: _angular_core.Signal<boolean>;
49
+ registerRoot(config: {
50
+ variant: PageVariant;
51
+ height: PageHeight;
52
+ scroll: PageScroll;
53
+ position: PageSidePosition;
54
+ sideMode: PageSideMode;
55
+ sideWidth: string;
56
+ }): void;
57
+ registerSide(config: {
58
+ mode: PageSideMode;
59
+ position: PageSidePosition;
60
+ width: string;
61
+ id: string;
62
+ }): void;
63
+ setControlledSideOpen(open: boolean | null): void;
64
+ setSideOpen(open: boolean): void;
65
+ openSide(): boolean;
66
+ closeSide(): boolean;
67
+ toggleSide(): boolean;
68
+ private requestSideOpenChange;
69
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PageStateService, never>;
70
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<PageStateService>;
71
+ }
72
+
73
+ declare class PageSideComponent {
74
+ private readonly document;
75
+ protected readonly page: PageStateService;
76
+ protected readonly resolvedId: string;
77
+ readonly mode: _angular_core.InputSignal<"sticky" | "drawer" | "overlay">;
78
+ readonly position: _angular_core.InputSignal<"left" | "right" | null>;
79
+ readonly width: _angular_core.InputSignal<string | null>;
80
+ readonly closeOnEsc: _angular_core.InputSignal<boolean>;
81
+ readonly class: _angular_core.InputSignal<string>;
82
+ protected readonly resolvedMode: _angular_core.Signal<"sticky" | "drawer" | "overlay">;
83
+ protected readonly resolvedPosition: _angular_core.Signal<"left" | "right">;
84
+ protected readonly resolvedWidth: _angular_core.Signal<string>;
85
+ protected readonly isSticky: _angular_core.Signal<boolean>;
86
+ protected readonly isDrawer: _angular_core.Signal<boolean>;
87
+ protected readonly isOverlay: _angular_core.Signal<boolean>;
88
+ protected readonly resolvedScroll: _angular_core.Signal<"content" | "page">;
89
+ protected readonly ariaHidden: _angular_core.Signal<"true" | null>;
90
+ protected readonly classes: _angular_core.Signal<string>;
91
+ constructor();
92
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PageSideComponent, never>;
93
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PageSideComponent, "PageSide", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "closeOnEsc": { "alias": "closeOnEsc"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
94
+ }
95
+
96
+ declare class PageComponent {
97
+ protected readonly page: PageStateService;
98
+ protected readonly projectedSide: _angular_core.Signal<PageSideComponent | undefined>;
99
+ readonly variant: _angular_core.InputSignal<"stacked" | "side">;
100
+ readonly height: _angular_core.InputSignal<"auto" | "fix">;
101
+ readonly scroll: _angular_core.InputSignal<"content" | "page">;
102
+ readonly position: _angular_core.InputSignal<"left" | "right">;
103
+ readonly sideMode: _angular_core.InputSignal<"sticky" | "drawer" | "overlay">;
104
+ readonly sideOpen: _angular_core.InputSignal<boolean | null>;
105
+ readonly sideWidth: _angular_core.InputSignal<string>;
106
+ readonly class: _angular_core.InputSignal<string>;
107
+ readonly sideOpenChange: _angular_core.OutputEmitterRef<boolean>;
108
+ protected readonly resolvedPosition: _angular_core.Signal<"left" | "right">;
109
+ protected readonly resolvedSideMode: _angular_core.Signal<"sticky" | "drawer" | "overlay">;
110
+ protected readonly isLeftSide: _angular_core.Signal<boolean>;
111
+ protected readonly isRightSide: _angular_core.Signal<boolean>;
112
+ protected readonly showsOverlayBackdrop: _angular_core.Signal<boolean>;
113
+ protected readonly hostClasses: _angular_core.Signal<string>;
114
+ protected readonly shellClasses: _angular_core.Signal<string>;
115
+ protected readonly bodyClasses: _angular_core.Signal<string>;
116
+ constructor();
117
+ protected handleBackdropClick(): void;
118
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PageComponent, never>;
119
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PageComponent, "Page", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "scroll": { "alias": "scroll"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "sideMode": { "alias": "sideMode"; "required": false; "isSignal": true; }; "sideOpen": { "alias": "sideOpen"; "required": false; "isSignal": true; }; "sideWidth": { "alias": "sideWidth"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "sideOpenChange": "sideOpenChange"; }, ["projectedSide"], ["PageHeader", "PageSideToggle", "PageSide", "PageContent, PageDashboard", "PageFooter"], true, never>;
120
+ }
121
+
122
+ declare class PageSideToggleComponent {
123
+ protected readonly page: PageStateService;
124
+ readonly ariaLabel: _angular_core.InputSignal<string>;
125
+ readonly class: _angular_core.InputSignal<string>;
126
+ readonly toggled: _angular_core.OutputEmitterRef<boolean>;
127
+ protected readonly hostClasses: _angular_core.Signal<string>;
128
+ protected readonly buttonClasses: _angular_core.Signal<string>;
129
+ protected handleClick(): void;
130
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PageSideToggleComponent, never>;
131
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PageSideToggleComponent, "PageSideToggle", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "toggled": "toggled"; }, never, ["*"], true, never>;
132
+ }
133
+
134
+ declare class PageHeaderComponent {
135
+ private readonly page;
136
+ readonly class: _angular_core.InputSignal<string>;
137
+ protected readonly resolvedHeight: _angular_core.Signal<"auto" | "fix">;
138
+ protected readonly classes: _angular_core.Signal<string>;
139
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PageHeaderComponent, never>;
140
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PageHeaderComponent, "PageHeader", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
141
+ }
142
+ declare class PageContentComponent {
143
+ private readonly page;
144
+ readonly class: _angular_core.InputSignal<string>;
145
+ protected readonly resolvedScroll: _angular_core.Signal<"content" | "page">;
146
+ protected readonly classes: _angular_core.Signal<string>;
147
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PageContentComponent, never>;
148
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PageContentComponent, "PageContent", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
149
+ }
150
+ declare class PageDashboardComponent {
151
+ private readonly page;
152
+ readonly class: _angular_core.InputSignal<string>;
153
+ protected readonly resolvedScroll: _angular_core.Signal<"content" | "page">;
154
+ protected readonly classes: _angular_core.Signal<string>;
155
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PageDashboardComponent, never>;
156
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PageDashboardComponent, "PageDashboard", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
157
+ }
158
+ declare class PageFooterComponent {
159
+ private readonly page;
160
+ readonly class: _angular_core.InputSignal<string>;
161
+ protected readonly resolvedHeight: _angular_core.Signal<"auto" | "fix">;
162
+ protected readonly classes: _angular_core.Signal<string>;
163
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PageFooterComponent, never>;
164
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PageFooterComponent, "PageFooter", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
165
+ }
166
+
167
+ export { PAGE_DEFAULT_HEIGHT, PAGE_DEFAULT_SCROLL, PAGE_DEFAULT_SIDE_MODE, PAGE_DEFAULT_SIDE_POSITION, PAGE_DEFAULT_SIDE_WIDTH, PAGE_DEFAULT_VARIANT, PAGE_HEIGHT_VALUES, PAGE_SCROLL_VALUES, PAGE_SIDE_MODES, PAGE_SIDE_POSITIONS, PAGE_VARIANTS, PageComponent, PageContentComponent, PageDashboardComponent, PageFooterComponent, PageHeaderComponent, PageSideComponent, PageSideToggleComponent, isUiPageHeight, isUiPageScroll, isUiPageSideMode, isUiPageSidePosition, isUiPageVariant };
168
+ export type { PageHeight, PageScroll, PageSideMode, PageSidePosition, PageVariant };
@@ -0,0 +1,89 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { InjectionToken, EnvironmentProviders } from '@angular/core';
3
+
4
+ declare const THEME_MODES: readonly ["light", "dark", "system"];
5
+ declare const RESOLVED_THEME_MODES: readonly ["light", "dark"];
6
+ declare const THEME_SEASONS: readonly ["base", "imlek", "ramadhan", "ied", "natal", "new-year"];
7
+ type ThemeMode = (typeof THEME_MODES)[number];
8
+ type ResolvedThemeMode = (typeof RESOLVED_THEME_MODES)[number];
9
+ type ThemeSeason = (typeof THEME_SEASONS)[number];
10
+ declare const DEFAULT_THEME_MODE: ThemeMode;
11
+ declare const DEFAULT_THEME_SEASON: ThemeSeason;
12
+ declare const THEME_MODE_STORAGE_KEY = "theme-mode";
13
+ declare const THEME_SEASON_STORAGE_KEY = "theme-season";
14
+ declare function isThemeMode(value: string | null | undefined): value is ThemeMode;
15
+ declare function isResolvedThemeMode(value: string | null | undefined): value is ResolvedThemeMode;
16
+ declare function isThemeSeason(value: string | null | undefined): value is ThemeSeason;
17
+ declare function normalizeThemeMode(value: string | null | undefined): ThemeMode;
18
+ declare function normalizeThemeSeason(value: string | null | undefined): ThemeSeason;
19
+
20
+ interface ThemeIconOptions {
21
+ readonly materialSymbols?: boolean;
22
+ }
23
+ interface ThemeOptions {
24
+ readonly mode?: ThemeMode;
25
+ readonly season?: ThemeSeason;
26
+ readonly icons?: ThemeIconOptions;
27
+ /**
28
+ * Resolves the stylesheet URL for a non-base season so it can be loaded
29
+ * lazily at runtime instead of bundling every season's CSS up front.
30
+ * Return `null` to skip loading for that season. When omitted, no runtime
31
+ * loading happens — the app is expected to bundle season CSS itself.
32
+ *
33
+ * Contoh: `(season) => '/themes/seasonal/' + season + '/package.css'`
34
+ */
35
+ readonly seasonalCssUrl?: (season: ThemeSeason) => string | null;
36
+ }
37
+ declare const THEME_OPTIONS: InjectionToken<Readonly<ThemeOptions>>;
38
+
39
+ declare class ThemeModeService {
40
+ private readonly documentRef;
41
+ private readonly destroyRef;
42
+ private readonly options;
43
+ private readonly modeState;
44
+ private readonly systemPrefersDark;
45
+ readonly mode: _angular_core.Signal<"light" | "dark" | "system">;
46
+ readonly resolvedMode: _angular_core.Signal<"light" | "dark">;
47
+ readonly isDark: _angular_core.Signal<boolean>;
48
+ constructor();
49
+ setMode(mode: ThemeMode): void;
50
+ toggle(): void;
51
+ private ensureDefaults;
52
+ private persistMode;
53
+ private applyModeAttributes;
54
+ private readSystemPreference;
55
+ private bindSystemPreferenceListener;
56
+ private mediaQueryList;
57
+ private storage;
58
+ private readStorage;
59
+ private writeStorage;
60
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeModeService, never>;
61
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeModeService>;
62
+ }
63
+
64
+ declare function provideUiTheme(options?: ThemeOptions): EnvironmentProviders;
65
+
66
+ declare class ThemeSeasonService {
67
+ private readonly documentRef;
68
+ private readonly options;
69
+ private readonly seasonState;
70
+ readonly season: _angular_core.Signal<"base" | "imlek" | "ramadhan" | "ied" | "natal" | "new-year">;
71
+ constructor();
72
+ setSeason(season: ThemeSeason): void;
73
+ private ensureDefaults;
74
+ private persistSeason;
75
+ private applySeasonAttribute;
76
+ /**
77
+ * Lazily loads the active season's stylesheet via `<link>` when the app
78
+ * configured `seasonalCssUrl`, so only base CSS ships in the main bundle.
79
+ */
80
+ private ensureSeasonStylesheet;
81
+ private storage;
82
+ private readStorage;
83
+ private writeStorage;
84
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeSeasonService, never>;
85
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeSeasonService>;
86
+ }
87
+
88
+ export { DEFAULT_THEME_MODE, DEFAULT_THEME_SEASON, RESOLVED_THEME_MODES, THEME_MODES, THEME_MODE_STORAGE_KEY, THEME_OPTIONS, THEME_SEASONS, THEME_SEASON_STORAGE_KEY, ThemeModeService, ThemeSeasonService, isResolvedThemeMode, isThemeMode, isThemeSeason, normalizeThemeMode, normalizeThemeSeason, provideUiTheme };
89
+ export type { ResolvedThemeMode, ThemeIconOptions, ThemeMode, ThemeOptions, ThemeSeason };
@@ -0,0 +1,2 @@
1
+
2
+ export { };