@ojiepermana/angular 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/README.md +8 -5
  2. package/fesm2022/ojiepermana-angular-internal.mjs +16 -0
  3. package/fesm2022/ojiepermana-angular-internal.mjs.map +1 -1
  4. package/fesm2022/ojiepermana-angular-layout.mjs +44 -41
  5. package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
  6. package/fesm2022/ojiepermana-angular-navigation-horizontal.mjs +198 -262
  7. package/fesm2022/ojiepermana-angular-navigation-horizontal.mjs.map +1 -1
  8. package/fesm2022/ojiepermana-angular-navigation-vertical.mjs +123 -44
  9. package/fesm2022/ojiepermana-angular-navigation-vertical.mjs.map +1 -1
  10. package/fesm2022/ojiepermana-angular-navigation.mjs +326 -30
  11. package/fesm2022/ojiepermana-angular-navigation.mjs.map +1 -1
  12. package/fesm2022/ojiepermana-angular-shell.mjs +6 -1
  13. package/fesm2022/ojiepermana-angular-shell.mjs.map +1 -1
  14. package/layout/README.md +3 -3
  15. package/{theme/styles/layout → layout/src/component/horizontal}/horizontal.css +38 -17
  16. package/{theme/styles/layout → layout/src/component/vertical}/vertical.css +7 -7
  17. package/{theme/styles/layout/index.css → layout/src/layout.css} +0 -3
  18. package/navigation/README.md +91 -5
  19. package/navigation/horizontal/README.md +49 -0
  20. package/navigation/vertical/README.md +0 -0
  21. package/package.json +1 -1
  22. package/shell/README.md +5 -1
  23. package/styles/index.css +1 -1
  24. package/theme/README.md +2 -2
  25. package/types/ojiepermana-angular-internal.d.ts +1 -0
  26. package/types/ojiepermana-angular-layout.d.ts +1 -1
  27. package/types/ojiepermana-angular-navigation-horizontal.d.ts +26 -22
  28. package/types/ojiepermana-angular-navigation-vertical.d.ts +24 -22
  29. package/types/ojiepermana-angular-navigation.d.ts +55 -9
  30. package/types/ojiepermana-angular-shell.d.ts +2 -0
