@ojiepermana/angular 21.1.7 → 21.1.9

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.
@@ -1,6 +1,6 @@
1
1
  # Etos Brand
2
2
 
3
- Etos implementation lives under `projects/angular/etos`. Published consumers should use `@ojiepermana/angular/etos`.
3
+ Etos implementation lives under `projects/angular/brand/etos`. Published consumers should use `@ojiepermana/angular/etos`.
4
4
 
5
5
  Use this folder for Etos-specific implementation:
6
6
 
@@ -0,0 +1,4 @@
1
+ {
2
+ "module": "../../fesm2022/ojiepermana-angular-brand-etos.mjs",
3
+ "typings": "../../types/ojiepermana-angular-brand-etos.d.ts"
4
+ }
@@ -800,10 +800,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
800
800
  }]
801
801
  }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
802
802
 
803
+ class EtosAppShellComponent {
804
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: EtosAppShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
805
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: EtosAppShellComponent, isStandalone: true, selector: "etos-app-shell", host: { classAttribute: "flex h-full min-h-0 flex-col" }, ngImport: i0, template: `
806
+ <header class="flex h-12 shrink-0 items-center border-b border-border bg-card px-4">
807
+ <ng-content select="[etos-app-shell-header]" />
808
+ </header>
809
+ <main class="min-h-0 flex-1 overflow-auto">
810
+ <ng-content select="[etos-app-shell-main]" />
811
+ </main>
812
+ <footer class="flex h-12 shrink-0 items-center border-t border-border bg-card px-4">
813
+ <ng-content select="[etos-app-shell-footer]" />
814
+ </footer>
815
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
816
+ }
817
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: EtosAppShellComponent, decorators: [{
818
+ type: Component,
819
+ args: [{
820
+ selector: 'etos-app-shell',
821
+ host: {
822
+ class: 'flex h-full min-h-0 flex-col',
823
+ },
824
+ template: `
825
+ <header class="flex h-12 shrink-0 items-center border-b border-border bg-card px-4">
826
+ <ng-content select="[etos-app-shell-header]" />
827
+ </header>
828
+ <main class="min-h-0 flex-1 overflow-auto">
829
+ <ng-content select="[etos-app-shell-main]" />
830
+ </main>
831
+ <footer class="flex h-12 shrink-0 items-center border-t border-border bg-card px-4">
832
+ <ng-content select="[etos-app-shell-footer]" />
833
+ </footer>
834
+ `,
835
+ changeDetection: ChangeDetectionStrategy.OnPush,
836
+ }]
837
+ }] });
838
+
803
839
  /*
804
840
  * Public API Surface of @ojiepermana/angular/etos
805
841
  *
806
- * Etos-specific implementation lives directly under projects/angular/etos.
842
+ * Etos-specific implementation lives under projects/angular/brand/etos.
807
843
  */
808
844
  const ETOS_BRAND_VERSION = '0.0.1';
809
845
 
@@ -811,5 +847,5 @@ const ETOS_BRAND_VERSION = '0.0.1';
811
847
  * Generated bundle index. Do not edit.
812
848
  */
813
849
 
814
- export { ETOS_BRAND_NAME, ETOS_BRAND_VERSION, ETOS_LAYOUT_CONFIG, ETOS_THEME_CONFIG, EtosEmptyLayoutComponent, EtosHorizontalLayoutComponent, EtosLayoutComponent, EtosThemeSwitcherComponent, EtosVerticalLayoutComponent, provideEtosBrand, provideEtosLayout, provideEtosTheme };
815
- //# sourceMappingURL=ojiepermana-angular-etos.mjs.map
850
+ export { ETOS_BRAND_NAME, ETOS_BRAND_VERSION, ETOS_LAYOUT_CONFIG, ETOS_THEME_CONFIG, EtosAppShellComponent, EtosEmptyLayoutComponent, EtosHorizontalLayoutComponent, EtosLayoutComponent, EtosThemeSwitcherComponent, EtosVerticalLayoutComponent, provideEtosBrand, provideEtosLayout, provideEtosTheme };
851
+ //# sourceMappingURL=ojiepermana-angular-brand-etos.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-brand-etos.mjs","sources":["../../../projects/angular/brand/etos/core/etos-brand.config.ts","../../../projects/angular/brand/etos/core/etos-brand.provider.ts","../../../projects/angular/brand/etos/component/theme-switcher/theme-switcher.component.ts","../../../projects/angular/brand/etos/layouts/empty/etos-empty-layout.component.ts","../../../projects/angular/brand/etos/layouts/horizontal/etos-horizontal-layout.component.ts","../../../projects/angular/brand/etos/layouts/vertical/etos-vertical-layout.component.ts","../../../projects/angular/brand/etos/layouts/etos-layout.component.ts","../../../projects/angular/brand/etos/shell/etos-app-shell.component.ts","../../../projects/angular/brand/etos/public-api.ts","../../../projects/angular/brand/etos/ojiepermana-angular-brand-etos.ts"],"sourcesContent":["import type { MaterialLayoutConfig } from '@ojiepermana/angular/layout';\nimport type { MaterialThemeConfig } from '@ojiepermana/angular/theme';\n\nexport const ETOS_BRAND_NAME = 'etos';\n\nexport const ETOS_THEME_CONFIG = {\n mode: 'light',\n brand: ETOS_BRAND_NAME,\n} satisfies MaterialThemeConfig;\n\nexport const ETOS_LAYOUT_CONFIG = {\n mode: 'vertical',\n width: 'fixed',\n} satisfies MaterialLayoutConfig;\n","import {\n type EnvironmentProviders,\n type Provider,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { type MaterialLayoutConfig, provideMaterialLayout } from '@ojiepermana/angular/layout';\nimport { DEFAULT_NAVIGATION_ID, NavigationService, type NavigationItem } from '@ojiepermana/angular/navigation';\nimport {\n type MaterialThemeConfig,\n type MaterialThemeFeature,\n provideMaterialTheme,\n withMaterialDefaults,\n} from '@ojiepermana/angular/theme';\nimport { ETOS_BRAND_NAME, ETOS_LAYOUT_CONFIG, ETOS_THEME_CONFIG } from './etos-brand.config';\n\nexport interface EtosBrandOptions {\n readonly theme?: MaterialThemeConfig;\n readonly layout?: MaterialLayoutConfig;\n readonly navigation?: NavigationItem[];\n readonly navigationId?: string;\n readonly materialDefaults?: boolean;\n}\n\nexport function provideEtosTheme(\n config: MaterialThemeConfig = {},\n ...features: MaterialThemeFeature[]\n): EnvironmentProviders {\n return provideMaterialTheme(\n {\n ...ETOS_THEME_CONFIG,\n ...config,\n brand: ETOS_BRAND_NAME,\n 'theme-brand': ETOS_BRAND_NAME,\n },\n ...features,\n );\n}\n\nexport function provideEtosLayout(config: MaterialLayoutConfig = {}): EnvironmentProviders {\n return provideMaterialLayout({\n ...ETOS_LAYOUT_CONFIG,\n ...config,\n });\n}\n\nexport function provideEtosBrand(options: EtosBrandOptions = {}): EnvironmentProviders {\n const providers: Array<EnvironmentProviders | Provider> = [\n provideEtosTheme(options.theme, ...(options.materialDefaults === false ? [] : [withMaterialDefaults()])),\n provideEtosLayout(options.layout),\n ];\n\n const navigation = options.navigation;\n if (navigation) {\n providers.push(\n provideEnvironmentInitializer(() => {\n inject(NavigationService).registerItems(options.navigationId ?? DEFAULT_NAVIGATION_ID, navigation);\n }),\n );\n }\n\n return makeEnvironmentProviders(providers);\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, viewChild } from '@angular/core';\nimport {\n AvatarComponent,\n AvatarFallbackComponent,\n AvatarImageComponent,\n ButtonComponent,\n PopoverContentDirective,\n PopoverTriggerDirective,\n cn,\n type PopoverAlign,\n type PopoverSide,\n} from '@ojiepermana/angular/component';\nimport { LayoutService, type LayoutMode, type LayoutWidth } from '@ojiepermana/angular/layout';\nimport { UiNavIconComponent } from '@ojiepermana/angular/navigation';\nimport { ThemeService, type ColorScheme } from '@ojiepermana/angular/theme';\n\ninterface ToggleOption<T extends string> {\n readonly value: T;\n readonly label: string;\n readonly icon: string;\n}\n\nexport type EtosThemeSwitcherAction = string;\n\nexport interface EtosThemeSwitcherUserInfo {\n readonly name: string;\n readonly subtitle?: string;\n readonly avatarSrc?: string | null;\n readonly avatarAlt?: string;\n}\n\nexport interface EtosThemeSwitcherNotificationShortcut {\n readonly value?: EtosThemeSwitcherAction;\n readonly icon?: string;\n readonly ariaLabel?: string;\n}\n\ntype EtosThemeSwitcherActionTone = 'default' | 'destructive';\n\nexport interface EtosThemeSwitcherQuickAction {\n readonly value: EtosThemeSwitcherAction;\n readonly label: string;\n readonly icon: string;\n readonly tone?: EtosThemeSwitcherActionTone;\n}\n\nconst THEME_SCHEME_OPTIONS = [\n { value: 'light', label: 'Light', icon: 'light_mode' },\n { value: 'dark', label: 'Dark', icon: 'dark_mode' },\n { value: 'system', label: 'System', icon: 'computer' },\n] as const satisfies readonly ToggleOption<ColorScheme>[];\n\nconst LAYOUT_MODE_OPTIONS = [\n { value: 'horizontal', label: 'Horizontal', icon: 'view_column' },\n { value: 'vertical', label: 'Vertical', icon: 'view_sidebar' },\n] as const satisfies readonly ToggleOption<LayoutMode>[];\n\nconst LAYOUT_WIDTH_OPTIONS = [\n { value: 'full', label: 'Full', icon: 'fit_screen' },\n { value: 'fixed', label: 'Fixed', icon: 'center_focus_strong' },\n] as const satisfies readonly ToggleOption<LayoutWidth>[];\n\n@Component({\n selector: 'etos-theme-switcher',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AvatarComponent,\n AvatarFallbackComponent,\n AvatarImageComponent,\n ButtonComponent,\n PopoverContentDirective,\n PopoverTriggerDirective,\n UiNavIconComponent,\n ],\n host: {\n '[class]': 'hostClasses()',\n },\n template: `\n @if (notificationShortcutConfig(); as shortcut) {\n <button\n type=\"button\"\n ui-button\n variant=\"ghost\"\n size=\"icon\"\n data-trigger-action=\"notifications\"\n [attr.data-value]=\"shortcut.value\"\n [attr.aria-label]=\"shortcut.ariaLabel\"\n [class]=\"notificationButtonClasses()\"\n (click)=\"triggerNotificationAction($event)\">\n <ui-nav-icon [name]=\"shortcut.icon\" [size]=\"18\" class=\"text-current\" />\n </button>\n }\n\n <button\n #trigger=\"uiPopoverTrigger\"\n type=\"button\"\n ui-button\n variant=\"ghost\"\n size=\"icon\"\n [uiPopoverTrigger]=\"preferencesPanel\"\n [side]=\"popoverSide()\"\n [align]=\"popoverAlign()\"\n [attr.aria-label]=\"triggerLabel()\"\n [class]=\"triggerButtonClasses(trigger.isOpen())\">\n <ui-avatar class=\"h-8 w-8 border border-border/60 shadow-[inset_0_1px_0_rgba(255,255,255,0.18)]\">\n @if (hasAvatar()) {\n <ui-avatar-image [src]=\"avatarImageSrc()\" [alt]=\"avatarAltText()\" />\n }\n <ui-avatar-fallback class=\"bg-primary text-xs font-semibold tracking-[0.24em] text-primary-foreground\">\n {{ initials() }}\n </ui-avatar-fallback>\n </ui-avatar>\n </button>\n\n <ng-template uiPopoverContent #preferencesPanel=\"uiPopoverContent\">\n <section\n data-etos-theme-switcher-panel\n role=\"dialog\"\n aria-label=\"User Info\"\n class=\"w-[min(21rem,calc(100vw-1.5rem))] overflow-hidden rounded-(--etos-layout-frame-radius) border border-border/70 bg-background text-foreground shadow-[0_18px_48px_rgba(15,23,42,0.12)]\">\n <header class=\"p-5 pb-4\">\n <div class=\"flex items-center gap-4\">\n <ui-avatar class=\"h-14 w-14 border border-border/60 shadow-sm\">\n @if (hasAvatar()) {\n <ui-avatar-image [src]=\"avatarImageSrc()\" [alt]=\"avatarAltText()\" />\n }\n <ui-avatar-fallback class=\"bg-primary text-sm font-semibold tracking-[0.24em] text-primary-foreground\">\n {{ initials() }}\n </ui-avatar-fallback>\n </ui-avatar>\n\n <div class=\"min-w-0 flex min-h-14 flex-1 flex-col justify-center self-center\">\n <div class=\"space-y-px\">\n <h2 class=\"truncate text-[1.1rem] font-semibold leading-none tracking-tight text-foreground\">\n {{ resolvedUserName() }}\n </h2>\n <p class=\"text-sm leading-[0.95rem] text-muted-foreground\">\n {{ resolvedUserSubtitle() }}\n </p>\n </div>\n </div>\n </div>\n </header>\n\n <div class=\"space-y-4 px-5 pb-5\">\n <section\n data-setting=\"theme-scheme\"\n [attr.data-current]=\"themeScheme()\"\n class=\"rounded-(--etos-layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 gap-1\">\n @for (option of themeSchemeOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n [class]=\"themeOptionClasses(themeScheme() === option.value)\"\n data-setting-option=\"theme-scheme\"\n [attr.data-value]=\"option.value\"\n (click)=\"setThemeScheme(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <ui-nav-icon\n [name]=\"option.icon\"\n [size]=\"18\"\n [class]=\"themeIconClasses(themeScheme() === option.value)\" />\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </section>\n\n <section data-setting=\"layout-mode\" [attr.data-current]=\"layoutMode()\" class=\"space-y-2\">\n <div class=\"px-1\">\n <p class=\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-muted-foreground\">Layout</p>\n </div>\n <div class=\"rounded-(--etos-layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-2 gap-1\">\n @for (option of layoutModeOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n [class]=\"segmentedOptionClasses(layoutMode() === option.value)\"\n data-setting-option=\"layout-mode\"\n [attr.data-value]=\"option.value\"\n (click)=\"setLayoutMode(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <ui-nav-icon\n [name]=\"option.icon\"\n [size]=\"18\"\n [class]=\"themeIconClasses(layoutMode() === option.value)\" />\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section data-setting=\"layout-width\" [attr.data-current]=\"layoutWidth()\" class=\"space-y-2\">\n <div class=\"px-1\">\n <p class=\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-muted-foreground\">Width</p>\n </div>\n <div class=\"rounded-(--etos-layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-2 gap-1\">\n @for (option of layoutWidthOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n [class]=\"segmentedOptionClasses(layoutWidth() === option.value)\"\n data-setting-option=\"layout-width\"\n [attr.data-value]=\"option.value\"\n (click)=\"setLayoutWidth(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <ui-nav-icon\n [name]=\"option.icon\"\n [size]=\"18\"\n [class]=\"themeIconClasses(layoutWidth() === option.value)\" />\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section class=\"space-y-1 border-t border-border/70 pt-2\">\n <h3 class=\"sr-only\">Quick Actions</h3>\n <div class=\"grid gap-1\">\n @for (action of actionOptions(); track action.value) {\n <button\n type=\"button\"\n ui-button\n variant=\"ghost\"\n [class]=\"actionButtonClasses(action.tone ?? 'default')\"\n data-action-option\n [attr.data-value]=\"action.value\"\n (click)=\"triggerAction(action.value)\">\n <span class=\"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted/65\">\n <ui-nav-icon\n [name]=\"action.icon\"\n [size]=\"19\"\n [class]=\"actionIconClasses(action.tone ?? 'default')\" />\n </span>\n <span [class]=\"actionLabelClasses(action.tone ?? 'default')\">\n {{ action.label }}\n </span>\n </button>\n }\n </div>\n </section>\n </div>\n </section>\n </ng-template>\n `,\n})\nexport class EtosThemeSwitcherComponent {\n private readonly theme = inject(ThemeService);\n private readonly layout = inject(LayoutService);\n private readonly popoverTrigger = viewChild.required<PopoverTriggerDirective>('trigger');\n\n readonly class = input<string>('');\n readonly userInfo = input<EtosThemeSwitcherUserInfo | null>(null);\n readonly userName = input<string>('User');\n readonly userSubtitle = input<string>('Theme and layout preferences');\n readonly avatarSrc = input<string | null>(null);\n readonly avatarAlt = input<string>('');\n readonly quickActions = input.required<readonly EtosThemeSwitcherQuickAction[]>();\n readonly notificationShortcut = input<EtosThemeSwitcherNotificationShortcut | null>(null);\n readonly showNotificationShortcut = input<boolean>(false);\n readonly popoverSide = input<PopoverSide>('bottom');\n readonly popoverAlign = input<PopoverAlign>('end');\n readonly actionSelected = output<EtosThemeSwitcherAction>();\n\n protected readonly themeMode = this.theme.mode;\n protected readonly themeScheme = this.theme.scheme;\n protected readonly layoutMode = this.layout.mode;\n protected readonly layoutWidth = this.layout.width;\n\n protected readonly themeSchemeOptions = THEME_SCHEME_OPTIONS;\n protected readonly layoutModeOptions = LAYOUT_MODE_OPTIONS;\n protected readonly layoutWidthOptions = LAYOUT_WIDTH_OPTIONS;\n protected readonly notificationShortcutConfig = computed<Required<EtosThemeSwitcherNotificationShortcut> | null>(\n () => {\n const shortcut = this.notificationShortcut();\n\n if (shortcut) {\n return {\n value: shortcut.value ?? 'notifications',\n icon: shortcut.icon ?? 'notifications',\n ariaLabel: shortcut.ariaLabel ?? `Open notifications for ${this.resolvedUserName()}`,\n };\n }\n\n if (!this.showNotificationShortcut()) {\n return null;\n }\n\n return {\n value: 'notifications',\n icon: 'notifications',\n ariaLabel: `Open notifications for ${this.resolvedUserName()}`,\n };\n },\n );\n protected readonly actionOptions = computed(() => {\n const shortcutValue = this.notificationShortcutConfig()?.value;\n\n if (!shortcutValue) {\n return this.quickActions();\n }\n\n return this.quickActions().filter((action) => action.value !== shortcutValue);\n });\n\n protected readonly hostClasses = computed(() => cn('inline-flex shrink-0 items-center gap-2', this.class()));\n protected readonly resolvedUserName = computed(() => this.userInfo()?.name?.trim() || this.userName());\n protected readonly resolvedUserSubtitle = computed(() => this.userInfo()?.subtitle ?? this.userSubtitle());\n protected readonly resolvedAvatarSrc = computed(() => this.userInfo()?.avatarSrc ?? this.avatarSrc());\n protected readonly resolvedAvatarAlt = computed(() => this.userInfo()?.avatarAlt ?? this.avatarAlt());\n protected readonly hasAvatar = computed(() => !!this.resolvedAvatarSrc());\n protected readonly avatarImageSrc = computed(() => this.resolvedAvatarSrc() ?? '');\n protected readonly avatarAltText = computed(() => this.resolvedAvatarAlt() || `${this.resolvedUserName()} avatar`);\n protected readonly initials = computed(() => this.toInitials(this.resolvedUserName()));\n protected readonly triggerLabel = computed(() => `Open user info for ${this.resolvedUserName()}`);\n\n protected triggerButtonClasses(open: boolean): string {\n return cn(\n 'relative h-8 w-8 rounded-full p-0 transition-colors duration-150 hover:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n open && 'bg-muted/50',\n );\n }\n\n protected notificationButtonClasses(): string {\n return cn(\n 'h-8 w-8 rounded-[var(--etos-layout-frame-radius)] p-0 text-muted-foreground transition-colors duration-150 hover:bg-muted/50 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n );\n }\n\n protected segmentedOptionClasses(active: boolean): string {\n return cn(\n 'h-10 rounded-[var(--etos-layout-frame-radius)] border border-transparent px-[0.3125rem] py-[0.1875rem] text-foreground transition-colors',\n active ? 'bg-background shadow-sm' : 'text-muted-foreground hover:bg-background/70',\n );\n }\n\n protected themeOptionClasses(active: boolean): string {\n return this.segmentedOptionClasses(active);\n }\n\n protected themeIconClasses(active: boolean): string {\n return active ? 'text-foreground' : 'text-muted-foreground';\n }\n\n protected actionButtonClasses(tone: EtosThemeSwitcherActionTone = 'default'): string {\n return cn(\n 'h-12 w-full justify-start gap-2.5 rounded-[var(--etos-layout-frame-radius)] border border-transparent px-2 py-1.5 text-left transition-colors hover:bg-muted/50',\n tone === 'destructive' && 'hover:bg-destructive/8 focus-visible:ring-destructive/30',\n );\n }\n\n protected actionIconClasses(tone: EtosThemeSwitcherActionTone = 'default'): string {\n return tone === 'destructive' ? 'text-destructive' : 'text-foreground';\n }\n\n protected actionLabelClasses(tone: EtosThemeSwitcherActionTone = 'default'): string {\n return tone === 'destructive' ? 'text-sm font-medium text-destructive' : 'text-sm font-medium text-foreground';\n }\n\n protected setThemeScheme(mode: ColorScheme): void {\n this.theme.setScheme(mode);\n }\n\n protected setLayoutMode(mode: LayoutMode): void {\n this.layout.setMode(mode);\n }\n\n protected setLayoutWidth(width: LayoutWidth): void {\n this.layout.setWidth(width);\n }\n\n protected triggerAction(action: EtosThemeSwitcherAction): void {\n this.actionSelected.emit(action);\n this.popoverTrigger().close();\n }\n\n protected triggerNotificationAction(event: Event): void {\n event.stopPropagation();\n\n const shortcut = this.notificationShortcutConfig();\n\n if (!shortcut) {\n return;\n }\n\n this.actionSelected.emit(shortcut.value);\n }\n\n private labelForLayoutMode(mode: LayoutMode): string {\n return mode === 'horizontal' ? 'Horizontal' : 'Vertical';\n }\n\n private labelForLayoutWidth(width: LayoutWidth): string {\n return width === 'full' ? 'Full' : 'Fixed';\n }\n\n private toInitials(name: string): string {\n const segments = name.trim().split(/\\s+/).filter(Boolean);\n\n if (segments.length === 0) {\n return 'UI';\n }\n\n if (segments.length === 1) {\n return segments[0].slice(0, 2).toUpperCase();\n }\n\n return `${segments[0][0] ?? ''}${segments[1][0] ?? ''}`.toUpperCase();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'etos-empty-layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterOutlet],\n host: {\n class: 'etos-layout-empty-host',\n 'data-brand-layout': 'etos-empty',\n },\n template: `\n <main class=\"etos-layout-empty-main\">\n <router-outlet />\n </main>\n `,\n})\nexport class EtosEmptyLayoutComponent {}","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { LayoutService } from '@ojiepermana/angular/layout';\nimport { TopbarComponent, type TopbarAppearance } from '@ojiepermana/angular/navigation';\n\n@Component({\n selector: 'etos-horizontal-layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterOutlet, TopbarComponent],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-brand-layout]': 'brandLayout',\n '[attr.data-layout-width]': 'layoutWidth()',\n },\n template: `\n <div [class]=\"frameClasses()\">\n <ui-topbar\n class=\"etos-layout-topbar\"\n [appearance]=\"topbarAppearance()\"\n [ariaLabel]=\"ariaLabel()\"\n [style.border-bottom-width]=\"dividerBorderWidth()\">\n <div ui-topbar-start class=\"etos-layout-topbar-slot etos-layout-topbar-slot--start\">\n <ng-content select=\"[ui-layout-brand],[ui-topbar-start]\" />\n </div>\n <div ui-topbar-end class=\"etos-layout-topbar-slot etos-layout-topbar-slot--end\">\n <ng-content select=\"[ui-layout-profile],[ui-topbar-end]\" />\n </div>\n </ui-topbar>\n <main [class]=\"mainClasses()\">\n <router-outlet />\n </main>\n </div>\n `,\n})\nexport class EtosHorizontalLayoutComponent {\n private readonly layout = inject(LayoutService);\n\n readonly topbarAppearance = input<TopbarAppearance>('default');\n readonly ariaLabel = input<string>('Primary');\n\n protected readonly brandLayout = 'etos-horizontal';\n protected readonly layoutWidth = this.layout.width;\n protected readonly dividerBorderWidth = computed(() => 'var(--border-width)');\n\n protected readonly hostClasses = computed(() => {\n const classes = ['etos-layout-host', 'etos-layout-host--horizontal'];\n if (this.layoutWidth() === 'fixed') {\n classes.push('etos-layout-host--fixed');\n }\n return classes.join(' ');\n });\n\n protected readonly frameClasses = computed(() => {\n const classes = ['etos-layout-frame', 'etos-layout-frame--horizontal'];\n if (this.layoutWidth() === 'fixed') {\n classes.push('etos-layout-frame--fixed');\n }\n return classes.join(' ');\n });\n\n protected readonly mainClasses = computed(() => {\n const classes = ['etos-layout-main'];\n return classes.join(' ');\n });\n}","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { LayoutService } from '@ojiepermana/angular/layout';\nimport { SidebarComponent, type SidebarAppearance, type SidebarPosition } from '@ojiepermana/angular/navigation';\n\n@Component({\n selector: 'etos-vertical-layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterOutlet, SidebarComponent],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-brand-layout]': 'brandLayout',\n '[attr.data-layout-width]': 'layoutWidth()',\n },\n template: `\n <div [class]=\"frameClasses()\">\n <ui-sidebar\n class=\"etos-layout-sidebar\"\n [appearance]=\"sidebarAppearance()\"\n [position]=\"sidebarPosition()\"\n [ariaLabel]=\"ariaLabel()\"\n [style.border-left-width]=\"dividerBorderWidth()\"\n [style.border-right-width]=\"dividerBorderWidth()\">\n <div ui-sidebar-header class=\"flex h-full w-full min-w-0 items-center\">\n <ng-content select=\"[ui-layout-brand],[ui-topbar-start],[ui-sidebar-header]\" />\n </div>\n\n <div ui-sidebar-footer class=\"flex h-full w-full min-w-0 items-center justify-between gap-3 px-3\">\n <ng-content select=\"[ui-layout-profile],[ui-topbar-end],[ui-sidebar-footer]\" />\n </div>\n </ui-sidebar>\n <main [class]=\"mainClasses()\">\n <router-outlet />\n </main>\n </div>\n `,\n})\nexport class EtosVerticalLayoutComponent {\n private readonly layout = inject(LayoutService);\n\n readonly sidebarAppearance = input<SidebarAppearance>('default');\n readonly sidebarPosition = input<SidebarPosition>('left');\n readonly ariaLabel = input<string>('Primary');\n\n protected readonly brandLayout = 'etos-vertical';\n protected readonly layoutWidth = this.layout.width;\n protected readonly dividerBorderWidth = computed(() => 'var(--border-width)');\n\n protected readonly hostClasses = computed(() => {\n const classes = ['etos-layout-host', 'etos-layout-host--vertical'];\n if (this.layoutWidth() === 'fixed') {\n classes.push('etos-layout-host--fixed');\n }\n return classes.join(' ');\n });\n\n protected readonly frameClasses = computed(() => {\n const classes = ['etos-layout-frame', 'etos-layout-frame--vertical'];\n if (this.layoutWidth() === 'fixed') {\n classes.push('etos-layout-frame--fixed', 'etos-layout-frame--vertical-fixed');\n }\n return classes.join(' ');\n });\n\n protected readonly mainClasses = computed(() => {\n const classes = ['etos-layout-main'];\n if (this.layoutWidth() === 'fixed') {\n classes.push('etos-layout-main--fixed', 'etos-layout-main--vertical-fixed');\n }\n return classes.join(' ');\n });\n}","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport { LayoutService } from '@ojiepermana/angular/layout';\nimport { EtosHorizontalLayoutComponent } from './horizontal';\nimport { EtosVerticalLayoutComponent } from './vertical';\n\n@Component({\n selector: 'etos-layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [EtosHorizontalLayoutComponent, EtosVerticalLayoutComponent],\n host: {\n class: 'contents',\n },\n template: `\n @switch (layoutMode()) {\n @case ('horizontal') {\n <etos-horizontal-layout [ariaLabel]=\"ariaLabel()\">\n <ng-content select=\"[ui-layout-brand],[ui-topbar-start]\" />\n <ng-content select=\"[ui-layout-profile],[ui-topbar-end]\" />\n </etos-horizontal-layout>\n }\n @default {\n <etos-vertical-layout [ariaLabel]=\"ariaLabel()\" />\n }\n }\n `,\n})\nexport class EtosLayoutComponent {\n private readonly layout = inject(LayoutService);\n\n readonly ariaLabel = input<string>('Primary');\n\n protected readonly layoutMode = this.layout.mode;\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'etos-app-shell',\n host: {\n class: 'flex h-full min-h-0 flex-col',\n },\n template: `\n <header class=\"flex h-12 shrink-0 items-center border-b border-border bg-card px-4\">\n <ng-content select=\"[etos-app-shell-header]\" />\n </header>\n <main class=\"min-h-0 flex-1 overflow-auto\">\n <ng-content select=\"[etos-app-shell-main]\" />\n </main>\n <footer class=\"flex h-12 shrink-0 items-center border-t border-border bg-card px-4\">\n <ng-content select=\"[etos-app-shell-footer]\" />\n </footer>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EtosAppShellComponent {}\n","/*\n * Public API Surface of @ojiepermana/angular/etos\n *\n * Etos-specific implementation lives under projects/angular/brand/etos.\n */\n\nexport * from './core/etos-brand.config';\nexport * from './core/etos-brand.provider';\nexport * from './component/theme-switcher';\nexport * from './layouts/empty';\nexport * from './layouts/horizontal';\nexport * from './layouts/etos-layout.component';\nexport * from './layouts/vertical';\nexport * from './shell';\n\nexport const ETOS_BRAND_VERSION = '0.0.1';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ojiepermana/angular",
3
- "version": "21.1.7",
3
+ "version": "21.1.9",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/ojiepermana/angular.git"
@@ -85,10 +85,6 @@
85
85
  "types": "./types/ojiepermana-angular-component.d.ts",
86
86
  "default": "./fesm2022/ojiepermana-angular-component.mjs"
87
87
  },
88
- "./etos": {
89
- "types": "./types/ojiepermana-angular-etos.d.ts",
90
- "default": "./fesm2022/ojiepermana-angular-etos.mjs"
91
- },
92
88
  "./generator/api": {
93
89
  "types": "./types/ojiepermana-angular-generator-api.d.ts",
94
90
  "default": "./fesm2022/ojiepermana-angular-generator-api.mjs"
@@ -104,6 +100,10 @@
104
100
  "./theme": {
105
101
  "types": "./types/ojiepermana-angular-theme.d.ts",
106
102
  "default": "./fesm2022/ojiepermana-angular-theme.mjs"
103
+ },
104
+ "./etos": {
105
+ "types": "./types/ojiepermana-angular-brand-etos.d.ts",
106
+ "default": "./fesm2022/ojiepermana-angular-brand-etos.mjs"
107
107
  }
108
108
  },
109
109
  "module": "fesm2022/ojiepermana-angular.mjs",
@@ -170,7 +170,12 @@ declare class EtosVerticalLayoutComponent {
170
170
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<EtosVerticalLayoutComponent, "etos-vertical-layout", never, { "sidebarAppearance": { "alias": "sidebarAppearance"; "required": false; "isSignal": true; }; "sidebarPosition": { "alias": "sidebarPosition"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[ui-layout-brand],[ui-topbar-start],[ui-sidebar-header]", "[ui-layout-profile],[ui-topbar-end],[ui-sidebar-footer]"], true, never>;
171
171
  }
172
172
 
173
+ declare class EtosAppShellComponent {
174
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<EtosAppShellComponent, never>;
175
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EtosAppShellComponent, "etos-app-shell", never, {}, {}, never, ["[etos-app-shell-header]", "[etos-app-shell-main]", "[etos-app-shell-footer]"], true, never>;
176
+ }
177
+
173
178
  declare const ETOS_BRAND_VERSION = "0.0.1";
174
179
 
175
- export { ETOS_BRAND_NAME, ETOS_BRAND_VERSION, ETOS_LAYOUT_CONFIG, ETOS_THEME_CONFIG, EtosEmptyLayoutComponent, EtosHorizontalLayoutComponent, EtosLayoutComponent, EtosThemeSwitcherComponent, EtosVerticalLayoutComponent, provideEtosBrand, provideEtosLayout, provideEtosTheme };
180
+ export { ETOS_BRAND_NAME, ETOS_BRAND_VERSION, ETOS_LAYOUT_CONFIG, ETOS_THEME_CONFIG, EtosAppShellComponent, EtosEmptyLayoutComponent, EtosHorizontalLayoutComponent, EtosLayoutComponent, EtosThemeSwitcherComponent, EtosVerticalLayoutComponent, provideEtosBrand, provideEtosLayout, provideEtosTheme };
176
181
  export type { EtosBrandOptions, EtosThemeSwitcherAction, EtosThemeSwitcherNotificationShortcut, EtosThemeSwitcherQuickAction, EtosThemeSwitcherUserInfo };
@@ -235,7 +235,7 @@ declare class UiNavItemComponent {
235
235
  readonly fragment: "ignored";
236
236
  readonly matrixParams: "ignored";
237
237
  };
238
- protected readonly type: _angular_core.Signal<"aside" | "spacer" | "basic" | "collapsable" | "divider" | "group" | "mega">;
238
+ protected readonly type: _angular_core.Signal<"aside" | "basic" | "collapsable" | "divider" | "group" | "mega" | "spacer">;
239
239
  protected readonly groupItem: _angular_core.Signal<NavigationGroupItem>;
240
240
  protected readonly collapsableItem: _angular_core.Signal<NavigationCollapsableItem>;
241
241
  protected readonly megaItem: _angular_core.Signal<NavigationMegaItem>;
package/etos/package.json DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "module": "../fesm2022/ojiepermana-angular-etos.mjs",
3
- "typings": "../types/ojiepermana-angular-etos.d.ts"
4
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"ojiepermana-angular-etos.mjs","sources":["../../../projects/angular/etos/core/etos-brand.config.ts","../../../projects/angular/etos/core/etos-brand.provider.ts","../../../projects/angular/etos/component/theme-switcher/theme-switcher.component.ts","../../../projects/angular/etos/layouts/etos-empty-layout.component.ts","../../../projects/angular/etos/layouts/etos-horizontal-layout.component.ts","../../../projects/angular/etos/layouts/etos-vertical-layout.component.ts","../../../projects/angular/etos/layouts/etos-layout.component.ts","../../../projects/angular/etos/public-api.ts","../../../projects/angular/etos/ojiepermana-angular-etos.ts"],"sourcesContent":["import type { MaterialLayoutConfig } from '@ojiepermana/angular/layout';\nimport type { MaterialThemeConfig } from '@ojiepermana/angular/theme';\n\nexport const ETOS_BRAND_NAME = 'etos';\n\nexport const ETOS_THEME_CONFIG = {\n mode: 'light',\n brand: ETOS_BRAND_NAME,\n} satisfies MaterialThemeConfig;\n\nexport const ETOS_LAYOUT_CONFIG = {\n mode: 'vertical',\n width: 'fixed',\n} satisfies MaterialLayoutConfig;\n","import {\n type EnvironmentProviders,\n type Provider,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { type MaterialLayoutConfig, provideMaterialLayout } from '@ojiepermana/angular/layout';\nimport { DEFAULT_NAVIGATION_ID, NavigationService, type NavigationItem } from '@ojiepermana/angular/navigation';\nimport {\n type MaterialThemeConfig,\n type MaterialThemeFeature,\n provideMaterialTheme,\n withMaterialDefaults,\n} from '@ojiepermana/angular/theme';\nimport { ETOS_BRAND_NAME, ETOS_LAYOUT_CONFIG, ETOS_THEME_CONFIG } from './etos-brand.config';\n\nexport interface EtosBrandOptions {\n readonly theme?: MaterialThemeConfig;\n readonly layout?: MaterialLayoutConfig;\n readonly navigation?: NavigationItem[];\n readonly navigationId?: string;\n readonly materialDefaults?: boolean;\n}\n\nexport function provideEtosTheme(\n config: MaterialThemeConfig = {},\n ...features: MaterialThemeFeature[]\n): EnvironmentProviders {\n return provideMaterialTheme(\n {\n ...ETOS_THEME_CONFIG,\n ...config,\n brand: ETOS_BRAND_NAME,\n 'theme-brand': ETOS_BRAND_NAME,\n },\n ...features,\n );\n}\n\nexport function provideEtosLayout(config: MaterialLayoutConfig = {}): EnvironmentProviders {\n return provideMaterialLayout({\n ...ETOS_LAYOUT_CONFIG,\n ...config,\n });\n}\n\nexport function provideEtosBrand(options: EtosBrandOptions = {}): EnvironmentProviders {\n const providers: Array<EnvironmentProviders | Provider> = [\n provideEtosTheme(options.theme, ...(options.materialDefaults === false ? [] : [withMaterialDefaults()])),\n provideEtosLayout(options.layout),\n ];\n\n const navigation = options.navigation;\n if (navigation) {\n providers.push(\n provideEnvironmentInitializer(() => {\n inject(NavigationService).registerItems(options.navigationId ?? DEFAULT_NAVIGATION_ID, navigation);\n }),\n );\n }\n\n return makeEnvironmentProviders(providers);\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, viewChild } from '@angular/core';\nimport {\n AvatarComponent,\n AvatarFallbackComponent,\n AvatarImageComponent,\n ButtonComponent,\n PopoverContentDirective,\n PopoverTriggerDirective,\n cn,\n type PopoverAlign,\n type PopoverSide,\n} from '@ojiepermana/angular/component';\nimport { LayoutService, type LayoutMode, type LayoutWidth } from '@ojiepermana/angular/layout';\nimport { UiNavIconComponent } from '@ojiepermana/angular/navigation';\nimport { ThemeService, type ColorScheme } from '@ojiepermana/angular/theme';\n\ninterface ToggleOption<T extends string> {\n readonly value: T;\n readonly label: string;\n readonly icon: string;\n}\n\nexport type EtosThemeSwitcherAction = string;\n\nexport interface EtosThemeSwitcherUserInfo {\n readonly name: string;\n readonly subtitle?: string;\n readonly avatarSrc?: string | null;\n readonly avatarAlt?: string;\n}\n\nexport interface EtosThemeSwitcherNotificationShortcut {\n readonly value?: EtosThemeSwitcherAction;\n readonly icon?: string;\n readonly ariaLabel?: string;\n}\n\ntype EtosThemeSwitcherActionTone = 'default' | 'destructive';\n\nexport interface EtosThemeSwitcherQuickAction {\n readonly value: EtosThemeSwitcherAction;\n readonly label: string;\n readonly icon: string;\n readonly tone?: EtosThemeSwitcherActionTone;\n}\n\nconst THEME_SCHEME_OPTIONS = [\n { value: 'light', label: 'Light', icon: 'light_mode' },\n { value: 'dark', label: 'Dark', icon: 'dark_mode' },\n { value: 'system', label: 'System', icon: 'computer' },\n] as const satisfies readonly ToggleOption<ColorScheme>[];\n\nconst LAYOUT_MODE_OPTIONS = [\n { value: 'horizontal', label: 'Horizontal', icon: 'view_column' },\n { value: 'vertical', label: 'Vertical', icon: 'view_sidebar' },\n] as const satisfies readonly ToggleOption<LayoutMode>[];\n\nconst LAYOUT_WIDTH_OPTIONS = [\n { value: 'full', label: 'Full', icon: 'fit_screen' },\n { value: 'fixed', label: 'Fixed', icon: 'center_focus_strong' },\n] as const satisfies readonly ToggleOption<LayoutWidth>[];\n\n@Component({\n selector: 'etos-theme-switcher',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AvatarComponent,\n AvatarFallbackComponent,\n AvatarImageComponent,\n ButtonComponent,\n PopoverContentDirective,\n PopoverTriggerDirective,\n UiNavIconComponent,\n ],\n host: {\n '[class]': 'hostClasses()',\n },\n template: `\n @if (notificationShortcutConfig(); as shortcut) {\n <button\n type=\"button\"\n ui-button\n variant=\"ghost\"\n size=\"icon\"\n data-trigger-action=\"notifications\"\n [attr.data-value]=\"shortcut.value\"\n [attr.aria-label]=\"shortcut.ariaLabel\"\n [class]=\"notificationButtonClasses()\"\n (click)=\"triggerNotificationAction($event)\">\n <ui-nav-icon [name]=\"shortcut.icon\" [size]=\"18\" class=\"text-current\" />\n </button>\n }\n\n <button\n #trigger=\"uiPopoverTrigger\"\n type=\"button\"\n ui-button\n variant=\"ghost\"\n size=\"icon\"\n [uiPopoverTrigger]=\"preferencesPanel\"\n [side]=\"popoverSide()\"\n [align]=\"popoverAlign()\"\n [attr.aria-label]=\"triggerLabel()\"\n [class]=\"triggerButtonClasses(trigger.isOpen())\">\n <ui-avatar class=\"h-8 w-8 border border-border/60 shadow-[inset_0_1px_0_rgba(255,255,255,0.18)]\">\n @if (hasAvatar()) {\n <ui-avatar-image [src]=\"avatarImageSrc()\" [alt]=\"avatarAltText()\" />\n }\n <ui-avatar-fallback class=\"bg-primary text-xs font-semibold tracking-[0.24em] text-primary-foreground\">\n {{ initials() }}\n </ui-avatar-fallback>\n </ui-avatar>\n </button>\n\n <ng-template uiPopoverContent #preferencesPanel=\"uiPopoverContent\">\n <section\n data-etos-theme-switcher-panel\n role=\"dialog\"\n aria-label=\"User Info\"\n class=\"w-[min(21rem,calc(100vw-1.5rem))] overflow-hidden rounded-(--etos-layout-frame-radius) border border-border/70 bg-background text-foreground shadow-[0_18px_48px_rgba(15,23,42,0.12)]\">\n <header class=\"p-5 pb-4\">\n <div class=\"flex items-center gap-4\">\n <ui-avatar class=\"h-14 w-14 border border-border/60 shadow-sm\">\n @if (hasAvatar()) {\n <ui-avatar-image [src]=\"avatarImageSrc()\" [alt]=\"avatarAltText()\" />\n }\n <ui-avatar-fallback class=\"bg-primary text-sm font-semibold tracking-[0.24em] text-primary-foreground\">\n {{ initials() }}\n </ui-avatar-fallback>\n </ui-avatar>\n\n <div class=\"min-w-0 flex min-h-14 flex-1 flex-col justify-center self-center\">\n <div class=\"space-y-px\">\n <h2 class=\"truncate text-[1.1rem] font-semibold leading-none tracking-tight text-foreground\">\n {{ resolvedUserName() }}\n </h2>\n <p class=\"text-sm leading-[0.95rem] text-muted-foreground\">\n {{ resolvedUserSubtitle() }}\n </p>\n </div>\n </div>\n </div>\n </header>\n\n <div class=\"space-y-4 px-5 pb-5\">\n <section\n data-setting=\"theme-scheme\"\n [attr.data-current]=\"themeScheme()\"\n class=\"rounded-(--etos-layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 gap-1\">\n @for (option of themeSchemeOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n [class]=\"themeOptionClasses(themeScheme() === option.value)\"\n data-setting-option=\"theme-scheme\"\n [attr.data-value]=\"option.value\"\n (click)=\"setThemeScheme(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <ui-nav-icon\n [name]=\"option.icon\"\n [size]=\"18\"\n [class]=\"themeIconClasses(themeScheme() === option.value)\" />\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </section>\n\n <section data-setting=\"layout-mode\" [attr.data-current]=\"layoutMode()\" class=\"space-y-2\">\n <div class=\"px-1\">\n <p class=\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-muted-foreground\">Layout</p>\n </div>\n <div class=\"rounded-(--etos-layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-2 gap-1\">\n @for (option of layoutModeOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n [class]=\"segmentedOptionClasses(layoutMode() === option.value)\"\n data-setting-option=\"layout-mode\"\n [attr.data-value]=\"option.value\"\n (click)=\"setLayoutMode(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <ui-nav-icon\n [name]=\"option.icon\"\n [size]=\"18\"\n [class]=\"themeIconClasses(layoutMode() === option.value)\" />\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section data-setting=\"layout-width\" [attr.data-current]=\"layoutWidth()\" class=\"space-y-2\">\n <div class=\"px-1\">\n <p class=\"text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-muted-foreground\">Width</p>\n </div>\n <div class=\"rounded-(--etos-layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-2 gap-1\">\n @for (option of layoutWidthOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n [class]=\"segmentedOptionClasses(layoutWidth() === option.value)\"\n data-setting-option=\"layout-width\"\n [attr.data-value]=\"option.value\"\n (click)=\"setLayoutWidth(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <ui-nav-icon\n [name]=\"option.icon\"\n [size]=\"18\"\n [class]=\"themeIconClasses(layoutWidth() === option.value)\" />\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section class=\"space-y-1 border-t border-border/70 pt-2\">\n <h3 class=\"sr-only\">Quick Actions</h3>\n <div class=\"grid gap-1\">\n @for (action of actionOptions(); track action.value) {\n <button\n type=\"button\"\n ui-button\n variant=\"ghost\"\n [class]=\"actionButtonClasses(action.tone ?? 'default')\"\n data-action-option\n [attr.data-value]=\"action.value\"\n (click)=\"triggerAction(action.value)\">\n <span class=\"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-muted/65\">\n <ui-nav-icon\n [name]=\"action.icon\"\n [size]=\"19\"\n [class]=\"actionIconClasses(action.tone ?? 'default')\" />\n </span>\n <span [class]=\"actionLabelClasses(action.tone ?? 'default')\">\n {{ action.label }}\n </span>\n </button>\n }\n </div>\n </section>\n </div>\n </section>\n </ng-template>\n `,\n})\nexport class EtosThemeSwitcherComponent {\n private readonly theme = inject(ThemeService);\n private readonly layout = inject(LayoutService);\n private readonly popoverTrigger = viewChild.required<PopoverTriggerDirective>('trigger');\n\n readonly class = input<string>('');\n readonly userInfo = input<EtosThemeSwitcherUserInfo | null>(null);\n readonly userName = input<string>('User');\n readonly userSubtitle = input<string>('Theme and layout preferences');\n readonly avatarSrc = input<string | null>(null);\n readonly avatarAlt = input<string>('');\n readonly quickActions = input.required<readonly EtosThemeSwitcherQuickAction[]>();\n readonly notificationShortcut = input<EtosThemeSwitcherNotificationShortcut | null>(null);\n readonly showNotificationShortcut = input<boolean>(false);\n readonly popoverSide = input<PopoverSide>('bottom');\n readonly popoverAlign = input<PopoverAlign>('end');\n readonly actionSelected = output<EtosThemeSwitcherAction>();\n\n protected readonly themeMode = this.theme.mode;\n protected readonly themeScheme = this.theme.scheme;\n protected readonly layoutMode = this.layout.mode;\n protected readonly layoutWidth = this.layout.width;\n\n protected readonly themeSchemeOptions = THEME_SCHEME_OPTIONS;\n protected readonly layoutModeOptions = LAYOUT_MODE_OPTIONS;\n protected readonly layoutWidthOptions = LAYOUT_WIDTH_OPTIONS;\n protected readonly notificationShortcutConfig = computed<Required<EtosThemeSwitcherNotificationShortcut> | null>(\n () => {\n const shortcut = this.notificationShortcut();\n\n if (shortcut) {\n return {\n value: shortcut.value ?? 'notifications',\n icon: shortcut.icon ?? 'notifications',\n ariaLabel: shortcut.ariaLabel ?? `Open notifications for ${this.resolvedUserName()}`,\n };\n }\n\n if (!this.showNotificationShortcut()) {\n return null;\n }\n\n return {\n value: 'notifications',\n icon: 'notifications',\n ariaLabel: `Open notifications for ${this.resolvedUserName()}`,\n };\n },\n );\n protected readonly actionOptions = computed(() => {\n const shortcutValue = this.notificationShortcutConfig()?.value;\n\n if (!shortcutValue) {\n return this.quickActions();\n }\n\n return this.quickActions().filter((action) => action.value !== shortcutValue);\n });\n\n protected readonly hostClasses = computed(() => cn('inline-flex shrink-0 items-center gap-2', this.class()));\n protected readonly resolvedUserName = computed(() => this.userInfo()?.name?.trim() || this.userName());\n protected readonly resolvedUserSubtitle = computed(() => this.userInfo()?.subtitle ?? this.userSubtitle());\n protected readonly resolvedAvatarSrc = computed(() => this.userInfo()?.avatarSrc ?? this.avatarSrc());\n protected readonly resolvedAvatarAlt = computed(() => this.userInfo()?.avatarAlt ?? this.avatarAlt());\n protected readonly hasAvatar = computed(() => !!this.resolvedAvatarSrc());\n protected readonly avatarImageSrc = computed(() => this.resolvedAvatarSrc() ?? '');\n protected readonly avatarAltText = computed(() => this.resolvedAvatarAlt() || `${this.resolvedUserName()} avatar`);\n protected readonly initials = computed(() => this.toInitials(this.resolvedUserName()));\n protected readonly triggerLabel = computed(() => `Open user info for ${this.resolvedUserName()}`);\n\n protected triggerButtonClasses(open: boolean): string {\n return cn(\n 'relative h-8 w-8 rounded-full p-0 transition-colors duration-150 hover:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n open && 'bg-muted/50',\n );\n }\n\n protected notificationButtonClasses(): string {\n return cn(\n 'h-8 w-8 rounded-[var(--etos-layout-frame-radius)] p-0 text-muted-foreground transition-colors duration-150 hover:bg-muted/50 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n );\n }\n\n protected segmentedOptionClasses(active: boolean): string {\n return cn(\n 'h-10 rounded-[var(--etos-layout-frame-radius)] border border-transparent px-[0.3125rem] py-[0.1875rem] text-foreground transition-colors',\n active ? 'bg-background shadow-sm' : 'text-muted-foreground hover:bg-background/70',\n );\n }\n\n protected themeOptionClasses(active: boolean): string {\n return this.segmentedOptionClasses(active);\n }\n\n protected themeIconClasses(active: boolean): string {\n return active ? 'text-foreground' : 'text-muted-foreground';\n }\n\n protected actionButtonClasses(tone: EtosThemeSwitcherActionTone = 'default'): string {\n return cn(\n 'h-12 w-full justify-start gap-2.5 rounded-[var(--etos-layout-frame-radius)] border border-transparent px-2 py-1.5 text-left transition-colors hover:bg-muted/50',\n tone === 'destructive' && 'hover:bg-destructive/8 focus-visible:ring-destructive/30',\n );\n }\n\n protected actionIconClasses(tone: EtosThemeSwitcherActionTone = 'default'): string {\n return tone === 'destructive' ? 'text-destructive' : 'text-foreground';\n }\n\n protected actionLabelClasses(tone: EtosThemeSwitcherActionTone = 'default'): string {\n return tone === 'destructive' ? 'text-sm font-medium text-destructive' : 'text-sm font-medium text-foreground';\n }\n\n protected setThemeScheme(mode: ColorScheme): void {\n this.theme.setScheme(mode);\n }\n\n protected setLayoutMode(mode: LayoutMode): void {\n this.layout.setMode(mode);\n }\n\n protected setLayoutWidth(width: LayoutWidth): void {\n this.layout.setWidth(width);\n }\n\n protected triggerAction(action: EtosThemeSwitcherAction): void {\n this.actionSelected.emit(action);\n this.popoverTrigger().close();\n }\n\n protected triggerNotificationAction(event: Event): void {\n event.stopPropagation();\n\n const shortcut = this.notificationShortcutConfig();\n\n if (!shortcut) {\n return;\n }\n\n this.actionSelected.emit(shortcut.value);\n }\n\n private labelForLayoutMode(mode: LayoutMode): string {\n return mode === 'horizontal' ? 'Horizontal' : 'Vertical';\n }\n\n private labelForLayoutWidth(width: LayoutWidth): string {\n return width === 'full' ? 'Full' : 'Fixed';\n }\n\n private toInitials(name: string): string {\n const segments = name.trim().split(/\\s+/).filter(Boolean);\n\n if (segments.length === 0) {\n return 'UI';\n }\n\n if (segments.length === 1) {\n return segments[0].slice(0, 2).toUpperCase();\n }\n\n return `${segments[0][0] ?? ''}${segments[1][0] ?? ''}`.toUpperCase();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'etos-empty-layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterOutlet],\n host: {\n class: 'etos-layout-empty-host',\n 'data-brand-layout': 'etos-empty',\n },\n template: `\n <main class=\"etos-layout-empty-main\">\n <router-outlet />\n </main>\n `,\n})\nexport class EtosEmptyLayoutComponent {}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { LayoutService } from '@ojiepermana/angular/layout';\nimport { TopbarComponent, type TopbarAppearance } from '@ojiepermana/angular/navigation';\n\n@Component({\n selector: 'etos-horizontal-layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterOutlet, TopbarComponent],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-brand-layout]': 'brandLayout',\n '[attr.data-layout-width]': 'layoutWidth()',\n },\n template: `\n <div [class]=\"frameClasses()\">\n <ui-topbar\n class=\"etos-layout-topbar\"\n [appearance]=\"topbarAppearance()\"\n [ariaLabel]=\"ariaLabel()\"\n [style.border-bottom-width]=\"dividerBorderWidth()\">\n <div ui-topbar-start class=\"etos-layout-topbar-slot etos-layout-topbar-slot--start\">\n <ng-content select=\"[ui-layout-brand],[ui-topbar-start]\" />\n </div>\n <div ui-topbar-end class=\"etos-layout-topbar-slot etos-layout-topbar-slot--end\">\n <ng-content select=\"[ui-layout-profile],[ui-topbar-end]\" />\n </div>\n </ui-topbar>\n <main [class]=\"mainClasses()\">\n <router-outlet />\n </main>\n </div>\n `,\n})\nexport class EtosHorizontalLayoutComponent {\n private readonly layout = inject(LayoutService);\n\n readonly topbarAppearance = input<TopbarAppearance>('default');\n readonly ariaLabel = input<string>('Primary');\n\n protected readonly brandLayout = 'etos-horizontal';\n protected readonly layoutWidth = this.layout.width;\n protected readonly dividerBorderWidth = computed(() => 'var(--border-width)');\n\n protected readonly hostClasses = computed(() => {\n const classes = ['etos-layout-host', 'etos-layout-host--horizontal'];\n if (this.layoutWidth() === 'fixed') {\n classes.push('etos-layout-host--fixed');\n }\n return classes.join(' ');\n });\n\n protected readonly frameClasses = computed(() => {\n const classes = ['etos-layout-frame', 'etos-layout-frame--horizontal'];\n if (this.layoutWidth() === 'fixed') {\n classes.push('etos-layout-frame--fixed');\n }\n return classes.join(' ');\n });\n\n protected readonly mainClasses = computed(() => {\n const classes = ['etos-layout-main'];\n return classes.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { LayoutService } from '@ojiepermana/angular/layout';\nimport { SidebarComponent, type SidebarAppearance, type SidebarPosition } from '@ojiepermana/angular/navigation';\n\n@Component({\n selector: 'etos-vertical-layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterOutlet, SidebarComponent],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-brand-layout]': 'brandLayout',\n '[attr.data-layout-width]': 'layoutWidth()',\n },\n template: `\n <div [class]=\"frameClasses()\">\n <ui-sidebar\n class=\"etos-layout-sidebar\"\n [appearance]=\"sidebarAppearance()\"\n [position]=\"sidebarPosition()\"\n [ariaLabel]=\"ariaLabel()\"\n [style.border-left-width]=\"dividerBorderWidth()\"\n [style.border-right-width]=\"dividerBorderWidth()\">\n <div ui-sidebar-header class=\"flex h-full w-full min-w-0 items-center\">\n <ng-content select=\"[ui-layout-brand],[ui-topbar-start],[ui-sidebar-header]\" />\n </div>\n\n <div ui-sidebar-footer class=\"flex h-full w-full min-w-0 items-center justify-between gap-3 px-3\">\n <ng-content select=\"[ui-layout-profile],[ui-topbar-end],[ui-sidebar-footer]\" />\n </div>\n </ui-sidebar>\n <main [class]=\"mainClasses()\">\n <router-outlet />\n </main>\n </div>\n `,\n})\nexport class EtosVerticalLayoutComponent {\n private readonly layout = inject(LayoutService);\n\n readonly sidebarAppearance = input<SidebarAppearance>('default');\n readonly sidebarPosition = input<SidebarPosition>('left');\n readonly ariaLabel = input<string>('Primary');\n\n protected readonly brandLayout = 'etos-vertical';\n protected readonly layoutWidth = this.layout.width;\n protected readonly dividerBorderWidth = computed(() => 'var(--border-width)');\n\n protected readonly hostClasses = computed(() => {\n const classes = ['etos-layout-host', 'etos-layout-host--vertical'];\n if (this.layoutWidth() === 'fixed') {\n classes.push('etos-layout-host--fixed');\n }\n return classes.join(' ');\n });\n\n protected readonly frameClasses = computed(() => {\n const classes = ['etos-layout-frame', 'etos-layout-frame--vertical'];\n if (this.layoutWidth() === 'fixed') {\n classes.push('etos-layout-frame--fixed', 'etos-layout-frame--vertical-fixed');\n }\n return classes.join(' ');\n });\n\n protected readonly mainClasses = computed(() => {\n const classes = ['etos-layout-main'];\n if (this.layoutWidth() === 'fixed') {\n classes.push('etos-layout-main--fixed', 'etos-layout-main--vertical-fixed');\n }\n return classes.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport { LayoutService } from '@ojiepermana/angular/layout';\nimport { EtosHorizontalLayoutComponent } from './etos-horizontal-layout.component';\nimport { EtosVerticalLayoutComponent } from './etos-vertical-layout.component';\n\n@Component({\n selector: 'etos-layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [EtosHorizontalLayoutComponent, EtosVerticalLayoutComponent],\n host: {\n class: 'contents',\n },\n template: `\n @switch (layoutMode()) {\n @case ('horizontal') {\n <etos-horizontal-layout [ariaLabel]=\"ariaLabel()\">\n <ng-content select=\"[ui-layout-brand],[ui-topbar-start]\" />\n <ng-content select=\"[ui-layout-profile],[ui-topbar-end]\" />\n </etos-horizontal-layout>\n }\n @default {\n <etos-vertical-layout [ariaLabel]=\"ariaLabel()\" />\n }\n }\n `,\n})\nexport class EtosLayoutComponent {\n private readonly layout = inject(LayoutService);\n\n readonly ariaLabel = input<string>('Primary');\n\n protected readonly layoutMode = this.layout.mode;\n}\n","/*\n * Public API Surface of @ojiepermana/angular/etos\n *\n * Etos-specific implementation lives directly under projects/angular/etos.\n */\n\nexport * from './core/etos-brand.config';\nexport * from './core/etos-brand.provider';\nexport * from './component/theme-switcher';\nexport * from './layouts/etos-empty-layout.component';\nexport * from './layouts/etos-horizontal-layout.component';\nexport * from './layouts/etos-layout.component';\nexport * from './layouts/etos-vertical-layout.component';\n\nexport const ETOS_BRAND_VERSION = '0.0.1';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}