@ojiepermana/angular-theme 22.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +364 -0
- package/fesm2022/ojiepermana-angular-theme-layout-services.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme-layout-types.mjs +32 -0
- package/fesm2022/ojiepermana-angular-theme-layout-types.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme-layout.mjs +574 -0
- package/fesm2022/ojiepermana-angular-theme-layout.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme-page.mjs +510 -0
- package/fesm2022/ojiepermana-angular-theme-page.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme-styles.mjs +244 -0
- package/fesm2022/ojiepermana-angular-theme-styles.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme.mjs +11 -0
- package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -0
- package/layout/README.md +471 -0
- package/package.json +60 -0
- package/page/README.md +239 -0
- package/styles/README.md +28 -0
- package/styles/css/index.css +9 -0
- package/styles/css/seasonal/base/components.css +129 -0
- package/styles/css/seasonal/base/package.css +6 -0
- package/styles/css/seasonal/base/tailwind.css +144 -0
- package/styles/css/seasonal/base/theme.css +287 -0
- package/styles/css/seasonal/base/tokens.css +152 -0
- package/styles/css/seasonal/ied/package.css +4 -0
- package/styles/css/seasonal/ied/theme.css +78 -0
- package/styles/css/seasonal/imlek/components.css +87 -0
- package/styles/css/seasonal/imlek/package.css +6 -0
- package/styles/css/seasonal/imlek/tailwind.css +144 -0
- package/styles/css/seasonal/imlek/theme.css +95 -0
- package/styles/css/seasonal/imlek/tokens.css +152 -0
- package/styles/css/seasonal/index.css +6 -0
- package/styles/css/seasonal/natal/package.css +4 -0
- package/styles/css/seasonal/natal/theme.css +78 -0
- package/styles/css/seasonal/new-year/package.css +4 -0
- package/styles/css/seasonal/new-year/theme.css +78 -0
- package/styles/css/seasonal/ramadhan/package.css +4 -0
- package/styles/css/seasonal/ramadhan/theme.css +78 -0
- package/types/ojiepermana-angular-theme-layout-services.d.ts +120 -0
- package/types/ojiepermana-angular-theme-layout-types.d.ts +33 -0
- package/types/ojiepermana-angular-theme-layout.d.ts +117 -0
- package/types/ojiepermana-angular-theme-page.d.ts +168 -0
- package/types/ojiepermana-angular-theme-styles.d.ts +89 -0
- package/types/ojiepermana-angular-theme.d.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ojiepermana-angular-theme-layout.mjs","sources":["../../../library/theme/layout/loading/layout-loading.component.ts","../../../library/theme/layout/layout.component.ts","../../../library/theme/layout/vertical/layout-vertical.component.ts","../../../library/theme/layout/horizontal/layout-horizontal.component.ts","../../../library/theme/layout/empty/layout-empty.component.ts","../../../library/theme/layout/fluid/layout-fluid.component.ts","../../../library/theme/layout/navigation/layout-navigation.component.ts","../../../library/theme/layout/content/layout-content.component.ts","../../../library/theme/layout/ojiepermana-angular-theme-layout.ts"],"sourcesContent":["import { Component, computed, DestroyRef, inject, input } from '@angular/core';\nimport { cn } from '@ojiepermana/angular-component/utils';\nimport { LayoutLoadingService } from '@ojiepermana/angular-theme/layout/services';\n\n/**\n * Garis progres tipis di tepi atas browser yang bergerak dari kiri ke kanan.\n * Dirender otomatis oleh `Layout` dan dikendalikan `LayoutLoadingService`,\n * sehingga aktif sendiri saat navigasi halaman atau pemuatan data berjalan.\n *\n * Boleh juga dipasang langsung di root aplikasi agar bar sudah tampil sejak\n * navigasi awal; instance tambahan di dalam `Layout` otomatis inert sehingga\n * garis tidak pernah dirender ganda.\n */\n@Component({\n selector: 'LayoutLoading',\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-state]': 'state()',\n },\n template: `\n @if (isPrimary() && loading.active()) {\n <div\n role=\"progressbar\"\n data-layout-loading-track\n class=\"h-full w-full\"\n [attr.aria-label]=\"ariaLabel()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"roundedProgress()\">\n <div\n data-layout-loading-bar\n class=\"h-full rounded-r-full bg-primary transition-[width] duration-200 ease-out\"\n [style.width.%]=\"loading.progress()\"></div>\n </div>\n }\n `,\n})\nexport class LayoutLoadingComponent {\n protected readonly loading = inject(LayoutLoadingService);\n private readonly hostId = this.loading.registerHost();\n\n readonly class = input<string>('');\n readonly ariaLabel = input<string>('Memuat halaman');\n\n protected readonly isPrimary = computed(() => this.loading.primaryHostId() === this.hostId);\n protected readonly state = computed(() => {\n if (!this.isPrimary()) {\n return 'inert';\n }\n\n return this.loading.active() ? 'active' : 'idle';\n });\n protected readonly hostClasses = computed(() =>\n cn('pointer-events-none fixed inset-x-0 top-0 z-50 block h-0.5', this.class()),\n );\n protected readonly roundedProgress = computed(() => Math.round(this.loading.progress()));\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.loading.unregisterHost(this.hostId));\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, inject, input } from '@angular/core';\nimport { cn } from '@ojiepermana/angular-component/utils';\nimport { LayoutService } from '@ojiepermana/angular-theme/layout/services';\nimport { LayoutLoadingComponent } from './loading/layout-loading.component';\nimport {\n LAYOUT_DEFAULT_STYLE,\n LAYOUT_DEFAULT_SURFACE,\n LAYOUT_DEFAULT_WIDTH,\n type LayoutStyle,\n type LayoutSurface,\n type LayoutWidth,\n} from '@ojiepermana/angular-theme/layout/types';\n\n@Component({\n selector: 'Layout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LayoutLoadingComponent],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-surface]': 'resolvedSurface()',\n '[attr.data-layout-appearance]': 'resolvedAppearance()',\n '[attr.data-layout-style]': 'resolvedStyle()',\n '[attr.data-layout-width]': 'resolvedWidth()',\n '[attr.data-layout-type]': 'layout.type()',\n },\n template: `\n <LayoutLoading />\n\n <div data-layout-stage [class]=\"frameStageClasses()\">\n @if (isBorderRail()) {\n <div\n aria-hidden=\"true\"\n data-layout-rail\n class=\"pointer-events-none col-start-1 row-start-1 z-0 overflow-visible\">\n <div data-layout-rail-anchor [class]=\"railAnchorClasses()\">\n <div\n data-layout-rail-top-left-horizontal\n class=\"absolute top-0 right-full h-[1.5px] w-[calc((100vw-100%)/2)] bg-border\"></div>\n <div\n data-layout-rail-top-left-vertical\n class=\"absolute bottom-full left-0 h-[calc((100dvh-100%)/2)] w-[1.5px] bg-border\"></div>\n <div\n data-layout-rail-top-right-horizontal\n class=\"absolute top-0 left-full h-[1.5px] w-[calc((100vw-100%)/2)] bg-border\"></div>\n <div\n data-layout-rail-top-right-vertical\n class=\"absolute bottom-full right-0 h-[calc((100dvh-100%)/2)] w-[1.5px] bg-border\"></div>\n <div\n data-layout-rail-bottom-left-horizontal\n class=\"absolute bottom-0 right-full h-[1.5px] w-[calc((100vw-100%)/2)] bg-border\"></div>\n <div\n data-layout-rail-bottom-left-vertical\n class=\"absolute top-full left-0 h-[calc((100dvh-100%)/2)] w-[1.5px] bg-border\"></div>\n <div\n data-layout-rail-bottom-right-horizontal\n class=\"absolute bottom-0 left-full h-[1.5px] w-[calc((100vw-100%)/2)] bg-border\"></div>\n <div\n data-layout-rail-bottom-right-vertical\n class=\"absolute top-full right-0 h-[calc((100dvh-100%)/2)] w-[1.5px] bg-border\"></div>\n\n @if (showsInsetRails()) {\n <div data-layout-horizontal-top-rail class=\"absolute inset-x-0 top-12 h-[1.5px] bg-border\"></div>\n <div\n data-layout-horizontal-top-left-extension\n class=\"absolute top-12 right-full h-[1.5px] w-[calc((100vw-100%)/2)] bg-border\"></div>\n <div\n data-layout-horizontal-top-right-extension\n class=\"absolute top-12 left-full h-[1.5px] w-[calc((100vw-100%)/2)] bg-border\"></div>\n <div data-layout-horizontal-bottom-rail class=\"absolute inset-x-0 bottom-12 h-[1.5px] bg-border\"></div>\n <div\n data-layout-horizontal-bottom-left-extension\n class=\"absolute bottom-12 right-full h-[1.5px] w-[calc((100vw-100%)/2)] bg-border\"></div>\n <div\n data-layout-horizontal-bottom-right-extension\n class=\"absolute bottom-12 left-full h-[1.5px] w-[calc((100vw-100%)/2)] bg-border\"></div>\n\n <div data-layout-vertical-left-rail class=\"absolute inset-y-0 -left-4 w-[1.5px] bg-border\"></div>\n <div\n data-layout-vertical-left-top-extension\n class=\"absolute bottom-full -left-4 h-[calc((100dvh-100%)/2)] w-[1.5px] bg-border\"></div>\n <div\n data-layout-vertical-left-bottom-extension\n class=\"absolute top-full -left-4 h-[calc((100dvh-100%)/2)] w-[1.5px] bg-border\"></div>\n <div data-layout-vertical-right-rail class=\"absolute inset-y-0 -right-4 w-[1.5px] bg-border\"></div>\n <div\n data-layout-vertical-right-top-extension\n class=\"absolute bottom-full -right-4 h-[calc((100dvh-100%)/2)] w-[1.5px] bg-border\"></div>\n <div\n data-layout-vertical-right-bottom-extension\n class=\"absolute top-full -right-4 h-[calc((100dvh-100%)/2)] w-[1.5px] bg-border\"></div>\n }\n </div>\n </div>\n }\n\n <div data-layout-frame [class]=\"frameLayerClasses()\">\n <div [class]=\"contentShellClasses()\">\n <ng-content />\n </div>\n </div>\n </div>\n `,\n})\nexport class LayoutComponent {\n protected readonly layout = inject(LayoutService);\n\n readonly surface = input<LayoutSurface | null>(null);\n readonly appearance = input<LayoutStyle | null>(null);\n readonly layoutStyleAttribute = input<LayoutStyle | null>(null, { alias: 'layout-style' });\n readonly width = input<LayoutWidth | null>(null);\n readonly class = input<string>('');\n\n protected readonly appearanceInput = computed(() => this.appearance() ?? this.layoutStyleAttribute());\n protected readonly resolvedSurface = computed(() => this.surface() ?? this.layout.surface());\n protected readonly resolvedAppearance = computed(() => this.appearanceInput() ?? this.layout.appearance());\n protected readonly resolvedStyle = computed(() => this.layout.appearance());\n protected readonly resolvedWidth = computed(() => this.width() ?? this.layout.width());\n protected readonly isBorderRail = computed(() => this.resolvedAppearance() === 'border-rail');\n protected readonly isFluidFrame = computed(() => this.resolvedWidth() === 'fluid' && this.layout.type() === 'fluid');\n protected readonly showsInsetRails = computed(() => {\n const layoutType = this.layout.type();\n return this.isBorderRail() && (layoutType === 'horizontal' || layoutType === 'vertical');\n });\n protected readonly frameStageClasses = computed(() =>\n cn('relative grid min-h-0 min-w-0 grid-cols-1 grid-rows-1', this.frameSizeClasses()),\n );\n protected readonly railAnchorClasses = computed(() => 'relative h-full min-h-0 w-full min-w-0');\n protected readonly contentShellClasses = computed(() =>\n cn(\n 'relative z-10 min-h-0 min-w-0',\n this.isFluidFrame() ? 'h-auto w-auto max-h-full max-w-full' : 'h-full w-full',\n this.isBorderRail() ? 'overflow-visible' : 'overflow-hidden',\n ),\n );\n\n protected readonly hostClasses = computed(() =>\n cn(\n 'relative isolate h-dvh w-full min-w-0 box-border overflow-hidden text-foreground',\n this.isFluidFrame() ? 'grid place-items-center' : 'block',\n this.surfaceClasses(),\n this.widthPaddingClasses(),\n this.class(),\n ),\n );\n\n protected readonly frameClasses = computed(() =>\n cn(\n 'relative min-h-0 min-w-0 border-border bg-background/55 backdrop-blur-xs',\n this.frameSizeClasses(),\n this.isBorderRail() ? 'overflow-visible border-[1.5px]' : 'overflow-hidden border',\n ),\n );\n protected readonly frameLayerClasses = computed(() => cn('col-start-1 row-start-1', this.frameClasses()));\n\n constructor() {\n effect(() => {\n const surface = this.surface();\n if (surface !== null) {\n this.layout.setSurface(surface, { persist: false });\n } else {\n this.layout.registerSurface(LAYOUT_DEFAULT_SURFACE);\n }\n\n const appearance = this.appearanceInput();\n if (appearance !== null) {\n this.layout.setAppearance(appearance, { persist: false });\n } else {\n this.layout.registerAppearance(LAYOUT_DEFAULT_STYLE);\n }\n\n const width = this.width();\n if (width !== null) {\n this.layout.setWidth(width, { persist: false });\n } else {\n this.layout.registerWidth(LAYOUT_DEFAULT_WIDTH);\n }\n });\n }\n\n private surfaceClasses(): string {\n switch (this.resolvedSurface()) {\n case 'grid':\n return '[--layout-grid-size:2rem] bg-background bg-[linear-gradient(hsl(var(--layout-grid-line)/var(--layout-grid-line-opacity))_1px,transparent_1px),linear-gradient(to_right,hsl(var(--layout-grid-line)/var(--layout-grid-line-opacity))_1px,transparent_1px)] bg-position-[center_center] bg-size-[var(--layout-grid-size)_var(--layout-grid-size)]';\n case 'honeycome':\n return 'bg-background bg-[radial-gradient(circle_at_0_0,hsl(var(--layout-grid-line)/var(--layout-grid-dot-opacity))_1px,transparent_1.5px)] bg-position-[center_center] bg-size-[1.25rem_1.25rem]';\n case 'line-vertical':\n return 'bg-background bg-[linear-gradient(to_right,hsl(var(--layout-grid-line)/var(--layout-grid-dot-opacity))_1px,transparent_1px)] bg-position-[center_center] bg-size-[2rem_2rem]';\n case 'line-horizontal':\n return 'bg-background bg-[linear-gradient(hsl(var(--layout-grid-line)/var(--layout-grid-dot-opacity))_1px,transparent_1px)] bg-position-[center_center] bg-size-[2rem_2rem]';\n default:\n return 'bg-background';\n }\n }\n\n private widthPaddingClasses(): string {\n switch (this.resolvedWidth()) {\n case 'wide':\n return 'p-4 lg:p-12';\n case 'container':\n return 'p-4 lg:px-0 lg:py-16';\n case 'fluid':\n return 'p-4 sm:p-6 lg:p-8';\n default:\n return 'p-4';\n }\n }\n\n private frameSizeClasses(): string {\n if (this.isFluidFrame()) {\n return 'h-auto w-auto max-h-full max-w-full';\n }\n\n return this.resolvedWidth() === 'container' ? 'h-full w-full lg:container lg:mx-auto' : 'h-full w-full';\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { cn } from '@ojiepermana/angular-component/utils';\nimport { LayoutService } from '@ojiepermana/angular-theme/layout/services';\n\n@Component({\n selector: 'LayoutVertical',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n 'data-layout-type': 'vertical',\n },\n template: `<ng-content />`,\n})\nexport class LayoutVerticalComponent {\n private readonly layout = inject(LayoutService);\n\n readonly class = input<string>('');\n\n protected readonly classes = computed(() =>\n cn(\n 'grid h-full min-h-0 w-full min-w-0 grid-cols-[auto_minmax(0,1fr)]',\n this.layout.appearance() === 'border-rail' ? 'overflow-visible' : 'overflow-hidden',\n this.class(),\n ),\n );\n\n constructor() {\n this.layout.setType('vertical', { persist: false });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { cn } from '@ojiepermana/angular-component/utils';\nimport { LayoutService } from '@ojiepermana/angular-theme/layout/services';\n\n@Component({\n selector: 'LayoutHorizontal',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n 'data-layout-type': 'horizontal',\n },\n template: `<ng-content />`,\n})\nexport class LayoutHorizontalComponent {\n private readonly layout = inject(LayoutService);\n\n readonly class = input<string>('');\n\n protected readonly classes = computed(() =>\n cn('flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden', this.class()),\n );\n\n constructor() {\n this.layout.setType('horizontal', { persist: false });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { cn } from '@ojiepermana/angular-component/utils';\nimport { LayoutService } from '@ojiepermana/angular-theme/layout/services';\n\n@Component({\n selector: 'LayoutEmpty',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n 'data-layout-type': 'empty',\n },\n template: `<ng-content />`,\n})\nexport class LayoutEmptyComponent {\n private readonly layout = inject(LayoutService);\n\n readonly class = input<string>('');\n\n protected readonly classes = computed(() => cn('h-full min-h-0 w-full min-w-0 overflow-hidden', this.class()));\n\n constructor() {\n this.layout.setType('empty', { persist: false });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { cn } from '@ojiepermana/angular-component/utils';\nimport { LayoutService } from '@ojiepermana/angular-theme/layout/services';\n\n@Component({\n selector: 'LayoutFluid',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n 'data-layout-type': 'fluid',\n },\n template: `<ng-content />`,\n})\nexport class LayoutFluidComponent {\n private readonly layout = inject(LayoutService);\n\n readonly class = input<string>('');\n\n protected readonly classes = computed(() =>\n cn(\n 'grid min-h-0 min-w-0 place-items-center overflow-auto',\n this.layout.width() === 'fluid' ? 'h-auto w-auto max-h-full max-w-full' : 'h-full w-full',\n this.class(),\n ),\n );\n\n constructor() {\n this.layout.setType('fluid', { persist: false });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, contentChild, inject, input } from '@angular/core';\nimport { NavigationContainerComponent } from '@ojiepermana/angular-navigation';\nimport { cn } from '@ojiepermana/angular-component/utils';\nimport { LayoutService } from '@ojiepermana/angular-theme/layout/services';\n\n@Component({\n selector: 'LayoutNavigation',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n role: 'navigation',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.data-layout-type]': 'layout.type()',\n '[attr.data-layout-appearance]': 'layout.appearance()',\n '[attr.data-layout-style]': 'layout.appearance()',\n '[attr.data-layout-nav-rail-offset]': 'resolvedRailOffset()',\n },\n template: `\n @if (showsVerticalRail()) {\n <div\n aria-hidden=\"true\"\n data-layout-nav-rail\n class=\"pointer-events-none absolute inset-y-0 right-0 z-20 w-[1.5px] transition-transform duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none\"\n [style.transform]=\"railTransform()\">\n <div data-layout-nav-rail-line class=\"absolute inset-y-0 right-0 w-[1.5px] bg-border\"></div>\n <div\n data-layout-nav-rail-top\n class=\"absolute bottom-full right-0 h-[calc((100dvh-100%)/2)] w-[1.5px] bg-border\"></div>\n <div\n data-layout-nav-rail-bottom\n class=\"absolute top-full right-0 h-[calc((100dvh-100%)/2)] w-[1.5px] bg-border\"></div>\n </div>\n }\n\n <ng-content />\n `,\n})\nexport class LayoutNavigationComponent {\n protected readonly layout = inject(LayoutService);\n protected readonly projectedNav = contentChild(NavigationContainerComponent);\n\n readonly ariaLabel = input<string>('Layout navigation');\n readonly railOffset = input<string | null>(null);\n readonly class = input<string>('');\n protected readonly showsVerticalRail = computed(\n () => this.layout.type() === 'vertical' && this.layout.appearance() === 'border-rail',\n );\n protected readonly resolvedRailOffset = computed(\n () => this.railOffset() ?? this.projectedNav()?.previewRailOffset() ?? '0px',\n );\n protected readonly railTransform = computed(() => `translateX(${this.resolvedRailOffset()})`);\n\n protected readonly classes = computed(() => {\n const layoutType = this.layout.type();\n\n return cn(\n 'relative block min-h-0 min-w-0',\n layoutType === 'horizontal' && 'h-12 min-h-12 w-full shrink-0 overflow-visible',\n // overflow-visible: clipping diatur host <Navigation>; overlay nav (aside\n // drawer dockbar, preview rail) keluar dari kolom w-16 dan overflow-hidden\n // di sini ikut ter-scroll oleh focus scroll-into-view sehingga rail hilang.\n layoutType === 'vertical' && 'h-full w-max max-w-full shrink-0 overflow-visible',\n layoutType === 'empty' && 'hidden',\n this.class(),\n );\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { cn } from '@ojiepermana/angular-component/utils';\nimport { LayoutService } from '@ojiepermana/angular-theme/layout/services';\n\n@Component({\n selector: 'LayoutContent',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'classes()',\n '[attr.data-layout-type]': 'layout.type()',\n '[attr.data-layout-width]': 'layout.width()',\n },\n template: `<ng-content />`,\n})\nexport class LayoutContentComponent {\n protected readonly layout = inject(LayoutService);\n\n readonly class = input<string>('');\n\n protected readonly classes = computed(() => {\n const layoutType = this.layout.type();\n\n return cn(\n 'block min-h-0 min-w-0 overflow-auto',\n layoutType === 'horizontal' && 'flex-1',\n layoutType === 'vertical' && 'h-full',\n layoutType === 'empty' && 'h-full w-full',\n this.layout.width() === 'container' && 'w-full lg:container lg:mx-auto',\n this.class(),\n );\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { signal, computed, Injectable, inject, input, effect, untracked, ChangeDetectionStrategy, Component, contentChild, output } from '@angular/core';
|
|
3
|
+
import { cn } from '@ojiepermana/angular-component/utils';
|
|
4
|
+
import { DOCUMENT } from '@angular/common';
|
|
5
|
+
|
|
6
|
+
const PAGE_VARIANTS = ['stacked', 'side'];
|
|
7
|
+
const PAGE_SIDE_POSITIONS = ['left', 'right'];
|
|
8
|
+
const PAGE_SIDE_MODES = ['sticky', 'drawer', 'overlay'];
|
|
9
|
+
const PAGE_SCROLL_VALUES = ['content', 'page'];
|
|
10
|
+
const PAGE_HEIGHT_VALUES = ['auto', 'fix'];
|
|
11
|
+
const PAGE_DEFAULT_VARIANT = 'stacked';
|
|
12
|
+
const PAGE_DEFAULT_SIDE_POSITION = 'left';
|
|
13
|
+
const PAGE_DEFAULT_SIDE_MODE = 'sticky';
|
|
14
|
+
const PAGE_DEFAULT_SCROLL = 'content';
|
|
15
|
+
const PAGE_DEFAULT_HEIGHT = 'auto';
|
|
16
|
+
const PAGE_DEFAULT_SIDE_WIDTH = '16rem';
|
|
17
|
+
function isUiPageVariant(value) {
|
|
18
|
+
return value !== null && PAGE_VARIANTS.includes(value);
|
|
19
|
+
}
|
|
20
|
+
function isUiPageSidePosition(value) {
|
|
21
|
+
return value !== null && PAGE_SIDE_POSITIONS.includes(value);
|
|
22
|
+
}
|
|
23
|
+
function isUiPageSideMode(value) {
|
|
24
|
+
return value !== null && PAGE_SIDE_MODES.includes(value);
|
|
25
|
+
}
|
|
26
|
+
function isUiPageScroll(value) {
|
|
27
|
+
return value !== null && PAGE_SCROLL_VALUES.includes(value);
|
|
28
|
+
}
|
|
29
|
+
function isUiPageHeight(value) {
|
|
30
|
+
return value !== null && PAGE_HEIGHT_VALUES.includes(value);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
class PageStateService {
|
|
34
|
+
variantState = signal(PAGE_DEFAULT_VARIANT, /* @ts-ignore */
|
|
35
|
+
...(ngDevMode ? [{ debugName: "variantState" }] : /* istanbul ignore next */ []));
|
|
36
|
+
heightState = signal(PAGE_DEFAULT_HEIGHT, /* @ts-ignore */
|
|
37
|
+
...(ngDevMode ? [{ debugName: "heightState" }] : /* istanbul ignore next */ []));
|
|
38
|
+
scrollState = signal(PAGE_DEFAULT_SCROLL, /* @ts-ignore */
|
|
39
|
+
...(ngDevMode ? [{ debugName: "scrollState" }] : /* istanbul ignore next */ []));
|
|
40
|
+
positionState = signal(PAGE_DEFAULT_SIDE_POSITION, /* @ts-ignore */
|
|
41
|
+
...(ngDevMode ? [{ debugName: "positionState" }] : /* istanbul ignore next */ []));
|
|
42
|
+
sideModeState = signal(PAGE_DEFAULT_SIDE_MODE, /* @ts-ignore */
|
|
43
|
+
...(ngDevMode ? [{ debugName: "sideModeState" }] : /* istanbul ignore next */ []));
|
|
44
|
+
internalSideOpenState = signal(false, /* @ts-ignore */
|
|
45
|
+
...(ngDevMode ? [{ debugName: "internalSideOpenState" }] : /* istanbul ignore next */ []));
|
|
46
|
+
controlledSideOpenState = signal(null, /* @ts-ignore */
|
|
47
|
+
...(ngDevMode ? [{ debugName: "controlledSideOpenState" }] : /* istanbul ignore next */ []));
|
|
48
|
+
sideWidthState = signal(PAGE_DEFAULT_SIDE_WIDTH, /* @ts-ignore */
|
|
49
|
+
...(ngDevMode ? [{ debugName: "sideWidthState" }] : /* istanbul ignore next */ []));
|
|
50
|
+
sideIdState = signal(null, /* @ts-ignore */
|
|
51
|
+
...(ngDevMode ? [{ debugName: "sideIdState" }] : /* istanbul ignore next */ []));
|
|
52
|
+
sideOpenRequestState = signal(null, /* @ts-ignore */
|
|
53
|
+
...(ngDevMode ? [{ debugName: "sideOpenRequestState" }] : /* istanbul ignore next */ []));
|
|
54
|
+
sideOpenRequestVersionState = signal(0, /* @ts-ignore */
|
|
55
|
+
...(ngDevMode ? [{ debugName: "sideOpenRequestVersionState" }] : /* istanbul ignore next */ []));
|
|
56
|
+
variant = this.variantState.asReadonly();
|
|
57
|
+
height = this.heightState.asReadonly();
|
|
58
|
+
scroll = this.scrollState.asReadonly();
|
|
59
|
+
position = this.positionState.asReadonly();
|
|
60
|
+
sideMode = this.sideModeState.asReadonly();
|
|
61
|
+
sideWidth = this.sideWidthState.asReadonly();
|
|
62
|
+
sideId = this.sideIdState.asReadonly();
|
|
63
|
+
sideOpenRequest = this.sideOpenRequestState.asReadonly();
|
|
64
|
+
sideOpenRequestVersion = this.sideOpenRequestVersionState.asReadonly();
|
|
65
|
+
sideOpen = computed(() => this.controlledSideOpenState() ?? this.internalSideOpenState(), /* @ts-ignore */
|
|
66
|
+
...(ngDevMode ? [{ debugName: "sideOpen" }] : /* istanbul ignore next */ []));
|
|
67
|
+
isSideInteractive = computed(() => this.sideMode() === 'drawer' || this.sideMode() === 'overlay', /* @ts-ignore */
|
|
68
|
+
...(ngDevMode ? [{ debugName: "isSideInteractive" }] : /* istanbul ignore next */ []));
|
|
69
|
+
isSideVisible = computed(() => this.sideMode() === 'sticky' || this.sideOpen(), /* @ts-ignore */
|
|
70
|
+
...(ngDevMode ? [{ debugName: "isSideVisible" }] : /* istanbul ignore next */ []));
|
|
71
|
+
registerRoot(config) {
|
|
72
|
+
this.variantState.set(config.variant);
|
|
73
|
+
this.heightState.set(config.height);
|
|
74
|
+
this.scrollState.set(config.scroll);
|
|
75
|
+
this.positionState.set(config.position);
|
|
76
|
+
this.sideModeState.set(config.sideMode);
|
|
77
|
+
this.sideWidthState.set(config.sideWidth);
|
|
78
|
+
}
|
|
79
|
+
registerSide(config) {
|
|
80
|
+
this.sideModeState.set(config.mode);
|
|
81
|
+
this.positionState.set(config.position);
|
|
82
|
+
this.sideWidthState.set(config.width);
|
|
83
|
+
this.sideIdState.set(config.id);
|
|
84
|
+
}
|
|
85
|
+
setControlledSideOpen(open) {
|
|
86
|
+
this.controlledSideOpenState.set(open);
|
|
87
|
+
if (open !== null) {
|
|
88
|
+
this.internalSideOpenState.set(open);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
setSideOpen(open) {
|
|
92
|
+
this.internalSideOpenState.set(open);
|
|
93
|
+
}
|
|
94
|
+
openSide() {
|
|
95
|
+
return this.requestSideOpenChange(true);
|
|
96
|
+
}
|
|
97
|
+
closeSide() {
|
|
98
|
+
return this.requestSideOpenChange(false);
|
|
99
|
+
}
|
|
100
|
+
toggleSide() {
|
|
101
|
+
return this.requestSideOpenChange(!this.sideOpen());
|
|
102
|
+
}
|
|
103
|
+
requestSideOpenChange(open) {
|
|
104
|
+
if (this.controlledSideOpenState() === null) {
|
|
105
|
+
this.internalSideOpenState.set(open);
|
|
106
|
+
}
|
|
107
|
+
this.sideOpenRequestState.set(open);
|
|
108
|
+
this.sideOpenRequestVersionState.update((version) => version + 1);
|
|
109
|
+
return open;
|
|
110
|
+
}
|
|
111
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
112
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageStateService });
|
|
113
|
+
}
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageStateService, decorators: [{
|
|
115
|
+
type: Injectable
|
|
116
|
+
}] });
|
|
117
|
+
|
|
118
|
+
let nextPageSideId = 0;
|
|
119
|
+
class PageSideComponent {
|
|
120
|
+
document = inject(DOCUMENT, { optional: true });
|
|
121
|
+
page = inject(PageStateService);
|
|
122
|
+
resolvedId = `page-side-${++nextPageSideId}`;
|
|
123
|
+
mode = input('sticky', /* @ts-ignore */
|
|
124
|
+
...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
125
|
+
position = input(null, /* @ts-ignore */
|
|
126
|
+
...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
127
|
+
width = input(null, /* @ts-ignore */
|
|
128
|
+
...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
|
|
129
|
+
closeOnEsc = input(true, /* @ts-ignore */
|
|
130
|
+
...(ngDevMode ? [{ debugName: "closeOnEsc" }] : /* istanbul ignore next */ []));
|
|
131
|
+
class = input('', /* @ts-ignore */
|
|
132
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
133
|
+
resolvedMode = computed(() => this.mode() ?? this.page.sideMode(), /* @ts-ignore */
|
|
134
|
+
...(ngDevMode ? [{ debugName: "resolvedMode" }] : /* istanbul ignore next */ []));
|
|
135
|
+
resolvedPosition = computed(() => this.position() ?? this.page.position(), /* @ts-ignore */
|
|
136
|
+
...(ngDevMode ? [{ debugName: "resolvedPosition" }] : /* istanbul ignore next */ []));
|
|
137
|
+
resolvedWidth = computed(() => this.width() ?? this.page.sideWidth() ?? PAGE_DEFAULT_SIDE_WIDTH, /* @ts-ignore */
|
|
138
|
+
...(ngDevMode ? [{ debugName: "resolvedWidth" }] : /* istanbul ignore next */ []));
|
|
139
|
+
isSticky = computed(() => this.resolvedMode() === 'sticky', /* @ts-ignore */
|
|
140
|
+
...(ngDevMode ? [{ debugName: "isSticky" }] : /* istanbul ignore next */ []));
|
|
141
|
+
isDrawer = computed(() => this.resolvedMode() === 'drawer', /* @ts-ignore */
|
|
142
|
+
...(ngDevMode ? [{ debugName: "isDrawer" }] : /* istanbul ignore next */ []));
|
|
143
|
+
isOverlay = computed(() => this.resolvedMode() === 'overlay', /* @ts-ignore */
|
|
144
|
+
...(ngDevMode ? [{ debugName: "isOverlay" }] : /* istanbul ignore next */ []));
|
|
145
|
+
resolvedScroll = computed(() => this.page.scroll() ?? PAGE_DEFAULT_SCROLL, /* @ts-ignore */
|
|
146
|
+
...(ngDevMode ? [{ debugName: "resolvedScroll" }] : /* istanbul ignore next */ []));
|
|
147
|
+
ariaHidden = computed(() => (!this.isSticky() && !this.page.sideOpen() ? 'true' : null), /* @ts-ignore */
|
|
148
|
+
...(ngDevMode ? [{ debugName: "ariaHidden" }] : /* istanbul ignore next */ []));
|
|
149
|
+
classes = computed(() => {
|
|
150
|
+
const position = this.resolvedPosition();
|
|
151
|
+
const sideOpen = this.page.sideOpen();
|
|
152
|
+
return cn('block min-h-0 border-border bg-background', this.resolvedScroll() === 'content' && 'h-full overflow-auto', this.resolvedScroll() === 'page' && 'overflow-visible', this.isSticky() && 'shrink-0 w-[var(--page-side-width)]', this.isSticky() && position === 'left' && 'order-1 border-r', this.isSticky() && position === 'right' && 'order-2 border-l', this.isDrawer() &&
|
|
153
|
+
'absolute inset-y-0 z-20 w-[var(--page-side-width)] border shadow-sm transition-transform duration-200 ease-out', this.isDrawer() && position === 'left' && (sideOpen ? 'left-0 translate-x-0' : 'left-0 -translate-x-full'), this.isDrawer() && position === 'right' && (sideOpen ? 'right-0 translate-x-0' : 'right-0 translate-x-full'), this.isOverlay() &&
|
|
154
|
+
'absolute inset-y-0 z-30 w-[var(--page-side-width)] border shadow-md transition-transform duration-200 ease-out', this.isOverlay() && position === 'left' && (sideOpen ? 'left-0 translate-x-0' : 'left-0 -translate-x-full'), this.isOverlay() && position === 'right' && (sideOpen ? 'right-0 translate-x-0' : 'right-0 translate-x-full'), this.class());
|
|
155
|
+
}, /* @ts-ignore */
|
|
156
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
157
|
+
constructor() {
|
|
158
|
+
effect(() => {
|
|
159
|
+
this.page.registerSide({
|
|
160
|
+
mode: this.resolvedMode(),
|
|
161
|
+
position: this.resolvedPosition(),
|
|
162
|
+
width: this.resolvedWidth(),
|
|
163
|
+
id: this.resolvedId,
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
effect((onCleanup) => {
|
|
167
|
+
if (!this.closeOnEsc() || this.isSticky()) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const defaultView = this.document?.defaultView;
|
|
171
|
+
if (!defaultView) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const handler = (event) => {
|
|
175
|
+
if (event.key !== 'Escape') {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
if (!untracked(() => this.page.sideOpen())) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
untracked(() => {
|
|
182
|
+
this.page.closeSide();
|
|
183
|
+
});
|
|
184
|
+
};
|
|
185
|
+
defaultView.addEventListener('keydown', handler);
|
|
186
|
+
onCleanup(() => defaultView.removeEventListener('keydown', handler));
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageSideComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
190
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: PageSideComponent, isStandalone: true, selector: "PageSide", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, closeOnEsc: { classPropertyName: "closeOnEsc", publicName: "closeOnEsc", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "attr.id": "resolvedId", "attr.data-page-slot": "\"side\"", "attr.data-page-side-mode": "resolvedMode()", "attr.data-page-side-open": "page.sideOpen()", "attr.data-page-position": "resolvedPosition()", "attr.aria-hidden": "ariaHidden()", "style.--page-side-width": "resolvedWidth()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
191
|
+
}
|
|
192
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageSideComponent, decorators: [{
|
|
193
|
+
type: Component,
|
|
194
|
+
args: [{
|
|
195
|
+
selector: 'PageSide',
|
|
196
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
197
|
+
host: {
|
|
198
|
+
'[class]': 'classes()',
|
|
199
|
+
'[attr.id]': 'resolvedId',
|
|
200
|
+
'[attr.data-page-slot]': '"side"',
|
|
201
|
+
'[attr.data-page-side-mode]': 'resolvedMode()',
|
|
202
|
+
'[attr.data-page-side-open]': 'page.sideOpen()',
|
|
203
|
+
'[attr.data-page-position]': 'resolvedPosition()',
|
|
204
|
+
'[attr.aria-hidden]': 'ariaHidden()',
|
|
205
|
+
'[style.--page-side-width]': 'resolvedWidth()',
|
|
206
|
+
},
|
|
207
|
+
template: `<ng-content />`,
|
|
208
|
+
}]
|
|
209
|
+
}], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], closeOnEsc: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEsc", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
210
|
+
|
|
211
|
+
class PageComponent {
|
|
212
|
+
page = inject(PageStateService);
|
|
213
|
+
projectedSide = contentChild(PageSideComponent, /* @ts-ignore */
|
|
214
|
+
...(ngDevMode ? [{ debugName: "projectedSide" }] : /* istanbul ignore next */ []));
|
|
215
|
+
variant = input(PAGE_DEFAULT_VARIANT, /* @ts-ignore */
|
|
216
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
217
|
+
height = input(PAGE_DEFAULT_HEIGHT, /* @ts-ignore */
|
|
218
|
+
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
219
|
+
scroll = input(PAGE_DEFAULT_SCROLL, /* @ts-ignore */
|
|
220
|
+
...(ngDevMode ? [{ debugName: "scroll" }] : /* istanbul ignore next */ []));
|
|
221
|
+
position = input(PAGE_DEFAULT_SIDE_POSITION, /* @ts-ignore */
|
|
222
|
+
...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
223
|
+
sideMode = input(PAGE_DEFAULT_SIDE_MODE, /* @ts-ignore */
|
|
224
|
+
...(ngDevMode ? [{ debugName: "sideMode" }] : /* istanbul ignore next */ []));
|
|
225
|
+
sideOpen = input(null, /* @ts-ignore */
|
|
226
|
+
...(ngDevMode ? [{ debugName: "sideOpen" }] : /* istanbul ignore next */ []));
|
|
227
|
+
sideWidth = input(PAGE_DEFAULT_SIDE_WIDTH, /* @ts-ignore */
|
|
228
|
+
...(ngDevMode ? [{ debugName: "sideWidth" }] : /* istanbul ignore next */ []));
|
|
229
|
+
class = input('', /* @ts-ignore */
|
|
230
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
231
|
+
sideOpenChange = output();
|
|
232
|
+
resolvedPosition = computed(() => this.projectedSide()?.position() ?? this.position(), /* @ts-ignore */
|
|
233
|
+
...(ngDevMode ? [{ debugName: "resolvedPosition" }] : /* istanbul ignore next */ []));
|
|
234
|
+
resolvedSideMode = computed(() => this.projectedSide()?.mode() ?? this.sideMode(), /* @ts-ignore */
|
|
235
|
+
...(ngDevMode ? [{ debugName: "resolvedSideMode" }] : /* istanbul ignore next */ []));
|
|
236
|
+
isLeftSide = computed(() => this.resolvedPosition() === 'left', /* @ts-ignore */
|
|
237
|
+
...(ngDevMode ? [{ debugName: "isLeftSide" }] : /* istanbul ignore next */ []));
|
|
238
|
+
isRightSide = computed(() => this.resolvedPosition() === 'right', /* @ts-ignore */
|
|
239
|
+
...(ngDevMode ? [{ debugName: "isRightSide" }] : /* istanbul ignore next */ []));
|
|
240
|
+
showsOverlayBackdrop = computed(() => this.variant() === 'side' && this.resolvedSideMode() === 'overlay' && this.page.sideOpen(), /* @ts-ignore */
|
|
241
|
+
...(ngDevMode ? [{ debugName: "showsOverlayBackdrop" }] : /* istanbul ignore next */ []));
|
|
242
|
+
hostClasses = computed(() => cn('relative block h-full min-h-0 w-full min-w-0 overflow-hidden text-foreground', this.class()), /* @ts-ignore */
|
|
243
|
+
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
244
|
+
shellClasses = computed(() => cn('relative z-10 h-full min-h-0 w-full min-w-0', this.scroll() === 'content' && 'grid grid-rows-[auto_minmax(0,1fr)_auto]', this.scroll() === 'page' && 'overflow-auto'), /* @ts-ignore */
|
|
245
|
+
...(ngDevMode ? [{ debugName: "shellClasses" }] : /* istanbul ignore next */ []));
|
|
246
|
+
bodyClasses = computed(() => {
|
|
247
|
+
if (this.variant() !== 'side') {
|
|
248
|
+
return cn('relative min-w-0', this.scroll() === 'content' && 'min-h-0');
|
|
249
|
+
}
|
|
250
|
+
const sideMode = this.resolvedSideMode();
|
|
251
|
+
const position = this.resolvedPosition();
|
|
252
|
+
if (sideMode === 'sticky') {
|
|
253
|
+
return cn('grid min-w-0', this.scroll() === 'content' && 'min-h-0', position === 'left'
|
|
254
|
+
? 'grid-cols-[var(--page-side-width)_minmax(0,1fr)]'
|
|
255
|
+
: 'grid-cols-[minmax(0,1fr)_var(--page-side-width)]');
|
|
256
|
+
}
|
|
257
|
+
return cn('relative min-w-0', this.scroll() === 'content' && 'min-h-0');
|
|
258
|
+
}, /* @ts-ignore */
|
|
259
|
+
...(ngDevMode ? [{ debugName: "bodyClasses" }] : /* istanbul ignore next */ []));
|
|
260
|
+
constructor() {
|
|
261
|
+
effect(() => {
|
|
262
|
+
this.page.registerRoot({
|
|
263
|
+
variant: this.variant(),
|
|
264
|
+
height: this.height(),
|
|
265
|
+
scroll: this.scroll(),
|
|
266
|
+
position: this.position(),
|
|
267
|
+
sideMode: this.sideMode(),
|
|
268
|
+
sideWidth: this.sideWidth(),
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
effect(() => {
|
|
272
|
+
this.page.setControlledSideOpen(this.sideOpen());
|
|
273
|
+
});
|
|
274
|
+
effect(() => {
|
|
275
|
+
const requestVersion = this.page.sideOpenRequestVersion();
|
|
276
|
+
if (requestVersion === 0) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
this.sideOpenChange.emit(this.page.sideOpenRequest() ?? false);
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
handleBackdropClick() {
|
|
283
|
+
this.page.closeSide();
|
|
284
|
+
}
|
|
285
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
286
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: PageComponent, isStandalone: true, selector: "Page", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, scroll: { classPropertyName: "scroll", publicName: "scroll", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, sideMode: { classPropertyName: "sideMode", publicName: "sideMode", isSignal: true, isRequired: false, transformFunction: null }, sideOpen: { classPropertyName: "sideOpen", publicName: "sideOpen", isSignal: true, isRequired: false, transformFunction: null }, sideWidth: { classPropertyName: "sideWidth", publicName: "sideWidth", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sideOpenChange: "sideOpenChange" }, host: { properties: { "class": "hostClasses()", "attr.data-page-variant": "variant()", "attr.data-page-height": "height()", "attr.data-page-scroll": "scroll()", "attr.data-page-position": "resolvedPosition()", "attr.data-page-side-mode": "resolvedSideMode()", "attr.data-page-side-open": "page.sideOpen()", "style.--page-side-width": "sideWidth()" } }, providers: [PageStateService], queries: [{ propertyName: "projectedSide", first: true, predicate: PageSideComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
287
|
+
@if (showsOverlayBackdrop()) {
|
|
288
|
+
<button
|
|
289
|
+
type="button"
|
|
290
|
+
aria-label="Close page side"
|
|
291
|
+
data-page-overlay-backdrop
|
|
292
|
+
class="absolute inset-0 z-20 bg-[hsl(var(--overlay-backdrop))]"
|
|
293
|
+
(click)="handleBackdropClick()"></button>
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
<div [class]="shellClasses()">
|
|
297
|
+
<ng-content select="PageHeader" />
|
|
298
|
+
<ng-content select="PageSideToggle" />
|
|
299
|
+
|
|
300
|
+
<div [class]="bodyClasses()">
|
|
301
|
+
@if (variant() === 'side') {
|
|
302
|
+
<ng-content select="PageSide" />
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
<ng-content select="PageContent, PageDashboard" />
|
|
306
|
+
</div>
|
|
307
|
+
|
|
308
|
+
<ng-content select="PageFooter" />
|
|
309
|
+
</div>
|
|
310
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
311
|
+
}
|
|
312
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageComponent, decorators: [{
|
|
313
|
+
type: Component,
|
|
314
|
+
args: [{
|
|
315
|
+
selector: 'Page',
|
|
316
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
317
|
+
providers: [PageStateService],
|
|
318
|
+
host: {
|
|
319
|
+
'[class]': 'hostClasses()',
|
|
320
|
+
'[attr.data-page-variant]': 'variant()',
|
|
321
|
+
'[attr.data-page-height]': 'height()',
|
|
322
|
+
'[attr.data-page-scroll]': 'scroll()',
|
|
323
|
+
'[attr.data-page-position]': 'resolvedPosition()',
|
|
324
|
+
'[attr.data-page-side-mode]': 'resolvedSideMode()',
|
|
325
|
+
'[attr.data-page-side-open]': 'page.sideOpen()',
|
|
326
|
+
'[style.--page-side-width]': 'sideWidth()',
|
|
327
|
+
},
|
|
328
|
+
template: `
|
|
329
|
+
@if (showsOverlayBackdrop()) {
|
|
330
|
+
<button
|
|
331
|
+
type="button"
|
|
332
|
+
aria-label="Close page side"
|
|
333
|
+
data-page-overlay-backdrop
|
|
334
|
+
class="absolute inset-0 z-20 bg-[hsl(var(--overlay-backdrop))]"
|
|
335
|
+
(click)="handleBackdropClick()"></button>
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
<div [class]="shellClasses()">
|
|
339
|
+
<ng-content select="PageHeader" />
|
|
340
|
+
<ng-content select="PageSideToggle" />
|
|
341
|
+
|
|
342
|
+
<div [class]="bodyClasses()">
|
|
343
|
+
@if (variant() === 'side') {
|
|
344
|
+
<ng-content select="PageSide" />
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
<ng-content select="PageContent, PageDashboard" />
|
|
348
|
+
</div>
|
|
349
|
+
|
|
350
|
+
<ng-content select="PageFooter" />
|
|
351
|
+
</div>
|
|
352
|
+
`,
|
|
353
|
+
}]
|
|
354
|
+
}], ctorParameters: () => [], propDecorators: { projectedSide: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PageSideComponent), { isSignal: true }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], scroll: [{ type: i0.Input, args: [{ isSignal: true, alias: "scroll", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], sideMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideMode", required: false }] }], sideOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideOpen", required: false }] }], sideWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideWidth", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], sideOpenChange: [{ type: i0.Output, args: ["sideOpenChange"] }] } });
|
|
355
|
+
|
|
356
|
+
class PageSideToggleComponent {
|
|
357
|
+
page = inject(PageStateService);
|
|
358
|
+
ariaLabel = input('Toggle page side', /* @ts-ignore */
|
|
359
|
+
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
360
|
+
class = input('', /* @ts-ignore */
|
|
361
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
362
|
+
toggled = output();
|
|
363
|
+
hostClasses = computed(() => cn('inline-flex shrink-0', this.class()), /* @ts-ignore */
|
|
364
|
+
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
365
|
+
buttonClasses = computed(() => cn('inline-flex h-9 min-w-9 items-center justify-center rounded-md border border-border bg-background px-3 text-sm text-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2'), /* @ts-ignore */
|
|
366
|
+
...(ngDevMode ? [{ debugName: "buttonClasses" }] : /* istanbul ignore next */ []));
|
|
367
|
+
handleClick() {
|
|
368
|
+
this.toggled.emit(this.page.toggleSide());
|
|
369
|
+
}
|
|
370
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageSideToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
371
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: PageSideToggleComponent, isStandalone: true, selector: "PageSideToggle", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { toggled: "toggled" }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
|
|
372
|
+
<button
|
|
373
|
+
type="button"
|
|
374
|
+
[class]="buttonClasses()"
|
|
375
|
+
[attr.aria-label]="ariaLabel()"
|
|
376
|
+
[attr.aria-controls]="page.sideId()"
|
|
377
|
+
[attr.aria-expanded]="page.sideOpen()"
|
|
378
|
+
(click)="handleClick()">
|
|
379
|
+
<ng-content>
|
|
380
|
+
<span aria-hidden="true" class="text-lg leading-none">☰</span>
|
|
381
|
+
</ng-content>
|
|
382
|
+
</button>
|
|
383
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
384
|
+
}
|
|
385
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageSideToggleComponent, decorators: [{
|
|
386
|
+
type: Component,
|
|
387
|
+
args: [{
|
|
388
|
+
selector: 'PageSideToggle',
|
|
389
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
390
|
+
host: {
|
|
391
|
+
'[class]': 'hostClasses()',
|
|
392
|
+
},
|
|
393
|
+
template: `
|
|
394
|
+
<button
|
|
395
|
+
type="button"
|
|
396
|
+
[class]="buttonClasses()"
|
|
397
|
+
[attr.aria-label]="ariaLabel()"
|
|
398
|
+
[attr.aria-controls]="page.sideId()"
|
|
399
|
+
[attr.aria-expanded]="page.sideOpen()"
|
|
400
|
+
(click)="handleClick()">
|
|
401
|
+
<ng-content>
|
|
402
|
+
<span aria-hidden="true" class="text-lg leading-none">☰</span>
|
|
403
|
+
</ng-content>
|
|
404
|
+
</button>
|
|
405
|
+
`,
|
|
406
|
+
}]
|
|
407
|
+
}], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], toggled: [{ type: i0.Output, args: ["toggled"] }] } });
|
|
408
|
+
|
|
409
|
+
function buildPageBodyClasses(scroll, customClass) {
|
|
410
|
+
return cn('block min-w-0', scroll === 'content' && 'h-full min-h-0 overflow-auto', scroll === 'page' && 'overflow-visible', customClass);
|
|
411
|
+
}
|
|
412
|
+
class PageHeaderComponent {
|
|
413
|
+
page = inject(PageStateService, { optional: true });
|
|
414
|
+
class = input('', /* @ts-ignore */
|
|
415
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
416
|
+
resolvedHeight = computed(() => this.page?.height() ?? PAGE_DEFAULT_HEIGHT, /* @ts-ignore */
|
|
417
|
+
...(ngDevMode ? [{ debugName: "resolvedHeight" }] : /* istanbul ignore next */ []));
|
|
418
|
+
classes = computed(() => cn('block shrink-0 border-b border-border bg-background', this.class(), this.resolvedHeight() === 'fix' && 'h-12 overflow-hidden'), /* @ts-ignore */
|
|
419
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
420
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
421
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: PageHeaderComponent, isStandalone: true, selector: "PageHeader", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-page-slot": "header" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
422
|
+
}
|
|
423
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageHeaderComponent, decorators: [{
|
|
424
|
+
type: Component,
|
|
425
|
+
args: [{
|
|
426
|
+
selector: 'PageHeader',
|
|
427
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
428
|
+
host: {
|
|
429
|
+
'[class]': 'classes()',
|
|
430
|
+
'data-page-slot': 'header',
|
|
431
|
+
},
|
|
432
|
+
template: `<ng-content />`,
|
|
433
|
+
}]
|
|
434
|
+
}], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
435
|
+
class PageContentComponent {
|
|
436
|
+
page = inject(PageStateService, { optional: true });
|
|
437
|
+
class = input('', /* @ts-ignore */
|
|
438
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
439
|
+
resolvedScroll = computed(() => this.page?.scroll() ?? PAGE_DEFAULT_SCROLL, /* @ts-ignore */
|
|
440
|
+
...(ngDevMode ? [{ debugName: "resolvedScroll" }] : /* istanbul ignore next */ []));
|
|
441
|
+
classes = computed(() => buildPageBodyClasses(this.resolvedScroll(), this.class()), /* @ts-ignore */
|
|
442
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
443
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
444
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: PageContentComponent, isStandalone: true, selector: "PageContent", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-page-slot": "content" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
445
|
+
}
|
|
446
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageContentComponent, decorators: [{
|
|
447
|
+
type: Component,
|
|
448
|
+
args: [{
|
|
449
|
+
selector: 'PageContent',
|
|
450
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
451
|
+
host: {
|
|
452
|
+
'[class]': 'classes()',
|
|
453
|
+
'data-page-slot': 'content',
|
|
454
|
+
},
|
|
455
|
+
template: `<ng-content />`,
|
|
456
|
+
}]
|
|
457
|
+
}], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
458
|
+
class PageDashboardComponent {
|
|
459
|
+
page = inject(PageStateService, { optional: true });
|
|
460
|
+
class = input('', /* @ts-ignore */
|
|
461
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
462
|
+
resolvedScroll = computed(() => this.page?.scroll() ?? PAGE_DEFAULT_SCROLL, /* @ts-ignore */
|
|
463
|
+
...(ngDevMode ? [{ debugName: "resolvedScroll" }] : /* istanbul ignore next */ []));
|
|
464
|
+
classes = computed(() => buildPageBodyClasses(this.resolvedScroll(), this.class()), /* @ts-ignore */
|
|
465
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
466
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageDashboardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
467
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: PageDashboardComponent, isStandalone: true, selector: "PageDashboard", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-page-slot": "dashboard" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
468
|
+
}
|
|
469
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageDashboardComponent, decorators: [{
|
|
470
|
+
type: Component,
|
|
471
|
+
args: [{
|
|
472
|
+
selector: 'PageDashboard',
|
|
473
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
474
|
+
host: {
|
|
475
|
+
'[class]': 'classes()',
|
|
476
|
+
'data-page-slot': 'dashboard',
|
|
477
|
+
},
|
|
478
|
+
template: `<ng-content />`,
|
|
479
|
+
}]
|
|
480
|
+
}], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
481
|
+
class PageFooterComponent {
|
|
482
|
+
page = inject(PageStateService, { optional: true });
|
|
483
|
+
class = input('', /* @ts-ignore */
|
|
484
|
+
...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
485
|
+
resolvedHeight = computed(() => this.page?.height() ?? PAGE_DEFAULT_HEIGHT, /* @ts-ignore */
|
|
486
|
+
...(ngDevMode ? [{ debugName: "resolvedHeight" }] : /* istanbul ignore next */ []));
|
|
487
|
+
classes = computed(() => cn('block shrink-0 border-t border-border bg-background', this.class(), this.resolvedHeight() === 'fix' && 'h-12 overflow-hidden'), /* @ts-ignore */
|
|
488
|
+
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
489
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
490
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: PageFooterComponent, isStandalone: true, selector: "PageFooter", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-page-slot": "footer" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
491
|
+
}
|
|
492
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: PageFooterComponent, decorators: [{
|
|
493
|
+
type: Component,
|
|
494
|
+
args: [{
|
|
495
|
+
selector: 'PageFooter',
|
|
496
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
497
|
+
host: {
|
|
498
|
+
'[class]': 'classes()',
|
|
499
|
+
'data-page-slot': 'footer',
|
|
500
|
+
},
|
|
501
|
+
template: `<ng-content />`,
|
|
502
|
+
}]
|
|
503
|
+
}], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* Generated bundle index. Do not edit.
|
|
507
|
+
*/
|
|
508
|
+
|
|
509
|
+
export { PAGE_DEFAULT_HEIGHT, PAGE_DEFAULT_SCROLL, PAGE_DEFAULT_SIDE_MODE, PAGE_DEFAULT_SIDE_POSITION, PAGE_DEFAULT_SIDE_WIDTH, PAGE_DEFAULT_VARIANT, PAGE_HEIGHT_VALUES, PAGE_SCROLL_VALUES, PAGE_SIDE_MODES, PAGE_SIDE_POSITIONS, PAGE_VARIANTS, PageComponent, PageContentComponent, PageDashboardComponent, PageFooterComponent, PageHeaderComponent, PageSideComponent, PageSideToggleComponent, isUiPageHeight, isUiPageScroll, isUiPageSideMode, isUiPageSidePosition, isUiPageVariant };
|
|
510
|
+
//# sourceMappingURL=ojiepermana-angular-theme-page.mjs.map
|