@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.
- package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +364 -0
- package/fesm2022/ojiepermana-angular-theme-layout-services.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme-layout-types.mjs +32 -0
- package/fesm2022/ojiepermana-angular-theme-layout-types.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme-layout.mjs +574 -0
- package/fesm2022/ojiepermana-angular-theme-layout.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme-page.mjs +510 -0
- package/fesm2022/ojiepermana-angular-theme-page.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme-styles.mjs +244 -0
- package/fesm2022/ojiepermana-angular-theme-styles.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme.mjs +11 -0
- package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -0
- package/layout/README.md +471 -0
- package/package.json +60 -0
- package/page/README.md +239 -0
- package/styles/README.md +28 -0
- package/styles/css/index.css +9 -0
- package/styles/css/seasonal/base/components.css +129 -0
- package/styles/css/seasonal/base/package.css +6 -0
- package/styles/css/seasonal/base/tailwind.css +144 -0
- package/styles/css/seasonal/base/theme.css +287 -0
- package/styles/css/seasonal/base/tokens.css +152 -0
- package/styles/css/seasonal/ied/package.css +4 -0
- package/styles/css/seasonal/ied/theme.css +78 -0
- package/styles/css/seasonal/imlek/components.css +87 -0
- package/styles/css/seasonal/imlek/package.css +6 -0
- package/styles/css/seasonal/imlek/tailwind.css +144 -0
- package/styles/css/seasonal/imlek/theme.css +95 -0
- package/styles/css/seasonal/imlek/tokens.css +152 -0
- package/styles/css/seasonal/index.css +6 -0
- package/styles/css/seasonal/natal/package.css +4 -0
- package/styles/css/seasonal/natal/theme.css +78 -0
- package/styles/css/seasonal/new-year/package.css +4 -0
- package/styles/css/seasonal/new-year/theme.css +78 -0
- package/styles/css/seasonal/ramadhan/package.css +4 -0
- package/styles/css/seasonal/ramadhan/theme.css +78 -0
- package/types/ojiepermana-angular-theme-layout-services.d.ts +120 -0
- package/types/ojiepermana-angular-theme-layout-types.d.ts +33 -0
- package/types/ojiepermana-angular-theme-layout.d.ts +117 -0
- package/types/ojiepermana-angular-theme-page.d.ts +168 -0
- package/types/ojiepermana-angular-theme-styles.d.ts +89 -0
- package/types/ojiepermana-angular-theme.d.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ojiepermana-angular-theme-page.mjs","sources":["../../../library/theme/page/page.types.ts","../../../library/theme/page/page-state.service.ts","../../../library/theme/page/page-side.component.ts","../../../library/theme/page/page.component.ts","../../../library/theme/page/page-side-toggle.component.ts","../../../library/theme/page/page-slots.component.ts","../../../library/theme/page/ojiepermana-angular-theme-page.ts"],"sourcesContent":["export const PAGE_VARIANTS = ['stacked', 'side'] as const;\nexport const PAGE_SIDE_POSITIONS = ['left', 'right'] as const;\nexport const PAGE_SIDE_MODES = ['sticky', 'drawer', 'overlay'] as const;\nexport const PAGE_SCROLL_VALUES = ['content', 'page'] as const;\nexport const PAGE_HEIGHT_VALUES = ['auto', 'fix'] as const;\n\nexport type PageVariant = (typeof PAGE_VARIANTS)[number];\nexport type PageSidePosition = (typeof PAGE_SIDE_POSITIONS)[number];\nexport type PageSideMode = (typeof PAGE_SIDE_MODES)[number];\nexport type PageScroll = (typeof PAGE_SCROLL_VALUES)[number];\nexport type PageHeight = (typeof PAGE_HEIGHT_VALUES)[number];\n\nexport const PAGE_DEFAULT_VARIANT: PageVariant = 'stacked';\nexport const PAGE_DEFAULT_SIDE_POSITION: PageSidePosition = 'left';\nexport const PAGE_DEFAULT_SIDE_MODE: PageSideMode = 'sticky';\nexport const PAGE_DEFAULT_SCROLL: PageScroll = 'content';\nexport const PAGE_DEFAULT_HEIGHT: PageHeight = 'auto';\nexport const PAGE_DEFAULT_SIDE_WIDTH = '16rem';\n\nexport function isUiPageVariant(value: string | null): value is PageVariant {\n return value !== null && (PAGE_VARIANTS as readonly string[]).includes(value);\n}\n\nexport function isUiPageSidePosition(value: string | null): value is PageSidePosition {\n return value !== null && (PAGE_SIDE_POSITIONS as readonly string[]).includes(value);\n}\n\nexport function isUiPageSideMode(value: string | null): value is PageSideMode {\n return value !== null && (PAGE_SIDE_MODES as readonly string[]).includes(value);\n}\n\nexport function isUiPageScroll(value: string | null): value is PageScroll {\n return value !== null && (PAGE_SCROLL_VALUES as readonly string[]).includes(value);\n}\n\nexport function isUiPageHeight(value: string | null): value is PageHeight {\n return value !== null && (PAGE_HEIGHT_VALUES as readonly string[]).includes(value);\n}\n","import { Injectable, computed, signal } from '@angular/core';\nimport {\n PAGE_DEFAULT_HEIGHT,\n PAGE_DEFAULT_SCROLL,\n PAGE_DEFAULT_SIDE_MODE,\n PAGE_DEFAULT_SIDE_POSITION,\n PAGE_DEFAULT_SIDE_WIDTH,\n PAGE_DEFAULT_VARIANT,\n type PageHeight,\n type PageScroll,\n type PageSideMode,\n type PageSidePosition,\n type PageVariant,\n} from './page.types';\n\n@Injectable()\nexport class PageStateService {\n private readonly variantState = signal<PageVariant>(PAGE_DEFAULT_VARIANT);\n private readonly heightState = signal<PageHeight>(PAGE_DEFAULT_HEIGHT);\n private readonly scrollState = signal<PageScroll>(PAGE_DEFAULT_SCROLL);\n private readonly positionState = signal<PageSidePosition>(PAGE_DEFAULT_SIDE_POSITION);\n private readonly sideModeState = signal<PageSideMode>(PAGE_DEFAULT_SIDE_MODE);\n private readonly internalSideOpenState = signal(false);\n private readonly controlledSideOpenState = signal<boolean | null>(null);\n private readonly sideWidthState = signal(PAGE_DEFAULT_SIDE_WIDTH);\n private readonly sideIdState = signal<string | null>(null);\n private readonly sideOpenRequestState = signal<boolean | null>(null);\n private readonly sideOpenRequestVersionState = signal(0);\n\n readonly variant = this.variantState.asReadonly();\n readonly height = this.heightState.asReadonly();\n readonly scroll = this.scrollState.asReadonly();\n readonly position = this.positionState.asReadonly();\n readonly sideMode = this.sideModeState.asReadonly();\n readonly sideWidth = this.sideWidthState.asReadonly();\n readonly sideId = this.sideIdState.asReadonly();\n readonly sideOpenRequest = this.sideOpenRequestState.asReadonly();\n readonly sideOpenRequestVersion = this.sideOpenRequestVersionState.asReadonly();\n readonly sideOpen = computed(() => this.controlledSideOpenState() ?? this.internalSideOpenState());\n readonly isSideInteractive = computed(() => this.sideMode() === 'drawer' || this.sideMode() === 'overlay');\n readonly isSideVisible = computed(() => this.sideMode() === 'sticky' || this.sideOpen());\n\n registerRoot(config: {\n variant: PageVariant;\n height: PageHeight;\n scroll: PageScroll;\n position: PageSidePosition;\n sideMode: PageSideMode;\n sideWidth: string;\n }): void {\n this.variantState.set(config.variant);\n this.heightState.set(config.height);\n this.scrollState.set(config.scroll);\n this.positionState.set(config.position);\n this.sideModeState.set(config.sideMode);\n this.sideWidthState.set(config.sideWidth);\n }\n\n registerSide(config: { mode: PageSideMode; position: PageSidePosition; width: string; id: string }): void {\n this.sideModeState.set(config.mode);\n this.positionState.set(config.position);\n this.sideWidthState.set(config.width);\n this.sideIdState.set(config.id);\n }\n\n setControlledSideOpen(open: boolean | null): void {\n this.controlledSideOpenState.set(open);\n\n if (open !== null) {\n this.internalSideOpenState.set(open);\n }\n }\n\n setSideOpen(open: boolean): void {\n this.internalSideOpenState.set(open);\n }\n\n openSide(): boolean {\n return this.requestSideOpenChange(true);\n }\n\n closeSide(): boolean {\n return this.requestSideOpenChange(false);\n }\n\n toggleSide(): boolean {\n return this.requestSideOpenChange(!this.sideOpen());\n }\n\n private requestSideOpenChange(open: boolean): boolean {\n if (this.controlledSideOpenState() === null) {\n this.internalSideOpenState.set(open);\n }\n\n this.sideOpenRequestState.set(open);\n this.sideOpenRequestVersionState.update((version) => version + 1);\n\n return open;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, untracked } from '@angular/core';\nimport { cn } from '@ojiepermana/angular-component/utils';\nimport { PageStateService } from './page-state.service';\nimport { PAGE_DEFAULT_SCROLL, PAGE_DEFAULT_SIDE_WIDTH, type PageSideMode, type PageSidePosition } from './page.types';\n\nlet nextPageSideId = 0;\n\n@Component({\n selector: 'PageSide',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.id]': 'resolvedId',\n '[attr.data-page-slot]': '\"side\"',\n '[attr.data-page-side-mode]': 'resolvedMode()',\n '[attr.data-page-side-open]': 'page.sideOpen()',\n '[attr.data-page-position]': 'resolvedPosition()',\n '[attr.aria-hidden]': 'ariaHidden()',\n '[style.--page-side-width]': 'resolvedWidth()',\n },\n template: `<ng-content />`,\n})\nexport class PageSideComponent {\n private readonly document = inject(DOCUMENT, { optional: true });\n protected readonly page = inject(PageStateService);\n protected readonly resolvedId = `page-side-${++nextPageSideId}`;\n\n readonly mode = input<PageSideMode>('sticky');\n readonly position = input<PageSidePosition | null>(null);\n readonly width = input<string | null>(null);\n readonly closeOnEsc = input(true);\n readonly class = input<string>('');\n\n protected readonly resolvedMode = computed(() => this.mode() ?? this.page.sideMode());\n protected readonly resolvedPosition = computed(() => this.position() ?? this.page.position());\n protected readonly resolvedWidth = computed(() => this.width() ?? this.page.sideWidth() ?? PAGE_DEFAULT_SIDE_WIDTH);\n protected readonly isSticky = computed(() => this.resolvedMode() === 'sticky');\n protected readonly isDrawer = computed(() => this.resolvedMode() === 'drawer');\n protected readonly isOverlay = computed(() => this.resolvedMode() === 'overlay');\n protected readonly resolvedScroll = computed(() => this.page.scroll() ?? PAGE_DEFAULT_SCROLL);\n protected readonly ariaHidden = computed(() => (!this.isSticky() && !this.page.sideOpen() ? 'true' : null));\n\n protected readonly classes = computed(() => {\n const position = this.resolvedPosition();\n const sideOpen = this.page.sideOpen();\n\n return cn(\n 'block min-h-0 border-border bg-background',\n this.resolvedScroll() === 'content' && 'h-full overflow-auto',\n this.resolvedScroll() === 'page' && 'overflow-visible',\n this.isSticky() && 'shrink-0 w-[var(--page-side-width)]',\n this.isSticky() && position === 'left' && 'order-1 border-r',\n this.isSticky() && position === 'right' && 'order-2 border-l',\n this.isDrawer() &&\n 'absolute inset-y-0 z-20 w-[var(--page-side-width)] border shadow-sm transition-transform duration-200 ease-out',\n this.isDrawer() && position === 'left' && (sideOpen ? 'left-0 translate-x-0' : 'left-0 -translate-x-full'),\n this.isDrawer() && position === 'right' && (sideOpen ? 'right-0 translate-x-0' : 'right-0 translate-x-full'),\n this.isOverlay() &&\n 'absolute inset-y-0 z-30 w-[var(--page-side-width)] border shadow-md transition-transform duration-200 ease-out',\n this.isOverlay() && position === 'left' && (sideOpen ? 'left-0 translate-x-0' : 'left-0 -translate-x-full'),\n this.isOverlay() && position === 'right' && (sideOpen ? 'right-0 translate-x-0' : 'right-0 translate-x-full'),\n this.class(),\n );\n });\n\n constructor() {\n effect(() => {\n this.page.registerSide({\n mode: this.resolvedMode(),\n position: this.resolvedPosition(),\n width: this.resolvedWidth(),\n id: this.resolvedId,\n });\n });\n\n effect((onCleanup) => {\n if (!this.closeOnEsc() || this.isSticky()) {\n return;\n }\n\n const defaultView = this.document?.defaultView;\n if (!defaultView) {\n return;\n }\n\n const handler = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') {\n return;\n }\n\n if (!untracked(() => this.page.sideOpen())) {\n return;\n }\n\n untracked(() => {\n this.page.closeSide();\n });\n };\n\n defaultView.addEventListener('keydown', handler);\n onCleanup(() => defaultView.removeEventListener('keydown', handler));\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { cn } from '@ojiepermana/angular-component/utils';\nimport { PageSideComponent } from './page-side.component';\nimport { PageStateService } from './page-state.service';\nimport {\n PAGE_DEFAULT_HEIGHT,\n PAGE_DEFAULT_SCROLL,\n PAGE_DEFAULT_SIDE_MODE,\n PAGE_DEFAULT_SIDE_POSITION,\n PAGE_DEFAULT_SIDE_WIDTH,\n PAGE_DEFAULT_VARIANT,\n type PageHeight,\n type PageScroll,\n type PageSideMode,\n type PageSidePosition,\n type PageVariant,\n} from './page.types';\n\n@Component({\n selector: 'Page',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [PageStateService],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-page-variant]': 'variant()',\n '[attr.data-page-height]': 'height()',\n '[attr.data-page-scroll]': 'scroll()',\n '[attr.data-page-position]': 'resolvedPosition()',\n '[attr.data-page-side-mode]': 'resolvedSideMode()',\n '[attr.data-page-side-open]': 'page.sideOpen()',\n '[style.--page-side-width]': 'sideWidth()',\n },\n template: `\n @if (showsOverlayBackdrop()) {\n <button\n type=\"button\"\n aria-label=\"Close page side\"\n data-page-overlay-backdrop\n class=\"absolute inset-0 z-20 bg-[hsl(var(--overlay-backdrop))]\"\n (click)=\"handleBackdropClick()\"></button>\n }\n\n <div [class]=\"shellClasses()\">\n <ng-content select=\"PageHeader\" />\n <ng-content select=\"PageSideToggle\" />\n\n <div [class]=\"bodyClasses()\">\n @if (variant() === 'side') {\n <ng-content select=\"PageSide\" />\n }\n\n <ng-content select=\"PageContent, PageDashboard\" />\n </div>\n\n <ng-content select=\"PageFooter\" />\n </div>\n `,\n})\nexport class PageComponent {\n protected readonly page = inject(PageStateService);\n protected readonly projectedSide = contentChild(PageSideComponent);\n\n readonly variant = input<PageVariant>(PAGE_DEFAULT_VARIANT);\n readonly height = input<PageHeight>(PAGE_DEFAULT_HEIGHT);\n readonly scroll = input<PageScroll>(PAGE_DEFAULT_SCROLL);\n readonly position = input<PageSidePosition>(PAGE_DEFAULT_SIDE_POSITION);\n readonly sideMode = input<PageSideMode>(PAGE_DEFAULT_SIDE_MODE);\n readonly sideOpen = input<boolean | null>(null);\n readonly sideWidth = input<string>(PAGE_DEFAULT_SIDE_WIDTH);\n readonly class = input<string>('');\n readonly sideOpenChange = output<boolean>();\n\n protected readonly resolvedPosition = computed(() => this.projectedSide()?.position() ?? this.position());\n protected readonly resolvedSideMode = computed(() => this.projectedSide()?.mode() ?? this.sideMode());\n protected readonly isLeftSide = computed(() => this.resolvedPosition() === 'left');\n protected readonly isRightSide = computed(() => this.resolvedPosition() === 'right');\n protected readonly showsOverlayBackdrop = computed(\n () => this.variant() === 'side' && this.resolvedSideMode() === 'overlay' && this.page.sideOpen(),\n );\n\n protected readonly hostClasses = computed(() =>\n cn('relative block h-full min-h-0 w-full min-w-0 overflow-hidden text-foreground', this.class()),\n );\n protected readonly shellClasses = computed(() =>\n cn(\n 'relative z-10 h-full min-h-0 w-full min-w-0',\n this.scroll() === 'content' && 'grid grid-rows-[auto_minmax(0,1fr)_auto]',\n this.scroll() === 'page' && 'overflow-auto',\n ),\n );\n protected readonly bodyClasses = computed(() => {\n if (this.variant() !== 'side') {\n return cn('relative min-w-0', this.scroll() === 'content' && 'min-h-0');\n }\n\n const sideMode = this.resolvedSideMode();\n const position = this.resolvedPosition();\n\n if (sideMode === 'sticky') {\n return cn(\n 'grid min-w-0',\n this.scroll() === 'content' && 'min-h-0',\n position === 'left'\n ? 'grid-cols-[var(--page-side-width)_minmax(0,1fr)]'\n : 'grid-cols-[minmax(0,1fr)_var(--page-side-width)]',\n );\n }\n\n return cn('relative min-w-0', this.scroll() === 'content' && 'min-h-0');\n });\n\n constructor() {\n effect(() => {\n this.page.registerRoot({\n variant: this.variant(),\n height: this.height(),\n scroll: this.scroll(),\n position: this.position(),\n sideMode: this.sideMode(),\n sideWidth: this.sideWidth(),\n });\n });\n\n effect(() => {\n this.page.setControlledSideOpen(this.sideOpen());\n });\n\n effect(() => {\n const requestVersion = this.page.sideOpenRequestVersion();\n if (requestVersion === 0) {\n return;\n }\n\n this.sideOpenChange.emit(this.page.sideOpenRequest() ?? false);\n });\n }\n\n protected handleBackdropClick(): void {\n this.page.closeSide();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\nimport { cn } from '@ojiepermana/angular-component/utils';\nimport { PageStateService } from './page-state.service';\n\n@Component({\n selector: 'PageSideToggle',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n },\n template: `\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-controls]=\"page.sideId()\"\n [attr.aria-expanded]=\"page.sideOpen()\"\n (click)=\"handleClick()\">\n <ng-content>\n <span aria-hidden=\"true\" class=\"text-lg leading-none\">☰</span>\n </ng-content>\n </button>\n `,\n})\nexport class PageSideToggleComponent {\n protected readonly page = inject(PageStateService);\n\n readonly ariaLabel = input<string>('Toggle page side');\n readonly class = input<string>('');\n readonly toggled = output<boolean>();\n\n protected readonly hostClasses = computed(() => cn('inline-flex shrink-0', this.class()));\n protected readonly buttonClasses = computed(() =>\n cn(\n 'inline-flex h-9 min-w-9 items-center justify-center rounded-md border border-border bg-background px-3 text-sm text-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n ),\n );\n\n protected handleClick(): void {\n this.toggled.emit(this.page.toggleSide());\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { cn } from '@ojiepermana/angular-component/utils';\nimport { PageStateService } from './page-state.service';\nimport { PAGE_DEFAULT_HEIGHT, PAGE_DEFAULT_SCROLL, type PageScroll } from './page.types';\n\nfunction buildPageBodyClasses(scroll: PageScroll, customClass: string): string {\n return cn(\n 'block min-w-0',\n scroll === 'content' && 'h-full min-h-0 overflow-auto',\n scroll === 'page' && 'overflow-visible',\n customClass,\n );\n}\n\n@Component({\n selector: 'PageHeader',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n 'data-page-slot': 'header',\n },\n template: `<ng-content />`,\n})\nexport class PageHeaderComponent {\n private readonly page = inject(PageStateService, { optional: true });\n\n readonly class = input<string>('');\n\n protected readonly resolvedHeight = computed(() => this.page?.height() ?? PAGE_DEFAULT_HEIGHT);\n\n protected readonly classes = computed(() =>\n cn(\n 'block shrink-0 border-b border-border bg-background',\n this.class(),\n this.resolvedHeight() === 'fix' && 'h-12 overflow-hidden',\n ),\n );\n}\n\n@Component({\n selector: 'PageContent',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n 'data-page-slot': 'content',\n },\n template: `<ng-content />`,\n})\nexport class PageContentComponent {\n private readonly page = inject(PageStateService, { optional: true });\n\n readonly class = input<string>('');\n\n protected readonly resolvedScroll = computed(() => this.page?.scroll() ?? PAGE_DEFAULT_SCROLL);\n\n protected readonly classes = computed(() => buildPageBodyClasses(this.resolvedScroll(), this.class()));\n}\n\n@Component({\n selector: 'PageDashboard',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n 'data-page-slot': 'dashboard',\n },\n template: `<ng-content />`,\n})\nexport class PageDashboardComponent {\n private readonly page = inject(PageStateService, { optional: true });\n\n readonly class = input<string>('');\n\n protected readonly resolvedScroll = computed(() => this.page?.scroll() ?? PAGE_DEFAULT_SCROLL);\n\n protected readonly classes = computed(() => buildPageBodyClasses(this.resolvedScroll(), this.class()));\n}\n\n@Component({\n selector: 'PageFooter',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n 'data-page-slot': 'footer',\n },\n template: `<ng-content />`,\n})\nexport class PageFooterComponent {\n private readonly page = inject(PageStateService, { optional: true });\n\n readonly class = input<string>('');\n\n protected readonly resolvedHeight = computed(() => this.page?.height() ?? PAGE_DEFAULT_HEIGHT);\n\n protected readonly classes = computed(() =>\n cn(\n 'block shrink-0 border-t border-border bg-background',\n this.class(),\n this.resolvedHeight() === 'fix' && 'h-12 overflow-hidden',\n ),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, DestroyRef, signal, computed, effect, Service, makeEnvironmentProviders, provideEnvironmentInitializer } from '@angular/core';
|
|
3
|
+
import { DOCUMENT } from '@angular/common';
|
|
4
|
+
import { MaterialSymbolsService } from '@ojiepermana/angular-component/icon';
|
|
5
|
+
|
|
6
|
+
const THEME_OPTIONS = new InjectionToken('THEME_OPTIONS');
|
|
7
|
+
|
|
8
|
+
const THEME_MODES = ['light', 'dark', 'system'];
|
|
9
|
+
const RESOLVED_THEME_MODES = ['light', 'dark'];
|
|
10
|
+
const THEME_SEASONS = ['base', 'imlek', 'ramadhan', 'ied', 'natal', 'new-year'];
|
|
11
|
+
const DEFAULT_THEME_MODE = 'system';
|
|
12
|
+
const DEFAULT_THEME_SEASON = 'base';
|
|
13
|
+
const THEME_MODE_STORAGE_KEY = 'theme-mode';
|
|
14
|
+
const THEME_SEASON_STORAGE_KEY = 'theme-season';
|
|
15
|
+
function isThemeMode(value) {
|
|
16
|
+
return typeof value === 'string' && THEME_MODES.includes(value);
|
|
17
|
+
}
|
|
18
|
+
function isResolvedThemeMode(value) {
|
|
19
|
+
return typeof value === 'string' && RESOLVED_THEME_MODES.includes(value);
|
|
20
|
+
}
|
|
21
|
+
function isThemeSeason(value) {
|
|
22
|
+
return typeof value === 'string' && THEME_SEASONS.includes(value);
|
|
23
|
+
}
|
|
24
|
+
function normalizeThemeMode(value) {
|
|
25
|
+
return isThemeMode(value) ? value : DEFAULT_THEME_MODE;
|
|
26
|
+
}
|
|
27
|
+
function normalizeThemeSeason(value) {
|
|
28
|
+
return isThemeSeason(value) ? value : DEFAULT_THEME_SEASON;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
class ThemeModeService {
|
|
32
|
+
documentRef = inject(DOCUMENT, { optional: true });
|
|
33
|
+
destroyRef = inject(DestroyRef);
|
|
34
|
+
options = inject(THEME_OPTIONS, { optional: true });
|
|
35
|
+
modeState = signal(DEFAULT_THEME_MODE, /* @ts-ignore */
|
|
36
|
+
...(ngDevMode ? [{ debugName: "modeState" }] : /* istanbul ignore next */ []));
|
|
37
|
+
systemPrefersDark = signal(this.readSystemPreference(), /* @ts-ignore */
|
|
38
|
+
...(ngDevMode ? [{ debugName: "systemPrefersDark" }] : /* istanbul ignore next */ []));
|
|
39
|
+
mode = this.modeState.asReadonly();
|
|
40
|
+
resolvedMode = computed(() => {
|
|
41
|
+
const mode = this.modeState();
|
|
42
|
+
if (mode === 'system') {
|
|
43
|
+
return this.systemPrefersDark() ? 'dark' : 'light';
|
|
44
|
+
}
|
|
45
|
+
return mode;
|
|
46
|
+
}, /* @ts-ignore */
|
|
47
|
+
...(ngDevMode ? [{ debugName: "resolvedMode" }] : /* istanbul ignore next */ []));
|
|
48
|
+
isDark = computed(() => this.resolvedMode() === 'dark', /* @ts-ignore */
|
|
49
|
+
...(ngDevMode ? [{ debugName: "isDark" }] : /* istanbul ignore next */ []));
|
|
50
|
+
constructor() {
|
|
51
|
+
this.bindSystemPreferenceListener();
|
|
52
|
+
this.ensureDefaults();
|
|
53
|
+
effect(() => {
|
|
54
|
+
const mode = this.modeState();
|
|
55
|
+
const resolvedMode = this.resolvedMode();
|
|
56
|
+
this.persistMode(mode);
|
|
57
|
+
this.applyModeAttributes(resolvedMode);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
setMode(mode) {
|
|
61
|
+
this.modeState.set(mode);
|
|
62
|
+
}
|
|
63
|
+
toggle() {
|
|
64
|
+
this.setMode(this.isDark() ? 'light' : 'dark');
|
|
65
|
+
}
|
|
66
|
+
ensureDefaults() {
|
|
67
|
+
const defaultMode = normalizeThemeMode(this.options?.mode);
|
|
68
|
+
const storedMode = this.readStorage(THEME_MODE_STORAGE_KEY) ?? defaultMode;
|
|
69
|
+
this.modeState.set(normalizeThemeMode(storedMode));
|
|
70
|
+
}
|
|
71
|
+
persistMode(mode) {
|
|
72
|
+
this.writeStorage(THEME_MODE_STORAGE_KEY, mode);
|
|
73
|
+
}
|
|
74
|
+
applyModeAttributes(mode) {
|
|
75
|
+
const root = this.documentRef?.documentElement;
|
|
76
|
+
if (!root) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
root.setAttribute('theme-mode', mode);
|
|
80
|
+
root.dataset['mode'] = mode;
|
|
81
|
+
}
|
|
82
|
+
readSystemPreference() {
|
|
83
|
+
return this.mediaQueryList()?.matches ?? false;
|
|
84
|
+
}
|
|
85
|
+
bindSystemPreferenceListener() {
|
|
86
|
+
const mediaQueryList = this.mediaQueryList();
|
|
87
|
+
if (!mediaQueryList) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const onChange = (event) => {
|
|
91
|
+
this.systemPrefersDark.set(event.matches);
|
|
92
|
+
};
|
|
93
|
+
mediaQueryList.addEventListener('change', onChange);
|
|
94
|
+
this.destroyRef.onDestroy(() => mediaQueryList.removeEventListener('change', onChange));
|
|
95
|
+
}
|
|
96
|
+
mediaQueryList() {
|
|
97
|
+
return this.documentRef?.defaultView?.matchMedia?.('(prefers-color-scheme: dark)') ?? null;
|
|
98
|
+
}
|
|
99
|
+
storage() {
|
|
100
|
+
try {
|
|
101
|
+
return this.documentRef?.defaultView?.localStorage ?? null;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
readStorage(key) {
|
|
108
|
+
try {
|
|
109
|
+
return this.storage()?.getItem(key) ?? null;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
writeStorage(key, value) {
|
|
116
|
+
try {
|
|
117
|
+
this.storage()?.setItem(key, value);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: ThemeModeService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
124
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.2", ngImport: i0, type: ThemeModeService });
|
|
125
|
+
}
|
|
126
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: ThemeModeService, decorators: [{
|
|
127
|
+
type: Service
|
|
128
|
+
}], ctorParameters: () => [] });
|
|
129
|
+
|
|
130
|
+
class ThemeSeasonService {
|
|
131
|
+
documentRef = inject(DOCUMENT, { optional: true });
|
|
132
|
+
options = inject(THEME_OPTIONS, { optional: true });
|
|
133
|
+
seasonState = signal(DEFAULT_THEME_SEASON, /* @ts-ignore */
|
|
134
|
+
...(ngDevMode ? [{ debugName: "seasonState" }] : /* istanbul ignore next */ []));
|
|
135
|
+
season = this.seasonState.asReadonly();
|
|
136
|
+
constructor() {
|
|
137
|
+
this.ensureDefaults();
|
|
138
|
+
effect(() => {
|
|
139
|
+
const season = this.seasonState();
|
|
140
|
+
this.persistSeason(season);
|
|
141
|
+
this.applySeasonAttribute(season);
|
|
142
|
+
this.ensureSeasonStylesheet(season);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
setSeason(season) {
|
|
146
|
+
this.seasonState.set(season);
|
|
147
|
+
}
|
|
148
|
+
ensureDefaults() {
|
|
149
|
+
const defaultSeason = normalizeThemeSeason(this.options?.season);
|
|
150
|
+
const storedSeason = this.readStorage(THEME_SEASON_STORAGE_KEY) ?? defaultSeason;
|
|
151
|
+
this.seasonState.set(normalizeThemeSeason(storedSeason));
|
|
152
|
+
}
|
|
153
|
+
persistSeason(season) {
|
|
154
|
+
this.writeStorage(THEME_SEASON_STORAGE_KEY, season);
|
|
155
|
+
}
|
|
156
|
+
applySeasonAttribute(season) {
|
|
157
|
+
const root = this.documentRef?.documentElement;
|
|
158
|
+
if (!root) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
root.setAttribute('theme-season', season);
|
|
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) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const linkId = 'theme-season-styles';
|
|
174
|
+
const existing = doc.getElementById(linkId);
|
|
175
|
+
const url = season === 'base' ? null : resolveUrl(season);
|
|
176
|
+
if (!url) {
|
|
177
|
+
existing?.remove();
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (existing) {
|
|
181
|
+
if (existing.getAttribute('href') !== url) {
|
|
182
|
+
existing.setAttribute('href', url);
|
|
183
|
+
}
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const link = doc.createElement('link');
|
|
187
|
+
link.id = linkId;
|
|
188
|
+
link.rel = 'stylesheet';
|
|
189
|
+
link.href = url;
|
|
190
|
+
doc.head.appendChild(link);
|
|
191
|
+
}
|
|
192
|
+
storage() {
|
|
193
|
+
try {
|
|
194
|
+
return this.documentRef?.defaultView?.localStorage ?? null;
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
readStorage(key) {
|
|
201
|
+
try {
|
|
202
|
+
return this.storage()?.getItem(key) ?? null;
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
writeStorage(key, value) {
|
|
209
|
+
try {
|
|
210
|
+
this.storage()?.setItem(key, value);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: ThemeSeasonService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
217
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.0.2", ngImport: i0, type: ThemeSeasonService });
|
|
218
|
+
}
|
|
219
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: ThemeSeasonService, decorators: [{
|
|
220
|
+
type: Service
|
|
221
|
+
}], ctorParameters: () => [] });
|
|
222
|
+
|
|
223
|
+
function provideUiTheme(options = {}) {
|
|
224
|
+
return makeEnvironmentProviders([
|
|
225
|
+
{
|
|
226
|
+
provide: THEME_OPTIONS,
|
|
227
|
+
useValue: options,
|
|
228
|
+
},
|
|
229
|
+
provideEnvironmentInitializer(() => {
|
|
230
|
+
if (options.icons?.materialSymbols !== false) {
|
|
231
|
+
inject(MaterialSymbolsService).ensureLoaded();
|
|
232
|
+
}
|
|
233
|
+
inject(ThemeModeService);
|
|
234
|
+
inject(ThemeSeasonService);
|
|
235
|
+
}),
|
|
236
|
+
]);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Generated bundle index. Do not edit.
|
|
241
|
+
*/
|
|
242
|
+
|
|
243
|
+
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 };
|
|
244
|
+
//# sourceMappingURL=ojiepermana-angular-theme-styles.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ojiepermana-angular-theme-styles.mjs","sources":["../../../library/theme/styles/theme.config.ts","../../../library/theme/styles/theme.types.ts","../../../library/theme/styles/theme-mode.service.ts","../../../library/theme/styles/theme-season.service.ts","../../../library/theme/styles/theme.provider.ts","../../../library/theme/styles/ojiepermana-angular-theme-styles.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { ThemeMode, ThemeSeason } from './theme.types';\n\nexport interface ThemeIconOptions {\n readonly materialSymbols?: boolean;\n}\n\nexport interface ThemeOptions {\n readonly mode?: ThemeMode;\n readonly season?: ThemeSeason;\n readonly icons?: ThemeIconOptions;\n /**\n * Resolves the stylesheet URL for a non-base season so it can be loaded\n * lazily at runtime instead of bundling every season's CSS up front.\n * Return `null` to skip loading for that season. When omitted, no runtime\n * loading happens — the app is expected to bundle season CSS itself.\n *\n * Contoh: `(season) => '/themes/seasonal/' + season + '/package.css'`\n */\n readonly seasonalCssUrl?: (season: ThemeSeason) => string | null;\n}\n\nexport const THEME_OPTIONS = new InjectionToken<Readonly<ThemeOptions>>('THEME_OPTIONS');\n","export const THEME_MODES = ['light', 'dark', 'system'] as const;\nexport const RESOLVED_THEME_MODES = ['light', 'dark'] as const;\nexport const THEME_SEASONS = ['base', 'imlek', 'ramadhan', 'ied', 'natal', 'new-year'] as const;\n\nexport type ThemeMode = (typeof THEME_MODES)[number];\nexport type ResolvedThemeMode = (typeof RESOLVED_THEME_MODES)[number];\nexport type ThemeSeason = (typeof THEME_SEASONS)[number];\n\nexport const DEFAULT_THEME_MODE: ThemeMode = 'system';\nexport const DEFAULT_THEME_SEASON: ThemeSeason = 'base';\n\nexport const THEME_MODE_STORAGE_KEY = 'theme-mode';\nexport const THEME_SEASON_STORAGE_KEY = 'theme-season';\n\nexport function isThemeMode(value: string | null | undefined): value is ThemeMode {\n return typeof value === 'string' && THEME_MODES.includes(value as ThemeMode);\n}\n\nexport function isResolvedThemeMode(value: string | null | undefined): value is ResolvedThemeMode {\n return typeof value === 'string' && RESOLVED_THEME_MODES.includes(value as ResolvedThemeMode);\n}\n\nexport function isThemeSeason(value: string | null | undefined): value is ThemeSeason {\n return typeof value === 'string' && THEME_SEASONS.includes(value as ThemeSeason);\n}\n\nexport function normalizeThemeMode(value: string | null | undefined): ThemeMode {\n return isThemeMode(value) ? value : DEFAULT_THEME_MODE;\n}\n\nexport function normalizeThemeSeason(value: string | null | undefined): ThemeSeason {\n return isThemeSeason(value) ? value : DEFAULT_THEME_SEASON;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, Service, computed, effect, inject, signal } from '@angular/core';\nimport { THEME_OPTIONS } from './theme.config';\nimport {\n DEFAULT_THEME_MODE,\n THEME_MODE_STORAGE_KEY,\n type ResolvedThemeMode,\n type ThemeMode,\n normalizeThemeMode,\n} from './theme.types';\n\n@Service()\nexport class ThemeModeService {\n private readonly documentRef = inject(DOCUMENT, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly options = inject(THEME_OPTIONS, { optional: true });\n private readonly modeState = signal<ThemeMode>(DEFAULT_THEME_MODE);\n private readonly systemPrefersDark = signal(this.readSystemPreference());\n\n readonly mode = this.modeState.asReadonly();\n readonly resolvedMode = computed<ResolvedThemeMode>(() => {\n const mode = this.modeState();\n\n if (mode === 'system') {\n return this.systemPrefersDark() ? 'dark' : 'light';\n }\n\n return mode;\n });\n\n readonly isDark = computed(() => this.resolvedMode() === 'dark');\n\n constructor() {\n this.bindSystemPreferenceListener();\n this.ensureDefaults();\n\n effect(() => {\n const mode = this.modeState();\n const resolvedMode = this.resolvedMode();\n\n this.persistMode(mode);\n this.applyModeAttributes(resolvedMode);\n });\n }\n\n setMode(mode: ThemeMode): void {\n this.modeState.set(mode);\n }\n\n toggle(): void {\n this.setMode(this.isDark() ? 'light' : 'dark');\n }\n\n private ensureDefaults(): void {\n const defaultMode = normalizeThemeMode(this.options?.mode);\n const storedMode = this.readStorage(THEME_MODE_STORAGE_KEY) ?? defaultMode;\n\n this.modeState.set(normalizeThemeMode(storedMode));\n }\n\n private persistMode(mode: ThemeMode): void {\n this.writeStorage(THEME_MODE_STORAGE_KEY, mode);\n }\n\n private applyModeAttributes(mode: ResolvedThemeMode): void {\n const root = this.documentRef?.documentElement;\n\n if (!root) {\n return;\n }\n\n root.setAttribute('theme-mode', mode);\n root.dataset['mode'] = mode;\n }\n\n private readSystemPreference(): boolean {\n return this.mediaQueryList()?.matches ?? false;\n }\n\n private bindSystemPreferenceListener(): void {\n const mediaQueryList = this.mediaQueryList();\n\n if (!mediaQueryList) {\n return;\n }\n\n const onChange = (event: MediaQueryListEvent) => {\n this.systemPrefersDark.set(event.matches);\n };\n\n mediaQueryList.addEventListener('change', onChange);\n this.destroyRef.onDestroy(() => mediaQueryList.removeEventListener('change', onChange));\n }\n\n private mediaQueryList(): MediaQueryList | null {\n return this.documentRef?.defaultView?.matchMedia?.('(prefers-color-scheme: dark)') ?? null;\n }\n\n private storage(): Storage | null {\n try {\n return this.documentRef?.defaultView?.localStorage ?? null;\n } catch {\n return null;\n }\n }\n\n private readStorage(key: string): string | null {\n try {\n return this.storage()?.getItem(key) ?? null;\n } catch {\n return null;\n }\n }\n\n private writeStorage(key: string, value: string): void {\n try {\n this.storage()?.setItem(key, value);\n } catch {\n return;\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Service, effect, inject, signal } from '@angular/core';\nimport { THEME_OPTIONS } from './theme.config';\nimport { DEFAULT_THEME_SEASON, THEME_SEASON_STORAGE_KEY, type ThemeSeason, normalizeThemeSeason } from './theme.types';\n\n@Service()\nexport class ThemeSeasonService {\n private readonly documentRef = inject(DOCUMENT, { optional: true });\n private readonly options = inject(THEME_OPTIONS, { optional: true });\n private readonly seasonState = signal<ThemeSeason>(DEFAULT_THEME_SEASON);\n\n readonly season = this.seasonState.asReadonly();\n\n constructor() {\n this.ensureDefaults();\n\n effect(() => {\n const season = this.seasonState();\n\n this.persistSeason(season);\n this.applySeasonAttribute(season);\n this.ensureSeasonStylesheet(season);\n });\n }\n\n setSeason(season: ThemeSeason): void {\n this.seasonState.set(season);\n }\n\n private ensureDefaults(): void {\n const defaultSeason = normalizeThemeSeason(this.options?.season);\n const storedSeason = this.readStorage(THEME_SEASON_STORAGE_KEY) ?? defaultSeason;\n\n this.seasonState.set(normalizeThemeSeason(storedSeason));\n }\n\n private persistSeason(season: ThemeSeason): void {\n this.writeStorage(THEME_SEASON_STORAGE_KEY, season);\n }\n\n private applySeasonAttribute(season: ThemeSeason): void {\n const root = this.documentRef?.documentElement;\n\n if (!root) {\n return;\n }\n\n root.setAttribute('theme-season', season);\n }\n\n /**\n * Lazily loads the active season's stylesheet via `<link>` when the app\n * configured `seasonalCssUrl`, so only base CSS ships in the main bundle.\n */\n private ensureSeasonStylesheet(season: ThemeSeason): void {\n const doc = this.documentRef;\n const resolveUrl = this.options?.seasonalCssUrl;\n\n if (!doc || !resolveUrl) {\n return;\n }\n\n const linkId = 'theme-season-styles';\n const existing = doc.getElementById(linkId) as HTMLLinkElement | null;\n const url = season === 'base' ? null : resolveUrl(season);\n\n if (!url) {\n existing?.remove();\n return;\n }\n\n if (existing) {\n if (existing.getAttribute('href') !== url) {\n existing.setAttribute('href', url);\n }\n return;\n }\n\n const link = doc.createElement('link');\n link.id = linkId;\n link.rel = 'stylesheet';\n link.href = url;\n doc.head.appendChild(link);\n }\n\n private storage(): Storage | null {\n try {\n return this.documentRef?.defaultView?.localStorage ?? null;\n } catch {\n return null;\n }\n }\n\n private readStorage(key: string): string | null {\n try {\n return this.storage()?.getItem(key) ?? null;\n } catch {\n return null;\n }\n }\n\n private writeStorage(key: string, value: string): void {\n try {\n this.storage()?.setItem(key, value);\n } catch {\n return;\n }\n }\n}\n","import {\n type EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { MaterialSymbolsService } from '@ojiepermana/angular-component/icon';\nimport { THEME_OPTIONS, type ThemeOptions } from './theme.config';\nimport { ThemeModeService } from './theme-mode.service';\nimport { ThemeSeasonService } from './theme-season.service';\n\nexport function provideUiTheme(options: ThemeOptions = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: THEME_OPTIONS,\n useValue: options,\n },\n provideEnvironmentInitializer(() => {\n if (options.icons?.materialSymbols !== false) {\n inject(MaterialSymbolsService).ensureLoaded();\n }\n\n inject(ThemeModeService);\n inject(ThemeSeasonService);\n }),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of @ojiepermana/angular-theme
|
|
3
|
+
*
|
|
4
|
+
* Layout, page, dan styles diekspos lewat secondary entry point di dalam
|
|
5
|
+
* library/theme.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Generated bundle index. Do not edit.
|
|
10
|
+
*/
|
|
11
|
+
//# sourceMappingURL=ojiepermana-angular-theme.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ojiepermana-angular-theme.mjs","sources":["../../../library/theme/public-api.ts","../../../library/theme/ojiepermana-angular-theme.ts"],"sourcesContent":["/*\n * Public API Surface of @ojiepermana/angular-theme\n *\n * Layout, page, dan styles diekspos lewat secondary entry point di dalam\n * library/theme.\n */\n\nexport {};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;;;;AAKG;;ACLH;;AAEG"}
|