@gravionlabs/helix-shell 22.1.13 → 22.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"gravionlabs-helix-shell.mjs","names":[],"sources":["../../../projects/shell/src/lib/form/form-field/form-field.ts","../../../projects/shell/src/lib/form/form-field/form-field.html","../../../projects/shell/src/lib/form/select/select.ts","../../../projects/shell/src/lib/form/select/select.html","../../../projects/shell/src/lib/layout/breadcrumb.model.ts","../../../projects/shell/src/lib/layout/breadcrumb-utils.ts","../../../projects/shell/src/lib/layout/store/layout.store.ts","../../../projects/shell/src/lib/layout/components/nav-rail-item/nav-rail-item.ts","../../../projects/shell/src/lib/layout/components/nav-rail-item/nav-rail-item.html","../../../projects/shell/src/lib/layout/components/nav-rail/nav-rail.ts","../../../projects/shell/src/lib/layout/components/nav-rail/nav-rail.html","../../../projects/shell/src/lib/layout/components/nav-rail/nav-rail.model.ts","../../../projects/shell/src/lib/ui/badge/badge.ts","../../../projects/shell/src/lib/ui/badge/environment-badge.ts","../../../projects/shell/src/lib/layout/components/status-bar/status-bar.ts","../../../projects/shell/src/lib/layout/components/status-bar/status-bar.html","../../../projects/shell/src/lib/layout/components/topbar/actions/alert-action.ts","../../../projects/shell/src/lib/layout/components/topbar/actions/alert-action.html","../../../projects/shell/src/lib/layout/components/configurator/configurator.ts","../../../projects/shell/src/lib/layout/components/configurator/configurator.html","../../../projects/shell/src/lib/layout/components/topbar/actions/configurator-action.ts","../../../projects/shell/src/lib/layout/components/topbar/actions/dark-mode-action.ts","../../../projects/shell/src/lib/layout/components/topbar/topbar.ts","../../../projects/shell/src/lib/layout/components/topbar/topbar.html","../../../projects/shell/src/lib/layout/components/app-layout/app-layout.ts","../../../projects/shell/src/lib/layout/components/app-layout/app-layout.html","../../../projects/shell/src/lib/layout/components/floating-configurator/floating-configurator.ts","../../../projects/shell/src/lib/layout/components/floating-configurator/floating-configurator.html","../../../projects/shell/src/lib/layout/components/footer/footer.ts","../../../projects/shell/src/lib/layout/components/footer/footer.html","../../../projects/shell/src/lib/layout/components/topbar/actions/mobile-menu-action.ts","../../../projects/shell/src/lib/layout/route-menu.model.ts","../../../projects/shell/src/lib/pages/auth/access/access.ts","../../../projects/shell/src/lib/pages/auth/access/access.html","../../../projects/shell/src/lib/pages/auth/error/error.ts","../../../projects/shell/src/lib/pages/auth/error/error.html","../../../projects/shell/src/lib/pages/auth/login/login.ts","../../../projects/shell/src/lib/pages/auth/login/login.html","../../../projects/shell/src/lib/pages/auth/auth.routes.ts","../../../projects/shell/src/lib/pages/empty/empty.ts","../../../projects/shell/src/lib/pages/empty/empty.html","../../../projects/shell/src/lib/pages/landing/components/features-widget/features-widget.ts","../../../projects/shell/src/lib/pages/landing/components/features-widget/features-widget.html","../../../projects/shell/src/lib/pages/landing/components/footer-widget/footer-widget.ts","../../../projects/shell/src/lib/pages/landing/components/footer-widget/footer-widget.html","../../../projects/shell/src/lib/pages/landing/components/hero-widget/hero-widget.ts","../../../projects/shell/src/lib/pages/landing/components/hero-widget/hero-widget.html","../../../projects/shell/src/lib/pages/landing/components/highlights-widget/highlights-widget.ts","../../../projects/shell/src/lib/pages/landing/components/highlights-widget/highlights-widget.html","../../../projects/shell/src/lib/pages/landing/components/pricing-widget/pricing-widget.ts","../../../projects/shell/src/lib/pages/landing/components/pricing-widget/pricing-widget.html","../../../projects/shell/src/lib/pages/landing/components/topbar-widget/topbar-widget.ts","../../../projects/shell/src/lib/pages/landing/components/topbar-widget/topbar-widget.html","../../../projects/shell/src/lib/pages/landing/landing.ts","../../../projects/shell/src/lib/pages/landing/landing.html","../../../projects/shell/src/lib/pages/notfound/notfound.ts","../../../projects/shell/src/lib/pages/notfound/notfound.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport type { AbstractControl } from '@angular/forms';\n\n@Component({\n selector: 'helix-form-field',\n templateUrl: './form-field.html',\n styleUrl: './form-field.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixFormField {\n readonly label = input<string>();\n\n readonly control = input<AbstractControl | null>(null);\n\n readonly hint = input<string>();\n\n readonly error = input<string | null>(null);\n\n readonly showLabel = input(true);\n\n readonly showHint = input(true);\n\n readonly activeError = computed<string | null>(() => {\n const ext = this.error();\n if (ext) return ext;\n const ctrl = this.control();\n if (ctrl?.touched && ctrl.invalid && ctrl.errors) {\n const first = Object.values(ctrl.errors)[0];\n return typeof first === 'string' ? first : null;\n }\n return null;\n });\n}\n","<div class=\"helix-form-field\">\n @if (showLabel() && label()) {\n <label class=\"helix-form-field__label\">{{ label() }}</label>\n }\n\n <div class=\"helix-form-field__control\">\n <ng-content />\n </div>\n\n @if (showHint()) {\n @if (activeError(); as err) {\n <small class=\"helix-form-field__message helix-form-field__message--error h-error\">{{ err }}</small>\n } @else if (hint()) {\n <small class=\"helix-form-field__message helix-form-field__message--hint\">{{ hint() }}</small>\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { type ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'helix-select',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './select.html',\n styleUrl: './select.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HelixSelect),\n multi: true,\n },\n ],\n})\nexport class HelixSelect implements ControlValueAccessor {\n readonly options = input<any[]>([]);\n readonly optionLabel = input<string>('label');\n readonly optionValue = input<string>('value');\n readonly placeholder = input<string>('');\n readonly disabled = input<boolean>(false);\n\n readonly value = signal<any>(null);\n\n protected onChange: (value: any) => void = () => {};\n protected onTouched: () => void = () => {};\n\n readonly processedOptions = computed(() => {\n const opts = this.options();\n const labelKey = this.optionLabel();\n const valueKey = this.optionValue();\n\n return opts.map((opt) => {\n if (typeof opt === 'string') {\n return { label: opt, value: opt };\n }\n return {\n label: opt[labelKey],\n value: opt[valueKey],\n };\n });\n });\n\n writeValue(value: any): void {\n this.value.set(value);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n // Disabled state is handled via the [disabled] input binding in the template\n }\n\n onSelectChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const indexStr = target.value;\n\n if (indexStr === '') {\n this.value.set(null);\n this.onChange(null);\n } else {\n const index = parseInt(indexStr, 10);\n const selectedOption = this.processedOptions()[index];\n\n if (selectedOption) {\n this.value.set(selectedOption.value);\n this.onChange(selectedOption.value);\n }\n }\n this.onTouched();\n }\n\n protected isSelected(optValue: any): boolean {\n return JSON.stringify(this.value()) === JSON.stringify(optValue);\n }\n}\n","<div class=\"helix-select-wrapper\">\n <select\n class=\"helix-select\"\n [disabled]=\"disabled()\"\n (change)=\"onSelectChange($event)\"\n (blur)=\"onTouched()\"\n >\n @if (placeholder()) {\n <option value=\"\" [selected]=\"value() === null\">{{ placeholder() }}</option>\n }\n @for (opt of processedOptions(); track $index) {\n <option\n [value]=\"$index\"\n [selected]=\"isSelected(opt.value)\"\n >\n {{ opt.label }}\n </option>\n }\n </select>\n <i class=\"helix-select-icon pi pi-chevron-down\"></i>\n</div>\n","import { InjectionToken } from '@angular/core';\n\nexport interface HelixBreadcrumb {\n label: string;\n route?: string;\n}\n\nexport const HELIX_BREADCRUMB = new InjectionToken<HelixBreadcrumb[]>('HELIX_BREADCRUMB', {\n factory: () => [],\n});\n","import type { ActivatedRoute } from '@angular/router';\nimport type { MenuItem } from '@gravionlabs/helix-core/api';\n\nexport function helixBreadcrumbsFromRoutes(route: ActivatedRoute): MenuItem[] {\n let deepest: ActivatedRoute | null = route;\n while (deepest.firstChild) {\n deepest = deepest.firstChild;\n }\n\n const breadcrumbs: MenuItem[] = [];\n const routePath: { url: string; snapshot: typeof route.snapshot }[] = [];\n\n let current: ActivatedRoute | null = deepest;\n while (current) {\n const url = current.snapshot.url.map((s) => s.path).join('/');\n routePath.push({ url, snapshot: current.snapshot });\n current = current.parent;\n }\n\n let accumulatedUrl = '';\n for (const { url, snapshot } of routePath.reverse()) {\n if (url) {\n accumulatedUrl = accumulatedUrl ? `${accumulatedUrl}/${url}` : url;\n }\n\n const breadcrumb = snapshot.data?.['breadcrumb'];\n if (!breadcrumb) continue;\n\n const label = typeof breadcrumb === 'function' ? breadcrumb(snapshot) : breadcrumb;\n\n if (accumulatedUrl) {\n breadcrumbs.push({ label, routerLink: `/${accumulatedUrl}` });\n } else {\n breadcrumbs.push({ label });\n }\n }\n\n return breadcrumbs;\n}\n","import { computed, DestroyRef, effect, inject } from '@angular/core';\nimport {\n patchState,\n signalStore,\n withComputed,\n withHooks,\n withMethods,\n withState,\n} from '@ngrx/signals';\nimport type { LayoutConfig, LayoutState, MenuMode } from './layout.models';\n\ntype LayoutStoreState = LayoutConfig & LayoutState;\n\n/** Mobile breakpoint: above this width the rail is static and collapsible, below it is a drawer. */\nconst DESKTOP_MIN_WIDTH = 992;\nconst COLLAPSED_STORAGE_KEY = 'helix.nav-rail.collapsed';\n\nconst isDesktopViewport = () =>\n typeof window === 'undefined' || window.innerWidth >= DESKTOP_MIN_WIDTH;\n\nfunction readCollapsed(): boolean {\n try {\n return localStorage.getItem(COLLAPSED_STORAGE_KEY) === 'true';\n } catch {\n return false;\n }\n}\n\nfunction writeCollapsed(collapsed: boolean): void {\n try {\n localStorage.setItem(COLLAPSED_STORAGE_KEY, String(collapsed));\n } catch {\n // Storage unavailable (private mode, blocked): the state just isn't remembered.\n }\n}\n\nconst initialState: LayoutStoreState = {\n // Config\n preset: 'Helix',\n primary: null,\n surface: null,\n darkTheme: false,\n menuMode: 'static',\n // State\n staticMenuDesktopInactive: false,\n overlayMenuActive: false,\n configSidebarVisible: false,\n mobileMenuActive: false,\n menuHoverActive: false,\n activePath: null,\n sidebarCollapsed: false,\n desktop: true,\n expandedKeys: [],\n};\n\nexport const LayoutStore = signalStore(\n { providedIn: 'root' },\n withState<LayoutStoreState>(initialState),\n withComputed((store) => ({\n isDarkTheme: computed(() => store.darkTheme()),\n isOverlay: computed(() => store.menuMode() === 'overlay'),\n isStatic: computed(() => store.menuMode() === 'static'),\n isSidebarActive: computed(() => store.overlayMenuActive() || store.mobileMenuActive()),\n /** Icon-only rail. Only applies on desktop — the mobile drawer always shows labels. */\n isCollapsed: computed(() => store.sidebarCollapsed() && store.desktop()),\n })),\n withMethods((store) => ({\n toggleDarkMode(): void {\n patchState(store, { darkTheme: !store.darkTheme() });\n },\n setMenuMode(menuMode: MenuMode): void {\n patchState(store, { menuMode });\n },\n showConfigSidebar(): void {\n patchState(store, { configSidebarVisible: true });\n },\n hideConfigSidebar(): void {\n patchState(store, { configSidebarVisible: false });\n },\n onMenuToggle(): void {\n if (store.menuMode() === 'overlay') {\n patchState(store, { overlayMenuActive: !store.overlayMenuActive() });\n }\n if (window.innerWidth > 991) {\n // Desktop: the rail is never hidden completely, the toggle collapses it to icons.\n if (store.menuMode() === 'static') {\n const sidebarCollapsed = !store.sidebarCollapsed();\n patchState(store, { sidebarCollapsed });\n writeCollapsed(sidebarCollapsed);\n }\n } else {\n patchState(store, { mobileMenuActive: !store.mobileMenuActive() });\n }\n },\n closeMobileMenu(): void {\n patchState(store, {\n overlayMenuActive: false,\n mobileMenuActive: false,\n menuHoverActive: false,\n });\n },\n setActivePath(activePath: string | null): void {\n patchState(store, { activePath });\n },\n setExpanded(key: string, expanded: boolean): void {\n const keys = store.expandedKeys();\n if (keys.includes(key) === expanded) return;\n patchState(store, {\n expandedKeys: expanded ? [...keys, key] : keys.filter((k) => k !== key),\n });\n },\n toggleSidebar(): void {\n const sidebarCollapsed = !store.sidebarCollapsed();\n patchState(store, { sidebarCollapsed });\n writeCollapsed(sidebarCollapsed);\n },\n setMenuHoverActive(menuHoverActive: boolean): void {\n patchState(store, { menuHoverActive });\n },\n updateConfig(config: Partial<LayoutConfig>): void {\n patchState(store, config);\n },\n setPreset(preset: string): void {\n patchState(store, { preset });\n },\n setPrimary(primary: string | null): void {\n patchState(store, { primary });\n },\n setSurface(surface: string | null): void {\n patchState(store, { surface });\n },\n isDesktop(): boolean {\n return window.innerWidth > 991;\n },\n setDesktop(desktop: boolean): void {\n patchState(store, { desktop });\n },\n reset(): void {\n patchState(store, { ...initialState, desktop: isDesktopViewport() });\n },\n })),\n withHooks({\n onInit(store) {\n patchState(store, { sidebarCollapsed: readCollapsed(), desktop: isDesktopViewport() });\n if (typeof window !== 'undefined') {\n const onResize = () => store.setDesktop(isDesktopViewport());\n window.addEventListener('resize', onResize);\n inject(DestroyRef).onDestroy(() => window.removeEventListener('resize', onResize));\n }\n\n effect(() => {\n const isDark = store.darkTheme();\n const supportsViewTransition = 'startViewTransition' in document;\n\n const applyDarkMode = () => {\n if (isDark) {\n document.documentElement.classList.add('app-dark');\n } else {\n document.documentElement.classList.remove('app-dark');\n }\n };\n\n if (supportsViewTransition) {\n (document as any).startViewTransition(() => applyDarkMode());\n } else {\n applyDarkMode();\n }\n });\n },\n }),\n);\n","import { CommonModule } from '@angular/common';\nimport {\n type AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n inject,\n input,\n signal,\n untracked,\n} from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { Tooltip } from '@gravionlabs/helix-core/tooltip';\nimport type { HelixRouteMenuItem } from '../../route-menu.model';\nimport { LayoutStore } from '../../store/layout.store';\n\n/**\n * Whether the active URL matches an item path on a whole-segment boundary,\n * so `uikit/dynamicform` does not match `uikit/dynamicform-advanced` but\n * still matches child routes, query params and fragments.\n */\nfunction isPathActive(activePath: string, itemPath: string): boolean {\n if (!itemPath || !activePath.startsWith(itemPath)) return false;\n const next = activePath[itemPath.length];\n return next === undefined || next === '/' || next === '?' || next === '#' || next === ';';\n}\n\n@Component({\n selector: '[helix-nav-rail-item]',\n standalone: true,\n imports: [CommonModule, RouterModule, RippleModule, Tooltip],\n templateUrl: './nav-rail-item.html',\n styleUrl: './nav-rail-item.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n '[class.helix-nav-rail-item-expanded]': 'isExpanded()',\n '[class.helix-nav-rail-item-collapsed]': 'isCollapsed()',\n '(mouseenter)': 'openFlyout()',\n '(mouseleave)': 'scheduleFlyoutClose()',\n '(focusin)': 'openFlyout()',\n '(focusout)': 'onFocusOut($event)',\n '(keydown.escape)': 'closeFlyout(true)',\n },\n})\nexport class HelixNavRailItem implements AfterViewInit {\n store = inject(LayoutStore);\n\n item = input<HelixRouteMenuItem | null>(null);\n parentPath = input<string | null>(null);\n depth = input(0);\n\n /** Renders inside a collapsed-rail flyout: always expanded (labels visible), never itself a flyout. */\n flyout = input(false);\n\n /** Whether this item's submenu, having animated open at least once, may transition on leave too. */\n initialized = signal(false);\n\n hasChildren = computed(() => !!this.item()?.items?.length);\n isCollapsed = computed(() => this.store.isCollapsed() && !this.flyout());\n\n /** Collapsed rail: the item's children are shown in a flyout next to it. */\n flyoutOpen = signal(false);\n flyoutTop = signal(0);\n flyoutLeft = signal(0);\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n #suppressOpen = false;\n #closeTimer: ReturnType<typeof setTimeout> | undefined;\n\n /** Stable key used against LayoutStore.expandedKeys() — several items can be expanded at once. */\n itemKey = computed(() => {\n const ownPath = this.item()?.path;\n if (ownPath) {\n const parent = this.parentPath();\n if (parent && !ownPath.startsWith(parent)) {\n return `${parent}/${ownPath}`;\n }\n return ownPath;\n }\n const label = this.item()?.label ?? '';\n const parent = this.parentPath();\n return parent ? `${parent}/${label}` : label;\n });\n\n fullPath = computed(() => {\n const itemPath = this.item()?.path;\n if (itemPath == null) return this.parentPath();\n const parent = this.parentPath();\n if (parent && !itemPath.startsWith(parent)) {\n return `${parent}/${itemPath}`;\n }\n return itemPath;\n });\n\n isActive = computed(() => {\n if (this.hasChildren()) return false;\n const itemPath = this.item()?.path;\n if (itemPath == null) return false;\n const normalizedPath = this.store.activePath()?.replace(/^\\//, '') ?? '';\n const normalizedFull = (this.fullPath() ?? '').replace(/^\\//, '');\n return isPathActive(normalizedPath, normalizedFull);\n });\n\n hasActiveDescendant = computed(() => {\n const normalized = this.store.activePath()?.replace(/^\\//, '') ?? '';\n const items = this.item()?.items;\n if (!items) return false;\n\n const parentFullPath = (this.fullPath() ?? '').replace(/^\\//, '');\n\n const match = (list: HelixRouteMenuItem[], prefix: string): boolean =>\n list.some((child) => {\n const childFullPath = child.path\n ? prefix\n ? `${prefix}/${child.path.replace(/^\\//, '')}`\n : child.path.replace(/^\\//, '')\n : prefix;\n if (childFullPath && isPathActive(normalized, childFullPath)) {\n return true;\n }\n return child.items ? match(child.items, childFullPath) : false;\n });\n\n return match(items, parentFullPath);\n });\n\n isExpanded = computed(() => this.store.expandedKeys().includes(this.itemKey()));\n\n constructor() {\n // Navigating (or expanding the rail) always dismisses an open flyout.\n effect(() => {\n this.store.activePath();\n this.isCollapsed();\n untracked(() => this.closeFlyout(false));\n });\n\n // The group holding the active route opens itself on navigation; the user can still collapse it.\n effect(() => {\n if (this.hasActiveDescendant()) {\n const key = this.itemKey();\n untracked(() => this.store.setExpanded(key, true));\n }\n });\n }\n\n ngAfterViewInit() {\n setTimeout(() => this.initialized.set(true));\n }\n\n itemClick(event: Event) {\n const item = this.item();\n if (item?.disabled) {\n event.preventDefault();\n return;\n }\n if (item?.command) {\n item.command({ originalEvent: event, item });\n }\n if (this.hasChildren()) {\n event.preventDefault();\n if (this.isCollapsed()) {\n this.flyoutOpen() ? this.closeFlyout(false) : this.openFlyout();\n } else {\n this.store.setExpanded(this.itemKey(), !this.isExpanded());\n }\n } else {\n this.store.closeMobileMenu();\n }\n }\n\n openFlyout() {\n if (this.#suppressOpen || !this.isCollapsed() || !this.hasChildren()) return;\n clearTimeout(this.#closeTimer);\n if (this.flyoutOpen()) return;\n const rect = this.#host.nativeElement.getBoundingClientRect();\n this.flyoutTop.set(rect.top);\n // Anchor to the rail's edge (not the padded item) so the flyout sits beside the rail.\n const rail = this.#host.nativeElement.closest('.helix-nav-rail');\n this.flyoutLeft.set((rail?.getBoundingClientRect().right ?? rect.right) + 4);\n this.flyoutOpen.set(true);\n // Keep the flyout inside the viewport once it has rendered.\n setTimeout(() => {\n const el = this.#host.nativeElement.querySelector<HTMLElement>('.helix-nav-rail-flyout');\n if (!el) return;\n const overflow = el.getBoundingClientRect().bottom - (window.innerHeight - 8);\n if (overflow > 0) this.flyoutTop.set(Math.max(8, rect.top - overflow));\n });\n }\n\n closeFlyout(restoreFocus: boolean) {\n clearTimeout(this.#closeTimer);\n if (!this.flyoutOpen()) return;\n this.flyoutOpen.set(false);\n if (restoreFocus)\n this.#host.nativeElement.querySelector<HTMLElement>('.helix-nav-rail-link')?.focus();\n }\n\n scheduleFlyoutClose() {\n clearTimeout(this.#closeTimer);\n this.#closeTimer = setTimeout(() => this.closeFlyout(false), 120);\n }\n\n onFocusOut(event: FocusEvent) {\n const next = event.relatedTarget as Node | null;\n if (!next || !this.#host.nativeElement.contains(next)) this.closeFlyout(false);\n }\n\n /** Enter/Space activate expandable items; arrow keys move between visible links. */\n onKeydown(event: KeyboardEvent) {\n const link = event.currentTarget as HTMLElement;\n switch (event.key) {\n case 'Enter':\n case ' ':\n if (this.hasChildren()) {\n event.preventDefault();\n this.itemClick(event);\n }\n break;\n case 'ArrowDown':\n case 'ArrowUp': {\n const links = Array.from(\n (\n link.closest('nav') ??\n link.parentElement?.parentElement ??\n document\n ).querySelectorAll<HTMLElement>('.helix-nav-rail-link'),\n );\n const next = links[links.indexOf(link) + (event.key === 'ArrowDown' ? 1 : -1)];\n if (next) {\n event.preventDefault();\n next.focus();\n }\n break;\n }\n case 'ArrowRight':\n if (this.hasChildren() && this.isCollapsed()) {\n event.preventDefault();\n this.openFlyout();\n } else if (this.hasChildren() && !this.isExpanded()) {\n event.preventDefault();\n this.store.setExpanded(this.itemKey(), true);\n }\n break;\n case 'ArrowLeft':\n if (this.hasChildren() && this.isExpanded()) {\n event.preventDefault();\n this.store.setExpanded(this.itemKey(), false);\n }\n break;\n }\n }\n}\n","@if (hasChildren()) {\n <a\n class=\"helix-nav-rail-link\"\n [attr.title]=\"isCollapsed() ? null : $safeNavigationMigration(item()?.label)\"\n [attr.aria-expanded]=\"isCollapsed() ? flyoutOpen() : isExpanded()\"\n [attr.aria-haspopup]=\"isCollapsed() ? 'true' : null\"\n role=\"button\"\n (click)=\"itemClick($event)\"\n (keydown)=\"onKeydown($event)\"\n tabindex=\"0\"\n hRipple\n >\n @if (item()?.icon) {\n <i [ngClass]=\"$safeNavigationMigration(item()?.icon)\" class=\"helix-nav-rail-icon\"></i>\n }\n @if (!isCollapsed()) {\n <span class=\"helix-nav-rail-label\">{{ item()?.label }}</span>\n <i\n class=\"pi pi-chevron-right helix-nav-rail-chevron\"\n [class.helix-nav-rail-chevron-open]=\"isExpanded()\"\n ></i>\n }\n </a>\n @if (isCollapsed() && flyoutOpen()) {\n <div class=\"helix-nav-rail-flyout\" [style.top.px]=\"flyoutTop()\" [style.left.px]=\"flyoutLeft()\">\n <div class=\"helix-nav-rail-flyout-title\">{{ item()?.label }}</div>\n <ul class=\"helix-nav-rail-flyout-list\">\n @for (child of item()?.items; track child.label) {\n <li\n helix-nav-rail-item\n [item]=\"child\"\n [parentPath]=\"fullPath()\"\n [depth]=\"0\"\n [flyout]=\"true\"\n ></li>\n }\n </ul>\n </div>\n }\n @if (isExpanded() && !isCollapsed()) {\n <ul\n class=\"helix-nav-rail-sublist\"\n [animate.enter]=\"initialized() ? 'helix-nav-rail-submenu-enter' : null\"\n [animate.leave]=\"'helix-nav-rail-submenu-leave'\"\n >\n @for (child of item()?.items; track child.label) {\n <li helix-nav-rail-item [item]=\"child\" [parentPath]=\"fullPath()\" [depth]=\"depth() + 1\"></li>\n }\n </ul>\n }\n} @else {\n <a\n class=\"helix-nav-rail-link\"\n [class.active]=\"isActive()\"\n [attr.aria-current]=\"isActive() ? 'page' : null\"\n [attr.title]=\"isCollapsed() ? null : $safeNavigationMigration(item()?.label)\"\n [hTooltip]=\"$safeNavigationMigration(item()?.label)\"\n [tooltipDisabled]=\"!isCollapsed()\"\n tooltipPosition=\"right\"\n tooltipEvent=\"both\"\n [routerLink]=\"$safeNavigationMigration(item()?.routerLink)\"\n (click)=\"itemClick($event)\"\n (keydown)=\"onKeydown($event)\"\n tabindex=\"0\"\n hRipple\n >\n @if (isActive() && !isCollapsed()) {\n <span class=\"helix-nav-rail-accent\"></span>\n }\n @if (item()?.icon) {\n <i [ngClass]=\"$safeNavigationMigration(item()?.icon)\" class=\"helix-nav-rail-icon\"></i>\n }\n @if (!isCollapsed()) {\n <span class=\"helix-nav-rail-label\">{{ item()?.label }}</span>\n }\n </a>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n inject,\n input,\n type OnDestroy,\n type OnInit,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, Subject, takeUntil } from 'rxjs';\nimport { LayoutStore } from '../../store/layout.store';\nimport { HelixNavRailItem } from '../nav-rail-item/nav-rail-item';\nimport type { HelixNavGroup } from './nav-rail.model';\n\n@Component({\n selector: 'helix-nav-rail',\n standalone: true,\n imports: [CommonModule, HelixNavRailItem, RouterModule],\n templateUrl: './nav-rail.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './nav-rail.scss',\n})\nexport class HelixNavRail implements OnInit, OnDestroy {\n store = inject(LayoutStore);\n router = inject(Router);\n el = inject(ElementRef);\n private sanitizer = inject(DomSanitizer);\n\n /** Grouped navigation model. Each group renders an optional uppercase section label. */\n model = input<HelixNavGroup[]>([]);\n\n /** Application title shown in the brand area. Hidden when nav is collapsed. */\n appTitle = input<string>('Helix');\n\n /**\n * Brand icon: inline SVG (`<svg>…</svg>`) or URL to an SVG file.\n * Falls back to the default hardcoded icon when not provided.\n */\n brandIcon = input<string>();\n\n protected isInlineSvg = computed(() => this.brandIcon()?.trim().startsWith('<svg') ?? false);\n\n protected safeBrandIcon = computed(() => {\n const icon = this.brandIcon();\n if (!icon) return null;\n if (this.isInlineSvg()) {\n return this.sanitizer.bypassSecurityTrustHtml(icon);\n }\n return icon;\n });\n\n private outsideClickListener: ((event: MouseEvent) => void) | null = null;\n private destroy$ = new Subject<void>();\n\n constructor() {\n effect(() => {\n if (this.store.isDesktop()) {\n if (this.store.overlayMenuActive()) {\n this.bindOutsideClickListener();\n } else {\n this.unbindOutsideClickListener();\n }\n } else {\n if (this.store.mobileMenuActive()) {\n this.bindOutsideClickListener();\n } else {\n this.unbindOutsideClickListener();\n }\n }\n });\n }\n\n ngOnInit() {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n takeUntil(this.destroy$),\n )\n .subscribe((event) => {\n const navEvent = event as NavigationEnd;\n this.onRouteChange(navEvent.urlAfterRedirects);\n });\n this.onRouteChange(this.router.url);\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n this.unbindOutsideClickListener();\n }\n\n private onRouteChange(path: string) {\n this.store.setActivePath(path);\n this.store.closeMobileMenu();\n }\n\n private bindOutsideClickListener() {\n if (!this.outsideClickListener) {\n this.outsideClickListener = (event: MouseEvent) => {\n if (this.isOutsideClicked(event)) {\n this.store.closeMobileMenu();\n }\n };\n document.addEventListener('click', this.outsideClickListener);\n }\n }\n\n private unbindOutsideClickListener() {\n if (this.outsideClickListener) {\n document.removeEventListener('click', this.outsideClickListener);\n this.outsideClickListener = null;\n }\n }\n\n private isOutsideClicked(event: MouseEvent): boolean {\n const topbarButtonEl = document.querySelector('.topbar-start > button');\n const railEl = this.el.nativeElement;\n return !(\n railEl?.isSameNode(event.target as Node) ||\n railEl?.contains(event.target as Node) ||\n topbarButtonEl?.isSameNode(event.target as Node) ||\n topbarButtonEl?.contains(event.target as Node)\n );\n }\n}\n","<aside class=\"helix-nav-rail\" [class.helix-nav-rail-collapsed]=\"store.isCollapsed()\">\n <div class=\"helix-nav-rail-brand\">\n <a routerLink=\"/\">\n @if (brandIcon(); as icon) {\n @if (isInlineSvg()) {\n <span [innerHTML]=\"safeBrandIcon()\"></span>\n } @else {\n <img [src]=\"icon\" alt=\"\" width=\"24\" height=\"24\" />\n }\n } @else {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"var(--primary-color)\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m10 16 1.5 1.5\" />\n <path d=\"m14 8-1.5-1.5\" />\n <path d=\"M15 2c-1.798 1.998-2.518 3.995-2.807 5.993\" />\n <path d=\"m16.5 10.5 1 1\" />\n <path d=\"m17 6-2.891-2.891\" />\n <path d=\"M2 15c6.667-6 13.333 0 20-6\" />\n <path d=\"m20 9 .891.891\" />\n <path d=\"M3.109 14.109 4 15\" />\n <path d=\"m6.5 12.5 1 1\" />\n <path d=\"m7 18 2.891 2.891\" />\n <path d=\"M9 22c1.798-1.998 2.518-3.995 2.807-5.993\" />\n </svg>\n }\n @if (!store.isCollapsed()) {\n <span class=\"helix-nav-rail-brand-text\">\n <span>{{ appTitle() }}</span>\n </span>\n }\n </a>\n </div>\n\n <nav class=\"helix-nav-rail-nav\">\n @for (group of model(); track group.section ?? $index) {\n <div class=\"helix-nav-rail-group\">\n @if (group.section && !store.isCollapsed()) {\n <div class=\"helix-nav-rail-section\">{{ group.section }}</div>\n }\n @if (group.section && store.isCollapsed() && $index > 0) {\n <div class=\"helix-nav-rail-divider\"></div>\n }\n <ul class=\"helix-nav-rail-list\">\n @if (store.isCollapsed() && group.section && group.icon) {\n <li\n helix-nav-rail-item\n [item]=\"{ label: group.section, icon: group.icon, items: group.items }\"\n [parentPath]=\"null\"\n [depth]=\"0\"\n ></li>\n } @else {\n @for (item of group.items; track item.label) {\n <li helix-nav-rail-item [item]=\"item\" [parentPath]=\"null\" [depth]=\"0\"></li>\n }\n }\n </ul>\n </div>\n }\n </nav>\n\n <div class=\"helix-nav-rail-footer\">\n <button\n type=\"button\"\n class=\"helix-nav-rail-collapse-button\"\n (click)=\"store.toggleSidebar()\"\n [title]=\"store.isCollapsed() ? 'Expand navigation' : 'Collapse navigation'\"\n [attr.aria-label]=\"store.isCollapsed() ? 'Expand navigation' : 'Collapse navigation'\"\n [attr.aria-expanded]=\"!store.isCollapsed()\"\n >\n <i\n class=\"pi\"\n [ngClass]=\"{\n 'pi-angle-double-left': !store.isCollapsed(),\n 'pi-angle-double-right': store.isCollapsed(),\n }\"\n ></i>\n </button>\n </div>\n</aside>\n","import type { HelixRouteMenuItem } from '../../route-menu.model';\n\n/**\n * A group of nav-rail items under an optional uppercase section label.\n * Reuses HelixRouteMenuItem for items so existing routerLink/path-driven\n * active state, breadcrumbs, and route generation keep working unchanged.\n */\nexport interface HelixNavGroup {\n /** Uppercase section label shown above the items. Omit for an unlabeled group. */\n section?: string;\n /** Icon of the section. In the collapsed rail the section becomes one icon with a flyout of its items. */\n icon?: string;\n items: HelixRouteMenuItem[];\n}\n\n/** How a flat menu is mapped onto the nav rail. */\nexport type HelixNavStyle = 'sections' | 'tree';\n\n/**\n * Adapts a flat HelixRouteMenuItem tree (as used by HelixAppLayout's `menu`\n * input) into HelixNavGroup[].\n *\n * - `'sections'` (default): every top-level item with children becomes an\n * uppercase section whose children are listed directly; consecutive\n * top-level items without children form one unlabeled group. Deeper levels\n * still expand inline.\n * - `'tree'`: the whole menu is one unlabeled group, so each top-level item\n * with children renders as an expandable HelixNavRailItem.\n */\nexport function helixNavGroupsFromMenu(\n items: HelixRouteMenuItem[],\n style: HelixNavStyle = 'sections',\n): HelixNavGroup[] {\n if (style === 'tree') return [{ items }];\n\n const groups: HelixNavGroup[] = [];\n let plain: HelixRouteMenuItem[] = [];\n const flushPlain = () => {\n if (plain.length) groups.push({ items: plain });\n plain = [];\n };\n\n for (const item of items) {\n if (item.items?.length) {\n flushPlain();\n groups.push({ section: item.label, icon: item.icon, items: item.items });\n } else {\n plain.push(item);\n }\n }\n flushPlain();\n return groups;\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type BadgeSeverity = 'info' | 'warn' | 'error' | 'success';\n\n@Component({\n selector: 'helix-badge',\n standalone: true,\n template: `\n <span\n class=\"helix-badge\"\n [class.helix-badge--sm]=\"size() === 'sm'\"\n [class.helix-badge--info]=\"severity() === 'info'\"\n [class.helix-badge--warn]=\"severity() === 'warn'\"\n [class.helix-badge--error]=\"severity() === 'error'\"\n [class.helix-badge--success]=\"severity() === 'success'\"\n >\n @if (icon(); as icn) {\n <i [class]=\"icn\"></i>\n }\n @if (label(); as lbl) {\n <span class=\"helix-badge__label\">{{ lbl }}</span>\n }\n </span>\n `,\n changeDetection: ChangeDetectionStrategy.Eager,\n styles: [\n `\n .helix-badge {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n padding: 0.25rem 0.5rem;\n border-radius: 9999px;\n font-size: 0.75rem;\n font-weight: 600;\n line-height: 1;\n white-space: nowrap;\n }\n .helix-badge--sm {\n padding: 0.125rem 0.375rem;\n font-size: 0.625rem;\n }\n .helix-badge--info {\n background-color: var(--badge-bg, var(--h-info-100, #e0f2fe));\n color: var(--badge-color, var(--h-info-700, #0369a1));\n }\n .helix-badge--warn {\n background-color: var(--badge-bg, var(--h-warn-100, #fef3c7));\n color: var(--badge-color, var(--h-warn-700, #b45309));\n }\n .helix-badge--error {\n background-color: var(--badge-bg, var(--h-error-100, #fce4ec));\n color: var(--badge-color, var(--h-error-700, #c62828));\n }\n .helix-badge--success {\n background-color: var(--badge-bg, var(--h-success-100, #dcfce7));\n color: var(--badge-color, var(--h-success-700, #15803d));\n }\n `,\n ],\n})\nexport class HelixBadge {\n severity = input.required<BadgeSeverity>();\n label = input<string>();\n icon = input<string>();\n size = input<'sm' | 'md'>('md');\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport type { BadgeSeverity } from './badge';\nimport { HelixBadge } from './badge';\n\nexport type Environment = 'development' | 'testing' | 'staging' | 'production';\n\nconst ENV_MAP: Record<Environment, { severity: BadgeSeverity; icon: string; label: string }> = {\n development: { severity: 'success', icon: 'pi pi-code', label: 'Development' },\n testing: { severity: 'info', icon: 'pi pi-flask', label: 'Testing' },\n staging: { severity: 'warn', icon: 'pi pi-layers', label: 'Staging' },\n production: { severity: 'error', icon: 'pi pi-verified', label: 'Production' },\n};\n\nconst DEFAULT_ENV = { severity: 'info' as BadgeSeverity, icon: 'pi pi-question', label: 'Unknown' };\n\n@Component({\n selector: 'helix-environment-badge',\n standalone: true,\n imports: [HelixBadge],\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n <helix-badge\n [severity]=\"mapped().severity\"\n [icon]=\"mapped().icon\"\n [label]=\"mapped().label\"\n />\n `,\n})\nexport class HelixEnvironmentBadge {\n environment = input.required<Environment>();\n\n protected mapped = computed(() => ENV_MAP[this.environment()] ?? DEFAULT_ENV);\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport type { Environment } from '../../../ui/badge/environment-badge';\nimport { HelixEnvironmentBadge } from '../../../ui/badge/environment-badge';\nimport type { HelixStatusBarTone, HelixStatusBarVersion } from './status-bar.model';\n\nconst TONE_BG: Record<HelixStatusBarTone, string> = {\n staging: 'var(--h-amber-600, #d97706)',\n production: 'var(--h-surface-800, #1e293b)',\n success: 'var(--h-green-600, #16a34a)',\n danger: 'var(--h-red-600, #dc2626)',\n neutral: 'var(--helix-surface-chrome, var(--surface-card))',\n};\n\nconst TONE_TEXT: Record<HelixStatusBarTone, string> = {\n staging: '#fff',\n production: '#fff',\n success: '#fff',\n danger: '#fff',\n neutral: 'var(--text-color)',\n};\n\n@Component({\n selector: 'helix-status-bar',\n standalone: true,\n imports: [HelixEnvironmentBadge],\n templateUrl: './status-bar.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './status-bar.scss',\n})\nexport class HelixStatusBar {\n brand = input('');\n environment = input<string | undefined>();\n note = input<string | undefined>();\n versions = input<HelixStatusBarVersion[]>([]);\n tone = input<HelixStatusBarTone>('neutral');\n height = input<string>('var(--helix-status-bar-height, 3rem)');\n\n protected envForBadge = computed(() => this.environment() as Environment | undefined);\n protected bgColor = computed(() => TONE_BG[this.tone()]);\n protected textColor = computed(() => TONE_TEXT[this.tone()]);\n}\n","<div\n class=\"helix-status-bar\"\n [style.height]=\"height()\"\n [style.background-color]=\"bgColor()\"\n [style.color]=\"textColor()\"\n>\n <span class=\"helix-status-bar-brand\">{{ brand() }}</span>\n\n @if (envForBadge(); as env) {\n <helix-environment-badge [environment]=\"env\" />\n }\n\n @if (note(); as n) {\n <span class=\"helix-status-bar-note\">{{ n }}</span>\n }\n\n <div class=\"helix-status-bar-versions\">\n @for (ver of versions(); track ver.label) {\n <span class=\"helix-status-bar-version\">\n <span class=\"helix-status-bar-version-label\">{{ ver.label }}:</span>\n <span class=\"helix-status-bar-version-value\">{{ ver.value }}</span>\n </span>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nexport interface AlertItem {\n id: string;\n label: string;\n severity: string;\n route?: string;\n}\n\n@Component({\n selector: 'helix-alert-action',\n standalone: true,\n imports: [RouterModule],\n templateUrl: './alert-action.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './alert-action.scss',\n})\nexport class HelixAlertAction {\n count = input.required<number>();\n alerts = input<AlertItem[]>();\n protected open = signal(false);\n}\n","<button type=\"button\" class=\"alert-badge-trigger\" (click)=\"open.set(!open())\" (blur)=\"open.set(false)\">\n <i class=\"pi pi-bell\"></i>\n @if (count() > 0) {\n <span class=\"alert-badge-count\">{{ count() }}</span>\n }\n</button>\n@if (open() && alerts() && alerts()!.length > 0) {\n <div class=\"alert-badge-dropdown\">\n @for (alert of alerts(); track alert.id) {\n <a\n class=\"alert-badge-item\"\n [class.alert-badge-item--warn]=\"alert.severity === 'warn'\"\n [class.alert-badge-item--error]=\"alert.severity === 'error'\"\n [class.alert-badge-item--success]=\"alert.severity === 'success'\"\n [routerLink]=\"alert.route || undefined\"\n >\n <span class=\"alert-badge-dot\"></span>\n <span class=\"alert-badge-label\">{{ alert.label }}</span>\n </a>\n }\n </div>\n}\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n type OnInit,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { HelixConfig } from '@gravionlabs/helix-core/config';\nimport { SelectButtonModule } from '@gravionlabs/helix-core/selectbutton';\nimport { $t, updatePreset, updateSurfacePalette } from '@gravionlabs/helix-core/themes';\nimport { auraPreset } from '@gravionlabs/helix-core/themes/aura';\nimport { helixPreset } from '@gravionlabs/helix-core/themes/helix';\nimport { laraPreset } from '@gravionlabs/helix-core/themes/lara';\nimport { noraPreset } from '@gravionlabs/helix-core/themes/nora';\nimport { LayoutStore } from '../../store/layout.store';\n\nconst presets = {\n Helix: helixPreset,\n Aura: auraPreset,\n Lara: laraPreset,\n Nora: noraPreset,\n} as const;\n\ndeclare type KeyOfType<T> = keyof T extends infer U ? U : never;\n\ndeclare type SurfacesType = {\n name?: string;\n palette?: {\n 0?: string;\n 50?: string;\n 100?: string;\n 200?: string;\n 300?: string;\n 400?: string;\n 500?: string;\n 600?: string;\n 700?: string;\n 800?: string;\n 900?: string;\n 950?: string;\n };\n};\n\n@Component({\n selector: 'helix-configurator',\n standalone: true,\n imports: [CommonModule, FormsModule, SelectButtonModule],\n templateUrl: './configurator.html',\n styleUrl: './configurator.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n class:\n 'hidden absolute top-13 right-0 w-72 p-4 bg-surface-0 dark:bg-surface-900 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]',\n },\n})\nexport class HelixConfigurator implements OnInit {\n router = inject(Router);\n primeng = inject(HelixConfig);\n store = inject(LayoutStore);\n platformId = inject(PLATFORM_ID);\n\n presetOptions = Object.keys(presets);\n showMenuModeButton = signal(!this.router.url.includes('auth'));\n menuModeOptions = [\n { label: 'Static', value: 'static' },\n { label: 'Overlay', value: 'overlay' },\n ];\n\n surfaces: SurfacesType[] = [\n {\n name: 'slate',\n palette: {\n 0: '#ffffff',\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n },\n },\n {\n name: 'gray',\n palette: {\n 0: '#ffffff',\n 50: '#f9fafb',\n 100: '#f3f4f6',\n 200: '#e5e7eb',\n 300: '#d1d5db',\n 400: '#9ca3af',\n 500: '#6b7280',\n 600: '#4b5563',\n 700: '#374151',\n 800: '#1f2937',\n 900: '#111827',\n 950: '#030712',\n },\n },\n {\n name: 'zinc',\n palette: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b',\n },\n },\n {\n name: 'neutral',\n palette: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#e5e5e5',\n 300: '#d4d4d4',\n 400: '#a3a3a3',\n 500: '#737373',\n 600: '#525252',\n 700: '#404040',\n 800: '#262626',\n 900: '#171717',\n 950: '#0a0a0a',\n },\n },\n {\n name: 'stone',\n palette: {\n 0: '#ffffff',\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d6d3d1',\n 400: '#a8a29e',\n 500: '#78716c',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n 950: '#0c0a09',\n },\n },\n {\n name: 'soho',\n palette: {\n 0: '#ffffff',\n 50: '#ececec',\n 100: '#dedfdf',\n 200: '#c4c4c6',\n 300: '#adaeb0',\n 400: '#97979b',\n 500: '#7f8084',\n 600: '#6a6b70',\n 700: '#55565b',\n 800: '#3f4046',\n 900: '#2c2c34',\n 950: '#16161d',\n },\n },\n {\n name: 'viva',\n palette: {\n 0: '#ffffff',\n 50: '#f3f3f3',\n 100: '#e7e7e8',\n 200: '#cfd0d0',\n 300: '#b7b8b9',\n 400: '#9fa1a1',\n 500: '#87898a',\n 600: '#6e7173',\n 700: '#565a5b',\n 800: '#3e4244',\n 900: '#262b2c',\n 950: '#0e1315',\n },\n },\n {\n name: 'ocean',\n palette: {\n 0: '#ffffff',\n 50: '#fbfcfc',\n 100: '#F7F9F8',\n 200: '#EFF3F2',\n 300: '#DADEDD',\n 400: '#B1B7B6',\n 500: '#828787',\n 600: '#5F7274',\n 700: '#415B61',\n 800: '#29444E',\n 900: '#183240',\n 950: '#0c1920',\n },\n },\n ];\n\n selectedPrimaryColor = computed(() => this.store.primary());\n /** The colour in use: the chosen one, else the preset's own (Helix: indigo, the others: emerald). */\n activePrimaryColor = computed(\n () => this.store.primary() ?? (this.store.preset() === 'Helix' ? 'indigo' : 'emerald'),\n );\n selectedSurfaceColor = computed(() => this.store.surface());\n selectedPreset = computed(() => this.store.preset());\n menuMode = computed(() => this.store.menuMode());\n\n primaryColors = computed<SurfacesType[]>(() => {\n const presetPalette = presets[this.store.preset() as KeyOfType<typeof presets>].primitive;\n const colors = [\n 'emerald',\n 'green',\n 'lime',\n 'orange',\n 'amber',\n 'yellow',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose',\n ];\n const palettes: SurfacesType[] = [{ name: 'noir', palette: {} }];\n colors.forEach((color) => {\n palettes.push({\n name: color,\n palette: presetPalette?.[\n color as KeyOfType<typeof presetPalette>\n ] as SurfacesType['palette'],\n });\n });\n return palettes;\n });\n\n ngOnInit() {\n if (isPlatformBrowser(this.platformId)) {\n this.onPresetChange(this.store.preset());\n }\n }\n\n getPresetExt() {\n // No primary chosen: the preset's own (Helix: indigo), nothing to extend.\n if (this.selectedPrimaryColor() === null) return {};\n const color: SurfacesType =\n this.primaryColors().find((c) => c.name === this.selectedPrimaryColor()) || {};\n const preset = this.store.preset();\n\n if (color.name === 'noir') {\n return {\n semantic: {\n primary: {\n 50: '{surface.50}',\n 100: '{surface.100}',\n 200: '{surface.200}',\n 300: '{surface.300}',\n 400: '{surface.400}',\n 500: '{surface.500}',\n 600: '{surface.600}',\n 700: '{surface.700}',\n 800: '{surface.800}',\n 900: '{surface.900}',\n 950: '{surface.950}',\n },\n colorScheme: {\n light: {\n primary: {\n color: '{primary.950}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.800}',\n activeColor: '{primary.700}',\n },\n highlight: {\n background: '{primary.950}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff',\n },\n },\n dark: {\n primary: {\n color: '{primary.50}',\n contrastColor: '{primary.950}',\n hoverColor: '{primary.200}',\n activeColor: '{primary.300}',\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.300}',\n color: '{primary.950}',\n focusColor: '{primary.950}',\n },\n },\n },\n },\n };\n } else if (preset === 'Helix') {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.600}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.700}',\n activeColor: '{primary.800}',\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.100}',\n color: '{primary.700}',\n focusColor: '{primary.800}',\n },\n },\n dark: {\n primary: {\n color: '{primary.400}',\n contrastColor: '{surface.950}',\n hoverColor: '{primary.300}',\n activeColor: '{primary.200}',\n },\n highlight: {\n background: 'color-mix(in srgb, {primary.400}, transparent 84%)',\n focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)',\n color: 'rgba(255,255,255,.87)',\n focusColor: 'rgba(255,255,255,.87)',\n },\n },\n },\n },\n };\n } else if (preset === 'Nora') {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.600}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.700}',\n activeColor: '{primary.800}',\n },\n highlight: {\n background: '{primary.600}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff',\n },\n },\n dark: {\n primary: {\n color: '{primary.500}',\n contrastColor: '{surface.900}',\n hoverColor: '{primary.400}',\n activeColor: '{primary.300}',\n },\n highlight: {\n background: '{primary.500}',\n focusBackground: '{primary.400}',\n color: '{surface.900}',\n focusColor: '{surface.900}',\n },\n },\n },\n },\n };\n } else {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.500}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.600}',\n activeColor: '{primary.700}',\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.100}',\n color: '{primary.700}',\n focusColor: '{primary.800}',\n },\n },\n dark: {\n primary: {\n color: '{primary.400}',\n contrastColor: '{surface.900}',\n hoverColor: '{primary.300}',\n activeColor: '{primary.200}',\n },\n highlight: {\n background: 'color-mix(in srgb, {primary.400}, transparent 84%)',\n focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)',\n color: 'rgba(255,255,255,.87)',\n focusColor: 'rgba(255,255,255,.87)',\n },\n },\n },\n },\n };\n }\n }\n\n updateColors(event: Event, type: string, color: SurfacesType) {\n if (type === 'primary') {\n this.store.setPrimary(color.name!);\n } else if (type === 'surface') {\n this.store.setSurface(color.name!);\n }\n this.applyTheme(type, color);\n event.stopPropagation();\n }\n\n applyTheme(type: string, color: SurfacesType) {\n if (type === 'primary') {\n updatePreset(this.getPresetExt());\n } else if (type === 'surface') {\n updateSurfacePalette(color.palette);\n }\n }\n\n onPresetChange(event: string) {\n this.store.setPreset(event);\n const preset = presets[event as KeyOfType<typeof presets>];\n const surfacePalette = this.surfaces.find(\n (s) => s.name === this.selectedSurfaceColor(),\n )?.palette;\n $t()\n .preset(preset)\n .preset(this.getPresetExt())\n .surfacePalette(surfacePalette)\n .use({ useDefaultOptions: true });\n }\n\n onMenuModeChange(event: string) {\n this.store.setMenuMode(event as any);\n }\n}\n","<div class=\"flex flex-col gap-4\">\n <div>\n <span class=\"text-sm text-muted-color font-semibold\">Primary</span>\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\n @for (primaryColor of primaryColors(); track primaryColor.name) {\n <button\n type=\"button\"\n [title]=\"primaryColor.name\"\n (click)=\"updateColors($event, 'primary', primaryColor)\"\n [ngClass]=\"{ 'outline outline-primary': primaryColor.name === activePrimaryColor() }\"\n class=\"cursor-pointer w-5 h-5 rounded-full flex shrink-0 items-center justify-center outline-offset-1 shadow\"\n [style]=\"{\n 'background-color':\n primaryColor?.name === 'noir' ? 'var(--text-color)' : primaryColor?.palette?.['500'],\n }\"\n ></button>\n }\n </div>\n </div>\n <div>\n <span class=\"text-sm text-muted-color font-semibold\">Surface</span>\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\n @for (surface of surfaces; track surface.name) {\n <button\n type=\"button\"\n [title]=\"surface.name\"\n (click)=\"updateColors($event, 'surface', surface)\"\n class=\"cursor-pointer w-5 h-5 rounded-full flex shrink-0 items-center justify-center p-0 outline-offset-1\"\n [ngClass]=\"{\n 'outline outline-primary': selectedSurfaceColor()\n ? selectedSurfaceColor() === surface.name\n : store.darkTheme()\n ? surface.name === 'zinc'\n : surface.name === 'slate',\n }\"\n [style]=\"{ 'background-color': surface?.palette?.['500'] }\"\n ></button>\n }\n </div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <span class=\"text-sm text-muted-color font-semibold\">Presets</span>\n <h-selectbutton\n [options]=\"presetOptions\"\n [ngModel]=\"selectedPreset()\"\n (ngModelChange)=\"onPresetChange($event)\"\n [allowEmpty]=\"false\"\n size=\"small\"\n />\n </div>\n @if (showMenuModeButton()) {\n <div class=\"flex flex-col gap-2\">\n <span class=\"text-sm text-muted-color font-semibold\">Menu Mode</span>\n <h-selectbutton\n [ngModel]=\"menuMode()\"\n (ngModelChange)=\"onMenuModeChange($event)\"\n [options]=\"menuModeOptions\"\n [allowEmpty]=\"false\"\n size=\"small\"\n />\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { StyleClassModule } from '@gravionlabs/helix-core/styleclass';\nimport { HelixConfigurator } from '../../configurator/configurator';\n\n@Component({\n selector: 'helix-configurator-action',\n standalone: true,\n imports: [StyleClassModule, HelixConfigurator],\n template: `\n <div\n class=\"relative\"\n style=\"display: inline-flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem;\"\n >\n <button\n class=\"layout-topbar-action layout-topbar-action-highlight\"\n hStyleClass=\"@next\"\n enterFromClass=\"hidden\"\n enterActiveClass=\"animate-scalein\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"animate-fadeout\"\n [hideOnOutsideClick]=\"true\"\n >\n <i class=\"pi pi-palette\" style=\"font-size: 1.4rem;\"></i>\n </button>\n <helix-configurator />\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.Eager,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n cursor: pointer;\n transition: background-color var(--element-transition-duration);\n }\n :host(:hover) {\n background-color: var(--surface-hover);\n }\n .relative {\n cursor: pointer;\n }\n button {\n cursor: pointer;\n }\n button i {\n cursor: inherit;\n }\n `,\n ],\n})\nexport class HelixConfiguratorAction {}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { LayoutStore } from '../../../store/layout.store';\n\n@Component({\n selector: 'helix-dark-mode-action',\n standalone: true,\n imports: [CommonModule],\n template: `\n <button type=\"button\" class=\"layout-topbar-action\" (click)=\"store.toggleDarkMode()\">\n <i\n [ngClass]=\"{\n pi: true,\n 'pi-moon': store.isDarkTheme(),\n 'pi-sun': !store.isDarkTheme(),\n }\"\n style=\"font-size: 1.4rem;\"\n ></i>\n </button>\n `,\n host: {\n style:\n 'display: inline-flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem; border-radius: 50%; cursor: pointer; transition: background-color var(--element-transition-duration);',\n },\n changeDetection: ChangeDetectionStrategy.Eager,\n styles: [\n `\n :host(:hover) {\n background-color: var(--surface-hover);\n }\n button {\n cursor: pointer;\n }\n button i {\n cursor: inherit;\n }\n `,\n ],\n})\nexport class HelixDarkModeAction {\n protected store = inject(LayoutStore);\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n type OnDestroy,\n type OnInit,\n signal,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport type { MenuItem } from '@gravionlabs/helix-core/api';\nimport { Breadcrumb } from '@gravionlabs/helix-core/breadcrumb';\nimport { StyleClassModule } from '@gravionlabs/helix-core/styleclass';\nimport { filter, Subject, takeUntil } from 'rxjs';\nimport { helixBreadcrumbsFromRoutes } from '../../breadcrumb-utils';\nimport { LayoutStore } from '../../store/layout.store';\nimport { HelixAlertAction } from './actions/alert-action';\nimport { HelixConfiguratorAction } from './actions/configurator-action';\nimport { HelixDarkModeAction } from './actions/dark-mode-action';\nimport type { HelixTopbarAction, HelixTopbarItem } from './topbar.model';\n\nexport type { HelixTopbarAction } from './topbar.model';\n\nconst DEFAULT_ACTIONS: HelixTopbarAction[] = [\n { icon: 'pi pi-calendar', label: 'Calendar' },\n { icon: 'pi pi-inbox', label: 'Messages' },\n { icon: 'pi pi-user', label: 'Profile' },\n];\n\nconst DEFAULT_ITEMS: HelixTopbarItem[] = [\n { type: 'darkmode' },\n { type: 'configurator' },\n { type: 'mobile' },\n];\n\n@Component({\n selector: 'helix-topbar',\n standalone: true,\n imports: [\n RouterModule,\n CommonModule,\n StyleClassModule,\n HelixAlertAction,\n HelixConfiguratorAction,\n HelixDarkModeAction,\n Breadcrumb,\n ],\n templateUrl: './topbar.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './topbar.scss',\n})\nexport class HelixTopbar implements OnInit, OnDestroy {\n appTitle = input('Helix');\n topbarActions = input<HelixTopbarAction[]>(DEFAULT_ACTIONS);\n breadcrumbs = input<MenuItem[] | undefined>(undefined);\n items = input<HelixTopbarItem[]>(DEFAULT_ITEMS);\n\n store = inject(LayoutStore);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private destroy$ = new Subject<void>();\n private routeChange = signal(0);\n\n ngOnInit() {\n this.router.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntil(this.destroy$),\n )\n .subscribe(() => this.routeChange.update((n) => n + 1));\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected effectiveBreadcrumbs = computed<MenuItem[]>(() => {\n const input = this.breadcrumbs();\n if (input !== undefined) return input;\n this.routeChange();\n return helixBreadcrumbsFromRoutes(this.route);\n });\n\n protected showBreadcrumbs = computed(() => this.effectiveBreadcrumbs().length > 1);\n}\n","<div class=\"layout-topbar\">\n <div class=\"layout-topbar-start\">\n <button\n type=\"button\"\n class=\"layout-menu-button layout-topbar-action\"\n [class.layout-menu-button-mobile-only]=\"store.isStatic()\"\n aria-label=\"Toggle navigation\"\n (click)=\"store.onMenuToggle()\"\n >\n <i class=\"pi pi-bars\"></i>\n </button>\n @if (showBreadcrumbs()) {\n <h-breadcrumb [model]=\"effectiveBreadcrumbs()\" [home]=\"{ icon: 'pi pi-home', routerLink: '/' }\" />\n }\n </div>\n\n <div class=\"layout-topbar-end\">\n <div class=\"layout-config-menu\">\n @for (item of items(); track $index) {\n @switch (item.type) {\n @case ('darkmode') {\n <helix-dark-mode-action />\n }\n @case ('configurator') {\n <helix-configurator-action />\n }\n @case ('alert') {\n <helix-alert-action [count]=\"item.badgeCount ?? 0\" [alerts]=\"item.alerts\" />\n }\n @case ('action') {\n <button type=\"button\" class=\"layout-topbar-action\" (click)=\"item.command?.()\">\n <i [class]=\"item.icon ?? ''\"></i>\n </button>\n }\n }\n }\n </div>\n\n <button\n class=\"layout-topbar-menu-button layout-topbar-action\"\n hStyleClass=\"@next\"\n enterFromClass=\"hidden\"\n enterActiveClass=\"animate-scalein\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"animate-fadeout\"\n [hideOnOutsideClick]=\"true\"\n >\n <i class=\"pi pi-ellipsis-v\"></i>\n </button>\n\n <div class=\"layout-topbar-menu hidden lg:block\">\n <div class=\"layout-topbar-menu-content\">\n @for (action of topbarActions(); track action.icon) {\n <button type=\"button\" class=\"layout-topbar-action\" (click)=\"action.command?.()\">\n <i [class]=\"action.icon\"></i>\n <span>{{ action.label }}</span>\n </button>\n }\n <ng-content select=\"[helixTopbarEnd]\" />\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport type { MenuItem } from '@gravionlabs/helix-core/api';\nimport type { Environment } from '../../../ui/badge/environment-badge';\nimport type { HelixRouteMenuItem } from '../../route-menu.model';\nimport { LayoutStore } from '../../store/layout.store';\nimport { HelixNavRail } from '../nav-rail/nav-rail';\nimport type { HelixNavGroup } from '../nav-rail/nav-rail.model';\nimport { type HelixNavStyle, helixNavGroupsFromMenu } from '../nav-rail/nav-rail.model';\nimport { HelixStatusBar } from '../status-bar/status-bar';\nimport type { HelixStatusBarTone, HelixStatusBarVersion } from '../status-bar/status-bar.model';\nimport { HelixTopbar } from '../topbar/topbar';\nimport type { HelixTopbarAction, HelixTopbarItem } from '../topbar/topbar.model';\n\n@Component({\n selector: 'helix-app-layout',\n standalone: true,\n imports: [CommonModule, HelixTopbar, HelixNavRail, RouterModule, HelixStatusBar],\n templateUrl: './app-layout.html',\n styleUrl: './app-layout.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n encapsulation: ViewEncapsulation.None,\n})\nexport class HelixAppLayout {\n appTitle = input('Helix');\n environment = input<Environment | undefined>();\n\n /** Topbar items. When provided, overrides the default darkmode / configurator / mobile items. */\n topbarItems = input<HelixTopbarItem[] | undefined>();\n\n /** Topbar actions rendered in the right-side dropdown. */\n topbarActions = input<HelixTopbarAction[] | undefined>();\n\n /**\n * Nav-rail brand icon: inline SVG (`<svg>…</svg>`) or a URL to an SVG file.\n * Falls back to the default hardcoded icon when not provided.\n */\n brandIcon = input<string>();\n\n /** Status bar inputs */\n statusBarEnvironment = input<string | undefined>();\n statusBarNote = input<string | undefined>();\n statusBarTone = input<HelixStatusBarTone>('neutral');\n statusBarVersions = input<HelixStatusBarVersion[]>([]);\n statusBarBrand = input('');\n\n /**\n * Menu model. When provided, overrides route data.\n * Also auto-populated from ActivatedRoute.data['menu'] when used as a route component.\n */\n menu = input<HelixRouteMenuItem[]>([]);\n\n /**\n * Nav rail style. `'sections'` (default) renders top-level items with children as\n * always-open section headings; `'tree'` keeps them as expandable folders.\n */\n navStyle = input<HelixNavStyle>('sections');\n\n /** Explicit nav groups. When provided, they win over the mapping of `menu`. */\n navGroups = input<HelixNavGroup[] | undefined>();\n\n private static readonly DEFAULT_TOP_ACTIONS: HelixTopbarAction[] = [\n { icon: 'pi pi-calendar', label: 'Calendar' },\n { icon: 'pi pi-inbox', label: 'Messages' },\n { icon: 'pi pi-user', label: 'Profile' },\n ];\n\n store = inject(LayoutStore);\n private activatedRoute = inject(ActivatedRoute);\n\n /** Resolved menu: input takes priority, then route data, then empty. */\n protected effectiveMenu = computed<MenuItem[]>(() => {\n const inputMenu = this.menu();\n if (inputMenu.length > 0) return inputMenu;\n return (this.activatedRoute.snapshot.data['menu'] as HelixRouteMenuItem[] | undefined) ?? [];\n });\n\n protected effectiveNavGroups = computed(\n () =>\n this.navGroups() ??\n helixNavGroupsFromMenu(this.effectiveMenu() as HelixRouteMenuItem[], this.navStyle()),\n );\n\n protected effectiveEnvironment = computed<Environment | undefined>(() => {\n const input = this.environment();\n if (input !== undefined) return input;\n return this.activatedRoute.snapshot.data['environment'] as Environment | undefined;\n });\n\n protected effectiveItems = computed<HelixTopbarItem[]>(() => {\n const custom = this.topbarItems();\n if (custom !== undefined) return custom;\n return [{ type: 'darkmode' }, { type: 'configurator' }, { type: 'mobile' }];\n });\n\n protected effectiveTopbarActions = computed(\n () => this.topbarActions() ?? HelixAppLayout.DEFAULT_TOP_ACTIONS,\n );\n\n constructor() {\n effect(() => {\n if (this.store.mobileMenuActive()) {\n document.body.classList.add('blocked-scroll');\n } else {\n document.body.classList.remove('blocked-scroll');\n }\n });\n }\n\n containerClass = computed(() => ({\n 'layout-overlay': this.store.menuMode() === 'overlay',\n 'layout-static': this.store.menuMode() === 'static',\n 'layout-static-inactive':\n this.store.staticMenuDesktopInactive() && this.store.menuMode() === 'static',\n 'layout-overlay-active': this.store.overlayMenuActive(),\n 'layout-mobile-active': this.store.mobileMenuActive(),\n 'layout-sidebar-collapsed': this.store.isCollapsed(),\n }));\n}\n","<div class=\"layout-wrapper\" [ngClass]=\"containerClass()\">\n <helix-topbar\n [items]=\"effectiveItems()\"\n [topbarActions]=\"effectiveTopbarActions()\"\n ></helix-topbar>\n <helix-nav-rail\n [model]=\"effectiveNavGroups()\"\n [appTitle]=\"appTitle()\"\n [brandIcon]=\"brandIcon()\"\n ></helix-nav-rail>\n <div class=\"layout-main-container\">\n <div class=\"layout-main\">\n <router-outlet></router-outlet>\n </div>\n </div>\n <helix-status-bar\n [brand]=\"statusBarBrand()\"\n [environment]=\"statusBarEnvironment()\"\n [note]=\"statusBarNote()\"\n [tone]=\"statusBarTone()\"\n [versions]=\"statusBarVersions()\"\n />\n <div class=\"layout-mask\"></div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { ButtonModule } from '@gravionlabs/helix-core/button';\nimport { StyleClassModule } from '@gravionlabs/helix-core/styleclass';\nimport { LayoutStore } from '../../store';\nimport { HelixConfigurator } from '../configurator/configurator';\n\n@Component({\n selector: 'helix-floating-configurator',\n standalone: true,\n imports: [CommonModule, ButtonModule, StyleClassModule, HelixConfigurator],\n templateUrl: './floating-configurator.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './floating-configurator.scss',\n})\nexport class HelixFloatingConfigurator {\n store = inject(LayoutStore);\n\n float = input<boolean>(true);\n\n isDarkTheme = computed(() => this.store.darkTheme());\n\n toggleDarkMode() {\n this.store.toggleDarkMode();\n }\n}\n","<div class=\"flex gap-4 top-8 right-8\" [ngClass]=\"{ fixed: float() }\">\n <h-button\n type=\"button\"\n (onClick)=\"toggleDarkMode()\"\n [rounded]=\"true\"\n [icon]=\"isDarkTheme() ? 'pi pi-moon' : 'pi pi-sun'\"\n severity=\"secondary\"\n />\n <div class=\"relative\">\n <h-button\n icon=\"pi pi-palette\"\n hStyleClass=\"@next\"\n enterFromClass=\"hidden\"\n enterActiveClass=\"animate-scalein\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"animate-fadeout\"\n [hideOnOutsideClick]=\"true\"\n type=\"button\"\n rounded\n />\n <helix-configurator />\n </div>\n</div>\n","import { SlicePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport type { HelixFooterColumn } from './footer.model';\n\nexport type { HelixFooterLink } from './footer.model';\nexport type { HelixFooterColumn };\n\n@Component({\n standalone: true,\n selector: 'helix-footer',\n imports: [RouterModule, SlicePipe],\n templateUrl: './footer.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './footer.scss',\n})\nexport class HelixFooter {\n brandName = input('Helix');\n brandUrl = input('https://primeng.org');\n columns = input<HelixFooterColumn[]>([]);\n}\n","<div class=\"layout-footer\">\n <ng-content select=\"[helixFooterStart]\" />\n {{ brandName() }} by\n <a\n [href]=\"brandUrl()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"text-primary font-bold hover:underline\"\n >{{ brandUrl() | slice: 8 }}</a\n >\n\n @if (columns().length > 0) {\n <div class=\"layout-footer-columns\">\n @for (column of columns(); track column.title) {\n <div class=\"layout-footer-column\">\n <span class=\"font-semibold\">{{ column.title }}</span>\n <ul>\n @for (link of column.links; track link.label) {\n <li>\n @if (link.url) {\n <a [href]=\"link.url\" target=\"_blank\" rel=\"noopener noreferrer\">{{\n link.label\n }}</a>\n } @else if (link.route) {\n <a [routerLink]=\"link.route\">{{ link.label }}</a>\n } @else {\n {{ link.label }}\n }\n </li>\n }\n </ul>\n </div>\n }\n </div>\n }\n\n <ng-content />\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { StyleClassModule } from '@gravionlabs/helix-core/styleclass';\n\n@Component({\n selector: 'helix-mobile-menu-action',\n standalone: true,\n imports: [StyleClassModule],\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n <button\n class=\"layout-topbar-menu-button layout-topbar-action\"\n hStyleClass=\"@next\"\n enterFromClass=\"hidden\"\n enterActiveClass=\"animate-scalein\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"animate-fadeout\"\n [hideOnOutsideClick]=\"true\"\n >\n <i class=\"pi pi-ellipsis-v\"></i>\n </button>\n `,\n})\nexport class HelixMobileMenuAction {}\n","import type { Type } from '@angular/core';\nimport type { ActivatedRouteSnapshot, CanActivateFn, Route, Routes } from '@angular/router';\nimport type { MenuItem } from '@gravionlabs/helix-core/api';\n\n/**\n * Extends Helix's MenuItem with Angular routing properties.\n * Allows a single array to define both the sidebar menu and the router configuration.\n */\nexport interface HelixRouteMenuItem extends MenuItem {\n /** Angular route path segment (relative to the parent route). */\n path?: string;\n /** Breadcrumb label or resolver for auto-generated breadcrumbs. */\n breadcrumb?: string | ((route: ActivatedRouteSnapshot) => string);\n /** Component to render for this route. */\n component?: Type<unknown>;\n /** Lazy-loaded children module or routes. */\n loadChildren?: Route['loadChildren'];\n /** Route guards. */\n canActivate?: CanActivateFn[];\n /** Additional route data (merged with the auto-injected menu data). */\n data?: Record<string, unknown>;\n /** Typed override of MenuItem.items — supports nested HelixRouteMenuItem entries. */\n items?: HelixRouteMenuItem[];\n}\n\n/**\n * Recursively copies a HelixRouteMenuItem tree and auto-populates `routerLink`\n * from `path` for any item that does not already have a `routerLink`.\n *\n * @param items The source menu items.\n * @param basePath Absolute base path prefix (e.g. `'/uikit'`).\n *\n * @example\n * // uikit-menu-items.ts defines: { path: 'formlayout', label: '...', icon: '...' }\n * helixMenuLinksFrom(UIKIT_ITEMS, '/uikit')\n * // → { path: 'formlayout', label: '...', icon: '...', routerLink: ['/uikit/formlayout'] }\n */\nexport function helixMenuLinksFrom(\n items: HelixRouteMenuItem[],\n basePath: string,\n): HelixRouteMenuItem[] {\n return items.map((item) => {\n const resolved: HelixRouteMenuItem = {\n ...item,\n items: item.items ? helixMenuLinksFrom(item.items, basePath) : undefined,\n };\n\n if (resolved.breadcrumb !== undefined) {\n resolved.data = { ...resolved.data, breadcrumb: resolved.breadcrumb };\n }\n\n if (!resolved.routerLink && resolved.path !== undefined) {\n const fullPath = `${basePath}/${resolved.path}`.replace(/\\/+/g, '/');\n resolved.routerLink = [fullPath];\n }\n\n return resolved;\n });\n}\n\n/**\n * Converts a HelixRouteMenuItem tree into Angular Routes.\n *\n * - Items with `path` + `component` or `loadChildren` generate a route entry.\n * - Items without `path` (visual-only section headers) are skipped for routing\n * but their `items` children are still recursed.\n * - Items with only `routerLink` (e.g. links into lazy-loaded sub-modules) are\n * skipped — they do not need a route entry here.\n */\nexport function helixRoutesFrom(items: HelixRouteMenuItem[]): Routes {\n const routes: Routes = [];\n\n for (const item of items) {\n if (item.path === undefined) {\n // Visual-only item (section header etc.) — recurse into children\n if (item.items?.length) {\n routes.push(...helixRoutesFrom(item.items));\n }\n continue;\n }\n\n const hasRoute = item.component != null || item.loadChildren != null;\n if (!hasRoute) {\n // Has a path but no component/loadChildren — skip as route, but recurse\n if (item.items?.length) {\n routes.push(...helixRoutesFrom(item.items));\n }\n continue;\n }\n\n const routeData: Record<string, unknown> = { ...(item.data as Record<string, unknown>) };\n if (item.breadcrumb !== undefined) {\n routeData['breadcrumb'] = item.breadcrumb;\n }\n\n const route: Route = { path: item.path };\n\n if (item.component) route.component = item.component;\n if (item.loadChildren) route.loadChildren = item.loadChildren;\n if (item.canActivate) route.canActivate = item.canActivate;\n if (Object.keys(routeData).length > 0) route.data = routeData;\n\n // Items nested under a routable item become child routes (not recursed flat)\n if (item.items?.length) {\n const childRoutes = helixRoutesFrom(item.items);\n if (childRoutes.length) {\n route.children = childRoutes;\n }\n }\n\n routes.push(route);\n }\n\n return routes;\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ButtonModule } from '@gravionlabs/helix-core/button';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { HelixFloatingConfigurator } from '../../../layout/components/floating-configurator/floating-configurator';\n\n@Component({\n selector: 'helix-access',\n standalone: true,\n imports: [ButtonModule, RouterModule, RippleModule, HelixFloatingConfigurator],\n templateUrl: './access.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './access.scss',\n})\nexport class HelixAccess {\n title = input('Access Denied');\n message = input('You do not have the necessary permisions. Please contact admins.');\n buttonLabel = input('Go to Dashboard');\n buttonRoute = input('/');\n}\n","<helix-floating-configurator />\n<div\n class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-screen overflow-hidden\"\n>\n <div class=\"flex flex-col items-center justify-center\">\n <div\n style=\"\n border-radius: 56px;\n padding: 0.3rem;\n background: linear-gradient(180deg, rgba(247, 149, 48, 0.4) 10%, rgba(247, 149, 48, 0) 30%);\n \"\n >\n <div\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center\"\n style=\"border-radius: 53px\"\n >\n <div class=\"gap-4 flex flex-col items-center\">\n <div\n class=\"flex justify-center items-center border-2 border-orange-500 rounded-full\"\n style=\"width: 3.2rem; height: 3.2rem\"\n >\n <i class=\"text-orange-500 pi pi-fw pi-lock text-2xl!\"></i>\n </div>\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-4xl lg:text-5xl mb-2\">\n {{ title() }}\n </h1>\n <span class=\"text-muted-color mb-8\">{{ message() }}</span>\n <img\n src=\"https://primefaces.org/cdn/templates/sakai/auth/asset-access.svg\"\n alt=\"Access denied\"\n class=\"mb-8\"\n width=\"80%\"\n />\n <div class=\"col-span-12 mt-8 text-center\">\n <h-button [label]=\"buttonLabel()\" [routerLink]=\"buttonRoute()\" severity=\"warn\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ButtonModule } from '@gravionlabs/helix-core/button';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { HelixFloatingConfigurator } from '../../../layout/components/floating-configurator/floating-configurator';\n\n@Component({\n selector: 'helix-error',\n standalone: true,\n imports: [ButtonModule, RippleModule, RouterModule, HelixFloatingConfigurator],\n templateUrl: './error.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './error.scss',\n})\nexport class HelixError {\n title = input('Error Occured');\n message = input('Requested resource is not available.');\n buttonLabel = input('Go to Dashboard');\n buttonRoute = input('/');\n}\n","<helix-floating-configurator />\n<div\n class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-screen overflow-hidden\"\n>\n <div class=\"flex flex-col items-center justify-center\">\n <div\n style=\"\n border-radius: 56px;\n padding: 0.3rem;\n background: linear-gradient(180deg, rgba(233, 30, 99, 0.4) 10%, rgba(33, 150, 243, 0) 30%);\n \"\n >\n <div\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center\"\n style=\"border-radius: 53px\"\n >\n <div class=\"gap-4 flex flex-col items-center\">\n <div\n class=\"flex justify-center items-center border-2 border-pink-500 rounded-full\"\n style=\"height: 3.2rem; width: 3.2rem\"\n >\n <i class=\"pi pi-fw pi-exclamation-circle text-2xl! text-pink-500\"></i>\n </div>\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-5xl mb-2\">\n {{ title() }}\n </h1>\n <span class=\"text-muted-color mb-8\">{{ message() }}</span>\n <img\n src=\"https://primefaces.org/cdn/templates/sakai/auth/asset-error.svg\"\n alt=\"Error\"\n class=\"mb-8\"\n width=\"80%\"\n />\n <div class=\"col-span-12 mt-8 text-center\">\n <h-button [label]=\"buttonLabel()\" [routerLink]=\"buttonRoute()\" severity=\"danger\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { ButtonModule } from '@gravionlabs/helix-core/button';\nimport { CheckboxModule } from '@gravionlabs/helix-core/checkbox';\nimport { InputTextModule } from '@gravionlabs/helix-core/inputtext';\nimport { PasswordModule } from '@gravionlabs/helix-core/password';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { HelixFloatingConfigurator } from '../../../layout/components/floating-configurator/floating-configurator';\n\nexport interface HelixLoginCredentials {\n email: string;\n password: string;\n rememberMe: boolean;\n}\n\n@Component({\n selector: 'helix-login',\n standalone: true,\n imports: [\n ButtonModule,\n CheckboxModule,\n InputTextModule,\n PasswordModule,\n FormsModule,\n RouterModule,\n RippleModule,\n HelixFloatingConfigurator,\n ],\n templateUrl: './login.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './login.scss',\n})\nexport class HelixLogin {\n title = input('Welcome!');\n subtitle = input('Sign in to continue');\n submitLabel = input('Sign In');\n forgotPasswordLabel = input('Forgot password?');\n\n login = output<HelixLoginCredentials>();\n forgotPassword = output<void>();\n\n email = '';\n password = '';\n checked = false;\n\n onSubmit(): void {\n this.login.emit({ email: this.email, password: this.password, rememberMe: this.checked });\n }\n\n onForgotPassword(): void {\n this.forgotPassword.emit();\n }\n}\n","<helix-floating-configurator />\n<div\n class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-screen overflow-hidden\"\n>\n <div class=\"flex flex-col items-center justify-center\">\n <div\n style=\"\n border-radius: 56px;\n padding: 0.3rem;\n background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%);\n \"\n >\n <div\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20\"\n style=\"border-radius: 53px\"\n >\n <div class=\"text-center mb-8\">\n <svg\n viewBox=\"0 0 54 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"mb-8 w-16 shrink-0 mx-auto\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M17.1637 19.2467C17.1566 19.4033 17.1529 19.561 17.1529 19.7194C17.1529 25.3503 21.7203 29.915 27.3546 29.915C32.9887 29.915 37.5561 25.3503 37.5561 19.7194C37.5561 19.5572 37.5524 19.3959 37.5449 19.2355C38.5617 19.0801 39.5759 18.9013 40.5867 18.6994L40.6926 18.6782C40.7191 19.0218 40.7326 19.369 40.7326 19.7194C40.7326 27.1036 34.743 33.0896 27.3546 33.0896C19.966 33.0896 13.9765 27.1036 13.9765 19.7194C13.9765 19.374 13.9896 19.0316 14.0154 18.6927L14.0486 18.6994C15.0837 18.9062 16.1223 19.0886 17.1637 19.2467ZM33.3284 11.4538C31.6493 10.2396 29.5855 9.52381 27.3546 9.52381C25.1195 9.52381 23.0524 10.2421 21.3717 11.4603C20.0078 11.3232 18.6475 11.1387 17.2933 10.907C19.7453 8.11308 23.3438 6.34921 27.3546 6.34921C31.36 6.34921 34.9543 8.10844 37.4061 10.896C36.0521 11.1292 34.692 11.3152 33.3284 11.4538ZM43.826 18.0518C43.881 18.6003 43.9091 19.1566 43.9091 19.7194C43.9091 28.8568 36.4973 36.2642 27.3546 36.2642C18.2117 36.2642 10.8 28.8568 10.8 19.7194C10.8 19.1615 10.8276 18.61 10.8816 18.0663L7.75383 17.4411C7.66775 18.1886 7.62354 18.9488 7.62354 19.7194C7.62354 30.6102 16.4574 39.4388 27.3546 39.4388C38.2517 39.4388 47.0855 30.6102 47.0855 19.7194C47.0855 18.9439 47.0407 18.1789 46.9536 17.4267L43.826 18.0518ZM44.2613 9.54743L40.9084 10.2176C37.9134 5.95821 32.9593 3.1746 27.3546 3.1746C21.7442 3.1746 16.7856 5.96385 13.7915 10.2305L10.4399 9.56057C13.892 3.83178 20.1756 0 27.3546 0C34.5281 0 40.8075 3.82591 44.2613 9.54743Z\"\n fill=\"var(--primary-color)\"\n />\n <mask\n id=\"mask0_1413_1551\"\n style=\"mask-type: alpha\"\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"8\"\n width=\"54\"\n height=\"11\"\n >\n <path\n d=\"M27 18.3652C10.5114 19.1944 0 8.88892 0 8.88892C0 8.88892 16.5176 14.5866 27 14.5866C37.4824 14.5866 54 8.88892 54 8.88892C54 8.88892 43.4886 17.5361 27 18.3652Z\"\n fill=\"var(--primary-color)\"\n />\n </mask>\n <g mask=\"url(#mask0_1413_1551)\">\n <path\n d=\"M-4.673e-05 8.88887L3.73084 -1.91434L-8.00806 17.0473L-4.673e-05 8.88887ZM27 18.3652L26.4253 6.95109L27 18.3652ZM54 8.88887L61.2673 17.7127L50.2691 -1.91434L54 8.88887ZM-4.673e-05 8.88887C-8.00806 17.0473 -8.00469 17.0505 -8.00132 17.0538C-8.00018 17.055 -7.99675 17.0583 -7.9944 17.0607C-7.98963 17.0653 -7.98474 17.0701 -7.97966 17.075C-7.96949 17.0849 -7.95863 17.0955 -7.94707 17.1066C-7.92401 17.129 -7.89809 17.1539 -7.86944 17.1812C-7.8122 17.236 -7.74377 17.3005 -7.66436 17.3743C-7.50567 17.5218 -7.30269 17.7063 -7.05645 17.9221C-6.56467 18.3532 -5.89662 18.9125 -5.06089 19.5534C-3.39603 20.83 -1.02575 22.4605 1.98012 24.0457C7.97874 27.2091 16.7723 30.3226 27.5746 29.7793L26.4253 6.95109C20.7391 7.23699 16.0326 5.61231 12.6534 3.83024C10.9703 2.94267 9.68222 2.04866 8.86091 1.41888C8.45356 1.10653 8.17155 0.867278 8.0241 0.738027C7.95072 0.673671 7.91178 0.637576 7.90841 0.634492C7.90682 0.63298 7.91419 0.639805 7.93071 0.65557C7.93897 0.663455 7.94952 0.673589 7.96235 0.686039C7.96883 0.692262 7.97582 0.699075 7.98338 0.706471C7.98719 0.710167 7.99113 0.714014 7.99526 0.718014C7.99729 0.720008 8.00047 0.723119 8.00148 0.724116C8.00466 0.727265 8.00796 0.730446 -4.673e-05 8.88887ZM27.5746 29.7793C37.6904 29.2706 45.9416 26.3684 51.6602 23.6054C54.5296 22.2191 56.8064 20.8465 58.4186 19.7784C59.2265 19.2431 59.873 18.7805 60.3494 18.4257C60.5878 18.2482 60.7841 18.0971 60.9374 17.977C61.014 17.9169 61.0799 17.8645 61.1349 17.8203C61.1624 17.7981 61.1872 17.7781 61.2093 17.7602C61.2203 17.7512 61.2307 17.7427 61.2403 17.7348C61.2452 17.7308 61.2499 17.727 61.2544 17.7233C61.2566 17.7215 61.2598 17.7188 61.261 17.7179C61.2642 17.7153 61.2673 17.7127 54 8.88887C46.7326 0.0650536 46.7357 0.0625219 46.7387 0.0600241C46.7397 0.0592345 46.7427 0.0567658 46.7446 0.0551857C46.7485 0.0520238 46.7521 0.0489887 46.7557 0.0460799C46.7628 0.0402623 46.7694 0.0349487 46.7753 0.0301318C46.7871 0.0204986 46.7966 0.0128495 46.8037 0.00712562C46.818 -0.00431848 46.8228 -0.00808311 46.8184 -0.00463784C46.8096 0.00228345 46.764 0.0378652 46.6828 0.0983779C46.5199 0.219675 46.2165 0.439161 45.7812 0.727519C44.9072 1.30663 43.5257 2.14765 41.7061 3.02677C38.0469 4.79468 32.7981 6.63058 26.4253 6.95109L27.5746 29.7793ZM54 8.88887C50.2691 -1.91433 50.27 -1.91467 50.271 -1.91498C50.2712 -1.91506 50.272 -1.91535 50.2724 -1.9155C50.2733 -1.91581 50.274 -1.91602 50.2743 -1.91616C50.2752 -1.91643 50.275 -1.91636 50.2738 -1.91595C50.2714 -1.91515 50.2652 -1.91302 50.2552 -1.9096C50.2351 -1.90276 50.1999 -1.89078 50.1503 -1.874C50.0509 -1.84043 49.8938 -1.78773 49.6844 -1.71863C49.2652 -1.58031 48.6387 -1.377 47.8481 -1.13035C46.2609 -0.635237 44.0427 0.0249875 41.5325 0.6823C36.215 2.07471 30.6736 3.15796 27 3.15796V26.0151C33.8087 26.0151 41.7672 24.2495 47.3292 22.7931C50.2586 22.026 52.825 21.2618 54.6625 20.6886C55.5842 20.4011 56.33 20.1593 56.8551 19.986C57.1178 19.8993 57.3258 19.8296 57.4735 19.7797C57.5474 19.7548 57.6062 19.7348 57.6493 19.72C57.6709 19.7127 57.6885 19.7066 57.7021 19.7019C57.7089 19.6996 57.7147 19.6976 57.7195 19.696C57.7219 19.6952 57.7241 19.6944 57.726 19.6938C57.7269 19.6934 57.7281 19.693 57.7286 19.6929C57.7298 19.6924 57.7309 19.692 54 8.88887ZM27 3.15796C23.3263 3.15796 17.7849 2.07471 12.4674 0.6823C9.95717 0.0249875 7.73904 -0.635237 6.15184 -1.13035C5.36118 -1.377 4.73467 -1.58031 4.3155 -1.71863C4.10609 -1.78773 3.94899 -1.84043 3.84961 -1.874C3.79994 -1.89078 3.76474 -1.90276 3.74471 -1.9096C3.73469 -1.91302 3.72848 -1.91515 3.72613 -1.91595C3.72496 -1.91636 3.72476 -1.91643 3.72554 -1.91616C3.72593 -1.91602 3.72657 -1.91581 3.72745 -1.9155C3.72789 -1.91535 3.72874 -1.91506 3.72896 -1.91498C3.72987 -1.91467 3.73084 -1.91433 -4.673e-05 8.88887C-3.73093 19.692 -3.72983 19.6924 -3.72868 19.6929C-3.72821 19.693 -3.72698 19.6934 -3.72603 19.6938C-3.72415 19.6944 -3.72201 19.6952 -3.71961 19.696C-3.71482 19.6976 -3.70901 19.6996 -3.7022 19.7019C-3.68858 19.7066 -3.67095 19.7127 -3.6494 19.72C-3.60629 19.7348 -3.54745 19.7548 -3.47359 19.7797C-3.32589 19.8296 -3.11788 19.8993 -2.85516 19.986C-2.33008 20.1593 -1.58425 20.4011 -0.662589 20.6886C1.17485 21.2618 3.74125 22.026 6.67073 22.7931C12.2327 24.2495 20.1913 26.0151 27 26.0151V3.15796Z\"\n fill=\"var(--primary-color)\"\n />\n </g>\n </svg>\n <div class=\"text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4\">\n {{ title() }}\n </div>\n <span class=\"text-muted-color font-medium\">{{ subtitle() }}</span>\n </div>\n\n <div>\n <label\n for=\"email1\"\n class=\"block text-surface-900 dark:text-surface-0 text-xl font-medium mb-2\"\n >Email</label\n >\n <input\n hInputText\n id=\"email1\"\n type=\"text\"\n placeholder=\"Email address\"\n class=\"w-full md:w-120 mb-8\"\n [(ngModel)]=\"email\"\n />\n\n <label\n for=\"password1\"\n class=\"block text-surface-900 dark:text-surface-0 font-medium text-xl mb-2\"\n >Password</label\n >\n <h-password\n id=\"password1\"\n [(ngModel)]=\"password\"\n placeholder=\"Password\"\n [toggleMask]=\"true\"\n styleClass=\"mb-4\"\n [fluid]=\"true\"\n [feedback]=\"false\"\n ></h-password>\n\n <div class=\"flex items-center justify-between mt-2 mb-8 gap-8\">\n <div class=\"flex items-center\">\n <h-checkbox [(ngModel)]=\"checked\" id=\"rememberme1\" binary class=\"mr-2\"></h-checkbox>\n <label for=\"rememberme1\">Remember me</label>\n </div>\n <span\n class=\"font-medium no-underline ml-2 text-right cursor-pointer text-primary\"\n (click)=\"onForgotPassword()\"\n >{{ forgotPasswordLabel() }}</span\n >\n </div>\n <h-button [label]=\"submitLabel()\" styleClass=\"w-full\" (onClick)=\"onSubmit()\"></h-button>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import type { Routes } from '@angular/router';\nimport { HelixAccess } from './access/access';\nimport { HelixError } from './error/error';\nimport { HelixLogin } from './login/login';\n\nexport const authRoutes: Routes = [\n { path: 'access', component: HelixAccess },\n { path: 'error', component: HelixError },\n { path: 'login', component: HelixLogin },\n];\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'helix-empty',\n standalone: true,\n imports: [],\n templateUrl: './empty.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './empty.scss',\n})\nexport class HelixEmpty {\n title = input('Empty Page');\n description = input('Use this page to start from scratch and place your custom content.');\n}\n","<div class=\"card\">\n <div class=\"font-semibold text-xl mb-4\">{{ title() }}</div>\n <p>{{ description() }}</p>\n <ng-content />\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport type { HelixFeature, HelixTestimonial } from '../../landing.model';\n\nconst DEFAULT_FEATURES: HelixFeature[] = [\n {\n icon: 'pi pi-fw pi-users',\n iconBgClass: 'bg-yellow-200',\n iconColorClass: 'text-yellow-700',\n title: 'Easy to Use',\n description: 'Posuere morbi leo urna molestie.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(253,228,165,.2), rgba(187,199,205,.2)), linear-gradient(180deg, rgba(253,228,165,.2), rgba(187,199,205,.2));',\n },\n {\n icon: 'pi pi-fw pi-palette',\n iconBgClass: 'bg-cyan-200',\n iconColorClass: 'text-cyan-700',\n title: 'Fresh Design',\n description: 'Semper risus in hendrerit.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(145,226,237,.2), rgba(251,199,145,.2)), linear-gradient(180deg, rgba(253,228,165,.2), rgba(172,180,223,.2));',\n },\n {\n icon: 'pi pi-fw pi-map',\n iconBgClass: 'bg-indigo-200',\n iconColorClass: 'text-indigo-700',\n title: 'Well Documented',\n description: 'Non arcu risus quis varius quam quisque.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(145,226,237,.2), rgba(172,180,223,.2)), linear-gradient(180deg, rgba(172,180,223,.2), rgba(246,158,188,.2));',\n },\n {\n icon: 'pi pi-fw pi-id-card',\n iconBgClass: 'bg-slate-200',\n iconColorClass: 'text-slate-700',\n title: 'Compatibility',\n description: 'Leo in vitae turpis massa sed.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(187,199,205,.2), rgba(251,199,145,.2)), linear-gradient(180deg, rgba(187,199,205,.2), rgba(145,210,204,.2));',\n },\n {\n icon: 'pi pi-fw pi-star',\n iconBgClass: 'bg-orange-200',\n iconColorClass: 'text-orange-700',\n title: 'Fast Support',\n description: 'Orci nulla pellentesque dignissim enim.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(251,199,145,.2), rgba(253,228,165,.2)), linear-gradient(180deg, rgba(172,180,223,.2), rgba(246,158,188,.2));',\n },\n {\n icon: 'pi pi-fw pi-moon',\n iconBgClass: 'bg-pink-200',\n iconColorClass: 'text-pink-700',\n title: 'Powered by Angular',\n description: 'Curabitur gravida arcu ac tortor.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(246,158,188,.2), rgba(212,162,221,.2)), linear-gradient(180deg, rgba(253,228,165,.2), rgba(172,180,223,.2));',\n },\n {\n icon: 'pi pi-fw pi-shopping-cart',\n iconBgClass: 'bg-teal-200',\n iconColorClass: 'text-teal-700',\n title: 'Helix Components',\n description: 'Feugiat pretium nibh ipsum consequat.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(145,210,204,.2), rgba(160,210,250,.2)), linear-gradient(180deg, rgba(187,199,205,.2), rgba(145,210,204,.2));',\n },\n {\n icon: 'pi pi-fw pi-globe',\n iconBgClass: 'bg-blue-200',\n iconColorClass: 'text-blue-700',\n title: 'Mobile Responsive',\n description: 'Amet nisl suscipit adipiscing bibendum.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(160,210,250,.2), rgba(212,162,221,.2)), linear-gradient(180deg, rgba(246,158,188,.2), rgba(212,162,221,.2));',\n },\n {\n icon: 'pi pi-fw pi-eye',\n iconBgClass: 'bg-purple-200',\n iconColorClass: 'text-purple-700',\n title: 'Privacy',\n description: 'Neque egestas congue quisque.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(160,210,250,.2), rgba(212,162,221,.2)), linear-gradient(180deg, rgba(246,158,188,.2), rgba(212,162,221,.2));',\n },\n];\n\nconst DEFAULT_TESTIMONIAL: HelixTestimonial = {\n name: 'Joséphine Miller',\n company: 'Peak Interactive',\n text: '\"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"',\n logoUrl: 'https://primefaces.org/cdn/templates/sakai/landing/peak-logo.svg',\n};\n\n@Component({\n selector: 'helix-features-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './features-widget.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './features-widget.scss',\n})\nexport class HelixFeaturesWidget {\n sectionTitle = input('Marvelous Features');\n sectionSubtitle = input('Placerat in egestas erat...');\n features = input<HelixFeature[]>(DEFAULT_FEATURES);\n testimonial = input<HelixTestimonial | null>(DEFAULT_TESTIMONIAL);\n}\n","<div id=\"features\" class=\"py-6 px-6 lg:px-20 mt-8 mx-0 lg:mx-20\">\n <div class=\"grid grid-cols-12 gap-4 justify-center\">\n <div class=\"col-span-12 text-center mt-20 mb-6\">\n <div class=\"text-surface-900 dark:text-surface-0 font-normal mb-2 text-4xl\">\n {{ sectionTitle() }}\n </div>\n <span class=\"text-muted-color text-2xl\">{{ sectionSubtitle() }}</span>\n </div>\n\n @for (feature of features(); track feature.title) {\n <div class=\"col-span-12 md:col-span-12 lg:col-span-4 p-0 lg:p-2 mt-6 lg:mt-0\">\n <div style=\"height: 160px; padding: 2px; border-radius: 10px\" [style]=\"feature.cardStyle\">\n <div class=\"p-4 bg-surface-0 dark:bg-surface-900 h-full\" style=\"border-radius: 8px\">\n <div\n class=\"flex items-center justify-center mb-4\"\n [ngClass]=\"feature.iconBgClass\"\n style=\"width: 3.5rem; height: 3.5rem; border-radius: 10px\"\n >\n <i [ngClass]=\"[feature.icon, 'text-2xl!', feature.iconColorClass]\"></i>\n </div>\n <h5 class=\"mb-2 text-surface-900 dark:text-surface-0\">{{ feature.title }}</h5>\n <span class=\"text-surface-600 dark:text-surface-200\">{{ feature.description }}</span>\n </div>\n </div>\n </div>\n }\n\n @if (testimonial()) {\n <div\n class=\"col-span-12 mt-20 mb-20 p-2 md:p-20\"\n style=\"\n border-radius: 20px;\n background:\n linear-gradient(0deg, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6)),\n radial-gradient(77.36% 256.97% at 77.36% 57.52%, #efe1af 0%, #c3dcfa 100%);\n \"\n >\n <div class=\"flex flex-col justify-center items-center text-center px-4 py-4 md:py-0\">\n <div class=\"text-gray-900 mb-2 text-3xl font-semibold\">{{ testimonial()!.name }}</div>\n <span class=\"text-gray-600 text-2xl\">{{ testimonial()!.company }}</span>\n <p\n class=\"text-gray-900 sm:line-height-2 md:line-height-4 text-2xl mt-6\"\n style=\"max-width: 800px\"\n >\n {{ testimonial()!.text }}\n </p>\n @if (testimonial()!.logoUrl) {\n <img [src]=\"testimonial()!.logoUrl\" class=\"mt-6\" alt=\"Company logo\" />\n }\n </div>\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport type {\n HelixFooterColumn,\n HelixFooterLink,\n} from '../../../../layout/components/footer/footer.model';\n\nconst DEFAULT_COLUMNS: HelixFooterColumn[] = [\n {\n title: 'Company',\n links: [\n { label: 'About Us' },\n { label: 'News' },\n { label: 'Investor Relations' },\n { label: 'Careers' },\n { label: 'Media Kit' },\n ],\n },\n {\n title: 'Resources',\n links: [{ label: 'Get Started' }, { label: 'Learn' }, { label: 'Case Studies' }],\n },\n {\n title: 'Community',\n links: [{ label: 'Discord' }, { label: 'Events' }, { label: 'FAQ' }, { label: 'Blog' }],\n },\n {\n title: 'Legal',\n links: [{ label: 'Brand Policy' }, { label: 'Privacy Policy' }, { label: 'Terms of Service' }],\n },\n];\n\nexport type { HelixFooterColumn, HelixFooterLink };\n\n@Component({\n selector: 'helix-footer-widget',\n standalone: true,\n imports: [RouterModule],\n templateUrl: './footer-widget.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './footer-widget.scss',\n})\nexport class HelixFooterWidget {\n columns = input<HelixFooterColumn[]>(DEFAULT_COLUMNS);\n homeRoute = input('/landing');\n brandName = input('SAKAI');\n}\n","<div class=\"py-12 px-12 mx-0 mt-20 lg:mx-20\">\n <div class=\"grid grid-cols-12 gap-4\">\n <div class=\"col-span-12 md:col-span-2\">\n <a\n [routerLink]=\"homeRoute()\"\n [fragment]=\"'home'\"\n class=\"flex flex-wrap items-center justify-center md:justify-start md:mb-0 mb-6 cursor-pointer\"\n >\n <svg viewBox=\"0 0 54 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"h-14 mr-2\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M17.1637 19.2467C17.1566 19.4033 17.1529 19.561 17.1529 19.7194C17.1529 25.3503 21.7203 29.915 27.3546 29.915C32.9887 29.915 37.5561 25.3503 37.5561 19.7194C37.5561 19.5572 37.5524 19.3959 37.5449 19.2355C38.5617 19.0801 39.5759 18.9013 40.5867 18.6994L40.6926 18.6782C40.7191 19.0218 40.7326 19.369 40.7326 19.7194C40.7326 27.1036 34.743 33.0896 27.3546 33.0896C19.966 33.0896 13.9765 27.1036 13.9765 19.7194C13.9765 19.374 13.9896 19.0316 14.0154 18.6927L14.0486 18.6994C15.0837 18.9062 16.1223 19.0886 17.1637 19.2467ZM33.3284 11.4538C31.6493 10.2396 29.5855 9.52381 27.3546 9.52381C25.1195 9.52381 23.0524 10.2421 21.3717 11.4603C20.0078 11.3232 18.6475 11.1387 17.2933 10.907C19.7453 8.11308 23.3438 6.34921 27.3546 6.34921C31.36 6.34921 34.9543 8.10844 37.4061 10.896C36.0521 11.1292 34.692 11.3152 33.3284 11.4538Z\"\n fill=\"var(--primary-color)\"\n />\n </svg>\n <h4 class=\"font-medium text-3xl text-surface-900 dark:text-surface-0\">{{ brandName() }}</h4>\n </a>\n </div>\n\n <div class=\"col-span-12 md:col-span-10\">\n <div\n class=\"grid text-center md:text-left\"\n [style.grid-template-columns]=\"'repeat(' + columns().length + ', 1fr)'\"\n >\n @for (column of columns(); track column.title) {\n <div class=\"px-4\">\n <h4\n class=\"font-medium text-2xl leading-normal mb-6 text-surface-900 dark:text-surface-0\"\n >\n {{ column.title }}\n </h4>\n @for (link of column.links; track link.label) {\n @if (link.url) {\n <a\n [href]=\"link.url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"leading-normal text-xl block cursor-pointer mb-2 text-surface-700 dark:text-surface-100\"\n >{{ link.label }}</a\n >\n } @else if (link.route) {\n <a\n [routerLink]=\"link.route\"\n class=\"leading-normal text-xl block cursor-pointer mb-2 text-surface-700 dark:text-surface-100\"\n >{{ link.label }}</a\n >\n } @else {\n <a\n class=\"leading-normal text-xl block cursor-pointer mb-2 text-surface-700 dark:text-surface-100\"\n >\n {{ link.label }}\n </a>\n }\n }\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { ButtonModule } from '@gravionlabs/helix-core/button';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\n\n@Component({\n selector: 'helix-hero-widget',\n standalone: true,\n imports: [ButtonModule, RippleModule],\n templateUrl: './hero-widget.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './hero-widget.scss',\n})\nexport class HelixHeroWidget {\n headlineLight = input('Eu sem integer');\n headline = input('eget magna fermentum');\n description = input(\n 'Sed blandit libero volutpat sed cras. Fames ac turpis egestas integer. Placerat in egestas erat...',\n );\n buttonLabel = input('Get Started');\n imageUrl = input('https://primefaces.org/cdn/templates/sakai/landing/screen-1.png');\n imageAlt = input('Hero Image');\n\n buttonClick = output<void>();\n}\n","<div\n id=\"hero\"\n class=\"flex flex-col pt-6 px-6 lg:px-20 overflow-hidden\"\n style=\"\n background:\n linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)),\n radial-gradient(\n 77.36% 256.97% at 77.36% 57.52%,\n rgb(238, 239, 175) 0%,\n rgb(195, 227, 250) 100%\n );\n clip-path: ellipse(150% 87% at 93% 13%);\n \"\n>\n <div class=\"mx-6 md:mx-20 mt-0 md:mt-6\">\n <h1 class=\"text-6xl font-bold text-gray-900 leading-tight dark:!text-gray-700\">\n <span class=\"font-light block\">{{ headlineLight() }}</span\n >{{ headline() }}\n </h1>\n <p class=\"font-normal text-2xl leading-normal md:mt-4 text-gray-700 dark:text-gray-700\">\n {{ description() }}\n </p>\n <button\n hButton\n hRipple\n [rounded]=\"true\"\n type=\"button\"\n [label]=\"buttonLabel()\"\n class=\"text-xl! mt-8 px-4!\"\n (click)=\"buttonClick.emit()\"\n ></button>\n </div>\n <div class=\"flex justify-center md:justify-end\">\n <img [src]=\"imageUrl()\" [alt]=\"imageAlt()\" class=\"w-9/12 md:w-auto\" />\n </div>\n</div>\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport type { HelixHighlight } from '../../landing.model';\n\nconst DEFAULT_HIGHLIGHTS: HelixHighlight[] = [\n {\n icon: 'pi pi-fw pi-mobile',\n iconBgClass: 'bg-purple-200',\n iconColorClass: 'text-purple-700',\n title: 'Congue Quisque Egestas',\n description:\n 'Lectus arcu bibendum at varius vel pharetra vel turpis nunc. Eget aliquet nibh praesent tristique magna sit amet purus gravida. Sit amet mattis vulputate enim nulla aliquet.',\n imageUrl: 'https://primefaces.org/cdn/templates/sakai/landing/mockup.png',\n imageAlt: 'mockup mobile',\n imageBgClass: 'bg-purple-100',\n imageAlign: 'left',\n },\n {\n icon: 'pi pi-fw pi-desktop',\n iconBgClass: 'bg-yellow-200',\n iconColorClass: 'text-yellow-700',\n title: 'Celerisque Eu Ultrices',\n description:\n 'Adipiscing commodo elit at imperdiet dui. Viverra nibh cras pulvinar mattis nunc sed blandit libero. Suspendisse in est ante in. Mauris pharetra et ultrices neque ornare aenean euismod elementum nisi.',\n imageUrl: 'https://primefaces.org/cdn/templates/sakai/landing/mockup-desktop.png',\n imageAlt: 'mockup',\n imageBgClass: 'bg-yellow-100',\n imageAlign: 'right',\n },\n];\n\n@Component({\n selector: 'helix-highlights-widget',\n standalone: true,\n imports: [NgClass],\n templateUrl: './highlights-widget.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './highlights-widget.scss',\n})\nexport class HelixHighlightsWidget {\n sectionTitle = input('Powerful Everywhere');\n sectionSubtitle = input('Amet consectetur adipiscing elit...');\n highlights = input<HelixHighlight[]>(DEFAULT_HIGHLIGHTS);\n}\n","<div id=\"highlights\" class=\"py-6 px-6 lg:px-20 mx-0 my-12 lg:mx-20\">\n <div class=\"text-center\">\n <div class=\"text-surface-900 dark:text-surface-0 font-normal mb-2 text-4xl\">\n {{ sectionTitle() }}\n </div>\n <span class=\"text-muted-color text-2xl\">{{ sectionSubtitle() }}</span>\n </div>\n\n @for (highlight of highlights(); track highlight.title; let i = $index) {\n <div\n class=\"grid grid-cols-12 gap-4 mt-20\"\n [class.pb-2]=\"i === 0\"\n [class.md:pb-20]=\"i === 0\"\n [class.pt-2]=\"i > 0\"\n [class.md:pt-20]=\"i > 0\"\n >\n @if (highlight.imageAlign === 'left') {\n <div\n class=\"flex justify-center col-span-12 lg:col-span-6 p-0 order-1 lg:order-0\"\n [ngClass]=\"highlight.imageBgClass\"\n style=\"border-radius: 8px\"\n >\n <img [src]=\"highlight.imageUrl\" class=\"w-11/12\" [alt]=\"highlight.imageAlt\" />\n </div>\n <div\n class=\"col-span-12 lg:col-span-6 my-auto flex flex-col lg:items-end text-center lg:text-right gap-4\"\n >\n <div\n class=\"flex items-center justify-center self-center lg:self-end\"\n [ngClass]=\"highlight.iconBgClass\"\n style=\"width: 4.2rem; height: 4.2rem; border-radius: 10px\"\n >\n <i [ngClass]=\"[highlight.icon, 'text-4xl!', highlight.iconColorClass]\"></i>\n </div>\n <div class=\"leading-none text-surface-900 dark:text-surface-0 text-3xl font-normal\">\n {{ highlight.title }}\n </div>\n <span\n class=\"text-surface-700 dark:text-surface-100 text-2xl leading-normal ml-0 md:ml-2\"\n style=\"max-width: 650px\"\n >\n {{ highlight.description }}\n </span>\n </div>\n } @else {\n <div\n class=\"col-span-12 lg:col-span-6 my-auto flex flex-col text-center lg:text-left lg:items-start gap-4\"\n >\n <div\n class=\"flex items-center justify-center self-center lg:self-start\"\n [ngClass]=\"highlight.iconBgClass\"\n style=\"width: 4.2rem; height: 4.2rem; border-radius: 10px\"\n >\n <i [ngClass]=\"[highlight.icon, 'text-3xl!', highlight.iconColorClass]\"></i>\n </div>\n <div class=\"leading-none text-surface-900 dark:text-surface-0 text-3xl font-normal\">\n {{ highlight.title }}\n </div>\n <span\n class=\"text-surface-700 dark:text-surface-100 text-2xl leading-normal mr-0 md:mr-2\"\n style=\"max-width: 650px\"\n >\n {{ highlight.description }}\n </span>\n </div>\n <div\n class=\"flex justify-end order-1 sm:order-2 col-span-12 lg:col-span-6 p-0\"\n [ngClass]=\"highlight.imageBgClass\"\n style=\"border-radius: 8px\"\n >\n <img [src]=\"highlight.imageUrl\" class=\"w-11/12\" [alt]=\"highlight.imageAlt\" />\n </div>\n }\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { ButtonModule } from '@gravionlabs/helix-core/button';\nimport { DividerModule } from '@gravionlabs/helix-core/divider';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport type { HelixPricingPlan } from '../../landing.model';\n\nconst DEFAULT_PLANS: HelixPricingPlan[] = [\n {\n title: 'Free',\n price: '$0',\n pricePeriod: 'per month',\n imageUrl: 'https://primefaces.org/cdn/templates/sakai/landing/free.svg',\n imageAlt: 'free',\n buttonLabel: 'Get Started',\n features: [\n 'Responsive Layout',\n 'Unlimited Push Messages',\n '50 Support Ticket',\n 'Free Shipping',\n ],\n },\n {\n title: 'Startup',\n price: '$1',\n pricePeriod: 'per month',\n imageUrl: 'https://primefaces.org/cdn/templates/sakai/landing/startup.svg',\n imageAlt: 'startup',\n buttonLabel: 'Get Started',\n features: [\n 'Responsive Layout',\n 'Unlimited Push Messages',\n '50 Support Ticket',\n 'Free Shipping',\n ],\n },\n {\n title: 'Enterprise',\n price: '$5',\n pricePeriod: 'per month',\n imageUrl: 'https://primefaces.org/cdn/templates/sakai/landing/enterprise.svg',\n imageAlt: 'enterprise',\n buttonLabel: 'Try Free',\n features: [\n 'Responsive Layout',\n 'Unlimited Push Messages',\n '50 Support Ticket',\n 'Free Shipping',\n ],\n },\n];\n\n@Component({\n selector: 'helix-pricing-widget',\n standalone: true,\n imports: [DividerModule, ButtonModule, RippleModule],\n templateUrl: './pricing-widget.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './pricing-widget.scss',\n})\nexport class HelixPricingWidget {\n sectionTitle = input('Matchless Pricing');\n sectionSubtitle = input('Amet consectetur adipiscing elit...');\n plans = input<HelixPricingPlan[]>(DEFAULT_PLANS);\n\n planSelect = output<HelixPricingPlan>();\n}\n","<div id=\"pricing\" class=\"py-6 px-6 lg:px-20 my-2 md:my-6\">\n <div class=\"text-center mb-6\">\n <div class=\"text-surface-900 dark:text-surface-0 font-normal mb-2 text-4xl\">\n {{ sectionTitle() }}\n </div>\n <span class=\"text-muted-color text-2xl\">{{ sectionSubtitle() }}</span>\n </div>\n\n <div class=\"grid grid-cols-12 gap-4 justify-between mt-20 md:mt-0\">\n @for (plan of plans(); track plan.title) {\n <div class=\"col-span-12 lg:col-span-4 p-0 md:p-4 mt-6 md:mt-0\">\n <div\n class=\"p-4 flex flex-col border-surface-200 dark:border-surface-600 pricing-card cursor-pointer border-2 hover:border-primary duration-300 transition-all\"\n style=\"border-radius: 10px\"\n (click)=\"planSelect.emit(plan)\"\n >\n <div class=\"text-surface-900 dark:text-surface-0 text-center my-8 text-3xl\">\n {{ plan.title }}\n </div>\n <img [src]=\"plan.imageUrl\" class=\"w-10/12 mx-auto\" [alt]=\"plan.imageAlt\" />\n <div class=\"my-8 flex flex-col items-center gap-4\">\n <div class=\"flex items-center\">\n <span class=\"text-5xl font-bold mr-2 text-surface-900 dark:text-surface-0\">{{\n plan.price\n }}</span>\n <span class=\"text-surface-600 dark:text-surface-200\">{{ plan.pricePeriod }}</span>\n </div>\n <button\n hButton\n hRipple\n [label]=\"plan.buttonLabel\"\n class=\"h-button-rounded border-0 ml-4 font-light leading-tight bg-blue-500 text-white\"\n (click)=\"planSelect.emit(plan); $event.stopPropagation()\"\n ></button>\n </div>\n <h-divider class=\"w-full bg-surface-200\"></h-divider>\n <ul class=\"my-8 list-none p-0 flex text-surface-900 dark:text-surface-0 flex-col px-8\">\n @for (feature of plan.features; track feature) {\n <li class=\"py-2\">\n <i class=\"pi pi-fw pi-check text-xl text-cyan-500 mr-2\"></i>\n <span class=\"text-xl leading-normal\">{{ feature }}</span>\n </li>\n }\n </ul>\n </div>\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n// biome-ignore lint/style/useImportType: DI token, must be value import\nimport { Router, RouterModule } from '@angular/router';\nimport { ButtonModule } from '@gravionlabs/helix-core/button';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { StyleClassModule } from '@gravionlabs/helix-core/styleclass';\nimport { HelixFloatingConfigurator } from '../../../../layout/components/floating-configurator/floating-configurator';\nimport type { HelixNavLink } from '../../landing.model';\n\nconst DEFAULT_NAV_LINKS: HelixNavLink[] = [\n { label: 'Home', route: '/landing', fragment: 'home' },\n { label: 'Features', route: '/landing', fragment: 'features' },\n { label: 'Highlights', route: '/landing', fragment: 'highlights' },\n { label: 'Pricing', route: '/landing', fragment: 'pricing' },\n];\n\n@Component({\n selector: 'helix-topbar-widget',\n standalone: true,\n imports: [RouterModule, StyleClassModule, ButtonModule, RippleModule, HelixFloatingConfigurator],\n templateUrl: './topbar-widget.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './topbar-widget.scss',\n})\nexport class HelixTopbarWidget {\n navLinks = input<HelixNavLink[]>(DEFAULT_NAV_LINKS);\n loginLabel = input('Login');\n loginRoute = input('/auth/login');\n registerLabel = input('Register');\n registerRoute = input('/auth/login');\n\n constructor(public router: Router) {}\n}\n","<a class=\"flex items-center\" href=\"#\">\n <svg viewBox=\"0 0 54 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"h-12 mr-2\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M17.1637 19.2467C17.1566 19.4033 17.1529 19.561 17.1529 19.7194C17.1529 25.3503 21.7203 29.915 27.3546 29.915C32.9887 29.915 37.5561 25.3503 37.5561 19.7194C37.5561 19.5572 37.5524 19.3959 37.5449 19.2355C38.5617 19.0801 39.5759 18.9013 40.5867 18.6994L40.6926 18.6782C40.7191 19.0218 40.7326 19.369 40.7326 19.7194C40.7326 27.1036 34.743 33.0896 27.3546 33.0896C19.966 33.0896 13.9765 27.1036 13.9765 19.7194C13.9765 19.374 13.9896 19.0316 14.0154 18.6927L14.0486 18.6994C15.0837 18.9062 16.1223 19.0886 17.1637 19.2467ZM33.3284 11.4538C31.6493 10.2396 29.5855 9.52381 27.3546 9.52381C25.1195 9.52381 23.0524 10.2421 21.3717 11.4603C20.0078 11.3232 18.6475 11.1387 17.2933 10.907C19.7453 8.11308 23.3438 6.34921 27.3546 6.34921C31.36 6.34921 34.9543 8.10844 37.4061 10.896C36.0521 11.1292 34.692 11.3152 33.3284 11.4538ZM43.826 18.0518C43.881 18.6003 43.9091 19.1566 43.9091 19.7194C43.9091 28.8568 36.4973 36.2642 27.3546 36.2642C18.2117 36.2642 10.8 28.8568 10.8 19.7194C10.8 19.1615 10.8276 18.61 10.8816 18.0663L7.75383 17.4411C7.66775 18.1886 7.62354 18.9488 7.62354 19.7194C7.62354 30.6102 16.4574 39.4388 27.3546 39.4388C38.2517 39.4388 47.0855 30.6102 47.0855 19.7194C47.0855 18.9439 47.0407 18.1789 46.9536 17.4267L43.826 18.0518ZM44.2613 9.54743L40.9084 10.2176C37.9134 5.95821 32.9593 3.1746 27.3546 3.1746C21.7442 3.1746 16.7856 5.96385 13.7915 10.2305L10.4399 9.56057C13.892 3.83178 20.1756 0 27.3546 0C34.5281 0 40.8075 3.82591 44.2613 9.54743Z\"\n fill=\"var(--primary-color)\"\n />\n <mask\n id=\"mask0_topbar\"\n style=\"mask-type: alpha\"\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"8\"\n width=\"54\"\n height=\"11\"\n >\n <path\n d=\"M27 18.3652C10.5114 19.1944 0 8.88892 0 8.88892C0 8.88892 16.5176 14.5866 27 14.5866C37.4824 14.5866 54 8.88892 54 8.88892C54 8.88892 43.4886 17.5361 27 18.3652Z\"\n fill=\"var(--primary-color)\"\n />\n </mask>\n <g mask=\"url(#mask0_topbar)\">\n <path\n d=\"M-4.673e-05 8.88887L3.73084 -1.91434L-8.00806 17.0473L-4.673e-05 8.88887ZM27 18.3652L26.4253 6.95109L27 18.3652ZM54 8.88887L61.2673 17.7127L50.2691 -1.91434L54 8.88887Z\"\n fill=\"var(--primary-color)\"\n />\n </g>\n </svg>\n <span class=\"text-surface-900 dark:text-surface-0 font-medium text-2xl leading-normal mr-20\"\n >SAKAI</span\n >\n</a>\n\n<a\n hButton\n [text]=\"true\"\n severity=\"secondary\"\n [rounded]=\"true\"\n hRipple\n class=\"lg:hidden!\"\n hStyleClass=\"@next\"\n enterFromClass=\"hidden\"\n leaveToClass=\"hidden\"\n [hideOnOutsideClick]=\"true\"\n>\n <i class=\"pi pi-bars text-2xl!\"></i>\n</a>\n\n<div\n class=\"items-center bg-surface-0 dark:bg-surface-900 grow justify-between hidden lg:flex absolute lg:static w-full left-0 top-full px-12 lg:px-0 z-20 rounded-border\"\n>\n <ul\n class=\"list-none p-0 m-0 flex lg:items-center select-none flex-col lg:flex-row cursor-pointer gap-8\"\n >\n @for (link of navLinks(); track link.label) {\n <li>\n <a\n (click)=\"router.navigate([link.route], { fragment: link.fragment })\"\n hRipple\n class=\"px-0 py-4 text-surface-900 dark:text-surface-0 font-medium text-xl\"\n >\n <span>{{ link.label }}</span>\n </a>\n </li>\n }\n </ul>\n <div class=\"flex border-t lg:border-t-0 border-surface py-4 lg:py-0 mt-4 lg:mt-0 gap-2\">\n <button\n hButton\n hRipple\n [label]=\"loginLabel()\"\n [routerLink]=\"loginRoute()\"\n [rounded]=\"true\"\n [text]=\"true\"\n ></button>\n <button\n hButton\n hRipple\n [label]=\"registerLabel()\"\n [routerLink]=\"registerRoute()\"\n [rounded]=\"true\"\n ></button>\n <helix-floating-configurator [float]=\"false\" />\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ButtonModule } from '@gravionlabs/helix-core/button';\nimport { DividerModule } from '@gravionlabs/helix-core/divider';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { StyleClassModule } from '@gravionlabs/helix-core/styleclass';\nimport { HelixFeaturesWidget } from './components/features-widget/features-widget';\nimport { HelixFooterWidget } from './components/footer-widget/footer-widget';\nimport { HelixHeroWidget } from './components/hero-widget/hero-widget';\nimport { HelixHighlightsWidget } from './components/highlights-widget/highlights-widget';\nimport { HelixPricingWidget } from './components/pricing-widget/pricing-widget';\nimport { HelixTopbarWidget } from './components/topbar-widget/topbar-widget';\n\n@Component({\n selector: 'helix-landing',\n standalone: true,\n imports: [\n RouterModule,\n HelixTopbarWidget,\n HelixHeroWidget,\n HelixFeaturesWidget,\n HelixHighlightsWidget,\n HelixPricingWidget,\n HelixFooterWidget,\n RippleModule,\n StyleClassModule,\n ButtonModule,\n DividerModule,\n ],\n templateUrl: './landing.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './landing.scss',\n})\nexport class HelixLanding {}\n","<div class=\"bg-surface-0 dark:bg-surface-900\">\n <div id=\"home\" class=\"landing-wrapper overflow-hidden\">\n <helix-topbar-widget\n class=\"py-6 px-6 mx-0 md:mx-12 lg:mx-20 lg:px-20 flex items-center justify-between relative lg:static\"\n />\n <helix-hero-widget />\n <helix-features-widget />\n <helix-highlights-widget />\n <helix-pricing-widget />\n <helix-footer-widget />\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ButtonModule } from '@gravionlabs/helix-core/button';\nimport { HelixFloatingConfigurator } from '../../layout/components/floating-configurator/floating-configurator';\n\nexport interface HelixNotfoundSuggestion {\n icon: string;\n title: string;\n description: string;\n route: string;\n}\n\nconst DEFAULT_SUGGESTIONS: HelixNotfoundSuggestion[] = [\n {\n icon: 'pi pi-fw pi-table',\n title: 'Frequently Asked Questions',\n description: 'Ultricies mi quis hendrerit dolor.',\n route: '/',\n },\n {\n icon: 'pi pi-fw pi-question-circle',\n title: 'Solution Center',\n description: 'Phasellus faucibus scelerisque eleifend.',\n route: '/',\n },\n {\n icon: 'pi pi-fw pi-unlock',\n title: 'Permission Manager',\n description: 'Accumsan in nisl nisi scelerisque',\n route: '/',\n },\n];\n\n@Component({\n selector: 'helix-notfound',\n standalone: true,\n imports: [RouterModule, HelixFloatingConfigurator, ButtonModule],\n templateUrl: './notfound.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './notfound.scss',\n})\nexport class HelixNotfound {\n errorCode = input('404');\n title = input('Not Found');\n message = input('Requested resource is not available.');\n buttonLabel = input('Go to Dashboard');\n buttonRoute = input('/');\n suggestions = input<HelixNotfoundSuggestion[]>(DEFAULT_SUGGESTIONS);\n}\n","<helix-floating-configurator />\n<div class=\"flex items-center justify-center min-h-screen overflow-hidden\">\n <div class=\"flex flex-col items-center justify-center\">\n <svg\n width=\"54\"\n height=\"40\"\n viewBox=\"0 0 54 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"mb-8 w-32 shrink-0\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M17.1637 19.2467C17.1566 19.4033 17.1529 19.561 17.1529 19.7194C17.1529 25.3503 21.7203 29.915 27.3546 29.915C32.9887 29.915 37.5561 25.3503 37.5561 19.7194C37.5561 19.5572 37.5524 19.3959 37.5449 19.2355C38.5617 19.0801 39.5759 18.9013 40.5867 18.6994L40.6926 18.6782C40.7191 19.0218 40.7326 19.369 40.7326 19.7194C40.7326 27.1036 34.743 33.0896 27.3546 33.0896C19.966 33.0896 13.9765 27.1036 13.9765 19.7194C13.9765 19.374 13.9896 19.0316 14.0154 18.6927L14.0486 18.6994C15.0837 18.9062 16.1223 19.0886 17.1637 19.2467ZM33.3284 11.4538C31.6493 10.2396 29.5855 9.52381 27.3546 9.52381C25.1195 9.52381 23.0524 10.2421 21.3717 11.4603C20.0078 11.3232 18.6475 11.1387 17.2933 10.907C19.7453 8.11308 23.3438 6.34921 27.3546 6.34921C31.36 6.34921 34.9543 8.10844 37.4061 10.896C36.0521 11.1292 34.692 11.3152 33.3284 11.4538ZM43.826 18.0518C43.881 18.6003 43.9091 19.1566 43.9091 19.7194C43.9091 28.8568 36.4973 36.2642 27.3546 36.2642C18.2117 36.2642 10.8 28.8568 10.8 19.7194C10.8 19.1615 10.8276 18.61 10.8816 18.0663L7.75383 17.4411C7.66775 18.1886 7.62354 18.9488 7.62354 19.7194C7.62354 30.6102 16.4574 39.4388 27.3546 39.4388C38.2517 39.4388 47.0855 30.6102 47.0855 19.7194C47.0855 18.9439 47.0407 18.1789 46.9536 17.4267L43.826 18.0518ZM44.2613 9.54743L40.9084 10.2176C37.9134 5.95821 32.9593 3.1746 27.3546 3.1746C21.7442 3.1746 16.7856 5.96385 13.7915 10.2305L10.4399 9.56057C13.892 3.83178 20.1756 0 27.3546 0C34.5281 0 40.8075 3.82591 44.2613 9.54743Z\"\n fill=\"var(--primary-color)\"\n />\n <mask\n id=\"mask0_1413_1551\"\n style=\"mask-type: alpha\"\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"8\"\n width=\"54\"\n height=\"11\"\n >\n <path\n d=\"M27 18.3652C10.5114 19.1944 0 8.88892 0 8.88892C0 8.88892 16.5176 14.5866 27 14.5866C37.4824 14.5866 54 8.88892 54 8.88892C54 8.88892 43.4886 17.5361 27 18.3652Z\"\n fill=\"var(--primary-color)\"\n />\n </mask>\n <g mask=\"url(#mask0_1413_1551)\">\n <path\n d=\"M-4.673e-05 8.88887L3.73084 -1.91434L-8.00806 17.0473L-4.673e-05 8.88887ZM27 18.3652L26.4253 6.95109L27 18.3652ZM54 8.88887L61.2673 17.7127L50.2691 -1.91434L54 8.88887ZM-4.673e-05 8.88887C-8.00806 17.0473 -8.00469 17.0505 -8.00132 17.0538C-8.00018 17.055 -7.99675 17.0583 -7.9944 17.0607C-7.98963 17.0653 -7.98474 17.0701 -7.97966 17.075C-7.96949 17.0849 -7.95863 17.0955 -7.94707 17.1066C-7.92401 17.129 -7.89809 17.1539 -7.86944 17.1812C-7.8122 17.236 -7.74377 17.3005 -7.66436 17.3743C-7.50567 17.5218 -7.30269 17.7063 -7.05645 17.9221C-6.56467 18.3532 -5.89662 18.9125 -5.06089 19.5534C-3.39603 20.83 -1.02575 22.4605 1.98012 24.0457C7.97874 27.2091 16.7723 30.3226 27.5746 29.7793L26.4253 6.95109C20.7391 7.23699 16.0326 5.61231 12.6534 3.83024C10.9703 2.94267 9.68222 2.04866 8.86091 1.41888C8.45356 1.10653 8.17155 0.867278 8.0241 0.738027C7.95072 0.673671 7.91178 0.637576 7.90841 0.634492C7.90682 0.63298 7.91419 0.639805 7.93071 0.65557C7.93897 0.663455 7.94952 0.673589 7.96235 0.686039C7.96883 0.692262 7.97582 0.699075 7.98338 0.706471C7.98719 0.710167 7.99113 0.714014 7.99526 0.718014C7.99729 0.720008 8.00047 0.723119 8.00148 0.724116C8.00466 0.727265 8.00796 0.730446 -4.673e-05 8.88887ZM27.5746 29.7793C37.6904 29.2706 45.9416 26.3684 51.6602 23.6054C54.5296 22.2191 56.8064 20.8465 58.4186 19.7784C59.2265 19.2431 59.873 18.7805 60.3494 18.4257C60.5878 18.2482 60.7841 18.0971 60.9374 17.977C61.014 17.9169 61.0799 17.8645 61.1349 17.8203C61.1624 17.7981 61.1872 17.7781 61.2093 17.7602C61.2203 17.7512 61.2307 17.7427 61.2403 17.7348C61.2452 17.7308 61.2499 17.727 61.2544 17.7233C61.2566 17.7215 61.2598 17.7188 61.261 17.7179C61.2642 17.7153 61.2673 17.7127 54 8.88887C46.7326 0.0650536 46.7357 0.0625219 46.7387 0.0600241C46.7397 0.0592345 46.7427 0.0567658 46.7446 0.0551857C46.7485 0.0520238 46.7521 0.0489887 46.7557 0.0460799C46.7628 0.0402623 46.7694 0.0349487 46.7753 0.0301318C46.7871 0.0204986 46.7966 0.0128495 46.8037 0.00712562C46.818 -0.00431848 46.8228 -0.00808311 46.8184 -0.00463784C46.8096 0.00228345 46.764 0.0378652 46.6828 0.0983779C46.5199 0.219675 46.2165 0.439161 45.7812 0.727519C44.9072 1.30663 43.5257 2.14765 41.7061 3.02677C38.0469 4.79468 32.7981 6.63058 26.4253 6.95109L27.5746 29.7793ZM54 8.88887C50.2691 -1.91433 50.27 -1.91467 50.271 -1.91498C50.2712 -1.91506 50.272 -1.91535 50.2724 -1.9155C50.2733 -1.91581 50.274 -1.91602 50.2743 -1.91616C50.2752 -1.91643 50.275 -1.91636 50.2738 -1.91595C50.2714 -1.91515 50.2652 -1.91302 50.2552 -1.9096C50.2351 -1.90276 50.1999 -1.89078 50.1503 -1.874C50.0509 -1.84043 49.8938 -1.78773 49.6844 -1.71863C49.2652 -1.58031 48.6387 -1.377 47.8481 -1.13035C46.2609 -0.635237 44.0427 0.0249875 41.5325 0.6823C36.215 2.07471 30.6736 3.15796 27 3.15796V26.0151C33.8087 26.0151 41.7672 24.2495 47.3292 22.7931C50.2586 22.026 52.825 21.2618 54.6625 20.6886C55.5842 20.4011 56.33 20.1593 56.8551 19.986C57.1178 19.8993 57.3258 19.8296 57.4735 19.7797C57.5474 19.7548 57.6062 19.7348 57.6493 19.72C57.6709 19.7127 57.6885 19.7066 57.7021 19.7019C57.7089 19.6996 57.7147 19.6976 57.7195 19.696C57.7219 19.6952 57.7241 19.6944 57.726 19.6938C57.7269 19.6934 57.7281 19.693 57.7286 19.6929C57.7298 19.6924 57.7309 19.692 54 8.88887ZM27 3.15796C23.3263 3.15796 17.7849 2.07471 12.4674 0.6823C9.95717 0.0249875 7.73904 -0.635237 6.15184 -1.13035C5.36118 -1.377 4.73467 -1.58031 4.3155 -1.71863C4.10609 -1.78773 3.94899 -1.84043 3.84961 -1.874C3.79994 -1.89078 3.76474 -1.90276 3.74471 -1.9096C3.73469 -1.91302 3.72848 -1.91515 3.72613 -1.91595C3.72496 -1.91636 3.72476 -1.91643 3.72554 -1.91616C3.72593 -1.91602 3.72657 -1.91581 3.72745 -1.9155C3.72789 -1.91535 3.72874 -1.91506 3.72896 -1.91498C3.72987 -1.91467 3.73084 -1.91433 -4.673e-05 8.88887C-3.73093 19.692 -3.72983 19.6924 -3.72868 19.6929C-3.72821 19.693 -3.72698 19.6934 -3.72603 19.6938C-3.72415 19.6944 -3.72201 19.6952 -3.71961 19.696C-3.71482 19.6976 -3.70901 19.6996 -3.7022 19.7019C-3.68858 19.7066 -3.67095 19.7127 -3.6494 19.72C-3.60629 19.7348 -3.54745 19.7548 -3.47359 19.7797C-3.32589 19.8296 -3.11788 19.8993 -2.85516 19.986C-2.33008 20.1593 -1.58425 20.4011 -0.662589 20.6886C1.17485 21.2618 3.74125 22.026 6.67073 22.7931C12.2327 24.2495 20.1913 26.0151 27 26.0151V3.15796Z\"\n fill=\"var(--primary-color)\"\n />\n </g>\n </svg>\n <div\n style=\"\n border-radius: 56px;\n padding: 0.3rem;\n background: linear-gradient(\n 180deg,\n color-mix(in srgb, var(--primary-color), transparent 60%) 10%,\n var(--surface-ground) 30%\n );\n \"\n >\n <div\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center\"\n style=\"border-radius: 53px\"\n >\n <span class=\"text-primary font-bold text-3xl\">{{ errorCode() }}</span>\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-3xl lg:text-5xl mb-2\">\n {{ title() }}\n </h1>\n <div class=\"text-surface-600 dark:text-surface-200 mb-8\">{{ message() }}</div>\n @for (suggestion of suggestions(); track suggestion.title; let last = $last) {\n <a\n [routerLink]=\"suggestion.route\"\n class=\"w-full flex items-center py-8 border-surface-300 dark:border-surface-500 border-b\"\n [class.mb-8]=\"last\"\n >\n <span\n class=\"flex justify-center items-center border-2 border-primary text-primary rounded-border\"\n style=\"height: 3.5rem; width: 3.5rem\"\n >\n <i [class]=\"suggestion.icon + ' text-2xl!'\"></i>\n </span>\n <span class=\"ml-6 flex flex-col\">\n <span\n class=\"text-surface-900 dark:text-surface-0 lg:text-xl font-medium mb-0 block\"\n >{{ suggestion.title }}</span\n >\n <span class=\"text-surface-600 dark:text-surface-200 lg:text-xl\">{{\n suggestion.description\n }}</span>\n </span>\n </a>\n }\n <h-button [label]=\"buttonLabel()\" [routerLink]=\"buttonRoute()\" />\n </div>\n </div>\n </div>\n</div>\n"],"mappings":"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iB;MACjB,OAAO;MACP,YAAY;KACb;IACF;IACD,MAAM;KACJ,SAAS;MACP,OAAO;MACP,eAAe;MACf,YAAY;MACZ,aAAa;KACd;KACD,WAAW;MACT,YAAY;MACZ,iBAAiB;MACjB,OAAO;MACP,YAAY;KACb;IACF;GACF;EACF,EACF;OACI,IAAI,WAAW,SACpB,OAAO,EACL,UAAU;GACR,SAAS,MAAM;GACf,aAAa;IACX,OAAO;KACL,SAAS;MACP,OAAO;MACP,eAAe;MACf,YAAY;MACZ,aAAa;KACd;KACD,WAAW;MACT,YAAY;MACZ,iBAAiB;MACjB,OAAO;MACP,YAAY;KACb;IACF;IACD,MAAM;KACJ,SAAS;MACP,OAAO;MACP,eAAe;MACf,YAAY;MACZ,aAAa;KACd;KACD,WAAW;MACT,YAAY;MACZ,iBAAiB;MACjB,OAAO;MACP,YAAY;KACb;IACF;GACF;EACF,EACF;OACI,IAAI,WAAW,QACpB,OAAO,EACL,UAAU;GACR,SAAS,MAAM;GACf,aAAa;IACX,OAAO;KACL,SAAS;MACP,OAAO;MACP,eAAe;MACf,YAAY;MACZ,aAAa;KACd;KACD,WAAW;MACT,YAAY;MACZ,iBAAiB;MACjB,OAAO;MACP,YAAY;KACb;IACF;IACD,MAAM;KACJ,SAAS;MACP,OAAO;MACP,eAAe;MACf,YAAY;MACZ,aAAa;KACd;KACD,WAAW;MACT,YAAY;MACZ,iBAAiB;MACjB,OAAO;MACP,YAAY;KACb;IACF;GACF;EACF,EACF;OAED,OAAO,EACL,UAAU;GACR,SAAS,MAAM;GACf,aAAa;IACX,OAAO;KACL,SAAS;MACP,OAAO;MACP,eAAe;MACf,YAAY;MACZ,aAAa;KACd;KACD,WAAW;MACT,YAAY;MACZ,iBAAiB;MACjB,OAAO;MACP,YAAY;KACb;IACF;IACD,MAAM;KACJ,SAAS;MACP,OAAO;MACP,eAAe;MACf,YAAY;MACZ,aAAa;KACd;KACD,WAAW;MACT,YAAY;MACZ,iBAAiB;MACjB,OAAO;MACP,YAAY;KACb;IACF;GACF;EACF,EACF;CAEL;CAEA,aAAa,OAAc,MAAc,OAAmB;EAC1D,IAAI,SAAS,WACX,KAAK,MAAM,WAAW,MAAM,IAAK;OAC5B,IAAI,SAAS,WAClB,KAAK,MAAM,WAAW,MAAM,IAAK;EAEnC,KAAK,WAAW,MAAM,KAAK;EAC3B,MAAM,gBAAe;CACvB;CAEA,WAAW,MAAc,OAAmB;EAC1C,IAAI,SAAS,WACX,aAAa,KAAK,aAAY,CAAE;OAC3B,IAAI,SAAS,WAClB,qBAAqB,MAAM,OAAO;CAEtC;CAEA,eAAe,OAAa;EAC1B,KAAK,MAAM,UAAU,KAAK;EAC1B,MAAM,SAAS,QAAQ;EACvB,MAAM,iBAAiB,KAAK,SAAS,MAClC,MAAM,EAAE,SAAS,KAAK,qBAAoB,CAAE,CAC9C,EAAE;EACH,GAAE,CAAE,CACD,OAAO,MAAM,CAAC,CACd,OAAO,KAAK,aAAY,CAAE,CAAC,CAC3B,eAAe,cAAc,CAAC,CAC9B,IAAI,EAAE,mBAAmB,KAAI,CAAE;CACpC;CAEA,iBAAiB,OAAa;EAC5B,KAAK,MAAM,YAAY,KAAY;CACrC;CA9YW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,MAAA,EAAA,gBAAA,2NAAA;EAAA,UAAA;EAAA,UC5D9B;EA+DA,QAAA,CAAA,EAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDZY;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA,CAAA,SAAA,SAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAW;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,eAAA;IAAA,UAAA,CAAA,SAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAkB;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,iBAAA,UAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAS5C,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EAZ7B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAoB,YAClB;GAAI,SACP;IAAC;IAAc;IAAa;GAAkB;GAAC,iBAGvC,wBAAwB;GAAK,MACxC,EACJ,OACE,2NACH;GAAA,UAAA;EAAA,CAAA;;;AEHH,IAAa,0BAAb,MAAa,wBAAuB;CAAvB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAuB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAvB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAuB,cAAA;EAAA,UAAA;EAAA,UAAA;EAAA,UA/CxB;;;;;;;;;;;;;;;;;;;EAkBT,UAAA;EAAA,QAAA,CAAA,+SAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MAnBS;GAAgB;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAiB,UAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAgDlC,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAuB,YAAA,CAAA;EAnDnC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAA2B,YACzB;GAAI,SACP,CAAC,kBAAkB,iBAAiB;GAAC,UACpC;;;;;;;;;;;;;;;;;;;GAkBT,iBACgB,wBAAwB;GAAK,QAAA,CAAA,+SAAA;EAAA,CAAA;;;ACYhD,IAAa,sBAAb,MAAa,oBAAmB;CACpB,QAAQ,OAAO,WAAW;CADzB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAmB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAnB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAmB,cAAA;EAAA,UAAA;EAAA,MAAA,EAAA,gBAAA,2MAAA;EAAA,UAAA;EAAA,UA/BpB;;;;;;;;;;;;EAWT,UAAA;EAAA,QAAA,CAAA,sGAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAZS;EAAY,GAAA;GAAA,MAAA;GAAA,MAAA,KAAA;GAAA,UAAA;GAAA,QAAA,CAAA,SAAA,SAAA;EAAA,CAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAgCX,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAnC/B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAwB,YACtB;GAAI,SACP,CAAC,YAAY;GAAC,UACb;;;;;;;;;;;;GAWT,MACK,EACJ,OACE,2MACH;GAAA,iBACgB,wBAAwB;GAAK,QAAA,CAAA,sGAAA;EAAA,CAAA;;;ACChD,MAAM,kBAAuC;CAC3C;EAAE,MAAM;EAAkB,OAAO;CAAU;CAC3C;EAAE,MAAM;EAAe,OAAO;CAAU;CACxC;EAAE,MAAM;EAAc,OAAO;CAAS;AACvC;AAED,MAAM,gBAAmC;CACvC,EAAE,MAAM,WAAU;CAClB,EAAE,MAAM,eAAc;CACtB,EAAE,MAAM,SAAQ;AACjB;AAkBD,IAAa,cAAb,MAAa,YAAW;CACtB,WAAW,MAAM,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,gCAAA,CAAA,CAAA;CACzB,gBAAgB,MAA2B,iBAAgB,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,gCAAA,CAAA,CAAA;CAC3D,cAAc,MAA8B,QAAU,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CACtD,QAAQ,MAAyB,eAAc,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,gCAAA,CAAA,CAAA;CAE/C,QAAQ,OAAO,WAAW;CAClB,SAAS,OAAO,MAAM;CACtB,QAAQ,OAAO,cAAc;CAC7B,WAAW,IAAI,QAAO;CACtB,cAAc,OAAO,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CAE/B,WAAQ;EACN,KAAK,OAAO,OACT,KACC,QAAQ,UAAkC,iBAAiB,aAAa,GACxE,UAAU,KAAK,QAAQ,CAAC,CACzB,CACA,gBAAgB,KAAK,YAAY,QAAQ,MAAM,IAAI,CAAC,CAAC;CAC1D;CAEA,cAAW;EACT,KAAK,SAAS,KAAI;EAClB,KAAK,SAAS,SAAQ;CACxB;CAEU,uBAAuB,eAA0B;EACzD,MAAM,QAAQ,KAAK,YAAW;EAC9B,IAAI,UAAU,QAAW,OAAO;EAChC,KAAK,YAAW;EAChB,OAAO,2BAA2B,KAAK,KAAK;CAC9C,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,uBAAA,CAAA,gCAAA,CAAA,CAAA;CAEQ,kBAAkB,eAAe,KAAK,qBAAoB,CAAE,CAAC,SAAS,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,kBAAA,CAAA,gCAAA,CAAA,CAAA;CAjCvE,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAW,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAX,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAW,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UCrDxB;EA+DA,QAAA,CAAA,w7GAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDtBI;GAAY;GAAA;IAAA,MAAA;IAAA,MACZ;GAAY;GAAA;IAAA,MAAA;IAAA,MACZ;GAAgB;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAChB;IAAgB,UAAA;IAAA,QAAA,CAAA,SAAA,QAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAChB;IAAuB,UAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACvB;IAAmB,UAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACnB;IAAU,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,aAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAMD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAW,YAAA,CAAA;EAhBvB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAc,YACZ;GAAI,SACP;IACP;IACA;IACA;IACA;IACA;IACA;IACA;GACD;GAAA,iBAEgB,wBAAwB;GAAK,UAAA;GAAA,QAAA,CAAA,w7GAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AElBhD,IAAa,iBAAb,MAAa,eAAc;CACzB,WAAW,MAAM,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,gCAAA,CAAA,CAAA;CACzB,cAAc,MAAgC,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CAG9C,cAAc,MAAsC,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CAGpD,gBAAgB,MAAwC,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,gBAAA,CAAA,gCAAA,CAAA,CAAA;CAMxD,YAAY,MAAe,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,YAAA,CAAA,gCAAA,CAAA,CAAA;CAG3B,uBAAuB,MAA2B,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,uBAAA,CAAA,gCAAA,CAAA,CAAA;CAClD,gBAAgB,MAA2B,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,gBAAA,CAAA,gCAAA,CAAA,CAAA;CAC3C,gBAAgB,MAA0B,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,gCAAA,CAAA,CAAA;CACpD,oBAAoB,MAA+B,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,oBAAA,CAAA,gCAAA,CAAA,CAAA;CACtD,iBAAiB,MAAM,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,gCAAA,CAAA,CAAA;CAM1B,OAAO,MAA4B,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,gCAAA,CAAA,CAAA;CAMtC,WAAW,MAAqB,YAAW,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,gCAAA,CAAA,CAAA;CAG3C,YAAY,MAAoC,GAAA,YAAA,CAAA,QAAA,EAAA,WAAA,YAAA,CAAA,gCAAA,CAAA,CAAA;CAExC,OAAgB,sBAA2C;EACjE;GAAE,MAAM;GAAkB,OAAO;EAAU;EAC3C;GAAE,MAAM;GAAe,OAAO;EAAU;EACxC;GAAE,MAAM;GAAc,OAAO;EAAS;CACvC;CAED,QAAQ,OAAO,WAAW;CAClB,iBAAiB,OAAO,cAAc;CAGpC,gBAAgB,eAA0B;EAClD,MAAM,YAAY,KAAK,KAAI;EAC3B,IAAI,UAAU,SAAS,GAAG,OAAO;EACjC,OAAQ,KAAK,eAAe,SAAS,KAAK,WAAgD,CAAA;CAC5F,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,gCAAA,CAAA,CAAA;CAEQ,qBAAqB,eAE3B,KAAK,UAAS,KACd,uBAAuB,KAAK,cAAa,GAA4B,KAAK,SAAQ,CAAE,GACvF,GAAA,YAAA,CAAA,EAAA,WAAA,qBAAA,CAAA,gCAAA,CAAA,CAAA;CAES,uBAAuB,eAAuC;EACtE,MAAM,QAAQ,KAAK,YAAW;EAC9B,IAAI,UAAU,QAAW,OAAO;EAChC,OAAO,KAAK,eAAe,SAAS,KAAK;CAC3C,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,uBAAA,CAAA,gCAAA,CAAA,CAAA;CAEQ,iBAAiB,eAAiC;EAC1D,MAAM,SAAS,KAAK,YAAW;EAC/B,IAAI,WAAW,QAAW,OAAO;EACjC,OAAO;GAAC,EAAE,MAAM,WAAU;GAAI,EAAE,MAAM,eAAc;GAAI,EAAE,MAAM,SAAQ;EAAE;CAC5E,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,gCAAA,CAAA,CAAA;CAEQ,yBAAyB,eAC3B,KAAK,cAAa,KAAM,eAAe,qBAC9C,GAAA,YAAA,CAAA,EAAA,WAAA,yBAAA,CAAA,gCAAA,CAAA,CAAA;CAED,cAAA;EACE,aAAY;GACV,IAAI,KAAK,MAAM,iBAAgB,GAC7B,SAAS,KAAK,UAAU,IAAI,gBAAgB;QAE5C,SAAS,KAAK,UAAU,OAAO,gBAAgB;EAEnD,CAAC;CACH;CAEA,iBAAiB,gBAAgB;EAC/B,kBAAkB,KAAK,MAAM,SAAQ,MAAO;EAC5C,iBAAiB,KAAK,MAAM,SAAQ,MAAO;EAC3C,0BACE,KAAK,MAAM,0BAAyB,KAAM,KAAK,MAAM,SAAQ,MAAO;EACtE,yBAAyB,KAAK,MAAM,kBAAiB;EACrD,wBAAwB,KAAK,MAAM,iBAAgB;EACnD,4BAA4B,KAAK,MAAM,YAAW;CACnD,IAAE,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,gCAAA,CAAA,CAAA;CA9FQ,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAc,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAd,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAc,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,sBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,mBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,gBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,MAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UChC3B;EAwBA,QAAA,CAAA,mvFAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDEY;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA,CAAA,SAAA,SAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAW,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAY,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA,CAAA,QAAA,kBAAA;IAAA,SAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,UAAA,CAAA,QAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAc,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;EAAA,eAAA,GAAA,kBAAA;CAAA,CAAA;;AAMpE,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAc,YAAA,CAAA;EAT1B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAkB,YAChB;GAAI,SACP;IAAC;IAAc;IAAa;IAAc;IAAc;GAAc;GAAC,iBAG/D,wBAAwB;GAAK,eAC/B,kBAAkB;GAAI,UAAA;GAAA,QAAA,CAAA,mvFAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEfvC,IAAa,4BAAb,MAAa,0BAAyB;CACpC,QAAQ,OAAO,WAAW;CAE1B,QAAQ,MAAe,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,gCAAA,CAAA,CAAA;CAE5B,cAAc,eAAe,KAAK,MAAM,UAAS,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CAEpD,iBAAc;EACZ,KAAK,MAAM,eAAc;CAC3B;CATW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAyB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAzB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAyB,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,OAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,UAAA;EAAA,UCftC;EAuBA,QAAA,CAAA,EAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDbY;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA,CAAA,SAAA,SAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAgB;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAiB,UAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAK9D,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAyB,YAAA,CAAA;EARrC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAA6B,YAC3B;GAAI,SACP;IAAC;IAAc;IAAc;IAAkB;GAAiB;GAAC,iBAEzD,wBAAwB;GAAK,UAAA;EAAA,CAAA;;;;;;;;;;;AEIhD,IAAa,cAAb,MAAa,YAAW;CACtB,YAAY,MAAM,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,gCAAA,CAAA,CAAA;CAC1B,WAAW,MAAM,uBAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,gCAAA,CAAA,CAAA;CACvC,UAAU,MAA2B,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,gCAAA,CAAA,CAAA;CAH7B,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAW,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAX,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAW,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UChBxB;EAsCA,QAAA,CAAA,8IAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MD3BY;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAS,MAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKtB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAW,YAAA,CAAA;EARvB,MAAA;EACa,MAAA,CAAA;GAAA,YAAA;GAAI,UACN;GAAc,SACf,CAAC,cAAc,SAAS;GAAC,iBAEjB,wBAAwB;GAAK,UAAA;GAAA,QAAA,CAAA,8IAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEShD,IAAa,wBAAb,MAAa,sBAAqB;CAArB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAqB,cAAA;EAAA,UAAA;EAAA,UAAA;EAAA,UAdtB;;;;;;;;;;;;;EAYT,UAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MAdS;EAAgB,GAAA;GAAA,MAAA;GAAA,MAAA,KAAA;GAAA,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;EAAA,CAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAgBf,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EAnBjC,MAAA;EAAU,MAAA,CAAA;GACT,UAAU;GACV,YAAY;GACZ,SAAS,CAAC,gBAAgB;GAC1B,iBAAiB,wBAAwB;GACzC,UAAU;;;;;;;;;;;;;EAaX,CAAA;;;ACgBD,SAAgB,mBACd,OACA,UAAgB;CAEhB,OAAO,MAAM,KAAK,SAAQ;EACxB,MAAM,WAA+B;GACnC,GAAG;GACH,OAAO,KAAK,QAAQ,mBAAmB,KAAK,OAAO,QAAQ,IAAI;EAChE;EAED,IAAI,SAAS,eAAe,QAC1B,SAAS,OAAO;GAAE,GAAG,SAAS;GAAM,YAAY,SAAS;EAAU;EAGrE,IAAI,CAAC,SAAS,cAAc,SAAS,SAAS,QAE5C,SAAS,aAAa,CADL,GAAG,SAAQ,GAAI,SAAS,OAAO,QAAQ,QAAQ,GACzC,CAAQ;EAGjC,OAAO;CACT,CAAC;AACH;AAWA,SAAgB,gBAAgB,OAA2B;CACzD,MAAM,SAAiB,CAAA;CAEvB,KAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,KAAK,SAAS,QAAW;GAE3B,IAAI,KAAK,OAAO,QACd,OAAO,KAAK,GAAG,gBAAgB,KAAK,KAAK,CAAC;GAE5C;EACF;EAGA,IAAI,EADa,KAAK,aAAa,QAAQ,KAAK,gBAAgB,OACjD;GAEb,IAAI,KAAK,OAAO,QACd,OAAO,KAAK,GAAG,gBAAgB,KAAK,KAAK,CAAC;GAE5C;EACF;EAEA,MAAM,YAAqC,EAAE,GAAI,KAAK,KAAgC;EACtF,IAAI,KAAK,eAAe,QACtB,UAAU,gBAAgB,KAAK;EAGjC,MAAM,QAAe,EAAE,MAAM,KAAK,KAAI;EAEtC,IAAI,KAAK,WAAW,MAAM,YAAY,KAAK;EAC3C,IAAI,KAAK,cAAc,MAAM,eAAe,KAAK;EACjD,IAAI,KAAK,aAAa,MAAM,cAAc,KAAK;EAC/C,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,SAAS,GAAG,MAAM,OAAO;EAGpD,IAAI,KAAK,OAAO,QAAQ;GACtB,MAAM,cAAc,gBAAgB,KAAK,KAAK;GAC9C,IAAI,YAAY,QACd,MAAM,WAAW;EAErB;EAEA,OAAO,KAAK,KAAK;CACnB;CAEA,OAAO;AACT;ACpGA,IAAa,cAAb,MAAa,YAAW;CACtB,QAAQ,MAAM,iBAAgB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,gCAAA,CAAA,CAAA;CAC9B,UAAU,MAAM,oEAAmE,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,gCAAA,CAAA,CAAA;CACnF,cAAc,MAAM,mBAAkB,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CACtC,cAAc,MAAM,KAAI,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CAJb,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAW,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAX,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAW,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UCdxB;EAyCA,QAAA,CAAA,EAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDhCY;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAE;IAAyB,UAAA;IAAA,QAAA,CAAA,OAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKlE,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAW,YAAA,CAAA;EARvB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAc,YACZ;GAAI,SACP;IAAC;IAAc;IAAc;IAAc;GAAyB;GAAC,iBAE7D,wBAAwB;GAAK,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEGhD,IAAa,aAAb,MAAa,WAAU;CACrB,QAAQ,MAAM,iBAAgB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,gCAAA,CAAA,CAAA;CAC9B,UAAU,MAAM,wCAAuC,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,gCAAA,CAAA,CAAA;CACvD,cAAc,MAAM,mBAAkB,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CACtC,cAAc,MAAM,KAAI,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CAJb,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAU,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAV,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAU,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UCdvB;EAyCA,QAAA,CAAA,EAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDhCY;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAyB,UAAA;IAAA,QAAA,CAAA,OAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKlE,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EARtB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAa,YACX;GAAI,SACP;IAAC;IAAc;IAAc;IAAc;GAAyB;GAAC,iBAE7D,wBAAwB;GAAK,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEsBhD,IAAa,aAAb,MAAa,WAAU;CACrB,QAAQ,MAAM,YAAW,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,gCAAA,CAAA,CAAA;CACzB,WAAW,MAAM,uBAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,gCAAA,CAAA,CAAA;CACvC,cAAc,MAAM,WAAU,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CAC9B,sBAAsB,MAAM,oBAAmB,GAAA,YAAA,CAAA,EAAA,WAAA,sBAAA,CAAA,gCAAA,CAAA,CAAA;CAE/C,QAAQ,OAAM;CACd,iBAAiB,OAAM;CAEvB,QAAQ;CACR,WAAW;CACX,UAAU;CAEV,WAAQ;EACN,KAAK,MAAM,KAAK;GAAE,OAAO,KAAK;GAAO,UAAU,KAAK;GAAU,YAAY,KAAK;EAAO,CAAE;CAC1F;CAEA,mBAAgB;EACd,KAAK,eAAe,KAAI;CAC1B;CAnBW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAU,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAV,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAU,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,qBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA;GAAA,OAAA;GAAA,gBAAA;EAAA;EAAA,UAAA;EAAA,UCjCvB;EAuGA,QAAA,CAAA,EAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDnFI;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACZ;GAAc;GAAA;IAAA,MAAA;IAAA,MAAA,GAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACd;GAAe;GAAA;IAAA,MAAA;IAAA,MAAA,GAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACf;GAAc;GAAA;IAAA,MAAA;IAAA,MAAA,GAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACd;GAAW;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,eAAA;IAAA,UAAA,CAAA,SAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACX;GAAY;GAAA;IAAA,MAAA;IAAA,MACZ;GAAY;GAAA;IAAA,MAAA;IAAA,MACZ;IAAyB,UAAA;IAAA,QAAA,CAAA,OAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAMhB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EAjBtB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAa,YACX;GAAI,SACP;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD;GAAA,iBAEgB,wBAAwB;GAAK,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEzBhD,MAAa,aAAqB;CAChC;EAAE,MAAM;EAAU,WAAW;CAAW;CACxC;EAAE,MAAM;EAAS,WAAW;CAAU;CACtC;EAAE,MAAM;EAAS,WAAW;CAAU;AACvC;ACCD,IAAa,aAAb,MAAa,WAAU;CACrB,QAAQ,MAAM,cAAa,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,gCAAA,CAAA,CAAA;CAC3B,cAAc,MAAM,sEAAqE,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CAF9E,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAU,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAV,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAU,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UCVvB;EAKA,QAAA,CAAA,EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;ADKa,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EARtB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAa,YACX;GAAI,SACP,CAAA;GAAE,iBAEM,wBAAwB;GAAK,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;AEHhD,MAAM,mBAAmC;CACvC;EACE,MAAM;EACN,aAAa;EACb,gBAAgB;EAChB,OAAO;EACP,aAAa;EACb,WACE;CACH;CACD;EACE,MAAM;EACN,aAAa;EACb,gBAAgB;EAChB,OAAO;EACP,aAAa;EACb,WACE;CACH;CACD;EACE,MAAM;EACN,aAAa;EACb,gBAAgB;EAChB,OAAO;EACP,aAAa;EACb,WACE;CACH;CACD;EACE,MAAM;EACN,aAAa;EACb,gBAAgB;EAChB,OAAO;EACP,aAAa;EACb,WACE;CACH;CACD;EACE,MAAM;EACN,aAAa;EACb,gBAAgB;EAChB,OAAO;EACP,aAAa;EACb,WACE;CACH;CACD;EACE,MAAM;EACN,aAAa;EACb,gBAAgB;EAChB,OAAO;EACP,aAAa;EACb,WACE;CACH;CACD;EACE,MAAM;EACN,aAAa;EACb,gBAAgB;EAChB,OAAO;EACP,aAAa;EACb,WACE;CACH;CACD;EACE,MAAM;EACN,aAAa;EACb,gBAAgB;EAChB,OAAO;EACP,aAAa;EACb,WACE;CACH;CACD;EACE,MAAM;EACN,aAAa;EACb,gBAAgB;EAChB,OAAO;EACP,aAAa;EACb,WACE;CACH;AACF;AAED,MAAM,sBAAwC;CAC5C,MAAM;CACN,SAAS;CACT,MAAM;CACN,SAAS;AACV;AAUD,IAAa,sBAAb,MAAa,oBAAmB;CAC9B,eAAe,MAAM,sBAAqB,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,gCAAA,CAAA,CAAA;CAC1C,kBAAkB,MAAM,+BAA8B,GAAA,YAAA,CAAA,EAAA,WAAA,kBAAA,CAAA,gCAAA,CAAA,CAAA;CACtD,WAAW,MAAsB,kBAAiB,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,gCAAA,CAAA,CAAA;CAClD,cAAc,MAA+B,qBAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CAJtD,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAmB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAnB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAmB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,iBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UCvGhC;EAsDA,QAAA,CAAA,EAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MD4CY;EAAY,GAAA;GAAA,MAAA;GAAA,MAAA,KAAA;GAAA,UAAA;GAAA,QAAA,CAAA,SAAA,SAAA;EAAA,CAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKX,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAR/B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAuB,YACrB;GAAI,SACP,CAAC,YAAY;GAAC,iBAEN,wBAAwB;GAAK,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE7FhD,MAAM,kBAAuC;CAC3C;EACE,OAAO;EACP,OAAO;GACL,EAAE,OAAO,WAAU;GACnB,EAAE,OAAO,OAAM;GACf,EAAE,OAAO,qBAAoB;GAC7B,EAAE,OAAO,UAAS;GAClB,EAAE,OAAO,YAAW;EACrB;CACF;CACD;EACE,OAAO;EACP,OAAO;GAAC,EAAE,OAAO,cAAa;GAAI,EAAE,OAAO,QAAO;GAAI,EAAE,OAAO,eAAc;EAAE;CAChF;CACD;EACE,OAAO;EACP,OAAO;GAAC,EAAE,OAAO,UAAS;GAAI,EAAE,OAAO,SAAQ;GAAI,EAAE,OAAO,MAAK;GAAI,EAAE,OAAO,OAAM;EAAE;CACvF;CACD;EACE,OAAO;EACP,OAAO;GAAC,EAAE,OAAO,eAAc;GAAI,EAAE,OAAO,iBAAgB;GAAI,EAAE,OAAO,mBAAkB;EAAE;CAC9F;AACF;AAYD,IAAa,oBAAb,MAAa,kBAAiB;CAC5B,UAAU,MAA2B,iBAAgB,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,gCAAA,CAAA,CAAA;CACrD,YAAY,MAAM,YAAW,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,gCAAA,CAAA,CAAA;CAC7B,YAAY,MAAM,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,gCAAA,CAAA,CAAA;CAHf,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UC1C9B;EA6DA,QAAA,CAAA,EAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MDxBY;EAAY,GAAA;GAAA,MAAA;GAAA,MAAA,KAAA;GAAA,UAAA;GAAA,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;GAAA;EAAA,CAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKX,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EAR7B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAqB,YACnB;GAAI,SACP,CAAC,YAAY;GAAC,iBAEN,wBAAwB;GAAK,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE3BhD,IAAa,kBAAb,MAAa,gBAAe;CAC1B,gBAAgB,MAAM,kBAAiB,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,gCAAA,CAAA,CAAA;CACvC,WAAW,MAAM,wBAAuB,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,gCAAA,CAAA,CAAA;CACxC,cAAc,MACZ,sGACD,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CACD,cAAc,MAAM,eAAc,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CAClC,WAAW,MAAM,mEAAkE,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,gCAAA,CAAA,CAAA;CACnF,WAAW,MAAM,cAAa,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,gCAAA,CAAA,CAAA;CAE9B,cAAc,OAAM;CAVT,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAe,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAf,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAe,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA,EAAA,aAAA,cAAA;EAAA,UAAA;EAAA,UCZ5B;EAoCA,QAAA,CAAA,EAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MD7BY;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKzB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAe,YAAA,CAAA;EAR3B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAmB,YACjB;GAAI,SACP,CAAC,cAAc,YAAY;GAAC,iBAEpB,wBAAwB;GAAK,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AELhD,MAAM,qBAAuC,CAC3C;CACE,MAAM;CACN,aAAa;CACb,gBAAgB;CAChB,OAAO;CACP,aACE;CACF,UAAU;CACV,UAAU;CACV,cAAc;CACd,YAAY;AACb,GACD;CACE,MAAM;CACN,aAAa;CACb,gBAAgB;CAChB,OAAO;CACP,aACE;CACF,UAAU;CACV,UAAU;CACV,cAAc;CACd,YAAY;AACb,CACF;AAUD,IAAa,wBAAb,MAAa,sBAAqB;CAChC,eAAe,MAAM,uBAAsB,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,gCAAA,CAAA,CAAA;CAC3C,kBAAkB,MAAM,uCAAsC,GAAA,YAAA,CAAA,EAAA,WAAA,kBAAA,CAAA,gCAAA,CAAA,CAAA;CAC9D,aAAa,MAAwB,oBAAmB,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,gCAAA,CAAA,CAAA;CAH7C,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAqB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAArB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAqB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,iBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UCvClC;EA4EA,QAAA,CAAA,EAAA;EAAA,cAAA,CAAA;GAAA,MAAA;GAAA,MD1CY;GAAO,UAAA;GAAA,QAAA,CAAA,SAAA,SAAA;EAAA,CAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKN,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAqB,YAAA,CAAA;EARjC,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAyB,YACvB;GAAI,SACP,CAAC,OAAO;GAAC,iBAED,wBAAwB;GAAK,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE9BhD,MAAM,gBAAoC;CACxC;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,UAAU;EACV,UAAU;EACV,aAAa;EACb,UAAU;GACR;GACA;GACA;GACA;EACD;CACF;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,UAAU;EACV,UAAU;EACV,aAAa;EACb,UAAU;GACR;GACA;GACA;GACA;EACD;CACF;CACD;EACE,OAAO;EACP,OAAO;EACP,aAAa;EACb,UAAU;EACV,UAAU;EACV,aAAa;EACb,UAAU;GACR;GACA;GACA;GACA;EACD;CACF;AACF;AAUD,IAAa,qBAAb,MAAa,mBAAkB;CAC7B,eAAe,MAAM,qBAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,gCAAA,CAAA,CAAA;CACzC,kBAAkB,MAAM,uCAAsC,GAAA,YAAA,CAAA,EAAA,WAAA,kBAAA,CAAA,gCAAA,CAAA,CAAA;CAC9D,QAAQ,MAA0B,eAAc,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,gCAAA,CAAA,CAAA;CAEhD,aAAa,OAAM;CALR,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAkB,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAlB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAkB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,cAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,iBAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA,EAAA,YAAA,aAAA;EAAA,UAAA;EAAA,UC3D/B;EAiDA,QAAA,CAAA,EAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDKY;GAAa;GAAA;IAAA,MAAA;IAAA,MAAA,GAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKxC,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAkB,YAAA,CAAA;EAR9B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAsB,YACpB;GAAI,SACP;IAAC;IAAe;IAAc;GAAY;GAAC,iBAEnC,wBAAwB;GAAK,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE/ChD,MAAM,oBAAoC;CACxC;EAAE,OAAO;EAAQ,OAAO;EAAY,UAAU;CAAM;CACpD;EAAE,OAAO;EAAY,OAAO;EAAY,UAAU;CAAU;CAC5D;EAAE,OAAO;EAAc,OAAO;EAAY,UAAU;CAAY;CAChE;EAAE,OAAO;EAAW,OAAO;EAAY,UAAU;CAAS;AAC3D;AAUD,IAAa,oBAAb,MAAa,kBAAiB;CAOT;CANnB,WAAW,MAAsB,mBAAkB,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,gCAAA,CAAA,CAAA;CACnD,aAAa,MAAM,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,gCAAA,CAAA,CAAA;CAC3B,aAAa,MAAM,eAAc,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,gCAAA,CAAA,CAAA;CACjC,gBAAgB,MAAM,YAAW,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,gCAAA,CAAA,CAAA;CACjC,gBAAgB,MAAM,eAAc,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,gCAAA,CAAA,CAAA;CAEpC,YAAmB,QAAc;EAAd,KAAA,SAAA;CAAiB;CAPzB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAiB,MAAA,CAAA,EAAA,OAAA,KAAA,OAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAjB,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAiB,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,UAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,eAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UCxB9B;EAsFA,QAAA,CAAA,EAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDnEY;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAgB;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAyB,UAAA;IAAA,QAAA,CAAA,OAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKpF,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAiB,YAAA,CAAA;EAR7B,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAqB,YACnB;GAAI,SACP;IAAC;IAAc;IAAkB;IAAc;IAAc;GAAyB;GAAC,iBAE/E,wBAAwB;GAAK,UAAA;EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEYhD,IAAa,eAAb,MAAa,aAAY;CAAZ,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAY,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAZ,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAY,cAAA;EAAA,UAAA;EAAA,UAAA;EAAA,UCjCzB;EAYA,QAAA,CAAA,EAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDKI;GAAY;GAAA;IAAA,MAAA;IAAA,MACZ;IAAiB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACjB;IAAe,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,aAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACf;IAAmB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACnB;IAAqB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACrB;IAAkB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA,CAAA,YAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAClB;IAAiB,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MACjB;GAAY;GAAA;IAAA,MAAA;IAAA,MACZ;GAAgB;GAAA;IAAA,MAAA;IAAA,MAChB;GAAY;GAAA;IAAA,MAAA;IAAA,MACZ;GAAa;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAMJ,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAY,YAAA,CAAA;EApBxB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAe,YACb;GAAI,SACP;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD;GAAA,iBAEgB,wBAAwB;GAAK,UAAA;EAAA,CAAA;;;AElBhD,MAAM,sBAAiD;CACrD;EACE,MAAM;EACN,OAAO;EACP,aAAa;EACb,OAAO;CACR;CACD;EACE,MAAM;EACN,OAAO;EACP,aAAa;EACb,OAAO;CACR;CACD;EACE,MAAM;EACN,OAAO;EACP,aAAa;EACb,OAAO;CACR;AACF;AAUD,IAAa,gBAAb,MAAa,cAAa;CACxB,YAAY,MAAM,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,gCAAA,CAAA,CAAA;CACxB,QAAQ,MAAM,aAAY,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,gCAAA,CAAA,CAAA;CAC1B,UAAU,MAAM,wCAAuC,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,gCAAA,CAAA,CAAA;CACvD,cAAc,MAAM,mBAAkB,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CACtC,cAAc,MAAM,KAAI,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CACxB,cAAc,MAAiC,qBAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,gCAAA,CAAA,CAAA;CANxD,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAa,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAb,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAa,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,WAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UCzC1B;EAsFA,QAAA,CAAA,EAAA;EAAA,cAAA;GAAA;IAAA,MAAA;IAAA,MDlDY;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;IAAyB,UAAA;IAAA,QAAA,CAAA,OAAA;GAAA;GAAA;IAAA,MAAA;IAAA,MAAE;GAAY;GAAA;IAAA,MAAA;IAAA,MAAA,KAAA;IAAA,UAAA;IAAA,QAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;KAAA;IAAA;IAAA,SAAA;KAAA;KAAA;KAAA;IAAA;GAAA;EAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAKpD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAa,YAAA,CAAA;EARzB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAgB,YACd;GAAI,SACP;IAAC;IAAc;IAA2B;GAAY;GAAC,iBAE/C,wBAAwB;GAAK,UAAA;EAAA,CAAA"}
1
+ {"version":3,"file":"gravionlabs-helix-shell.mjs","names":[],"sources":["../../../projects/shell/src/lib/form/form-field/form-field.ts","../../../projects/shell/src/lib/form/form-field/form-field.html","../../../projects/shell/src/lib/form/select/select.ts","../../../projects/shell/src/lib/form/select/select.html","../../../projects/shell/src/lib/layout/breadcrumb.model.ts","../../../projects/shell/src/lib/layout/breadcrumb-utils.ts","../../../projects/shell/src/lib/layout/store/layout.store.ts","../../../projects/shell/src/lib/layout/components/nav-rail-item/nav-rail-item.ts","../../../projects/shell/src/lib/layout/components/nav-rail-item/nav-rail-item.html","../../../projects/shell/src/lib/layout/components/nav-rail/nav-rail.ts","../../../projects/shell/src/lib/layout/components/nav-rail/nav-rail.html","../../../projects/shell/src/lib/layout/components/nav-rail/nav-rail.model.ts","../../../projects/shell/src/lib/ui/badge/badge.ts","../../../projects/shell/src/lib/ui/badge/environment-badge.ts","../../../projects/shell/src/lib/layout/components/status-bar/status-bar.ts","../../../projects/shell/src/lib/layout/components/status-bar/status-bar.html","../../../projects/shell/src/lib/layout/components/topbar/actions/alert-action.ts","../../../projects/shell/src/lib/layout/components/topbar/actions/alert-action.html","../../../projects/shell/src/lib/layout/components/configurator/configurator.ts","../../../projects/shell/src/lib/layout/components/configurator/configurator.html","../../../projects/shell/src/lib/layout/components/topbar/actions/configurator-action.ts","../../../projects/shell/src/lib/layout/components/topbar/actions/dark-mode-action.ts","../../../projects/shell/src/lib/layout/components/topbar/topbar.ts","../../../projects/shell/src/lib/layout/components/topbar/topbar.html","../../../projects/shell/src/lib/layout/components/app-layout/app-layout.ts","../../../projects/shell/src/lib/layout/components/app-layout/app-layout.html","../../../projects/shell/src/lib/layout/components/floating-configurator/floating-configurator.ts","../../../projects/shell/src/lib/layout/components/floating-configurator/floating-configurator.html","../../../projects/shell/src/lib/layout/components/footer/footer.ts","../../../projects/shell/src/lib/layout/components/footer/footer.html","../../../projects/shell/src/lib/layout/components/topbar/actions/mobile-menu-action.ts","../../../projects/shell/src/lib/layout/route-menu.model.ts","../../../projects/shell/src/lib/pages/auth/access/access.ts","../../../projects/shell/src/lib/pages/auth/access/access.html","../../../projects/shell/src/lib/pages/auth/error/error.ts","../../../projects/shell/src/lib/pages/auth/error/error.html","../../../projects/shell/src/lib/pages/auth/login/login.ts","../../../projects/shell/src/lib/pages/auth/login/login.html","../../../projects/shell/src/lib/pages/auth/auth.routes.ts","../../../projects/shell/src/lib/pages/empty/empty.ts","../../../projects/shell/src/lib/pages/empty/empty.html","../../../projects/shell/src/lib/pages/landing/components/features-widget/features-widget.ts","../../../projects/shell/src/lib/pages/landing/components/features-widget/features-widget.html","../../../projects/shell/src/lib/pages/landing/components/footer-widget/footer-widget.ts","../../../projects/shell/src/lib/pages/landing/components/footer-widget/footer-widget.html","../../../projects/shell/src/lib/pages/landing/components/hero-widget/hero-widget.ts","../../../projects/shell/src/lib/pages/landing/components/hero-widget/hero-widget.html","../../../projects/shell/src/lib/pages/landing/components/highlights-widget/highlights-widget.ts","../../../projects/shell/src/lib/pages/landing/components/highlights-widget/highlights-widget.html","../../../projects/shell/src/lib/pages/landing/components/pricing-widget/pricing-widget.ts","../../../projects/shell/src/lib/pages/landing/components/pricing-widget/pricing-widget.html","../../../projects/shell/src/lib/pages/landing/components/topbar-widget/topbar-widget.ts","../../../projects/shell/src/lib/pages/landing/components/topbar-widget/topbar-widget.html","../../../projects/shell/src/lib/pages/landing/landing.ts","../../../projects/shell/src/lib/pages/landing/landing.html","../../../projects/shell/src/lib/pages/notfound/notfound.ts","../../../projects/shell/src/lib/pages/notfound/notfound.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport type { AbstractControl } from '@angular/forms';\n\n@Component({\n selector: 'helix-form-field',\n templateUrl: './form-field.html',\n styleUrl: './form-field.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelixFormField {\n readonly label = input<string>();\n\n readonly control = input<AbstractControl | null>(null);\n\n readonly hint = input<string>();\n\n readonly error = input<string | null>(null);\n\n readonly showLabel = input(true);\n\n readonly showHint = input(true);\n\n readonly activeError = computed<string | null>(() => {\n const ext = this.error();\n if (ext) return ext;\n const ctrl = this.control();\n if (ctrl?.touched && ctrl.invalid && ctrl.errors) {\n const first = Object.values(ctrl.errors)[0];\n return typeof first === 'string' ? first : null;\n }\n return null;\n });\n}\n","<div class=\"helix-form-field\">\n @if (showLabel() && label()) {\n <label class=\"helix-form-field__label\">{{ label() }}</label>\n }\n\n <div class=\"helix-form-field__control\">\n <ng-content />\n </div>\n\n @if (showHint()) {\n @if (activeError(); as err) {\n <small class=\"helix-form-field__message helix-form-field__message--error h-error\">{{ err }}</small>\n } @else if (hint()) {\n <small class=\"helix-form-field__message helix-form-field__message--hint\">{{ hint() }}</small>\n }\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { type ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'helix-select',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './select.html',\n styleUrl: './select.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HelixSelect),\n multi: true,\n },\n ],\n})\nexport class HelixSelect implements ControlValueAccessor {\n readonly options = input<any[]>([]);\n readonly optionLabel = input<string>('label');\n readonly optionValue = input<string>('value');\n readonly placeholder = input<string>('');\n readonly disabled = input<boolean>(false);\n\n readonly value = signal<any>(null);\n\n protected onChange: (value: any) => void = () => {};\n protected onTouched: () => void = () => {};\n\n readonly processedOptions = computed(() => {\n const opts = this.options();\n const labelKey = this.optionLabel();\n const valueKey = this.optionValue();\n\n return opts.map((opt) => {\n if (typeof opt === 'string') {\n return { label: opt, value: opt };\n }\n return {\n label: opt[labelKey],\n value: opt[valueKey],\n };\n });\n });\n\n writeValue(value: any): void {\n this.value.set(value);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n // Disabled state is handled via the [disabled] input binding in the template\n }\n\n onSelectChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const indexStr = target.value;\n\n if (indexStr === '') {\n this.value.set(null);\n this.onChange(null);\n } else {\n const index = parseInt(indexStr, 10);\n const selectedOption = this.processedOptions()[index];\n\n if (selectedOption) {\n this.value.set(selectedOption.value);\n this.onChange(selectedOption.value);\n }\n }\n this.onTouched();\n }\n\n protected isSelected(optValue: any): boolean {\n return JSON.stringify(this.value()) === JSON.stringify(optValue);\n }\n}\n","<div class=\"helix-select-wrapper\">\n <select\n class=\"helix-select\"\n [disabled]=\"disabled()\"\n (change)=\"onSelectChange($event)\"\n (blur)=\"onTouched()\"\n >\n @if (placeholder()) {\n <option value=\"\" [selected]=\"value() === null\">{{ placeholder() }}</option>\n }\n @for (opt of processedOptions(); track $index) {\n <option\n [value]=\"$index\"\n [selected]=\"isSelected(opt.value)\"\n >\n {{ opt.label }}\n </option>\n }\n </select>\n <i class=\"helix-select-icon pi pi-chevron-down\"></i>\n</div>\n","import { InjectionToken } from '@angular/core';\n\nexport interface HelixBreadcrumb {\n label: string;\n route?: string;\n}\n\nexport const HELIX_BREADCRUMB = new InjectionToken<HelixBreadcrumb[]>('HELIX_BREADCRUMB', {\n factory: () => [],\n});\n","import type { ActivatedRoute } from '@angular/router';\nimport type { MenuItem } from '@gravionlabs/helix-core/api';\n\nexport function helixBreadcrumbsFromRoutes(route: ActivatedRoute): MenuItem[] {\n let deepest: ActivatedRoute | null = route;\n while (deepest.firstChild) {\n deepest = deepest.firstChild;\n }\n\n const breadcrumbs: MenuItem[] = [];\n const routePath: { url: string; snapshot: typeof route.snapshot }[] = [];\n\n let current: ActivatedRoute | null = deepest;\n while (current) {\n const url = current.snapshot.url.map((s) => s.path).join('/');\n routePath.push({ url, snapshot: current.snapshot });\n current = current.parent;\n }\n\n let accumulatedUrl = '';\n for (const { url, snapshot } of routePath.reverse()) {\n if (url) {\n accumulatedUrl = accumulatedUrl ? `${accumulatedUrl}/${url}` : url;\n }\n\n const breadcrumb = snapshot.data?.['breadcrumb'];\n if (!breadcrumb) continue;\n\n const label = typeof breadcrumb === 'function' ? breadcrumb(snapshot) : breadcrumb;\n\n if (accumulatedUrl) {\n breadcrumbs.push({ label, routerLink: `/${accumulatedUrl}` });\n } else {\n breadcrumbs.push({ label });\n }\n }\n\n return breadcrumbs;\n}\n","import { computed, DestroyRef, effect, inject } from '@angular/core';\nimport {\n patchState,\n signalStore,\n withComputed,\n withHooks,\n withMethods,\n withState,\n} from '@ngrx/signals';\nimport type { LayoutConfig, LayoutState, MenuMode } from './layout.models';\n\ntype LayoutStoreState = LayoutConfig & LayoutState;\n\n/** Mobile breakpoint: above this width the rail is static and collapsible, below it is a drawer. */\nconst DESKTOP_MIN_WIDTH = 992;\nconst COLLAPSED_STORAGE_KEY = 'helix.nav-rail.collapsed';\n\nconst isDesktopViewport = () =>\n typeof window === 'undefined' || window.innerWidth >= DESKTOP_MIN_WIDTH;\n\nfunction readCollapsed(): boolean {\n try {\n return localStorage.getItem(COLLAPSED_STORAGE_KEY) === 'true';\n } catch {\n return false;\n }\n}\n\nfunction writeCollapsed(collapsed: boolean): void {\n try {\n localStorage.setItem(COLLAPSED_STORAGE_KEY, String(collapsed));\n } catch {\n // Storage unavailable (private mode, blocked): the state just isn't remembered.\n }\n}\n\nconst initialState: LayoutStoreState = {\n // Config\n preset: 'Helix',\n primary: null,\n surface: null,\n darkTheme: false,\n menuMode: 'static',\n // State\n staticMenuDesktopInactive: false,\n overlayMenuActive: false,\n configSidebarVisible: false,\n mobileMenuActive: false,\n menuHoverActive: false,\n activePath: null,\n sidebarCollapsed: false,\n desktop: true,\n expandedKeys: [],\n};\n\nexport const LayoutStore = signalStore(\n { providedIn: 'root' },\n withState<LayoutStoreState>(initialState),\n withComputed((store) => ({\n isDarkTheme: computed(() => store.darkTheme()),\n isOverlay: computed(() => store.menuMode() === 'overlay'),\n isStatic: computed(() => store.menuMode() === 'static'),\n isSidebarActive: computed(() => store.overlayMenuActive() || store.mobileMenuActive()),\n /** Icon-only rail. Only applies on desktop — the mobile drawer always shows labels. */\n isCollapsed: computed(() => store.sidebarCollapsed() && store.desktop()),\n })),\n withMethods((store) => ({\n toggleDarkMode(): void {\n patchState(store, { darkTheme: !store.darkTheme() });\n },\n setMenuMode(menuMode: MenuMode): void {\n patchState(store, { menuMode });\n },\n showConfigSidebar(): void {\n patchState(store, { configSidebarVisible: true });\n },\n hideConfigSidebar(): void {\n patchState(store, { configSidebarVisible: false });\n },\n onMenuToggle(): void {\n if (store.menuMode() === 'overlay') {\n patchState(store, { overlayMenuActive: !store.overlayMenuActive() });\n }\n if (window.innerWidth > 991) {\n // Desktop: the rail is never hidden completely, the toggle collapses it to icons.\n if (store.menuMode() === 'static') {\n const sidebarCollapsed = !store.sidebarCollapsed();\n patchState(store, { sidebarCollapsed });\n writeCollapsed(sidebarCollapsed);\n }\n } else {\n patchState(store, { mobileMenuActive: !store.mobileMenuActive() });\n }\n },\n closeMobileMenu(): void {\n patchState(store, {\n overlayMenuActive: false,\n mobileMenuActive: false,\n menuHoverActive: false,\n });\n },\n setActivePath(activePath: string | null): void {\n patchState(store, { activePath });\n },\n setExpanded(key: string, expanded: boolean): void {\n const keys = store.expandedKeys();\n if (keys.includes(key) === expanded) return;\n patchState(store, {\n expandedKeys: expanded ? [...keys, key] : keys.filter((k) => k !== key),\n });\n },\n toggleSidebar(): void {\n const sidebarCollapsed = !store.sidebarCollapsed();\n patchState(store, { sidebarCollapsed });\n writeCollapsed(sidebarCollapsed);\n },\n setMenuHoverActive(menuHoverActive: boolean): void {\n patchState(store, { menuHoverActive });\n },\n updateConfig(config: Partial<LayoutConfig>): void {\n patchState(store, config);\n },\n setPreset(preset: string): void {\n patchState(store, { preset });\n },\n setPrimary(primary: string | null): void {\n patchState(store, { primary });\n },\n setSurface(surface: string | null): void {\n patchState(store, { surface });\n },\n isDesktop(): boolean {\n return window.innerWidth > 991;\n },\n setDesktop(desktop: boolean): void {\n patchState(store, { desktop });\n },\n reset(): void {\n patchState(store, { ...initialState, desktop: isDesktopViewport() });\n },\n })),\n withHooks({\n onInit(store) {\n patchState(store, { sidebarCollapsed: readCollapsed(), desktop: isDesktopViewport() });\n if (typeof window !== 'undefined') {\n const onResize = () => store.setDesktop(isDesktopViewport());\n window.addEventListener('resize', onResize);\n inject(DestroyRef).onDestroy(() => window.removeEventListener('resize', onResize));\n }\n\n effect(() => {\n const isDark = store.darkTheme();\n const supportsViewTransition = 'startViewTransition' in document;\n\n const applyDarkMode = () => {\n if (isDark) {\n document.documentElement.classList.add('app-dark');\n } else {\n document.documentElement.classList.remove('app-dark');\n }\n };\n\n if (supportsViewTransition) {\n (document as any).startViewTransition(() => applyDarkMode());\n } else {\n applyDarkMode();\n }\n });\n },\n }),\n);\n","import { CommonModule } from '@angular/common';\nimport {\n type AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n inject,\n input,\n signal,\n untracked,\n} from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { HxTooltip } from '@gravionlabs/helix-ui';\nimport type { HelixRouteMenuItem } from '../../route-menu.model';\nimport { LayoutStore } from '../../store/layout.store';\n\n/**\n * Whether the active URL matches an item path on a whole-segment boundary,\n * so `uikit/dynamicform` does not match `uikit/dynamicform-advanced` but\n * still matches child routes, query params and fragments.\n */\nfunction isPathActive(activePath: string, itemPath: string): boolean {\n if (!itemPath || !activePath.startsWith(itemPath)) return false;\n const next = activePath[itemPath.length];\n return next === undefined || next === '/' || next === '?' || next === '#' || next === ';';\n}\n\n@Component({\n selector: '[helix-nav-rail-item]',\n standalone: true,\n imports: [CommonModule, RouterModule, RippleModule, HxTooltip],\n templateUrl: './nav-rail-item.html',\n styleUrl: './nav-rail-item.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n '[class.helix-nav-rail-item-expanded]': 'isExpanded()',\n '[class.helix-nav-rail-item-collapsed]': 'isCollapsed()',\n '(mouseenter)': 'openFlyout()',\n '(mouseleave)': 'scheduleFlyoutClose()',\n '(focusin)': 'openFlyout()',\n '(focusout)': 'onFocusOut($event)',\n '(keydown.escape)': 'closeFlyout(true)',\n },\n})\nexport class HelixNavRailItem implements AfterViewInit {\n store = inject(LayoutStore);\n\n item = input<HelixRouteMenuItem | null>(null);\n parentPath = input<string | null>(null);\n depth = input(0);\n\n /** Renders inside a collapsed-rail flyout: always expanded (labels visible), never itself a flyout. */\n flyout = input(false);\n\n /** Whether this item's submenu, having animated open at least once, may transition on leave too. */\n initialized = signal(false);\n\n hasChildren = computed(() => !!this.item()?.items?.length);\n isCollapsed = computed(() => this.store.isCollapsed() && !this.flyout());\n\n /** Collapsed rail: the item's children are shown in a flyout next to it. */\n flyoutOpen = signal(false);\n flyoutTop = signal(0);\n flyoutLeft = signal(0);\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n #suppressOpen = false;\n #closeTimer: ReturnType<typeof setTimeout> | undefined;\n\n /** Stable key used against LayoutStore.expandedKeys() — several items can be expanded at once. */\n itemKey = computed(() => {\n const ownPath = this.item()?.path;\n if (ownPath) {\n const parent = this.parentPath();\n if (parent && !ownPath.startsWith(parent)) {\n return `${parent}/${ownPath}`;\n }\n return ownPath;\n }\n const label = this.item()?.label ?? '';\n const parent = this.parentPath();\n return parent ? `${parent}/${label}` : label;\n });\n\n fullPath = computed(() => {\n const itemPath = this.item()?.path;\n if (itemPath == null) return this.parentPath();\n const parent = this.parentPath();\n if (parent && !itemPath.startsWith(parent)) {\n return `${parent}/${itemPath}`;\n }\n return itemPath;\n });\n\n isActive = computed(() => {\n if (this.hasChildren()) return false;\n const itemPath = this.item()?.path;\n if (itemPath == null) return false;\n const normalizedPath = this.store.activePath()?.replace(/^\\//, '') ?? '';\n const normalizedFull = (this.fullPath() ?? '').replace(/^\\//, '');\n return isPathActive(normalizedPath, normalizedFull);\n });\n\n hasActiveDescendant = computed(() => {\n const normalized = this.store.activePath()?.replace(/^\\//, '') ?? '';\n const items = this.item()?.items;\n if (!items) return false;\n\n const parentFullPath = (this.fullPath() ?? '').replace(/^\\//, '');\n\n const match = (list: HelixRouteMenuItem[], prefix: string): boolean =>\n list.some((child) => {\n const childFullPath = child.path\n ? prefix\n ? `${prefix}/${child.path.replace(/^\\//, '')}`\n : child.path.replace(/^\\//, '')\n : prefix;\n if (childFullPath && isPathActive(normalized, childFullPath)) {\n return true;\n }\n return child.items ? match(child.items, childFullPath) : false;\n });\n\n return match(items, parentFullPath);\n });\n\n isExpanded = computed(() => this.store.expandedKeys().includes(this.itemKey()));\n\n constructor() {\n // Navigating (or expanding the rail) always dismisses an open flyout.\n effect(() => {\n this.store.activePath();\n this.isCollapsed();\n untracked(() => this.closeFlyout(false));\n });\n\n // The group holding the active route opens itself on navigation; the user can still collapse it.\n effect(() => {\n if (this.hasActiveDescendant()) {\n const key = this.itemKey();\n untracked(() => this.store.setExpanded(key, true));\n }\n });\n }\n\n ngAfterViewInit() {\n setTimeout(() => this.initialized.set(true));\n }\n\n itemClick(event: Event) {\n const item = this.item();\n if (item?.disabled) {\n event.preventDefault();\n return;\n }\n if (item?.command) {\n item.command({ originalEvent: event, item });\n }\n if (this.hasChildren()) {\n event.preventDefault();\n if (this.isCollapsed()) {\n this.flyoutOpen() ? this.closeFlyout(false) : this.openFlyout();\n } else {\n this.store.setExpanded(this.itemKey(), !this.isExpanded());\n }\n } else {\n this.store.closeMobileMenu();\n }\n }\n\n openFlyout() {\n if (this.#suppressOpen || !this.isCollapsed() || !this.hasChildren()) return;\n clearTimeout(this.#closeTimer);\n if (this.flyoutOpen()) return;\n const rect = this.#host.nativeElement.getBoundingClientRect();\n this.flyoutTop.set(rect.top);\n // Anchor to the rail's edge (not the padded item) so the flyout sits beside the rail.\n const rail = this.#host.nativeElement.closest('.helix-nav-rail');\n this.flyoutLeft.set((rail?.getBoundingClientRect().right ?? rect.right) + 4);\n this.flyoutOpen.set(true);\n // Keep the flyout inside the viewport once it has rendered.\n setTimeout(() => {\n const el = this.#host.nativeElement.querySelector<HTMLElement>('.helix-nav-rail-flyout');\n if (!el) return;\n const overflow = el.getBoundingClientRect().bottom - (window.innerHeight - 8);\n if (overflow > 0) this.flyoutTop.set(Math.max(8, rect.top - overflow));\n });\n }\n\n closeFlyout(restoreFocus: boolean) {\n clearTimeout(this.#closeTimer);\n if (!this.flyoutOpen()) return;\n this.flyoutOpen.set(false);\n if (restoreFocus)\n this.#host.nativeElement.querySelector<HTMLElement>('.helix-nav-rail-link')?.focus();\n }\n\n scheduleFlyoutClose() {\n clearTimeout(this.#closeTimer);\n this.#closeTimer = setTimeout(() => this.closeFlyout(false), 120);\n }\n\n onFocusOut(event: FocusEvent) {\n const next = event.relatedTarget as Node | null;\n if (!next || !this.#host.nativeElement.contains(next)) this.closeFlyout(false);\n }\n\n /** Enter/Space activate expandable items; arrow keys move between visible links. */\n onKeydown(event: KeyboardEvent) {\n const link = event.currentTarget as HTMLElement;\n switch (event.key) {\n case 'Enter':\n case ' ':\n if (this.hasChildren()) {\n event.preventDefault();\n this.itemClick(event);\n }\n break;\n case 'ArrowDown':\n case 'ArrowUp': {\n const links = Array.from(\n (\n link.closest('nav') ??\n link.parentElement?.parentElement ??\n document\n ).querySelectorAll<HTMLElement>('.helix-nav-rail-link'),\n );\n const next = links[links.indexOf(link) + (event.key === 'ArrowDown' ? 1 : -1)];\n if (next) {\n event.preventDefault();\n next.focus();\n }\n break;\n }\n case 'ArrowRight':\n if (this.hasChildren() && this.isCollapsed()) {\n event.preventDefault();\n this.openFlyout();\n } else if (this.hasChildren() && !this.isExpanded()) {\n event.preventDefault();\n this.store.setExpanded(this.itemKey(), true);\n }\n break;\n case 'ArrowLeft':\n if (this.hasChildren() && this.isExpanded()) {\n event.preventDefault();\n this.store.setExpanded(this.itemKey(), false);\n }\n break;\n }\n }\n}\n","@if (hasChildren()) {\n <a\n class=\"helix-nav-rail-link\"\n [attr.title]=\"isCollapsed() ? null : $safeNavigationMigration(item()?.label)\"\n [attr.aria-expanded]=\"isCollapsed() ? flyoutOpen() : isExpanded()\"\n [attr.aria-haspopup]=\"isCollapsed() ? 'true' : null\"\n role=\"button\"\n (click)=\"itemClick($event)\"\n (keydown)=\"onKeydown($event)\"\n tabindex=\"0\"\n hRipple\n >\n @if (item()?.icon) {\n <i [ngClass]=\"$safeNavigationMigration(item()?.icon)\" class=\"helix-nav-rail-icon\"></i>\n }\n @if (!isCollapsed()) {\n <span class=\"helix-nav-rail-label\">{{ item()?.label }}</span>\n <i\n class=\"pi pi-chevron-right helix-nav-rail-chevron\"\n [class.helix-nav-rail-chevron-open]=\"isExpanded()\"\n ></i>\n }\n </a>\n @if (isCollapsed() && flyoutOpen()) {\n <div class=\"helix-nav-rail-flyout\" [style.top.px]=\"flyoutTop()\" [style.left.px]=\"flyoutLeft()\">\n <div class=\"helix-nav-rail-flyout-title\">{{ item()?.label }}</div>\n <ul class=\"helix-nav-rail-flyout-list\">\n @for (child of item()?.items; track child.label) {\n <li\n helix-nav-rail-item\n [item]=\"child\"\n [parentPath]=\"fullPath()\"\n [depth]=\"0\"\n [flyout]=\"true\"\n ></li>\n }\n </ul>\n </div>\n }\n @if (isExpanded() && !isCollapsed()) {\n <ul\n class=\"helix-nav-rail-sublist\"\n [animate.enter]=\"initialized() ? 'helix-nav-rail-submenu-enter' : null\"\n [animate.leave]=\"'helix-nav-rail-submenu-leave'\"\n >\n @for (child of item()?.items; track child.label) {\n <li helix-nav-rail-item [item]=\"child\" [parentPath]=\"fullPath()\" [depth]=\"depth() + 1\"></li>\n }\n </ul>\n }\n} @else {\n <a\n class=\"helix-nav-rail-link\"\n [class.active]=\"isActive()\"\n [attr.aria-current]=\"isActive() ? 'page' : null\"\n [attr.title]=\"isCollapsed() ? null : $safeNavigationMigration(item()?.label)\"\n [hx-tooltip]=\"$safeNavigationMigration(item()?.label)\"\n [hxTooltipDisabled]=\"!isCollapsed()\"\n hxTooltipPosition=\"right\"\n [routerLink]=\"$safeNavigationMigration(item()?.routerLink)\"\n (click)=\"itemClick($event)\"\n (keydown)=\"onKeydown($event)\"\n tabindex=\"0\"\n hRipple\n >\n @if (isActive() && !isCollapsed()) {\n <span class=\"helix-nav-rail-accent\"></span>\n }\n @if (item()?.icon) {\n <i [ngClass]=\"$safeNavigationMigration(item()?.icon)\" class=\"helix-nav-rail-icon\"></i>\n }\n @if (!isCollapsed()) {\n <span class=\"helix-nav-rail-label\">{{ item()?.label }}</span>\n }\n </a>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n effect,\n inject,\n input,\n type OnDestroy,\n type OnInit,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, Subject, takeUntil } from 'rxjs';\nimport { LayoutStore } from '../../store/layout.store';\nimport { HelixNavRailItem } from '../nav-rail-item/nav-rail-item';\nimport type { HelixNavGroup } from './nav-rail.model';\n\n@Component({\n selector: 'helix-nav-rail',\n standalone: true,\n imports: [CommonModule, HelixNavRailItem, RouterModule],\n templateUrl: './nav-rail.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './nav-rail.scss',\n})\nexport class HelixNavRail implements OnInit, OnDestroy {\n store = inject(LayoutStore);\n router = inject(Router);\n el = inject(ElementRef);\n private sanitizer = inject(DomSanitizer);\n\n /** Grouped navigation model. Each group renders an optional uppercase section label. */\n model = input<HelixNavGroup[]>([]);\n\n /** Application title shown in the brand area. Hidden when nav is collapsed. */\n appTitle = input<string>('Helix');\n\n /**\n * Brand icon: inline SVG (`<svg>…</svg>`) or URL to an SVG file.\n * Falls back to the default hardcoded icon when not provided.\n */\n brandIcon = input<string>();\n\n protected isInlineSvg = computed(() => this.brandIcon()?.trim().startsWith('<svg') ?? false);\n\n protected safeBrandIcon = computed(() => {\n const icon = this.brandIcon();\n if (!icon) return null;\n if (this.isInlineSvg()) {\n return this.sanitizer.bypassSecurityTrustHtml(icon);\n }\n return icon;\n });\n\n private outsideClickListener: ((event: MouseEvent) => void) | null = null;\n private destroy$ = new Subject<void>();\n\n constructor() {\n effect(() => {\n if (this.store.isDesktop()) {\n if (this.store.overlayMenuActive()) {\n this.bindOutsideClickListener();\n } else {\n this.unbindOutsideClickListener();\n }\n } else {\n if (this.store.mobileMenuActive()) {\n this.bindOutsideClickListener();\n } else {\n this.unbindOutsideClickListener();\n }\n }\n });\n }\n\n ngOnInit() {\n this.router.events\n .pipe(\n filter((event) => event instanceof NavigationEnd),\n takeUntil(this.destroy$),\n )\n .subscribe((event) => {\n const navEvent = event as NavigationEnd;\n this.onRouteChange(navEvent.urlAfterRedirects);\n });\n this.onRouteChange(this.router.url);\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n this.unbindOutsideClickListener();\n }\n\n private onRouteChange(path: string) {\n this.store.setActivePath(path);\n this.store.closeMobileMenu();\n }\n\n private bindOutsideClickListener() {\n if (!this.outsideClickListener) {\n this.outsideClickListener = (event: MouseEvent) => {\n if (this.isOutsideClicked(event)) {\n this.store.closeMobileMenu();\n }\n };\n document.addEventListener('click', this.outsideClickListener);\n }\n }\n\n private unbindOutsideClickListener() {\n if (this.outsideClickListener) {\n document.removeEventListener('click', this.outsideClickListener);\n this.outsideClickListener = null;\n }\n }\n\n private isOutsideClicked(event: MouseEvent): boolean {\n const topbarButtonEl = document.querySelector('.topbar-start > button');\n const railEl = this.el.nativeElement;\n return !(\n railEl?.isSameNode(event.target as Node) ||\n railEl?.contains(event.target as Node) ||\n topbarButtonEl?.isSameNode(event.target as Node) ||\n topbarButtonEl?.contains(event.target as Node)\n );\n }\n}\n","<aside class=\"helix-nav-rail\" [class.helix-nav-rail-collapsed]=\"store.isCollapsed()\">\n <div class=\"helix-nav-rail-brand\">\n <a routerLink=\"/\">\n @if (brandIcon(); as icon) {\n @if (isInlineSvg()) {\n <span [innerHTML]=\"safeBrandIcon()\"></span>\n } @else {\n <img [src]=\"icon\" alt=\"\" width=\"24\" height=\"24\" />\n }\n } @else {\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"var(--primary-color)\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"m10 16 1.5 1.5\" />\n <path d=\"m14 8-1.5-1.5\" />\n <path d=\"M15 2c-1.798 1.998-2.518 3.995-2.807 5.993\" />\n <path d=\"m16.5 10.5 1 1\" />\n <path d=\"m17 6-2.891-2.891\" />\n <path d=\"M2 15c6.667-6 13.333 0 20-6\" />\n <path d=\"m20 9 .891.891\" />\n <path d=\"M3.109 14.109 4 15\" />\n <path d=\"m6.5 12.5 1 1\" />\n <path d=\"m7 18 2.891 2.891\" />\n <path d=\"M9 22c1.798-1.998 2.518-3.995 2.807-5.993\" />\n </svg>\n }\n @if (!store.isCollapsed()) {\n <span class=\"helix-nav-rail-brand-text\">\n <span>{{ appTitle() }}</span>\n </span>\n }\n </a>\n </div>\n\n <nav class=\"helix-nav-rail-nav\">\n @for (group of model(); track group.section ?? $index) {\n <div class=\"helix-nav-rail-group\">\n @if (group.section && !store.isCollapsed()) {\n <div class=\"helix-nav-rail-section\">{{ group.section }}</div>\n }\n @if (group.section && store.isCollapsed() && $index > 0) {\n <div class=\"helix-nav-rail-divider\"></div>\n }\n <ul class=\"helix-nav-rail-list\">\n @if (store.isCollapsed() && group.section && group.icon) {\n <li\n helix-nav-rail-item\n [item]=\"{ label: group.section, icon: group.icon, items: group.items }\"\n [parentPath]=\"null\"\n [depth]=\"0\"\n ></li>\n } @else {\n @for (item of group.items; track item.label) {\n <li helix-nav-rail-item [item]=\"item\" [parentPath]=\"null\" [depth]=\"0\"></li>\n }\n }\n </ul>\n </div>\n }\n </nav>\n\n <div class=\"helix-nav-rail-footer\">\n <button\n type=\"button\"\n class=\"helix-nav-rail-collapse-button\"\n (click)=\"store.toggleSidebar()\"\n [title]=\"store.isCollapsed() ? 'Expand navigation' : 'Collapse navigation'\"\n [attr.aria-label]=\"store.isCollapsed() ? 'Expand navigation' : 'Collapse navigation'\"\n [attr.aria-expanded]=\"!store.isCollapsed()\"\n >\n <i\n class=\"pi\"\n [ngClass]=\"{\n 'pi-angle-double-left': !store.isCollapsed(),\n 'pi-angle-double-right': store.isCollapsed(),\n }\"\n ></i>\n </button>\n </div>\n</aside>\n","import type { HelixRouteMenuItem } from '../../route-menu.model';\n\n/**\n * A group of nav-rail items under an optional uppercase section label.\n * Reuses HelixRouteMenuItem for items so existing routerLink/path-driven\n * active state, breadcrumbs, and route generation keep working unchanged.\n */\nexport interface HelixNavGroup {\n /** Uppercase section label shown above the items. Omit for an unlabeled group. */\n section?: string;\n /** Icon of the section. In the collapsed rail the section becomes one icon with a flyout of its items. */\n icon?: string;\n items: HelixRouteMenuItem[];\n}\n\n/** How a flat menu is mapped onto the nav rail. */\nexport type HelixNavStyle = 'sections' | 'tree';\n\n/**\n * Adapts a flat HelixRouteMenuItem tree (as used by HelixAppLayout's `menu`\n * input) into HelixNavGroup[].\n *\n * - `'sections'` (default): every top-level item with children becomes an\n * uppercase section whose children are listed directly; consecutive\n * top-level items without children form one unlabeled group. Deeper levels\n * still expand inline.\n * - `'tree'`: the whole menu is one unlabeled group, so each top-level item\n * with children renders as an expandable HelixNavRailItem.\n */\nexport function helixNavGroupsFromMenu(\n items: HelixRouteMenuItem[],\n style: HelixNavStyle = 'sections',\n): HelixNavGroup[] {\n if (style === 'tree') return [{ items }];\n\n const groups: HelixNavGroup[] = [];\n let plain: HelixRouteMenuItem[] = [];\n const flushPlain = () => {\n if (plain.length) groups.push({ items: plain });\n plain = [];\n };\n\n for (const item of items) {\n if (item.items?.length) {\n flushPlain();\n groups.push({ section: item.label, icon: item.icon, items: item.items });\n } else {\n plain.push(item);\n }\n }\n flushPlain();\n return groups;\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type BadgeSeverity = 'info' | 'warn' | 'error' | 'success';\n\n@Component({\n selector: 'helix-badge',\n standalone: true,\n template: `\n <span\n class=\"helix-badge\"\n [class.helix-badge--sm]=\"size() === 'sm'\"\n [class.helix-badge--info]=\"severity() === 'info'\"\n [class.helix-badge--warn]=\"severity() === 'warn'\"\n [class.helix-badge--error]=\"severity() === 'error'\"\n [class.helix-badge--success]=\"severity() === 'success'\"\n >\n @if (icon(); as icn) {\n <i [class]=\"icn\"></i>\n }\n @if (label(); as lbl) {\n <span class=\"helix-badge__label\">{{ lbl }}</span>\n }\n </span>\n `,\n changeDetection: ChangeDetectionStrategy.Eager,\n styles: [\n `\n .helix-badge {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n padding: 0.25rem 0.5rem;\n border-radius: 9999px;\n font-size: 0.75rem;\n font-weight: 600;\n line-height: 1;\n white-space: nowrap;\n }\n .helix-badge--sm {\n padding: 0.125rem 0.375rem;\n font-size: 0.625rem;\n }\n .helix-badge--info {\n background-color: var(--badge-bg, var(--h-info-100, #e0f2fe));\n color: var(--badge-color, var(--h-info-700, #0369a1));\n }\n .helix-badge--warn {\n background-color: var(--badge-bg, var(--h-warn-100, #fef3c7));\n color: var(--badge-color, var(--h-warn-700, #b45309));\n }\n .helix-badge--error {\n background-color: var(--badge-bg, var(--h-error-100, #fce4ec));\n color: var(--badge-color, var(--h-error-700, #c62828));\n }\n .helix-badge--success {\n background-color: var(--badge-bg, var(--h-success-100, #dcfce7));\n color: var(--badge-color, var(--h-success-700, #15803d));\n }\n `,\n ],\n})\nexport class HelixBadge {\n severity = input.required<BadgeSeverity>();\n label = input<string>();\n icon = input<string>();\n size = input<'sm' | 'md'>('md');\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport type { BadgeSeverity } from './badge';\nimport { HelixBadge } from './badge';\n\nexport type Environment = 'development' | 'testing' | 'staging' | 'production';\n\nconst ENV_MAP: Record<Environment, { severity: BadgeSeverity; icon: string; label: string }> = {\n development: { severity: 'success', icon: 'pi pi-code', label: 'Development' },\n testing: { severity: 'info', icon: 'pi pi-flask', label: 'Testing' },\n staging: { severity: 'warn', icon: 'pi pi-layers', label: 'Staging' },\n production: { severity: 'error', icon: 'pi pi-verified', label: 'Production' },\n};\n\nconst DEFAULT_ENV = { severity: 'info' as BadgeSeverity, icon: 'pi pi-question', label: 'Unknown' };\n\n@Component({\n selector: 'helix-environment-badge',\n standalone: true,\n imports: [HelixBadge],\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n <helix-badge\n [severity]=\"mapped().severity\"\n [icon]=\"mapped().icon\"\n [label]=\"mapped().label\"\n />\n `,\n})\nexport class HelixEnvironmentBadge {\n environment = input.required<Environment>();\n\n protected mapped = computed(() => ENV_MAP[this.environment()] ?? DEFAULT_ENV);\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport type { Environment } from '../../../ui/badge/environment-badge';\nimport { HelixEnvironmentBadge } from '../../../ui/badge/environment-badge';\nimport type { HelixStatusBarTone, HelixStatusBarVersion } from './status-bar.model';\n\nconst TONE_BG: Record<HelixStatusBarTone, string> = {\n staging: 'var(--h-amber-600, #d97706)',\n production: 'var(--h-surface-800, #1e293b)',\n success: 'var(--h-green-600, #16a34a)',\n danger: 'var(--h-red-600, #dc2626)',\n neutral: 'var(--helix-surface-chrome, var(--surface-card))',\n};\n\nconst TONE_TEXT: Record<HelixStatusBarTone, string> = {\n staging: '#fff',\n production: '#fff',\n success: '#fff',\n danger: '#fff',\n neutral: 'var(--text-color)',\n};\n\n@Component({\n selector: 'helix-status-bar',\n standalone: true,\n imports: [HelixEnvironmentBadge],\n templateUrl: './status-bar.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './status-bar.scss',\n})\nexport class HelixStatusBar {\n brand = input('');\n environment = input<string | undefined>();\n note = input<string | undefined>();\n versions = input<HelixStatusBarVersion[]>([]);\n tone = input<HelixStatusBarTone>('neutral');\n height = input<string>('var(--helix-status-bar-height, 3rem)');\n\n protected envForBadge = computed(() => this.environment() as Environment | undefined);\n protected bgColor = computed(() => TONE_BG[this.tone()]);\n protected textColor = computed(() => TONE_TEXT[this.tone()]);\n}\n","<div\n class=\"helix-status-bar\"\n [style.height]=\"height()\"\n [style.background-color]=\"bgColor()\"\n [style.color]=\"textColor()\"\n>\n <span class=\"helix-status-bar-brand\">{{ brand() }}</span>\n\n @if (envForBadge(); as env) {\n <helix-environment-badge [environment]=\"env\" />\n }\n\n @if (note(); as n) {\n <span class=\"helix-status-bar-note\">{{ n }}</span>\n }\n\n <div class=\"helix-status-bar-versions\">\n @for (ver of versions(); track ver.label) {\n <span class=\"helix-status-bar-version\">\n <span class=\"helix-status-bar-version-label\">{{ ver.label }}:</span>\n <span class=\"helix-status-bar-version-value\">{{ ver.value }}</span>\n </span>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nexport interface AlertItem {\n id: string;\n label: string;\n severity: string;\n route?: string;\n}\n\n@Component({\n selector: 'helix-alert-action',\n standalone: true,\n imports: [RouterModule],\n templateUrl: './alert-action.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './alert-action.scss',\n})\nexport class HelixAlertAction {\n count = input.required<number>();\n alerts = input<AlertItem[]>();\n protected open = signal(false);\n}\n","<button type=\"button\" class=\"alert-badge-trigger\" (click)=\"open.set(!open())\" (blur)=\"open.set(false)\">\n <i class=\"pi pi-bell\"></i>\n @if (count() > 0) {\n <span class=\"alert-badge-count\">{{ count() }}</span>\n }\n</button>\n@if (open() && alerts() && alerts()!.length > 0) {\n <div class=\"alert-badge-dropdown\">\n @for (alert of alerts(); track alert.id) {\n <a\n class=\"alert-badge-item\"\n [class.alert-badge-item--warn]=\"alert.severity === 'warn'\"\n [class.alert-badge-item--error]=\"alert.severity === 'error'\"\n [class.alert-badge-item--success]=\"alert.severity === 'success'\"\n [routerLink]=\"alert.route || undefined\"\n >\n <span class=\"alert-badge-dot\"></span>\n <span class=\"alert-badge-label\">{{ alert.label }}</span>\n </a>\n }\n </div>\n}\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n type OnInit,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { HelixConfig } from '@gravionlabs/helix-core/config';\nimport { $t, updatePreset, updateSurfacePalette } from '@gravionlabs/helix-core/themes';\nimport { auraPreset } from '@gravionlabs/helix-core/themes/aura';\nimport { helixPreset } from '@gravionlabs/helix-core/themes/helix';\nimport { laraPreset } from '@gravionlabs/helix-core/themes/lara';\nimport { noraPreset } from '@gravionlabs/helix-core/themes/nora';\nimport { HxSelectButton } from '@gravionlabs/helix-ui';\nimport { LayoutStore } from '../../store/layout.store';\n\nconst presets = {\n Helix: helixPreset,\n Aura: auraPreset,\n Lara: laraPreset,\n Nora: noraPreset,\n} as const;\n\ndeclare type KeyOfType<T> = keyof T extends infer U ? U : never;\n\ndeclare type SurfacesType = {\n name?: string;\n palette?: {\n 0?: string;\n 50?: string;\n 100?: string;\n 200?: string;\n 300?: string;\n 400?: string;\n 500?: string;\n 600?: string;\n 700?: string;\n 800?: string;\n 900?: string;\n 950?: string;\n };\n};\n\n@Component({\n selector: 'helix-configurator',\n standalone: true,\n imports: [CommonModule, FormsModule, HxSelectButton],\n templateUrl: './configurator.html',\n styleUrl: './configurator.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n class:\n 'hidden absolute top-13 right-0 w-72 p-4 bg-surface-0 dark:bg-surface-900 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]',\n },\n})\nexport class HelixConfigurator implements OnInit {\n router = inject(Router);\n primeng = inject(HelixConfig);\n store = inject(LayoutStore);\n platformId = inject(PLATFORM_ID);\n\n presetOptions = Object.keys(presets);\n showMenuModeButton = signal(!this.router.url.includes('auth'));\n menuModeOptions = [\n { label: 'Static', value: 'static' },\n { label: 'Overlay', value: 'overlay' },\n ];\n\n surfaces: SurfacesType[] = [\n {\n name: 'slate',\n palette: {\n 0: '#ffffff',\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n },\n },\n {\n name: 'gray',\n palette: {\n 0: '#ffffff',\n 50: '#f9fafb',\n 100: '#f3f4f6',\n 200: '#e5e7eb',\n 300: '#d1d5db',\n 400: '#9ca3af',\n 500: '#6b7280',\n 600: '#4b5563',\n 700: '#374151',\n 800: '#1f2937',\n 900: '#111827',\n 950: '#030712',\n },\n },\n {\n name: 'zinc',\n palette: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b',\n },\n },\n {\n name: 'neutral',\n palette: {\n 0: '#ffffff',\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#e5e5e5',\n 300: '#d4d4d4',\n 400: '#a3a3a3',\n 500: '#737373',\n 600: '#525252',\n 700: '#404040',\n 800: '#262626',\n 900: '#171717',\n 950: '#0a0a0a',\n },\n },\n {\n name: 'stone',\n palette: {\n 0: '#ffffff',\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d6d3d1',\n 400: '#a8a29e',\n 500: '#78716c',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n 950: '#0c0a09',\n },\n },\n {\n name: 'soho',\n palette: {\n 0: '#ffffff',\n 50: '#ececec',\n 100: '#dedfdf',\n 200: '#c4c4c6',\n 300: '#adaeb0',\n 400: '#97979b',\n 500: '#7f8084',\n 600: '#6a6b70',\n 700: '#55565b',\n 800: '#3f4046',\n 900: '#2c2c34',\n 950: '#16161d',\n },\n },\n {\n name: 'viva',\n palette: {\n 0: '#ffffff',\n 50: '#f3f3f3',\n 100: '#e7e7e8',\n 200: '#cfd0d0',\n 300: '#b7b8b9',\n 400: '#9fa1a1',\n 500: '#87898a',\n 600: '#6e7173',\n 700: '#565a5b',\n 800: '#3e4244',\n 900: '#262b2c',\n 950: '#0e1315',\n },\n },\n {\n name: 'ocean',\n palette: {\n 0: '#ffffff',\n 50: '#fbfcfc',\n 100: '#F7F9F8',\n 200: '#EFF3F2',\n 300: '#DADEDD',\n 400: '#B1B7B6',\n 500: '#828787',\n 600: '#5F7274',\n 700: '#415B61',\n 800: '#29444E',\n 900: '#183240',\n 950: '#0c1920',\n },\n },\n ];\n\n selectedPrimaryColor = computed(() => this.store.primary());\n /** The colour in use: the chosen one, else the preset's own (Helix: indigo, the others: emerald). */\n activePrimaryColor = computed(\n () => this.store.primary() ?? (this.store.preset() === 'Helix' ? 'indigo' : 'emerald'),\n );\n selectedSurfaceColor = computed(() => this.store.surface());\n selectedPreset = computed(() => this.store.preset());\n menuMode = computed(() => this.store.menuMode());\n\n primaryColors = computed<SurfacesType[]>(() => {\n const presetPalette = presets[this.store.preset() as KeyOfType<typeof presets>].primitive;\n const colors = [\n 'emerald',\n 'green',\n 'lime',\n 'orange',\n 'amber',\n 'yellow',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose',\n ];\n const palettes: SurfacesType[] = [{ name: 'noir', palette: {} }];\n colors.forEach((color) => {\n palettes.push({\n name: color,\n palette: presetPalette?.[\n color as KeyOfType<typeof presetPalette>\n ] as SurfacesType['palette'],\n });\n });\n return palettes;\n });\n\n ngOnInit() {\n if (isPlatformBrowser(this.platformId)) {\n this.onPresetChange(this.store.preset());\n }\n }\n\n getPresetExt() {\n // No primary chosen: the preset's own (Helix: indigo), nothing to extend.\n if (this.selectedPrimaryColor() === null) return {};\n const color: SurfacesType =\n this.primaryColors().find((c) => c.name === this.selectedPrimaryColor()) || {};\n const preset = this.store.preset();\n\n if (color.name === 'noir') {\n return {\n semantic: {\n primary: {\n 50: '{surface.50}',\n 100: '{surface.100}',\n 200: '{surface.200}',\n 300: '{surface.300}',\n 400: '{surface.400}',\n 500: '{surface.500}',\n 600: '{surface.600}',\n 700: '{surface.700}',\n 800: '{surface.800}',\n 900: '{surface.900}',\n 950: '{surface.950}',\n },\n colorScheme: {\n light: {\n primary: {\n color: '{primary.950}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.800}',\n activeColor: '{primary.700}',\n },\n highlight: {\n background: '{primary.950}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff',\n },\n },\n dark: {\n primary: {\n color: '{primary.50}',\n contrastColor: '{primary.950}',\n hoverColor: '{primary.200}',\n activeColor: '{primary.300}',\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.300}',\n color: '{primary.950}',\n focusColor: '{primary.950}',\n },\n },\n },\n },\n };\n } else if (preset === 'Helix') {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.600}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.700}',\n activeColor: '{primary.800}',\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.100}',\n color: '{primary.700}',\n focusColor: '{primary.800}',\n },\n },\n dark: {\n primary: {\n color: '{primary.400}',\n contrastColor: '{surface.950}',\n hoverColor: '{primary.300}',\n activeColor: '{primary.200}',\n },\n highlight: {\n background: 'color-mix(in srgb, {primary.400}, transparent 84%)',\n focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)',\n color: 'rgba(255,255,255,.87)',\n focusColor: 'rgba(255,255,255,.87)',\n },\n },\n },\n },\n };\n } else if (preset === 'Nora') {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.600}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.700}',\n activeColor: '{primary.800}',\n },\n highlight: {\n background: '{primary.600}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff',\n },\n },\n dark: {\n primary: {\n color: '{primary.500}',\n contrastColor: '{surface.900}',\n hoverColor: '{primary.400}',\n activeColor: '{primary.300}',\n },\n highlight: {\n background: '{primary.500}',\n focusBackground: '{primary.400}',\n color: '{surface.900}',\n focusColor: '{surface.900}',\n },\n },\n },\n },\n };\n } else {\n return {\n semantic: {\n primary: color.palette,\n colorScheme: {\n light: {\n primary: {\n color: '{primary.500}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.600}',\n activeColor: '{primary.700}',\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.100}',\n color: '{primary.700}',\n focusColor: '{primary.800}',\n },\n },\n dark: {\n primary: {\n color: '{primary.400}',\n contrastColor: '{surface.900}',\n hoverColor: '{primary.300}',\n activeColor: '{primary.200}',\n },\n highlight: {\n background: 'color-mix(in srgb, {primary.400}, transparent 84%)',\n focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)',\n color: 'rgba(255,255,255,.87)',\n focusColor: 'rgba(255,255,255,.87)',\n },\n },\n },\n },\n };\n }\n }\n\n updateColors(event: Event, type: string, color: SurfacesType) {\n if (type === 'primary') {\n this.store.setPrimary(color.name!);\n } else if (type === 'surface') {\n this.store.setSurface(color.name!);\n }\n this.applyTheme(type, color);\n event.stopPropagation();\n }\n\n applyTheme(type: string, color: SurfacesType) {\n if (type === 'primary') {\n updatePreset(this.getPresetExt());\n } else if (type === 'surface') {\n updateSurfacePalette(color.palette);\n }\n }\n\n onPresetChange(event: string) {\n this.store.setPreset(event);\n const preset = presets[event as KeyOfType<typeof presets>];\n const surfacePalette = this.surfaces.find(\n (s) => s.name === this.selectedSurfaceColor(),\n )?.palette;\n $t()\n .preset(preset)\n .preset(this.getPresetExt())\n .surfacePalette(surfacePalette)\n .use({ useDefaultOptions: true });\n }\n\n onMenuModeChange(event: string) {\n this.store.setMenuMode(event as any);\n }\n}\n","<div class=\"flex flex-col gap-4\">\n <div>\n <span class=\"text-sm text-muted-color font-semibold\">Primary</span>\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\n @for (primaryColor of primaryColors(); track primaryColor.name) {\n <button\n type=\"button\"\n [title]=\"primaryColor.name\"\n (click)=\"updateColors($event, 'primary', primaryColor)\"\n [ngClass]=\"{ 'outline outline-primary': primaryColor.name === activePrimaryColor() }\"\n class=\"cursor-pointer w-5 h-5 rounded-full flex shrink-0 items-center justify-center outline-offset-1 shadow\"\n [style]=\"{\n 'background-color':\n primaryColor?.name === 'noir' ? 'var(--text-color)' : primaryColor?.palette?.['500'],\n }\"\n ></button>\n }\n </div>\n </div>\n <div>\n <span class=\"text-sm text-muted-color font-semibold\">Surface</span>\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\n @for (surface of surfaces; track surface.name) {\n <button\n type=\"button\"\n [title]=\"surface.name\"\n (click)=\"updateColors($event, 'surface', surface)\"\n class=\"cursor-pointer w-5 h-5 rounded-full flex shrink-0 items-center justify-center p-0 outline-offset-1\"\n [ngClass]=\"{\n 'outline outline-primary': selectedSurfaceColor()\n ? selectedSurfaceColor() === surface.name\n : store.darkTheme()\n ? surface.name === 'zinc'\n : surface.name === 'slate',\n }\"\n [style]=\"{ 'background-color': surface?.palette?.['500'] }\"\n ></button>\n }\n </div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <span id=\"helix-config-presets\" class=\"text-sm text-muted-color font-semibold\">Presets</span>\n <hx-select-button\n ariaLabelledby=\"helix-config-presets\"\n [options]=\"presetOptions\"\n [ngModel]=\"selectedPreset()\"\n (ngModelChange)=\"onPresetChange($event)\"\n [allowEmpty]=\"false\"\n size=\"small\"\n />\n </div>\n @if (showMenuModeButton()) {\n <div class=\"flex flex-col gap-2\">\n <span id=\"helix-config-menu-mode\" class=\"text-sm text-muted-color font-semibold\">Menu Mode</span>\n <hx-select-button\n ariaLabelledby=\"helix-config-menu-mode\"\n [ngModel]=\"menuMode()\"\n (ngModelChange)=\"onMenuModeChange($event)\"\n [options]=\"menuModeOptions\"\n [allowEmpty]=\"false\"\n size=\"small\"\n />\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { StyleClassModule } from '@gravionlabs/helix-core/styleclass';\nimport { HelixConfigurator } from '../../configurator/configurator';\n\n@Component({\n selector: 'helix-configurator-action',\n standalone: true,\n imports: [StyleClassModule, HelixConfigurator],\n template: `\n <div\n class=\"relative\"\n style=\"display: inline-flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem;\"\n >\n <button\n class=\"layout-topbar-action layout-topbar-action-highlight\"\n hStyleClass=\"@next\"\n enterFromClass=\"hidden\"\n enterActiveClass=\"animate-scalein\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"animate-fadeout\"\n [hideOnOutsideClick]=\"true\"\n >\n <i class=\"pi pi-palette\" style=\"font-size: 1.4rem;\"></i>\n </button>\n <helix-configurator />\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.Eager,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n cursor: pointer;\n transition: background-color var(--element-transition-duration);\n }\n :host(:hover) {\n background-color: var(--surface-hover);\n }\n .relative {\n cursor: pointer;\n }\n button {\n cursor: pointer;\n }\n button i {\n cursor: inherit;\n }\n `,\n ],\n})\nexport class HelixConfiguratorAction {}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { LayoutStore } from '../../../store/layout.store';\n\n@Component({\n selector: 'helix-dark-mode-action',\n standalone: true,\n imports: [CommonModule],\n template: `\n <button type=\"button\" class=\"layout-topbar-action\" (click)=\"store.toggleDarkMode()\">\n <i\n [ngClass]=\"{\n pi: true,\n 'pi-moon': store.isDarkTheme(),\n 'pi-sun': !store.isDarkTheme(),\n }\"\n style=\"font-size: 1.4rem;\"\n ></i>\n </button>\n `,\n host: {\n style:\n 'display: inline-flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem; border-radius: 50%; cursor: pointer; transition: background-color var(--element-transition-duration);',\n },\n changeDetection: ChangeDetectionStrategy.Eager,\n styles: [\n `\n :host(:hover) {\n background-color: var(--surface-hover);\n }\n button {\n cursor: pointer;\n }\n button i {\n cursor: inherit;\n }\n `,\n ],\n})\nexport class HelixDarkModeAction {\n protected store = inject(LayoutStore);\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n type OnDestroy,\n type OnInit,\n signal,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport type { MenuItem } from '@gravionlabs/helix-core/api';\nimport { StyleClassModule } from '@gravionlabs/helix-core/styleclass';\nimport { HxBreadcrumb } from '@gravionlabs/helix-ui';\nimport { filter, Subject, takeUntil } from 'rxjs';\nimport { helixBreadcrumbsFromRoutes } from '../../breadcrumb-utils';\nimport { LayoutStore } from '../../store/layout.store';\nimport { HelixAlertAction } from './actions/alert-action';\nimport { HelixConfiguratorAction } from './actions/configurator-action';\nimport { HelixDarkModeAction } from './actions/dark-mode-action';\nimport type { HelixTopbarAction, HelixTopbarItem } from './topbar.model';\n\nexport type { HelixTopbarAction } from './topbar.model';\n\nconst DEFAULT_ACTIONS: HelixTopbarAction[] = [\n { icon: 'pi pi-calendar', label: 'Calendar' },\n { icon: 'pi pi-inbox', label: 'Messages' },\n { icon: 'pi pi-user', label: 'Profile' },\n];\n\nconst DEFAULT_ITEMS: HelixTopbarItem[] = [\n { type: 'darkmode' },\n { type: 'configurator' },\n { type: 'mobile' },\n];\n\n@Component({\n selector: 'helix-topbar',\n standalone: true,\n imports: [\n RouterModule,\n CommonModule,\n StyleClassModule,\n HelixAlertAction,\n HelixConfiguratorAction,\n HelixDarkModeAction,\n HxBreadcrumb,\n ],\n templateUrl: './topbar.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './topbar.scss',\n})\nexport class HelixTopbar implements OnInit, OnDestroy {\n appTitle = input('Helix');\n topbarActions = input<HelixTopbarAction[]>(DEFAULT_ACTIONS);\n breadcrumbs = input<MenuItem[] | undefined>(undefined);\n items = input<HelixTopbarItem[]>(DEFAULT_ITEMS);\n\n store = inject(LayoutStore);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private destroy$ = new Subject<void>();\n private routeChange = signal(0);\n\n ngOnInit() {\n this.router.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntil(this.destroy$),\n )\n .subscribe(() => this.routeChange.update((n) => n + 1));\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected effectiveBreadcrumbs = computed<MenuItem[]>(() => {\n const input = this.breadcrumbs();\n if (input !== undefined) return input;\n this.routeChange();\n return helixBreadcrumbsFromRoutes(this.route);\n });\n\n protected showBreadcrumbs = computed(() => this.effectiveBreadcrumbs().length > 1);\n}\n","<div class=\"layout-topbar\">\n <div class=\"layout-topbar-start\">\n <button\n type=\"button\"\n class=\"layout-menu-button layout-topbar-action\"\n [class.layout-menu-button-mobile-only]=\"store.isStatic()\"\n aria-label=\"Toggle navigation\"\n (click)=\"store.onMenuToggle()\"\n >\n <i class=\"pi pi-bars\"></i>\n </button>\n @if (showBreadcrumbs()) {\n <hx-breadcrumb [model]=\"effectiveBreadcrumbs()\" [home]=\"{ icon: 'pi pi-home', routerLink: '/' }\" />\n }\n </div>\n\n <div class=\"layout-topbar-end\">\n <div class=\"layout-config-menu\">\n @for (item of items(); track $index) {\n @switch (item.type) {\n @case ('darkmode') {\n <helix-dark-mode-action />\n }\n @case ('configurator') {\n <helix-configurator-action />\n }\n @case ('alert') {\n <helix-alert-action [count]=\"item.badgeCount ?? 0\" [alerts]=\"item.alerts\" />\n }\n @case ('action') {\n <button type=\"button\" class=\"layout-topbar-action\" (click)=\"item.command?.()\">\n <i [class]=\"item.icon ?? ''\"></i>\n </button>\n }\n }\n }\n </div>\n\n <button\n class=\"layout-topbar-menu-button layout-topbar-action\"\n hStyleClass=\"@next\"\n enterFromClass=\"hidden\"\n enterActiveClass=\"animate-scalein\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"animate-fadeout\"\n [hideOnOutsideClick]=\"true\"\n >\n <i class=\"pi pi-ellipsis-v\"></i>\n </button>\n\n <div class=\"layout-topbar-menu hidden lg:block\">\n <div class=\"layout-topbar-menu-content\">\n @for (action of topbarActions(); track action.icon) {\n <button type=\"button\" class=\"layout-topbar-action\" (click)=\"action.command?.()\">\n <i [class]=\"action.icon\"></i>\n <span>{{ action.label }}</span>\n </button>\n }\n <ng-content select=\"[helixTopbarEnd]\" />\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute, RouterModule } from '@angular/router';\nimport type { MenuItem } from '@gravionlabs/helix-core/api';\nimport type { Environment } from '../../../ui/badge/environment-badge';\nimport type { HelixRouteMenuItem } from '../../route-menu.model';\nimport { LayoutStore } from '../../store/layout.store';\nimport { HelixNavRail } from '../nav-rail/nav-rail';\nimport type { HelixNavGroup } from '../nav-rail/nav-rail.model';\nimport { type HelixNavStyle, helixNavGroupsFromMenu } from '../nav-rail/nav-rail.model';\nimport { HelixStatusBar } from '../status-bar/status-bar';\nimport type { HelixStatusBarTone, HelixStatusBarVersion } from '../status-bar/status-bar.model';\nimport { HelixTopbar } from '../topbar/topbar';\nimport type { HelixTopbarAction, HelixTopbarItem } from '../topbar/topbar.model';\n\n@Component({\n selector: 'helix-app-layout',\n standalone: true,\n imports: [CommonModule, HelixTopbar, HelixNavRail, RouterModule, HelixStatusBar],\n templateUrl: './app-layout.html',\n styleUrl: './app-layout.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n encapsulation: ViewEncapsulation.None,\n})\nexport class HelixAppLayout {\n appTitle = input('Helix');\n environment = input<Environment | undefined>();\n\n /** Topbar items. When provided, overrides the default darkmode / configurator / mobile items. */\n topbarItems = input<HelixTopbarItem[] | undefined>();\n\n /** Topbar actions rendered in the right-side dropdown. */\n topbarActions = input<HelixTopbarAction[] | undefined>();\n\n /**\n * Nav-rail brand icon: inline SVG (`<svg>…</svg>`) or a URL to an SVG file.\n * Falls back to the default hardcoded icon when not provided.\n */\n brandIcon = input<string>();\n\n /** Status bar inputs */\n statusBarEnvironment = input<string | undefined>();\n statusBarNote = input<string | undefined>();\n statusBarTone = input<HelixStatusBarTone>('neutral');\n statusBarVersions = input<HelixStatusBarVersion[]>([]);\n statusBarBrand = input('');\n\n /**\n * Menu model. When provided, overrides route data.\n * Also auto-populated from ActivatedRoute.data['menu'] when used as a route component.\n */\n menu = input<HelixRouteMenuItem[]>([]);\n\n /**\n * Nav rail style. `'sections'` (default) renders top-level items with children as\n * always-open section headings; `'tree'` keeps them as expandable folders.\n */\n navStyle = input<HelixNavStyle>('sections');\n\n /** Explicit nav groups. When provided, they win over the mapping of `menu`. */\n navGroups = input<HelixNavGroup[] | undefined>();\n\n private static readonly DEFAULT_TOP_ACTIONS: HelixTopbarAction[] = [\n { icon: 'pi pi-calendar', label: 'Calendar' },\n { icon: 'pi pi-inbox', label: 'Messages' },\n { icon: 'pi pi-user', label: 'Profile' },\n ];\n\n store = inject(LayoutStore);\n private activatedRoute = inject(ActivatedRoute);\n\n /** Resolved menu: input takes priority, then route data, then empty. */\n protected effectiveMenu = computed<MenuItem[]>(() => {\n const inputMenu = this.menu();\n if (inputMenu.length > 0) return inputMenu;\n return (this.activatedRoute.snapshot.data['menu'] as HelixRouteMenuItem[] | undefined) ?? [];\n });\n\n protected effectiveNavGroups = computed(\n () =>\n this.navGroups() ??\n helixNavGroupsFromMenu(this.effectiveMenu() as HelixRouteMenuItem[], this.navStyle()),\n );\n\n protected effectiveEnvironment = computed<Environment | undefined>(() => {\n const input = this.environment();\n if (input !== undefined) return input;\n return this.activatedRoute.snapshot.data['environment'] as Environment | undefined;\n });\n\n protected effectiveItems = computed<HelixTopbarItem[]>(() => {\n const custom = this.topbarItems();\n if (custom !== undefined) return custom;\n return [{ type: 'darkmode' }, { type: 'configurator' }, { type: 'mobile' }];\n });\n\n protected effectiveTopbarActions = computed(\n () => this.topbarActions() ?? HelixAppLayout.DEFAULT_TOP_ACTIONS,\n );\n\n constructor() {\n effect(() => {\n if (this.store.mobileMenuActive()) {\n document.body.classList.add('blocked-scroll');\n } else {\n document.body.classList.remove('blocked-scroll');\n }\n });\n }\n\n containerClass = computed(() => ({\n 'layout-overlay': this.store.menuMode() === 'overlay',\n 'layout-static': this.store.menuMode() === 'static',\n 'layout-static-inactive':\n this.store.staticMenuDesktopInactive() && this.store.menuMode() === 'static',\n 'layout-overlay-active': this.store.overlayMenuActive(),\n 'layout-mobile-active': this.store.mobileMenuActive(),\n 'layout-sidebar-collapsed': this.store.isCollapsed(),\n }));\n}\n","<div class=\"layout-wrapper\" [ngClass]=\"containerClass()\">\n <helix-topbar\n [items]=\"effectiveItems()\"\n [topbarActions]=\"effectiveTopbarActions()\"\n ></helix-topbar>\n <helix-nav-rail\n [model]=\"effectiveNavGroups()\"\n [appTitle]=\"appTitle()\"\n [brandIcon]=\"brandIcon()\"\n ></helix-nav-rail>\n <div class=\"layout-main-container\">\n <div class=\"layout-main\">\n <router-outlet></router-outlet>\n </div>\n </div>\n <helix-status-bar\n [brand]=\"statusBarBrand()\"\n [environment]=\"statusBarEnvironment()\"\n [note]=\"statusBarNote()\"\n [tone]=\"statusBarTone()\"\n [versions]=\"statusBarVersions()\"\n />\n <div class=\"layout-mask\"></div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { StyleClassModule } from '@gravionlabs/helix-core/styleclass';\nimport { HxButton } from '@gravionlabs/helix-ui';\nimport { LayoutStore } from '../../store';\nimport { HelixConfigurator } from '../configurator/configurator';\n\n@Component({\n selector: 'helix-floating-configurator',\n standalone: true,\n imports: [CommonModule, HxButton, StyleClassModule, HelixConfigurator],\n templateUrl: './floating-configurator.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './floating-configurator.scss',\n})\nexport class HelixFloatingConfigurator {\n store = inject(LayoutStore);\n\n float = input<boolean>(true);\n darkModeLabel = input('Toggle dark mode');\n configuratorLabel = input('Configure theme');\n\n isDarkTheme = computed(() => this.store.darkTheme());\n\n toggleDarkMode() {\n this.store.toggleDarkMode();\n }\n}\n","<div class=\"flex gap-4 top-8 right-8\" [ngClass]=\"{ fixed: float() }\">\n <button\n hx-button\n type=\"button\"\n iconOnly\n rounded\n severity=\"secondary\"\n [attr.aria-label]=\"darkModeLabel()\"\n (click)=\"toggleDarkMode()\"\n >\n <span [class]=\"isDarkTheme() ? 'pi pi-moon' : 'pi pi-sun'\" aria-hidden=\"true\"></span>\n </button>\n <div class=\"relative\">\n <button\n hx-button\n type=\"button\"\n iconOnly\n rounded\n [attr.aria-label]=\"configuratorLabel()\"\n hStyleClass=\"@next\"\n enterFromClass=\"hidden\"\n enterActiveClass=\"animate-scalein\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"animate-fadeout\"\n [hideOnOutsideClick]=\"true\"\n >\n <span class=\"pi pi-palette\" aria-hidden=\"true\"></span>\n </button>\n <helix-configurator />\n </div>\n</div>\n","import { SlicePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport type { HelixFooterColumn } from './footer.model';\n\nexport type { HelixFooterLink } from './footer.model';\nexport type { HelixFooterColumn };\n\n@Component({\n standalone: true,\n selector: 'helix-footer',\n imports: [RouterModule, SlicePipe],\n templateUrl: './footer.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './footer.scss',\n})\nexport class HelixFooter {\n brandName = input('Helix');\n brandUrl = input('https://primeng.org');\n columns = input<HelixFooterColumn[]>([]);\n}\n","<div class=\"layout-footer\">\n <ng-content select=\"[helixFooterStart]\" />\n {{ brandName() }} by\n <a\n [href]=\"brandUrl()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"text-primary font-bold hover:underline\"\n >{{ brandUrl() | slice: 8 }}</a\n >\n\n @if (columns().length > 0) {\n <div class=\"layout-footer-columns\">\n @for (column of columns(); track column.title) {\n <div class=\"layout-footer-column\">\n <span class=\"font-semibold\">{{ column.title }}</span>\n <ul>\n @for (link of column.links; track link.label) {\n <li>\n @if (link.url) {\n <a [href]=\"link.url\" target=\"_blank\" rel=\"noopener noreferrer\">{{\n link.label\n }}</a>\n } @else if (link.route) {\n <a [routerLink]=\"link.route\">{{ link.label }}</a>\n } @else {\n {{ link.label }}\n }\n </li>\n }\n </ul>\n </div>\n }\n </div>\n }\n\n <ng-content />\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { StyleClassModule } from '@gravionlabs/helix-core/styleclass';\n\n@Component({\n selector: 'helix-mobile-menu-action',\n standalone: true,\n imports: [StyleClassModule],\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n <button\n class=\"layout-topbar-menu-button layout-topbar-action\"\n hStyleClass=\"@next\"\n enterFromClass=\"hidden\"\n enterActiveClass=\"animate-scalein\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"animate-fadeout\"\n [hideOnOutsideClick]=\"true\"\n >\n <i class=\"pi pi-ellipsis-v\"></i>\n </button>\n `,\n})\nexport class HelixMobileMenuAction {}\n","import type { Type } from '@angular/core';\nimport type { ActivatedRouteSnapshot, CanActivateFn, Route, Routes } from '@angular/router';\nimport type { MenuItem } from '@gravionlabs/helix-core/api';\n\n/**\n * Extends Helix's MenuItem with Angular routing properties.\n * Allows a single array to define both the sidebar menu and the router configuration.\n */\nexport interface HelixRouteMenuItem extends MenuItem {\n /** Angular route path segment (relative to the parent route). */\n path?: string;\n /** Breadcrumb label or resolver for auto-generated breadcrumbs. */\n breadcrumb?: string | ((route: ActivatedRouteSnapshot) => string);\n /** Component to render for this route. */\n component?: Type<unknown>;\n /** Lazy-loaded children module or routes. */\n loadChildren?: Route['loadChildren'];\n /** Route guards. */\n canActivate?: CanActivateFn[];\n /** Additional route data (merged with the auto-injected menu data). */\n data?: Record<string, unknown>;\n /** Typed override of MenuItem.items — supports nested HelixRouteMenuItem entries. */\n items?: HelixRouteMenuItem[];\n}\n\n/**\n * Recursively copies a HelixRouteMenuItem tree and auto-populates `routerLink`\n * from `path` for any item that does not already have a `routerLink`.\n *\n * @param items The source menu items.\n * @param basePath Absolute base path prefix (e.g. `'/uikit'`).\n *\n * @example\n * // uikit-menu-items.ts defines: { path: 'formlayout', label: '...', icon: '...' }\n * helixMenuLinksFrom(UIKIT_ITEMS, '/uikit')\n * // → { path: 'formlayout', label: '...', icon: '...', routerLink: ['/uikit/formlayout'] }\n */\nexport function helixMenuLinksFrom(\n items: HelixRouteMenuItem[],\n basePath: string,\n): HelixRouteMenuItem[] {\n return items.map((item) => {\n const resolved: HelixRouteMenuItem = {\n ...item,\n items: item.items ? helixMenuLinksFrom(item.items, basePath) : undefined,\n };\n\n if (resolved.breadcrumb !== undefined) {\n resolved.data = { ...resolved.data, breadcrumb: resolved.breadcrumb };\n }\n\n if (!resolved.routerLink && resolved.path !== undefined) {\n const fullPath = `${basePath}/${resolved.path}`.replace(/\\/+/g, '/');\n resolved.routerLink = [fullPath];\n }\n\n return resolved;\n });\n}\n\n/**\n * Converts a HelixRouteMenuItem tree into Angular Routes.\n *\n * - Items with `path` + `component` or `loadChildren` generate a route entry.\n * - Items without `path` (visual-only section headers) are skipped for routing\n * but their `items` children are still recursed.\n * - Items with only `routerLink` (e.g. links into lazy-loaded sub-modules) are\n * skipped — they do not need a route entry here.\n */\nexport function helixRoutesFrom(items: HelixRouteMenuItem[]): Routes {\n const routes: Routes = [];\n\n for (const item of items) {\n if (item.path === undefined) {\n // Visual-only item (section header etc.) — recurse into children\n if (item.items?.length) {\n routes.push(...helixRoutesFrom(item.items));\n }\n continue;\n }\n\n const hasRoute = item.component != null || item.loadChildren != null;\n if (!hasRoute) {\n // Has a path but no component/loadChildren — skip as route, but recurse\n if (item.items?.length) {\n routes.push(...helixRoutesFrom(item.items));\n }\n continue;\n }\n\n const routeData: Record<string, unknown> = { ...(item.data as Record<string, unknown>) };\n if (item.breadcrumb !== undefined) {\n routeData['breadcrumb'] = item.breadcrumb;\n }\n\n const route: Route = { path: item.path };\n\n if (item.component) route.component = item.component;\n if (item.loadChildren) route.loadChildren = item.loadChildren;\n if (item.canActivate) route.canActivate = item.canActivate;\n if (Object.keys(routeData).length > 0) route.data = routeData;\n\n // Items nested under a routable item become child routes (not recursed flat)\n if (item.items?.length) {\n const childRoutes = helixRoutesFrom(item.items);\n if (childRoutes.length) {\n route.children = childRoutes;\n }\n }\n\n routes.push(route);\n }\n\n return routes;\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { HxButton } from '@gravionlabs/helix-ui';\nimport { HelixFloatingConfigurator } from '../../../layout/components/floating-configurator/floating-configurator';\n\n@Component({\n selector: 'helix-access',\n standalone: true,\n imports: [HxButton, RouterModule, RippleModule, HelixFloatingConfigurator],\n templateUrl: './access.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './access.scss',\n})\nexport class HelixAccess {\n title = input('Access Denied');\n message = input('You do not have the necessary permisions. Please contact admins.');\n buttonLabel = input('Go to Dashboard');\n buttonRoute = input('/');\n}\n","<helix-floating-configurator />\n<div\n class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-screen overflow-hidden\"\n>\n <div class=\"flex flex-col items-center justify-center\">\n <div\n style=\"\n border-radius: 56px;\n padding: 0.3rem;\n background: linear-gradient(180deg, rgba(247, 149, 48, 0.4) 10%, rgba(247, 149, 48, 0) 30%);\n \"\n >\n <div\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center\"\n style=\"border-radius: 53px\"\n >\n <div class=\"gap-4 flex flex-col items-center\">\n <div\n class=\"flex justify-center items-center border-2 border-orange-500 rounded-full\"\n style=\"width: 3.2rem; height: 3.2rem\"\n >\n <i class=\"text-orange-500 pi pi-fw pi-lock text-2xl!\"></i>\n </div>\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-4xl lg:text-5xl mb-2\">\n {{ title() }}\n </h1>\n <span class=\"text-muted-color mb-8\">{{ message() }}</span>\n <img\n src=\"https://primefaces.org/cdn/templates/sakai/auth/asset-access.svg\"\n alt=\"Access denied\"\n class=\"mb-8\"\n width=\"80%\"\n />\n <div class=\"col-span-12 mt-8 text-center\">\n <a hx-button [routerLink]=\"buttonRoute()\" severity=\"warn\">{{ buttonLabel() }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { HxButton } from '@gravionlabs/helix-ui';\nimport { HelixFloatingConfigurator } from '../../../layout/components/floating-configurator/floating-configurator';\n\n@Component({\n selector: 'helix-error',\n standalone: true,\n imports: [HxButton, RippleModule, RouterModule, HelixFloatingConfigurator],\n templateUrl: './error.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './error.scss',\n})\nexport class HelixError {\n title = input('Error Occured');\n message = input('Requested resource is not available.');\n buttonLabel = input('Go to Dashboard');\n buttonRoute = input('/');\n}\n","<helix-floating-configurator />\n<div\n class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-screen overflow-hidden\"\n>\n <div class=\"flex flex-col items-center justify-center\">\n <div\n style=\"\n border-radius: 56px;\n padding: 0.3rem;\n background: linear-gradient(180deg, rgba(233, 30, 99, 0.4) 10%, rgba(33, 150, 243, 0) 30%);\n \"\n >\n <div\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center\"\n style=\"border-radius: 53px\"\n >\n <div class=\"gap-4 flex flex-col items-center\">\n <div\n class=\"flex justify-center items-center border-2 border-pink-500 rounded-full\"\n style=\"height: 3.2rem; width: 3.2rem\"\n >\n <i class=\"pi pi-fw pi-exclamation-circle text-2xl! text-pink-500\"></i>\n </div>\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-5xl mb-2\">\n {{ title() }}\n </h1>\n <span class=\"text-muted-color mb-8\">{{ message() }}</span>\n <img\n src=\"https://primefaces.org/cdn/templates/sakai/auth/asset-error.svg\"\n alt=\"Error\"\n class=\"mb-8\"\n width=\"80%\"\n />\n <div class=\"col-span-12 mt-8 text-center\">\n <a hx-button [routerLink]=\"buttonRoute()\" severity=\"danger\">{{ buttonLabel() }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { HxButton, HxCheckbox, HxInput, HxPassword } from '@gravionlabs/helix-ui';\nimport { HelixFloatingConfigurator } from '../../../layout/components/floating-configurator/floating-configurator';\n\nexport interface HelixLoginCredentials {\n email: string;\n password: string;\n rememberMe: boolean;\n}\n\n@Component({\n selector: 'helix-login',\n standalone: true,\n imports: [\n HxButton,\n HxCheckbox,\n HxInput,\n HxPassword,\n FormsModule,\n RouterModule,\n RippleModule,\n HelixFloatingConfigurator,\n ],\n templateUrl: './login.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './login.scss',\n})\nexport class HelixLogin {\n title = input('Welcome!');\n subtitle = input('Sign in to continue');\n submitLabel = input('Sign In');\n forgotPasswordLabel = input('Forgot password?');\n\n login = output<HelixLoginCredentials>();\n forgotPassword = output<void>();\n\n email = '';\n password = '';\n checked = false;\n\n onSubmit(): void {\n this.login.emit({ email: this.email, password: this.password, rememberMe: this.checked });\n }\n\n onForgotPassword(): void {\n this.forgotPassword.emit();\n }\n}\n","<helix-floating-configurator />\n<div\n class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-screen overflow-hidden\"\n>\n <div class=\"flex flex-col items-center justify-center\">\n <div\n style=\"\n border-radius: 56px;\n padding: 0.3rem;\n background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%);\n \"\n >\n <div\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20\"\n style=\"border-radius: 53px\"\n >\n <div class=\"text-center mb-8\">\n <svg\n viewBox=\"0 0 54 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"mb-8 w-16 shrink-0 mx-auto\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M17.1637 19.2467C17.1566 19.4033 17.1529 19.561 17.1529 19.7194C17.1529 25.3503 21.7203 29.915 27.3546 29.915C32.9887 29.915 37.5561 25.3503 37.5561 19.7194C37.5561 19.5572 37.5524 19.3959 37.5449 19.2355C38.5617 19.0801 39.5759 18.9013 40.5867 18.6994L40.6926 18.6782C40.7191 19.0218 40.7326 19.369 40.7326 19.7194C40.7326 27.1036 34.743 33.0896 27.3546 33.0896C19.966 33.0896 13.9765 27.1036 13.9765 19.7194C13.9765 19.374 13.9896 19.0316 14.0154 18.6927L14.0486 18.6994C15.0837 18.9062 16.1223 19.0886 17.1637 19.2467ZM33.3284 11.4538C31.6493 10.2396 29.5855 9.52381 27.3546 9.52381C25.1195 9.52381 23.0524 10.2421 21.3717 11.4603C20.0078 11.3232 18.6475 11.1387 17.2933 10.907C19.7453 8.11308 23.3438 6.34921 27.3546 6.34921C31.36 6.34921 34.9543 8.10844 37.4061 10.896C36.0521 11.1292 34.692 11.3152 33.3284 11.4538ZM43.826 18.0518C43.881 18.6003 43.9091 19.1566 43.9091 19.7194C43.9091 28.8568 36.4973 36.2642 27.3546 36.2642C18.2117 36.2642 10.8 28.8568 10.8 19.7194C10.8 19.1615 10.8276 18.61 10.8816 18.0663L7.75383 17.4411C7.66775 18.1886 7.62354 18.9488 7.62354 19.7194C7.62354 30.6102 16.4574 39.4388 27.3546 39.4388C38.2517 39.4388 47.0855 30.6102 47.0855 19.7194C47.0855 18.9439 47.0407 18.1789 46.9536 17.4267L43.826 18.0518ZM44.2613 9.54743L40.9084 10.2176C37.9134 5.95821 32.9593 3.1746 27.3546 3.1746C21.7442 3.1746 16.7856 5.96385 13.7915 10.2305L10.4399 9.56057C13.892 3.83178 20.1756 0 27.3546 0C34.5281 0 40.8075 3.82591 44.2613 9.54743Z\"\n fill=\"var(--primary-color)\"\n />\n <mask\n id=\"mask0_1413_1551\"\n style=\"mask-type: alpha\"\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"8\"\n width=\"54\"\n height=\"11\"\n >\n <path\n d=\"M27 18.3652C10.5114 19.1944 0 8.88892 0 8.88892C0 8.88892 16.5176 14.5866 27 14.5866C37.4824 14.5866 54 8.88892 54 8.88892C54 8.88892 43.4886 17.5361 27 18.3652Z\"\n fill=\"var(--primary-color)\"\n />\n </mask>\n <g mask=\"url(#mask0_1413_1551)\">\n <path\n d=\"M-4.673e-05 8.88887L3.73084 -1.91434L-8.00806 17.0473L-4.673e-05 8.88887ZM27 18.3652L26.4253 6.95109L27 18.3652ZM54 8.88887L61.2673 17.7127L50.2691 -1.91434L54 8.88887ZM-4.673e-05 8.88887C-8.00806 17.0473 -8.00469 17.0505 -8.00132 17.0538C-8.00018 17.055 -7.99675 17.0583 -7.9944 17.0607C-7.98963 17.0653 -7.98474 17.0701 -7.97966 17.075C-7.96949 17.0849 -7.95863 17.0955 -7.94707 17.1066C-7.92401 17.129 -7.89809 17.1539 -7.86944 17.1812C-7.8122 17.236 -7.74377 17.3005 -7.66436 17.3743C-7.50567 17.5218 -7.30269 17.7063 -7.05645 17.9221C-6.56467 18.3532 -5.89662 18.9125 -5.06089 19.5534C-3.39603 20.83 -1.02575 22.4605 1.98012 24.0457C7.97874 27.2091 16.7723 30.3226 27.5746 29.7793L26.4253 6.95109C20.7391 7.23699 16.0326 5.61231 12.6534 3.83024C10.9703 2.94267 9.68222 2.04866 8.86091 1.41888C8.45356 1.10653 8.17155 0.867278 8.0241 0.738027C7.95072 0.673671 7.91178 0.637576 7.90841 0.634492C7.90682 0.63298 7.91419 0.639805 7.93071 0.65557C7.93897 0.663455 7.94952 0.673589 7.96235 0.686039C7.96883 0.692262 7.97582 0.699075 7.98338 0.706471C7.98719 0.710167 7.99113 0.714014 7.99526 0.718014C7.99729 0.720008 8.00047 0.723119 8.00148 0.724116C8.00466 0.727265 8.00796 0.730446 -4.673e-05 8.88887ZM27.5746 29.7793C37.6904 29.2706 45.9416 26.3684 51.6602 23.6054C54.5296 22.2191 56.8064 20.8465 58.4186 19.7784C59.2265 19.2431 59.873 18.7805 60.3494 18.4257C60.5878 18.2482 60.7841 18.0971 60.9374 17.977C61.014 17.9169 61.0799 17.8645 61.1349 17.8203C61.1624 17.7981 61.1872 17.7781 61.2093 17.7602C61.2203 17.7512 61.2307 17.7427 61.2403 17.7348C61.2452 17.7308 61.2499 17.727 61.2544 17.7233C61.2566 17.7215 61.2598 17.7188 61.261 17.7179C61.2642 17.7153 61.2673 17.7127 54 8.88887C46.7326 0.0650536 46.7357 0.0625219 46.7387 0.0600241C46.7397 0.0592345 46.7427 0.0567658 46.7446 0.0551857C46.7485 0.0520238 46.7521 0.0489887 46.7557 0.0460799C46.7628 0.0402623 46.7694 0.0349487 46.7753 0.0301318C46.7871 0.0204986 46.7966 0.0128495 46.8037 0.00712562C46.818 -0.00431848 46.8228 -0.00808311 46.8184 -0.00463784C46.8096 0.00228345 46.764 0.0378652 46.6828 0.0983779C46.5199 0.219675 46.2165 0.439161 45.7812 0.727519C44.9072 1.30663 43.5257 2.14765 41.7061 3.02677C38.0469 4.79468 32.7981 6.63058 26.4253 6.95109L27.5746 29.7793ZM54 8.88887C50.2691 -1.91433 50.27 -1.91467 50.271 -1.91498C50.2712 -1.91506 50.272 -1.91535 50.2724 -1.9155C50.2733 -1.91581 50.274 -1.91602 50.2743 -1.91616C50.2752 -1.91643 50.275 -1.91636 50.2738 -1.91595C50.2714 -1.91515 50.2652 -1.91302 50.2552 -1.9096C50.2351 -1.90276 50.1999 -1.89078 50.1503 -1.874C50.0509 -1.84043 49.8938 -1.78773 49.6844 -1.71863C49.2652 -1.58031 48.6387 -1.377 47.8481 -1.13035C46.2609 -0.635237 44.0427 0.0249875 41.5325 0.6823C36.215 2.07471 30.6736 3.15796 27 3.15796V26.0151C33.8087 26.0151 41.7672 24.2495 47.3292 22.7931C50.2586 22.026 52.825 21.2618 54.6625 20.6886C55.5842 20.4011 56.33 20.1593 56.8551 19.986C57.1178 19.8993 57.3258 19.8296 57.4735 19.7797C57.5474 19.7548 57.6062 19.7348 57.6493 19.72C57.6709 19.7127 57.6885 19.7066 57.7021 19.7019C57.7089 19.6996 57.7147 19.6976 57.7195 19.696C57.7219 19.6952 57.7241 19.6944 57.726 19.6938C57.7269 19.6934 57.7281 19.693 57.7286 19.6929C57.7298 19.6924 57.7309 19.692 54 8.88887ZM27 3.15796C23.3263 3.15796 17.7849 2.07471 12.4674 0.6823C9.95717 0.0249875 7.73904 -0.635237 6.15184 -1.13035C5.36118 -1.377 4.73467 -1.58031 4.3155 -1.71863C4.10609 -1.78773 3.94899 -1.84043 3.84961 -1.874C3.79994 -1.89078 3.76474 -1.90276 3.74471 -1.9096C3.73469 -1.91302 3.72848 -1.91515 3.72613 -1.91595C3.72496 -1.91636 3.72476 -1.91643 3.72554 -1.91616C3.72593 -1.91602 3.72657 -1.91581 3.72745 -1.9155C3.72789 -1.91535 3.72874 -1.91506 3.72896 -1.91498C3.72987 -1.91467 3.73084 -1.91433 -4.673e-05 8.88887C-3.73093 19.692 -3.72983 19.6924 -3.72868 19.6929C-3.72821 19.693 -3.72698 19.6934 -3.72603 19.6938C-3.72415 19.6944 -3.72201 19.6952 -3.71961 19.696C-3.71482 19.6976 -3.70901 19.6996 -3.7022 19.7019C-3.68858 19.7066 -3.67095 19.7127 -3.6494 19.72C-3.60629 19.7348 -3.54745 19.7548 -3.47359 19.7797C-3.32589 19.8296 -3.11788 19.8993 -2.85516 19.986C-2.33008 20.1593 -1.58425 20.4011 -0.662589 20.6886C1.17485 21.2618 3.74125 22.026 6.67073 22.7931C12.2327 24.2495 20.1913 26.0151 27 26.0151V3.15796Z\"\n fill=\"var(--primary-color)\"\n />\n </g>\n </svg>\n <div class=\"text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4\">\n {{ title() }}\n </div>\n <span class=\"text-muted-color font-medium\">{{ subtitle() }}</span>\n </div>\n\n <div>\n <label\n for=\"email1\"\n class=\"block text-surface-900 dark:text-surface-0 text-xl font-medium mb-2\"\n >Email</label\n >\n <input\n hx-input\n id=\"email1\"\n type=\"text\"\n placeholder=\"Email address\"\n class=\"w-full md:w-120 mb-8\"\n [(ngModel)]=\"email\"\n />\n\n <label\n for=\"password1\"\n class=\"block text-surface-900 dark:text-surface-0 font-medium text-xl mb-2\"\n >Password</label\n >\n <hx-password\n inputId=\"password1\"\n [(ngModel)]=\"password\"\n placeholder=\"Password\"\n toggleMask\n fluid\n class=\"mb-4\"\n />\n\n <div class=\"flex items-center justify-between mt-2 mb-8 gap-8\">\n <div class=\"flex items-center\">\n <input type=\"checkbox\" hx-checkbox [(ngModel)]=\"checked\" id=\"rememberme1\" class=\"mr-2\" />\n <label for=\"rememberme1\">Remember me</label>\n </div>\n <span\n class=\"font-medium no-underline ml-2 text-right cursor-pointer text-primary\"\n (click)=\"onForgotPassword()\"\n >{{ forgotPasswordLabel() }}</span\n >\n </div>\n <button hx-button type=\"button\" fluid (click)=\"onSubmit()\">{{ submitLabel() }}</button>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import type { Routes } from '@angular/router';\nimport { HelixAccess } from './access/access';\nimport { HelixError } from './error/error';\nimport { HelixLogin } from './login/login';\n\nexport const authRoutes: Routes = [\n { path: 'access', component: HelixAccess },\n { path: 'error', component: HelixError },\n { path: 'login', component: HelixLogin },\n];\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'helix-empty',\n standalone: true,\n imports: [],\n templateUrl: './empty.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './empty.scss',\n})\nexport class HelixEmpty {\n title = input('Empty Page');\n description = input('Use this page to start from scratch and place your custom content.');\n}\n","<div class=\"card\">\n <div class=\"font-semibold text-xl mb-4\">{{ title() }}</div>\n <p>{{ description() }}</p>\n <ng-content />\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport type { HelixFeature, HelixTestimonial } from '../../landing.model';\n\nconst DEFAULT_FEATURES: HelixFeature[] = [\n {\n icon: 'pi pi-fw pi-users',\n iconBgClass: 'bg-yellow-200',\n iconColorClass: 'text-yellow-700',\n title: 'Easy to Use',\n description: 'Posuere morbi leo urna molestie.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(253,228,165,.2), rgba(187,199,205,.2)), linear-gradient(180deg, rgba(253,228,165,.2), rgba(187,199,205,.2));',\n },\n {\n icon: 'pi pi-fw pi-palette',\n iconBgClass: 'bg-cyan-200',\n iconColorClass: 'text-cyan-700',\n title: 'Fresh Design',\n description: 'Semper risus in hendrerit.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(145,226,237,.2), rgba(251,199,145,.2)), linear-gradient(180deg, rgba(253,228,165,.2), rgba(172,180,223,.2));',\n },\n {\n icon: 'pi pi-fw pi-map',\n iconBgClass: 'bg-indigo-200',\n iconColorClass: 'text-indigo-700',\n title: 'Well Documented',\n description: 'Non arcu risus quis varius quam quisque.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(145,226,237,.2), rgba(172,180,223,.2)), linear-gradient(180deg, rgba(172,180,223,.2), rgba(246,158,188,.2));',\n },\n {\n icon: 'pi pi-fw pi-id-card',\n iconBgClass: 'bg-slate-200',\n iconColorClass: 'text-slate-700',\n title: 'Compatibility',\n description: 'Leo in vitae turpis massa sed.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(187,199,205,.2), rgba(251,199,145,.2)), linear-gradient(180deg, rgba(187,199,205,.2), rgba(145,210,204,.2));',\n },\n {\n icon: 'pi pi-fw pi-star',\n iconBgClass: 'bg-orange-200',\n iconColorClass: 'text-orange-700',\n title: 'Fast Support',\n description: 'Orci nulla pellentesque dignissim enim.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(251,199,145,.2), rgba(253,228,165,.2)), linear-gradient(180deg, rgba(172,180,223,.2), rgba(246,158,188,.2));',\n },\n {\n icon: 'pi pi-fw pi-moon',\n iconBgClass: 'bg-pink-200',\n iconColorClass: 'text-pink-700',\n title: 'Powered by Angular',\n description: 'Curabitur gravida arcu ac tortor.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(246,158,188,.2), rgba(212,162,221,.2)), linear-gradient(180deg, rgba(253,228,165,.2), rgba(172,180,223,.2));',\n },\n {\n icon: 'pi pi-fw pi-shopping-cart',\n iconBgClass: 'bg-teal-200',\n iconColorClass: 'text-teal-700',\n title: 'Helix Components',\n description: 'Feugiat pretium nibh ipsum consequat.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(145,210,204,.2), rgba(160,210,250,.2)), linear-gradient(180deg, rgba(187,199,205,.2), rgba(145,210,204,.2));',\n },\n {\n icon: 'pi pi-fw pi-globe',\n iconBgClass: 'bg-blue-200',\n iconColorClass: 'text-blue-700',\n title: 'Mobile Responsive',\n description: 'Amet nisl suscipit adipiscing bibendum.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(160,210,250,.2), rgba(212,162,221,.2)), linear-gradient(180deg, rgba(246,158,188,.2), rgba(212,162,221,.2));',\n },\n {\n icon: 'pi pi-fw pi-eye',\n iconBgClass: 'bg-purple-200',\n iconColorClass: 'text-purple-700',\n title: 'Privacy',\n description: 'Neque egestas congue quisque.',\n cardStyle:\n 'background: linear-gradient(90deg, rgba(160,210,250,.2), rgba(212,162,221,.2)), linear-gradient(180deg, rgba(246,158,188,.2), rgba(212,162,221,.2));',\n },\n];\n\nconst DEFAULT_TESTIMONIAL: HelixTestimonial = {\n name: 'Joséphine Miller',\n company: 'Peak Interactive',\n text: '\"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"',\n logoUrl: 'https://primefaces.org/cdn/templates/sakai/landing/peak-logo.svg',\n};\n\n@Component({\n selector: 'helix-features-widget',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './features-widget.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './features-widget.scss',\n})\nexport class HelixFeaturesWidget {\n sectionTitle = input('Marvelous Features');\n sectionSubtitle = input('Placerat in egestas erat...');\n features = input<HelixFeature[]>(DEFAULT_FEATURES);\n testimonial = input<HelixTestimonial | null>(DEFAULT_TESTIMONIAL);\n}\n","<div id=\"features\" class=\"py-6 px-6 lg:px-20 mt-8 mx-0 lg:mx-20\">\n <div class=\"grid grid-cols-12 gap-4 justify-center\">\n <div class=\"col-span-12 text-center mt-20 mb-6\">\n <div class=\"text-surface-900 dark:text-surface-0 font-normal mb-2 text-4xl\">\n {{ sectionTitle() }}\n </div>\n <span class=\"text-muted-color text-2xl\">{{ sectionSubtitle() }}</span>\n </div>\n\n @for (feature of features(); track feature.title) {\n <div class=\"col-span-12 md:col-span-12 lg:col-span-4 p-0 lg:p-2 mt-6 lg:mt-0\">\n <div style=\"height: 160px; padding: 2px; border-radius: 10px\" [style]=\"feature.cardStyle\">\n <div class=\"p-4 bg-surface-0 dark:bg-surface-900 h-full\" style=\"border-radius: 8px\">\n <div\n class=\"flex items-center justify-center mb-4\"\n [ngClass]=\"feature.iconBgClass\"\n style=\"width: 3.5rem; height: 3.5rem; border-radius: 10px\"\n >\n <i [ngClass]=\"[feature.icon, 'text-2xl!', feature.iconColorClass]\"></i>\n </div>\n <h5 class=\"mb-2 text-surface-900 dark:text-surface-0\">{{ feature.title }}</h5>\n <span class=\"text-surface-600 dark:text-surface-200\">{{ feature.description }}</span>\n </div>\n </div>\n </div>\n }\n\n @if (testimonial()) {\n <div\n class=\"col-span-12 mt-20 mb-20 p-2 md:p-20\"\n style=\"\n border-radius: 20px;\n background:\n linear-gradient(0deg, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6)),\n radial-gradient(77.36% 256.97% at 77.36% 57.52%, #efe1af 0%, #c3dcfa 100%);\n \"\n >\n <div class=\"flex flex-col justify-center items-center text-center px-4 py-4 md:py-0\">\n <div class=\"text-gray-900 mb-2 text-3xl font-semibold\">{{ testimonial()!.name }}</div>\n <span class=\"text-gray-600 text-2xl\">{{ testimonial()!.company }}</span>\n <p\n class=\"text-gray-900 sm:line-height-2 md:line-height-4 text-2xl mt-6\"\n style=\"max-width: 800px\"\n >\n {{ testimonial()!.text }}\n </p>\n @if (testimonial()!.logoUrl) {\n <img [src]=\"testimonial()!.logoUrl\" class=\"mt-6\" alt=\"Company logo\" />\n }\n </div>\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport type {\n HelixFooterColumn,\n HelixFooterLink,\n} from '../../../../layout/components/footer/footer.model';\n\nconst DEFAULT_COLUMNS: HelixFooterColumn[] = [\n {\n title: 'Company',\n links: [\n { label: 'About Us' },\n { label: 'News' },\n { label: 'Investor Relations' },\n { label: 'Careers' },\n { label: 'Media Kit' },\n ],\n },\n {\n title: 'Resources',\n links: [{ label: 'Get Started' }, { label: 'Learn' }, { label: 'Case Studies' }],\n },\n {\n title: 'Community',\n links: [{ label: 'Discord' }, { label: 'Events' }, { label: 'FAQ' }, { label: 'Blog' }],\n },\n {\n title: 'Legal',\n links: [{ label: 'Brand Policy' }, { label: 'Privacy Policy' }, { label: 'Terms of Service' }],\n },\n];\n\nexport type { HelixFooterColumn, HelixFooterLink };\n\n@Component({\n selector: 'helix-footer-widget',\n standalone: true,\n imports: [RouterModule],\n templateUrl: './footer-widget.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './footer-widget.scss',\n})\nexport class HelixFooterWidget {\n columns = input<HelixFooterColumn[]>(DEFAULT_COLUMNS);\n homeRoute = input('/landing');\n brandName = input('SAKAI');\n}\n","<div class=\"py-12 px-12 mx-0 mt-20 lg:mx-20\">\n <div class=\"grid grid-cols-12 gap-4\">\n <div class=\"col-span-12 md:col-span-2\">\n <a\n [routerLink]=\"homeRoute()\"\n [fragment]=\"'home'\"\n class=\"flex flex-wrap items-center justify-center md:justify-start md:mb-0 mb-6 cursor-pointer\"\n >\n <svg viewBox=\"0 0 54 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"h-14 mr-2\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M17.1637 19.2467C17.1566 19.4033 17.1529 19.561 17.1529 19.7194C17.1529 25.3503 21.7203 29.915 27.3546 29.915C32.9887 29.915 37.5561 25.3503 37.5561 19.7194C37.5561 19.5572 37.5524 19.3959 37.5449 19.2355C38.5617 19.0801 39.5759 18.9013 40.5867 18.6994L40.6926 18.6782C40.7191 19.0218 40.7326 19.369 40.7326 19.7194C40.7326 27.1036 34.743 33.0896 27.3546 33.0896C19.966 33.0896 13.9765 27.1036 13.9765 19.7194C13.9765 19.374 13.9896 19.0316 14.0154 18.6927L14.0486 18.6994C15.0837 18.9062 16.1223 19.0886 17.1637 19.2467ZM33.3284 11.4538C31.6493 10.2396 29.5855 9.52381 27.3546 9.52381C25.1195 9.52381 23.0524 10.2421 21.3717 11.4603C20.0078 11.3232 18.6475 11.1387 17.2933 10.907C19.7453 8.11308 23.3438 6.34921 27.3546 6.34921C31.36 6.34921 34.9543 8.10844 37.4061 10.896C36.0521 11.1292 34.692 11.3152 33.3284 11.4538Z\"\n fill=\"var(--primary-color)\"\n />\n </svg>\n <h4 class=\"font-medium text-3xl text-surface-900 dark:text-surface-0\">{{ brandName() }}</h4>\n </a>\n </div>\n\n <div class=\"col-span-12 md:col-span-10\">\n <div\n class=\"grid text-center md:text-left\"\n [style.grid-template-columns]=\"'repeat(' + columns().length + ', 1fr)'\"\n >\n @for (column of columns(); track column.title) {\n <div class=\"px-4\">\n <h4\n class=\"font-medium text-2xl leading-normal mb-6 text-surface-900 dark:text-surface-0\"\n >\n {{ column.title }}\n </h4>\n @for (link of column.links; track link.label) {\n @if (link.url) {\n <a\n [href]=\"link.url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"leading-normal text-xl block cursor-pointer mb-2 text-surface-700 dark:text-surface-100\"\n >{{ link.label }}</a\n >\n } @else if (link.route) {\n <a\n [routerLink]=\"link.route\"\n class=\"leading-normal text-xl block cursor-pointer mb-2 text-surface-700 dark:text-surface-100\"\n >{{ link.label }}</a\n >\n } @else {\n <a\n class=\"leading-normal text-xl block cursor-pointer mb-2 text-surface-700 dark:text-surface-100\"\n >\n {{ link.label }}\n </a>\n }\n }\n </div>\n }\n </div>\n </div>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { HxButton } from '@gravionlabs/helix-ui';\n\n@Component({\n selector: 'helix-hero-widget',\n standalone: true,\n imports: [HxButton, RippleModule],\n templateUrl: './hero-widget.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './hero-widget.scss',\n})\nexport class HelixHeroWidget {\n headlineLight = input('Eu sem integer');\n headline = input('eget magna fermentum');\n description = input(\n 'Sed blandit libero volutpat sed cras. Fames ac turpis egestas integer. Placerat in egestas erat...',\n );\n buttonLabel = input('Get Started');\n imageUrl = input('https://primefaces.org/cdn/templates/sakai/landing/screen-1.png');\n imageAlt = input('Hero Image');\n\n buttonClick = output<void>();\n}\n","<div\n id=\"hero\"\n class=\"flex flex-col pt-6 px-6 lg:px-20 overflow-hidden\"\n style=\"\n background:\n linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)),\n radial-gradient(\n 77.36% 256.97% at 77.36% 57.52%,\n rgb(238, 239, 175) 0%,\n rgb(195, 227, 250) 100%\n );\n clip-path: ellipse(150% 87% at 93% 13%);\n \"\n>\n <div class=\"mx-6 md:mx-20 mt-0 md:mt-6\">\n <h1 class=\"text-6xl font-bold text-gray-900 leading-tight dark:!text-gray-700\">\n <span class=\"font-light block\">{{ headlineLight() }}</span\n >{{ headline() }}\n </h1>\n <p class=\"font-normal text-2xl leading-normal md:mt-4 text-gray-700 dark:text-gray-700\">\n {{ description() }}\n </p>\n <button\n hx-button\n hRipple\n rounded\n type=\"button\"\n class=\"text-xl! mt-8 px-4!\"\n (click)=\"buttonClick.emit()\"\n >\n {{ buttonLabel() }}\n </button>\n </div>\n <div class=\"flex justify-center md:justify-end\">\n <img [src]=\"imageUrl()\" [alt]=\"imageAlt()\" class=\"w-9/12 md:w-auto\" />\n </div>\n</div>\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport type { HelixHighlight } from '../../landing.model';\n\nconst DEFAULT_HIGHLIGHTS: HelixHighlight[] = [\n {\n icon: 'pi pi-fw pi-mobile',\n iconBgClass: 'bg-purple-200',\n iconColorClass: 'text-purple-700',\n title: 'Congue Quisque Egestas',\n description:\n 'Lectus arcu bibendum at varius vel pharetra vel turpis nunc. Eget aliquet nibh praesent tristique magna sit amet purus gravida. Sit amet mattis vulputate enim nulla aliquet.',\n imageUrl: 'https://primefaces.org/cdn/templates/sakai/landing/mockup.png',\n imageAlt: 'mockup mobile',\n imageBgClass: 'bg-purple-100',\n imageAlign: 'left',\n },\n {\n icon: 'pi pi-fw pi-desktop',\n iconBgClass: 'bg-yellow-200',\n iconColorClass: 'text-yellow-700',\n title: 'Celerisque Eu Ultrices',\n description:\n 'Adipiscing commodo elit at imperdiet dui. Viverra nibh cras pulvinar mattis nunc sed blandit libero. Suspendisse in est ante in. Mauris pharetra et ultrices neque ornare aenean euismod elementum nisi.',\n imageUrl: 'https://primefaces.org/cdn/templates/sakai/landing/mockup-desktop.png',\n imageAlt: 'mockup',\n imageBgClass: 'bg-yellow-100',\n imageAlign: 'right',\n },\n];\n\n@Component({\n selector: 'helix-highlights-widget',\n standalone: true,\n imports: [NgClass],\n templateUrl: './highlights-widget.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './highlights-widget.scss',\n})\nexport class HelixHighlightsWidget {\n sectionTitle = input('Powerful Everywhere');\n sectionSubtitle = input('Amet consectetur adipiscing elit...');\n highlights = input<HelixHighlight[]>(DEFAULT_HIGHLIGHTS);\n}\n","<div id=\"highlights\" class=\"py-6 px-6 lg:px-20 mx-0 my-12 lg:mx-20\">\n <div class=\"text-center\">\n <div class=\"text-surface-900 dark:text-surface-0 font-normal mb-2 text-4xl\">\n {{ sectionTitle() }}\n </div>\n <span class=\"text-muted-color text-2xl\">{{ sectionSubtitle() }}</span>\n </div>\n\n @for (highlight of highlights(); track highlight.title; let i = $index) {\n <div\n class=\"grid grid-cols-12 gap-4 mt-20\"\n [class.pb-2]=\"i === 0\"\n [class.md:pb-20]=\"i === 0\"\n [class.pt-2]=\"i > 0\"\n [class.md:pt-20]=\"i > 0\"\n >\n @if (highlight.imageAlign === 'left') {\n <div\n class=\"flex justify-center col-span-12 lg:col-span-6 p-0 order-1 lg:order-0\"\n [ngClass]=\"highlight.imageBgClass\"\n style=\"border-radius: 8px\"\n >\n <img [src]=\"highlight.imageUrl\" class=\"w-11/12\" [alt]=\"highlight.imageAlt\" />\n </div>\n <div\n class=\"col-span-12 lg:col-span-6 my-auto flex flex-col lg:items-end text-center lg:text-right gap-4\"\n >\n <div\n class=\"flex items-center justify-center self-center lg:self-end\"\n [ngClass]=\"highlight.iconBgClass\"\n style=\"width: 4.2rem; height: 4.2rem; border-radius: 10px\"\n >\n <i [ngClass]=\"[highlight.icon, 'text-4xl!', highlight.iconColorClass]\"></i>\n </div>\n <div class=\"leading-none text-surface-900 dark:text-surface-0 text-3xl font-normal\">\n {{ highlight.title }}\n </div>\n <span\n class=\"text-surface-700 dark:text-surface-100 text-2xl leading-normal ml-0 md:ml-2\"\n style=\"max-width: 650px\"\n >\n {{ highlight.description }}\n </span>\n </div>\n } @else {\n <div\n class=\"col-span-12 lg:col-span-6 my-auto flex flex-col text-center lg:text-left lg:items-start gap-4\"\n >\n <div\n class=\"flex items-center justify-center self-center lg:self-start\"\n [ngClass]=\"highlight.iconBgClass\"\n style=\"width: 4.2rem; height: 4.2rem; border-radius: 10px\"\n >\n <i [ngClass]=\"[highlight.icon, 'text-3xl!', highlight.iconColorClass]\"></i>\n </div>\n <div class=\"leading-none text-surface-900 dark:text-surface-0 text-3xl font-normal\">\n {{ highlight.title }}\n </div>\n <span\n class=\"text-surface-700 dark:text-surface-100 text-2xl leading-normal mr-0 md:mr-2\"\n style=\"max-width: 650px\"\n >\n {{ highlight.description }}\n </span>\n </div>\n <div\n class=\"flex justify-end order-1 sm:order-2 col-span-12 lg:col-span-6 p-0\"\n [ngClass]=\"highlight.imageBgClass\"\n style=\"border-radius: 8px\"\n >\n <img [src]=\"highlight.imageUrl\" class=\"w-11/12\" [alt]=\"highlight.imageAlt\" />\n </div>\n }\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { HxButton, HxDivider } from '@gravionlabs/helix-ui';\nimport type { HelixPricingPlan } from '../../landing.model';\n\nconst DEFAULT_PLANS: HelixPricingPlan[] = [\n {\n title: 'Free',\n price: '$0',\n pricePeriod: 'per month',\n imageUrl: 'https://primefaces.org/cdn/templates/sakai/landing/free.svg',\n imageAlt: 'free',\n buttonLabel: 'Get Started',\n features: [\n 'Responsive Layout',\n 'Unlimited Push Messages',\n '50 Support Ticket',\n 'Free Shipping',\n ],\n },\n {\n title: 'Startup',\n price: '$1',\n pricePeriod: 'per month',\n imageUrl: 'https://primefaces.org/cdn/templates/sakai/landing/startup.svg',\n imageAlt: 'startup',\n buttonLabel: 'Get Started',\n features: [\n 'Responsive Layout',\n 'Unlimited Push Messages',\n '50 Support Ticket',\n 'Free Shipping',\n ],\n },\n {\n title: 'Enterprise',\n price: '$5',\n pricePeriod: 'per month',\n imageUrl: 'https://primefaces.org/cdn/templates/sakai/landing/enterprise.svg',\n imageAlt: 'enterprise',\n buttonLabel: 'Try Free',\n features: [\n 'Responsive Layout',\n 'Unlimited Push Messages',\n '50 Support Ticket',\n 'Free Shipping',\n ],\n },\n];\n\n@Component({\n selector: 'helix-pricing-widget',\n standalone: true,\n imports: [HxDivider, HxButton, RippleModule],\n templateUrl: './pricing-widget.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './pricing-widget.scss',\n})\nexport class HelixPricingWidget {\n sectionTitle = input('Matchless Pricing');\n sectionSubtitle = input('Amet consectetur adipiscing elit...');\n plans = input<HelixPricingPlan[]>(DEFAULT_PLANS);\n\n planSelect = output<HelixPricingPlan>();\n}\n","<div id=\"pricing\" class=\"py-6 px-6 lg:px-20 my-2 md:my-6\">\n <div class=\"text-center mb-6\">\n <div class=\"text-surface-900 dark:text-surface-0 font-normal mb-2 text-4xl\">\n {{ sectionTitle() }}\n </div>\n <span class=\"text-muted-color text-2xl\">{{ sectionSubtitle() }}</span>\n </div>\n\n <div class=\"grid grid-cols-12 gap-4 justify-between mt-20 md:mt-0\">\n @for (plan of plans(); track plan.title) {\n <div class=\"col-span-12 lg:col-span-4 p-0 md:p-4 mt-6 md:mt-0\">\n <div\n class=\"p-4 flex flex-col border-surface-200 dark:border-surface-600 pricing-card cursor-pointer border-2 hover:border-primary duration-300 transition-all\"\n style=\"border-radius: 10px\"\n (click)=\"planSelect.emit(plan)\"\n >\n <div class=\"text-surface-900 dark:text-surface-0 text-center my-8 text-3xl\">\n {{ plan.title }}\n </div>\n <img [src]=\"plan.imageUrl\" class=\"w-10/12 mx-auto\" [alt]=\"plan.imageAlt\" />\n <div class=\"my-8 flex flex-col items-center gap-4\">\n <div class=\"flex items-center\">\n <span class=\"text-5xl font-bold mr-2 text-surface-900 dark:text-surface-0\">{{\n plan.price\n }}</span>\n <span class=\"text-surface-600 dark:text-surface-200\">{{ plan.pricePeriod }}</span>\n </div>\n <button\n hx-button\n hRipple\n rounded\n type=\"button\"\n class=\"border-0 ml-4 font-light leading-tight bg-blue-500 text-white\"\n (click)=\"planSelect.emit(plan); $event.stopPropagation()\"\n >\n {{ plan.buttonLabel }}\n </button>\n </div>\n <hx-divider class=\"w-full\" />\n <ul class=\"my-8 list-none p-0 flex text-surface-900 dark:text-surface-0 flex-col px-8\">\n @for (feature of plan.features; track feature) {\n <li class=\"py-2\">\n <i class=\"pi pi-fw pi-check text-xl text-cyan-500 mr-2\"></i>\n <span class=\"text-xl leading-normal\">{{ feature }}</span>\n </li>\n }\n </ul>\n </div>\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n// biome-ignore lint/style/useImportType: DI token, must be value import\nimport { Router, RouterModule } from '@angular/router';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { StyleClassModule } from '@gravionlabs/helix-core/styleclass';\nimport { HxButton } from '@gravionlabs/helix-ui';\nimport { HelixFloatingConfigurator } from '../../../../layout/components/floating-configurator/floating-configurator';\nimport type { HelixNavLink } from '../../landing.model';\n\nconst DEFAULT_NAV_LINKS: HelixNavLink[] = [\n { label: 'Home', route: '/landing', fragment: 'home' },\n { label: 'Features', route: '/landing', fragment: 'features' },\n { label: 'Highlights', route: '/landing', fragment: 'highlights' },\n { label: 'Pricing', route: '/landing', fragment: 'pricing' },\n];\n\n@Component({\n selector: 'helix-topbar-widget',\n standalone: true,\n imports: [RouterModule, StyleClassModule, HxButton, RippleModule, HelixFloatingConfigurator],\n templateUrl: './topbar-widget.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './topbar-widget.scss',\n})\nexport class HelixTopbarWidget {\n navLinks = input<HelixNavLink[]>(DEFAULT_NAV_LINKS);\n menuLabel = input('Menu');\n loginLabel = input('Login');\n loginRoute = input('/auth/login');\n registerLabel = input('Register');\n registerRoute = input('/auth/login');\n\n constructor(public router: Router) {}\n}\n","<a class=\"flex items-center\" href=\"#\">\n <svg viewBox=\"0 0 54 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"h-12 mr-2\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M17.1637 19.2467C17.1566 19.4033 17.1529 19.561 17.1529 19.7194C17.1529 25.3503 21.7203 29.915 27.3546 29.915C32.9887 29.915 37.5561 25.3503 37.5561 19.7194C37.5561 19.5572 37.5524 19.3959 37.5449 19.2355C38.5617 19.0801 39.5759 18.9013 40.5867 18.6994L40.6926 18.6782C40.7191 19.0218 40.7326 19.369 40.7326 19.7194C40.7326 27.1036 34.743 33.0896 27.3546 33.0896C19.966 33.0896 13.9765 27.1036 13.9765 19.7194C13.9765 19.374 13.9896 19.0316 14.0154 18.6927L14.0486 18.6994C15.0837 18.9062 16.1223 19.0886 17.1637 19.2467ZM33.3284 11.4538C31.6493 10.2396 29.5855 9.52381 27.3546 9.52381C25.1195 9.52381 23.0524 10.2421 21.3717 11.4603C20.0078 11.3232 18.6475 11.1387 17.2933 10.907C19.7453 8.11308 23.3438 6.34921 27.3546 6.34921C31.36 6.34921 34.9543 8.10844 37.4061 10.896C36.0521 11.1292 34.692 11.3152 33.3284 11.4538ZM43.826 18.0518C43.881 18.6003 43.9091 19.1566 43.9091 19.7194C43.9091 28.8568 36.4973 36.2642 27.3546 36.2642C18.2117 36.2642 10.8 28.8568 10.8 19.7194C10.8 19.1615 10.8276 18.61 10.8816 18.0663L7.75383 17.4411C7.66775 18.1886 7.62354 18.9488 7.62354 19.7194C7.62354 30.6102 16.4574 39.4388 27.3546 39.4388C38.2517 39.4388 47.0855 30.6102 47.0855 19.7194C47.0855 18.9439 47.0407 18.1789 46.9536 17.4267L43.826 18.0518ZM44.2613 9.54743L40.9084 10.2176C37.9134 5.95821 32.9593 3.1746 27.3546 3.1746C21.7442 3.1746 16.7856 5.96385 13.7915 10.2305L10.4399 9.56057C13.892 3.83178 20.1756 0 27.3546 0C34.5281 0 40.8075 3.82591 44.2613 9.54743Z\"\n fill=\"var(--primary-color)\"\n />\n <mask\n id=\"mask0_topbar\"\n style=\"mask-type: alpha\"\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"8\"\n width=\"54\"\n height=\"11\"\n >\n <path\n d=\"M27 18.3652C10.5114 19.1944 0 8.88892 0 8.88892C0 8.88892 16.5176 14.5866 27 14.5866C37.4824 14.5866 54 8.88892 54 8.88892C54 8.88892 43.4886 17.5361 27 18.3652Z\"\n fill=\"var(--primary-color)\"\n />\n </mask>\n <g mask=\"url(#mask0_topbar)\">\n <path\n d=\"M-4.673e-05 8.88887L3.73084 -1.91434L-8.00806 17.0473L-4.673e-05 8.88887ZM27 18.3652L26.4253 6.95109L27 18.3652ZM54 8.88887L61.2673 17.7127L50.2691 -1.91434L54 8.88887Z\"\n fill=\"var(--primary-color)\"\n />\n </g>\n </svg>\n <span class=\"text-surface-900 dark:text-surface-0 font-medium text-2xl leading-normal mr-20\"\n >SAKAI</span\n >\n</a>\n\n<a\n hx-button\n variant=\"text\"\n severity=\"secondary\"\n rounded\n iconOnly\n [attr.aria-label]=\"menuLabel()\"\n hRipple\n class=\"lg:hidden!\"\n hStyleClass=\"@next\"\n enterFromClass=\"hidden\"\n leaveToClass=\"hidden\"\n [hideOnOutsideClick]=\"true\"\n>\n <i class=\"pi pi-bars text-2xl!\"></i>\n</a>\n\n<div\n class=\"items-center bg-surface-0 dark:bg-surface-900 grow justify-between hidden lg:flex absolute lg:static w-full left-0 top-full px-12 lg:px-0 z-20 rounded-border\"\n>\n <ul\n class=\"list-none p-0 m-0 flex lg:items-center select-none flex-col lg:flex-row cursor-pointer gap-8\"\n >\n @for (link of navLinks(); track link.label) {\n <li>\n <a\n (click)=\"router.navigate([link.route], { fragment: link.fragment })\"\n hRipple\n class=\"px-0 py-4 text-surface-900 dark:text-surface-0 font-medium text-xl\"\n >\n <span>{{ link.label }}</span>\n </a>\n </li>\n }\n </ul>\n <div class=\"flex border-t lg:border-t-0 border-surface py-4 lg:py-0 mt-4 lg:mt-0 gap-2\">\n <a hx-button hRipple [routerLink]=\"loginRoute()\" rounded variant=\"text\">{{ loginLabel() }}</a>\n <a hx-button hRipple [routerLink]=\"registerRoute()\" rounded>{{ registerLabel() }}</a>\n <helix-floating-configurator [float]=\"false\" />\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { RippleModule } from '@gravionlabs/helix-core/ripple';\nimport { StyleClassModule } from '@gravionlabs/helix-core/styleclass';\nimport { HelixFeaturesWidget } from './components/features-widget/features-widget';\nimport { HelixFooterWidget } from './components/footer-widget/footer-widget';\nimport { HelixHeroWidget } from './components/hero-widget/hero-widget';\nimport { HelixHighlightsWidget } from './components/highlights-widget/highlights-widget';\nimport { HelixPricingWidget } from './components/pricing-widget/pricing-widget';\nimport { HelixTopbarWidget } from './components/topbar-widget/topbar-widget';\n\n@Component({\n selector: 'helix-landing',\n standalone: true,\n imports: [\n RouterModule,\n HelixTopbarWidget,\n HelixHeroWidget,\n HelixFeaturesWidget,\n HelixHighlightsWidget,\n HelixPricingWidget,\n HelixFooterWidget,\n RippleModule,\n StyleClassModule,\n ],\n templateUrl: './landing.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './landing.scss',\n})\nexport class HelixLanding {}\n","<div class=\"bg-surface-0 dark:bg-surface-900\">\n <div id=\"home\" class=\"landing-wrapper overflow-hidden\">\n <helix-topbar-widget\n class=\"py-6 px-6 mx-0 md:mx-12 lg:mx-20 lg:px-20 flex items-center justify-between relative lg:static\"\n />\n <helix-hero-widget />\n <helix-features-widget />\n <helix-highlights-widget />\n <helix-pricing-widget />\n <helix-footer-widget />\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { HxButton } from '@gravionlabs/helix-ui';\nimport { HelixFloatingConfigurator } from '../../layout/components/floating-configurator/floating-configurator';\n\nexport interface HelixNotfoundSuggestion {\n icon: string;\n title: string;\n description: string;\n route: string;\n}\n\nconst DEFAULT_SUGGESTIONS: HelixNotfoundSuggestion[] = [\n {\n icon: 'pi pi-fw pi-table',\n title: 'Frequently Asked Questions',\n description: 'Ultricies mi quis hendrerit dolor.',\n route: '/',\n },\n {\n icon: 'pi pi-fw pi-question-circle',\n title: 'Solution Center',\n description: 'Phasellus faucibus scelerisque eleifend.',\n route: '/',\n },\n {\n icon: 'pi pi-fw pi-unlock',\n title: 'Permission Manager',\n description: 'Accumsan in nisl nisi scelerisque',\n route: '/',\n },\n];\n\n@Component({\n selector: 'helix-notfound',\n standalone: true,\n imports: [RouterModule, HelixFloatingConfigurator, HxButton],\n templateUrl: './notfound.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrl: './notfound.scss',\n})\nexport class HelixNotfound {\n errorCode = input('404');\n title = input('Not Found');\n message = input('Requested resource is not available.');\n buttonLabel = input('Go to Dashboard');\n buttonRoute = input('/');\n suggestions = input<HelixNotfoundSuggestion[]>(DEFAULT_SUGGESTIONS);\n}\n","<helix-floating-configurator />\n<div class=\"flex items-center justify-center min-h-screen overflow-hidden\">\n <div class=\"flex flex-col items-center justify-center\">\n <svg\n width=\"54\"\n height=\"40\"\n viewBox=\"0 0 54 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"mb-8 w-32 shrink-0\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M17.1637 19.2467C17.1566 19.4033 17.1529 19.561 17.1529 19.7194C17.1529 25.3503 21.7203 29.915 27.3546 29.915C32.9887 29.915 37.5561 25.3503 37.5561 19.7194C37.5561 19.5572 37.5524 19.3959 37.5449 19.2355C38.5617 19.0801 39.5759 18.9013 40.5867 18.6994L40.6926 18.6782C40.7191 19.0218 40.7326 19.369 40.7326 19.7194C40.7326 27.1036 34.743 33.0896 27.3546 33.0896C19.966 33.0896 13.9765 27.1036 13.9765 19.7194C13.9765 19.374 13.9896 19.0316 14.0154 18.6927L14.0486 18.6994C15.0837 18.9062 16.1223 19.0886 17.1637 19.2467ZM33.3284 11.4538C31.6493 10.2396 29.5855 9.52381 27.3546 9.52381C25.1195 9.52381 23.0524 10.2421 21.3717 11.4603C20.0078 11.3232 18.6475 11.1387 17.2933 10.907C19.7453 8.11308 23.3438 6.34921 27.3546 6.34921C31.36 6.34921 34.9543 8.10844 37.4061 10.896C36.0521 11.1292 34.692 11.3152 33.3284 11.4538ZM43.826 18.0518C43.881 18.6003 43.9091 19.1566 43.9091 19.7194C43.9091 28.8568 36.4973 36.2642 27.3546 36.2642C18.2117 36.2642 10.8 28.8568 10.8 19.7194C10.8 19.1615 10.8276 18.61 10.8816 18.0663L7.75383 17.4411C7.66775 18.1886 7.62354 18.9488 7.62354 19.7194C7.62354 30.6102 16.4574 39.4388 27.3546 39.4388C38.2517 39.4388 47.0855 30.6102 47.0855 19.7194C47.0855 18.9439 47.0407 18.1789 46.9536 17.4267L43.826 18.0518ZM44.2613 9.54743L40.9084 10.2176C37.9134 5.95821 32.9593 3.1746 27.3546 3.1746C21.7442 3.1746 16.7856 5.96385 13.7915 10.2305L10.4399 9.56057C13.892 3.83178 20.1756 0 27.3546 0C34.5281 0 40.8075 3.82591 44.2613 9.54743Z\"\n fill=\"var(--primary-color)\"\n />\n <mask\n id=\"mask0_1413_1551\"\n style=\"mask-type: alpha\"\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"8\"\n width=\"54\"\n height=\"11\"\n >\n <path\n d=\"M27 18.3652C10.5114 19.1944 0 8.88892 0 8.88892C0 8.88892 16.5176 14.5866 27 14.5866C37.4824 14.5866 54 8.88892 54 8.88892C54 8.88892 43.4886 17.5361 27 18.3652Z\"\n fill=\"var(--primary-color)\"\n />\n </mask>\n <g mask=\"url(#mask0_1413_1551)\">\n <path\n d=\"M-4.673e-05 8.88887L3.73084 -1.91434L-8.00806 17.0473L-4.673e-05 8.88887ZM27 18.3652L26.4253 6.95109L27 18.3652ZM54 8.88887L61.2673 17.7127L50.2691 -1.91434L54 8.88887ZM-4.673e-05 8.88887C-8.00806 17.0473 -8.00469 17.0505 -8.00132 17.0538C-8.00018 17.055 -7.99675 17.0583 -7.9944 17.0607C-7.98963 17.0653 -7.98474 17.0701 -7.97966 17.075C-7.96949 17.0849 -7.95863 17.0955 -7.94707 17.1066C-7.92401 17.129 -7.89809 17.1539 -7.86944 17.1812C-7.8122 17.236 -7.74377 17.3005 -7.66436 17.3743C-7.50567 17.5218 -7.30269 17.7063 -7.05645 17.9221C-6.56467 18.3532 -5.89662 18.9125 -5.06089 19.5534C-3.39603 20.83 -1.02575 22.4605 1.98012 24.0457C7.97874 27.2091 16.7723 30.3226 27.5746 29.7793L26.4253 6.95109C20.7391 7.23699 16.0326 5.61231 12.6534 3.83024C10.9703 2.94267 9.68222 2.04866 8.86091 1.41888C8.45356 1.10653 8.17155 0.867278 8.0241 0.738027C7.95072 0.673671 7.91178 0.637576 7.90841 0.634492C7.90682 0.63298 7.91419 0.639805 7.93071 0.65557C7.93897 0.663455 7.94952 0.673589 7.96235 0.686039C7.96883 0.692262 7.97582 0.699075 7.98338 0.706471C7.98719 0.710167 7.99113 0.714014 7.99526 0.718014C7.99729 0.720008 8.00047 0.723119 8.00148 0.724116C8.00466 0.727265 8.00796 0.730446 -4.673e-05 8.88887ZM27.5746 29.7793C37.6904 29.2706 45.9416 26.3684 51.6602 23.6054C54.5296 22.2191 56.8064 20.8465 58.4186 19.7784C59.2265 19.2431 59.873 18.7805 60.3494 18.4257C60.5878 18.2482 60.7841 18.0971 60.9374 17.977C61.014 17.9169 61.0799 17.8645 61.1349 17.8203C61.1624 17.7981 61.1872 17.7781 61.2093 17.7602C61.2203 17.7512 61.2307 17.7427 61.2403 17.7348C61.2452 17.7308 61.2499 17.727 61.2544 17.7233C61.2566 17.7215 61.2598 17.7188 61.261 17.7179C61.2642 17.7153 61.2673 17.7127 54 8.88887C46.7326 0.0650536 46.7357 0.0625219 46.7387 0.0600241C46.7397 0.0592345 46.7427 0.0567658 46.7446 0.0551857C46.7485 0.0520238 46.7521 0.0489887 46.7557 0.0460799C46.7628 0.0402623 46.7694 0.0349487 46.7753 0.0301318C46.7871 0.0204986 46.7966 0.0128495 46.8037 0.00712562C46.818 -0.00431848 46.8228 -0.00808311 46.8184 -0.00463784C46.8096 0.00228345 46.764 0.0378652 46.6828 0.0983779C46.5199 0.219675 46.2165 0.439161 45.7812 0.727519C44.9072 1.30663 43.5257 2.14765 41.7061 3.02677C38.0469 4.79468 32.7981 6.63058 26.4253 6.95109L27.5746 29.7793ZM54 8.88887C50.2691 -1.91433 50.27 -1.91467 50.271 -1.91498C50.2712 -1.91506 50.272 -1.91535 50.2724 -1.9155C50.2733 -1.91581 50.274 -1.91602 50.2743 -1.91616C50.2752 -1.91643 50.275 -1.91636 50.2738 -1.91595C50.2714 -1.91515 50.2652 -1.91302 50.2552 -1.9096C50.2351 -1.90276 50.1999 -1.89078 50.1503 -1.874C50.0509 -1.84043 49.8938 -1.78773 49.6844 -1.71863C49.2652 -1.58031 48.6387 -1.377 47.8481 -1.13035C46.2609 -0.635237 44.0427 0.0249875 41.5325 0.6823C36.215 2.07471 30.6736 3.15796 27 3.15796V26.0151C33.8087 26.0151 41.7672 24.2495 47.3292 22.7931C50.2586 22.026 52.825 21.2618 54.6625 20.6886C55.5842 20.4011 56.33 20.1593 56.8551 19.986C57.1178 19.8993 57.3258 19.8296 57.4735 19.7797C57.5474 19.7548 57.6062 19.7348 57.6493 19.72C57.6709 19.7127 57.6885 19.7066 57.7021 19.7019C57.7089 19.6996 57.7147 19.6976 57.7195 19.696C57.7219 19.6952 57.7241 19.6944 57.726 19.6938C57.7269 19.6934 57.7281 19.693 57.7286 19.6929C57.7298 19.6924 57.7309 19.692 54 8.88887ZM27 3.15796C23.3263 3.15796 17.7849 2.07471 12.4674 0.6823C9.95717 0.0249875 7.73904 -0.635237 6.15184 -1.13035C5.36118 -1.377 4.73467 -1.58031 4.3155 -1.71863C4.10609 -1.78773 3.94899 -1.84043 3.84961 -1.874C3.79994 -1.89078 3.76474 -1.90276 3.74471 -1.9096C3.73469 -1.91302 3.72848 -1.91515 3.72613 -1.91595C3.72496 -1.91636 3.72476 -1.91643 3.72554 -1.91616C3.72593 -1.91602 3.72657 -1.91581 3.72745 -1.9155C3.72789 -1.91535 3.72874 -1.91506 3.72896 -1.91498C3.72987 -1.91467 3.73084 -1.91433 -4.673e-05 8.88887C-3.73093 19.692 -3.72983 19.6924 -3.72868 19.6929C-3.72821 19.693 -3.72698 19.6934 -3.72603 19.6938C-3.72415 19.6944 -3.72201 19.6952 -3.71961 19.696C-3.71482 19.6976 -3.70901 19.6996 -3.7022 19.7019C-3.68858 19.7066 -3.67095 19.7127 -3.6494 19.72C-3.60629 19.7348 -3.54745 19.7548 -3.47359 19.7797C-3.32589 19.8296 -3.11788 19.8993 -2.85516 19.986C-2.33008 20.1593 -1.58425 20.4011 -0.662589 20.6886C1.17485 21.2618 3.74125 22.026 6.67073 22.7931C12.2327 24.2495 20.1913 26.0151 27 26.0151V3.15796Z\"\n fill=\"var(--primary-color)\"\n />\n </g>\n </svg>\n <div\n style=\"\n border-radius: 56px;\n padding: 0.3rem;\n background: linear-gradient(\n 180deg,\n color-mix(in srgb, var(--primary-color), transparent 60%) 10%,\n var(--surface-ground) 30%\n );\n \"\n >\n <div\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center\"\n style=\"border-radius: 53px\"\n >\n <span class=\"text-primary font-bold text-3xl\">{{ errorCode() }}</span>\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-3xl lg:text-5xl mb-2\">\n {{ title() }}\n </h1>\n <div class=\"text-surface-600 dark:text-surface-200 mb-8\">{{ message() }}</div>\n @for (suggestion of suggestions(); track suggestion.title; let last = $last) {\n <a\n [routerLink]=\"suggestion.route\"\n class=\"w-full flex items-center py-8 border-surface-300 dark:border-surface-500 border-b\"\n [class.mb-8]=\"last\"\n >\n <span\n class=\"flex justify-center items-center border-2 border-primary text-primary rounded-border\"\n style=\"height: 3.5rem; width: 3.5rem\"\n >\n <i [class]=\"suggestion.icon + ' text-2xl!'\"></i>\n </span>\n <span class=\"ml-6 flex flex-col\">\n <span\n class=\"text-surface-900 dark:text-surface-0 lg:text-xl font-medium mb-0 block\"\n >{{ suggestion.title }}</span\n >\n <span class=\"text-surface-600 dark:text-surface-200 lg:text-xl\">{{\n suggestion.description\n }}</span>\n </span>\n </a>\n }\n <a hx-button [routerLink]=\"buttonRoute()\">{{ buttonLabel() }}</a>\n </div>\n </div>\n </div>\n</div>\n"],"mappings":"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"}