@openmfp/ngx 0.12.12 → 0.12.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"openmfp-ngx.mjs","sources":["../../../projects/ngx/declarative-ui/table/utils/cssRules.engine.ts","../../../projects/ngx/declarative-ui/table/utils/resource-field-by-path.ts","../../../projects/ngx/declarative-ui/table/utils/field-definition.utils.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-cell.constants.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-value.component.html","../../../projects/ngx/declarative-ui/resource-field/link-value/link-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/link-value/link-value.component.html","../../../projects/ngx/declarative-ui/resource-field/secret-value/secret-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/secret-value/secret-value.component.html","../../../projects/ngx/declarative-ui/resource-field/tag-list-value/tag-list-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/tag-list-value/tag-list-value.component.html","../../../projects/ngx/declarative-ui/resource-field/resource-field.component.ts","../../../projects/ngx/declarative-ui/resource-field/resource-field.component.html","../../../projects/ngx/declarative-ui/table/utils/proccess-fields.ts","../../../projects/ngx/declarative-ui/table/declarative-table/declarative-table.component.ts","../../../projects/ngx/declarative-ui/table/declarative-table/declarative-table.component.html","../../../projects/ngx/declarative-ui/form/utils/set-property-by-path.ts","../../../projects/ngx/declarative-ui/form/declarative-form/declarative-form.component.ts","../../../projects/ngx/declarative-ui/form/declarative-form/declarative-form.component.html","../../../projects/ngx/declarative-ui/table-card/declarative-table-card.component.ts","../../../projects/ngx/declarative-ui/table-card/declarative-table-card.component.html","../../../projects/ngx/declarative-ui/dashboard/models/dashboard.model.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/dashboard-card-registry.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-angular-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-sap-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-wc-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/dashboard-card.component.ts","../../../projects/ngx/declarative-ui/dashboard/card/dashboard-card.component.html","../../../projects/ngx/declarative-ui/dashboard/discard-changes-dialog/discard-changes-dialog.component.ts","../../../projects/ngx/declarative-ui/dashboard/discard-changes-dialog/discard-changes-dialog.component.html","../../../projects/ngx/declarative-ui/dashboard/edit-cards-dialog/edit-cards-dialog.component.ts","../../../projects/ngx/declarative-ui/dashboard/edit-cards-dialog/edit-cards-dialog.component.html","../../../projects/ngx/declarative-ui/dashboard/unsaved-changes-dialog/unsaved-changes-dialog.component.ts","../../../projects/ngx/declarative-ui/dashboard/unsaved-changes-dialog/unsaved-changes-dialog.component.html","../../../projects/ngx/declarative-ui/dashboard/models/constants.ts","../../../projects/ngx/declarative-ui/dashboard/section/dashboard-section.component.ts","../../../projects/ngx/declarative-ui/dashboard/section/dashboard-section.component.html","../../../projects/ngx/declarative-ui/dashboard/dashboard/dashboard.component.ts","../../../projects/ngx/declarative-ui/dashboard/dashboard/dashboard.component.html","../../../projects/ngx/cards/visited-service-card/visited-service-card.component.ts","../../../projects/ngx/cards/visited-service-card/visited-service-card.component.html","../../../projects/ngx/cards/favorites/favorites.component.ts","../../../projects/ngx/cards/favorites/favorites.component.html","../../../projects/ngx/cards/service-status/service-status-card.component.ts","../../../projects/ngx/cards/service-status/service-status-card.component.html","../../../projects/ngx/cards/whats-new/whats-new.component.ts","../../../projects/ngx/cards/whats-new/whats-new.component.html","../../../projects/ngx/openmfp-ngx.ts"],"sourcesContent":["import { CssRule } from '../../models';\n\nexport const parseStringValue = (value: string) => {\n if (value === 'true') {\n return true;\n }\n\n if (value === 'false') {\n return false;\n }\n\n if (!isNaN(Number(value))) {\n return Number(value);\n }\n\n return value;\n};\n\nexport const cssRuleResolver = (\n rule: CssRule,\n resourceValue: string,\n): boolean => {\n const parsedResouceValue = parseStringValue(resourceValue);\n const parsedConditionValue = parseStringValue(rule.if.value);\n\n switch (rule.if.condition) {\n case 'equals':\n return parsedResouceValue === parsedConditionValue;\n case 'notEquals':\n return parsedResouceValue !== parsedConditionValue;\n case 'greaterThan':\n return parsedResouceValue > parsedConditionValue;\n case 'greaterThanOrEqual':\n return parsedResouceValue >= parsedConditionValue;\n case 'lessThan':\n return parsedResouceValue < parsedConditionValue;\n case 'lessThanOrEqual':\n return parsedResouceValue <= parsedConditionValue;\n case 'contains':\n if (Array.isArray(parsedResouceValue)) {\n return parsedResouceValue.includes(parsedConditionValue);\n } else if (\n typeof parsedResouceValue === 'string' &&\n typeof parsedConditionValue === 'string'\n ) {\n return parsedResouceValue.includes(parsedConditionValue);\n }\n\n return false;\n }\n return false;\n};\n\nexport const evaluateCssRules = (\n value: string,\n rules?: CssRule[],\n): Partial<CSSStyleDeclaration> => {\n if (!rules) {\n return {};\n }\n\n return rules.reduce((acc, rule) => {\n const result = cssRuleResolver(rule, value);\n if (result) {\n return { ...acc, ...rule.styles };\n }\n return acc;\n }, {});\n};\n","import { PropertyField, TransformType } from '../../models';\nimport { JSONPath } from 'jsonpath-plus';\n\nexport const getResourceValueByJsonPath = <T>(\n resource: T,\n field: {\n jsonPathExpression?: string;\n property?: string | string[];\n propertyField?: PropertyField;\n },\n) => {\n const property = field.jsonPathExpression || field.property;\n if (!property) {\n return undefined;\n }\n\n if (property instanceof Array) {\n console.error(\n `Property defined as an array: ${JSON.stringify(property)}, provide \"jsonPathExpression\" field to properly ready resource value`,\n );\n return undefined;\n }\n\n const prefix = property.startsWith('$.') ? '' : '$.';\n // jsonpath-plus's `JSONPath` is overloaded: by default `resultType: 'value'`\n // returns an array of matched values, but the TS overload defaults to\n // returning a `JSONPathClass` unless we pin `<T>` to the array shape.\n // The `json` parameter is typed as a concrete JSON-shape union; the generic\n // `T` of this function is unconstrained, so we cast at the boundary. The\n // returned array is `any[]` (matching jsonpath's old typing) so the\n // downstream `value[field.propertyField.key]` access keeps compiling.\n const queryResult = JSONPath<any[]>({\n path: `${prefix}${property}`,\n json: resource as object,\n });\n const value = queryResult.length ? queryResult[0] : undefined;\n\n if (value && field.propertyField) {\n return executeTransform(\n value[field.propertyField.key],\n field.propertyField.transform,\n );\n }\n\n return value;\n};\n\nconst executeTransform = (\n value: string | undefined,\n transform: TransformType[] | undefined,\n): string | undefined => {\n if (value == null || transform == null || !transform.length) return value;\n\n return transform.reduce((acc, t) => {\n if (acc == null) return acc;\n\n switch (t) {\n case 'uppercase':\n return acc.toUpperCase();\n case 'lowercase':\n return acc.toLowerCase();\n case 'capitalize': {\n const str = String(acc);\n return str.length ? str.charAt(0).toUpperCase() + str.slice(1) : str;\n }\n case 'decode': {\n try {\n return decodeBase64(acc);\n } catch {\n return acc;\n }\n }\n case 'encode': {\n try {\n return encodeBase64(acc);\n } catch {\n return acc;\n }\n }\n default:\n return acc;\n }\n }, value);\n};\n\nexport const encodeBase64 = (str: string): string => {\n try {\n const utf8Bytes = new TextEncoder().encode(str);\n const binaryString = Array.from(utf8Bytes, (byte) =>\n String.fromCharCode(byte),\n ).join('');\n return btoa(binaryString);\n } catch (error) {\n console.error('Base64 encoding failed:', error);\n throw new Error('Failed to encode string to Base64');\n }\n};\n\nexport const decodeBase64 = (base64: string): string => {\n try {\n const binaryString = atob(base64);\n const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n } catch (error) {\n console.error('Base64 decoding failed:', error);\n throw new Error('Failed to decode Base64 string');\n }\n};\n","import { FieldDefinition } from '../../models';\nimport { getResourceValueByJsonPath } from './resource-field-by-path';\n\nexport function getFieldValue<T>(\n field: FieldDefinition,\n resource: T | undefined,\n) {\n if (resource) {\n return getResourceValueByJsonPath<T>(resource, field) ?? field.value;\n }\n\n return field.value;\n}\n","export const ICON_DESIGN_POSITIVE = 'Positive';\nexport const ICON_DESIGN_NEGATIVE = 'Negative';\n\nexport const ICON_NAME_POSITIVE = 'accept';\nexport const ICON_NAME_NEGATIVE = 'decline';\n","import {\n ICON_DESIGN_NEGATIVE,\n ICON_DESIGN_POSITIVE,\n ICON_NAME_NEGATIVE,\n ICON_NAME_POSITIVE,\n} from './boolean-cell.constants';\nimport {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\n\nexport type IconDesignType = typeof ICON_DESIGN_POSITIVE | typeof ICON_DESIGN_NEGATIVE;\n\n@Component({\n selector: 'mfp-boolean-value',\n imports: [Icon],\n templateUrl: './boolean-value.component.html',\n styleUrl: './boolean-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class BooleanValue {\n boolValue = input.required<boolean>();\n testId = input<string>('boolean-value-icon');\n iconDesign = computed<IconDesignType>(() => {\n return this.boolValue() ? ICON_DESIGN_POSITIVE : ICON_DESIGN_NEGATIVE;\n });\n iconName = computed<string>(() => {\n return this.boolValue() ? ICON_NAME_POSITIVE : ICON_NAME_NEGATIVE;\n });\n}\n","<ui5-icon [attr.test-id]=\"testId()\" [design]=\"iconDesign()\" [name]=\"iconName()\" />\n","import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Link } from '@fundamental-ngx/ui5-webcomponents/link';\n\n@Component({\n selector: 'mfp-link-value',\n imports: [Link],\n templateUrl: './link-value.component.html',\n styleUrl: './link-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class LinkValue {\n urlValue = input.required<string>();\n testId = input<string>('link-value-link');\n\n public stopPropagation(event: Event) {\n event.stopPropagation();\n }\n}\n","<ui5-link\n target=\"_blank\"\n [attr.test-id]=\"testId()\"\n [href]=\"urlValue()\"\n [tooltip]=\"urlValue()\"\n (click)=\"stopPropagation($event)\"\n>Link</ui5-link>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n@Component({\n selector: 'mfp-secret-value',\n imports: [],\n templateUrl: './secret-value.component.html',\n styleUrl: './secret-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: []\n})\nexport class SecretValue {\n value = input.required<string>();\n isVisible = input<boolean>(false);\n testId = input<string>('secret-value');\n maskedValue = computed(() => '*'.repeat(this.value().length || 8));\n}\n","<span class=\"secret-value\" [attr.test-id]=\"testId()\" [class.masked]=\"!isVisible()\">\n @if (isVisible()) {\n {{ value() }}\n } @else {\n {{ maskedValue() }}\n }\n</span>\n","import { TagSettings } from '../../models';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Tag } from '@fundamental-ngx/ui5-webcomponents/tag';\n\n@Component({\n selector: 'mfp-tag-list-value',\n imports: [Tag],\n templateUrl: './tag-list-value.component.html',\n styleUrl: './tag-list-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TagListValue {\n tags = input.required<string[]>();\n tagSettings = input<TagSettings>();\n testId = input<string>('tag-list-value');\n}\n","<span class=\"tag-list\" [attr.test-id]=\"testId()\">\n @for (tag of tags(); track $index) {\n <ui5-tag\n [colorScheme]=\"tagSettings()?.colorScheme\"\n [design]=\"tagSettings()?.design ?? 'Neutral'\"\n [hideStateIcon]=\"true\"\n >{{ tag }}</ui5-tag>\n }\n</span>\n","import {\n FieldDefinition,\n GenericResource,\n ResourceFieldButtonClickEvent,\n} from '../models';\nimport { evaluateCssRules } from '../table/utils/cssRules.engine';\nimport { getFieldValue } from '../table/utils/field-definition.utils';\nimport { BooleanValue } from './boolean-value/boolean-value.component';\nimport { LinkValue } from './link-value/link-value.component';\nimport { SecretValue } from './secret-value/secret-value.component';\nimport { TagListValue } from './tag-list-value/tag-list-value.component';\nimport {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/AllIcons.js';\n\n@Component({\n selector: 'mfp-resource-field',\n imports: [Icon, BooleanValue, LinkValue, SecretValue, Button, TagListValue],\n templateUrl: './resource-field.component.html',\n styleUrl: './resource-field.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class ResourceField<T extends GenericResource, F extends FieldDefinition> {\n fieldDefinition = input.required<F>();\n resource = input<T>();\n readonly buttonClick = output<ResourceFieldButtonClickEvent<T>>();\n\n value = computed(() =>\n getFieldValue(this.fieldDefinition(), this.resource()),\n );\n\n uiSettings = computed(() => this.fieldDefinition().uiSettings);\n displayAs = computed(() => this.uiSettings()?.displayAs);\n withCopyButton = computed(() => this.uiSettings()?.withCopyButton);\n cssCustomization = computed(() => this.uiSettings()?.cssCustomization);\n tooltipIcon = computed(() => this.uiSettings()?.tooltipIcon);\n cssRules = computed(() =>\n evaluateCssRules(this.value(), this.uiSettings()?.cssRules),\n );\n cssStyles = computed(() => ({\n ...this.cssCustomization(),\n ...this.cssRules(),\n }));\n\n isBoolLike = computed(() => this.boolValue() !== undefined);\n isUrlValue = computed(() => this.checkValidUrl(this.stringValue()));\n testId = computed(() => `resource-field-${this.fieldDefinition().property}`);\n\n boolValue = computed(() => this.normalizeBoolean(this.value()));\n stringValue = computed(() => this.normalizeString(this.value()));\n tags = computed(() => this.normalizeTagsArray(this.value()));\n isVisible = signal(false);\n copySuccess = signal(false);\n\n toggleVisibility(e: Event): void {\n e.stopPropagation();\n this.isVisible.set(!this.isVisible());\n }\n\n private normalizeBoolean(value: unknown): boolean | undefined {\n const normalizedValue = value?.toString()?.toLowerCase();\n if (normalizedValue === 'true') {\n return true;\n }\n if (normalizedValue === 'false') {\n return false;\n }\n return undefined;\n }\n\n private normalizeString(value: unknown): string | undefined {\n if (typeof value !== 'string' || !value.trim()) {\n return undefined;\n }\n\n return value;\n }\n\n private normalizeTagsArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map(v => String(v).trim()).filter(v => v.length > 0);\n }\n if (typeof value === 'string') {\n const separator = this.uiSettings()?.tagSettings?.valueSeparator ?? ',';\n return value.split(separator).map(v => v.trim()).filter(v => v.length > 0);\n }\n return [];\n }\n\n private checkValidUrl(value: string | undefined): boolean {\n if (!value) {\n return false;\n }\n\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n }\n\n public copyValue(event: Event) {\n event.stopPropagation();\n navigator.clipboard.writeText(this.value() || '').then(() => {\n this.copySuccess.set(true);\n setTimeout(() => {\n this.copySuccess.set(false);\n }, 2000);\n });\n }\n\n protected buttonClicked(event: MouseEvent) {\n event.stopPropagation();\n this.buttonClick.emit({\n event,\n field: this.fieldDefinition(),\n resource: this.resource(),\n });\n }\n}\n","@let displayType = displayAs();\n<span [attr.test-id]=\"testId()\" [style]=\"cssStyles()\">\n @if (displayType === 'secret') {\n <span class=\"secret-value-container\">\n <mfp-secret-value [isVisible]=\"isVisible()\" [testId]=\"testId() + '-secret'\" [value]=\"value()\" />\n <ui5-icon\n class=\"toggle-icon\"\n mode=\"Interactive\"\n [accessibleName]=\"isVisible() ? 'Hide value' : 'Show value'\"\n [attr.test-id]=\"testId() + '-secret-toggle'\"\n [name]=\"isVisible() ? 'hide' : 'show'\"\n (click)=\"toggleVisibility($event)\"\n />\n </span>\n } @else if (displayType === 'boolIcon' && isBoolLike()) {\n <mfp-boolean-value [boolValue]=\"boolValue()!\" [testId]=\"testId() + '-boolean'\" />\n } @else if (displayType === 'link' && isUrlValue()) {\n <mfp-link-value [testId]=\"testId() + '-link'\" [urlValue]=\"stringValue()!\" />\n } @else if (displayType === 'tooltip') {\n <ui5-icon\n [accessibleName]=\"stringValue()!\"\n [attr.test-id]=\"testId() + '-tooltip'\"\n [name]=\"tooltipIcon() ?? 'hint'\"\n [showTooltip]=\"true\"\n />\n } @else if (displayType === 'alert') {\n @if (!value()) {\n <ui5-icon\n design=\"Critical\"\n name=\"alert\"\n [accessibleName]=\"resource()?.accessibleName ?? ''\"\n [attr.test-id]=\"testId() + '-icon'\"\n [showTooltip]=\"true\"\n (click)=\"$event.stopPropagation()\"\n />\n }\n } @else if (displayType === 'img' && value()) {\n <img alt=\"Resource image\" class=\"image-cell\" [src]=\"value()\" />\n } @else if (displayType === 'button') {\n @let buttonSettings = uiSettings()?.buttonSettings;\n <ui5-button\n [accessibleName]=\"buttonSettings?.text || buttonSettings?.tooltip || buttonSettings?.icon || ''\"\n [design]=\"buttonSettings?.design\"\n [endIcon]=\"buttonSettings?.endIcon\"\n [icon]=\"buttonSettings?.icon\"\n [tooltip]=\"buttonSettings?.tooltip\"\n (click)=\"buttonClicked($event)\"\n >{{ buttonSettings?.text }}</ui5-button\n >&nbsp;\n } @else if (displayType === 'tag') {\n <mfp-tag-list-value\n [tagSettings]=\"uiSettings()?.tagSettings\"\n [tags]=\"tags()\"\n [testId]=\"testId() + '-tags'\"\n />\n } @else {\n {{ value() }}\n }\n</span>\n\n@if (withCopyButton()) {\n <ui5-icon\n class=\"toggle-icon\"\n mode=\"Interactive\"\n [accessibleName]=\"copySuccess() ? 'Copied' : 'Copy value'\"\n [attr.test-id]=\"testId() + '-copy'\"\n [design]=\"copySuccess() ? 'Positive' : 'Default'\"\n [name]=\"copySuccess() ? 'accept' : 'copy'\"\n (click)=\"copyValue($event)\"\n />\n}\n","import { TableFieldDefinition } from '../models';\n\ntype GroupBase = NonNullable<TableFieldDefinition['group']>;\ntype ProcessedGroup = GroupBase & {\n fields?: TableFieldDefinition[];\n};\n\nexport type ProcessedTableFieldDefinition = Omit<TableFieldDefinition, 'group'> & {\n group?: ProcessedGroup;\n};\n\nexport const processGroupFields = (\n fields: TableFieldDefinition[],\n): ProcessedTableFieldDefinition[] => {\n return combineGroupFields(fields);\n};\n\nconst collectGroupFields = (\n fields: TableFieldDefinition[],\n): Record<string, TableFieldDefinition[]> => {\n return fields.reduce(\n (acc, f): Record<string, TableFieldDefinition[]> => {\n if (!f.group?.name) {\n return acc;\n }\n\n const key = f.group.name;\n if (!acc[key]) {\n acc[key] = [];\n }\n\n // Strip group information from the field when adding to the fields array\n const { group, ...fieldWithoutGroup } = f;\n acc[key].push(fieldWithoutGroup);\n return acc;\n },\n {} as Record<string, TableFieldDefinition[]>,\n );\n};\n\nconst combineGroupFields = (fields: TableFieldDefinition[]): ProcessedTableFieldDefinition[] => {\n const seenGroup = new Set<string>();\n const groupFields = collectGroupFields(fields);\n const result: ProcessedTableFieldDefinition[] = [];\n\n fields.forEach((f) => {\n if (!f.group?.name) {\n result.push(f);\n return;\n }\n\n const key = f.group.name;\n if (seenGroup.has(key)) {\n return;\n }\n\n seenGroup.add(key);\n\n const grouped: ProcessedTableFieldDefinition = {\n ...f,\n group: {\n ...f.group,\n fields: groupFields[key],\n },\n };\n\n result.push(grouped);\n });\n\n return result;\n};\n","import { GenericResource } from '../../models';\nimport { ResourceField } from '../../resource-field/resource-field.component';\nimport { ResourceFieldButtonClickEvent, TableFieldDefinition } from '../models';\nimport { processGroupFields } from '../utils/proccess-fields';\nimport { getResourceValueByJsonPath } from '../utils/resource-field-by-path';\nimport {\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\nimport { IllustratedMessage } from '@fundamental-ngx/ui5-webcomponents-fiori';\nimport { Option } from '@fundamental-ngx/ui5-webcomponents/option';\nimport { Select } from '@fundamental-ngx/ui5-webcomponents/select';\nimport { Table } from '@fundamental-ngx/ui5-webcomponents/table';\nimport { TableCell } from '@fundamental-ngx/ui5-webcomponents/table-cell';\nimport { TableGrowing } from '@fundamental-ngx/ui5-webcomponents/table-growing';\nimport { TableHeaderCell } from '@fundamental-ngx/ui5-webcomponents/table-header-cell';\nimport { TableHeaderRow } from '@fundamental-ngx/ui5-webcomponents/table-header-row';\nimport { TableRow } from '@fundamental-ngx/ui5-webcomponents/table-row';\nimport '@ui5/webcomponents-fiori/dist/illustrations/NoData.js';\n\n@Component({\n selector: 'mfp-declarative-table',\n imports: [\n IllustratedMessage,\n Table,\n TableCell,\n TableHeaderCell,\n TableHeaderRow,\n TableRow,\n ResourceField,\n Select,\n Option,\n TableGrowing,\n ],\n templateUrl: './declarative-table.component.html',\n styleUrl: './declarative-table.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DeclarativeTable<T extends GenericResource> {\n columns = input.required<TableFieldDefinition[]>();\n resources = input.required<T[]>();\n trackByPath = input<string>('id');\n\n totalItemsCount = input<number>();\n paginationLimit = input<number>(5);\n hasMore = input<boolean>(false);\n growMode = input<'Scroll' | 'Button'>('Button');\n loadMoreButtonText = input<string>('Load More');\n height = input<number>();\n\n readonly buttonClick = output<ResourceFieldButtonClickEvent<T>>();\n readonly tableRowClicked = output<T>();\n readonly loadMoreResources = output<void>();\n readonly paginationLimitChanged = output<number>();\n\n columnTrackBy = (column: TableFieldDefinition, index: number) =>\n column.property ?? column.value ?? index;\n rowTrackBy = (_index: number, item: T): unknown =>\n getResourceValueByJsonPath(item, { property: this.trackByPath() }) ??\n _index;\n viewColumns = computed(() => processGroupFields(this.columns()));\n}\n","<ui5-table\n test-id=\"generic-table\"\n [style.height]=\"height() ? height() + 'px' : null\"\n [style.overflow-y]=\"'auto'\"\n>\n <ui5-table-header-row\n slot=\"headerRow\"\n [sticky]=\"growMode() === 'Scroll' && !!height()\"\n >\n @for (column of viewColumns(); track columnTrackBy(column, $index)) {\n @if (column.group) {\n <ui5-table-header-cell\n [attr.test-id]=\"'generic-table-header-' + column.group.name\"\n [width]=\"column.uiSettings?.columnWidth ?? 'auto'\"\n >{{ column.group.label ?? column.group.name }}</ui5-table-header-cell\n >\n } @else {\n <ui5-table-header-cell\n [attr.test-id]=\"'generic-table-header-' + column.property\"\n [width]=\"column.uiSettings?.columnWidth ?? 'auto'\"\n >{{ column.label }}</ui5-table-header-cell\n >\n }\n }\n </ui5-table-header-row>\n\n @for (item of resources(); let i = $index; track rowTrackBy($index, item)) {\n <ui5-table-row\n [attr.test-id]=\"'generic-table-row-' + i\"\n [class.disabled]=\"item.isAvailable === false\"\n [interactive]=\"item.isAvailable !== false\"\n (click)=\"tableRowClicked.emit(item)\"\n >\n @for (column of viewColumns(); track columnTrackBy(column, $index)) {\n @if (column.group) {\n <ui5-table-cell\n [attr.test-id]=\"'generic-table-cell-' + i + '-' + column.group.name\"\n >\n @let isMultiline = column.group.multiline ?? true;\n <div\n class=\"flex\"\n [style.alignItems]=\"isMultiline ? column.uiSettings?.align : null\"\n [style.flexDirection]=\"isMultiline ? 'column' : 'row'\"\n [style.justifyContent]=\"\n isMultiline ? null : column.uiSettings?.align\n \"\n >\n @for (\n field of column.group.fields;\n let last = $last;\n track columnTrackBy(field, $index)\n ) {\n <span\n class=\"group-value\"\n [attr.test-id]=\"\n 'generic-table-cell-' +\n i +\n '-' +\n column.group.name +\n '-' +\n field.property\n \"\n >\n @if (field.label) {\n <span>{{ field.label }}: </span>\n }\n <mfp-resource-field\n [fieldDefinition]=\"field\"\n [resource]=\"item\"\n (buttonClick)=\"buttonClick.emit($event)\"\n />\n </span>\n @if (!last && column.group.delimiter) {\n <span class=\"delimiter\">{{ column.group.delimiter }}</span>\n }\n }\n </div>\n </ui5-table-cell>\n } @else {\n <ui5-table-cell\n [attr.test-id]=\"'generic-table-cell-' + i + '-' + column.property\"\n >\n <div class=\"flex\" [style.justifyContent]=\"column.uiSettings?.align\">\n <mfp-resource-field\n [fieldDefinition]=\"column\"\n [resource]=\"item\"\n (buttonClick)=\"buttonClick.emit($event)\"\n />\n </div>\n </ui5-table-cell>\n }\n }\n </ui5-table-row>\n } @empty {\n <ui5-illustrated-message\n name=\"NoData\"\n slot=\"noData\"\n test-id=\"generic-table-view-nodata\"\n >\n <span slot=\"title\">No Resources</span>\n <span slot=\"subtitle\">There are currently no items to show.</span>\n </ui5-illustrated-message>\n }\n\n @if (hasMore()) {\n <ui5-table-growing\n id=\"growing\"\n slot=\"features\"\n [mode]=\"growMode()\"\n [text]=\"loadMoreButtonText()\"\n (ui5LoadMore)=\"loadMoreResources.emit()\"\n />\n }\n</ui5-table>\n\n<!-- Pagination Control -->\n<div\n class=\"pagination-footer\"\n style=\"\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0rem 1rem;\n min-height: 3rem;\n border-top: 1px solid var(--sapList_BorderColor);\n \"\n>\n <div style=\"display: flex; align-items: center; gap: 1.5rem\">\n <div style=\"display: flex; align-items: center; gap: 0.5rem\">\n <span\n style=\"color: var(--sapTextColor); font-size: var(--sapFontSmallSize)\"\n >Items per load:</span\n >\n <ui5-select\n style=\"width: 5rem\"\n [value]=\"paginationLimit().toString()\"\n (change)=\"paginationLimitChanged.emit(+$any($event)?.target?.value)\"\n >\n <ui5-option value=\"5\">5</ui5-option>\n <ui5-option value=\"10\">10</ui5-option>\n <ui5-option value=\"10\">20</ui5-option>\n <ui5-option value=\"50\">50</ui5-option>\n <ui5-option value=\"100\">100</ui5-option>\n </ui5-select>\n </div>\n\n <span\n style=\"color: var(--sapTextColor); font-size: var(--sapFontSmallSize)\"\n >\n Items loaded:\n <b>{{\n totalItemsCount() !== undefined\n ? resources().length + ' / ' + totalItemsCount()\n : resources().length\n }}</b>\n </span>\n </div>\n</div>\n","export function setPropertyByPath<T extends Record<string, unknown>>(\n object: T,\n path: string,\n value: unknown,\n): T {\n const segments = path.split('.').filter(Boolean);\n if (segments.length === 0) {\n return object;\n }\n\n let current: Record<string, unknown> = object;\n\n for (let i = 0; i < segments.length; i += 1) {\n const key = segments[i];\n if (i === segments.length - 1) {\n current[key] = value;\n break;\n }\n\n const existing = current[key];\n\n if (existing === undefined || existing === null || typeof existing !== 'object') {\n current[key] = {};\n }\n\n current = current[key] as Record<string, unknown>;\n }\n\n return object;\n}\n","import { GenericResource } from '../../models';\nimport {\n FormFieldChangeEvent,\n FormFieldDefinition,\n FormFieldErrors,\n} from '../models';\nimport { setPropertyByPath } from '../utils/set-property-by-path';\nimport {\n Component,\n ViewEncapsulation,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { Input } from '@fundamental-ngx/ui5-webcomponents/input';\nimport { Label } from '@fundamental-ngx/ui5-webcomponents/label';\nimport { Option } from '@fundamental-ngx/ui5-webcomponents/option';\nimport { Select } from '@fundamental-ngx/ui5-webcomponents/select';\n\n@Component({\n selector: 'mfp-declarative-form',\n imports: [ReactiveFormsModule, Input, Label, Select, Option],\n templateUrl: './declarative-form.component.html',\n styleUrl: './declarative-form.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DeclarativeForm<T extends GenericResource> {\n readonly fields = input.required<FormFieldDefinition[]>();\n readonly initialValues = input<T>({} as T);\n readonly fieldErrors = input<FormFieldErrors>({});\n\n readonly fieldChange = output<FormFieldChangeEvent>();\n readonly formSubmit = output<T>();\n\n readonly form: FormGroup;\n\n private readonly fb = inject(FormBuilder);\n\n constructor() {\n this.form = this.fb.group({});\n\n effect(() => {\n this.rebuildControls(this.fields());\n });\n\n effect(() => {\n this.setInitialValues(this.initialValues());\n });\n\n effect(() => {\n const fields = this.fields();\n this.initialValues();\n\n for (const field of fields) {\n if (field.validation) {\n this.fieldChange.emit({\n fieldProperty: field.name,\n value: this.form.controls[field.name]?.value ?? '',\n });\n }\n }\n });\n }\n\n setFormControlValue($event: Event, field: FormFieldDefinition): void {\n const target = $event.target as\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLSelectElement;\n\n const control = this.form.controls[field.name];\n control.setValue(target.value);\n control.markAsTouched();\n control.markAsDirty();\n\n if (field.validation === 'onChange') {\n this.fieldChange.emit({\n fieldProperty: field.name,\n value: control.value,\n });\n }\n }\n\n getError(name: string): string | null {\n const control = this.form.controls[name];\n const error = this.fieldErrors()[name];\n\n return error && (control.dirty || control.touched) ? error : null;\n }\n\n getValueState(name: string): 'None' | 'Negative' {\n return this.getError(name) ? 'Negative' : 'None';\n }\n\n onFieldBlur(field: FormFieldDefinition): void {\n this.form.controls[field.name]?.markAsTouched();\n\n if (field.validation === 'onBlur') {\n this.fieldChange.emit({\n fieldProperty: field.name,\n value: this.form.controls[field.name]?.value,\n });\n }\n }\n\n submit(): void {\n this.formSubmit.emit(this.buildOutputValue());\n }\n\n clear(): void {\n this.form.reset();\n }\n\n private rebuildControls(fields: FormFieldDefinition[]): void {\n const existingControls = this.form.controls;\n const nextFieldNames = new Set(fields.map((field) => field.name));\n\n for (const field of fields) {\n const existingControl = existingControls[field.name];\n\n if (existingControl) {\n existingControl.clearValidators();\n existingControl.updateValueAndValidity({ emitEvent: false });\n continue;\n }\n\n this.form.addControl(field.name, new FormControl(''));\n }\n\n for (const controlName of Object.keys(existingControls)) {\n if (!nextFieldNames.has(controlName)) {\n this.form.removeControl(controlName);\n }\n }\n\n this.form.updateValueAndValidity({ emitEvent: false });\n }\n\n private setInitialValues(\n initialValues: Record<string, unknown> | null | undefined,\n ): void {\n if (!initialValues) {\n return;\n }\n\n this.form.patchValue(initialValues, { emitEvent: false });\n this.form.markAsPristine({ emitEvent: false });\n this.form.updateValueAndValidity({ emitEvent: false });\n }\n\n private buildOutputValue(): T {\n const result = {} as T;\n\n for (const key of Object.keys(this.form.controls)) {\n setPropertyByPath(result, key, this.form.controls[key].value);\n }\n\n return result;\n }\n}\n","<section class=\"form\" test-id=\"generic-form\" [formGroup]=\"form\">\n @for (field of fields(); track field.name) {\n @let control = form.controls[field.name];\n <div\n class=\"inputs\"\n [attr.test-id]=\"'generic-form-field-container-' + field.name\"\n >\n <ui5-label\n show-colon\n [attr.test-id]=\"'generic-form-field-label-' + field.name\"\n [required]=\"field.required\"\n >{{ field.label }}</ui5-label\n >\n @if (field.values?.length) {\n <ui5-select\n class=\"input\"\n [attr.test-id]=\"'generic-form-field-' + field.name\"\n [disabled]=\"field.disabled\"\n [required]=\"field.required\"\n [value]=\"control.value\"\n [valueState]=\"getValueState(field.name)\"\n (blur)=\"onFieldBlur(field)\"\n (change)=\"setFormControlValue($event, field)\"\n (input)=\"setFormControlValue($event, field)\"\n >\n @if (getError(field.name); as error) {\n <div slot=\"valueStateMessage\">{{ error }}</div>\n }\n @for (value of [''].concat(field.values ?? []); track value) {\n <ui5-option\n [attr.test-id]=\"\n 'generic-form-field-' +\n field.name +\n '-option-' +\n (value || 'empty')\n \"\n [selected]=\"value === control.value\"\n [value]=\"value\"\n >{{ value }}</ui5-option\n >\n }\n </ui5-select>\n } @else {\n <ui5-input\n class=\"input\"\n [attr.test-id]=\"'generic-form-field-' + field.name\"\n [disabled]=\"field.disabled\"\n [required]=\"field.required\"\n [value]=\"control.value\"\n [valueState]=\"getValueState(field.name)\"\n (blur)=\"onFieldBlur(field)\"\n (change)=\"setFormControlValue($event, field)\"\n (input)=\"setFormControlValue($event, field)\"\n >\n @if (getError(field.name); as error) {\n <div slot=\"valueStateMessage\">{{ error }}</div>\n }\n </ui5-input>\n }\n </div>\n }\n</section>\n","import { FormFieldChangeEvent, FormFieldDefinition } from '../form';\nimport { DeclarativeForm } from '../form/declarative-form/declarative-form.component';\nimport { GenericResource } from '../models';\nimport { DeclarativeTable } from '../table/declarative-table/declarative-table.component';\nimport {\n TableFieldDefinition,\n ResourceFieldButtonClickEvent,\n} from '../table/models';\nimport { getResourceValueByJsonPath } from '../table/utils/resource-field-by-path';\nimport { TableCardConfig, TableCardFormState } from './models/configs';\nimport {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n Injector,\n ViewEncapsulation,\n afterNextRender,\n computed,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Input } from '@fundamental-ngx/ui5-webcomponents/input';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/add.js';\nimport '@ui5/webcomponents-icons/dist/search.js';\nimport { debounceTime } from 'rxjs';\n\ntype SearchState = 'collapsed' | 'expanded' | 'collapsing';\n\n@Component({\n selector: 'mfp-declarative-table-card',\n imports: [\n DeclarativeTable,\n DeclarativeForm,\n ReactiveFormsModule,\n Dialog,\n Title,\n Button,\n Icon,\n Input,\n ],\n templateUrl: './declarative-table-card.component.html',\n styleUrl: './declarative-table-card.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class DeclarativeTableCard<T extends GenericResource> {\n resources = input.required<T[]>();\n\n config = input.required<TableCardConfig>();\n createFormState = input<TableCardFormState>({});\n editFormState = input<TableCardFormState>({});\n\n readonly actionButtonClick = output<ResourceFieldButtonClickEvent<T>>();\n readonly tableRowClicked = output<T>();\n readonly loadMoreResources = output<void>();\n readonly paginationLimitChanged = output<number>();\n\n readonly searchChanged = output<string>();\n readonly createFieldChange = output<FormFieldChangeEvent>();\n readonly editFieldChange = output<{\n resource: T;\n formChangeEvent: FormFieldChangeEvent;\n }>();\n readonly createSubmit = output<T>();\n readonly editSubmit = output<{\n resource: T;\n value: Record<string, unknown>;\n }>();\n readonly deleteSubmit = output<T>();\n\n protected searchState = signal<SearchState>('collapsed');\n protected searchExpanded = computed(() => this.searchState() !== 'collapsed');\n protected searchCollapsing = computed(\n () => this.searchState() === 'collapsing',\n );\n protected searchControl = new FormControl('');\n protected searchInputRef = viewChild<Input>('searchInput');\n\n protected createDialogOpen = signal(false);\n protected editDialogOpen = signal(false);\n protected deleteDialogOpen = signal(false);\n\n protected pendingResource = signal<T | null>(null);\n\n protected tableConfig = computed(() => this.config().tableConfig);\n protected header = computed(() => this.config().header);\n protected headerTooltip = computed(() => this.config().headerTooltip);\n protected createFormConfig = computed(\n () => this.config().createResourceFormConfig,\n );\n protected editFormConfig = computed(\n () => this.config().editResourceFormConfig,\n );\n protected deleteConfirmationConfig = computed(\n () => this.config().deleteResourceConfirmationConfig,\n );\n protected createButtonConfig = computed(\n () => this.config().buttonSettings?.createButton,\n );\n protected searchButtonConfig = computed(\n () => this.config().buttonSettings?.searchButton,\n );\n protected effectiveColumns = computed(() => this.addActionsColumn());\n protected editInitialValue = computed(() => {\n const pendingResource = this.pendingResource();\n const editConfig = this.editFormConfig();\n if (!pendingResource || !editConfig) {\n return {};\n }\n\n return this.buildInitialValues(editConfig.fields, pendingResource);\n });\n\n private readonly injector = inject(Injector);\n\n constructor() {\n this.searchControl.valueChanges\n .pipe(debounceTime(300), takeUntilDestroyed())\n .subscribe((value) => {\n this.searchChanged.emit(value ?? '');\n });\n }\n\n toggleSearch(): void {\n if (this.searchState() === 'expanded') {\n this.collapseSearch();\n } else if (this.searchState() === 'collapsed') {\n this.searchState.set('expanded');\n afterNextRender(\n () => {\n this.searchInputRef()?.elementRef.nativeElement.focus();\n },\n { injector: this.injector },\n );\n }\n }\n\n onSearchBlur(): void {\n if (!this.searchControl.value) {\n this.collapseSearch();\n }\n }\n\n onSearchAnimationEnd(): void {\n if (this.searchCollapsing()) {\n this.searchState.set('collapsed');\n this.searchControl.setValue('', { emitEvent: false });\n }\n }\n\n private collapseSearch(): void {\n this.searchState.set('collapsing');\n }\n\n onButtonClick(event: ResourceFieldButtonClickEvent<T>): void {\n const action = event.field.uiSettings?.buttonSettings?.action;\n if (action === 'edit' && event.resource) {\n this.pendingResource.set(event.resource);\n this.editDialogOpen.set(true);\n return;\n }\n if (action === 'delete' && event.resource) {\n this.pendingResource.set(event.resource);\n this.deleteDialogOpen.set(true);\n return;\n }\n\n this.actionButtonClick.emit(event);\n }\n\n closeCreateDialog(): void {\n this.createDialogOpen.set(false);\n }\n\n closeEditDialog(): void {\n this.editDialogOpen.set(false);\n }\n\n closeDeleteDialog(): void {\n this.deleteDialogOpen.set(false);\n }\n\n onCreateFieldChange(event: FormFieldChangeEvent): void {\n this.createFieldChange.emit(event);\n }\n\n onEditFieldChange(event: FormFieldChangeEvent): void {\n const resource = this.pendingResource();\n\n if (resource) {\n this.editFieldChange.emit({ resource, formChangeEvent: event });\n }\n }\n\n onCreateSubmit(value: T): void {\n this.createSubmit.emit(value);\n }\n\n onEditSubmit(value: Record<string, unknown>): void {\n const resource = this.pendingResource();\n\n if (resource) {\n this.editSubmit.emit({ resource, value });\n }\n }\n\n onDeleteSubmit(): void {\n const resource = this.pendingResource();\n if (resource) this.deleteSubmit.emit(resource);\n }\n\n protected hasErrors(state: TableCardFormState): boolean {\n const errors = state.fieldErrors;\n return !!errors && Object.values(errors).some((val) => !!val);\n }\n\n private addActionsColumn(): TableFieldDefinition[] {\n const cols = this.tableConfig().fields;\n const buttonSettings = this.config().buttonSettings;\n const editButton = this.editFormConfig();\n const deleteButton = this.deleteConfirmationConfig();\n const actions: TableFieldDefinition[] = [];\n\n if (editButton) {\n actions.push({\n property: 'mfp_edit_action',\n uiSettings: {\n displayAs: 'button',\n align: 'end',\n buttonSettings: {\n icon: 'edit',\n design: 'Transparent',\n action: 'edit',\n tooltip: 'Edit',\n ...buttonSettings?.editButton,\n },\n },\n group: { name: 'actions', label: '', multiline: false },\n });\n }\n\n if (deleteButton) {\n actions.push({\n property: 'mfp_delete_action',\n uiSettings: {\n align: 'end',\n displayAs: 'button',\n buttonSettings: {\n icon: 'decline',\n design: 'Transparent',\n action: 'delete',\n tooltip: 'Delete',\n ...buttonSettings?.deleteButton,\n },\n },\n group: { name: 'actions', label: '', multiline: false },\n });\n }\n\n return cols.concat(actions);\n }\n\n private buildInitialValues(\n fields: FormFieldDefinition[],\n resource?: T,\n ): Record<string, unknown> {\n if (!resource) return {};\n\n return fields.reduce(\n (acc, field) => {\n if (typeof field.name === 'string') {\n acc[field.name] =\n getResourceValueByJsonPath(resource, { property: field.name }) ??\n '';\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n }\n}\n","<div class=\"card\">\n <div class=\"card__header\">\n <div class=\"card__title\">\n @if (header(); as header) {\n {{ header }}\n @if (headerTooltip(); as tooltip) {\n <ui5-icon\n class=\"card__info-icon\"\n name=\"hint\"\n [accessibleName]=\"tooltip\"\n [showTooltip]=\"true\"\n />\n }\n }\n </div>\n <div class=\"card__actions\">\n @if (config().resourcesSearchable) {\n @if (searchExpanded()) {\n <ui5-input\n #searchInput\n [class]=\"\n 'card__search-input card__search-input--' +\n (searchCollapsing() ? 'leave' : 'enter')\n \"\n [formControl]=\"searchControl\"\n (animationend)=\"onSearchAnimationEnd()\"\n (blur)=\"onSearchBlur()\"\n />\n }\n <ui5-button\n class=\"card__search-btn\"\n design=\"Transparent\"\n [accessibleName]=\"searchButtonConfig()?.tooltip ?? 'Search'\"\n [icon]=\"searchButtonConfig()?.icon ?? 'search'\"\n [tooltip]=\"searchButtonConfig()?.tooltip ?? 'Search'\"\n (click)=\"toggleSearch()\"\n />\n }\n @if (createFormConfig()) {\n <ui5-button\n class=\"card__create-btn\"\n [accessibleName]=\"createButtonConfig()?.text || createButtonConfig()?.tooltip || 'Create'\"\n [design]=\"createButtonConfig()?.design ?? 'Transparent'\"\n [icon]=\"createButtonConfig()?.icon ?? 'add'\"\n [tooltip]=\"createButtonConfig()?.tooltip\"\n (click)=\"createDialogOpen.set(true)\"\n >\n {{ createButtonConfig()?.text ?? '' }}\n </ui5-button>\n }\n </div>\n </div>\n\n <div class=\"card__body\">\n @if (tableConfig(); as config) {\n <mfp-declarative-table\n [columns]=\"effectiveColumns()\"\n [growMode]=\"config.growMode ?? 'Button'\"\n [hasMore]=\"config.hasMore ?? false\"\n [height]=\"config.height\"\n [loadMoreButtonText]=\"config.loadMoreButtonText ?? 'Load More'\"\n [paginationLimit]=\"config.paginationLimit ?? 5\"\n [resources]=\"resources()\"\n [totalItemsCount]=\"config.totalItemsCount\"\n (buttonClick)=\"onButtonClick($event)\"\n (loadMoreResources)=\"loadMoreResources.emit()\"\n (paginationLimitChanged)=\"paginationLimitChanged.emit($event)\"\n (tableRowClicked)=\"tableRowClicked.emit($event)\"\n />\n }\n </div>\n</div>\n\n@if (createFormConfig(); as config) {\n <ui5-dialog\n [accessibleName]=\"config.title ?? 'Create'\"\n [open]=\"createDialogOpen()\"\n (ui5BeforeClose)=\"createDialogOpen.set(false)\"\n >\n <div class=\"dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">{{ config.title ?? 'Create' }}</ui5-title>\n </div>\n <div class=\"dialog__body\">\n <mfp-declarative-form\n #createForm\n [fieldErrors]=\"createFormState().fieldErrors ?? {}\"\n [fields]=\"config.fields\"\n (fieldChange)=\"onCreateFieldChange($event)\"\n (formSubmit)=\"onCreateSubmit($event)\"\n />\n </div>\n <div class=\"dialog__footer\" slot=\"footer\">\n <ui5-button\n design=\"Emphasized\"\n [disabled]=\"hasErrors(createFormState())\"\n (click)=\"createForm.submit()\"\n >\n {{ config.confirmLabel ?? 'Save' }}\n </ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"closeCreateDialog()\">\n {{ config.cancelLabel ?? 'Cancel' }}\n </ui5-button>\n </div>\n </ui5-dialog>\n}\n\n@if (editFormConfig(); as config) {\n <ui5-dialog\n [accessibleName]=\"config.title ?? 'Edit'\"\n [open]=\"editDialogOpen()\"\n (ui5BeforeClose)=\"editDialogOpen.set(false)\"\n >\n <div class=\"dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">{{ config.title ?? 'Edit' }}</ui5-title>\n </div>\n <div class=\"dialog__body\">\n <mfp-declarative-form\n #editForm\n [fieldErrors]=\"editFormState().fieldErrors ?? {}\"\n [fields]=\"config.fields\"\n [initialValues]=\"editInitialValue()\"\n (fieldChange)=\"onEditFieldChange($event)\"\n (formSubmit)=\"onEditSubmit($event)\"\n />\n </div>\n <div class=\"dialog__footer\" slot=\"footer\">\n <ui5-button\n design=\"Emphasized\"\n [disabled]=\"hasErrors(editFormState())\"\n (click)=\"editForm.submit()\"\n >\n {{ config.confirmLabel ?? 'Edit' }}\n </ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"closeEditDialog()\">\n {{ config.cancelLabel ?? 'Cancel' }}\n </ui5-button>\n </div>\n </ui5-dialog>\n}\n\n@if (deleteConfirmationConfig(); as config) {\n <ui5-dialog\n [accessibleName]=\"config.title ?? 'Confirm Delete'\"\n [open]=\"deleteDialogOpen()\"\n (ui5BeforeClose)=\"deleteDialogOpen.set(false)\"\n >\n <div class=\"dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">{{ config.title ?? 'Confirm Delete' }}</ui5-title>\n </div>\n @if (config.message) {\n <div class=\"dialog__body\">\n <p class=\"dialog__message\">{{ config.message }}</p>\n </div>\n }\n <div class=\"dialog__footer\" slot=\"footer\">\n <ui5-button design=\"Negative\" (click)=\"onDeleteSubmit()\">\n {{ config.confirmLabel ?? 'Delete' }}\n </ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"closeDeleteDialog()\">\n {{ config.cancelLabel ?? 'Cancel' }}\n </ui5-button>\n </div>\n </ui5-dialog>\n}\n","import { ButtonSettings } from '../../models/ui-definition';\n\n\n\n\nexport const CARD_TYPES = {\n WC: 'wc',\n ANGULAR: 'angular',\n SAP_UI: 'sap-ui',\n} as const;\n\nexport type CardsType = (typeof CARD_TYPES)[keyof typeof CARD_TYPES];\n\n/** Configuration for a single card placed in the dashboard grid or a section. */\nexport interface CardConfig {\n /** Unique identifier for this card. Used as a stable key for position persistence. */\n id: string;\n /** Column span (1–12). Defaults to 12 when omitted. */\n w?: number;\n /** Row span — number of CSS grid rows occupied (1 row = 10 px by default). Defaults to 100 when omitted. */\n h?: number;\n /** Starting column index (0-based). Omit to let the grid auto-place the card. */\n x?: number;\n /** Starting row index (0-based). Omit to let the grid auto-place the card. */\n y?: number;\n /** Maximum row span in edit mode. */\n maxH?: number;\n /** Maximum column span in edit mode. */\n maxW?: number;\n /** Minimum row span in edit mode. */\n minH?: number;\n /** Minimum column span in edit mode. */\n minW?: number;\n /** ID of the parent section. Omit to place the card in the loose-card grid. */\n sectionId?: string;\n /**\n * Custom-element tag name (for `'wc'`/omitted), Angular component selector (for `'angular'`),\n * or SAP UI5 component name (for `'sap-ui'`).\n */\n component: string;\n /**\n * Render strategy for the card.\n * - `'wc'` (default) — creates a custom element and sets `componentInputs` as DOM properties.\n * - `'angular'` — looks up the Angular registry; warns and renders nothing if not found.\n * - `'sap-ui'` — mounts via `window.sap.ui.require` + `ComponentContainer`.\n */\n type?: CardsType;\n /** Key/value pairs passed to the rendered card. Behaviour depends on `type`. */\n componentInputs?: Record<string, unknown>;\n /** Human-readable label shown in the \"Add Card\" dialog. */\n label?: string;\n}\n\n/** Configuration for a named horizontal section that groups cards. */\nexport interface SectionConfig {\n /** Unique identifier for this section. */\n id: string;\n /** Column span (1–12). Defaults to 12 when omitted. */\n w?: number;\n /** Section heading displayed in the UI. */\n title?: string;\n /** When `false`, the section and its cards are excluded from edit mode. Defaults to `true` when omitted. */\n editable?: boolean;\n}\n\n/** Overrides for the two built-in dashboard toolbar buttons. */\nexport interface DashboardButtonsSettings {\n /** Partial override merged on top of the Edit View button defaults. */\n editViewButton?: Partial<ButtonSettings>;\n /** Partial override merged on top of the Edit Cards button defaults. */\n editCardsButton?: Partial<ButtonSettings>;\n}\n\n/** Top-level configuration for the `<mfp-dashboard>` component. */\nexport interface DashboardConfig {\n /** Dashboard title rendered in the toolbar. */\n title: string;\n /** Optional subtitle shown below the title. */\n description?: string;\n /** URL of the background image applied to the dashboard host element. */\n backgroundImageUrl?: string;\n /** Overrides for the built-in Edit View and Add Card toolbar buttons. */\n buttonsSettings?: DashboardButtonsSettings;\n /** Extra action buttons rendered in the toolbar alongside the built-in ones. */\n customActions?: ButtonSettings[];\n /** When `true`, shows the Edit View button in the toolbar, allowing the user to enter edit mode. */\n editable?: boolean;\n /** When `true`, the Edit View button is rendered before the custom actions instead of after. Defaults to `false`. */\n editButtonFirst?: boolean;\n}\n","import {\n Type,\n isDevMode,\n isStandalone,\n reflectComponentType,\n} from '@angular/core';\n\n\nexport interface RegisteredDashboardCardComponent {\n componentType: Type<unknown>;\n selector: string;\n inputs: ReadonlyMap<string, string>;\n}\n\nconst ELEMENT_SELECTOR_PATTERN = /^[a-z](?:[a-z0-9-]*)$/;\n\nconst dashboardCardRegistry = new Map<\n string,\n RegisteredDashboardCardComponent\n>();\n\nexport function addComponentToRegistry(componentTypes: Type<unknown>[]): void {\n for (const componentType of componentTypes) {\n const mirror = reflectComponentType(componentType);\n\n if (!mirror) {\n throw new Error(\n `Dashboard card registration failed: \"${getTypeName(componentType)}\" is not an Angular component.`,\n );\n }\n\n if (!isStandalone(componentType)) {\n throw new Error(\n `Dashboard card registration failed: \"${mirror.selector}\" must be a standalone Angular component.`,\n );\n }\n\n const selector = toElementSelector(mirror.selector, componentType);\n const existing = dashboardCardRegistry.get(selector);\n\n if (existing && existing.componentType !== componentType) {\n throw new Error(\n `Dashboard card registration failed: selector \"${selector}\" is already registered.`,\n );\n }\n\n dashboardCardRegistry.set(selector, {\n componentType,\n selector,\n inputs: createInputMap(mirror.inputs),\n });\n }\n}\n\nexport function getRegisteredDashboardCardComponent(\n selector: string,\n): RegisteredDashboardCardComponent | undefined {\n return dashboardCardRegistry.get(selector);\n}\n\nexport function resetDashboardCardRegistry(): void {\n dashboardCardRegistry.clear();\n}\n\nexport function warnForUnknownDashboardCardInput(\n selector: string,\n inputName: string,\n): void {\n if (!isDevMode()) return;\n\n console.warn(\n `Dashboard card \"${selector}\" ignores unknown Angular input \"${inputName}\".`,\n );\n}\n\nfunction createInputMap(\n inputs: readonly {\n readonly propName: string;\n readonly templateName: string;\n }[],\n): ReadonlyMap<string, string> {\n const bindings = new Map<string, string>();\n\n for (const input of inputs) {\n bindings.set(input.templateName, input.templateName);\n bindings.set(input.propName, input.templateName);\n }\n\n return bindings;\n}\n\nfunction toElementSelector(\n selector: string,\n componentType: Type<unknown>,\n): string {\n const normalized = selector.trim();\n\n if (!ELEMENT_SELECTOR_PATTERN.test(normalized)) {\n throw new Error(\n `Dashboard card registration failed: \"${getTypeName(componentType)}\" must use a single element selector. Received \"${selector}\".`,\n );\n }\n\n return normalized;\n}\n\nfunction getTypeName(componentType: Type<unknown>): string {\n return componentType.name.replace(/^_+/, '') || 'AnonymousComponent';\n}\n","import { CardConfig } from '../../models';\nimport {\n getRegisteredDashboardCardComponent,\n warnForUnknownDashboardCardInput,\n} from './dashboard-card-registry';\nimport { EffectCleanupRegisterFn, ViewContainerRef } from '@angular/core';\n\nexport function mountAngularCard(\n cfg: CardConfig,\n angularHost: ViewContainerRef,\n onCleanup: EffectCleanupRegisterFn,\n): void {\n const registeredComponent = getRegisteredDashboardCardComponent(\n cfg.component,\n );\n\n if (!registeredComponent) {\n console.warn(\n `[DashboardCard] Angular component \"${cfg.component}\" is not registered`,\n );\n return;\n }\n\n const componentRef = angularHost.createComponent(\n registeredComponent.componentType,\n );\n\n for (const [inputName, value] of Object.entries(cfg.componentInputs ?? {})) {\n const templateName = registeredComponent.inputs.get(inputName);\n\n if (!templateName) {\n warnForUnknownDashboardCardInput(cfg.component, inputName);\n continue;\n }\n\n componentRef.setInput(templateName, value);\n }\n\n componentRef.changeDetectorRef.detectChanges();\n\n onCleanup(() => {\n angularHost.clear();\n });\n}\n","import { CardConfig } from '../../models';\nimport { EffectCleanupRegisterFn, ViewContainerRef } from '@angular/core';\n\nexport type SapUiRequire = (\n deps: string[],\n cb: (\n ComponentContainer: new (cfg: {\n name: string;\n manifest: boolean;\n async: boolean;\n settings: Record<string, unknown>;\n }) => { placeAt(el: HTMLElement): void; destroy(): void },\n ) => void,\n) => void;\n\nexport function mountSapCard(\n cfg: CardConfig,\n container: ViewContainerRef,\n onCleanup: EffectCleanupRegisterFn,\n): void {\n const host = container.element.nativeElement;\n\n let sapContainer: { destroy(): void } | null = null;\n let isDestroyed = false;\n const sapRequire = (\n window as unknown as { sap?: { ui: { require: SapUiRequire } } }\n ).sap?.ui?.require;\n\n if (sapRequire) {\n sapRequire(['sap/ui/core/ComponentContainer'], (ComponentContainer) => {\n if (isDestroyed) return;\n\n const container = new ComponentContainer({\n name: cfg.component,\n manifest: true,\n async: true,\n settings: cfg.componentInputs ?? {},\n });\n\n container.placeAt(host);\n sapContainer = container;\n });\n } else {\n console.error('[DashboardCard] SAP UI5 is not available on window.sap');\n }\n\n onCleanup(() => {\n isDestroyed = true;\n sapContainer?.destroy();\n host.innerHTML = '';\n });\n}\n","import { EffectCleanupRegisterFn, Renderer2, ViewContainerRef } from '@angular/core';\nimport { CardConfig } from '../../models';\n\nexport function mountWcCard(\n cfg: CardConfig,\n container: ViewContainerRef,\n onCleanup: EffectCleanupRegisterFn,\n renderer: Renderer2,\n): void {\n const host = container.element.nativeElement;\n const element = renderer.createElement(cfg.component);\n\n for (const [key, value] of Object.entries(cfg.componentInputs ?? {})) {\n renderer.setProperty(element, key, value);\n }\n\n renderer.appendChild(host, element);\n\n onCleanup(() => {\n host.innerHTML = '';\n });\n}\n","import { CARD_TYPES, CardConfig } from '../models';\nimport {\n Component,\n Renderer2,\n ViewContainerRef,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/resize-corner.js';\nimport { mountSapCard, mountAngularCard, mountWcCard } from './utils';\n\n@Component({\n selector: 'mfp-dashboard-card',\n imports: [Button, Icon],\n templateUrl: './dashboard-card.component.html',\n styleUrl: './dashboard-card.component.scss',\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n '[style.grid-column]': 'gridColumn()',\n '[style.grid-row]': 'gridRow()',\n },\n})\nexport class DashboardCard {\n card = input.required<CardConfig>();\n editMode = input<boolean>(false);\n readonly removeCard = output<void>();\n protected readonly gridColumn = computed(() => {\n const width = this.card().w ?? 12;\n return this.createGridTrack(this.card().x, width);\n });\n protected readonly gridRow = computed(() => {\n const height = this.card().h ?? 100;\n return this.createGridTrack(this.card().y, height);\n });\n\n private host = viewChild('elementHost', { read: ViewContainerRef });\n private renderer = inject(Renderer2);\n\n constructor() {\n effect((onCleanup) => {\n const host = this.host();\n const cfg = this.card();\n if (!host || !cfg.component) return;\n\n host.clear();\n host.element.nativeElement.innerHTML = '';\n\n switch (cfg.type) {\n case CARD_TYPES.SAP_UI:\n mountSapCard(cfg, host, onCleanup);\n break;\n case CARD_TYPES.ANGULAR:\n mountAngularCard(cfg, host, onCleanup);\n break;\n case CARD_TYPES.WC:\n default:\n mountWcCard(cfg, host, onCleanup, this.renderer);\n break;\n }\n });\n }\n\n private createGridTrack(start: number | undefined, span: number): string {\n if (start === undefined) {\n return `span ${span}`;\n }\n\n return `${start + 1} / span ${span}`;\n }\n}\n","@if (card().component) {\n <div class=\"component-card\" [class.component-card--editing]=\"editMode()\">\n @if (editMode()) {\n <div class=\"remove-wrapper\">\n <ui5-button\n class=\"card__remove\"\n design=\"Default\"\n icon=\"decline\"\n [accessibleName]=\"'Remove card: ' + (card().label || card().component)\"\n (click)=\"removeCard.emit()\"\n />\n </div>\n }\n <div\n class=\"component-host\"\n [style.pointer-events]=\"editMode() ? 'none' : 'auto'\"\n >\n <div #elementHost></div>\n @if (editMode()) {\n <ui5-icon\n class=\"card__resize-indicator\"\n name=\"resize-corner\"\n accessible-name=\"Resizable\"\n aria-hidden=\"true\"\n />\n }\n </div>\n </div>\n} @else {\n <div class=\"card\">\n <div\n class=\"card__body\"\n [style.pointer-events]=\"editMode() ? 'none' : 'auto'\"\n >\n <ng-content />\n </div>\n </div>\n}","import { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/alert.js';\n\n/**\n * Confirmation popup shown when the user tries to abandon edit mode while\n * there are unsaved dashboard changes. Emits `confirm` when the user accepts\n * the discard, `cancelled` when they back out.\n */\n@Component({\n selector: 'mfp-discard-changes-dialog',\n imports: [Button, Dialog, Icon, Title],\n templateUrl: './discard-changes-dialog.component.html',\n styleUrl: './discard-changes-dialog.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DiscardChangesDialog {\n open = input<boolean>(false);\n\n readonly confirm = output<void>();\n readonly cancelled = output<void>();\n}\n","<ui5-dialog [open]=\"open()\" state=\"Critical\" (ui5BeforeClose)=\"cancelled.emit()\">\n <div class=\"discard-changes-dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">Discard Changes</ui5-title>\n </div>\n <div class=\"discard-changes-dialog__body\">\n Discard the changes? This action cannot be undone.\n </div>\n <div class=\"discard-changes-dialog__footer\" slot=\"footer\">\n <ui5-button design=\"Emphasized\" (click)=\"confirm.emit()\">Discard</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelled.emit()\">Cancel</ui5-button>\n </div>\n</ui5-dialog>\n","import { CardConfig } from '../models';\nimport {\n Component,\n ElementRef,\n ViewEncapsulation,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { List } from '@fundamental-ngx/ui5-webcomponents/list';\nimport { ListItemCustom } from '@fundamental-ngx/ui5-webcomponents/list-item-custom';\nimport { Switch } from '@fundamental-ngx/ui5-webcomponents/switch';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n selector: 'mfp-edit-cards-dialog',\n imports: [Button, Dialog, List, ListItemCustom, Switch, Title],\n templateUrl: './edit-cards-dialog.component.html',\n styleUrl: './edit-cards-dialog.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class EditCardsDialog {\n private readonly host = inject(ElementRef<HTMLElement>);\n\n availableCards = input<CardConfig[]>([]);\n addedCardsIds = input<Set<string>>(new Set());\n open = input<boolean>(false);\n\n readonly confirm = output<{ added: CardConfig[]; removed: string[] }>();\n readonly cancelled = output<void>();\n\n selectedIds = signal<Set<string>>(new Set());\n\n constructor() {\n effect(() => {\n if (this.open()) {\n const initial = new Set(\n this.availableCards()\n .filter((ac) => this.addedCardsIds().has(ac.id))\n .map((ac) => ac.id),\n );\n this.selectedIds.set(initial);\n }\n });\n }\n\n toggle(id: string): void {\n this.selectedIds.update((set) => {\n const next = new Set(set);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }\n\n /**\n * Tab moves focus across the switches directly, skipping the wrapping\n * ui5-li-custom rows. Past the last switch Tab goes to the first footer\n * button; before the first switch Shift+Tab goes to the last footer button.\n * The dialog's native focus trap takes care of cycling from the buttons\n * back into the list.\n */\n onSwitchKeydown(event: KeyboardEvent, _id: string): void {\n if (event.key !== 'Tab') {\n return;\n }\n const root: ParentNode =\n this.host.nativeElement.shadowRoot ?? this.host.nativeElement;\n const switches = Array.from(\n root.querySelectorAll('ui5-switch'),\n ) as HTMLElement[];\n const buttons = Array.from(\n root.querySelectorAll('ui5-button'),\n ) as HTMLElement[];\n const currentIndex = switches.indexOf(event.currentTarget as HTMLElement);\n if (currentIndex === -1) {\n return;\n }\n if (event.shiftKey) {\n const prev = switches[currentIndex - 1];\n if (prev) {\n event.preventDefault();\n event.stopPropagation();\n prev.focus();\n }\n // First switch: let Shift+Tab fall through so the dialog's focus trap\n // wraps to the last footer button.\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const next = switches[currentIndex + 1];\n if (next) {\n next.focus();\n return;\n }\n // Last switch: hand off to the first footer button.\n buttons[0]?.focus();\n }\n\n confirmSave(): void {\n const availableIds = new Set(this.availableCards().map((ac) => ac.id));\n const added = this.availableCards().filter(\n (ac) => this.selectedIds().has(ac.id) && !this.addedCardsIds().has(ac.id),\n );\n const removed = [...this.addedCardsIds()].filter(\n (id) => availableIds.has(id) && !this.selectedIds().has(id),\n );\n this.confirm.emit({ added, removed });\n }\n}\n","<ui5-dialog [open]=\"open()\" (ui5BeforeClose)=\"cancelled.emit()\">\n <div class=\"edit-cards-dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">Edit Cards</ui5-title>\n </div>\n <div class=\"edit-cards-dialog\">\n <ui5-list noDataText=\"No cards available.\" selectionMode=\"None\" separators=\"Inner\">\n @for (availableCard of availableCards(); track availableCard.id) {\n <ui5-li-custom\n [accessibleName]=\"availableCard.label || availableCard.component\"\n >\n <div class=\"edit-cards-dialog__list-item\">\n <span>{{ availableCard.label || availableCard.component }}</span>\n <ui5-switch\n [accessibleName]=\"availableCard.label || availableCard.component\"\n [checked]=\"selectedIds().has(availableCard.id)\"\n (ui5Change)=\"toggle(availableCard.id)\"\n (keydown)=\"onSwitchKeydown($event, availableCard.id)\"\n />\n </div>\n </ui5-li-custom>\n }\n </ui5-list>\n </div>\n <div class=\"edit-cards-dialog__footer\" slot=\"footer\">\n <ui5-button design=\"Emphasized\" (click)=\"confirmSave()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelled.emit()\">Cancel</ui5-button>\n </div>\n</ui5-dialog>\n","import { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/alert.js';\n\n/**\n * Confirmation popup shown when the user attempts to navigate away from the\n * dashboard while there are unsaved edit-mode changes. The host (the\n * dashboard, an Angular CanDeactivate guard, a Luigi navigation listener,\n * etc.) is responsible for routing its intercepted navigation through this\n * dialog and acting on the emitted decision:\n * - `save` → persist changes, then proceed with navigation\n * - `discard` → revert changes, then proceed with navigation\n * - `cancelled` → abort navigation, stay on the page\n */\n@Component({\n selector: 'mfp-unsaved-changes-dialog',\n imports: [Button, Dialog, Icon, Title],\n templateUrl: './unsaved-changes-dialog.component.html',\n styleUrl: './unsaved-changes-dialog.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class UnsavedChangesDialog {\n open = input<boolean>(false);\n\n readonly save = output<void>();\n readonly discard = output<void>();\n readonly cancelled = output<void>();\n}\n","<ui5-dialog [open]=\"open()\" state=\"Critical\" (ui5BeforeClose)=\"cancelled.emit()\">\n <div class=\"unsaved-changes-dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">Unsaved Changes</ui5-title>\n </div>\n <div class=\"unsaved-changes-dialog__body\">\n You are leaving this page. Save or discard the changes to proceed. This\n action cannot be undone.\n </div>\n <div class=\"unsaved-changes-dialog__footer\" slot=\"footer\">\n <ui5-button design=\"Emphasized\" (click)=\"save.emit()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"discard.emit()\">Discard</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelled.emit()\">Cancel</ui5-button>\n </div>\n</ui5-dialog>\n","export const COMPACT_BREAKPOINT = 726;\nexport const CELL_HEIGHT = 10;\n","import { DashboardCard } from '../card/dashboard-card.component';\nimport { CardConfig, SectionConfig } from '../models';\nimport { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\n\n@Component({\n selector: 'mfp-dashboard-section',\n imports: [DashboardCard, Button],\n templateUrl: './dashboard-section.component.html',\n styleUrl: './dashboard-section.component.scss',\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n '[style.grid-column]': '\"span \" + (section().w ?? 12)',\n },\n})\nexport class DashboardSection {\n section = input.required<SectionConfig>();\n cards = input<CardConfig[]>([]);\n columns = input<number>(12);\n editMode = input<boolean>(false);\n readonly removeSection = output<void>();\n readonly removeCard = output<string>();\n}\n","<div\n class=\"section\"\n [class.section--edit]=\"editMode() && section().editable !== false\"\n>\n @if (editMode() && section().editable !== false) {\n <ui5-button\n class=\"section__remove\"\n design=\"Default\"\n icon=\"decline\"\n [accessibleName]=\"'Remove section: ' + (section().title || section().id)\"\n (click)=\"removeSection.emit()\"\n />\n }\n @if (section().title) {\n <div class=\"section__header\">\n <span class=\"section__title\">{{ section().title }}</span>\n </div>\n }\n <div class=\"section__grid\" [style.--cols]=\"columns()\">\n @for (card of cards(); track card.id) {\n <mfp-dashboard-card\n [card]=\"card\"\n [editMode]=\"editMode() && section().editable !== false\"\n (removeCard)=\"removeCard.emit($any(card.id))\"\n />\n }\n </div>\n</div>\n","import { ButtonSettings } from '../../models/ui-definition';\nimport { DashboardCard } from '../card/dashboard-card.component';\nimport { addComponentToRegistry } from '../card/utils/dashboard-card-registry';\nimport { DiscardChangesDialog } from '../discard-changes-dialog/discard-changes-dialog.component';\nimport { EditCardsDialog } from '../edit-cards-dialog/edit-cards-dialog.component';\nimport { UnsavedChangesDialog } from '../unsaved-changes-dialog/unsaved-changes-dialog.component';\nimport { CardConfig, DashboardConfig, SectionConfig } from '../models';\nimport { CELL_HEIGHT, COMPACT_BREAKPOINT } from '../models/constants';\nimport { DashboardSection } from '../section/dashboard-section.component';\nimport {\n Component,\n ElementRef,\n Injector,\n OnDestroy,\n OnInit,\n SecurityContext,\n Type,\n ViewEncapsulation,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n linkedSignal,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Menu } from '@fundamental-ngx/ui5-webcomponents/menu';\nimport { MenuItem } from '@fundamental-ngx/ui5-webcomponents/menu-item';\nimport { MenuSeparator } from '@fundamental-ngx/ui5-webcomponents/menu-separator';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/action-settings.js';\nimport '@ui5/webcomponents-icons/dist/menu2.js';\nimport '@ui5/webcomponents-icons/dist/user-edit.js';\nimport { GridStackNode, GridStackOptions } from 'gridstack';\nimport {\n GridstackComponent,\n GridstackItemComponent,\n nodesCB,\n} from 'gridstack/dist/angular';\n\ndocument.body.classList.add('ui5-content-density-compact');\n\n@Component({\n selector: 'mfp-dashboard',\n imports: [\n GridstackComponent,\n GridstackItemComponent,\n DiscardChangesDialog,\n EditCardsDialog,\n UnsavedChangesDialog,\n DashboardSection,\n DashboardCard,\n Button,\n Icon,\n Menu,\n MenuItem,\n MenuSeparator,\n Title,\n ],\n templateUrl: './dashboard.component.html',\n styleUrl: './dashboard.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[style.background-image]':\n 'config().backgroundImageUrl ? \"url(\" + config().backgroundImageUrl + \")\" : null',\n },\n})\nexport class Dashboard implements OnInit, OnDestroy {\n static registerAngularComponents(componentTypes: Type<unknown>[]): void {\n addComponentToRegistry(componentTypes);\n }\n\n config = input.required<DashboardConfig>();\n sections = model<SectionConfig[]>([]);\n cards = model<CardConfig[]>([]);\n availableCards = input<CardConfig[]>([]);\n\n readonly saved = output<{ sections: SectionConfig[]; cards: CardConfig[] }>();\n readonly actionButtonClick = output<{\n event: MouseEvent;\n action: ButtonSettings;\n }>();\n readonly unsavedChangesChange = output<boolean>();\n\n editMode = signal(false);\n compactToolbar = signal(false);\n toolbarMenuOpen = signal(false);\n\n /** True once the user has dragged/resized any grid item while in edit mode. */\n private gridDirty = signal(false);\n\n /** JSON snapshots of sections/cards taken on entering edit mode, used to detect changes. */\n private sectionsSnapshotJson = '';\n private cardsSnapshotJson = '';\n\n /**\n * True when the user is in edit mode AND has made any change (sections/cards\n * mutated, or grid items moved/resized). Resets when entering edit mode and\n * after save/cancel.\n */\n hasUnsavedChanges = computed(() => {\n if (!this.editMode()) return false;\n if (this.gridDirty()) return true;\n return (\n JSON.stringify(this.sections()) !== this.sectionsSnapshotJson ||\n JSON.stringify(this.cards()) !== this.cardsSnapshotJson\n );\n });\n\n private sectionsSnapshot: SectionConfig[] = [];\n private cardsSnapshot: CardConfig[] = [];\n private gridStackItems = viewChild.required<GridstackComponent>('grid');\n private addCardBtn = viewChild<Button>('editCardsBtn');\n private resizeObserver?: ResizeObserver;\n private readonly hostEl = inject(ElementRef<HTMLElement>);\n private readonly injector = inject(Injector);\n private readonly sanitizer = inject(DomSanitizer);\n\n protected safeTitle = computed((): SafeHtml => {\n const clean =\n this.sanitizer.sanitize(SecurityContext.HTML, this.config().title) ?? '';\n return this.sanitizer.bypassSecurityTrustHtml(clean);\n });\n\n protected safeDescription = computed((): SafeHtml | null => {\n const desc = this.config().description;\n if (!desc) return null;\n\n const clean = this.sanitizer.sanitize(SecurityContext.HTML, desc) ?? '';\n return this.sanitizer.bypassSecurityTrustHtml(clean);\n });\n\n protected gridOptions = computed(\n (): GridStackOptions => ({\n cellHeight: CELL_HEIGHT,\n disableResize: !this.editMode(),\n disableDrag: !this.editMode(),\n marginBottom: 0,\n marginLeft: 0,\n marginRight: 0,\n columnOpts: {\n breakpointForWindow: true,\n breakpoints: [\n { w: 1440, c: 12, layout: 'none' },\n { w: 1024, c: 8, layout: 'compact' },\n { w: 600, c: 1, layout: 'list' },\n ],\n },\n }),\n );\n\n cardDialogOpen = signal(false);\n discardDialogOpen = signal(false);\n unsavedNavDialogOpen = signal(false);\n /** Callback that resumes the intercepted navigation once the user resolves the dialog. */\n private pendingNavigation: (() => void) | null = null;\n /** beforeunload handler kept on instance so add/removeEventListener pair up. */\n private readonly beforeUnloadHandler = (event: BeforeUnloadEvent): void => {\n if (this.hasUnsavedChanges()) {\n event.preventDefault();\n // Required by older browsers; the string itself is ignored — modern\n // browsers always render their own generic prompt.\n event.returnValue = '';\n }\n };\n customActions = computed(() => this.config().customActions ?? []);\n addedCardsIds = computed(() => new Set(this.cards().map((c) => c.id)));\n\n editViewButton = computed(() => ({\n icon: 'action-settings',\n design: 'Transparent' as const,\n tooltip: 'Edit View',\n text: '',\n ...this.config().buttonsSettings?.editViewButton,\n }));\n\n editCardsButton = computed(() => ({\n icon: '',\n design: 'Default' as const,\n tooltip: '',\n text: 'Edit Cards',\n ...this.config().buttonsSettings?.editCardsButton,\n }));\n\n sectionCards = computed(() => {\n const all = this.cards();\n return (sectionId: string) => all.filter((c) => c.sectionId === sectionId);\n });\n\n cardsPosition = new Map<\n string,\n { x?: number; y?: number; w?: number; h?: number }\n >();\n looseCards = linkedSignal(() => this.cards().filter((c) => !c.sectionId));\n\n private newGridStackNodes: GridStackNode[] = [];\n\n constructor() {\n effect(() => this.unsavedChangesChange.emit(this.hasUnsavedChanges()));\n }\n\n ngOnInit(): void {\n this.resizeObserver = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n this.compactToolbar.set(width < COMPACT_BREAKPOINT);\n });\n this.resizeObserver.observe(this.hostEl.nativeElement);\n window.addEventListener('beforeunload', this.beforeUnloadHandler);\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n window.removeEventListener('beforeunload', this.beforeUnloadHandler);\n }\n\n onMenuItemClick(actionId: string, event: Event): void {\n if (actionId === 'edit-view') {\n this.enterEditMode();\n return;\n }\n const action = this.customActions().find((a) => a.action === actionId);\n if (action) {\n this.actionButtonClick.emit({ event: event as MouseEvent, action });\n }\n }\n\n enterEditMode(): void {\n const gridStackNodes = this.gridStackItems()\n .gridstackItems?.toArray()\n .map((node) => node.options);\n\n if (gridStackNodes) {\n this.saveCardsPosition(gridStackNodes);\n }\n\n this.sectionsSnapshot = [...this.sections()];\n this.cardsSnapshot = [...this.cards()];\n this.sectionsSnapshotJson = JSON.stringify(this.sections());\n this.cardsSnapshotJson = JSON.stringify(this.cards());\n this.gridDirty.set(false);\n this.editMode.set(true);\n afterNextRender(\n () => {\n this.addCardBtn()?.element.focus();\n },\n { injector: this.injector },\n );\n }\n\n saveEdit(): void {\n this.saveCardsPosition(this.newGridStackNodes);\n this.saved.emit({\n sections: this.sections(),\n cards: this.cards().map((c) => {\n const pos = this.cardsPosition.get(c.id);\n return {\n ...c,\n x: pos?.x,\n y: pos?.y,\n w: pos?.w ?? c.w,\n h: pos?.h ?? c.h,\n };\n }),\n });\n this.gridDirty.set(false);\n this.editMode.set(false);\n }\n\n cancelEdit(): void {\n if (this.hasUnsavedChanges()) {\n this.discardDialogOpen.set(true);\n return;\n }\n this.discardEdit();\n }\n\n /**\n * Confirms abandoning unsaved edit-mode changes: closes the discard popup\n * and reverts sections/cards to the snapshot taken on entering edit mode.\n */\n confirmDiscard(): void {\n this.discardDialogOpen.set(false);\n this.discardEdit();\n }\n\n /**\n * Cancels the discard popup and keeps the user in edit mode with their\n * pending changes intact.\n */\n cancelDiscard(): void {\n this.discardDialogOpen.set(false);\n }\n\n /**\n * Public framework-agnostic navigation guard. Consumer apps (Angular Router\n * CanDeactivate guard, Luigi navigation listener, plain `<a>` click handler,\n * window history listener — anything) call this before performing their\n * navigation:\n *\n * if (dashboard.requestNavigation(() => router.navigateByUrl(target))) {\n * // already navigated synchronously — clean state\n * } else {\n * // dashboard popped the unsaved-changes dialog; the navigation will\n * // resume from the user's choice (Save → proceed, Discard → proceed,\n * // Cancel → drop the request entirely).\n * }\n *\n * Returns `true` when navigation may proceed immediately (no unsaved\n * changes — `proceed` was invoked synchronously). Returns `false` when the\n * dialog has been opened and the caller must NOT navigate; the dashboard\n * will run the callback later if the user picks Save or Discard.\n *\n * If a previous navigation is already pending, that one is dropped in\n * favour of the new request — Cancel always means \"stay here\", so losing\n * the older queued navigation is the correct outcome.\n */\n requestNavigation(proceed: () => void): boolean {\n if (!this.hasUnsavedChanges()) {\n proceed();\n return true;\n }\n this.pendingNavigation = proceed;\n this.unsavedNavDialogOpen.set(true);\n return false;\n }\n\n /** Save → persist changes, close the dialog, then resume navigation. */\n onUnsavedNavSave(): void {\n this.unsavedNavDialogOpen.set(false);\n this.saveEdit();\n this.runPendingNavigation();\n }\n\n /** Discard → revert to snapshot, close the dialog, then resume navigation. */\n onUnsavedNavDiscard(): void {\n this.unsavedNavDialogOpen.set(false);\n this.discardEdit();\n this.runPendingNavigation();\n }\n\n /** Cancel → drop the queued navigation and stay in edit mode. */\n onUnsavedNavCancel(): void {\n this.unsavedNavDialogOpen.set(false);\n this.pendingNavigation = null;\n }\n\n private runPendingNavigation(): void {\n const pending = this.pendingNavigation;\n this.pendingNavigation = null;\n pending?.();\n }\n\n private discardEdit(): void {\n this.sections.set(this.sectionsSnapshot);\n this.cards.set(\n this.cardsSnapshot.map((c) => {\n const pos = this.cardsPosition.get(c.id);\n return { ...c, x: pos?.x, y: pos?.y };\n }),\n );\n this.cardDialogOpen.set(false);\n this.gridDirty.set(false);\n this.editMode.set(false);\n }\n\n removeSection(id: string): void {\n this.sections.update((list) => list.filter((s) => s.id !== id));\n this.cards.update((list) => list.filter((c) => c.sectionId !== id));\n }\n\n removeCard(id: string): void {\n this.cardsPosition.delete(id);\n this.cards.update((list) => list.filter((c) => c.id !== id));\n }\n\n openCardPanel(): void {\n this.cardDialogOpen.set(true);\n }\n\n closeCardPanel(): void {\n this.cardDialogOpen.set(false);\n }\n\n onCardsEdited(event: { added: CardConfig[]; removed: string[] }): void {\n this.cards.update((list) => {\n const withoutRemoved = list.filter((c) => !event.removed.includes(c.id));\n return [...withoutRemoved, ...event.added.map((ac) => ({ ...ac }))];\n });\n this.closeCardPanel();\n }\n\n onGridChange(event: nodesCB): void {\n this.newGridStackNodes = event.nodes;\n if (this.editMode()) {\n this.gridDirty.set(true);\n }\n }\n\n private saveCardsPosition(items: GridStackNode[]): void {\n items.forEach((node) => {\n if (node.id) {\n this.cardsPosition.set(node.id, {\n x: node.x,\n y: node.y,\n w: node.w,\n h: node.h,\n });\n }\n });\n }\n}\n","<div class=\"mfp-dashboard\">\n <div class=\"mfp-dashboard__topbar\">\n <div class=\"mfp-dashboard__topbar-row\">\n <div class=\"mfp-dashboard__header\">\n <div class=\"mfp-dashboard__title-row\">\n @if (config().title) {\n <ui5-title level=\"H3\" size=\"H3\" wrapping-type=\"Normal\">\n <span [innerHTML]=\"safeTitle()\"></span>\n </ui5-title>\n }\n @if (hasUnsavedChanges()) {\n <div class=\"mfp-dashboard__unsaved-changes\" role=\"status\">\n <ui5-icon\n class=\"mfp-dashboard__unsaved-changes-icon\"\n name=\"user-edit\"\n accessible-name=\"Unsaved Changes\"\n />\n <span class=\"mfp-dashboard__unsaved-changes-text\"\n >Unsaved Changes</span\n >\n </div>\n }\n </div>\n @if (config().description) {\n <ui5-title level=\"H5\" size=\"H5\" wrapping-type=\"Normal\">\n <span class=\"mfp-dashboard__description\" [innerHTML]=\"safeDescription()\"></span>\n </ui5-title>\n }\n </div>\n\n <div class=\"mfp-dashboard__toolbar\">\n @if (editMode()) {\n <ui5-button\n #editCardsBtn\n id=\"edit-cards-btn\"\n [accessibleName]=\"editCardsButton().text || editCardsButton().tooltip || 'Edit Cards'\"\n [design]=\"editCardsButton().design\"\n [icon]=\"editCardsButton().icon\"\n [tooltip]=\"editCardsButton().tooltip\"\n (click)=\"openCardPanel()\"\n >{{ editCardsButton().text }}</ui5-button\n >\n } @else if (compactToolbar()) {\n <ui5-button\n #menuBtn\n accessibleName=\"Actions\"\n design=\"Transparent\"\n icon=\"menu2\"\n tooltip=\"Actions\"\n (click)=\"toolbarMenuOpen.update((v) => !v)\"\n />\n <ui5-menu\n [open]=\"toolbarMenuOpen()\"\n [opener]=\"menuBtn.element\"\n (ui5Close)=\"toolbarMenuOpen.set(false)\"\n (ui5ItemClick)=\"\n onMenuItemClick(\n $any($event).detail.item.dataset['action'],\n $event\n )\n \"\n (ui5Open)=\"toolbarMenuOpen.set(true)\"\n >\n @if (config().editButtonFirst && config().editable) {\n <ui5-menu-item\n data-action=\"edit-view\"\n [icon]=\"editViewButton().icon\"\n [text]=\"editViewButton().text || 'Edit View'\"\n />\n @if (customActions().length) {\n <ui5-menu-separator />\n }\n }\n @for (action of customActions(); track action.action) {\n <ui5-menu-item\n [attr.data-action]=\"action.action\"\n [icon]=\"action.icon ?? ''\"\n [text]=\"action.text ?? ''\"\n />\n }\n @if (!config().editButtonFirst && config().editable) {\n <ui5-menu-separator />\n <ui5-menu-item\n data-action=\"edit-view\"\n [icon]=\"editViewButton().icon\"\n [text]=\"editViewButton().text || 'Edit View'\"\n />\n }\n </ui5-menu>\n } @else {\n @if (config().editButtonFirst && config().editable) {\n <ui5-button\n [accessibleName]=\"editViewButton().text || editViewButton().tooltip || 'Edit View'\"\n [design]=\"editViewButton().design\"\n [icon]=\"editViewButton().icon\"\n [tooltip]=\"editViewButton().tooltip\"\n (click)=\"enterEditMode()\"\n >{{ editViewButton().text }}</ui5-button\n >\n }\n @for (action of customActions(); track action.action) {\n <ui5-button\n [accessibleName]=\"action.text || action.tooltip || action.action\"\n [design]=\"action.design ?? 'Default'\"\n [endIcon]=\"action?.endIcon\"\n [icon]=\"action.icon ?? ''\"\n [tooltip]=\"action.tooltip ?? ''\"\n (click)=\"\n actionButtonClick.emit({ event: $event, action: action })\n \"\n >{{ action.text }}</ui5-button\n >\n }\n @if (!config().editButtonFirst && config().editable) {\n <ui5-button\n [accessibleName]=\"editViewButton().text || editViewButton().tooltip || 'Edit View'\"\n [design]=\"editViewButton().design\"\n [icon]=\"editViewButton().icon\"\n [tooltip]=\"editViewButton().tooltip\"\n (click)=\"enterEditMode()\"\n >{{ editViewButton().text }}</ui5-button\n >\n }\n }\n </div>\n </div>\n\n <div class=\"mfp-dashboard__subheader\">\n <ng-content select=\"[slot=dashboard-subheader]\" />\n </div>\n </div>\n\n <div class=\"mfp-sections-container\">\n @for (section of sections(); track section.id) {\n <mfp-dashboard-section\n [cards]=\"sectionCards()(section.id)\"\n [columns]=\"12\"\n [editMode]=\"editMode()\"\n [section]=\"section\"\n (removeCard)=\"removeCard($event)\"\n (removeSection)=\"removeSection(section.id)\"\n />\n }\n </div>\n\n <gridstack #grid [options]=\"gridOptions()\" (addedCB)=\"onGridChange($event)\" (changeCB)=\"onGridChange($event)\" (removedCB)=\"onGridChange($event)\">\n @for (card of looseCards(); track card.id) {\n <gridstack-item\n [options]=\"card\"\n [style.cursor]=\"editMode() ? 'pointer' : 'auto'\"\n >\n <mfp-dashboard-card\n [card]=\"card\"\n [editMode]=\"editMode()\"\n (removeCard)=\"removeCard($any(card.id))\"\n />\n </gridstack-item>\n }\n </gridstack>\n\n @if (editMode()) {\n <div class=\"mfp-dashboard__edit-bar\">\n <ui5-button design=\"Emphasized\" (click)=\"saveEdit()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelEdit()\"\n >Cancel</ui5-button\n >\n </div>\n }\n</div>\n\n<mfp-edit-cards-dialog\n [addedCardsIds]=\"addedCardsIds()\"\n [availableCards]=\"availableCards()\"\n [open]=\"cardDialogOpen()\"\n (cancelled)=\"closeCardPanel()\"\n (confirm)=\"onCardsEdited($event)\"\n/>\n\n<mfp-discard-changes-dialog\n [open]=\"discardDialogOpen()\"\n (cancelled)=\"cancelDiscard()\"\n (confirm)=\"confirmDiscard()\"\n/>\n\n<mfp-unsaved-changes-dialog\n [open]=\"unsavedNavDialogOpen()\"\n (cancelled)=\"onUnsavedNavCancel()\"\n (discard)=\"onUnsavedNavDiscard()\"\n (save)=\"onUnsavedNavSave()\"\n/>\n","import { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Card } from '@fundamental-ngx/ui5-webcomponents/card';\nimport { CardHeader } from '@fundamental-ngx/ui5-webcomponents/card-header';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/AllIcons.js';\n\n@Component({\n selector: 'mfp-visited-service-card',\n imports: [Card, CardHeader, Icon],\n templateUrl: './visited-service-card.component.html',\n styleUrl: './visited-service-card.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class VisitedServiceCard {\n serviceType = input.required<string>();\n serviceName = input.required<string>();\n serviceDescription = input.required<string>();\n serviceIcon = input.required<string>();\n path = input.required<string>();\n\n readonly cardClick = output<string>();\n}\n","<div\n class=\"visited-card-wrapper\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"cardClick.emit(path())\"\n (keydown.enter)=\"cardClick.emit(path())\"\n>\n <span class=\"visited-card__type-badge\">{{ serviceType() }}</span>\n <ui5-card class=\"visited-card\">\n <ui5-card-header\n slot=\"header\"\n [interactive]=\"true\"\n [subtitleText]=\"serviceDescription()\"\n [titleText]=\"serviceName()\"\n >\n <ui5-icon\n class=\"visited-card__icon\"\n slot=\"avatar\"\n [name]=\"serviceIcon()\"\n />\n </ui5-card-header>\n </ui5-card>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n selector: 'mfp-favorites',\n imports: [Button, Icon, Title],\n templateUrl: './favorites.component.html',\n styleUrl: './favorites.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class Favorites {\n readonly items = [\n { label: 'Create Account', icon: 'add', action: 'create-account' },\n { label: 'Start Approval', icon: 'workflow-tasks', action: 'start-approval' },\n { label: 'Add User to Account', icon: 'person-placeholder', action: 'add-user' },\n ];\n}\n","<div class=\"favorites\">\n <ui5-title class=\"favorites__title\" level=\"H5\">Favorites</ui5-title>\n <div class=\"favorites__list\">\n @for (item of items; track item.action) {\n <div class=\"favorites__item\">\n <ui5-icon class=\"favorites__icon\" [name]=\"item.icon\" />\n <span class=\"favorites__label\">{{ item.label }}</span>\n <ui5-button design=\"Transparent\" [icon]=\"item.icon\">{{ item.label }}</ui5-button>\n </div>\n }\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n/** Possible health states for a service. */\nexport type ServiceStatusValue = 'operational' | 'degraded' | 'outage' | 'maintenance';\n\n/** A single service entry displayed in the service-status card. */\nexport interface ServiceStatusItem {\n /** Display name of the service. */\n name: string;\n /** SAP UI5 icon name used as the service icon. */\n icon: string;\n /** Current health status of the service. */\n status: ServiceStatusValue;\n}\n\n@Component({\n selector: 'mfp-service-status-card',\n imports: [Icon, Title],\n templateUrl: './service-status-card.component.html',\n styleUrl: './service-status-card.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class ServiceStatusCard {\n readonly services: ServiceStatusItem[] = [\n { name: 'API Gateway', icon: 'connected', status: 'operational' },\n { name: 'Identity Service', icon: 'customer', status: 'operational' },\n { name: 'Database Cluster', icon: 'database', status: 'degraded' },\n { name: 'Message Queue', icon: 'email', status: 'operational' },\n { name: 'Object Storage', icon: 'storage', status: 'maintenance' },\n { name: 'Audit Log', icon: 'log', status: 'outage' },\n ];\n\n readonly statusConfig: Record<ServiceStatusValue, { label: string; icon: string; colorClass: string }> = {\n operational: { label: 'Operational', icon: 'status-positive', colorClass: 'status--operational' },\n degraded: { label: 'Degraded', icon: 'status-critical', colorClass: 'status--degraded' },\n outage: { label: 'Outage', icon: 'status-negative', colorClass: 'status--outage' },\n maintenance: { label: 'Maintenance', icon: 'status-inactive', colorClass: 'status--maintenance' },\n };\n}\n","<div class=\"service-status\">\n <ui5-title class=\"service-status__title\" level=\"H5\">Service Availability</ui5-title>\n <div class=\"service-status__list\">\n @for (service of services; track service.name) {\n <div class=\"service-status__item\">\n <ui5-icon class=\"service-status__icon\" [name]=\"service.icon\" />\n <span class=\"service-status__name\">{{ service.name }}</span>\n <div [class]=\"'service-status__status ' + statusConfig[service.status].colorClass\">\n <ui5-icon class=\"service-status__status-icon\" [name]=\"statusConfig[service.status].icon\" />\n <span class=\"service-status__status-label\">{{ statusConfig[service.status].label }}</span>\n </div>\n </div>\n }\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { List } from '@fundamental-ngx/ui5-webcomponents/list';\nimport { ListItemStandard } from '@fundamental-ngx/ui5-webcomponents/list-item-standard';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n selector: 'mfp-whats-new',\n imports: [List, ListItemStandard, Title],\n templateUrl: './whats-new.component.html',\n styleUrl: './whats-new.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class WhatsNew {\n readonly headlines = [\n {\n title: 'Kubernetes 1.32 Released',\n description: 'Improved scheduling, new APIs and graduated features.',\n icon: 'cloud',\n },\n {\n title: 'Angular 20 Signals Stable',\n description: 'Signal-based reactivity is now production-ready.',\n icon: 'developer-settings',\n },\n {\n title: 'WebAssembly WASI 2.0 Preview',\n description: 'System interface advances bring server-side WASM closer.',\n icon: 'technical-object',\n },\n {\n title: 'OpenTelemetry Hits 1.0',\n description: 'Unified observability standard lands in enterprise stacks.',\n icon: 'monitor-payments',\n },\n {\n title: 'Rust Enters Linux Kernel Mainstream',\n description: 'More subsystems accept Rust driver contributions.',\n icon: 'settings',\n },\n {\n title: 'TypeScript 5.8 Performance Boost',\n description: 'Declaration emit is up to 10x faster in large projects.',\n icon: 'accelerated',\n },\n ];\n}\n","<div class=\"whats-new\">\n <ui5-title class=\"whats-new__title\" level=\"H5\">What's New</ui5-title>\n <ui5-list class=\"whats-new__list\" separators=\"Inner\">\n @for (item of headlines; track item.title) {\n <ui5-li [description]=\"item.description\" [icon]=\"item.icon\">\n {{ item.title }}\n </ui5-li>\n }\n </ui5-list>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAM,gBAAgB,GAAG,CAAC,KAAa,KAAI;AAChD,IAAA,IAAI,KAAK,KAAK,MAAM,EAAE;AACpB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI,KAAK,KAAK,OAAO,EAAE;AACrB,QAAA,OAAO,KAAK;IACd;IAEA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACzB,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AAEA,IAAA,OAAO,KAAK;AACd,CAAC;AAEM,MAAM,eAAe,GAAG,CAC7B,IAAa,EACb,aAAqB,KACV;AACX,IAAA,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,aAAa,CAAC;IAC1D,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAE5D,IAAA,QAAQ,IAAI,CAAC,EAAE,CAAC,SAAS;AACvB,QAAA,KAAK,QAAQ;YACX,OAAO,kBAAkB,KAAK,oBAAoB;AACpD,QAAA,KAAK,WAAW;YACd,OAAO,kBAAkB,KAAK,oBAAoB;AACpD,QAAA,KAAK,aAAa;YAChB,OAAO,kBAAkB,GAAG,oBAAoB;AAClD,QAAA,KAAK,oBAAoB;YACvB,OAAO,kBAAkB,IAAI,oBAAoB;AACnD,QAAA,KAAK,UAAU;YACb,OAAO,kBAAkB,GAAG,oBAAoB;AAClD,QAAA,KAAK,iBAAiB;YACpB,OAAO,kBAAkB,IAAI,oBAAoB;AACnD,QAAA,KAAK,UAAU;AACb,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE;AACrC,gBAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC1D;iBAAO,IACL,OAAO,kBAAkB,KAAK,QAAQ;AACtC,gBAAA,OAAO,oBAAoB,KAAK,QAAQ,EACxC;AACA,gBAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC1D;AAEA,YAAA,OAAO,KAAK;;AAEhB,IAAA,OAAO,KAAK;AACd,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAC9B,KAAa,EACb,KAAiB,KACe;IAChC,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,EAAE;IACX;IAEA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;QAChC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;QAC3C,IAAI,MAAM,EAAE;YACV,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;QACnC;AACA,QAAA,OAAO,GAAG;IACZ,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;;ACjEM,MAAM,0BAA0B,GAAG,CACxC,QAAW,EACX,KAIC,KACC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,QAAQ;IAC3D,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,IAAI,QAAQ,YAAY,KAAK,EAAE;AAC7B,QAAA,OAAO,CAAC,KAAK,CACX,CAAA,8BAAA,EAAiC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,qEAAA,CAAuE,CACjI;AACD,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;;;;;;;;IAQpD,MAAM,WAAW,GAAG,QAAQ,CAAQ;AAClC,QAAA,IAAI,EAAE,CAAA,EAAG,MAAM,CAAA,EAAG,QAAQ,CAAA,CAAE;AAC5B,QAAA,IAAI,EAAE,QAAkB;AACzB,KAAA,CAAC;AACF,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS;AAE7D,IAAA,IAAI,KAAK,IAAI,KAAK,CAAC,aAAa,EAAE;AAChC,QAAA,OAAO,gBAAgB,CACrB,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAC9B,KAAK,CAAC,aAAa,CAAC,SAAS,CAC9B;IACH;AAEA,IAAA,OAAO,KAAK;AACd,CAAC;AAED,MAAM,gBAAgB,GAAG,CACvB,KAAyB,EACzB,SAAsC,KAChB;IACtB,IAAI,KAAK,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK;IAEzE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;QACjC,IAAI,GAAG,IAAI,IAAI;AAAE,YAAA,OAAO,GAAG;QAE3B,QAAQ,CAAC;AACP,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,GAAG,CAAC,WAAW,EAAE;AAC1B,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,GAAG,CAAC,WAAW,EAAE;YAC1B,KAAK,YAAY,EAAE;AACjB,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;gBACvB,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;YACtE;YACA,KAAK,QAAQ,EAAE;AACb,gBAAA,IAAI;AACF,oBAAA,OAAO,YAAY,CAAC,GAAG,CAAC;gBAC1B;AAAE,gBAAA,MAAM;AACN,oBAAA,OAAO,GAAG;gBACZ;YACF;YACA,KAAK,QAAQ,EAAE;AACb,gBAAA,IAAI;AACF,oBAAA,OAAO,YAAY,CAAC,GAAG,CAAC;gBAC1B;AAAE,gBAAA,MAAM;AACN,oBAAA,OAAO,GAAG;gBACZ;YACF;AACA,YAAA;AACE,gBAAA,OAAO,GAAG;;IAEhB,CAAC,EAAE,KAAK,CAAC;AACX,CAAC;AAEM,MAAM,YAAY,GAAG,CAAC,GAAW,KAAY;AAClD,IAAA,IAAI;QACF,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;QAC/C,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,KAC9C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAC1B,CAAC,IAAI,CAAC,EAAE,CAAC;AACV,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;AAC/C,QAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;IACtD;AACF,CAAC;AAEM,MAAM,YAAY,GAAG,CAAC,MAAc,KAAY;AACrD,IAAA,IAAI;AACF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACzE,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;IACxC;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;AAC/C,QAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;IACnD;AACF,CAAC;;ACxGK,SAAU,aAAa,CAC3B,KAAsB,EACtB,QAAuB,EAAA;IAEvB,IAAI,QAAQ,EAAE;QACZ,OAAO,0BAA0B,CAAI,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK;IACtE;IAEA,OAAO,KAAK,CAAC,KAAK;AACpB;;ACZO,MAAM,oBAAoB,GAAG,UAAU;AACvC,MAAM,oBAAoB,GAAG,UAAU;AAEvC,MAAM,kBAAkB,GAAG,QAAQ;AACnC,MAAM,kBAAkB,GAAG,SAAS;;MCqB9B,YAAY,CAAA;AACvB,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,+EAAW;AACrC,IAAA,MAAM,GAAG,KAAK,CAAS,oBAAoB,6EAAC;AAC5C,IAAA,UAAU,GAAG,QAAQ,CAAiB,MAAK;AACzC,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,oBAAoB,GAAG,oBAAoB;AACvE,IAAA,CAAC,iFAAC;AACF,IAAA,QAAQ,GAAG,QAAQ,CAAS,MAAK;AAC/B,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,kBAAkB,GAAG,kBAAkB;AACnE,IAAA,CAAC,+EAAC;wGARS,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,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,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBzB,4FACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDkBY,IAAI,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAMH,YAAY,EAAA,UAAA,EAAA,CAAA;kBARxB,SAAS;+BACE,mBAAmB,EAAA,OAAA,EACpB,CAAC,IAAI,CAAC,EAAA,eAAA,EAGE,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,sBAAsB,CAAC,EAAA,QAAA,EAAA,4FAAA,EAAA;;;MEZtB,SAAS,CAAA;AACpB,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAU;AACnC,IAAA,MAAM,GAAG,KAAK,CAAS,iBAAiB,6EAAC;AAElC,IAAA,eAAe,CAAC,KAAY,EAAA;QACjC,KAAK,CAAC,eAAe,EAAE;IACzB;wGANW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,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,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,ECXtB,+KAOA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDFY,IAAI,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAMH,SAAS,EAAA,UAAA,EAAA,CAAA;kBARrB,SAAS;+BACE,gBAAgB,EAAA,OAAA,EACjB,CAAC,IAAI,CAAC,EAAA,eAAA,EAGE,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,sBAAsB,CAAC,EAAA,QAAA,EAAA,+KAAA,EAAA;;;MECtB,WAAW,CAAA;AACtB,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAU;AAChC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,gFAAC;AACjC,IAAA,MAAM,GAAG,KAAK,CAAS,cAAc,6EAAC;IACtC,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,kFAAC;wGAJvD,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,WAAW,8cCVxB,2LAOA,EAAA,MAAA,EAAA,CAAA,oHAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FDGa,WAAW,EAAA,UAAA,EAAA,CAAA;kBARvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,WACnB,EAAE,EAAA,eAAA,EAGM,uBAAuB,CAAC,MAAM,WACtC,EAAE,EAAA,QAAA,EAAA,2LAAA,EAAA,MAAA,EAAA,CAAA,oHAAA,CAAA,EAAA;;;MEGA,YAAY,CAAA;AACvB,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,0EAAY;IACjC,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAe;AAClC,IAAA,MAAM,GAAG,KAAK,CAAS,gBAAgB,6EAAC;wGAH7B,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAZ,YAAY,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,ECXzB,kSASA,EAAA,MAAA,EAAA,CAAA,4EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDHY,GAAG,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAKF,YAAY,EAAA,UAAA,EAAA,CAAA;kBAPxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,WACrB,CAAC,GAAG,CAAC,EAAA,eAAA,EAGG,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,kSAAA,EAAA,MAAA,EAAA,CAAA,4EAAA,CAAA,EAAA;;;MEyBpC,aAAa,CAAA;AACxB,IAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,qFAAK;IACrC,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAK;IACZ,WAAW,GAAG,MAAM,EAAoC;AAEjE,IAAA,KAAK,GAAG,QAAQ,CAAC,MACf,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,4EACvD;AAED,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,UAAU,iFAAC;AAC9D,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,gFAAC;AACxD,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,cAAc,qFAAC;AAClE,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,gBAAgB,uFAAC;AACtE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,kFAAC;IAC5D,QAAQ,GAAG,QAAQ,CAAC,MAClB,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC5D;AACD,IAAA,SAAS,GAAG,QAAQ,CAAC,OAAO;QAC1B,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC1B,GAAG,IAAI,CAAC,QAAQ,EAAE;AACnB,KAAA,CAAC,gFAAC;AAEH,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,iFAAC;AAC3D,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,iFAAC;AACnE,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA,eAAA,EAAkB,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAA,CAAE,6EAAC;AAE5E,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,gFAAC;AAC/D,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,kFAAC;AAChE,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,2EAAC;AAC5D,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,gFAAC;AACzB,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,kFAAC;AAE3B,IAAA,gBAAgB,CAAC,CAAQ,EAAA;QACvB,CAAC,CAAC,eAAe,EAAE;QACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACvC;AAEQ,IAAA,gBAAgB,CAAC,KAAc,EAAA;QACrC,MAAM,eAAe,GAAG,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE;AACxD,QAAA,IAAI,eAAe,KAAK,MAAM,EAAE;AAC9B,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,eAAe,KAAK,OAAO,EAAE;AAC/B,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,SAAS;IAClB;AAEQ,IAAA,eAAe,CAAC,KAAc,EAAA;QACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;AAC9C,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,kBAAkB,CAAC,KAAc,EAAA;AACvC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACnE;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,cAAc,IAAI,GAAG;AACvE,YAAA,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5E;AACA,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,aAAa,CAAC,KAAyB,EAAA;QAC7C,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI;AACF,YAAA,IAAI,GAAG,CAAC,KAAK,CAAC;AACd,YAAA,OAAO,IAAI;QACb;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;AAEO,IAAA,SAAS,CAAC,KAAY,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAK;AAC1D,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YAC1B,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7B,CAAC,EAAE,IAAI,CAAC;AACV,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,aAAa,CAAC,KAAiB,EAAA;QACvC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,KAAK;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC1B,SAAA,CAAC;IACJ;wGAjGW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClC1B,6nFAuEA,EAAA,MAAA,EAAA,CAAA,4PAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED5CY,IAAI,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,8UAAE,YAAY,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA;;4FAO/D,aAAa,EAAA,UAAA,EAAA,CAAA;kBATzB,SAAS;+BACE,oBAAoB,EAAA,OAAA,EACrB,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAA,eAAA,EAG1D,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,SAAS,EAAA,OAAA,EACjC,CAAC,sBAAsB,CAAC,EAAA,QAAA,EAAA,6nFAAA,EAAA,MAAA,EAAA,CAAA,4PAAA,CAAA,EAAA;;;AErB5B,MAAM,kBAAkB,GAAG,CAChC,MAA8B,KACK;AACnC,IAAA,OAAO,kBAAkB,CAAC,MAAM,CAAC;AACnC,CAAC;AAED,MAAM,kBAAkB,GAAG,CACzB,MAA8B,KACY;IAC1C,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,GAAG,EAAE,CAAC,KAA4C;AACjD,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE;AAClB,YAAA,OAAO,GAAG;QACZ;AAEA,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACb,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;QACf;;QAGA,MAAM,EAAE,KAAK,EAAE,GAAG,iBAAiB,EAAE,GAAG,CAAC;QACzC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAChC,QAAA,OAAO,GAAG;IACZ,CAAC,EACD,EAA4C,CAC7C;AACH,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,MAA8B,KAAqC;AAC7F,IAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU;AACnC,IAAA,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC;IAC9C,MAAM,MAAM,GAAoC,EAAE;AAElD,IAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACnB,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE;AAClB,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACd;QACF;AAEA,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI;AACxB,QAAA,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACtB;QACF;AAEA,QAAA,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;AAElB,QAAA,MAAM,OAAO,GAAkC;AAC7C,YAAA,GAAG,CAAC;AACJ,YAAA,KAAK,EAAE;gBACL,GAAG,CAAC,CAAC,KAAK;AACV,gBAAA,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC;AACzB,aAAA;SACF;AAED,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACtB,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAM;AACf,CAAC;;MC7BY,gBAAgB,CAAA;AAC3B,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAA0B;AAClD,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,+EAAO;AACjC,IAAA,WAAW,GAAG,KAAK,CAAS,IAAI,kFAAC;IAEjC,eAAe,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AACjC,IAAA,eAAe,GAAG,KAAK,CAAS,CAAC,sFAAC;AAClC,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,8EAAC;AAC/B,IAAA,QAAQ,GAAG,KAAK,CAAsB,QAAQ,+EAAC;AAC/C,IAAA,kBAAkB,GAAG,KAAK,CAAS,WAAW,yFAAC;IAC/C,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;IAEf,WAAW,GAAG,MAAM,EAAoC;IACxD,eAAe,GAAG,MAAM,EAAK;IAC7B,iBAAiB,GAAG,MAAM,EAAQ;IAClC,sBAAsB,GAAG,MAAM,EAAU;AAElD,IAAA,aAAa,GAAG,CAAC,MAA4B,EAAE,KAAa,KAC1D,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,IAAI,KAAK;IAC1C,UAAU,GAAG,CAAC,MAAc,EAAE,IAAO,KACnC,0BAA0B,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;AAClE,QAAA,MAAM;AACR,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,kFAAC;wGAtBrD,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,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,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,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzC7B,stKA8JA,EAAA,MAAA,EAAA,CAAA,2XAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDpII,kBAAkB,gOAClB,KAAK,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,SAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,SAAS,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,eAAe,0OACf,cAAc,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,QAAQ,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,aAAa,kIACb,MAAM,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,0BAAA,EAAA,SAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,eAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,MAAM,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,YAAY,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA;;4FAMH,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAlB5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB;wBACP,kBAAkB;wBAClB,KAAK;wBACL,SAAS;wBACT,eAAe;wBACf,cAAc;wBACd,QAAQ;wBACR,aAAa;wBACb,MAAM;wBACN,MAAM;wBACN,YAAY;qBACb,EAAA,aAAA,EAGc,iBAAiB,CAAC,SAAS,EAAA,QAAA,EAAA,stKAAA,EAAA,MAAA,EAAA,CAAA,2XAAA,CAAA,EAAA;;;SEvC5B,iBAAiB,CAC/B,MAAS,EACT,IAAY,EACZ,KAAc,EAAA;AAEd,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAChD,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,QAAA,OAAO,MAAM;IACf;IAEA,IAAI,OAAO,GAA4B,MAAM;AAE7C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK;YACpB;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;AAE7B,QAAA,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAC/E,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;QACnB;AAEA,QAAA,OAAO,GAAG,OAAO,CAAC,GAAG,CAA4B;IACnD;AAEA,IAAA,OAAO,MAAM;AACf;;MCIa,eAAe,CAAA;AACjB,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,4EAAyB;AAChD,IAAA,aAAa,GAAG,KAAK,CAAI,EAAO,oFAAC;AACjC,IAAA,WAAW,GAAG,KAAK,CAAkB,EAAE,kFAAC;IAExC,WAAW,GAAG,MAAM,EAAwB;IAC5C,UAAU,GAAG,MAAM,EAAK;AAExB,IAAA,IAAI;AAEI,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AAEzC,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAE7B,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACrC,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC7C,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,aAAa,EAAE;AAEpB,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,gBAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AACpB,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;wBACpB,aAAa,EAAE,KAAK,CAAC,IAAI;AACzB,wBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE;AACnD,qBAAA,CAAC;gBACJ;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,mBAAmB,CAAC,MAAa,EAAE,KAA0B,EAAA;AAC3D,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAGD;AAErB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9C,QAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAC9B,OAAO,CAAC,aAAa,EAAE;QACvB,OAAO,CAAC,WAAW,EAAE;AAErB,QAAA,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACpB,aAAa,EAAE,KAAK,CAAC,IAAI;gBACzB,KAAK,EAAE,OAAO,CAAC,KAAK;AACrB,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,QAAQ,CAAC,IAAY,EAAA;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC;AAEtC,QAAA,OAAO,KAAK,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI;IACnE;AAEA,IAAA,aAAa,CAAC,IAAY,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,MAAM;IAClD;AAEA,IAAA,WAAW,CAAC,KAA0B,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE;AAE/C,QAAA,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACpB,aAAa,EAAE,KAAK,CAAC,IAAI;AACzB,gBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK;AAC7C,aAAA,CAAC;QACJ;IACF;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC/C;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;IACnB;AAEQ,IAAA,eAAe,CAAC,MAA6B,EAAA;AACnD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ;AAC3C,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;AAEjE,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;YAEpD,IAAI,eAAe,EAAE;gBACnB,eAAe,CAAC,eAAe,EAAE;gBACjC,eAAe,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gBAC5D;YACF;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QACvD;QAEA,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YACvD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AACpC,gBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;YACtC;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACxD;AAEQ,IAAA,gBAAgB,CACtB,aAAyD,EAAA;QAEzD,IAAI,CAAC,aAAa,EAAE;YAClB;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACxD;IAEQ,gBAAgB,GAAA;QACtB,MAAM,MAAM,GAAG,EAAO;AAEtB,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACjD,YAAA,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QAC/D;AAEA,QAAA,OAAO,MAAM;IACf;wGApIW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,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,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjC5B,sqEA8DA,EAAA,MAAA,EAAA,CAAA,sJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlCY,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,KAAK,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,KAAK,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,WAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,0BAAA,EAAA,SAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,eAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA;;4FAKhD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,OAAA,EACvB,CAAC,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAA,aAAA,EAG7C,iBAAiB,CAAC,SAAS,EAAA,QAAA,EAAA,sqEAAA,EAAA,MAAA,EAAA,CAAA,sJAAA,CAAA,EAAA;;;MEwB/B,oBAAoB,CAAA;AAC/B,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,+EAAO;AAEjC,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,4EAAmB;AAC1C,IAAA,eAAe,GAAG,KAAK,CAAqB,EAAE,sFAAC;AAC/C,IAAA,aAAa,GAAG,KAAK,CAAqB,EAAE,oFAAC;IAEpC,iBAAiB,GAAG,MAAM,EAAoC;IAC9D,eAAe,GAAG,MAAM,EAAK;IAC7B,iBAAiB,GAAG,MAAM,EAAQ;IAClC,sBAAsB,GAAG,MAAM,EAAU;IAEzC,aAAa,GAAG,MAAM,EAAU;IAChC,iBAAiB,GAAG,MAAM,EAAwB;IAClD,eAAe,GAAG,MAAM,EAG7B;IACK,YAAY,GAAG,MAAM,EAAK;IAC1B,UAAU,GAAG,MAAM,EAGxB;IACK,YAAY,GAAG,MAAM,EAAK;AAEzB,IAAA,WAAW,GAAG,MAAM,CAAc,WAAW,kFAAC;AAC9C,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,qFAAC;AACnE,IAAA,gBAAgB,GAAG,QAAQ,CACnC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,uFAC1C;AACS,IAAA,aAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;AACnC,IAAA,cAAc,GAAG,SAAS,CAAQ,aAAa,qFAAC;AAEhD,IAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK,uFAAC;AAChC,IAAA,cAAc,GAAG,MAAM,CAAC,KAAK,qFAAC;AAC9B,IAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK,uFAAC;AAEhC,IAAA,eAAe,GAAG,MAAM,CAAW,IAAI,sFAAC;AAExC,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,kFAAC;AACvD,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,6EAAC;AAC7C,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,oFAAC;AAC3D,IAAA,gBAAgB,GAAG,QAAQ,CACnC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,wBAAwB,uFAC7C;AACS,IAAA,cAAc,GAAG,QAAQ,CACjC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,sBAAsB,qFAC3C;AACS,IAAA,wBAAwB,GAAG,QAAQ,CAC3C,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,gCAAgC,+FACrD;AACS,IAAA,kBAAkB,GAAG,QAAQ,CACrC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,YAAY,yFACjD;AACS,IAAA,kBAAkB,GAAG,QAAQ,CACrC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,YAAY,yFACjD;IACS,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAC1D,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;AACxC,QAAA,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE;AACnC,YAAA,OAAO,EAAE;QACX;QAEA,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,CAAC;AACpE,IAAA,CAAC,uFAAC;AAEe,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE5C,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,aAAa,CAAC;aAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,kBAAkB,EAAE;AAC5C,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;YACnB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACN;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE;YACrC,IAAI,CAAC,cAAc,EAAE;QACvB;AAAO,aAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,EAAE;AAC7C,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;YAChC,eAAe,CACb,MAAK;gBACH,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;YACzD,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC5B;QACH;IACF;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;YAC7B,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACvD;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;IACpC;AAEA,IAAA,aAAa,CAAC,KAAuC,EAAA;QACnD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM;QAC7D,IAAI,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;YACvC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACxC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAC7B;QACF;QACA,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE;YACzC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACxC,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YAC/B;QACF;AAEA,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;IAClC;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,mBAAmB,CAAC,KAA2B,EAAA;AAC7C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;AAEA,IAAA,iBAAiB,CAAC,KAA2B,EAAA;AAC3C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;QAEvC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;QACjE;IACF;AAEA,IAAA,cAAc,CAAC,KAAQ,EAAA;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,YAAY,CAAC,KAA8B,EAAA;AACzC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;QAEvC,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC3C;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,IAAI,QAAQ;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;IAChD;AAEU,IAAA,SAAS,CAAC,KAAyB,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW;QAChC,OAAO,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC;IAC/D;IAEQ,gBAAgB,GAAA;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM;QACtC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,cAAc;AACnD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;AACxC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,EAAE;QACpD,MAAM,OAAO,GAA2B,EAAE;QAE1C,IAAI,UAAU,EAAE;YACd,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,QAAQ,EAAE,iBAAiB;AAC3B,gBAAA,UAAU,EAAE;AACV,oBAAA,SAAS,EAAE,QAAQ;AACnB,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,cAAc,EAAE;AACd,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,MAAM,EAAE,aAAa;AACrB,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,OAAO,EAAE,MAAM;wBACf,GAAG,cAAc,EAAE,UAAU;AAC9B,qBAAA;AACF,iBAAA;AACD,gBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;AACxD,aAAA,CAAC;QACJ;QAEA,IAAI,YAAY,EAAE;YAChB,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,QAAQ,EAAE,mBAAmB;AAC7B,gBAAA,UAAU,EAAE;AACV,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,SAAS,EAAE,QAAQ;AACnB,oBAAA,cAAc,EAAE;AACd,wBAAA,IAAI,EAAE,SAAS;AACf,wBAAA,MAAM,EAAE,aAAa;AACrB,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,OAAO,EAAE,QAAQ;wBACjB,GAAG,cAAc,EAAE,YAAY;AAChC,qBAAA;AACF,iBAAA;AACD,gBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;AACxD,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B;IAEQ,kBAAkB,CACxB,MAA6B,EAC7B,QAAY,EAAA;AAEZ,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE;QAExB,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,GAAG,EAAE,KAAK,KAAI;AACb,YAAA,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AAClC,gBAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBACb,0BAA0B,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AAC9D,wBAAA,EAAE;YACN;AACA,YAAA,OAAO,GAAG;QACZ,CAAC,EACD,EAA6B,CAC9B;IACH;wGA1OW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,ynCCvDjC,2gLAoKA,EAAA,MAAA,EAAA,CAAA,siDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED5HI,gBAAgB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,eAAe,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,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,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,MAAM,6ZACN,KAAK,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,MAAM,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,IAAI,oLACJ,KAAK,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA;;4FAQI,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAlBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,OAAA,EAC7B;wBACP,gBAAgB;wBAChB,eAAe;wBACf,mBAAmB;wBACnB,MAAM;wBACN,KAAK;wBACL,MAAM;wBACN,IAAI;wBACJ,KAAK;qBACN,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,SAAS,EAAA,OAAA,EACjC,CAAC,sBAAsB,CAAC,EAAA,QAAA,EAAA,2gLAAA,EAAA,MAAA,EAAA,CAAA,siDAAA,CAAA,EAAA;wpCAiCW,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEjFpD,MAAM,UAAU,GAAG;AACxB,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,MAAM,EAAE,QAAQ;;;ACMlB,MAAM,wBAAwB,GAAG,uBAAuB;AAExD,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAGlC;AAEG,SAAU,sBAAsB,CAAC,cAA+B,EAAA;AACpE,IAAA,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;AAC1C,QAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,aAAa,CAAC;QAElD,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,WAAW,CAAC,aAAa,CAAC,CAAA,8BAAA,CAAgC,CACnG;QACH;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,MAAM,CAAC,QAAQ,CAAA,yCAAA,CAA2C,CACnG;QACH;QAEA,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;QAClE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC;QAEpD,IAAI,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,aAAa,EAAE;AACxD,YAAA,MAAM,IAAI,KAAK,CACb,iDAAiD,QAAQ,CAAA,wBAAA,CAA0B,CACpF;QACH;AAEA,QAAA,qBAAqB,CAAC,GAAG,CAAC,QAAQ,EAAE;YAClC,aAAa;YACb,QAAQ;AACR,YAAA,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;AACtC,SAAA,CAAC;IACJ;AACF;AAEM,SAAU,mCAAmC,CACjD,QAAgB,EAAA;AAEhB,IAAA,OAAO,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5C;SAEgB,0BAA0B,GAAA;IACxC,qBAAqB,CAAC,KAAK,EAAE;AAC/B;AAEM,SAAU,gCAAgC,CAC9C,QAAgB,EAChB,SAAiB,EAAA;IAEjB,IAAI,CAAC,SAAS,EAAE;QAAE;IAElB,OAAO,CAAC,IAAI,CACV,CAAA,gBAAA,EAAmB,QAAQ,CAAA,iCAAA,EAAoC,SAAS,CAAA,EAAA,CAAI,CAC7E;AACH;AAEA,SAAS,cAAc,CACrB,MAGG,EAAA;AAEH,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB;AAE1C,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;QACpD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;IAClD;AAEA,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,iBAAiB,CACxB,QAAgB,EAChB,aAA4B,EAAA;AAE5B,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE;IAElC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC9C,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,WAAW,CAAC,aAAa,CAAC,CAAA,gDAAA,EAAmD,QAAQ,CAAA,EAAA,CAAI,CAClI;IACH;AAEA,IAAA,OAAO,UAAU;AACnB;AAEA,SAAS,WAAW,CAAC,aAA4B,EAAA;AAC/C,IAAA,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,oBAAoB;AACtE;;SCrGgB,gBAAgB,CAC9B,GAAe,EACf,WAA6B,EAC7B,SAAkC,EAAA;IAElC,MAAM,mBAAmB,GAAG,mCAAmC,CAC7D,GAAG,CAAC,SAAS,CACd;IAED,IAAI,CAAC,mBAAmB,EAAE;QACxB,OAAO,CAAC,IAAI,CACV,CAAA,mCAAA,EAAsC,GAAG,CAAC,SAAS,CAAA,mBAAA,CAAqB,CACzE;QACD;IACF;IAEA,MAAM,YAAY,GAAG,WAAW,CAAC,eAAe,CAC9C,mBAAmB,CAAC,aAAa,CAClC;AAED,IAAA,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE;QAC1E,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;QAE9D,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,gCAAgC,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC;YAC1D;QACF;AAEA,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;IAC5C;AAEA,IAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;IAE9C,SAAS,CAAC,MAAK;QACb,WAAW,CAAC,KAAK,EAAE;AACrB,IAAA,CAAC,CAAC;AACJ;;SC5BgB,YAAY,CAC1B,GAAe,EACf,SAA2B,EAC3B,SAAkC,EAAA;AAElC,IAAA,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa;IAE5C,IAAI,YAAY,GAA+B,IAAI;IACnD,IAAI,WAAW,GAAG,KAAK;IACvB,MAAM,UAAU,GACd,MACD,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO;IAElB,IAAI,UAAU,EAAE;QACd,UAAU,CAAC,CAAC,gCAAgC,CAAC,EAAE,CAAC,kBAAkB,KAAI;AACpE,YAAA,IAAI,WAAW;gBAAE;AAEjB,YAAA,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC;gBACvC,IAAI,EAAE,GAAG,CAAC,SAAS;AACnB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,QAAQ,EAAE,GAAG,CAAC,eAAe,IAAI,EAAE;AACpC,aAAA,CAAC;AAEF,YAAA,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;YACvB,YAAY,GAAG,SAAS;AAC1B,QAAA,CAAC,CAAC;IACJ;SAAO;AACL,QAAA,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC;IACzE;IAEA,SAAS,CAAC,MAAK;QACb,WAAW,GAAG,IAAI;QAClB,YAAY,EAAE,OAAO,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACrB,IAAA,CAAC,CAAC;AACJ;;AChDM,SAAU,WAAW,CACzB,GAAe,EACf,SAA2B,EAC3B,SAAkC,EAClC,QAAmB,EAAA;AAEnB,IAAA,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa;IAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;AAErD,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE;QACpE,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC;IAC3C;AAEA,IAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;IAEnC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACrB,IAAA,CAAC,CAAC;AACJ;;MCQa,aAAa,CAAA;AACxB,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,0EAAc;AACnC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;IACvB,UAAU,GAAG,MAAM,EAAQ;AACjB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACjC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;AACnD,IAAA,CAAC,iFAAC;AACiB,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG;AACnC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC;AACpD,IAAA,CAAC,8EAAC;IAEM,IAAI,GAAG,SAAS,CAAC,aAAa,4EAAI,IAAI,EAAE,gBAAgB,EAAA,CAAG;AAC3D,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAEpC,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS;gBAAE;YAE7B,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,GAAG,EAAE;AAEzC,YAAA,QAAQ,GAAG,CAAC,IAAI;gBACd,KAAK,UAAU,CAAC,MAAM;AACpB,oBAAA,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;oBAClC;gBACF,KAAK,UAAU,CAAC,OAAO;AACrB,oBAAA,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;oBACtC;gBACF,KAAK,UAAU,CAAC,EAAE;AAClB,gBAAA;oBACE,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;oBAChD;;AAEN,QAAA,CAAC,CAAC;IACJ;IAEQ,eAAe,CAAC,KAAyB,EAAE,IAAY,EAAA;AAC7D,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE;QACvB;AAEA,QAAA,OAAO,GAAG,KAAK,GAAG,CAAC,CAAA,QAAA,EAAW,IAAI,EAAE;IACtC;wGA9CW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,oiBAawB,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1ClE,s/BAqCC,EAAA,MAAA,EAAA,CAAA,65CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjBW,MAAM,8UAAE,IAAI,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FASX,aAAa,EAAA,UAAA,EAAA,CAAA;kBAXzB,SAAS;+BACE,oBAAoB,EAAA,OAAA,EACrB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAA,aAAA,EAGR,iBAAiB,CAAC,QAAQ,EAAA,IAAA,EACnC;AACJ,wBAAA,qBAAqB,EAAE,cAAc;AACrC,wBAAA,kBAAkB,EAAE,WAAW;AAChC,qBAAA,EAAA,QAAA,EAAA,s/BAAA,EAAA,MAAA,EAAA,CAAA,65CAAA,CAAA,EAAA;AAewB,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,aAAa,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEnCpE;;;;AAIG;MAQU,oBAAoB,CAAA;AAC/B,IAAA,IAAI,GAAG,KAAK,CAAU,KAAK,2EAAC;IAEnB,OAAO,GAAG,MAAM,EAAQ;IACxB,SAAS,GAAG,MAAM,EAAQ;wGAJxB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,gRCnBjC,6lBAYA,EAAA,MAAA,EAAA,CAAA,oSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDEY,MAAM,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,6ZAAQ,KAAK,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA;;4FAK1B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,OAAA,EAC7B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EAAA,aAAA,EAGvB,iBAAiB,CAAC,SAAS,EAAA,QAAA,EAAA,6lBAAA,EAAA,MAAA,EAAA,CAAA,oSAAA,CAAA,EAAA;;;MEQ/B,eAAe,CAAA;AACT,IAAA,IAAI,GAAG,MAAM,EAAC,UAAuB,EAAC;AAEvD,IAAA,cAAc,GAAG,KAAK,CAAe,EAAE,qFAAC;AACxC,IAAA,aAAa,GAAG,KAAK,CAAc,IAAI,GAAG,EAAE,oFAAC;AAC7C,IAAA,IAAI,GAAG,KAAK,CAAU,KAAK,2EAAC;IAEnB,OAAO,GAAG,MAAM,EAA8C;IAC9D,SAAS,GAAG,MAAM,EAAQ;AAEnC,IAAA,WAAW,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,kFAAC;AAE5C,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;gBACf,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,IAAI,CAAC,cAAc;AAChB,qBAAA,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;qBAC9C,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CACtB;AACD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;YAC/B;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;QACf,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AAC9B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AACzB,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAChB,gBAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjB;iBAAO;AACL,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACd;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;AAMG;IACH,eAAe,CAAC,KAAoB,EAAE,GAAW,EAAA;AAC/C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;YACvB;QACF;AACA,QAAA,MAAM,IAAI,GACR,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa;AAC/D,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CACnB;AAClB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CACxB,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CACnB;QAClB,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,aAA4B,CAAC;AACzE,QAAA,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;YACvB;QACF;AACA,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC;YACvC,IAAI,IAAI,EAAE;gBACR,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;gBACvB,IAAI,CAAC,KAAK,EAAE;YACd;;;YAGA;QACF;QACA,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC;QACvC,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,KAAK,EAAE;YACZ;QACF;;AAEA,QAAA,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;IACrB;IAEA,WAAW,GAAA;QACT,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACtE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CACxC,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAC1E;AACD,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,MAAM,CAC9C,CAAC,EAAE,KAAK,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAC5D;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACvC;wGA3FW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,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,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,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzB5B,wxCA4BA,EAAA,MAAA,EAAA,CAAA,mcAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDRY,MAAM,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,OAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,IAAI,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,0BAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,yBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,qQAAE,KAAK,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA;;4FAKlD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,WACxB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAA,aAAA,EAG/C,iBAAiB,CAAC,SAAS,EAAA,QAAA,EAAA,wxCAAA,EAAA,MAAA,EAAA,CAAA,mcAAA,CAAA,EAAA;;;AEhB5C;;;;;;;;;AASG;MAQU,oBAAoB,CAAA;AAC/B,IAAA,IAAI,GAAG,KAAK,CAAU,KAAK,2EAAC;IAEnB,IAAI,GAAG,MAAM,EAAQ;IACrB,OAAO,GAAG,MAAM,EAAQ;IACxB,SAAS,GAAG,MAAM,EAAQ;wGALxB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,8RCxBjC,kuBAcA,EAAA,MAAA,EAAA,CAAA,oTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDKY,MAAM,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,6ZAAQ,KAAK,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA;;4FAK1B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,OAAA,EAC7B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EAAA,aAAA,EAGvB,iBAAiB,CAAC,SAAS,EAAA,QAAA,EAAA,kuBAAA,EAAA,MAAA,EAAA,CAAA,oTAAA,CAAA,EAAA;;;AEtBrC,MAAM,kBAAkB,GAAG,GAAG;AAC9B,MAAM,WAAW,GAAG,EAAE;;MCchB,gBAAgB,CAAA;AAC3B,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAiB;AACzC,IAAA,KAAK,GAAG,KAAK,CAAe,EAAE,4EAAC;AAC/B,IAAA,OAAO,GAAG,KAAK,CAAS,EAAE,8EAAC;AAC3B,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;IACvB,aAAa,GAAG,MAAM,EAAQ;IAC9B,UAAU,GAAG,MAAM,EAAU;wGAN3B,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,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,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,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,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,iCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECf7B,41BA4BA,EAAA,MAAA,EAAA,CAAA,62CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDrBY,aAAa,sHAAE,MAAM,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAQpB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;+BACE,uBAAuB,EAAA,OAAA,EACxB,CAAC,aAAa,EAAE,MAAM,CAAC,EAAA,aAAA,EAGjB,iBAAiB,CAAC,QAAQ,EAAA,IAAA,EACnC;AACJ,wBAAA,qBAAqB,EAAE,+BAA+B;AACvD,qBAAA,EAAA,QAAA,EAAA,41BAAA,EAAA,MAAA,EAAA,CAAA,62CAAA,CAAA,EAAA;;;AEiCH,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,6BAA6B,CAAC;MA2B7C,SAAS,CAAA;IACpB,OAAO,yBAAyB,CAAC,cAA+B,EAAA;QAC9D,sBAAsB,CAAC,cAAc,CAAC;IACxC;AAEA,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,4EAAmB;AAC1C,IAAA,QAAQ,GAAG,KAAK,CAAkB,EAAE,+EAAC;AACrC,IAAA,KAAK,GAAG,KAAK,CAAe,EAAE,4EAAC;AAC/B,IAAA,cAAc,GAAG,KAAK,CAAe,EAAE,qFAAC;IAE/B,KAAK,GAAG,MAAM,EAAsD;IACpE,iBAAiB,GAAG,MAAM,EAG/B;IACK,oBAAoB,GAAG,MAAM,EAAW;AAEjD,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AACxB,IAAA,cAAc,GAAG,MAAM,CAAC,KAAK,qFAAC;AAC9B,IAAA,eAAe,GAAG,MAAM,CAAC,KAAK,sFAAC;;AAGvB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,gFAAC;;IAGzB,oBAAoB,GAAG,EAAE;IACzB,iBAAiB,GAAG,EAAE;AAE9B;;;;AAIG;AACH,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,OAAO,KAAK;QAClC,IAAI,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,IAAI;AACjC,QAAA,QACE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,oBAAoB;AAC7D,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,iBAAiB;AAE3D,IAAA,CAAC,wFAAC;IAEM,gBAAgB,GAAoB,EAAE;IACtC,aAAa,GAAiB,EAAE;AAChC,IAAA,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAqB,MAAM,CAAC;AAC/D,IAAA,UAAU,GAAG,SAAS,CAAS,cAAc,iFAAC;AAC9C,IAAA,cAAc;AACL,IAAA,MAAM,GAAG,MAAM,EAAC,UAAuB,EAAC;AACxC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAEvC,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAe;QAC5C,MAAM,KAAK,GACT,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;QAC1E,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACtD,IAAA,CAAC,gFAAC;AAEQ,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAsB;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW;AACtC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AAEtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QACvE,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACtD,IAAA,CAAC,sFAAC;AAEQ,IAAA,WAAW,GAAG,QAAQ,CAC9B,OAAyB;AACvB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,aAAa,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC/B,QAAA,WAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC7B,QAAA,YAAY,EAAE,CAAC;AACf,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,UAAU,EAAE;AACV,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,WAAW,EAAE;gBACX,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;gBAClC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;gBACpC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE;AACjC,aAAA;AACF,SAAA;AACF,KAAA,CAAC,kFACH;AAED,IAAA,cAAc,GAAG,MAAM,CAAC,KAAK,qFAAC;AAC9B,IAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,wFAAC;AACjC,IAAA,oBAAoB,GAAG,MAAM,CAAC,KAAK,2FAAC;;IAE5B,iBAAiB,GAAwB,IAAI;;AAEpC,IAAA,mBAAmB,GAAG,CAAC,KAAwB,KAAU;AACxE,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC5B,KAAK,CAAC,cAAc,EAAE;;;AAGtB,YAAA,KAAK,CAAC,WAAW,GAAG,EAAE;QACxB;AACF,IAAA,CAAC;AACD,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,IAAI,EAAE,oFAAC;IACjE,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEtE,IAAA,cAAc,GAAG,QAAQ,CAAC,OAAO;AAC/B,QAAA,IAAI,EAAE,iBAAiB;AACvB,QAAA,MAAM,EAAE,aAAsB;AAC9B,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,eAAe,EAAE,cAAc;AACjD,KAAA,CAAC,qFAAC;AAEH,IAAA,eAAe,GAAG,QAAQ,CAAC,OAAO;AAChC,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,MAAM,EAAE,SAAkB;AAC1B,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,eAAe,EAAE,eAAe;AAClD,KAAA,CAAC,sFAAC;AAEH,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;QACxB,OAAO,CAAC,SAAiB,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC;AAC5E,IAAA,CAAC,mFAAC;AAEF,IAAA,aAAa,GAAG,IAAI,GAAG,EAGpB;IACH,UAAU,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;IAEjE,iBAAiB,GAAoB,EAAE;AAE/C,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxE;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,KAAI;AACnD,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC;YAChD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,GAAG,kBAAkB,CAAC;AACrD,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QACtD,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC;IACnE;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;QACjC,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC;IACtE;IAEA,eAAe,CAAC,QAAgB,EAAE,KAAY,EAAA;AAC5C,QAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;YAC5B,IAAI,CAAC,aAAa,EAAE;YACpB;QACF;QACA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;QACtE,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAmB,EAAE,MAAM,EAAE,CAAC;QACrE;IACF;IAEA,aAAa,GAAA;AACX,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc;aACvC,cAAc,EAAE,OAAO;aACvB,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC;QAE9B,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC;QACxC;QAEA,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC3D,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB,eAAe,CACb,MAAK;YACH,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE;QACpC,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC5B;IACH;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC9C,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACd,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAC5B,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,OAAO;AACL,oBAAA,GAAG,CAAC;oBACJ,CAAC,EAAE,GAAG,EAAE,CAAC;oBACT,CAAC,EAAE,GAAG,EAAE,CAAC;AACT,oBAAA,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAChB,oBAAA,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;iBACjB;AACH,YAAA,CAAC,CAAC;AACH,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;YAChC;QACF;QACA,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA;;;AAGG;IACH,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;IACnC;AAEA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACH,IAAA,iBAAiB,CAAC,OAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC7B,YAAA,OAAO,EAAE;AACT,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;AAChC,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,QAAA,OAAO,KAAK;IACd;;IAGA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,oBAAoB,EAAE;IAC7B;;IAGA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;QACpC,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,oBAAoB,EAAE;IAC7B;;IAGA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;IAC/B;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC7B,OAAO,IAAI;IACb;IAEQ,WAAW,GAAA;QACjB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CACZ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAC3B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,YAAA,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QACvC,CAAC,CAAC,CACH;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;AAEA,IAAA,aAAa,CAAC,EAAU,EAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;IACrE;AAEA,IAAA,UAAU,CAAC,EAAU,EAAA;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;IAC/B;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC;AAEA,IAAA,aAAa,CAAC,KAAiD,EAAA;QAC7D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YACzB,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,cAAc,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,cAAc,EAAE;IACvB;AAEA,IAAA,YAAY,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,KAAK;AACpC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B;IACF;AAEQ,IAAA,iBAAiB,CAAC,KAAsB,EAAA;AAC9C,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,IAAI,IAAI,CAAC,EAAE,EAAE;gBACX,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;oBAC9B,CAAC,EAAE,IAAI,CAAC,CAAC;oBACT,CAAC,EAAE,IAAI,CAAC,CAAC;oBACT,CAAC,EAAE,IAAI,CAAC,CAAC;oBACT,CAAC,EAAE,IAAI,CAAC,CAAC;AACV,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;wGAtVW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,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,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,wBAAA,EAAA,qFAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzEtB,ksNA8LA,EAAA,MAAA,EAAA,CAAA,guMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED3II,kBAAkB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,oBAAoB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,eAAe,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,eAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,oBAAoB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,gBAAgB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,aAAa,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,MAAM,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,IAAI,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,IAAI,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,QAAQ,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,aAAa,EAAA,QAAA,EAAA,0CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,KAAK,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAUI,SAAS,EAAA,UAAA,EAAA,CAAA;kBAzBrB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAChB;wBACP,kBAAkB;wBAClB,sBAAsB;wBACtB,oBAAoB;wBACpB,eAAe;wBACf,oBAAoB;wBACpB,gBAAgB;wBAChB,aAAa;wBACb,MAAM;wBACN,IAAI;wBACJ,IAAI;wBACJ,QAAQ;wBACR,aAAa;wBACb,KAAK;qBACN,EAAA,aAAA,EAGc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,0BAA0B,EACxB,iFAAiF;AACpF,qBAAA,EAAA,QAAA,EAAA,ksNAAA,EAAA,MAAA,EAAA,CAAA,guMAAA,CAAA,EAAA;AA8C+D,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,MAAM,oEAC/B,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEzG1C,kBAAkB,CAAA;AAC7B,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,iFAAU;AACtC,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,iFAAU;AACtC,IAAA,kBAAkB,GAAG,KAAK,CAAC,QAAQ,wFAAU;AAC7C,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,iFAAU;AACtC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,0EAAU;IAEtB,SAAS,GAAG,MAAM,EAAU;wGAP1B,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,kzBCb/B,mmBAuBA,EAAA,MAAA,EAAA,CAAA,qcAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDfY,IAAI,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,2MAAE,IAAI,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA;;4FAKrB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;+BACE,0BAA0B,EAAA,OAAA,EAC3B,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAA,aAAA,EAGlB,iBAAiB,CAAC,SAAS,EAAA,QAAA,EAAA,mmBAAA,EAAA,MAAA,EAAA,CAAA,qcAAA,CAAA,EAAA;;;MEC/B,SAAS,CAAA;AACX,IAAA,KAAK,GAAG;QACf,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE;QAClE,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE;QAC7E,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,EAAE;KACjF;wGALU,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,SAAS,yECZtB,+eAYA,EAAA,MAAA,EAAA,CAAA,m0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDLY,MAAM,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,IAAI,oLAAE,KAAK,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA;;4FAKlB,SAAS,EAAA,UAAA,EAAA,CAAA;kBAPrB,SAAS;+BACE,eAAe,EAAA,OAAA,EAChB,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EAAA,aAAA,EAGf,iBAAiB,CAAC,SAAS,EAAA,QAAA,EAAA,+eAAA,EAAA,MAAA,EAAA,CAAA,m0BAAA,CAAA,EAAA;;;MEc/B,iBAAiB,CAAA;AACnB,IAAA,QAAQ,GAAwB;QACvC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE;QACjE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE;QACrE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE;QAClE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE;QAC/D,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE;QAClE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;KACrD;AAEQ,IAAA,YAAY,GAAoF;AACvG,QAAA,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,qBAAqB,EAAE;AACjG,QAAA,QAAQ,EAAK,EAAE,KAAK,EAAE,UAAU,EAAK,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,kBAAkB,EAAE;AAC9F,QAAA,MAAM,EAAO,EAAE,KAAK,EAAE,QAAQ,EAAO,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,EAAE;AAC5F,QAAA,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,qBAAqB,EAAE;KAClG;wGAfU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxB9B,swBAeA,EAAA,MAAA,EAAA,CAAA,ujDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDIY,IAAI,oLAAE,KAAK,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA;;4FAKV,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;+BACE,yBAAyB,EAAA,OAAA,EAC1B,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA,aAAA,EAGP,iBAAiB,CAAC,SAAS,EAAA,QAAA,EAAA,swBAAA,EAAA,MAAA,EAAA,CAAA,ujDAAA,CAAA,EAAA;;;MEV/B,QAAQ,CAAA;AACV,IAAA,SAAS,GAAG;AACnB,QAAA;AACE,YAAA,KAAK,EAAE,0BAA0B;AACjC,YAAA,WAAW,EAAE,uDAAuD;AACpE,YAAA,IAAI,EAAE,OAAO;AACd,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,2BAA2B;AAClC,YAAA,WAAW,EAAE,kDAAkD;AAC/D,YAAA,IAAI,EAAE,oBAAoB;AAC3B,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,8BAA8B;AACrC,YAAA,WAAW,EAAE,0DAA0D;AACvE,YAAA,IAAI,EAAE,kBAAkB;AACzB,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,wBAAwB;AAC/B,YAAA,WAAW,EAAE,4DAA4D;AACzE,YAAA,IAAI,EAAE,kBAAkB;AACzB,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,qCAAqC;AAC5C,YAAA,WAAW,EAAE,mDAAmD;AAChE,YAAA,IAAI,EAAE,UAAU;AACjB,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,kCAAkC;AACzC,YAAA,WAAW,EAAE,yDAAyD;AACtE,YAAA,IAAI,EAAE,aAAa;AACpB,SAAA;KACF;wGAhCU,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,QAAQ,yECZrB,0WAUA,EAAA,MAAA,EAAA,CAAA,6bAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDHY,IAAI,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,0BAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,2VAAE,KAAK,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,CAAA;;4FAK5B,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAPpB,SAAS;+BACE,eAAe,EAAA,OAAA,EAChB,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,EAAA,aAAA,EAGzB,iBAAiB,CAAC,SAAS,EAAA,QAAA,EAAA,0WAAA,EAAA,MAAA,EAAA,CAAA,6bAAA,CAAA,EAAA;;;AEV5C;;AAEG;;;;"}
1
+ {"version":3,"file":"openmfp-ngx.mjs","sources":["../../../projects/ngx/declarative-ui/table/utils/cssRules.engine.ts","../../../projects/ngx/declarative-ui/table/utils/resource-field-by-path.ts","../../../projects/ngx/declarative-ui/table/utils/field-definition.utils.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-cell.constants.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/boolean-value/boolean-value.component.html","../../../projects/ngx/declarative-ui/resource-field/link-value/link-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/link-value/link-value.component.html","../../../projects/ngx/declarative-ui/resource-field/secret-value/secret-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/secret-value/secret-value.component.html","../../../projects/ngx/declarative-ui/resource-field/tag-list-value/tag-list-value.component.ts","../../../projects/ngx/declarative-ui/resource-field/tag-list-value/tag-list-value.component.html","../../../projects/ngx/declarative-ui/resource-field/resource-field.component.ts","../../../projects/ngx/declarative-ui/resource-field/resource-field.component.html","../../../projects/ngx/declarative-ui/table/utils/proccess-fields.ts","../../../projects/ngx/declarative-ui/table/declarative-table/declarative-table.component.ts","../../../projects/ngx/declarative-ui/table/declarative-table/declarative-table.component.html","../../../projects/ngx/declarative-ui/form/utils/set-property-by-path.ts","../../../projects/ngx/declarative-ui/form/declarative-form/declarative-form.component.ts","../../../projects/ngx/declarative-ui/form/declarative-form/declarative-form.component.html","../../../projects/ngx/declarative-ui/table-card/declarative-table-card.component.ts","../../../projects/ngx/declarative-ui/table-card/declarative-table-card.component.html","../../../projects/ngx/declarative-ui/dashboard/models/dashboard.model.ts","../../../projects/ngx/declarative-ui/dashboard/models/breakpoints.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/dashboard-card-registry.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-angular-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-sap-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/utils/mount-wc-card.ts","../../../projects/ngx/declarative-ui/dashboard/card/dashboard-card.component.ts","../../../projects/ngx/declarative-ui/dashboard/card/dashboard-card.component.html","../../../projects/ngx/declarative-ui/dashboard/discard-changes-dialog/discard-changes-dialog.component.ts","../../../projects/ngx/declarative-ui/dashboard/discard-changes-dialog/discard-changes-dialog.component.html","../../../projects/ngx/declarative-ui/dashboard/edit-cards-dialog/edit-cards-dialog.component.ts","../../../projects/ngx/declarative-ui/dashboard/edit-cards-dialog/edit-cards-dialog.component.html","../../../projects/ngx/declarative-ui/dashboard/models/constants.ts","../../../projects/ngx/declarative-ui/dashboard/section/dashboard-section.component.ts","../../../projects/ngx/declarative-ui/dashboard/section/dashboard-section.component.html","../../../projects/ngx/declarative-ui/dashboard/unsaved-changes-dialog/unsaved-changes-dialog.component.ts","../../../projects/ngx/declarative-ui/dashboard/unsaved-changes-dialog/unsaved-changes-dialog.component.html","../../../projects/ngx/declarative-ui/dashboard/dashboard/dashboard.component.ts","../../../projects/ngx/declarative-ui/dashboard/dashboard/dashboard.component.html","../../../projects/ngx/cards/visited-service-card/visited-service-card.component.ts","../../../projects/ngx/cards/visited-service-card/visited-service-card.component.html","../../../projects/ngx/cards/favorites/favorites.component.ts","../../../projects/ngx/cards/favorites/favorites.component.html","../../../projects/ngx/cards/service-status/service-status-card.component.ts","../../../projects/ngx/cards/service-status/service-status-card.component.html","../../../projects/ngx/cards/whats-new/whats-new.component.ts","../../../projects/ngx/cards/whats-new/whats-new.component.html","../../../projects/ngx/openmfp-ngx.ts"],"sourcesContent":["import { CssRule } from '../../models';\n\nexport const parseStringValue = (value: string) => {\n if (value === 'true') {\n return true;\n }\n\n if (value === 'false') {\n return false;\n }\n\n if (!isNaN(Number(value))) {\n return Number(value);\n }\n\n return value;\n};\n\nexport const cssRuleResolver = (\n rule: CssRule,\n resourceValue: string,\n): boolean => {\n const parsedResouceValue = parseStringValue(resourceValue);\n const parsedConditionValue = parseStringValue(rule.if.value);\n\n switch (rule.if.condition) {\n case 'equals':\n return parsedResouceValue === parsedConditionValue;\n case 'notEquals':\n return parsedResouceValue !== parsedConditionValue;\n case 'greaterThan':\n return parsedResouceValue > parsedConditionValue;\n case 'greaterThanOrEqual':\n return parsedResouceValue >= parsedConditionValue;\n case 'lessThan':\n return parsedResouceValue < parsedConditionValue;\n case 'lessThanOrEqual':\n return parsedResouceValue <= parsedConditionValue;\n case 'contains':\n if (Array.isArray(parsedResouceValue)) {\n return parsedResouceValue.includes(parsedConditionValue);\n } else if (\n typeof parsedResouceValue === 'string' &&\n typeof parsedConditionValue === 'string'\n ) {\n return parsedResouceValue.includes(parsedConditionValue);\n }\n\n return false;\n }\n return false;\n};\n\nexport const evaluateCssRules = (\n value: string,\n rules?: CssRule[],\n): Partial<CSSStyleDeclaration> => {\n if (!rules) {\n return {};\n }\n\n return rules.reduce((acc, rule) => {\n const result = cssRuleResolver(rule, value);\n if (result) {\n return { ...acc, ...rule.styles };\n }\n return acc;\n }, {});\n};\n","import { PropertyField, TransformType } from '../../models';\nimport { JSONPath } from 'jsonpath-plus';\n\nexport const getResourceValueByJsonPath = <T>(\n resource: T,\n field: {\n jsonPathExpression?: string;\n property?: string | string[];\n propertyField?: PropertyField;\n },\n) => {\n const property = field.jsonPathExpression || field.property;\n if (!property) {\n return undefined;\n }\n\n if (property instanceof Array) {\n console.error(\n `Property defined as an array: ${JSON.stringify(property)}, provide \"jsonPathExpression\" field to properly ready resource value`,\n );\n return undefined;\n }\n\n const prefix = property.startsWith('$.') ? '' : '$.';\n // jsonpath-plus's `JSONPath` is overloaded: by default `resultType: 'value'`\n // returns an array of matched values, but the TS overload defaults to\n // returning a `JSONPathClass` unless we pin `<T>` to the array shape.\n // The `json` parameter is typed as a concrete JSON-shape union; the generic\n // `T` of this function is unconstrained, so we cast at the boundary. The\n // returned array is `any[]` (matching jsonpath's old typing) so the\n // downstream `value[field.propertyField.key]` access keeps compiling.\n const queryResult = JSONPath<any[]>({\n path: `${prefix}${property}`,\n json: resource as object,\n });\n const value = queryResult.length ? queryResult[0] : undefined;\n\n if (value && field.propertyField) {\n return executeTransform(\n value[field.propertyField.key],\n field.propertyField.transform,\n );\n }\n\n return value;\n};\n\nconst executeTransform = (\n value: string | undefined,\n transform: TransformType[] | undefined,\n): string | undefined => {\n if (value == null || transform == null || !transform.length) return value;\n\n return transform.reduce((acc, t) => {\n if (acc == null) return acc;\n\n switch (t) {\n case 'uppercase':\n return acc.toUpperCase();\n case 'lowercase':\n return acc.toLowerCase();\n case 'capitalize': {\n const str = String(acc);\n return str.length ? str.charAt(0).toUpperCase() + str.slice(1) : str;\n }\n case 'decode': {\n try {\n return decodeBase64(acc);\n } catch {\n return acc;\n }\n }\n case 'encode': {\n try {\n return encodeBase64(acc);\n } catch {\n return acc;\n }\n }\n default:\n return acc;\n }\n }, value);\n};\n\nexport const encodeBase64 = (str: string): string => {\n try {\n const utf8Bytes = new TextEncoder().encode(str);\n const binaryString = Array.from(utf8Bytes, (byte) =>\n String.fromCharCode(byte),\n ).join('');\n return btoa(binaryString);\n } catch (error) {\n console.error('Base64 encoding failed:', error);\n throw new Error('Failed to encode string to Base64');\n }\n};\n\nexport const decodeBase64 = (base64: string): string => {\n try {\n const binaryString = atob(base64);\n const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n } catch (error) {\n console.error('Base64 decoding failed:', error);\n throw new Error('Failed to decode Base64 string');\n }\n};\n","import { FieldDefinition } from '../../models';\nimport { getResourceValueByJsonPath } from './resource-field-by-path';\n\nexport function getFieldValue<T>(\n field: FieldDefinition,\n resource: T | undefined,\n) {\n if (resource) {\n return getResourceValueByJsonPath<T>(resource, field) ?? field.value;\n }\n\n return field.value;\n}\n","export const ICON_DESIGN_POSITIVE = 'Positive';\nexport const ICON_DESIGN_NEGATIVE = 'Negative';\n\nexport const ICON_NAME_POSITIVE = 'accept';\nexport const ICON_NAME_NEGATIVE = 'decline';\n","import {\n ICON_DESIGN_NEGATIVE,\n ICON_DESIGN_POSITIVE,\n ICON_NAME_NEGATIVE,\n ICON_NAME_POSITIVE,\n} from './boolean-cell.constants';\nimport {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\n\nexport type IconDesignType = typeof ICON_DESIGN_POSITIVE | typeof ICON_DESIGN_NEGATIVE;\n\n@Component({\n selector: 'mfp-boolean-value',\n imports: [Icon],\n templateUrl: './boolean-value.component.html',\n styleUrl: './boolean-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class BooleanValue {\n boolValue = input.required<boolean>();\n testId = input<string>('boolean-value-icon');\n iconDesign = computed<IconDesignType>(() => {\n return this.boolValue() ? ICON_DESIGN_POSITIVE : ICON_DESIGN_NEGATIVE;\n });\n iconName = computed<string>(() => {\n return this.boolValue() ? ICON_NAME_POSITIVE : ICON_NAME_NEGATIVE;\n });\n}\n","<ui5-icon [attr.test-id]=\"testId()\" [design]=\"iconDesign()\" [name]=\"iconName()\" />\n","import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Link } from '@fundamental-ngx/ui5-webcomponents/link';\n\n@Component({\n selector: 'mfp-link-value',\n imports: [Link],\n templateUrl: './link-value.component.html',\n styleUrl: './link-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class LinkValue {\n urlValue = input.required<string>();\n testId = input<string>('link-value-link');\n\n public stopPropagation(event: Event) {\n event.stopPropagation();\n }\n}\n","<ui5-link\n target=\"_blank\"\n [attr.test-id]=\"testId()\"\n [href]=\"urlValue()\"\n [tooltip]=\"urlValue()\"\n (click)=\"stopPropagation($event)\"\n>Link</ui5-link>\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n@Component({\n selector: 'mfp-secret-value',\n imports: [],\n templateUrl: './secret-value.component.html',\n styleUrl: './secret-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: []\n})\nexport class SecretValue {\n value = input.required<string>();\n isVisible = input<boolean>(false);\n testId = input<string>('secret-value');\n maskedValue = computed(() => '*'.repeat(this.value().length || 8));\n}\n","<span class=\"secret-value\" [attr.test-id]=\"testId()\" [class.masked]=\"!isVisible()\">\n @if (isVisible()) {\n {{ value() }}\n } @else {\n {{ maskedValue() }}\n }\n</span>\n","import { TagSettings } from '../../models';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Tag } from '@fundamental-ngx/ui5-webcomponents/tag';\n\n@Component({\n selector: 'mfp-tag-list-value',\n imports: [Tag],\n templateUrl: './tag-list-value.component.html',\n styleUrl: './tag-list-value.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TagListValue {\n tags = input.required<string[]>();\n tagSettings = input<TagSettings>();\n testId = input<string>('tag-list-value');\n}\n","<span class=\"tag-list\" [attr.test-id]=\"testId()\">\n @for (tag of tags(); track $index) {\n <ui5-tag\n [colorScheme]=\"tagSettings()?.colorScheme\"\n [design]=\"tagSettings()?.design ?? 'Neutral'\"\n [hideStateIcon]=\"true\"\n >{{ tag }}</ui5-tag>\n }\n</span>\n","import {\n FieldDefinition,\n GenericResource,\n ResourceFieldButtonClickEvent,\n} from '../models';\nimport { evaluateCssRules } from '../table/utils/cssRules.engine';\nimport { getFieldValue } from '../table/utils/field-definition.utils';\nimport { BooleanValue } from './boolean-value/boolean-value.component';\nimport { LinkValue } from './link-value/link-value.component';\nimport { SecretValue } from './secret-value/secret-value.component';\nimport { TagListValue } from './tag-list-value/tag-list-value.component';\nimport {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/AllIcons.js';\n\n@Component({\n selector: 'mfp-resource-field',\n imports: [Icon, BooleanValue, LinkValue, SecretValue, Button, TagListValue],\n templateUrl: './resource-field.component.html',\n styleUrl: './resource-field.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class ResourceField<T extends GenericResource, F extends FieldDefinition> {\n fieldDefinition = input.required<F>();\n resource = input<T>();\n readonly buttonClick = output<ResourceFieldButtonClickEvent<T>>();\n\n value = computed(() =>\n getFieldValue(this.fieldDefinition(), this.resource()),\n );\n\n uiSettings = computed(() => this.fieldDefinition().uiSettings);\n displayAs = computed(() => this.uiSettings()?.displayAs);\n withCopyButton = computed(() => this.uiSettings()?.withCopyButton);\n cssCustomization = computed(() => this.uiSettings()?.cssCustomization);\n tooltipIcon = computed(() => this.uiSettings()?.tooltipIcon);\n cssRules = computed(() =>\n evaluateCssRules(this.value(), this.uiSettings()?.cssRules),\n );\n cssStyles = computed(() => ({\n ...this.cssCustomization(),\n ...this.cssRules(),\n }));\n\n isBoolLike = computed(() => this.boolValue() !== undefined);\n isUrlValue = computed(() => this.checkValidUrl(this.stringValue()));\n testId = computed(() => `resource-field-${this.fieldDefinition().property}`);\n\n boolValue = computed(() => this.normalizeBoolean(this.value()));\n stringValue = computed(() => this.normalizeString(this.value()));\n tags = computed(() => this.normalizeTagsArray(this.value()));\n isVisible = signal(false);\n copySuccess = signal(false);\n\n toggleVisibility(e: Event): void {\n e.stopPropagation();\n this.isVisible.set(!this.isVisible());\n }\n\n private normalizeBoolean(value: unknown): boolean | undefined {\n const normalizedValue = value?.toString()?.toLowerCase();\n if (normalizedValue === 'true') {\n return true;\n }\n if (normalizedValue === 'false') {\n return false;\n }\n return undefined;\n }\n\n private normalizeString(value: unknown): string | undefined {\n if (typeof value !== 'string' || !value.trim()) {\n return undefined;\n }\n\n return value;\n }\n\n private normalizeTagsArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map(v => String(v).trim()).filter(v => v.length > 0);\n }\n if (typeof value === 'string') {\n const separator = this.uiSettings()?.tagSettings?.valueSeparator ?? ',';\n return value.split(separator).map(v => v.trim()).filter(v => v.length > 0);\n }\n return [];\n }\n\n private checkValidUrl(value: string | undefined): boolean {\n if (!value) {\n return false;\n }\n\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n }\n\n public copyValue(event: Event) {\n event.stopPropagation();\n navigator.clipboard.writeText(this.value() || '').then(() => {\n this.copySuccess.set(true);\n setTimeout(() => {\n this.copySuccess.set(false);\n }, 2000);\n });\n }\n\n protected buttonClicked(event: MouseEvent) {\n event.stopPropagation();\n this.buttonClick.emit({\n event,\n field: this.fieldDefinition(),\n resource: this.resource(),\n });\n }\n}\n","@let displayType = displayAs();\n<span [attr.test-id]=\"testId()\" [style]=\"cssStyles()\">\n @if (displayType === 'secret') {\n <span class=\"secret-value-container\">\n <mfp-secret-value [isVisible]=\"isVisible()\" [testId]=\"testId() + '-secret'\" [value]=\"value()\" />\n <ui5-icon\n class=\"toggle-icon\"\n mode=\"Interactive\"\n [accessibleName]=\"isVisible() ? 'Hide value' : 'Show value'\"\n [attr.test-id]=\"testId() + '-secret-toggle'\"\n [name]=\"isVisible() ? 'hide' : 'show'\"\n (click)=\"toggleVisibility($event)\"\n />\n </span>\n } @else if (displayType === 'boolIcon' && isBoolLike()) {\n <mfp-boolean-value [boolValue]=\"boolValue()!\" [testId]=\"testId() + '-boolean'\" />\n } @else if (displayType === 'link' && isUrlValue()) {\n <mfp-link-value [testId]=\"testId() + '-link'\" [urlValue]=\"stringValue()!\" />\n } @else if (displayType === 'tooltip') {\n <ui5-icon\n [accessibleName]=\"stringValue()!\"\n [attr.test-id]=\"testId() + '-tooltip'\"\n [name]=\"tooltipIcon() ?? 'hint'\"\n [showTooltip]=\"true\"\n />\n } @else if (displayType === 'alert') {\n @if (!value()) {\n <ui5-icon\n design=\"Critical\"\n name=\"alert\"\n [accessibleName]=\"resource()?.accessibleName ?? ''\"\n [attr.test-id]=\"testId() + '-icon'\"\n [showTooltip]=\"true\"\n (click)=\"$event.stopPropagation()\"\n />\n }\n } @else if (displayType === 'img' && value()) {\n <img alt=\"Resource image\" class=\"image-cell\" [src]=\"value()\" />\n } @else if (displayType === 'button') {\n @let buttonSettings = uiSettings()?.buttonSettings;\n <ui5-button\n [accessibleName]=\"buttonSettings?.text || buttonSettings?.tooltip || buttonSettings?.icon || ''\"\n [design]=\"buttonSettings?.design\"\n [endIcon]=\"buttonSettings?.endIcon\"\n [icon]=\"buttonSettings?.icon\"\n [tooltip]=\"buttonSettings?.tooltip\"\n (click)=\"buttonClicked($event)\"\n >{{ buttonSettings?.text }}</ui5-button\n >&nbsp;\n } @else if (displayType === 'tag') {\n <mfp-tag-list-value\n [tagSettings]=\"uiSettings()?.tagSettings\"\n [tags]=\"tags()\"\n [testId]=\"testId() + '-tags'\"\n />\n } @else {\n {{ value() }}\n }\n</span>\n\n@if (withCopyButton()) {\n <ui5-icon\n class=\"toggle-icon\"\n mode=\"Interactive\"\n [accessibleName]=\"copySuccess() ? 'Copied' : 'Copy value'\"\n [attr.test-id]=\"testId() + '-copy'\"\n [design]=\"copySuccess() ? 'Positive' : 'Default'\"\n [name]=\"copySuccess() ? 'accept' : 'copy'\"\n (click)=\"copyValue($event)\"\n />\n}\n","import { TableFieldDefinition } from '../models';\n\ntype GroupBase = NonNullable<TableFieldDefinition['group']>;\ntype ProcessedGroup = GroupBase & {\n fields?: TableFieldDefinition[];\n};\n\nexport type ProcessedTableFieldDefinition = Omit<TableFieldDefinition, 'group'> & {\n group?: ProcessedGroup;\n};\n\nexport const processGroupFields = (\n fields: TableFieldDefinition[],\n): ProcessedTableFieldDefinition[] => {\n return combineGroupFields(fields);\n};\n\nconst collectGroupFields = (\n fields: TableFieldDefinition[],\n): Record<string, TableFieldDefinition[]> => {\n return fields.reduce(\n (acc, f): Record<string, TableFieldDefinition[]> => {\n if (!f.group?.name) {\n return acc;\n }\n\n const key = f.group.name;\n if (!acc[key]) {\n acc[key] = [];\n }\n\n // Strip group information from the field when adding to the fields array\n const { group, ...fieldWithoutGroup } = f;\n acc[key].push(fieldWithoutGroup);\n return acc;\n },\n {} as Record<string, TableFieldDefinition[]>,\n );\n};\n\nconst combineGroupFields = (fields: TableFieldDefinition[]): ProcessedTableFieldDefinition[] => {\n const seenGroup = new Set<string>();\n const groupFields = collectGroupFields(fields);\n const result: ProcessedTableFieldDefinition[] = [];\n\n fields.forEach((f) => {\n if (!f.group?.name) {\n result.push(f);\n return;\n }\n\n const key = f.group.name;\n if (seenGroup.has(key)) {\n return;\n }\n\n seenGroup.add(key);\n\n const grouped: ProcessedTableFieldDefinition = {\n ...f,\n group: {\n ...f.group,\n fields: groupFields[key],\n },\n };\n\n result.push(grouped);\n });\n\n return result;\n};\n","import { GenericResource } from '../../models';\nimport { ResourceField } from '../../resource-field/resource-field.component';\nimport { ResourceFieldButtonClickEvent, TableFieldDefinition } from '../models';\nimport { processGroupFields } from '../utils/proccess-fields';\nimport { getResourceValueByJsonPath } from '../utils/resource-field-by-path';\nimport {\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\nimport { IllustratedMessage } from '@fundamental-ngx/ui5-webcomponents-fiori';\nimport { Option } from '@fundamental-ngx/ui5-webcomponents/option';\nimport { Select } from '@fundamental-ngx/ui5-webcomponents/select';\nimport { Table } from '@fundamental-ngx/ui5-webcomponents/table';\nimport { TableCell } from '@fundamental-ngx/ui5-webcomponents/table-cell';\nimport { TableGrowing } from '@fundamental-ngx/ui5-webcomponents/table-growing';\nimport { TableHeaderCell } from '@fundamental-ngx/ui5-webcomponents/table-header-cell';\nimport { TableHeaderRow } from '@fundamental-ngx/ui5-webcomponents/table-header-row';\nimport { TableRow } from '@fundamental-ngx/ui5-webcomponents/table-row';\nimport '@ui5/webcomponents-fiori/dist/illustrations/NoData.js';\n\n@Component({\n selector: 'mfp-declarative-table',\n imports: [\n IllustratedMessage,\n Table,\n TableCell,\n TableHeaderCell,\n TableHeaderRow,\n TableRow,\n ResourceField,\n Select,\n Option,\n TableGrowing,\n ],\n templateUrl: './declarative-table.component.html',\n styleUrl: './declarative-table.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DeclarativeTable<T extends GenericResource> {\n columns = input.required<TableFieldDefinition[]>();\n resources = input.required<T[]>();\n trackByPath = input<string>('id');\n\n totalItemsCount = input<number>();\n paginationLimit = input<number>(5);\n hasMore = input<boolean>(false);\n growMode = input<'Scroll' | 'Button'>('Button');\n loadMoreButtonText = input<string>('Load More');\n height = input<number>();\n\n readonly buttonClick = output<ResourceFieldButtonClickEvent<T>>();\n readonly tableRowClicked = output<T>();\n readonly loadMoreResources = output<void>();\n readonly paginationLimitChanged = output<number>();\n\n columnTrackBy = (column: TableFieldDefinition, index: number) =>\n column.property ?? column.value ?? index;\n rowTrackBy = (_index: number, item: T): unknown =>\n getResourceValueByJsonPath(item, { property: this.trackByPath() }) ??\n _index;\n viewColumns = computed(() => processGroupFields(this.columns()));\n}\n","<ui5-table\n test-id=\"generic-table\"\n [style.height]=\"height() ? height() + 'px' : null\"\n [style.overflow-y]=\"'auto'\"\n>\n <ui5-table-header-row\n slot=\"headerRow\"\n [sticky]=\"growMode() === 'Scroll' && !!height()\"\n >\n @for (column of viewColumns(); track columnTrackBy(column, $index)) {\n @if (column.group) {\n <ui5-table-header-cell\n [attr.test-id]=\"'generic-table-header-' + column.group.name\"\n [width]=\"column.uiSettings?.columnWidth ?? 'auto'\"\n >{{ column.group.label ?? column.group.name }}</ui5-table-header-cell\n >\n } @else {\n <ui5-table-header-cell\n [attr.test-id]=\"'generic-table-header-' + column.property\"\n [width]=\"column.uiSettings?.columnWidth ?? 'auto'\"\n >{{ column.label }}</ui5-table-header-cell\n >\n }\n }\n </ui5-table-header-row>\n\n @for (item of resources(); let i = $index; track rowTrackBy($index, item)) {\n <ui5-table-row\n [attr.test-id]=\"'generic-table-row-' + i\"\n [class.disabled]=\"item.isAvailable === false\"\n [interactive]=\"item.isAvailable !== false\"\n (click)=\"tableRowClicked.emit(item)\"\n >\n @for (column of viewColumns(); track columnTrackBy(column, $index)) {\n @if (column.group) {\n <ui5-table-cell\n [attr.test-id]=\"'generic-table-cell-' + i + '-' + column.group.name\"\n >\n @let isMultiline = column.group.multiline ?? true;\n <div\n class=\"flex\"\n [style.alignItems]=\"isMultiline ? column.uiSettings?.align : null\"\n [style.flexDirection]=\"isMultiline ? 'column' : 'row'\"\n [style.justifyContent]=\"\n isMultiline ? null : column.uiSettings?.align\n \"\n >\n @for (\n field of column.group.fields;\n let last = $last;\n track columnTrackBy(field, $index)\n ) {\n <span\n class=\"group-value\"\n [attr.test-id]=\"\n 'generic-table-cell-' +\n i +\n '-' +\n column.group.name +\n '-' +\n field.property\n \"\n >\n @if (field.label) {\n <span>{{ field.label }}: </span>\n }\n <mfp-resource-field\n [fieldDefinition]=\"field\"\n [resource]=\"item\"\n (buttonClick)=\"buttonClick.emit($event)\"\n />\n </span>\n @if (!last && column.group.delimiter) {\n <span class=\"delimiter\">{{ column.group.delimiter }}</span>\n }\n }\n </div>\n </ui5-table-cell>\n } @else {\n <ui5-table-cell\n [attr.test-id]=\"'generic-table-cell-' + i + '-' + column.property\"\n >\n <div class=\"flex\" [style.justifyContent]=\"column.uiSettings?.align\">\n <mfp-resource-field\n [fieldDefinition]=\"column\"\n [resource]=\"item\"\n (buttonClick)=\"buttonClick.emit($event)\"\n />\n </div>\n </ui5-table-cell>\n }\n }\n </ui5-table-row>\n } @empty {\n <ui5-illustrated-message\n name=\"NoData\"\n slot=\"noData\"\n test-id=\"generic-table-view-nodata\"\n >\n <span slot=\"title\">No Resources</span>\n <span slot=\"subtitle\">There are currently no items to show.</span>\n </ui5-illustrated-message>\n }\n\n @if (hasMore()) {\n <ui5-table-growing\n id=\"growing\"\n slot=\"features\"\n [mode]=\"growMode()\"\n [text]=\"loadMoreButtonText()\"\n (ui5LoadMore)=\"loadMoreResources.emit()\"\n />\n }\n</ui5-table>\n\n<!-- Pagination Control -->\n<div\n class=\"pagination-footer\"\n style=\"\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0rem 1rem;\n min-height: 3rem;\n border-top: 1px solid var(--sapList_BorderColor);\n \"\n>\n <div style=\"display: flex; align-items: center; gap: 1.5rem\">\n <div style=\"display: flex; align-items: center; gap: 0.5rem\">\n <span\n style=\"color: var(--sapTextColor); font-size: var(--sapFontSmallSize)\"\n >Items per load:</span\n >\n <ui5-select\n style=\"width: 5rem\"\n [value]=\"paginationLimit().toString()\"\n (change)=\"paginationLimitChanged.emit(+$any($event)?.target?.value)\"\n >\n <ui5-option value=\"5\">5</ui5-option>\n <ui5-option value=\"10\">10</ui5-option>\n <ui5-option value=\"10\">20</ui5-option>\n <ui5-option value=\"50\">50</ui5-option>\n <ui5-option value=\"100\">100</ui5-option>\n </ui5-select>\n </div>\n\n <span\n style=\"color: var(--sapTextColor); font-size: var(--sapFontSmallSize)\"\n >\n Items loaded:\n <b>{{\n totalItemsCount() !== undefined\n ? resources().length + ' / ' + totalItemsCount()\n : resources().length\n }}</b>\n </span>\n </div>\n</div>\n","export function setPropertyByPath<T extends Record<string, unknown>>(\n object: T,\n path: string,\n value: unknown,\n): T {\n const segments = path.split('.').filter(Boolean);\n if (segments.length === 0) {\n return object;\n }\n\n let current: Record<string, unknown> = object;\n\n for (let i = 0; i < segments.length; i += 1) {\n const key = segments[i];\n if (i === segments.length - 1) {\n current[key] = value;\n break;\n }\n\n const existing = current[key];\n\n if (existing === undefined || existing === null || typeof existing !== 'object') {\n current[key] = {};\n }\n\n current = current[key] as Record<string, unknown>;\n }\n\n return object;\n}\n","import { GenericResource } from '../../models';\nimport {\n FormFieldChangeEvent,\n FormFieldDefinition,\n FormFieldErrors,\n} from '../models';\nimport { setPropertyByPath } from '../utils/set-property-by-path';\nimport {\n Component,\n ViewEncapsulation,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { Input } from '@fundamental-ngx/ui5-webcomponents/input';\nimport { Label } from '@fundamental-ngx/ui5-webcomponents/label';\nimport { Option } from '@fundamental-ngx/ui5-webcomponents/option';\nimport { Select } from '@fundamental-ngx/ui5-webcomponents/select';\n\n@Component({\n selector: 'mfp-declarative-form',\n imports: [ReactiveFormsModule, Input, Label, Select, Option],\n templateUrl: './declarative-form.component.html',\n styleUrl: './declarative-form.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DeclarativeForm<T extends GenericResource> {\n readonly fields = input.required<FormFieldDefinition[]>();\n readonly initialValues = input<T>({} as T);\n readonly fieldErrors = input<FormFieldErrors>({});\n\n readonly fieldChange = output<FormFieldChangeEvent>();\n readonly formSubmit = output<T>();\n\n readonly form: FormGroup;\n\n private readonly fb = inject(FormBuilder);\n\n constructor() {\n this.form = this.fb.group({});\n\n effect(() => {\n this.rebuildControls(this.fields());\n });\n\n effect(() => {\n this.setInitialValues(this.initialValues());\n });\n\n effect(() => {\n const fields = this.fields();\n this.initialValues();\n\n for (const field of fields) {\n if (field.validation) {\n this.fieldChange.emit({\n fieldProperty: field.name,\n value: this.form.controls[field.name]?.value ?? '',\n });\n }\n }\n });\n }\n\n setFormControlValue($event: Event, field: FormFieldDefinition): void {\n const target = $event.target as\n | HTMLInputElement\n | HTMLTextAreaElement\n | HTMLSelectElement;\n\n const control = this.form.controls[field.name];\n control.setValue(target.value);\n control.markAsTouched();\n control.markAsDirty();\n\n if (field.validation === 'onChange') {\n this.fieldChange.emit({\n fieldProperty: field.name,\n value: control.value,\n });\n }\n }\n\n getError(name: string): string | null {\n const control = this.form.controls[name];\n const error = this.fieldErrors()[name];\n\n return error && (control.dirty || control.touched) ? error : null;\n }\n\n getValueState(name: string): 'None' | 'Negative' {\n return this.getError(name) ? 'Negative' : 'None';\n }\n\n onFieldBlur(field: FormFieldDefinition): void {\n this.form.controls[field.name]?.markAsTouched();\n\n if (field.validation === 'onBlur') {\n this.fieldChange.emit({\n fieldProperty: field.name,\n value: this.form.controls[field.name]?.value,\n });\n }\n }\n\n submit(): void {\n this.formSubmit.emit(this.buildOutputValue());\n }\n\n clear(): void {\n this.form.reset();\n }\n\n private rebuildControls(fields: FormFieldDefinition[]): void {\n const existingControls = this.form.controls;\n const nextFieldNames = new Set(fields.map((field) => field.name));\n\n for (const field of fields) {\n const existingControl = existingControls[field.name];\n\n if (existingControl) {\n existingControl.clearValidators();\n existingControl.updateValueAndValidity({ emitEvent: false });\n continue;\n }\n\n this.form.addControl(field.name, new FormControl(''));\n }\n\n for (const controlName of Object.keys(existingControls)) {\n if (!nextFieldNames.has(controlName)) {\n this.form.removeControl(controlName);\n }\n }\n\n this.form.updateValueAndValidity({ emitEvent: false });\n }\n\n private setInitialValues(\n initialValues: Record<string, unknown> | null | undefined,\n ): void {\n if (!initialValues) {\n return;\n }\n\n this.form.patchValue(initialValues, { emitEvent: false });\n this.form.markAsPristine({ emitEvent: false });\n this.form.updateValueAndValidity({ emitEvent: false });\n }\n\n private buildOutputValue(): T {\n const result = {} as T;\n\n for (const key of Object.keys(this.form.controls)) {\n setPropertyByPath(result, key, this.form.controls[key].value);\n }\n\n return result;\n }\n}\n","<section class=\"form\" test-id=\"generic-form\" [formGroup]=\"form\">\n @for (field of fields(); track field.name) {\n @let control = form.controls[field.name];\n <div\n class=\"inputs\"\n [attr.test-id]=\"'generic-form-field-container-' + field.name\"\n >\n <ui5-label\n show-colon\n [attr.test-id]=\"'generic-form-field-label-' + field.name\"\n [required]=\"field.required\"\n >{{ field.label }}</ui5-label\n >\n @if (field.values?.length) {\n <ui5-select\n class=\"input\"\n [attr.test-id]=\"'generic-form-field-' + field.name\"\n [disabled]=\"field.disabled\"\n [required]=\"field.required\"\n [value]=\"control.value\"\n [valueState]=\"getValueState(field.name)\"\n (blur)=\"onFieldBlur(field)\"\n (change)=\"setFormControlValue($event, field)\"\n (input)=\"setFormControlValue($event, field)\"\n >\n @if (getError(field.name); as error) {\n <div slot=\"valueStateMessage\">{{ error }}</div>\n }\n @for (value of [''].concat(field.values ?? []); track value) {\n <ui5-option\n [attr.test-id]=\"\n 'generic-form-field-' +\n field.name +\n '-option-' +\n (value || 'empty')\n \"\n [selected]=\"value === control.value\"\n [value]=\"value\"\n >{{ value }}</ui5-option\n >\n }\n </ui5-select>\n } @else {\n <ui5-input\n class=\"input\"\n [attr.test-id]=\"'generic-form-field-' + field.name\"\n [disabled]=\"field.disabled\"\n [required]=\"field.required\"\n [value]=\"control.value\"\n [valueState]=\"getValueState(field.name)\"\n (blur)=\"onFieldBlur(field)\"\n (change)=\"setFormControlValue($event, field)\"\n (input)=\"setFormControlValue($event, field)\"\n >\n @if (getError(field.name); as error) {\n <div slot=\"valueStateMessage\">{{ error }}</div>\n }\n </ui5-input>\n }\n </div>\n }\n</section>\n","import { FormFieldChangeEvent, FormFieldDefinition } from '../form';\nimport { DeclarativeForm } from '../form/declarative-form/declarative-form.component';\nimport { GenericResource } from '../models';\nimport { DeclarativeTable } from '../table/declarative-table/declarative-table.component';\nimport {\n TableFieldDefinition,\n ResourceFieldButtonClickEvent,\n} from '../table/models';\nimport { getResourceValueByJsonPath } from '../table/utils/resource-field-by-path';\nimport { TableCardConfig, TableCardFormState } from './models/configs';\nimport {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n Injector,\n ViewEncapsulation,\n afterNextRender,\n computed,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Input } from '@fundamental-ngx/ui5-webcomponents/input';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/add.js';\nimport '@ui5/webcomponents-icons/dist/search.js';\nimport { debounceTime } from 'rxjs';\n\ntype SearchState = 'collapsed' | 'expanded' | 'collapsing';\n\n@Component({\n selector: 'mfp-declarative-table-card',\n imports: [\n DeclarativeTable,\n DeclarativeForm,\n ReactiveFormsModule,\n Dialog,\n Title,\n Button,\n Icon,\n Input,\n ],\n templateUrl: './declarative-table-card.component.html',\n styleUrl: './declarative-table-card.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.ShadowDom,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class DeclarativeTableCard<T extends GenericResource> {\n resources = input.required<T[]>();\n\n config = input.required<TableCardConfig>();\n createFormState = input<TableCardFormState>({});\n editFormState = input<TableCardFormState>({});\n\n readonly actionButtonClick = output<ResourceFieldButtonClickEvent<T>>();\n readonly tableRowClicked = output<T>();\n readonly loadMoreResources = output<void>();\n readonly paginationLimitChanged = output<number>();\n\n readonly searchChanged = output<string>();\n readonly createFieldChange = output<FormFieldChangeEvent>();\n readonly editFieldChange = output<{\n resource: T;\n formChangeEvent: FormFieldChangeEvent;\n }>();\n readonly createSubmit = output<T>();\n readonly editSubmit = output<{\n resource: T;\n value: Record<string, unknown>;\n }>();\n readonly deleteSubmit = output<T>();\n\n protected searchState = signal<SearchState>('collapsed');\n protected searchExpanded = computed(() => this.searchState() !== 'collapsed');\n protected searchCollapsing = computed(\n () => this.searchState() === 'collapsing',\n );\n protected searchControl = new FormControl('');\n protected searchInputRef = viewChild<Input>('searchInput');\n\n protected createDialogOpen = signal(false);\n protected editDialogOpen = signal(false);\n protected deleteDialogOpen = signal(false);\n\n protected pendingResource = signal<T | null>(null);\n\n protected tableConfig = computed(() => this.config().tableConfig);\n protected header = computed(() => this.config().header);\n protected headerTooltip = computed(() => this.config().headerTooltip);\n protected createFormConfig = computed(\n () => this.config().createResourceFormConfig,\n );\n protected editFormConfig = computed(\n () => this.config().editResourceFormConfig,\n );\n protected deleteConfirmationConfig = computed(\n () => this.config().deleteResourceConfirmationConfig,\n );\n protected createButtonConfig = computed(\n () => this.config().buttonSettings?.createButton,\n );\n protected searchButtonConfig = computed(\n () => this.config().buttonSettings?.searchButton,\n );\n protected effectiveColumns = computed(() => this.addActionsColumn());\n protected editInitialValue = computed(() => {\n const pendingResource = this.pendingResource();\n const editConfig = this.editFormConfig();\n if (!pendingResource || !editConfig) {\n return {};\n }\n\n return this.buildInitialValues(editConfig.fields, pendingResource);\n });\n\n private readonly injector = inject(Injector);\n\n constructor() {\n this.searchControl.valueChanges\n .pipe(debounceTime(300), takeUntilDestroyed())\n .subscribe((value) => {\n this.searchChanged.emit(value ?? '');\n });\n }\n\n toggleSearch(): void {\n if (this.searchState() === 'expanded') {\n this.collapseSearch();\n } else if (this.searchState() === 'collapsed') {\n this.searchState.set('expanded');\n afterNextRender(\n () => {\n this.searchInputRef()?.elementRef.nativeElement.focus();\n },\n { injector: this.injector },\n );\n }\n }\n\n onSearchBlur(): void {\n if (!this.searchControl.value) {\n this.collapseSearch();\n }\n }\n\n onSearchAnimationEnd(): void {\n if (this.searchCollapsing()) {\n this.searchState.set('collapsed');\n this.searchControl.setValue('', { emitEvent: false });\n }\n }\n\n private collapseSearch(): void {\n this.searchState.set('collapsing');\n }\n\n onButtonClick(event: ResourceFieldButtonClickEvent<T>): void {\n const action = event.field.uiSettings?.buttonSettings?.action;\n if (action === 'edit' && event.resource) {\n this.pendingResource.set(event.resource);\n this.editDialogOpen.set(true);\n return;\n }\n if (action === 'delete' && event.resource) {\n this.pendingResource.set(event.resource);\n this.deleteDialogOpen.set(true);\n return;\n }\n\n this.actionButtonClick.emit(event);\n }\n\n closeCreateDialog(): void {\n this.createDialogOpen.set(false);\n }\n\n closeEditDialog(): void {\n this.editDialogOpen.set(false);\n }\n\n closeDeleteDialog(): void {\n this.deleteDialogOpen.set(false);\n }\n\n onCreateFieldChange(event: FormFieldChangeEvent): void {\n this.createFieldChange.emit(event);\n }\n\n onEditFieldChange(event: FormFieldChangeEvent): void {\n const resource = this.pendingResource();\n\n if (resource) {\n this.editFieldChange.emit({ resource, formChangeEvent: event });\n }\n }\n\n onCreateSubmit(value: T): void {\n this.createSubmit.emit(value);\n }\n\n onEditSubmit(value: Record<string, unknown>): void {\n const resource = this.pendingResource();\n\n if (resource) {\n this.editSubmit.emit({ resource, value });\n }\n }\n\n onDeleteSubmit(): void {\n const resource = this.pendingResource();\n if (resource) this.deleteSubmit.emit(resource);\n }\n\n protected hasErrors(state: TableCardFormState): boolean {\n const errors = state.fieldErrors;\n return !!errors && Object.values(errors).some((val) => !!val);\n }\n\n private addActionsColumn(): TableFieldDefinition[] {\n const cols = this.tableConfig().fields;\n const buttonSettings = this.config().buttonSettings;\n const editButton = this.editFormConfig();\n const deleteButton = this.deleteConfirmationConfig();\n const actions: TableFieldDefinition[] = [];\n\n if (editButton) {\n actions.push({\n property: 'mfp_edit_action',\n uiSettings: {\n displayAs: 'button',\n align: 'end',\n buttonSettings: {\n icon: 'edit',\n design: 'Transparent',\n action: 'edit',\n tooltip: 'Edit',\n ...buttonSettings?.editButton,\n },\n },\n group: { name: 'actions', label: '', multiline: false },\n });\n }\n\n if (deleteButton) {\n actions.push({\n property: 'mfp_delete_action',\n uiSettings: {\n align: 'end',\n displayAs: 'button',\n buttonSettings: {\n icon: 'decline',\n design: 'Transparent',\n action: 'delete',\n tooltip: 'Delete',\n ...buttonSettings?.deleteButton,\n },\n },\n group: { name: 'actions', label: '', multiline: false },\n });\n }\n\n return cols.concat(actions);\n }\n\n private buildInitialValues(\n fields: FormFieldDefinition[],\n resource?: T,\n ): Record<string, unknown> {\n if (!resource) return {};\n\n return fields.reduce(\n (acc, field) => {\n if (typeof field.name === 'string') {\n acc[field.name] =\n getResourceValueByJsonPath(resource, { property: field.name }) ??\n '';\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n }\n}\n","<div class=\"card\">\n <div class=\"card__header\">\n <div class=\"card__title\">\n @if (header(); as header) {\n {{ header }}\n @if (headerTooltip(); as tooltip) {\n <ui5-icon\n class=\"card__info-icon\"\n name=\"hint\"\n [accessibleName]=\"tooltip\"\n [showTooltip]=\"true\"\n />\n }\n }\n </div>\n <div class=\"card__actions\">\n @if (config().resourcesSearchable) {\n @if (searchExpanded()) {\n <ui5-input\n #searchInput\n [class]=\"\n 'card__search-input card__search-input--' +\n (searchCollapsing() ? 'leave' : 'enter')\n \"\n [formControl]=\"searchControl\"\n (animationend)=\"onSearchAnimationEnd()\"\n (blur)=\"onSearchBlur()\"\n />\n }\n <ui5-button\n class=\"card__search-btn\"\n design=\"Transparent\"\n [accessibleName]=\"searchButtonConfig()?.tooltip ?? 'Search'\"\n [icon]=\"searchButtonConfig()?.icon ?? 'search'\"\n [tooltip]=\"searchButtonConfig()?.tooltip ?? 'Search'\"\n (click)=\"toggleSearch()\"\n />\n }\n @if (createFormConfig()) {\n <ui5-button\n class=\"card__create-btn\"\n [accessibleName]=\"createButtonConfig()?.text || createButtonConfig()?.tooltip || 'Create'\"\n [design]=\"createButtonConfig()?.design ?? 'Transparent'\"\n [icon]=\"createButtonConfig()?.icon ?? 'add'\"\n [tooltip]=\"createButtonConfig()?.tooltip\"\n (click)=\"createDialogOpen.set(true)\"\n >\n {{ createButtonConfig()?.text ?? '' }}\n </ui5-button>\n }\n </div>\n </div>\n\n <div class=\"card__body\">\n @if (tableConfig(); as config) {\n <mfp-declarative-table\n [columns]=\"effectiveColumns()\"\n [growMode]=\"config.growMode ?? 'Button'\"\n [hasMore]=\"config.hasMore ?? false\"\n [height]=\"config.height\"\n [loadMoreButtonText]=\"config.loadMoreButtonText ?? 'Load More'\"\n [paginationLimit]=\"config.paginationLimit ?? 5\"\n [resources]=\"resources()\"\n [totalItemsCount]=\"config.totalItemsCount\"\n (buttonClick)=\"onButtonClick($event)\"\n (loadMoreResources)=\"loadMoreResources.emit()\"\n (paginationLimitChanged)=\"paginationLimitChanged.emit($event)\"\n (tableRowClicked)=\"tableRowClicked.emit($event)\"\n />\n }\n </div>\n</div>\n\n@if (createFormConfig(); as config) {\n <ui5-dialog\n [accessibleName]=\"config.title ?? 'Create'\"\n [open]=\"createDialogOpen()\"\n (ui5BeforeClose)=\"createDialogOpen.set(false)\"\n >\n <div class=\"dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">{{ config.title ?? 'Create' }}</ui5-title>\n </div>\n <div class=\"dialog__body\">\n <mfp-declarative-form\n #createForm\n [fieldErrors]=\"createFormState().fieldErrors ?? {}\"\n [fields]=\"config.fields\"\n (fieldChange)=\"onCreateFieldChange($event)\"\n (formSubmit)=\"onCreateSubmit($event)\"\n />\n </div>\n <div class=\"dialog__footer\" slot=\"footer\">\n <ui5-button\n design=\"Emphasized\"\n [disabled]=\"hasErrors(createFormState())\"\n (click)=\"createForm.submit()\"\n >\n {{ config.confirmLabel ?? 'Save' }}\n </ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"closeCreateDialog()\">\n {{ config.cancelLabel ?? 'Cancel' }}\n </ui5-button>\n </div>\n </ui5-dialog>\n}\n\n@if (editFormConfig(); as config) {\n <ui5-dialog\n [accessibleName]=\"config.title ?? 'Edit'\"\n [open]=\"editDialogOpen()\"\n (ui5BeforeClose)=\"editDialogOpen.set(false)\"\n >\n <div class=\"dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">{{ config.title ?? 'Edit' }}</ui5-title>\n </div>\n <div class=\"dialog__body\">\n <mfp-declarative-form\n #editForm\n [fieldErrors]=\"editFormState().fieldErrors ?? {}\"\n [fields]=\"config.fields\"\n [initialValues]=\"editInitialValue()\"\n (fieldChange)=\"onEditFieldChange($event)\"\n (formSubmit)=\"onEditSubmit($event)\"\n />\n </div>\n <div class=\"dialog__footer\" slot=\"footer\">\n <ui5-button\n design=\"Emphasized\"\n [disabled]=\"hasErrors(editFormState())\"\n (click)=\"editForm.submit()\"\n >\n {{ config.confirmLabel ?? 'Edit' }}\n </ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"closeEditDialog()\">\n {{ config.cancelLabel ?? 'Cancel' }}\n </ui5-button>\n </div>\n </ui5-dialog>\n}\n\n@if (deleteConfirmationConfig(); as config) {\n <ui5-dialog\n [accessibleName]=\"config.title ?? 'Confirm Delete'\"\n [open]=\"deleteDialogOpen()\"\n (ui5BeforeClose)=\"deleteDialogOpen.set(false)\"\n >\n <div class=\"dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">{{ config.title ?? 'Confirm Delete' }}</ui5-title>\n </div>\n @if (config.message) {\n <div class=\"dialog__body\">\n <p class=\"dialog__message\">{{ config.message }}</p>\n </div>\n }\n <div class=\"dialog__footer\" slot=\"footer\">\n <ui5-button design=\"Negative\" (click)=\"onDeleteSubmit()\">\n {{ config.confirmLabel ?? 'Delete' }}\n </ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"closeDeleteDialog()\">\n {{ config.cancelLabel ?? 'Cancel' }}\n </ui5-button>\n </div>\n </ui5-dialog>\n}\n","import { ButtonSettings } from '../../models/ui-definition';\n\n\n\n\nexport const CARD_TYPES = {\n WC: 'wc',\n ANGULAR: 'angular',\n SAP_UI: 'sap-ui',\n} as const;\n\nexport type CardsType = (typeof CARD_TYPES)[keyof typeof CARD_TYPES];\n\n/** Configuration for a single card placed in the dashboard grid or a section. */\nexport interface CardConfig {\n /** Unique identifier for this card. Used as a stable key for position persistence. */\n id: string;\n /** Column span (1–12). Defaults to 12 when omitted. */\n w?: number;\n /** Row span — number of CSS grid rows occupied (1 row = 10 px by default). Defaults to 100 when omitted. */\n h?: number;\n /** Starting column index (0-based). Omit to let the grid auto-place the card. */\n x?: number;\n /** Starting row index (0-based). Omit to let the grid auto-place the card. */\n y?: number;\n /** Maximum row span in edit mode. */\n maxH?: number;\n /** Maximum column span in edit mode. */\n maxW?: number;\n /** Minimum row span in edit mode. */\n minH?: number;\n /** Minimum column span in edit mode. */\n minW?: number;\n /** ID of the parent section. Omit to place the card in the loose-card grid. */\n sectionId?: string;\n /**\n * Custom-element tag name (for `'wc'`/omitted), Angular component selector (for `'angular'`),\n * or SAP UI5 component name (for `'sap-ui'`).\n */\n component: string;\n /**\n * Render strategy for the card.\n * - `'wc'` (default) — creates a custom element and sets `componentInputs` as DOM properties.\n * - `'angular'` — looks up the Angular registry; warns and renders nothing if not found.\n * - `'sap-ui'` — mounts via `window.sap.ui.require` + `ComponentContainer`.\n */\n type?: CardsType;\n /** Key/value pairs passed to the rendered card. Behaviour depends on `type`. */\n componentInputs?: Record<string, unknown>;\n /** Human-readable label shown in the \"Add Card\" dialog. */\n label?: string;\n}\n\n/** Configuration for a named horizontal section that groups cards. */\nexport interface SectionConfig {\n /** Unique identifier for this section. */\n id: string;\n /** Column span (1–12). Defaults to 12 when omitted. */\n w?: number;\n /** Section heading displayed in the UI. */\n title?: string;\n /** When `false`, the section and its cards are excluded from edit mode. Defaults to `true` when omitted. */\n editable?: boolean;\n}\n\n/** Overrides for the two built-in dashboard toolbar buttons. */\nexport interface DashboardButtonsSettings {\n /** Partial override merged on top of the Edit View button defaults. */\n editViewButton?: Partial<ButtonSettings>;\n /** Partial override merged on top of the Edit Cards button defaults. */\n editCardsButton?: Partial<ButtonSettings>;\n}\n\n/** Top-level configuration for the `<mfp-dashboard>` component. */\nexport interface DashboardConfig {\n /** Dashboard title rendered in the toolbar. */\n title: string;\n /** Optional subtitle shown below the title. */\n description?: string;\n /** URL of the background image applied to the dashboard host element. */\n backgroundImageUrl?: string;\n /** Overrides for the built-in Edit View and Add Card toolbar buttons. */\n buttonsSettings?: DashboardButtonsSettings;\n /** Extra action buttons rendered in the toolbar alongside the built-in ones. */\n customActions?: ButtonSettings[];\n /** When `true`, shows the Edit View button in the toolbar, allowing the user to enter edit mode. */\n editable?: boolean;\n /** When `true`, the Edit View button is rendered before the custom actions instead of after. Defaults to `false`. */\n editButtonFirst?: boolean;\n}\n","// ─────────────────────────────────────────────────────────────────────────────\n// MUST MATCH: ./_breakpoints.scss\n//\n// These breakpoints are consumed by two systems that can't share a single\n// source of truth at compile time:\n//\n// 1. dashboard.component.ts — passed to Gridstack as\n// `gridOptions.columnOpts.breakpoints`. Gridstack picks the active\n// breakpoint by `w` (max-width). At each breakpoint, every grid item is\n// laid out using `c` columns.\n//\n// 2. dashboard.component.scss — used in a `@container` query so the\n// `.mfp-sections-container` CSS grid mirrors the same column count as\n// Gridstack at the same width.\n//\n// If you change either set of values, change BOTH files in the same commit.\n// The two are kept in sync by hand (no codegen). A SCSS-from-TS generator\n// would remove this hazard but is out of scope here.\n// ─────────────────────────────────────────────────────────────────────────────\nimport type { Breakpoint } from 'gridstack';\n\n/**\n * Layout strategy applied at each breakpoint when Gridstack changes column\n * count. See ColumnOptions in gridstack/dist/types.d.ts:27 for the full set.\n */\ntype LayoutStrategy = 'compact' | 'list' | 'none';\n\n/** Single source of truth for grid + section breakpoints (TypeScript half). */\nexport const DASHBOARD_BREAKPOINTS: ReadonlyArray<\n Readonly<Required<Pick<Breakpoint, 'w' | 'c'>> & { layout: LayoutStrategy }>\n> = [\n { w: 4000, c: 14, layout: 'compact' },\n { w: 1439, c: 12, layout: 'compact' },\n { w: 1023, c: 8, layout: 'compact' },\n { w: 599, c: 1, layout: 'list' },\n] as const;\n","import {\n Type,\n isDevMode,\n isStandalone,\n reflectComponentType,\n} from '@angular/core';\n\n\nexport interface RegisteredDashboardCardComponent {\n componentType: Type<unknown>;\n selector: string;\n inputs: ReadonlyMap<string, string>;\n}\n\nconst ELEMENT_SELECTOR_PATTERN = /^[a-z](?:[a-z0-9-]*)$/;\n\nconst dashboardCardRegistry = new Map<\n string,\n RegisteredDashboardCardComponent\n>();\n\nexport function addComponentToRegistry(componentTypes: Type<unknown>[]): void {\n for (const componentType of componentTypes) {\n const mirror = reflectComponentType(componentType);\n\n if (!mirror) {\n throw new Error(\n `Dashboard card registration failed: \"${getTypeName(componentType)}\" is not an Angular component.`,\n );\n }\n\n if (!isStandalone(componentType)) {\n throw new Error(\n `Dashboard card registration failed: \"${mirror.selector}\" must be a standalone Angular component.`,\n );\n }\n\n const selector = toElementSelector(mirror.selector, componentType);\n const existing = dashboardCardRegistry.get(selector);\n\n if (existing && existing.componentType !== componentType) {\n throw new Error(\n `Dashboard card registration failed: selector \"${selector}\" is already registered.`,\n );\n }\n\n dashboardCardRegistry.set(selector, {\n componentType,\n selector,\n inputs: createInputMap(mirror.inputs),\n });\n }\n}\n\nexport function getRegisteredDashboardCardComponent(\n selector: string,\n): RegisteredDashboardCardComponent | undefined {\n return dashboardCardRegistry.get(selector);\n}\n\nexport function resetDashboardCardRegistry(): void {\n dashboardCardRegistry.clear();\n}\n\nexport function warnForUnknownDashboardCardInput(\n selector: string,\n inputName: string,\n): void {\n if (!isDevMode()) return;\n\n console.warn(\n `Dashboard card \"${selector}\" ignores unknown Angular input \"${inputName}\".`,\n );\n}\n\nfunction createInputMap(\n inputs: readonly {\n readonly propName: string;\n readonly templateName: string;\n }[],\n): ReadonlyMap<string, string> {\n const bindings = new Map<string, string>();\n\n for (const input of inputs) {\n bindings.set(input.templateName, input.templateName);\n bindings.set(input.propName, input.templateName);\n }\n\n return bindings;\n}\n\nfunction toElementSelector(\n selector: string,\n componentType: Type<unknown>,\n): string {\n const normalized = selector.trim();\n\n if (!ELEMENT_SELECTOR_PATTERN.test(normalized)) {\n throw new Error(\n `Dashboard card registration failed: \"${getTypeName(componentType)}\" must use a single element selector. Received \"${selector}\".`,\n );\n }\n\n return normalized;\n}\n\nfunction getTypeName(componentType: Type<unknown>): string {\n return componentType.name.replace(/^_+/, '') || 'AnonymousComponent';\n}\n","import { CardConfig } from '../../models';\nimport {\n getRegisteredDashboardCardComponent,\n warnForUnknownDashboardCardInput,\n} from './dashboard-card-registry';\nimport { EffectCleanupRegisterFn, ViewContainerRef } from '@angular/core';\n\nexport function mountAngularCard(\n cfg: CardConfig,\n angularHost: ViewContainerRef,\n onCleanup: EffectCleanupRegisterFn,\n): void {\n const registeredComponent = getRegisteredDashboardCardComponent(\n cfg.component,\n );\n\n if (!registeredComponent) {\n console.warn(\n `[DashboardCard] Angular component \"${cfg.component}\" is not registered`,\n );\n return;\n }\n\n const componentRef = angularHost.createComponent(\n registeredComponent.componentType,\n );\n\n for (const [inputName, value] of Object.entries(cfg.componentInputs ?? {})) {\n const templateName = registeredComponent.inputs.get(inputName);\n\n if (!templateName) {\n warnForUnknownDashboardCardInput(cfg.component, inputName);\n continue;\n }\n\n componentRef.setInput(templateName, value);\n }\n\n componentRef.changeDetectorRef.detectChanges();\n\n onCleanup(() => {\n angularHost.clear();\n });\n}\n","import { CardConfig } from '../../models';\nimport { EffectCleanupRegisterFn, ViewContainerRef } from '@angular/core';\n\nexport type SapUiRequire = (\n deps: string[],\n cb: (\n ComponentContainer: new (cfg: {\n name: string;\n manifest: boolean;\n async: boolean;\n settings: Record<string, unknown>;\n }) => { placeAt(el: HTMLElement): void; destroy(): void },\n ) => void,\n) => void;\n\nexport function mountSapCard(\n cfg: CardConfig,\n container: ViewContainerRef,\n onCleanup: EffectCleanupRegisterFn,\n): void {\n const host = container.element.nativeElement;\n\n let sapContainer: { destroy(): void } | null = null;\n let isDestroyed = false;\n const sapRequire = (\n window as unknown as { sap?: { ui: { require: SapUiRequire } } }\n ).sap?.ui?.require;\n\n if (sapRequire) {\n sapRequire(['sap/ui/core/ComponentContainer'], (ComponentContainer) => {\n if (isDestroyed) return;\n\n const container = new ComponentContainer({\n name: cfg.component,\n manifest: true,\n async: true,\n settings: cfg.componentInputs ?? {},\n });\n\n container.placeAt(host);\n sapContainer = container;\n });\n } else {\n console.error('[DashboardCard] SAP UI5 is not available on window.sap');\n }\n\n onCleanup(() => {\n isDestroyed = true;\n sapContainer?.destroy();\n host.innerHTML = '';\n });\n}\n","import { EffectCleanupRegisterFn, Renderer2, ViewContainerRef } from '@angular/core';\nimport { CardConfig } from '../../models';\n\nexport function mountWcCard(\n cfg: CardConfig,\n container: ViewContainerRef,\n onCleanup: EffectCleanupRegisterFn,\n renderer: Renderer2,\n): void {\n const host = container.element.nativeElement;\n const element = renderer.createElement(cfg.component);\n\n for (const [key, value] of Object.entries(cfg.componentInputs ?? {})) {\n renderer.setProperty(element, key, value);\n }\n\n renderer.appendChild(host, element);\n\n onCleanup(() => {\n host.innerHTML = '';\n });\n}\n","import { CARD_TYPES, CardConfig } from '../models';\nimport {\n Component,\n Renderer2,\n ViewContainerRef,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/resize-corner.js';\nimport { mountSapCard, mountAngularCard, mountWcCard } from './utils';\n\n@Component({\n selector: 'mfp-dashboard-card',\n imports: [Button, Icon],\n templateUrl: './dashboard-card.component.html',\n styleUrl: './dashboard-card.component.scss',\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n '[style.grid-column]': 'gridColumn()',\n '[style.grid-row]': 'gridRow()',\n },\n})\nexport class DashboardCard {\n card = input.required<CardConfig>();\n editMode = input<boolean>(false);\n readonly removeCard = output<void>();\n protected readonly gridColumn = computed(() => {\n const width = this.card().w ?? 12;\n return this.createGridTrack(this.card().x, width);\n });\n protected readonly gridRow = computed(() => {\n const height = this.card().h ?? 100;\n return this.createGridTrack(this.card().y, height);\n });\n\n private host = viewChild('elementHost', { read: ViewContainerRef });\n private renderer = inject(Renderer2);\n\n constructor() {\n effect((onCleanup) => {\n const host = this.host();\n const cfg = this.card();\n if (!host || !cfg.component) return;\n\n host.clear();\n host.element.nativeElement.innerHTML = '';\n\n switch (cfg.type) {\n case CARD_TYPES.SAP_UI:\n mountSapCard(cfg, host, onCleanup);\n break;\n case CARD_TYPES.ANGULAR:\n mountAngularCard(cfg, host, onCleanup);\n break;\n case CARD_TYPES.WC:\n default:\n mountWcCard(cfg, host, onCleanup, this.renderer);\n break;\n }\n });\n }\n\n private createGridTrack(start: number | undefined, span: number): string {\n if (start === undefined) {\n return `span ${span}`;\n }\n\n return `${start + 1} / span ${span}`;\n }\n}\n","@if (card().component) {\n <div class=\"component-card\" [class.component-card--editing]=\"editMode()\">\n @if (editMode()) {\n <div class=\"remove-wrapper\">\n <ui5-button\n class=\"card__remove\"\n design=\"Default\"\n icon=\"decline\"\n [accessibleName]=\"\n 'Remove card: ' + (card().label || card().component)\n \"\n (click)=\"removeCard.emit()\"\n />\n </div>\n <ui5-icon\n class=\"card__resize-indicator\"\n name=\"resize-corner\"\n accessible-name=\"Resizable\"\n aria-hidden=\"true\"\n />\n }\n <div\n class=\"component-host\"\n [style.pointer-events]=\"editMode() ? 'none' : 'auto'\"\n >\n <div #elementHost></div>\n </div>\n </div>\n} @else {\n <div class=\"card\">\n <div\n class=\"card__body\"\n [style.pointer-events]=\"editMode() ? 'none' : 'auto'\"\n >\n <ng-content />\n </div>\n </div>\n}\n","import { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/alert.js';\n\n/**\n * Confirmation popup shown when the user tries to abandon edit mode while\n * there are unsaved dashboard changes. Emits `confirm` when the user accepts\n * the discard, `cancelled` when they back out.\n */\n@Component({\n selector: 'mfp-discard-changes-dialog',\n imports: [Button, Dialog, Icon, Title],\n templateUrl: './discard-changes-dialog.component.html',\n styleUrl: './discard-changes-dialog.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class DiscardChangesDialog {\n open = input<boolean>(false);\n\n readonly confirm = output<void>();\n readonly cancelled = output<void>();\n}\n","<ui5-dialog [open]=\"open()\" state=\"Critical\" (ui5BeforeClose)=\"cancelled.emit()\">\n <div class=\"discard-changes-dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">Discard Changes</ui5-title>\n </div>\n <div class=\"discard-changes-dialog__body\">\n Discard the changes? This action cannot be undone.\n </div>\n <div class=\"discard-changes-dialog__footer\" slot=\"footer\">\n <ui5-button design=\"Emphasized\" (click)=\"confirm.emit()\">Discard</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelled.emit()\">Cancel</ui5-button>\n </div>\n</ui5-dialog>\n","import { CardConfig } from '../models';\nimport {\n Component,\n ElementRef,\n ViewEncapsulation,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { List } from '@fundamental-ngx/ui5-webcomponents/list';\nimport { ListItemCustom } from '@fundamental-ngx/ui5-webcomponents/list-item-custom';\nimport { Switch } from '@fundamental-ngx/ui5-webcomponents/switch';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n selector: 'mfp-edit-cards-dialog',\n imports: [Button, Dialog, List, ListItemCustom, Switch, Title],\n templateUrl: './edit-cards-dialog.component.html',\n styleUrl: './edit-cards-dialog.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class EditCardsDialog {\n private readonly host = inject(ElementRef<HTMLElement>);\n\n availableCards = input<CardConfig[]>([]);\n addedCardsIds = input<Set<string>>(new Set());\n open = input<boolean>(false);\n\n readonly confirm = output<{ added: CardConfig[]; removed: string[] }>();\n readonly cancelled = output<void>();\n\n selectedIds = signal<Set<string>>(new Set());\n\n constructor() {\n effect(() => {\n if (this.open()) {\n const initial = new Set(\n this.availableCards()\n .filter((ac) => this.addedCardsIds().has(ac.id))\n .map((ac) => ac.id),\n );\n this.selectedIds.set(initial);\n }\n });\n }\n\n toggle(id: string): void {\n this.selectedIds.update((set) => {\n const next = new Set(set);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }\n\n /**\n * Tab moves focus across the switches directly, skipping the wrapping\n * ui5-li-custom rows. Past the last switch Tab goes to the first footer\n * button; before the first switch Shift+Tab goes to the last footer button.\n * The dialog's native focus trap takes care of cycling from the buttons\n * back into the list.\n */\n onSwitchKeydown(event: KeyboardEvent, _id: string): void {\n if (event.key !== 'Tab') {\n return;\n }\n const root: ParentNode =\n this.host.nativeElement.shadowRoot ?? this.host.nativeElement;\n const switches = Array.from(\n root.querySelectorAll('ui5-switch'),\n ) as HTMLElement[];\n const buttons = Array.from(\n root.querySelectorAll('ui5-button'),\n ) as HTMLElement[];\n const currentIndex = switches.indexOf(event.currentTarget as HTMLElement);\n if (currentIndex === -1) {\n return;\n }\n if (event.shiftKey) {\n const prev = switches[currentIndex - 1];\n if (prev) {\n event.preventDefault();\n event.stopPropagation();\n prev.focus();\n }\n // First switch: let Shift+Tab fall through so the dialog's focus trap\n // wraps to the last footer button.\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const next = switches[currentIndex + 1];\n if (next) {\n next.focus();\n return;\n }\n // Last switch: hand off to the first footer button.\n buttons[0]?.focus();\n }\n\n confirmSave(): void {\n const availableIds = new Set(this.availableCards().map((ac) => ac.id));\n const added = this.availableCards().filter(\n (ac) => this.selectedIds().has(ac.id) && !this.addedCardsIds().has(ac.id),\n );\n const removed = [...this.addedCardsIds()].filter(\n (id) => availableIds.has(id) && !this.selectedIds().has(id),\n );\n this.confirm.emit({ added, removed });\n }\n}\n","<ui5-dialog [open]=\"open()\" (ui5BeforeClose)=\"cancelled.emit()\">\n <div class=\"edit-cards-dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">Edit Cards</ui5-title>\n </div>\n <div class=\"edit-cards-dialog\">\n <ui5-list noDataText=\"No cards available.\" selectionMode=\"None\" separators=\"Inner\">\n @for (availableCard of availableCards(); track availableCard.id) {\n <ui5-li-custom\n [accessibleName]=\"availableCard.label || availableCard.component\"\n >\n <div class=\"edit-cards-dialog__list-item\">\n <span>{{ availableCard.label || availableCard.component }}</span>\n <ui5-switch\n [accessibleName]=\"availableCard.label || availableCard.component\"\n [checked]=\"selectedIds().has(availableCard.id)\"\n (ui5Change)=\"toggle(availableCard.id)\"\n (keydown)=\"onSwitchKeydown($event, availableCard.id)\"\n />\n </div>\n </ui5-li-custom>\n }\n </ui5-list>\n </div>\n <div class=\"edit-cards-dialog__footer\" slot=\"footer\">\n <ui5-button design=\"Emphasized\" (click)=\"confirmSave()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelled.emit()\">Cancel</ui5-button>\n </div>\n</ui5-dialog>\n","export const COMPACT_BREAKPOINT = 726;\nexport const CELL_HEIGHT = 10;\n","import { DashboardCard } from '../card/dashboard-card.component';\nimport { CardConfig, SectionConfig } from '../models';\nimport { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\n\n@Component({\n selector: 'mfp-dashboard-section',\n imports: [DashboardCard, Button],\n templateUrl: './dashboard-section.component.html',\n styleUrl: './dashboard-section.component.scss',\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n // Section width interpretation:\n // - `section.w` undefined OR equal to the active outer grid's column\n // count (12) → span the full outer row (`1 / -1`). This is what the\n // consumer means by \"full-width section\": fill whatever the dashboard\n // is showing right now (4 / 8 / 12 / 14 columns at sm/md/lg/xl).\n // - any other explicit `w` → span exactly that many outer columns.\n //\n // Without `1 / -1`, a `w: 12` section in an xl grid (14 cols) would only\n // cover 12 of 14 columns, leaving a dead 2-col gutter on the right and\n // squeezing the cards inside it relative to the outer grid's units.\n '[style.grid-column]':\n 'section().w === undefined || section().w === 12 ? \"1 / -1\" : \"span \" + section().w',\n },\n})\nexport class DashboardSection {\n section = input.required<SectionConfig>();\n cards = input<CardConfig[]>([]);\n /**\n * Optional override for the section's inner grid column count. Leave unset\n * (the default) to inherit the responsive defaults from CSS — the section\n * grid then mirrors the dashboard breakpoints (4/8/12/14 columns) via the\n * `mfp-dashboard` container query in dashboard-section.component.scss.\n * Pass an explicit number only when a section needs a fixed column count\n * regardless of width.\n */\n columns = input<number | undefined>(undefined);\n editMode = input<boolean>(false);\n readonly removeSection = output<void>();\n readonly removeCard = output<string>();\n}\n","<div\n class=\"section\"\n [class.section--edit]=\"editMode() && section().editable !== false\"\n>\n @if (editMode() && section().editable !== false) {\n <ui5-button\n class=\"section__remove\"\n design=\"Default\"\n icon=\"decline\"\n [accessibleName]=\"'Remove section: ' + (section().title || section().id)\"\n (click)=\"removeSection.emit()\"\n />\n }\n @if (section().title) {\n <div class=\"section__header\">\n <span class=\"section__title\">{{ section().title }}</span>\n </div>\n }\n <div class=\"section__grid\" [style.--cols]=\"columns() ?? null\">\n @for (card of cards(); track card.id) {\n <mfp-dashboard-card\n [card]=\"card\"\n [editMode]=\"editMode() && section().editable !== false\"\n (removeCard)=\"removeCard.emit($any(card.id))\"\n />\n }\n </div>\n</div>\n","import { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Dialog } from '@fundamental-ngx/ui5-webcomponents/dialog';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/alert.js';\n\n/**\n * Confirmation popup shown when the user attempts to navigate away from the\n * dashboard while there are unsaved edit-mode changes. The host (the\n * dashboard, an Angular CanDeactivate guard, a Luigi navigation listener,\n * etc.) is responsible for routing its intercepted navigation through this\n * dialog and acting on the emitted decision:\n * - `save` → persist changes, then proceed with navigation\n * - `discard` → revert changes, then proceed with navigation\n * - `cancelled` → abort navigation, stay on the page\n */\n@Component({\n selector: 'mfp-unsaved-changes-dialog',\n imports: [Button, Dialog, Icon, Title],\n templateUrl: './unsaved-changes-dialog.component.html',\n styleUrl: './unsaved-changes-dialog.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class UnsavedChangesDialog {\n open = input<boolean>(false);\n\n readonly save = output<void>();\n readonly discard = output<void>();\n readonly cancelled = output<void>();\n}\n","<ui5-dialog [open]=\"open()\" state=\"Critical\" (ui5BeforeClose)=\"cancelled.emit()\">\n <div class=\"unsaved-changes-dialog__header\" slot=\"header\">\n <ui5-title level=\"H5\">Unsaved Changes</ui5-title>\n </div>\n <div class=\"unsaved-changes-dialog__body\">\n You are leaving this page. Save or discard the changes to proceed. This\n action cannot be undone.\n </div>\n <div class=\"unsaved-changes-dialog__footer\" slot=\"footer\">\n <ui5-button design=\"Emphasized\" (click)=\"save.emit()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"discard.emit()\">Discard</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelled.emit()\">Cancel</ui5-button>\n </div>\n</ui5-dialog>\n","import { ButtonSettings } from '../../models';\nimport { DashboardCard } from '../card/dashboard-card.component';\nimport { addComponentToRegistry } from '../card/utils';\nimport { DiscardChangesDialog } from '../discard-changes-dialog/discard-changes-dialog.component';\nimport { EditCardsDialog } from '../edit-cards-dialog/edit-cards-dialog.component';\nimport {\n CardConfig,\n DASHBOARD_BREAKPOINTS,\n DashboardConfig,\n SectionConfig,\n} from '../models';\nimport { CELL_HEIGHT, COMPACT_BREAKPOINT } from '../models/constants';\nimport { DashboardSection } from '../section/dashboard-section.component';\nimport { UnsavedChangesDialog } from '../unsaved-changes-dialog/unsaved-changes-dialog.component';\nimport {\n Component,\n ElementRef,\n Injector,\n OnDestroy,\n OnInit,\n SecurityContext,\n Type,\n ViewEncapsulation,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n linkedSignal,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Menu } from '@fundamental-ngx/ui5-webcomponents/menu';\nimport { MenuItem } from '@fundamental-ngx/ui5-webcomponents/menu-item';\nimport { MenuSeparator } from '@fundamental-ngx/ui5-webcomponents/menu-separator';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\nimport '@ui5/webcomponents-icons/dist/action-settings.js';\nimport '@ui5/webcomponents-icons/dist/menu2.js';\nimport '@ui5/webcomponents-icons/dist/user-edit.js';\nimport { GridStackNode, GridStackOptions } from 'gridstack';\nimport {\n GridstackComponent,\n GridstackItemComponent,\n nodesCB,\n} from 'gridstack/dist/angular';\n\ndocument.body.classList.add('ui5-content-density-compact');\n\n@Component({\n selector: 'mfp-dashboard',\n imports: [\n GridstackComponent,\n GridstackItemComponent,\n DiscardChangesDialog,\n EditCardsDialog,\n UnsavedChangesDialog,\n DashboardSection,\n DashboardCard,\n Button,\n Icon,\n Menu,\n MenuItem,\n MenuSeparator,\n Title,\n ],\n templateUrl: './dashboard.component.html',\n styleUrl: './dashboard.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n '[style.background-image]':\n 'config().backgroundImageUrl ? \"url(\" + config().backgroundImageUrl + \")\" : null',\n },\n})\nexport class Dashboard implements OnInit, OnDestroy {\n static registerAngularComponents(componentTypes: Type<unknown>[]): void {\n addComponentToRegistry(componentTypes);\n }\n\n config = input.required<DashboardConfig>();\n sections = model<SectionConfig[]>([]);\n cards = model<CardConfig[]>([]);\n availableCards = input<CardConfig[]>([]);\n\n readonly saved = output<{ sections: SectionConfig[]; cards: CardConfig[] }>();\n readonly actionButtonClick = output<{\n event: MouseEvent;\n action: ButtonSettings;\n }>();\n readonly unsavedChangesChange = output<boolean>();\n\n editMode = signal(false);\n compactToolbar = signal(false);\n toolbarMenuOpen = signal(false);\n\n /** True once the user has dragged/resized any grid item while in edit mode. */\n private gridDirty = signal(false);\n\n /** JSON snapshots of sections/cards taken on entering edit mode, used to detect changes. */\n private sectionsSnapshotJson = '';\n private cardsSnapshotJson = '';\n\n /**\n * True when the user is in edit mode AND has made any change (sections/cards\n * mutated, or grid items moved/resized). Resets when entering edit mode and\n * after save/cancel.\n */\n hasUnsavedChanges = computed(() => {\n if (!this.editMode()) return false;\n if (this.gridDirty()) return true;\n return (\n JSON.stringify(this.sections()) !== this.sectionsSnapshotJson ||\n JSON.stringify(this.cards()) !== this.cardsSnapshotJson\n );\n });\n\n private sectionsSnapshot: SectionConfig[] = [];\n private cardsSnapshot: CardConfig[] = [];\n private gridStackItems = viewChild.required<GridstackComponent>('grid');\n private addCardBtn = viewChild<Button>('editCardsBtn');\n private resizeObserver?: ResizeObserver;\n private readonly hostEl = inject(ElementRef<HTMLElement>);\n private readonly injector = inject(Injector);\n private readonly sanitizer = inject(DomSanitizer);\n\n protected safeTitle = computed((): SafeHtml => {\n const clean =\n this.sanitizer.sanitize(SecurityContext.HTML, this.config().title) ?? '';\n return this.sanitizer.bypassSecurityTrustHtml(clean);\n });\n\n protected safeDescription = computed((): SafeHtml | null => {\n const desc = this.config().description;\n if (!desc) return null;\n\n const clean = this.sanitizer.sanitize(SecurityContext.HTML, desc) ?? '';\n return this.sanitizer.bypassSecurityTrustHtml(clean);\n });\n\n protected gridOptions = computed(\n (): GridStackOptions => ({\n cellHeight: CELL_HEIGHT,\n sizeToContent: true,\n disableResize: !this.editMode(),\n disableDrag: !this.editMode(),\n marginBottom: 0,\n marginLeft: 0,\n marginRight: 0,\n columnOpts: {\n // Source of truth: ../models/breakpoints.ts (paired with\n // ../models/_breakpoints.scss for the section grid's container queries).\n breakpoints: [...DASHBOARD_BREAKPOINTS],\n },\n }),\n );\n\n cardDialogOpen = signal(false);\n discardDialogOpen = signal(false);\n unsavedNavDialogOpen = signal(false);\n /** Callback that resumes the intercepted navigation once the user resolves the dialog. */\n private pendingNavigation: (() => void) | null = null;\n /** beforeunload handler kept on instance so add/removeEventListener pair up. */\n private readonly beforeUnloadHandler = (event: BeforeUnloadEvent): void => {\n if (this.hasUnsavedChanges()) {\n event.preventDefault();\n // Required by older browsers; the string itself is ignored — modern\n // browsers always render their own generic prompt.\n event.returnValue = '';\n }\n };\n customActions = computed(() => this.config().customActions ?? []);\n addedCardsIds = computed(() => new Set(this.cards().map((c) => c.id)));\n\n editViewButton = computed(() => ({\n icon: 'action-settings',\n design: 'Transparent' as const,\n tooltip: 'Edit View',\n text: '',\n ...this.config().buttonsSettings?.editViewButton,\n }));\n\n editCardsButton = computed(() => ({\n icon: '',\n design: 'Default' as const,\n tooltip: '',\n text: 'Edit Cards',\n ...this.config().buttonsSettings?.editCardsButton,\n }));\n\n sectionCards = computed(() => {\n const all = this.cards();\n return (sectionId: string) => all.filter((c) => c.sectionId === sectionId);\n });\n\n cardsPosition = new Map<\n string,\n { x?: number; y?: number; w?: number; h?: number }\n >();\n looseCards = linkedSignal(() => this.cards().filter((c) => !c.sectionId));\n\n private newGridStackNodes: GridStackNode[] = [];\n\n constructor() {\n effect(() => this.unsavedChangesChange.emit(this.hasUnsavedChanges()));\n }\n\n ngOnInit(): void {\n this.resizeObserver = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n this.compactToolbar.set(width < COMPACT_BREAKPOINT);\n });\n this.resizeObserver.observe(this.hostEl.nativeElement);\n window.addEventListener('beforeunload', this.beforeUnloadHandler);\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n window.removeEventListener('beforeunload', this.beforeUnloadHandler);\n }\n\n onMenuItemClick(actionId: string, event: Event): void {\n if (actionId === 'edit-view') {\n this.enterEditMode();\n return;\n }\n const action = this.customActions().find((a) => a.action === actionId);\n if (action) {\n this.actionButtonClick.emit({ event: event as MouseEvent, action });\n }\n }\n\n enterEditMode(): void {\n const gridStackNodes = this.gridStackItems()\n .gridstackItems?.toArray()\n .map((node) => node.options);\n\n if (gridStackNodes) {\n this.saveCardsPosition(gridStackNodes);\n }\n\n this.sectionsSnapshot = [...this.sections()];\n this.cardsSnapshot = [...this.cards()];\n this.sectionsSnapshotJson = JSON.stringify(this.sections());\n this.cardsSnapshotJson = JSON.stringify(this.cards());\n this.gridDirty.set(false);\n this.editMode.set(true);\n afterNextRender(\n () => {\n this.addCardBtn()?.element.focus();\n },\n { injector: this.injector },\n );\n }\n\n saveEdit(): void {\n this.saveCardsPosition(this.newGridStackNodes);\n this.saved.emit({\n sections: this.sections(),\n cards: this.cards().map((c) => {\n const pos = this.cardsPosition.get(c.id);\n return {\n ...c,\n x: pos?.x,\n y: pos?.y,\n w: pos?.w ?? c.w,\n h: pos?.h ?? c.h,\n };\n }),\n });\n this.gridDirty.set(false);\n this.editMode.set(false);\n }\n\n cancelEdit(): void {\n if (this.hasUnsavedChanges()) {\n this.discardDialogOpen.set(true);\n return;\n }\n this.discardEdit();\n }\n\n /**\n * Confirms abandoning unsaved edit-mode changes: closes the discard popup\n * and reverts sections/cards to the snapshot taken on entering edit mode.\n */\n confirmDiscard(): void {\n this.discardDialogOpen.set(false);\n this.discardEdit();\n }\n\n /**\n * Cancels the discard popup and keeps the user in edit mode with their\n * pending changes intact.\n */\n cancelDiscard(): void {\n this.discardDialogOpen.set(false);\n }\n\n /**\n * Public framework-agnostic navigation guard. Consumer apps (Angular Router\n * CanDeactivate guard, Luigi navigation listener, plain `<a>` click handler,\n * window history listener — anything) call this before performing their\n * navigation:\n *\n * if (dashboard.requestNavigation(() => router.navigateByUrl(target))) {\n * // already navigated synchronously — clean state\n * } else {\n * // dashboard popped the unsaved-changes dialog; the navigation will\n * // resume from the user's choice (Save → proceed, Discard → proceed,\n * // Cancel → drop the request entirely).\n * }\n *\n * Returns `true` when navigation may proceed immediately (no unsaved\n * changes — `proceed` was invoked synchronously). Returns `false` when the\n * dialog has been opened and the caller must NOT navigate; the dashboard\n * will run the callback later if the user picks Save or Discard.\n *\n * If a previous navigation is already pending, that one is dropped in\n * favour of the new request — Cancel always means \"stay here\", so losing\n * the older queued navigation is the correct outcome.\n */\n requestNavigation(proceed: () => void): boolean {\n if (!this.hasUnsavedChanges()) {\n proceed();\n return true;\n }\n this.pendingNavigation = proceed;\n this.unsavedNavDialogOpen.set(true);\n return false;\n }\n\n /** Save → persist changes, close the dialog, then resume navigation. */\n onUnsavedNavSave(): void {\n this.unsavedNavDialogOpen.set(false);\n this.saveEdit();\n this.runPendingNavigation();\n }\n\n /** Discard → revert to snapshot, close the dialog, then resume navigation. */\n onUnsavedNavDiscard(): void {\n this.unsavedNavDialogOpen.set(false);\n this.discardEdit();\n this.runPendingNavigation();\n }\n\n /** Cancel → drop the queued navigation and stay in edit mode. */\n onUnsavedNavCancel(): void {\n this.unsavedNavDialogOpen.set(false);\n this.pendingNavigation = null;\n }\n\n private runPendingNavigation(): void {\n const pending = this.pendingNavigation;\n this.pendingNavigation = null;\n pending?.();\n }\n\n private discardEdit(): void {\n this.sections.set(this.sectionsSnapshot);\n this.cards.set(\n this.cardsSnapshot.map((c) => {\n const pos = this.cardsPosition.get(c.id);\n return { ...c, x: pos?.x, y: pos?.y };\n }),\n );\n this.cardDialogOpen.set(false);\n this.gridDirty.set(false);\n this.editMode.set(false);\n }\n\n removeSection(id: string): void {\n this.sections.update((list) => list.filter((s) => s.id !== id));\n this.cards.update((list) => list.filter((c) => c.sectionId !== id));\n }\n\n removeCard(id: string): void {\n this.cardsPosition.delete(id);\n this.cards.update((list) => list.filter((c) => c.id !== id));\n }\n\n openCardPanel(): void {\n this.cardDialogOpen.set(true);\n }\n\n closeCardPanel(): void {\n this.cardDialogOpen.set(false);\n }\n\n onCardsEdited(event: { added: CardConfig[]; removed: string[] }): void {\n this.cards.update((list) => {\n const withoutRemoved = list.filter((c) => !event.removed.includes(c.id));\n return [...withoutRemoved, ...event.added.map((ac) => ({ ...ac }))];\n });\n this.closeCardPanel();\n }\n\n onGridChange(event: nodesCB): void {\n this.newGridStackNodes = event.nodes;\n if (this.editMode()) {\n this.gridDirty.set(true);\n }\n }\n\n private saveCardsPosition(items: GridStackNode[]): void {\n items.forEach((node) => {\n if (node.id) {\n this.cardsPosition.set(node.id, {\n x: node.x,\n y: node.y,\n w: node.w,\n h: node.h,\n });\n }\n });\n }\n}\n","<div class=\"mfp-dashboard\">\n <div class=\"mfp-dashboard__topbar\">\n <div class=\"mfp-dashboard__topbar-row\">\n <div class=\"mfp-dashboard__header\">\n <div class=\"mfp-dashboard__title-row\">\n @if (config().title) {\n <ui5-title level=\"H3\" size=\"H3\" wrapping-type=\"Normal\">\n <span [innerHTML]=\"safeTitle()\"></span>\n </ui5-title>\n }\n @if (hasUnsavedChanges()) {\n <div class=\"mfp-dashboard__unsaved-changes\" role=\"status\">\n <ui5-icon\n class=\"mfp-dashboard__unsaved-changes-icon\"\n name=\"user-edit\"\n accessible-name=\"Unsaved Changes\"\n />\n <span class=\"mfp-dashboard__unsaved-changes-text\"\n >Unsaved Changes</span\n >\n </div>\n }\n </div>\n @if (config().description) {\n <ui5-title level=\"H5\" size=\"H5\" wrapping-type=\"Normal\">\n <span\n class=\"mfp-dashboard__description\"\n [innerHTML]=\"safeDescription()\"\n ></span>\n </ui5-title>\n }\n </div>\n\n <div class=\"mfp-dashboard__toolbar\">\n @if (editMode()) {\n <ui5-button\n #editCardsBtn\n id=\"edit-cards-btn\"\n [accessibleName]=\"\n editCardsButton().text ||\n editCardsButton().tooltip ||\n 'Edit Cards'\n \"\n [design]=\"editCardsButton().design\"\n [icon]=\"editCardsButton().icon\"\n [tooltip]=\"editCardsButton().tooltip\"\n (click)=\"openCardPanel()\"\n >{{ editCardsButton().text }}</ui5-button\n >\n } @else if (compactToolbar()) {\n <ui5-button\n #menuBtn\n accessibleName=\"Actions\"\n design=\"Transparent\"\n icon=\"menu2\"\n tooltip=\"Actions\"\n (click)=\"toolbarMenuOpen.update((v) => !v)\"\n />\n <ui5-menu\n [open]=\"toolbarMenuOpen()\"\n [opener]=\"menuBtn.element\"\n (ui5Close)=\"toolbarMenuOpen.set(false)\"\n (ui5ItemClick)=\"\n onMenuItemClick(\n $any($event).detail.item.dataset['action'],\n $event\n )\n \"\n (ui5Open)=\"toolbarMenuOpen.set(true)\"\n >\n @if (config().editButtonFirst && config().editable) {\n <ui5-menu-item\n data-action=\"edit-view\"\n [icon]=\"editViewButton().icon\"\n [text]=\"editViewButton().text || 'Edit View'\"\n />\n @if (customActions().length) {\n <ui5-menu-separator />\n }\n }\n @for (action of customActions(); track action.action) {\n <ui5-menu-item\n [attr.data-action]=\"action.action\"\n [icon]=\"action.icon ?? ''\"\n [text]=\"action.text ?? ''\"\n />\n }\n @if (!config().editButtonFirst && config().editable) {\n <ui5-menu-separator />\n <ui5-menu-item\n data-action=\"edit-view\"\n [icon]=\"editViewButton().icon\"\n [text]=\"editViewButton().text || 'Edit View'\"\n />\n }\n </ui5-menu>\n } @else {\n @if (config().editButtonFirst && config().editable) {\n <ui5-button\n [accessibleName]=\"\n editViewButton().text || editViewButton().tooltip || 'Edit View'\n \"\n [design]=\"editViewButton().design\"\n [icon]=\"editViewButton().icon\"\n [tooltip]=\"editViewButton().tooltip\"\n (click)=\"enterEditMode()\"\n >{{ editViewButton().text }}</ui5-button\n >\n }\n @for (action of customActions(); track action.action) {\n <ui5-button\n [accessibleName]=\"action.text || action.tooltip || action.action\"\n [design]=\"action.design ?? 'Default'\"\n [endIcon]=\"action?.endIcon\"\n [icon]=\"action.icon ?? ''\"\n [tooltip]=\"action.tooltip ?? ''\"\n (click)=\"\n actionButtonClick.emit({ event: $event, action: action })\n \"\n >{{ action.text }}</ui5-button\n >\n }\n @if (!config().editButtonFirst && config().editable) {\n <ui5-button\n [accessibleName]=\"\n editViewButton().text || editViewButton().tooltip || 'Edit View'\n \"\n [design]=\"editViewButton().design\"\n [icon]=\"editViewButton().icon\"\n [tooltip]=\"editViewButton().tooltip\"\n (click)=\"enterEditMode()\"\n >{{ editViewButton().text }}</ui5-button\n >\n }\n }\n </div>\n </div>\n\n <div class=\"mfp-dashboard__subheader\">\n <ng-content select=\"[slot=dashboard-subheader]\" />\n </div>\n </div>\n\n <div class=\"mfp-sections-container\">\n @for (section of sections(); track section.id) {\n <mfp-dashboard-section\n [cards]=\"sectionCards()(section.id)\"\n [editMode]=\"editMode()\"\n [section]=\"section\"\n (removeCard)=\"removeCard($event)\"\n (removeSection)=\"removeSection(section.id)\"\n />\n }\n </div>\n\n <gridstack\n #grid\n [options]=\"gridOptions()\"\n (addedCB)=\"onGridChange($event)\"\n (changeCB)=\"onGridChange($event)\"\n (removedCB)=\"onGridChange($event)\"\n >\n @for (card of looseCards(); track card.id) {\n <gridstack-item [options]=\"card\">\n <mfp-dashboard-card\n [card]=\"card\"\n [editMode]=\"editMode()\"\n (removeCard)=\"removeCard($any(card.id))\"\n />\n </gridstack-item>\n }\n </gridstack>\n\n @if (editMode()) {\n <div class=\"mfp-dashboard__edit-bar\">\n <ui5-button design=\"Emphasized\" (click)=\"saveEdit()\">Save</ui5-button>\n <ui5-button design=\"Transparent\" (click)=\"cancelEdit()\"\n >Cancel</ui5-button\n >\n </div>\n }\n</div>\n\n<mfp-edit-cards-dialog\n [addedCardsIds]=\"addedCardsIds()\"\n [availableCards]=\"availableCards()\"\n [open]=\"cardDialogOpen()\"\n (cancelled)=\"closeCardPanel()\"\n (confirm)=\"onCardsEdited($event)\"\n/>\n\n<mfp-discard-changes-dialog\n [open]=\"discardDialogOpen()\"\n (cancelled)=\"cancelDiscard()\"\n (confirm)=\"confirmDiscard()\"\n/>\n\n<mfp-unsaved-changes-dialog\n [open]=\"unsavedNavDialogOpen()\"\n (cancelled)=\"onUnsavedNavCancel()\"\n (discard)=\"onUnsavedNavDiscard()\"\n (save)=\"onUnsavedNavSave()\"\n/>\n","import { Component, ViewEncapsulation, input, output } from '@angular/core';\nimport { Card } from '@fundamental-ngx/ui5-webcomponents/card';\nimport { CardHeader } from '@fundamental-ngx/ui5-webcomponents/card-header';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport '@ui5/webcomponents-icons/dist/AllIcons.js';\n\n@Component({\n selector: 'mfp-visited-service-card',\n imports: [Card, CardHeader, Icon],\n templateUrl: './visited-service-card.component.html',\n styleUrl: './visited-service-card.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom,\n})\nexport class VisitedServiceCard {\n serviceType = input.required<string>();\n serviceName = input.required<string>();\n serviceDescription = input.required<string>();\n serviceIcon = input.required<string>();\n path = input.required<string>();\n\n readonly cardClick = output<string>();\n}\n","<div\n class=\"visited-card-wrapper\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"cardClick.emit(path())\"\n (keydown.enter)=\"cardClick.emit(path())\"\n>\n <span class=\"visited-card__type-badge\">{{ serviceType() }}</span>\n <ui5-card class=\"visited-card\">\n <ui5-card-header\n slot=\"header\"\n [interactive]=\"true\"\n [subtitleText]=\"serviceDescription()\"\n [titleText]=\"serviceName()\"\n >\n <ui5-icon\n class=\"visited-card__icon\"\n slot=\"avatar\"\n [name]=\"serviceIcon()\"\n />\n </ui5-card-header>\n </ui5-card>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Button } from '@fundamental-ngx/ui5-webcomponents/button';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n selector: 'mfp-favorites',\n imports: [Button, Icon, Title],\n templateUrl: './favorites.component.html',\n styleUrl: './favorites.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class Favorites {\n readonly items = [\n { label: 'Create Account', icon: 'add', action: 'create-account' },\n { label: 'Start Approval', icon: 'workflow-tasks', action: 'start-approval' },\n { label: 'Add User to Account', icon: 'person-placeholder', action: 'add-user' },\n ];\n}\n","<div class=\"favorites\">\n <ui5-title class=\"favorites__title\" level=\"H5\">Favorites</ui5-title>\n <div class=\"favorites__list\">\n @for (item of items; track item.action) {\n <div class=\"favorites__item\">\n <ui5-icon class=\"favorites__icon\" [name]=\"item.icon\" />\n <span class=\"favorites__label\">{{ item.label }}</span>\n <ui5-button design=\"Transparent\" [icon]=\"item.icon\">{{ item.label }}</ui5-button>\n </div>\n }\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { Icon } from '@fundamental-ngx/ui5-webcomponents/icon';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n/** Possible health states for a service. */\nexport type ServiceStatusValue = 'operational' | 'degraded' | 'outage' | 'maintenance';\n\n/** A single service entry displayed in the service-status card. */\nexport interface ServiceStatusItem {\n /** Display name of the service. */\n name: string;\n /** SAP UI5 icon name used as the service icon. */\n icon: string;\n /** Current health status of the service. */\n status: ServiceStatusValue;\n}\n\n@Component({\n selector: 'mfp-service-status-card',\n imports: [Icon, Title],\n templateUrl: './service-status-card.component.html',\n styleUrl: './service-status-card.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class ServiceStatusCard {\n readonly services: ServiceStatusItem[] = [\n { name: 'API Gateway', icon: 'connected', status: 'operational' },\n { name: 'Identity Service', icon: 'customer', status: 'operational' },\n { name: 'Database Cluster', icon: 'database', status: 'degraded' },\n { name: 'Message Queue', icon: 'email', status: 'operational' },\n { name: 'Object Storage', icon: 'storage', status: 'maintenance' },\n { name: 'Audit Log', icon: 'log', status: 'outage' },\n ];\n\n readonly statusConfig: Record<ServiceStatusValue, { label: string; icon: string; colorClass: string }> = {\n operational: { label: 'Operational', icon: 'status-positive', colorClass: 'status--operational' },\n degraded: { label: 'Degraded', icon: 'status-critical', colorClass: 'status--degraded' },\n outage: { label: 'Outage', icon: 'status-negative', colorClass: 'status--outage' },\n maintenance: { label: 'Maintenance', icon: 'status-inactive', colorClass: 'status--maintenance' },\n };\n}\n","<div class=\"service-status\">\n <ui5-title class=\"service-status__title\" level=\"H5\">Service Availability</ui5-title>\n <div class=\"service-status__list\">\n @for (service of services; track service.name) {\n <div class=\"service-status__item\">\n <ui5-icon class=\"service-status__icon\" [name]=\"service.icon\" />\n <span class=\"service-status__name\">{{ service.name }}</span>\n <div [class]=\"'service-status__status ' + statusConfig[service.status].colorClass\">\n <ui5-icon class=\"service-status__status-icon\" [name]=\"statusConfig[service.status].icon\" />\n <span class=\"service-status__status-label\">{{ statusConfig[service.status].label }}</span>\n </div>\n </div>\n }\n </div>\n</div>\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { List } from '@fundamental-ngx/ui5-webcomponents/list';\nimport { ListItemStandard } from '@fundamental-ngx/ui5-webcomponents/list-item-standard';\nimport { Title } from '@fundamental-ngx/ui5-webcomponents/title';\n\n@Component({\n selector: 'mfp-whats-new',\n imports: [List, ListItemStandard, Title],\n templateUrl: './whats-new.component.html',\n styleUrl: './whats-new.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class WhatsNew {\n readonly headlines = [\n {\n title: 'Kubernetes 1.32 Released',\n description: 'Improved scheduling, new APIs and graduated features.',\n icon: 'cloud',\n },\n {\n title: 'Angular 20 Signals Stable',\n description: 'Signal-based reactivity is now production-ready.',\n icon: 'developer-settings',\n },\n {\n title: 'WebAssembly WASI 2.0 Preview',\n description: 'System interface advances bring server-side WASM closer.',\n icon: 'technical-object',\n },\n {\n title: 'OpenTelemetry Hits 1.0',\n description: 'Unified observability standard lands in enterprise stacks.',\n icon: 'monitor-payments',\n },\n {\n title: 'Rust Enters Linux Kernel Mainstream',\n description: 'More subsystems accept Rust driver contributions.',\n icon: 'settings',\n },\n {\n title: 'TypeScript 5.8 Performance Boost',\n description: 'Declaration emit is up to 10x faster in large projects.',\n icon: 'accelerated',\n },\n ];\n}\n","<div class=\"whats-new\">\n <ui5-title class=\"whats-new__title\" level=\"H5\">What's New</ui5-title>\n <ui5-list class=\"whats-new__list\" separators=\"Inner\">\n @for (item of headlines; track item.title) {\n <ui5-li [description]=\"item.description\" [icon]=\"item.icon\">\n {{ item.title }}\n </ui5-li>\n }\n </ui5-list>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}