@ojiepermana/angular 0.0.3 → 0.1.0
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/README.md +50 -7
- package/fesm2022/ojiepermana-angular-internal.mjs +417 -2
- package/fesm2022/ojiepermana-angular-internal.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-layout.mjs +8 -18
- package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-navigation-horizontal.mjs +785 -0
- package/fesm2022/ojiepermana-angular-navigation-horizontal.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-navigation-vertical.mjs +1568 -0
- package/fesm2022/ojiepermana-angular-navigation-vertical.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-navigation.mjs +176 -0
- package/fesm2022/ojiepermana-angular-navigation.mjs.map +1 -0
- package/fesm2022/ojiepermana-angular-theme-component.mjs +12 -26
- package/fesm2022/ojiepermana-angular-theme-component.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular-theme-service.mjs +2 -6
- package/fesm2022/ojiepermana-angular-theme-service.mjs.map +1 -1
- package/fesm2022/ojiepermana-angular.mjs.map +1 -1
- package/navigation/README.md +215 -0
- package/package.json +13 -1
- package/theme/README.md +1 -4
- package/theme/styles/adapters/material-ui/index.css +1 -5
- package/theme/styles/layout/horizontal.css +2 -10
- package/theme/styles/layout/vertical.css +3 -5
- package/theme/styles/presets/styles/flat.css +3 -6
- package/theme/styles/presets/styles/glass.css +1 -7
- package/theme/styles/presets/styles/index.css +1 -1
- package/theme/styles/roles/index.css +18 -0
- package/theme/styles/tokens/foundation.css +4 -7
- package/types/ojiepermana-angular-internal.d.ts +64 -1
- package/types/ojiepermana-angular-navigation-horizontal.d.ts +77 -0
- package/types/ojiepermana-angular-navigation-vertical.d.ts +260 -0
- package/types/ojiepermana-angular-navigation.d.ts +182 -0
|
@@ -253,9 +253,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
253
253
|
|
|
254
254
|
class LayoutContainerSwitcherComponent {
|
|
255
255
|
layout = inject(LayoutService);
|
|
256
|
-
label = computed(() => this.layout.container() === 'boxed'
|
|
257
|
-
? 'Boxed layout container enabled'
|
|
258
|
-
: 'Boxed layout container disabled', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
256
|
+
label = computed(() => this.layout.container() === 'boxed' ? 'Boxed layout container enabled' : 'Boxed layout container disabled', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
259
257
|
toggle() {
|
|
260
258
|
this.layout.setContainer(this.layout.container() === 'full' ? 'boxed' : 'full');
|
|
261
259
|
}
|
|
@@ -268,8 +266,7 @@ class LayoutContainerSwitcherComponent {
|
|
|
268
266
|
aria-label="Boxed layout container"
|
|
269
267
|
[attr.aria-pressed]="layout.container() === 'boxed'"
|
|
270
268
|
[matTooltip]="label()"
|
|
271
|
-
(click)="toggle()"
|
|
272
|
-
>
|
|
269
|
+
(click)="toggle()">
|
|
273
270
|
@if (layout.container() === 'full') {
|
|
274
271
|
<svg lucideExpand aria-hidden="true"></svg>
|
|
275
272
|
} @else {
|
|
@@ -293,8 +290,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
293
290
|
aria-label="Boxed layout container"
|
|
294
291
|
[attr.aria-pressed]="layout.container() === 'boxed'"
|
|
295
292
|
[matTooltip]="label()"
|
|
296
|
-
(click)="toggle()"
|
|
297
|
-
>
|
|
293
|
+
(click)="toggle()">
|
|
298
294
|
@if (layout.container() === 'full') {
|
|
299
295
|
<svg lucideExpand aria-hidden="true"></svg>
|
|
300
296
|
} @else {
|
|
@@ -324,8 +320,7 @@ class LayoutModeSwitcherComponent {
|
|
|
324
320
|
mat-icon-button
|
|
325
321
|
[attr.aria-label]="'Layout mode: ' + currentOption().label"
|
|
326
322
|
[matTooltip]="'Layout mode: ' + currentOption().label"
|
|
327
|
-
[matMenuTriggerFor]="menu"
|
|
328
|
-
>
|
|
323
|
+
[matMenuTriggerFor]="menu">
|
|
329
324
|
@switch (layout.mode()) {
|
|
330
325
|
@case ('vertical') {
|
|
331
326
|
<svg lucidePanelLeft aria-hidden="true"></svg>
|
|
@@ -346,8 +341,7 @@ class LayoutModeSwitcherComponent {
|
|
|
346
341
|
mat-menu-item
|
|
347
342
|
role="menuitemradio"
|
|
348
343
|
[attr.aria-checked]="layout.mode() === option.value"
|
|
349
|
-
(click)="layout.setMode(option.value)"
|
|
350
|
-
>
|
|
344
|
+
(click)="layout.setMode(option.value)">
|
|
351
345
|
@switch (option.value) {
|
|
352
346
|
@case ('vertical') {
|
|
353
347
|
<svg lucidePanelLeft aria-hidden="true"></svg>
|
|
@@ -388,8 +382,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
388
382
|
mat-icon-button
|
|
389
383
|
[attr.aria-label]="'Layout mode: ' + currentOption().label"
|
|
390
384
|
[matTooltip]="'Layout mode: ' + currentOption().label"
|
|
391
|
-
[matMenuTriggerFor]="menu"
|
|
392
|
-
>
|
|
385
|
+
[matMenuTriggerFor]="menu">
|
|
393
386
|
@switch (layout.mode()) {
|
|
394
387
|
@case ('vertical') {
|
|
395
388
|
<svg lucidePanelLeft aria-hidden="true"></svg>
|
|
@@ -410,8 +403,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
410
403
|
mat-menu-item
|
|
411
404
|
role="menuitemradio"
|
|
412
405
|
[attr.aria-checked]="layout.mode() === option.value"
|
|
413
|
-
(click)="layout.setMode(option.value)"
|
|
414
|
-
>
|
|
406
|
+
(click)="layout.setMode(option.value)">
|
|
415
407
|
@switch (option.value) {
|
|
416
408
|
@case ('vertical') {
|
|
417
409
|
<svg lucidePanelLeft aria-hidden="true"></svg>
|
|
@@ -458,9 +450,7 @@ function normalizeLayoutConfig(config) {
|
|
|
458
450
|
};
|
|
459
451
|
}
|
|
460
452
|
function provideNgLayout(config = {}) {
|
|
461
|
-
return makeEnvironmentProviders([
|
|
462
|
-
{ provide: NG_LAYOUT_CONFIG, useValue: normalizeLayoutConfig(config) },
|
|
463
|
-
]);
|
|
453
|
+
return makeEnvironmentProviders([{ provide: NG_LAYOUT_CONFIG, useValue: normalizeLayoutConfig(config) }]);
|
|
464
454
|
}
|
|
465
455
|
|
|
466
456
|
/**
|
|
@@ -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>(\n this.storage.read('layout-mode', this.config.defaultMode, isLayoutMode),\n );\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 {\n ContentElementDirective,\n LayoutElementDirective,\n} 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 >\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'\n ? 'Boxed layout container enabled'\n : '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 >\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 >\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 {\n isLayoutContainer,\n isLayoutMode,\n LayoutContainer,\n LayoutMode,\n NgLayoutConfig,\n} 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([\n { provide: NG_LAYOUT_CONFIG, useValue: normalizeLayoutConfig(config) },\n ]);\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,CACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,2EACxE;IACQ,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;uGAzDW,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,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;;;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,EAzB1B;;;;;;;;;;;;;;;;;;;;;;GAsBT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/BC,YAAY,+KACZ,sBAAsB,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,uBAAuB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,qBAAqB,kDACrB,qBAAqB,EAAA,QAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA8BZ,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBArCrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,sBAAsB;wBACtB,uBAAuB;wBACvB,qBAAqB;wBACrB,qBAAqB;AACtB,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,yBAAyB,EAAE,cAAc;AAC1C,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;AAsBT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;MClBY,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,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;kBApBnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,CAAC;AACxE,oBAAA,IAAI,EAAE;AACJ,wBAAA,yBAAyB,EAAE,YAAY;AACxC,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;AAWT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;MCIY,gCAAgC,CAAA;AACxB,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAE9B,IAAA,KAAK,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK;AAC1B,UAAE;UACA,iCAAiC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACtC;IAES,MAAM,GAAA;QACd,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACjF;uGAXW,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,EApBhC,CAAC,2BAA2B,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAE9B;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnBS,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;;2FAqBpD,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAvB5C,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;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCyCY,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,EAlD3B,CAAC,2BAA2B,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAzDC,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;;2FAoDN,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA9DvC,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CT,EAAA,CAAA;AACF,iBAAA;;;AC3DD,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;QAC9B,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,qBAAqB,CAAC,MAAM,CAAC,EAAE;AACvE,KAAA,CAAC;AACJ;;ACpDA;;AAEG;;;;"}
|
|
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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"}
|