package/README.md CHANGED
@@ -89,9 +89,9 @@ Theme color labels can be localized through `provideNgTheme({ colorLabels: { ...
89
89
 
90
90
  ## Styling Model
91
91
 
92
- - `@ojiepermana/angular/styles/index.css` is the canonical aggregate bundle for applications. It imports theme first, then layout.
92
+ - `@ojiepermana/angular/styles/index.css` is the canonical aggregate bundle for applications. It imports theme first, then the layout-wide `data-layout-*` rules.
93
93
  - Application-level resets are intentionally not bundled. Import `@ojiepermana/angular/styles/resets.css` only if you want the library's optional reset helpers.
94
- - Theme and layout stylesheet sources remain internal composition layers behind the aggregate bundle.
94
+ - Theme styles remain in the aggregate bundle, while horizontal and vertical shell CSS are colocated with their standalone layout components.
95
95
  - Semantic tokens are the visual source of truth.
96
96
  - Angular Material is the behavior layer and consumes the shared theme variables.
97
97
 
@@ -227,6 +227,10 @@ export class AppShellComponent {}
227
227
 
228
228
  ### `@ojiepermana/angular/navigation`
229
229
 
230
+ - `provideNgNavigation`
231
+ - `NG_NAVIGATION_CONFIG`
232
+ - `NgNavigationConfig`
233
+ - `NavigationPreferencesService`
230
234
  - `NavigationService`
231
235
  - `NavigationItem`
232
236
  - `NavigationBranchItem`
@@ -237,6 +241,7 @@ export class AppShellComponent {}
237
241
  - `NavigationGroupItem`
238
242
  - `NavigationDividerItem`
239
243
  - `NavigationSpacerItem`
244
+ - `HorizontalNavigationVariant`
240
245
  - `VerticalNavigationAppearance`
241
246
  - `VerticalNavigationMode`
242
247
  - `VerticalNavigationPosition`
@@ -250,10 +255,8 @@ export class AppShellComponent {}
250
255
 
251
256
  ### `@ojiepermana/angular/navigation/vertical`
252
257
 
258
+ - `VerticalNavigationCollapsibleComponent`
253
259
  - `VerticalNavigationDefaultComponent`
254
- - `VerticalNavigationCompactComponent`
255
- - `VerticalNavigationDenseComponent`
256
- - `VerticalNavigationThinComponent`
257
260
  - `VerticalNavigationAsideItemComponent`
258
261
  - `VerticalNavigationBasicItemComponent`
259
262
  - `VerticalNavigationCollapsableItemComponent`
@@ -28,6 +28,22 @@ class LocalStorageStateAdapter {
28
28
  this.config.storage.setItem(this.key(axis), value);
29
29
  this.config.storage.removeItem(this.legacyKey(axis));
30
30
  }
31
+ readValue(axis) {
32
+ if (!this.config.isBrowser || !this.config.storage) {
33
+ return null;
34
+ }
35
+ const storedValue = this.config.storage.getItem(this.key(axis));
36
+ if (storedValue !== null) {
37
+ return storedValue;
38
+ }
39
+ const legacyValue = this.config.storage.getItem(this.legacyKey(axis));
40
+ if (legacyValue !== null) {
41
+ this.config.storage.setItem(this.key(axis), legacyValue);
42
+ this.config.storage.removeItem(this.legacyKey(axis));
43
+ return legacyValue;
44
+ }
45
+ return null;
46
+ }
31
47
  read(axis, fallback, isValid) {
32
48
  if (!this.config.isBrowser || !this.config.storage) {
33
49
  return fallback;
@@ -1 +1 @@
1
- {"version":3,"file":"ojiepermana-angular-internal.mjs","sources":["../../../projects/library/internal/src/lucide-config.provider.ts","../../../projects/library/internal/src/local-storage-state.ts","../../../projects/library/internal/src/navigation/navigation-item-content.ts","../../../projects/library/internal/src/navigation/navigation-tree.utils.ts","../../../projects/library/internal/src/navigation/navigation-tree-outlet.ts","../../../projects/library/internal/public-api.ts","../../../projects/library/internal/ojiepermana-angular-internal.ts"],"sourcesContent":["import { provideLucideConfig } from '@lucide/angular';\n\nexport const libraryLucideConfigProvider = provideLucideConfig({\n absoluteStrokeWidth: true,\n strokeWidth: 1.35,\n});\n","interface StorageLike {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\ninterface LocalStorageStateAdapterConfig<Axis extends string> {\n readonly isBrowser: boolean;\n readonly storage: StorageLike | null;\n readonly keys: Record<Axis, string>;\n readonly legacyPrefix: string;\n}\n\nexport class LocalStorageStateAdapter<Axis extends string> {\n constructor(private readonly config: LocalStorageStateAdapterConfig<Axis>) {}\n\n clear(axis: Axis): void {\n if (!this.config.isBrowser || !this.config.storage) {\n return;\n }\n\n this.config.storage.removeItem(this.key(axis));\n this.config.storage.removeItem(this.legacyKey(axis));\n }\n\n persist(axis: Axis, value: string): void {\n if (!this.config.isBrowser || !this.config.storage) {\n return;\n }\n\n this.config.storage.setItem(this.key(axis), value);\n this.config.storage.removeItem(this.legacyKey(axis));\n }\n\n read<T extends string>(axis: Axis, fallback: T, isValid: (value: string) => value is T): T {\n if (!this.config.isBrowser || !this.config.storage) {\n return fallback;\n }\n\n const storedValue = this.config.storage.getItem(this.key(axis));\n\n if (storedValue && isValid(storedValue)) {\n return storedValue;\n }\n\n const legacyValue = this.config.storage.getItem(this.legacyKey(axis));\n\n if (legacyValue && isValid(legacyValue)) {\n this.config.storage.setItem(this.key(axis), legacyValue);\n this.config.storage.removeItem(this.legacyKey(axis));\n return legacyValue;\n }\n\n return fallback;\n }\n\n private key(axis: Axis): string {\n return this.config.keys[axis];\n }\n\n private legacyKey(axis: Axis): string {\n return `${this.config.legacyPrefix}:${axis}`;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { LucideDynamicIcon, icons as lucideIcons, type LucideIcon } from '@lucide/angular';\nimport { NavigationItem } from '@ojiepermana/angular/navigation';\n\nimport { libraryLucideConfigProvider } from '../lucide-config.provider';\n\ntype NavigationItemContentVariant = 'horizontal' | 'vertical' | 'vertical-group';\n\nconst navigationLucideIconRegistry = buildNavigationLucideIconRegistry();\n\nfunction buildNavigationLucideIconRegistry(): ReadonlyMap<string, LucideIcon> {\n const registry = new Map<string, LucideIcon>();\n\n for (const icon of Object.values(lucideIcons) as LucideIcon[]) {\n registry.set(icon.icon.name, icon);\n\n for (const alias of icon.icon.aliases ?? []) {\n registry.set(alias, icon);\n }\n }\n\n return registry;\n}\n\n@Component({\n selector: 'navigation-item-content',\n template: `\n @if (variant() === 'horizontal') {\n <span class=\"horizontal-navigation-item-body\">\n <span\n class=\"horizontal-navigation-item-leading\"\n [class.horizontal-navigation-item-leading--nested]=\"level() > 0\">\n @if (resolvedIcon(); as icon) {\n <svg\n [lucideIcon]=\"icon\"\n [absoluteStrokeWidth]=\"true\"\n [attr.class]=\"horizontalIconClass()\"\n aria-hidden=\"true\"></svg>\n }\n <span [attr.class]=\"horizontalTitleClass()\">\n {{ item().title }}\n </span>\n </span>\n\n @if (item().badge?.title) {\n <span [attr.class]=\"horizontalBadgeClass()\">\n {{ item().badge?.title }}\n </span>\n }\n </span>\n } @else {\n <span class=\"kit-navigation-item-content\">\n @if (resolvedIcon(); as icon) {\n <svg\n [lucideIcon]=\"icon\"\n [absoluteStrokeWidth]=\"true\"\n [attr.class]=\"verticalIconClass()\"\n [size]=\"18\"\n aria-hidden=\"true\"></svg>\n }\n\n <div class=\"kit-navigation-item-title-wrapper\">\n <div [class]=\"titleContainerClass()\">\n <span [attr.class]=\"titleClass()\">\n {{ item().title }}\n </span>\n </div>\n\n @if (item().subtitle) {\n <div [class]=\"subtitleContainerClass()\">\n <span [attr.class]=\"subtitleClass()\">\n {{ item().subtitle }}\n </span>\n </div>\n }\n </div>\n\n @if (item().badge?.title) {\n <div class=\"kit-navigation-item-badge\">\n <div [attr.class]=\"verticalBadgeClass()\">\n {{ item().badge?.title }}\n </div>\n </div>\n }\n </span>\n }\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n\n .kit-navigation-item-content {\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n }\n\n .kit-navigation-item-title-wrapper {\n display: flex;\n flex: 1 1 auto;\n min-width: 0;\n flex-direction: column;\n }\n\n .kit-navigation-item-title,\n .kit-navigation-group-title,\n .kit-navigation-item-subtitle,\n .kit-navigation-group-subtitle {\n min-width: 0;\n }\n `,\n ],\n imports: [LucideDynamicIcon],\n providers: [libraryLucideConfigProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NavigationItemContent {\n item = input.required<NavigationItem>();\n level = input(0);\n variant = input<NavigationItemContentVariant>('horizontal');\n\n protected readonly resolvedIcon = computed(() => {\n const iconName = this.item().icon;\n return iconName ? (navigationLucideIconRegistry.get(iconName) ?? null) : null;\n });\n\n protected readonly horizontalIconClass = computed(() =>\n this.joinClasses('horizontal-navigation-item-icon', this.item().classes?.icon),\n );\n protected readonly verticalIconClass = computed(() =>\n this.joinClasses('kit-navigation-item-icon', this.item().classes?.icon),\n );\n protected readonly horizontalTitleClass = computed(() =>\n this.joinClasses('horizontal-navigation-item-label', this.item().classes?.title),\n );\n protected readonly titleClass = computed(() => this.item().classes?.title ?? null);\n protected readonly subtitleClass = computed(() => this.item().classes?.subtitle ?? null);\n protected readonly horizontalBadgeClass = computed(() =>\n this.joinClasses(\n 'horizontal-navigation-item-badge',\n !this.item().badge?.classes ? 'bg-primary text-primary-foreground' : null,\n this.item().badge?.classes,\n ),\n );\n protected readonly verticalBadgeClass = computed(() =>\n this.joinClasses('kit-navigation-item-badge-content', this.item().badge?.classes),\n );\n protected readonly titleContainerClass = computed(() =>\n this.variant() === 'vertical-group' ? 'kit-navigation-group-title' : 'kit-navigation-item-title',\n );\n protected readonly subtitleContainerClass = computed(() =>\n this.variant() === 'vertical-group' ? 'kit-navigation-group-subtitle' : 'kit-navigation-item-subtitle',\n );\n\n private joinClasses(...classNames: Array<string | null | undefined | false>): string | null {\n const value = classNames.filter((className): className is string => !!className).join(' ');\n return value || null;\n }\n}\n","import { NavigationItem, getNavigationChildren, hasNavigationChildren } from '@ojiepermana/angular/navigation';\n\nexport type NavigationExpandedItemsByParent = Record<string, string>;\n\nexport function trackNavigationTreeItem(index: number, item: NavigationItem): string | number | undefined {\n return item.id || item.title || index;\n}\n\nexport function getNavigationTreePathKey(parentKey: string, item: NavigationItem): string {\n const key = item.id || item.title;\n if (!key) {\n return parentKey;\n }\n\n return `${parentKey}/${key}`;\n}\n\nexport function isNavigationTreeItemExpanded(\n expandedByParent: NavigationExpandedItemsByParent,\n parentKey: string,\n item: NavigationItem,\n): boolean {\n return expandedByParent[parentKey] === getNavigationTreePathKey(parentKey, item);\n}\n\nexport function toggleNavigationTreeItemExpanded(\n expandedByParent: NavigationExpandedItemsByParent,\n parentKey: string,\n item: NavigationItem,\n): NavigationExpandedItemsByParent {\n const key = getNavigationTreePathKey(parentKey, item);\n\n if (expandedByParent[parentKey] === key) {\n const next = { ...expandedByParent };\n delete next[parentKey];\n return next;\n }\n\n return {\n ...expandedByParent,\n [parentKey]: key,\n };\n}\n\nexport function hasActiveNavigationDescendant(\n item: NavigationItem,\n isItemActive: (item: NavigationItem) => boolean,\n): boolean {\n for (const child of getNavigationChildren(item)) {\n if (isItemActive(child)) {\n return true;\n }\n\n if (hasNavigationChildren(child) && hasActiveNavigationDescendant(child, isItemActive)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isNavigationTreeDescendant(parent: NavigationItem, item: NavigationItem): boolean {\n for (const child of getNavigationChildren(parent)) {\n if (child === item) {\n return true;\n }\n\n if (hasNavigationChildren(child) && isNavigationTreeDescendant(child, item)) {\n return true;\n }\n }\n\n return false;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, forwardRef, input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { NavigationItem, hasNavigationChildren, shouldRenderNavigationItem } from '@ojiepermana/angular/navigation';\n\nimport { getNavigationTreePathKey, trackNavigationTreeItem } from './navigation-tree.utils';\n\nexport type NavigationTreeTemplateData = Record<string, unknown>;\n\nexport interface NavigationTreeItemContext {\n $implicit: NavigationItem;\n level: number;\n parentKey: string;\n isLast: boolean;\n data: NavigationTreeTemplateData | null;\n}\n\n@Component({\n selector: 'navigation-tree-outlet',\n template: `\n @for (child of items(); track trackItem($index, child); let isLast = $last) {\n @if (shouldRender(child)) {\n @switch (child.type) {\n @case ('basic') {\n <ng-container\n [ngTemplateOutlet]=\"leafTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n\n @case ('aside') {\n @if (hasChildren(child)) {\n <ng-container\n [ngTemplateOutlet]=\"branchTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"leafTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n\n @case ('collapsable') {\n @if (hasChildren(child)) {\n <ng-container\n [ngTemplateOutlet]=\"branchTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"leafTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n\n @case ('group') {\n @if (hasChildren(child)) {\n <ng-container\n [ngTemplateOutlet]=\"groupTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n <navigation-tree-outlet\n [items]=\"child.children || []\"\n [level]=\"level() + 1\"\n [parentKey]=\"resolveParentKey(parentKey(), child)\"\n [data]=\"data()\"\n [branchTemplate]=\"branchTemplate()\"\n [leafTemplate]=\"leafTemplate()\"\n [groupTemplate]=\"groupTemplate()\"\n [dividerTemplate]=\"dividerTemplate()\"\n [spacerTemplate]=\"spacerTemplate()\"\n [trackByFn]=\"trackByFn()\"\n [shouldRenderItemFn]=\"shouldRenderItemFn()\"\n [hasChildrenFn]=\"hasChildrenFn()\"\n [resolveParentKeyFn]=\"resolveParentKeyFn()\" />\n }\n }\n\n @case ('divider') {\n @if (dividerTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"dividerTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n\n @case ('spacer') {\n @if (spacerTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"spacerTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n\n @default {\n <ng-container\n [ngTemplateOutlet]=\"leafTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n }\n }\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n imports: [NgTemplateOutlet, forwardRef(() => NavigationTreeOutlet)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NavigationTreeOutlet {\n items = input<NavigationItem[]>([]);\n level = input(0);\n parentKey = input('root');\n data = input<NavigationTreeTemplateData | null>(null);\n\n branchTemplate = input.required<TemplateRef<NavigationTreeItemContext>>();\n leafTemplate = input.required<TemplateRef<NavigationTreeItemContext>>();\n groupTemplate = input.required<TemplateRef<NavigationTreeItemContext>>();\n dividerTemplate = input<TemplateRef<NavigationTreeItemContext> | null>(null);\n spacerTemplate = input<TemplateRef<NavigationTreeItemContext> | null>(null);\n\n trackByFn = input<(index: number, item: NavigationItem) => string | number | undefined>(trackNavigationTreeItem);\n shouldRenderItemFn = input<(item: NavigationItem) => boolean>(shouldRenderNavigationItem);\n hasChildrenFn = input<(item: NavigationItem) => boolean>(hasNavigationChildren);\n resolveParentKeyFn = input<(parentKey: string, item: NavigationItem) => string>(getNavigationTreePathKey);\n\n trackItem(index: number, item: NavigationItem): string | number | undefined {\n return this.trackByFn()(index, item);\n }\n\n shouldRender(item: NavigationItem): boolean {\n return this.shouldRenderItemFn()(item);\n }\n\n hasChildren(item: NavigationItem): boolean {\n return this.hasChildrenFn()(item);\n }\n\n resolveParentKey(parentKey: string, item: NavigationItem): string {\n return this.resolveParentKeyFn()(parentKey, item);\n }\n\n templateContext(item: NavigationItem, isLast: boolean): NavigationTreeItemContext {\n return {\n $implicit: item,\n level: this.level(),\n parentKey: this.parentKey(),\n isLast,\n data: this.data(),\n };\n }\n}\n","/* Internal composition utilities for library entrypoints. Not part of the supported consumer API. */\n\nexport { libraryLucideConfigProvider } from './src/lucide-config.provider';\nexport { LocalStorageStateAdapter } from './src/local-storage-state';\nexport { NavigationItemContent } from './src/navigation/navigation-item-content';\nexport {\n NavigationTreeOutlet,\n type NavigationTreeItemContext,\n type NavigationTreeTemplateData,\n} from './src/navigation/navigation-tree-outlet';\nexport {\n getNavigationTreePathKey,\n hasActiveNavigationDescendant,\n isNavigationTreeDescendant,\n isNavigationTreeItemExpanded,\n toggleNavigationTreeItemExpanded,\n trackNavigationTreeItem,\n type NavigationExpandedItemsByParent,\n} from './src/navigation/navigation-tree.utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["lucideIcons"],"mappings":"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"}
1
+ {"version":3,"file":"ojiepermana-angular-internal.mjs","sources":["../../../projects/library/internal/src/lucide-config.provider.ts","../../../projects/library/internal/src/local-storage-state.ts","../../../projects/library/internal/src/navigation/navigation-item-content.ts","../../../projects/library/internal/src/navigation/navigation-tree.utils.ts","../../../projects/library/internal/src/navigation/navigation-tree-outlet.ts","../../../projects/library/internal/public-api.ts","../../../projects/library/internal/ojiepermana-angular-internal.ts"],"sourcesContent":["import { provideLucideConfig } from '@lucide/angular';\n\nexport const libraryLucideConfigProvider = provideLucideConfig({\n absoluteStrokeWidth: true,\n strokeWidth: 1.35,\n});\n","interface StorageLike {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\ninterface LocalStorageStateAdapterConfig<Axis extends string> {\n readonly isBrowser: boolean;\n readonly storage: StorageLike | null;\n readonly keys: Record<Axis, string>;\n readonly legacyPrefix: string;\n}\n\nexport class LocalStorageStateAdapter<Axis extends string> {\n constructor(private readonly config: LocalStorageStateAdapterConfig<Axis>) {}\n\n clear(axis: Axis): void {\n if (!this.config.isBrowser || !this.config.storage) {\n return;\n }\n\n this.config.storage.removeItem(this.key(axis));\n this.config.storage.removeItem(this.legacyKey(axis));\n }\n\n persist(axis: Axis, value: string): void {\n if (!this.config.isBrowser || !this.config.storage) {\n return;\n }\n\n this.config.storage.setItem(this.key(axis), value);\n this.config.storage.removeItem(this.legacyKey(axis));\n }\n\n readValue(axis: Axis): string | null {\n if (!this.config.isBrowser || !this.config.storage) {\n return null;\n }\n\n const storedValue = this.config.storage.getItem(this.key(axis));\n\n if (storedValue !== null) {\n return storedValue;\n }\n\n const legacyValue = this.config.storage.getItem(this.legacyKey(axis));\n\n if (legacyValue !== null) {\n this.config.storage.setItem(this.key(axis), legacyValue);\n this.config.storage.removeItem(this.legacyKey(axis));\n return legacyValue;\n }\n\n return null;\n }\n\n read<T extends string>(axis: Axis, fallback: T, isValid: (value: string) => value is T): T {\n if (!this.config.isBrowser || !this.config.storage) {\n return fallback;\n }\n\n const storedValue = this.config.storage.getItem(this.key(axis));\n\n if (storedValue && isValid(storedValue)) {\n return storedValue;\n }\n\n const legacyValue = this.config.storage.getItem(this.legacyKey(axis));\n\n if (legacyValue && isValid(legacyValue)) {\n this.config.storage.setItem(this.key(axis), legacyValue);\n this.config.storage.removeItem(this.legacyKey(axis));\n return legacyValue;\n }\n\n return fallback;\n }\n\n private key(axis: Axis): string {\n return this.config.keys[axis];\n }\n\n private legacyKey(axis: Axis): string {\n return `${this.config.legacyPrefix}:${axis}`;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { LucideDynamicIcon, icons as lucideIcons, type LucideIcon } from '@lucide/angular';\nimport { NavigationItem } from '@ojiepermana/angular/navigation';\n\nimport { libraryLucideConfigProvider } from '../lucide-config.provider';\n\ntype NavigationItemContentVariant = 'horizontal' | 'vertical' | 'vertical-group';\n\nconst navigationLucideIconRegistry = buildNavigationLucideIconRegistry();\n\nfunction buildNavigationLucideIconRegistry(): ReadonlyMap<string, LucideIcon> {\n const registry = new Map<string, LucideIcon>();\n\n for (const icon of Object.values(lucideIcons) as LucideIcon[]) {\n registry.set(icon.icon.name, icon);\n\n for (const alias of icon.icon.aliases ?? []) {\n registry.set(alias, icon);\n }\n }\n\n return registry;\n}\n\n@Component({\n selector: 'navigation-item-content',\n template: `\n @if (variant() === 'horizontal') {\n <span class=\"horizontal-navigation-item-body\">\n <span\n class=\"horizontal-navigation-item-leading\"\n [class.horizontal-navigation-item-leading--nested]=\"level() > 0\">\n @if (resolvedIcon(); as icon) {\n <svg\n [lucideIcon]=\"icon\"\n [absoluteStrokeWidth]=\"true\"\n [attr.class]=\"horizontalIconClass()\"\n aria-hidden=\"true\"></svg>\n }\n <span [attr.class]=\"horizontalTitleClass()\">\n {{ item().title }}\n </span>\n </span>\n\n @if (item().badge?.title) {\n <span [attr.class]=\"horizontalBadgeClass()\">\n {{ item().badge?.title }}\n </span>\n }\n </span>\n } @else {\n <span class=\"kit-navigation-item-content\">\n @if (resolvedIcon(); as icon) {\n <svg\n [lucideIcon]=\"icon\"\n [absoluteStrokeWidth]=\"true\"\n [attr.class]=\"verticalIconClass()\"\n [size]=\"18\"\n aria-hidden=\"true\"></svg>\n }\n\n <div class=\"kit-navigation-item-title-wrapper\">\n <div [class]=\"titleContainerClass()\">\n <span [attr.class]=\"titleClass()\">\n {{ item().title }}\n </span>\n </div>\n\n @if (item().subtitle) {\n <div [class]=\"subtitleContainerClass()\">\n <span [attr.class]=\"subtitleClass()\">\n {{ item().subtitle }}\n </span>\n </div>\n }\n </div>\n\n @if (item().badge?.title) {\n <div class=\"kit-navigation-item-badge\">\n <div [attr.class]=\"verticalBadgeClass()\">\n {{ item().badge?.title }}\n </div>\n </div>\n }\n </span>\n }\n `,\n styles: [\n `\n :host {\n display: contents;\n }\n\n .kit-navigation-item-content {\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n }\n\n .kit-navigation-item-title-wrapper {\n display: flex;\n flex: 1 1 auto;\n min-width: 0;\n flex-direction: column;\n }\n\n .kit-navigation-item-title,\n .kit-navigation-group-title,\n .kit-navigation-item-subtitle,\n .kit-navigation-group-subtitle {\n min-width: 0;\n }\n `,\n ],\n imports: [LucideDynamicIcon],\n providers: [libraryLucideConfigProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NavigationItemContent {\n item = input.required<NavigationItem>();\n level = input(0);\n variant = input<NavigationItemContentVariant>('horizontal');\n\n protected readonly resolvedIcon = computed(() => {\n const iconName = this.item().icon;\n return iconName ? (navigationLucideIconRegistry.get(iconName) ?? null) : null;\n });\n\n protected readonly horizontalIconClass = computed(() =>\n this.joinClasses('horizontal-navigation-item-icon', this.item().classes?.icon),\n );\n protected readonly verticalIconClass = computed(() =>\n this.joinClasses('kit-navigation-item-icon', this.item().classes?.icon),\n );\n protected readonly horizontalTitleClass = computed(() =>\n this.joinClasses('horizontal-navigation-item-label', this.item().classes?.title),\n );\n protected readonly titleClass = computed(() => this.item().classes?.title ?? null);\n protected readonly subtitleClass = computed(() => this.item().classes?.subtitle ?? null);\n protected readonly horizontalBadgeClass = computed(() =>\n this.joinClasses(\n 'horizontal-navigation-item-badge',\n !this.item().badge?.classes ? 'bg-primary text-primary-foreground' : null,\n this.item().badge?.classes,\n ),\n );\n protected readonly verticalBadgeClass = computed(() =>\n this.joinClasses('kit-navigation-item-badge-content', this.item().badge?.classes),\n );\n protected readonly titleContainerClass = computed(() =>\n this.variant() === 'vertical-group' ? 'kit-navigation-group-title' : 'kit-navigation-item-title',\n );\n protected readonly subtitleContainerClass = computed(() =>\n this.variant() === 'vertical-group' ? 'kit-navigation-group-subtitle' : 'kit-navigation-item-subtitle',\n );\n\n private joinClasses(...classNames: Array<string | null | undefined | false>): string | null {\n const value = classNames.filter((className): className is string => !!className).join(' ');\n return value || null;\n }\n}\n","import { NavigationItem, getNavigationChildren, hasNavigationChildren } from '@ojiepermana/angular/navigation';\n\nexport type NavigationExpandedItemsByParent = Record<string, string>;\n\nexport function trackNavigationTreeItem(index: number, item: NavigationItem): string | number | undefined {\n return item.id || item.title || index;\n}\n\nexport function getNavigationTreePathKey(parentKey: string, item: NavigationItem): string {\n const key = item.id || item.title;\n if (!key) {\n return parentKey;\n }\n\n return `${parentKey}/${key}`;\n}\n\nexport function isNavigationTreeItemExpanded(\n expandedByParent: NavigationExpandedItemsByParent,\n parentKey: string,\n item: NavigationItem,\n): boolean {\n return expandedByParent[parentKey] === getNavigationTreePathKey(parentKey, item);\n}\n\nexport function toggleNavigationTreeItemExpanded(\n expandedByParent: NavigationExpandedItemsByParent,\n parentKey: string,\n item: NavigationItem,\n): NavigationExpandedItemsByParent {\n const key = getNavigationTreePathKey(parentKey, item);\n\n if (expandedByParent[parentKey] === key) {\n const next = { ...expandedByParent };\n delete next[parentKey];\n return next;\n }\n\n return {\n ...expandedByParent,\n [parentKey]: key,\n };\n}\n\nexport function hasActiveNavigationDescendant(\n item: NavigationItem,\n isItemActive: (item: NavigationItem) => boolean,\n): boolean {\n for (const child of getNavigationChildren(item)) {\n if (isItemActive(child)) {\n return true;\n }\n\n if (hasNavigationChildren(child) && hasActiveNavigationDescendant(child, isItemActive)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function isNavigationTreeDescendant(parent: NavigationItem, item: NavigationItem): boolean {\n for (const child of getNavigationChildren(parent)) {\n if (child === item) {\n return true;\n }\n\n if (hasNavigationChildren(child) && isNavigationTreeDescendant(child, item)) {\n return true;\n }\n }\n\n return false;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, forwardRef, input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { NavigationItem, hasNavigationChildren, shouldRenderNavigationItem } from '@ojiepermana/angular/navigation';\n\nimport { getNavigationTreePathKey, trackNavigationTreeItem } from './navigation-tree.utils';\n\nexport type NavigationTreeTemplateData = Record<string, unknown>;\n\nexport interface NavigationTreeItemContext {\n $implicit: NavigationItem;\n level: number;\n parentKey: string;\n isLast: boolean;\n data: NavigationTreeTemplateData | null;\n}\n\n@Component({\n selector: 'navigation-tree-outlet',\n template: `\n @for (child of items(); track trackItem($index, child); let isLast = $last) {\n @if (shouldRender(child)) {\n @switch (child.type) {\n @case ('basic') {\n <ng-container\n [ngTemplateOutlet]=\"leafTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n\n @case ('aside') {\n @if (hasChildren(child)) {\n <ng-container\n [ngTemplateOutlet]=\"branchTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"leafTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n\n @case ('collapsable') {\n @if (hasChildren(child)) {\n <ng-container\n [ngTemplateOutlet]=\"branchTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"leafTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n\n @case ('group') {\n @if (hasChildren(child)) {\n <ng-container\n [ngTemplateOutlet]=\"groupTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n <navigation-tree-outlet\n [items]=\"child.children || []\"\n [level]=\"level() + 1\"\n [parentKey]=\"resolveParentKey(parentKey(), child)\"\n [data]=\"data()\"\n [branchTemplate]=\"branchTemplate()\"\n [leafTemplate]=\"leafTemplate()\"\n [groupTemplate]=\"groupTemplate()\"\n [dividerTemplate]=\"dividerTemplate()\"\n [spacerTemplate]=\"spacerTemplate()\"\n [trackByFn]=\"trackByFn()\"\n [shouldRenderItemFn]=\"shouldRenderItemFn()\"\n [hasChildrenFn]=\"hasChildrenFn()\"\n [resolveParentKeyFn]=\"resolveParentKeyFn()\" />\n }\n }\n\n @case ('divider') {\n @if (dividerTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"dividerTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n\n @case ('spacer') {\n @if (spacerTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"spacerTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n\n @default {\n <ng-container\n [ngTemplateOutlet]=\"leafTemplate()\"\n [ngTemplateOutletContext]=\"templateContext(child, isLast)\"></ng-container>\n }\n }\n }\n }\n `,\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n imports: [NgTemplateOutlet, forwardRef(() => NavigationTreeOutlet)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NavigationTreeOutlet {\n items = input<NavigationItem[]>([]);\n level = input(0);\n parentKey = input('root');\n data = input<NavigationTreeTemplateData | null>(null);\n\n branchTemplate = input.required<TemplateRef<NavigationTreeItemContext>>();\n leafTemplate = input.required<TemplateRef<NavigationTreeItemContext>>();\n groupTemplate = input.required<TemplateRef<NavigationTreeItemContext>>();\n dividerTemplate = input<TemplateRef<NavigationTreeItemContext> | null>(null);\n spacerTemplate = input<TemplateRef<NavigationTreeItemContext> | null>(null);\n\n trackByFn = input<(index: number, item: NavigationItem) => string | number | undefined>(trackNavigationTreeItem);\n shouldRenderItemFn = input<(item: NavigationItem) => boolean>(shouldRenderNavigationItem);\n hasChildrenFn = input<(item: NavigationItem) => boolean>(hasNavigationChildren);\n resolveParentKeyFn = input<(parentKey: string, item: NavigationItem) => string>(getNavigationTreePathKey);\n\n trackItem(index: number, item: NavigationItem): string | number | undefined {\n return this.trackByFn()(index, item);\n }\n\n shouldRender(item: NavigationItem): boolean {\n return this.shouldRenderItemFn()(item);\n }\n\n hasChildren(item: NavigationItem): boolean {\n return this.hasChildrenFn()(item);\n }\n\n resolveParentKey(parentKey: string, item: NavigationItem): string {\n return this.resolveParentKeyFn()(parentKey, item);\n }\n\n templateContext(item: NavigationItem, isLast: boolean): NavigationTreeItemContext {\n return {\n $implicit: item,\n level: this.level(),\n parentKey: this.parentKey(),\n isLast,\n data: this.data(),\n };\n }\n}\n","/* Internal composition utilities for library entrypoints. Not part of the supported consumer API. */\n\nexport { libraryLucideConfigProvider } from './src/lucide-config.provider';\nexport { LocalStorageStateAdapter } from './src/local-storage-state';\nexport { NavigationItemContent } from './src/navigation/navigation-item-content';\nexport {\n NavigationTreeOutlet,\n type NavigationTreeItemContext,\n type NavigationTreeTemplateData,\n} from './src/navigation/navigation-tree-outlet';\nexport {\n getNavigationTreePathKey,\n hasActiveNavigationDescendant,\n isNavigationTreeDescendant,\n isNavigationTreeItemExpanded,\n toggleNavigationTreeItemExpanded,\n trackNavigationTreeItem,\n type NavigationExpandedItemsByParent,\n} from './src/navigation/navigation-tree.utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["lucideIcons"],"mappings":"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"}
@@ -134,14 +134,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
134
134
  selector: 'brand',
135
135
  }]
136
136
  }] });
137
- class PanelElementDirective {
138
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PanelElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
139
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: PanelElementDirective, isStandalone: true, selector: "panel", ngImport: i0 });
137
+ class NavigationElementDirective {
138
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NavigationElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
139
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: NavigationElementDirective, isStandalone: true, selector: "navigation", ngImport: i0 });
140
140
  }
141
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: PanelElementDirective, decorators: [{
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NavigationElementDirective, decorators: [{
142
142
  type: Directive,
143
143
  args: [{
144
- selector: 'panel',
144
+ selector: 'navigation',
145
+ }]
146
+ }] });
147
+ class ActionElementDirective {
148
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ActionElementDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
149
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.8", type: ActionElementDirective, isStandalone: true, selector: "action", ngImport: i0 });
150
+ }
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ActionElementDirective, decorators: [{
152
+ type: Directive,
153
+ args: [{
154
+ selector: 'action',
145
155
  }]
146
156
  }] });
147
157
 
@@ -152,16 +162,18 @@ class LayoutHorizontalComponent {
152
162
  <shell-content>
153
163
  <header>
154
164
  <brand>
155
- <ng-content select="[headerBrand]"></ng-content>
165
+ <ng-content select="[brand]"></ng-content>
156
166
  </brand>
157
167
 
158
- <nav>
159
- <ng-content select="[headerNavigation]"></ng-content>
160
- </nav>
168
+ <navigation>
169
+ <div class="layout-horizontal-navigation-slot">
170
+ <ng-content select="[navigation]"></ng-content>
171
+ </div>
172
+ </navigation>
161
173
 
162
- <panel>
163
- <ng-content select="[headerActions]"></ng-content>
164
- </panel>
174
+ <action>
175
+ <ng-content select="[action]"></ng-content>
176
+ </action>
165
177
  </header>
166
178
 
167
179
  <main>
@@ -169,37 +181,36 @@ class LayoutHorizontalComponent {
169
181
  </main>
170
182
  </shell-content>
171
183
  </layout>
172
- `, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: LayoutElementDirective, selector: "layout" }, { kind: "directive", type: ContentElementDirective, selector: "content,shell-content" }, { kind: "directive", type: BrandElementDirective, selector: "brand" }, { kind: "directive", type: PanelElementDirective, selector: "panel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
184
+ `, isInline: true, styles: [":host{display:block;block-size:100dvh;min-block-size:100dvh;overflow:hidden}:host>layout{display:block;block-size:100dvh;min-block-size:100dvh;padding:var(--layout-shell-padding);background:var(--background);color:var(--foreground);overflow:hidden;transition:var(--ngt-chrome-transition)}:host>layout>:is(content,shell-content){display:flex;flex-direction:column;inline-size:min(100%,var(--layout-shell-max-width));block-size:calc(100dvh - (var(--layout-shell-padding) * 2));min-block-size:0;margin-inline:auto;border:1px solid var(--container-border);border-radius:var(--layout-shell-radius);background:var(--container-surface);color:var(--container-foreground);box-shadow:var(--container-shadow);backdrop-filter:var(--container-backdrop);-webkit-backdrop-filter:var(--container-backdrop);overflow:hidden;transition:var(--ngt-shell-transition)}:host>layout>:is(content,shell-content)>header{display:var(--layout-header-display);grid-template-areas:\"brand navigation action\";grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:1rem;min-block-size:var(--layout-header-height);padding:.875rem 1rem;border-bottom:1px solid var(--nav-border);background:var(--nav-surface);color:var(--nav-foreground);transition:var(--ngt-chrome-transition)}:host>layout>:is(content,shell-content)>header>brand,:host>layout>:is(content,shell-content)>header>action{display:flex;min-inline-size:0;align-items:center}:host>layout>:is(content,shell-content)>header>brand{grid-area:brand;justify-content:flex-start;justify-self:start}:host>layout>:is(content,shell-content)>header>navigation{grid-area:navigation;display:flex;inline-size:100%;min-inline-size:0;align-items:center;justify-self:stretch;justify-content:center;gap:.75rem;flex-wrap:wrap}:host>layout>:is(content,shell-content)>header>navigation>.layout-horizontal-navigation-slot{flex:0 1 auto;display:block;min-inline-size:0;max-inline-size:100%}:host>layout>:is(content,shell-content)>header>action{grid-area:action;justify-content:flex-end;justify-self:end;gap:.5rem}:host>layout>:is(content,shell-content)>main{flex:1 1 auto;block-size:100%;min-inline-size:0;min-block-size:0;overflow:auto;background-color:var(--background);background-image:linear-gradient(180deg,color-mix(in oklab,var(--background) 94%,white 6%),var(--background));color:var(--foreground);transition:background-color var(--ngt-motion-duration-medium) var(--ngt-motion-ease-standard),color var(--ngt-motion-duration-fast) var(--ngt-motion-ease-standard)}@media(max-width:60rem){:host>layout>:is(content,shell-content)>header{grid-template-areas:\"brand action\" \"navigation navigation\";grid-template-columns:minmax(0,1fr) auto;align-items:flex-start}:host>layout>:is(content,shell-content)>header>navigation{justify-content:center}}@media(max-width:40rem){:host>layout>:is(content,shell-content)>header{grid-template-areas:\"brand\" \"navigation\" \"action\";grid-template-columns:1fr}:host>layout>:is(content,shell-content)>header>action{justify-content:flex-end}}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: LayoutElementDirective, selector: "layout" }, { kind: "directive", type: ContentElementDirective, selector: "content,shell-content" }, { kind: "directive", type: BrandElementDirective, selector: "brand" }, { kind: "directive", type: NavigationElementDirective, selector: "navigation" }, { kind: "directive", type: ActionElementDirective, selector: "action" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
173
185
  }
174
186
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: LayoutHorizontalComponent, decorators: [{
175
187
  type: Component,
176
- args: [{
177
- selector: 'horizontal',
178
- imports: [
188
+ args: [{ selector: 'horizontal', imports: [
179
189
  RouterOutlet,
180
190
  LayoutElementDirective,
181
191
  ContentElementDirective,
182
192
  BrandElementDirective,
183
- PanelElementDirective,
184
- ],
185
- host: {
193
+ NavigationElementDirective,
194
+ ActionElementDirective,
195
+ ], host: {
186
196
  '[attr.data-layout-mode]': '"horizontal"',
187
- },
188
- template: `
197
+ }, template: `
189
198
  <layout>
190
199
  <shell-content>
191
200
  <header>
192
201
  <brand>
193
- <ng-content select="[headerBrand]"></ng-content>
202
+ <ng-content select="[brand]"></ng-content>
194
203
  </brand>
195
204
 
196
- <nav>
197
- <ng-content select="[headerNavigation]"></ng-content>
198
- </nav>
205
+ <navigation>
206
+ <div class="layout-horizontal-navigation-slot">
207
+ <ng-content select="[navigation]"></ng-content>
208
+ </div>
209
+ </navigation>
199
210
 
200
- <panel>
201
- <ng-content select="[headerActions]"></ng-content>
202
- </panel>
211
+ <action>
212
+ <ng-content select="[action]"></ng-content>
213
+ </action>
203
214
  </header>
204
215
 
205
216
  <main>
@@ -207,9 +218,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
207
218
  </main>
208
219
  </shell-content>
209
220
  </layout>
210
- `,
211
- changeDetection: ChangeDetectionStrategy.OnPush,
212
- }]
221
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;block-size:100dvh;min-block-size:100dvh;overflow:hidden}:host>layout{display:block;block-size:100dvh;min-block-size:100dvh;padding:var(--layout-shell-padding);background:var(--background);color:var(--foreground);overflow:hidden;transition:var(--ngt-chrome-transition)}:host>layout>:is(content,shell-content){display:flex;flex-direction:column;inline-size:min(100%,var(--layout-shell-max-width));block-size:calc(100dvh - (var(--layout-shell-padding) * 2));min-block-size:0;margin-inline:auto;border:1px solid var(--container-border);border-radius:var(--layout-shell-radius);background:var(--container-surface);color:var(--container-foreground);box-shadow:var(--container-shadow);backdrop-filter:var(--container-backdrop);-webkit-backdrop-filter:var(--container-backdrop);overflow:hidden;transition:var(--ngt-shell-transition)}:host>layout>:is(content,shell-content)>header{display:var(--layout-header-display);grid-template-areas:\"brand navigation action\";grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:1rem;min-block-size:var(--layout-header-height);padding:.875rem 1rem;border-bottom:1px solid var(--nav-border);background:var(--nav-surface);color:var(--nav-foreground);transition:var(--ngt-chrome-transition)}:host>layout>:is(content,shell-content)>header>brand,:host>layout>:is(content,shell-content)>header>action{display:flex;min-inline-size:0;align-items:center}:host>layout>:is(content,shell-content)>header>brand{grid-area:brand;justify-content:flex-start;justify-self:start}:host>layout>:is(content,shell-content)>header>navigation{grid-area:navigation;display:flex;inline-size:100%;min-inline-size:0;align-items:center;justify-self:stretch;justify-content:center;gap:.75rem;flex-wrap:wrap}:host>layout>:is(content,shell-content)>header>navigation>.layout-horizontal-navigation-slot{flex:0 1 auto;display:block;min-inline-size:0;max-inline-size:100%}:host>layout>:is(content,shell-content)>header>action{grid-area:action;justify-content:flex-end;justify-self:end;gap:.5rem}:host>layout>:is(content,shell-content)>main{flex:1 1 auto;block-size:100%;min-inline-size:0;min-block-size:0;overflow:auto;background-color:var(--background);background-image:linear-gradient(180deg,color-mix(in oklab,var(--background) 94%,white 6%),var(--background));color:var(--foreground);transition:background-color var(--ngt-motion-duration-medium) var(--ngt-motion-ease-standard),color var(--ngt-motion-duration-fast) var(--ngt-motion-ease-standard)}@media(max-width:60rem){:host>layout>:is(content,shell-content)>header{grid-template-areas:\"brand action\" \"navigation navigation\";grid-template-columns:minmax(0,1fr) auto;align-items:flex-start}:host>layout>:is(content,shell-content)>header>navigation{justify-content:center}}@media(max-width:40rem){:host>layout>:is(content,shell-content)>header{grid-template-areas:\"brand\" \"navigation\" \"action\";grid-template-columns:1fr}:host>layout>:is(content,shell-content)>header>action{justify-content:flex-end}}\n"] }]
213
222
  }] });
214
223
 
215
224
  class LayoutVerticalComponent {
@@ -225,17 +234,13 @@ class LayoutVerticalComponent {
225
234
  </main>
226
235
  </shell-content>
227
236
  </layout>
228
- `, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: LayoutElementDirective, selector: "layout" }, { kind: "directive", type: ContentElementDirective, selector: "content,shell-content" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
237
+ `, isInline: true, styles: [":host{display:block;block-size:100dvh;min-block-size:100dvh;overflow:hidden}:host>layout{display:block;block-size:100dvh;min-block-size:100dvh;padding:var(--layout-shell-padding);background:var(--background);color:var(--foreground);overflow:hidden;transition:var(--ngt-chrome-transition)}:host>layout>:is(content,shell-content){display:flex;flex-direction:column;inline-size:min(100%,var(--layout-shell-max-width));block-size:calc(100dvh - (var(--layout-shell-padding) * 2));min-block-size:0;margin-inline:auto;border:1px solid var(--container-border);border-radius:var(--layout-shell-radius);background:var(--container-surface);color:var(--container-foreground);box-shadow:var(--container-shadow);backdrop-filter:var(--container-backdrop);-webkit-backdrop-filter:var(--container-backdrop);overflow:hidden;transition:var(--ngt-shell-transition)}:host>layout>:is(content,shell-content)>aside{display:var(--layout-sidebar-display);flex-direction:column;inline-size:100%;min-block-size:0;border-bottom:1px solid var(--sidebar-chrome-border);background:var(--sidebar-chrome-surface);color:var(--sidebar-chrome-foreground);overflow:auto;transition:var(--ngt-chrome-transition)}:host>layout>:is(content,shell-content)>main{flex:1 1 auto;block-size:100%;min-inline-size:0;min-block-size:0;overflow:auto;background-color:var(--background);background-image:linear-gradient(180deg,color-mix(in oklab,var(--background) 94%,white 6%),var(--background));color:var(--foreground);transition:background-color var(--ngt-motion-duration-medium) var(--ngt-motion-ease-standard),color var(--ngt-motion-duration-fast) var(--ngt-motion-ease-standard)}@media(min-width:48rem){:host>layout>:is(content,shell-content){flex-direction:row}:host>layout>:is(content,shell-content)>aside{flex:0 0 var(--layout-sidebar-width);inline-size:var(--layout-sidebar-width);min-inline-size:var(--layout-sidebar-width);border-bottom:0;border-right:1px solid var(--sidebar-chrome-border)}}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: LayoutElementDirective, selector: "layout" }, { kind: "directive", type: ContentElementDirective, selector: "content,shell-content" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
229
238
  }
230
239
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: LayoutVerticalComponent, decorators: [{
231
240
  type: Component,
232
- args: [{
233
- selector: 'vertical',
234
- imports: [RouterOutlet, LayoutElementDirective, ContentElementDirective],
235
- host: {
241
+ args: [{ selector: 'vertical', imports: [RouterOutlet, LayoutElementDirective, ContentElementDirective], host: {
236
242
  '[attr.data-layout-mode]': '"vertical"',
237
- },
238
- template: `
243
+ }, template: `
239
244
  <layout>
240
245
  <shell-content>
241
246
  <aside>
@@ -246,9 +251,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
246
251
  </main>
247
252
  </shell-content>
248
253
  </layout>
249
- `,
250
- changeDetection: ChangeDetectionStrategy.OnPush,
251
- }]
254
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;block-size:100dvh;min-block-size:100dvh;overflow:hidden}:host>layout{display:block;block-size:100dvh;min-block-size:100dvh;padding:var(--layout-shell-padding);background:var(--background);color:var(--foreground);overflow:hidden;transition:var(--ngt-chrome-transition)}:host>layout>:is(content,shell-content){display:flex;flex-direction:column;inline-size:min(100%,var(--layout-shell-max-width));block-size:calc(100dvh - (var(--layout-shell-padding) * 2));min-block-size:0;margin-inline:auto;border:1px solid var(--container-border);border-radius:var(--layout-shell-radius);background:var(--container-surface);color:var(--container-foreground);box-shadow:var(--container-shadow);backdrop-filter:var(--container-backdrop);-webkit-backdrop-filter:var(--container-backdrop);overflow:hidden;transition:var(--ngt-shell-transition)}:host>layout>:is(content,shell-content)>aside{display:var(--layout-sidebar-display);flex-direction:column;inline-size:100%;min-block-size:0;border-bottom:1px solid var(--sidebar-chrome-border);background:var(--sidebar-chrome-surface);color:var(--sidebar-chrome-foreground);overflow:auto;transition:var(--ngt-chrome-transition)}:host>layout>:is(content,shell-content)>main{flex:1 1 auto;block-size:100%;min-inline-size:0;min-block-size:0;overflow:auto;background-color:var(--background);background-image:linear-gradient(180deg,color-mix(in oklab,var(--background) 94%,white 6%),var(--background));color:var(--foreground);transition:background-color var(--ngt-motion-duration-medium) var(--ngt-motion-ease-standard),color var(--ngt-motion-duration-fast) var(--ngt-motion-ease-standard)}@media(min-width:48rem){:host>layout>:is(content,shell-content){flex-direction:row}:host>layout>:is(content,shell-content)>aside{flex:0 0 var(--layout-sidebar-width);inline-size:var(--layout-sidebar-width);min-inline-size:var(--layout-sidebar-width);border-bottom:0;border-right:1px solid var(--sidebar-chrome-border)}}\n"] }]
252
255
  }] });
253
256
 
254
257
  class LayoutContainerSwitcherComponent {
@@ -1 +1 @@
1
- {"version":3,"file":"ojiepermana-angular-layout.mjs","sources":["../../../projects/library/layout/src/state/layout.token.ts","../../../projects/library/layout/src/state/layout.types.ts","../../../projects/library/layout/src/state/layout.service.ts","../../../projects/library/layout/src/directive/layout-host.directive.ts","../../../projects/library/layout/src/directive/elements.directive.ts","../../../projects/library/layout/src/component/horizontal/horizontal.ts","../../../projects/library/layout/src/component/vertical/vertical.ts","../../../projects/library/layout/src/component/layout/layout-container-switcher.ts","../../../projects/library/layout/src/component/layout/layout-mode-switcher.ts","../../../projects/library/layout/src/state/layout.provider.ts","../../../projects/library/layout/ojiepermana-angular-layout.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { NgLayoutConfig } from './layout.types';\n\nexport const DEFAULT_NG_LAYOUT_CONFIG: NgLayoutConfig = {\n defaultMode: 'vertical',\n defaultContainer: 'full',\n};\n\nexport const NG_LAYOUT_CONFIG = new InjectionToken<NgLayoutConfig>('NG_LAYOUT_CONFIG', {\n providedIn: 'root',\n factory: () => ({ ...DEFAULT_NG_LAYOUT_CONFIG }),\n});\n","export const LAYOUT_MODES = ['vertical', 'horizontal', 'empty'] as const;\nexport type LayoutMode = (typeof LAYOUT_MODES)[number];\n\nexport const LAYOUT_CONTAINERS = ['full', 'boxed'] as const;\nexport type LayoutContainer = (typeof LAYOUT_CONTAINERS)[number];\n\nconst LAYOUT_MODE_SET = new Set<LayoutMode>(LAYOUT_MODES);\nconst LAYOUT_CONTAINER_SET = new Set<LayoutContainer>(LAYOUT_CONTAINERS);\n\nexport function isLayoutMode(value: unknown): value is LayoutMode {\n return typeof value === 'string' && LAYOUT_MODE_SET.has(value as LayoutMode);\n}\n\nexport function isLayoutContainer(value: unknown): value is LayoutContainer {\n return typeof value === 'string' && LAYOUT_CONTAINER_SET.has(value as LayoutContainer);\n}\n\nexport interface NgLayoutConfig {\n defaultMode: LayoutMode;\n defaultContainer: LayoutContainer;\n}\n","import { Injectable, PLATFORM_ID, effect, inject, signal } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { LocalStorageStateAdapter } from '@ojiepermana/angular/internal';\nimport { NG_LAYOUT_CONFIG } from './layout.token';\nimport { isLayoutContainer, isLayoutMode, LayoutContainer, LayoutMode } from './layout.types';\n\nconst STORAGE_KEYS = {\n 'layout-mode': 'layout-mode',\n 'layout-container': 'layout-container',\n} as const;\n\ntype LayoutStorageAxis = keyof typeof STORAGE_KEYS;\n\nconst LEGACY_STORAGE_PREFIX = 'ng-theme:v2';\n\n@Injectable({ providedIn: 'root' })\nexport class LayoutService {\n private readonly config = inject(NG_LAYOUT_CONFIG);\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly storage = new LocalStorageStateAdapter<LayoutStorageAxis>({\n isBrowser: this.isBrowser,\n storage: this.document.defaultView?.localStorage ?? null,\n keys: STORAGE_KEYS,\n legacyPrefix: LEGACY_STORAGE_PREFIX,\n });\n\n readonly mode = signal<LayoutMode>(this.storage.read('layout-mode', this.config.defaultMode, isLayoutMode));\n readonly container = signal<LayoutContainer>(\n this.storage.read('layout-container', this.config.defaultContainer, isLayoutContainer),\n );\n\n constructor() {\n effect(() => {\n if (this.isBrowser) {\n this.applyToDOM();\n }\n });\n }\n\n /**\n * Updates the active shell mode and persists the value for future sessions.\n */\n setMode(value: LayoutMode): void {\n this.storage.persist('layout-mode', value);\n this.mode.set(value);\n }\n\n /**\n * Updates the active container width mode and persists the value for future sessions.\n */\n setContainer(value: LayoutContainer): void {\n this.storage.persist('layout-container', value);\n this.container.set(value);\n }\n\n /**\n * Clears persisted layout state and restores the configured defaults for mode and container.\n */\n reset(): void {\n this.storage.clear('layout-mode');\n this.storage.clear('layout-container');\n this.mode.set(this.config.defaultMode);\n this.container.set(this.config.defaultContainer);\n }\n\n private applyToDOM(): void {\n const element = this.document.documentElement;\n\n element.dataset['layoutMode'] = this.mode();\n element.dataset['layoutContainer'] = this.container();\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { LayoutService } from '../state/layout.service';\n\n@Directive({\n selector: '[ngtLayoutHost]',\n host: {\n '[attr.data-layout-mode]': 'layout.mode()',\n '[attr.data-layout-container]': 'layout.container()',\n },\n})\nexport class LayoutHostDirective {\n protected readonly layout = inject(LayoutService);\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: 'layout',\n})\nexport class LayoutElementDirective {}\n\n@Directive({\n selector: 'content,shell-content',\n})\nexport class ContentElementDirective {}\n\n@Directive({\n selector: 'brand',\n})\nexport class BrandElementDirective {}\n\n@Directive({\n selector: 'panel',\n})\nexport class PanelElementDirective {}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport {\n BrandElementDirective,\n ContentElementDirective,\n LayoutElementDirective,\n PanelElementDirective,\n} from '../../directive/elements.directive';\n\n@Component({\n selector: 'horizontal',\n imports: [\n RouterOutlet,\n LayoutElementDirective,\n ContentElementDirective,\n BrandElementDirective,\n PanelElementDirective,\n ],\n host: {\n '[attr.data-layout-mode]': '\"horizontal\"',\n },\n template: `\n <layout>\n <shell-content>\n <header>\n <brand>\n <ng-content select=\"[headerBrand]\"></ng-content>\n </brand>\n\n <nav>\n <ng-content select=\"[headerNavigation]\"></ng-content>\n </nav>\n\n <panel>\n <ng-content select=\"[headerActions]\"></ng-content>\n </panel>\n </header>\n\n <main>\n <router-outlet />\n </main>\n </shell-content>\n </layout>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LayoutHorizontalComponent {}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { ContentElementDirective, LayoutElementDirective } from '../../directive/elements.directive';\n\n@Component({\n selector: 'vertical',\n imports: [RouterOutlet, LayoutElementDirective, ContentElementDirective],\n host: {\n '[attr.data-layout-mode]': '\"vertical\"',\n },\n template: `\n <layout>\n <shell-content>\n <aside>\n <ng-content select=\"[navigation]\"></ng-content>\n </aside>\n <main>\n <router-outlet />\n </main>\n </shell-content>\n </layout>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LayoutVerticalComponent {}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { libraryLucideConfigProvider } from '@ojiepermana/angular/internal';\nimport { LucideExpand, LucideShrink } from '@lucide/angular';\nimport { LayoutService } from '../../state/layout.service';\n\n@Component({\n selector: 'layout-container-switcher',\n imports: [MatIconButton, MatTooltip, LucideExpand, LucideShrink],\n providers: [libraryLucideConfigProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n class=\"ngt-icon-button\"\n type=\"button\"\n mat-icon-button\n aria-label=\"Boxed layout container\"\n [attr.aria-pressed]=\"layout.container() === 'boxed'\"\n [matTooltip]=\"label()\"\n (click)=\"toggle()\">\n @if (layout.container() === 'full') {\n <svg lucideExpand aria-hidden=\"true\"></svg>\n } @else {\n <svg lucideShrink aria-hidden=\"true\"></svg>\n }\n </button>\n `,\n})\nexport class LayoutContainerSwitcherComponent {\n protected readonly layout = inject(LayoutService);\n\n protected readonly label = computed(() =>\n this.layout.container() === 'boxed' ? 'Boxed layout container enabled' : 'Boxed layout container disabled',\n );\n\n protected toggle(): void {\n this.layout.setContainer(this.layout.container() === 'full' ? 'boxed' : 'full');\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { libraryLucideConfigProvider } from '@ojiepermana/angular/internal';\nimport { LucideAppWindow, LucidePanelLeft, LucidePanelTop } from '@lucide/angular';\nimport { LayoutService } from '../../state/layout.service';\n\n@Component({\n selector: 'layout-mode-switcher',\n imports: [\n MatIconButton,\n MatTooltip,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n LucidePanelLeft,\n LucidePanelTop,\n LucideAppWindow,\n ],\n providers: [libraryLucideConfigProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n class=\"ngt-icon-button\"\n type=\"button\"\n mat-icon-button\n [attr.aria-label]=\"'Layout mode: ' + currentOption().label\"\n [matTooltip]=\"'Layout mode: ' + currentOption().label\"\n [matMenuTriggerFor]=\"menu\">\n @switch (layout.mode()) {\n @case ('vertical') {\n <svg lucidePanelLeft aria-hidden=\"true\"></svg>\n }\n @case ('horizontal') {\n <svg lucidePanelTop aria-hidden=\"true\"></svg>\n }\n @default {\n <svg lucideAppWindow aria-hidden=\"true\"></svg>\n }\n }\n </button>\n\n <mat-menu #menu=\"matMenu\">\n @for (option of options; track option.value) {\n <button\n type=\"button\"\n mat-menu-item\n role=\"menuitemradio\"\n [attr.aria-checked]=\"layout.mode() === option.value\"\n (click)=\"layout.setMode(option.value)\">\n @switch (option.value) {\n @case ('vertical') {\n <svg lucidePanelLeft aria-hidden=\"true\"></svg>\n }\n @case ('horizontal') {\n <svg lucidePanelTop aria-hidden=\"true\"></svg>\n }\n @default {\n <svg lucideAppWindow aria-hidden=\"true\"></svg>\n }\n }\n <span>{{ option.label }}</span>\n </button>\n }\n </mat-menu>\n `,\n})\nexport class LayoutModeSwitcherComponent {\n protected readonly layout = inject(LayoutService);\n\n // Empty mode remains programmatic so the UI only exposes the two navigational shell variants.\n protected readonly options = [\n { value: 'vertical' as const, label: 'Vertical Sidebar' },\n { value: 'horizontal' as const, label: 'Horizontal Navbar' },\n ];\n\n protected readonly currentOption = computed(\n () =>\n this.options.find((option) => option.value === this.layout.mode()) ?? {\n value: 'empty' as const,\n label: 'Content Only',\n },\n );\n}\n","import { EnvironmentProviders, isDevMode, makeEnvironmentProviders } from '@angular/core';\nimport { DEFAULT_NG_LAYOUT_CONFIG, NG_LAYOUT_CONFIG } from './layout.token';\nimport { isLayoutContainer, isLayoutMode, LayoutContainer, LayoutMode, NgLayoutConfig } from './layout.types';\n\nfunction warnInvalidLayoutConfig(message: string): void {\n if (isDevMode()) {\n console.warn(`[provideNgLayout] ${message}`);\n }\n}\n\nfunction normalizeLayoutMode(value: unknown): LayoutMode {\n if (typeof value === 'undefined' || isLayoutMode(value)) {\n return value ?? DEFAULT_NG_LAYOUT_CONFIG.defaultMode;\n }\n\n warnInvalidLayoutConfig(\n `Ignoring invalid defaultMode ${JSON.stringify(value)}. Falling back to ${JSON.stringify(DEFAULT_NG_LAYOUT_CONFIG.defaultMode)}.`,\n );\n\n return DEFAULT_NG_LAYOUT_CONFIG.defaultMode;\n}\n\nfunction normalizeLayoutContainer(value: unknown): LayoutContainer {\n if (typeof value === 'undefined' || isLayoutContainer(value)) {\n return value ?? DEFAULT_NG_LAYOUT_CONFIG.defaultContainer;\n }\n\n warnInvalidLayoutConfig(\n `Ignoring invalid defaultContainer ${JSON.stringify(value)}. Falling back to ${JSON.stringify(DEFAULT_NG_LAYOUT_CONFIG.defaultContainer)}.`,\n );\n\n return DEFAULT_NG_LAYOUT_CONFIG.defaultContainer;\n}\n\nfunction normalizeLayoutConfig(config: Partial<NgLayoutConfig>): NgLayoutConfig {\n return {\n ...DEFAULT_NG_LAYOUT_CONFIG,\n defaultMode: normalizeLayoutMode(config.defaultMode),\n defaultContainer: normalizeLayoutContainer(config.defaultContainer),\n };\n}\n\nexport function provideNgLayout(config: Partial<NgLayoutConfig> = {}): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: NG_LAYOUT_CONFIG, useValue: normalizeLayoutConfig(config) }]);\n}\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-layout.mjs","sources":["../../../projects/library/layout/src/state/layout.token.ts","../../../projects/library/layout/src/state/layout.types.ts","../../../projects/library/layout/src/state/layout.service.ts","../../../projects/library/layout/src/directive/layout-host.directive.ts","../../../projects/library/layout/src/directive/elements.directive.ts","../../../projects/library/layout/src/component/horizontal/horizontal.ts","../../../projects/library/layout/src/component/vertical/vertical.ts","../../../projects/library/layout/src/component/layout/layout-container-switcher.ts","../../../projects/library/layout/src/component/layout/layout-mode-switcher.ts","../../../projects/library/layout/src/state/layout.provider.ts","../../../projects/library/layout/ojiepermana-angular-layout.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { NgLayoutConfig } from './layout.types';\n\nexport const DEFAULT_NG_LAYOUT_CONFIG: NgLayoutConfig = {\n defaultMode: 'vertical',\n defaultContainer: 'full',\n};\n\nexport const NG_LAYOUT_CONFIG = new InjectionToken<NgLayoutConfig>('NG_LAYOUT_CONFIG', {\n providedIn: 'root',\n factory: () => ({ ...DEFAULT_NG_LAYOUT_CONFIG }),\n});\n","export const LAYOUT_MODES = ['vertical', 'horizontal', 'empty'] as const;\nexport type LayoutMode = (typeof LAYOUT_MODES)[number];\n\nexport const LAYOUT_CONTAINERS = ['full', 'boxed'] as const;\nexport type LayoutContainer = (typeof LAYOUT_CONTAINERS)[number];\n\nconst LAYOUT_MODE_SET = new Set<LayoutMode>(LAYOUT_MODES);\nconst LAYOUT_CONTAINER_SET = new Set<LayoutContainer>(LAYOUT_CONTAINERS);\n\nexport function isLayoutMode(value: unknown): value is LayoutMode {\n return typeof value === 'string' && LAYOUT_MODE_SET.has(value as LayoutMode);\n}\n\nexport function isLayoutContainer(value: unknown): value is LayoutContainer {\n return typeof value === 'string' && LAYOUT_CONTAINER_SET.has(value as LayoutContainer);\n}\n\nexport interface NgLayoutConfig {\n defaultMode: LayoutMode;\n defaultContainer: LayoutContainer;\n}\n","import { Injectable, PLATFORM_ID, effect, inject, signal } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { LocalStorageStateAdapter } from '@ojiepermana/angular/internal';\nimport { NG_LAYOUT_CONFIG } from './layout.token';\nimport { isLayoutContainer, isLayoutMode, LayoutContainer, LayoutMode } from './layout.types';\n\nconst STORAGE_KEYS = {\n 'layout-mode': 'layout-mode',\n 'layout-container': 'layout-container',\n} as const;\n\ntype LayoutStorageAxis = keyof typeof STORAGE_KEYS;\n\nconst LEGACY_STORAGE_PREFIX = 'ng-theme:v2';\n\n@Injectable({ providedIn: 'root' })\nexport class LayoutService {\n private readonly config = inject(NG_LAYOUT_CONFIG);\n private readonly document = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly storage = new LocalStorageStateAdapter<LayoutStorageAxis>({\n isBrowser: this.isBrowser,\n storage: this.document.defaultView?.localStorage ?? null,\n keys: STORAGE_KEYS,\n legacyPrefix: LEGACY_STORAGE_PREFIX,\n });\n\n readonly mode = signal<LayoutMode>(this.storage.read('layout-mode', this.config.defaultMode, isLayoutMode));\n readonly container = signal<LayoutContainer>(\n this.storage.read('layout-container', this.config.defaultContainer, isLayoutContainer),\n );\n\n constructor() {\n effect(() => {\n if (this.isBrowser) {\n this.applyToDOM();\n }\n });\n }\n\n /**\n * Updates the active shell mode and persists the value for future sessions.\n */\n setMode(value: LayoutMode): void {\n this.storage.persist('layout-mode', value);\n this.mode.set(value);\n }\n\n /**\n * Updates the active container width mode and persists the value for future sessions.\n */\n setContainer(value: LayoutContainer): void {\n this.storage.persist('layout-container', value);\n this.container.set(value);\n }\n\n /**\n * Clears persisted layout state and restores the configured defaults for mode and container.\n */\n reset(): void {\n this.storage.clear('layout-mode');\n this.storage.clear('layout-container');\n this.mode.set(this.config.defaultMode);\n this.container.set(this.config.defaultContainer);\n }\n\n private applyToDOM(): void {\n const element = this.document.documentElement;\n\n element.dataset['layoutMode'] = this.mode();\n element.dataset['layoutContainer'] = this.container();\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { LayoutService } from '../state/layout.service';\n\n@Directive({\n selector: '[ngtLayoutHost]',\n host: {\n '[attr.data-layout-mode]': 'layout.mode()',\n '[attr.data-layout-container]': 'layout.container()',\n },\n})\nexport class LayoutHostDirective {\n protected readonly layout = inject(LayoutService);\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: 'layout',\n})\nexport class LayoutElementDirective {}\n\n@Directive({\n selector: 'content,shell-content',\n})\nexport class ContentElementDirective {}\n\n@Directive({\n selector: 'brand',\n})\nexport class BrandElementDirective {}\n\n@Directive({\n selector: 'navigation',\n})\nexport class NavigationElementDirective {}\n\n@Directive({\n selector: 'action',\n})\nexport class ActionElementDirective {}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport {\n ActionElementDirective,\n BrandElementDirective,\n ContentElementDirective,\n LayoutElementDirective,\n NavigationElementDirective,\n} from '../../directive/elements.directive';\n\n@Component({\n selector: 'horizontal',\n styleUrl: './horizontal.css',\n imports: [\n RouterOutlet,\n LayoutElementDirective,\n ContentElementDirective,\n BrandElementDirective,\n NavigationElementDirective,\n ActionElementDirective,\n ],\n host: {\n '[attr.data-layout-mode]': '\"horizontal\"',\n },\n template: `\n <layout>\n <shell-content>\n <header>\n <brand>\n <ng-content select=\"[brand]\"></ng-content>\n </brand>\n\n <navigation>\n <div class=\"layout-horizontal-navigation-slot\">\n <ng-content select=\"[navigation]\"></ng-content>\n </div>\n </navigation>\n\n <action>\n <ng-content select=\"[action]\"></ng-content>\n </action>\n </header>\n\n <main>\n <router-outlet />\n </main>\n </shell-content>\n </layout>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LayoutHorizontalComponent {}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { ContentElementDirective, LayoutElementDirective } from '../../directive/elements.directive';\n\n@Component({\n selector: 'vertical',\n styleUrl: './vertical.css',\n imports: [RouterOutlet, LayoutElementDirective, ContentElementDirective],\n host: {\n '[attr.data-layout-mode]': '\"vertical\"',\n },\n template: `\n <layout>\n <shell-content>\n <aside>\n <ng-content select=\"[navigation]\"></ng-content>\n </aside>\n <main>\n <router-outlet />\n </main>\n </shell-content>\n </layout>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LayoutVerticalComponent {}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { libraryLucideConfigProvider } from '@ojiepermana/angular/internal';\nimport { LucideExpand, LucideShrink } from '@lucide/angular';\nimport { LayoutService } from '../../state/layout.service';\n\n@Component({\n selector: 'layout-container-switcher',\n imports: [MatIconButton, MatTooltip, LucideExpand, LucideShrink],\n providers: [libraryLucideConfigProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n class=\"ngt-icon-button\"\n type=\"button\"\n mat-icon-button\n aria-label=\"Boxed layout container\"\n [attr.aria-pressed]=\"layout.container() === 'boxed'\"\n [matTooltip]=\"label()\"\n (click)=\"toggle()\">\n @if (layout.container() === 'full') {\n <svg lucideExpand aria-hidden=\"true\"></svg>\n } @else {\n <svg lucideShrink aria-hidden=\"true\"></svg>\n }\n </button>\n `,\n})\nexport class LayoutContainerSwitcherComponent {\n protected readonly layout = inject(LayoutService);\n\n protected readonly label = computed(() =>\n this.layout.container() === 'boxed' ? 'Boxed layout container enabled' : 'Boxed layout container disabled',\n );\n\n protected toggle(): void {\n this.layout.setContainer(this.layout.container() === 'full' ? 'boxed' : 'full');\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { libraryLucideConfigProvider } from '@ojiepermana/angular/internal';\nimport { LucideAppWindow, LucidePanelLeft, LucidePanelTop } from '@lucide/angular';\nimport { LayoutService } from '../../state/layout.service';\n\n@Component({\n selector: 'layout-mode-switcher',\n imports: [\n MatIconButton,\n MatTooltip,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n LucidePanelLeft,\n LucidePanelTop,\n LucideAppWindow,\n ],\n providers: [libraryLucideConfigProvider],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n class=\"ngt-icon-button\"\n type=\"button\"\n mat-icon-button\n [attr.aria-label]=\"'Layout mode: ' + currentOption().label\"\n [matTooltip]=\"'Layout mode: ' + currentOption().label\"\n [matMenuTriggerFor]=\"menu\">\n @switch (layout.mode()) {\n @case ('vertical') {\n <svg lucidePanelLeft aria-hidden=\"true\"></svg>\n }\n @case ('horizontal') {\n <svg lucidePanelTop aria-hidden=\"true\"></svg>\n }\n @default {\n <svg lucideAppWindow aria-hidden=\"true\"></svg>\n }\n }\n </button>\n\n <mat-menu #menu=\"matMenu\">\n @for (option of options; track option.value) {\n <button\n type=\"button\"\n mat-menu-item\n role=\"menuitemradio\"\n [attr.aria-checked]=\"layout.mode() === option.value\"\n (click)=\"layout.setMode(option.value)\">\n @switch (option.value) {\n @case ('vertical') {\n <svg lucidePanelLeft aria-hidden=\"true\"></svg>\n }\n @case ('horizontal') {\n <svg lucidePanelTop aria-hidden=\"true\"></svg>\n }\n @default {\n <svg lucideAppWindow aria-hidden=\"true\"></svg>\n }\n }\n <span>{{ option.label }}</span>\n </button>\n }\n </mat-menu>\n `,\n})\nexport class LayoutModeSwitcherComponent {\n protected readonly layout = inject(LayoutService);\n\n // Empty mode remains programmatic so the UI only exposes the two navigational shell variants.\n protected readonly options = [\n { value: 'vertical' as const, label: 'Vertical Sidebar' },\n { value: 'horizontal' as const, label: 'Horizontal Navbar' },\n ];\n\n protected readonly currentOption = computed(\n () =>\n this.options.find((option) => option.value === this.layout.mode()) ?? {\n value: 'empty' as const,\n label: 'Content Only',\n },\n );\n}\n","import { EnvironmentProviders, isDevMode, makeEnvironmentProviders } from '@angular/core';\nimport { DEFAULT_NG_LAYOUT_CONFIG, NG_LAYOUT_CONFIG } from './layout.token';\nimport { isLayoutContainer, isLayoutMode, LayoutContainer, LayoutMode, NgLayoutConfig } from './layout.types';\n\nfunction warnInvalidLayoutConfig(message: string): void {\n if (isDevMode()) {\n console.warn(`[provideNgLayout] ${message}`);\n }\n}\n\nfunction normalizeLayoutMode(value: unknown): LayoutMode {\n if (typeof value === 'undefined' || isLayoutMode(value)) {\n return value ?? DEFAULT_NG_LAYOUT_CONFIG.defaultMode;\n }\n\n warnInvalidLayoutConfig(\n `Ignoring invalid defaultMode ${JSON.stringify(value)}. Falling back to ${JSON.stringify(DEFAULT_NG_LAYOUT_CONFIG.defaultMode)}.`,\n );\n\n return DEFAULT_NG_LAYOUT_CONFIG.defaultMode;\n}\n\nfunction normalizeLayoutContainer(value: unknown): LayoutContainer {\n if (typeof value === 'undefined' || isLayoutContainer(value)) {\n return value ?? DEFAULT_NG_LAYOUT_CONFIG.defaultContainer;\n }\n\n warnInvalidLayoutConfig(\n `Ignoring invalid defaultContainer ${JSON.stringify(value)}. Falling back to ${JSON.stringify(DEFAULT_NG_LAYOUT_CONFIG.defaultContainer)}.`,\n );\n\n return DEFAULT_NG_LAYOUT_CONFIG.defaultContainer;\n}\n\nfunction normalizeLayoutConfig(config: Partial<NgLayoutConfig>): NgLayoutConfig {\n return {\n ...DEFAULT_NG_LAYOUT_CONFIG,\n defaultMode: normalizeLayoutMode(config.defaultMode),\n defaultContainer: normalizeLayoutContainer(config.defaultContainer),\n };\n}\n\nexport function provideNgLayout(config: Partial<NgLayoutConfig> = {}): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: NG_LAYOUT_CONFIG, useValue: normalizeLayoutConfig(config) }]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;AAGO,MAAM,wBAAwB,GAAmB;AACtD,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,gBAAgB,EAAE,MAAM;CACzB;MAEY,gBAAgB,GAAG,IAAI,cAAc,CAAiB,kBAAkB,EAAE;AACrF,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,OAAO,EAAE,GAAG,wBAAwB,EAAE,CAAC;AACjD,CAAA;;ACXM,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAU;AAGjE,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAU;AAG3D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAa,YAAY,CAAC;AACzD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAkB,iBAAiB,CAAC;AAElE,SAAU,YAAY,CAAC,KAAc,EAAA;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,eAAe,CAAC,GAAG,CAAC,KAAmB,CAAC;AAC9E;AAEM,SAAU,iBAAiB,CAAC,KAAc,EAAA;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAwB,CAAC;AACxF;;ACTA,MAAM,YAAY,GAAG;AACnB,IAAA,aAAa,EAAE,aAAa;AAC5B,IAAA,kBAAkB,EAAE,kBAAkB;CAC9B;AAIV,MAAM,qBAAqB,GAAG,aAAa;MAG9B,aAAa,CAAA;AACP,IAAA,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACjC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3B,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,GAAG,IAAI,wBAAwB,CAAoB;QACzE,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,IAAI,IAAI;AACxD,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,YAAY,EAAE,qBAAqB;AACpC,KAAA,CAAC;IAEO,IAAI,GAAG,MAAM,CAAa,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,2EAAC;IAClG,SAAS,GAAG,MAAM,CACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,gFACvF;AAED,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,UAAU,EAAE;YACnB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,OAAO,CAAC,KAAiB,EAAA;QACvB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IACtB;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,KAAsB,EAAA;QACjC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC;AAC/C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;AAEA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;IAClD;IAEQ,UAAU,GAAA;AAChB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe;QAE7C,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;QAC3C,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;IACvD;uGAvDW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCLrB,mBAAmB,CAAA;AACX,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;uGADtC,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,IAAI,EAAE;AACJ,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,8BAA8B,EAAE,oBAAoB;AACrD,qBAAA;AACF,iBAAA;;;MCJY,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,QAAQ;AACnB,iBAAA;;MAMY,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AAClC,iBAAA;;MAMY,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,OAAO;AAClB,iBAAA;;MAMY,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACvB,iBAAA;;MAMY,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,QAAQ;AACnB,iBAAA;;;MC2BY,yBAAyB,CAAA;uGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3B1B;;;;;;;;;;;;;;;;;;;;;;;;GAwBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,w7FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlCC,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,sBAAsB,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,uBAAuB,kEACvB,qBAAqB,EAAA,QAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,0BAA0B,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,sBAAsB,EAAA,QAAA,EAAA,QAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAgCb,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAzCrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,OAAA,EAEb;wBACP,YAAY;wBACZ,sBAAsB;wBACtB,uBAAuB;wBACvB,qBAAqB;wBACrB,0BAA0B;wBAC1B,sBAAsB;qBACvB,EAAA,IAAA,EACK;AACJ,wBAAA,yBAAyB,EAAE,cAAc;qBAC1C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;GAwBT,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,w7FAAA,CAAA,EAAA;;;MCxBpC,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdxB;;;;;;;;;;;AAWT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g6DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAfS,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,EAAA,QAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkB5D,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBArBnC,SAAS;+BACE,UAAU,EAAA,OAAA,EAEX,CAAC,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,CAAC,EAAA,IAAA,EAClE;AACJ,wBAAA,yBAAyB,EAAE,YAAY;qBACxC,EAAA,QAAA,EACS;;;;;;;;;;;GAWT,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,g6DAAA,CAAA,EAAA;;;MCMpC,gCAAgC,CAAA;AACxB,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IAE9B,KAAK,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,OAAO,GAAG,gCAAgC,GAAG,iCAAiC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC3G;IAES,MAAM,GAAA;QACd,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACjF;uGATW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,SAAA,EAnBhC,CAAC,2BAA2B,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAE9B;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlBS,aAAa,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,8DAAE,YAAY,EAAA,QAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAoBpD,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAtB5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;oBACrC,OAAO,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;oBAChE,SAAS,EAAE,CAAC,2BAA2B,CAAC;oBACxC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;AAeT,EAAA,CAAA;AACF,iBAAA;;;MCwCY,2BAA2B,CAAA;AACnB,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;;AAG9B,IAAA,OAAO,GAAG;AAC3B,QAAA,EAAE,KAAK,EAAE,UAAmB,EAAE,KAAK,EAAE,kBAAkB,EAAE;AACzD,QAAA,EAAE,KAAK,EAAE,YAAqB,EAAE,KAAK,EAAE,mBAAmB,EAAE;KAC7D;AAEkB,IAAA,aAAa,GAAG,QAAQ,CACzC,MACE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI;AACpE,QAAA,KAAK,EAAE,OAAgB;AACvB,QAAA,KAAK,EAAE,cAAc;AACtB,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACJ;uGAfU,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,SAAA,EAhD3B,CAAC,2BAA2B,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAvDC,aAAa,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,cAAc,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,eAAe,EAAA,QAAA,EAAA,0CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,cAAc,gEACd,eAAe,EAAA,QAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkDN,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA5DvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,OAAO,EAAE;wBACP,aAAa;wBACb,UAAU;wBACV,OAAO;wBACP,WAAW;wBACX,cAAc;wBACd,eAAe;wBACf,cAAc;wBACd,eAAe;AAChB,qBAAA;oBACD,SAAS,EAAE,CAAC,2BAA2B,CAAC;oBACxC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,EAAA,CAAA;AACF,iBAAA;;;AC/DD,SAAS,uBAAuB,CAAC,OAAe,EAAA;IAC9C,IAAI,SAAS,EAAE,EAAE;AACf,QAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAA,CAAE,CAAC;IAC9C;AACF;AAEA,SAAS,mBAAmB,CAAC,KAAc,EAAA;IACzC,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACvD,QAAA,OAAO,KAAK,IAAI,wBAAwB,CAAC,WAAW;IACtD;AAEA,IAAA,uBAAuB,CACrB,CAAA,6BAAA,EAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAA,CAAA,CAAG,CAClI;IAED,OAAO,wBAAwB,CAAC,WAAW;AAC7C;AAEA,SAAS,wBAAwB,CAAC,KAAc,EAAA;IAC9C,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;AAC5D,QAAA,OAAO,KAAK,IAAI,wBAAwB,CAAC,gBAAgB;IAC3D;AAEA,IAAA,uBAAuB,CACrB,CAAA,kCAAA,EAAqC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,CAAA,CAAA,CAAG,CAC5I;IAED,OAAO,wBAAwB,CAAC,gBAAgB;AAClD;AAEA,SAAS,qBAAqB,CAAC,MAA+B,EAAA;IAC5D,OAAO;AACL,QAAA,GAAG,wBAAwB;AAC3B,QAAA,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC;AACpD,QAAA,gBAAgB,EAAE,wBAAwB,CAAC,MAAM,CAAC,gBAAgB,CAAC;KACpE;AACH;AAEM,SAAU,eAAe,CAAC,MAAA,GAAkC,EAAE,EAAA;AAClE,IAAA,OAAO,wBAAwB,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3G;;AC5CA;;AAEG;;;;"}