ngx-dev-toolbar 4.0.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +5 -5
  2. package/components/icon-button/icon-button.component.d.ts +13 -0
  3. package/components/icons/globe-icon.component.d.ts +6 -0
  4. package/components/icons/icon.models.d.ts +1 -1
  5. package/components/icons/pin-icon.component.d.ts +6 -0
  6. package/components/list-item/list-item.component.d.ts +24 -1
  7. package/components/select/select.component.d.ts +1 -1
  8. package/components/tool-button/tool-button.component.d.ts +6 -5
  9. package/components/toolbar-tool/toolbar-tool.component.d.ts +6 -11
  10. package/components/window/window.component.d.ts +1 -1
  11. package/fesm2022/ngx-dev-toolbar.mjs +2229 -698
  12. package/fesm2022/ngx-dev-toolbar.mjs.map +1 -1
  13. package/index.d.ts +7 -3
  14. package/models/tool-view-state.models.d.ts +2 -0
  15. package/models/toolbar-config.interface.d.ts +32 -2
  16. package/models/toolbar-position.model.d.ts +3 -0
  17. package/models/toolbar.interface.d.ts +19 -0
  18. package/package.json +6 -7
  19. package/tokens.d.ts +0 -18
  20. package/toolbar-state.service.d.ts +10 -9
  21. package/toolbar.component.d.ts +1 -0
  22. package/tools/app-features-tool/app-features-internal.service.d.ts +6 -0
  23. package/tools/app-features-tool/app-features-tool.component.d.ts +5 -0
  24. package/tools/app-features-tool/app-features.service.d.ts +7 -0
  25. package/tools/feature-flags-tool/feature-flags-internal.service.d.ts +6 -0
  26. package/tools/feature-flags-tool/feature-flags-tool.component.d.ts +5 -0
  27. package/tools/feature-flags-tool/feature-flags.service.d.ts +7 -0
  28. package/tools/home-tool/home-tool.component.d.ts +3 -0
  29. package/tools/home-tool/settings.models.d.ts +3 -0
  30. package/tools/i18n-tool/i18n-formatting.utils.d.ts +10 -0
  31. package/tools/i18n-tool/i18n-internal.service.d.ts +86 -0
  32. package/tools/i18n-tool/i18n-tool.component.d.ts +66 -0
  33. package/tools/i18n-tool/i18n.models.d.ts +55 -0
  34. package/tools/i18n-tool/i18n.service.d.ts +70 -0
  35. package/tools/permissions-tool/permissions-internal.service.d.ts +6 -0
  36. package/tools/permissions-tool/permissions-tool.component.d.ts +5 -0
  37. package/tools/permissions-tool/permissions.service.d.ts +7 -0
  38. package/tools/presets-tool/presets-internal.service.d.ts +1 -1
  39. package/tools/presets-tool/presets-tool.component.d.ts +5 -5
  40. package/tools/presets-tool/presets.models.d.ts +10 -3
  41. package/tools/language-tool/language-internal.service.d.ts +0 -30
  42. package/tools/language-tool/language-tool.component.d.ts +0 -14
  43. package/tools/language-tool/language.models.d.ts +0 -4
  44. package/tools/language-tool/language.service.d.ts +0 -26
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-dev-toolbar.mjs","sources":["../../../../libs/ngx-dev-toolbar/src/tokens.ts","../../../../libs/ngx-dev-toolbar/src/toolbar-state.service.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/angular-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/bolt-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/bug-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/code-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/database-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/discord-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/docs-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/edit-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/export-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/filter-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/gauge-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/gear-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/git-branch-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/import-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/layout-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/lightbulb-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/lighting-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/lock-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/moon-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/network-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/puzzle-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/refresh-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/star-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/sun-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/terminal-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/toggle-left-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/translate-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/trash-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/users-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/input/input.component.ts","../../../../libs/ngx-dev-toolbar/src/components/list/list.component.ts","../../../../libs/ngx-dev-toolbar/src/components/list-item/list-item.component.ts","../../../../libs/ngx-dev-toolbar/src/components/select/select.component.ts","../../../../libs/ngx-dev-toolbar/src/components/tool-button/tool-button.component.ts","../../../../libs/ngx-dev-toolbar/src/components/window/window.component.ts","../../../../libs/ngx-dev-toolbar/src/components/toolbar-tool/toolbar-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/utils/storage.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/app-features-tool/app-features-internal.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/app-features-tool/app-features-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/feature-flags-tool/feature-flags-internal.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/feature-flags-tool/feature-flags-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/components/button/button.component.ts","../../../../libs/ngx-dev-toolbar/src/components/card/card.component.ts","../../../../libs/ngx-dev-toolbar/src/components/clickable-card/clickable-card.component.ts","../../../../libs/ngx-dev-toolbar/src/components/link-button/link-button.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/home-tool/settings.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/home-tool/home-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/language-tool/language-internal.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/language-tool/language-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/permissions-tool/permissions-internal.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/permissions-tool/permissions-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/presets-tool/presets-internal.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/presets-tool/presets-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/toolbar.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/feature-flags-tool/feature-flags.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/permissions-tool/permissions.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/language-tool/language.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/app-features-tool/app-features.service.ts","../../../../libs/ngx-dev-toolbar/src/provide-toolbar.ts","../../../../libs/ngx-dev-toolbar/src/components/step-view/step-view.directive.ts","../../../../libs/ngx-dev-toolbar/src/components/step-view/step-view.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/presets-tool/presets.service.ts","../../../../libs/ngx-dev-toolbar/src/index.ts","../../../../libs/ngx-dev-toolbar/src/ngx-dev-toolbar.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ToolbarConfig } from './models/toolbar-config.interface';\nimport { ToolbarService } from './models/toolbar.interface';\nimport { ToolbarAppFeature } from './tools/app-features-tool/app-features.models';\nimport { ToolbarFlag } from './tools/feature-flags-tool/feature-flags.models';\nimport { Language } from './tools/language-tool/language.models';\nimport { ToolbarPermission } from './tools/permissions-tool/permissions.models';\n\n/**\n * InjectionToken for the Toolbar configuration.\n *\n * Provided automatically by `provideToolbar(config)`.\n * Can be injected to access the toolbar configuration at runtime.\n */\nexport const TOOLBAR_CONFIG = new InjectionToken<ToolbarConfig>(\n 'TOOLBAR_CONFIG'\n);\n\n/**\n * InjectionToken for the Feature Flags service.\n *\n * Use this token for tree-shakeable injection of the feature flags service.\n * When using dynamic imports, this token enables complete tree-shaking of\n * the toolbar in production builds.\n *\n * @example\n * ```typescript\n * // In your service\n * private devToolbar = inject(TOOLBAR_FEATURE_FLAGS, { optional: true });\n *\n * // Safe to call - no-op if toolbar is not provided\n * this.devToolbar?.setAvailableOptions(flags);\n * ```\n */\nexport const TOOLBAR_FEATURE_FLAGS = new InjectionToken<\n ToolbarService<ToolbarFlag>\n>('TOOLBAR_FEATURE_FLAGS');\n\n/**\n * InjectionToken for the Permissions service.\n *\n * Use this token for tree-shakeable injection of the permissions service.\n * When using dynamic imports, this token enables complete tree-shaking of\n * the toolbar in production builds.\n *\n * @example\n * ```typescript\n * // In your service\n * private devToolbar = inject(TOOLBAR_PERMISSIONS, { optional: true });\n *\n * // Safe to call - no-op if toolbar is not provided\n * this.devToolbar?.setAvailableOptions(permissions);\n * ```\n */\nexport const TOOLBAR_PERMISSIONS = new InjectionToken<\n ToolbarService<ToolbarPermission>\n>('TOOLBAR_PERMISSIONS');\n\n/**\n * InjectionToken for the Language service.\n *\n * Use this token for tree-shakeable injection of the language service.\n * When using dynamic imports, this token enables complete tree-shaking of\n * the toolbar in production builds.\n *\n * @example\n * ```typescript\n * // In your service\n * private devToolbar = inject(TOOLBAR_LANGUAGE, { optional: true });\n *\n * // Safe to call - no-op if toolbar is not provided\n * this.devToolbar?.setAvailableOptions(languages);\n * ```\n */\nexport const TOOLBAR_LANGUAGE = new InjectionToken<\n ToolbarService<Language>\n>('TOOLBAR_LANGUAGE');\n\n/**\n * InjectionToken for the App Features service.\n *\n * Use this token for tree-shakeable injection of the app features service.\n * When using dynamic imports, this token enables complete tree-shaking of\n * the toolbar in production builds.\n *\n * @example\n * ```typescript\n * // In your service\n * private devToolbar = inject(TOOLBAR_APP_FEATURES, { optional: true });\n *\n * // Safe to call - no-op if toolbar is not provided\n * this.devToolbar?.setAvailableOptions(features);\n * ```\n */\nexport const TOOLBAR_APP_FEATURES = new InjectionToken<\n ToolbarService<ToolbarAppFeature>\n>('TOOLBAR_APP_FEATURES');\n","import { Injectable, computed, signal } from '@angular/core';\nimport { ToolbarConfig } from './models/toolbar-config.interface';\n\ninterface ToolbarState {\n isHidden: boolean;\n activeToolId: string | null;\n error: string | null;\n theme: 'light' | 'dark';\n delay: number;\n config: ToolbarConfig;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToolbarStateService {\n // Initial state\n private state = signal<ToolbarState>({\n isHidden: true,\n activeToolId: null,\n delay: 3000,\n error: null,\n theme: 'dark',\n config: {},\n });\n\n // Selectors\n readonly isVisible = computed(\n () => !this.state().isHidden || this.hasActiveTool()\n );\n readonly isDarkTheme = computed(() => this.state().theme === 'dark');\n readonly activeToolId = computed(() => this.state().activeToolId);\n readonly hasActiveTool = computed(() => this.state().activeToolId !== null);\n readonly error = computed(() => this.state().error);\n readonly theme = computed(() => this.state().theme);\n /**\n * The delay to hide the toolbar\n */\n readonly delay = computed(() => this.state().delay);\n readonly config = computed(() => this.state().config);\n /**\n * Indicates if the toolbar is enabled based on config.\n * When disabled, toolbar UI won't render and services won't return forced values.\n * @default true\n */\n readonly isEnabled = computed(() => this.state().config.enabled ?? true);\n\n // State updates\n setVisibility(isVisible: boolean): void {\n if (isVisible) {\n this.state.update((state) => ({\n ...state,\n isHidden: false,\n }));\n } else {\n if (this.activeToolId() === null) {\n setTimeout(() => {\n this.state.update((state) => ({\n ...state,\n isHidden: true,\n }));\n }, this.state().delay);\n }\n }\n }\n\n setTheme(theme: 'light' | 'dark'): void {\n this.state.update((state) => ({\n ...state,\n theme,\n }));\n }\n\n setActiveTool(toolId: string | null): void {\n this.state.update((state) => ({\n ...state,\n activeToolId: toolId,\n }));\n\n if (toolId === null) {\n this.setVisibility(false);\n } else {\n this.setVisibility(true);\n }\n }\n\n // Public actions\n toggleTool(toolId: string | null): void {\n const currentToolId = this.activeToolId();\n this.setActiveTool(currentToolId === toolId ? null : toolId);\n }\n\n toggleVisibility(): void {\n this.state.update((state) => ({\n ...state,\n isHidden: !state.isHidden,\n }));\n }\n\n setConfig(config: ToolbarConfig): void {\n this.state.update((state) => ({\n ...state,\n config,\n }));\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'ndt-angular-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <defs>\n <linearGradient\n id=\"angular-gradient\"\n x1=\"6\"\n x2=\"18\"\n y1=\"20\"\n y2=\"4\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stop-color=\"#E40035\" />\n <stop offset=\".24\" stop-color=\"#F60A48\" />\n <stop offset=\".352\" stop-color=\"#F20755\" />\n <stop offset=\".494\" stop-color=\"#DC087D\" />\n <stop offset=\".745\" stop-color=\"#9717E7\" />\n <stop offset=\"1\" stop-color=\"#6C00F5\" />\n </linearGradient>\n </defs>\n <g fill=\"url(#angular-gradient)\">\n <polygon points=\"14.1,2.7 20.1,15.7 20.7,5.8\" />\n <polygon points=\"15.6,16.4 8.4,16.4 7.4,18.6 12,21.2 16.6,18.6\" />\n <polygon points=\"9.6,13.5 14.4,13.5 12,7.7\" />\n <polygon points=\"9.9,2.7 3.3,5.8 3.9,15.7\" />\n </g>\n </svg>\n `,\n})\nexport class AngularIconComponent {}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-bolt-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M160,16,144,96H208l-96,144,16-80H64Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z\"\n ></path>\n </svg>\n `,\n})\nexport class BoltIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-bug-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M140,88a16,16,0,1,1,16,16A16,16,0,0,1,140,88ZM100,72a16,16,0,1,0,16,16A16,16,0,0,0,100,72Zm120,72a91.84,91.84,0,0,1-2.34,20.64L236.81,173a12,12,0,0,1-9.62,22l-18-7.85a92,92,0,0,1-162.46,0l-18,7.85a12,12,0,1,1-9.62-22l19.15-8.36A91.84,91.84,0,0,1,36,144v-4H16a12,12,0,0,1,0-24H36v-4a91.84,91.84,0,0,1,2.34-20.64L19.19,83a12,12,0,0,1,9.62-22l18,7.85a92,92,0,0,1,162.46,0l18-7.85a12,12,0,1,1,9.62,22l-19.15,8.36A91.84,91.84,0,0,1,220,112v4h20a12,12,0,0,1,0,24H220ZM60,116H196v-4a68,68,0,0,0-136,0Zm56,94.92V140H60v4A68.1,68.1,0,0,0,116,210.92ZM196,144v-4H140v70.92A68.1,68.1,0,0,0,196,144Z\"\n ></path>\n </svg>\n `,\n})\nexport class BugIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-code-icon',\n standalone: true,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path d=\"M240,128l-48,40H64L16,128,64,88H192Z\" opacity=\"0.2\"></path>\n <path\n d=\"M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z\"\n ></path>\n </svg>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CodeIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-database-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M216,80c0,26.51-39.4,48-88,48S40,106.51,40,80s39.4-48,88-48S216,53.49,216,80Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M128,24C74.17,24,32,48.6,32,80v96c0,31.4,42.17,56,96,56s96-24.6,96-56V80C224,48.6,181.83,24,128,24Zm80,104c0,9.62-7.88,19.43-21.61,26.92C170.93,163.35,150.19,168,128,168s-42.93-4.65-58.39-13.08C55.88,147.43,48,137.62,48,128V111.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64ZM69.61,53.08C85.07,44.65,105.81,40,128,40s42.93,4.65,58.39,13.08C200.12,60.57,208,70.38,208,80s-7.88,19.43-21.61,26.92C170.93,115.35,150.19,120,128,120s-42.93-4.65-58.39-13.08C55.88,99.43,48,89.62,48,80S55.88,60.57,69.61,53.08ZM186.39,202.92C170.93,211.35,150.19,216,128,216s-42.93-4.65-58.39-13.08C55.88,195.43,48,185.62,48,176V159.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64V176C208,185.62,200.12,195.43,186.39,202.92Z\"\n ></path>\n </svg>\n `,\n})\nexport class DatabaseIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-discord-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M104,140a12,12,0,1,1-12-12A12,12,0,0,1,104,140Zm60-12a12,12,0,1,0,12,12A12,12,0,0,0,164,128Zm74.45,64.9-67,29.71a16.17,16.17,0,0,1-21.71-9.1l-8.11-22q-6.72.45-13.63.46t-13.63-.46l-8.11,22a16.18,16.18,0,0,1-21.71,9.1l-67-29.71a15.93,15.93,0,0,1-9.06-18.51L38,58A16.07,16.07,0,0,1,51,46.14l36.06-5.93a16.22,16.22,0,0,1,18.26,11.88l3.26,12.84Q118.11,64,128,64t19.4.93l3.26-12.84a16.21,16.21,0,0,1,18.26-11.88L205,46.14A16.07,16.07,0,0,1,218,58l29.53,116.38A15.93,15.93,0,0,1,238.45,192.9ZM232,178.28,202.47,62s0,0-.08,0L166.33,56a.17.17,0,0,0-.17,0l-2.83,11.14c5,.94,10,2.06,14.83,3.42A8,8,0,0,1,176,86.31a8.09,8.09,0,0,1-2.16-.3A172.25,172.25,0,0,0,128,80a172.25,172.25,0,0,0-45.84,6,8,8,0,1,1-4.32-15.4c4.82-1.36,9.78-2.48,14.82-3.42L89.83,56s0,0-.12,0h0L53.61,61.93a.17.17,0,0,0-.09,0L24,178.33,91,208a.23.23,0,0,0,.22,0L98,189.72a173.2,173.2,0,0,1-20.14-4.32A8,8,0,0,1,82.16,170,171.85,171.85,0,0,0,128,176a171.85,171.85,0,0,0,45.84-6,8,8,0,0,1,4.32,15.41A173.2,173.2,0,0,1,158,189.72L164.75,208a.22.22,0,0,0,.21,0Z\"\n ></path>\n </svg>\n `,\n})\nexport class DiscordIconComponent {\n fill = input<string>('#000000');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-docs-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M213.66,66.34l-40-40A8,8,0,0,0,168,24H88A16,16,0,0,0,72,40V56H56A16,16,0,0,0,40,72V216a16,16,0,0,0,16,16H168a16,16,0,0,0,16-16V200h16a16,16,0,0,0,16-16V72A8,8,0,0,0,213.66,66.34ZM168,216H56V72h76.69L168,107.31v84.53c0,.06,0,.11,0,.16s0,.1,0,.16V216Zm32-32H184V104a8,8,0,0,0-2.34-5.66l-40-40A8,8,0,0,0,136,56H88V40h76.69L200,75.31Zm-56-32a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h48A8,8,0,0,1,144,152Zm0,32a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h48A8,8,0,0,1,144,184Z\"\n ></path>\n </svg>\n `,\n})\nexport class DocsIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-edit-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M221.66,90.34,192,120,136,64l29.66-29.66a8,8,0,0,1,11.31,0L221.66,79A8,8,0,0,1,221.66,90.34Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z\"\n ></path>\n </svg>\n `,\n})\nexport class EditIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-export-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M216,112v96a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V112A16,16,0,0,1,56,96H80a8,8,0,0,1,0,16H56v96H200V112H176a8,8,0,0,1,0-16h24A16,16,0,0,1,216,112ZM93.66,69.66,120,43.31V136a8,8,0,0,0,16,0V43.31l26.34,26.35a8,8,0,0,0,11.32-11.32l-40-40a8,8,0,0,0-11.32,0l-40,40A8,8,0,0,0,93.66,69.66Z\"\n ></path>\n </svg>\n `,\n})\nexport class ExportIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-filter-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M227.81,66.76l-.08.09L160,139.17v55.49A8,8,0,0,1,156.94,201l-32,21.33A8,8,0,0,1,112,216V139.17L44.27,66.85l-.08-.09A16,16,0,0,1,56,40H200a16,16,0,0,1,11.84,26.76Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M230.6,49.53A23.94,23.94,0,0,0,200,32H56A24,24,0,0,0,38.15,65.67L104,139.37V216a8,8,0,0,0,11.58,7.16l32-16A8,8,0,0,0,152,200V139.37l65.85-73.7A23.93,23.93,0,0,0,230.6,49.53ZM203.36,54.86a8,8,0,0,1,.07,9.12L136,139.17V196.58l-16,8V139.17L52.57,64A8,8,0,0,1,56,48H200A8,8,0,0,1,203.36,54.86Z\"\n ></path>\n </svg>\n `,\n})\nexport class FilterIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-gauge-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M232,152a103.93,103.93,0,0,1-5.9,34.63,8,8,0,0,1-7.57,5.37H37.46a8.05,8.05,0,0,1-7.57-5.41A104.06,104.06,0,0,1,24,151.19C24.44,94,71.73,47.49,129,48A104,104,0,0,1,232,152Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M114.34,154.34l96-96a8,8,0,0,1,11.32,11.32l-96,96a8,8,0,0,1-11.32-11.32ZM128,88a63.9,63.9,0,0,1,20.44,3.33,8,8,0,1,0,5.11-15.16A80,80,0,0,0,48.49,160.88,8,8,0,0,0,56.43,168c.29,0,.59,0,.89-.05a8,8,0,0,0,7.07-8.83A64.92,64.92,0,0,1,64,152,64.07,64.07,0,0,1,128,88Zm99.74,13a8,8,0,0,0-14.24,7.3,96.27,96.27,0,0,1,5,75.71l-181.1-.07A96.24,96.24,0,0,1,128,56h.88a95,95,0,0,1,42.82,10.5A8,8,0,1,0,179,52.27,110.8,110.8,0,0,0,129,40h-1A112.05,112.05,0,0,0,22.35,189.25,16.07,16.07,0,0,0,37.46,200H218.53a16,16,0,0,0,15.11-10.71,112.35,112.35,0,0,0-5.9-88.3Z\"\n ></path>\n </svg>\n `,\n})\nexport class GaugeIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-gear-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M207.86,123.18l16.78-21a99.14,99.14,0,0,0-10.07-24.29l-26.7-3a81,81,0,0,0-6.81-6.81l-3-26.71a99.43,99.43,0,0,0-24.3-10l-21,16.77a81.59,81.59,0,0,0-9.64,0l-21-16.78A99.14,99.14,0,0,0,77.91,41.43l-3,26.7a81,81,0,0,0-6.81,6.81l-26.71,3a99.43,99.43,0,0,0-10,24.3l16.77,21a81.59,81.59,0,0,0,0,9.64l-16.78,21a99.14,99.14,0,0,0,10.07,24.29l26.7,3a81,81,0,0,0,6.81,6.81l3,26.71a99.43,99.43,0,0,0,24.3,10l21-16.77a81.59,81.59,0,0,0,9.64,0l21,16.78a99.14,99.14,0,0,0,24.29-10.07l3-26.7a81,81,0,0,0,6.81-6.81l26.71-3a99.43,99.43,0,0,0,10-24.3l-16.77-21A81.59,81.59,0,0,0,207.86,123.18ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8.06,8.06,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8.06,8.06,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z\"\n ></path>\n </svg>\n `,\n})\nexport class GearIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-git-branch-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M224,64a24,24,0,1,1-24-24A24,24,0,0,1,224,64Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M232,64a32,32,0,1,0-40,31v17a8,8,0,0,1-8,8H96a23.84,23.84,0,0,0-8,1.38V95a32,32,0,1,0-16,0v66a32,32,0,1,0,16,0V144a8,8,0,0,1,8-8h88a24,24,0,0,0,24-24V95A32.06,32.06,0,0,0,232,64ZM64,64A16,16,0,1,1,80,80,16,16,0,0,1,64,64ZM96,192a16,16,0,1,1-16-16A16,16,0,0,1,96,192ZM200,80a16,16,0,1,1,16-16A16,16,0,0,1,200,80Z\"\n ></path>\n </svg>\n `,\n})\nexport class GitBranchIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-import-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z\"\n ></path>\n </svg>\n `,\n})\nexport class ImportIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-layout-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path d=\"M104,104V208H40a8,8,0,0,1-8-8V104Z\" opacity=\"0.2\"></path>\n <path\n d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,16V96H40V56ZM40,112H96v88H40Zm176,88H112V112H216v88Z\"\n ></path>\n </svg>\n `,\n})\nexport class LayoutIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-lightbulb-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M176,232a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,232Zm40-128a87.55,87.55,0,0,1-33.64,69.21A16.24,16.24,0,0,0,176,186v6a16,16,0,0,1-16,16H96a16,16,0,0,1-16-16v-6a16,16,0,0,0-6.23-12.66A87.59,87.59,0,0,1,40,104.49C39.74,56.83,78.26,17.14,125.88,16A88,88,0,0,1,216,104Zm-16,0a72,72,0,0,0-73.74-72c-39,.92-70.47,33.39-70.26,72.39a71.65,71.65,0,0,0,27.64,56.3A32,32,0,0,1,96,186v6h64v-6a32.15,32.15,0,0,1,12.47-25.35A71.65,71.65,0,0,0,200,104Zm-16.11-9.34a57.6,57.6,0,0,0-46.56-46.55,8,8,0,0,0-2.66,15.78c16.57,2.79,30.63,16.85,33.44,33.45A8,8,0,0,0,176,104a9,9,0,0,0,1.35-.11A8,8,0,0,0,183.89,94.66Z\"\n ></path>\n </svg>\n `,\n})\nexport class LightbulbIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-lighting-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path d=\"M96,240l16-80L48,136,160,16,144,96l64,24Z\" opacity=\"0.2\"></path>\n <path\n d=\"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z\"\n ></path>\n </svg>\n `,\n})\nexport class LightingIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-lock-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M208,80H176V56a48,48,0,0,0-96,0V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80ZM96,56a32,32,0,0,1,64,0V80H96ZM208,208H48V96H208V208Zm-68-56a12,12,0,1,1-12-12A12,12,0,0,1,140,152Z\"\n ></path>\n </svg>\n `,\n})\nexport class LockIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-moon-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M224.3,150.3a8.1,8.1,0,0,0-7.8-5.7l-2.2.4A84,84,0,0,1,111,41.6a5.7,5.7,0,0,0,.3-1.8A7.9,7.9,0,0,0,109,33a8.1,8.1,0,0,0-8.1-1.1A104,104,0,1,0,225.4,156.9,8.1,8.1,0,0,0,224.3,150.3Z\"\n opacity=\"0.2\"\n />\n <path\n d=\"M233.5,137.3a12.1,12.1,0,0,0-11.8-8.6,7.9,7.9,0,0,0-1.3.1,80,80,0,0,1-98.2-98.2,12,12,0,0,0-15.6-14A104.2,104.2,0,0,0,32,120c0,57.4,46.6,104,104,104A104.2,104.2,0,0,0,239.4,149.6,12,12,0,0,0,233.5,137.3ZM136,208A88,88,0,0,1,48,120a87.6,87.6,0,0,1,64.8-84.7,96,96,0,0,0,111.9,112A87.6,87.6,0,0,1,136,208Z\"\n />\n </svg>\n `,\n})\nexport class MoonIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-network-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M152,40V72a8,8,0,0,1-8,8H112a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h32A8,8,0,0,1,152,40ZM80,168H48a8,8,0,0,0-8,8v32a8,8,0,0,0,8,8H80a8,8,0,0,0,8-8V176A8,8,0,0,0,80,168Zm128,0H176a8,8,0,0,0-8,8v32a8,8,0,0,0,8,8h32a8,8,0,0,0,8-8V176A8,8,0,0,0,208,168Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M232,112H136V88h8a16,16,0,0,0,16-16V40a16,16,0,0,0-16-16H112A16,16,0,0,0,96,40V72a16,16,0,0,0,16,16h8v24H24a8,8,0,0,0,0,16H56v32H48a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16H80a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16H72V128H184v32h-8a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16h-8V128h32a8,8,0,0,0,0-16ZM112,40h32V72H112ZM80,208H48V176H80Zm128,0H176V176h32Z\"\n ></path>\n </svg>\n `,\n})\nexport class NetworkIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-puzzle-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M204,168a28,28,0,0,0,12-2.69V208a8,8,0,0,1-8,8H64a8,8,0,0,1-8-8V165.31a28,28,0,1,1,0-50.62V72a8,8,0,0,1,8-8h46.69a28,28,0,1,1,50.61,0H208a8,8,0,0,1,8,8v42.69A28,28,0,1,0,204,168Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M220.27,158.54a8,8,0,0,0-7.7-.46,20,20,0,1,1,0-36.16A8,8,0,0,0,224,114.69V72a16,16,0,0,0-16-16H171.78a35.36,35.36,0,0,0,.22-4,36.15,36.15,0,0,0-11.36-26.25,36,36,0,0,0-60.55,23.63,36.56,36.56,0,0,0,.14,6.62H64A16,16,0,0,0,48,72v32.22a35.36,35.36,0,0,0-4-.22,36.12,36.12,0,0,0-26.24,11.36,35.7,35.7,0,0,0-9.69,27,36.08,36.08,0,0,0,33.31,33.6,36.56,36.56,0,0,0,6.62-.14V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V165.31A8,8,0,0,0,220.27,158.54ZM208,208H64V165.31a8,8,0,0,0-11.43-7.23,20,20,0,1,1,0-36.16A8,8,0,0,0,64,114.69V72h46.69a8,8,0,0,0,7.23-11.43,20,20,0,1,1,36.16,0A8,8,0,0,0,161.31,72H208v32.23a35.68,35.68,0,0,0-6.62-.14A36,36,0,0,0,204,176a35.36,35.36,0,0,0,4-.22Z\"\n ></path>\n </svg>\n `,\n})\nexport class PuzzleIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-refresh-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M216,128a88,88,0,1,1-88-88A88,88,0,0,1,216,128Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M224,48V96a8,8,0,0,1-8,8H168a8,8,0,0,1,0-16h28.69L182.06,73.37a79.56,79.56,0,0,0-56.13-23.43h-.45A79.52,79.52,0,0,0,69.59,72.71,8,8,0,0,1,58.41,61.27a96,96,0,0,1,135,.79L208,76.69V48a8,8,0,0,1,16,0ZM186.41,183.29a80,80,0,0,1-112.47-.66L59.31,168H88a8,8,0,0,0,0-16H40a8,8,0,0,0-8,8v48a8,8,0,0,0,16,0V179.31l14.63,14.63A95.43,95.43,0,0,0,130,222.06h.53a95.36,95.36,0,0,0,67.07-27.33,8,8,0,0,0-11.18-11.44Z\"\n ></path>\n </svg>\n `,\n})\nexport class RefreshIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-star-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M229.06,108.79l-48.7,42,14.88,62.79a8.4,8.4,0,0,1-12.52,9.17L128,189.09,73.28,222.74a8.4,8.4,0,0,1-12.52-9.17l14.88-62.79-48.7-42A8.46,8.46,0,0,1,31.73,94L95.64,88.8l24.62-59.6a8.36,8.36,0,0,1,15.48,0l24.62,59.6L224.27,94A8.46,8.46,0,0,1,229.06,108.79Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M239.18,97.26A16.38,16.38,0,0,0,224.92,86l-59-4.76L143.14,26.15a16.36,16.36,0,0,0-30.27,0L90.11,81.23,31.08,86a16.46,16.46,0,0,0-9.37,28.86l45,38.83L53,211.75a16.38,16.38,0,0,0,24.5,17.82L128,198.49l50.53,31.08A16.4,16.4,0,0,0,203,211.75l-13.76-58.07,45-38.83A16.43,16.43,0,0,0,239.18,97.26Zm-15.34,5.47-48.7,42a8,8,0,0,0-2.56,7.91l14.88,62.8a.37.37,0,0,1-.17.48c-.18.14-.23.11-.38,0l-54.72-33.65a8,8,0,0,0-8.38,0L69.09,215.94c-.15.09-.19.12-.38,0a.37.37,0,0,1-.17-.48l14.88-62.8a8,8,0,0,0-2.56-7.91l-48.7-42c-.12-.1-.23-.19-.13-.5s.18-.27.33-.29l63.92-5.16A8,8,0,0,0,103,91.86l24.62-59.61c.08-.17.11-.25.35-.25s.27.08.35.25L153,91.86a8,8,0,0,0,6.75,4.92l63.92,5.16c.15,0,.24,0,.33.29S224,102.63,223.84,102.73Z\"\n ></path>\n </svg>\n `,\n})\nexport class StarIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-sun-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M128,60a68,68,0,1,0,68,68A68.07,68.07,0,0,0,128,60Z\"\n opacity=\"0.2\"\n />\n <path\n d=\"M128,44a8,8,0,0,0,8-8V16a8,8,0,0,0-16,0V36A8,8,0,0,0,128,44ZM57.31,68.69a8,8,0,0,0,11.32-11.32L54.63,43.37A8,8,0,0,0,43.31,54.69ZM44,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H36A8,8,0,0,0,44,128Zm24.63,59.31-14,14a8,8,0,0,0,11.32,11.32l14-14a8,8,0,0,0-11.32-11.32ZM128,212a8,8,0,0,0-8,8v20a8,8,0,0,0,16,0V220A8,8,0,0,0,128,212Zm70.69-24.69a8,8,0,0,0-11.32,11.32l14,14a8,8,0,0,0,11.32-11.32ZM240,120H220a8,8,0,0,0,0,16h20a8,8,0,0,0,0-16Zm-24.69-62.63-14,14a8,8,0,0,0,11.32,11.32l14-14a8,8,0,0,0-11.32-11.32ZM128,76a52,52,0,1,0,52,52A52.06,52.06,0,0,0,128,76Zm0,88a36,36,0,1,1,36-36A36,36,0,0,1,128,164Z\"\n />\n </svg>\n `,\n})\nexport class SunIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-terminal-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M224,56V200a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V56a8,8,0,0,1,8-8H216A8,8,0,0,1,224,56Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M128,128a8,8,0,0,1-3,6.25l-40,32a8,8,0,1,1-10-12.5L107.19,128,75,102.25a8,8,0,1,1,10-12.5l40,32A8,8,0,0,1,128,128Zm48,24H136a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Zm56-96V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56ZM216,200V56H40V200H216Z\"\n ></path>\n </svg>\n `,\n})\nexport class TerminalIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-toggle-left-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M112,128A32,32,0,1,1,80,96,32,32,0,0,1,112,128Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M176,56H80a72,72,0,0,0,0,144h96a72,72,0,0,0,0-144Zm0,128H80A56,56,0,0,1,80,72h96a56,56,0,0,1,0,112ZM80,88a40,40,0,1,0,40,40A40,40,0,0,0,80,88Zm0,64a24,24,0,1,1,24-24A24,24,0,0,1,80,152Z\"\n ></path>\n </svg>\n `,\n})\nexport class ToggleLeftIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-translate-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M250.73,210.63l-56-112a12,12,0,0,0-21.46,0l-20.52,41A84.2,84.2,0,0,1,114,126.22,107.48,107.48,0,0,0,139.33,68H160a12,12,0,0,0,0-24H108V32a12,12,0,0,0-24,0V44H32a12,12,0,0,0,0,24h83.13A83.69,83.69,0,0,1,96,110.35,84,84,0,0,1,83.6,91a12,12,0,1,0-21.81,10A107.55,107.55,0,0,0,78,126.24,83.54,83.54,0,0,1,32,140a12,12,0,0,0,0,24,107.47,107.47,0,0,0,64-21.07,108.4,108.4,0,0,0,45.39,19.44l-24.13,48.26a12,12,0,1,0,21.46,10.73L151.41,196h65.17l12.68,25.36a12,12,0,1,0,21.47-10.73ZM163.41,172,184,130.83,204.58,172Z\"\n ></path>\n </svg>\n `,\n})\nexport class TranslateIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-trash-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z\"\n ></path>\n </svg>\n `,\n})\nexport class TrashIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-users-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M224,128a95.76,95.76,0,0,1-31.8,71.37A72,72,0,0,0,128,160a40,40,0,1,0-40-40,40,40,0,0,0,40,40,72,72,0,0,0-64.2,39.37h0A96,96,0,1,1,224,128Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24ZM74.08,197.5a64,64,0,0,1,107.84,0,87.83,87.83,0,0,1-107.84,0ZM96,120a32,32,0,1,1,32,32A32,32,0,0,1,96,120Zm97.76,66.41a79.66,79.66,0,0,0-36.06-28.75,48,48,0,1,0-59.4,0,79.66,79.66,0,0,0-36.06,28.75,88,88,0,1,1,131.52,0Z\"\n ></path>\n </svg>\n `,\n})\nexport class UsersIconComponent {\n fill = input<string>('#FFFF');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { AngularIconComponent } from './angular-icon.component';\nimport { BoltIconComponent } from './bolt-icon.component';\nimport { BugIconComponent } from './bug-icon.component';\nimport { CodeIconComponent } from './code-icon.component';\nimport { DatabaseIconComponent } from './database-icon.component';\nimport { DiscordIconComponent } from './discord-icon.component';\nimport { DocsIconComponent } from './docs-icon.component';\nimport { EditIconComponent } from './edit-icon.component';\nimport { ExportIconComponent } from './export-icon.component';\nimport { FilterIconComponent } from './filter-icon.component';\nimport { GaugeIconComponent } from './gauge-icon.component';\nimport { GearIconComponent } from './gear-icon.component';\nimport { GitBranchIconComponent } from './git-branch-icon.component';\nimport { IconName } from './icon.models';\nimport { ImportIconComponent } from './import-icon.component';\nimport { LayoutIconComponent } from './layout-icon.component';\nimport { LightbulbIconComponent } from './lightbulb-icon.component';\nimport { LightingIconComponent } from './lighting-icon.component';\nimport { LockIconComponent } from './lock-icon.component';\nimport { MoonIconComponent } from './moon-icon.component';\nimport { NetworkIconComponent } from './network-icon.component';\nimport { PuzzleIconComponent } from './puzzle-icon.component';\nimport { RefreshIconComponent } from './refresh-icon.component';\nimport { StarIconComponent } from './star-icon.component';\nimport { SunIconComponent } from './sun-icon.component';\nimport { TerminalIconComponent } from './terminal-icon.component';\nimport { ToggleLeftIconComponent } from './toggle-left-icon.component';\nimport { TranslateIconComponent } from './translate-icon.component';\nimport { TrashIconComponent } from './trash-icon.component';\nimport { UsersIconComponent } from './users-icon.component';\n\n@Component({\n selector: 'ndt-icon',\n standalone: true,\n imports: [\n AngularIconComponent,\n BoltIconComponent,\n BugIconComponent,\n CodeIconComponent,\n DatabaseIconComponent,\n DocsIconComponent,\n DiscordIconComponent,\n EditIconComponent,\n ExportIconComponent,\n FilterIconComponent,\n GaugeIconComponent,\n GearIconComponent,\n GitBranchIconComponent,\n ImportIconComponent,\n LayoutIconComponent,\n LightbulbIconComponent,\n LightingIconComponent,\n LockIconComponent,\n NetworkIconComponent,\n PuzzleIconComponent,\n RefreshIconComponent,\n StarIconComponent,\n TerminalIconComponent,\n ToggleLeftIconComponent,\n UsersIconComponent,\n SunIconComponent,\n MoonIconComponent,\n TranslateIconComponent,\n TrashIconComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @switch (name()) { @case ('angular') {\n <ndt-angular-icon />\n } @case ('bolt') {\n <ndt-bolt-icon [fill]=\"fill()\" />\n } @case ('bug') {\n <ndt-bug-icon [fill]=\"fill()\" />\n } @case ('code') {\n <ndt-code-icon [fill]=\"fill()\" />\n } @case ('database') {\n <ndt-database-icon [fill]=\"fill()\" />\n } @case ('docs') {\n <ndt-docs-icon [fill]=\"fill()\" />\n } @case ('edit') {\n <ndt-edit-icon [fill]=\"fill()\" />\n } @case ('export') {\n <ndt-export-icon [fill]=\"fill()\" />\n } @case ('filter') {\n <ndt-filter-icon [fill]=\"fill()\" />\n } @case ('gauge') {\n <ndt-gauge-icon [fill]=\"fill()\" />\n } @case ('gear') {\n <ndt-gear-icon [fill]=\"fill()\" />\n } @case ('git-branch') {\n <ndt-git-branch-icon [fill]=\"fill()\" />\n } @case ('import') {\n <ndt-import-icon [fill]=\"fill()\" />\n } @case ('layout') {\n <ndt-layout-icon [fill]=\"fill()\" />\n } @case ('lighting') {\n <ndt-lighting-icon [fill]=\"fill()\" />\n } @case ('lightbulb') {\n <ndt-lightbulb-icon [fill]=\"fill()\" />\n } @case ('lock') {\n <ndt-lock-icon [fill]=\"fill()\" />\n } @case ('network') {\n <ndt-network-icon [fill]=\"fill()\" />\n } @case ('puzzle') {\n <ndt-puzzle-icon [fill]=\"fill()\" />\n } @case ('refresh') {\n <ndt-refresh-icon [fill]=\"fill()\" />\n } @case ('star') {\n <ndt-star-icon [fill]=\"fill()\" />\n } @case ('terminal') {\n <ndt-terminal-icon [fill]=\"fill()\" />\n } @case ('toggle-left') {\n <ndt-toggle-left-icon [fill]=\"fill()\" />\n } @case ('user') {\n <ndt-users-icon [fill]=\"fill()\" />\n } @case ('sun') {\n <ndt-sun-icon [fill]=\"fill()\" />\n } @case ('moon') {\n <ndt-moon-icon [fill]=\"fill()\" />\n } @case ('translate') {\n <ndt-translate-icon [fill]=\"fill()\" />\n } @case ('discord') {\n <ndt-discord-icon [fill]=\"fill()\" />\n } @case ('trash') {\n <ndt-trash-icon [fill]=\"fill()\" />\n } }\n `,\n})\nexport class ToolbarIconComponent {\n private readonly stateService = inject(ToolbarStateService);\n\n name = input.required<IconName>();\n\n fill = computed(() =>\n this.stateService.theme() === 'dark' ? '#FFFFFF' : '#000000'\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'ndt-input',\n standalone: true,\n imports: [FormsModule],\n template: `\n <input\n [attr.aria-label]=\"ariaLabel()\"\n [type]=\"type()\"\n [class]=\"inputClass()\"\n [ngModel]=\"value()\"\n [placeholder]=\"placeholder()\"\n (ngModelChange)=\"value.set($event)\"\n />\n `,\n styleUrls: ['./input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarInputComponent {\n value = model.required<string>();\n\n type = input<string>('text');\n placeholder = input<string>('');\n ariaLabel = input<string>('');\n inputClass = input<string>('input');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Container component for displaying lists of items with consistent scrolling,\n * empty states, and layout across all tools.\n *\n * @example\n * ```html\n * <ndt-list\n * [hasItems]=\"items().length > 0\"\n * [hasResults]=\"filteredItems().length > 0\"\n * emptyMessage=\"No items found\"\n * noResultsMessage=\"No items match your filter\"\n * >\n * @for (item of filteredItems(); track item.id) {\n * <ndt-list-item ... />\n * }\n * </ndt-list>\n * ```\n */\n@Component({\n selector: 'ndt-list',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (!hasItems()) {\n <div class=\"empty-state\">\n <p>{{ emptyMessage() }}</p>\n @if (emptyHint()) {\n <p class=\"hint\">{{ emptyHint() }}</p>\n }\n </div>\n } @else if (!hasResults()) {\n <div class=\"empty-state\">\n <p>{{ noResultsMessage() }}</p>\n </div>\n } @else {\n <div class=\"list-container\">\n <ng-content />\n </div>\n }\n `,\n styleUrls: ['./list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarListComponent {\n /**\n * Whether the list has any items at all (before filtering).\n * When false, shows the emptyMessage.\n */\n hasItems = input<boolean>(true);\n\n /**\n * Whether the list has any results after filtering.\n * When false (but hasItems is true), shows the noResultsMessage.\n */\n hasResults = input<boolean>(true);\n\n /**\n * Message to display when there are no items at all.\n * @example \"No feature flags found\"\n */\n emptyMessage = input<string>('No items found');\n\n /**\n * Optional hint text to display below the empty message.\n * @example \"Call setAvailableOptions() to configure features\"\n */\n emptyHint = input<string | undefined>(undefined);\n\n /**\n * Message to display when items exist but none match the current filter.\n * @example \"No flags match your filter\"\n */\n noResultsMessage = input<string>('No results match your filter');\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * List item component with consistent layout, dot badge indicator,\n * and forced state highlighting.\n *\n * @example\n * ```html\n * <ndt-list-item\n * title=\"Analytics Dashboard\"\n * description=\"Advanced reporting tools\"\n * [isForced]=\"false\"\n * [currentValue]=\"true\"\n * [originalValue]=\"undefined\"\n * >\n * <ndt-select ... />\n * </ndt-list-item>\n * ```\n */\n@Component({\n selector: 'ndt-list-item',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"list-item\" [class.list-item--forced]=\"isForced()\">\n <div class=\"info\">\n <h3>{{ title() }}</h3>\n @if (description()) {\n <div class=\"description-wrapper\">\n <span\n class=\"dot-indicator\"\n [class.dot-indicator--on]=\"displayValue()\"\n [class.dot-indicator--off]=\"!displayValue()\"\n [title]=\"tooltipText()\"\n ></span>\n <p>{{ description() }}</p>\n </div>\n }\n </div>\n <div class=\"actions\">\n <ng-content />\n </div>\n </div>\n `,\n styleUrls: ['./list-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarListItemComponent {\n /**\n * Display title for the list item\n * @example \"Analytics Dashboard\"\n */\n title = input.required<string>();\n\n /**\n * Optional description text\n * @example \"Advanced reporting and data visualization tools\"\n */\n description = input<string | undefined>(undefined);\n\n /**\n * Whether this item's state is forced via the dev toolbar\n */\n isForced = input<boolean>(false);\n\n /**\n * Current enabled/granted state of the item\n */\n currentValue = input.required<boolean>();\n\n /**\n * Original value before forcing (only present when isForced is true)\n */\n originalValue = input<boolean | undefined>(undefined);\n\n /**\n * Value to display in the dot indicator.\n * For forced items: shows originalValue\n * For non-forced items: shows currentValue\n */\n protected displayValue = computed(() => {\n const originalValue = this.originalValue();\n return this.isForced() && originalValue !== undefined\n ? originalValue\n : this.currentValue();\n });\n\n /**\n * Tooltip text explaining the indicator state\n */\n protected tooltipText = computed(() => {\n const value = this.displayValue();\n const state = value ? 'enabled' : 'disabled';\n\n if (this.isForced() && this.originalValue() !== undefined) {\n return `Originally: ${state}`;\n }\n\n return `Current state: ${state}`;\n });\n}\n","import { CdkMenuModule } from '@angular/cdk/menu';\nimport { ConnectedPosition, OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarStateService } from '../../toolbar-state.service';\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\n@Component({\n selector: 'ndt-select',\n standalone: true,\n imports: [CommonModule, FormsModule, OverlayModule, CdkMenuModule],\n template: `\n <div\n class=\"ndt-select\"\n [class.small]=\"size() === 'small'\"\n [class.open]=\"isOpen()\"\n [class.placeholder]=\"isPlaceholder()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"selectMenuId\"\n [attr.data-theme]=\"theme()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"toggle()\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n tabindex=\"0\"\n role=\"combobox\"\n >\n <span class=\"select__value\">{{ selectedLabel() }}</span>\n <span class=\"select__arrow\" aria-hidden=\"true\"></span>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayPanelClass]=\"['ndt-overlay-panel', 'ndt-select-overlay']\"\n (overlayOutsideClick)=\"close()\"\n >\n <div\n [id]=\"selectMenuId\"\n class=\"ndt-select-menu\"\n cdkMenu\n role=\"listbox\"\n [attr.data-theme]=\"theme()\"\n >\n @for (option of options(); track option.value) {\n <button\n class=\"select-menu-item\"\n [class.selected]=\"option.value === value()\"\n [attr.aria-selected]=\"option.value === value()\"\n cdkMenuItem\n type=\"button\"\n (click)=\"selectOption(option)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n </ng-template>\n `,\n styleUrls: ['./select.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarSelectComponent {\n readonly devToolbarStateService = inject(ToolbarStateService);\n\n value = model<string>();\n options = input.required<SelectOption[]>();\n ariaLabel = input<string>('');\n label = input<string>('');\n size = input<'small' | 'medium'>('medium');\n placeholder = input<string>('Select an option');\n readonly theme = computed(() => this.devToolbarStateService.theme());\n\n protected readonly selectMenuId = `select-menu-${Math.random()\n .toString(36)\n .slice(2, 11)}`;\n isOpen = signal(false);\n\n isPlaceholder = computed(() => {\n const options = this.options();\n return !!options?.length && !options.some((opt) => opt.value === this.value());\n });\n\n selectedLabel = computed(() => {\n const selected = this.options()?.find((opt) => opt.value === this.value());\n return selected?.label ?? this.placeholder();\n });\n\n positions: ConnectedPosition[] = [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -4,\n },\n ];\n\n toggle() {\n this.isOpen.update((v) => !v);\n }\n\n close() {\n this.isOpen.set(false);\n }\n\n selectOption(option: SelectOption) {\n this.value.set(option.value);\n this.close();\n }\n}\n","import {\n animate,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { ToolbarStateService } from '../../toolbar-state.service';\n\n@Component({\n selector: 'ndt-tool-button',\n standalone: true,\n template: `\n <button\n class=\"tool-button\"\n [class.tool-button--active]=\"isActive()\"\n [class.tool-button--focus]=\"isFocused()\"\n (mouseenter)=\"onMouseEnter()\"\n (focusin)=\"onFocus()\"\n (focusout)=\"onBlur()\"\n (mouseleave)=\"onMouseLeave()\"\n (keydown.escape)=\"onEscape()\"\n >\n @if (isTooltipVisible()) {\n <span\n class=\"tooltip\"\n [@tooltipAnimation]=\"tooltipState ? 'visible' : 'hidden'\"\n >\n {{ tooltip() }}\n </span>\n }\n <ng-content />\n @if (badge()) {\n <span class=\"tool-button__badge\">{{ badge() }}</span>\n }\n </button>\n `,\n styleUrls: ['./tool-button.component.scss'],\n animations: [\n trigger('tooltipAnimation', [\n state(\n 'hidden',\n style({\n opacity: 0,\n transform: 'translateX(-50%) translateY(1rem)',\n })\n ),\n state(\n 'visible',\n style({\n opacity: 1,\n transform: 'translateX(-50%) translateY(0)',\n })\n ),\n transition('hidden => visible', [animate('200ms ease-out')]),\n transition('visible => hidden', [animate('150ms ease-in')]),\n ]),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarToolButtonComponent {\n // Injects\n private readonly state = inject(ToolbarStateService);\n private readonly elementRef = inject(ElementRef);\n\n // Inputs\n readonly title = input.required<string>();\n readonly toolId = input.required<string>();\n readonly badge = input<string>();\n\n // Outputs\n readonly open = output<void>();\n\n // Signals\n readonly isActive = computed(\n () => this.state.activeToolId() === this.toolId()\n );\n readonly isToolbarVisible = this.state.isVisible;\n\n readonly isFocused = signal(false);\n readonly tooltip = computed(\n () =>\n this.elementRef.nativeElement.parentElement?.getAttribute(\n 'data-tooltip'\n ) ?? ''\n );\n readonly isTooltipVisible = computed(\n () => this.tooltip() && !this.isActive()\n );\n\n // Properties\n protected tooltipState = false;\n private readonly hideDelay = 3000;\n\n // Public methods\n onClick(): void {\n this.isFocused.set(false);\n this.open.emit();\n }\n\n onMouseEnter(): void {\n this.tooltipState = true;\n }\n\n onMouseLeave(): void {\n this.tooltipState = false;\n }\n\n onEscape(): void {\n this.isFocused.set(false);\n }\n\n onFocus(): void {\n this.isFocused.set(true);\n }\n\n onBlur(): void {\n this.isFocused.set(false);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarWindowOptions } from '../toolbar-tool/toolbar-tool.models';\n\n@Component({\n selector: 'ndt-window',\n standalone: true,\n template: `\n <div class=\"ndt-window\" [attr.data-theme]=\"theme()\">\n <div class=\"ndt-header\">\n <div class=\"ndt-header__content\">\n <div class=\"ndt-header__title\">\n <h1>{{ config().title }}</h1>\n @if (config().isBeta) {\n <span class=\"beta-tag\">BETA</span>\n }\n </div>\n @if (config().description) {\n <p class=\"ndt-header__description\">{{ config().description }}</p>\n }\n </div>\n <div class=\"ndt-header__controls\">\n @if (config().isMinimizable) {\n <button aria-label=\"Minimize\" class=\"control\" (click)=\"onMinimize()\">\n −\n </button>\n } @if (config().isMaximizable) {\n <button aria-label=\"Maximize\" class=\"control\" (click)=\"onMaximize()\">\n □\n </button>\n } @if (config().isClosable) {\n <button\n aria-label=\"Close\"\n class=\"control control--close\"\n (click)=\"onClose()\"\n >\n ×\n </button>\n }\n </div>\n </div>\n\n <div class=\"divider\"></div>\n <div class=\"ndt-content\">\n <ng-content></ng-content>\n </div>\n </div>\n `,\n styleUrls: ['./window.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarWindowComponent {\n readonly devToolbarStateService = inject(ToolbarStateService);\n readonly config = input.required<ToolbarWindowOptions>();\n readonly closed = output<void>();\n readonly maximize = output<void>();\n readonly minimize = output<void>();\n\n readonly theme = computed(() => this.devToolbarStateService.theme());\n\n protected onClose(): void {\n this.closed.emit();\n }\n\n protected onMaximize(): void {\n this.maximize.emit();\n }\n\n protected onMinimize(): void {\n this.minimize.emit();\n }\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n contentChild,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarIconComponent } from '../icons/icon.component';\nimport { IconName } from '../icons/icon.models';\nimport { ToolbarToolButtonComponent } from '../tool-button/tool-button.component';\nimport { ToolbarWindowComponent } from '../window/window.component';\nimport { ToolbarWindowOptions } from './toolbar-tool.models';\n\n@Component({\n selector: 'ndt-toolbar-tool',\n standalone: true,\n imports: [\n CdkConnectedOverlay,\n OverlayModule,\n ToolbarWindowComponent,\n ToolbarToolButtonComponent,\n ToolbarIconComponent,\n ],\n template: `\n <div #trigger=\"cdkOverlayOrigin\" class=\"ndt-toolbar-tool\" cdkOverlayOrigin>\n <div\n class=\"ndt-toolbar-tool__icon\"\n (click)=\"onOpen()\"\n (keydown.enter)=\"onOpen()\"\n (keydown.space)=\"onOpen()\"\n tabindex=\"0\"\n >\n <div #buttonContainer [attr.data-tooltip]=\"title()\">\n @if (icon()) {\n <ndt-tool-button [title]=\"title()\" [toolId]=\"options().id\" [badge]=\"badge()\">\n <ndt-icon [name]=\"icon()\" />\n </ndt-tool-button>\n } @else {\n <ng-content select=\"ndt-tool-button\"></ng-content>\n }\n </div>\n </div>\n\n @if (isActive()) {\n <ng-template\n #contentTemplate\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isActive()\"\n [cdkConnectedOverlayPositions]=\"positions()\"\n [cdkConnectedOverlayWidth]=\"width()\"\n [cdkConnectedOverlayHeight]=\"height()\"\n [cdkConnectedOverlayPanelClass]=\"['ndt-overlay-panel', 'ndt-tool-overlay']\"\n cdkConnectedOverlay\n >\n <ndt-window [@slideAnimation] [config]=\"options()\" (closed)=\"onClose()\">\n <ng-content />\n </ndt-window>\n </ng-template>\n }\n </div>\n `,\n styleUrl: './toolbar-tool.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('slideAnimation', [\n transition(':enter', [\n style({\n transform: 'translateY(20px)',\n opacity: 0,\n }),\n animate(\n '400ms cubic-bezier(0.4, 0, 0.2, 1)',\n style({\n transform: 'translateY(0)',\n opacity: 1,\n })\n ),\n ]),\n transition(':leave', [\n style({\n transform: 'translateY(0)',\n opacity: 1,\n }),\n animate(\n '400ms cubic-bezier(0.4, 0, 0.2, 1)',\n style({\n transform: 'translateY(20px)',\n opacity: 0,\n })\n ),\n ]),\n ]),\n ],\n})\nexport class ToolbarToolComponent {\n state = inject(ToolbarStateService);\n buttonContainer = viewChild.required<ElementRef>('buttonContainer');\n buttonComponent = contentChild(ToolbarToolButtonComponent);\n\n options = input.required<ToolbarWindowOptions>();\n icon = input.required<IconName>();\n title = input.required<string>();\n badge = input<string>();\n isActive = computed(() => this.state.activeToolId() === this.options().id);\n height = computed(() => {\n switch (this.options().size) {\n case 'small':\n return 320;\n case 'medium':\n return 480;\n case 'tall':\n return 620;\n case 'large':\n return 620;\n default:\n return 480;\n }\n });\n\n width = computed(() => {\n switch (this.options().size) {\n case 'small':\n return 320;\n case 'medium':\n return 480;\n case 'tall':\n return 480;\n case 'large':\n return 620;\n default:\n return 400;\n }\n });\n positions = computed(() => {\n const triggerXPosition = this.getButtonContainerXPosition();\n const windowCenter = window.innerWidth / 2;\n const offsetX = windowCenter - triggerXPosition - 22;\n return [\n {\n originX: 'center' as const,\n originY: 'center' as const,\n overlayX: 'center' as const,\n overlayY: 'center' as const,\n offsetY: -(Math.ceil(this.height() / 2) + 36),\n offsetX,\n },\n ];\n });\n\n onOpen(): void {\n this.state.setActiveTool(this.options().id);\n }\n\n onClose(): void {\n this.state.setActiveTool(null);\n }\n\n getButtonContainerXPosition(): number {\n const buttonContainerRect =\n this.buttonContainer()?.nativeElement?.getBoundingClientRect();\n return buttonContainerRect?.left ?? 0;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarStorageService {\n private readonly PREFIX = 'AngularToolbar.';\n private readonly TOOLS_KEY = `${this.PREFIX}keys`;\n private readonly SETTINGS_KEY = `${this.PREFIX}settings`;\n\n public set<T>(key: string, value: T): void {\n const toolKey = this.getToolKey(key);\n this.addToolKey(toolKey);\n localStorage.setItem(toolKey, JSON.stringify(value));\n }\n\n public get<T>(key: string): T | null {\n const toolKey = this.getToolKey(key);\n const item = localStorage.getItem(toolKey);\n return item ? JSON.parse(item) : null;\n }\n\n public remove(key: string): void {\n const toolKey = this.getToolKey(key);\n localStorage.removeItem(toolKey);\n this.removeToolKey(toolKey);\n }\n\n public getAllSettings(): Record<string, unknown> {\n const settings: Record<string, unknown> = {};\n\n const keys = this.getToolKeys();\n keys.forEach((key) => {\n const value = this.get(key);\n if (value !== null) {\n settings[key] = value;\n }\n });\n\n return settings;\n }\n\n public setAllSettings(settings: Record<string, unknown>): void {\n Object.entries(settings).forEach(([key, value]) => {\n this.set(key, value);\n });\n }\n\n public clearAllSettings(): void {\n const keys = this.getToolKeys();\n keys.forEach((key) => {\n this.remove(key);\n });\n }\n\n public getToolKeys(): string[] {\n return JSON.parse(localStorage.getItem(this.TOOLS_KEY) ?? '[]');\n }\n\n private addToolKey(key: string) {\n const currentKeys = this.getToolKeys();\n if (currentKeys.includes(key)) {\n return;\n }\n currentKeys.push(key);\n localStorage.setItem(this.TOOLS_KEY, JSON.stringify(currentKeys));\n }\n\n private removeToolKey(key: string): void {\n const currentKeys = this.getToolKeys();\n const index = currentKeys.indexOf(key);\n if (index !== -1) {\n currentKeys.splice(index, 1);\n }\n localStorage.setItem(this.TOOLS_KEY, JSON.stringify(currentKeys));\n }\n\n private getToolKey(key: string): string {\n return key.includes(this.PREFIX) ? key : this.PREFIX + key;\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Observable, combineLatest, map } from 'rxjs';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { ToolbarAppFeature, ForcedAppFeaturesState } from './app-features.models';\n\n/**\n * Internal service for managing app features state and forced overrides.\n *\n * This service handles:\n * - Feature configuration storage\n * - Forced feature state management\n * - localStorage persistence\n * - State validation and cleanup\n *\n * @internal This service is for internal toolbar use only. Consumers should use ToolbarAppFeaturesService.\n */\n@Injectable({ providedIn: 'root' })\nexport class ToolbarInternalAppFeaturesService {\n private readonly STORAGE_KEY = 'app-features';\n private storageService = inject(ToolbarStorageService);\n private stateService = inject(ToolbarStateService);\n\n private appFeaturesSubject = new BehaviorSubject<ToolbarAppFeature[]>([]);\n private forcedFeaturesSubject = new BehaviorSubject<ForcedAppFeaturesState>({\n enabled: [],\n disabled: [],\n });\n\n private readonly forcedFeatures$ = this.forcedFeaturesSubject.asObservable();\n\n /**\n * Observable stream of all features with merged forced state\n */\n public features$: Observable<ToolbarAppFeature[]> = combineLatest([\n this.appFeaturesSubject.asObservable(),\n this.forcedFeatures$,\n ]).pipe(\n map(([appFeatures, forcedState]) => this.mergeForcedState(appFeatures, forcedState))\n );\n\n /**\n * Signal containing current features with merged forced state\n */\n public features = toSignal(this.features$, { initialValue: [] });\n\n constructor() {\n this.loadForcedFeatures();\n }\n\n /**\n * Set available app features for the application.\n * Validates features, trims whitespace, and triggers validation of forced state.\n *\n * @param features - Array of app features to configure\n * @throws Error if duplicate feature IDs or empty IDs are detected\n */\n setAppFeatures(features: ToolbarAppFeature[]): void {\n // Validate for empty IDs\n const emptyIdFeature = features.find((f) => !f.id || f.id.trim() === '');\n if (emptyIdFeature) {\n throw new Error('Feature ID cannot be empty');\n }\n\n // Validate for duplicate IDs\n const ids = features.map((f) => f.id);\n const duplicateIds = ids.filter((id, index) => ids.indexOf(id) !== index);\n if (duplicateIds.length > 0) {\n throw new Error(`Duplicate feature IDs detected: ${duplicateIds.join(', ')}`);\n }\n\n // Trim whitespace from names and warn about empty names\n const processedFeatures = features.map((feature) => {\n const trimmedName = feature.name.trim();\n if (!trimmedName) {\n console.warn(`Feature '${feature.id}' has empty name`);\n }\n return {\n ...feature,\n name: trimmedName || feature.name,\n };\n });\n\n this.appFeaturesSubject.next(processedFeatures);\n this.validateAndCleanForcedState();\n }\n\n /**\n * Get observable stream of app features (natural state, no forced state merged)\n */\n getAppFeatures(): Observable<ToolbarAppFeature[]> {\n return this.appFeaturesSubject.asObservable();\n }\n\n /**\n * Get observable stream of features that have forced overrides\n */\n getForcedFeatures(): Observable<ToolbarAppFeature[]> {\n return this.features$.pipe(\n map((features) => {\n // If toolbar is disabled, return empty array (no forced values)\n if (!this.stateService.isEnabled()) {\n return [];\n }\n return features.filter((feature) => feature.isForced);\n })\n );\n }\n\n /**\n * Force a feature to enabled or disabled state.\n * Persists the forced state to localStorage.\n *\n * @param featureId - ID of the feature to force\n * @param isEnabled - Whether to force feature to enabled (true) or disabled (false)\n */\n setFeature(featureId: string, isEnabled: boolean): void {\n const { enabled, disabled } = this.forcedFeaturesSubject.value;\n\n // Remove feature from both arrays\n const newEnabled = enabled.filter((id) => id !== featureId);\n const newDisabled = disabled.filter((id) => id !== featureId);\n\n // Add to appropriate array\n if (isEnabled) {\n newEnabled.push(featureId);\n } else {\n newDisabled.push(featureId);\n }\n\n const newState = { enabled: newEnabled, disabled: newDisabled };\n this.forcedFeaturesSubject.next(newState);\n this.saveForcedFeatures(newState);\n }\n\n /**\n * Remove forced override for a feature, returning it to natural state.\n * Persists the change to localStorage.\n *\n * @param featureId - ID of the feature to unforce\n */\n removeFeatureOverride(featureId: string): void {\n const { enabled, disabled } = this.forcedFeaturesSubject.value;\n\n const newState = {\n enabled: enabled.filter((id) => id !== featureId),\n disabled: disabled.filter((id) => id !== featureId),\n };\n\n this.forcedFeaturesSubject.next(newState);\n this.saveForcedFeatures(newState);\n }\n\n /**\n * Apply a preset forced state (for preset integration).\n * Validates and cleans invalid feature IDs before applying.\n *\n * @param state - Forced features state from preset\n */\n applyForcedState(state: ForcedAppFeaturesState): void {\n const configuredFeatureIds = this.appFeaturesSubject.value.map((f) => f.id);\n\n // Validate and filter to only valid IDs\n const validEnabled = state.enabled.filter((id) => configuredFeatureIds.includes(id));\n const validDisabled = state.disabled.filter((id) => configuredFeatureIds.includes(id));\n\n const invalidIds = [\n ...state.enabled.filter((id) => !configuredFeatureIds.includes(id)),\n ...state.disabled.filter((id) => !configuredFeatureIds.includes(id)),\n ];\n\n if (invalidIds.length > 0) {\n console.warn(`Preset contains invalid feature IDs (ignored): ${invalidIds.join(', ')}`);\n }\n\n const cleanedState = { enabled: validEnabled, disabled: validDisabled };\n this.forcedFeaturesSubject.next(cleanedState);\n this.saveForcedFeatures(cleanedState);\n }\n\n /**\n * Get current forced state as a snapshot (defensive copy).\n * Useful for preset exports and debugging.\n *\n * @returns Current forced features state\n */\n getCurrentForcedState(): ForcedAppFeaturesState {\n const state = this.forcedFeaturesSubject.value;\n return {\n enabled: [...state.enabled],\n disabled: [...state.disabled],\n };\n }\n\n /**\n * Merge natural app features with forced state.\n *\n * @param appFeatures - Natural feature configuration\n * @param forcedState - Forced overrides from localStorage/toolbar\n * @returns Features with merged forced state\n */\n private mergeForcedState(\n appFeatures: ToolbarAppFeature[],\n forcedState: ForcedAppFeaturesState\n ): ToolbarAppFeature[] {\n // If toolbar is disabled, return app features without overrides\n if (!this.stateService.isEnabled()) {\n return appFeatures;\n }\n\n return appFeatures.map((feature) => {\n const isInEnabled = forcedState.enabled.includes(feature.id);\n const isInDisabled = forcedState.disabled.includes(feature.id);\n const isForced = isInEnabled || isInDisabled;\n\n return {\n ...feature,\n isEnabled: isInEnabled ? true : isInDisabled ? false : feature.isEnabled,\n isForced,\n originalValue: isForced ? feature.isEnabled : undefined,\n };\n });\n }\n\n /**\n * Load forced features state from localStorage on initialization.\n * Handles missing or corrupted data gracefully.\n */\n private loadForcedFeatures(): void {\n try {\n const savedState = this.storageService.get<ForcedAppFeaturesState>(this.STORAGE_KEY);\n\n if (savedState) {\n this.forcedFeaturesSubject.next(savedState);\n }\n } catch (error) {\n console.error('Failed to load forced app features from localStorage:', error);\n // Use default empty state on error\n }\n }\n\n /**\n * Persist forced features state to localStorage.\n * Handles quota exceeded errors gracefully.\n *\n * @param state - Forced state to persist\n */\n private saveForcedFeatures(state: ForcedAppFeaturesState): void {\n try {\n this.storageService.set(this.STORAGE_KEY, state);\n } catch (error) {\n console.error('Failed to persist app features to localStorage:', error);\n // Continue execution - state is still valid in memory for current session\n }\n }\n\n /**\n * Validate forced feature IDs against configured features and clean up invalid ones.\n * Called after setAppFeatures() to ensure forced state references valid features.\n */\n private validateAndCleanForcedState(): void {\n const configuredFeatureIds = this.appFeaturesSubject.value.map((f) => f.id);\n const currentForcedState = this.forcedFeaturesSubject.value;\n\n const validEnabled = currentForcedState.enabled.filter((id) =>\n configuredFeatureIds.includes(id)\n );\n const validDisabled = currentForcedState.disabled.filter((id) =>\n configuredFeatureIds.includes(id)\n );\n\n const removedIds = [\n ...currentForcedState.enabled.filter((id) => !configuredFeatureIds.includes(id)),\n ...currentForcedState.disabled.filter((id) => !configuredFeatureIds.includes(id)),\n ];\n\n if (removedIds.length > 0) {\n console.warn(`Removed invalid feature IDs from forced state: ${removedIds.join(', ')}`);\n\n const cleanedState = { enabled: validEnabled, disabled: validDisabled };\n this.forcedFeaturesSubject.next(cleanedState);\n this.saveForcedFeatures(cleanedState);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarIconComponent } from '../../components/icons/icon.component';\nimport { ToolbarInputComponent } from '../../components/input/input.component';\nimport { ToolbarListComponent } from '../../components/list/list.component';\nimport { ToolbarListItemComponent } from '../../components/list-item/list-item.component';\nimport { ToolbarSelectComponent } from '../../components/select/select.component';\nimport { ToolbarToolComponent } from '../../components/toolbar-tool/toolbar-tool.component';\nimport { ToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';\nimport { ToolViewState } from '../../models/tool-view-state.models';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { ToolbarInternalAppFeaturesService } from './app-features-internal.service';\nimport { AppFeatureFilter, ToolbarAppFeature } from './app-features.models';\n\n/**\n * Component for managing app features in the dev toolbar.\n *\n * Provides UI for:\n * - Searching features by name and description\n * - Filtering features by state (all/forced/enabled/disabled)\n * - Forcing features to enabled/disabled state via 3-state dropdown\n * - Viewing feature descriptions and current state\n *\n * @example\n * ```html\n * <ndt-app-features-tool />\n * ```\n */\n@Component({\n selector: 'ndt-app-features-tool',\n standalone: true,\n imports: [\n FormsModule,\n ToolbarToolComponent,\n ToolbarInputComponent,\n ToolbarSelectComponent,\n ToolbarIconComponent,\n ToolbarListComponent,\n ToolbarListItemComponent,\n ],\n template: `\n <ndt-toolbar-tool\n [options]=\"options\"\n title=\"App Features\"\n icon=\"puzzle\"\n [badge]=\"badgeCount()\"\n >\n <div class=\"container\">\n <div class=\"tool-header\">\n <ndt-input\n [value]=\"searchQuery()\"\n (valueChange)=\"onSearchChange($event)\"\n placeholder=\"Search features...\"\n />\n <div class=\"filter-wrapper\">\n <ndt-icon name=\"filter\" class=\"filter-icon\" />\n <ndt-select\n [value]=\"activeFilter()\"\n [options]=\"filterOptions\"\n [size]=\"'medium'\"\n (valueChange)=\"onFilterChange($event)\"\n />\n </div>\n </div>\n\n <ndt-list\n [hasItems]=\"!hasNoFeatures()\"\n [hasResults]=\"!hasNoFilteredFeatures()\"\n emptyMessage=\"No app features found\"\n [emptyHint]=\"'Call setAvailableOptions() to configure features'\"\n noResultsMessage=\"No features match your filter\"\n >\n @for (feature of filteredFeatures(); track feature.id) {\n <ndt-list-item\n [title]=\"feature.name\"\n [description]=\"feature.description\"\n [isForced]=\"feature.isForced\"\n [currentValue]=\"feature.isEnabled\"\n [originalValue]=\"feature.originalValue\"\n >\n <ndt-select\n [value]=\"getFeatureValue(feature)\"\n [options]=\"featureValueOptions\"\n [ariaLabel]=\"'Set value for ' + feature.name\"\n (valueChange)=\"onFeatureChange(feature.id, $event ?? '')\"\n size=\"small\"\n />\n </ndt-list-item>\n }\n </ndt-list>\n </div>\n </ndt-toolbar-tool>\n `,\n styles: [\n `\n .container {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 0;\n }\n\n .tool-header {\n position: relative;\n flex-shrink: 0;\n display: flex;\n gap: var(--ndt-spacing-sm);\n margin-bottom: var(--ndt-spacing-sm);\n\n ndt-input {\n flex: 1;\n }\n\n .filter-wrapper {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-md);\n\n .filter-icon {\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n opacity: 0.6;\n }\n\n ndt-select {\n flex: 0 0 auto;\n min-width: 180px;\n }\n }\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarAppFeaturesToolComponent {\n // Injects\n private readonly appFeaturesService = inject(ToolbarInternalAppFeaturesService);\n private readonly storageService = inject(ToolbarStorageService);\n\n // Constants\n private readonly VIEW_STATE_KEY = 'app-features-view';\n\n // Signals\n protected readonly activeFilter = signal<AppFeatureFilter>('all');\n protected readonly searchQuery = signal<string>('');\n\n constructor() {\n this.loadViewState();\n\n // Save view state on changes\n effect(() => {\n const state: ToolViewState = {\n searchQuery: this.searchQuery(),\n filter: this.activeFilter(),\n sortOrder: 'asc',\n };\n this.storageService.set(this.VIEW_STATE_KEY, state);\n });\n }\n\n private loadViewState(): void {\n try {\n const saved = this.storageService.get<ToolViewState>(this.VIEW_STATE_KEY);\n if (saved) {\n this.searchQuery.set(saved.searchQuery ?? '');\n const filter = saved.filter as AppFeatureFilter;\n if (['all', 'forced', 'enabled', 'disabled'].includes(filter)) {\n this.activeFilter.set(filter);\n }\n }\n } catch {\n // Use defaults on error\n }\n }\n\n protected readonly features = this.appFeaturesService.features;\n\n // Computed badge count for forced values\n protected readonly badgeCount = computed(() => {\n const count = this.features().filter((f) => f.isForced).length;\n if (count === 0) return '';\n if (count > 99) return '99+';\n return count.toString();\n });\n protected readonly hasNoFeatures = computed(() => this.features().length === 0);\n protected readonly filteredFeatures = computed(() => {\n const filtered = this.features().filter((feature) => {\n const searchTerm = this.searchQuery().toLowerCase();\n const featureName = feature.name.toLowerCase();\n const featureDescription = feature.description?.toLowerCase() ?? '';\n\n const matchesSearch =\n !this.searchQuery() ||\n featureName.includes(searchTerm) ||\n featureDescription.includes(searchTerm);\n\n const matchesFilter =\n this.activeFilter() === 'all' ||\n (this.activeFilter() === 'forced' && feature.isForced) ||\n (this.activeFilter() === 'enabled' && feature.isEnabled) ||\n (this.activeFilter() === 'disabled' && !feature.isEnabled);\n\n return matchesSearch && matchesFilter;\n });\n\n // Sort alphabetically by name\n return filtered.sort((a, b) => a.name.localeCompare(b.name));\n });\n protected readonly hasNoFilteredFeatures = computed(\n () => this.filteredFeatures().length === 0\n );\n\n // Other properties\n protected readonly options = {\n title: 'App Features',\n description: 'Override product features to test different tiers and configurations',\n isClosable: true,\n size: 'tall',\n id: 'ndt-app-features',\n } as ToolbarWindowOptions;\n\n protected readonly filterOptions = [\n { value: 'all', label: 'All Features' },\n { value: 'forced', label: 'Forced' },\n { value: 'enabled', label: 'Enabled' },\n { value: 'disabled', label: 'Disabled' },\n ];\n\n protected readonly featureValueOptions = [\n { value: 'not-forced', label: 'Not Forced' },\n { value: 'off', label: 'Disabled' },\n { value: 'on', label: 'Enabled' },\n ];\n\n // Public methods\n /**\n * Handle filter dropdown change.\n * Updates the active filter to show all/forced/enabled/disabled features.\n */\n onFilterChange(value: string | undefined): void {\n const filter = this.filterOptions.find((f) => f.value === value);\n if (filter) {\n this.activeFilter.set(filter.value as AppFeatureFilter);\n }\n }\n\n /**\n * Handle feature value change from 3-state dropdown.\n * - 'not-forced': Remove forced override\n * - 'on': Force feature to enabled\n * - 'off': Force feature to disabled\n */\n onFeatureChange(featureId: string, value: string): void {\n switch (value) {\n case 'not-forced':\n this.appFeaturesService.removeFeatureOverride(featureId);\n break;\n case 'on':\n this.appFeaturesService.setFeature(featureId, true);\n break;\n case 'off':\n this.appFeaturesService.setFeature(featureId, false);\n break;\n }\n }\n\n /**\n * Handle search input change.\n * Updates the search query to filter features by name/description.\n */\n onSearchChange(query: string): void {\n this.searchQuery.set(query);\n }\n\n // Protected methods\n /**\n * Get the dropdown value for a feature's current state.\n * - Returns empty string if not forced (natural state)\n * - Returns 'on' if forced to enabled\n * - Returns 'off' if forced to disabled\n */\n protected getFeatureValue(feature: ToolbarAppFeature): string {\n if (!feature.isForced) return '';\n return feature.isEnabled ? 'on' : 'off';\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Observable, combineLatest, map } from 'rxjs';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { ToolbarFlag } from './feature-flags.models';\n\ninterface ForcedFlagsState {\n enabled: string[];\n disabled: string[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarInternalFeatureFlagService {\n private readonly STORAGE_KEY = 'feature-flags';\n private storageService = inject(ToolbarStorageService);\n private stateService = inject(ToolbarStateService);\n\n private appFlags$ = new BehaviorSubject<ToolbarFlag[]>([]);\n private forcedFlagsSubject = new BehaviorSubject<ForcedFlagsState>({\n enabled: [],\n disabled: [],\n });\n\n private readonly forcedFlags$ = this.forcedFlagsSubject.asObservable();\n\n public flags$: Observable<ToolbarFlag[]> = combineLatest([\n this.appFlags$,\n this.forcedFlags$,\n ]).pipe(\n map(([appFlags, { enabled, disabled }]) => {\n // If toolbar is disabled, return app flags without overrides\n if (!this.stateService.isEnabled()) {\n return appFlags;\n }\n\n return appFlags.map((flag) => {\n const isForced = enabled.includes(flag.id) || disabled.includes(flag.id);\n return {\n ...flag,\n isForced,\n isEnabled: enabled.includes(flag.id)\n ? true\n : disabled.includes(flag.id)\n ? false\n : flag.isEnabled,\n originalValue: isForced ? flag.isEnabled : undefined,\n };\n });\n })\n );\n\n public flags = toSignal(this.flags$, { initialValue: [] });\n\n constructor() {\n this.loadForcedFlags();\n }\n\n setAppFlags(flags: ToolbarFlag[]): void {\n this.appFlags$.next(flags);\n }\n\n getAppFlags(): Observable<ToolbarFlag[]> {\n return this.appFlags$.asObservable();\n }\n\n getForcedFlags(): Observable<ToolbarFlag[]> {\n return this.flags$.pipe(\n map((flags) => {\n // If toolbar is disabled, return empty array (no forced values)\n if (!this.stateService.isEnabled()) {\n return [];\n }\n return flags.filter((flag) => flag.isForced);\n })\n );\n }\n\n setFlag(flagId: string, isEnabled: boolean): void {\n const { enabled, disabled } = this.forcedFlagsSubject.value;\n\n const newEnabled = enabled.filter((id) => id !== flagId);\n const newDisabled = disabled.filter((id) => id !== flagId);\n\n if (isEnabled) {\n newEnabled.push(flagId);\n } else {\n newDisabled.push(flagId);\n }\n\n const newState = { enabled: newEnabled, disabled: newDisabled };\n this.forcedFlagsSubject.next(newState);\n this.storageService.set(this.STORAGE_KEY, newState);\n }\n\n removeFlagOverride(flagId: string): void {\n const { enabled, disabled } = this.forcedFlagsSubject.value;\n\n const newState = {\n enabled: enabled.filter((id) => id !== flagId),\n disabled: disabled.filter((id) => id !== flagId),\n };\n\n this.forcedFlagsSubject.next(newState);\n this.storageService.set(this.STORAGE_KEY, newState);\n }\n\n private loadForcedFlags(): void {\n const savedFlags = this.storageService.get<ForcedFlagsState>(\n this.STORAGE_KEY\n );\n\n if (savedFlags) {\n this.forcedFlagsSubject.next(savedFlags);\n }\n }\n\n /**\n * Apply feature flags from a preset (used by Presets Tool)\n * This method directly sets the forced flags state without user interaction\n */\n applyPresetFlags(presetState: ForcedFlagsState): void {\n this.forcedFlagsSubject.next(presetState);\n this.storageService.set(this.STORAGE_KEY, presetState);\n }\n\n /**\n * Get current forced state for saving to preset\n * Returns the raw state of enabled and disabled flag IDs\n */\n getCurrentForcedState(): ForcedFlagsState {\n return this.forcedFlagsSubject.value;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarIconComponent } from '../../components/icons/icon.component';\nimport { ToolbarInputComponent } from '../../components/input/input.component';\nimport { ToolbarListComponent } from '../../components/list/list.component';\nimport { ToolbarListItemComponent } from '../../components/list-item/list-item.component';\nimport { ToolbarSelectComponent } from '../../components/select/select.component';\nimport { ToolbarToolComponent } from '../../components/toolbar-tool/toolbar-tool.component';\nimport { ToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';\nimport { ToolViewState } from '../../models/tool-view-state.models';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { ToolbarInternalFeatureFlagService } from './feature-flags-internal.service';\nimport { ToolbarFlag, FeatureFlagFilter } from './feature-flags.models';\n@Component({\n selector: 'ndt-feature-flags-tool',\n standalone: true,\n imports: [\n FormsModule,\n ToolbarToolComponent,\n ToolbarInputComponent,\n ToolbarSelectComponent,\n ToolbarIconComponent,\n ToolbarListComponent,\n ToolbarListItemComponent,\n ],\n template: `\n <ndt-toolbar-tool\n [options]=\"options\"\n title=\"Feature Flags\"\n icon=\"toggle-left\"\n [badge]=\"badgeCount()\"\n >\n <div class=\"container\">\n <div class=\"tool-header\">\n <ndt-input\n [value]=\"searchQuery()\"\n (valueChange)=\"onSearchChange($event)\"\n placeholder=\"Search...\"\n />\n <div class=\"filter-wrapper\">\n <ndt-icon name=\"filter\" class=\"filter-icon\" />\n <ndt-select\n [value]=\"activeFilter()\"\n [options]=\"filterOptions\"\n [size]=\"'medium'\"\n (valueChange)=\"onFilterChange($event)\"\n />\n </div>\n </div>\n\n <ndt-list\n [hasItems]=\"!hasNoFlags()\"\n [hasResults]=\"!hasNoFilteredFlags()\"\n emptyMessage=\"No flags found\"\n noResultsMessage=\"No flags found matching your filter\"\n >\n @for (flag of filteredFlags(); track flag.id) {\n <ndt-list-item\n [title]=\"flag.name\"\n [description]=\"flag.description\"\n [isForced]=\"flag.isForced\"\n [currentValue]=\"flag.isEnabled\"\n [originalValue]=\"flag.originalValue\"\n >\n <ndt-select\n [value]=\"getFlagValue(flag)\"\n [options]=\"flagValueOptions\"\n [placeholder]=\"getFlagPlaceholder(flag)\"\n [ariaLabel]=\"'Set value for ' + flag.name\"\n (valueChange)=\"onFlagChange(flag.id, $event ?? '')\"\n size=\"small\"\n />\n </ndt-list-item>\n }\n </ndt-list>\n </div>\n </ndt-toolbar-tool>\n `,\n styles: [\n `\n .container {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 0;\n }\n\n .tool-header {\n position: relative;\n flex-shrink: 0;\n display: flex;\n gap: var(--ndt-spacing-sm);\n margin-bottom: var(--ndt-spacing-sm);\n\n ndt-input {\n flex: 1;\n }\n\n .filter-wrapper {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-md);\n\n .filter-icon {\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n opacity: 0.6;\n }\n\n ndt-select {\n flex: 0 0 auto;\n min-width: 180px;\n }\n }\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarFeatureFlagsToolComponent {\n // Injects\n private readonly featureFlags = inject(ToolbarInternalFeatureFlagService);\n private readonly storageService = inject(ToolbarStorageService);\n\n // Constants\n private readonly VIEW_STATE_KEY = 'feature-flags-view';\n\n // Signals\n protected readonly activeFilter = signal<FeatureFlagFilter>('all');\n protected readonly searchQuery = signal<string>('');\n\n constructor() {\n this.loadViewState();\n\n // Save view state on changes\n effect(() => {\n const state: ToolViewState = {\n searchQuery: this.searchQuery(),\n filter: this.activeFilter(),\n sortOrder: 'asc',\n };\n this.storageService.set(this.VIEW_STATE_KEY, state);\n });\n }\n\n private loadViewState(): void {\n try {\n const saved = this.storageService.get<ToolViewState>(this.VIEW_STATE_KEY);\n if (saved) {\n this.searchQuery.set(saved.searchQuery ?? '');\n const filter = saved.filter as FeatureFlagFilter;\n if (['all', 'forced', 'enabled', 'disabled'].includes(filter)) {\n this.activeFilter.set(filter);\n }\n }\n } catch {\n // Use defaults on error\n }\n }\n\n protected readonly flags = this.featureFlags.flags;\n\n // Computed badge count for forced values\n protected readonly badgeCount = computed(() => {\n const count = this.flags().filter((flag) => flag.isForced).length;\n if (count === 0) return '';\n if (count > 99) return '99+';\n return count.toString();\n });\n protected readonly hasNoFlags = computed(() => this.flags().length === 0);\n protected readonly filteredFlags = computed(() => {\n const filtered = this.flags().filter((flag) => {\n const searchTerm = this.searchQuery().toLowerCase();\n const flagName = flag.name.toLowerCase();\n const flagDescription = flag.description?.toLowerCase() ?? '';\n\n const matchesSearch =\n !this.searchQuery() ||\n flagName.toLowerCase().includes(searchTerm.toLowerCase()) ||\n flagDescription.toLowerCase().includes(searchTerm.toLowerCase());\n\n const matchesFilter =\n this.activeFilter() === 'all' ||\n (this.activeFilter() === 'forced' && flag.isForced) ||\n (this.activeFilter() === 'enabled' && flag.isEnabled) ||\n (this.activeFilter() === 'disabled' && !flag.isEnabled);\n\n return matchesSearch && matchesFilter;\n });\n\n // Sort alphabetically by name\n return filtered.sort((a, b) => a.name.localeCompare(b.name));\n });\n protected readonly hasNoFilteredFlags = computed(\n () => this.filteredFlags().length === 0\n );\n\n // Other properties\n protected readonly options = {\n title: 'Feature Flags',\n description: 'Manage the feature flags for your current session',\n isClosable: true,\n size: 'tall',\n id: 'ndt-feature-flags',\n isBeta: true,\n } as ToolbarWindowOptions;\n\n protected readonly filterOptions = [\n { value: 'all', label: 'All Flags' },\n { value: 'forced', label: 'Forced' },\n { value: 'enabled', label: 'Enabled' },\n { value: 'disabled', label: 'Disabled' },\n ];\n\n protected readonly flagValueOptions = [\n { value: 'not-forced', label: 'Not Forced' },\n { value: 'off', label: 'Forced Off' },\n { value: 'on', label: 'Forced On' },\n ];\n\n // Public methods\n onFilterChange(value: string | undefined): void {\n const filter = this.filterOptions.find((f) => f.value === value);\n if (filter) {\n this.activeFilter.set(filter.value as FeatureFlagFilter);\n }\n }\n\n onFlagChange(flagId: string, value: string): void {\n switch (value) {\n case 'not-forced':\n this.featureFlags.removeFlagOverride(flagId);\n break;\n case 'on':\n this.featureFlags.setFlag(flagId, true);\n break;\n case 'off':\n this.featureFlags.setFlag(flagId, false);\n break;\n }\n }\n\n onSearchChange(query: string): void {\n this.searchQuery.set(query);\n }\n\n // Protected methods\n protected getFlagValue(flag: ToolbarFlag): string {\n if (!flag.isForced) return '';\n return flag.isEnabled ? 'on' : 'off';\n }\n\n protected getFlagPlaceholder(flag: ToolbarFlag): string {\n return flag.isEnabled ? 'On' : 'Off';\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ToolbarIconComponent } from '../icons/icon.component';\nimport { IconName } from '../icons/icon.models';\n\n@Component({\n selector: 'ndt-button',\n standalone: true,\n imports: [ToolbarIconComponent],\n template: `\n <button\n class=\"button\"\n [attr.aria-label]=\"ariaLabel()\"\n [type]=\"type()\"\n [class.button--active]=\"isActive()\"\n [class.button--icon]=\"variant() === 'icon'\"\n >\n @if (icon()) {\n <ndt-icon [name]=\"icon() || 'star'\" />\n }\n @if (label()) {\n <span class=\"button__label\">{{ label() }}</span>\n }\n <ng-content />\n </button>\n `,\n styleUrls: ['./button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarButtonComponent {\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n readonly variant = input<'default' | 'icon'>('default');\n readonly icon = input<IconName>();\n readonly label = input<string>();\n readonly ariaLabel = input<string>();\n readonly isActive = input<boolean>(false);\n}\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\n\n@Component({\n selector: 'ndt-card',\n standalone: true,\n template: `\n <div\n class=\"card\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"onClick()\"\n (keydown.enter)=\"onClick()\"\n (keydown.space)=\"onClick()\"\n [class.card--hover]=\"isHovered()\"\n (mouseenter)=\"isHovered.set(true)\"\n (mouseleave)=\"isHovered.set(false)\"\n >\n <ng-content></ng-content>\n </div>\n `,\n styleUrls: ['./card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarCardComponent {\n readonly click = signal<void>(undefined);\n protected readonly isHovered = signal(false);\n\n onClick(): void {\n this.click.set();\n }\n}\n","import { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\nimport { ToolbarCardComponent } from '../card/card.component';\nimport { ToolbarIconComponent } from '../icons/icon.component';\nimport { IconName } from '../icons/icon.models';\n\n@Component({\n selector: 'ndt-clickable-card',\n standalone: true,\n imports: [ToolbarCardComponent, ToolbarIconComponent],\n template: `\n <ndt-card (clicked)=\"onClick()\">\n <div class=\"clickable-card\">\n <div class=\"clickable-card__icon\">\n <ndt-icon [name]=\"icon()\" />\n </div>\n <div class=\"clickable-card__content\">\n <div class=\"clickable-card__title\">{{ title() }}</div>\n <div class=\"clickable-card__subtitle\">{{ subtitle() }}</div>\n </div>\n </div>\n </ndt-card>\n `,\n styleUrls: ['./clickable-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarClickableCardComponent {\n readonly icon = input.required<IconName>();\n readonly title = input.required<string>();\n readonly subtitle = input.required<string>();\n readonly click = signal<void>(undefined);\n\n onClick(): void {\n this.click.set();\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ToolbarIconComponent } from '../icons/icon.component';\nimport { IconName } from '../icons/icon.models';\n\n@Component({\n selector: 'ndt-link-button',\n standalone: true,\n imports: [ToolbarIconComponent],\n template: `\n <a\n [href]=\"url()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"link-button\"\n >\n <div class=\"link-button__icon\">\n <ndt-icon [name]=\"icon()\" />\n </div>\n <span class=\"link-button__text\">\n <ng-content></ng-content>\n </span>\n </a>\n `,\n styleUrls: ['./link-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarLinkButtonComponent {\n readonly url = input.required<string>();\n readonly icon = input.required<IconName>();\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { Settings } from './settings.models';\n\n@Injectable({ providedIn: 'root' })\nexport class SettingsService {\n private readonly STORAGE_KEY = 'settings';\n private readonly storageService = inject(ToolbarStorageService);\n\n public getSettings(): Settings {\n return (\n this.storageService.get<Settings>(this.STORAGE_KEY) || {\n isDarkMode: false,\n }\n );\n }\n\n public setSettings(settings: Settings): void {\n this.storageService.set(this.STORAGE_KEY, settings);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarButtonComponent } from '../../components/button/button.component';\nimport { ToolbarClickableCardComponent } from '../../components/clickable-card/clickable-card.component';\nimport { ToolbarLinkButtonComponent } from '../../components/link-button/link-button.component';\nimport { ToolbarToolComponent } from '../../components/toolbar-tool/toolbar-tool.component';\nimport { ToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { SettingsService } from './settings.service';\n\ntype ThemeType = 'light' | 'dark';\n\n@Component({\n selector: 'ndt-home-tool',\n standalone: true,\n imports: [\n ToolbarToolComponent,\n FormsModule,\n ToolbarButtonComponent,\n ToolbarClickableCardComponent,\n ToolbarLinkButtonComponent,\n ],\n template: `\n <ndt-toolbar-tool [options]=\"options\" title=\"Home\" icon=\"angular\">\n <section class=\"settings\">\n <div class=\"settings-container\">\n <div class=\"instruction\">\n <div class=\"instruction__label\">\n <span class=\"instruction__label-text\">Reset Settings</span>\n <span class=\"instruction__label-description\">\n Reset all settings to their default values\n </span>\n </div>\n <div class=\"instruction__control\">\n <div class=\"instruction__control-button\">\n <ndt-button\n variant=\"icon\"\n icon=\"trash\"\n ariaLabel=\"Reset all settings\"\n (click)=\"onResetSettings()\"\n />\n </div>\n </div>\n </div>\n <div class=\"settings-actions\">\n <ndt-clickable-card\n icon=\"export\"\n title=\"Export Settings\"\n subtitle=\"Export the current settings to share with other devs or use in your tests\"\n (click)=\"onExportSettings()\"\n />\n <ndt-clickable-card\n icon=\"import\"\n title=\"Import Settings\"\n subtitle=\"Import settings to reproduce a scenario\"\n (click)=\"onImportSettings()\"\n />\n </div>\n </div>\n\n <div class=\"footer-links\">\n @for (link of links; track link.url) {\n <ndt-link-button [icon]=\"link.icon\" [url]=\"link.url\">\n {{ link.label }}\n </ndt-link-button>\n }\n </div>\n </section>\n </ndt-toolbar-tool>\n `,\n styleUrls: ['./home-tool.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarHomeToolComponent {\n protected readonly state = inject(ToolbarStateService);\n private readonly settingsService = inject(SettingsService);\n private readonly storageService = inject(ToolbarStorageService);\n\n readonly badge = input<string | number>();\n readonly title = `Angular Toolbar`;\n readonly options: ToolbarWindowOptions = {\n title: this.title,\n isClosable: true,\n id: 'ndt-home',\n size: 'medium',\n description: '',\n isBeta: true,\n };\n\n readonly links = [\n {\n icon: 'bug',\n url: 'https://github.com/alfredoperez/ngx-dev-toolbar/issues',\n label: 'Bug report',\n },\n {\n icon: 'lightbulb',\n url: 'https://github.com/alfredoperez/ngx-dev-toolbar/discussions',\n label: 'Suggestions',\n },\n {\n icon: 'docs',\n url: 'https://alfredoperez.github.io/ngx-dev-toolbar/',\n label: 'Docs',\n },\n {\n icon: 'star',\n url: 'https://github.com/alfredoperez/ngx-dev-toolbar',\n label: 'Star on GitHub',\n },\n {\n icon: 'discord',\n url: 'https://discord.com/invite/angular',\n label: 'Community',\n },\n ] as const;\n\n onExportSettings(): void {\n const settings = this.storageService.getAllSettings();\n const blob = new Blob([JSON.stringify(settings, null, 2)], {\n type: 'application/json',\n });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n const timestamp = new Date().toISOString().split('T')[0];\n link.href = url;\n link.download = `ngx-dev-toolbar-settings-${timestamp}.json`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n\n onImportSettings(): void {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'application/json';\n input.onchange = (event) => {\n const file = (event.target as HTMLInputElement).files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = (e) => {\n try {\n const settings = JSON.parse(e.target?.result as string);\n this.storageService.setAllSettings(settings);\n window.location.reload();\n } catch (error) {\n console.error('Error importing settings:', error);\n }\n };\n reader.readAsText(file);\n }\n };\n input.click();\n }\n\n onResetSettings(): void {\n this.storageService.clearAllSettings();\n window.location.reload();\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Observable, firstValueFrom, map } from 'rxjs';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { Language } from './language.models';\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarInternalLanguageService {\n private readonly STORAGE_KEY = 'language';\n private readonly storageService = inject(ToolbarStorageService);\n private readonly stateService = inject(ToolbarStateService);\n\n private languages$ = new BehaviorSubject<Language[]>([]);\n private forcedLanguage$ = new BehaviorSubject<Language | null>(null);\n\n public languages = toSignal(this.languages$, { initialValue: [] });\n\n constructor() {\n this.loadForcedLanguage();\n }\n\n setAppLanguages(languages: Language[]): void {\n this.languages$.next(languages);\n }\n\n getAppLanguages(): Observable<Language[]> {\n return this.languages$.asObservable();\n }\n\n setForcedLanguage(language: Language): void {\n this.forcedLanguage$.next(language);\n this.storageService.set(this.STORAGE_KEY, language);\n }\n\n getForcedLanguage(): Observable<Language[]> {\n return this.forcedLanguage$.pipe(\n map((language) => {\n // If toolbar is disabled, return empty array (no forced values)\n if (!this.stateService.isEnabled()) {\n return [];\n }\n return language ? [language] : [];\n })\n );\n }\n\n removeForcedLanguage(): void {\n this.forcedLanguage$.next(null);\n this.storageService.remove(this.STORAGE_KEY);\n }\n\n private loadForcedLanguage(): void {\n const savedLanguage = this.storageService.get<Language>(this.STORAGE_KEY);\n if (savedLanguage) {\n this.forcedLanguage$.next(savedLanguage);\n }\n }\n\n /**\n * Apply language from a preset (used by Presets Tool)\n * Accepts a language ID and finds the corresponding Language object from available languages\n */\n async applyPresetLanguage(languageId: string | null): Promise<void> {\n if (languageId === null) {\n this.removeForcedLanguage();\n return;\n }\n\n // Get available languages and find matching one\n const languages = await firstValueFrom(this.languages$);\n const language = languages.find((lang) => lang.id === languageId);\n\n if (language) {\n this.setForcedLanguage(language);\n } else {\n console.warn(\n `Language ${languageId} not found in available languages. Skipping.`\n );\n }\n }\n\n /**\n * Get current forced language ID for saving to preset\n * Returns the language ID or null if no language is forced\n */\n getCurrentForcedLanguage(): string | null {\n return this.forcedLanguage$.value?.id ?? null;\n }\n}\n","import { Component, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { firstValueFrom, map } from 'rxjs';\nimport { ToolbarSelectComponent } from '../../components/select/select.component';\nimport { ToolbarToolComponent } from '../../components/toolbar-tool/toolbar-tool.component';\nimport { ToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';\nimport { ToolbarInternalLanguageService } from './language-internal.service';\nimport { Language } from './language.models';\n\n@Component({\n selector: 'ndt-language-tool',\n standalone: true,\n imports: [ToolbarToolComponent, ToolbarSelectComponent],\n styleUrls: ['./language-tool.component.scss'],\n template: `\n <ndt-toolbar-tool title=\"Languages\" icon=\"translate\" [options]=\"options\">\n <div class=\"language-select\">\n <label for=\"language-select\">Language</label>\n <ndt-select\n id=\"language-select\"\n [value]=\"activeLanguage()\"\n [options]=\"languageOptions()\"\n [size]=\"'medium'\"\n (valueChange)=\"onLanguageChange($event ?? '')\"\n />\n </div>\n </ndt-toolbar-tool>\n `,\n})\nexport class ToolbarLanguageToolComponent {\n private readonly languageService = inject(ToolbarInternalLanguageService);\n\n protected readonly options = {\n title: 'Languages',\n description: 'Set the language for your current session',\n size: 'small',\n id: 'ndt-language',\n isBeta: true,\n isClosable: true,\n } as ToolbarWindowOptions;\n\n activeLanguage = signal<string>('not-forced');\n\n languageOptions = toSignal(\n this.languageService.getAppLanguages().pipe(\n map((languages) => [\n { value: 'not-forced', label: 'Not Forced' },\n ...languages.map(({ id: value, name: label }) => ({\n value,\n label,\n })),\n ])\n ),\n { initialValue: [] }\n );\n\n async onLanguageChange(language: string): Promise<void> {\n if (language === 'not-forced' || !language) {\n this.languageService.removeForcedLanguage();\n return;\n }\n\n const languages = await firstValueFrom(\n this.languageService.getAppLanguages()\n );\n const selectedLanguage = languages.find(({ id }) => id === language);\n if (selectedLanguage) {\n this.languageService.setForcedLanguage(selectedLanguage as Language);\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Observable, combineLatest, map } from 'rxjs';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport {\n ToolbarPermission,\n ForcedPermissionsState,\n} from './permissions.models';\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarInternalPermissionsService {\n private readonly STORAGE_KEY = 'permissions';\n private storageService = inject(ToolbarStorageService);\n private stateService = inject(ToolbarStateService);\n\n private appPermissions$ = new BehaviorSubject<ToolbarPermission[]>([]);\n private forcedStateSubject = new BehaviorSubject<ForcedPermissionsState>({\n granted: [],\n denied: [],\n });\n\n private readonly forcedState$ = this.forcedStateSubject.asObservable();\n\n public permissions$: Observable<ToolbarPermission[]> = combineLatest([\n this.appPermissions$,\n this.forcedState$,\n ]).pipe(\n map(([appPermissions, { granted, denied }]) => {\n // If toolbar is disabled, return app permissions without overrides\n if (!this.stateService.isEnabled()) {\n return appPermissions;\n }\n\n return appPermissions.map((permission) => {\n const isForced = granted.includes(permission.id) || denied.includes(permission.id);\n return {\n ...permission,\n isForced,\n isGranted: granted.includes(permission.id)\n ? true\n : denied.includes(permission.id)\n ? false\n : permission.isGranted,\n originalValue: isForced ? permission.isGranted : undefined,\n };\n });\n })\n );\n\n public permissions = toSignal(this.permissions$, { initialValue: [] });\n\n constructor() {\n this.loadForcedState();\n }\n\n setAppPermissions(permissions: ToolbarPermission[]): void {\n this.appPermissions$.next(permissions);\n this.validateAndCleanForcedState(permissions);\n }\n\n setPermission(id: string, granted: boolean): void {\n const { granted: grantedIds, denied: deniedIds } = this.forcedStateSubject.value;\n\n const newGranted = grantedIds.filter((permId) => permId !== id);\n const newDenied = deniedIds.filter((permId) => permId !== id);\n\n if (granted) {\n newGranted.push(id);\n } else {\n newDenied.push(id);\n }\n\n const newState = { granted: newGranted, denied: newDenied };\n this.forcedStateSubject.next(newState);\n this.storageService.set(this.STORAGE_KEY, newState);\n }\n\n removePermissionOverride(id: string): void {\n const { granted, denied } = this.forcedStateSubject.value;\n\n const newState = {\n granted: granted.filter((permId) => permId !== id),\n denied: denied.filter((permId) => permId !== id),\n };\n\n this.forcedStateSubject.next(newState);\n this.storageService.set(this.STORAGE_KEY, newState);\n }\n\n getForcedPermissions(): Observable<ToolbarPermission[]> {\n return this.permissions$.pipe(\n map((permissions) => {\n // If toolbar is disabled, return empty array (no forced values)\n if (!this.stateService.isEnabled()) {\n return [];\n }\n return permissions.filter((permission) => permission.isForced);\n })\n );\n }\n\n /**\n * Apply a preset permissions state, replacing the current forced state.\n * Useful for automated testing or restoring saved configurations.\n * @param state The preset forced permissions state to apply\n */\n applyPresetPermissions(state: ForcedPermissionsState): void {\n this.forcedStateSubject.next(state);\n this.storageService.set(this.STORAGE_KEY, state);\n }\n\n /**\n * Get the current forced permissions state.\n * Returns a deep copy to prevent external mutations.\n * @returns Current forced permissions state\n */\n getCurrentForcedState(): ForcedPermissionsState {\n const currentState = this.forcedStateSubject.value;\n return {\n granted: [...currentState.granted],\n denied: [...currentState.denied],\n };\n }\n\n private loadForcedState(): void {\n try {\n const savedState = this.storageService.get<ForcedPermissionsState>(\n this.STORAGE_KEY\n );\n\n if (savedState && this.isValidForcedState(savedState)) {\n this.forcedStateSubject.next(savedState);\n }\n } catch (error) {\n console.warn('Error loading forced permissions state from localStorage:', error);\n }\n }\n\n private isValidForcedState(state: unknown): state is ForcedPermissionsState {\n if (!state || typeof state !== 'object') {\n return false;\n }\n\n const candidate = state as Record<string, unknown>;\n return (\n Array.isArray(candidate['granted']) &&\n Array.isArray(candidate['denied'])\n );\n }\n\n private validateAndCleanForcedState(permissions: ToolbarPermission[]): void {\n const currentState = this.forcedStateSubject.value;\n const validIds = new Set(permissions.map((p) => p.id));\n\n const cleanedGranted = currentState.granted.filter((id) => validIds.has(id));\n const cleanedDenied = currentState.denied.filter((id) => validIds.has(id));\n\n const hasInvalidIds =\n cleanedGranted.length !== currentState.granted.length ||\n cleanedDenied.length !== currentState.denied.length;\n\n if (hasInvalidIds) {\n const cleanedState = {\n granted: cleanedGranted,\n denied: cleanedDenied,\n };\n this.forcedStateSubject.next(cleanedState);\n this.storageService.set(this.STORAGE_KEY, cleanedState);\n\n const invalidIds = [\n ...currentState.granted.filter((id) => !validIds.has(id)),\n ...currentState.denied.filter((id) => !validIds.has(id)),\n ];\n if (invalidIds.length > 0) {\n console.warn(\n 'Removed invalid permission IDs from forced state:',\n invalidIds\n );\n }\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarIconComponent } from '../../components/icons/icon.component';\nimport { ToolbarInputComponent } from '../../components/input/input.component';\nimport { ToolbarListComponent } from '../../components/list/list.component';\nimport { ToolbarListItemComponent } from '../../components/list-item/list-item.component';\nimport { ToolbarSelectComponent } from '../../components/select/select.component';\nimport { ToolbarToolComponent } from '../../components/toolbar-tool/toolbar-tool.component';\nimport { ToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';\nimport { ToolViewState } from '../../models/tool-view-state.models';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { ToolbarInternalPermissionsService } from './permissions-internal.service';\nimport {\n ToolbarPermission,\n PermissionFilter,\n} from './permissions.models';\n\n@Component({\n selector: 'ndt-permissions-tool',\n standalone: true,\n imports: [\n FormsModule,\n ToolbarToolComponent,\n ToolbarInputComponent,\n ToolbarSelectComponent,\n ToolbarIconComponent,\n ToolbarListComponent,\n ToolbarListItemComponent,\n ],\n template: `\n <ndt-toolbar-tool\n [options]=\"options\"\n title=\"Permissions\"\n icon=\"lock\"\n [badge]=\"badgeCount()\"\n >\n <div class=\"container\">\n <div class=\"tool-header\">\n <ndt-input\n [value]=\"searchQuery()\"\n (valueChange)=\"onSearchChange($event)\"\n placeholder=\"Search permissions...\"\n [ariaLabel]=\"'Search permissions'\"\n />\n <div class=\"filter-wrapper\">\n <ndt-icon name=\"filter\" class=\"filter-icon\" />\n <ndt-select\n [value]=\"activeFilter()\"\n [options]=\"filterOptions\"\n [size]=\"'medium'\"\n (valueChange)=\"onFilterChange($event)\"\n [ariaLabel]=\"'Filter permissions by state'\"\n />\n </div>\n </div>\n\n <ndt-list\n [hasItems]=\"!hasNoPermissions()\"\n [hasResults]=\"!hasNoFilteredPermissions()\"\n emptyMessage=\"No permissions found\"\n [emptyHint]=\"'Call setAvailableOptions() to configure permissions'\"\n noResultsMessage=\"No permissions match your filter\"\n >\n @for (permission of filteredPermissions(); track permission.id) {\n <ndt-list-item\n [title]=\"permission.name\"\n [description]=\"permission.description\"\n [isForced]=\"permission.isForced\"\n [currentValue]=\"permission.isGranted\"\n [originalValue]=\"permission.originalValue\"\n >\n <ndt-select\n [value]=\"getPermissionValue(permission)\"\n [options]=\"permissionValueOptions\"\n [ariaLabel]=\"'Override state for ' + permission.name\"\n (valueChange)=\"onPermissionChange(permission.id, $event ?? '')\"\n size=\"small\"\n />\n </ndt-list-item>\n }\n </ndt-list>\n </div>\n </ndt-toolbar-tool>\n `,\n styles: [\n `\n .container {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 0;\n }\n\n .tool-header {\n position: relative;\n flex-shrink: 0;\n display: flex;\n gap: var(--ndt-spacing-sm);\n margin-bottom: var(--ndt-spacing-sm);\n\n ndt-input {\n flex: 1;\n }\n\n .filter-wrapper {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-md);\n\n .filter-icon {\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n opacity: 0.6;\n }\n\n ndt-select {\n flex: 0 0 auto;\n min-width: 180px;\n }\n }\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarPermissionsToolComponent {\n // Injects\n private readonly permissionsService = inject(\n ToolbarInternalPermissionsService\n );\n private readonly storageService = inject(ToolbarStorageService);\n\n // Constants\n private readonly VIEW_STATE_KEY = 'permissions-view';\n\n // Signals\n protected readonly activeFilter = signal<PermissionFilter>('all');\n protected readonly searchQuery = signal<string>('');\n\n constructor() {\n this.loadViewState();\n\n // Save view state on changes\n effect(() => {\n const state: ToolViewState = {\n searchQuery: this.searchQuery(),\n filter: this.activeFilter(),\n sortOrder: 'asc',\n };\n this.storageService.set(this.VIEW_STATE_KEY, state);\n });\n }\n\n private loadViewState(): void {\n try {\n const saved = this.storageService.get<ToolViewState>(this.VIEW_STATE_KEY);\n if (saved) {\n this.searchQuery.set(saved.searchQuery ?? '');\n const filter = saved.filter as PermissionFilter;\n if (['all', 'forced', 'granted', 'denied'].includes(filter)) {\n this.activeFilter.set(filter);\n }\n }\n } catch {\n // Use defaults on error\n }\n }\n\n protected readonly permissions = this.permissionsService.permissions;\n\n // Computed badge count for forced values\n protected readonly badgeCount = computed(() => {\n const count = this.permissions().filter((p) => p.isForced).length;\n if (count === 0) return '';\n if (count > 99) return '99+';\n return count.toString();\n });\n protected readonly hasNoPermissions = computed(\n () => this.permissions().length === 0\n );\n protected readonly filteredPermissions = computed(() => {\n const filtered = this.permissions().filter((permission) => {\n const searchTerm = this.searchQuery().toLowerCase();\n const permissionName = permission.name.toLowerCase();\n const permissionDescription = permission.description?.toLowerCase() ?? '';\n\n const matchesSearch =\n !this.searchQuery() ||\n permissionName.includes(searchTerm) ||\n permissionDescription.includes(searchTerm);\n\n const matchesFilter =\n this.activeFilter() === 'all' ||\n (this.activeFilter() === 'forced' && permission.isForced) ||\n (this.activeFilter() === 'granted' && permission.isGranted) ||\n (this.activeFilter() === 'denied' && !permission.isGranted);\n\n return matchesSearch && matchesFilter;\n });\n\n // Sort alphabetically by name\n return filtered.sort((a, b) => a.name.localeCompare(b.name));\n });\n protected readonly hasNoFilteredPermissions = computed(\n () => this.filteredPermissions().length === 0\n );\n\n // Other properties\n protected readonly options = {\n title: 'Permissions',\n description: 'Manage permission overrides for your current session',\n isClosable: true,\n size: 'tall',\n id: 'ndt-permissions',\n isBeta: true,\n } as ToolbarWindowOptions;\n\n protected readonly filterOptions = [\n { value: 'all', label: 'All Permissions' },\n { value: 'forced', label: 'Forced' },\n { value: 'granted', label: 'Granted' },\n { value: 'denied', label: 'Denied' },\n ];\n\n protected readonly permissionValueOptions = [\n { value: 'not-forced', label: 'Not Forced' },\n { value: 'denied', label: 'Forced Denied' },\n { value: 'granted', label: 'Forced Granted' },\n ];\n\n // Public methods\n onFilterChange(value: string | undefined): void {\n const filter = this.filterOptions.find((f) => f.value === value);\n if (filter) {\n this.activeFilter.set(filter.value as PermissionFilter);\n }\n }\n\n onPermissionChange(id: string, value: string): void {\n switch (value) {\n case 'not-forced':\n this.permissionsService.removePermissionOverride(id);\n break;\n case 'granted':\n this.permissionsService.setPermission(id, true);\n break;\n case 'denied':\n this.permissionsService.setPermission(id, false);\n break;\n }\n }\n\n onSearchChange(query: string): void {\n this.searchQuery.set(query);\n }\n\n // Protected methods\n protected getPermissionValue(permission: ToolbarPermission): string {\n if (!permission.isForced) return '';\n return permission.isGranted ? 'granted' : 'denied';\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { ToolbarInternalFeatureFlagService } from '../feature-flags-tool/feature-flags-internal.service';\nimport { ToolbarInternalLanguageService } from '../language-tool/language-internal.service';\nimport { ToolbarInternalPermissionsService } from '../permissions-tool/permissions-internal.service';\nimport { ToolbarInternalAppFeaturesService } from '../app-features-tool/app-features-internal.service';\nimport {\n ToolbarPreset,\n ToolbarPresetConfig,\n PresetCategoryOptions,\n PartialApplyOptions,\n} from './presets.models';\n\n/**\n * Internal service for managing presets state.\n * Handles CRUD operations, captures current toolbar config, and applies presets.\n */\n@Injectable({ providedIn: 'root' })\nexport class ToolbarInternalPresetsService {\n private readonly STORAGE_KEY = 'presets';\n private storageService = inject(ToolbarStorageService);\n\n // Inject all other tool internal services (for reading/writing state)\n private featureFlagsService = inject(ToolbarInternalFeatureFlagService);\n private languageService = inject(ToolbarInternalLanguageService);\n private permissionsService = inject(ToolbarInternalPermissionsService);\n private appFeaturesService = inject(ToolbarInternalAppFeaturesService);\n\n private presetsSubject = new BehaviorSubject<ToolbarPreset[]>([]);\n public presets$: Observable<ToolbarPreset[]> =\n this.presetsSubject.asObservable();\n public presets = toSignal(this.presets$, { initialValue: [] });\n\n constructor() {\n this.loadPresets();\n }\n\n /**\n * Capture current toolbar state as a new preset\n */\n saveCurrentAsPreset(\n name: string,\n description?: string,\n categoryOptions?: PresetCategoryOptions\n ): ToolbarPreset {\n const preset: ToolbarPreset = {\n id: this.generateId(),\n name,\n description,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n config: this.captureCurrentConfig(categoryOptions),\n };\n\n const presets = [...this.presetsSubject.value, preset];\n this.presetsSubject.next(presets);\n this.storageService.set(this.STORAGE_KEY, presets);\n\n return preset;\n }\n\n /**\n * Apply a preset to all tools (THIS IS THE KEY METHOD)\n */\n async applyPreset(presetId: string): Promise<void> {\n const preset = this.presetsSubject.value.find((p) => p.id === presetId);\n if (!preset) return;\n\n // Apply to each tool's internal service\n this.featureFlagsService.applyPresetFlags(preset.config.featureFlags);\n await this.languageService.applyPresetLanguage(preset.config.language);\n this.permissionsService.applyPresetPermissions(preset.config.permissions);\n this.appFeaturesService.applyForcedState(preset.config.appFeatures);\n }\n\n /**\n * Update an existing preset with current toolbar state\n */\n updatePreset(presetId: string): void {\n const presets = this.presetsSubject.value.map((preset) => {\n if (preset.id === presetId) {\n return {\n ...preset,\n updatedAt: new Date().toISOString(),\n config: this.captureCurrentConfig(),\n };\n }\n return preset;\n });\n\n this.presetsSubject.next(presets);\n this.storageService.set(this.STORAGE_KEY, presets);\n }\n\n /**\n * Delete a preset\n */\n deletePreset(presetId: string): void {\n const presets = this.presetsSubject.value.filter(\n (p) => p.id !== presetId\n );\n this.presetsSubject.next(presets);\n this.storageService.set(this.STORAGE_KEY, presets);\n }\n\n /**\n * Add a preset (used for import)\n */\n addPreset(preset: ToolbarPreset): ToolbarPreset {\n // Generate new ID to avoid conflicts\n const newPreset: ToolbarPreset = {\n ...preset,\n id: this.generateId(),\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n\n const presets = [...this.presetsSubject.value, newPreset];\n this.presetsSubject.next(presets);\n this.storageService.set(this.STORAGE_KEY, presets);\n\n return newPreset;\n }\n\n /**\n * Get a preset by ID\n */\n getPresetById(presetId: string): ToolbarPreset | undefined {\n return this.presetsSubject.value.find((p) => p.id === presetId);\n }\n\n /**\n * Toggle favorite status for a preset\n */\n toggleFavorite(presetId: string): void {\n const presets = this.presetsSubject.value.map((p) =>\n p.id === presetId ? { ...p, isFavorite: !p.isFavorite } : p\n );\n this.presetsSubject.next(presets);\n this.storageService.set(this.STORAGE_KEY, presets);\n }\n\n /**\n * Apply a preset with partial options (only selected categories)\n */\n async partialApplyPreset(\n presetId: string,\n options: PartialApplyOptions\n ): Promise<void> {\n const preset = this.presetsSubject.value.find((p) => p.id === presetId);\n if (!preset) return;\n\n if (options.applyFeatureFlags) {\n this.featureFlagsService.applyPresetFlags(preset.config.featureFlags);\n }\n if (options.applyLanguage) {\n await this.languageService.applyPresetLanguage(preset.config.language);\n }\n if (options.applyPermissions) {\n this.permissionsService.applyPresetPermissions(preset.config.permissions);\n }\n if (options.applyAppFeatures) {\n this.appFeaturesService.applyForcedState(preset.config.appFeatures);\n }\n }\n\n /**\n * Update only the metadata (name, description) of a preset without changing config\n */\n updatePresetMetadata(\n presetId: string,\n name: string,\n description?: string\n ): void {\n const presets = this.presetsSubject.value.map((preset) => {\n if (preset.id === presetId) {\n return {\n ...preset,\n name,\n description,\n updatedAt: new Date().toISOString(),\n };\n }\n return preset;\n });\n\n this.presetsSubject.next(presets);\n this.storageService.set(this.STORAGE_KEY, presets);\n }\n\n /**\n * Capture current configuration from all tools\n */\n private captureCurrentConfig(\n categoryOptions?: PresetCategoryOptions\n ): ToolbarPresetConfig {\n // Default to including all categories if not specified\n const options = {\n includeFeatureFlags: categoryOptions?.includeFeatureFlags ?? true,\n includePermissions: categoryOptions?.includePermissions ?? true,\n includeAppFeatures: categoryOptions?.includeAppFeatures ?? true,\n includeLanguage: categoryOptions?.includeLanguage ?? true,\n };\n\n // Get current forced states\n const currentFlags = this.featureFlagsService.getCurrentForcedState();\n const currentPerms = this.permissionsService.getCurrentForcedState();\n const currentFeatures = this.appFeaturesService.getCurrentForcedState();\n\n // Filter by selected IDs if provided\n const filterById = (ids: string[], selected?: string[]) =>\n selected && selected.length > 0 ? ids.filter((id) => selected.includes(id)) : ids;\n\n return {\n featureFlags: options.includeFeatureFlags\n ? {\n enabled: filterById(\n currentFlags.enabled,\n categoryOptions?.selectedFlagIds\n ),\n disabled: filterById(\n currentFlags.disabled,\n categoryOptions?.selectedFlagIds\n ),\n }\n : { enabled: [], disabled: [] },\n language: options.includeLanguage\n ? this.languageService.getCurrentForcedLanguage()\n : null,\n permissions: options.includePermissions\n ? {\n granted: filterById(\n currentPerms.granted,\n categoryOptions?.selectedPermissionIds\n ),\n denied: filterById(\n currentPerms.denied,\n categoryOptions?.selectedPermissionIds\n ),\n }\n : { granted: [], denied: [] },\n appFeatures: options.includeAppFeatures\n ? {\n enabled: filterById(\n currentFeatures.enabled,\n categoryOptions?.selectedFeatureIds\n ),\n disabled: filterById(\n currentFeatures.disabled,\n categoryOptions?.selectedFeatureIds\n ),\n }\n : { enabled: [], disabled: [] },\n };\n }\n\n /**\n * Load presets from localStorage\n */\n private loadPresets(): void {\n try {\n const saved =\n this.storageService.get<ToolbarPreset[]>(this.STORAGE_KEY);\n if (saved && Array.isArray(saved)) {\n this.presetsSubject.next(saved);\n }\n } catch (error) {\n console.error('Failed to load presets from localStorage:', error);\n }\n }\n\n /**\n * Generate unique preset ID\n */\n private generateId(): string {\n return `preset-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarButtonComponent } from '../../components/button/button.component';\nimport { ToolbarIconComponent } from '../../components/icons/icon.component';\nimport { ToolbarInputComponent } from '../../components/input/input.component';\nimport { ToolbarToolComponent } from '../../components/toolbar-tool/toolbar-tool.component';\nimport { ToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';\nimport { ToolbarInternalPresetsService } from './presets-internal.service';\nimport { ToolbarInternalFeatureFlagService } from '../feature-flags-tool/feature-flags-internal.service';\nimport { ToolbarInternalPermissionsService } from '../permissions-tool/permissions-internal.service';\nimport { ToolbarInternalAppFeaturesService } from '../app-features-tool/app-features-internal.service';\nimport { ToolbarInternalLanguageService } from '../language-tool/language-internal.service';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarPreset } from './presets.models';\n\ntype ViewMode = 'list' | 'create' | 'edit' | 'import' | 'apply' | 'delete';\ntype ToastType = 'success' | 'error';\n\n@Component({\n selector: 'ndt-presets-tool',\n standalone: true,\n imports: [\n FormsModule,\n ToolbarToolComponent,\n ToolbarInputComponent,\n ToolbarButtonComponent,\n ToolbarIconComponent,\n ],\n template: `\n <ndt-toolbar-tool [options]=\"options\" title=\"Presets\" icon=\"layout\">\n <div class=\"container\">\n <!-- Toast Notification -->\n @if (toastMessage()) {\n <div class=\"toast\" [class.toast--success]=\"toastType() === 'success'\" [class.toast--error]=\"toastType() === 'error'\">\n <span class=\"toast__icon\">{{ toastType() === 'success' ? '✓' : '✕' }}</span>\n <span class=\"toast__message\">{{ toastMessage() }}</span>\n </div>\n }\n\n\n <!-- Mode Toggle -->\n @if (!hasNoPresets() || viewMode() !== 'list') {\n <div class=\"tool-header\">\n @if (viewMode() === 'list') {\n <ndt-input\n [value]=\"searchQuery()\"\n (valueChange)=\"onSearchChange($event)\"\n placeholder=\"Search presets...\"\n [ariaLabel]=\"'Search presets'\"\n />\n <ndt-button\n (click)=\"onSwitchToImportMode()\"\n [ariaLabel]=\"'Import preset'\"\n >\n Import\n </ndt-button>\n <ndt-button\n (click)=\"onSwitchToCreateMode()\"\n [ariaLabel]=\"'Create new preset'\"\n >\n New\n </ndt-button>\n } @else {\n <ndt-button\n (click)=\"onSwitchToListMode()\"\n [ariaLabel]=\"'Back to list'\"\n >\n ← Back\n </ndt-button>\n }\n </div>\n }\n\n <!-- Create Form -->\n @if (viewMode() === 'create') {\n <form (submit)=\"onSavePreset($event)\" class=\"preset-form\">\n <h3 class=\"form-title\">Create Preset</h3>\n <p class=\"form-hint\">This will save the current forced values from other tools. Only items you've explicitly set will be included.</p>\n <div class=\"form-field\">\n <ndt-input\n label=\"Preset Name *\"\n [value]=\"presetName()\"\n (valueChange)=\"onPresetNameChange($event)\"\n placeholder=\"e.g., Admin User - Full Access\"\n [ariaLabel]=\"'Preset name'\"\n />\n @if (nameError()) {\n <span class=\"field-error\">{{ nameError() }}</span>\n }\n </div>\n <ndt-input\n label=\"Description (optional)\"\n [value]=\"presetDescription()\"\n (valueChange)=\"presetDescription.set($event)\"\n placeholder=\"Brief description of this preset\"\n [ariaLabel]=\"'Preset description'\"\n />\n\n <!-- Category selection checkboxes -->\n <div class=\"preset-summary\">\n <h4>Select what to include:</h4>\n\n @if (isFeatureFlagsEnabled()) {\n <div class=\"category-section\">\n <label class=\"checkbox-option\">\n <input\n type=\"checkbox\"\n [checked]=\"includeFeatureFlags()\"\n (change)=\"includeFeatureFlags.set(!includeFeatureFlags())\"\n [disabled]=\"getCurrentFlagsCount() === 0\"\n />\n <span>Feature Flags ({{ getCurrentFlagsCount() }} forced)</span>\n </label>\n @if (forcedFlags().length > 0) {\n <ul class=\"forced-items-list\">\n @for (flag of forcedFlags(); track flag.id) {\n <li>\n <label class=\"item-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(selectedFlagIds(), flag.id)\"\n (change)=\"toggleItemSelection(selectedFlagIds, flag.id)\"\n />\n <span class=\"item-name\">{{ flag.name }}</span>\n <span class=\"item-status\" [class.enabled]=\"flag.isEnabled\" [class.disabled]=\"!flag.isEnabled\">\n {{ flag.isEnabled ? 'ON' : 'OFF' }}\n </span>\n </label>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n @if (isPermissionsEnabled()) {\n <div class=\"category-section\">\n <label class=\"checkbox-option\">\n <input\n type=\"checkbox\"\n [checked]=\"includePermissions()\"\n (change)=\"includePermissions.set(!includePermissions())\"\n [disabled]=\"getCurrentPermissionsCount() === 0\"\n />\n <span>Permissions ({{ getCurrentPermissionsCount() }} forced)</span>\n </label>\n @if (forcedPermissions().length > 0) {\n <ul class=\"forced-items-list\">\n @for (perm of forcedPermissions(); track perm.id) {\n <li>\n <label class=\"item-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(selectedPermissionIds(), perm.id)\"\n (change)=\"toggleItemSelection(selectedPermissionIds, perm.id)\"\n />\n <span class=\"item-name\">{{ perm.name }}</span>\n <span class=\"item-status\" [class.enabled]=\"perm.isGranted\" [class.disabled]=\"!perm.isGranted\">\n {{ perm.isGranted ? 'GRANTED' : 'DENIED' }}\n </span>\n </label>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n @if (isAppFeaturesEnabled()) {\n <div class=\"category-section\">\n <label class=\"checkbox-option\">\n <input\n type=\"checkbox\"\n [checked]=\"includeAppFeatures()\"\n (change)=\"includeAppFeatures.set(!includeAppFeatures())\"\n [disabled]=\"getCurrentAppFeaturesCount() === 0\"\n />\n <span>App Features ({{ getCurrentAppFeaturesCount() }} forced)</span>\n </label>\n @if (forcedAppFeatures().length > 0) {\n <ul class=\"forced-items-list\">\n @for (feat of forcedAppFeatures(); track feat.id) {\n <li>\n <label class=\"item-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(selectedFeatureIds(), feat.id)\"\n (change)=\"toggleItemSelection(selectedFeatureIds, feat.id)\"\n />\n <span class=\"item-name\">{{ feat.name }}</span>\n <span class=\"item-status\" [class.enabled]=\"feat.isEnabled\" [class.disabled]=\"!feat.isEnabled\">\n {{ feat.isEnabled ? 'ON' : 'OFF' }}\n </span>\n </label>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n @if (isLanguageEnabled()) {\n <div class=\"category-section\">\n <label class=\"checkbox-option\">\n <input\n type=\"checkbox\"\n [checked]=\"includeLanguage()\"\n (change)=\"includeLanguage.set(!includeLanguage())\"\n [disabled]=\"!getCurrentLanguage() || getCurrentLanguage() === 'Not Forced'\"\n />\n <span>Language ({{ getCurrentLanguage() }})</span>\n </label>\n </div>\n }\n </div>\n\n <div class=\"form-actions\">\n <ndt-button type=\"button\" (click)=\"onSwitchToListMode()\">Cancel</ndt-button>\n <ndt-button type=\"submit\">Save Preset</ndt-button>\n </div>\n </form>\n }\n\n <!-- Edit Form -->\n @if (viewMode() === 'edit') {\n <form (submit)=\"onSaveEdit($event)\" class=\"preset-form\">\n <h3 class=\"form-title\">Edit Preset</h3>\n <div class=\"form-field\">\n <ndt-input\n label=\"Preset Name *\"\n [value]=\"editName()\"\n (valueChange)=\"onEditNameChange($event)\"\n placeholder=\"e.g., Admin User - Full Access\"\n [ariaLabel]=\"'Preset name'\"\n />\n @if (nameError()) {\n <span class=\"field-error\">{{ nameError() }}</span>\n }\n </div>\n <ndt-input\n label=\"Description (optional)\"\n [value]=\"editDescription()\"\n (valueChange)=\"editDescription.set($event)\"\n placeholder=\"Brief description of this preset\"\n [ariaLabel]=\"'Preset description'\"\n />\n\n <!-- Show saved configuration read-only -->\n @if (editingPreset()) {\n <div class=\"config-preview\">\n <h4>Saved Configuration</h4>\n @if (editingPreset()!.config.featureFlags.enabled.length > 0 || editingPreset()!.config.featureFlags.disabled.length > 0) {\n <div class=\"config-category\">\n <span class=\"config-category__title\">Feature Flags ({{ editingPreset()!.config.featureFlags.enabled.length + editingPreset()!.config.featureFlags.disabled.length }})</span>\n <div class=\"config-items\">\n @for (id of editingPreset()!.config.featureFlags.enabled; track id) {\n <span class=\"config-item config-item--on\">{{ id }}: ON</span>\n }\n @for (id of editingPreset()!.config.featureFlags.disabled; track id) {\n <span class=\"config-item config-item--off\">{{ id }}: OFF</span>\n }\n </div>\n </div>\n }\n @if (editingPreset()!.config.permissions.granted.length > 0 || editingPreset()!.config.permissions.denied.length > 0) {\n <div class=\"config-category\">\n <span class=\"config-category__title\">Permissions ({{ editingPreset()!.config.permissions.granted.length + editingPreset()!.config.permissions.denied.length }})</span>\n <div class=\"config-items\">\n @for (id of editingPreset()!.config.permissions.granted; track id) {\n <span class=\"config-item config-item--on\">{{ id }}: GRANTED</span>\n }\n @for (id of editingPreset()!.config.permissions.denied; track id) {\n <span class=\"config-item config-item--off\">{{ id }}: DENIED</span>\n }\n </div>\n </div>\n }\n @if (editingPreset()!.config.appFeatures.enabled.length > 0 || editingPreset()!.config.appFeatures.disabled.length > 0) {\n <div class=\"config-category\">\n <span class=\"config-category__title\">App Features ({{ editingPreset()!.config.appFeatures.enabled.length + editingPreset()!.config.appFeatures.disabled.length }})</span>\n <div class=\"config-items\">\n @for (id of editingPreset()!.config.appFeatures.enabled; track id) {\n <span class=\"config-item config-item--on\">{{ id }}: ON</span>\n }\n @for (id of editingPreset()!.config.appFeatures.disabled; track id) {\n <span class=\"config-item config-item--off\">{{ id }}: OFF</span>\n }\n </div>\n </div>\n }\n @if (editingPreset()!.config.language) {\n <div class=\"config-category\">\n <span class=\"config-category__title\">Language</span>\n <span class=\"config-item\">{{ editingPreset()!.config.language }}</span>\n </div>\n }\n <button type=\"button\" class=\"replace-config-button\" (click)=\"onReplaceConfig()\">\n ↻ Replace with current toolbar state\n </button>\n </div>\n }\n\n <div class=\"form-actions\">\n <ndt-button type=\"button\" (click)=\"onSwitchToListMode()\">Cancel</ndt-button>\n <ndt-button type=\"submit\">Save Changes</ndt-button>\n </div>\n </form>\n }\n\n <!-- Import View -->\n @if (viewMode() === 'import') {\n <div class=\"import-view\">\n <h3 class=\"form-title\">Import Preset</h3>\n\n <!-- File Drop Zone -->\n <div\n class=\"drop-zone\"\n [class.drop-zone--active]=\"isDragOver()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onFileDrop($event)\"\n (click)=\"fileInput.click()\"\n (keydown.enter)=\"fileInput.click()\"\n (keydown.space)=\"fileInput.click()\"\n tabindex=\"0\"\n role=\"button\"\n >\n <input\n #fileInput\n type=\"file\"\n accept=\".json\"\n (change)=\"onFileSelect($event)\"\n hidden\n />\n <span class=\"drop-zone__icon\">📁</span>\n <span class=\"drop-zone__text\">Drop a .json file here</span>\n <span class=\"drop-zone__hint\">or click to browse</span>\n </div>\n\n <div class=\"divider\">\n <span>or paste JSON</span>\n </div>\n\n <!-- JSON Textarea -->\n <textarea\n class=\"json-textarea\"\n [value]=\"importJson()\"\n (input)=\"onImportJsonChange($event)\"\n placeholder='{\"name\": \"...\", \"config\": { ... }}'\n ></textarea>\n\n @if (importError()) {\n <span class=\"field-error\">{{ importError() }}</span>\n }\n\n <div class=\"form-actions\">\n <ndt-button type=\"button\" (click)=\"onSwitchToListMode()\">Cancel</ndt-button>\n <ndt-button (click)=\"onImportPreset()\">Import Preset</ndt-button>\n </div>\n </div>\n }\n\n <!-- Partial Apply View -->\n @if (viewMode() === 'apply') {\n <div class=\"apply-view\">\n <h3 class=\"form-title\">Apply: {{ applyingPreset()?.name }}</h3>\n <p class=\"apply-description\">Select which parts to apply</p>\n\n @if (applyingPreset()) {\n <div class=\"apply-categories\">\n <!-- Feature Flags -->\n @if (applyingPreset()!.config.featureFlags.enabled.length > 0 || applyingPreset()!.config.featureFlags.disabled.length > 0) {\n <div class=\"apply-category\" [class.apply-category--disabled]=\"!applyFeatureFlags()\">\n <label class=\"apply-category__header\">\n <input\n type=\"checkbox\"\n [checked]=\"applyFeatureFlags()\"\n (change)=\"applyFeatureFlags.set(!applyFeatureFlags())\"\n />\n <span>Feature Flags ({{ applyingPreset()!.config.featureFlags.enabled.length + applyingPreset()!.config.featureFlags.disabled.length }})</span>\n </label>\n @if (applyFeatureFlags()) {\n <div class=\"apply-diff\">\n @for (id of applyingPreset()!.config.featureFlags.enabled; track id) {\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">{{ id }}</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value diff-item__value--on\">ON</span>\n </div>\n }\n @for (id of applyingPreset()!.config.featureFlags.disabled; track id) {\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">{{ id }}</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value diff-item__value--off\">OFF</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Permissions -->\n @if (applyingPreset()!.config.permissions.granted.length > 0 || applyingPreset()!.config.permissions.denied.length > 0) {\n <div class=\"apply-category\" [class.apply-category--disabled]=\"!applyPermissions()\">\n <label class=\"apply-category__header\">\n <input\n type=\"checkbox\"\n [checked]=\"applyPermissions()\"\n (change)=\"applyPermissions.set(!applyPermissions())\"\n />\n <span>Permissions ({{ applyingPreset()!.config.permissions.granted.length + applyingPreset()!.config.permissions.denied.length }})</span>\n </label>\n @if (applyPermissions()) {\n <div class=\"apply-diff\">\n @for (id of applyingPreset()!.config.permissions.granted; track id) {\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">{{ id }}</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value diff-item__value--on\">GRANTED</span>\n </div>\n }\n @for (id of applyingPreset()!.config.permissions.denied; track id) {\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">{{ id }}</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value diff-item__value--off\">DENIED</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- App Features -->\n @if (applyingPreset()!.config.appFeatures.enabled.length > 0 || applyingPreset()!.config.appFeatures.disabled.length > 0) {\n <div class=\"apply-category\" [class.apply-category--disabled]=\"!applyAppFeatures()\">\n <label class=\"apply-category__header\">\n <input\n type=\"checkbox\"\n [checked]=\"applyAppFeatures()\"\n (change)=\"applyAppFeatures.set(!applyAppFeatures())\"\n />\n <span>App Features ({{ applyingPreset()!.config.appFeatures.enabled.length + applyingPreset()!.config.appFeatures.disabled.length }})</span>\n </label>\n @if (applyAppFeatures()) {\n <div class=\"apply-diff\">\n @for (id of applyingPreset()!.config.appFeatures.enabled; track id) {\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">{{ id }}</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value diff-item__value--on\">ON</span>\n </div>\n }\n @for (id of applyingPreset()!.config.appFeatures.disabled; track id) {\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">{{ id }}</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value diff-item__value--off\">OFF</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Language -->\n @if (applyingPreset()!.config.language) {\n <div class=\"apply-category\" [class.apply-category--disabled]=\"!applyLanguage()\">\n <label class=\"apply-category__header\">\n <input\n type=\"checkbox\"\n [checked]=\"applyLanguage()\"\n (change)=\"applyLanguage.set(!applyLanguage())\"\n />\n <span>Language</span>\n </label>\n @if (applyLanguage()) {\n <div class=\"apply-diff\">\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">Language</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value\">{{ applyingPreset()!.config.language }}</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"form-actions\">\n <ndt-button type=\"button\" (click)=\"onSwitchToListMode()\">Cancel</ndt-button>\n <ndt-button (click)=\"onConfirmPartialApply()\">Apply Selected</ndt-button>\n </div>\n </div>\n }\n\n <!-- Delete Confirmation View -->\n @if (viewMode() === 'delete') {\n <div class=\"delete-view\">\n <div class=\"delete-view__content\">\n <div class=\"delete-view__icon\">🗑️</div>\n <h3 class=\"delete-view__title\">Delete \"{{ deletePresetName() }}\"?</h3>\n <p class=\"delete-view__description\">\n This preset will be permanently removed.\n This action cannot be undone.\n </p>\n </div>\n <div class=\"form-actions\">\n <ndt-button type=\"button\" (click)=\"onSwitchToListMode()\">← Back</ndt-button>\n <button class=\"delete-button\" (click)=\"onConfirmDelete()\">Delete Preset</button>\n </div>\n </div>\n }\n\n <!-- Empty State -->\n @if (viewMode() === 'list' && hasNoPresets()) {\n <div class=\"empty\">\n <p>No presets saved yet</p>\n <p class=\"hint\">\n Save the current toolbar configuration as a preset for quick access\n </p>\n <ndt-button (click)=\"onSwitchToCreateMode()\">\n Create Your First Preset\n </ndt-button>\n </div>\n } @else if (viewMode() === 'list' && hasNoFilteredPresets()) {\n <div class=\"empty\">\n <p>No presets match your search</p>\n </div>\n } @else if (viewMode() === 'list') {\n <!-- Preset List -->\n <div class=\"preset-list\">\n @for (preset of sortedPresets(); track preset.id) {\n <div class=\"preset-card\" [title]=\"getPresetTooltip(preset)\">\n <div class=\"preset-card__header\">\n <button\n class=\"favorite-button\"\n [class.favorite-button--active]=\"preset.isFavorite\"\n (click)=\"onToggleFavorite(preset.id); $event.stopPropagation()\"\n [attr.aria-label]=\"preset.isFavorite ? 'Remove from favorites' : 'Add to favorites'\"\n >{{ preset.isFavorite ? '★' : '☆' }}</button>\n <span class=\"preset-card__name\">{{ preset.name }}</span>\n @if (preset.isSystem) {<span class=\"system-badge\">SYS</span>}\n <span class=\"preset-card__spacer\"></span>\n <div class=\"preset-card__actions\">\n <button class=\"icon-button\" (click)=\"onStartApply(preset.id)\"><ndt-icon name=\"refresh\" /></button>\n @if (!preset.isSystem) {\n <button class=\"icon-button\" (click)=\"onStartEdit(preset.id)\"><ndt-icon name=\"edit\" /></button>\n <button class=\"icon-button\" (click)=\"onUpdatePreset(preset.id)\"><ndt-icon name=\"gear\" /></button>\n }\n <button class=\"icon-button\" (click)=\"onExportPreset(preset.id)\"><ndt-icon name=\"export\" /></button>\n @if (!preset.isSystem) {\n <button class=\"icon-button\" (click)=\"onDeletePreset(preset.id)\"><ndt-icon name=\"trash\" /></button>\n }\n </div>\n </div>\n @if (preset.description) {\n <div class=\"preset-card__row preset-card__row--meta\">\n <span class=\"preset-card__description\">{{ preset.description }}</span>\n </div>\n }\n <div class=\"preset-card__row preset-card__row--badges\">\n @if (preset.config.featureFlags.enabled.length > 0 || preset.config.featureFlags.disabled.length > 0) {\n <span class=\"badge\">{{ preset.config.featureFlags.enabled.length + preset.config.featureFlags.disabled.length }} flags</span>\n }\n @if (preset.config.permissions.granted.length > 0 || preset.config.permissions.denied.length > 0) {\n <span class=\"badge\">{{ preset.config.permissions.granted.length + preset.config.permissions.denied.length }} perms</span>\n }\n @if (preset.config.appFeatures.enabled.length > 0 || preset.config.appFeatures.disabled.length > 0) {\n <span class=\"badge\">{{ preset.config.appFeatures.enabled.length + preset.config.appFeatures.disabled.length }} features</span>\n }\n @if (preset.config.language) {\n <span class=\"badge badge--lang\">{{ preset.config.language }}</span>\n }\n <span class=\"preset-card__date\">{{ formatDate(preset.updatedAt) }}</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </ndt-toolbar-tool>\n `,\n styles: [\n `\n .container {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 0;\n }\n\n /* Toast Notification */\n .toast {\n position: absolute;\n bottom: var(--ndt-spacing-md);\n left: var(--ndt-spacing-md);\n right: var(--ndt-spacing-md);\n z-index: 10;\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-sm);\n padding: var(--ndt-spacing-sm) var(--ndt-spacing-md);\n border-radius: var(--ndt-border-radius-small);\n font-size: var(--ndt-font-size-sm);\n animation: slideUp 150ms ease-out;\n }\n\n .toast--success {\n background: rgb(34, 197, 94);\n color: white;\n }\n\n .toast--error {\n background: rgb(239, 68, 68);\n color: white;\n }\n\n .toast__icon {\n font-weight: bold;\n }\n\n @keyframes slideUp {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n /* Delete Confirmation View */\n .delete-view {\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: var(--ndt-spacing-md);\n }\n\n .delete-view__content {\n text-align: center;\n padding: var(--ndt-spacing-lg) var(--ndt-spacing-md);\n }\n\n .delete-view__icon {\n font-size: 48px;\n margin-bottom: var(--ndt-spacing-md);\n }\n\n .delete-view__title {\n margin: 0 0 var(--ndt-spacing-sm);\n font-size: var(--ndt-font-size-md);\n color: var(--ndt-text-primary);\n }\n\n .delete-view__description {\n margin: 0;\n font-size: var(--ndt-font-size-sm);\n color: var(--ndt-text-secondary);\n line-height: 1.5;\n }\n\n .delete-button {\n background: #ef4444;\n color: white;\n border: none;\n padding: var(--ndt-spacing-sm) var(--ndt-spacing-md);\n border-radius: var(--ndt-border-radius-small);\n cursor: pointer;\n font-size: var(--ndt-font-size-sm);\n font-weight: 500;\n transition: background 200ms ease-out;\n\n &:hover {\n background: #dc2626;\n }\n }\n\n .tool-header {\n position: relative;\n flex-shrink: 0;\n display: flex;\n gap: var(--ndt-spacing-sm);\n margin-bottom: var(--ndt-spacing-md);\n\n ndt-input {\n flex: 1;\n }\n\n ndt-button {\n flex-shrink: 0;\n }\n }\n\n .empty {\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-md);\n flex: 1;\n min-height: 0;\n justify-content: center;\n align-items: center;\n border: 1px solid var(--ndt-border-subtle);\n border-radius: var(--ndt-border-radius-medium);\n padding: var(--ndt-spacing-md);\n background: transparent;\n color: var(--ndt-text-muted);\n text-align: center;\n\n p {\n margin: 0;\n }\n\n .hint {\n font-size: var(--ndt-font-size-xs);\n }\n }\n\n .preset-list {\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-xs);\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding-right: var(--ndt-spacing-xs);\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: var(--ndt-background-secondary);\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: var(--ndt-border-primary);\n border-radius: 4px;\n\n &:hover {\n background: var(--ndt-hover-bg);\n }\n }\n\n scrollbar-width: thin;\n scrollbar-color: var(--ndt-border-primary)\n var(--ndt-background-secondary);\n }\n\n .preset-card {\n background: var(--ndt-background-secondary);\n padding: 6px var(--ndt-spacing-sm);\n border-radius: var(--ndt-border-radius-medium);\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .preset-card__header {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: nowrap;\n }\n\n .preset-card__row {\n display: flex;\n align-items: center;\n gap: 6px;\n min-height: 18px;\n }\n\n .preset-card__row--meta {\n padding-left: 18px;\n }\n\n .preset-card__row--badges {\n padding-left: 18px;\n gap: 4px;\n }\n\n .preset-card__name {\n font-size: var(--ndt-font-size-sm);\n font-weight: 600;\n color: var(--ndt-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preset-card__spacer {\n flex: 1;\n min-width: 8px;\n }\n\n .system-badge {\n font-size: 8px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n padding: 1px 4px;\n border-radius: 3px;\n background: var(--ndt-border-primary);\n color: var(--ndt-text-muted);\n flex-shrink: 0;\n }\n\n .favorite-button {\n background: transparent;\n border: none;\n cursor: pointer;\n font-size: 12px;\n color: var(--ndt-text-muted);\n padding: 0;\n line-height: 1;\n transition: color 150ms ease-out;\n flex-shrink: 0;\n }\n\n .favorite-button:hover {\n color: #f59e0b;\n }\n\n .favorite-button--active {\n color: #f59e0b;\n }\n\n .preset-card__actions {\n display: flex;\n gap: 0;\n flex-shrink: 0;\n }\n\n .icon-button {\n appearance: none;\n background: none;\n border: none;\n cursor: pointer;\n margin: 0;\n padding: 4px;\n border-radius: 4px;\n color: var(--ndt-text-muted);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n opacity: 0.5;\n transition: opacity 150ms ease-out, color 150ms ease-out;\n line-height: 0;\n\n &:hover {\n background: var(--ndt-hover-bg);\n color: var(--ndt-text-primary);\n opacity: 1;\n }\n\n ndt-icon,\n ndt-icon > *,\n svg {\n display: block;\n width: 12px !important;\n height: 12px !important;\n }\n }\n\n .preset-card__description {\n font-size: 11px;\n color: var(--ndt-text-secondary);\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preset-card__date {\n font-size: 10px;\n color: var(--ndt-text-muted);\n margin-left: auto;\n flex-shrink: 0;\n }\n\n .badge {\n background: rgba(99, 102, 241, 0.15);\n color: rgb(99, 102, 241);\n padding: 1px 6px;\n border-radius: 8px;\n font-size: 10px;\n font-weight: 500;\n white-space: nowrap;\n }\n\n .badge--lang {\n background: rgba(34, 197, 94, 0.15);\n color: rgb(34, 197, 94);\n }\n\n .preset-form,\n .import-view,\n .apply-view {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-sm);\n padding: var(--ndt-spacing-sm);\n\n ndt-input {\n width: 100%;\n }\n }\n\n .form-title {\n margin: 0;\n font-size: var(--ndt-font-size-sm);\n font-weight: 600;\n color: var(--ndt-text-primary);\n }\n\n .form-hint {\n margin: 0;\n font-size: 11px;\n color: var(--ndt-text-muted);\n line-height: 1.3;\n }\n\n .form-field {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .field-error {\n color: #ef4444;\n font-size: 11px;\n }\n\n .preset-summary {\n background: var(--ndt-background-secondary);\n padding: var(--ndt-spacing-sm);\n border-radius: var(--ndt-border-radius-medium);\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-xs);\n\n h4 {\n margin: 0;\n font-size: 11px;\n font-weight: 500;\n color: var(--ndt-text-secondary);\n }\n }\n\n .category-section {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .checkbox-option {\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-xs);\n cursor: pointer;\n color: var(--ndt-text-primary);\n font-size: var(--ndt-font-size-sm);\n padding: 2px 0;\n\n input[type='checkbox'] {\n cursor: pointer;\n width: 14px;\n height: 14px;\n accent-color: rgb(99, 102, 241);\n border-radius: 3px;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n }\n\n &:has(input:disabled) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n }\n\n .forced-items-list {\n list-style: none;\n padding: 0;\n margin: 0 0 0 20px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n font-size: 11px;\n max-height: 100px;\n overflow-y: auto;\n\n li {\n background: rgba(99, 102, 241, 0.05);\n border-radius: 3px;\n border-left: 2px solid rgba(99, 102, 241, 0.3);\n }\n\n .item-checkbox {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 3px 6px;\n cursor: pointer;\n gap: 6px;\n\n input[type='checkbox'] {\n cursor: pointer;\n width: 12px;\n height: 12px;\n accent-color: rgb(99, 102, 241);\n flex-shrink: 0;\n }\n\n &:hover {\n background: rgba(99, 102, 241, 0.08);\n }\n }\n\n .item-name {\n color: var(--ndt-text-primary);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .item-status {\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n font-size: 9px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n flex-shrink: 0;\n\n &.enabled {\n background: rgba(34, 197, 94, 0.15);\n color: rgb(34, 197, 94);\n }\n\n &.disabled {\n background: rgba(239, 68, 68, 0.15);\n color: rgb(239, 68, 68);\n }\n }\n }\n\n .form-actions {\n display: flex;\n justify-content: flex-end;\n gap: var(--ndt-spacing-sm);\n margin-top: auto;\n padding-top: var(--ndt-spacing-sm);\n }\n\n /* Config Preview (Edit Mode) */\n .config-preview {\n background: var(--ndt-background-secondary);\n padding: var(--ndt-spacing-sm);\n border-radius: var(--ndt-border-radius-medium);\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-xs);\n\n h4 {\n margin: 0;\n font-size: 11px;\n font-weight: 500;\n color: var(--ndt-text-secondary);\n }\n }\n\n .config-category {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .config-category__title {\n font-size: 10px;\n color: var(--ndt-text-muted);\n font-weight: 500;\n }\n\n .config-items {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n\n .config-item {\n font-size: 10px;\n padding: 1px 6px;\n border-radius: 3px;\n background: var(--ndt-background-primary);\n color: var(--ndt-text-secondary);\n }\n\n .config-item--on {\n background: rgba(34, 197, 94, 0.1);\n color: rgb(34, 197, 94);\n }\n\n .config-item--off {\n background: rgba(239, 68, 68, 0.1);\n color: rgb(239, 68, 68);\n }\n\n .replace-config-button {\n background: transparent;\n border: 1px dashed var(--ndt-border-primary);\n padding: 6px var(--ndt-spacing-sm);\n border-radius: var(--ndt-border-radius-small);\n color: var(--ndt-text-secondary);\n cursor: pointer;\n font-size: 11px;\n transition: all 150ms ease-out;\n\n &:hover {\n background: var(--ndt-hover-bg);\n border-color: rgb(99, 102, 241);\n color: rgb(99, 102, 241);\n }\n }\n\n /* Import View */\n .drop-zone {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: var(--ndt-spacing-md);\n border: 2px dashed var(--ndt-border-primary);\n border-radius: var(--ndt-border-radius-medium);\n cursor: pointer;\n transition: all 150ms ease-out;\n }\n\n .drop-zone:hover,\n .drop-zone--active {\n border-color: rgb(99, 102, 241);\n background: rgba(99, 102, 241, 0.05);\n }\n\n .drop-zone__icon {\n font-size: 24px;\n }\n\n .drop-zone__text {\n font-size: var(--ndt-font-size-sm);\n color: var(--ndt-text-primary);\n }\n\n .drop-zone__hint {\n font-size: 11px;\n color: var(--ndt-text-muted);\n }\n\n .divider {\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-sm);\n color: var(--ndt-text-muted);\n font-size: 10px;\n\n &::before,\n &::after {\n content: '';\n flex: 1;\n height: 1px;\n background: var(--ndt-border-primary);\n }\n }\n\n .json-textarea {\n width: 100%;\n min-height: 80px;\n padding: var(--ndt-spacing-xs);\n border: 1px solid var(--ndt-border-primary);\n border-radius: var(--ndt-border-radius-small);\n background: var(--ndt-background-secondary);\n color: var(--ndt-text-primary);\n font-family: monospace;\n font-size: 11px;\n resize: vertical;\n\n &:focus {\n outline: none;\n border-color: rgb(99, 102, 241);\n }\n\n &::placeholder {\n color: var(--ndt-text-muted);\n }\n }\n\n /* Apply View */\n .apply-description {\n margin: 0;\n font-size: 11px;\n color: var(--ndt-text-secondary);\n }\n\n .apply-categories {\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-xs);\n }\n\n .apply-category {\n background: var(--ndt-background-secondary);\n border-radius: var(--ndt-border-radius-small);\n overflow: hidden;\n transition: opacity 150ms ease-out;\n }\n\n .apply-category--disabled {\n opacity: 0.5;\n }\n\n .apply-category__header {\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-xs);\n padding: 6px var(--ndt-spacing-sm);\n cursor: pointer;\n font-size: var(--ndt-font-size-sm);\n color: var(--ndt-text-primary);\n font-weight: 500;\n\n input[type='checkbox'] {\n cursor: pointer;\n width: 14px;\n height: 14px;\n accent-color: rgb(99, 102, 241);\n }\n }\n\n .apply-diff {\n padding: 0 var(--ndt-spacing-sm) 6px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .diff-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n padding: 3px 6px;\n background: var(--ndt-background-primary);\n border-radius: 3px;\n }\n\n .diff-item__name {\n flex: 1;\n color: var(--ndt-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .diff-item__arrow {\n color: var(--ndt-text-muted);\n font-size: 10px;\n }\n\n .diff-item__value {\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n font-size: 9px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n }\n\n .diff-item__value--on {\n background: rgba(34, 197, 94, 0.15);\n color: rgb(34, 197, 94);\n }\n\n .diff-item__value--off {\n background: rgba(239, 68, 68, 0.15);\n color: rgb(239, 68, 68);\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarPresetsToolComponent {\n // Injects\n private readonly presetsService = inject(ToolbarInternalPresetsService);\n private readonly featureFlagsService = inject(\n ToolbarInternalFeatureFlagService\n );\n private readonly permissionsService = inject(\n ToolbarInternalPermissionsService\n );\n private readonly appFeaturesService = inject(\n ToolbarInternalAppFeaturesService\n );\n private readonly languageService = inject(ToolbarInternalLanguageService);\n protected readonly state = inject(ToolbarStateService);\n\n // View state signals\n protected readonly viewMode = signal<ViewMode>('list');\n protected readonly searchQuery = signal<string>('');\n\n // Create form signals\n protected readonly presetName = signal<string>('');\n protected readonly presetDescription = signal<string>('');\n protected readonly includeFeatureFlags = signal<boolean>(true);\n protected readonly includePermissions = signal<boolean>(true);\n protected readonly includeAppFeatures = signal<boolean>(true);\n protected readonly includeLanguage = signal<boolean>(true);\n protected readonly selectedFlagIds = signal<Set<string>>(new Set());\n protected readonly selectedPermissionIds = signal<Set<string>>(new Set());\n protected readonly selectedFeatureIds = signal<Set<string>>(new Set());\n\n // Edit mode signals\n protected readonly editingPresetId = signal<string | null>(null);\n protected readonly editName = signal<string>('');\n protected readonly editDescription = signal<string>('');\n\n // Import mode signals\n protected readonly importJson = signal<string>('');\n protected readonly importError = signal<string | null>(null);\n protected readonly isDragOver = signal<boolean>(false);\n\n // Apply mode signals\n protected readonly applyingPresetId = signal<string | null>(null);\n protected readonly applyFeatureFlags = signal<boolean>(true);\n protected readonly applyPermissions = signal<boolean>(true);\n protected readonly applyAppFeatures = signal<boolean>(true);\n protected readonly applyLanguage = signal<boolean>(true);\n\n // Delete confirmation signals\n protected readonly deletePresetId = signal<string | null>(null);\n\n // Toast signals\n protected readonly toastMessage = signal<string | null>(null);\n protected readonly toastType = signal<ToastType>('success');\n\n // Validation signals\n protected readonly nameError = signal<string | null>(null);\n\n // Auto-dismiss toast effect\n private toastTimeout: ReturnType<typeof setTimeout> | null = null;\n\n constructor() {\n effect(() => {\n const message = this.toastMessage();\n if (message) {\n if (this.toastTimeout) {\n clearTimeout(this.toastTimeout);\n }\n this.toastTimeout = setTimeout(() => {\n this.toastMessage.set(null);\n }, 3000);\n }\n });\n }\n\n // Computed values\n protected readonly presets = this.presetsService.presets;\n\n protected readonly filteredPresets = computed(() => {\n const query = this.searchQuery().toLowerCase();\n return this.presets().filter(\n (preset) =>\n preset.name.toLowerCase().includes(query) ||\n preset.description?.toLowerCase().includes(query)\n );\n });\n\n protected readonly sortedPresets = computed(() => {\n const presets = this.filteredPresets();\n return [...presets].sort((a, b) => {\n if (a.isFavorite && !b.isFavorite) return -1;\n if (!a.isFavorite && b.isFavorite) return 1;\n return 0;\n });\n });\n\n protected readonly hasNoPresets = computed(\n () => this.presets().length === 0\n );\n\n protected readonly hasNoFilteredPresets = computed(\n () => this.filteredPresets().length === 0\n );\n\n protected readonly editingPreset = computed(() => {\n const id = this.editingPresetId();\n if (!id) return null;\n return this.presets().find((p) => p.id === id) || null;\n });\n\n protected readonly applyingPreset = computed(() => {\n const id = this.applyingPresetId();\n if (!id) return null;\n return this.presets().find((p) => p.id === id) || null;\n });\n\n protected readonly deletePresetName = computed(() => {\n const id = this.deletePresetId();\n if (!id) return '';\n const preset = this.presets().find((p) => p.id === id);\n return preset?.name || '';\n });\n\n // Tool availability (based on config)\n protected readonly isFeatureFlagsEnabled = computed(\n () => this.state.config().showFeatureFlagsTool ?? true\n );\n protected readonly isPermissionsEnabled = computed(\n () => this.state.config().showPermissionsTool ?? true\n );\n protected readonly isAppFeaturesEnabled = computed(\n () => this.state.config().showAppFeaturesTool ?? true\n );\n protected readonly isLanguageEnabled = computed(\n () => this.state.config().showLanguageTool ?? true\n );\n\n // Forced items details\n protected readonly forcedFlags = computed(() => {\n return this.featureFlagsService.flags().filter((flag) => flag.isForced);\n });\n protected readonly forcedPermissions = computed(() => {\n return this.permissionsService.permissions().filter((perm) => perm.isForced);\n });\n protected readonly forcedAppFeatures = computed(() => {\n return this.appFeaturesService.features().filter((feat) => feat.isForced);\n });\n\n // Other properties\n protected readonly options: ToolbarWindowOptions = {\n title: 'Presets',\n description: 'Save and load toolbar configurations',\n isClosable: true,\n size: 'tall',\n id: 'ndt-presets',\n isBeta: true,\n };\n\n // Toast helper\n private showToast(message: string, type: ToastType = 'success'): void {\n this.toastMessage.set(message);\n this.toastType.set(type);\n }\n\n // View mode switching\n onSearchChange(query: string): void {\n this.searchQuery.set(query);\n }\n\n onSwitchToListMode(): void {\n this.viewMode.set('list');\n this.nameError.set(null);\n this.importError.set(null);\n this.deletePresetId.set(null);\n }\n\n onSwitchToCreateMode(): void {\n this.viewMode.set('create');\n this.presetName.set('');\n this.presetDescription.set('');\n this.nameError.set(null);\n // Reset checkboxes - only enable categories that have forced items\n this.includeFeatureFlags.set(this.getCurrentFlagsCount() > 0);\n this.includePermissions.set(this.getCurrentPermissionsCount() > 0);\n this.includeAppFeatures.set(this.getCurrentAppFeaturesCount() > 0);\n const currentLang = this.getCurrentLanguage();\n this.includeLanguage.set(!!currentLang && currentLang !== 'Not Forced');\n\n // Initialize selected items - select all by default\n this.selectedFlagIds.set(new Set(this.forcedFlags().map((f) => f.id)));\n this.selectedPermissionIds.set(\n new Set(this.forcedPermissions().map((p) => p.id))\n );\n this.selectedFeatureIds.set(\n new Set(this.forcedAppFeatures().map((f) => f.id))\n );\n }\n\n onSwitchToImportMode(): void {\n this.viewMode.set('import');\n this.importJson.set('');\n this.importError.set(null);\n this.isDragOver.set(false);\n }\n\n // Create preset\n onPresetNameChange(value: string): void {\n this.presetName.set(value);\n if (value.trim()) {\n this.nameError.set(null);\n }\n }\n\n onSavePreset(event: Event): void {\n event.preventDefault();\n const name = this.presetName().trim();\n\n if (!name) {\n this.nameError.set('Name is required');\n return;\n }\n\n // Check for duplicate names\n const existingPreset = this.presets().find(\n (p) => p.name.toLowerCase() === name.toLowerCase()\n );\n if (existingPreset) {\n this.nameError.set('A preset with this name already exists');\n return;\n }\n\n this.presetsService.saveCurrentAsPreset(\n name,\n this.presetDescription(),\n {\n includeFeatureFlags: this.includeFeatureFlags(),\n includePermissions: this.includePermissions(),\n includeAppFeatures: this.includeAppFeatures(),\n includeLanguage: this.includeLanguage(),\n selectedFlagIds: Array.from(this.selectedFlagIds()),\n selectedPermissionIds: Array.from(this.selectedPermissionIds()),\n selectedFeatureIds: Array.from(this.selectedFeatureIds()),\n }\n );\n\n this.showToast('Preset created successfully');\n this.onSwitchToListMode();\n }\n\n // Edit preset\n onStartEdit(presetId: string): void {\n const preset = this.presets().find((p) => p.id === presetId);\n if (!preset) return;\n\n this.editingPresetId.set(presetId);\n this.editName.set(preset.name);\n this.editDescription.set(preset.description || '');\n this.nameError.set(null);\n this.viewMode.set('edit');\n }\n\n onEditNameChange(value: string): void {\n this.editName.set(value);\n if (value.trim()) {\n this.nameError.set(null);\n }\n }\n\n onSaveEdit(event: Event): void {\n event.preventDefault();\n const name = this.editName().trim();\n const presetId = this.editingPresetId();\n\n if (!name) {\n this.nameError.set('Name is required');\n return;\n }\n\n if (!presetId) return;\n\n // Check for duplicate names (excluding current preset)\n const existingPreset = this.presets().find(\n (p) => p.id !== presetId && p.name.toLowerCase() === name.toLowerCase()\n );\n if (existingPreset) {\n this.nameError.set('A preset with this name already exists');\n return;\n }\n\n this.presetsService.updatePresetMetadata(\n presetId,\n name,\n this.editDescription()\n );\n\n this.showToast('Preset updated successfully');\n this.onSwitchToListMode();\n }\n\n onReplaceConfig(): void {\n const presetId = this.editingPresetId();\n if (!presetId) return;\n\n this.presetsService.updatePreset(presetId);\n this.showToast('Configuration replaced with current state');\n }\n\n // Import preset\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(true);\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n }\n\n onFileDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.processFile(files[0]);\n }\n }\n\n onFileSelect(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.processFile(input.files[0]);\n }\n }\n\n private processFile(file: File): void {\n if (!file.name.endsWith('.json')) {\n this.importError.set('Please select a .json file');\n return;\n }\n\n const reader = new FileReader();\n reader.onload = (e) => {\n const content = e.target?.result as string;\n this.importJson.set(content);\n this.importError.set(null);\n };\n reader.onerror = () => {\n this.importError.set('Failed to read file');\n };\n reader.readAsText(file);\n }\n\n onImportJsonChange(event: Event): void {\n const textarea = event.target as HTMLTextAreaElement;\n this.importJson.set(textarea.value);\n this.importError.set(null);\n }\n\n onImportPreset(): void {\n const json = this.importJson().trim();\n\n if (!json) {\n this.importError.set('Please provide JSON content');\n return;\n }\n\n try {\n const parsed = JSON.parse(json) as ToolbarPreset;\n\n // Validate required fields\n if (!parsed.name) {\n this.importError.set('Preset must have a name');\n return;\n }\n if (!parsed.config) {\n this.importError.set('Preset must have a config object');\n return;\n }\n\n this.presetsService.addPreset(parsed);\n this.showToast('Preset imported successfully');\n this.onSwitchToListMode();\n } catch {\n this.importError.set('Invalid JSON format');\n }\n }\n\n // Apply preset (partial)\n onStartApply(presetId: string): void {\n this.applyingPresetId.set(presetId);\n this.applyFeatureFlags.set(true);\n this.applyPermissions.set(true);\n this.applyAppFeatures.set(true);\n this.applyLanguage.set(true);\n this.viewMode.set('apply');\n }\n\n onConfirmPartialApply(): void {\n const presetId = this.applyingPresetId();\n if (!presetId) return;\n\n this.presetsService.partialApplyPreset(presetId, {\n applyFeatureFlags: this.applyFeatureFlags(),\n applyPermissions: this.applyPermissions(),\n applyAppFeatures: this.applyAppFeatures(),\n applyLanguage: this.applyLanguage(),\n });\n\n this.showToast('Preset applied successfully');\n this.onSwitchToListMode();\n }\n\n // Update preset (with current state)\n onUpdatePreset(presetId: string): void {\n this.presetsService.updatePreset(presetId);\n this.showToast('Preset updated with current state');\n }\n\n // Export preset\n onExportPreset(presetId: string): void {\n const preset = this.presets().find((p) => p.id === presetId);\n if (!preset) return;\n\n const json = JSON.stringify(preset, null, 2);\n const blob = new Blob([json], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `preset-${preset.name.toLowerCase().replace(/\\s+/g, '-')}.json`;\n link.click();\n URL.revokeObjectURL(url);\n\n this.showToast('Preset exported');\n }\n\n // Delete preset\n onDeletePreset(presetId: string): void {\n this.deletePresetId.set(presetId);\n this.viewMode.set('delete');\n }\n\n onConfirmDelete(): void {\n const presetId = this.deletePresetId();\n if (presetId) {\n this.presetsService.deletePreset(presetId);\n this.showToast('Preset deleted');\n }\n this.deletePresetId.set(null);\n this.viewMode.set('list');\n }\n\n // Favorites\n onToggleFavorite(presetId: string): void {\n this.presetsService.toggleFavorite(presetId);\n }\n\n // Protected methods\n protected getCurrentFlagsCount(): number {\n const state = this.featureFlagsService.getCurrentForcedState();\n return state.enabled.length + state.disabled.length;\n }\n\n protected getCurrentPermissionsCount(): number {\n const state = this.permissionsService.getCurrentForcedState();\n return state.granted.length + state.denied.length;\n }\n\n protected getCurrentAppFeaturesCount(): number {\n const state = this.appFeaturesService.getCurrentForcedState();\n return state.enabled.length + state.disabled.length;\n }\n\n protected getCurrentLanguage(): string {\n return this.languageService.getCurrentForcedLanguage() || 'Not Forced';\n }\n\n protected formatDate(isoString: string): string {\n return new Date(isoString).toLocaleDateString();\n }\n\n protected getPresetTooltip(preset: ToolbarPreset): string {\n const lines: string[] = [];\n\n // Feature Flags\n const flagsEnabled = preset.config.featureFlags.enabled;\n const flagsDisabled = preset.config.featureFlags.disabled;\n if (flagsEnabled.length > 0 || flagsDisabled.length > 0) {\n lines.push('Feature Flags:');\n flagsEnabled.forEach(id => lines.push(` ✓ ${id}: ON`));\n flagsDisabled.forEach(id => lines.push(` ✗ ${id}: OFF`));\n }\n\n // Permissions\n const permsGranted = preset.config.permissions.granted;\n const permsDenied = preset.config.permissions.denied;\n if (permsGranted.length > 0 || permsDenied.length > 0) {\n if (lines.length > 0) lines.push('');\n lines.push('Permissions:');\n permsGranted.forEach(id => lines.push(` ✓ ${id}: GRANTED`));\n permsDenied.forEach(id => lines.push(` ✗ ${id}: DENIED`));\n }\n\n // App Features\n const featuresEnabled = preset.config.appFeatures.enabled;\n const featuresDisabled = preset.config.appFeatures.disabled;\n if (featuresEnabled.length > 0 || featuresDisabled.length > 0) {\n if (lines.length > 0) lines.push('');\n lines.push('App Features:');\n featuresEnabled.forEach(id => lines.push(` ✓ ${id}: ON`));\n featuresDisabled.forEach(id => lines.push(` ✗ ${id}: OFF`));\n }\n\n // Language\n if (preset.config.language) {\n if (lines.length > 0) lines.push('');\n lines.push(`Language: ${preset.config.language}`);\n }\n\n return lines.length > 0 ? lines.join('\\n') : 'No configuration';\n }\n\n protected toggleItemSelection(\n signal: typeof this.selectedFlagIds,\n itemId: string\n ): void {\n const current = new Set(signal());\n if (current.has(itemId)) {\n current.delete(itemId);\n } else {\n current.add(itemId);\n }\n signal.set(current);\n }\n\n protected isItemSelected(selectedSet: Set<string>, itemId: string): boolean {\n return selectedSet.has(itemId);\n }\n}\n","import {\n animate,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport { DOCUMENT } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport { filter, throttleTime } from 'rxjs/operators';\nimport { ToolbarStateService } from './toolbar-state.service';\nimport { ToolbarConfig } from './models/toolbar-config.interface';\nimport { ToolbarAppFeaturesToolComponent } from './tools/app-features-tool/app-features-tool.component';\nimport { ToolbarFeatureFlagsToolComponent } from './tools/feature-flags-tool/feature-flags-tool.component';\nimport { ToolbarHomeToolComponent } from './tools/home-tool/home-tool.component';\nimport { SettingsService } from './tools/home-tool/settings.service';\nimport { ToolbarLanguageToolComponent } from './tools/language-tool/language-tool.component';\nimport { ToolbarPermissionsToolComponent } from './tools/permissions-tool/permissions-tool.component';\nimport { ToolbarPresetsToolComponent } from './tools/presets-tool/presets-tool.component';\n\n@Component({\n standalone: true,\n selector: 'ndt-toolbar',\n styleUrls: ['./toolbar.component.scss'],\n encapsulation: ViewEncapsulation.ShadowDom,\n imports: [\n ToolbarHomeToolComponent,\n ToolbarLanguageToolComponent,\n ToolbarFeatureFlagsToolComponent,\n ToolbarAppFeaturesToolComponent,\n ToolbarPermissionsToolComponent,\n ToolbarPresetsToolComponent,\n ],\n template: `\n @if (config().enabled ?? true) {\n <div\n aria-label=\"Developer tools\"\n role=\"toolbar\"\n class=\"ndt-toolbar\"\n [@toolbarState]=\"state.isVisible() ? 'visible' : 'hidden'\"\n [attr.data-theme]=\"state.theme()\"\n [class.ndt-toolbar--active]=\"state.isVisible()\"\n (mouseenter)=\"onMouseEnter()\"\n >\n <ndt-home-tool />\n <ng-content />\n @if (config().showLanguageTool ?? false) {\n <ndt-language-tool />\n }\n @if (config().showPresetsTool ?? false) {\n <ndt-presets-tool />\n }\n @if (config().showAppFeaturesTool ?? false) {\n <ndt-app-features-tool />\n }\n @if (config().showPermissionsTool ?? false) {\n <ndt-permissions-tool />\n }\n @if (config().showFeatureFlagsTool ?? false) {\n <ndt-feature-flags-tool />\n }\n </div>\n }\n `,\n animations: [\n trigger('toolbarState', [\n state(\n 'hidden',\n style({\n transform: 'translate(-50%, calc(100% + -1.2rem))',\n })\n ),\n state(\n 'visible',\n style({\n transform: 'translate(-50%, -1rem)',\n })\n ),\n transition('hidden <=> visible', [\n animate('300ms cubic-bezier(0.4, 0, 0.2, 1)'),\n ]),\n ]),\n ],\n})\nexport class ToolbarComponent implements OnInit, OnDestroy {\n private document = inject(DOCUMENT);\n state = inject(ToolbarStateService);\n destroyRef = inject(DestroyRef);\n settingsService = inject(SettingsService);\n\n config = input<ToolbarConfig>({});\n private globalStyleElement?: HTMLStyleElement;\n\n private keyboardShortcut = fromEvent<KeyboardEvent>(window, 'keydown')\n .pipe(\n filter((event) => event.ctrlKey && event.shiftKey && event.key === 'D'),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => this.toggleDevTools());\n\n private mouseLeave = fromEvent<MouseEvent>(document, 'mouseleave')\n .pipe(throttleTime(3000), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.onMouseLeave());\n\n constructor() {\n // Update state service when config changes\n effect(() => {\n this.state.setConfig(this.config());\n });\n }\n\n ngOnInit(): void {\n this.injectGlobalStyles();\n // Always use light theme\n this.state.setTheme('light');\n }\n\n ngOnDestroy(): void {\n this.globalStyleElement?.remove();\n }\n\n onMouseEnter(): void {\n this.state.setVisibility(true);\n }\n\n onMouseLeave(): void {\n setTimeout(() => this.state.setVisibility(false), this.state.delay());\n }\n\n private toggleDevTools(): void {\n this.state.setVisibility(!this.state.isVisible());\n }\n\n /**\n * Injects global theme styles into the document head to make CSS variables\n * available to CDK overlays and other elements rendered outside Shadow DOM.\n * Uses light theme only.\n */\n private injectGlobalStyles(): void {\n // Check if styles are already injected (e.g., by another toolbar instance)\n if (this.document.getElementById('ndt-global-theme')) {\n return;\n }\n\n this.globalStyleElement = this.document.createElement('style');\n this.globalStyleElement.id = 'ndt-global-theme';\n this.globalStyleElement.textContent = `\n /* Global Light Theme for ngx-dev-toolbar overlays */\n :where(ndt-toolbar),\n .ndt-overlay-panel,\n .cdk-overlay-container {\n --ndt-border-radius-small: 4px;\n --ndt-border-radius-medium: 8px;\n --ndt-border-radius-large: 12px;\n --ndt-transition-default: all 0.2s ease-out;\n --ndt-transition-smooth: all 0.2s ease-in-out;\n --ndt-spacing-xs: 4px;\n --ndt-spacing-sm: 6px;\n --ndt-spacing-md: 12px;\n --ndt-spacing-lg: 16px;\n --ndt-window-padding: 16px;\n --ndt-font-size-xxs: 0.65rem;\n --ndt-font-size-xs: 0.75rem;\n --ndt-font-size-sm: 0.875rem;\n --ndt-font-size-md: 1rem;\n --ndt-font-size-lg: 1.25rem;\n --ndt-font-size-xl: 2rem;\n --ndt-primary: #df30d4;\n --ndt-primary-rgb: 223, 48, 212;\n --ndt-text-on-primary: rgb(255, 255, 255);\n --ndt-bg-primary: rgb(255, 255, 255);\n --ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, 0.88) 100%);\n --ndt-text-primary: rgb(17, 24, 39);\n --ndt-text-secondary: rgb(55, 65, 81);\n --ndt-text-muted: rgb(107, 114, 128);\n --ndt-border-primary: #e5e7eb;\n --ndt-border-subtle: rgba(17, 24, 39, 0.1);\n --ndt-hover-bg: rgba(17, 24, 39, 0.05);\n --ndt-hover-danger: rgb(239, 68, 68);\n --ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, 0.2);\n --ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, 0.05), 0 4px 8px rgba(107, 114, 128, 0.15), 0 2px 4px rgba(107, 114, 128, 0.1);\n --ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, 0.1), 0px 1px 2px 0px rgba(156, 163, 175, 0.12), 0px 4px 4px 0px rgba(156, 163, 175, 0.1), 0px 10px 6px 0px rgba(156, 163, 175, 0.08), 0px 17px 7px 0px rgba(156, 163, 175, 0.05), 0px 26px 7px 0px rgba(156, 163, 175, 0.02);\n --ndt-background-secondary: var(--ndt-bg-primary);\n --ndt-background-hover: var(--ndt-hover-bg);\n --ndt-border-color: var(--ndt-border-primary);\n --ndt-note-background: rgb(219, 234, 254);\n --ndt-note-border: rgba(37, 99, 235, 0.2);\n --ndt-warning-background: rgb(254, 249, 195);\n --ndt-warning-border: rgba(202, 138, 4, 0.2);\n --ndt-error-background: rgb(254, 226, 226);\n --ndt-error-border: rgba(220, 38, 38, 0.2);\n }\n .ndt-overlay-panel {\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif;\n box-sizing: border-box;\n isolation: isolate;\n z-index: 999999999;\n }\n .ndt-overlay-panel *, .ndt-overlay-panel *::before, .ndt-overlay-panel *::after {\n box-sizing: border-box;\n }\n .cdk-overlay-backdrop.ndt-overlay-backdrop {\n background: transparent;\n }\n `;\n\n this.document.head.appendChild(this.globalStyleElement);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ToolbarService } from '../../models/toolbar.interface';\nimport { ToolbarInternalFeatureFlagService } from './feature-flags-internal.service';\nimport { ToolbarFlag } from './feature-flags.models';\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarFeatureFlagService\n implements ToolbarService<ToolbarFlag>\n{\n private internalService = inject(ToolbarInternalFeatureFlagService);\n\n /**\n * Sets the available flags that will be displayed in the tool on the dev toolbar\n * @param flags The flags to be displayed\n */\n setAvailableOptions(flags: ToolbarFlag[]): void {\n this.internalService.setAppFlags(flags);\n }\n\n /**\n * Gets the flags that were forced/modified through the tool on the dev toolbar\n * @returns Observable of forced flags array\n */\n getForcedValues(): Observable<ToolbarFlag[]> {\n return this.internalService.getForcedFlags();\n }\n\n /**\n * Gets ALL flag values with overrides already applied.\n * Returns the complete set of flags where overridden values replace base values.\n * Each flag includes an `isForced` property indicating if it was overridden.\n *\n * This method simplifies integration by eliminating the need to manually merge\n * base flags with overrides using combineLatest.\n *\n * @returns Observable of all flags with overrides applied\n *\n * @example\n * ```typescript\n * // Get a specific flag value with overrides applied\n * this.featureFlagsService.getValues().pipe(\n * map(flags => flags.find(f => f.id === 'newFeature')),\n * map(flag => flag?.isEnabled ?? false)\n * ).subscribe(isEnabled => {\n * if (isEnabled) {\n * // Enable feature\n * }\n * });\n * ```\n */\n getValues(): Observable<ToolbarFlag[]> {\n return this.internalService.flags$;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ToolbarService } from '../../models/toolbar.interface';\nimport { ToolbarInternalPermissionsService } from './permissions-internal.service';\nimport { ToolbarPermission, ForcedPermissionsState } from './permissions.models';\n\n/**\n * Public service for integrating the Permissions Tool with your application.\n * Use this service to:\n * 1. Register your application's permissions with setAvailableOptions()\n * 2. Listen for toolbar permission overrides with getForcedValues()\n * 3. Apply preset permission states for testing with applyPreset()\n *\n * @example\n * ```typescript\n * constructor(private permissionsService: ToolbarPermissionsService) {\n * // Register permissions\n * this.permissionsService.setAvailableOptions([\n * { id: 'can-edit', name: 'Can Edit', isGranted: false, isForced: false }\n * ]);\n *\n * // Listen for overrides\n * this.permissionsService.getForcedValues().subscribe(forcedPermissions => {\n * // Update your app's permission state\n * });\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class ToolbarPermissionsService\n implements ToolbarService<ToolbarPermission>\n{\n private internalService = inject(ToolbarInternalPermissionsService);\n\n /**\n * Sets the available permissions that will be displayed in the toolbar tool.\n * Call this in your app initialization to register permissions.\n *\n * @param permissions Array of permissions to display in the toolbar\n *\n * @example\n * ```typescript\n * this.permissionsService.setAvailableOptions([\n * {\n * id: 'can-edit-posts',\n * name: 'Edit Posts',\n * description: 'Can edit blog posts',\n * isGranted: false,\n * isForced: false\n * }\n * ]);\n * ```\n */\n setAvailableOptions(permissions: ToolbarPermission[]): void {\n this.internalService.setAppPermissions(permissions);\n }\n\n /**\n * Gets an observable of permissions that were forced/overridden through the toolbar.\n * Subscribe to this to update your application's permission state.\n *\n * @returns Observable emitting array of forced permissions whenever changes occur\n *\n * @example\n * ```typescript\n * this.permissionsService.getForcedValues().subscribe(forcedPermissions => {\n * forcedPermissions.forEach(permission => {\n * this.updatePermission(permission.id, permission.isGranted);\n * });\n * });\n * ```\n */\n getForcedValues(): Observable<ToolbarPermission[]> {\n return this.internalService.getForcedPermissions();\n }\n\n /**\n * Gets ALL permission values with overrides already applied.\n * Returns the complete set of permissions where overridden values replace base values.\n * Each permission includes an `isForced` property indicating if it was overridden.\n *\n * This method simplifies integration by eliminating the need to manually merge\n * base permissions with overrides using combineLatest.\n *\n * @returns Observable of all permissions with overrides applied\n *\n * @example\n * ```typescript\n * // Simple permission check with overrides applied\n * this.permissionsService.getValues().pipe(\n * map(permissions => permissions.find(p => p.id === 'can-edit')),\n * map(permission => permission?.isGranted ?? false)\n * ).subscribe(canEdit => {\n * if (canEdit) {\n * // Enable edit functionality\n * }\n * });\n * ```\n */\n getValues(): Observable<ToolbarPermission[]> {\n return this.internalService.permissions$;\n }\n\n /**\n * Apply a preset permission state. Useful for automated testing scenarios.\n *\n * @param state The forced permissions state to apply\n *\n * @example\n * ```typescript\n * this.permissionsService.applyPreset({\n * granted: ['can-edit-posts'],\n * denied: ['can-delete-posts']\n * });\n * ```\n */\n applyPreset(state: ForcedPermissionsState): void {\n this.internalService.applyPresetPermissions(state);\n }\n\n /**\n * Get the current forced permission state.\n *\n * @returns Current forced permissions state\n */\n getCurrentState(): ForcedPermissionsState {\n return this.internalService.getCurrentForcedState();\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ToolbarService } from '../../models/toolbar.interface';\nimport { ToolbarInternalLanguageService } from './language-internal.service';\nimport { Language } from './language.models';\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarLanguageService implements ToolbarService<Language> {\n private internalService = inject(ToolbarInternalLanguageService);\n\n /**\n * Sets the available languages that will be displayed in the tool on the dev toolbar\n * @param languages The languages to be displayed\n */\n setAvailableOptions(languages: Language[]): void {\n this.internalService.setAppLanguages(languages);\n }\n\n /**\n * Gets the languages that were forced/modified through the tool on the dev toolbar\n * @returns Observable of forced languages array\n */\n getForcedValues(): Observable<Language[]> {\n return this.internalService.getForcedLanguage();\n }\n\n /**\n * Gets the forced language value.\n * For the language tool, this returns the same as getForcedValues() since\n * only one language can be selected at a time.\n * @returns Observable of forced language array (single item or empty)\n */\n getValues(): Observable<Language[]> {\n return this.internalService.getForcedLanguage();\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ToolbarService } from '../../models/toolbar.interface';\nimport { ToolbarInternalAppFeaturesService } from './app-features-internal.service';\nimport { ToolbarAppFeature, ForcedAppFeaturesState } from './app-features.models';\n\n/**\n * Public service for managing app features in the dev toolbar.\n *\n * This service implements the ToolbarService interface and provides methods for:\n * - Configuring available product features\n * - Retrieving forced feature overrides\n * - Applying preset feature configurations\n * - Exporting current forced state for presets\n *\n * @example\n * ```typescript\n * import { ToolbarAppFeaturesService } from 'ngx-dev-toolbar';\n *\n * @Component({...})\n * export class AppComponent implements OnInit {\n * private appFeaturesService = inject(ToolbarAppFeaturesService);\n *\n * ngOnInit() {\n * // Configure available features based on current tier\n * const features: ToolbarAppFeature[] = [\n * { id: 'analytics', name: 'Analytics Dashboard', isEnabled: true, isForced: false },\n * { id: 'multi-user', name: 'Multi-User Support', isEnabled: false, isForced: false }\n * ];\n * this.appFeaturesService.setAvailableOptions(features);\n *\n * // Subscribe to forced overrides\n * this.appFeaturesService.getForcedValues().subscribe(forcedFeatures => {\n * forcedFeatures.forEach(feature => {\n * // Apply forced feature state to application logic\n * this.applyFeatureState(feature.id, feature.isEnabled);\n * });\n * });\n * }\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class ToolbarAppFeaturesService implements ToolbarService<ToolbarAppFeature> {\n private internalService = inject(ToolbarInternalAppFeaturesService);\n\n /**\n * Set available app features for the application.\n *\n * Configures the list of product features that can be toggled in the dev toolbar.\n * Features should represent product-level capabilities like license tiers,\n * deployment configurations, or environment flags.\n *\n * @param features - Array of app features to display in the toolbar\n * @throws Error if duplicate feature IDs or empty IDs are detected\n *\n * @example\n * ```typescript\n * const features: ToolbarAppFeature[] = [\n * {\n * id: 'advanced-analytics',\n * name: 'Advanced Analytics Dashboard',\n * description: 'Access premium reporting and data visualization',\n * isEnabled: false, // Not available in current tier\n * isForced: false\n * },\n * {\n * id: 'multi-user-support',\n * name: 'Multi-User Collaboration',\n * description: 'Enable team features and user management',\n * isEnabled: true, // Available in current tier\n * isForced: false\n * }\n * ];\n * this.appFeaturesService.setAvailableOptions(features);\n * ```\n */\n setAvailableOptions(features: ToolbarAppFeature[]): void {\n this.internalService.setAppFeatures(features);\n }\n\n /**\n * Get observable stream of features that have forced overrides.\n *\n * Emits an array of features that have been forced via the dev toolbar.\n * Only features with `isForced = true` are included in the emissions.\n * Use this to react to feature override changes and update application behavior.\n *\n * @returns Observable that emits array of forced features whenever state changes\n *\n * @example\n * ```typescript\n * this.appFeaturesService.getForcedValues()\n * .pipe(takeUntilDestroyed())\n * .subscribe(forcedFeatures => {\n * forcedFeatures.forEach(feature => {\n * if (feature.isEnabled) {\n * this.enableFeature(feature.id);\n * } else {\n * this.disableFeature(feature.id);\n * }\n * });\n * });\n * ```\n */\n getForcedValues(): Observable<ToolbarAppFeature[]> {\n return this.internalService.getForcedFeatures();\n }\n\n /**\n * Gets ALL app feature values with overrides already applied.\n * Returns the complete set of features where overridden values replace base values.\n * Each feature includes an `isForced` property indicating if it was overridden.\n *\n * This method simplifies integration by eliminating the need to manually merge\n * base features with overrides using combineLatest.\n *\n * @returns Observable of all features with overrides applied\n *\n * @example\n * ```typescript\n * // Check if a feature is enabled with overrides applied\n * this.appFeaturesService.getValues().pipe(\n * map(features => features.find(f => f.id === 'premium-analytics')),\n * map(feature => feature?.isEnabled ?? false)\n * ).subscribe(isEnabled => {\n * if (isEnabled) {\n * // Enable premium analytics\n * }\n * });\n * ```\n */\n getValues(): Observable<ToolbarAppFeature[]> {\n return this.internalService.features$;\n }\n\n /**\n * Apply a preset feature configuration (for preset tool integration).\n *\n * Accepts a forced features state object and applies it to the current configuration.\n * Invalid feature IDs (not in configured features) are filtered out with a warning.\n *\n * @param state - Forced features state containing enabled/disabled arrays\n *\n * @example\n * ```typescript\n * // Apply \"Enterprise Tier\" preset\n * const enterprisePreset: ForcedAppFeaturesState = {\n * enabled: ['analytics', 'multi-user', 'white-label', 'sso'],\n * disabled: []\n * };\n * this.appFeaturesService.applyPresetFeatures(enterprisePreset);\n *\n * // Apply \"Basic Tier\" preset\n * const basicPreset: ForcedAppFeaturesState = {\n * enabled: [],\n * disabled: ['analytics', 'multi-user', 'white-label', 'sso']\n * };\n * this.appFeaturesService.applyPresetFeatures(basicPreset);\n * ```\n */\n applyPresetFeatures(state: ForcedAppFeaturesState): void {\n this.internalService.applyForcedState(state);\n }\n\n /**\n * Get current forced feature state as a snapshot (for preset export).\n *\n * Returns the current forced features state with enabled/disabled arrays.\n * Useful for exporting toolbar state to save as a preset or for debugging.\n * Returns a defensive copy - mutations will not affect internal state.\n *\n * @returns Current forced features state\n *\n * @example\n * ```typescript\n * // Export current toolbar state to save as preset\n * const currentState = this.appFeaturesService.getCurrentForcedState();\n * this.presetsService.savePreset('my-config', {\n * appFeatures: currentState,\n * // ... other tool states\n * });\n *\n * console.log(currentState);\n * // { enabled: ['analytics'], disabled: ['white-label'] }\n * ```\n */\n getCurrentForcedState(): ForcedAppFeaturesState {\n return this.internalService.getCurrentForcedState();\n }\n}\n","import {\n ApplicationRef,\n createComponent,\n ENVIRONMENT_INITIALIZER,\n EnvironmentInjector,\n inject,\n makeEnvironmentProviders,\n type EnvironmentProviders,\n} from '@angular/core';\nimport { ToolbarComponent } from './toolbar.component';\nimport { ToolbarConfig } from './models/toolbar-config.interface';\nimport {\n TOOLBAR_APP_FEATURES,\n TOOLBAR_CONFIG,\n TOOLBAR_FEATURE_FLAGS,\n TOOLBAR_LANGUAGE,\n TOOLBAR_PERMISSIONS,\n} from './tokens';\nimport { ToolbarFeatureFlagService } from './tools/feature-flags-tool/feature-flags.service';\nimport { ToolbarPermissionsService } from './tools/permissions-tool/permissions.service';\nimport { ToolbarLanguageService } from './tools/language-tool/language.service';\nimport { ToolbarAppFeaturesService } from './tools/app-features-tool/app-features.service';\n\n/**\n * Provides all ngx-dev-toolbar services and automatically attaches the toolbar to the DOM.\n *\n * This is the recommended way to set up the toolbar. Add it to your `app.config.ts`\n * alongside other providers like `provideRouter()` and `provideHttpClient()`.\n *\n * ## Basic Usage\n *\n * ```typescript\n * // app.config.ts\n * import { ApplicationConfig, isDevMode } from '@angular/core';\n * import { provideToolbar } from 'ngx-dev-toolbar';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideRouter(appRoutes),\n * provideToolbar({\n * enabled: isDevMode(),\n * showFeatureFlagsTool: true,\n * showPermissionsTool: true,\n * }),\n * ],\n * };\n * ```\n *\n * ```typescript\n * // main.ts\n * bootstrapApplication(AppComponent, appConfig);\n * ```\n *\n * ## Using Services with Tokens\n *\n * ```typescript\n * import { inject } from '@angular/core';\n * import { TOOLBAR_FEATURE_FLAGS } from 'ngx-dev-toolbar';\n * import type { ToolbarService, ToolbarFlag } from 'ngx-dev-toolbar';\n *\n * @Injectable({ providedIn: 'root' })\n * export class FeatureFlagsService {\n * // Optional injection - null in production\n * private devToolbar = inject<ToolbarService<ToolbarFlag>>(\n * TOOLBAR_FEATURE_FLAGS,\n * { optional: true }\n * );\n *\n * constructor() {\n * // Safe to call - no-op if devToolbar is null\n * this.devToolbar?.setAvailableOptions(this.flags);\n *\n * // Subscribe to forced values only if toolbar exists\n * this.devToolbar?.getForcedValues().subscribe(forced => {\n * // Merge forced values\n * });\n * }\n * }\n * ```\n *\n * @param config - Optional configuration for toolbar behavior and tool visibility\n * @returns Angular EnvironmentProviders for all toolbar services\n */\nexport function provideToolbar(config?: ToolbarConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: TOOLBAR_FEATURE_FLAGS, useClass: ToolbarFeatureFlagService },\n { provide: TOOLBAR_PERMISSIONS, useClass: ToolbarPermissionsService },\n { provide: TOOLBAR_LANGUAGE, useClass: ToolbarLanguageService },\n { provide: TOOLBAR_APP_FEATURES, useClass: ToolbarAppFeaturesService },\n { provide: TOOLBAR_CONFIG, useValue: config ?? {} },\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => {\n const appRef = inject(ApplicationRef);\n const injector = inject(EnvironmentInjector);\n const toolbarConfig = inject(TOOLBAR_CONFIG);\n\n const componentRef = createComponent(ToolbarComponent, {\n environmentInjector: injector,\n });\n componentRef.setInput('config', toolbarConfig);\n document.body.appendChild(componentRef.location.nativeElement);\n appRef.attachView(componentRef.hostView);\n },\n },\n ]);\n}\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\n\n@Directive({\n selector: '[ndtStep]',\n standalone: true,\n})\nexport class ToolbarStepDirective {\n readonly ndtStep = input.required<string>();\n readonly stepTitle = input<string>('');\n readonly templateRef = inject(TemplateRef);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n input,\n output,\n} from '@angular/core';\nimport { ToolbarButtonComponent } from '../button/button.component';\nimport { ToolbarStepDirective } from './step-view.directive';\n\n@Component({\n selector: 'ndt-step-view',\n standalone: true,\n imports: [NgTemplateOutlet, ToolbarButtonComponent],\n template: `\n @if (!isDefaultStep()) {\n <div class=\"step-header\">\n <ndt-button (click)=\"back.emit()\" ariaLabel=\"Back\">\\u2190 Back</ndt-button>\n @if (activeTitle()) {\n <span class=\"step-title\">{{ activeTitle() }}</span>\n }\n </div>\n }\n\n @if (activeTemplate(); as tmpl) {\n <ng-container [ngTemplateOutlet]=\"tmpl\" />\n }\n `,\n styles: `\n :host {\n display: flex;\n flex-direction: column;\n }\n\n .step-header {\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-sm);\n padding-bottom: var(--ndt-spacing-sm);\n margin-bottom: var(--ndt-spacing-sm);\n border-bottom: 1px solid var(--ndt-border-primary);\n }\n\n .step-title {\n font-size: var(--ndt-font-size-md);\n font-weight: 600;\n color: var(--ndt-text-primary);\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarStepViewComponent {\n readonly currentStep = input.required<string>();\n readonly defaultStep = input<string>('list');\n\n readonly back = output<void>();\n\n readonly steps = contentChildren(ToolbarStepDirective);\n\n readonly isDefaultStep = computed(\n () => this.currentStep() === this.defaultStep()\n );\n\n readonly activeStep = computed(() =>\n this.steps().find((s) => s.ndtStep() === this.currentStep())\n );\n\n readonly activeTitle = computed(() => this.activeStep()?.stepTitle() ?? '');\n\n readonly activeTemplate = computed(\n () => this.activeStep()?.templateRef ?? null\n );\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ToolbarInternalPresetsService } from './presets-internal.service';\nimport {\n ToolbarPreset,\n ToolbarPresetConfig,\n PartialApplyOptions,\n} from './presets.models';\n\n/**\n * Partial preset for initialization (without generated fields)\n */\nexport interface InitialPreset {\n name: string;\n description?: string;\n config: ToolbarPresetConfig;\n}\n\n/**\n * Public service for managing dev toolbar presets.\n * Allows developers to programmatically save, load, and manage presets.\n */\n@Injectable({ providedIn: 'root' })\nexport class ToolbarPresetsService {\n private internalService = inject(ToolbarInternalPresetsService);\n\n /**\n * Get all saved presets as an Observable\n */\n getPresets(): Observable<ToolbarPreset[]> {\n return this.internalService.presets$;\n }\n\n /**\n * Save current toolbar state as a preset\n * @param name - Name for the preset\n * @param description - Optional description\n * @returns The created preset\n */\n savePreset(name: string, description?: string): ToolbarPreset {\n return this.internalService.saveCurrentAsPreset(name, description);\n }\n\n /**\n * Apply a preset (load its configuration into all tools)\n * @param presetId - ID of the preset to apply\n */\n async applyPreset(presetId: string): Promise<void> {\n return this.internalService.applyPreset(presetId);\n }\n\n /**\n * Update a preset with current toolbar state\n * @param presetId - ID of the preset to update\n */\n updatePreset(presetId: string): void {\n this.internalService.updatePreset(presetId);\n }\n\n /**\n * Delete a preset\n * @param presetId - ID of the preset to delete\n */\n deletePreset(presetId: string): void {\n this.internalService.deletePreset(presetId);\n }\n\n /**\n * Toggle favorite status for a preset\n * @param presetId - ID of the preset to toggle\n */\n toggleFavorite(presetId: string): void {\n this.internalService.toggleFavorite(presetId);\n }\n\n /**\n * Apply a preset with partial options (only selected categories)\n * @param presetId - ID of the preset to apply\n * @param options - Options for which categories to apply\n */\n async partialApplyPreset(\n presetId: string,\n options: PartialApplyOptions\n ): Promise<void> {\n return this.internalService.partialApplyPreset(presetId, options);\n }\n\n /**\n * Update only the metadata (name, description) of a preset\n * @param presetId - ID of the preset to update\n * @param name - New name for the preset\n * @param description - New description for the preset\n */\n updatePresetMetadata(\n presetId: string,\n name: string,\n description?: string\n ): void {\n this.internalService.updatePresetMetadata(presetId, name, description);\n }\n\n /**\n * Export a preset as JSON string\n * @param presetId - ID of the preset to export\n * @returns JSON string representation of the preset\n */\n exportPreset(presetId: string): string | null {\n const preset = this.internalService.getPresetById(presetId);\n if (!preset) return null;\n return JSON.stringify(preset, null, 2);\n }\n\n /**\n * Import a preset from JSON string\n * @param json - JSON string representation of a preset\n * @returns The imported preset\n * @throws Error if JSON is invalid\n */\n importPreset(json: string): ToolbarPreset {\n const preset = JSON.parse(json) as ToolbarPreset;\n return this.internalService.addPreset(preset);\n }\n\n /**\n * Initialize presets with predefined configurations.\n * Useful for setting up default presets that all developers can use.\n * Skips presets that already exist (by name) to avoid duplicates.\n *\n * @param presets - Array of preset configurations to initialize\n * @returns Array of created presets (only newly added ones)\n *\n * @example\n * ```typescript\n * const presetsService = inject(ToolbarPresetsService);\n *\n * presetsService.initializePresets([\n * {\n * name: 'Admin User',\n * description: 'Full access admin configuration',\n * config: {\n * featureFlags: {\n * enabled: ['admin-panel', 'advanced-features'],\n * disabled: []\n * },\n * permissions: {\n * granted: ['admin', 'write', 'delete'],\n * denied: []\n * },\n * appFeatures: {\n * enabled: ['analytics', 'reporting'],\n * disabled: []\n * },\n * language: 'en'\n * }\n * },\n * {\n * name: 'Read-Only User',\n * description: 'Limited access for viewing only',\n * config: {\n * featureFlags: {\n * enabled: [],\n * disabled: ['admin-panel', 'advanced-features']\n * },\n * permissions: {\n * granted: ['read'],\n * denied: ['write', 'delete']\n * },\n * appFeatures: {\n * enabled: [],\n * disabled: ['analytics', 'reporting']\n * },\n * language: null\n * }\n * }\n * ]);\n * ```\n */\n initializePresets(presets: InitialPreset[]): ToolbarPreset[] {\n const existingPresets = this.internalService.presets();\n const existingNames = new Set(\n existingPresets.map((p) => p.name.toLowerCase())\n );\n\n return presets\n .filter((preset) => !existingNames.has(preset.name.toLowerCase()))\n .map((preset) =>\n this.internalService.addPreset({\n id: '', // Will be generated\n createdAt: '', // Will be generated\n updatedAt: '', // Will be generated\n isSystem: true, // Mark as system preset (not editable)\n ...preset,\n })\n );\n }\n\n /**\n * Clear all existing presets and set new initial presets.\n * Use this to replace all presets with a fresh set of configurations.\n *\n * @param presets - Array of preset configurations to set as initial\n * @returns Array of created presets\n */\n setInitialPresets(presets: InitialPreset[]): ToolbarPreset[] {\n // Clear existing presets\n const currentPresets = this.internalService.presets();\n currentPresets.forEach((preset) => {\n this.internalService.deletePreset(preset.id);\n });\n\n // Add new presets\n return this.initializePresets(presets);\n }\n}\n","// Tree-shakeable tokens for dependency injection\nexport {\n TOOLBAR_CONFIG,\n TOOLBAR_FEATURE_FLAGS,\n TOOLBAR_PERMISSIONS,\n TOOLBAR_LANGUAGE,\n TOOLBAR_APP_FEATURES,\n} from './tokens';\n\n// Provider function for tree-shakeable setup\nexport { provideToolbar } from './provide-toolbar';\n\n// Components\nexport * from './components/icons/icon.component';\nexport * from './components/icons/icon.models';\nexport * from './components/list/list.component';\nexport * from './components/list-item/list-item.component';\nexport * from './components/toolbar-tool/toolbar-tool.component';\nexport * from './components/toolbar-tool/toolbar-tool.models';\n\n// UI Components (for building custom tools)\nexport * from './components/button/button.component';\nexport * from './components/input/input.component';\nexport * from './components/select/select.component';\nexport * from './components/card/card.component';\nexport * from './components/clickable-card/clickable-card.component';\nexport * from './components/link-button/link-button.component';\nexport * from './components/step-view/step-view.component';\nexport * from './components/step-view/step-view.directive';\n\nexport * from './toolbar.component';\nexport * from './models/toolbar.interface';\nexport * from './models/toolbar-config.interface';\nexport * from './models/tool-view-state.models';\nexport * from './tools/feature-flags-tool/feature-flags.models';\nexport * from './tools/feature-flags-tool/feature-flags.service';\nexport * from './tools/language-tool/language.models';\nexport * from './tools/language-tool/language.service';\nexport * from './tools/app-features-tool/app-features.models';\nexport * from './tools/app-features-tool/app-features.service';\nexport * from './tools/app-features-tool/app-features-tool.component';\n\n// Permissions Tool\nexport * from './tools/permissions-tool/permissions.models';\nexport * from './tools/permissions-tool/permissions.service';\nexport * from './tools/permissions-tool/permissions-tool.component';\n\n// Presets Tool\nexport * from './tools/presets-tool/presets.models';\nexport * from './tools/presets-tool/presets.service';\nexport * from './tools/presets-tool/presets-tool.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-dev-toolbar.mjs","sources":["../../../../libs/ngx-dev-toolbar/src/tokens.ts","../../../../libs/ngx-dev-toolbar/src/utils/storage.service.ts","../../../../libs/ngx-dev-toolbar/src/toolbar-state.service.ts","../../../../libs/ngx-dev-toolbar/src/components/input/input.component.ts","../../../../libs/ngx-dev-toolbar/src/components/list/list.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/angular-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/bolt-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/bug-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/code-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/database-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/discord-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/docs-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/edit-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/export-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/filter-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/gauge-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/gear-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/git-branch-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/globe-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/import-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/layout-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/lightbulb-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/lighting-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/lock-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/moon-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/network-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/pin-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/puzzle-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/refresh-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/star-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/sun-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/terminal-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/toggle-left-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/translate-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/trash-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/users-icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icons/icon.component.ts","../../../../libs/ngx-dev-toolbar/src/components/icon-button/icon-button.component.ts","../../../../libs/ngx-dev-toolbar/src/components/list-item/list-item.component.ts","../../../../libs/ngx-dev-toolbar/src/components/select/select.component.ts","../../../../libs/ngx-dev-toolbar/src/components/tool-button/tool-button.component.ts","../../../../libs/ngx-dev-toolbar/src/components/window/window.component.ts","../../../../libs/ngx-dev-toolbar/src/components/toolbar-tool/toolbar-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/app-features-tool/app-features-internal.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/app-features-tool/app-features-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/feature-flags-tool/feature-flags-internal.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/feature-flags-tool/feature-flags-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/components/button/button.component.ts","../../../../libs/ngx-dev-toolbar/src/components/card/card.component.ts","../../../../libs/ngx-dev-toolbar/src/components/clickable-card/clickable-card.component.ts","../../../../libs/ngx-dev-toolbar/src/components/link-button/link-button.component.ts","../../../../libs/ngx-dev-toolbar/src/models/toolbar-position.model.ts","../../../../libs/ngx-dev-toolbar/src/tools/home-tool/settings.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/home-tool/home-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/i18n-tool/i18n.models.ts","../../../../libs/ngx-dev-toolbar/src/tools/i18n-tool/i18n-internal.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/i18n-tool/i18n-formatting.utils.ts","../../../../libs/ngx-dev-toolbar/src/tools/i18n-tool/i18n-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/permissions-tool/permissions-internal.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/permissions-tool/permissions-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/presets-tool/presets-internal.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/presets-tool/presets-tool.component.ts","../../../../libs/ngx-dev-toolbar/src/toolbar.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/feature-flags-tool/feature-flags.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/permissions-tool/permissions.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/app-features-tool/app-features.service.ts","../../../../libs/ngx-dev-toolbar/src/provide-toolbar.ts","../../../../libs/ngx-dev-toolbar/src/components/step-view/step-view.directive.ts","../../../../libs/ngx-dev-toolbar/src/components/step-view/step-view.component.ts","../../../../libs/ngx-dev-toolbar/src/tools/i18n-tool/i18n.service.ts","../../../../libs/ngx-dev-toolbar/src/tools/presets-tool/presets.service.ts","../../../../libs/ngx-dev-toolbar/src/index.ts","../../../../libs/ngx-dev-toolbar/src/ngx-dev-toolbar.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ToolbarConfig } from './models/toolbar-config.interface';\nimport { ToolbarService } from './models/toolbar.interface';\nimport { ToolbarAppFeature } from './tools/app-features-tool/app-features.models';\nimport { ToolbarFlag } from './tools/feature-flags-tool/feature-flags.models';\nimport { ToolbarPermission } from './tools/permissions-tool/permissions.models';\n\n/**\n * InjectionToken for the Toolbar configuration.\n *\n * Provided automatically by `provideToolbar(config)`.\n * Can be injected to access the toolbar configuration at runtime.\n */\nexport const TOOLBAR_CONFIG = new InjectionToken<ToolbarConfig>(\n 'TOOLBAR_CONFIG'\n);\n\n/**\n * InjectionToken for the Feature Flags service.\n *\n * Use this token for tree-shakeable injection of the feature flags service.\n * When using dynamic imports, this token enables complete tree-shaking of\n * the toolbar in production builds.\n *\n * @example\n * ```typescript\n * // In your service\n * private devToolbar = inject(TOOLBAR_FEATURE_FLAGS, { optional: true });\n *\n * // Safe to call - no-op if toolbar is not provided\n * this.devToolbar?.setAvailableOptions(flags);\n * ```\n */\nexport const TOOLBAR_FEATURE_FLAGS = new InjectionToken<\n ToolbarService<ToolbarFlag>\n>('TOOLBAR_FEATURE_FLAGS');\n\n/**\n * InjectionToken for the Permissions service.\n *\n * Use this token for tree-shakeable injection of the permissions service.\n * When using dynamic imports, this token enables complete tree-shaking of\n * the toolbar in production builds.\n *\n * @example\n * ```typescript\n * // In your service\n * private devToolbar = inject(TOOLBAR_PERMISSIONS, { optional: true });\n *\n * // Safe to call - no-op if toolbar is not provided\n * this.devToolbar?.setAvailableOptions(permissions);\n * ```\n */\nexport const TOOLBAR_PERMISSIONS = new InjectionToken<\n ToolbarService<ToolbarPermission>\n>('TOOLBAR_PERMISSIONS');\n\n/**\n * InjectionToken for the App Features service.\n *\n * Use this token for tree-shakeable injection of the app features service.\n * When using dynamic imports, this token enables complete tree-shaking of\n * the toolbar in production builds.\n *\n * @example\n * ```typescript\n * // In your service\n * private devToolbar = inject(TOOLBAR_APP_FEATURES, { optional: true });\n *\n * // Safe to call - no-op if toolbar is not provided\n * this.devToolbar?.setAvailableOptions(features);\n * ```\n */\nexport const TOOLBAR_APP_FEATURES = new InjectionToken<\n ToolbarService<ToolbarAppFeature>\n>('TOOLBAR_APP_FEATURES');\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarStorageService {\n private readonly PREFIX = 'AngularToolbar.';\n private readonly TOOLS_KEY = `${this.PREFIX}keys`;\n private readonly SETTINGS_KEY = `${this.PREFIX}settings`;\n\n public set<T>(key: string, value: T): void {\n const toolKey = this.getToolKey(key);\n this.addToolKey(toolKey);\n localStorage.setItem(toolKey, JSON.stringify(value));\n }\n\n public get<T>(key: string): T | null {\n const toolKey = this.getToolKey(key);\n const item = localStorage.getItem(toolKey);\n return item ? JSON.parse(item) : null;\n }\n\n public remove(key: string): void {\n const toolKey = this.getToolKey(key);\n localStorage.removeItem(toolKey);\n this.removeToolKey(toolKey);\n }\n\n public getAllSettings(): Record<string, unknown> {\n const settings: Record<string, unknown> = {};\n\n const keys = this.getToolKeys();\n keys.forEach((key) => {\n const value = this.get(key);\n if (value !== null) {\n settings[key] = value;\n }\n });\n\n return settings;\n }\n\n public setAllSettings(settings: Record<string, unknown>): void {\n Object.entries(settings).forEach(([key, value]) => {\n this.set(key, value);\n });\n }\n\n public clearAllSettings(): void {\n const keys = this.getToolKeys();\n keys.forEach((key) => {\n this.remove(key);\n });\n }\n\n public getToolKeys(): string[] {\n return JSON.parse(localStorage.getItem(this.TOOLS_KEY) ?? '[]');\n }\n\n private addToolKey(key: string) {\n const currentKeys = this.getToolKeys();\n if (currentKeys.includes(key)) {\n return;\n }\n currentKeys.push(key);\n localStorage.setItem(this.TOOLS_KEY, JSON.stringify(currentKeys));\n }\n\n private removeToolKey(key: string): void {\n const currentKeys = this.getToolKeys();\n const index = currentKeys.indexOf(key);\n if (index !== -1) {\n currentKeys.splice(index, 1);\n }\n localStorage.setItem(this.TOOLS_KEY, JSON.stringify(currentKeys));\n }\n\n private getToolKey(key: string): string {\n return key.includes(this.PREFIX) ? key : this.PREFIX + key;\n }\n\n}\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { ToolbarConfig } from './models/toolbar-config.interface';\nimport { ToolbarPosition } from './models/toolbar-position.model';\nimport { ToolbarStorageService } from './utils/storage.service';\n\ninterface ToolbarState {\n isHidden: boolean;\n isCompletelyHidden: boolean;\n position: ToolbarPosition;\n activeToolId: string | null;\n error: string | null;\n theme: 'light' | 'dark';\n delay: number;\n config: ToolbarConfig;\n}\n\nconst SETTINGS_KEY = 'settings';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToolbarStateService {\n private storageService = inject(ToolbarStorageService);\n\n // Initial state\n private state = signal<ToolbarState>({\n isHidden: true,\n isCompletelyHidden: false,\n position: 'bottom',\n activeToolId: null,\n delay: 3000,\n error: null,\n theme: 'dark',\n config: {},\n });\n\n // Selectors\n readonly isVisible = computed(\n () => !this.state().isHidden || this.hasActiveTool()\n );\n readonly isDarkTheme = computed(() => this.state().theme === 'dark');\n readonly activeToolId = computed(() => this.state().activeToolId);\n readonly hasActiveTool = computed(() => this.state().activeToolId !== null);\n readonly error = computed(() => this.state().error);\n readonly theme = computed(() => this.state().theme);\n readonly delay = computed(() => this.state().delay);\n readonly config = computed(() => this.state().config);\n readonly isEnabled = computed(() => this.state().config.enabled ?? true);\n readonly position = computed(() => this.state().position);\n readonly isCompletelyHidden = computed(\n () => this.state().isCompletelyHidden\n );\n\n constructor() {\n this.loadPersistedState();\n }\n\n // State updates\n setVisibility(isVisible: boolean): void {\n if (isVisible) {\n this.state.update((state) => ({\n ...state,\n isHidden: false,\n }));\n } else {\n if (this.activeToolId() === null) {\n setTimeout(() => {\n this.state.update((state) => ({\n ...state,\n isHidden: true,\n }));\n }, this.state().delay);\n }\n }\n }\n\n setTheme(theme: 'light' | 'dark'): void {\n this.state.update((state) => ({\n ...state,\n theme,\n }));\n }\n\n setActiveTool(toolId: string | null): void {\n this.state.update((state) => ({\n ...state,\n activeToolId: toolId,\n }));\n\n if (toolId === null) {\n this.setVisibility(false);\n } else {\n this.setVisibility(true);\n }\n }\n\n // Public actions\n toggleTool(toolId: string | null): void {\n const currentToolId = this.activeToolId();\n this.setActiveTool(currentToolId === toolId ? null : toolId);\n }\n\n toggleVisibility(): void {\n this.state.update((state) => ({\n ...state,\n isHidden: !state.isHidden,\n }));\n }\n\n setConfig(config: ToolbarConfig): void {\n this.state.update((state) => ({\n ...state,\n config,\n }));\n // If config specifies a position, it takes priority\n if (config.position) {\n this.setPosition(config.position);\n }\n }\n\n setPosition(position: ToolbarPosition): void {\n // Close any active tool so its overlay doesn't stay in the old position\n this.setActiveTool(null);\n this.state.update((state) => ({\n ...state,\n position,\n }));\n this.persistState();\n }\n\n toggleCompletelyHidden(): void {\n this.state.update((state) => ({\n ...state,\n isCompletelyHidden: !state.isCompletelyHidden,\n }));\n this.persistState();\n }\n\n private loadPersistedState(): void {\n try {\n const stored = this.storageService.get<{\n position?: ToolbarPosition;\n isCompletelyHidden?: boolean;\n }>(SETTINGS_KEY);\n if (stored) {\n this.state.update((state) => ({\n ...state,\n position: stored.position ?? state.position,\n isCompletelyHidden: stored.isCompletelyHidden ?? state.isCompletelyHidden,\n }));\n }\n } catch {\n // Corrupted localStorage data — use defaults\n }\n }\n\n private persistState(): void {\n const current = this.storageService.get<Record<string, unknown>>(SETTINGS_KEY) ?? {};\n this.storageService.set(SETTINGS_KEY, {\n ...current,\n position: this.state().position,\n isCompletelyHidden: this.state().isCompletelyHidden,\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'ndt-input',\n standalone: true,\n imports: [FormsModule],\n template: `\n <input\n [attr.aria-label]=\"ariaLabel()\"\n [type]=\"type()\"\n [class]=\"inputClass()\"\n [ngModel]=\"value()\"\n [placeholder]=\"placeholder()\"\n (ngModelChange)=\"value.set($event)\"\n />\n `,\n styleUrls: ['./input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarInputComponent {\n value = model.required<string>();\n\n type = input<string>('text');\n placeholder = input<string>('');\n ariaLabel = input<string>('');\n inputClass = input<string>('input');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Container component for displaying lists of items with consistent scrolling,\n * empty states, and layout across all tools.\n *\n * @example\n * ```html\n * <ndt-list\n * [hasItems]=\"items().length > 0\"\n * [hasResults]=\"filteredItems().length > 0\"\n * emptyMessage=\"No items found\"\n * noResultsMessage=\"No items match your filter\"\n * >\n * @for (item of filteredItems(); track item.id) {\n * <ndt-list-item ... />\n * }\n * </ndt-list>\n * ```\n */\n@Component({\n selector: 'ndt-list',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (!hasItems()) {\n <div class=\"empty-state\">\n <p>{{ emptyMessage() }}</p>\n @if (emptyHint()) {\n <p class=\"hint\">{{ emptyHint() }}</p>\n }\n </div>\n } @else if (!hasResults()) {\n <div class=\"empty-state\">\n <p>{{ noResultsMessage() }}</p>\n </div>\n } @else {\n <div class=\"list-container\">\n <ng-content />\n </div>\n }\n `,\n styleUrls: ['./list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarListComponent {\n /**\n * Whether the list has any items at all (before filtering).\n * When false, shows the emptyMessage.\n */\n hasItems = input<boolean>(true);\n\n /**\n * Whether the list has any results after filtering.\n * When false (but hasItems is true), shows the noResultsMessage.\n */\n hasResults = input<boolean>(true);\n\n /**\n * Message to display when there are no items at all.\n * @example \"No feature flags found\"\n */\n emptyMessage = input<string>('No items found');\n\n /**\n * Optional hint text to display below the empty message.\n * @example \"Call setAvailableOptions() to configure features\"\n */\n emptyHint = input<string | undefined>(undefined);\n\n /**\n * Message to display when items exist but none match the current filter.\n * @example \"No flags match your filter\"\n */\n noResultsMessage = input<string>('No results match your filter');\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'ndt-angular-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <defs>\n <linearGradient\n id=\"angular-gradient\"\n x1=\"6\"\n x2=\"18\"\n y1=\"20\"\n y2=\"4\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0\" stop-color=\"#E40035\" />\n <stop offset=\".24\" stop-color=\"#F60A48\" />\n <stop offset=\".352\" stop-color=\"#F20755\" />\n <stop offset=\".494\" stop-color=\"#DC087D\" />\n <stop offset=\".745\" stop-color=\"#9717E7\" />\n <stop offset=\"1\" stop-color=\"#6C00F5\" />\n </linearGradient>\n </defs>\n <g fill=\"url(#angular-gradient)\">\n <polygon points=\"14.1,2.7 20.1,15.7 20.7,5.8\" />\n <polygon points=\"15.6,16.4 8.4,16.4 7.4,18.6 12,21.2 16.6,18.6\" />\n <polygon points=\"9.6,13.5 14.4,13.5 12,7.7\" />\n <polygon points=\"9.9,2.7 3.3,5.8 3.9,15.7\" />\n </g>\n </svg>\n `,\n})\nexport class AngularIconComponent {}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-bolt-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M160,16,144,96H208l-96,144,16-80H64Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z\"\n ></path>\n </svg>\n `,\n})\nexport class BoltIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-bug-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M140,88a16,16,0,1,1,16,16A16,16,0,0,1,140,88ZM100,72a16,16,0,1,0,16,16A16,16,0,0,0,100,72Zm120,72a91.84,91.84,0,0,1-2.34,20.64L236.81,173a12,12,0,0,1-9.62,22l-18-7.85a92,92,0,0,1-162.46,0l-18,7.85a12,12,0,1,1-9.62-22l19.15-8.36A91.84,91.84,0,0,1,36,144v-4H16a12,12,0,0,1,0-24H36v-4a91.84,91.84,0,0,1,2.34-20.64L19.19,83a12,12,0,0,1,9.62-22l18,7.85a92,92,0,0,1,162.46,0l18-7.85a12,12,0,1,1,9.62,22l-19.15,8.36A91.84,91.84,0,0,1,220,112v4h20a12,12,0,0,1,0,24H220ZM60,116H196v-4a68,68,0,0,0-136,0Zm56,94.92V140H60v4A68.1,68.1,0,0,0,116,210.92ZM196,144v-4H140v70.92A68.1,68.1,0,0,0,196,144Z\"\n ></path>\n </svg>\n `,\n})\nexport class BugIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-code-icon',\n standalone: true,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path d=\"M240,128l-48,40H64L16,128,64,88H192Z\" opacity=\"0.2\"></path>\n <path\n d=\"M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z\"\n ></path>\n </svg>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CodeIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-database-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M216,80c0,26.51-39.4,48-88,48S40,106.51,40,80s39.4-48,88-48S216,53.49,216,80Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M128,24C74.17,24,32,48.6,32,80v96c0,31.4,42.17,56,96,56s96-24.6,96-56V80C224,48.6,181.83,24,128,24Zm80,104c0,9.62-7.88,19.43-21.61,26.92C170.93,163.35,150.19,168,128,168s-42.93-4.65-58.39-13.08C55.88,147.43,48,137.62,48,128V111.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64ZM69.61,53.08C85.07,44.65,105.81,40,128,40s42.93,4.65,58.39,13.08C200.12,60.57,208,70.38,208,80s-7.88,19.43-21.61,26.92C170.93,115.35,150.19,120,128,120s-42.93-4.65-58.39-13.08C55.88,99.43,48,89.62,48,80S55.88,60.57,69.61,53.08ZM186.39,202.92C170.93,211.35,150.19,216,128,216s-42.93-4.65-58.39-13.08C55.88,195.43,48,185.62,48,176V159.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64V176C208,185.62,200.12,195.43,186.39,202.92Z\"\n ></path>\n </svg>\n `,\n})\nexport class DatabaseIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-discord-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M104,140a12,12,0,1,1-12-12A12,12,0,0,1,104,140Zm60-12a12,12,0,1,0,12,12A12,12,0,0,0,164,128Zm74.45,64.9-67,29.71a16.17,16.17,0,0,1-21.71-9.1l-8.11-22q-6.72.45-13.63.46t-13.63-.46l-8.11,22a16.18,16.18,0,0,1-21.71,9.1l-67-29.71a15.93,15.93,0,0,1-9.06-18.51L38,58A16.07,16.07,0,0,1,51,46.14l36.06-5.93a16.22,16.22,0,0,1,18.26,11.88l3.26,12.84Q118.11,64,128,64t19.4.93l3.26-12.84a16.21,16.21,0,0,1,18.26-11.88L205,46.14A16.07,16.07,0,0,1,218,58l29.53,116.38A15.93,15.93,0,0,1,238.45,192.9ZM232,178.28,202.47,62s0,0-.08,0L166.33,56a.17.17,0,0,0-.17,0l-2.83,11.14c5,.94,10,2.06,14.83,3.42A8,8,0,0,1,176,86.31a8.09,8.09,0,0,1-2.16-.3A172.25,172.25,0,0,0,128,80a172.25,172.25,0,0,0-45.84,6,8,8,0,1,1-4.32-15.4c4.82-1.36,9.78-2.48,14.82-3.42L89.83,56s0,0-.12,0h0L53.61,61.93a.17.17,0,0,0-.09,0L24,178.33,91,208a.23.23,0,0,0,.22,0L98,189.72a173.2,173.2,0,0,1-20.14-4.32A8,8,0,0,1,82.16,170,171.85,171.85,0,0,0,128,176a171.85,171.85,0,0,0,45.84-6,8,8,0,0,1,4.32,15.41A173.2,173.2,0,0,1,158,189.72L164.75,208a.22.22,0,0,0,.21,0Z\"\n ></path>\n </svg>\n `,\n})\nexport class DiscordIconComponent {\n fill = input<string>('#000000');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-docs-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M213.66,66.34l-40-40A8,8,0,0,0,168,24H88A16,16,0,0,0,72,40V56H56A16,16,0,0,0,40,72V216a16,16,0,0,0,16,16H168a16,16,0,0,0,16-16V200h16a16,16,0,0,0,16-16V72A8,8,0,0,0,213.66,66.34ZM168,216H56V72h76.69L168,107.31v84.53c0,.06,0,.11,0,.16s0,.1,0,.16V216Zm32-32H184V104a8,8,0,0,0-2.34-5.66l-40-40A8,8,0,0,0,136,56H88V40h76.69L200,75.31Zm-56-32a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h48A8,8,0,0,1,144,152Zm0,32a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h48A8,8,0,0,1,144,184Z\"\n ></path>\n </svg>\n `,\n})\nexport class DocsIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-edit-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M221.66,90.34,192,120,136,64l29.66-29.66a8,8,0,0,1,11.31,0L221.66,79A8,8,0,0,1,221.66,90.34Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z\"\n ></path>\n </svg>\n `,\n})\nexport class EditIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-export-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M216,112v96a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V112A16,16,0,0,1,56,96H80a8,8,0,0,1,0,16H56v96H200V112H176a8,8,0,0,1,0-16h24A16,16,0,0,1,216,112ZM93.66,69.66,120,43.31V136a8,8,0,0,0,16,0V43.31l26.34,26.35a8,8,0,0,0,11.32-11.32l-40-40a8,8,0,0,0-11.32,0l-40,40A8,8,0,0,0,93.66,69.66Z\"\n ></path>\n </svg>\n `,\n})\nexport class ExportIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-filter-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M227.81,66.76l-.08.09L160,139.17v55.49A8,8,0,0,1,156.94,201l-32,21.33A8,8,0,0,1,112,216V139.17L44.27,66.85l-.08-.09A16,16,0,0,1,56,40H200a16,16,0,0,1,11.84,26.76Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M230.6,49.53A23.94,23.94,0,0,0,200,32H56A24,24,0,0,0,38.15,65.67L104,139.37V216a8,8,0,0,0,11.58,7.16l32-16A8,8,0,0,0,152,200V139.37l65.85-73.7A23.93,23.93,0,0,0,230.6,49.53ZM203.36,54.86a8,8,0,0,1,.07,9.12L136,139.17V196.58l-16,8V139.17L52.57,64A8,8,0,0,1,56,48H200A8,8,0,0,1,203.36,54.86Z\"\n ></path>\n </svg>\n `,\n})\nexport class FilterIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-gauge-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M232,152a103.93,103.93,0,0,1-5.9,34.63,8,8,0,0,1-7.57,5.37H37.46a8.05,8.05,0,0,1-7.57-5.41A104.06,104.06,0,0,1,24,151.19C24.44,94,71.73,47.49,129,48A104,104,0,0,1,232,152Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M114.34,154.34l96-96a8,8,0,0,1,11.32,11.32l-96,96a8,8,0,0,1-11.32-11.32ZM128,88a63.9,63.9,0,0,1,20.44,3.33,8,8,0,1,0,5.11-15.16A80,80,0,0,0,48.49,160.88,8,8,0,0,0,56.43,168c.29,0,.59,0,.89-.05a8,8,0,0,0,7.07-8.83A64.92,64.92,0,0,1,64,152,64.07,64.07,0,0,1,128,88Zm99.74,13a8,8,0,0,0-14.24,7.3,96.27,96.27,0,0,1,5,75.71l-181.1-.07A96.24,96.24,0,0,1,128,56h.88a95,95,0,0,1,42.82,10.5A8,8,0,1,0,179,52.27,110.8,110.8,0,0,0,129,40h-1A112.05,112.05,0,0,0,22.35,189.25,16.07,16.07,0,0,0,37.46,200H218.53a16,16,0,0,0,15.11-10.71,112.35,112.35,0,0,0-5.9-88.3Z\"\n ></path>\n </svg>\n `,\n})\nexport class GaugeIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-gear-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M207.86,123.18l16.78-21a99.14,99.14,0,0,0-10.07-24.29l-26.7-3a81,81,0,0,0-6.81-6.81l-3-26.71a99.43,99.43,0,0,0-24.3-10l-21,16.77a81.59,81.59,0,0,0-9.64,0l-21-16.78A99.14,99.14,0,0,0,77.91,41.43l-3,26.7a81,81,0,0,0-6.81,6.81l-26.71,3a99.43,99.43,0,0,0-10,24.3l16.77,21a81.59,81.59,0,0,0,0,9.64l-16.78,21a99.14,99.14,0,0,0,10.07,24.29l26.7,3a81,81,0,0,0,6.81,6.81l3,26.71a99.43,99.43,0,0,0,24.3,10l21-16.77a81.59,81.59,0,0,0,9.64,0l21,16.78a99.14,99.14,0,0,0,24.29-10.07l3-26.7a81,81,0,0,0,6.81-6.81l26.71-3a99.43,99.43,0,0,0,10-24.3l-16.77-21A81.59,81.59,0,0,0,207.86,123.18ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8.06,8.06,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8.06,8.06,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z\"\n ></path>\n </svg>\n `,\n})\nexport class GearIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-git-branch-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M224,64a24,24,0,1,1-24-24A24,24,0,0,1,224,64Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M232,64a32,32,0,1,0-40,31v17a8,8,0,0,1-8,8H96a23.84,23.84,0,0,0-8,1.38V95a32,32,0,1,0-16,0v66a32,32,0,1,0,16,0V144a8,8,0,0,1,8-8h88a24,24,0,0,0,24-24V95A32.06,32.06,0,0,0,232,64ZM64,64A16,16,0,1,1,80,80,16,16,0,0,1,64,64ZM96,192a16,16,0,1,1-16-16A16,16,0,0,1,96,192ZM200,80a16,16,0,1,1,16-16A16,16,0,0,1,200,80Z\"\n ></path>\n </svg>\n `,\n})\nexport class GitBranchIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-globe-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M1 16V8h2v8H1Zm3 0V8h2l2.225 4.45L8 12.5V8h2v8H8l-2.225-4.45L6 11.5V16H4Zm9 0v-6h-2V8h6v2h-2v6h-2Zm5 0V8h2v6h3v2h-5Z\"\n ></path>\n </svg>\n `,\n})\nexport class GlobeIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-import-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z\"\n ></path>\n </svg>\n `,\n})\nexport class ImportIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-layout-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path d=\"M104,104V208H40a8,8,0,0,1-8-8V104Z\" opacity=\"0.2\"></path>\n <path\n d=\"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,16V96H40V56ZM40,112H96v88H40Zm176,88H112V112H216v88Z\"\n ></path>\n </svg>\n `,\n})\nexport class LayoutIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-lightbulb-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M176,232a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,232Zm40-128a87.55,87.55,0,0,1-33.64,69.21A16.24,16.24,0,0,0,176,186v6a16,16,0,0,1-16,16H96a16,16,0,0,1-16-16v-6a16,16,0,0,0-6.23-12.66A87.59,87.59,0,0,1,40,104.49C39.74,56.83,78.26,17.14,125.88,16A88,88,0,0,1,216,104Zm-16,0a72,72,0,0,0-73.74-72c-39,.92-70.47,33.39-70.26,72.39a71.65,71.65,0,0,0,27.64,56.3A32,32,0,0,1,96,186v6h64v-6a32.15,32.15,0,0,1,12.47-25.35A71.65,71.65,0,0,0,200,104Zm-16.11-9.34a57.6,57.6,0,0,0-46.56-46.55,8,8,0,0,0-2.66,15.78c16.57,2.79,30.63,16.85,33.44,33.45A8,8,0,0,0,176,104a9,9,0,0,0,1.35-.11A8,8,0,0,0,183.89,94.66Z\"\n ></path>\n </svg>\n `,\n})\nexport class LightbulbIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-lighting-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path d=\"M96,240l16-80L48,136,160,16,144,96l64,24Z\" opacity=\"0.2\"></path>\n <path\n d=\"M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z\"\n ></path>\n </svg>\n `,\n})\nexport class LightingIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-lock-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M208,80H176V56a48,48,0,0,0-96,0V80H48A16,16,0,0,0,32,96V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V96A16,16,0,0,0,208,80ZM96,56a32,32,0,0,1,64,0V80H96ZM208,208H48V96H208V208Zm-68-56a12,12,0,1,1-12-12A12,12,0,0,1,140,152Z\"\n ></path>\n </svg>\n `,\n})\nexport class LockIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-moon-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M224.3,150.3a8.1,8.1,0,0,0-7.8-5.7l-2.2.4A84,84,0,0,1,111,41.6a5.7,5.7,0,0,0,.3-1.8A7.9,7.9,0,0,0,109,33a8.1,8.1,0,0,0-8.1-1.1A104,104,0,1,0,225.4,156.9,8.1,8.1,0,0,0,224.3,150.3Z\"\n opacity=\"0.2\"\n />\n <path\n d=\"M233.5,137.3a12.1,12.1,0,0,0-11.8-8.6,7.9,7.9,0,0,0-1.3.1,80,80,0,0,1-98.2-98.2,12,12,0,0,0-15.6-14A104.2,104.2,0,0,0,32,120c0,57.4,46.6,104,104,104A104.2,104.2,0,0,0,239.4,149.6,12,12,0,0,0,233.5,137.3ZM136,208A88,88,0,0,1,48,120a87.6,87.6,0,0,1,64.8-84.7,96,96,0,0,0,111.9,112A87.6,87.6,0,0,1,136,208Z\"\n />\n </svg>\n `,\n})\nexport class MoonIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-network-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M152,40V72a8,8,0,0,1-8,8H112a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h32A8,8,0,0,1,152,40ZM80,168H48a8,8,0,0,0-8,8v32a8,8,0,0,0,8,8H80a8,8,0,0,0,8-8V176A8,8,0,0,0,80,168Zm128,0H176a8,8,0,0,0-8,8v32a8,8,0,0,0,8,8h32a8,8,0,0,0,8-8V176A8,8,0,0,0,208,168Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M232,112H136V88h8a16,16,0,0,0,16-16V40a16,16,0,0,0-16-16H112A16,16,0,0,0,96,40V72a16,16,0,0,0,16,16h8v24H24a8,8,0,0,0,0,16H56v32H48a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16H80a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16H72V128H184v32h-8a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16h-8V128h32a8,8,0,0,0,0-16ZM112,40h32V72H112ZM80,208H48V176H80Zm128,0H176V176h32Z\"\n ></path>\n </svg>\n `,\n})\nexport class NetworkIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-pin-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M14 12.41V5h1V4H8v1h1v7.41l-2 2V15h9v-.59l-2-2\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M17 14v2h-5v4.5l-.5 1.5l-.5-1.5V16H6v-2l2-2V6H7V3h9v3h-1v6l2 2Z\"\n ></path>\n </svg>\n `,\n})\nexport class PinIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-puzzle-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M204,168a28,28,0,0,0,12-2.69V208a8,8,0,0,1-8,8H64a8,8,0,0,1-8-8V165.31a28,28,0,1,1,0-50.62V72a8,8,0,0,1,8-8h46.69a28,28,0,1,1,50.61,0H208a8,8,0,0,1,8,8v42.69A28,28,0,1,0,204,168Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M220.27,158.54a8,8,0,0,0-7.7-.46,20,20,0,1,1,0-36.16A8,8,0,0,0,224,114.69V72a16,16,0,0,0-16-16H171.78a35.36,35.36,0,0,0,.22-4,36.15,36.15,0,0,0-11.36-26.25,36,36,0,0,0-60.55,23.63,36.56,36.56,0,0,0,.14,6.62H64A16,16,0,0,0,48,72v32.22a35.36,35.36,0,0,0-4-.22,36.12,36.12,0,0,0-26.24,11.36,35.7,35.7,0,0,0-9.69,27,36.08,36.08,0,0,0,33.31,33.6,36.56,36.56,0,0,0,6.62-.14V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V165.31A8,8,0,0,0,220.27,158.54ZM208,208H64V165.31a8,8,0,0,0-11.43-7.23,20,20,0,1,1,0-36.16A8,8,0,0,0,64,114.69V72h46.69a8,8,0,0,0,7.23-11.43,20,20,0,1,1,36.16,0A8,8,0,0,0,161.31,72H208v32.23a35.68,35.68,0,0,0-6.62-.14A36,36,0,0,0,204,176a35.36,35.36,0,0,0,4-.22Z\"\n ></path>\n </svg>\n `,\n})\nexport class PuzzleIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-refresh-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M216,128a88,88,0,1,1-88-88A88,88,0,0,1,216,128Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M224,48V96a8,8,0,0,1-8,8H168a8,8,0,0,1,0-16h28.69L182.06,73.37a79.56,79.56,0,0,0-56.13-23.43h-.45A79.52,79.52,0,0,0,69.59,72.71,8,8,0,0,1,58.41,61.27a96,96,0,0,1,135,.79L208,76.69V48a8,8,0,0,1,16,0ZM186.41,183.29a80,80,0,0,1-112.47-.66L59.31,168H88a8,8,0,0,0,0-16H40a8,8,0,0,0-8,8v48a8,8,0,0,0,16,0V179.31l14.63,14.63A95.43,95.43,0,0,0,130,222.06h.53a95.36,95.36,0,0,0,67.07-27.33,8,8,0,0,0-11.18-11.44Z\"\n ></path>\n </svg>\n `,\n})\nexport class RefreshIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-star-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M229.06,108.79l-48.7,42,14.88,62.79a8.4,8.4,0,0,1-12.52,9.17L128,189.09,73.28,222.74a8.4,8.4,0,0,1-12.52-9.17l14.88-62.79-48.7-42A8.46,8.46,0,0,1,31.73,94L95.64,88.8l24.62-59.6a8.36,8.36,0,0,1,15.48,0l24.62,59.6L224.27,94A8.46,8.46,0,0,1,229.06,108.79Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M239.18,97.26A16.38,16.38,0,0,0,224.92,86l-59-4.76L143.14,26.15a16.36,16.36,0,0,0-30.27,0L90.11,81.23,31.08,86a16.46,16.46,0,0,0-9.37,28.86l45,38.83L53,211.75a16.38,16.38,0,0,0,24.5,17.82L128,198.49l50.53,31.08A16.4,16.4,0,0,0,203,211.75l-13.76-58.07,45-38.83A16.43,16.43,0,0,0,239.18,97.26Zm-15.34,5.47-48.7,42a8,8,0,0,0-2.56,7.91l14.88,62.8a.37.37,0,0,1-.17.48c-.18.14-.23.11-.38,0l-54.72-33.65a8,8,0,0,0-8.38,0L69.09,215.94c-.15.09-.19.12-.38,0a.37.37,0,0,1-.17-.48l14.88-62.8a8,8,0,0,0-2.56-7.91l-48.7-42c-.12-.1-.23-.19-.13-.5s.18-.27.33-.29l63.92-5.16A8,8,0,0,0,103,91.86l24.62-59.61c.08-.17.11-.25.35-.25s.27.08.35.25L153,91.86a8,8,0,0,0,6.75,4.92l63.92,5.16c.15,0,.24,0,.33.29S224,102.63,223.84,102.73Z\"\n ></path>\n </svg>\n `,\n})\nexport class StarIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-sun-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M128,60a68,68,0,1,0,68,68A68.07,68.07,0,0,0,128,60Z\"\n opacity=\"0.2\"\n />\n <path\n d=\"M128,44a8,8,0,0,0,8-8V16a8,8,0,0,0-16,0V36A8,8,0,0,0,128,44ZM57.31,68.69a8,8,0,0,0,11.32-11.32L54.63,43.37A8,8,0,0,0,43.31,54.69ZM44,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H36A8,8,0,0,0,44,128Zm24.63,59.31-14,14a8,8,0,0,0,11.32,11.32l14-14a8,8,0,0,0-11.32-11.32ZM128,212a8,8,0,0,0-8,8v20a8,8,0,0,0,16,0V220A8,8,0,0,0,128,212Zm70.69-24.69a8,8,0,0,0-11.32,11.32l14,14a8,8,0,0,0,11.32-11.32ZM240,120H220a8,8,0,0,0,0,16h20a8,8,0,0,0,0-16Zm-24.69-62.63-14,14a8,8,0,0,0,11.32,11.32l14-14a8,8,0,0,0-11.32-11.32ZM128,76a52,52,0,1,0,52,52A52.06,52.06,0,0,0,128,76Zm0,88a36,36,0,1,1,36-36A36,36,0,0,1,128,164Z\"\n />\n </svg>\n `,\n})\nexport class SunIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-terminal-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M224,56V200a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V56a8,8,0,0,1,8-8H216A8,8,0,0,1,224,56Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M128,128a8,8,0,0,1-3,6.25l-40,32a8,8,0,1,1-10-12.5L107.19,128,75,102.25a8,8,0,1,1,10-12.5l40,32A8,8,0,0,1,128,128Zm48,24H136a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Zm56-96V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56ZM216,200V56H40V200H216Z\"\n ></path>\n </svg>\n `,\n})\nexport class TerminalIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-toggle-left-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M112,128A32,32,0,1,1,80,96,32,32,0,0,1,112,128Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M176,56H80a72,72,0,0,0,0,144h96a72,72,0,0,0,0-144Zm0,128H80A56,56,0,0,1,80,72h96a56,56,0,0,1,0,112ZM80,88a40,40,0,1,0,40,40A40,40,0,0,0,80,88Zm0,64a24,24,0,1,1,24-24A24,24,0,0,1,80,152Z\"\n ></path>\n </svg>\n `,\n})\nexport class ToggleLeftIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-translate-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M250.73,210.63l-56-112a12,12,0,0,0-21.46,0l-20.52,41A84.2,84.2,0,0,1,114,126.22,107.48,107.48,0,0,0,139.33,68H160a12,12,0,0,0,0-24H108V32a12,12,0,0,0-24,0V44H32a12,12,0,0,0,0,24h83.13A83.69,83.69,0,0,1,96,110.35,84,84,0,0,1,83.6,91a12,12,0,1,0-21.81,10A107.55,107.55,0,0,0,78,126.24,83.54,83.54,0,0,1,32,140a12,12,0,0,0,0,24,107.47,107.47,0,0,0,64-21.07,108.4,108.4,0,0,0,45.39,19.44l-24.13,48.26a12,12,0,1,0,21.46,10.73L151.41,196h65.17l12.68,25.36a12,12,0,1,0,21.47-10.73ZM163.41,172,184,130.83,204.58,172Z\"\n ></path>\n </svg>\n `,\n})\nexport class TranslateIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-trash-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z\"\n ></path>\n </svg>\n `,\n})\nexport class TrashIconComponent {\n fill = input<string>('#FFFF');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'ndt-users-icon',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.fill]=\"fill()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 256 256\"\n >\n <path\n d=\"M224,128a95.76,95.76,0,0,1-31.8,71.37A72,72,0,0,0,128,160a40,40,0,1,0-40-40,40,40,0,0,0,40,40,72,72,0,0,0-64.2,39.37h0A96,96,0,1,1,224,128Z\"\n opacity=\"0.2\"\n ></path>\n <path\n d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24ZM74.08,197.5a64,64,0,0,1,107.84,0,87.83,87.83,0,0,1-107.84,0ZM96,120a32,32,0,1,1,32,32A32,32,0,0,1,96,120Zm97.76,66.41a79.66,79.66,0,0,0-36.06-28.75,48,48,0,1,0-59.4,0,79.66,79.66,0,0,0-36.06,28.75,88,88,0,1,1,131.52,0Z\"\n ></path>\n </svg>\n `,\n})\nexport class UsersIconComponent {\n fill = input<string>('#FFFF');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { AngularIconComponent } from './angular-icon.component';\nimport { BoltIconComponent } from './bolt-icon.component';\nimport { BugIconComponent } from './bug-icon.component';\nimport { CodeIconComponent } from './code-icon.component';\nimport { DatabaseIconComponent } from './database-icon.component';\nimport { DiscordIconComponent } from './discord-icon.component';\nimport { DocsIconComponent } from './docs-icon.component';\nimport { EditIconComponent } from './edit-icon.component';\nimport { ExportIconComponent } from './export-icon.component';\nimport { FilterIconComponent } from './filter-icon.component';\nimport { GaugeIconComponent } from './gauge-icon.component';\nimport { GearIconComponent } from './gear-icon.component';\nimport { GitBranchIconComponent } from './git-branch-icon.component';\nimport { GlobeIconComponent } from './globe-icon.component';\nimport { IconName } from './icon.models';\nimport { ImportIconComponent } from './import-icon.component';\nimport { LayoutIconComponent } from './layout-icon.component';\nimport { LightbulbIconComponent } from './lightbulb-icon.component';\nimport { LightingIconComponent } from './lighting-icon.component';\nimport { LockIconComponent } from './lock-icon.component';\nimport { MoonIconComponent } from './moon-icon.component';\nimport { NetworkIconComponent } from './network-icon.component';\nimport { PinIconComponent } from './pin-icon.component';\nimport { PuzzleIconComponent } from './puzzle-icon.component';\nimport { RefreshIconComponent } from './refresh-icon.component';\nimport { StarIconComponent } from './star-icon.component';\nimport { SunIconComponent } from './sun-icon.component';\nimport { TerminalIconComponent } from './terminal-icon.component';\nimport { ToggleLeftIconComponent } from './toggle-left-icon.component';\nimport { TranslateIconComponent } from './translate-icon.component';\nimport { TrashIconComponent } from './trash-icon.component';\nimport { UsersIconComponent } from './users-icon.component';\n\n@Component({\n selector: 'ndt-icon',\n standalone: true,\n imports: [\n AngularIconComponent,\n BoltIconComponent,\n BugIconComponent,\n CodeIconComponent,\n DatabaseIconComponent,\n DocsIconComponent,\n DiscordIconComponent,\n EditIconComponent,\n ExportIconComponent,\n FilterIconComponent,\n GaugeIconComponent,\n GearIconComponent,\n GitBranchIconComponent,\n GlobeIconComponent,\n ImportIconComponent,\n LayoutIconComponent,\n LightbulbIconComponent,\n LightingIconComponent,\n LockIconComponent,\n NetworkIconComponent,\n PinIconComponent,\n PuzzleIconComponent,\n RefreshIconComponent,\n StarIconComponent,\n TerminalIconComponent,\n ToggleLeftIconComponent,\n UsersIconComponent,\n SunIconComponent,\n MoonIconComponent,\n TranslateIconComponent,\n TrashIconComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @switch (name()) { @case ('angular') {\n <ndt-angular-icon />\n } @case ('bolt') {\n <ndt-bolt-icon [fill]=\"fill()\" />\n } @case ('bug') {\n <ndt-bug-icon [fill]=\"fill()\" />\n } @case ('code') {\n <ndt-code-icon [fill]=\"fill()\" />\n } @case ('database') {\n <ndt-database-icon [fill]=\"fill()\" />\n } @case ('docs') {\n <ndt-docs-icon [fill]=\"fill()\" />\n } @case ('edit') {\n <ndt-edit-icon [fill]=\"fill()\" />\n } @case ('export') {\n <ndt-export-icon [fill]=\"fill()\" />\n } @case ('filter') {\n <ndt-filter-icon [fill]=\"fill()\" />\n } @case ('gauge') {\n <ndt-gauge-icon [fill]=\"fill()\" />\n } @case ('gear') {\n <ndt-gear-icon [fill]=\"fill()\" />\n } @case ('git-branch') {\n <ndt-git-branch-icon [fill]=\"fill()\" />\n } @case ('globe') {\n <ndt-globe-icon [fill]=\"fill()\" />\n } @case ('import') {\n <ndt-import-icon [fill]=\"fill()\" />\n } @case ('layout') {\n <ndt-layout-icon [fill]=\"fill()\" />\n } @case ('lighting') {\n <ndt-lighting-icon [fill]=\"fill()\" />\n } @case ('lightbulb') {\n <ndt-lightbulb-icon [fill]=\"fill()\" />\n } @case ('lock') {\n <ndt-lock-icon [fill]=\"fill()\" />\n } @case ('network') {\n <ndt-network-icon [fill]=\"fill()\" />\n } @case ('pin') {\n <ndt-pin-icon [fill]=\"fill()\" />\n } @case ('puzzle') {\n <ndt-puzzle-icon [fill]=\"fill()\" />\n } @case ('refresh') {\n <ndt-refresh-icon [fill]=\"fill()\" />\n } @case ('star') {\n <ndt-star-icon [fill]=\"fill()\" />\n } @case ('terminal') {\n <ndt-terminal-icon [fill]=\"fill()\" />\n } @case ('toggle-left') {\n <ndt-toggle-left-icon [fill]=\"fill()\" />\n } @case ('user') {\n <ndt-users-icon [fill]=\"fill()\" />\n } @case ('sun') {\n <ndt-sun-icon [fill]=\"fill()\" />\n } @case ('moon') {\n <ndt-moon-icon [fill]=\"fill()\" />\n } @case ('translate') {\n <ndt-translate-icon [fill]=\"fill()\" />\n } @case ('discord') {\n <ndt-discord-icon [fill]=\"fill()\" />\n } @case ('trash') {\n <ndt-trash-icon [fill]=\"fill()\" />\n } }\n `,\n})\nexport class ToolbarIconComponent {\n private readonly stateService = inject(ToolbarStateService);\n\n name = input.required<IconName>();\n\n fill = computed(() =>\n this.stateService.theme() === 'dark' ? '#FFFFFF' : '#000000'\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n signal,\n} from '@angular/core';\nimport { ToolbarIconComponent } from '../icons/icon.component';\nimport { IconName } from '../icons/icon.models';\n\n@Component({\n selector: 'ndt-icon-button',\n standalone: true,\n imports: [ToolbarIconComponent],\n template: `\n <button\n class=\"icon-button\"\n [class.icon-button--sm]=\"size() === 'sm'\"\n [class.icon-button--md]=\"size() === 'md'\"\n [class.icon-button--outlined]=\"variant() === 'outlined'\"\n [attr.aria-label]=\"ariaLabel() || tooltip()\"\n (mouseenter)=\"isHovered.set(true)\"\n (mouseleave)=\"isHovered.set(false)\"\n >\n @if (isTooltipVisible()) {\n <span class=\"tooltip\" [class.tooltip--visible]=\"isHovered()\">\n {{ tooltip() }}\n </span>\n }\n @if (icon()) {\n <ndt-icon [name]=\"icon()!\" />\n }\n <ng-content />\n </button>\n `,\n styleUrls: ['./icon-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarIconButtonComponent {\n readonly icon = input<IconName>();\n readonly tooltip = input<string>();\n readonly ariaLabel = input<string>();\n readonly size = input<'sm' | 'md'>('sm');\n readonly variant = input<'ghost' | 'outlined'>('ghost');\n\n protected isHovered = signal(false);\n protected isTooltipVisible = computed(\n () => !!this.tooltip() && this.isHovered()\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ToolbarIconComponent } from '../icons/icon.component';\nimport { ToolbarIconButtonComponent } from '../icon-button/icon-button.component';\nimport { IconName } from '../icons/icon.models';\n\n/**\n * List item component with consistent layout, dot badge indicator,\n * and forced state highlighting.\n *\n * @example\n * ```html\n * <ndt-list-item\n * title=\"Analytics Dashboard\"\n * description=\"Advanced reporting tools\"\n * [isForced]=\"false\"\n * [currentValue]=\"true\"\n * [originalValue]=\"undefined\"\n * >\n * <ndt-select ... />\n * </ndt-list-item>\n * ```\n */\n@Component({\n selector: 'ndt-list-item',\n standalone: true,\n imports: [CommonModule, ToolbarIconComponent, ToolbarIconButtonComponent],\n template: `\n <div class=\"list-item\" [class.list-item--forced]=\"isForced()\">\n <ndt-icon-button\n [icon]=\"pinIcon()\"\n [ariaLabel]=\"pinAriaLabel()\"\n variant=\"ghost\"\n class=\"pin-button\"\n [class.pin-button--pinned]=\"isPinned()\"\n (click)=\"pinToggle.emit(); $event.stopPropagation()\"\n />\n <div class=\"info\">\n <h3>{{ title() }}</h3>\n @if (description()) {\n <div class=\"description-wrapper\">\n <span\n class=\"dot-indicator\"\n [class.dot-indicator--on]=\"displayValue()\"\n [class.dot-indicator--off]=\"!displayValue()\"\n [title]=\"tooltipText()\"\n ></span>\n <p>{{ description() }}</p>\n </div>\n }\n </div>\n <div class=\"actions\">\n @if (showApply() && isForced()) {\n <ndt-icon-button\n [icon]=\"applyState() === 'idle' ? 'export' : undefined\"\n tooltip=\"Apply to source\"\n variant=\"outlined\"\n class=\"apply-button\"\n [class.apply-button--loading]=\"applyState() === 'loading'\"\n [class.apply-button--success]=\"applyState() === 'success'\"\n [class.apply-button--error]=\"applyState() === 'error'\"\n (click)=\"applyToSource.emit()\"\n >\n @switch (applyState()) {\n @case ('loading') {\n <span class=\"apply-spinner\"></span>\n }\n @case ('success') {\n <span class=\"apply-icon\">✓</span>\n }\n @case ('error') {\n <span class=\"apply-icon\">✕</span>\n }\n }\n </ndt-icon-button>\n }\n <ng-content />\n </div>\n </div>\n `,\n styleUrls: ['./list-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarListItemComponent {\n /**\n * Display title for the list item\n * @example \"Analytics Dashboard\"\n */\n title = input.required<string>();\n\n /**\n * Optional description text\n * @example \"Advanced reporting and data visualization tools\"\n */\n description = input<string | undefined>(undefined);\n\n /**\n * Whether this item's state is forced via the dev toolbar\n */\n isForced = input<boolean>(false);\n\n /**\n * Current enabled/granted state of the item\n */\n currentValue = input.required<boolean>();\n\n /**\n * Original value before forcing (only present when isForced is true)\n */\n originalValue = input<boolean | undefined>(undefined);\n\n /**\n * Whether to show the \"Apply to source\" button\n */\n showApply = input<boolean>(false);\n\n /**\n * Current state of the apply operation\n */\n applyState = input<'idle' | 'loading' | 'success' | 'error'>('idle');\n\n /**\n * Whether this item is pinned to the top of the list\n */\n isPinned = input<boolean>(false);\n\n /**\n * Emits when the user clicks the pin/unpin button\n */\n pinToggle = output<void>();\n\n /**\n * Emits when the user clicks \"Apply to source\"\n */\n applyToSource = output<void>();\n\n protected pinIcon = computed<IconName>(() => 'pin');\n\n protected pinAriaLabel = computed(() =>\n this.isPinned() ? 'Unpin item' : 'Pin item'\n );\n\n /**\n * Value to display in the dot indicator.\n * For forced items: shows originalValue\n * For non-forced items: shows currentValue\n */\n protected displayValue = computed(() => {\n const originalValue = this.originalValue();\n return this.isForced() && originalValue !== undefined\n ? originalValue\n : this.currentValue();\n });\n\n /**\n * Tooltip text explaining the indicator state\n */\n protected tooltipText = computed(() => {\n const value = this.displayValue();\n const state = value ? 'enabled' : 'disabled';\n\n if (this.isForced() && this.originalValue() !== undefined) {\n return `Originally: ${state}`;\n }\n\n return `Current state: ${state}`;\n });\n}\n","import { CdkMenuModule } from '@angular/cdk/menu';\nimport { ConnectedPosition, OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarStateService } from '../../toolbar-state.service';\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\n@Component({\n selector: 'ndt-select',\n standalone: true,\n imports: [CommonModule, FormsModule, OverlayModule, CdkMenuModule],\n template: `\n <div\n class=\"ndt-select\"\n [class.small]=\"size() === 'small'\"\n [class.open]=\"isOpen()\"\n [class.placeholder]=\"isPlaceholder()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"selectMenuId\"\n [attr.data-theme]=\"theme()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"toggle()\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n tabindex=\"0\"\n role=\"combobox\"\n >\n <span class=\"select__value\">{{ selectedLabel() }}</span>\n <span class=\"select__arrow\" aria-hidden=\"true\"></span>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayPanelClass]=\"['ndt-overlay-panel', 'ndt-select-overlay']\"\n (overlayOutsideClick)=\"close()\"\n >\n <div\n [id]=\"selectMenuId\"\n class=\"ndt-select-menu\"\n cdkMenu\n role=\"listbox\"\n [attr.data-theme]=\"theme()\"\n >\n @for (option of options(); track option.value) {\n <button\n class=\"select-menu-item\"\n [class.selected]=\"option.value === value()\"\n [attr.aria-selected]=\"option.value === value()\"\n cdkMenuItem\n type=\"button\"\n (click)=\"selectOption(option)\"\n >\n {{ option.label }}\n </button>\n }\n </div>\n </ng-template>\n `,\n styleUrls: ['./select.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarSelectComponent {\n readonly devToolbarStateService = inject(ToolbarStateService);\n\n value = model<string>();\n options = input.required<SelectOption[]>();\n ariaLabel = input<string>('');\n label = input<string>('');\n size = input<'small' | 'medium'>('medium');\n placeholder = input<string>('Select an option');\n readonly theme = computed(() => this.devToolbarStateService.theme());\n\n protected readonly selectMenuId = `select-menu-${Math.random()\n .toString(36)\n .slice(2, 11)}`;\n isOpen = signal(false);\n\n isPlaceholder = computed(() => {\n const options = this.options();\n return !!options?.length && !options.some((opt) => opt.value === this.value());\n });\n\n selectedLabel = computed(() => {\n const selected = this.options()?.find((opt) => opt.value === this.value());\n return selected?.label ?? this.placeholder();\n });\n\n positions: ConnectedPosition[] = [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 4,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -4,\n },\n ];\n\n toggle() {\n this.isOpen.update((v) => !v);\n }\n\n close() {\n this.isOpen.set(false);\n }\n\n selectOption(option: SelectOption) {\n this.value.set(option.value);\n this.close();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { ToolbarPosition } from '../../models/toolbar-position.model';\nimport { ToolbarStateService } from '../../toolbar-state.service';\n\n@Component({\n selector: 'ndt-tool-button',\n standalone: true,\n host: {\n '[class]': '\"tooltip-position-\" + position()',\n },\n template: `\n <button\n class=\"tool-button\"\n [class.tool-button--active]=\"isActive()\"\n [class.tool-button--focus]=\"isFocused()\"\n (mouseenter)=\"onMouseEnter()\"\n (focusin)=\"onFocus()\"\n (focusout)=\"onBlur()\"\n (mouseleave)=\"onMouseLeave()\"\n (keydown.escape)=\"onEscape()\"\n >\n @if (isTooltipVisible()) {\n <span\n class=\"tooltip\"\n [class.tooltip--visible]=\"tooltipState\"\n >\n {{ tooltip() }}\n </span>\n }\n <ng-content />\n @if (badge()) {\n <span class=\"tool-button__badge\">{{ badge() }}</span>\n }\n </button>\n `,\n styleUrls: ['./tool-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarToolButtonComponent {\n // Injects\n private readonly state = inject(ToolbarStateService);\n\n // Inputs\n readonly toolLabel = input.required<string>();\n readonly toolId = input.required<string>();\n readonly badge = input<string>();\n readonly position = input<ToolbarPosition>('bottom');\n\n // Outputs\n readonly open = output<void>();\n\n // Signals\n readonly isActive = computed(\n () => this.state.activeToolId() === this.toolId()\n );\n readonly isToolbarVisible = this.state.isVisible;\n\n readonly isFocused = signal(false);\n readonly tooltip = computed(() => this.toolLabel());\n readonly isTooltipVisible = computed(\n () => this.tooltip() && !this.isActive() && this.isToolbarVisible()\n );\n\n // Properties\n protected tooltipState = false;\n private readonly hideDelay = 3000;\n\n // Public methods\n onClick(): void {\n this.isFocused.set(false);\n this.open.emit();\n }\n\n onMouseEnter(): void {\n this.tooltipState = true;\n }\n\n onMouseLeave(): void {\n this.tooltipState = false;\n }\n\n onEscape(): void {\n this.isFocused.set(false);\n }\n\n onFocus(): void {\n this.isFocused.set(true);\n }\n\n onBlur(): void {\n this.isFocused.set(false);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarWindowOptions } from '../toolbar-tool/toolbar-tool.models';\n\n@Component({\n selector: 'ndt-window',\n standalone: true,\n template: `\n <div class=\"ndt-window\" [attr.data-theme]=\"theme()\">\n <div class=\"ndt-header\">\n <div class=\"ndt-header__content\">\n <div class=\"ndt-header__title\">\n <h1>{{ config().title }}</h1>\n @if (config().isBeta) {\n <span class=\"beta-tag\">BETA</span>\n }\n </div>\n @if (config().description) {\n <p class=\"ndt-header__description\">{{ config().description }}</p>\n }\n </div>\n <div class=\"ndt-header__controls\">\n @if (config().isMinimizable) {\n <button aria-label=\"Minimize\" class=\"control\" (click)=\"onMinimize()\">\n −\n </button>\n } @if (config().isMaximizable) {\n <button aria-label=\"Maximize\" class=\"control\" (click)=\"onMaximize()\">\n □\n </button>\n } @if (config().isClosable) {\n <button\n aria-label=\"Close\"\n class=\"control control--close\"\n (click)=\"onClose()\"\n >\n ×\n </button>\n }\n </div>\n </div>\n\n <div class=\"divider\"></div>\n <div class=\"ndt-content\">\n <ng-content></ng-content>\n </div>\n </div>\n `,\n styleUrls: ['./window.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarWindowComponent {\n readonly devToolbarStateService = inject(ToolbarStateService);\n readonly config = input.required<ToolbarWindowOptions>();\n readonly closed = output<void>();\n readonly maximize = output<void>();\n readonly minimize = output<void>();\n\n readonly theme = computed(() => this.devToolbarStateService.theme());\n\n protected onClose(): void {\n this.closed.emit();\n }\n\n protected onMaximize(): void {\n this.maximize.emit();\n }\n\n protected onMinimize(): void {\n this.minimize.emit();\n }\n}\n","import { CdkConnectedOverlay, ConnectedPosition, OverlayModule } from '@angular/cdk/overlay';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n contentChild,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarIconComponent } from '../icons/icon.component';\nimport { IconName } from '../icons/icon.models';\nimport { ToolbarToolButtonComponent } from '../tool-button/tool-button.component';\nimport { ToolbarWindowComponent } from '../window/window.component';\nimport { ToolbarWindowOptions } from './toolbar-tool.models';\n\n@Component({\n selector: 'ndt-toolbar-tool',\n standalone: true,\n imports: [\n CdkConnectedOverlay,\n OverlayModule,\n ToolbarWindowComponent,\n ToolbarToolButtonComponent,\n ToolbarIconComponent,\n ],\n template: `\n <div #trigger=\"cdkOverlayOrigin\" class=\"ndt-toolbar-tool\" cdkOverlayOrigin>\n <div\n class=\"ndt-toolbar-tool__icon\"\n (click)=\"onOpen()\"\n (keydown.enter)=\"onOpen()\"\n (keydown.space)=\"onOpen()\"\n tabindex=\"0\"\n >\n <div #buttonContainer>\n @if (icon()) {\n <ndt-tool-button [toolLabel]=\"toolTitle()\" [toolId]=\"options().id\" [badge]=\"badge()\" [position]=\"state.position()\">\n <ndt-icon [name]=\"icon()\" />\n </ndt-tool-button>\n } @else {\n <ng-content select=\"ndt-tool-button\"></ng-content>\n }\n </div>\n </div>\n\n @if (isActive()) {\n <ng-template\n #contentTemplate\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isActive()\"\n [cdkConnectedOverlayPositions]=\"positions()\"\n [cdkConnectedOverlayWidth]=\"width()\"\n [cdkConnectedOverlayHeight]=\"height()\"\n [cdkConnectedOverlayPanelClass]=\"['ndt-overlay-panel', 'ndt-tool-overlay']\"\n cdkConnectedOverlay\n >\n <ndt-window [class]=\"'ndt-slide-' + slideDirection()\" [config]=\"options()\" (closed)=\"onClose()\">\n <ng-content />\n </ndt-window>\n </ng-template>\n }\n </div>\n `,\n styleUrl: './toolbar-tool.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarToolComponent {\n state = inject(ToolbarStateService);\n buttonContainer = viewChild.required<ElementRef>('buttonContainer');\n buttonComponent = contentChild(ToolbarToolButtonComponent);\n\n options = input.required<ToolbarWindowOptions>();\n icon = input.required<IconName>();\n toolTitle = input.required<string>();\n badge = input<string>();\n isActive = computed(() => this.state.activeToolId() === this.options().id);\n\n slideDirection = computed(() => {\n switch (this.state.position()) {\n case 'bottom': return 'up';\n case 'top': return 'down';\n case 'left': return 'right';\n case 'right': return 'left';\n }\n });\n\n height = computed(() => {\n switch (this.options().size) {\n case 'small':\n return 320;\n case 'medium':\n return 480;\n case 'tall':\n return 620;\n case 'large':\n return 620;\n default:\n return 480;\n }\n });\n\n width = computed(() => {\n switch (this.options().size) {\n case 'small':\n return 320;\n case 'medium':\n return 480;\n case 'tall':\n return 480;\n case 'large':\n return 620;\n default:\n return 400;\n }\n });\n\n positions = computed((): ConnectedPosition[] => {\n const position = this.state.position();\n const triggerRect = this.getButtonContainerRect();\n\n switch (position) {\n case 'bottom': {\n // Original logic: overlay centered above toolbar\n const windowCenter = window.innerWidth / 2;\n const offsetX = windowCenter - (triggerRect?.left ?? 0) - 22;\n return [{\n originX: 'center',\n originY: 'center',\n overlayX: 'center',\n overlayY: 'center',\n offsetY: -(Math.ceil(this.height() / 2) + 36),\n offsetX,\n }];\n }\n case 'top': {\n // Overlay centered below toolbar\n const windowCenter = window.innerWidth / 2;\n const offsetX = windowCenter - (triggerRect?.left ?? 0) - 22;\n return [{\n originX: 'center',\n originY: 'center',\n overlayX: 'center',\n overlayY: 'center',\n offsetY: Math.ceil(this.height() / 2) + 36,\n offsetX,\n }];\n }\n case 'left': {\n // Overlay centered to the right of toolbar\n const windowMiddle = window.innerHeight / 2;\n const offsetY = windowMiddle - (triggerRect?.top ?? 0) - 22;\n return [{\n originX: 'center',\n originY: 'center',\n overlayX: 'center',\n overlayY: 'center',\n offsetX: Math.ceil(this.width() / 2) + 36,\n offsetY,\n }];\n }\n case 'right': {\n // Overlay centered to the left of toolbar\n const windowMiddle = window.innerHeight / 2;\n const offsetY = windowMiddle - (triggerRect?.top ?? 0) - 22;\n return [{\n originX: 'center',\n originY: 'center',\n overlayX: 'center',\n overlayY: 'center',\n offsetX: -(Math.ceil(this.width() / 2) + 36),\n offsetY,\n }];\n }\n }\n });\n\n onOpen(): void {\n this.state.setActiveTool(this.options().id);\n }\n\n onClose(): void {\n this.state.setActiveTool(null);\n }\n\n private getButtonContainerRect(): DOMRect | undefined {\n return this.buttonContainer()?.nativeElement?.getBoundingClientRect();\n }\n}\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Observable, combineLatest, map } from 'rxjs';\nimport { ApplyToSourceState } from '../../models/toolbar.interface';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { ToolbarAppFeature, ForcedAppFeaturesState } from './app-features.models';\n\n/**\n * Internal service for managing app features state and forced overrides.\n *\n * This service handles:\n * - Feature configuration storage\n * - Forced feature state management\n * - localStorage persistence\n * - State validation and cleanup\n *\n * @internal This service is for internal toolbar use only. Consumers should use ToolbarAppFeaturesService.\n */\n@Injectable({ providedIn: 'root' })\nexport class ToolbarInternalAppFeaturesService {\n private readonly STORAGE_KEY = 'app-features';\n private storageService = inject(ToolbarStorageService);\n private stateService = inject(ToolbarStateService);\n\n private appFeaturesSubject = new BehaviorSubject<ToolbarAppFeature[]>([]);\n private forcedFeaturesSubject = new BehaviorSubject<ForcedAppFeaturesState>({\n enabled: [],\n disabled: [],\n });\n\n private readonly forcedFeatures$ = this.forcedFeaturesSubject.asObservable();\n\n /**\n * Observable stream of all features with merged forced state\n */\n public features$: Observable<ToolbarAppFeature[]> = combineLatest([\n this.appFeaturesSubject.asObservable(),\n this.forcedFeatures$,\n ]).pipe(\n map(([appFeatures, forcedState]) => this.mergeForcedState(appFeatures, forcedState))\n );\n\n /**\n * Signal containing current features with merged forced state\n */\n public features = toSignal(this.features$, { initialValue: [] });\n\n constructor() {\n this.loadForcedFeatures();\n }\n\n /**\n * Set available app features for the application.\n * Validates features, trims whitespace, and triggers validation of forced state.\n *\n * @param features - Array of app features to configure\n * @throws Error if duplicate feature IDs or empty IDs are detected\n */\n setAppFeatures(features: ToolbarAppFeature[]): void {\n // Validate for empty IDs\n const emptyIdFeature = features.find((f) => !f.id || f.id.trim() === '');\n if (emptyIdFeature) {\n throw new Error('Feature ID cannot be empty');\n }\n\n // Validate for duplicate IDs\n const ids = features.map((f) => f.id);\n const duplicateIds = ids.filter((id, index) => ids.indexOf(id) !== index);\n if (duplicateIds.length > 0) {\n throw new Error(`Duplicate feature IDs detected: ${duplicateIds.join(', ')}`);\n }\n\n // Trim whitespace from names and warn about empty names\n const processedFeatures = features.map((feature) => {\n const trimmedName = feature.name.trim();\n if (!trimmedName) {\n console.warn(`Feature '${feature.id}' has empty name`);\n }\n return {\n ...feature,\n name: trimmedName || feature.name,\n };\n });\n\n this.appFeaturesSubject.next(processedFeatures);\n this.validateAndCleanForcedState();\n }\n\n /**\n * Get observable stream of app features (natural state, no forced state merged)\n */\n getAppFeatures(): Observable<ToolbarAppFeature[]> {\n return this.appFeaturesSubject.asObservable();\n }\n\n /**\n * Get observable stream of features that have forced overrides\n */\n getForcedFeatures(): Observable<ToolbarAppFeature[]> {\n return this.features$.pipe(\n map((features) => {\n // If toolbar is disabled, return empty array (no forced values)\n if (!this.stateService.isEnabled()) {\n return [];\n }\n return features.filter((feature) => feature.isForced);\n })\n );\n }\n\n /**\n * Force a feature to enabled or disabled state.\n * Persists the forced state to localStorage.\n *\n * @param featureId - ID of the feature to force\n * @param isEnabled - Whether to force feature to enabled (true) or disabled (false)\n */\n setFeature(featureId: string, isEnabled: boolean): void {\n const { enabled, disabled } = this.forcedFeaturesSubject.value;\n\n // Remove feature from both arrays\n const newEnabled = enabled.filter((id) => id !== featureId);\n const newDisabled = disabled.filter((id) => id !== featureId);\n\n // Add to appropriate array\n if (isEnabled) {\n newEnabled.push(featureId);\n } else {\n newDisabled.push(featureId);\n }\n\n const newState = { enabled: newEnabled, disabled: newDisabled };\n this.forcedFeaturesSubject.next(newState);\n this.saveForcedFeatures(newState);\n }\n\n /**\n * Remove forced override for a feature, returning it to natural state.\n * Persists the change to localStorage.\n *\n * @param featureId - ID of the feature to unforce\n */\n removeFeatureOverride(featureId: string): void {\n const { enabled, disabled } = this.forcedFeaturesSubject.value;\n\n const newState = {\n enabled: enabled.filter((id) => id !== featureId),\n disabled: disabled.filter((id) => id !== featureId),\n };\n\n this.forcedFeaturesSubject.next(newState);\n this.saveForcedFeatures(newState);\n }\n\n /**\n * Apply a preset forced state (for preset integration).\n * Validates and cleans invalid feature IDs before applying.\n *\n * @param state - Forced features state from preset\n */\n applyForcedState(state: ForcedAppFeaturesState): void {\n const configuredFeatureIds = this.appFeaturesSubject.value.map((f) => f.id);\n\n // Validate and filter to only valid IDs\n const validEnabled = state.enabled.filter((id) => configuredFeatureIds.includes(id));\n const validDisabled = state.disabled.filter((id) => configuredFeatureIds.includes(id));\n\n const invalidIds = [\n ...state.enabled.filter((id) => !configuredFeatureIds.includes(id)),\n ...state.disabled.filter((id) => !configuredFeatureIds.includes(id)),\n ];\n\n if (invalidIds.length > 0) {\n console.warn(`Preset contains invalid feature IDs (ignored): ${invalidIds.join(', ')}`);\n }\n\n const cleanedState = { enabled: validEnabled, disabled: validDisabled };\n this.forcedFeaturesSubject.next(cleanedState);\n this.saveForcedFeatures(cleanedState);\n }\n\n /**\n * Get current forced state as a snapshot (defensive copy).\n * Useful for preset exports and debugging.\n *\n * @returns Current forced features state\n */\n getCurrentForcedState(): ForcedAppFeaturesState {\n const state = this.forcedFeaturesSubject.value;\n return {\n enabled: [...state.enabled],\n disabled: [...state.disabled],\n };\n }\n\n // Apply to source\n readonly applyCallback = signal<((id: string, value: boolean) => Promise<void>) | null>(null);\n readonly applyStates = signal<Record<string, ApplyToSourceState>>({});\n readonly hasApplyCallback = computed(() => this.applyCallback() !== null);\n\n setApplyToSource(callback: (id: string, value: boolean) => Promise<void>): void {\n this.applyCallback.set(callback);\n }\n\n async applyToSource(id: string, value: boolean): Promise<void> {\n const callback = this.applyCallback();\n if (!callback) return;\n\n this.applyStates.update((s) => ({ ...s, [id]: 'loading' }));\n try {\n await callback(id, value);\n this.applyStates.update((s) => ({ ...s, [id]: 'success' }));\n setTimeout(\n () => this.applyStates.update((s) => ({ ...s, [id]: 'idle' })),\n 1500\n );\n } catch {\n this.applyStates.update((s) => ({ ...s, [id]: 'error' }));\n setTimeout(\n () => this.applyStates.update((s) => ({ ...s, [id]: 'idle' })),\n 1500\n );\n }\n }\n\n /**\n * Merge natural app features with forced state.\n *\n * @param appFeatures - Natural feature configuration\n * @param forcedState - Forced overrides from localStorage/toolbar\n * @returns Features with merged forced state\n */\n private mergeForcedState(\n appFeatures: ToolbarAppFeature[],\n forcedState: ForcedAppFeaturesState\n ): ToolbarAppFeature[] {\n // If toolbar is disabled, return app features without overrides\n if (!this.stateService.isEnabled()) {\n return appFeatures;\n }\n\n return appFeatures.map((feature) => {\n const isInEnabled = forcedState.enabled.includes(feature.id);\n const isInDisabled = forcedState.disabled.includes(feature.id);\n const isForced = isInEnabled || isInDisabled;\n\n return {\n ...feature,\n isEnabled: isInEnabled ? true : isInDisabled ? false : feature.isEnabled,\n isForced,\n originalValue: isForced ? feature.isEnabled : undefined,\n };\n });\n }\n\n /**\n * Load forced features state from localStorage on initialization.\n * Handles missing or corrupted data gracefully.\n */\n private loadForcedFeatures(): void {\n try {\n const savedState = this.storageService.get<ForcedAppFeaturesState>(this.STORAGE_KEY);\n\n if (savedState) {\n this.forcedFeaturesSubject.next(savedState);\n }\n } catch (error) {\n console.error('Failed to load forced app features from localStorage:', error);\n // Use default empty state on error\n }\n }\n\n /**\n * Persist forced features state to localStorage.\n * Handles quota exceeded errors gracefully.\n *\n * @param state - Forced state to persist\n */\n private saveForcedFeatures(state: ForcedAppFeaturesState): void {\n try {\n this.storageService.set(this.STORAGE_KEY, state);\n } catch (error) {\n console.error('Failed to persist app features to localStorage:', error);\n // Continue execution - state is still valid in memory for current session\n }\n }\n\n /**\n * Validate forced feature IDs against configured features and clean up invalid ones.\n * Called after setAppFeatures() to ensure forced state references valid features.\n */\n private validateAndCleanForcedState(): void {\n const configuredFeatureIds = this.appFeaturesSubject.value.map((f) => f.id);\n const currentForcedState = this.forcedFeaturesSubject.value;\n\n const validEnabled = currentForcedState.enabled.filter((id) =>\n configuredFeatureIds.includes(id)\n );\n const validDisabled = currentForcedState.disabled.filter((id) =>\n configuredFeatureIds.includes(id)\n );\n\n const removedIds = [\n ...currentForcedState.enabled.filter((id) => !configuredFeatureIds.includes(id)),\n ...currentForcedState.disabled.filter((id) => !configuredFeatureIds.includes(id)),\n ];\n\n if (removedIds.length > 0) {\n console.warn(`Removed invalid feature IDs from forced state: ${removedIds.join(', ')}`);\n\n const cleanedState = { enabled: validEnabled, disabled: validDisabled };\n this.forcedFeaturesSubject.next(cleanedState);\n this.saveForcedFeatures(cleanedState);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarInputComponent } from '../../components/input/input.component';\nimport { ToolbarListComponent } from '../../components/list/list.component';\nimport { ToolbarListItemComponent } from '../../components/list-item/list-item.component';\nimport { ToolbarSelectComponent } from '../../components/select/select.component';\nimport { ToolbarToolComponent } from '../../components/toolbar-tool/toolbar-tool.component';\nimport { ToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';\nimport { ToolViewState } from '../../models/tool-view-state.models';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { ToolbarInternalAppFeaturesService } from './app-features-internal.service';\nimport { AppFeatureFilter, ToolbarAppFeature } from './app-features.models';\n\n/**\n * Component for managing app features in the dev toolbar.\n *\n * Provides UI for:\n * - Searching features by name and description\n * - Filtering features by state (all/forced/enabled/disabled)\n * - Forcing features to enabled/disabled state via 3-state dropdown\n * - Viewing feature descriptions and current state\n *\n * @example\n * ```html\n * <ndt-app-features-tool />\n * ```\n */\n@Component({\n selector: 'ndt-app-features-tool',\n standalone: true,\n imports: [\n FormsModule,\n ToolbarToolComponent,\n ToolbarInputComponent,\n ToolbarSelectComponent,\n ToolbarListComponent,\n ToolbarListItemComponent,\n ],\n template: `\n <ndt-toolbar-tool\n [options]=\"options\"\n toolTitle=\"App Features\"\n icon=\"puzzle\"\n [badge]=\"badgeCount()\"\n >\n <div class=\"container\">\n <div class=\"tool-header\">\n <ndt-input\n [value]=\"searchQuery()\"\n (valueChange)=\"onSearchChange($event)\"\n placeholder=\"Search features...\"\n />\n <div class=\"filter-wrapper\">\n <ndt-select\n [value]=\"activeFilter()\"\n [options]=\"filterOptions\"\n [size]=\"'medium'\"\n (valueChange)=\"onFilterChange($event)\"\n />\n </div>\n </div>\n\n <ndt-list\n [hasItems]=\"!hasNoFeatures()\"\n [hasResults]=\"!hasNoFilteredFeatures()\"\n emptyMessage=\"No app features found\"\n [emptyHint]=\"'Call setAvailableOptions() to configure features'\"\n noResultsMessage=\"No features match your filter\"\n >\n @for (feature of filteredFeatures(); track feature.id) {\n <ndt-list-item\n [title]=\"feature.name\"\n [description]=\"feature.description\"\n [isForced]=\"feature.isForced\"\n [currentValue]=\"feature.isEnabled\"\n [originalValue]=\"feature.originalValue\"\n [isPinned]=\"pinnedIds().has(feature.id)\"\n (pinToggle)=\"togglePin(feature.id)\"\n [showApply]=\"hasApplyCallback()\"\n [applyState]=\"getApplyState(feature.id)\"\n (applyToSource)=\"onApplyToSource(feature.id, feature.isEnabled)\"\n >\n <ndt-select\n [value]=\"getFeatureValue(feature)\"\n [options]=\"featureValueOptions\"\n [ariaLabel]=\"'Set value for ' + feature.name\"\n (valueChange)=\"onFeatureChange(feature.id, $event ?? '')\"\n size=\"small\"\n />\n </ndt-list-item>\n }\n </ndt-list>\n </div>\n </ndt-toolbar-tool>\n `,\n styles: [\n `\n .container {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 0;\n }\n\n .tool-header {\n position: relative;\n flex-shrink: 0;\n display: flex;\n gap: var(--ndt-spacing-sm);\n margin-bottom: var(--ndt-spacing-sm);\n\n ndt-input {\n flex: 1;\n }\n\n .filter-wrapper {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n border-left: 1px solid var(--ndt-border-primary);\n padding-left: var(--ndt-spacing-sm);\n\n ndt-select {\n flex: 0 0 auto;\n min-width: 140px;\n }\n }\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarAppFeaturesToolComponent {\n // Injects\n private readonly appFeaturesService = inject(ToolbarInternalAppFeaturesService);\n private readonly storageService = inject(ToolbarStorageService);\n\n // Constants\n private readonly VIEW_STATE_KEY = 'app-features-view';\n\n // Signals\n protected readonly activeFilter = signal<AppFeatureFilter>('all');\n protected readonly searchQuery = signal<string>('');\n protected readonly pinnedIds = signal<Set<string>>(new Set());\n\n constructor() {\n this.loadViewState();\n\n // Save view state on changes\n effect(() => {\n const state: ToolViewState = {\n searchQuery: this.searchQuery(),\n filter: this.activeFilter(),\n sortOrder: 'asc',\n pinnedIds: [...this.pinnedIds()],\n };\n this.storageService.set(this.VIEW_STATE_KEY, state);\n });\n }\n\n private loadViewState(): void {\n try {\n const saved = this.storageService.get<ToolViewState>(this.VIEW_STATE_KEY);\n if (saved) {\n this.searchQuery.set(saved.searchQuery ?? '');\n const filter = saved.filter as AppFeatureFilter;\n if (['all', 'forced', 'enabled', 'disabled'].includes(filter)) {\n this.activeFilter.set(filter);\n }\n if (saved.pinnedIds?.length) {\n this.pinnedIds.set(new Set(saved.pinnedIds));\n }\n }\n } catch {\n // Use defaults on error\n }\n }\n\n protected readonly features = this.appFeaturesService.features;\n\n // Computed badge count for forced values\n protected readonly badgeCount = computed(() => {\n const count = this.features().filter((f) => f.isForced).length;\n if (count === 0) return '';\n if (count > 99) return '99+';\n return count.toString();\n });\n protected readonly hasNoFeatures = computed(() => this.features().length === 0);\n protected readonly filteredFeatures = computed(() => {\n const filtered = this.features().filter((feature) => {\n const searchTerm = this.searchQuery().toLowerCase();\n const featureName = feature.name.toLowerCase();\n const featureDescription = feature.description?.toLowerCase() ?? '';\n\n const matchesSearch =\n !this.searchQuery() ||\n featureName.includes(searchTerm) ||\n featureDescription.includes(searchTerm);\n\n const matchesFilter =\n this.activeFilter() === 'all' ||\n (this.activeFilter() === 'forced' && feature.isForced) ||\n (this.activeFilter() === 'enabled' && feature.isEnabled) ||\n (this.activeFilter() === 'disabled' && !feature.isEnabled);\n\n return matchesSearch && matchesFilter;\n });\n\n const pinned = this.pinnedIds();\n // Sort pinned first, then alphabetically within each group\n return filtered.sort((a, b) => {\n const aPinned = pinned.has(a.id);\n const bPinned = pinned.has(b.id);\n if (aPinned !== bPinned) return aPinned ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n });\n protected readonly hasNoFilteredFeatures = computed(\n () => this.filteredFeatures().length === 0\n );\n\n // Other properties\n protected readonly options = {\n title: 'App Features',\n description: 'Override product features to test different tiers and configurations',\n isClosable: true,\n size: 'tall',\n id: 'ndt-app-features',\n } as ToolbarWindowOptions;\n\n protected readonly filterOptions = [\n { value: 'all', label: 'All Features' },\n { value: 'forced', label: 'Forced' },\n { value: 'enabled', label: 'Enabled' },\n { value: 'disabled', label: 'Disabled' },\n ];\n\n protected readonly featureValueOptions = [\n { value: 'not-forced', label: 'Not Forced' },\n { value: 'off', label: 'Disabled' },\n { value: 'on', label: 'Enabled' },\n ];\n\n // Apply to source (delegated to internal service)\n protected readonly hasApplyCallback = this.appFeaturesService.hasApplyCallback;\n\n protected getApplyState(\n featureId: string\n ): 'idle' | 'loading' | 'success' | 'error' {\n return this.appFeaturesService.applyStates()[featureId] ?? 'idle';\n }\n\n protected onApplyToSource(featureId: string, value: boolean): void {\n this.appFeaturesService.applyToSource(featureId, value);\n }\n\n // Public methods\n /**\n * Handle filter dropdown change.\n * Updates the active filter to show all/forced/enabled/disabled features.\n */\n onFilterChange(value: string | undefined): void {\n const filter = this.filterOptions.find((f) => f.value === value);\n if (filter) {\n this.activeFilter.set(filter.value as AppFeatureFilter);\n }\n }\n\n /**\n * Handle feature value change from 3-state dropdown.\n * - 'not-forced': Remove forced override\n * - 'on': Force feature to enabled\n * - 'off': Force feature to disabled\n */\n onFeatureChange(featureId: string, value: string): void {\n switch (value) {\n case 'not-forced':\n this.appFeaturesService.removeFeatureOverride(featureId);\n break;\n case 'on':\n this.appFeaturesService.setFeature(featureId, true);\n break;\n case 'off':\n this.appFeaturesService.setFeature(featureId, false);\n break;\n }\n }\n\n /**\n * Handle search input change.\n * Updates the search query to filter features by name/description.\n */\n onSearchChange(query: string): void {\n this.searchQuery.set(query);\n }\n\n togglePin(featureId: string): void {\n this.pinnedIds.update((ids) => {\n const next = new Set(ids);\n if (next.has(featureId)) {\n next.delete(featureId);\n } else {\n next.add(featureId);\n }\n return next;\n });\n }\n\n // Protected methods\n /**\n * Get the dropdown value for a feature's current state.\n * - Returns empty string if not forced (natural state)\n * - Returns 'on' if forced to enabled\n * - Returns 'off' if forced to disabled\n */\n protected getFeatureValue(feature: ToolbarAppFeature): string {\n if (!feature.isForced) return '';\n return feature.isEnabled ? 'on' : 'off';\n }\n}\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Observable, combineLatest, map } from 'rxjs';\nimport { ApplyToSourceState } from '../../models/toolbar.interface';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { ToolbarFlag } from './feature-flags.models';\n\ninterface ForcedFlagsState {\n enabled: string[];\n disabled: string[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarInternalFeatureFlagService {\n private readonly STORAGE_KEY = 'feature-flags';\n private storageService = inject(ToolbarStorageService);\n private stateService = inject(ToolbarStateService);\n\n private appFlags$ = new BehaviorSubject<ToolbarFlag[]>([]);\n private forcedFlagsSubject = new BehaviorSubject<ForcedFlagsState>({\n enabled: [],\n disabled: [],\n });\n\n private readonly forcedFlags$ = this.forcedFlagsSubject.asObservable();\n\n public flags$: Observable<ToolbarFlag[]> = combineLatest([\n this.appFlags$,\n this.forcedFlags$,\n ]).pipe(\n map(([appFlags, { enabled, disabled }]) => {\n // If toolbar is disabled, return app flags without overrides\n if (!this.stateService.isEnabled()) {\n return appFlags;\n }\n\n return appFlags.map((flag) => {\n const isForced = enabled.includes(flag.id) || disabled.includes(flag.id);\n return {\n ...flag,\n isForced,\n isEnabled: enabled.includes(flag.id)\n ? true\n : disabled.includes(flag.id)\n ? false\n : flag.isEnabled,\n originalValue: isForced ? flag.isEnabled : undefined,\n };\n });\n })\n );\n\n public flags = toSignal(this.flags$, { initialValue: [] });\n\n constructor() {\n this.loadForcedFlags();\n }\n\n setAppFlags(flags: ToolbarFlag[]): void {\n this.appFlags$.next(flags);\n }\n\n getAppFlags(): Observable<ToolbarFlag[]> {\n return this.appFlags$.asObservable();\n }\n\n getForcedFlags(): Observable<ToolbarFlag[]> {\n return this.flags$.pipe(\n map((flags) => {\n // If toolbar is disabled, return empty array (no forced values)\n if (!this.stateService.isEnabled()) {\n return [];\n }\n return flags.filter((flag) => flag.isForced);\n })\n );\n }\n\n setFlag(flagId: string, isEnabled: boolean): void {\n const { enabled, disabled } = this.forcedFlagsSubject.value;\n\n const newEnabled = enabled.filter((id) => id !== flagId);\n const newDisabled = disabled.filter((id) => id !== flagId);\n\n if (isEnabled) {\n newEnabled.push(flagId);\n } else {\n newDisabled.push(flagId);\n }\n\n const newState = { enabled: newEnabled, disabled: newDisabled };\n this.forcedFlagsSubject.next(newState);\n this.storageService.set(this.STORAGE_KEY, newState);\n }\n\n removeFlagOverride(flagId: string): void {\n const { enabled, disabled } = this.forcedFlagsSubject.value;\n\n const newState = {\n enabled: enabled.filter((id) => id !== flagId),\n disabled: disabled.filter((id) => id !== flagId),\n };\n\n this.forcedFlagsSubject.next(newState);\n this.storageService.set(this.STORAGE_KEY, newState);\n }\n\n private loadForcedFlags(): void {\n const savedFlags = this.storageService.get<ForcedFlagsState>(\n this.STORAGE_KEY\n );\n\n if (savedFlags) {\n this.forcedFlagsSubject.next(savedFlags);\n }\n }\n\n /**\n * Apply feature flags from a preset (used by Presets Tool)\n * This method directly sets the forced flags state without user interaction\n */\n applyPresetFlags(presetState: ForcedFlagsState): void {\n this.forcedFlagsSubject.next(presetState);\n this.storageService.set(this.STORAGE_KEY, presetState);\n }\n\n /**\n * Get current forced state for saving to preset\n * Returns the raw state of enabled and disabled flag IDs\n */\n getCurrentForcedState(): ForcedFlagsState {\n return this.forcedFlagsSubject.value;\n }\n\n // Apply to source\n readonly applyCallback = signal<((id: string, value: boolean) => Promise<void>) | null>(null);\n readonly applyStates = signal<Record<string, ApplyToSourceState>>({});\n readonly hasApplyCallback = computed(() => this.applyCallback() !== null);\n\n setApplyToSource(callback: (id: string, value: boolean) => Promise<void>): void {\n this.applyCallback.set(callback);\n }\n\n async applyToSource(id: string, value: boolean): Promise<void> {\n const callback = this.applyCallback();\n if (!callback) return;\n\n this.applyStates.update((s) => ({ ...s, [id]: 'loading' }));\n try {\n await callback(id, value);\n this.applyStates.update((s) => ({ ...s, [id]: 'success' }));\n setTimeout(\n () => this.applyStates.update((s) => ({ ...s, [id]: 'idle' })),\n 1500\n );\n } catch {\n this.applyStates.update((s) => ({ ...s, [id]: 'error' }));\n setTimeout(\n () => this.applyStates.update((s) => ({ ...s, [id]: 'idle' })),\n 1500\n );\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarInputComponent } from '../../components/input/input.component';\nimport { ToolbarListComponent } from '../../components/list/list.component';\nimport { ToolbarListItemComponent } from '../../components/list-item/list-item.component';\nimport { ToolbarSelectComponent } from '../../components/select/select.component';\nimport { ToolbarToolComponent } from '../../components/toolbar-tool/toolbar-tool.component';\nimport { ToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';\nimport { ToolViewState } from '../../models/tool-view-state.models';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { ToolbarInternalFeatureFlagService } from './feature-flags-internal.service';\nimport { ToolbarFlag, FeatureFlagFilter } from './feature-flags.models';\n@Component({\n selector: 'ndt-feature-flags-tool',\n standalone: true,\n imports: [\n FormsModule,\n ToolbarToolComponent,\n ToolbarInputComponent,\n ToolbarSelectComponent,\n ToolbarListComponent,\n ToolbarListItemComponent,\n ],\n template: `\n <ndt-toolbar-tool\n [options]=\"options\"\n toolTitle=\"Feature Flags\"\n icon=\"toggle-left\"\n [badge]=\"badgeCount()\"\n >\n <div class=\"container\">\n <div class=\"tool-header\">\n <ndt-input\n [value]=\"searchQuery()\"\n (valueChange)=\"onSearchChange($event)\"\n placeholder=\"Search...\"\n />\n <div class=\"filter-wrapper\">\n <ndt-select\n [value]=\"activeFilter()\"\n [options]=\"filterOptions\"\n [size]=\"'medium'\"\n (valueChange)=\"onFilterChange($event)\"\n />\n </div>\n </div>\n\n <ndt-list\n [hasItems]=\"!hasNoFlags()\"\n [hasResults]=\"!hasNoFilteredFlags()\"\n emptyMessage=\"No flags found\"\n noResultsMessage=\"No flags found matching your filter\"\n >\n @for (flag of filteredFlags(); track flag.id) {\n <ndt-list-item\n [title]=\"flag.name\"\n [description]=\"flag.description\"\n [isForced]=\"flag.isForced\"\n [currentValue]=\"flag.isEnabled\"\n [originalValue]=\"flag.originalValue\"\n [isPinned]=\"pinnedIds().has(flag.id)\"\n (pinToggle)=\"togglePin(flag.id)\"\n [showApply]=\"hasApplyCallback()\"\n [applyState]=\"getApplyState(flag.id)\"\n (applyToSource)=\"onApplyToSource(flag.id, flag.isEnabled)\"\n >\n <ndt-select\n [value]=\"getFlagValue(flag)\"\n [options]=\"flagValueOptions\"\n [placeholder]=\"getFlagPlaceholder(flag)\"\n [ariaLabel]=\"'Set value for ' + flag.name\"\n (valueChange)=\"onFlagChange(flag.id, $event ?? '')\"\n size=\"small\"\n />\n </ndt-list-item>\n }\n </ndt-list>\n </div>\n </ndt-toolbar-tool>\n `,\n styles: [\n `\n .container {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 0;\n }\n\n .tool-header {\n position: relative;\n flex-shrink: 0;\n display: flex;\n gap: var(--ndt-spacing-sm);\n margin-bottom: var(--ndt-spacing-sm);\n\n ndt-input {\n flex: 1;\n }\n\n .filter-wrapper {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n border-left: 1px solid var(--ndt-border-primary);\n padding-left: var(--ndt-spacing-sm);\n\n ndt-select {\n flex: 0 0 auto;\n min-width: 140px;\n }\n }\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarFeatureFlagsToolComponent {\n // Injects\n private readonly featureFlags = inject(ToolbarInternalFeatureFlagService);\n private readonly storageService = inject(ToolbarStorageService);\n\n // Constants\n private readonly VIEW_STATE_KEY = 'feature-flags-view';\n\n // Signals\n protected readonly activeFilter = signal<FeatureFlagFilter>('all');\n protected readonly searchQuery = signal<string>('');\n protected readonly pinnedIds = signal<Set<string>>(new Set());\n\n constructor() {\n this.loadViewState();\n\n // Save view state on changes\n effect(() => {\n const state: ToolViewState = {\n searchQuery: this.searchQuery(),\n filter: this.activeFilter(),\n sortOrder: 'asc',\n pinnedIds: [...this.pinnedIds()],\n };\n this.storageService.set(this.VIEW_STATE_KEY, state);\n });\n }\n\n private loadViewState(): void {\n try {\n const saved = this.storageService.get<ToolViewState>(this.VIEW_STATE_KEY);\n if (saved) {\n this.searchQuery.set(saved.searchQuery ?? '');\n const filter = saved.filter as FeatureFlagFilter;\n if (['all', 'forced', 'enabled', 'disabled'].includes(filter)) {\n this.activeFilter.set(filter);\n }\n if (saved.pinnedIds?.length) {\n this.pinnedIds.set(new Set(saved.pinnedIds));\n }\n }\n } catch {\n // Use defaults on error\n }\n }\n\n protected readonly flags = this.featureFlags.flags;\n\n // Computed badge count for forced values\n protected readonly badgeCount = computed(() => {\n const count = this.flags().filter((flag) => flag.isForced).length;\n if (count === 0) return '';\n if (count > 99) return '99+';\n return count.toString();\n });\n protected readonly hasNoFlags = computed(() => this.flags().length === 0);\n protected readonly filteredFlags = computed(() => {\n const filtered = this.flags().filter((flag) => {\n const searchTerm = this.searchQuery().toLowerCase();\n const flagName = flag.name.toLowerCase();\n const flagDescription = flag.description?.toLowerCase() ?? '';\n\n const matchesSearch =\n !this.searchQuery() ||\n flagName.toLowerCase().includes(searchTerm.toLowerCase()) ||\n flagDescription.toLowerCase().includes(searchTerm.toLowerCase());\n\n const matchesFilter =\n this.activeFilter() === 'all' ||\n (this.activeFilter() === 'forced' && flag.isForced) ||\n (this.activeFilter() === 'enabled' && flag.isEnabled) ||\n (this.activeFilter() === 'disabled' && !flag.isEnabled);\n\n return matchesSearch && matchesFilter;\n });\n\n const pinned = this.pinnedIds();\n // Sort pinned first, then alphabetically within each group\n return filtered.sort((a, b) => {\n const aPinned = pinned.has(a.id);\n const bPinned = pinned.has(b.id);\n if (aPinned !== bPinned) return aPinned ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n });\n protected readonly hasNoFilteredFlags = computed(\n () => this.filteredFlags().length === 0\n );\n\n // Other properties\n protected readonly options = {\n title: 'Feature Flags',\n description: 'Manage the feature flags for your current session',\n isClosable: true,\n size: 'tall',\n id: 'ndt-feature-flags',\n } as ToolbarWindowOptions;\n\n protected readonly filterOptions = [\n { value: 'all', label: 'All Flags' },\n { value: 'forced', label: 'Forced' },\n { value: 'enabled', label: 'Enabled' },\n { value: 'disabled', label: 'Disabled' },\n ];\n\n protected readonly flagValueOptions = [\n { value: 'not-forced', label: 'Not Forced' },\n { value: 'off', label: 'Forced Off' },\n { value: 'on', label: 'Forced On' },\n ];\n\n // Apply to source (delegated to internal service)\n protected readonly hasApplyCallback = this.featureFlags.hasApplyCallback;\n\n protected getApplyState(\n flagId: string\n ): 'idle' | 'loading' | 'success' | 'error' {\n return this.featureFlags.applyStates()[flagId] ?? 'idle';\n }\n\n protected onApplyToSource(flagId: string, value: boolean): void {\n this.featureFlags.applyToSource(flagId, value);\n }\n\n // Public methods\n onFilterChange(value: string | undefined): void {\n const filter = this.filterOptions.find((f) => f.value === value);\n if (filter) {\n this.activeFilter.set(filter.value as FeatureFlagFilter);\n }\n }\n\n onFlagChange(flagId: string, value: string): void {\n switch (value) {\n case 'not-forced':\n this.featureFlags.removeFlagOverride(flagId);\n break;\n case 'on':\n this.featureFlags.setFlag(flagId, true);\n break;\n case 'off':\n this.featureFlags.setFlag(flagId, false);\n break;\n }\n }\n\n onSearchChange(query: string): void {\n this.searchQuery.set(query);\n }\n\n togglePin(flagId: string): void {\n this.pinnedIds.update((ids) => {\n const next = new Set(ids);\n if (next.has(flagId)) {\n next.delete(flagId);\n } else {\n next.add(flagId);\n }\n return next;\n });\n }\n\n // Protected methods\n protected getFlagValue(flag: ToolbarFlag): string {\n if (!flag.isForced) return '';\n return flag.isEnabled ? 'on' : 'off';\n }\n\n protected getFlagPlaceholder(flag: ToolbarFlag): string {\n return flag.isEnabled ? 'On' : 'Off';\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ToolbarIconComponent } from '../icons/icon.component';\nimport { IconName } from '../icons/icon.models';\n\n@Component({\n selector: 'ndt-button',\n standalone: true,\n imports: [ToolbarIconComponent],\n template: `\n <button\n class=\"button\"\n [attr.aria-label]=\"ariaLabel()\"\n [type]=\"type()\"\n [class.button--active]=\"isActive()\"\n [class.button--icon]=\"variant() === 'icon'\"\n >\n @if (icon()) {\n <ndt-icon [name]=\"icon() || 'star'\" />\n }\n @if (label()) {\n <span class=\"button__label\">{{ label() }}</span>\n }\n <ng-content />\n </button>\n `,\n styleUrls: ['./button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarButtonComponent {\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n readonly variant = input<'default' | 'icon'>('default');\n readonly icon = input<IconName>();\n readonly label = input<string>();\n readonly ariaLabel = input<string>();\n readonly isActive = input<boolean>(false);\n}\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\n\n@Component({\n selector: 'ndt-card',\n standalone: true,\n template: `\n <div\n class=\"card\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"onClick()\"\n (keydown.enter)=\"onClick()\"\n (keydown.space)=\"onClick()\"\n [class.card--hover]=\"isHovered()\"\n (mouseenter)=\"isHovered.set(true)\"\n (mouseleave)=\"isHovered.set(false)\"\n >\n <ng-content></ng-content>\n </div>\n `,\n styleUrls: ['./card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarCardComponent {\n readonly click = signal<void>(undefined);\n protected readonly isHovered = signal(false);\n\n onClick(): void {\n this.click.set();\n }\n}\n","import { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\nimport { ToolbarCardComponent } from '../card/card.component';\nimport { ToolbarIconComponent } from '../icons/icon.component';\nimport { IconName } from '../icons/icon.models';\n\n@Component({\n selector: 'ndt-clickable-card',\n standalone: true,\n imports: [ToolbarCardComponent, ToolbarIconComponent],\n template: `\n <ndt-card (clicked)=\"onClick()\">\n <div class=\"clickable-card\">\n <div class=\"clickable-card__icon\">\n <ndt-icon [name]=\"icon()\" />\n </div>\n <div class=\"clickable-card__content\">\n <div class=\"clickable-card__title\">{{ title() }}</div>\n <div class=\"clickable-card__subtitle\">{{ subtitle() }}</div>\n </div>\n </div>\n </ndt-card>\n `,\n styleUrls: ['./clickable-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarClickableCardComponent {\n readonly icon = input.required<IconName>();\n readonly title = input.required<string>();\n readonly subtitle = input.required<string>();\n readonly click = signal<void>(undefined);\n\n onClick(): void {\n this.click.set();\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ToolbarIconComponent } from '../icons/icon.component';\nimport { IconName } from '../icons/icon.models';\n\n@Component({\n selector: 'ndt-link-button',\n standalone: true,\n imports: [ToolbarIconComponent],\n template: `\n <a\n [href]=\"url()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"link-button\"\n >\n <div class=\"link-button__icon\">\n <ndt-icon [name]=\"icon()\" />\n </div>\n <span class=\"link-button__text\">\n <ng-content></ng-content>\n </span>\n </a>\n `,\n styleUrls: ['./link-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarLinkButtonComponent {\n readonly url = input.required<string>();\n readonly icon = input.required<IconName>();\n}\n","export type ToolbarPosition = 'top' | 'right' | 'bottom' | 'left';\n\nexport const TOOLBAR_POSITIONS: readonly ToolbarPosition[] = [\n 'top',\n 'right',\n 'bottom',\n 'left',\n] as const;\n\nexport function isHorizontalPosition(position: ToolbarPosition): boolean {\n return position === 'top' || position === 'bottom';\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { Settings } from './settings.models';\n\n@Injectable({ providedIn: 'root' })\nexport class SettingsService {\n private readonly STORAGE_KEY = 'settings';\n private readonly storageService = inject(ToolbarStorageService);\n\n public getSettings(): Settings {\n return (\n this.storageService.get<Settings>(this.STORAGE_KEY) || {\n isDarkMode: false,\n position: 'bottom',\n isCompletelyHidden: false,\n }\n );\n }\n\n public setSettings(settings: Settings): void {\n this.storageService.set(this.STORAGE_KEY, settings);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarButtonComponent } from '../../components/button/button.component';\nimport { ToolbarClickableCardComponent } from '../../components/clickable-card/clickable-card.component';\nimport { ToolbarLinkButtonComponent } from '../../components/link-button/link-button.component';\nimport { ToolbarToolComponent } from '../../components/toolbar-tool/toolbar-tool.component';\nimport { ToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';\nimport {\n ToolbarPosition,\n TOOLBAR_POSITIONS,\n} from '../../models/toolbar-position.model';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { SettingsService } from './settings.service';\n\n@Component({\n selector: 'ndt-home-tool',\n standalone: true,\n imports: [\n ToolbarToolComponent,\n FormsModule,\n ToolbarButtonComponent,\n ToolbarClickableCardComponent,\n ToolbarLinkButtonComponent,\n ],\n template: `\n <ndt-toolbar-tool [options]=\"options\" toolTitle=\"Home\" icon=\"angular\">\n <section class=\"settings\">\n <div class=\"settings-container\">\n <div class=\"instruction\">\n <div class=\"instruction__label\">\n <span class=\"instruction__label-text\">Toolbar Position</span>\n <span class=\"instruction__label-description\">\n Choose where the toolbar appears on screen\n </span>\n </div>\n </div>\n <div class=\"position-selector\">\n @for (pos of positions; track pos) {\n <button\n class=\"position-option\"\n [class.position-option--active]=\"state.position() === pos\"\n [attr.aria-pressed]=\"state.position() === pos\"\n (click)=\"onPositionChange(pos)\"\n >\n {{ pos }}\n </button>\n }\n </div>\n\n <div class=\"instruction\">\n <div class=\"instruction__label\">\n <span class=\"instruction__label-text\">Reset Settings</span>\n <span class=\"instruction__label-description\">\n Reset all settings to their default values\n </span>\n </div>\n <div class=\"instruction__control\">\n <div class=\"instruction__control-button\">\n <ndt-button\n variant=\"icon\"\n icon=\"trash\"\n ariaLabel=\"Reset all settings\"\n (click)=\"onResetSettings()\"\n />\n </div>\n </div>\n </div>\n <div class=\"settings-actions\">\n <ndt-clickable-card\n icon=\"export\"\n title=\"Export Settings\"\n subtitle=\"Export the current settings to share with other devs or use in your tests\"\n (click)=\"onExportSettings()\"\n />\n <ndt-clickable-card\n icon=\"import\"\n title=\"Import Settings\"\n subtitle=\"Import settings to reproduce a scenario\"\n (click)=\"onImportSettings()\"\n />\n </div>\n </div>\n\n <div class=\"footer-links\">\n @for (link of links; track link.url) {\n <ndt-link-button [icon]=\"link.icon\" [url]=\"link.url\">\n {{ link.label }}\n </ndt-link-button>\n }\n </div>\n </section>\n </ndt-toolbar-tool>\n `,\n styleUrls: ['./home-tool.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarHomeToolComponent {\n protected readonly state = inject(ToolbarStateService);\n private readonly settingsService = inject(SettingsService);\n private readonly storageService = inject(ToolbarStorageService);\n\n readonly badge = input<string | number>();\n readonly title = `Angular Toolbar`;\n readonly positions = TOOLBAR_POSITIONS;\n readonly options: ToolbarWindowOptions = {\n title: this.title,\n isClosable: true,\n id: 'ndt-home',\n size: 'medium',\n description: '',\n };\n\n readonly links = [\n {\n icon: 'bug',\n url: 'https://github.com/alfredoperez/ngx-dev-toolbar/issues',\n label: 'Bug report',\n },\n {\n icon: 'lightbulb',\n url: 'https://github.com/alfredoperez/ngx-dev-toolbar/discussions',\n label: 'Suggestions',\n },\n {\n icon: 'docs',\n url: 'https://alfredoperez.github.io/ngx-dev-toolbar/',\n label: 'Docs',\n },\n {\n icon: 'star',\n url: 'https://github.com/alfredoperez/ngx-dev-toolbar',\n label: 'Star on GitHub',\n },\n {\n icon: 'discord',\n url: 'https://discord.com/invite/angular',\n label: 'Community',\n },\n ] as const;\n\n onPositionChange(position: ToolbarPosition): void {\n this.state.setPosition(position);\n }\n\n onExportSettings(): void {\n const settings = this.storageService.getAllSettings();\n const blob = new Blob([JSON.stringify(settings, null, 2)], {\n type: 'application/json',\n });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n const timestamp = new Date().toISOString().split('T')[0];\n link.href = url;\n link.download = `ngx-dev-toolbar-settings-${timestamp}.json`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n\n onImportSettings(): void {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'application/json';\n input.onchange = (event) => {\n const file = (event.target as HTMLInputElement).files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = (e) => {\n try {\n const settings = JSON.parse(e.target?.result as string);\n this.storageService.setAllSettings(settings);\n window.location.reload();\n } catch (error) {\n console.error('Error importing settings:', error);\n }\n };\n reader.readAsText(file);\n }\n };\n input.click();\n }\n\n onResetSettings(): void {\n this.storageService.clearAllSettings();\n window.location.reload();\n }\n}\n","export interface I18nLocale {\n id: string;\n name: string;\n code: string;\n}\n\nexport interface I18nTimezone {\n id: string;\n name: string;\n offset: string;\n}\n\nexport interface I18nCurrency {\n code: string;\n name: string;\n symbol: string;\n}\n\nexport type I18nUnitSystem = 'metric' | 'imperial';\nexport type I18nDateFormat = 'locale-default' | 'MM/DD/YYYY' | 'DD/MM/YYYY' | 'YYYY-MM-DD';\nexport type I18nFirstDayOfWeek = 'locale-default' | 'sunday' | 'monday' | 'saturday';\nexport type I18nNumberFormat = 'locale-default' | 'period-comma' | 'comma-period' | 'space-comma';\n\nexport interface I18nState {\n locale: I18nLocale | null;\n timezone: I18nTimezone | null;\n currency: I18nCurrency | null;\n unitSystem: I18nUnitSystem | null;\n dateFormat: I18nDateFormat | null;\n firstDayOfWeek: I18nFirstDayOfWeek | null;\n numberFormat: I18nNumberFormat | null;\n pseudoLocEnabled: boolean;\n rtlEnabled: boolean;\n}\n\nexport interface I18nPresetConfig {\n locale?: string | null;\n timezone?: string | null;\n currency?: string | null;\n unitSystem?: string | null;\n dateFormat?: string | null;\n firstDayOfWeek?: string | null;\n numberFormat?: string | null;\n pseudoLocEnabled?: boolean;\n rtlEnabled?: boolean;\n}\n\nexport interface I18nToolConfig {\n showLocale?: boolean;\n showTimezone?: boolean;\n showCurrency?: boolean;\n showUnits?: boolean;\n showDateFormat?: boolean;\n showFirstDayOfWeek?: boolean;\n showNumberFormat?: boolean;\n showFormattingPreview?: boolean;\n showStressTesting?: boolean;\n}\n\nexport const DEFAULT_TIMEZONES: I18nTimezone[] = [\n { id: 'UTC', name: 'UTC', offset: '+00:00' },\n { id: 'America/New_York', name: 'Eastern Time (US)', offset: '-05:00' },\n { id: 'America/Chicago', name: 'Central Time (US)', offset: '-06:00' },\n { id: 'America/Denver', name: 'Mountain Time (US)', offset: '-07:00' },\n { id: 'America/Los_Angeles', name: 'Pacific Time (US)', offset: '-08:00' },\n { id: 'Europe/London', name: 'London (GMT)', offset: '+00:00' },\n { id: 'Europe/Paris', name: 'Paris (CET)', offset: '+01:00' },\n { id: 'Europe/Berlin', name: 'Berlin (CET)', offset: '+01:00' },\n { id: 'Asia/Tokyo', name: 'Tokyo (JST)', offset: '+09:00' },\n { id: 'Asia/Shanghai', name: 'Shanghai (CST)', offset: '+08:00' },\n { id: 'Asia/Kolkata', name: 'India (IST)', offset: '+05:30' },\n { id: 'Asia/Dubai', name: 'Dubai (GST)', offset: '+04:00' },\n { id: 'Australia/Sydney', name: 'Sydney (AEST)', offset: '+10:00' },\n { id: 'Pacific/Auckland', name: 'Auckland (NZST)', offset: '+12:00' },\n { id: 'America/Sao_Paulo', name: 'Sao Paulo (BRT)', offset: '-03:00' },\n];\n\nexport const DEFAULT_CURRENCIES: I18nCurrency[] = [\n { code: 'USD', name: 'US Dollar', symbol: '$' },\n { code: 'EUR', name: 'Euro', symbol: '\\u20AC' },\n { code: 'GBP', name: 'British Pound', symbol: '\\u00A3' },\n { code: 'JPY', name: 'Japanese Yen', symbol: '\\u00A5' },\n { code: 'CNY', name: 'Chinese Yuan', symbol: '\\u00A5' },\n { code: 'INR', name: 'Indian Rupee', symbol: '\\u20B9' },\n { code: 'BRL', name: 'Brazilian Real', symbol: 'R$' },\n { code: 'CAD', name: 'Canadian Dollar', symbol: 'CA$' },\n { code: 'AUD', name: 'Australian Dollar', symbol: 'A$' },\n { code: 'CHF', name: 'Swiss Franc', symbol: 'CHF' },\n { code: 'KRW', name: 'South Korean Won', symbol: '\\u20A9' },\n { code: 'MXN', name: 'Mexican Peso', symbol: 'MX$' },\n { code: 'AED', name: 'UAE Dirham', symbol: 'AED' },\n { code: 'SAR', name: 'Saudi Riyal', symbol: 'SAR' },\n];\n\nexport const CURRENCY_SYMBOLS: Record<string, string> = Object.fromEntries(\n DEFAULT_CURRENCIES.map(({ code, symbol }) => [code, symbol])\n);\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Observable, firstValueFrom, map } from 'rxjs';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport {\n I18nCurrency,\n I18nDateFormat,\n I18nFirstDayOfWeek,\n I18nLocale,\n I18nNumberFormat,\n I18nPresetConfig,\n I18nState,\n I18nTimezone,\n I18nToolConfig,\n I18nUnitSystem,\n DEFAULT_TIMEZONES,\n DEFAULT_CURRENCIES,\n} from './i18n.models';\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarInternalI18nService {\n private readonly STORAGE_LOCALE = 'i18n.locale';\n private readonly STORAGE_TIMEZONE = 'i18n.timezone';\n private readonly STORAGE_CURRENCY = 'i18n.currency';\n private readonly STORAGE_UNIT_SYSTEM = 'i18n.unitSystem';\n private readonly STORAGE_DATE_FORMAT = 'i18n.dateFormat';\n private readonly STORAGE_FIRST_DAY = 'i18n.firstDay';\n private readonly STORAGE_NUMBER_FORMAT = 'i18n.numberFormat';\n private readonly STORAGE_PSEUDO_LOC = 'i18n.pseudoLoc';\n private readonly STORAGE_RTL = 'i18n.rtl';\n private readonly OLD_LANGUAGE_KEY = 'language';\n\n private readonly storageService = inject(ToolbarStorageService);\n private readonly stateService = inject(ToolbarStateService);\n private readonly document = inject(DOCUMENT);\n\n private locales$ = new BehaviorSubject<I18nLocale[]>([]);\n private timezones$ = new BehaviorSubject<I18nTimezone[]>(DEFAULT_TIMEZONES);\n private currencies$ = new BehaviorSubject<I18nCurrency[]>(DEFAULT_CURRENCIES);\n\n private forcedLocale$ = new BehaviorSubject<I18nLocale | null>(null);\n private forcedTimezone$ = new BehaviorSubject<I18nTimezone | null>(null);\n private forcedCurrency$ = new BehaviorSubject<I18nCurrency | null>(null);\n private forcedUnitSystem$ = new BehaviorSubject<I18nUnitSystem | null>(null);\n private forcedDateFormat$ = new BehaviorSubject<I18nDateFormat | null>(null);\n private forcedFirstDayOfWeek$ = new BehaviorSubject<I18nFirstDayOfWeek | null>(null);\n private forcedNumberFormat$ = new BehaviorSubject<I18nNumberFormat | null>(null);\n private toolConfig$ = new BehaviorSubject<I18nToolConfig>({});\n private pseudoLocEnabled$ = new BehaviorSubject<boolean>(false);\n private rtlEnabled$ = new BehaviorSubject<boolean>(false);\n\n public locales = toSignal(this.locales$, { initialValue: [] });\n public timezones = toSignal(this.timezones$, { initialValue: DEFAULT_TIMEZONES });\n public availableCurrencies = toSignal(this.currencies$, { initialValue: DEFAULT_CURRENCIES });\n\n public forcedLocale = toSignal(this.forcedLocale$, { initialValue: null });\n public forcedTimezone = toSignal(this.forcedTimezone$, { initialValue: null });\n public forcedCurrency = toSignal(this.forcedCurrency$, { initialValue: null });\n public forcedUnitSystem = toSignal(this.forcedUnitSystem$, { initialValue: null });\n public forcedDateFormat = toSignal(this.forcedDateFormat$, { initialValue: null });\n public forcedFirstDayOfWeek = toSignal(this.forcedFirstDayOfWeek$, { initialValue: null });\n public forcedNumberFormat = toSignal(this.forcedNumberFormat$, { initialValue: null });\n public toolConfig = toSignal(this.toolConfig$, { initialValue: {} });\n public pseudoLocEnabled = toSignal(this.pseudoLocEnabled$, { initialValue: false });\n public rtlEnabled = toSignal(this.rtlEnabled$, { initialValue: false });\n\n constructor() {\n this.migrateOldLanguageKey();\n this.loadFromStorage();\n }\n\n // --- Locale ---\n\n setAvailableLocales(locales: I18nLocale[]): void {\n this.locales$.next(locales);\n }\n\n getAvailableLocales(): Observable<I18nLocale[]> {\n return this.locales$.asObservable();\n }\n\n setForcedLocale(locale: I18nLocale): void {\n this.forcedLocale$.next(locale);\n this.storageService.set(this.STORAGE_LOCALE, locale);\n }\n\n getForcedLocale(): Observable<I18nLocale[]> {\n return this.forcedLocale$.pipe(\n map((locale) => {\n if (!this.stateService.isEnabled()) {\n return [];\n }\n return locale ? [locale] : [];\n })\n );\n }\n\n removeForcedLocale(): void {\n this.forcedLocale$.next(null);\n this.storageService.remove(this.STORAGE_LOCALE);\n }\n\n // --- Timezone ---\n\n setAvailableTimezones(timezones: I18nTimezone[]): void {\n this.timezones$.next(timezones);\n }\n\n getAvailableTimezones(): Observable<I18nTimezone[]> {\n return this.timezones$.asObservable();\n }\n\n setForcedTimezone(timezone: I18nTimezone): void {\n this.forcedTimezone$.next(timezone);\n this.storageService.set(this.STORAGE_TIMEZONE, timezone);\n }\n\n getForcedTimezone(): Observable<I18nTimezone | null> {\n return this.forcedTimezone$.pipe(\n map((tz) => (this.stateService.isEnabled() ? tz : null))\n );\n }\n\n removeForcedTimezone(): void {\n this.forcedTimezone$.next(null);\n this.storageService.remove(this.STORAGE_TIMEZONE);\n }\n\n // --- Currency ---\n\n setAvailableCurrencies(currencies: I18nCurrency[]): void {\n this.currencies$.next(currencies);\n }\n\n getAvailableCurrencies(): Observable<I18nCurrency[]> {\n return this.currencies$.asObservable();\n }\n\n setForcedCurrency(currency: I18nCurrency): void {\n this.forcedCurrency$.next(currency);\n this.storageService.set(this.STORAGE_CURRENCY, currency);\n }\n\n getForcedCurrency(): Observable<I18nCurrency | null> {\n return this.forcedCurrency$.pipe(\n map((c) => (this.stateService.isEnabled() ? c : null))\n );\n }\n\n removeForcedCurrency(): void {\n this.forcedCurrency$.next(null);\n this.storageService.remove(this.STORAGE_CURRENCY);\n }\n\n // --- Unit System ---\n\n setForcedUnitSystem(unitSystem: I18nUnitSystem): void {\n this.forcedUnitSystem$.next(unitSystem);\n this.storageService.set(this.STORAGE_UNIT_SYSTEM, unitSystem);\n }\n\n getForcedUnitSystem(): Observable<I18nUnitSystem | null> {\n return this.forcedUnitSystem$.pipe(\n map((u) => (this.stateService.isEnabled() ? u : null))\n );\n }\n\n removeForcedUnitSystem(): void {\n this.forcedUnitSystem$.next(null);\n this.storageService.remove(this.STORAGE_UNIT_SYSTEM);\n }\n\n // --- Date Format ---\n\n setForcedDateFormat(dateFormat: I18nDateFormat): void {\n this.forcedDateFormat$.next(dateFormat);\n this.storageService.set(this.STORAGE_DATE_FORMAT, dateFormat);\n }\n\n getForcedDateFormat(): Observable<I18nDateFormat | null> {\n return this.forcedDateFormat$.pipe(\n map((df) => (this.stateService.isEnabled() ? df : null))\n );\n }\n\n removeForcedDateFormat(): void {\n this.forcedDateFormat$.next(null);\n this.storageService.remove(this.STORAGE_DATE_FORMAT);\n }\n\n // --- First Day of Week ---\n\n setForcedFirstDayOfWeek(firstDay: I18nFirstDayOfWeek): void {\n this.forcedFirstDayOfWeek$.next(firstDay);\n this.storageService.set(this.STORAGE_FIRST_DAY, firstDay);\n }\n\n getForcedFirstDayOfWeek(): Observable<I18nFirstDayOfWeek | null> {\n return this.forcedFirstDayOfWeek$.pipe(\n map((fd) => (this.stateService.isEnabled() ? fd : null))\n );\n }\n\n removeForcedFirstDayOfWeek(): void {\n this.forcedFirstDayOfWeek$.next(null);\n this.storageService.remove(this.STORAGE_FIRST_DAY);\n }\n\n // --- Number Format ---\n\n setForcedNumberFormat(numberFormat: I18nNumberFormat): void {\n this.forcedNumberFormat$.next(numberFormat);\n this.storageService.set(this.STORAGE_NUMBER_FORMAT, numberFormat);\n }\n\n getForcedNumberFormat(): Observable<I18nNumberFormat | null> {\n return this.forcedNumberFormat$.pipe(\n map((nf) => (this.stateService.isEnabled() ? nf : null))\n );\n }\n\n removeForcedNumberFormat(): void {\n this.forcedNumberFormat$.next(null);\n this.storageService.remove(this.STORAGE_NUMBER_FORMAT);\n }\n\n // --- Tool Config ---\n\n setToolConfig(config: I18nToolConfig): void {\n this.toolConfig$.next(config);\n }\n\n // --- Pseudo-Localization ---\n\n setPseudoLocEnabled(enabled: boolean): void {\n this.pseudoLocEnabled$.next(enabled);\n this.storageService.set(this.STORAGE_PSEUDO_LOC, enabled);\n }\n\n getPseudoLocEnabled(): Observable<boolean> {\n return this.pseudoLocEnabled$.pipe(\n map((enabled) => (this.stateService.isEnabled() ? enabled : false))\n );\n }\n\n // --- RTL ---\n\n setRtlEnabled(enabled: boolean): void {\n this.rtlEnabled$.next(enabled);\n this.storageService.set(this.STORAGE_RTL, enabled);\n this.applyRtl(enabled);\n }\n\n getRtlEnabled(): Observable<boolean> {\n return this.rtlEnabled$.pipe(\n map((enabled) => (this.stateService.isEnabled() ? enabled : false))\n );\n }\n\n // --- Preset Hooks ---\n\n async applyPresetLocale(localeId: string | null): Promise<void> {\n if (localeId === null) {\n this.removeForcedLocale();\n return;\n }\n\n const locales = await firstValueFrom(this.locales$);\n const locale = locales.find((l) => l.id === localeId);\n\n if (locale) {\n this.setForcedLocale(locale);\n } else {\n console.warn(\n `Locale ${localeId} not found in available locales. Skipping.`\n );\n }\n }\n\n applyPresetI18n(config: I18nPresetConfig | undefined): void {\n if (!config) return;\n\n if (config.locale !== undefined) {\n if (config.locale === null) {\n this.removeForcedLocale();\n } else {\n const locale = this.locales$.value.find((l) => l.id === config.locale);\n if (locale) {\n this.setForcedLocale(locale);\n }\n }\n }\n\n if (config.timezone !== undefined) {\n if (config.timezone === null) {\n this.removeForcedTimezone();\n } else {\n const timezone = this.timezones$.value.find((t) => t.id === config.timezone);\n if (timezone) {\n this.setForcedTimezone(timezone);\n }\n }\n }\n\n if (config.currency !== undefined) {\n if (config.currency === null) {\n this.removeForcedCurrency();\n } else {\n const currency = this.currencies$.value.find((c) => c.code === config.currency);\n if (currency) {\n this.setForcedCurrency(currency);\n }\n }\n }\n\n if (config.unitSystem !== undefined) {\n if (config.unitSystem === null) {\n this.removeForcedUnitSystem();\n } else {\n this.setForcedUnitSystem(config.unitSystem as I18nUnitSystem);\n }\n }\n\n if (config.dateFormat !== undefined) {\n if (config.dateFormat === null) {\n this.removeForcedDateFormat();\n } else {\n this.setForcedDateFormat(config.dateFormat as I18nDateFormat);\n }\n }\n\n if (config.firstDayOfWeek !== undefined) {\n if (config.firstDayOfWeek === null) {\n this.removeForcedFirstDayOfWeek();\n } else {\n this.setForcedFirstDayOfWeek(config.firstDayOfWeek as I18nFirstDayOfWeek);\n }\n }\n\n if (config.numberFormat !== undefined) {\n if (config.numberFormat === null) {\n this.removeForcedNumberFormat();\n } else {\n this.setForcedNumberFormat(config.numberFormat as I18nNumberFormat);\n }\n }\n\n if (config.pseudoLocEnabled !== undefined) {\n this.setPseudoLocEnabled(config.pseudoLocEnabled);\n }\n\n if (config.rtlEnabled !== undefined) {\n this.setRtlEnabled(config.rtlEnabled);\n }\n }\n\n getCurrentI18nState(): I18nState {\n return {\n locale: this.forcedLocale$.value,\n timezone: this.forcedTimezone$.value,\n currency: this.forcedCurrency$.value,\n unitSystem: this.forcedUnitSystem$.value,\n dateFormat: this.forcedDateFormat$.value,\n firstDayOfWeek: this.forcedFirstDayOfWeek$.value,\n numberFormat: this.forcedNumberFormat$.value,\n pseudoLocEnabled: this.pseudoLocEnabled$.value,\n rtlEnabled: this.rtlEnabled$.value,\n };\n }\n\n getCurrentForcedLocaleId(): string | null {\n return this.forcedLocale$.value?.id ?? null;\n }\n\n // --- Private ---\n\n private loadFromStorage(): void {\n const savedLocale = this.storageService.get<I18nLocale>(this.STORAGE_LOCALE);\n if (savedLocale) {\n this.forcedLocale$.next(savedLocale);\n }\n\n const savedTimezone = this.storageService.get<I18nTimezone>(this.STORAGE_TIMEZONE);\n if (savedTimezone) {\n this.forcedTimezone$.next(savedTimezone);\n }\n\n const savedCurrency = this.storageService.get<I18nCurrency>(this.STORAGE_CURRENCY);\n if (savedCurrency) {\n this.forcedCurrency$.next(savedCurrency);\n }\n\n const savedUnitSystem = this.storageService.get<I18nUnitSystem>(this.STORAGE_UNIT_SYSTEM);\n if (savedUnitSystem) {\n this.forcedUnitSystem$.next(savedUnitSystem);\n }\n\n const savedDateFormat = this.storageService.get<I18nDateFormat>(this.STORAGE_DATE_FORMAT);\n if (savedDateFormat) {\n this.forcedDateFormat$.next(savedDateFormat);\n }\n\n const savedFirstDay = this.storageService.get<I18nFirstDayOfWeek>(this.STORAGE_FIRST_DAY);\n if (savedFirstDay) {\n this.forcedFirstDayOfWeek$.next(savedFirstDay);\n }\n\n const savedNumberFormat = this.storageService.get<I18nNumberFormat>(this.STORAGE_NUMBER_FORMAT);\n if (savedNumberFormat) {\n this.forcedNumberFormat$.next(savedNumberFormat);\n }\n\n const savedPseudoLoc = this.storageService.get<boolean>(this.STORAGE_PSEUDO_LOC);\n if (savedPseudoLoc !== null) {\n this.pseudoLocEnabled$.next(savedPseudoLoc);\n }\n\n const savedRtl = this.storageService.get<boolean>(this.STORAGE_RTL);\n if (savedRtl !== null) {\n this.rtlEnabled$.next(savedRtl);\n if (savedRtl) {\n this.applyRtl(true);\n }\n }\n }\n\n private migrateOldLanguageKey(): void {\n const oldLanguage = this.storageService.get<{ id: string; name: string }>(\n this.OLD_LANGUAGE_KEY\n );\n if (oldLanguage && !this.storageService.get(this.STORAGE_LOCALE)) {\n const migrated: I18nLocale = {\n id: oldLanguage.id,\n name: oldLanguage.name,\n code: oldLanguage.id,\n };\n this.storageService.set(this.STORAGE_LOCALE, migrated);\n this.storageService.remove(this.OLD_LANGUAGE_KEY);\n }\n }\n\n private applyRtl(enabled: boolean): void {\n if (this.document?.documentElement) {\n this.document.documentElement.dir = enabled ? 'rtl' : 'ltr';\n }\n }\n}\n","const PSEUDO_CHAR_MAP: Record<string, string> = {\n a: '\\u00e4', b: '\\u0183', c: '\\u00e7', d: '\\u0111', e: '\\u00e9',\n f: '\\u0192', g: '\\u011f', h: '\\u0127', i: '\\u00ef', j: '\\u0135',\n k: '\\u0137', l: '\\u013c', m: '\\u1e41', n: '\\u00f1', o: '\\u00f6',\n p: '\\u00fe', q: '\\u01eb', r: '\\u0159', s: '\\u0161', t: '\\u0163',\n u: '\\u00fc', v: '\\u1e7d', w: '\\u0175', x: '\\u1e8b', y: '\\u00fd',\n z: '\\u017e',\n A: '\\u00c4', B: '\\u0182', C: '\\u00c7', D: '\\u0110', E: '\\u00c9',\n F: '\\u0191', G: '\\u011e', H: '\\u0126', I: '\\u00cf', J: '\\u0134',\n K: '\\u0136', L: '\\u013b', M: '\\u1e40', N: '\\u00d1', O: '\\u00d6',\n P: '\\u00de', Q: '\\u01ea', R: '\\u0158', S: '\\u0160', T: '\\u0162',\n U: '\\u00dc', V: '\\u1e7c', W: '\\u0174', X: '\\u1e8a', Y: '\\u00dd',\n Z: '\\u017d',\n};\n\nconst VOWELS = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']);\n\nexport function formatNumber(locale: string, value: number): string {\n try {\n return new Intl.NumberFormat(locale).format(value);\n } catch {\n return String(value);\n }\n}\n\nexport function formatDate(locale: string, timezone: string, date: Date): string {\n try {\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: timezone,\n }).format(date);\n } catch {\n return date.toLocaleDateString();\n }\n}\n\nexport function formatTime(locale: string, timezone: string, date: Date): string {\n try {\n return new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n timeZoneName: 'short',\n timeZone: timezone,\n }).format(date);\n } catch {\n return date.toLocaleTimeString();\n }\n}\n\nexport function formatCurrency(locale: string, currency: string, value: number): string {\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n }).format(value);\n } catch {\n return `${currency} ${value}`;\n }\n}\n\nexport function pseudoLocalize(text: string): string {\n let result = '';\n for (const char of text) {\n result += PSEUDO_CHAR_MAP[char] ?? char;\n }\n return `[\\u200B${result}\\u200B]`;\n}\n\nexport type I18nDateFormatType = 'locale-default' | 'MM/DD/YYYY' | 'DD/MM/YYYY' | 'YYYY-MM-DD';\nexport type I18nNumberFormatType = 'locale-default' | 'period-comma' | 'comma-period' | 'space-comma';\n\nexport function formatCustomDate(\n date: Date,\n format: I18nDateFormatType,\n locale: string,\n timezone: string\n): string {\n const d = date.getDate().toString().padStart(2, '0');\n const m = (date.getMonth() + 1).toString().padStart(2, '0');\n const y = date.getFullYear().toString();\n switch (format) {\n case 'MM/DD/YYYY': return `${m}/${d}/${y}`;\n case 'DD/MM/YYYY': return `${d}/${m}/${y}`;\n case 'YYYY-MM-DD': return `${y}-${m}-${d}`;\n default: return formatDate(locale, timezone, date);\n }\n}\n\nexport function formatCustomNumber(\n value: number,\n format: I18nNumberFormatType,\n locale: string\n): string {\n const [intPart, decPart] = value.toFixed(2).split('.');\n const digits = intPart.replace('-', '');\n const groups: string[] = [];\n for (let i = digits.length; i > 0; i -= 3) {\n groups.unshift(digits.slice(Math.max(0, i - 3), i));\n }\n const sign = value < 0 ? '-' : '';\n switch (format) {\n case 'period-comma': return `${sign}${groups.join(',')}.${decPart}`;\n case 'comma-period': return `${sign}${groups.join('.')},${decPart}`;\n case 'space-comma': return `${sign}${groups.join('\\u00A0')},${decPart}`;\n default: return formatNumber(locale, value);\n }\n}\n\nexport function expandText(text: string, factor = 0.35): string {\n const targetLength = Math.ceil(text.length * (1 + factor));\n let result = '';\n\n for (const char of text) {\n result += char;\n if (VOWELS.has(char) && result.length < targetLength) {\n result += char.toLowerCase();\n }\n }\n\n // Pad remaining if vowel duplication wasn't enough\n while (result.length < targetLength) {\n result += '~';\n }\n\n return result;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n signal,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { map } from 'rxjs';\nimport { ToolbarSelectComponent } from '../../components/select/select.component';\nimport { ToolbarToolComponent } from '../../components/toolbar-tool/toolbar-tool.component';\nimport { ToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';\nimport { ToolbarInternalI18nService } from './i18n-internal.service';\nimport {\n formatCurrency,\n formatCustomDate,\n formatCustomNumber,\n formatDate,\n formatNumber,\n formatTime,\n pseudoLocalize,\n expandText,\n} from './i18n-formatting.utils';\nimport {\n CURRENCY_SYMBOLS,\n I18nDateFormat,\n I18nFirstDayOfWeek,\n I18nNumberFormat,\n I18nToolConfig,\n} from './i18n.models';\n\nconst NOT_FORCED = 'not-forced';\n\nconst UNIT_SYSTEM_VALUES = ['metric', 'imperial'] as const;\nconst DATE_FORMAT_VALUES = ['locale-default', 'MM/DD/YYYY', 'DD/MM/YYYY', 'YYYY-MM-DD'] as const;\nconst FIRST_DAY_VALUES = ['locale-default', 'sunday', 'monday', 'saturday'] as const;\nconst NUMBER_FORMAT_VALUES = ['locale-default', 'period-comma', 'comma-period', 'space-comma'] as const;\n\n@Component({\n selector: 'ndt-i18n-tool',\n standalone: true,\n imports: [ToolbarToolComponent, ToolbarSelectComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./i18n-tool.component.scss'],\n template: `\n <ndt-toolbar-tool toolTitle=\"i18n\" icon=\"globe\" [options]=\"options\">\n <div class=\"i18n-section\">\n <!-- Formatting Preview (at top for immediate feedback) -->\n @if (toolConfig().showFormattingPreview !== false) {\n <div class=\"i18n-section-header\">FORMATTING PREVIEW</div>\n <div class=\"i18n-preview\">\n <div class=\"i18n-preview-row\">\n <span class=\"preview-label\">Number</span>\n <span class=\"preview-value\">{{ previewNumber() }}</span>\n </div>\n <div class=\"i18n-preview-row\">\n <span class=\"preview-label\">Date</span>\n <span class=\"preview-value\">{{ previewDate() }}</span>\n </div>\n <div class=\"i18n-preview-row\">\n <span class=\"preview-label\">Time</span>\n <span class=\"preview-value\">{{ previewTime() }}</span>\n </div>\n <div class=\"i18n-preview-row\">\n <span class=\"preview-label\">Currency</span>\n <span class=\"preview-value\">{{ previewCurrencyValue() }}</span>\n </div>\n </div>\n }\n\n <!-- Settings (flat 2-column grid) -->\n <div class=\"i18n-select-grid\">\n @if (toolConfig().showLocale !== false) {\n <div class=\"i18n-select-group\">\n <label for=\"i18n-locale\">Locale</label>\n <ndt-select\n id=\"i18n-locale\"\n [value]=\"activeLocale()\"\n [options]=\"localeOptions()\"\n [size]=\"'medium'\"\n (valueChange)=\"onLocaleChange($event ?? '')\"\n />\n </div>\n }\n @if (toolConfig().showTimezone !== false) {\n <div class=\"i18n-select-group\">\n <label for=\"i18n-timezone\">Timezone</label>\n <ndt-select\n id=\"i18n-timezone\"\n [value]=\"activeTimezone()\"\n [options]=\"timezoneOptions()\"\n [size]=\"'medium'\"\n (valueChange)=\"onTimezoneChange($event ?? '')\"\n />\n </div>\n }\n @if (toolConfig().showCurrency !== false) {\n <div class=\"i18n-select-group\">\n <label for=\"i18n-currency\">Currency</label>\n <ndt-select\n id=\"i18n-currency\"\n [value]=\"activeCurrency()\"\n [options]=\"currencyOptions()\"\n [size]=\"'medium'\"\n (valueChange)=\"onCurrencyChange($event ?? '')\"\n />\n </div>\n }\n @if (toolConfig().showUnits !== false) {\n <div class=\"i18n-select-group\">\n <label for=\"i18n-units\">Units</label>\n <ndt-select\n id=\"i18n-units\"\n [value]=\"activeUnitSystem()\"\n [options]=\"unitSystemOptions\"\n [size]=\"'medium'\"\n (valueChange)=\"onUnitSystemChange($event ?? '')\"\n />\n </div>\n }\n @if (toolConfig().showDateFormat !== false) {\n <div class=\"i18n-select-group\">\n <label for=\"i18n-date-format\">Date Format</label>\n <ndt-select\n id=\"i18n-date-format\"\n [value]=\"activeDateFormat()\"\n [options]=\"dateFormatOptions\"\n [size]=\"'medium'\"\n (valueChange)=\"onDateFormatChange($event ?? '')\"\n />\n </div>\n }\n @if (toolConfig().showNumberFormat !== false) {\n <div class=\"i18n-select-group\">\n <label for=\"i18n-number-format\">Number Format</label>\n <ndt-select\n id=\"i18n-number-format\"\n [value]=\"activeNumberFormat()\"\n [options]=\"numberFormatOptions\"\n [size]=\"'medium'\"\n (valueChange)=\"onNumberFormatChange($event ?? '')\"\n />\n </div>\n }\n @if (toolConfig().showFirstDayOfWeek !== false) {\n <div class=\"i18n-select-group\">\n <label for=\"i18n-first-day\">First Day of Week</label>\n <ndt-select\n id=\"i18n-first-day\"\n [value]=\"activeFirstDayOfWeek()\"\n [options]=\"firstDayOptions\"\n [size]=\"'medium'\"\n (valueChange)=\"onFirstDayOfWeekChange($event ?? '')\"\n />\n </div>\n }\n </div>\n\n <!-- Stress Testing -->\n @if (toolConfig().showStressTesting !== false) {\n <div class=\"i18n-section-header\">STRESS TESTING</div>\n <div class=\"i18n-toggle-section\">\n <div class=\"i18n-toggle-row\">\n <div class=\"toggle-info\">\n <span class=\"toggle-label\">Pseudo-Localization</span>\n <span class=\"toggle-hint\">Detect hardcoded strings</span>\n </div>\n <label class=\"toggle-switch\">\n <input\n type=\"checkbox\"\n [checked]=\"pseudoLocEnabled()\"\n (change)=\"onPseudoLocToggle($event)\"\n />\n <span class=\"toggle-track\"></span>\n </label>\n </div>\n @if (pseudoLocEnabled()) {\n <div class=\"i18n-pseudo-preview\">\n {{ pseudoPreview() }}\n </div>\n }\n <div class=\"i18n-toggle-row\">\n <div class=\"toggle-info\">\n <span class=\"toggle-label\">RTL Mirroring</span>\n <span class=\"toggle-hint\">Set document direction to RTL</span>\n </div>\n <label class=\"toggle-switch\">\n <input\n type=\"checkbox\"\n [checked]=\"rtlEnabled()\"\n (change)=\"onRtlToggle($event)\"\n />\n <span class=\"toggle-track\"></span>\n </label>\n </div>\n </div>\n }\n </div>\n </ndt-toolbar-tool>\n `,\n})\nexport class ToolbarI18nToolComponent {\n // --- Injects ---\n\n private readonly i18nService = inject(ToolbarInternalI18nService);\n\n // --- Readonly properties ---\n\n protected readonly options = {\n title: 'i18n',\n description: 'Simulate regional & linguistic environments',\n size: 'tall',\n id: 'ndt-i18n',\n isClosable: true,\n } as ToolbarWindowOptions;\n\n readonly unitSystemOptions = [\n { value: NOT_FORCED, label: 'Not Forced' },\n { value: 'metric' as const, label: 'Metric' },\n { value: 'imperial' as const, label: 'Imperial' },\n ];\n\n readonly dateFormatOptions = [\n { value: NOT_FORCED, label: 'Not Forced' },\n { value: 'locale-default' as const, label: 'Locale Default' },\n { value: 'MM/DD/YYYY' as const, label: 'MM/DD/YYYY' },\n { value: 'DD/MM/YYYY' as const, label: 'DD/MM/YYYY' },\n { value: 'YYYY-MM-DD' as const, label: 'YYYY-MM-DD (ISO)' },\n ];\n\n readonly firstDayOptions = [\n { value: NOT_FORCED, label: 'Not Forced' },\n { value: 'locale-default' as const, label: 'Locale Default' },\n { value: 'sunday' as const, label: 'Sunday' },\n { value: 'monday' as const, label: 'Monday' },\n { value: 'saturday' as const, label: 'Saturday' },\n ];\n\n readonly numberFormatOptions = [\n { value: NOT_FORCED, label: 'Not Forced' },\n { value: 'locale-default' as const, label: 'Locale Default' },\n { value: 'period-comma' as const, label: '1,234.56' },\n { value: 'comma-period' as const, label: '1.234,56' },\n { value: 'space-comma' as const, label: '1 234,56' },\n ];\n\n // --- Signals ---\n\n activeLocale = signal<string>(NOT_FORCED);\n activeTimezone = signal<string>(NOT_FORCED);\n activeCurrency = signal<string>(NOT_FORCED);\n activeUnitSystem = signal<string>(NOT_FORCED);\n activeDateFormat = signal<string>(NOT_FORCED);\n activeFirstDayOfWeek = signal<string>(NOT_FORCED);\n activeNumberFormat = signal<string>(NOT_FORCED);\n\n pseudoLocEnabled = this.i18nService.pseudoLocEnabled;\n rtlEnabled = this.i18nService.rtlEnabled;\n\n // --- Computed ---\n\n toolConfig = computed(() => this.i18nService.toolConfig() as I18nToolConfig);\n\n localeOptions = toSignal(\n this.i18nService.getAvailableLocales().pipe(\n map((locales) => [\n { value: NOT_FORCED, label: 'Not Forced' },\n ...locales.map(({ id: value, name: label }) => ({ value, label })),\n ])\n ),\n { initialValue: [{ value: NOT_FORCED, label: 'Not Forced' }] }\n );\n\n timezoneOptions = toSignal(\n this.i18nService.getAvailableTimezones().pipe(\n map((timezones) => [\n { value: NOT_FORCED, label: 'Not Forced' },\n ...timezones.map(({ id: value, name, offset }) => ({\n value,\n label: `${name} (${offset})`,\n })),\n ])\n ),\n { initialValue: [{ value: NOT_FORCED, label: 'Not Forced' }] }\n );\n\n currencyOptions = toSignal(\n this.i18nService.getAvailableCurrencies().pipe(\n map((currencies) => [\n { value: NOT_FORCED, label: 'Not Forced' },\n ...currencies.map(({ code: value, name, symbol }) => ({\n value,\n label: `${name} (${symbol})`,\n })),\n ])\n ),\n { initialValue: [{ value: NOT_FORCED, label: 'Not Forced' }] }\n );\n\n private currentLocaleCode = computed(() => {\n const id = this.activeLocale();\n return id === NOT_FORCED ? 'en-US' : id;\n });\n\n private currentTimezone = computed(() => {\n const id = this.activeTimezone();\n return id === NOT_FORCED ? 'UTC' : id;\n });\n\n private currentCurrencyCode = computed(() => {\n const id = this.activeCurrency();\n return id === NOT_FORCED ? 'USD' : id;\n });\n\n private readonly previewDate_ = new Date();\n\n previewNumber = computed(() => {\n const nf = this.activeNumberFormat();\n if (nf !== NOT_FORCED && nf !== 'locale-default') {\n return formatCustomNumber(1234.56, nf as I18nNumberFormat, this.currentLocaleCode());\n }\n return formatNumber(this.currentLocaleCode(), 1234.56);\n });\n\n previewDate = computed(() => {\n const df = this.activeDateFormat();\n if (df !== NOT_FORCED && df !== 'locale-default') {\n return formatCustomDate(this.previewDate_, df as I18nDateFormat, this.currentLocaleCode(), this.currentTimezone());\n }\n return formatDate(this.currentLocaleCode(), this.currentTimezone(), this.previewDate_);\n });\n\n previewTime = computed(() =>\n formatTime(this.currentLocaleCode(), this.currentTimezone(), this.previewDate_)\n );\n\n previewCurrencyValue = computed(() => {\n const nf = this.activeNumberFormat();\n if (nf !== NOT_FORCED && nf !== 'locale-default') {\n const code = this.currentCurrencyCode();\n const symbol = CURRENCY_SYMBOLS[code] ?? code;\n return `${symbol}${formatCustomNumber(1234.56, nf as I18nNumberFormat, this.currentLocaleCode())}`;\n }\n return formatCurrency(\n this.currentLocaleCode(),\n this.currentCurrencyCode(),\n 1234.56\n );\n });\n\n pseudoPreview = computed(() => {\n const sample = 'Hello World! This is a sample text for testing.';\n const pseudo = pseudoLocalize(sample);\n return expandText(pseudo);\n });\n\n // --- Constructor: restore persisted values ---\n\n constructor() {\n const state = this.i18nService.getCurrentI18nState();\n if (state.locale) this.activeLocale.set(state.locale.id);\n if (state.timezone) this.activeTimezone.set(state.timezone.id);\n if (state.currency) this.activeCurrency.set(state.currency.code);\n if (state.unitSystem) this.activeUnitSystem.set(state.unitSystem);\n if (state.dateFormat) this.activeDateFormat.set(state.dateFormat);\n if (state.firstDayOfWeek) this.activeFirstDayOfWeek.set(state.firstDayOfWeek);\n if (state.numberFormat) this.activeNumberFormat.set(state.numberFormat);\n }\n\n // --- Event handlers ---\n\n onLocaleChange(localeId: string): void {\n this.activeLocale.set(localeId);\n if (localeId === NOT_FORCED || !localeId) {\n this.i18nService.removeForcedLocale();\n return;\n }\n const selected = this.i18nService.locales().find(({ id }) => id === localeId);\n if (selected) {\n this.i18nService.setForcedLocale(selected);\n }\n }\n\n onTimezoneChange(timezoneId: string): void {\n this.activeTimezone.set(timezoneId);\n if (timezoneId === NOT_FORCED || !timezoneId) {\n this.i18nService.removeForcedTimezone();\n return;\n }\n const selected = this.i18nService.timezones().find(({ id }) => id === timezoneId);\n if (selected) {\n this.i18nService.setForcedTimezone(selected);\n }\n }\n\n onCurrencyChange(currencyCode: string): void {\n this.activeCurrency.set(currencyCode);\n if (currencyCode === NOT_FORCED || !currencyCode) {\n this.i18nService.removeForcedCurrency();\n return;\n }\n const selected = this.i18nService.availableCurrencies().find(({ code }) => code === currencyCode);\n if (selected) {\n this.i18nService.setForcedCurrency(selected);\n }\n }\n\n onUnitSystemChange(unitSystem: string): void {\n this.activeUnitSystem.set(unitSystem);\n if (unitSystem === NOT_FORCED || !unitSystem) {\n this.i18nService.removeForcedUnitSystem();\n return;\n }\n if (UNIT_SYSTEM_VALUES.includes(unitSystem as typeof UNIT_SYSTEM_VALUES[number])) {\n this.i18nService.setForcedUnitSystem(unitSystem as typeof UNIT_SYSTEM_VALUES[number]);\n }\n }\n\n onPseudoLocToggle(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this.i18nService.setPseudoLocEnabled(checked);\n }\n\n onRtlToggle(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this.i18nService.setRtlEnabled(checked);\n }\n\n onDateFormatChange(value: string): void {\n this.activeDateFormat.set(value);\n if (value === NOT_FORCED || !value) {\n this.i18nService.removeForcedDateFormat();\n return;\n }\n if (DATE_FORMAT_VALUES.includes(value as typeof DATE_FORMAT_VALUES[number])) {\n this.i18nService.setForcedDateFormat(value as I18nDateFormat);\n }\n }\n\n onFirstDayOfWeekChange(value: string): void {\n this.activeFirstDayOfWeek.set(value);\n if (value === NOT_FORCED || !value) {\n this.i18nService.removeForcedFirstDayOfWeek();\n return;\n }\n if (FIRST_DAY_VALUES.includes(value as typeof FIRST_DAY_VALUES[number])) {\n this.i18nService.setForcedFirstDayOfWeek(value as I18nFirstDayOfWeek);\n }\n }\n\n onNumberFormatChange(value: string): void {\n this.activeNumberFormat.set(value);\n if (value === NOT_FORCED || !value) {\n this.i18nService.removeForcedNumberFormat();\n return;\n }\n if (NUMBER_FORMAT_VALUES.includes(value as typeof NUMBER_FORMAT_VALUES[number])) {\n this.i18nService.setForcedNumberFormat(value as I18nNumberFormat);\n }\n }\n}\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Observable, combineLatest, map } from 'rxjs';\nimport { ApplyToSourceState } from '../../models/toolbar.interface';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport {\n ToolbarPermission,\n ForcedPermissionsState,\n} from './permissions.models';\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarInternalPermissionsService {\n private readonly STORAGE_KEY = 'permissions';\n private storageService = inject(ToolbarStorageService);\n private stateService = inject(ToolbarStateService);\n\n private appPermissions$ = new BehaviorSubject<ToolbarPermission[]>([]);\n private forcedStateSubject = new BehaviorSubject<ForcedPermissionsState>({\n granted: [],\n denied: [],\n });\n\n private readonly forcedState$ = this.forcedStateSubject.asObservable();\n\n public permissions$: Observable<ToolbarPermission[]> = combineLatest([\n this.appPermissions$,\n this.forcedState$,\n ]).pipe(\n map(([appPermissions, { granted, denied }]) => {\n // If toolbar is disabled, return app permissions without overrides\n if (!this.stateService.isEnabled()) {\n return appPermissions;\n }\n\n return appPermissions.map((permission) => {\n const isForced = granted.includes(permission.id) || denied.includes(permission.id);\n return {\n ...permission,\n isForced,\n isGranted: granted.includes(permission.id)\n ? true\n : denied.includes(permission.id)\n ? false\n : permission.isGranted,\n originalValue: isForced ? permission.isGranted : undefined,\n };\n });\n })\n );\n\n public permissions = toSignal(this.permissions$, { initialValue: [] });\n\n constructor() {\n this.loadForcedState();\n }\n\n setAppPermissions(permissions: ToolbarPermission[]): void {\n this.appPermissions$.next(permissions);\n this.validateAndCleanForcedState(permissions);\n }\n\n setPermission(id: string, granted: boolean): void {\n const { granted: grantedIds, denied: deniedIds } = this.forcedStateSubject.value;\n\n const newGranted = grantedIds.filter((permId) => permId !== id);\n const newDenied = deniedIds.filter((permId) => permId !== id);\n\n if (granted) {\n newGranted.push(id);\n } else {\n newDenied.push(id);\n }\n\n const newState = { granted: newGranted, denied: newDenied };\n this.forcedStateSubject.next(newState);\n this.storageService.set(this.STORAGE_KEY, newState);\n }\n\n removePermissionOverride(id: string): void {\n const { granted, denied } = this.forcedStateSubject.value;\n\n const newState = {\n granted: granted.filter((permId) => permId !== id),\n denied: denied.filter((permId) => permId !== id),\n };\n\n this.forcedStateSubject.next(newState);\n this.storageService.set(this.STORAGE_KEY, newState);\n }\n\n getForcedPermissions(): Observable<ToolbarPermission[]> {\n return this.permissions$.pipe(\n map((permissions) => {\n // If toolbar is disabled, return empty array (no forced values)\n if (!this.stateService.isEnabled()) {\n return [];\n }\n return permissions.filter((permission) => permission.isForced);\n })\n );\n }\n\n /**\n * Apply a preset permissions state, replacing the current forced state.\n * Useful for automated testing or restoring saved configurations.\n * @param state The preset forced permissions state to apply\n */\n applyPresetPermissions(state: ForcedPermissionsState): void {\n this.forcedStateSubject.next(state);\n this.storageService.set(this.STORAGE_KEY, state);\n }\n\n /**\n * Get the current forced permissions state.\n * Returns a deep copy to prevent external mutations.\n * @returns Current forced permissions state\n */\n getCurrentForcedState(): ForcedPermissionsState {\n const currentState = this.forcedStateSubject.value;\n return {\n granted: [...currentState.granted],\n denied: [...currentState.denied],\n };\n }\n\n private loadForcedState(): void {\n try {\n const savedState = this.storageService.get<ForcedPermissionsState>(\n this.STORAGE_KEY\n );\n\n if (savedState && this.isValidForcedState(savedState)) {\n this.forcedStateSubject.next(savedState);\n }\n } catch (error) {\n console.warn('Error loading forced permissions state from localStorage:', error);\n }\n }\n\n private isValidForcedState(state: unknown): state is ForcedPermissionsState {\n if (!state || typeof state !== 'object') {\n return false;\n }\n\n const candidate = state as Record<string, unknown>;\n return (\n Array.isArray(candidate['granted']) &&\n Array.isArray(candidate['denied'])\n );\n }\n\n // Apply to source\n readonly applyCallback = signal<((id: string, value: boolean) => Promise<void>) | null>(null);\n readonly applyStates = signal<Record<string, ApplyToSourceState>>({});\n readonly hasApplyCallback = computed(() => this.applyCallback() !== null);\n\n setApplyToSource(callback: (id: string, value: boolean) => Promise<void>): void {\n this.applyCallback.set(callback);\n }\n\n async applyToSource(id: string, value: boolean): Promise<void> {\n const callback = this.applyCallback();\n if (!callback) return;\n\n this.applyStates.update((s) => ({ ...s, [id]: 'loading' }));\n try {\n await callback(id, value);\n this.applyStates.update((s) => ({ ...s, [id]: 'success' }));\n setTimeout(\n () => this.applyStates.update((s) => ({ ...s, [id]: 'idle' })),\n 1500\n );\n } catch {\n this.applyStates.update((s) => ({ ...s, [id]: 'error' }));\n setTimeout(\n () => this.applyStates.update((s) => ({ ...s, [id]: 'idle' })),\n 1500\n );\n }\n }\n\n private validateAndCleanForcedState(permissions: ToolbarPermission[]): void {\n const currentState = this.forcedStateSubject.value;\n const validIds = new Set(permissions.map((p) => p.id));\n\n const cleanedGranted = currentState.granted.filter((id) => validIds.has(id));\n const cleanedDenied = currentState.denied.filter((id) => validIds.has(id));\n\n const hasInvalidIds =\n cleanedGranted.length !== currentState.granted.length ||\n cleanedDenied.length !== currentState.denied.length;\n\n if (hasInvalidIds) {\n const cleanedState = {\n granted: cleanedGranted,\n denied: cleanedDenied,\n };\n this.forcedStateSubject.next(cleanedState);\n this.storageService.set(this.STORAGE_KEY, cleanedState);\n\n const invalidIds = [\n ...currentState.granted.filter((id) => !validIds.has(id)),\n ...currentState.denied.filter((id) => !validIds.has(id)),\n ];\n if (invalidIds.length > 0) {\n console.warn(\n 'Removed invalid permission IDs from forced state:',\n invalidIds\n );\n }\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarInputComponent } from '../../components/input/input.component';\nimport { ToolbarListComponent } from '../../components/list/list.component';\nimport { ToolbarListItemComponent } from '../../components/list-item/list-item.component';\nimport { ToolbarSelectComponent } from '../../components/select/select.component';\nimport { ToolbarToolComponent } from '../../components/toolbar-tool/toolbar-tool.component';\nimport { ToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';\nimport { ToolViewState } from '../../models/tool-view-state.models';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { ToolbarInternalPermissionsService } from './permissions-internal.service';\nimport {\n ToolbarPermission,\n PermissionFilter,\n} from './permissions.models';\n\n@Component({\n selector: 'ndt-permissions-tool',\n standalone: true,\n imports: [\n FormsModule,\n ToolbarToolComponent,\n ToolbarInputComponent,\n ToolbarSelectComponent,\n ToolbarListComponent,\n ToolbarListItemComponent,\n ],\n template: `\n <ndt-toolbar-tool\n [options]=\"options\"\n toolTitle=\"Permissions\"\n icon=\"lock\"\n [badge]=\"badgeCount()\"\n >\n <div class=\"container\">\n <div class=\"tool-header\">\n <ndt-input\n [value]=\"searchQuery()\"\n (valueChange)=\"onSearchChange($event)\"\n placeholder=\"Search permissions...\"\n [ariaLabel]=\"'Search permissions'\"\n />\n <div class=\"filter-wrapper\">\n <ndt-select\n [value]=\"activeFilter()\"\n [options]=\"filterOptions\"\n [size]=\"'medium'\"\n (valueChange)=\"onFilterChange($event)\"\n [ariaLabel]=\"'Filter permissions by state'\"\n />\n </div>\n </div>\n\n <ndt-list\n [hasItems]=\"!hasNoPermissions()\"\n [hasResults]=\"!hasNoFilteredPermissions()\"\n emptyMessage=\"No permissions found\"\n [emptyHint]=\"'Call setAvailableOptions() to configure permissions'\"\n noResultsMessage=\"No permissions match your filter\"\n >\n @for (permission of filteredPermissions(); track permission.id) {\n <ndt-list-item\n [title]=\"permission.name\"\n [description]=\"permission.description\"\n [isForced]=\"permission.isForced\"\n [currentValue]=\"permission.isGranted\"\n [originalValue]=\"permission.originalValue\"\n [isPinned]=\"pinnedIds().has(permission.id)\"\n (pinToggle)=\"togglePin(permission.id)\"\n [showApply]=\"hasApplyCallback()\"\n [applyState]=\"getApplyState(permission.id)\"\n (applyToSource)=\"onApplyToSource(permission.id, permission.isGranted)\"\n >\n <ndt-select\n [value]=\"getPermissionValue(permission)\"\n [options]=\"permissionValueOptions\"\n [ariaLabel]=\"'Override state for ' + permission.name\"\n (valueChange)=\"onPermissionChange(permission.id, $event ?? '')\"\n size=\"small\"\n />\n </ndt-list-item>\n }\n </ndt-list>\n </div>\n </ndt-toolbar-tool>\n `,\n styles: [\n `\n .container {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 0;\n }\n\n .tool-header {\n position: relative;\n flex-shrink: 0;\n display: flex;\n gap: var(--ndt-spacing-sm);\n margin-bottom: var(--ndt-spacing-sm);\n\n ndt-input {\n flex: 1;\n }\n\n .filter-wrapper {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n border-left: 1px solid var(--ndt-border-primary);\n padding-left: var(--ndt-spacing-sm);\n\n ndt-select {\n flex: 0 0 auto;\n min-width: 140px;\n }\n }\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarPermissionsToolComponent {\n // Injects\n private readonly permissionsService = inject(\n ToolbarInternalPermissionsService\n );\n private readonly storageService = inject(ToolbarStorageService);\n\n // Constants\n private readonly VIEW_STATE_KEY = 'permissions-view';\n\n // Signals\n protected readonly activeFilter = signal<PermissionFilter>('all');\n protected readonly searchQuery = signal<string>('');\n protected readonly pinnedIds = signal<Set<string>>(new Set());\n\n constructor() {\n this.loadViewState();\n\n // Save view state on changes\n effect(() => {\n const state: ToolViewState = {\n searchQuery: this.searchQuery(),\n filter: this.activeFilter(),\n sortOrder: 'asc',\n pinnedIds: [...this.pinnedIds()],\n };\n this.storageService.set(this.VIEW_STATE_KEY, state);\n });\n }\n\n private loadViewState(): void {\n try {\n const saved = this.storageService.get<ToolViewState>(this.VIEW_STATE_KEY);\n if (saved) {\n this.searchQuery.set(saved.searchQuery ?? '');\n const filter = saved.filter as PermissionFilter;\n if (['all', 'forced', 'granted', 'denied'].includes(filter)) {\n this.activeFilter.set(filter);\n }\n if (saved.pinnedIds?.length) {\n this.pinnedIds.set(new Set(saved.pinnedIds));\n }\n }\n } catch {\n // Use defaults on error\n }\n }\n\n protected readonly permissions = this.permissionsService.permissions;\n\n // Computed badge count for forced values\n protected readonly badgeCount = computed(() => {\n const count = this.permissions().filter((p) => p.isForced).length;\n if (count === 0) return '';\n if (count > 99) return '99+';\n return count.toString();\n });\n protected readonly hasNoPermissions = computed(\n () => this.permissions().length === 0\n );\n protected readonly filteredPermissions = computed(() => {\n const filtered = this.permissions().filter((permission) => {\n const searchTerm = this.searchQuery().toLowerCase();\n const permissionName = permission.name.toLowerCase();\n const permissionDescription = permission.description?.toLowerCase() ?? '';\n\n const matchesSearch =\n !this.searchQuery() ||\n permissionName.includes(searchTerm) ||\n permissionDescription.includes(searchTerm);\n\n const matchesFilter =\n this.activeFilter() === 'all' ||\n (this.activeFilter() === 'forced' && permission.isForced) ||\n (this.activeFilter() === 'granted' && permission.isGranted) ||\n (this.activeFilter() === 'denied' && !permission.isGranted);\n\n return matchesSearch && matchesFilter;\n });\n\n const pinned = this.pinnedIds();\n // Sort pinned first, then alphabetically within each group\n return filtered.sort((a, b) => {\n const aPinned = pinned.has(a.id);\n const bPinned = pinned.has(b.id);\n if (aPinned !== bPinned) return aPinned ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n });\n protected readonly hasNoFilteredPermissions = computed(\n () => this.filteredPermissions().length === 0\n );\n\n // Other properties\n protected readonly options = {\n title: 'Permissions',\n description: 'Manage permission overrides for your current session',\n isClosable: true,\n size: 'tall',\n id: 'ndt-permissions',\n } as ToolbarWindowOptions;\n\n protected readonly filterOptions = [\n { value: 'all', label: 'All Permissions' },\n { value: 'forced', label: 'Forced' },\n { value: 'granted', label: 'Granted' },\n { value: 'denied', label: 'Denied' },\n ];\n\n protected readonly permissionValueOptions = [\n { value: 'not-forced', label: 'Not Forced' },\n { value: 'denied', label: 'Forced Denied' },\n { value: 'granted', label: 'Forced Granted' },\n ];\n\n // Apply to source (delegated to internal service)\n protected readonly hasApplyCallback = this.permissionsService.hasApplyCallback;\n\n protected getApplyState(\n permissionId: string\n ): 'idle' | 'loading' | 'success' | 'error' {\n return this.permissionsService.applyStates()[permissionId] ?? 'idle';\n }\n\n protected onApplyToSource(permissionId: string, value: boolean): void {\n this.permissionsService.applyToSource(permissionId, value);\n }\n\n // Public methods\n onFilterChange(value: string | undefined): void {\n const filter = this.filterOptions.find((f) => f.value === value);\n if (filter) {\n this.activeFilter.set(filter.value as PermissionFilter);\n }\n }\n\n onPermissionChange(id: string, value: string): void {\n switch (value) {\n case 'not-forced':\n this.permissionsService.removePermissionOverride(id);\n break;\n case 'granted':\n this.permissionsService.setPermission(id, true);\n break;\n case 'denied':\n this.permissionsService.setPermission(id, false);\n break;\n }\n }\n\n onSearchChange(query: string): void {\n this.searchQuery.set(query);\n }\n\n togglePin(permissionId: string): void {\n this.pinnedIds.update((ids) => {\n const next = new Set(ids);\n if (next.has(permissionId)) {\n next.delete(permissionId);\n } else {\n next.add(permissionId);\n }\n return next;\n });\n }\n\n // Protected methods\n protected getPermissionValue(permission: ToolbarPermission): string {\n if (!permission.isForced) return '';\n return permission.isGranted ? 'granted' : 'denied';\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ToolbarStorageService } from '../../utils/storage.service';\nimport { ToolbarInternalFeatureFlagService } from '../feature-flags-tool/feature-flags-internal.service';\nimport { ToolbarInternalPermissionsService } from '../permissions-tool/permissions-internal.service';\nimport { ToolbarInternalAppFeaturesService } from '../app-features-tool/app-features-internal.service';\nimport { ToolbarInternalI18nService } from '../i18n-tool/i18n-internal.service';\nimport {\n ToolbarPreset,\n ToolbarPresetConfig,\n PresetCategoryOptions,\n PartialApplyOptions,\n} from './presets.models';\n\n/**\n * Internal service for managing presets state.\n * Handles CRUD operations, captures current toolbar config, and applies presets.\n */\n@Injectable({ providedIn: 'root' })\nexport class ToolbarInternalPresetsService {\n private readonly STORAGE_KEY = 'presets';\n private storageService = inject(ToolbarStorageService);\n\n // Inject all other tool internal services (for reading/writing state)\n private featureFlagsService = inject(ToolbarInternalFeatureFlagService);\n private permissionsService = inject(ToolbarInternalPermissionsService);\n private appFeaturesService = inject(ToolbarInternalAppFeaturesService);\n private i18nService = inject(ToolbarInternalI18nService);\n\n private presetsSubject = new BehaviorSubject<ToolbarPreset[]>([]);\n public presets$: Observable<ToolbarPreset[]> =\n this.presetsSubject.asObservable();\n public presets = toSignal(this.presets$, { initialValue: [] as ToolbarPreset[] });\n\n constructor() {\n this.loadPresets();\n }\n\n /**\n * Capture current toolbar state as a new preset\n */\n saveCurrentAsPreset(\n name: string,\n description?: string,\n categoryOptions?: PresetCategoryOptions\n ): ToolbarPreset {\n const preset: ToolbarPreset = {\n id: this.generateId(),\n name,\n description,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n config: this.captureCurrentConfig(categoryOptions),\n };\n\n const presets = [...this.presetsSubject.value, preset];\n this.presetsSubject.next(presets);\n this.storageService.set(this.STORAGE_KEY, presets);\n\n return preset;\n }\n\n /**\n * Apply a preset to all tools (THIS IS THE KEY METHOD)\n */\n async applyPreset(presetId: string): Promise<void> {\n const preset = this.presetsSubject.value.find((p) => p.id === presetId);\n if (!preset) return;\n\n // Apply to each tool's internal service\n this.featureFlagsService.applyPresetFlags(preset.config.featureFlags);\n this.permissionsService.applyPresetPermissions(preset.config.permissions);\n this.appFeaturesService.applyForcedState(preset.config.appFeatures);\n if (preset.config.i18n) {\n this.i18nService.applyPresetI18n(preset.config.i18n);\n }\n }\n\n /**\n * Update an existing preset with current toolbar state\n */\n updatePreset(presetId: string): void {\n const presets = this.presetsSubject.value.map((preset) => {\n if (preset.id === presetId) {\n return {\n ...preset,\n updatedAt: new Date().toISOString(),\n config: this.captureCurrentConfig(),\n };\n }\n return preset;\n });\n\n this.presetsSubject.next(presets);\n this.storageService.set(this.STORAGE_KEY, presets);\n }\n\n /**\n * Delete a preset\n */\n deletePreset(presetId: string): void {\n const presets = this.presetsSubject.value.filter(\n (p) => p.id !== presetId\n );\n this.presetsSubject.next(presets);\n this.storageService.set(this.STORAGE_KEY, presets);\n }\n\n /**\n * Add a preset (used for import)\n */\n addPreset(preset: ToolbarPreset): ToolbarPreset {\n // Generate new ID to avoid conflicts\n const newPreset: ToolbarPreset = {\n ...preset,\n id: this.generateId(),\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n\n const presets = [...this.presetsSubject.value, newPreset];\n this.presetsSubject.next(presets);\n this.storageService.set(this.STORAGE_KEY, presets);\n\n return newPreset;\n }\n\n /**\n * Get a preset by ID\n */\n getPresetById(presetId: string): ToolbarPreset | undefined {\n return this.presetsSubject.value.find((p) => p.id === presetId);\n }\n\n /**\n * Toggle favorite status for a preset\n */\n toggleFavorite(presetId: string): void {\n const presets = this.presetsSubject.value.map((p) =>\n p.id === presetId ? { ...p, isFavorite: !p.isFavorite } : p\n );\n this.presetsSubject.next(presets);\n this.storageService.set(this.STORAGE_KEY, presets);\n }\n\n /**\n * Apply a preset with partial options (only selected categories)\n */\n async partialApplyPreset(\n presetId: string,\n options: PartialApplyOptions\n ): Promise<void> {\n const preset = this.presetsSubject.value.find((p) => p.id === presetId);\n if (!preset) return;\n\n if (options.applyFeatureFlags) {\n this.featureFlagsService.applyPresetFlags(preset.config.featureFlags);\n }\n if (options.applyPermissions) {\n this.permissionsService.applyPresetPermissions(preset.config.permissions);\n }\n if (options.applyAppFeatures) {\n this.appFeaturesService.applyForcedState(preset.config.appFeatures);\n }\n if (options.applyI18n && preset.config.i18n) {\n this.i18nService.applyPresetI18n(preset.config.i18n);\n }\n }\n\n /**\n * Update only the metadata (name, description) of a preset without changing config\n */\n updatePresetMetadata(\n presetId: string,\n name: string,\n description?: string\n ): void {\n const presets = this.presetsSubject.value.map((preset) => {\n if (preset.id === presetId) {\n return {\n ...preset,\n name,\n description,\n updatedAt: new Date().toISOString(),\n };\n }\n return preset;\n });\n\n this.presetsSubject.next(presets);\n this.storageService.set(this.STORAGE_KEY, presets);\n }\n\n /**\n * Capture current configuration from all tools\n */\n private captureCurrentConfig(\n categoryOptions?: PresetCategoryOptions\n ): ToolbarPresetConfig {\n // Default to including all categories if not specified\n const options = {\n includeFeatureFlags: categoryOptions?.includeFeatureFlags ?? true,\n includePermissions: categoryOptions?.includePermissions ?? true,\n includeAppFeatures: categoryOptions?.includeAppFeatures ?? true,\n includeI18n: categoryOptions?.includeI18n ?? true,\n };\n\n // Get current forced states\n const currentFlags = this.featureFlagsService.getCurrentForcedState();\n const currentPerms = this.permissionsService.getCurrentForcedState();\n const currentFeatures = this.appFeaturesService.getCurrentForcedState();\n\n // Filter by selected IDs if provided\n const filterById = (ids: string[], selected?: string[]) =>\n selected && selected.length > 0 ? ids.filter((id) => selected.includes(id)) : ids;\n\n return {\n featureFlags: options.includeFeatureFlags\n ? {\n enabled: filterById(\n currentFlags.enabled,\n categoryOptions?.selectedFlagIds\n ),\n disabled: filterById(\n currentFlags.disabled,\n categoryOptions?.selectedFlagIds\n ),\n }\n : { enabled: [], disabled: [] },\n permissions: options.includePermissions\n ? {\n granted: filterById(\n currentPerms.granted,\n categoryOptions?.selectedPermissionIds\n ),\n denied: filterById(\n currentPerms.denied,\n categoryOptions?.selectedPermissionIds\n ),\n }\n : { granted: [], denied: [] },\n appFeatures: options.includeAppFeatures\n ? {\n enabled: filterById(\n currentFeatures.enabled,\n categoryOptions?.selectedFeatureIds\n ),\n disabled: filterById(\n currentFeatures.disabled,\n categoryOptions?.selectedFeatureIds\n ),\n }\n : { enabled: [], disabled: [] },\n i18n: options.includeI18n\n ? (() => {\n const i18nState = this.i18nService.getCurrentI18nState();\n return {\n locale: i18nState.locale?.id ?? null,\n timezone: i18nState.timezone?.id ?? null,\n currency: i18nState.currency?.code ?? null,\n unitSystem: i18nState.unitSystem ?? null,\n pseudoLocEnabled: i18nState.pseudoLocEnabled,\n rtlEnabled: i18nState.rtlEnabled,\n };\n })()\n : undefined,\n };\n }\n\n /**\n * Load presets from localStorage\n */\n private loadPresets(): void {\n try {\n const saved =\n this.storageService.get<ToolbarPreset[]>(this.STORAGE_KEY);\n if (saved && Array.isArray(saved)) {\n this.presetsSubject.next(saved);\n }\n } catch (error) {\n console.error('Failed to load presets from localStorage:', error);\n }\n }\n\n /**\n * Generate unique preset ID\n */\n private generateId(): string {\n return `preset-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n HostListener,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToolbarButtonComponent } from '../../components/button/button.component';\nimport { ToolbarIconComponent } from '../../components/icons/icon.component';\nimport { ToolbarInputComponent } from '../../components/input/input.component';\nimport { ToolbarToolComponent } from '../../components/toolbar-tool/toolbar-tool.component';\nimport { ToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';\nimport { ToolbarInternalPresetsService } from './presets-internal.service';\nimport { ToolbarInternalFeatureFlagService } from '../feature-flags-tool/feature-flags-internal.service';\nimport { ToolbarInternalPermissionsService } from '../permissions-tool/permissions-internal.service';\nimport { ToolbarInternalAppFeaturesService } from '../app-features-tool/app-features-internal.service';\nimport { ToolbarStateService } from '../../toolbar-state.service';\nimport { ToolbarPreset } from './presets.models';\n\ntype ViewMode = 'list' | 'create' | 'edit' | 'import' | 'apply' | 'delete';\ntype ToastType = 'success' | 'error';\n\n@Component({\n selector: 'ndt-presets-tool',\n standalone: true,\n imports: [\n FormsModule,\n ToolbarToolComponent,\n ToolbarInputComponent,\n ToolbarButtonComponent,\n ToolbarIconComponent,\n ],\n template: `\n <ndt-toolbar-tool [options]=\"options\" toolTitle=\"Presets\" icon=\"layout\">\n <div class=\"container\">\n <!-- Toast Notification -->\n @if (toastMessage()) {\n <div class=\"toast\" [class.toast--success]=\"toastType() === 'success'\" [class.toast--error]=\"toastType() === 'error'\">\n <span class=\"toast__icon\">{{ toastType() === 'success' ? '✓' : '✕' }}</span>\n <span class=\"toast__message\">{{ toastMessage() }}</span>\n </div>\n }\n\n\n <!-- Mode Toggle -->\n @if (!hasNoPresets() || viewMode() !== 'list') {\n <div class=\"tool-header\">\n @if (viewMode() === 'list') {\n <ndt-input\n [value]=\"searchQuery()\"\n (valueChange)=\"onSearchChange($event)\"\n placeholder=\"Search presets...\"\n [ariaLabel]=\"'Search presets'\"\n />\n <ndt-button\n (click)=\"onSwitchToImportMode()\"\n [ariaLabel]=\"'Import preset'\"\n >\n Import\n </ndt-button>\n <ndt-button\n (click)=\"onSwitchToCreateMode()\"\n [ariaLabel]=\"'Create new preset'\"\n >\n New\n </ndt-button>\n } @else {\n <ndt-button\n (click)=\"onSwitchToListMode()\"\n [ariaLabel]=\"'Back to list'\"\n >\n ← Back\n </ndt-button>\n }\n </div>\n }\n\n <!-- Create Form -->\n @if (viewMode() === 'create') {\n <form (submit)=\"onSavePreset($event)\" class=\"preset-form\">\n <h3 class=\"form-title\">Create Preset</h3>\n <p class=\"form-hint\">This will save the current forced values from other tools. Only items you've explicitly set will be included.</p>\n <div class=\"form-field\">\n <ndt-input\n label=\"Preset Name *\"\n [value]=\"presetName()\"\n (valueChange)=\"onPresetNameChange($event)\"\n placeholder=\"e.g., Admin User - Full Access\"\n [ariaLabel]=\"'Preset name'\"\n />\n @if (nameError()) {\n <span class=\"field-error\">{{ nameError() }}</span>\n }\n </div>\n <ndt-input\n label=\"Description (optional)\"\n [value]=\"presetDescription()\"\n (valueChange)=\"presetDescription.set($event)\"\n placeholder=\"Brief description of this preset\"\n [ariaLabel]=\"'Preset description'\"\n />\n\n <!-- Category selection checkboxes -->\n <div class=\"preset-summary\">\n <h4>Select what to include:</h4>\n\n @if (isFeatureFlagsEnabled()) {\n <div class=\"category-section\">\n <label class=\"checkbox-option\">\n <input\n type=\"checkbox\"\n [checked]=\"includeFeatureFlags()\"\n (change)=\"includeFeatureFlags.set(!includeFeatureFlags())\"\n [disabled]=\"getCurrentFlagsCount() === 0\"\n />\n <span>Feature Flags ({{ getCurrentFlagsCount() }} forced)</span>\n </label>\n @if (forcedFlags().length > 0) {\n <ul class=\"forced-items-list\">\n @for (flag of forcedFlags(); track flag.id) {\n <li>\n <label class=\"item-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(selectedFlagIds(), flag.id)\"\n (change)=\"toggleItemSelection(selectedFlagIds, flag.id)\"\n />\n <span class=\"item-name\">{{ flag.name }}</span>\n <span class=\"item-status\" [class.enabled]=\"flag.isEnabled\" [class.disabled]=\"!flag.isEnabled\">\n {{ flag.isEnabled ? 'ON' : 'OFF' }}\n </span>\n </label>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n @if (isPermissionsEnabled()) {\n <div class=\"category-section\">\n <label class=\"checkbox-option\">\n <input\n type=\"checkbox\"\n [checked]=\"includePermissions()\"\n (change)=\"includePermissions.set(!includePermissions())\"\n [disabled]=\"getCurrentPermissionsCount() === 0\"\n />\n <span>Permissions ({{ getCurrentPermissionsCount() }} forced)</span>\n </label>\n @if (forcedPermissions().length > 0) {\n <ul class=\"forced-items-list\">\n @for (perm of forcedPermissions(); track perm.id) {\n <li>\n <label class=\"item-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(selectedPermissionIds(), perm.id)\"\n (change)=\"toggleItemSelection(selectedPermissionIds, perm.id)\"\n />\n <span class=\"item-name\">{{ perm.name }}</span>\n <span class=\"item-status\" [class.enabled]=\"perm.isGranted\" [class.disabled]=\"!perm.isGranted\">\n {{ perm.isGranted ? 'GRANTED' : 'DENIED' }}\n </span>\n </label>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n @if (isAppFeaturesEnabled()) {\n <div class=\"category-section\">\n <label class=\"checkbox-option\">\n <input\n type=\"checkbox\"\n [checked]=\"includeAppFeatures()\"\n (change)=\"includeAppFeatures.set(!includeAppFeatures())\"\n [disabled]=\"getCurrentAppFeaturesCount() === 0\"\n />\n <span>App Features ({{ getCurrentAppFeaturesCount() }} forced)</span>\n </label>\n @if (forcedAppFeatures().length > 0) {\n <ul class=\"forced-items-list\">\n @for (feat of forcedAppFeatures(); track feat.id) {\n <li>\n <label class=\"item-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(selectedFeatureIds(), feat.id)\"\n (change)=\"toggleItemSelection(selectedFeatureIds, feat.id)\"\n />\n <span class=\"item-name\">{{ feat.name }}</span>\n <span class=\"item-status\" [class.enabled]=\"feat.isEnabled\" [class.disabled]=\"!feat.isEnabled\">\n {{ feat.isEnabled ? 'ON' : 'OFF' }}\n </span>\n </label>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n </div>\n\n <div class=\"form-actions\">\n <ndt-button type=\"button\" (click)=\"onSwitchToListMode()\">Cancel</ndt-button>\n <ndt-button type=\"submit\">Save Preset</ndt-button>\n </div>\n </form>\n }\n\n <!-- Edit Form -->\n @if (viewMode() === 'edit') {\n <form (submit)=\"onSaveEdit($event)\" class=\"preset-form\">\n <h3 class=\"form-title\">Edit Preset</h3>\n <div class=\"form-field\">\n <ndt-input\n label=\"Preset Name *\"\n [value]=\"editName()\"\n (valueChange)=\"onEditNameChange($event)\"\n placeholder=\"e.g., Admin User - Full Access\"\n [ariaLabel]=\"'Preset name'\"\n />\n @if (nameError()) {\n <span class=\"field-error\">{{ nameError() }}</span>\n }\n </div>\n <ndt-input\n label=\"Description (optional)\"\n [value]=\"editDescription()\"\n (valueChange)=\"editDescription.set($event)\"\n placeholder=\"Brief description of this preset\"\n [ariaLabel]=\"'Preset description'\"\n />\n\n <!-- Show saved configuration read-only -->\n @if (editingPreset()) {\n <div class=\"config-preview\">\n <h4>Saved Configuration</h4>\n @if (editingPreset()!.config.featureFlags.enabled.length > 0 || editingPreset()!.config.featureFlags.disabled.length > 0) {\n <div class=\"config-category\">\n <span class=\"config-category__title\">Feature Flags ({{ editingPreset()!.config.featureFlags.enabled.length + editingPreset()!.config.featureFlags.disabled.length }})</span>\n <div class=\"config-items\">\n @for (id of editingPreset()!.config.featureFlags.enabled; track id) {\n <span class=\"config-item config-item--on\">{{ id }}: ON</span>\n }\n @for (id of editingPreset()!.config.featureFlags.disabled; track id) {\n <span class=\"config-item config-item--off\">{{ id }}: OFF</span>\n }\n </div>\n </div>\n }\n @if (editingPreset()!.config.permissions.granted.length > 0 || editingPreset()!.config.permissions.denied.length > 0) {\n <div class=\"config-category\">\n <span class=\"config-category__title\">Permissions ({{ editingPreset()!.config.permissions.granted.length + editingPreset()!.config.permissions.denied.length }})</span>\n <div class=\"config-items\">\n @for (id of editingPreset()!.config.permissions.granted; track id) {\n <span class=\"config-item config-item--on\">{{ id }}: GRANTED</span>\n }\n @for (id of editingPreset()!.config.permissions.denied; track id) {\n <span class=\"config-item config-item--off\">{{ id }}: DENIED</span>\n }\n </div>\n </div>\n }\n @if (editingPreset()!.config.appFeatures.enabled.length > 0 || editingPreset()!.config.appFeatures.disabled.length > 0) {\n <div class=\"config-category\">\n <span class=\"config-category__title\">App Features ({{ editingPreset()!.config.appFeatures.enabled.length + editingPreset()!.config.appFeatures.disabled.length }})</span>\n <div class=\"config-items\">\n @for (id of editingPreset()!.config.appFeatures.enabled; track id) {\n <span class=\"config-item config-item--on\">{{ id }}: ON</span>\n }\n @for (id of editingPreset()!.config.appFeatures.disabled; track id) {\n <span class=\"config-item config-item--off\">{{ id }}: OFF</span>\n }\n </div>\n </div>\n }\n <button type=\"button\" class=\"replace-config-button\" (click)=\"onReplaceConfig()\">\n ↻ Replace with current toolbar state\n </button>\n </div>\n }\n\n <div class=\"form-actions\">\n <ndt-button type=\"button\" (click)=\"onSwitchToListMode()\">Cancel</ndt-button>\n <ndt-button type=\"submit\">Save Changes</ndt-button>\n </div>\n </form>\n }\n\n <!-- Import View -->\n @if (viewMode() === 'import') {\n <div class=\"import-view\">\n <h3 class=\"form-title\">Import Preset</h3>\n\n <!-- File Drop Zone -->\n <div\n class=\"drop-zone\"\n [class.drop-zone--active]=\"isDragOver()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onFileDrop($event)\"\n (click)=\"fileInput.click()\"\n (keydown.enter)=\"fileInput.click()\"\n (keydown.space)=\"fileInput.click()\"\n tabindex=\"0\"\n role=\"button\"\n >\n <input\n #fileInput\n type=\"file\"\n accept=\".json\"\n (change)=\"onFileSelect($event)\"\n hidden\n />\n <span class=\"drop-zone__icon\">📁</span>\n <span class=\"drop-zone__text\">Drop a .json file here</span>\n <span class=\"drop-zone__hint\">or click to browse</span>\n </div>\n\n <div class=\"divider\">\n <span>or paste JSON</span>\n </div>\n\n <!-- JSON Textarea -->\n <textarea\n class=\"json-textarea\"\n [value]=\"importJson()\"\n (input)=\"onImportJsonChange($event)\"\n placeholder='{\"name\": \"...\", \"config\": { ... }}'\n ></textarea>\n\n @if (importError()) {\n <span class=\"field-error\">{{ importError() }}</span>\n }\n\n <div class=\"form-actions\">\n <ndt-button type=\"button\" (click)=\"onSwitchToListMode()\">Cancel</ndt-button>\n <ndt-button (click)=\"onImportPreset()\">Import Preset</ndt-button>\n </div>\n </div>\n }\n\n <!-- Partial Apply View -->\n @if (viewMode() === 'apply') {\n <div class=\"apply-view\">\n <h3 class=\"form-title\">Apply: {{ applyingPreset()?.name }}</h3>\n <p class=\"apply-description\">Select which parts to apply</p>\n\n @if (applyingPreset()) {\n <div class=\"apply-categories\">\n <!-- Feature Flags -->\n @if (applyingPreset()!.config.featureFlags.enabled.length > 0 || applyingPreset()!.config.featureFlags.disabled.length > 0) {\n <div class=\"apply-category\" [class.apply-category--disabled]=\"!applyFeatureFlags()\">\n <label class=\"apply-category__header\">\n <input\n type=\"checkbox\"\n [checked]=\"applyFeatureFlags()\"\n (change)=\"applyFeatureFlags.set(!applyFeatureFlags())\"\n />\n <span>Feature Flags ({{ applyingPreset()!.config.featureFlags.enabled.length + applyingPreset()!.config.featureFlags.disabled.length }})</span>\n </label>\n @if (applyFeatureFlags()) {\n <div class=\"apply-diff\">\n @for (id of applyingPreset()!.config.featureFlags.enabled; track id) {\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">{{ id }}</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value diff-item__value--on\">ON</span>\n </div>\n }\n @for (id of applyingPreset()!.config.featureFlags.disabled; track id) {\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">{{ id }}</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value diff-item__value--off\">OFF</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Permissions -->\n @if (applyingPreset()!.config.permissions.granted.length > 0 || applyingPreset()!.config.permissions.denied.length > 0) {\n <div class=\"apply-category\" [class.apply-category--disabled]=\"!applyPermissions()\">\n <label class=\"apply-category__header\">\n <input\n type=\"checkbox\"\n [checked]=\"applyPermissions()\"\n (change)=\"applyPermissions.set(!applyPermissions())\"\n />\n <span>Permissions ({{ applyingPreset()!.config.permissions.granted.length + applyingPreset()!.config.permissions.denied.length }})</span>\n </label>\n @if (applyPermissions()) {\n <div class=\"apply-diff\">\n @for (id of applyingPreset()!.config.permissions.granted; track id) {\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">{{ id }}</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value diff-item__value--on\">GRANTED</span>\n </div>\n }\n @for (id of applyingPreset()!.config.permissions.denied; track id) {\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">{{ id }}</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value diff-item__value--off\">DENIED</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- App Features -->\n @if (applyingPreset()!.config.appFeatures.enabled.length > 0 || applyingPreset()!.config.appFeatures.disabled.length > 0) {\n <div class=\"apply-category\" [class.apply-category--disabled]=\"!applyAppFeatures()\">\n <label class=\"apply-category__header\">\n <input\n type=\"checkbox\"\n [checked]=\"applyAppFeatures()\"\n (change)=\"applyAppFeatures.set(!applyAppFeatures())\"\n />\n <span>App Features ({{ applyingPreset()!.config.appFeatures.enabled.length + applyingPreset()!.config.appFeatures.disabled.length }})</span>\n </label>\n @if (applyAppFeatures()) {\n <div class=\"apply-diff\">\n @for (id of applyingPreset()!.config.appFeatures.enabled; track id) {\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">{{ id }}</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value diff-item__value--on\">ON</span>\n </div>\n }\n @for (id of applyingPreset()!.config.appFeatures.disabled; track id) {\n <div class=\"diff-item\">\n <span class=\"diff-item__name\">{{ id }}</span>\n <span class=\"diff-item__arrow\">→</span>\n <span class=\"diff-item__value diff-item__value--off\">OFF</span>\n </div>\n }\n </div>\n }\n </div>\n }\n\n </div>\n }\n\n <div class=\"form-actions\">\n <ndt-button type=\"button\" (click)=\"onSwitchToListMode()\">Cancel</ndt-button>\n <ndt-button (click)=\"onConfirmPartialApply()\">Apply Selected</ndt-button>\n </div>\n </div>\n }\n\n <!-- Delete Confirmation View -->\n @if (viewMode() === 'delete') {\n <div class=\"delete-view\">\n <div class=\"delete-view__content\">\n <div class=\"delete-view__icon\">🗑️</div>\n <h3 class=\"delete-view__title\">Delete \"{{ deletePresetName() }}\"?</h3>\n <p class=\"delete-view__description\">\n This preset will be permanently removed.\n This action cannot be undone.\n </p>\n </div>\n <div class=\"form-actions\">\n <ndt-button type=\"button\" (click)=\"onSwitchToListMode()\">← Back</ndt-button>\n <button class=\"delete-button\" (click)=\"onConfirmDelete()\">Delete Preset</button>\n </div>\n </div>\n }\n\n <!-- Empty State -->\n @if (viewMode() === 'list' && hasNoPresets()) {\n <div class=\"empty\">\n <p>No presets saved yet</p>\n <p class=\"hint\">\n Save the current toolbar configuration as a preset for quick access\n </p>\n <ndt-button (click)=\"onSwitchToCreateMode()\">\n Create Your First Preset\n </ndt-button>\n </div>\n } @else if (viewMode() === 'list' && hasNoFilteredPresets()) {\n <div class=\"empty\">\n <p>No presets match your search</p>\n </div>\n } @else if (viewMode() === 'list') {\n <!-- Preset List -->\n <div class=\"preset-list\">\n @for (preset of sortedPresets(); track preset.id) {\n <div class=\"preset-card\">\n <div class=\"preset-card__header\">\n <button\n class=\"expand-toggle\"\n (click)=\"onToggleExpand(preset.id); $event.stopPropagation()\"\n [attr.aria-label]=\"expandedPresetId() === preset.id ? 'Collapse details' : 'Expand details'\"\n >{{ expandedPresetId() === preset.id ? '▾' : '▸' }}</button>\n <button\n class=\"favorite-button\"\n [class.favorite-button--active]=\"preset.isFavorite\"\n (click)=\"onToggleFavorite(preset.id); $event.stopPropagation()\"\n [attr.aria-label]=\"preset.isFavorite ? 'Remove from favorites' : 'Add to favorites'\"\n >{{ preset.isFavorite ? '★' : '☆' }}</button>\n <span class=\"preset-card__name\">{{ preset.name }}</span>\n @if (preset.isSystem) {<span class=\"system-badge\">SYS</span>}\n <span class=\"preset-card__spacer\"></span>\n <div class=\"preset-card__actions\">\n <button\n class=\"more-button\"\n (click)=\"onToggleMenu(preset.id); $event.stopPropagation()\"\n aria-label=\"Actions\"\n >⋯</button>\n </div>\n @if (openMenuId() === preset.id) {\n <div class=\"action-menu\" role=\"menu\" tabindex=\"-1\" (click)=\"$event.stopPropagation()\" (keydown.escape)=\"openMenuId.set(null)\">\n <button class=\"action-menu__item\" (click)=\"onStartApply(preset.id); openMenuId.set(null)\">\n <ndt-icon name=\"refresh\" />\n <span>Apply preset</span>\n </button>\n @if (!preset.isSystem) {\n <button class=\"action-menu__item\" (click)=\"onStartEdit(preset.id); openMenuId.set(null)\">\n <ndt-icon name=\"edit\" />\n <span>Edit</span>\n </button>\n <button class=\"action-menu__item\" (click)=\"onUpdatePreset(preset.id); openMenuId.set(null)\">\n <ndt-icon name=\"gear\" />\n <span>Update with current values</span>\n </button>\n }\n <button class=\"action-menu__item\" (click)=\"onExportPreset(preset.id); openMenuId.set(null)\">\n <ndt-icon name=\"export\" />\n <span>Export as JSON</span>\n </button>\n @if (!preset.isSystem) {\n <button class=\"action-menu__item action-menu__item--danger\" (click)=\"onDeletePreset(preset.id); openMenuId.set(null)\">\n <ndt-icon name=\"trash\" />\n <span>Delete</span>\n </button>\n }\n </div>\n }\n </div>\n @if (preset.description) {\n <div class=\"preset-card__row preset-card__row--meta\">\n <span class=\"preset-card__description\">{{ preset.description }}</span>\n </div>\n }\n <div class=\"preset-card__row preset-card__row--badges\">\n @if (preset.config.featureFlags.enabled.length > 0 || preset.config.featureFlags.disabled.length > 0) {\n <span class=\"badge\">{{ preset.config.featureFlags.enabled.length + preset.config.featureFlags.disabled.length }} flags</span>\n }\n @if (preset.config.permissions.granted.length > 0 || preset.config.permissions.denied.length > 0) {\n <span class=\"badge\">{{ preset.config.permissions.granted.length + preset.config.permissions.denied.length }} perms</span>\n }\n @if (preset.config.appFeatures.enabled.length > 0 || preset.config.appFeatures.disabled.length > 0) {\n <span class=\"badge\">{{ preset.config.appFeatures.enabled.length + preset.config.appFeatures.disabled.length }} features</span>\n }\n <span class=\"preset-card__date\">{{ formatDate(preset.updatedAt) }}</span>\n </div>\n @if (expandedPresetId() === preset.id) {\n <div class=\"preset-card__details\">\n @if (preset.config.featureFlags.enabled.length > 0 || preset.config.featureFlags.disabled.length > 0) {\n <div class=\"details-section\">\n <span class=\"details-section__title\">Feature Flags</span>\n <div class=\"details-section__items\">\n @for (id of preset.config.featureFlags.enabled; track id) {\n <span class=\"detail-badge detail-badge--on\">{{ id }}: ON</span>\n }\n @for (id of preset.config.featureFlags.disabled; track id) {\n <span class=\"detail-badge detail-badge--off\">{{ id }}: OFF</span>\n }\n </div>\n </div>\n }\n @if (preset.config.permissions.granted.length > 0 || preset.config.permissions.denied.length > 0) {\n <div class=\"details-section\">\n <span class=\"details-section__title\">Permissions</span>\n <div class=\"details-section__items\">\n @for (id of preset.config.permissions.granted; track id) {\n <span class=\"detail-badge detail-badge--on\">{{ id }}: GRANTED</span>\n }\n @for (id of preset.config.permissions.denied; track id) {\n <span class=\"detail-badge detail-badge--off\">{{ id }}: DENIED</span>\n }\n </div>\n </div>\n }\n @if (preset.config.appFeatures.enabled.length > 0 || preset.config.appFeatures.disabled.length > 0) {\n <div class=\"details-section\">\n <span class=\"details-section__title\">App Features</span>\n <div class=\"details-section__items\">\n @for (id of preset.config.appFeatures.enabled; track id) {\n <span class=\"detail-badge detail-badge--on\">{{ id }}: ON</span>\n }\n @for (id of preset.config.appFeatures.disabled; track id) {\n <span class=\"detail-badge detail-badge--off\">{{ id }}: OFF</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </ndt-toolbar-tool>\n `,\n styles: [\n `\n .container {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 0;\n }\n\n /* Toast Notification */\n .toast {\n position: absolute;\n bottom: var(--ndt-spacing-md);\n left: var(--ndt-spacing-md);\n right: var(--ndt-spacing-md);\n z-index: 10;\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-sm);\n padding: var(--ndt-spacing-sm) var(--ndt-spacing-md);\n border-radius: var(--ndt-border-radius-small);\n font-size: var(--ndt-font-size-sm);\n animation: slideUp 150ms ease-out;\n }\n\n .toast--success {\n background: rgb(34, 197, 94);\n color: white;\n }\n\n .toast--error {\n background: rgb(239, 68, 68);\n color: white;\n }\n\n .toast__icon {\n font-weight: bold;\n }\n\n @keyframes slideUp {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n /* Delete Confirmation View */\n .delete-view {\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: var(--ndt-spacing-md);\n }\n\n .delete-view__content {\n text-align: center;\n padding: var(--ndt-spacing-lg) var(--ndt-spacing-md);\n }\n\n .delete-view__icon {\n font-size: 48px;\n margin-bottom: var(--ndt-spacing-md);\n }\n\n .delete-view__title {\n margin: 0 0 var(--ndt-spacing-sm);\n font-size: var(--ndt-font-size-md);\n color: var(--ndt-text-primary);\n }\n\n .delete-view__description {\n margin: 0;\n font-size: var(--ndt-font-size-sm);\n color: var(--ndt-text-secondary);\n line-height: 1.5;\n }\n\n .delete-button {\n background: #ef4444;\n color: white;\n border: none;\n padding: var(--ndt-spacing-sm) var(--ndt-spacing-md);\n border-radius: var(--ndt-border-radius-small);\n cursor: pointer;\n font-size: var(--ndt-font-size-sm);\n font-weight: 500;\n transition: background 200ms ease-out;\n\n &:hover {\n background: #dc2626;\n }\n }\n\n .tool-header {\n position: relative;\n flex-shrink: 0;\n display: flex;\n gap: var(--ndt-spacing-sm);\n margin-bottom: var(--ndt-spacing-md);\n\n ndt-input {\n flex: 1;\n }\n\n ndt-button {\n flex-shrink: 0;\n }\n }\n\n .empty {\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-md);\n flex: 1;\n min-height: 0;\n justify-content: center;\n align-items: center;\n border: 1px solid var(--ndt-border-subtle);\n border-radius: var(--ndt-border-radius-medium);\n padding: var(--ndt-spacing-md);\n background: transparent;\n color: var(--ndt-text-muted);\n text-align: center;\n\n p {\n margin: 0;\n }\n\n .hint {\n font-size: var(--ndt-font-size-xs);\n }\n }\n\n .preset-list {\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-xs);\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding-right: var(--ndt-spacing-xs);\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n &::-webkit-scrollbar-track {\n background: var(--ndt-background-secondary);\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: var(--ndt-border-primary);\n border-radius: 4px;\n\n &:hover {\n background: var(--ndt-hover-bg);\n }\n }\n\n scrollbar-width: thin;\n scrollbar-color: var(--ndt-border-primary)\n var(--ndt-background-secondary);\n }\n\n .preset-card {\n background: var(--ndt-background-secondary);\n padding: 6px var(--ndt-spacing-sm);\n border-radius: var(--ndt-border-radius-medium);\n display: flex;\n flex-direction: column;\n gap: 2px;\n position: relative;\n }\n\n .preset-card__header {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: nowrap;\n }\n\n .preset-card__row {\n display: flex;\n align-items: center;\n gap: 6px;\n min-height: 18px;\n }\n\n .preset-card__row--meta {\n padding-left: 36px;\n }\n\n .preset-card__row--badges {\n padding-left: 36px;\n gap: 4px;\n }\n\n .preset-card__name {\n font-size: var(--ndt-font-size-sm);\n font-weight: 600;\n color: var(--ndt-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preset-card__spacer {\n flex: 1;\n min-width: 8px;\n }\n\n .system-badge {\n font-size: 8px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n padding: 1px 4px;\n border-radius: 3px;\n background: var(--ndt-border-primary);\n color: var(--ndt-text-muted);\n flex-shrink: 0;\n }\n\n .favorite-button {\n background: transparent;\n border: none;\n cursor: pointer;\n font-size: 12px;\n color: var(--ndt-text-muted);\n padding: 0;\n line-height: 1;\n transition: color 150ms ease-out;\n flex-shrink: 0;\n }\n\n .favorite-button:hover {\n color: #f59e0b;\n }\n\n .favorite-button--active {\n color: #f59e0b;\n }\n\n .preset-card__actions {\n display: flex;\n gap: 2px;\n flex-shrink: 0;\n }\n\n .more-button {\n appearance: none;\n background: none;\n border: none;\n cursor: pointer;\n margin: 0;\n padding: 4px;\n border-radius: var(--ndt-border-radius-small);\n color: var(--ndt-text-muted);\n display: flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n opacity: 0.5;\n transition: opacity 150ms ease-out, color 150ms ease-out, background 150ms ease-out;\n line-height: 1;\n font-size: 14px;\n font-weight: bold;\n position: relative;\n\n &:hover {\n background: var(--ndt-hover-bg);\n color: var(--ndt-text-primary);\n opacity: 1;\n }\n }\n\n .action-menu {\n position: absolute;\n top: 28px;\n right: var(--ndt-spacing-sm);\n background: var(--ndt-bg-primary);\n border: 1px solid var(--ndt-border-primary);\n border-radius: var(--ndt-border-radius-medium);\n box-shadow: var(--ndt-shadow-tooltip);\n z-index: 20;\n min-width: 180px;\n padding: 4px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .action-menu__item {\n appearance: none;\n background: none;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 10px;\n border-radius: var(--ndt-border-radius-small);\n color: var(--ndt-text-primary);\n font-size: var(--ndt-font-size-xs);\n transition: background 150ms ease-out;\n white-space: nowrap;\n\n &:hover {\n background: var(--ndt-hover-bg);\n }\n\n ndt-icon {\n display: block;\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n color: var(--ndt-text-muted);\n }\n }\n\n .action-menu__item--danger {\n color: #ef4444;\n\n ndt-icon {\n color: #ef4444;\n }\n\n &:hover {\n background: rgba(239, 68, 68, 0.1);\n }\n }\n\n .expand-toggle {\n appearance: none;\n background: none;\n border: none;\n cursor: pointer;\n padding: 0 4px;\n margin-right: 2px;\n font-size: 10px;\n color: var(--ndt-text-muted);\n line-height: 1;\n opacity: 0.6;\n transition: opacity 150ms ease-out;\n flex-shrink: 0;\n\n &:hover {\n opacity: 1;\n }\n }\n\n .preset-card__details {\n padding: var(--ndt-spacing-sm) var(--ndt-spacing-sm) var(--ndt-spacing-xs);\n margin-top: 2px;\n border-top: 1px solid var(--ndt-border-primary);\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-xs);\n }\n\n .details-section__title {\n font-size: 10px;\n font-weight: 600;\n color: var(--ndt-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .details-section__items {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-top: 2px;\n }\n\n .detail-badge {\n font-size: 10px;\n padding: 1px 6px;\n border-radius: var(--ndt-border-radius-small);\n white-space: nowrap;\n }\n\n .detail-badge--on {\n background: rgba(34, 197, 94, 0.1);\n color: rgb(34, 197, 94);\n }\n\n .detail-badge--off {\n background: rgba(239, 68, 68, 0.1);\n color: rgb(239, 68, 68);\n }\n\n .preset-card__description {\n font-size: 11px;\n color: var(--ndt-text-secondary);\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preset-card__date {\n font-size: 10px;\n color: var(--ndt-text-muted);\n margin-left: auto;\n flex-shrink: 0;\n }\n\n .badge {\n background: rgba(99, 102, 241, 0.15);\n color: rgb(99, 102, 241);\n padding: 1px 6px;\n border-radius: 8px;\n font-size: 10px;\n font-weight: 500;\n white-space: nowrap;\n }\n\n .badge--lang {\n background: rgba(34, 197, 94, 0.15);\n color: rgb(34, 197, 94);\n }\n\n .preset-form,\n .import-view,\n .apply-view {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-sm);\n padding: var(--ndt-spacing-sm);\n\n ndt-input {\n width: 100%;\n }\n }\n\n .form-title {\n margin: 0;\n font-size: var(--ndt-font-size-sm);\n font-weight: 600;\n color: var(--ndt-text-primary);\n }\n\n .form-hint {\n margin: 0;\n font-size: 11px;\n color: var(--ndt-text-muted);\n line-height: 1.3;\n }\n\n .form-field {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .field-error {\n color: #ef4444;\n font-size: 11px;\n }\n\n .preset-summary {\n background: var(--ndt-background-secondary);\n padding: var(--ndt-spacing-sm);\n border-radius: var(--ndt-border-radius-medium);\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-xs);\n\n h4 {\n margin: 0;\n font-size: 11px;\n font-weight: 500;\n color: var(--ndt-text-secondary);\n }\n }\n\n .category-section {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .checkbox-option {\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-xs);\n cursor: pointer;\n color: var(--ndt-text-primary);\n font-size: var(--ndt-font-size-sm);\n padding: 2px 0;\n\n input[type='checkbox'] {\n cursor: pointer;\n width: 14px;\n height: 14px;\n accent-color: rgb(99, 102, 241);\n border-radius: 3px;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n }\n\n &:has(input:disabled) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n }\n\n .forced-items-list {\n list-style: none;\n padding: 0;\n margin: 0 0 0 20px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n font-size: 11px;\n max-height: 100px;\n overflow-y: auto;\n\n li {\n background: rgba(99, 102, 241, 0.05);\n border-radius: 3px;\n border-left: 2px solid rgba(99, 102, 241, 0.3);\n }\n\n .item-checkbox {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 3px 6px;\n cursor: pointer;\n gap: 6px;\n\n input[type='checkbox'] {\n cursor: pointer;\n width: 12px;\n height: 12px;\n accent-color: rgb(99, 102, 241);\n flex-shrink: 0;\n }\n\n &:hover {\n background: rgba(99, 102, 241, 0.08);\n }\n }\n\n .item-name {\n color: var(--ndt-text-primary);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .item-status {\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n font-size: 9px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n flex-shrink: 0;\n\n &.enabled {\n background: rgba(34, 197, 94, 0.15);\n color: rgb(34, 197, 94);\n }\n\n &.disabled {\n background: rgba(239, 68, 68, 0.15);\n color: rgb(239, 68, 68);\n }\n }\n }\n\n .form-actions {\n display: flex;\n justify-content: flex-end;\n gap: var(--ndt-spacing-sm);\n margin-top: auto;\n padding-top: var(--ndt-spacing-sm);\n }\n\n /* Config Preview (Edit Mode) */\n .config-preview {\n background: var(--ndt-background-secondary);\n padding: var(--ndt-spacing-sm);\n border-radius: var(--ndt-border-radius-medium);\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-xs);\n\n h4 {\n margin: 0;\n font-size: 11px;\n font-weight: 500;\n color: var(--ndt-text-secondary);\n }\n }\n\n .config-category {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .config-category__title {\n font-size: 10px;\n color: var(--ndt-text-muted);\n font-weight: 500;\n }\n\n .config-items {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n\n .config-item {\n font-size: 10px;\n padding: 1px 6px;\n border-radius: 3px;\n background: var(--ndt-background-primary);\n color: var(--ndt-text-secondary);\n }\n\n .config-item--on {\n background: rgba(34, 197, 94, 0.1);\n color: rgb(34, 197, 94);\n }\n\n .config-item--off {\n background: rgba(239, 68, 68, 0.1);\n color: rgb(239, 68, 68);\n }\n\n .replace-config-button {\n background: transparent;\n border: 1px dashed var(--ndt-border-primary);\n padding: 6px var(--ndt-spacing-sm);\n border-radius: var(--ndt-border-radius-small);\n color: var(--ndt-text-secondary);\n cursor: pointer;\n font-size: 11px;\n transition: all 150ms ease-out;\n\n &:hover {\n background: var(--ndt-hover-bg);\n border-color: rgb(99, 102, 241);\n color: rgb(99, 102, 241);\n }\n }\n\n /* Import View */\n .drop-zone {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: var(--ndt-spacing-md);\n border: 2px dashed var(--ndt-border-primary);\n border-radius: var(--ndt-border-radius-medium);\n cursor: pointer;\n transition: all 150ms ease-out;\n }\n\n .drop-zone:hover,\n .drop-zone--active {\n border-color: rgb(99, 102, 241);\n background: rgba(99, 102, 241, 0.05);\n }\n\n .drop-zone__icon {\n font-size: 24px;\n }\n\n .drop-zone__text {\n font-size: var(--ndt-font-size-sm);\n color: var(--ndt-text-primary);\n }\n\n .drop-zone__hint {\n font-size: 11px;\n color: var(--ndt-text-muted);\n }\n\n .divider {\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-sm);\n color: var(--ndt-text-muted);\n font-size: 10px;\n\n &::before,\n &::after {\n content: '';\n flex: 1;\n height: 1px;\n background: var(--ndt-border-primary);\n }\n }\n\n .json-textarea {\n width: 100%;\n min-height: 80px;\n padding: var(--ndt-spacing-xs);\n border: 1px solid var(--ndt-border-primary);\n border-radius: var(--ndt-border-radius-small);\n background: var(--ndt-background-secondary);\n color: var(--ndt-text-primary);\n font-family: monospace;\n font-size: 11px;\n resize: vertical;\n\n &:focus {\n outline: none;\n border-color: rgb(99, 102, 241);\n }\n\n &::placeholder {\n color: var(--ndt-text-muted);\n }\n }\n\n /* Apply View */\n .apply-description {\n margin: 0;\n font-size: 11px;\n color: var(--ndt-text-secondary);\n }\n\n .apply-categories {\n display: flex;\n flex-direction: column;\n gap: var(--ndt-spacing-xs);\n }\n\n .apply-category {\n background: var(--ndt-background-secondary);\n border-radius: var(--ndt-border-radius-small);\n overflow: hidden;\n transition: opacity 150ms ease-out;\n }\n\n .apply-category--disabled {\n opacity: 0.5;\n }\n\n .apply-category__header {\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-xs);\n padding: 6px var(--ndt-spacing-sm);\n cursor: pointer;\n font-size: var(--ndt-font-size-sm);\n color: var(--ndt-text-primary);\n font-weight: 500;\n\n input[type='checkbox'] {\n cursor: pointer;\n width: 14px;\n height: 14px;\n accent-color: rgb(99, 102, 241);\n }\n }\n\n .apply-diff {\n padding: 0 var(--ndt-spacing-sm) 6px;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .diff-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n padding: 3px 6px;\n background: var(--ndt-background-primary);\n border-radius: 3px;\n }\n\n .diff-item__name {\n flex: 1;\n color: var(--ndt-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .diff-item__arrow {\n color: var(--ndt-text-muted);\n font-size: 10px;\n }\n\n .diff-item__value {\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n font-size: 9px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n }\n\n .diff-item__value--on {\n background: rgba(34, 197, 94, 0.15);\n color: rgb(34, 197, 94);\n }\n\n .diff-item__value--off {\n background: rgba(239, 68, 68, 0.15);\n color: rgb(239, 68, 68);\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarPresetsToolComponent {\n @HostListener('document:click')\n onDocumentClick(): void {\n this.openMenuId.set(null);\n }\n\n // Injects\n private readonly presetsService = inject(ToolbarInternalPresetsService);\n private readonly featureFlagsService = inject(\n ToolbarInternalFeatureFlagService\n );\n private readonly permissionsService = inject(\n ToolbarInternalPermissionsService\n );\n private readonly appFeaturesService = inject(\n ToolbarInternalAppFeaturesService\n );\n protected readonly state = inject(ToolbarStateService);\n\n // View state signals\n protected readonly viewMode = signal<ViewMode>('list');\n protected readonly searchQuery = signal<string>('');\n protected readonly expandedPresetId = signal<string | null>(null);\n protected readonly openMenuId = signal<string | null>(null);\n\n // Create form signals\n protected readonly presetName = signal<string>('');\n protected readonly presetDescription = signal<string>('');\n protected readonly includeFeatureFlags = signal<boolean>(true);\n protected readonly includePermissions = signal<boolean>(true);\n protected readonly includeAppFeatures = signal<boolean>(true);\n protected readonly selectedFlagIds = signal<Set<string>>(new Set());\n protected readonly selectedPermissionIds = signal<Set<string>>(new Set());\n protected readonly selectedFeatureIds = signal<Set<string>>(new Set());\n\n // Edit mode signals\n protected readonly editingPresetId = signal<string | null>(null);\n protected readonly editName = signal<string>('');\n protected readonly editDescription = signal<string>('');\n\n // Import mode signals\n protected readonly importJson = signal<string>('');\n protected readonly importError = signal<string | null>(null);\n protected readonly isDragOver = signal<boolean>(false);\n\n // Apply mode signals\n protected readonly applyingPresetId = signal<string | null>(null);\n protected readonly applyFeatureFlags = signal<boolean>(true);\n protected readonly applyPermissions = signal<boolean>(true);\n protected readonly applyAppFeatures = signal<boolean>(true);\n // Delete confirmation signals\n protected readonly deletePresetId = signal<string | null>(null);\n\n // Toast signals\n protected readonly toastMessage = signal<string | null>(null);\n protected readonly toastType = signal<ToastType>('success');\n\n // Validation signals\n protected readonly nameError = signal<string | null>(null);\n\n // Auto-dismiss toast effect\n private toastTimeout: ReturnType<typeof setTimeout> | null = null;\n\n constructor() {\n effect(() => {\n const message = this.toastMessage();\n if (message) {\n if (this.toastTimeout) {\n clearTimeout(this.toastTimeout);\n }\n this.toastTimeout = setTimeout(() => {\n this.toastMessage.set(null);\n }, 3000);\n }\n });\n }\n\n // Computed values\n protected readonly presets = this.presetsService.presets;\n\n protected readonly filteredPresets = computed(() => {\n const query = this.searchQuery().toLowerCase();\n return this.presets().filter(\n (preset) =>\n preset.name.toLowerCase().includes(query) ||\n preset.description?.toLowerCase().includes(query)\n );\n });\n\n protected readonly sortedPresets = computed(() => {\n const presets = this.filteredPresets();\n return [...presets].sort((a, b) => {\n if (a.isFavorite && !b.isFavorite) return -1;\n if (!a.isFavorite && b.isFavorite) return 1;\n return 0;\n });\n });\n\n protected readonly hasNoPresets = computed(\n () => this.presets().length === 0\n );\n\n protected readonly hasNoFilteredPresets = computed(\n () => this.filteredPresets().length === 0\n );\n\n protected readonly editingPreset = computed(() => {\n const id = this.editingPresetId();\n if (!id) return null;\n return this.presets().find((p) => p.id === id) || null;\n });\n\n protected readonly applyingPreset = computed(() => {\n const id = this.applyingPresetId();\n if (!id) return null;\n return this.presets().find((p) => p.id === id) || null;\n });\n\n protected readonly deletePresetName = computed(() => {\n const id = this.deletePresetId();\n if (!id) return '';\n const preset = this.presets().find((p) => p.id === id);\n return preset?.name || '';\n });\n\n // Tool availability (based on config)\n protected readonly isFeatureFlagsEnabled = computed(\n () => this.state.config().showFeatureFlagsTool ?? true\n );\n protected readonly isPermissionsEnabled = computed(\n () => this.state.config().showPermissionsTool ?? true\n );\n protected readonly isAppFeaturesEnabled = computed(\n () => this.state.config().showAppFeaturesTool ?? true\n );\n // Forced items details\n protected readonly forcedFlags = computed(() => {\n return this.featureFlagsService.flags().filter((flag) => flag.isForced);\n });\n protected readonly forcedPermissions = computed(() => {\n return this.permissionsService.permissions().filter((perm) => perm.isForced);\n });\n protected readonly forcedAppFeatures = computed(() => {\n return this.appFeaturesService.features().filter((feat) => feat.isForced);\n });\n\n // Other properties\n protected readonly options: ToolbarWindowOptions = {\n title: 'Presets',\n description: 'Save and load toolbar configurations',\n isClosable: true,\n size: 'tall',\n id: 'ndt-presets',\n };\n\n // Toast helper\n private showToast(message: string, type: ToastType = 'success'): void {\n this.toastMessage.set(message);\n this.toastType.set(type);\n }\n\n // View mode switching\n onSearchChange(query: string): void {\n this.searchQuery.set(query);\n }\n\n onToggleExpand(presetId: string): void {\n this.expandedPresetId.update((current) =>\n current === presetId ? null : presetId\n );\n }\n\n onToggleMenu(presetId: string): void {\n this.openMenuId.update((current) =>\n current === presetId ? null : presetId\n );\n }\n\n onSwitchToListMode(): void {\n this.viewMode.set('list');\n this.nameError.set(null);\n this.importError.set(null);\n this.deletePresetId.set(null);\n }\n\n onSwitchToCreateMode(): void {\n this.viewMode.set('create');\n this.presetName.set('');\n this.presetDescription.set('');\n this.nameError.set(null);\n // Reset checkboxes - only enable categories that have forced items\n this.includeFeatureFlags.set(this.getCurrentFlagsCount() > 0);\n this.includePermissions.set(this.getCurrentPermissionsCount() > 0);\n this.includeAppFeatures.set(this.getCurrentAppFeaturesCount() > 0);\n\n // Initialize selected items - select all by default\n this.selectedFlagIds.set(new Set(this.forcedFlags().map((f) => f.id)));\n this.selectedPermissionIds.set(\n new Set(this.forcedPermissions().map((p) => p.id))\n );\n this.selectedFeatureIds.set(\n new Set(this.forcedAppFeatures().map((f) => f.id))\n );\n }\n\n onSwitchToImportMode(): void {\n this.viewMode.set('import');\n this.importJson.set('');\n this.importError.set(null);\n this.isDragOver.set(false);\n }\n\n // Create preset\n onPresetNameChange(value: string): void {\n this.presetName.set(value);\n if (value.trim()) {\n this.nameError.set(null);\n }\n }\n\n onSavePreset(event: Event): void {\n event.preventDefault();\n const name = this.presetName().trim();\n\n if (!name) {\n this.nameError.set('Name is required');\n return;\n }\n\n // Check for duplicate names\n const existingPreset = this.presets().find(\n (p) => p.name.toLowerCase() === name.toLowerCase()\n );\n if (existingPreset) {\n this.nameError.set('A preset with this name already exists');\n return;\n }\n\n this.presetsService.saveCurrentAsPreset(\n name,\n this.presetDescription(),\n {\n includeFeatureFlags: this.includeFeatureFlags(),\n includePermissions: this.includePermissions(),\n includeAppFeatures: this.includeAppFeatures(),\n selectedFlagIds: Array.from(this.selectedFlagIds()),\n selectedPermissionIds: Array.from(this.selectedPermissionIds()),\n selectedFeatureIds: Array.from(this.selectedFeatureIds()),\n }\n );\n\n this.showToast('Preset created successfully');\n this.onSwitchToListMode();\n }\n\n // Edit preset\n onStartEdit(presetId: string): void {\n const preset = this.presets().find((p) => p.id === presetId);\n if (!preset) return;\n\n this.editingPresetId.set(presetId);\n this.editName.set(preset.name);\n this.editDescription.set(preset.description || '');\n this.nameError.set(null);\n this.viewMode.set('edit');\n }\n\n onEditNameChange(value: string): void {\n this.editName.set(value);\n if (value.trim()) {\n this.nameError.set(null);\n }\n }\n\n onSaveEdit(event: Event): void {\n event.preventDefault();\n const name = this.editName().trim();\n const presetId = this.editingPresetId();\n\n if (!name) {\n this.nameError.set('Name is required');\n return;\n }\n\n if (!presetId) return;\n\n // Check for duplicate names (excluding current preset)\n const existingPreset = this.presets().find(\n (p) => p.id !== presetId && p.name.toLowerCase() === name.toLowerCase()\n );\n if (existingPreset) {\n this.nameError.set('A preset with this name already exists');\n return;\n }\n\n this.presetsService.updatePresetMetadata(\n presetId,\n name,\n this.editDescription()\n );\n\n this.showToast('Preset updated successfully');\n this.onSwitchToListMode();\n }\n\n onReplaceConfig(): void {\n const presetId = this.editingPresetId();\n if (!presetId) return;\n\n this.presetsService.updatePreset(presetId);\n this.showToast('Configuration replaced with current state');\n }\n\n // Import preset\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(true);\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n }\n\n onFileDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.processFile(files[0]);\n }\n }\n\n onFileSelect(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.processFile(input.files[0]);\n }\n }\n\n private processFile(file: File): void {\n if (!file.name.endsWith('.json')) {\n this.importError.set('Please select a .json file');\n return;\n }\n\n const reader = new FileReader();\n reader.onload = (e) => {\n const content = e.target?.result as string;\n this.importJson.set(content);\n this.importError.set(null);\n };\n reader.onerror = () => {\n this.importError.set('Failed to read file');\n };\n reader.readAsText(file);\n }\n\n onImportJsonChange(event: Event): void {\n const textarea = event.target as HTMLTextAreaElement;\n this.importJson.set(textarea.value);\n this.importError.set(null);\n }\n\n onImportPreset(): void {\n const json = this.importJson().trim();\n\n if (!json) {\n this.importError.set('Please provide JSON content');\n return;\n }\n\n try {\n const parsed = JSON.parse(json) as ToolbarPreset;\n\n // Validate required fields\n if (!parsed.name) {\n this.importError.set('Preset must have a name');\n return;\n }\n if (!parsed.config) {\n this.importError.set('Preset must have a config object');\n return;\n }\n\n this.presetsService.addPreset(parsed);\n this.showToast('Preset imported successfully');\n this.onSwitchToListMode();\n } catch {\n this.importError.set('Invalid JSON format');\n }\n }\n\n // Apply preset (partial)\n onStartApply(presetId: string): void {\n this.applyingPresetId.set(presetId);\n this.applyFeatureFlags.set(true);\n this.applyPermissions.set(true);\n this.applyAppFeatures.set(true);\n this.viewMode.set('apply');\n }\n\n onConfirmPartialApply(): void {\n const presetId = this.applyingPresetId();\n if (!presetId) return;\n\n this.presetsService.partialApplyPreset(presetId, {\n applyFeatureFlags: this.applyFeatureFlags(),\n applyPermissions: this.applyPermissions(),\n applyAppFeatures: this.applyAppFeatures(),\n });\n\n this.showToast('Preset applied successfully');\n this.onSwitchToListMode();\n }\n\n // Update preset (with current state)\n onUpdatePreset(presetId: string): void {\n this.presetsService.updatePreset(presetId);\n this.showToast('Preset updated with current state');\n }\n\n // Export preset\n onExportPreset(presetId: string): void {\n const preset = this.presets().find((p) => p.id === presetId);\n if (!preset) return;\n\n const json = JSON.stringify(preset, null, 2);\n const blob = new Blob([json], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `preset-${preset.name.toLowerCase().replace(/\\s+/g, '-')}.json`;\n link.click();\n URL.revokeObjectURL(url);\n\n this.showToast('Preset exported');\n }\n\n // Delete preset\n onDeletePreset(presetId: string): void {\n this.deletePresetId.set(presetId);\n this.viewMode.set('delete');\n }\n\n onConfirmDelete(): void {\n const presetId = this.deletePresetId();\n if (presetId) {\n this.presetsService.deletePreset(presetId);\n this.showToast('Preset deleted');\n }\n this.deletePresetId.set(null);\n this.viewMode.set('list');\n }\n\n // Favorites\n onToggleFavorite(presetId: string): void {\n this.presetsService.toggleFavorite(presetId);\n }\n\n // Protected methods\n protected getCurrentFlagsCount(): number {\n const state = this.featureFlagsService.getCurrentForcedState();\n return state.enabled.length + state.disabled.length;\n }\n\n protected getCurrentPermissionsCount(): number {\n const state = this.permissionsService.getCurrentForcedState();\n return state.granted.length + state.denied.length;\n }\n\n protected getCurrentAppFeaturesCount(): number {\n const state = this.appFeaturesService.getCurrentForcedState();\n return state.enabled.length + state.disabled.length;\n }\n\n protected formatDate(isoString: string): string {\n return new Date(isoString).toLocaleDateString();\n }\n\n protected getPresetTooltip(preset: ToolbarPreset): string {\n const lines: string[] = [];\n\n // Feature Flags\n const flagsEnabled = preset.config.featureFlags.enabled;\n const flagsDisabled = preset.config.featureFlags.disabled;\n if (flagsEnabled.length > 0 || flagsDisabled.length > 0) {\n lines.push('Feature Flags:');\n flagsEnabled.forEach(id => lines.push(` ✓ ${id}: ON`));\n flagsDisabled.forEach(id => lines.push(` ✗ ${id}: OFF`));\n }\n\n // Permissions\n const permsGranted = preset.config.permissions.granted;\n const permsDenied = preset.config.permissions.denied;\n if (permsGranted.length > 0 || permsDenied.length > 0) {\n if (lines.length > 0) lines.push('');\n lines.push('Permissions:');\n permsGranted.forEach(id => lines.push(` ✓ ${id}: GRANTED`));\n permsDenied.forEach(id => lines.push(` ✗ ${id}: DENIED`));\n }\n\n // App Features\n const featuresEnabled = preset.config.appFeatures.enabled;\n const featuresDisabled = preset.config.appFeatures.disabled;\n if (featuresEnabled.length > 0 || featuresDisabled.length > 0) {\n if (lines.length > 0) lines.push('');\n lines.push('App Features:');\n featuresEnabled.forEach(id => lines.push(` ✓ ${id}: ON`));\n featuresDisabled.forEach(id => lines.push(` ✗ ${id}: OFF`));\n }\n\n return lines.length > 0 ? lines.join('\\n') : 'No configuration';\n }\n\n protected toggleItemSelection(\n signal: typeof this.selectedFlagIds,\n itemId: string\n ): void {\n const current = new Set(signal());\n if (current.has(itemId)) {\n current.delete(itemId);\n } else {\n current.add(itemId);\n }\n signal.set(current);\n }\n\n protected isItemSelected(selectedSet: Set<string>, itemId: string): boolean {\n return selectedSet.has(itemId);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent } from 'rxjs';\nimport { filter, throttleTime } from 'rxjs/operators';\nimport { ToolbarStateService } from './toolbar-state.service';\nimport { ToolbarConfig } from './models/toolbar-config.interface';\nimport { ToolbarAppFeaturesToolComponent } from './tools/app-features-tool/app-features-tool.component';\nimport { ToolbarFeatureFlagsToolComponent } from './tools/feature-flags-tool/feature-flags-tool.component';\nimport { ToolbarHomeToolComponent } from './tools/home-tool/home-tool.component';\nimport { SettingsService } from './tools/home-tool/settings.service';\nimport { ToolbarI18nToolComponent } from './tools/i18n-tool/i18n-tool.component';\nimport { ToolbarPermissionsToolComponent } from './tools/permissions-tool/permissions-tool.component';\nimport { ToolbarPresetsToolComponent } from './tools/presets-tool/presets-tool.component';\n\n@Component({\n standalone: true,\n selector: 'ndt-toolbar',\n styleUrls: ['./toolbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n imports: [\n ToolbarHomeToolComponent,\n ToolbarI18nToolComponent,\n ToolbarFeatureFlagsToolComponent,\n ToolbarAppFeaturesToolComponent,\n ToolbarPermissionsToolComponent,\n ToolbarPresetsToolComponent,\n ],\n template: `\n @if ((config().enabled ?? true) && !state.isCompletelyHidden()) {\n <div\n aria-label=\"Developer tools\"\n role=\"toolbar\"\n class=\"ndt-toolbar\"\n [class.ndt-toolbar--top]=\"state.position() === 'top'\"\n [class.ndt-toolbar--right]=\"state.position() === 'right'\"\n [class.ndt-toolbar--bottom]=\"state.position() === 'bottom'\"\n [class.ndt-toolbar--left]=\"state.position() === 'left'\"\n [class.ndt-toolbar--visible]=\"state.isVisible()\"\n [attr.data-theme]=\"state.theme()\"\n (mouseenter)=\"onMouseEnter()\"\n >\n <ndt-home-tool />\n <ng-content />\n @if (config().showI18nTool ?? false) {\n <ndt-i18n-tool />\n }\n @if (config().showPresetsTool ?? false) {\n <ndt-presets-tool />\n }\n @if (config().showAppFeaturesTool ?? false) {\n <ndt-app-features-tool />\n }\n @if (config().showPermissionsTool ?? false) {\n <ndt-permissions-tool />\n }\n @if (config().showFeatureFlagsTool ?? false) {\n <ndt-feature-flags-tool />\n }\n </div>\n }\n `,\n})\nexport class ToolbarComponent implements OnInit, OnDestroy {\n private document = inject(DOCUMENT);\n state = inject(ToolbarStateService);\n destroyRef = inject(DestroyRef);\n settingsService = inject(SettingsService);\n\n config = input<ToolbarConfig>({});\n private globalStyleElement?: HTMLStyleElement;\n\n private keyboardShortcut = fromEvent<KeyboardEvent>(window, 'keydown')\n .pipe(\n filter((event) => event.ctrlKey && event.shiftKey && event.key === 'D'),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => this.toggleDevTools());\n\n private hideShortcut = fromEvent<KeyboardEvent>(window, 'keydown')\n .pipe(\n filter(\n (event) =>\n (event.metaKey || event.ctrlKey) &&\n !event.shiftKey &&\n event.key === '.'\n ),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((event) => {\n event.preventDefault();\n this.state.toggleCompletelyHidden();\n });\n\n private mouseLeave = fromEvent<MouseEvent>(document, 'mouseleave')\n .pipe(throttleTime(3000), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.onMouseLeave());\n\n constructor() {\n // Update state service when config changes\n effect(() => {\n this.state.setConfig(this.config());\n });\n }\n\n ngOnInit(): void {\n this.injectGlobalStyles();\n // Always use light theme\n this.state.setTheme('light');\n }\n\n ngOnDestroy(): void {\n this.globalStyleElement?.remove();\n }\n\n onMouseEnter(): void {\n this.state.setVisibility(true);\n }\n\n onMouseLeave(): void {\n setTimeout(() => this.state.setVisibility(false), this.state.delay());\n }\n\n private toggleDevTools(): void {\n this.state.setVisibility(!this.state.isVisible());\n }\n\n /**\n * Injects global theme styles into the document head to make CSS variables\n * available to CDK overlays and other elements rendered outside Shadow DOM.\n * Uses light theme only.\n */\n private injectGlobalStyles(): void {\n // Check if styles are already injected (e.g., by another toolbar instance)\n if (this.document.getElementById('ndt-global-theme')) {\n return;\n }\n\n this.globalStyleElement = this.document.createElement('style');\n this.globalStyleElement.id = 'ndt-global-theme';\n this.globalStyleElement.textContent = `\n /* Global Light Theme for ngx-dev-toolbar overlays */\n :where(ndt-toolbar),\n .ndt-overlay-panel,\n .cdk-overlay-container {\n --ndt-border-radius-small: 4px;\n --ndt-border-radius-medium: 8px;\n --ndt-border-radius-large: 12px;\n --ndt-transition-default: all 0.2s ease-out;\n --ndt-transition-smooth: all 0.2s ease-in-out;\n --ndt-spacing-xs: 4px;\n --ndt-spacing-sm: 6px;\n --ndt-spacing-md: 12px;\n --ndt-spacing-lg: 16px;\n --ndt-window-padding: 16px;\n --ndt-font-size-xxs: 0.65rem;\n --ndt-font-size-xs: 0.75rem;\n --ndt-font-size-sm: 0.875rem;\n --ndt-font-size-md: 1rem;\n --ndt-font-size-lg: 1.25rem;\n --ndt-font-size-xl: 2rem;\n --ndt-primary: #df30d4;\n --ndt-primary-rgb: 223, 48, 212;\n --ndt-text-on-primary: rgb(255, 255, 255);\n --ndt-bg-primary: rgb(255, 255, 255);\n --ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, 0.88) 100%);\n --ndt-text-primary: rgb(17, 24, 39);\n --ndt-text-secondary: rgb(55, 65, 81);\n --ndt-text-muted: rgb(107, 114, 128);\n --ndt-border-primary: #e5e7eb;\n --ndt-border-subtle: rgba(17, 24, 39, 0.1);\n --ndt-hover-bg: rgba(17, 24, 39, 0.05);\n --ndt-hover-danger: rgb(239, 68, 68);\n --ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, 0.2);\n --ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, 0.05), 0 4px 8px rgba(107, 114, 128, 0.15), 0 2px 4px rgba(107, 114, 128, 0.1);\n --ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, 0.1), 0px 1px 2px 0px rgba(156, 163, 175, 0.12), 0px 4px 4px 0px rgba(156, 163, 175, 0.1), 0px 10px 6px 0px rgba(156, 163, 175, 0.08), 0px 17px 7px 0px rgba(156, 163, 175, 0.05), 0px 26px 7px 0px rgba(156, 163, 175, 0.02);\n --ndt-background-secondary: var(--ndt-bg-primary);\n --ndt-background-hover: var(--ndt-hover-bg);\n --ndt-border-color: var(--ndt-border-primary);\n --ndt-tooltip-bg: rgb(17, 24, 39);\n --ndt-tooltip-text: rgb(255, 255, 255);\n --ndt-note-background: rgb(219, 234, 254);\n --ndt-note-border: rgba(37, 99, 235, 0.2);\n --ndt-warning-background: rgb(254, 249, 195);\n --ndt-warning-border: rgba(202, 138, 4, 0.2);\n --ndt-error-background: rgb(254, 226, 226);\n --ndt-error-border: rgba(220, 38, 38, 0.2);\n }\n .ndt-overlay-panel {\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif;\n box-sizing: border-box;\n isolation: isolate;\n z-index: 999999999;\n }\n .ndt-overlay-panel *, .ndt-overlay-panel *::before, .ndt-overlay-panel *::after {\n box-sizing: border-box;\n }\n .cdk-overlay-backdrop.ndt-overlay-backdrop {\n background: transparent;\n }\n `;\n\n this.document.head.appendChild(this.globalStyleElement);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ToolbarService } from '../../models/toolbar.interface';\nimport { ToolbarInternalFeatureFlagService } from './feature-flags-internal.service';\nimport { ToolbarFlag } from './feature-flags.models';\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarFeatureFlagService\n implements ToolbarService<ToolbarFlag>\n{\n private internalService = inject(ToolbarInternalFeatureFlagService);\n\n /**\n * Sets the available flags that will be displayed in the tool on the dev toolbar\n * @param flags The flags to be displayed\n */\n setAvailableOptions(flags: ToolbarFlag[]): void {\n this.internalService.setAppFlags(flags);\n }\n\n /**\n * Gets the flags that were forced/modified through the tool on the dev toolbar\n * @returns Observable of forced flags array\n */\n getForcedValues(): Observable<ToolbarFlag[]> {\n return this.internalService.getForcedFlags();\n }\n\n /**\n * Gets ALL flag values with overrides already applied.\n * Returns the complete set of flags where overridden values replace base values.\n * Each flag includes an `isForced` property indicating if it was overridden.\n *\n * This method simplifies integration by eliminating the need to manually merge\n * base flags with overrides using combineLatest.\n *\n * @returns Observable of all flags with overrides applied\n *\n * @example\n * ```typescript\n * // Get a specific flag value with overrides applied\n * this.featureFlagsService.getValues().pipe(\n * map(flags => flags.find(f => f.id === 'newFeature')),\n * map(flag => flag?.isEnabled ?? false)\n * ).subscribe(isEnabled => {\n * if (isEnabled) {\n * // Enable feature\n * }\n * });\n * ```\n */\n getValues(): Observable<ToolbarFlag[]> {\n return this.internalService.flags$;\n }\n\n /**\n * Registers a callback to persist a forced flag value back to the actual data source.\n * When set, an \"apply to source\" button appears on each forced flag in the toolbar UI.\n *\n * @param callback - Async function that receives the flag ID and its forced boolean value\n */\n setApplyToSource(callback: (id: string, value: boolean) => Promise<void>): void {\n this.internalService.setApplyToSource(callback);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ToolbarService } from '../../models/toolbar.interface';\nimport { ToolbarInternalPermissionsService } from './permissions-internal.service';\nimport { ToolbarPermission, ForcedPermissionsState } from './permissions.models';\n\n/**\n * Public service for integrating the Permissions Tool with your application.\n * Use this service to:\n * 1. Register your application's permissions with setAvailableOptions()\n * 2. Listen for toolbar permission overrides with getForcedValues()\n * 3. Apply preset permission states for testing with applyPreset()\n *\n * @example\n * ```typescript\n * constructor(private permissionsService: ToolbarPermissionsService) {\n * // Register permissions\n * this.permissionsService.setAvailableOptions([\n * { id: 'can-edit', name: 'Can Edit', isGranted: false, isForced: false }\n * ]);\n *\n * // Listen for overrides\n * this.permissionsService.getForcedValues().subscribe(forcedPermissions => {\n * // Update your app's permission state\n * });\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class ToolbarPermissionsService\n implements ToolbarService<ToolbarPermission>\n{\n private internalService = inject(ToolbarInternalPermissionsService);\n\n /**\n * Sets the available permissions that will be displayed in the toolbar tool.\n * Call this in your app initialization to register permissions.\n *\n * @param permissions Array of permissions to display in the toolbar\n *\n * @example\n * ```typescript\n * this.permissionsService.setAvailableOptions([\n * {\n * id: 'can-edit-posts',\n * name: 'Edit Posts',\n * description: 'Can edit blog posts',\n * isGranted: false,\n * isForced: false\n * }\n * ]);\n * ```\n */\n setAvailableOptions(permissions: ToolbarPermission[]): void {\n this.internalService.setAppPermissions(permissions);\n }\n\n /**\n * Gets an observable of permissions that were forced/overridden through the toolbar.\n * Subscribe to this to update your application's permission state.\n *\n * @returns Observable emitting array of forced permissions whenever changes occur\n *\n * @example\n * ```typescript\n * this.permissionsService.getForcedValues().subscribe(forcedPermissions => {\n * forcedPermissions.forEach(permission => {\n * this.updatePermission(permission.id, permission.isGranted);\n * });\n * });\n * ```\n */\n getForcedValues(): Observable<ToolbarPermission[]> {\n return this.internalService.getForcedPermissions();\n }\n\n /**\n * Gets ALL permission values with overrides already applied.\n * Returns the complete set of permissions where overridden values replace base values.\n * Each permission includes an `isForced` property indicating if it was overridden.\n *\n * This method simplifies integration by eliminating the need to manually merge\n * base permissions with overrides using combineLatest.\n *\n * @returns Observable of all permissions with overrides applied\n *\n * @example\n * ```typescript\n * // Simple permission check with overrides applied\n * this.permissionsService.getValues().pipe(\n * map(permissions => permissions.find(p => p.id === 'can-edit')),\n * map(permission => permission?.isGranted ?? false)\n * ).subscribe(canEdit => {\n * if (canEdit) {\n * // Enable edit functionality\n * }\n * });\n * ```\n */\n getValues(): Observable<ToolbarPermission[]> {\n return this.internalService.permissions$;\n }\n\n /**\n * Apply a preset permission state. Useful for automated testing scenarios.\n *\n * @param state The forced permissions state to apply\n *\n * @example\n * ```typescript\n * this.permissionsService.applyPreset({\n * granted: ['can-edit-posts'],\n * denied: ['can-delete-posts']\n * });\n * ```\n */\n applyPreset(state: ForcedPermissionsState): void {\n this.internalService.applyPresetPermissions(state);\n }\n\n /**\n * Get the current forced permission state.\n *\n * @returns Current forced permissions state\n */\n getCurrentState(): ForcedPermissionsState {\n return this.internalService.getCurrentForcedState();\n }\n\n /**\n * Registers a callback to persist a forced permission value back to the actual data source.\n * When set, an \"apply to source\" button appears on each forced permission in the toolbar UI.\n *\n * @param callback - Async function that receives the permission ID and its forced boolean value\n */\n setApplyToSource(callback: (id: string, value: boolean) => Promise<void>): void {\n this.internalService.setApplyToSource(callback);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ToolbarService } from '../../models/toolbar.interface';\nimport { ToolbarInternalAppFeaturesService } from './app-features-internal.service';\nimport { ToolbarAppFeature, ForcedAppFeaturesState } from './app-features.models';\n\n/**\n * Public service for managing app features in the dev toolbar.\n *\n * This service implements the ToolbarService interface and provides methods for:\n * - Configuring available product features\n * - Retrieving forced feature overrides\n * - Applying preset feature configurations\n * - Exporting current forced state for presets\n *\n * @example\n * ```typescript\n * import { ToolbarAppFeaturesService } from 'ngx-dev-toolbar';\n *\n * @Component({...})\n * export class AppComponent implements OnInit {\n * private appFeaturesService = inject(ToolbarAppFeaturesService);\n *\n * ngOnInit() {\n * // Configure available features based on current tier\n * const features: ToolbarAppFeature[] = [\n * { id: 'analytics', name: 'Analytics Dashboard', isEnabled: true, isForced: false },\n * { id: 'multi-user', name: 'Multi-User Support', isEnabled: false, isForced: false }\n * ];\n * this.appFeaturesService.setAvailableOptions(features);\n *\n * // Subscribe to forced overrides\n * this.appFeaturesService.getForcedValues().subscribe(forcedFeatures => {\n * forcedFeatures.forEach(feature => {\n * // Apply forced feature state to application logic\n * this.applyFeatureState(feature.id, feature.isEnabled);\n * });\n * });\n * }\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class ToolbarAppFeaturesService implements ToolbarService<ToolbarAppFeature> {\n private internalService = inject(ToolbarInternalAppFeaturesService);\n\n /**\n * Set available app features for the application.\n *\n * Configures the list of product features that can be toggled in the dev toolbar.\n * Features should represent product-level capabilities like license tiers,\n * deployment configurations, or environment flags.\n *\n * @param features - Array of app features to display in the toolbar\n * @throws Error if duplicate feature IDs or empty IDs are detected\n *\n * @example\n * ```typescript\n * const features: ToolbarAppFeature[] = [\n * {\n * id: 'advanced-analytics',\n * name: 'Advanced Analytics Dashboard',\n * description: 'Access premium reporting and data visualization',\n * isEnabled: false, // Not available in current tier\n * isForced: false\n * },\n * {\n * id: 'multi-user-support',\n * name: 'Multi-User Collaboration',\n * description: 'Enable team features and user management',\n * isEnabled: true, // Available in current tier\n * isForced: false\n * }\n * ];\n * this.appFeaturesService.setAvailableOptions(features);\n * ```\n */\n setAvailableOptions(features: ToolbarAppFeature[]): void {\n this.internalService.setAppFeatures(features);\n }\n\n /**\n * Get observable stream of features that have forced overrides.\n *\n * Emits an array of features that have been forced via the dev toolbar.\n * Only features with `isForced = true` are included in the emissions.\n * Use this to react to feature override changes and update application behavior.\n *\n * @returns Observable that emits array of forced features whenever state changes\n *\n * @example\n * ```typescript\n * this.appFeaturesService.getForcedValues()\n * .pipe(takeUntilDestroyed())\n * .subscribe(forcedFeatures => {\n * forcedFeatures.forEach(feature => {\n * if (feature.isEnabled) {\n * this.enableFeature(feature.id);\n * } else {\n * this.disableFeature(feature.id);\n * }\n * });\n * });\n * ```\n */\n getForcedValues(): Observable<ToolbarAppFeature[]> {\n return this.internalService.getForcedFeatures();\n }\n\n /**\n * Gets ALL app feature values with overrides already applied.\n * Returns the complete set of features where overridden values replace base values.\n * Each feature includes an `isForced` property indicating if it was overridden.\n *\n * This method simplifies integration by eliminating the need to manually merge\n * base features with overrides using combineLatest.\n *\n * @returns Observable of all features with overrides applied\n *\n * @example\n * ```typescript\n * // Check if a feature is enabled with overrides applied\n * this.appFeaturesService.getValues().pipe(\n * map(features => features.find(f => f.id === 'premium-analytics')),\n * map(feature => feature?.isEnabled ?? false)\n * ).subscribe(isEnabled => {\n * if (isEnabled) {\n * // Enable premium analytics\n * }\n * });\n * ```\n */\n getValues(): Observable<ToolbarAppFeature[]> {\n return this.internalService.features$;\n }\n\n /**\n * Apply a preset feature configuration (for preset tool integration).\n *\n * Accepts a forced features state object and applies it to the current configuration.\n * Invalid feature IDs (not in configured features) are filtered out with a warning.\n *\n * @param state - Forced features state containing enabled/disabled arrays\n *\n * @example\n * ```typescript\n * // Apply \"Enterprise Tier\" preset\n * const enterprisePreset: ForcedAppFeaturesState = {\n * enabled: ['analytics', 'multi-user', 'white-label', 'sso'],\n * disabled: []\n * };\n * this.appFeaturesService.applyPresetFeatures(enterprisePreset);\n *\n * // Apply \"Basic Tier\" preset\n * const basicPreset: ForcedAppFeaturesState = {\n * enabled: [],\n * disabled: ['analytics', 'multi-user', 'white-label', 'sso']\n * };\n * this.appFeaturesService.applyPresetFeatures(basicPreset);\n * ```\n */\n applyPresetFeatures(state: ForcedAppFeaturesState): void {\n this.internalService.applyForcedState(state);\n }\n\n /**\n * Get current forced feature state as a snapshot (for preset export).\n *\n * Returns the current forced features state with enabled/disabled arrays.\n * Useful for exporting toolbar state to save as a preset or for debugging.\n * Returns a defensive copy - mutations will not affect internal state.\n *\n * @returns Current forced features state\n *\n * @example\n * ```typescript\n * // Export current toolbar state to save as preset\n * const currentState = this.appFeaturesService.getCurrentForcedState();\n * this.presetsService.savePreset('my-config', {\n * appFeatures: currentState,\n * // ... other tool states\n * });\n *\n * console.log(currentState);\n * // { enabled: ['analytics'], disabled: ['white-label'] }\n * ```\n */\n getCurrentForcedState(): ForcedAppFeaturesState {\n return this.internalService.getCurrentForcedState();\n }\n\n /**\n * Registers a callback to persist a forced app feature value back to the actual data source.\n * When set, an \"apply to source\" button appears on each forced feature in the toolbar UI.\n *\n * @param callback - Async function that receives the feature ID and its forced boolean value\n */\n setApplyToSource(callback: (id: string, value: boolean) => Promise<void>): void {\n this.internalService.setApplyToSource(callback);\n }\n}\n","import {\n ApplicationRef,\n createComponent,\n ENVIRONMENT_INITIALIZER,\n EnvironmentInjector,\n inject,\n makeEnvironmentProviders,\n type EnvironmentProviders,\n} from '@angular/core';\nimport { ToolbarComponent } from './toolbar.component';\nimport { ToolbarConfig } from './models/toolbar-config.interface';\nimport {\n TOOLBAR_APP_FEATURES,\n TOOLBAR_CONFIG,\n TOOLBAR_FEATURE_FLAGS,\n TOOLBAR_PERMISSIONS,\n} from './tokens';\nimport { ToolbarFeatureFlagService } from './tools/feature-flags-tool/feature-flags.service';\nimport { ToolbarPermissionsService } from './tools/permissions-tool/permissions.service';\nimport { ToolbarAppFeaturesService } from './tools/app-features-tool/app-features.service';\nimport { ToolbarInternalFeatureFlagService } from './tools/feature-flags-tool/feature-flags-internal.service';\nimport { ToolbarInternalPermissionsService } from './tools/permissions-tool/permissions-internal.service';\nimport { ToolbarInternalAppFeaturesService } from './tools/app-features-tool/app-features-internal.service';\n\n/**\n * Provides all ngx-dev-toolbar services and automatically attaches the toolbar to the DOM.\n *\n * This is the recommended way to set up the toolbar. Add it to your `app.config.ts`\n * alongside other providers like `provideRouter()` and `provideHttpClient()`.\n *\n * ## Basic Usage\n *\n * ```typescript\n * // app.config.ts\n * import { ApplicationConfig, isDevMode } from '@angular/core';\n * import { provideToolbar } from 'ngx-dev-toolbar';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideRouter(appRoutes),\n * provideToolbar({\n * enabled: isDevMode(),\n * showFeatureFlagsTool: true,\n * showPermissionsTool: true,\n * }),\n * ],\n * };\n * ```\n *\n * ```typescript\n * // main.ts\n * bootstrapApplication(AppComponent, appConfig);\n * ```\n *\n * ## Using Services with Tokens\n *\n * ```typescript\n * import { inject } from '@angular/core';\n * import { TOOLBAR_FEATURE_FLAGS } from 'ngx-dev-toolbar';\n * import type { ToolbarService, ToolbarFlag } from 'ngx-dev-toolbar';\n *\n * @Injectable({ providedIn: 'root' })\n * export class FeatureFlagsService {\n * // Optional injection - null in production\n * private devToolbar = inject<ToolbarService<ToolbarFlag>>(\n * TOOLBAR_FEATURE_FLAGS,\n * { optional: true }\n * );\n *\n * constructor() {\n * // Safe to call - no-op if devToolbar is null\n * this.devToolbar?.setAvailableOptions(this.flags);\n *\n * // Subscribe to forced values only if toolbar exists\n * this.devToolbar?.getForcedValues().subscribe(forced => {\n * // Merge forced values\n * });\n * }\n * }\n * ```\n *\n * @param config - Optional configuration for toolbar behavior and tool visibility\n * @returns Angular EnvironmentProviders for all toolbar services\n */\nexport function provideToolbar(config?: ToolbarConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: TOOLBAR_FEATURE_FLAGS, useClass: ToolbarFeatureFlagService },\n { provide: TOOLBAR_PERMISSIONS, useClass: ToolbarPermissionsService },\n { provide: TOOLBAR_APP_FEATURES, useClass: ToolbarAppFeaturesService },\n { provide: TOOLBAR_CONFIG, useValue: config ?? {} },\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => {\n const appRef = inject(ApplicationRef);\n const injector = inject(EnvironmentInjector);\n const toolbarConfig = inject(TOOLBAR_CONFIG);\n\n // Bridge deprecated config callbacks to service-based setApplyToSource\n if (toolbarConfig.onApplyFeatureFlag) {\n console.warn(\n '[ngx-dev-toolbar] onApplyFeatureFlag in config is deprecated. Use ToolbarFeatureFlagService.setApplyToSource() instead.'\n );\n inject(ToolbarInternalFeatureFlagService).setApplyToSource(toolbarConfig.onApplyFeatureFlag);\n }\n if (toolbarConfig.onApplyPermission) {\n console.warn(\n '[ngx-dev-toolbar] onApplyPermission in config is deprecated. Use ToolbarPermissionsService.setApplyToSource() instead.'\n );\n inject(ToolbarInternalPermissionsService).setApplyToSource(toolbarConfig.onApplyPermission);\n }\n if (toolbarConfig.onApplyAppFeature) {\n console.warn(\n '[ngx-dev-toolbar] onApplyAppFeature in config is deprecated. Use ToolbarAppFeaturesService.setApplyToSource() instead.'\n );\n inject(ToolbarInternalAppFeaturesService).setApplyToSource(toolbarConfig.onApplyAppFeature);\n }\n\n const componentRef = createComponent(ToolbarComponent, {\n environmentInjector: injector,\n });\n componentRef.setInput('config', toolbarConfig);\n document.body.appendChild(componentRef.location.nativeElement);\n appRef.attachView(componentRef.hostView);\n },\n },\n ]);\n}\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\n\n@Directive({\n selector: '[ndtStep]',\n standalone: true,\n})\nexport class ToolbarStepDirective {\n readonly ndtStep = input.required<string>();\n readonly stepTitle = input<string>('');\n readonly templateRef = inject(TemplateRef);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n input,\n output,\n} from '@angular/core';\nimport { ToolbarButtonComponent } from '../button/button.component';\nimport { ToolbarStepDirective } from './step-view.directive';\n\n@Component({\n selector: 'ndt-step-view',\n standalone: true,\n imports: [NgTemplateOutlet, ToolbarButtonComponent],\n template: `\n @if (!isDefaultStep()) {\n <div class=\"step-header\">\n <ndt-button (click)=\"back.emit()\" ariaLabel=\"Back\">\\u2190 Back</ndt-button>\n @if (activeTitle()) {\n <span class=\"step-title\">{{ activeTitle() }}</span>\n }\n </div>\n }\n\n @if (activeTemplate(); as tmpl) {\n <ng-container [ngTemplateOutlet]=\"tmpl\" />\n }\n `,\n styles: `\n :host {\n display: flex;\n flex-direction: column;\n }\n\n .step-header {\n display: flex;\n align-items: center;\n gap: var(--ndt-spacing-sm);\n padding-bottom: var(--ndt-spacing-sm);\n margin-bottom: var(--ndt-spacing-sm);\n border-bottom: 1px solid var(--ndt-border-primary);\n }\n\n .step-title {\n font-size: var(--ndt-font-size-md);\n font-weight: 600;\n color: var(--ndt-text-primary);\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarStepViewComponent {\n readonly currentStep = input.required<string>();\n readonly defaultStep = input<string>('list');\n\n readonly back = output<void>();\n\n readonly steps = contentChildren(ToolbarStepDirective);\n\n readonly isDefaultStep = computed(\n () => this.currentStep() === this.defaultStep()\n );\n\n readonly activeStep = computed(() =>\n this.steps().find((s) => s.ndtStep() === this.currentStep())\n );\n\n readonly activeTitle = computed(() => this.activeStep()?.stepTitle() ?? '');\n\n readonly activeTemplate = computed(\n () => this.activeStep()?.templateRef ?? null\n );\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ToolbarService } from '../../models/toolbar.interface';\nimport { ToolbarInternalI18nService } from './i18n-internal.service';\nimport {\n I18nCurrency,\n I18nDateFormat,\n I18nFirstDayOfWeek,\n I18nLocale,\n I18nNumberFormat,\n I18nTimezone,\n I18nToolConfig,\n I18nUnitSystem,\n} from './i18n.models';\n\n@Injectable({ providedIn: 'root' })\nexport class ToolbarI18nService implements ToolbarService<I18nLocale> {\n private internalService = inject(ToolbarInternalI18nService);\n\n /**\n * Sets the available locales displayed in the i18n tool\n */\n setAvailableOptions(locales: I18nLocale[]): void {\n this.internalService.setAvailableLocales(locales);\n }\n\n /**\n * Gets the locale that was forced through the i18n tool\n * @returns Observable of forced locale array (single item or empty)\n */\n getForcedValues(): Observable<I18nLocale[]> {\n return this.internalService.getForcedLocale();\n }\n\n /**\n * Gets the forced locale value.\n * For the i18n tool, this returns the same as getForcedValues() since\n * only one locale can be selected at a time.\n */\n getValues(): Observable<I18nLocale[]> {\n return this.internalService.getForcedLocale();\n }\n\n // --- Extended i18n accessors ---\n\n /**\n * Sets the available timezones displayed in the i18n tool.\n * If not called, defaults to a built-in list of common timezones.\n */\n setAvailableTimezones(timezones: I18nTimezone[]): void {\n this.internalService.setAvailableTimezones(timezones);\n }\n\n /**\n * Sets the available currencies displayed in the i18n tool.\n * If not called, defaults to a built-in list of common currencies.\n */\n setAvailableCurrencies(currencies: I18nCurrency[]): void {\n this.internalService.setAvailableCurrencies(currencies);\n }\n\n /**\n * Gets the timezone that was forced through the i18n tool\n */\n getForcedTimezone(): Observable<I18nTimezone | null> {\n return this.internalService.getForcedTimezone();\n }\n\n /**\n * Gets the currency that was forced through the i18n tool\n */\n getForcedCurrency(): Observable<I18nCurrency | null> {\n return this.internalService.getForcedCurrency();\n }\n\n /**\n * Gets the unit system that was forced through the i18n tool\n */\n getUnitSystem(): Observable<I18nUnitSystem | null> {\n return this.internalService.getForcedUnitSystem();\n }\n\n /**\n * Whether pseudo-localization mode is enabled\n */\n isPseudoLocalizationEnabled(): Observable<boolean> {\n return this.internalService.getPseudoLocEnabled();\n }\n\n /**\n * Whether RTL mirroring is enabled\n */\n isRtlEnabled(): Observable<boolean> {\n return this.internalService.getRtlEnabled();\n }\n\n /**\n * Gets the date format that was forced through the i18n tool\n */\n getForcedDateFormat(): Observable<I18nDateFormat | null> {\n return this.internalService.getForcedDateFormat();\n }\n\n /**\n * Gets the first day of week that was forced through the i18n tool\n */\n getForcedFirstDayOfWeek(): Observable<I18nFirstDayOfWeek | null> {\n return this.internalService.getForcedFirstDayOfWeek();\n }\n\n /**\n * Gets the number format that was forced through the i18n tool\n */\n getForcedNumberFormat(): Observable<I18nNumberFormat | null> {\n return this.internalService.getForcedNumberFormat();\n }\n\n /**\n * Configures which sections are visible in the i18n tool panel\n */\n configure(config: I18nToolConfig): void {\n this.internalService.setToolConfig(config);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ToolbarInternalPresetsService } from './presets-internal.service';\nimport {\n ToolbarPreset,\n ToolbarPresetConfig,\n PartialApplyOptions,\n} from './presets.models';\n\n/**\n * Partial preset for initialization (without generated fields)\n */\nexport interface InitialPreset {\n name: string;\n description?: string;\n config: ToolbarPresetConfig;\n}\n\n/**\n * Public service for managing dev toolbar presets.\n * Allows developers to programmatically save, load, and manage presets.\n */\n@Injectable({ providedIn: 'root' })\nexport class ToolbarPresetsService {\n private internalService = inject(ToolbarInternalPresetsService);\n\n /**\n * Get all saved presets as an Observable\n */\n getPresets(): Observable<ToolbarPreset[]> {\n return this.internalService.presets$;\n }\n\n /**\n * Save current toolbar state as a preset\n * @param name - Name for the preset\n * @param description - Optional description\n * @returns The created preset\n */\n savePreset(name: string, description?: string): ToolbarPreset {\n return this.internalService.saveCurrentAsPreset(name, description);\n }\n\n /**\n * Apply a preset (load its configuration into all tools)\n * @param presetId - ID of the preset to apply\n */\n async applyPreset(presetId: string): Promise<void> {\n return this.internalService.applyPreset(presetId);\n }\n\n /**\n * Update a preset with current toolbar state\n * @param presetId - ID of the preset to update\n */\n updatePreset(presetId: string): void {\n this.internalService.updatePreset(presetId);\n }\n\n /**\n * Delete a preset\n * @param presetId - ID of the preset to delete\n */\n deletePreset(presetId: string): void {\n this.internalService.deletePreset(presetId);\n }\n\n /**\n * Toggle favorite status for a preset\n * @param presetId - ID of the preset to toggle\n */\n toggleFavorite(presetId: string): void {\n this.internalService.toggleFavorite(presetId);\n }\n\n /**\n * Apply a preset with partial options (only selected categories)\n * @param presetId - ID of the preset to apply\n * @param options - Options for which categories to apply\n */\n async partialApplyPreset(\n presetId: string,\n options: PartialApplyOptions\n ): Promise<void> {\n return this.internalService.partialApplyPreset(presetId, options);\n }\n\n /**\n * Update only the metadata (name, description) of a preset\n * @param presetId - ID of the preset to update\n * @param name - New name for the preset\n * @param description - New description for the preset\n */\n updatePresetMetadata(\n presetId: string,\n name: string,\n description?: string\n ): void {\n this.internalService.updatePresetMetadata(presetId, name, description);\n }\n\n /**\n * Export a preset as JSON string\n * @param presetId - ID of the preset to export\n * @returns JSON string representation of the preset\n */\n exportPreset(presetId: string): string | null {\n const preset = this.internalService.getPresetById(presetId);\n if (!preset) return null;\n return JSON.stringify(preset, null, 2);\n }\n\n /**\n * Import a preset from JSON string\n * @param json - JSON string representation of a preset\n * @returns The imported preset\n * @throws Error if JSON is invalid\n */\n importPreset(json: string): ToolbarPreset {\n const preset = JSON.parse(json) as ToolbarPreset;\n return this.internalService.addPreset(preset);\n }\n\n /**\n * Initialize presets with predefined configurations.\n * Useful for setting up default presets that all developers can use.\n * Skips presets that already exist (by name) to avoid duplicates.\n *\n * @param presets - Array of preset configurations to initialize\n * @returns Array of created presets (only newly added ones)\n *\n * @example\n * ```typescript\n * const presetsService = inject(ToolbarPresetsService);\n *\n * presetsService.initializePresets([\n * {\n * name: 'Admin User',\n * description: 'Full access admin configuration',\n * config: {\n * featureFlags: {\n * enabled: ['admin-panel', 'advanced-features'],\n * disabled: []\n * },\n * permissions: {\n * granted: ['admin', 'write', 'delete'],\n * denied: []\n * },\n * appFeatures: {\n * enabled: ['analytics', 'reporting'],\n * disabled: []\n * },\n * language: 'en'\n * }\n * },\n * {\n * name: 'Read-Only User',\n * description: 'Limited access for viewing only',\n * config: {\n * featureFlags: {\n * enabled: [],\n * disabled: ['admin-panel', 'advanced-features']\n * },\n * permissions: {\n * granted: ['read'],\n * denied: ['write', 'delete']\n * },\n * appFeatures: {\n * enabled: [],\n * disabled: ['analytics', 'reporting']\n * },\n * language: null\n * }\n * }\n * ]);\n * ```\n */\n initializePresets(presets: InitialPreset[]): ToolbarPreset[] {\n const existingPresets: ToolbarPreset[] = this.internalService.presets();\n const existingNames = new Set(\n existingPresets.map((p) => p.name.toLowerCase())\n );\n\n return presets\n .filter((preset) => !existingNames.has(preset.name.toLowerCase()))\n .map((preset) =>\n this.internalService.addPreset({\n id: '', // Will be generated\n createdAt: '', // Will be generated\n updatedAt: '', // Will be generated\n isSystem: true, // Mark as system preset (not editable)\n ...preset,\n })\n );\n }\n\n /**\n * Clear all existing presets and set new initial presets.\n * Use this to replace all presets with a fresh set of configurations.\n *\n * @param presets - Array of preset configurations to set as initial\n * @returns Array of created presets\n */\n setInitialPresets(presets: InitialPreset[]): ToolbarPreset[] {\n // Clear existing presets\n const currentPresets: ToolbarPreset[] = this.internalService.presets();\n currentPresets.forEach((preset) => {\n this.internalService.deletePreset(preset.id);\n });\n\n // Add new presets\n return this.initializePresets(presets);\n }\n}\n","// Tree-shakeable tokens for dependency injection\nexport {\n TOOLBAR_CONFIG,\n TOOLBAR_FEATURE_FLAGS,\n TOOLBAR_PERMISSIONS,\n TOOLBAR_APP_FEATURES,\n} from './tokens';\n\n// Provider function for tree-shakeable setup\nexport { provideToolbar } from './provide-toolbar';\n\n// Components\nexport * from './components/icons/icon.component';\nexport * from './components/icons/icon.models';\nexport * from './components/list/list.component';\nexport * from './components/list-item/list-item.component';\nexport * from './components/toolbar-tool/toolbar-tool.component';\nexport * from './components/toolbar-tool/toolbar-tool.models';\n\n// UI Components (for building custom tools)\nexport * from './components/button/button.component';\nexport * from './components/icon-button/icon-button.component';\nexport * from './components/input/input.component';\nexport * from './components/select/select.component';\nexport * from './components/card/card.component';\nexport * from './components/clickable-card/clickable-card.component';\nexport * from './components/link-button/link-button.component';\nexport * from './components/step-view/step-view.component';\nexport * from './components/step-view/step-view.directive';\n\nexport * from './toolbar.component';\nexport * from './models/toolbar.interface';\nexport * from './models/toolbar-config.interface';\nexport * from './models/toolbar-position.model';\nexport * from './models/tool-view-state.models';\nexport * from './tools/feature-flags-tool/feature-flags.models';\nexport * from './tools/feature-flags-tool/feature-flags.service';\n// i18n Tool\nexport * from './tools/i18n-tool/i18n.models';\nexport * from './tools/i18n-tool/i18n.service';\nexport * from './tools/i18n-tool/i18n-formatting.utils';\nexport * from './tools/i18n-tool/i18n-tool.component';\nexport * from './tools/app-features-tool/app-features.models';\nexport * from './tools/app-features-tool/app-features.service';\nexport * from './tools/app-features-tool/app-features-tool.component';\n\n// Permissions Tool\nexport * from './tools/permissions-tool/permissions.models';\nexport * from './tools/permissions-tool/permissions.service';\nexport * from './tools/permissions-tool/permissions-tool.component';\n\n// Presets Tool\nexport * from './tools/presets-tool/presets.models';\nexport * from './tools/presets-tool/presets.service';\nexport * from './tools/presets-tool/presets-tool.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":";;;;;;;;;;;;;AAOA;;;;;AAKG;MACU,cAAc,GAAG,IAAI,cAAc,CAC9C,gBAAgB;AAGlB;;;;;;;;;;;;;;;AAeG;MACU,qBAAqB,GAAG,IAAI,cAAc,CAErD,uBAAuB;AAEzB;;;;;;;;;;;;;;;AAeG;MACU,mBAAmB,GAAG,IAAI,cAAc,CAEnD,qBAAqB;AAEvB;;;;;;;;;;;;;;;AAeG;MACU,oBAAoB,GAAG,IAAI,cAAc,CAEpD,sBAAsB;;MCxEX,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;QAEmB,IAAA,CAAA,MAAM,GAAG,iBAAiB;AAC1B,QAAA,IAAA,CAAA,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,MAAM;AAChC,QAAA,IAAA,CAAA,YAAY,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,UAAU;AAyEzD,IAAA;IAvEQ,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAA;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AACpC,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACxB,QAAA,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtD;AAEO,IAAA,GAAG,CAAI,GAAW,EAAA;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACpC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;AAC1C,QAAA,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI;IACvC;AAEO,IAAA,MAAM,CAAC,GAAW,EAAA;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AACpC,QAAA,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IAC7B;IAEO,cAAc,GAAA;QACnB,MAAM,QAAQ,GAA4B,EAAE;AAE5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3B,YAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK;YACvB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,QAAQ;IACjB;AAEO,IAAA,cAAc,CAAC,QAAiC,EAAA;AACrD,QAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAChD,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACtB,QAAA,CAAC,CAAC;IACJ;IAEO,gBAAgB,GAAA;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAClB,QAAA,CAAC,CAAC;IACJ;IAEO,WAAW,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACjE;AAEQ,IAAA,UAAU,CAAC,GAAW,EAAA;AAC5B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC7B;QACF;AACA,QAAA,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AACrB,QAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACnE;AAEQ,IAAA,aAAa,CAAC,GAAW,EAAA;AAC/B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;QACtC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC;AACtC,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,YAAA,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9B;AACA,QAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACnE;AAEQ,IAAA,UAAU,CAAC,GAAW,EAAA;QAC5B,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG;IAC5D;8GA1EW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA,CAAA;;2FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACclC,MAAM,YAAY,GAAG,UAAU;MAKlB,mBAAmB,CAAA;AAgC9B,IAAA,WAAA,GAAA;AA/BQ,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;;QAG9C,IAAA,CAAA,KAAK,GAAG,MAAM,CAAe;AACnC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,kBAAkB,EAAE,KAAK;AACzB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,EAAE;AACX,SAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAC3B,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE,CACrD;AACQ,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC;AAC3D,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC;AACxD,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,KAAK,IAAI,CAAC;AAClE,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;AAC/D,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC;AAChD,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CACpC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,kBAAkB,CACtC;QAGC,IAAI,CAAC,kBAAkB,EAAE;IAC3B;;AAGA,IAAA,aAAa,CAAC,SAAkB,EAAA;QAC9B,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAC5B,gBAAA,GAAG,KAAK;AACR,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA,CAAC,CAAC;QACL;aAAO;AACL,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;gBAChC,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAC5B,wBAAA,GAAG,KAAK;AACR,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA,CAAC,CAAC;gBACL,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC;YACxB;QACF;IACF;AAEA,IAAA,QAAQ,CAAC,KAAuB,EAAA;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAC5B,YAAA,GAAG,KAAK;YACR,KAAK;AACN,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,aAAa,CAAC,MAAqB,EAAA;QACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAC5B,YAAA,GAAG,KAAK;AACR,YAAA,YAAY,EAAE,MAAM;AACrB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3B;aAAO;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAC1B;IACF;;AAGA,IAAA,UAAU,CAAC,MAAqB,EAAA;AAC9B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE;AACzC,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,KAAK,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;IAC9D;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAC5B,YAAA,GAAG,KAAK;AACR,YAAA,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ;AAC1B,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,SAAS,CAAC,MAAqB,EAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAC5B,YAAA,GAAG,KAAK;YACR,MAAM;AACP,SAAA,CAAC,CAAC;;AAEH,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;QACnC;IACF;AAEA,IAAA,WAAW,CAAC,QAAyB,EAAA;;AAEnC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAC5B,YAAA,GAAG,KAAK;YACR,QAAQ;AACT,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,sBAAsB,GAAA;QACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAC5B,YAAA,GAAG,KAAK;AACR,YAAA,kBAAkB,EAAE,CAAC,KAAK,CAAC,kBAAkB;AAC9C,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,EAAE;IACrB;IAEQ,kBAAkB,GAAA;AACxB,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAGnC,YAAY,CAAC;YAChB,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAC5B,oBAAA,GAAG,KAAK;AACR,oBAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ;AAC3C,oBAAA,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,KAAK,CAAC,kBAAkB;AAC1E,iBAAA,CAAC,CAAC;YACL;QACF;AAAE,QAAA,MAAM;;QAER;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAA0B,YAAY,CAAC,IAAI,EAAE;AACpF,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE;AACpC,YAAA,GAAG,OAAO;AACV,YAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ;AAC/B,YAAA,kBAAkB,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,kBAAkB;AACpD,SAAA,CAAC;IACJ;8GA9IW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCKY,qBAAqB,CAAA;AAjBlC,IAAA,WAAA,GAAA;AAkBE,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAU;AAEhC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,MAAM,CAAC;AAC5B,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,EAAE,CAAC;AAC/B,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,EAAE,CAAC;AAC7B,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,OAAO,CAAC;AACpC,IAAA;8GAPY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAbtB;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,q8EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAVS,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAcV,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAjBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cACT,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,CAAC,EAAA,QAAA,EACZ;;;;;;;;;GAST,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,q8EAAA,CAAA,EAAA;;;ACpBjD;;;;;;;;;;;;;;;;;AAiBG;MA0BU,oBAAoB,CAAA;AAzBjC,IAAA,WAAA,GAAA;AA0BE;;;AAGG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,CAAC;AAE/B;;;AAGG;AACH,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,IAAI,CAAC;AAEjC;;;AAGG;AACH,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,gBAAgB,CAAC;AAE9C;;;AAGG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAqB,SAAS,CAAC;AAEhD;;;AAGG;AACH,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAS,8BAA8B,CAAC;AACjE,IAAA;8GA9BY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArBrB;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,04FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlBS,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAsBX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAzBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,cACR,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;;;;;;;;;GAiBT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,04FAAA,CAAA,EAAA;;;MCVpC,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5BrB;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAhChC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA,CAAA;AACF,iBAAA;;;MCTY,iBAAiB,CAAA;AAtB9B,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBlB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCHY,gBAAgB,CAAA;AAlB7B,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdjB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAlB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;MCEY,iBAAiB,CAAA;AAnB9B,IAAA,WAAA,GAAA;AAoBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBlB;;;;;;;;;;;;;AAaT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAnB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;AAaT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;;MCIY,qBAAqB,CAAA;AAtBlC,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBtB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAtBjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCHY,oBAAoB,CAAA;AAlBjC,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,SAAS,CAAC;AAChC,IAAA;8GAFY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdrB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAlBhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;MCCY,iBAAiB,CAAA;AAlB9B,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdlB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;MCKY,iBAAiB,CAAA;AAtB9B,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBlB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCHY,mBAAmB,CAAA;AAlBhC,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdpB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAlB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;MCKY,mBAAmB,CAAA;AAtBhC,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBpB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAtB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCCY,kBAAkB,CAAA;AAtB/B,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBnB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAtB9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCCY,iBAAiB,CAAA;AAtB9B,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBlB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCCY,sBAAsB,CAAA;AAtBnC,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBvB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAtBlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCHY,kBAAkB,CAAA;AAlB/B,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdnB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlB9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;MCCY,mBAAmB,CAAA;AAlBhC,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdpB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAlB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;MCEY,mBAAmB,CAAA;AAnBhC,IAAA,WAAA,GAAA;AAoBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfpB;;;;;;;;;;;;;AAaT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;AAaT,EAAA,CAAA;AACF,iBAAA;;;MCAY,sBAAsB,CAAA;AAlBnC,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdvB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAlBlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;MCEY,qBAAqB,CAAA;AAnBlC,IAAA,WAAA,GAAA;AAoBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAftB;;;;;;;;;;;;;AAaT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAnBjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;AAaT,EAAA,CAAA;AACF,iBAAA;;;MCAY,iBAAiB,CAAA;AAlB9B,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdlB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;MCKY,iBAAiB,CAAA;AAtB9B,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBlB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCCY,oBAAoB,CAAA;AAtBjC,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBrB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAtBhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCCY,gBAAgB,CAAA;AAtB7B,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBjB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAtB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCCY,mBAAmB,CAAA;AAtBhC,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBpB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAtB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCCY,oBAAoB,CAAA;AAtBjC,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBrB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAtBhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCCY,iBAAiB,CAAA;AAtB9B,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBlB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCCY,gBAAgB,CAAA;AAtB7B,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBjB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAtB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCCY,qBAAqB,CAAA;AAtBlC,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBtB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAtBjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCCY,uBAAuB,CAAA;AAtBpC,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBxB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAtBnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCHY,sBAAsB,CAAA;AAlBnC,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdvB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAlBlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;MCCY,kBAAkB,CAAA;AAlB/B,IAAA,WAAA,GAAA;AAmBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdnB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlB9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;MCKY,kBAAkB,CAAA;AAtB/B,IAAA,WAAA,GAAA;AAuBE,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,OAAO,CAAC;AAC9B,IAAA;8GAFY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBnB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAtB9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;;MCyHY,oBAAoB,CAAA;AAvGjC,IAAA,WAAA,GAAA;AAwGmB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAE3D,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAY;QAEjC,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,MACd,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS,CAC7D;AACF,IAAA;8GARY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjGC,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,sBAAsB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,gBAAgB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,gBAAgB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAqET,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAvGhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBACP,oBAAoB;wBACpB,iBAAiB;wBACjB,gBAAgB;wBAChB,iBAAiB;wBACjB,qBAAqB;wBACrB,iBAAiB;wBACjB,oBAAoB;wBACpB,iBAAiB;wBACjB,mBAAmB;wBACnB,mBAAmB;wBACnB,kBAAkB;wBAClB,iBAAiB;wBACjB,sBAAsB;wBACtB,kBAAkB;wBAClB,mBAAmB;wBACnB,mBAAmB;wBACnB,sBAAsB;wBACtB,qBAAqB;wBACrB,iBAAiB;wBACjB,oBAAoB;wBACpB,gBAAgB;wBAChB,mBAAmB;wBACnB,oBAAoB;wBACpB,iBAAiB;wBACjB,qBAAqB;wBACrB,uBAAuB;wBACvB,kBAAkB;wBAClB,gBAAgB;wBAChB,iBAAiB;wBACjB,sBAAsB;wBACtB,kBAAkB;AACnB,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgET,EAAA,CAAA;AACF,iBAAA;;;MCzGY,0BAA0B,CAAA;AA5BvC,IAAA,WAAA,GAAA;QA6BW,IAAA,CAAA,IAAI,GAAG,KAAK,EAAY;QACxB,IAAA,CAAA,OAAO,GAAG,KAAK,EAAU;QACzB,IAAA,CAAA,SAAS,GAAG,KAAK,EAAU;AAC3B,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAc,IAAI,CAAC;AAC/B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAuB,OAAO,CAAC;AAE7C,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AACzB,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CACnC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAC3C;AACF,IAAA;8GAXY,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxB3B;;;;;;;;;;;;;;;;;;;;AAoBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mqGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArBS,oBAAoB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAyBnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA5BtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,OAAA,EACP,CAAC,oBAAoB,CAAC,EAAA,QAAA,EACrB;;;;;;;;;;;;;;;;;;;;GAoBT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,mqGAAA,CAAA,EAAA;;;AC9BjD;;;;;;;;;;;;;;;;AAgBG;MA6DU,wBAAwB,CAAA;AA5DrC,IAAA,WAAA,GAAA;AA6DE;;;AAGG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAU;AAEhC;;;AAGG;AACH,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAqB,SAAS,CAAC;AAElD;;AAEG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAEhC;;AAEG;AACH,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAW;AAExC;;AAEG;AACH,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAsB,SAAS,CAAC;AAErD;;AAEG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;AAEjC;;AAEG;AACH,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAA2C,MAAM,CAAC;AAEpE;;AAEG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAEhC;;AAEG;QACH,IAAA,CAAA,SAAS,GAAG,MAAM,EAAQ;AAE1B;;AAEG;QACH,IAAA,CAAA,aAAa,GAAG,MAAM,EAAQ;QAEpB,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAW,MAAM,KAAK,CAAC;AAEzC,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAChC,IAAI,CAAC,QAAQ,EAAE,GAAG,YAAY,GAAG,UAAU,CAC5C;AAED;;;;AAIG;AACO,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACrC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,aAAa,KAAK;AAC1C,kBAAE;AACF,kBAAE,IAAI,CAAC,YAAY,EAAE;AACzB,QAAA,CAAC,CAAC;AAEF;;AAEG;AACO,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACpC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;YACjC,MAAM,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU;AAE5C,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,SAAS,EAAE;gBACzD,OAAO,CAAA,YAAA,EAAe,KAAK,CAAA,CAAE;YAC/B;YAEA,OAAO,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAE;AAClC,QAAA,CAAC,CAAC;AACH,IAAA;8GApFY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxDzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ugIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EArDS,YAAY,+BAAwB,0BAA0B,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAyD7D,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA5DpC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,oBAAoB,EAAE,0BAA0B,CAAC,EAAA,QAAA,EAC/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,ugIAAA,CAAA,EAAA;;;MCFpC,sBAAsB,CAAA;AA3DnC,IAAA,WAAA,GAAA;AA4DW,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,mBAAmB,CAAC;QAE7D,IAAA,CAAA,KAAK,GAAG,KAAK,EAAU;AACvB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAkB;AAC1C,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,EAAE,CAAC;AAC7B,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE,CAAC;AACzB,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAqB,QAAQ,CAAC;AAC1C,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,kBAAkB,CAAC;AACtC,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;AAEjD,QAAA,IAAA,CAAA,YAAY,GAAG,CAAA,YAAA,EAAe,IAAI,CAAC,MAAM;aACzD,QAAQ,CAAC,EAAE;AACX,aAAA,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACjB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAEtB,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;YAC9B,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;AAChF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1E,OAAO,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9C,QAAA,CAAC,CAAC;AAEF,QAAA,IAAA,CAAA,SAAS,GAAwB;AAC/B,YAAA;AACE,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,CAAC,CAAC;AACZ,aAAA;SACF;AAcF,IAAA;IAZC,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;AAEA,IAAA,YAAY,CAAC,MAAoB,EAAA;QAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE;IACd;8GAtDW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvDvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kuLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApDS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,8rCAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAwDtD,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA3DlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,EAAA,QAAA,EACxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,kuLAAA,CAAA,EAAA;;;MC/BpC,0BAA0B,CAAA;AAlCvC,IAAA,WAAA,GAAA;;AAoCmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAG3C,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAU;AACpC,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAU;QACjC,IAAA,CAAA,KAAK,GAAG,KAAK,EAAU;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAkB,QAAQ,CAAC;;QAG3C,IAAA,CAAA,IAAI,GAAG,MAAM,EAAQ;;AAGrB,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,CAClD;AACQ,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS;AAEvC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QACzB,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1C,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAClC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CACpE;;QAGS,IAAA,CAAA,YAAY,GAAG,KAAK;QACb,IAAA,CAAA,SAAS,GAAG,IAAI;AA2BlC,IAAA;;IAxBC,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IAClB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1B;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;8GArDW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5B3B;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g5HAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIU,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAlCtC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,IAAA,EACV;AACJ,wBAAA,SAAS,EAAE,kCAAkC;qBAC9C,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;GAwBT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,g5HAAA,CAAA,EAAA;;;MCOpC,sBAAsB,CAAA;AA/CnC,IAAA,WAAA,GAAA;AAgDW,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACpD,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAwB;QAC/C,IAAA,CAAA,MAAM,GAAG,MAAM,EAAQ;QACvB,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAQ;QACzB,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAQ;AAEzB,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;AAarE,IAAA;IAXW,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEU,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;IAEU,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;8GAnBW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5CvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8zIAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA/ClC,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,QAAA,EACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,8zIAAA,CAAA,EAAA;;;MCoBpC,oBAAoB,CAAA;AAnDjC,IAAA,WAAA,GAAA;AAoDE,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACnC,QAAA,IAAA,CAAA,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAa,iBAAiB,CAAC;AACnE,QAAA,IAAA,CAAA,eAAe,GAAG,YAAY,CAAC,0BAA0B,CAAC;AAE1D,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAwB;AAChD,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAY;AACjC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAU;QACpC,IAAA,CAAA,KAAK,GAAG,KAAK,EAAU;QACvB,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;AAE1E,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC3B,gBAAA,KAAK,QAAQ,EAAE,OAAO,IAAI;AAC1B,gBAAA,KAAK,KAAK,EAAE,OAAO,MAAM;AACzB,gBAAA,KAAK,MAAM,EAAE,OAAO,OAAO;AAC3B,gBAAA,KAAK,OAAO,EAAE,OAAO,MAAM;;AAE/B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACrB,YAAA,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI;AACzB,gBAAA,KAAK,OAAO;AACV,oBAAA,OAAO,GAAG;AACZ,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,GAAG;AACZ,gBAAA,KAAK,MAAM;AACT,oBAAA,OAAO,GAAG;AACZ,gBAAA,KAAK,OAAO;AACV,oBAAA,OAAO,GAAG;AACZ,gBAAA;AACE,oBAAA,OAAO,GAAG;;AAEhB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AACpB,YAAA,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI;AACzB,gBAAA,KAAK,OAAO;AACV,oBAAA,OAAO,GAAG;AACZ,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,GAAG;AACZ,gBAAA,KAAK,MAAM;AACT,oBAAA,OAAO,GAAG;AACZ,gBAAA,KAAK,OAAO;AACV,oBAAA,OAAO,GAAG;AACZ,gBAAA;AACE,oBAAA,OAAO,GAAG;;AAEhB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAA0B;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACtC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,EAAE;YAEjD,QAAQ,QAAQ;gBACd,KAAK,QAAQ,EAAE;;AAEb,oBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC;AAC1C,oBAAA,MAAM,OAAO,GAAG,YAAY,IAAI,WAAW,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE;AAC5D,oBAAA,OAAO,CAAC;AACN,4BAAA,OAAO,EAAE,QAAQ;AACjB,4BAAA,OAAO,EAAE,QAAQ;AACjB,4BAAA,QAAQ,EAAE,QAAQ;AAClB,4BAAA,QAAQ,EAAE,QAAQ;AAClB,4BAAA,OAAO,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;4BAC7C,OAAO;AACR,yBAAA,CAAC;gBACJ;gBACA,KAAK,KAAK,EAAE;;AAEV,oBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC;AAC1C,oBAAA,MAAM,OAAO,GAAG,YAAY,IAAI,WAAW,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE;AAC5D,oBAAA,OAAO,CAAC;AACN,4BAAA,OAAO,EAAE,QAAQ;AACjB,4BAAA,OAAO,EAAE,QAAQ;AACjB,4BAAA,QAAQ,EAAE,QAAQ;AAClB,4BAAA,QAAQ,EAAE,QAAQ;AAClB,4BAAA,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE;4BAC1C,OAAO;AACR,yBAAA,CAAC;gBACJ;gBACA,KAAK,MAAM,EAAE;;AAEX,oBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC;AAC3C,oBAAA,MAAM,OAAO,GAAG,YAAY,IAAI,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE;AAC3D,oBAAA,OAAO,CAAC;AACN,4BAAA,OAAO,EAAE,QAAQ;AACjB,4BAAA,OAAO,EAAE,QAAQ;AACjB,4BAAA,QAAQ,EAAE,QAAQ;AAClB,4BAAA,QAAQ,EAAE,QAAQ;AAClB,4BAAA,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE;4BACzC,OAAO;AACR,yBAAA,CAAC;gBACJ;gBACA,KAAK,OAAO,EAAE;;AAEZ,oBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC;AAC3C,oBAAA,MAAM,OAAO,GAAG,YAAY,IAAI,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE;AAC3D,oBAAA,OAAO,CAAC;AACN,4BAAA,OAAO,EAAE,QAAQ;AACjB,4BAAA,OAAO,EAAE,QAAQ;AACjB,4BAAA,QAAQ,EAAE,QAAQ;AAClB,4BAAA,QAAQ,EAAE,QAAQ;AAClB,4BAAA,OAAO,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;4BAC5C,OAAO;AACR,yBAAA,CAAC;gBACJ;;AAEJ,QAAA,CAAC,CAAC;AAaH,IAAA;IAXC,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IAC7C;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;IAChC;IAEQ,sBAAsB,GAAA;QAC5B,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa,EAAE,qBAAqB,EAAE;IACvE;8GAxHW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGA,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5C/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y5DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3CC,mBAAmB,2+BACnB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,sBAAsB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,0BAA0B,qIAC1B,oBAAoB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FA2CX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAnDhC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP;wBACP,mBAAmB;wBACnB,aAAa;wBACb,sBAAsB;wBACtB,0BAA0B;wBAC1B,oBAAoB;qBACrB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,y5DAAA,CAAA,EAAA;;;AC3DjD;;;;;;;;;;AAUG;MAEU,iCAAiC,CAAA;AA4B5C,IAAA,WAAA,GAAA;QA3BiB,IAAA,CAAA,WAAW,GAAG,cAAc;AACrC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC9C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAE1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAsB,EAAE,CAAC;QACjE,IAAA,CAAA,qBAAqB,GAAG,IAAI,eAAe,CAAyB;AAC1E,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,QAAQ,EAAE,EAAE;AACb,SAAA,CAAC;AAEe,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;AAE5E;;AAEG;QACI,IAAA,CAAA,SAAS,GAAoC,aAAa,CAAC;AAChE,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACtC,YAAA,IAAI,CAAC,eAAe;SACrB,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CACrF;AAED;;AAEG;AACI,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;;AAuJvD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAyD,IAAI,CAAC;AACpF,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAqC,EAAE,CAAC;AAC5D,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,CAAC;QAtJvE,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AAEA;;;;;;AAMG;AACH,IAAA,cAAc,CAAC,QAA6B,EAAA;;QAE1C,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QACxE,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;QAC/C;;AAGA,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC;AACzE,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,EAAmC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QAC/E;;QAGA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;YACjD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;YACvC,IAAI,CAAC,WAAW,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,OAAO,CAAC,EAAE,CAAA,gBAAA,CAAkB,CAAC;YACxD;YACA,OAAO;AACL,gBAAA,GAAG,OAAO;AACV,gBAAA,IAAI,EAAE,WAAW,IAAI,OAAO,CAAC,IAAI;aAClC;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC/C,IAAI,CAAC,2BAA2B,EAAE;IACpC;AAEA;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;IAC/C;AAEA;;AAEG;IACH,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CACxB,GAAG,CAAC,CAAC,QAAQ,KAAI;;YAEf,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE;AAClC,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC;QACvD,CAAC,CAAC,CACH;IACH;AAEA;;;;;;AAMG;IACH,UAAU,CAAC,SAAiB,EAAE,SAAkB,EAAA;QAC9C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK;;AAG9D,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,SAAS,CAAC;AAC3D,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,SAAS,CAAC;;QAG7D,IAAI,SAAS,EAAE;AACb,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;QAC5B;aAAO;AACL,YAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAC7B;QAEA,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE;AAC/D,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;IACnC;AAEA;;;;;AAKG;AACH,IAAA,qBAAqB,CAAC,SAAiB,EAAA;QACrC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK;AAE9D,QAAA,MAAM,QAAQ,GAAG;AACf,YAAA,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,SAAS,CAAC;AACjD,YAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,SAAS,CAAC;SACpD;AAED,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;IACnC;AAEA;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,KAA6B,EAAA;AAC5C,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;;QAG3E,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpF,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAEtF,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnE,YAAA,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SACrE;AAED,QAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,+CAAA,EAAkD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QACzF;QAEA,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE;AACvE,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC;AAC7C,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;IACvC;AAEA;;;;;AAKG;IACH,qBAAqB,GAAA;AACnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK;QAC9C,OAAO;AACL,YAAA,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;AAC3B,YAAA,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;SAC9B;IACH;AAOA,IAAA,gBAAgB,CAAC,QAAuD,EAAA;AACtE,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;AAEA,IAAA,MAAM,aAAa,CAAC,EAAU,EAAE,KAAc,EAAA;AAC5C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,IAAI,CAAC,QAAQ;YAAE;QAEf,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;AAC3D,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;AAC3D,YAAA,UAAU,CACR,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,EAC9D,IAAI,CACL;QACH;AAAE,QAAA,MAAM;YACN,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACzD,YAAA,UAAU,CACR,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,EAC9D,IAAI,CACL;QACH;IACF;AAEA;;;;;;AAMG;IACK,gBAAgB,CACtB,WAAgC,EAChC,WAAmC,EAAA;;QAGnC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE;AAClC,YAAA,OAAO,WAAW;QACpB;AAEA,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;AACjC,YAAA,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;AAC5D,YAAA,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;AAC9D,YAAA,MAAM,QAAQ,GAAG,WAAW,IAAI,YAAY;YAE5C,OAAO;AACL,gBAAA,GAAG,OAAO;AACV,gBAAA,SAAS,EAAE,WAAW,GAAG,IAAI,GAAG,YAAY,GAAG,KAAK,GAAG,OAAO,CAAC,SAAS;gBACxE,QAAQ;gBACR,aAAa,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS;aACxD;AACH,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAyB,IAAI,CAAC,WAAW,CAAC;YAEpF,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;YAC7C;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC;;QAE/E;IACF;AAEA;;;;;AAKG;AACK,IAAA,kBAAkB,CAAC,KAA6B,EAAA;AACtD,QAAA,IAAI;YACF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;QAClD;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC;;QAEzE;IACF;AAEA;;;AAGG;IACK,2BAA2B,GAAA;AACjC,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAC3E,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK;QAE3D,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KACxD,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAClC;QACD,MAAM,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAC1D,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAClC;AAED,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChF,YAAA,GAAG,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SAClF;AAED,QAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,+CAAA,EAAkD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;YAEvF,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE;AACvE,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC;AAC7C,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;QACvC;IACF;8GAvSW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cADpB,MAAM,EAAA,CAAA,CAAA;;2FACnB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAD7C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACClC;;;;;;;;;;;;;AAaG;MA2GU,+BAA+B,CAAA;AAa1C,IAAA,WAAA,GAAA;;AAXiB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,iCAAiC,CAAC;AAC9D,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;;QAG9C,IAAA,CAAA,cAAc,GAAG,mBAAmB;;AAGlC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAmB,KAAK,CAAC;AAC9C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAS,EAAE,CAAC;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,CAAC;AAmC1C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ;;AAG3C,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;YAC9D,IAAI,KAAK,KAAK,CAAC;AAAE,gBAAA,OAAO,EAAE;YAC1B,IAAI,KAAK,GAAG,EAAE;AAAE,gBAAA,OAAO,KAAK;AAC5B,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;AACzB,QAAA,CAAC,CAAC;AACiB,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AAC5D,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAClD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;gBAClD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE;gBACnD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC9C,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;AAEnE,gBAAA,MAAM,aAAa,GACjB,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,oBAAA,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;AAChC,oBAAA,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC;AAEzC,gBAAA,MAAM,aAAa,GACjB,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK;qBAC5B,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;qBACrD,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;AACxD,qBAAC,IAAI,CAAC,YAAY,EAAE,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBAE5D,OAAO,aAAa,IAAI,aAAa;AACvC,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;;YAE/B,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,IAAI,OAAO,KAAK,OAAO;oBAAE,OAAO,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC;gBAChD,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACiB,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CACjD,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,KAAK,CAAC,CAC3C;;AAGkB,QAAA,IAAA,CAAA,OAAO,GAAG;AAC3B,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,WAAW,EAAE,sEAAsE;AACnF,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,EAAE,EAAE,kBAAkB;SACC;AAEN,QAAA,IAAA,CAAA,aAAa,GAAG;AACjC,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE;AACvC,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;SACzC;AAEkB,QAAA,IAAA,CAAA,mBAAmB,GAAG;AACvC,YAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;AAC5C,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;AACnC,YAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;SAClC;;AAGkB,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,gBAAgB;QAlG5E,IAAI,CAAC,aAAa,EAAE;;QAGpB,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAkB;AAC3B,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,gBAAA,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE;AAC3B,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;aACjC;YACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;AACrD,QAAA,CAAC,CAAC;IACJ;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAgB,IAAI,CAAC,cAAc,CAAC;YACzE,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;AAC7C,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,gBAAA,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC7D,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC/B;AACA,gBAAA,IAAI,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE;AAC3B,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC9C;YACF;QACF;AAAE,QAAA,MAAM;;QAER;IACF;AAsEU,IAAA,aAAa,CACrB,SAAiB,EAAA;QAEjB,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,IAAI,MAAM;IACnE;IAEU,eAAe,CAAC,SAAiB,EAAE,KAAc,EAAA;QACzD,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC;IACzD;;AAGA;;;AAGG;AACH,IAAA,cAAc,CAAC,KAAyB,EAAA;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;QAChE,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAyB,CAAC;QACzD;IACF;AAEA;;;;;AAKG;IACH,eAAe,CAAC,SAAiB,EAAE,KAAa,EAAA;QAC9C,QAAQ,KAAK;AACX,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,SAAS,CAAC;gBACxD;AACF,YAAA,KAAK,IAAI;gBACP,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC;gBACnD;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC;gBACpD;;IAEN;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;AAEA,IAAA,SAAS,CAAC,SAAiB,EAAA;QACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AAC5B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AACzB,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACxB;iBAAO;AACL,gBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YACrB;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;;AAGA;;;;;AAKG;AACO,IAAA,eAAe,CAAC,OAA0B,EAAA;QAClD,IAAI,CAAC,OAAO,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE;QAChC,OAAO,OAAO,CAAC,SAAS,GAAG,IAAI,GAAG,KAAK;IACzC;8GA1LW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/FhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+ZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA/DC,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,qBAAqB,qJACrB,sBAAsB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,oBAAoB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,wBAAwB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,eAAA,EAAA,WAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAiGf,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBA1G3C,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP;wBACP,WAAW;wBACX,oBAAoB;wBACpB,qBAAqB;wBACrB,sBAAsB;wBACtB,oBAAoB;wBACpB,wBAAwB;qBACzB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDT,EAAA,eAAA,EAqCgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+ZAAA,CAAA,EAAA;;;MC5HpC,iCAAiC,CAAA;AAyC5C,IAAA,WAAA,GAAA;QAxCiB,IAAA,CAAA,WAAW,GAAG,eAAe;AACtC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC9C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAE1C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,eAAe,CAAgB,EAAE,CAAC;QAClD,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAmB;AACjE,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,QAAQ,EAAE,EAAE;AACb,SAAA,CAAC;AAEe,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;QAE/D,IAAA,CAAA,MAAM,GAA8B,aAAa,CAAC;AACvD,YAAA,IAAI,CAAC,SAAS;AACd,YAAA,IAAI,CAAC,YAAY;AAClB,SAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAI;;YAExC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE;AAClC,gBAAA,OAAO,QAAQ;YACjB;AAEA,YAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC3B,gBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxE,OAAO;AACL,oBAAA,GAAG,IAAI;oBACP,QAAQ;oBACR,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACjC,0BAAE;0BACA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC3B,8BAAE;8BACA,IAAI,CAAC,SAAS;oBAClB,aAAa,EAAE,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,SAAS;iBACrD;AACH,YAAA,CAAC,CAAC;QACJ,CAAC,CAAC,CACH;AAEM,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;;AAmFjD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAyD,IAAI,CAAC;AACpF,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAqC,EAAE,CAAC;AAC5D,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,CAAC;QAlFvE,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA,IAAA,WAAW,CAAC,KAAoB,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;IACtC;IAEA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACrB,GAAG,CAAC,CAAC,KAAK,KAAI;;YAEZ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE;AAClC,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;QAC9C,CAAC,CAAC,CACH;IACH;IAEA,OAAO,CAAC,MAAc,EAAE,SAAkB,EAAA;QACxC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK;AAE3D,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,MAAM,CAAC;AACxD,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,MAAM,CAAC;QAE1D,IAAI,SAAS,EAAE;AACb,YAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QACzB;aAAO;AACL,YAAA,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1B;QAEA,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE;AAC/D,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;IACrD;AAEA,IAAA,kBAAkB,CAAC,MAAc,EAAA;QAC/B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK;AAE3D,QAAA,MAAM,QAAQ,GAAG;AACf,YAAA,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,MAAM,CAAC;AAC9C,YAAA,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,MAAM,CAAC;SACjD;AAED,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;IACrD;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CACxC,IAAI,CAAC,WAAW,CACjB;QAED,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1C;IACF;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,WAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;IACxD;AAEA;;;AAGG;IACH,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK;IACtC;AAOA,IAAA,gBAAgB,CAAC,QAAuD,EAAA;AACtE,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;AAEA,IAAA,MAAM,aAAa,CAAC,EAAU,EAAE,KAAc,EAAA;AAC5C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,IAAI,CAAC,QAAQ;YAAE;QAEf,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;AAC3D,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;AAC3D,YAAA,UAAU,CACR,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,EAC9D,IAAI,CACL;QACH;AAAE,QAAA,MAAM;YACN,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACzD,YAAA,UAAU,CACR,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,EAC9D,IAAI,CACL;QACH;IACF;8GArJW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cADpB,MAAM,EAAA,CAAA,CAAA;;2FACnB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAD7C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCgHrB,gCAAgC,CAAA;AAa3C,IAAA,WAAA,GAAA;;AAXiB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,iCAAiC,CAAC;AACxD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;;QAG9C,IAAA,CAAA,cAAc,GAAG,oBAAoB;;AAGnC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAoB,KAAK,CAAC;AAC/C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAS,EAAE,CAAC;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,CAAC;AAmC1C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;;AAG/B,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM;YACjE,IAAI,KAAK,KAAK,CAAC;AAAE,gBAAA,OAAO,EAAE;YAC1B,IAAI,KAAK,GAAG,EAAE;AAAE,gBAAA,OAAO,KAAK;AAC5B,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;AACzB,QAAA,CAAC,CAAC;AACiB,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AACtD,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;gBAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE;gBACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACxC,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;AAE7D,gBAAA,MAAM,aAAa,GACjB,CAAC,IAAI,CAAC,WAAW,EAAE;oBACnB,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;oBACzD,eAAe,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;AAElE,gBAAA,MAAM,aAAa,GACjB,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK;qBAC5B,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;qBAClD,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;AACrD,qBAAC,IAAI,CAAC,YAAY,EAAE,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBAEzD,OAAO,aAAa,IAAI,aAAa;AACvC,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;;YAE/B,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,IAAI,OAAO,KAAK,OAAO;oBAAE,OAAO,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC;gBAChD,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACiB,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAC9C,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,KAAK,CAAC,CACxC;;AAGkB,QAAA,IAAA,CAAA,OAAO,GAAG;AAC3B,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,WAAW,EAAE,mDAAmD;AAChE,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,EAAE,EAAE,mBAAmB;SACA;AAEN,QAAA,IAAA,CAAA,aAAa,GAAG;AACjC,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;AACpC,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;SACzC;AAEkB,QAAA,IAAA,CAAA,gBAAgB,GAAG;AACpC,YAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;AAC5C,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE;AACrC,YAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;SACpC;;AAGkB,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB;QAlGtE,IAAI,CAAC,aAAa,EAAE;;QAGpB,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAkB;AAC3B,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,gBAAA,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE;AAC3B,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;aACjC;YACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;AACrD,QAAA,CAAC,CAAC;IACJ;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAgB,IAAI,CAAC,cAAc,CAAC;YACzE,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;AAC7C,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA2B;AAChD,gBAAA,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC7D,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC/B;AACA,gBAAA,IAAI,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE;AAC3B,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC9C;YACF;QACF;AAAE,QAAA,MAAM;;QAER;IACF;AAsEU,IAAA,aAAa,CACrB,MAAc,EAAA;QAEd,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,MAAM;IAC1D;IAEU,eAAe,CAAC,MAAc,EAAE,KAAc,EAAA;QACtD,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;IAChD;;AAGA,IAAA,cAAc,CAAC,KAAyB,EAAA;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;QAChE,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAA0B,CAAC;QAC1D;IACF;IAEA,YAAY,CAAC,MAAc,EAAE,KAAa,EAAA;QACxC,QAAQ,KAAK;AACX,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAC5C;AACF,YAAA,KAAK,IAAI;gBACP,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;gBACvC;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;gBACxC;;IAEN;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;AAEA,IAAA,SAAS,CAAC,MAAc,EAAA;QACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AAC5B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AACzB,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACrB;iBAAO;AACL,gBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAClB;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;;AAGU,IAAA,YAAY,CAAC,IAAiB,EAAA;QACtC,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE;QAC7B,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,KAAK;IACtC;AAEU,IAAA,kBAAkB,CAAC,IAAiB,EAAA;QAC5C,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,KAAK;IACtC;8GA1KW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/FjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+ZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA/DC,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,qBAAqB,qJACrB,sBAAsB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,oBAAoB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,wBAAwB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,eAAA,EAAA,WAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAiGf,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBA1G5C,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP;wBACP,WAAW;wBACX,oBAAoB;wBACpB,qBAAqB;wBACrB,sBAAsB;wBACtB,oBAAoB;wBACpB,wBAAwB;qBACzB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDT,EAAA,eAAA,EAqCgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+ZAAA,CAAA,EAAA;;;MC/FpC,sBAAsB,CAAA;AAxBnC,IAAA,WAAA,GAAA;AAyBW,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAgC,QAAQ,CAAC;AACrD,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAqB,SAAS,CAAC;QAC9C,IAAA,CAAA,IAAI,GAAG,KAAK,EAAY;QACxB,IAAA,CAAA,KAAK,GAAG,KAAK,EAAU;QACvB,IAAA,CAAA,SAAS,GAAG,KAAK,EAAU;AAC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAC1C,IAAA;8GAPY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApBvB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+uFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjBS,oBAAoB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAqBnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAxBlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EACP,CAAC,oBAAoB,CAAC,EAAA,QAAA,EACrB;;;;;;;;;;;;;;;;GAgBT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+uFAAA,CAAA,EAAA;;;MCHpC,oBAAoB,CAAA;AArBjC,IAAA,WAAA,GAAA;AAsBW,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAO,SAAS,CAAC;AACrB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AAK7C,IAAA;IAHC,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;IAClB;8GANW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBrB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,muEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBArBhC,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,QAAA,EACN;;;;;;;;;;;;;;GAcT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,muEAAA,CAAA,EAAA;;;MCIpC,6BAA6B,CAAA;AApB1C,IAAA,WAAA,GAAA;AAqBW,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAY;AACjC,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAU;AAChC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAU;AACnC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAO,SAAS,CAAC;AAKzC,IAAA;IAHC,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;IAClB;8GARW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhB9B;;;;;;;;;;;;GAYT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8/EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAbS,oBAAoB,qDAAE,oBAAoB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAiBzC,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBApBzC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EACP,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,EAAA,QAAA,EAC3C;;;;;;;;;;;;GAYT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,8/EAAA,CAAA,EAAA;;;MCGpC,0BAA0B,CAAA;AAtBvC,IAAA,WAAA,GAAA;AAuBW,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAU;AAC9B,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAY;AAC3C,IAAA;8GAHY,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlB3B;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,++EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAfS,oBAAoB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAmBnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAtBtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,OAAA,EACP,CAAC,oBAAoB,CAAC,EAAA,QAAA,EACrB;;;;;;;;;;;;;;GAcT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,++EAAA,CAAA,EAAA;;;ACtB1C,MAAM,iBAAiB,GAA+B;IAC3D,KAAK;IACL,OAAO;IACP,QAAQ;IACR,MAAM;;AAGF,SAAU,oBAAoB,CAAC,QAAyB,EAAA;AAC5D,IAAA,OAAO,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,QAAQ;AACpD;;MCNa,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;QAEmB,IAAA,CAAA,WAAW,GAAG,UAAU;AACxB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAehE,IAAA;IAbQ,WAAW,GAAA;QAChB,QACE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAW,IAAI,CAAC,WAAW,CAAC,IAAI;AACrD,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,kBAAkB,EAAE,KAAK;AAC1B,SAAA;IAEL;AAEO,IAAA,WAAW,CAAC,QAAkB,EAAA;QACnC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;IACrD;8GAhBW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCkGrB,wBAAwB,CAAA;AAlFrC,IAAA,WAAA,GAAA;AAmFqB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACrC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAEtD,IAAA,CAAA,KAAK,GAAG,KAAK,EAAmB;QAChC,IAAA,CAAA,KAAK,GAAG,iBAAiB;QACzB,IAAA,CAAA,SAAS,GAAG,iBAAiB;AAC7B,QAAA,IAAA,CAAA,OAAO,GAAyB;YACvC,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,EAAE,EAAE,UAAU;AACd,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,WAAW,EAAE,EAAE;SAChB;AAEQ,QAAA,IAAA,CAAA,KAAK,GAAG;AACf,YAAA;AACE,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,GAAG,EAAE,wDAAwD;AAC7D,gBAAA,KAAK,EAAE,YAAY;AACpB,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,GAAG,EAAE,6DAA6D;AAClE,gBAAA,KAAK,EAAE,aAAa;AACrB,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,GAAG,EAAE,iDAAiD;AACtD,gBAAA,KAAK,EAAE,MAAM;AACd,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,GAAG,EAAE,iDAAiD;AACtD,gBAAA,KAAK,EAAE,gBAAgB;AACxB,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,GAAG,EAAE,oCAAoC;AACzC,gBAAA,KAAK,EAAE,WAAW;AACnB,aAAA;SACO;AAiDX,IAAA;AA/CC,IAAA,gBAAgB,CAAC,QAAyB,EAAA;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;IAClC;IAEA,gBAAgB,GAAA;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE;AACrD,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;AACzD,YAAA,IAAI,EAAE,kBAAkB;AACzB,SAAA,CAAC;QACF,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAA,yBAAA,EAA4B,SAAS,OAAO;AAC5D,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,QAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;IAC1B;IAEA,gBAAgB,GAAA;QACd,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,QAAA,KAAK,CAAC,IAAI,GAAG,MAAM;AACnB,QAAA,KAAK,CAAC,MAAM,GAAG,kBAAkB;AACjC,QAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,KAAI;YACzB,MAAM,IAAI,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,GAAG,CAAC,CAAC;YAC1D,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,gBAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAI;AACpB,oBAAA,IAAI;AACF,wBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,MAAgB,CAAC;AACvD,wBAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC5C,wBAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;oBAC1B;oBAAE,OAAO,KAAK,EAAE;AACd,wBAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;oBACnD;AACF,gBAAA,CAAC;AACD,gBAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;YACzB;AACF,QAAA,CAAC;QACD,KAAK,CAAC,KAAK,EAAE;IACf;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE;AACtC,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;IAC1B;8GA1FW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoET,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,sjHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1EC,oBAAoB,+GACpB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,sBAAsB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,6BAA6B,sGAC7B,0BAA0B,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FA0EjB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlFpC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP;wBACP,oBAAoB;wBACpB,WAAW;wBACX,sBAAsB;wBACtB,6BAA6B;wBAC7B,0BAA0B;qBAC3B,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoET,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,sjHAAA,CAAA,EAAA;;;ACzC1C,MAAM,iBAAiB,GAAmB;IAC/C,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC5C,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE;IACtE,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,QAAQ,EAAE;IACtE,EAAE,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC1E,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC/D,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC7D,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC/D,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC3D,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE;IACjE,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC7D,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC3D,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE;IACnE,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE;;AAGjE,MAAM,kBAAkB,GAAmB;IAChD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE;IAC/C,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC/C,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE;IACxD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;IACrD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE;IACvD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE;IACxD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE;IACnD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC3D,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE;IACpD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE;IAClD,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE;;AAG9C,MAAM,gBAAgB,GAA2B,MAAM,CAAC,WAAW,CACxE,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;;MCzEjD,0BAA0B,CAAA;AA8CrC,IAAA,WAAA,GAAA;QA7CiB,IAAA,CAAA,cAAc,GAAG,aAAa;QAC9B,IAAA,CAAA,gBAAgB,GAAG,eAAe;QAClC,IAAA,CAAA,gBAAgB,GAAG,eAAe;QAClC,IAAA,CAAA,mBAAmB,GAAG,iBAAiB;QACvC,IAAA,CAAA,mBAAmB,GAAG,iBAAiB;QACvC,IAAA,CAAA,iBAAiB,GAAG,eAAe;QACnC,IAAA,CAAA,qBAAqB,GAAG,mBAAmB;QAC3C,IAAA,CAAA,kBAAkB,GAAG,gBAAgB;QACrC,IAAA,CAAA,WAAW,GAAG,UAAU;QACxB,IAAA,CAAA,gBAAgB,GAAG,UAAU;AAE7B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC9C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC1C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAEpC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;AAChD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAiB,iBAAiB,CAAC;AACnE,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAiB,kBAAkB,CAAC;AAErE,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAoB,IAAI,CAAC;AAC5D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAsB,IAAI,CAAC;AAChE,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAsB,IAAI,CAAC;AAChE,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAwB,IAAI,CAAC;AACpE,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAwB,IAAI,CAAC;AACpE,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,eAAe,CAA4B,IAAI,CAAC;AAC5E,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,eAAe,CAA0B,IAAI,CAAC;AACxE,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAiB,EAAE,CAAC;AACrD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACvD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAElD,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AACvD,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAC1E,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAEtF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACnE,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACvE,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACvE,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAC3E,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAC3E,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACnF,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAC/E,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAC7D,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAC5E,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAGrE,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,eAAe,EAAE;IACxB;;AAIA,IAAA,mBAAmB,CAAC,OAAqB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IAC7B;IAEA,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;IACrC;AAEA,IAAA,eAAe,CAAC,MAAkB,EAAA;AAChC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;IACtD;IAEA,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAC5B,GAAG,CAAC,CAAC,MAAM,KAAI;YACb,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE;AAClC,gBAAA,OAAO,EAAE;YACX;YACA,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;QAC/B,CAAC,CAAC,CACH;IACH;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;IACjD;;AAIA,IAAA,qBAAqB,CAAC,SAAyB,EAAA;AAC7C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;IACjC;IAEA,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;IACvC;AAEA,IAAA,iBAAiB,CAAC,QAAsB,EAAA;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC;IAC1D;IAEA,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAC9B,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CACzD;IACH;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACnD;;AAIA,IAAA,sBAAsB,CAAC,UAA0B,EAAA;AAC/C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;IACnC;IAEA,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;IACxC;AAEA,IAAA,iBAAiB,CAAC,QAAsB,EAAA;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC;IAC1D;IAEA,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAC9B,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CACvD;IACH;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACnD;;AAIA,IAAA,mBAAmB,CAAC,UAA0B,EAAA;AAC5C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC;IAC/D;IAEA,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAChC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CACvD;IACH;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACtD;;AAIA,IAAA,mBAAmB,CAAC,UAA0B,EAAA;AAC5C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC;IAC/D;IAEA,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAChC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CACzD;IACH;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACtD;;AAIA,IAAA,uBAAuB,CAAC,QAA4B,EAAA;AAClD,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC;IAC3D;IAEA,uBAAuB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CACzD;IACH;IAEA,0BAA0B,GAAA;AACxB,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;IACpD;;AAIA,IAAA,qBAAqB,CAAC,YAA8B,EAAA;AAClD,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC;IACnE;IAEA,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAClC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CACzD;IACH;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;IACxD;;AAIA,IAAA,aAAa,CAAC,MAAsB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;;AAIA,IAAA,mBAAmB,CAAC,OAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAC3D;IAEA,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAChC,GAAG,CAAC,CAAC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,CACpE;IACH;;AAIA,IAAA,aAAa,CAAC,OAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;AAClD,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IACxB;IAEA,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1B,GAAG,CAAC,CAAC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,CACpE;IACH;;IAIA,MAAM,iBAAiB,CAAC,QAAuB,EAAA;AAC7C,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC,kBAAkB,EAAE;YACzB;QACF;QAEA,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;QAErD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAC9B;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CACV,UAAU,QAAQ,CAAA,0CAAA,CAA4C,CAC/D;QACH;IACF;AAEA,IAAA,eAAe,CAAC,MAAoC,EAAA;AAClD,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;AAC/B,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE;gBAC1B,IAAI,CAAC,kBAAkB,EAAE;YAC3B;iBAAO;gBACL,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC;gBACtE,IAAI,MAAM,EAAE;AACV,oBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;gBAC9B;YACF;QACF;AAEA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;AACjC,YAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE;gBAC5B,IAAI,CAAC,oBAAoB,EAAE;YAC7B;iBAAO;gBACL,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC;gBAC5E,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;gBAClC;YACF;QACF;AAEA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;AACjC,YAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE;gBAC5B,IAAI,CAAC,oBAAoB,EAAE;YAC7B;iBAAO;gBACL,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC;gBAC/E,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;gBAClC;YACF;QACF;AAEA,QAAA,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE;AACnC,YAAA,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE;gBAC9B,IAAI,CAAC,sBAAsB,EAAE;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAA4B,CAAC;YAC/D;QACF;AAEA,QAAA,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE;AACnC,YAAA,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE;gBAC9B,IAAI,CAAC,sBAAsB,EAAE;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,UAA4B,CAAC;YAC/D;QACF;AAEA,QAAA,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE;AACvC,YAAA,IAAI,MAAM,CAAC,cAAc,KAAK,IAAI,EAAE;gBAClC,IAAI,CAAC,0BAA0B,EAAE;YACnC;iBAAO;AACL,gBAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,cAAoC,CAAC;YAC3E;QACF;AAEA,QAAA,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE;AACrC,YAAA,IAAI,MAAM,CAAC,YAAY,KAAK,IAAI,EAAE;gBAChC,IAAI,CAAC,wBAAwB,EAAE;YACjC;iBAAO;AACL,gBAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,YAAgC,CAAC;YACrE;QACF;AAEA,QAAA,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE;AACzC,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACnD;AAEA,QAAA,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE;AACnC,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC;QACvC;IACF;IAEA,mBAAmB,GAAA;QACjB,OAAO;AACL,YAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK;AAChC,YAAA,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AACpC,YAAA,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AACpC,YAAA,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK;AACxC,YAAA,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK;AACxC,YAAA,cAAc,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK;AAChD,YAAA,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK;AAC5C,YAAA,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK;AAC9C,YAAA,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;SACnC;IACH;IAEA,wBAAwB,GAAA;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,IAAI,IAAI;IAC7C;;IAIQ,eAAe,GAAA;AACrB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAa,IAAI,CAAC,cAAc,CAAC;QAC5E,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;QACtC;AAEA,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAe,IAAI,CAAC,gBAAgB,CAAC;QAClF,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC;QAC1C;AAEA,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAe,IAAI,CAAC,gBAAgB,CAAC;QAClF,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC;QAC1C;AAEA,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAiB,IAAI,CAAC,mBAAmB,CAAC;QACzF,IAAI,eAAe,EAAE;AACnB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC;QAC9C;AAEA,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAiB,IAAI,CAAC,mBAAmB,CAAC;QACzF,IAAI,eAAe,EAAE;AACnB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC;QAC9C;AAEA,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAqB,IAAI,CAAC,iBAAiB,CAAC;QACzF,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC;QAChD;AAEA,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAmB,IAAI,CAAC,qBAAqB,CAAC;QAC/F,IAAI,iBAAiB,EAAE;AACrB,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAClD;AAEA,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAU,IAAI,CAAC,kBAAkB,CAAC;AAChF,QAAA,IAAI,cAAc,KAAK,IAAI,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC;QAC7C;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAU,IAAI,CAAC,WAAW,CAAC;AACnE,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrB;QACF;IACF;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CACzC,IAAI,CAAC,gBAAgB,CACtB;AACD,QAAA,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;AAChE,YAAA,MAAM,QAAQ,GAAe;gBAC3B,EAAE,EAAE,WAAW,CAAC,EAAE;gBAClB,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,IAAI,EAAE,WAAW,CAAC,EAAE;aACrB;YACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;YACtD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACnD;IACF;AAEQ,IAAA,QAAQ,CAAC,OAAgB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK;QAC7D;IACF;8GAzaW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA,CAAA;;2FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACrBlC,MAAM,eAAe,GAA2B;AAC9C,IAAA,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;AAC/D,IAAA,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;AAC/D,IAAA,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;AAC/D,IAAA,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;AAC/D,IAAA,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;AAC/D,IAAA,CAAC,EAAE,QAAQ;AACX,IAAA,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;AAC/D,IAAA,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;AAC/D,IAAA,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;AAC/D,IAAA,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;AAC/D,IAAA,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ;AAC/D,IAAA,CAAC,EAAE,QAAQ;CACZ;AAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpE,SAAU,YAAY,CAAC,MAAc,EAAE,KAAa,EAAA;AACxD,IAAA,IAAI;AACF,QAAA,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACpD;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AACF;SAEgB,UAAU,CAAC,MAAc,EAAE,QAAgB,EAAE,IAAU,EAAA;AACrE,IAAA,IAAI;AACF,QAAA,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACrC,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,QAAQ,EAAE,QAAQ;AACnB,SAAA,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IACjB;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;IAClC;AACF;SAEgB,UAAU,CAAC,MAAc,EAAE,QAAgB,EAAE,IAAU,EAAA;AACrE,IAAA,IAAI;AACF,QAAA,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACrC,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,YAAY,EAAE,OAAO;AACrB,YAAA,QAAQ,EAAE,QAAQ;AACnB,SAAA,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IACjB;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;IAClC;AACF;SAEgB,cAAc,CAAC,MAAc,EAAE,QAAgB,EAAE,KAAa,EAAA;AAC5E,IAAA,IAAI;AACF,QAAA,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AACnC,YAAA,KAAK,EAAE,UAAU;YACjB,QAAQ;AACT,SAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAClB;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,KAAK,EAAE;IAC/B;AACF;AAEM,SAAU,cAAc,CAAC,IAAY,EAAA;IACzC,IAAI,MAAM,GAAG,EAAE;AACf,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,QAAA,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI;IACzC;IACA,OAAO,CAAA,OAAA,EAAU,MAAM,CAAA,OAAA,CAAS;AAClC;AAKM,SAAU,gBAAgB,CAC9B,IAAU,EACV,MAA0B,EAC1B,MAAc,EACd,QAAgB,EAAA;AAEhB,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACpD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACvC,QAAQ,MAAM;QACZ,KAAK,YAAY,EAAE,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;QAC1C,KAAK,YAAY,EAAE,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;QAC1C,KAAK,YAAY,EAAE,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;QAC1C,SAAS,OAAO,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC;;AAEtD;SAEgB,kBAAkB,CAChC,KAAa,EACb,MAA4B,EAC5B,MAAc,EAAA;AAEd,IAAA,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;IACvC,MAAM,MAAM,GAAa,EAAE;AAC3B,IAAA,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QACzC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD;AACA,IAAA,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE;IACjC,QAAQ,MAAM;AACZ,QAAA,KAAK,cAAc,EAAE,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,OAAO,EAAE;AACnE,QAAA,KAAK,cAAc,EAAE,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,OAAO,EAAE;AACnE,QAAA,KAAK,aAAa,EAAE,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAA,EAAI,OAAO,EAAE;QACvE,SAAS,OAAO,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC;;AAE/C;SAEgB,UAAU,CAAC,IAAY,EAAE,MAAM,GAAG,IAAI,EAAA;AACpD,IAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IAC1D,IAAI,MAAM,GAAG,EAAE;AAEf,IAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACvB,MAAM,IAAI,IAAI;AACd,QAAA,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,YAAY,EAAE;AACpD,YAAA,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;QAC9B;IACF;;AAGA,IAAA,OAAO,MAAM,CAAC,MAAM,GAAG,YAAY,EAAE;QACnC,MAAM,IAAI,GAAG;IACf;AAEA,IAAA,OAAO,MAAM;AACf;;ACjGA,MAAM,UAAU,GAAG,YAAY;AAE/B,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAU;AAC1D,MAAM,kBAAkB,GAAG,CAAC,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAU;AAChG,MAAM,gBAAgB,GAAG,CAAC,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAU;AACpF,MAAM,oBAAoB,GAAG,CAAC,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,CAAU;MAqK1F,wBAAwB,CAAA;;AA6JnC,IAAA,WAAA,GAAA;;AA1JiB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,0BAA0B,CAAC;;AAI9C,QAAA,IAAA,CAAA,OAAO,GAAG;AAC3B,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,WAAW,EAAE,6CAA6C;AAC1D,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,EAAE,EAAE,UAAU;AACd,YAAA,UAAU,EAAE,IAAI;SACO;AAEhB,QAAA,IAAA,CAAA,iBAAiB,GAAG;AAC3B,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE;AAC1C,YAAA,EAAE,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC7C,YAAA,EAAE,KAAK,EAAE,UAAmB,EAAE,KAAK,EAAE,UAAU,EAAE;SAClD;AAEQ,QAAA,IAAA,CAAA,iBAAiB,GAAG;AAC3B,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE;AAC1C,YAAA,EAAE,KAAK,EAAE,gBAAyB,EAAE,KAAK,EAAE,gBAAgB,EAAE;AAC7D,YAAA,EAAE,KAAK,EAAE,YAAqB,EAAE,KAAK,EAAE,YAAY,EAAE;AACrD,YAAA,EAAE,KAAK,EAAE,YAAqB,EAAE,KAAK,EAAE,YAAY,EAAE;AACrD,YAAA,EAAE,KAAK,EAAE,YAAqB,EAAE,KAAK,EAAE,kBAAkB,EAAE;SAC5D;AAEQ,QAAA,IAAA,CAAA,eAAe,GAAG;AACzB,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE;AAC1C,YAAA,EAAE,KAAK,EAAE,gBAAyB,EAAE,KAAK,EAAE,gBAAgB,EAAE;AAC7D,YAAA,EAAE,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC7C,YAAA,EAAE,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC7C,YAAA,EAAE,KAAK,EAAE,UAAmB,EAAE,KAAK,EAAE,UAAU,EAAE;SAClD;AAEQ,QAAA,IAAA,CAAA,mBAAmB,GAAG;AAC7B,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE;AAC1C,YAAA,EAAE,KAAK,EAAE,gBAAyB,EAAE,KAAK,EAAE,gBAAgB,EAAE;AAC7D,YAAA,EAAE,KAAK,EAAE,cAAuB,EAAE,KAAK,EAAE,UAAU,EAAE;AACrD,YAAA,EAAE,KAAK,EAAE,cAAuB,EAAE,KAAK,EAAE,UAAU,EAAE;AACrD,YAAA,EAAE,KAAK,EAAE,aAAsB,EAAE,KAAK,EAAE,UAAU,EAAE;SACrD;;AAID,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAS,UAAU,CAAC;AACzC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAS,UAAU,CAAC;AAC3C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAS,UAAU,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAS,UAAU,CAAC;AAC7C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAS,UAAU,CAAC;AAC7C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAS,UAAU,CAAC;AACjD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAS,UAAU,CAAC;AAE/C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB;AACpD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU;;AAIxC,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAoB,CAAC;AAE5E,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CACtB,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC,IAAI,CACzC,GAAG,CAAC,CAAC,OAAO,KAAK;AACf,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE;YAC1C,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACnE,SAAA,CAAC,CACH,EACD,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,CAC/D;AAED,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CACxB,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAC3C,GAAG,CAAC,CAAC,SAAS,KAAK;AACjB,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE;AAC1C,YAAA,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;gBACjD,KAAK;AACL,gBAAA,KAAK,EAAE,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,CAAG;AAC7B,aAAA,CAAC,CAAC;AACJ,SAAA,CAAC,CACH,EACD,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,CAC/D;AAED,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CACxB,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAC5C,GAAG,CAAC,CAAC,UAAU,KAAK;AAClB,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE;AAC1C,YAAA,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;gBACpD,KAAK;AACL,gBAAA,KAAK,EAAE,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,CAAG;AAC7B,aAAA,CAAC,CAAC;AACJ,SAAA,CAAC,CACH,EACD,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,CAC/D;AAEO,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACxC,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;YAC9B,OAAO,EAAE,KAAK,UAAU,GAAG,OAAO,GAAG,EAAE;AACzC,QAAA,CAAC,CAAC;AAEM,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;YAChC,OAAO,EAAE,KAAK,UAAU,GAAG,KAAK,GAAG,EAAE;AACvC,QAAA,CAAC,CAAC;AAEM,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAC1C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;YAChC,OAAO,EAAE,KAAK,UAAU,GAAG,KAAK,GAAG,EAAE;AACvC,QAAA,CAAC,CAAC;AAEe,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,IAAI,EAAE;AAE1C,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE;YACpC,IAAI,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,gBAAgB,EAAE;gBAChD,OAAO,kBAAkB,CAAC,OAAO,EAAE,EAAsB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACtF;YACA,OAAO,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,CAAC;AACxD,QAAA,CAAC,CAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;YAClC,IAAI,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,gBAAgB,EAAE;AAChD,gBAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAoB,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;YACpH;AACA,YAAA,OAAO,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC;AACxF,QAAA,CAAC,CAAC;QAEF,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MACrB,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAChF;AAED,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE;YACpC,IAAI,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,gBAAgB,EAAE;AAChD,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE;gBACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI;AAC7C,gBAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,kBAAkB,CAAC,OAAO,EAAE,EAAsB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE;YACpG;AACA,YAAA,OAAO,cAAc,CACnB,IAAI,CAAC,iBAAiB,EAAE,EACxB,IAAI,CAAC,mBAAmB,EAAE,EAC1B,OAAO,CACR;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;YAC5B,MAAM,MAAM,GAAG,iDAAiD;AAChE,YAAA,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;AACrC,YAAA,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,QAAA,CAAC,CAAC;QAKA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE;QACpD,IAAI,KAAK,CAAC,MAAM;YAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,KAAK,CAAC,QAAQ;YAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9D,IAAI,KAAK,CAAC,QAAQ;YAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChE,IAAI,KAAK,CAAC,UAAU;YAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;QACjE,IAAI,KAAK,CAAC,UAAU;YAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;QACjE,IAAI,KAAK,CAAC,cAAc;YAAE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC;QAC7E,IAAI,KAAK,CAAC,YAAY;YAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC;IACzE;;AAIA,IAAA,cAAc,CAAC,QAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/B,QAAA,IAAI,QAAQ,KAAK,UAAU,IAAI,CAAC,QAAQ,EAAE;AACxC,YAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE;YACrC;QACF;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,QAAQ,CAAC;QAC7E,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC5C;IACF;AAEA,IAAA,gBAAgB,CAAC,UAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;AACnC,QAAA,IAAI,UAAU,KAAK,UAAU,IAAI,CAAC,UAAU,EAAE;AAC5C,YAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE;YACvC;QACF;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,UAAU,CAAC;QACjF,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAC9C;IACF;AAEA,IAAA,gBAAgB,CAAC,YAAoB,EAAA;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC;AACrC,QAAA,IAAI,YAAY,KAAK,UAAU,IAAI,CAAC,YAAY,EAAE;AAChD,YAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE;YACvC;QACF;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,YAAY,CAAC;QACjG,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAC9C;IACF;AAEA,IAAA,kBAAkB,CAAC,UAAkB,EAAA;AACnC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;AACrC,QAAA,IAAI,UAAU,KAAK,UAAU,IAAI,CAAC,UAAU,EAAE;AAC5C,YAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE;YACzC;QACF;AACA,QAAA,IAAI,kBAAkB,CAAC,QAAQ,CAAC,UAA+C,CAAC,EAAE;AAChF,YAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,UAA+C,CAAC;QACvF;IACF;AAEA,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,OAAO,GAAI,KAAK,CAAC,MAA2B,CAAC,OAAO;AAC1D,QAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,OAAO,CAAC;IAC/C;AAEA,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,MAAM,OAAO,GAAI,KAAK,CAAC,MAA2B,CAAC,OAAO;AAC1D,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC;IACzC;AAEA,IAAA,kBAAkB,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,KAAK,EAAE;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE;YACzC;QACF;AACA,QAAA,IAAI,kBAAkB,CAAC,QAAQ,CAAC,KAA0C,CAAC,EAAE;AAC3E,YAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAuB,CAAC;QAC/D;IACF;AAEA,IAAA,sBAAsB,CAAC,KAAa,EAAA;AAClC,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,KAAK,EAAE;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE;YAC7C;QACF;AACA,QAAA,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAwC,CAAC,EAAE;AACvE,YAAA,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,KAA2B,CAAC;QACvE;IACF;AAEA,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,KAAK,EAAE;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE;YAC3C;QACF;AACA,QAAA,IAAI,oBAAoB,CAAC,QAAQ,CAAC,KAA4C,CAAC,EAAE;AAC/E,YAAA,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,KAAyB,CAAC;QACnE;IACF;8GAlQW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7JzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2JT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,u3GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9JS,oBAAoB,gHAAE,sBAAsB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAgK3C,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAnKpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,EAAA,eAAA,EACtC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2JT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,u3GAAA,CAAA,EAAA;;;MC3LU,iCAAiC,CAAA;AAyC5C,IAAA,WAAA,GAAA;QAxCiB,IAAA,CAAA,WAAW,GAAG,aAAa;AACpC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC9C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAE1C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAsB,EAAE,CAAC;QAC9D,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAyB;AACvE,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,MAAM,EAAE,EAAE;AACX,SAAA,CAAC;AAEe,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;QAE/D,IAAA,CAAA,YAAY,GAAoC,aAAa,CAAC;AACnE,YAAA,IAAI,CAAC,eAAe;AACpB,YAAA,IAAI,CAAC,YAAY;AAClB,SAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAI;;YAE5C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE;AAClC,gBAAA,OAAO,cAAc;YACvB;AAEA,YAAA,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,UAAU,KAAI;AACvC,gBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClF,OAAO;AACL,oBAAA,GAAG,UAAU;oBACb,QAAQ;oBACR,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACvC,0BAAE;0BACA,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC/B,8BAAE;8BACA,UAAU,CAAC,SAAS;oBACxB,aAAa,EAAE,QAAQ,GAAG,UAAU,CAAC,SAAS,GAAG,SAAS;iBAC3D;AACH,YAAA,CAAC,CAAC;QACJ,CAAC,CAAC,CACH;AAEM,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;;AAsG7D,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAyD,IAAI,CAAC;AACpF,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAqC,EAAE,CAAC;AAC5D,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,CAAC;QArGvE,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA,IAAA,iBAAiB,CAAC,WAAgC,EAAA;AAChD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;AACtC,QAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC;IAC/C;IAEA,aAAa,CAAC,EAAU,EAAE,OAAgB,EAAA;AACxC,QAAA,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK;AAEhF,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,EAAE,CAAC;AAC/D,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,EAAE,CAAC;QAE7D,IAAI,OAAO,EAAE;AACX,YAAA,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB;aAAO;AACL,YAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB;QAEA,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE;AAC3D,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;IACrD;AAEA,IAAA,wBAAwB,CAAC,EAAU,EAAA;QACjC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK;AAEzD,QAAA,MAAM,QAAQ,GAAG;AACf,YAAA,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,EAAE,CAAC;AAClD,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,EAAE,CAAC;SACjD;AAED,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;IACrD;IAEA,oBAAoB,GAAA;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAC3B,GAAG,CAAC,CAAC,WAAW,KAAI;;YAElB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE;AAClC,gBAAA,OAAO,EAAE;YACX;AACA,YAAA,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,QAAQ,CAAC;QAChE,CAAC,CAAC,CACH;IACH;AAEA;;;;AAIG;AACH,IAAA,sBAAsB,CAAC,KAA6B,EAAA;AAClD,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;IAClD;AAEA;;;;AAIG;IACH,qBAAqB,GAAA;AACnB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK;QAClD,OAAO;AACL,YAAA,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC;AAClC,YAAA,MAAM,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;SACjC;IACH;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CACxC,IAAI,CAAC,WAAW,CACjB;YAED,IAAI,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;AACrD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;YAC1C;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,2DAA2D,EAAE,KAAK,CAAC;QAClF;IACF;AAEQ,IAAA,kBAAkB,CAAC,KAAc,EAAA;QACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,SAAS,GAAG,KAAgC;QAClD,QACE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACnC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEtC;AAOA,IAAA,gBAAgB,CAAC,QAAuD,EAAA;AACtE,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;AAEA,IAAA,MAAM,aAAa,CAAC,EAAU,EAAE,KAAc,EAAA;AAC5C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;AACrC,QAAA,IAAI,CAAC,QAAQ;YAAE;QAEf,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;AAC3D,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;AAC3D,YAAA,UAAU,CACR,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,EAC9D,IAAI,CACL;QACH;AAAE,QAAA,MAAM;YACN,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACzD,YAAA,UAAU,CACR,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,EAC9D,IAAI,CACL;QACH;IACF;AAEQ,IAAA,2BAA2B,CAAC,WAAgC,EAAA;AAClE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK;AAClD,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAEtD,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5E,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1E,MAAM,aAAa,GACjB,cAAc,CAAC,MAAM,KAAK,YAAY,CAAC,OAAO,CAAC,MAAM;YACrD,aAAa,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,CAAC,MAAM;QAErD,IAAI,aAAa,EAAE;AACjB,YAAA,MAAM,YAAY,GAAG;AACnB,gBAAA,OAAO,EAAE,cAAc;AACvB,gBAAA,MAAM,EAAE,aAAa;aACtB;AACD,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;YAC1C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC;AAEvD,YAAA,MAAM,UAAU,GAAG;AACjB,gBAAA,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACzD,gBAAA,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACzD;AACD,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,gBAAA,OAAO,CAAC,IAAI,CACV,mDAAmD,EACnD,UAAU,CACX;YACH;QACF;IACF;8GAxMW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cADpB,MAAM,EAAA,CAAA,CAAA;;2FACnB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAD7C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCwHrB,+BAA+B,CAAA;AAe1C,IAAA,WAAA,GAAA;;AAbiB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAC1C,iCAAiC,CAClC;AACgB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;;QAG9C,IAAA,CAAA,cAAc,GAAG,kBAAkB;;AAGjC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAmB,KAAK,CAAC;AAC9C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAS,EAAE,CAAC;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,CAAC;AAmC1C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW;;AAGjD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;YACjE,IAAI,KAAK,KAAK,CAAC;AAAE,gBAAA,OAAO,EAAE;YAC1B,IAAI,KAAK,GAAG,EAAE;AAAE,gBAAA,OAAO,KAAK;AAC5B,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;AACzB,QAAA,CAAC,CAAC;AACiB,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAC5C,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK,CAAC,CACtC;AACkB,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AACrD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,KAAI;gBACxD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE;gBACnD,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE;gBACpD,MAAM,qBAAqB,GAAG,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;AAEzE,gBAAA,MAAM,aAAa,GACjB,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,oBAAA,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC;AACnC,oBAAA,qBAAqB,CAAC,QAAQ,CAAC,UAAU,CAAC;AAE5C,gBAAA,MAAM,aAAa,GACjB,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK;qBAC5B,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC;qBACxD,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC;AAC3D,qBAAC,IAAI,CAAC,YAAY,EAAE,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;gBAE7D,OAAO,aAAa,IAAI,aAAa;AACvC,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;;YAE/B,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,IAAI,OAAO,KAAK,OAAO;oBAAE,OAAO,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC;gBAChD,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACiB,QAAA,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CACpD,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,CAC9C;;AAGkB,QAAA,IAAA,CAAA,OAAO,GAAG;AAC3B,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,WAAW,EAAE,sDAAsD;AACnE,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,EAAE,EAAE,iBAAiB;SACE;AAEN,QAAA,IAAA,CAAA,aAAa,GAAG;AACjC,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE;AAC1C,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;SACrC;AAEkB,QAAA,IAAA,CAAA,sBAAsB,GAAG;AAC1C,YAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;AAC5C,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE;AAC3C,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE;SAC9C;;AAGkB,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,gBAAgB;QApG5E,IAAI,CAAC,aAAa,EAAE;;QAGpB,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAkB;AAC3B,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,gBAAA,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE;AAC3B,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;aACjC;YACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;AACrD,QAAA,CAAC,CAAC;IACJ;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAgB,IAAI,CAAC,cAAc,CAAC;YACzE,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;AAC7C,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,gBAAA,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC3D,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC/B;AACA,gBAAA,IAAI,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE;AAC3B,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC9C;YACF;QACF;AAAE,QAAA,MAAM;;QAER;IACF;AAwEU,IAAA,aAAa,CACrB,YAAoB,EAAA;QAEpB,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,IAAI,MAAM;IACtE;IAEU,eAAe,CAAC,YAAoB,EAAE,KAAc,EAAA;QAC5D,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC;IAC5D;;AAGA,IAAA,cAAc,CAAC,KAAyB,EAAA;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;QAChE,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAyB,CAAC;QACzD;IACF;IAEA,kBAAkB,CAAC,EAAU,EAAE,KAAa,EAAA;QAC1C,QAAQ,KAAK;AACX,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBACpD;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC;gBAC/C;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC;gBAChD;;IAEN;AAEA,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;AAEA,IAAA,SAAS,CAAC,YAAoB,EAAA;QAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AAC5B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AACzB,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAC3B;iBAAO;AACL,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACxB;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;;AAGU,IAAA,kBAAkB,CAAC,UAA6B,EAAA;QACxD,IAAI,CAAC,UAAU,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE;QACnC,OAAO,UAAU,CAAC,SAAS,GAAG,SAAS,GAAG,QAAQ;IACpD;8GA1KW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjGhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+ZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAjEC,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,qBAAqB,qJACrB,sBAAsB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,oBAAoB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,wBAAwB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,eAAA,EAAA,WAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAmGf,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBA5G3C,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,OAAA,EACP;wBACP,WAAW;wBACX,oBAAoB;wBACpB,qBAAqB;wBACrB,sBAAsB;wBACtB,oBAAoB;wBACpB,wBAAwB;qBACzB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DT,EAAA,eAAA,EAqCgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,+ZAAA,CAAA,EAAA;;;AClHjD;;;AAGG;MAEU,6BAA6B,CAAA;AAexC,IAAA,WAAA,GAAA;QAdiB,IAAA,CAAA,WAAW,GAAG,SAAS;AAChC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;;AAG9C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,iCAAiC,CAAC;AAC/D,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,iCAAiC,CAAC;AAC9D,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,iCAAiC,CAAC;AAC9D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAEhD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,eAAe,CAAkB,EAAE,CAAC;AAC1D,QAAA,IAAA,CAAA,QAAQ,GACb,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAC7B,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,EAAqB,EAAE,CAAC;QAG/E,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA;;AAEG;AACH,IAAA,mBAAmB,CACjB,IAAY,EACZ,WAAoB,EACpB,eAAuC,EAAA;AAEvC,QAAA,MAAM,MAAM,GAAkB;AAC5B,YAAA,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE;YACrB,IAAI;YACJ,WAAW;AACX,YAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnC,YAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnC,YAAA,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;SACnD;AAED,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC;AACtD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;AAElD,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACH,MAAM,WAAW,CAAC,QAAgB,EAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AACvE,QAAA,IAAI,CAAC,MAAM;YAAE;;QAGb,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;QACrE,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QACzE,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;AACnE,QAAA,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YACtB,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QACtD;IACF;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,QAAgB,EAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACvD,YAAA,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE;gBAC1B,OAAO;AACL,oBAAA,GAAG,MAAM;AACT,oBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnC,oBAAA,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE;iBACpC;YACH;AACA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;IACpD;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,QAAgB,EAAA;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAC9C,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CACzB;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;IACpD;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,MAAqB,EAAA;;AAE7B,QAAA,MAAM,SAAS,GAAkB;AAC/B,YAAA,GAAG,MAAM;AACT,YAAA,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE;AACrB,YAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnC,YAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC;AAED,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC;AACzD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;AAElD,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,QAAgB,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;IACjE;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,QAAgB,EAAA;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAC9C,CAAC,CAAC,EAAE,KAAK,QAAQ,GAAG,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAC5D;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;IACpD;AAEA;;AAEG;AACH,IAAA,MAAM,kBAAkB,CACtB,QAAgB,EAChB,OAA4B,EAAA;QAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AACvE,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC7B,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;QACvE;AACA,QAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;YAC5B,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QAC3E;AACA,QAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;YAC5B,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QACrE;QACA,IAAI,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YAC3C,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QACtD;IACF;AAEA;;AAEG;AACH,IAAA,oBAAoB,CAClB,QAAgB,EAChB,IAAY,EACZ,WAAoB,EAAA;AAEpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACvD,YAAA,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE;gBAC1B,OAAO;AACL,oBAAA,GAAG,MAAM;oBACT,IAAI;oBACJ,WAAW;AACX,oBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC;YACH;AACA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;IACpD;AAEA;;AAEG;AACK,IAAA,oBAAoB,CAC1B,eAAuC,EAAA;;AAGvC,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,mBAAmB,EAAE,eAAe,EAAE,mBAAmB,IAAI,IAAI;AACjE,YAAA,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,IAAI,IAAI;AAC/D,YAAA,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,IAAI,IAAI;AAC/D,YAAA,WAAW,EAAE,eAAe,EAAE,WAAW,IAAI,IAAI;SAClD;;QAGD,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,EAAE;QACrE,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE;QACpE,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE;;AAGvE,QAAA,MAAM,UAAU,GAAG,CAAC,GAAa,EAAE,QAAmB,KACpD,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;QAEnF,OAAO;YACL,YAAY,EAAE,OAAO,CAAC;AACpB,kBAAE;oBACE,OAAO,EAAE,UAAU,CACjB,YAAY,CAAC,OAAO,EACpB,eAAe,EAAE,eAAe,CACjC;oBACD,QAAQ,EAAE,UAAU,CAClB,YAAY,CAAC,QAAQ,EACrB,eAAe,EAAE,eAAe,CACjC;AACF;kBACD,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YACjC,WAAW,EAAE,OAAO,CAAC;AACnB,kBAAE;oBACE,OAAO,EAAE,UAAU,CACjB,YAAY,CAAC,OAAO,EACpB,eAAe,EAAE,qBAAqB,CACvC;oBACD,MAAM,EAAE,UAAU,CAChB,YAAY,CAAC,MAAM,EACnB,eAAe,EAAE,qBAAqB,CACvC;AACF;kBACD,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC/B,WAAW,EAAE,OAAO,CAAC;AACnB,kBAAE;oBACE,OAAO,EAAE,UAAU,CACjB,eAAe,CAAC,OAAO,EACvB,eAAe,EAAE,kBAAkB,CACpC;oBACD,QAAQ,EAAE,UAAU,CAClB,eAAe,CAAC,QAAQ,EACxB,eAAe,EAAE,kBAAkB,CACpC;AACF;kBACD,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YACjC,IAAI,EAAE,OAAO,CAAC;kBACV,CAAC,MAAK;oBACJ,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE;oBACxD,OAAO;AACL,wBAAA,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI;AACpC,wBAAA,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,IAAI;AACxC,wBAAA,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI;AAC1C,wBAAA,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,IAAI;wBACxC,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;wBAC5C,UAAU,EAAE,SAAS,CAAC,UAAU;qBACjC;AACH,gBAAA,CAAC;AACH,kBAAE,SAAS;SACd;IACH;AAEA;;AAEG;IACK,WAAW,GAAA;AACjB,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GACT,IAAI,CAAC,cAAc,CAAC,GAAG,CAAkB,IAAI,CAAC,WAAW,CAAC;YAC5D,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;YACjC;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC;QACnE;IACF;AAEA;;AAEG;IACK,UAAU,GAAA;QAChB,OAAO,CAAA,OAAA,EAAU,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;IAC1E;8GA9QW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cADhB,MAAM,EAAA,CAAA,CAAA;;2FACnB,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MC05CrB,2BAA2B,CAAA;IAEtC,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;AA2DA,IAAA,WAAA,GAAA;;AAxDiB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,6BAA6B,CAAC;AACtD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAC3C,iCAAiC,CAClC;AACgB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAC1C,iCAAiC,CAClC;AACgB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAC1C,iCAAiC,CAClC;AACkB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAGnC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,MAAM,CAAC;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAS,EAAE,CAAC;AAChC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAgB,IAAI,CAAC;AAC9C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAgB,IAAI,CAAC;;AAGxC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAS,EAAE,CAAC;AAC/B,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAS,EAAE,CAAC;AACtC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAU,IAAI,CAAC;AAC3C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAU,IAAI,CAAC;AAC1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAU,IAAI,CAAC;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,CAAC;AAChD,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,CAAC;AACtD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,CAAC;;AAGnD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAgB,IAAI,CAAC;AAC7C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAS,EAAE,CAAC;AAC7B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAS,EAAE,CAAC;;AAGpC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAS,EAAE,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAgB,IAAI,CAAC;AACzC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAU,KAAK,CAAC;;AAGnC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAgB,IAAI,CAAC;AAC9C,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAU,IAAI,CAAC;AACzC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAU,IAAI,CAAC;AACxC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAU,IAAI,CAAC;;AAExC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAgB,IAAI,CAAC;;AAG5C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAgB,IAAI,CAAC;AAC1C,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAY,SAAS,CAAC;;AAGxC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAgB,IAAI,CAAC;;QAGlD,IAAA,CAAA,YAAY,GAAyC,IAAI;;AAiB9C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO;AAErC,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE;YAC9C,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAC1B,CAAC,MAAM,KACL,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACzC,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CACpD;AACH,QAAA,CAAC,CAAC;AAEiB,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,YAAA,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAChC,gBAAA,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU;oBAAE,OAAO,CAAC,CAAC;AAC5C,gBAAA,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU;AAAE,oBAAA,OAAO,CAAC;AAC3C,gBAAA,OAAO,CAAC;AACV,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEiB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CACxC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,CAClC;AAEkB,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAChD,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,KAAK,CAAC,CAC1C;AAEkB,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;AACjC,YAAA,IAAI,CAAC,EAAE;AAAE,gBAAA,OAAO,IAAI;YACpB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI;AACxD,QAAA,CAAC,CAAC;AAEiB,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAChD,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAClC,YAAA,IAAI,CAAC,EAAE;AAAE,gBAAA,OAAO,IAAI;YACpB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI;AACxD,QAAA,CAAC,CAAC;AAEiB,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAClD,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;AAChC,YAAA,IAAI,CAAC,EAAE;AAAE,gBAAA,OAAO,EAAE;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AACtD,YAAA,OAAO,MAAM,EAAE,IAAI,IAAI,EAAE;AAC3B,QAAA,CAAC,CAAC;;AAGiB,QAAA,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CACjD,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,oBAAoB,IAAI,IAAI,CACvD;AACkB,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAChD,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,mBAAmB,IAAI,IAAI,CACtD;AACkB,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAChD,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,mBAAmB,IAAI,IAAI,CACtD;;AAEkB,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,YAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;AACzE,QAAA,CAAC,CAAC;AACiB,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACnD,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;AAC9E,QAAA,CAAC,CAAC;AACiB,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACnD,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;AAC3E,QAAA,CAAC,CAAC;;AAGiB,QAAA,IAAA,CAAA,OAAO,GAAyB;AACjD,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,WAAW,EAAE,sCAAsC;AACnD,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,EAAE,EAAE,aAAa;SAClB;QAzFC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,oBAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;gBACjC;AACA,gBAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAK;AAClC,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC7B,CAAC,EAAE,IAAI,CAAC;YACV;AACF,QAAA,CAAC,CAAC;IACJ;;AAiFQ,IAAA,SAAS,CAAC,OAAe,EAAE,IAAA,GAAkB,SAAS,EAAA;AAC5D,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1B;;AAGA,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;AAEA,IAAA,cAAc,CAAC,QAAgB,EAAA;QAC7B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,KACnC,OAAO,KAAK,QAAQ,GAAG,IAAI,GAAG,QAAQ,CACvC;IACH;AAEA,IAAA,YAAY,CAAC,QAAgB,EAAA;QAC3B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,KAC7B,OAAO,KAAK,QAAQ,GAAG,IAAI,GAAG,QAAQ,CACvC;IACH;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;IAC/B;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;;AAExB,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;;QAGlE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAC5B,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACnD;QACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CACzB,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACnD;IACH;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;;AAGA,IAAA,kBAAkB,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B;IACF;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;QACvB,KAAK,CAAC,cAAc,EAAE;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;QAErC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;YACtC;QACF;;QAGA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CACxC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CACnD;QACD,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,wCAAwC,CAAC;YAC5D;QACF;QAEA,IAAI,CAAC,cAAc,CAAC,mBAAmB,CACrC,IAAI,EACJ,IAAI,CAAC,iBAAiB,EAAE,EACxB;AACE,YAAA,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE;AAC/C,YAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC7C,YAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;YAC7C,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACnD,qBAAqB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/D,kBAAkB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1D,SAAA,CACF;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,6BAA6B,CAAC;QAC7C,IAAI,CAAC,kBAAkB,EAAE;IAC3B;;AAGA,IAAA,WAAW,CAAC,QAAgB,EAAA;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AAC5D,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;AAClD,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;IAC3B;AAEA,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B;IACF;AAEA,IAAA,UAAU,CAAC,KAAY,EAAA;QACrB,KAAK,CAAC,cAAc,EAAE;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;QAEvC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;YACtC;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ;YAAE;;AAGf,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CACxC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CACxE;QACD,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,wCAAwC,CAAC;YAC5D;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,oBAAoB,CACtC,QAAQ,EACR,IAAI,EACJ,IAAI,CAAC,eAAe,EAAE,CACvB;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,6BAA6B,CAAC;QAC7C,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,2CAA2C,CAAC;IAC7D;;AAGA,IAAA,UAAU,CAAC,KAAgB,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;AAEA,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,UAAU,CAAC,KAAgB,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAE1B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,KAAK;QACvC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B;IACF;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;AACvB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC;IACF;AAEQ,IAAA,WAAW,CAAC,IAAU,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,4BAA4B,CAAC;YAClD;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,MAAgB;AAC1C,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,CAAC;AACD,QAAA,MAAM,CAAC,OAAO,GAAG,MAAK;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAC7C,QAAA,CAAC;AACD,QAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;IACzB;AAEA,IAAA,kBAAkB,CAAC,KAAY,EAAA;AAC7B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAA6B;QACpD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;IAEA,cAAc,GAAA;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;QAErC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,6BAA6B,CAAC;YACnD;QACF;AAEA,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB;;AAGhD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,yBAAyB,CAAC;gBAC/C;YACF;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,kCAAkC,CAAC;gBACxD;YACF;AAEA,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC;YAC9C,IAAI,CAAC,kBAAkB,EAAE;QAC3B;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC;QAC7C;IACF;;AAGA,IAAA,YAAY,CAAC,QAAgB,EAAA;AAC3B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;IAC5B;IAEA,qBAAqB,GAAA;AACnB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,QAAQ,EAAE;AAC/C,YAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC3C,YAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACzC,YAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAC1C,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,6BAA6B,CAAC;QAC7C,IAAI,CAAC,kBAAkB,EAAE;IAC3B;;AAGA,IAAA,cAAc,CAAC,QAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,mCAAmC,CAAC;IACrD;;AAGA,IAAA,cAAc,CAAC,QAAgB,EAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AAC5D,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;QAC3D,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO;QAC/E,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAExB,QAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;IACnC;;AAGA,IAAA,cAAc,CAAC,QAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC7B;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;QACtC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC1C,YAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;QAClC;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;IAC3B;;AAGA,IAAA,gBAAgB,CAAC,QAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC;IAC9C;;IAGU,oBAAoB,GAAA;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,EAAE;QAC9D,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM;IACrD;IAEU,0BAA0B,GAAA;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE;QAC7D,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM;IACnD;IAEU,0BAA0B,GAAA;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE;QAC7D,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM;IACrD;AAEU,IAAA,UAAU,CAAC,SAAiB,EAAA;QACpC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE;IACjD;AAEU,IAAA,gBAAgB,CAAC,MAAqB,EAAA;QAC9C,MAAM,KAAK,GAAa,EAAE;;QAG1B,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO;QACvD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ;AACzD,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,YAAA,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC5B,YAAA,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA,IAAA,EAAO,EAAE,CAAA,IAAA,CAAM,CAAC,CAAC;AACvD,YAAA,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA,IAAA,EAAO,EAAE,CAAA,KAAA,CAAO,CAAC,CAAC;QAC3D;;QAGA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO;QACtD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM;AACpD,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACrD,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACpC,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;AAC1B,YAAA,YAAY,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA,IAAA,EAAO,EAAE,CAAA,SAAA,CAAW,CAAC,CAAC;AAC5D,YAAA,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA,IAAA,EAAO,EAAE,CAAA,QAAA,CAAU,CAAC,CAAC;QAC5D;;QAGA,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO;QACzD,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ;AAC3D,QAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7D,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACpC,YAAA,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;AAC3B,YAAA,eAAe,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA,IAAA,EAAO,EAAE,CAAA,IAAA,CAAM,CAAC,CAAC;AAC1D,YAAA,gBAAgB,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA,IAAA,EAAO,EAAE,CAAA,KAAA,CAAO,CAAC,CAAC;QAC9D;AAEA,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB;IACjE;IAEU,mBAAmB,CAC3B,MAAmC,EACnC,MAAc,EAAA;QAEd,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;AACjC,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACvB,YAAA,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QACxB;aAAO;AACL,YAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QACrB;AACA,QAAA,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;IACrB;IAEU,cAAc,CAAC,WAAwB,EAAE,MAAc,EAAA;AAC/D,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;IAChC;8GAthBW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA14C5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwkBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,s7WAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA9kBC,WAAW,wdACX,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,qBAAqB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,sBAAsB,8HACtB,oBAAoB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FA44CX,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAp5CvC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP;wBACP,WAAW;wBACX,oBAAoB;wBACpB,qBAAqB;wBACrB,sBAAsB;wBACtB,oBAAoB;qBACrB,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwkBT,EAAA,eAAA,EAg0BgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,s7WAAA,CAAA,EAAA;wDAI/C,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,gBAAgB;;;MCp2CnB,gBAAgB,CAAA;AAmC3B,IAAA,WAAA,GAAA;AAlCQ,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACnC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAEzC,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAgB,EAAE,CAAC;AAGzB,QAAA,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAgB,MAAM,EAAE,SAAS;AAClE,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EACvE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEpC,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAEjC,QAAA,IAAA,CAAA,YAAY,GAAG,SAAS,CAAgB,MAAM,EAAE,SAAS;AAC9D,aAAA,IAAI,CACH,MAAM,CACJ,CAAC,KAAK,KACJ,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;YAC/B,CAAC,KAAK,CAAC,QAAQ;AACf,YAAA,KAAK,CAAC,GAAG,KAAK,GAAG,CACpB,EACD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;YACnB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE;AACrC,QAAA,CAAC,CAAC;AAEI,QAAA,IAAA,CAAA,UAAU,GAAG,SAAS,CAAa,QAAQ,EAAE,YAAY;AAC9D,aAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAC5D,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;;QAIrC,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACrC,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,kBAAkB,EAAE;;AAEzB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC9B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE;IACnC;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;IAChC;IAEA,YAAY,GAAA;QACV,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACvE;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IACnD;AAEA;;;;AAIG;IACK,kBAAkB,GAAA;;QAExB,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE;YACpD;QACF;QAEA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC9D,QAAA,IAAI,CAAC,kBAAkB,CAAC,EAAE,GAAG,kBAAkB;AAC/C,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4DrC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACzD;8GA5IW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnCjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+gHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAxCC,wBAAwB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,wBAAwB,EAAA,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,gCAAgC,mEAChC,+BAA+B,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC/B,+BAA+B,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC/B,2BAA2B,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA,CAAA;;2FAqClB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAjD5B,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,aAAa,EAAA,eAAA,EAEN,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,SAAS,EAAA,OAAA,EACjC;wBACP,wBAAwB;wBACxB,wBAAwB;wBACxB,gCAAgC;wBAChC,+BAA+B;wBAC/B,+BAA+B;wBAC/B,2BAA2B;qBAC5B,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+gHAAA,CAAA,EAAA;;;MCjEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iCAAiC,CAAC;AAsDpE,IAAA;AApDC;;;AAGG;AACH,IAAA,mBAAmB,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;IACzC;AAEA;;;AAGG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;IAC9C;AAEA;;;;;;;;;;;;;;;;;;;;;;AAsBG;IACH,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM;IACpC;AAEA;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,QAAuD,EAAA;AACtE,QAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACjD;8GAxDW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;;2FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACAlC;;;;;;;;;;;;;;;;;;;;;AAqBG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iCAAiC,CAAC;AA0GpE,IAAA;AAxGC;;;;;;;;;;;;;;;;;;AAkBG;AACH,IAAA,mBAAmB,CAAC,WAAgC,EAAA;AAClD,QAAA,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,WAAW,CAAC;IACrD;AAEA;;;;;;;;;;;;;;AAcG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;IACpD;AAEA;;;;;;;;;;;;;;;;;;;;;;AAsBG;IACH,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY;IAC1C;AAEA;;;;;;;;;;;;AAYG;AACH,IAAA,WAAW,CAAC,KAA6B,EAAA;AACvC,QAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,KAAK,CAAC;IACpD;AAEA;;;;AAIG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;IACrD;AAEA;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,QAAuD,EAAA;AACtE,QAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACjD;8GA5GW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;;2FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACtBlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCG;MAEU,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,iCAAiC,CAAC;AA4JpE,IAAA;AA1JC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;AACH,IAAA,mBAAmB,CAAC,QAA6B,EAAA;AAC/C,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC;IAC/C;AAEA;;;;;;;;;;;;;;;;;;;;;;;AAuBG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;IACjD;AAEA;;;;;;;;;;;;;;;;;;;;;;AAsBG;IACH,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS;IACvC;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACH,IAAA,mBAAmB,CAAC,KAA6B,EAAA;AAC/C,QAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,KAAK,CAAC;IAC9C;AAEA;;;;;;;;;;;;;;;;;;;;;AAqBG;IACH,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;IACrD;AAEA;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,QAAuD,EAAA;AACtE,QAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACjD;8GA5JW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;;2FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AClBlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DG;AACG,SAAU,cAAc,CAAC,MAAsB,EAAA;AACnD,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,yBAAyB,EAAE;AACvE,QAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,yBAAyB,EAAE;AACrE,QAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,yBAAyB,EAAE;QACtE,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE;AACnD,QAAA;AACE,YAAA,OAAO,EAAE,uBAAuB;AAChC,YAAA,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,MAAK;AACb,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC5C,gBAAA,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC;;AAG5C,gBAAA,IAAI,aAAa,CAAC,kBAAkB,EAAE;AACpC,oBAAA,OAAO,CAAC,IAAI,CACV,yHAAyH,CAC1H;oBACD,MAAM,CAAC,iCAAiC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,kBAAkB,CAAC;gBAC9F;AACA,gBAAA,IAAI,aAAa,CAAC,iBAAiB,EAAE;AACnC,oBAAA,OAAO,CAAC,IAAI,CACV,wHAAwH,CACzH;oBACD,MAAM,CAAC,iCAAiC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,iBAAiB,CAAC;gBAC7F;AACA,gBAAA,IAAI,aAAa,CAAC,iBAAiB,EAAE;AACnC,oBAAA,OAAO,CAAC,IAAI,CACV,wHAAwH,CACzH;oBACD,MAAM,CAAC,iCAAiC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,iBAAiB,CAAC;gBAC7F;AAEA,gBAAA,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,EAAE;AACrD,oBAAA,mBAAmB,EAAE,QAAQ;AAC9B,iBAAA,CAAC;AACF,gBAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC9D,gBAAA,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;YAC1C,CAAC;AACF,SAAA;AACF,KAAA,CAAC;AACJ;;MCzHa,oBAAoB,CAAA;AAJjC,IAAA,WAAA,GAAA;AAKW,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAU;AAClC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,EAAE,CAAC;AAC7B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAC3C,IAAA;8GAJY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;MCgDY,wBAAwB,CAAA;AAzCrC,IAAA,WAAA,GAAA;AA0CW,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAU;AACtC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,MAAM,CAAC;QAEnC,IAAA,CAAA,IAAI,GAAG,MAAM,EAAQ;AAErB,QAAA,IAAA,CAAA,KAAK,GAAG,eAAe,CAAC,oBAAoB,CAAC;AAE7C,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAC/B,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAChD;AAEQ,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAC7B,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAC7D;AAEQ,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAElE,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAChC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,IAAI,IAAI,CAC7C;AACF,IAAA;8GArBY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAMF,oBAAoB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3C3C;;;;;;;;;;;;;GAaT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2UAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAdS,gBAAgB,oJAAE,sBAAsB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAsCvC,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAzCpC,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,EAAA,QAAA,EACzC;;;;;;;;;;;;;GAaT,EAAA,eAAA,EAsBgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,2UAAA,CAAA,EAAA;;;MCnCpC,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,0BAA0B,CAAC;AA0G7D,IAAA;AAxGC;;AAEG;AACH,IAAA,mBAAmB,CAAC,OAAqB,EAAA;AACvC,QAAA,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,OAAO,CAAC;IACnD;AAEA;;;AAGG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;IAC/C;AAEA;;;;AAIG;IACH,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;IAC/C;;AAIA;;;AAGG;AACH,IAAA,qBAAqB,CAAC,SAAyB,EAAA;AAC7C,QAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,SAAS,CAAC;IACvD;AAEA;;;AAGG;AACH,IAAA,sBAAsB,CAAC,UAA0B,EAAA;AAC/C,QAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,UAAU,CAAC;IACzD;AAEA;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;IACjD;AAEA;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;IACjD;AAEA;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;IACnD;AAEA;;AAEG;IACH,2BAA2B,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;IACnD;AAEA;;AAEG;IACH,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE;IAC7C;AAEA;;AAEG;IACH,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;IACnD;AAEA;;AAEG;IACH,uBAAuB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE;IACvD;AAEA;;AAEG;IACH,qBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,qBAAqB,EAAE;IACrD;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,MAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC;IAC5C;8GA1GW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACGlC;;;AAGG;MAEU,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,6BAA6B,CAAC;AA6LhE,IAAA;AA3LC;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ;IACtC;AAEA;;;;;AAKG;IACH,UAAU,CAAC,IAAY,EAAE,WAAoB,EAAA;QAC3C,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC;IACpE;AAEA;;;AAGG;IACH,MAAM,WAAW,CAAC,QAAgB,EAAA;QAChC,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC;IACnD;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,QAAgB,EAAA;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC;IAC7C;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,QAAgB,EAAA;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC;IAC7C;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,QAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC;IAC/C;AAEA;;;;AAIG;AACH,IAAA,MAAM,kBAAkB,CACtB,QAAgB,EAChB,OAA4B,EAAA;QAE5B,OAAO,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC;IACnE;AAEA;;;;;AAKG;AACH,IAAA,oBAAoB,CAClB,QAAgB,EAChB,IAAY,EACZ,WAAoB,EAAA;QAEpB,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC;IACxE;AAEA;;;;AAIG;AACH,IAAA,YAAY,CAAC,QAAgB,EAAA;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC3D,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC;AAEA;;;;;AAKG;AACH,IAAA,YAAY,CAAC,IAAY,EAAA;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB;QAChD,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/C;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDG;AACH,IAAA,iBAAiB,CAAC,OAAwB,EAAA;QACxC,MAAM,eAAe,GAAoB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;QACvE,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CACjD;AAED,QAAA,OAAO;AACJ,aAAA,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;aAChE,GAAG,CAAC,CAAC,MAAM,KACV,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;YAC7B,EAAE,EAAE,EAAE;YACN,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,IAAI;AACd,YAAA,GAAG,MAAM;AACV,SAAA,CAAC,CACH;IACL;AAEA;;;;;;AAMG;AACH,IAAA,iBAAiB,CAAC,OAAwB,EAAA;;QAExC,MAAM,cAAc,GAAoB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;AACtE,QAAA,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAChC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;AAC9C,QAAA,CAAC,CAAC;;AAGF,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;IACxC;8GA7LW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA,CAAA;;2FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACtBlC;;ACAA;;AAEG;;;;"}