@ojiepermana/angular 21.1.22 → 21.1.24
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/etos/styles/style.css +4 -2
- package/fesm2022/ojiepermana-angular-brand-etos.mjs +25 -23
- package/fesm2022/ojiepermana-angular-brand-etos.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-chart.mjs +72 -72
- package/fesm2022/ojiepermana-angular-component.mjs +889 -295
- package/fesm2022/ojiepermana-angular-component.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-layout.mjs +104 -26
- package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-navigation.mjs +52 -41
- package/fesm2022/ojiepermana-angular-navigation.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-theme.mjs +27 -6
- package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -1
- package/package.json +9 -1
- package/theme/styles/themes/library/_components.css +18 -0
- package/theme/styles/themes/library/_tokens.css +11 -10
- package/theme/styles/themes/library/color/amber.css +24 -11
- package/theme/styles/themes/library/color/base.css +36 -0
- package/theme/styles/themes/library/color/blue.css +23 -15
- package/theme/styles/themes/library/color/cyan.css +31 -0
- package/theme/styles/themes/library/color/emerald.css +31 -0
- package/theme/styles/themes/library/color/fuchsia.css +31 -0
- package/theme/styles/themes/library/color/green.css +23 -10
- package/theme/styles/themes/library/color/index.css +15 -2
- package/theme/styles/themes/library/color/indigo.css +31 -0
- package/theme/styles/themes/library/color/lime.css +31 -0
- package/theme/styles/themes/library/color/orange.css +31 -0
- package/theme/styles/themes/library/color/pink.css +31 -0
- package/theme/styles/themes/library/color/purple.css +23 -10
- package/theme/styles/themes/library/color/red.css +23 -10
- package/theme/styles/themes/library/color/rose.css +31 -0
- package/theme/styles/themes/library/color/sky.css +31 -0
- package/theme/styles/themes/library/color/teal.css +31 -0
- package/theme/styles/themes/library/color/violet.css +31 -0
- package/theme/styles/themes/library/color/yellow.css +31 -0
- package/theme/styles/themes/library/style/brutal.css +4 -2
- package/theme/styles/themes/library/style/default.css +4 -2
- package/theme/styles/themes/library/style/sharp.css +4 -2
- package/theme/styles/themes/library/style/soft.css +4 -2
- package/theme/styles/themes/tailwind.css +3 -1
- package/types/ojiepermana-angular-component.d.ts +215 -6
- package/types/ojiepermana-angular-layout.d.ts +19 -3
- package/types/ojiepermana-angular-navigation.d.ts +7 -2
- package/types/ojiepermana-angular-theme.d.ts +4 -4
package/etos/styles/style.css
CHANGED
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
*/
|
|
4
4
|
@layer tokens {
|
|
5
5
|
[theme-brand='etos'] {
|
|
6
|
+
--theme-radius-xs: 0.125rem;
|
|
6
7
|
--theme-radius-base: 0.375rem;
|
|
7
8
|
--theme-radius-sm: calc(var(--theme-radius-base) - 2px);
|
|
8
9
|
--theme-radius-md: var(--theme-radius-base);
|
|
9
10
|
--theme-radius-lg: calc(var(--theme-radius-base) + 2px);
|
|
10
11
|
|
|
11
|
-
--radius: var(--theme-radius-
|
|
12
|
+
--radius: var(--theme-radius-md);
|
|
13
|
+
--radius-xs: var(--theme-radius-xs);
|
|
12
14
|
--radius-sm: var(--theme-radius-sm);
|
|
13
15
|
--radius-md: var(--theme-radius-md);
|
|
14
16
|
--radius-lg: var(--theme-radius-lg);
|
|
@@ -33,7 +35,7 @@
|
|
|
33
35
|
--font-weight-bold: 650;
|
|
34
36
|
--theme-text-scale: 1;
|
|
35
37
|
--nav-font-family: var(--font-sans);
|
|
36
|
-
--nav-text-size: var(--text-sm);
|
|
38
|
+
--nav-text-size: calc(var(--text-sm) - 0.125rem);
|
|
37
39
|
--nav-text-line-height: var(--text-sm--line-height);
|
|
38
40
|
--nav-heading-font-family: var(--font-sans);
|
|
39
41
|
--nav-heading-size: var(--text-xs);
|
|
@@ -195,8 +195,8 @@ class EtosThemeSwitcherComponent {
|
|
|
195
195
|
}
|
|
196
196
|
return `${segments[0][0] ?? ''}${segments[1][0] ?? ''}`.toUpperCase();
|
|
197
197
|
}
|
|
198
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
199
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
198
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: EtosThemeSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
199
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: EtosThemeSwitcherComponent, isStandalone: true, selector: "etos-theme-switcher", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, userInfo: { classPropertyName: "userInfo", publicName: "userInfo", isSignal: true, isRequired: false, transformFunction: null }, userName: { classPropertyName: "userName", publicName: "userName", isSignal: true, isRequired: false, transformFunction: null }, userSubtitle: { classPropertyName: "userSubtitle", publicName: "userSubtitle", isSignal: true, isRequired: false, transformFunction: null }, avatarSrc: { classPropertyName: "avatarSrc", publicName: "avatarSrc", isSignal: true, isRequired: false, transformFunction: null }, avatarAlt: { classPropertyName: "avatarAlt", publicName: "avatarAlt", isSignal: true, isRequired: false, transformFunction: null }, quickActions: { classPropertyName: "quickActions", publicName: "quickActions", isSignal: true, isRequired: true, transformFunction: null }, notificationShortcut: { classPropertyName: "notificationShortcut", publicName: "notificationShortcut", isSignal: true, isRequired: false, transformFunction: null }, showNotificationShortcut: { classPropertyName: "showNotificationShortcut", publicName: "showNotificationShortcut", isSignal: true, isRequired: false, transformFunction: null }, popoverSide: { classPropertyName: "popoverSide", publicName: "popoverSide", isSignal: true, isRequired: false, transformFunction: null }, popoverAlign: { classPropertyName: "popoverAlign", publicName: "popoverAlign", isSignal: true, isRequired: false, transformFunction: null }, popoverSideOffset: { classPropertyName: "popoverSideOffset", publicName: "popoverSideOffset", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { actionSelected: "actionSelected" }, host: { properties: { "class": "hostClasses()" } }, viewQueries: [{ propertyName: "popoverTrigger", first: true, predicate: ["trigger"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
200
200
|
@if (notificationShortcutConfig(); as shortcut) {
|
|
201
201
|
<button
|
|
202
202
|
type="button"
|
|
@@ -380,7 +380,7 @@ class EtosThemeSwitcherComponent {
|
|
|
380
380
|
</ng-template>
|
|
381
381
|
`, isInline: true, dependencies: [{ kind: "component", type: AvatarComponent, selector: "ui-avatar", inputs: ["class"] }, { kind: "component", type: AvatarFallbackComponent, selector: "ui-avatar-fallback", inputs: ["class"] }, { kind: "component", type: AvatarImageComponent, selector: "ui-avatar-image", inputs: ["src", "alt", "class"] }, { kind: "component", type: ButtonComponent, selector: "button[ui-button], a[ui-button]", inputs: ["variant", "size", "class"] }, { kind: "directive", type: PopoverContentDirective, selector: "ng-template[uiPopoverContent]", exportAs: ["uiPopoverContent"] }, { kind: "directive", type: PopoverTriggerDirective, selector: "[uiPopoverTrigger]", inputs: ["uiPopoverTrigger", "side", "align", "sideOffset", "disabled"], outputs: ["openedChange"], exportAs: ["uiPopoverTrigger"] }, { kind: "component", type: UiNavIconComponent, selector: "ui-nav-icon", inputs: ["name", "class", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
382
382
|
}
|
|
383
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
383
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: EtosThemeSwitcherComponent, decorators: [{
|
|
384
384
|
type: Component,
|
|
385
385
|
args: [{
|
|
386
386
|
selector: 'etos-theme-switcher',
|
|
@@ -584,8 +584,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
|
|
|
584
584
|
}], propDecorators: { popoverTrigger: [{ type: i0.ViewChild, args: ['trigger', { isSignal: true }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], userInfo: [{ type: i0.Input, args: [{ isSignal: true, alias: "userInfo", required: false }] }], userName: [{ type: i0.Input, args: [{ isSignal: true, alias: "userName", required: false }] }], userSubtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "userSubtitle", required: false }] }], avatarSrc: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarSrc", required: false }] }], avatarAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarAlt", required: false }] }], quickActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "quickActions", required: true }] }], notificationShortcut: [{ type: i0.Input, args: [{ isSignal: true, alias: "notificationShortcut", required: false }] }], showNotificationShortcut: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNotificationShortcut", required: false }] }], popoverSide: [{ type: i0.Input, args: [{ isSignal: true, alias: "popoverSide", required: false }] }], popoverAlign: [{ type: i0.Input, args: [{ isSignal: true, alias: "popoverAlign", required: false }] }], popoverSideOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "popoverSideOffset", required: false }] }], actionSelected: [{ type: i0.Output, args: ["actionSelected"] }] } });
|
|
585
585
|
|
|
586
586
|
class EmptyLayout {
|
|
587
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
588
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
587
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: EmptyLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
588
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.13", type: EmptyLayout, isStandalone: true, selector: "empty", ngImport: i0, template: `
|
|
589
589
|
<div
|
|
590
590
|
class="h-dvh overflow-hidden bg-neutral-200 bg-[linear-gradient(rgba(212,212,212,0.45)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.45)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]">
|
|
591
591
|
<div class="relative isolate box-border h-full overflow-hidden py-3">
|
|
@@ -605,7 +605,7 @@ class EmptyLayout {
|
|
|
605
605
|
</div>
|
|
606
606
|
`, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
607
607
|
}
|
|
608
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
608
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: EmptyLayout, decorators: [{
|
|
609
609
|
type: Component,
|
|
610
610
|
args: [{ selector: 'empty', imports: [RouterOutlet], template: `
|
|
611
611
|
<div
|
|
@@ -700,8 +700,8 @@ class HorizontalLayout {
|
|
|
700
700
|
}
|
|
701
701
|
return classes.join(' ');
|
|
702
702
|
}, ...(ngDevMode ? [{ debugName: "contentClasses" }] : /* istanbul ignore next */ []));
|
|
703
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
704
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
703
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: HorizontalLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
704
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: HorizontalLayout, isStandalone: true, selector: "horizontal", inputs: { brandTemplate: { classPropertyName: "brandTemplate", publicName: "brandTemplate", isSignal: true, isRequired: false, transformFunction: null }, profileTemplate: { classPropertyName: "profileTemplate", publicName: "profileTemplate", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-layout-width": "layoutWidth()" }, classAttribute: "block" }, ngImport: i0, template: `
|
|
705
705
|
<div
|
|
706
706
|
class="min-h-screen bg-neutral-200 text-neutral-600 bg-[linear-gradient(rgba(212,212,212,0.45)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.45)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]">
|
|
707
707
|
<div [class]="shellClasses()">
|
|
@@ -745,7 +745,7 @@ class HorizontalLayout {
|
|
|
745
745
|
</div>
|
|
746
746
|
`, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: TopbarComponent, selector: "topbar", inputs: ["items", "navigationId", "appearance", "ariaLabel", "class", "autoRegister", "showHamburger", "hamburgerLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
747
747
|
}
|
|
748
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
748
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: HorizontalLayout, decorators: [{
|
|
749
749
|
type: Component,
|
|
750
750
|
args: [{ selector: 'horizontal', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, RouterOutlet, TopbarComponent], host: {
|
|
751
751
|
class: 'block',
|
|
@@ -846,8 +846,8 @@ class VerticalLayout {
|
|
|
846
846
|
}
|
|
847
847
|
return classes.join(' ');
|
|
848
848
|
}, ...(ngDevMode ? [{ debugName: "gridClasses" }] : /* istanbul ignore next */ []));
|
|
849
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
850
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
849
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: VerticalLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
850
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: VerticalLayout, isStandalone: true, selector: "vertical", inputs: { sidebarAppearance: { classPropertyName: "sidebarAppearance", publicName: "sidebarAppearance", isSignal: true, isRequired: false, transformFunction: null }, sidebarPosition: { classPropertyName: "sidebarPosition", publicName: "sidebarPosition", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, sidebarHeaderTemplate: { classPropertyName: "sidebarHeaderTemplate", publicName: "sidebarHeaderTemplate", isSignal: true, isRequired: false, transformFunction: null }, sidebarFooterTemplate: { classPropertyName: "sidebarFooterTemplate", publicName: "sidebarFooterTemplate", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-layout-width": "layoutWidth()" }, classAttribute: "block h-dvh overflow-hidden" }, ngImport: i0, template: `
|
|
851
851
|
<!-- prettier-ignore -->
|
|
852
852
|
<div class="h-full overflow-hidden bg-neutral-200 bg-[linear-gradient(rgba(212,212,212,0.65)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.65)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]">
|
|
853
853
|
<div [class]="shellClasses()">
|
|
@@ -864,13 +864,14 @@ class VerticalLayout {
|
|
|
864
864
|
<div
|
|
865
865
|
aria-hidden="true"
|
|
866
866
|
class="pointer-events-none absolute bottom-[-100vh] right-0 top-[-100vh] z-20 w-px bg-brand"></div>
|
|
867
|
-
<nav class="relative h-full min-h-0 shrink-0 overflow-visible border-r border-
|
|
867
|
+
<nav class="relative h-full min-h-0 shrink-0 overflow-visible border-r border-primary/30">
|
|
868
868
|
<div
|
|
869
869
|
aria-hidden="true"
|
|
870
|
-
class="pointer-events-none absolute bottom-[-100vh] left-full top-[-100vh] -z-10 w-px bg-
|
|
870
|
+
class="pointer-events-none absolute bottom-[-100vh] left-full top-[-100vh] -z-10 w-px bg-primary/30"></div>
|
|
871
871
|
<sidebar
|
|
872
872
|
class="h-full"
|
|
873
873
|
[appearance]="sidebarAppearance()"
|
|
874
|
+
[borderSource]="'layout'"
|
|
874
875
|
[position]="sidebarPosition()"
|
|
875
876
|
[ariaLabel]="ariaLabel()">
|
|
876
877
|
@if (sidebarHeaderTemplate(); as headerTemplate) {
|
|
@@ -893,9 +894,9 @@ class VerticalLayout {
|
|
|
893
894
|
</div>
|
|
894
895
|
</div>
|
|
895
896
|
</div>
|
|
896
|
-
`, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: SidebarComponent, selector: "sidebar", inputs: ["items", "navigationId", "appearance", "position", "ariaLabel", "header", "class", "autoMobile", "autoRegister"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
897
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: SidebarComponent, selector: "sidebar", inputs: ["items", "navigationId", "appearance", "borderSource", "position", "ariaLabel", "header", "class", "autoMobile", "autoRegister"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
897
898
|
}
|
|
898
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
899
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: VerticalLayout, decorators: [{
|
|
899
900
|
type: Component,
|
|
900
901
|
args: [{ selector: 'vertical', imports: [NgTemplateOutlet, RouterOutlet, SidebarComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
901
902
|
class: 'block h-dvh overflow-hidden',
|
|
@@ -917,13 +918,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
|
|
|
917
918
|
<div
|
|
918
919
|
aria-hidden="true"
|
|
919
920
|
class="pointer-events-none absolute bottom-[-100vh] right-0 top-[-100vh] z-20 w-px bg-brand"></div>
|
|
920
|
-
<nav class="relative h-full min-h-0 shrink-0 overflow-visible border-r border-
|
|
921
|
+
<nav class="relative h-full min-h-0 shrink-0 overflow-visible border-r border-primary/30">
|
|
921
922
|
<div
|
|
922
923
|
aria-hidden="true"
|
|
923
|
-
class="pointer-events-none absolute bottom-[-100vh] left-full top-[-100vh] -z-10 w-px bg-
|
|
924
|
+
class="pointer-events-none absolute bottom-[-100vh] left-full top-[-100vh] -z-10 w-px bg-primary/30"></div>
|
|
924
925
|
<sidebar
|
|
925
926
|
class="h-full"
|
|
926
927
|
[appearance]="sidebarAppearance()"
|
|
928
|
+
[borderSource]="'layout'"
|
|
927
929
|
[position]="sidebarPosition()"
|
|
928
930
|
[ariaLabel]="ariaLabel()">
|
|
929
931
|
@if (sidebarHeaderTemplate(); as headerTemplate) {
|
|
@@ -957,8 +959,8 @@ class EtosLayoutComponent {
|
|
|
957
959
|
layoutProfileTemplate = input(null, ...(ngDevMode ? [{ debugName: "layoutProfileTemplate" }] : /* istanbul ignore next */ []));
|
|
958
960
|
layout = inject(LayoutService);
|
|
959
961
|
resolvedMode = computed(() => this.mode() ?? this.layout.mode(), ...(ngDevMode ? [{ debugName: "resolvedMode" }] : /* istanbul ignore next */ []));
|
|
960
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
961
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
962
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: EtosLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
963
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.13", type: EtosLayoutComponent, isStandalone: true, selector: "etos-layout", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, sidebarHeaderTemplate: { classPropertyName: "sidebarHeaderTemplate", publicName: "sidebarHeaderTemplate", isSignal: true, isRequired: false, transformFunction: null }, sidebarFooterTemplate: { classPropertyName: "sidebarFooterTemplate", publicName: "sidebarFooterTemplate", isSignal: true, isRequired: false, transformFunction: null }, layoutBrandTemplate: { classPropertyName: "layoutBrandTemplate", publicName: "layoutBrandTemplate", isSignal: true, isRequired: false, transformFunction: null }, layoutProfileTemplate: { classPropertyName: "layoutProfileTemplate", publicName: "layoutProfileTemplate", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-layout-mode": "resolvedMode()" }, classAttribute: "contents" }, ngImport: i0, template: `
|
|
962
964
|
@switch (resolvedMode()) {
|
|
963
965
|
@case ('empty') {
|
|
964
966
|
<empty />
|
|
@@ -974,7 +976,7 @@ class EtosLayoutComponent {
|
|
|
974
976
|
}
|
|
975
977
|
`, isInline: true, dependencies: [{ kind: "component", type: EmptyLayout, selector: "empty" }, { kind: "component", type: HorizontalLayout, selector: "horizontal", inputs: ["brandTemplate", "profileTemplate"] }, { kind: "component", type: VerticalLayout, selector: "vertical", inputs: ["sidebarAppearance", "sidebarPosition", "ariaLabel", "sidebarHeaderTemplate", "sidebarFooterTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
976
978
|
}
|
|
977
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
979
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: EtosLayoutComponent, decorators: [{
|
|
978
980
|
type: Component,
|
|
979
981
|
args: [{
|
|
980
982
|
selector: 'etos-layout',
|
|
@@ -1003,8 +1005,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
|
|
|
1003
1005
|
}], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], sidebarHeaderTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "sidebarHeaderTemplate", required: false }] }], sidebarFooterTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "sidebarFooterTemplate", required: false }] }], layoutBrandTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "layoutBrandTemplate", required: false }] }], layoutProfileTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "layoutProfileTemplate", required: false }] }] } });
|
|
1004
1006
|
|
|
1005
1007
|
class ShellPagesComponent {
|
|
1006
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1007
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
1008
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ShellPagesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1009
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.13", type: ShellPagesComponent, isStandalone: true, selector: "shell-pages", host: { classAttribute: "block h-full min-h-0" }, ngImport: i0, template: `
|
|
1008
1010
|
<div class="flex h-full flex-col overflow-hidden">
|
|
1009
1011
|
<header class="flex h-12 min-w-0 shrink-0 items-center gap-2 border-b border-border px-2">
|
|
1010
1012
|
<ng-content select="[shell-pages-header]" />
|
|
@@ -1020,7 +1022,7 @@ class ShellPagesComponent {
|
|
|
1020
1022
|
</div>
|
|
1021
1023
|
`, isInline: true, styles: ["footer:empty{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1022
1024
|
}
|
|
1023
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1025
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.13", ngImport: i0, type: ShellPagesComponent, decorators: [{
|
|
1024
1026
|
type: Component,
|
|
1025
1027
|
args: [{ selector: 'shell-pages', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
1026
1028
|
class: 'block h-full min-h-0',
|
|
@@ -1 +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/shells/layouts/empty/empty.ts","../../../projects/angular/brand/etos/shells/layouts/horizontal/horizontal.ts","../../../projects/angular/brand/etos/shells/layouts/vertical/vertical.ts","../../../projects/angular/brand/etos/shells/layouts/etos.layout.ts","../../../projects/angular/brand/etos/shells/pages/shell-pages/shell-pages.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} 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 { value: 'empty', label: 'Empty', icon: 'crop_square' },\n] as const satisfies readonly ToggleOption<LayoutMode>[];\n\nconst LAYOUT_WIDTH_OPTIONS = [\n { value: 'full', label: 'Full', icon: 'fit_screen' },\n { value: 'container', label: 'Container', icon: 'center_focus_strong' },\n { value: 'wide', label: 'Wide', icon: 'width_wide' },\n] as const satisfies readonly ToggleOption<LayoutWidth>[];\n\nconst SWITCHER_PANEL_OVERLAP_OFFSET = -32;\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]=\"resolvedPopoverSide()\"\n [align]=\"resolvedPopoverAlign()\"\n [sideOffset]=\"resolvedPopoverSideOffset()\"\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 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-(--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-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 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-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 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 | null>(null);\n readonly popoverAlign = input<PopoverAlign | null>(null);\n readonly popoverSideOffset = input<number | null>(null);\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 resolvedPopoverSide = computed<PopoverSide>(\n () => this.popoverSide() ?? (this.layoutMode() === 'vertical' ? 'top' : 'bottom'),\n );\n protected readonly resolvedPopoverAlign = computed<PopoverAlign>(\n () => this.popoverAlign() ?? (this.layoutMode() === 'vertical' ? 'start' : 'end'),\n );\n protected readonly resolvedPopoverSideOffset = computed(\n () => this.popoverSideOffset() ?? SWITCHER_PANEL_OVERLAP_OFFSET,\n );\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(--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(--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(--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 if (mode === 'horizontal') {\n return 'Horizontal';\n }\n\n if (mode === 'empty') {\n return 'Empty';\n }\n\n return 'Vertical';\n }\n\n private labelForLayoutWidth(width: LayoutWidth): string {\n if (width === 'container') {\n return 'Container';\n }\n\n if (width === 'wide') {\n return 'Wide';\n }\n\n return 'Full';\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: 'empty',\n imports: [RouterOutlet],\n template: `\n <div\n class=\"h-dvh overflow-hidden bg-neutral-200 bg-[linear-gradient(rgba(212,212,212,0.45)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.45)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]\">\n <div class=\"relative isolate box-border h-full overflow-hidden py-3\">\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-y-0 inset-x-0 px-3\">\n <div class=\"relative mx-auto h-full w-full\">\n <div class=\"absolute inset-y-0 left-0 w-px bg-brand\"></div>\n <div class=\"absolute inset-y-0 right-0 w-px bg-brand\"></div>\n </div>\n </div>\n\n <div class=\"h-full min-h-0 border border-brand px-3\">\n <main class=\"mx-auto w-full h-full min-h-0 overflow-y-auto bg-background/65\">\n <router-outlet />\n </main>\n </div>\n </div>\n </div>\n `,\n styles: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmptyLayout {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, type TemplateRef } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { LayoutService } from '@ojiepermana/angular/layout';\nimport { TopbarComponent } from '@ojiepermana/angular/navigation';\n\n@Component({\n selector: 'horizontal',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, RouterOutlet, TopbarComponent],\n host: {\n class: 'block',\n '[attr.data-layout-width]': 'layoutWidth()',\n },\n template: `\n <div\n class=\"min-h-screen bg-neutral-200 text-neutral-600 bg-[linear-gradient(rgba(212,212,212,0.45)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.45)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]\">\n <div [class]=\"shellClasses()\">\n <div aria-hidden=\"true\" [class]=\"railOverlayClasses()\">\n <div [class]=\"railGuideClasses()\">\n <div class=\"absolute inset-y-0 left-0 w-px bg-brand\"></div>\n <div class=\"absolute inset-y-0 right-0 w-px bg-brand\"></div>\n </div>\n </div>\n\n <div [class]=\"frameClasses()\">\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-0 z-0\">\n <div class=\"absolute inset-x-0 top-11 h-px bg-brand\"></div>\n <div class=\"absolute inset-x-0 bottom-11 h-px bg-brand\"></div>\n </div>\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-0 z-10\">\n <div [class]=\"maskClasses()\"></div>\n </div>\n <div [class]=\"contentClasses()\">\n <nav class=\"shrink-0\">\n <topbar class=\"shrink-0\" [showHamburger]=\"false\">\n @if (brandTemplate(); as brand) {\n <div topbar-start class=\"min-w-0\">\n <ng-container [ngTemplateOutlet]=\"brand\" />\n </div>\n }\n\n @if (profileTemplate(); as profile) {\n <div topbar-end class=\"flex min-w-0 items-center\">\n <ng-container [ngTemplateOutlet]=\"profile\" />\n </div>\n }\n </topbar>\n </nav>\n <main class=\"min-h-0 flex-1 overflow-auto\">\n <router-outlet />\n </main>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: ``,\n})\nexport class HorizontalLayout {\n private readonly layout = inject(LayoutService);\n\n readonly brandTemplate = input<TemplateRef<unknown> | null>(null);\n readonly profileTemplate = input<TemplateRef<unknown> | null>(null);\n\n protected readonly layoutWidth = this.layout.width;\n protected readonly shellClasses = computed(() => {\n switch (this.layoutWidth()) {\n case 'full':\n return 'relative isolate box-border h-dvh overflow-hidden py-3';\n case 'wide':\n return 'relative isolate box-border h-dvh overflow-hidden py-3 lg:py-10';\n default:\n return 'relative isolate box-border h-dvh overflow-hidden py-3 lg:py-20';\n }\n });\n\n protected readonly railOverlayClasses = computed(() => {\n const classes = ['pointer-events-none', 'absolute', 'inset-y-0', 'inset-x-0', 'z-20'];\n if (this.layoutWidth() === 'full') {\n classes.push('px-3');\n } else if (this.layoutWidth() === 'wide') {\n classes.push('px-3', 'lg:px-10');\n } else {\n classes.push('px-3', 'lg:px-10');\n }\n return classes.join(' ');\n });\n\n protected readonly railGuideClasses = computed(() =>\n this.layoutWidth() === 'container' ? 'relative mx-auto h-full w-full max-w-7xl' : 'relative mx-auto h-full w-full',\n );\n\n protected readonly frameClasses = computed(() => {\n const classes = ['relative', 'z-10', 'h-full', 'min-h-0', 'border', 'border-brand'];\n if (this.layoutWidth() === 'full') {\n classes.push('px-3');\n } else if (this.layoutWidth() === 'wide') {\n classes.push('px-3', 'lg:px-10');\n } else {\n classes.push('px-3', 'lg:px-10');\n }\n return classes.join(' ');\n });\n\n protected readonly maskClasses = computed(() => {\n const classes = ['h-full', 'bg-position-[center_center]', 'bg-size-[2.775rem_2.775rem]'];\n if (this.layoutWidth() === 'container') {\n classes.unshift('mx-auto', 'w-full', 'max-w-7xl');\n } else {\n classes.unshift('mx-auto', 'w-full');\n }\n return classes.join(' ');\n });\n\n protected readonly contentClasses = computed(() => {\n const classes = [\n 'relative',\n 'z-20',\n 'mx-auto',\n 'flex',\n 'h-full',\n 'min-h-0',\n 'flex-col',\n 'overflow-hidden',\n 'bg-background/65',\n ];\n if (this.layoutWidth() === 'container') {\n classes.push('w-full', 'max-w-7xl');\n } else {\n classes.push('w-full');\n }\n return classes.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, type TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterOutlet } from '@angular/router';\n\nimport { SidebarComponent, type SidebarAppearance, type SidebarPosition } from '@ojiepermana/angular/navigation';\nimport { LayoutService } from '@ojiepermana/angular/layout';\n\n@Component({\n selector: 'vertical',\n imports: [NgTemplateOutlet, RouterOutlet, SidebarComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block h-dvh overflow-hidden',\n '[attr.data-layout-width]': 'layoutWidth()',\n },\n template: `\n <!-- prettier-ignore -->\n <div class=\"h-full overflow-hidden bg-neutral-200 bg-[linear-gradient(rgba(212,212,212,0.65)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.65)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]\">\n <div [class]=\"shellClasses()\">\n <div [class]=\"frameClasses()\">\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-x-0 inset-y-8\">\n <div class=\"absolute inset-x-0 top-3.75 h-px bg-brand\"></div>\n <div class=\"absolute inset-x-0 bottom-3.75 h-px bg-brand\"></div>\n </div>\n <div [class]=\"frameBodyClasses()\">\n <div [class]=\"gridClasses()\">\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute bottom-[-100vh] left-0 top-[-100vh] z-20 w-px bg-brand\"></div>\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute bottom-[-100vh] right-0 top-[-100vh] z-20 w-px bg-brand\"></div>\n <nav class=\"relative h-full min-h-0 shrink-0 overflow-visible border-r border-brand\">\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute bottom-[-100vh] left-full top-[-100vh] -z-10 w-px bg-brand\"></div>\n <sidebar\n class=\"h-full\"\n [appearance]=\"sidebarAppearance()\"\n [position]=\"sidebarPosition()\"\n [ariaLabel]=\"ariaLabel()\">\n @if (sidebarHeaderTemplate(); as headerTemplate) {\n <div sidebar-header class=\"contents\">\n <ng-container [ngTemplateOutlet]=\"headerTemplate\" />\n </div>\n }\n @if (sidebarFooterTemplate(); as footerTemplate) {\n <div sidebar-footer class=\"contents\">\n <ng-container [ngTemplateOutlet]=\"footerTemplate\" />\n </div>\n }\n </sidebar>\n </nav>\n <main class=\"relative min-h-0 min-w-0 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10\">\n <router-outlet />\n </main>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: ``,\n})\nexport class VerticalLayout {\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 readonly sidebarHeaderTemplate = input<TemplateRef<unknown> | null>(null);\n readonly sidebarFooterTemplate = input<TemplateRef<unknown> | null>(null);\n\n protected readonly layoutWidth = this.layout.width;\n protected readonly shellClasses = computed(() => {\n switch (this.layoutWidth()) {\n case 'full':\n return 'relative isolate h-full overflow-hidden py-2';\n case 'wide':\n return 'relative isolate h-full overflow-hidden py-2 lg:py-10';\n default:\n return 'relative isolate h-full overflow-hidden py-2 lg:py-18';\n }\n });\n\n protected readonly frameClasses = computed(() => {\n if (this.layoutWidth() === 'wide') {\n return 'relative h-full border-y border-brand';\n }\n\n return '-mx-18 relative h-full border-y border-brand';\n });\n\n protected readonly frameBodyClasses = computed(() => {\n if (this.layoutWidth() === 'wide') {\n return 'h-full lg:px-10';\n }\n\n return 'h-full px-20';\n });\n\n protected readonly gridClasses = computed(() => {\n const classes = [\n 'relative',\n 'mx-auto',\n 'grid',\n 'h-full',\n 'w-full',\n 'max-w-full',\n 'grid-cols-[auto_minmax(0,1fr)]',\n 'items-stretch',\n 'bg-background/65',\n ];\n\n switch (this.layoutWidth()) {\n case 'container':\n classes.push('lg:max-w-[var(--layout-vertical-shell-max-width)]');\n break;\n default:\n break;\n }\n\n return classes.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, type TemplateRef } from '@angular/core';\nimport { LayoutService, type LayoutMode } from '@ojiepermana/angular/layout';\nimport { EmptyLayout } from './empty/empty';\nimport { HorizontalLayout } from './horizontal/horizontal';\nimport { VerticalLayout } from './vertical/vertical';\n\n@Component({\n selector: 'etos-layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [EmptyLayout, HorizontalLayout, VerticalLayout],\n host: {\n class: 'contents',\n '[attr.data-layout-mode]': 'resolvedMode()',\n },\n template: `\n @switch (resolvedMode()) {\n @case ('empty') {\n <empty />\n }\n @case ('horizontal') {\n <horizontal [brandTemplate]=\"layoutBrandTemplate()\" [profileTemplate]=\"layoutProfileTemplate()\" />\n }\n @default {\n <vertical\n [sidebarHeaderTemplate]=\"sidebarHeaderTemplate() ?? layoutBrandTemplate()\"\n [sidebarFooterTemplate]=\"sidebarFooterTemplate() ?? layoutProfileTemplate()\" />\n }\n }\n `,\n})\nexport class EtosLayoutComponent {\n readonly mode = input<LayoutMode | null>(null);\n readonly sidebarHeaderTemplate = input<TemplateRef<unknown> | null>(null);\n readonly sidebarFooterTemplate = input<TemplateRef<unknown> | null>(null);\n readonly layoutBrandTemplate = input<TemplateRef<unknown> | null>(null);\n readonly layoutProfileTemplate = input<TemplateRef<unknown> | null>(null);\n\n private readonly layout = inject(LayoutService);\n protected readonly resolvedMode = computed(() => this.mode() ?? this.layout.mode());\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'shell-pages',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block h-full min-h-0',\n },\n template: `\n <div class=\"flex h-full flex-col overflow-hidden\">\n <header class=\"flex h-12 min-w-0 shrink-0 items-center gap-2 border-b border-border px-2\">\n <ng-content select=\"[shell-pages-header]\" />\n </header>\n\n <main class=\"min-h-0 flex-1 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10\">\n <ng-content select=\"[shell-pages-main]\" />\n </main>\n\n <footer class=\"flex h-12 min-w-0 shrink-0 items-center gap-2 border-t border-border px-2\">\n <ng-content select=\"[shell-pages-footer]\" />\n </footer>\n </div>\n `,\n styles: `\n footer:empty {\n display: none;\n }\n `,\n})\nexport class ShellPagesComponent {}\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 './shells/layouts/etos.layout';\nexport * from './shells/pages/shell-pages';\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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"}
|
|
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/shells/layouts/empty/empty.ts","../../../projects/angular/brand/etos/shells/layouts/horizontal/horizontal.ts","../../../projects/angular/brand/etos/shells/layouts/vertical/vertical.ts","../../../projects/angular/brand/etos/shells/layouts/etos.layout.ts","../../../projects/angular/brand/etos/shells/pages/shell-pages/shell-pages.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} 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 { value: 'empty', label: 'Empty', icon: 'crop_square' },\n] as const satisfies readonly ToggleOption<LayoutMode>[];\n\nconst LAYOUT_WIDTH_OPTIONS = [\n { value: 'full', label: 'Full', icon: 'fit_screen' },\n { value: 'container', label: 'Container', icon: 'center_focus_strong' },\n { value: 'wide', label: 'Wide', icon: 'width_wide' },\n] as const satisfies readonly ToggleOption<LayoutWidth>[];\n\nconst SWITCHER_PANEL_OVERLAP_OFFSET = -32;\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]=\"resolvedPopoverSide()\"\n [align]=\"resolvedPopoverAlign()\"\n [sideOffset]=\"resolvedPopoverSideOffset()\"\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 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-(--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-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 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-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 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 | null>(null);\n readonly popoverAlign = input<PopoverAlign | null>(null);\n readonly popoverSideOffset = input<number | null>(null);\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 resolvedPopoverSide = computed<PopoverSide>(\n () => this.popoverSide() ?? (this.layoutMode() === 'vertical' ? 'top' : 'bottom'),\n );\n protected readonly resolvedPopoverAlign = computed<PopoverAlign>(\n () => this.popoverAlign() ?? (this.layoutMode() === 'vertical' ? 'start' : 'end'),\n );\n protected readonly resolvedPopoverSideOffset = computed(\n () => this.popoverSideOffset() ?? SWITCHER_PANEL_OVERLAP_OFFSET,\n );\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(--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(--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(--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 if (mode === 'horizontal') {\n return 'Horizontal';\n }\n\n if (mode === 'empty') {\n return 'Empty';\n }\n\n return 'Vertical';\n }\n\n private labelForLayoutWidth(width: LayoutWidth): string {\n if (width === 'container') {\n return 'Container';\n }\n\n if (width === 'wide') {\n return 'Wide';\n }\n\n return 'Full';\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: 'empty',\n imports: [RouterOutlet],\n template: `\n <div\n class=\"h-dvh overflow-hidden bg-neutral-200 bg-[linear-gradient(rgba(212,212,212,0.45)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.45)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]\">\n <div class=\"relative isolate box-border h-full overflow-hidden py-3\">\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-y-0 inset-x-0 px-3\">\n <div class=\"relative mx-auto h-full w-full\">\n <div class=\"absolute inset-y-0 left-0 w-px bg-brand\"></div>\n <div class=\"absolute inset-y-0 right-0 w-px bg-brand\"></div>\n </div>\n </div>\n\n <div class=\"h-full min-h-0 border border-brand px-3\">\n <main class=\"mx-auto w-full h-full min-h-0 overflow-y-auto bg-background/65\">\n <router-outlet />\n </main>\n </div>\n </div>\n </div>\n `,\n styles: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EmptyLayout {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, type TemplateRef } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { LayoutService } from '@ojiepermana/angular/layout';\nimport { TopbarComponent } from '@ojiepermana/angular/navigation';\n\n@Component({\n selector: 'horizontal',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, RouterOutlet, TopbarComponent],\n host: {\n class: 'block',\n '[attr.data-layout-width]': 'layoutWidth()',\n },\n template: `\n <div\n class=\"min-h-screen bg-neutral-200 text-neutral-600 bg-[linear-gradient(rgba(212,212,212,0.45)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.45)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]\">\n <div [class]=\"shellClasses()\">\n <div aria-hidden=\"true\" [class]=\"railOverlayClasses()\">\n <div [class]=\"railGuideClasses()\">\n <div class=\"absolute inset-y-0 left-0 w-px bg-brand\"></div>\n <div class=\"absolute inset-y-0 right-0 w-px bg-brand\"></div>\n </div>\n </div>\n\n <div [class]=\"frameClasses()\">\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-0 z-0\">\n <div class=\"absolute inset-x-0 top-11 h-px bg-brand\"></div>\n <div class=\"absolute inset-x-0 bottom-11 h-px bg-brand\"></div>\n </div>\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-0 z-10\">\n <div [class]=\"maskClasses()\"></div>\n </div>\n <div [class]=\"contentClasses()\">\n <nav class=\"shrink-0\">\n <topbar class=\"shrink-0\" [showHamburger]=\"false\">\n @if (brandTemplate(); as brand) {\n <div topbar-start class=\"min-w-0\">\n <ng-container [ngTemplateOutlet]=\"brand\" />\n </div>\n }\n\n @if (profileTemplate(); as profile) {\n <div topbar-end class=\"flex min-w-0 items-center\">\n <ng-container [ngTemplateOutlet]=\"profile\" />\n </div>\n }\n </topbar>\n </nav>\n <main class=\"min-h-0 flex-1 overflow-auto\">\n <router-outlet />\n </main>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: ``,\n})\nexport class HorizontalLayout {\n private readonly layout = inject(LayoutService);\n\n readonly brandTemplate = input<TemplateRef<unknown> | null>(null);\n readonly profileTemplate = input<TemplateRef<unknown> | null>(null);\n\n protected readonly layoutWidth = this.layout.width;\n protected readonly shellClasses = computed(() => {\n switch (this.layoutWidth()) {\n case 'full':\n return 'relative isolate box-border h-dvh overflow-hidden py-3';\n case 'wide':\n return 'relative isolate box-border h-dvh overflow-hidden py-3 lg:py-10';\n default:\n return 'relative isolate box-border h-dvh overflow-hidden py-3 lg:py-20';\n }\n });\n\n protected readonly railOverlayClasses = computed(() => {\n const classes = ['pointer-events-none', 'absolute', 'inset-y-0', 'inset-x-0', 'z-20'];\n if (this.layoutWidth() === 'full') {\n classes.push('px-3');\n } else if (this.layoutWidth() === 'wide') {\n classes.push('px-3', 'lg:px-10');\n } else {\n classes.push('px-3', 'lg:px-10');\n }\n return classes.join(' ');\n });\n\n protected readonly railGuideClasses = computed(() =>\n this.layoutWidth() === 'container' ? 'relative mx-auto h-full w-full max-w-7xl' : 'relative mx-auto h-full w-full',\n );\n\n protected readonly frameClasses = computed(() => {\n const classes = ['relative', 'z-10', 'h-full', 'min-h-0', 'border', 'border-brand'];\n if (this.layoutWidth() === 'full') {\n classes.push('px-3');\n } else if (this.layoutWidth() === 'wide') {\n classes.push('px-3', 'lg:px-10');\n } else {\n classes.push('px-3', 'lg:px-10');\n }\n return classes.join(' ');\n });\n\n protected readonly maskClasses = computed(() => {\n const classes = ['h-full', 'bg-position-[center_center]', 'bg-size-[2.775rem_2.775rem]'];\n if (this.layoutWidth() === 'container') {\n classes.unshift('mx-auto', 'w-full', 'max-w-7xl');\n } else {\n classes.unshift('mx-auto', 'w-full');\n }\n return classes.join(' ');\n });\n\n protected readonly contentClasses = computed(() => {\n const classes = [\n 'relative',\n 'z-20',\n 'mx-auto',\n 'flex',\n 'h-full',\n 'min-h-0',\n 'flex-col',\n 'overflow-hidden',\n 'bg-background/65',\n ];\n if (this.layoutWidth() === 'container') {\n classes.push('w-full', 'max-w-7xl');\n } else {\n classes.push('w-full');\n }\n return classes.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, type TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterOutlet } from '@angular/router';\n\nimport { SidebarComponent, type SidebarAppearance, type SidebarPosition } from '@ojiepermana/angular/navigation';\nimport { LayoutService } from '@ojiepermana/angular/layout';\n\n@Component({\n selector: 'vertical',\n imports: [NgTemplateOutlet, RouterOutlet, SidebarComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block h-dvh overflow-hidden',\n '[attr.data-layout-width]': 'layoutWidth()',\n },\n template: `\n <!-- prettier-ignore -->\n <div class=\"h-full overflow-hidden bg-neutral-200 bg-[linear-gradient(rgba(212,212,212,0.65)_1px,transparent_1px),linear-gradient(to_right,rgba(212,212,212,0.65)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2.775rem_2.775rem]\">\n <div [class]=\"shellClasses()\">\n <div [class]=\"frameClasses()\">\n <div aria-hidden=\"true\" class=\"pointer-events-none absolute inset-x-0 inset-y-8\">\n <div class=\"absolute inset-x-0 top-3.75 h-px bg-brand\"></div>\n <div class=\"absolute inset-x-0 bottom-3.75 h-px bg-brand\"></div>\n </div>\n <div [class]=\"frameBodyClasses()\">\n <div [class]=\"gridClasses()\">\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute bottom-[-100vh] left-0 top-[-100vh] z-20 w-px bg-brand\"></div>\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute bottom-[-100vh] right-0 top-[-100vh] z-20 w-px bg-brand\"></div>\n <nav class=\"relative h-full min-h-0 shrink-0 overflow-visible border-r border-primary/30\">\n <div\n aria-hidden=\"true\"\n class=\"pointer-events-none absolute bottom-[-100vh] left-full top-[-100vh] -z-10 w-px bg-primary/30\"></div>\n <sidebar\n class=\"h-full\"\n [appearance]=\"sidebarAppearance()\"\n [borderSource]=\"'layout'\"\n [position]=\"sidebarPosition()\"\n [ariaLabel]=\"ariaLabel()\">\n @if (sidebarHeaderTemplate(); as headerTemplate) {\n <div sidebar-header class=\"contents\">\n <ng-container [ngTemplateOutlet]=\"headerTemplate\" />\n </div>\n }\n @if (sidebarFooterTemplate(); as footerTemplate) {\n <div sidebar-footer class=\"contents\">\n <ng-container [ngTemplateOutlet]=\"footerTemplate\" />\n </div>\n }\n </sidebar>\n </nav>\n <main class=\"relative min-h-0 min-w-0 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10\">\n <router-outlet />\n </main>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: ``,\n})\nexport class VerticalLayout {\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 readonly sidebarHeaderTemplate = input<TemplateRef<unknown> | null>(null);\n readonly sidebarFooterTemplate = input<TemplateRef<unknown> | null>(null);\n\n protected readonly layoutWidth = this.layout.width;\n protected readonly shellClasses = computed(() => {\n switch (this.layoutWidth()) {\n case 'full':\n return 'relative isolate h-full overflow-hidden py-2';\n case 'wide':\n return 'relative isolate h-full overflow-hidden py-2 lg:py-10';\n default:\n return 'relative isolate h-full overflow-hidden py-2 lg:py-18';\n }\n });\n\n protected readonly frameClasses = computed(() => {\n if (this.layoutWidth() === 'wide') {\n return 'relative h-full border-y border-brand';\n }\n\n return '-mx-18 relative h-full border-y border-brand';\n });\n\n protected readonly frameBodyClasses = computed(() => {\n if (this.layoutWidth() === 'wide') {\n return 'h-full lg:px-10';\n }\n\n return 'h-full px-20';\n });\n\n protected readonly gridClasses = computed(() => {\n const classes = [\n 'relative',\n 'mx-auto',\n 'grid',\n 'h-full',\n 'w-full',\n 'max-w-full',\n 'grid-cols-[auto_minmax(0,1fr)]',\n 'items-stretch',\n 'bg-background/65',\n ];\n\n switch (this.layoutWidth()) {\n case 'container':\n classes.push('lg:max-w-[var(--layout-vertical-shell-max-width)]');\n break;\n default:\n break;\n }\n\n return classes.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, type TemplateRef } from '@angular/core';\nimport { LayoutService, type LayoutMode } from '@ojiepermana/angular/layout';\nimport { EmptyLayout } from './empty/empty';\nimport { HorizontalLayout } from './horizontal/horizontal';\nimport { VerticalLayout } from './vertical/vertical';\n\n@Component({\n selector: 'etos-layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [EmptyLayout, HorizontalLayout, VerticalLayout],\n host: {\n class: 'contents',\n '[attr.data-layout-mode]': 'resolvedMode()',\n },\n template: `\n @switch (resolvedMode()) {\n @case ('empty') {\n <empty />\n }\n @case ('horizontal') {\n <horizontal [brandTemplate]=\"layoutBrandTemplate()\" [profileTemplate]=\"layoutProfileTemplate()\" />\n }\n @default {\n <vertical\n [sidebarHeaderTemplate]=\"sidebarHeaderTemplate() ?? layoutBrandTemplate()\"\n [sidebarFooterTemplate]=\"sidebarFooterTemplate() ?? layoutProfileTemplate()\" />\n }\n }\n `,\n})\nexport class EtosLayoutComponent {\n readonly mode = input<LayoutMode | null>(null);\n readonly sidebarHeaderTemplate = input<TemplateRef<unknown> | null>(null);\n readonly sidebarFooterTemplate = input<TemplateRef<unknown> | null>(null);\n readonly layoutBrandTemplate = input<TemplateRef<unknown> | null>(null);\n readonly layoutProfileTemplate = input<TemplateRef<unknown> | null>(null);\n\n private readonly layout = inject(LayoutService);\n protected readonly resolvedMode = computed(() => this.mode() ?? this.layout.mode());\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'shell-pages',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block h-full min-h-0',\n },\n template: `\n <div class=\"flex h-full flex-col overflow-hidden\">\n <header class=\"flex h-12 min-w-0 shrink-0 items-center gap-2 border-b border-border px-2\">\n <ng-content select=\"[shell-pages-header]\" />\n </header>\n\n <main class=\"min-h-0 flex-1 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10\">\n <ng-content select=\"[shell-pages-main]\" />\n </main>\n\n <footer class=\"flex h-12 min-w-0 shrink-0 items-center gap-2 border-t border-border px-2\">\n <ng-content select=\"[shell-pages-footer]\" />\n </footer>\n </div>\n `,\n styles: `\n footer:empty {\n display: none;\n }\n `,\n})\nexport class ShellPagesComponent {}\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 './shells/layouts/etos.layout';\nexport * from './shells/pages/shell-pages';\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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"}
|