@yuuvis/client-components 3.2.1 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/yuuvis-client-components-widget-grid.mjs +586 -418
- package/fesm2022/yuuvis-client-components-widget-grid.mjs.map +1 -1
- package/lib/assets/i18n/de.json +1 -0
- package/lib/assets/i18n/en.json +1 -0
- package/package.json +2 -2
- package/types/yuuvis-client-components-widget-grid.d.ts +162 -127
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-components-widget-grid.mjs","sources":["../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid-event.service.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widgets/noop/noop.component.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widgets/noop/noop.component.html","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid-registry.service.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid.utils.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid.service.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-picker/widget-picker.component.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-picker/widget-picker.component.html","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid.component.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid.component.html","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid-workspaces/workspace-edit/workspace-edit.component.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid-workspaces/workspace-edit/workspace-edit.component.html","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid-workspaces/widget-grid-workspaces.component.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid-workspaces/widget-grid-workspaces.component.html","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid.module.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/yuuvis-client-components-widget-grid.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { GridItemEvent } from './widget-grid.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WidgetGridEventService {\n private widgetGridEventSource = new ReplaySubject<GridItemEvent>();\n\n public widgetEvents$: Observable<GridItemEvent> =\n this.widgetGridEventSource.asObservable();\n \n trigger(evt: GridItemEvent) {\n this.widgetGridEventSource.next(evt);\n }\n}\n","import { Component, Input } from '@angular/core';\n\nimport { IWidgetComponent } from '../../widget-grid.interface';\n\n@Component({\n selector: 'yuv-noop',\n templateUrl: './noop.component.html',\n styleUrls: ['./noop.component.scss'],\n})\nexport class NoopComponent implements IWidgetComponent<any> {\n @Input() widgetConfig: any;\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><circle cx=\"15.5\" cy=\"9.5\" r=\"1.5\"/><circle cx=\"8.5\" cy=\"9.5\" r=\"1.5\"/><path d=\"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm0-6c-2.33 0-4.32 1.45-5.12 3.5h1.67c.69-1.19 1.97-2 3.45-2s2.75.81 3.45 2h1.67c-.8-2.05-2.79-3.5-5.12-3.5z\"/></svg>","import { inject, Injectable, Type } from '@angular/core';\n\nimport { TranslateService } from '@yuuvis/client-core';\nimport { GridWidget } from './widget-grid.interface';\nimport { NoopComponent } from './widgets/noop/noop.component';\n\n/**\n * This service provides the list of widgets that could be added\n * to a widget grid. You could use it to register your own\n * widgets.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class WidgetGridRegistry {\n readonly translate = inject(TranslateService);\n\n /**\n * List of pre-registered widgets provided out-of-the-box\n * by the widget grid module\n */\n private registeredWidgets: Array<GridWidget<unknown>> = [];\n /**\n * Buckets are collection of widget references.\n * You can put any widget registered gloabally into a bucket. Later on you can grab\n * widgets from a certain bucket. This enables apps to structure their widgets when e.g.\n * using multiple widget grids with their own set of available widgets.\n */\n private widgetBuckets: Record<string, string[]> = {};\n\n /**\n * Get the noop component. This component will be rendered in\n * the grid tile if not matching widget could be found in the\n * list of registered widgets. It will show some kind of 'not\n * found' message and provide the controls to remove that none\n * existing component from the widget grid.\n * @returns NoopComponent\n */\n getNoopWidget(): GridWidget<any> {\n return {\n id: 'noop',\n label: this.translate.instant('yuv.widget-grid.widget.noop.label'),\n widgetComponent: NoopComponent\n };\n }\n\n /**\n * Setup components are the administrative part of a widget. They\n * are used to set up a widget. Not all the widgets will have a setup\n * component.\n * @param widgetName The widgets name\n * @returns The setup component of a widget. Throws error if there\n * is not widget registered with the given name\n */\n getWidgetSetupComponent(widgetName: string): Type<any> | undefined {\n const widget = this.registeredWidgets.find((w) => w.id === widgetName);\n if (!widget) throw Error('Widget setup component not found');\n return widget.setupComponent;\n }\n\n /**\n * Get the component for a widget. This is the component that will\n * be rendered in a grid tile.\n * @param widgetName The widgets name\n * @returns The widget component or noop component if there is\n * no component registered with the given name\n */\n getWidgetComponent(widgetName: string): Type<any> {\n const widget = this.registeredWidgets.find((w) => w.id === widgetName);\n if (!widget) console.error('Widget component not found');\n return widget?.widgetComponent || NoopComponent;\n }\n\n /**\n * Adds a new widget to the list of registered widgets. That way\n * you can create custom widgets that are then available to be\n * added to a users widget grid.\n * @param widget The widget to be registered\n * @param bucket List of buckets to register to. If a bucket does\n * not exist it'll be created.\n */\n registerGridWidget(widget: GridWidget<any>, buckets?: string[]) {\n const existingWidget = this.registeredWidgets.find((w) => w.id === widget.id);\n if (!existingWidget) this.registeredWidgets.push(widget);\n\n if (buckets?.length) {\n buckets.forEach((b: string) => {\n this._addToBucket(b, widget.id);\n });\n }\n }\n\n /**\n * Register a collection of widgets\n * @param widgets The widgets to be registered\n * @param bucket List of buckets to register to. If a bucket does\n * not exist it'll be created.\n */\n registerGridWidgets(widgets: GridWidget<any>[], buckets?: string[]) {\n const alreadyRegisteredWidgetNames = this.registeredWidgets.map((w) => w.id);\n const widgetsToRegister = widgets.filter((w) => !alreadyRegisteredWidgetNames.includes(w.id));\n this.registeredWidgets = [...this.registeredWidgets, ...widgetsToRegister.map((w) => this.#translateLabel(w))];\n\n if (buckets?.length) {\n buckets.forEach((b) => widgets.forEach((w) => this._addToBucket(b, w.id)));\n }\n }\n\n #translateLabel(widget: GridWidget<any>): GridWidget<any> {\n const translatedLabel = this.translate.instant(widget.label);\n return { ...widget, label: translatedLabel && !translatedLabel.startsWith('!missing') ? translatedLabel : widget.label };\n }\n\n private _addToBucket(bucket: string, widgetName: string) {\n if (!this.widgetBuckets[bucket]) this.widgetBuckets[bucket] = [];\n this.widgetBuckets[bucket].push(widgetName);\n }\n\n removeRegisteredWidget(id: string) {\n this.registeredWidgets = this.registeredWidgets.filter((w) => w.id !== id);\n }\n\n clearRegisteredWidget() {\n this.registeredWidgets = [];\n }\n\n /**\n * Get registered widgets. This list could be narrowed down by a list\n * of buckets. Buckets are lists of registered widgets registered for\n * a certain key (the buckets name).\n * @param buckets name of buckets to restrict the widgets to\n * @returns Array of grid widgets\n */\n getRegisteredWidgets(buckets?: string[]): Array<GridWidget<any>> {\n if (buckets?.length) {\n // buckets may contain wildcards ...\n // grab all buckets matching the wildcards\n const matchedBuckets: Record<string, number> = {};\n buckets.forEach((b: string) => {\n if (b.match(/[*?]/)) {\n // bucket has a pattern\n Object.keys(this.widgetBuckets).forEach((wb: string) => {\n if (this._wildcardMatch(wb, b)) matchedBuckets[wb] = 0;\n });\n } else matchedBuckets[b] = 0;\n });\n const bucketWidgetNames: Record<string, number> = {};\n Object.keys(matchedBuckets).forEach((b) =>\n this.widgetBuckets[b].forEach((widgetName: string) => {\n bucketWidgetNames[widgetName] = 0;\n })\n );\n const widgetNames: string[] = Object.keys(bucketWidgetNames);\n return this.registeredWidgets.filter((w: GridWidget<any>) => widgetNames.includes(w.id)).map((w) => this.#translateLabel(w));\n } else return this.registeredWidgets.map((w) => this.#translateLabel(w));\n }\n\n private _wildcardMatch(text: string, pattern: string) {\n const regexPattern = new RegExp('^' + pattern.replace(/\\?/g, '.').replace(/\\*/g, '.*') + '$');\n return regexPattern.test(text);\n }\n}\n","export class WidgetGridUtils {\n static PREF_FUNCTION = 'Function';\n static PREF_RANGEVALUE = 'RangeValue';\n\n /**\n * Takes a `WidgetGridItemConfig` and stringifies it. The challenge\n * here is that callback functions should also be stringified.\n * @param gridItemConfig the config object\n */\n static gridConfigStringify(o: any): string {\n return JSON.stringify(o, (key, value) => {\n if (typeof value === 'function') {\n return `/${WidgetGridUtils.PREF_FUNCTION}(${value.toString()})/`;\n }\n return value;\n });\n }\n\n /**\n * Takes a string stringified with `gridConfigStringify()` and parses it\n * to output a proper WidgetGridItemConfig.\n * @param stringifiedConfig stringified widget grid config\n */\n static gridConfigParse(stringifiedConfig: string): any {\n return JSON.parse(stringifiedConfig, function (key, value) {\n if (\n typeof value === 'string' &&\n value.startsWith(`/${WidgetGridUtils.PREF_FUNCTION}(`) &&\n // value.startsWith('/Function(') &&\n value.endsWith(')/')\n ) {\n value = value.substring(WidgetGridUtils.PREF_FUNCTION.length + 2, value.length - 2);\n return (0, eval)('(' + value + ')');\n }\n return value;\n });\n }\n\n public static uuid(): string {\n return WidgetGridUtils._p8() + WidgetGridUtils._p8(true) + WidgetGridUtils._p8(true) + WidgetGridUtils._p8();\n }\n\n private static _p8(s?: boolean): string {\n const p = (Math.random().toString(16) + '000000000').substr(2, 8);\n return s ? `-${p.substr(0, 4)}-${p.substr(4, 4)}` : p;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\n\nimport { WidgetGridRegistry } from './widget-grid-registry.service';\nimport { WidgetGridItem, WidgetGridItemConfig } from './widget-grid.interface';\nimport { WidgetGridUtils } from './widget-grid.utils';\nimport { NoopComponent } from './widgets/noop/noop.component';\n\n/**\n * Service managing a widget grid. Also includes a set of labels that will be\n * used by the grid and its widgets. Default labels are provided out of the\n * box. But if you want to use custom ones or add i18n you could overwrite\n * them. The grid as well as the widgets will use those labels or fall back\n * to their default ones. If you are developing own widgets you should\n * consider using those labels as well.\n */\n@Injectable()\nexport class WidgetGridService {\n private widgetGrid: WidgetGridItem[] = [];\n private widgetGridSource = new ReplaySubject<WidgetGridItem[]>();\n public widgetGrid$: Observable<WidgetGridItem[]> =\n this.widgetGridSource.asObservable();\n\n private widgetGridUpdateSource = new Subject<string>();\n /**\n * Emitted when the widget grid has been updated\n */\n public widgetGridUpdate$: Observable<string> =\n this.widgetGridUpdateSource.asObservable();\n\n public addItemSize: {\n rows: number;\n cols: number;\n } = {\n rows: 2,\n cols: 3,\n };\n\n constructor(private widgetGridRegistry: WidgetGridRegistry) {}\n\n setWidgetGrid(gridItemConfig: Array<WidgetGridItemConfig> | undefined) {\n if (gridItemConfig) {\n // create actual widget grid from widget grid config\n this.widgetGrid = [...gridItemConfig].map((gic) => {\n const cmp = this.widgetGridRegistry.getWidgetComponent(gic.widgetName);\n const gc: WidgetGridItem = {\n ...gic,\n widget: cmp,\n widgetConfigMap: {\n widgetConfig:\n cmp === NoopComponent\n ? {\n widgetName: gic.widgetName,\n }\n : gic.widgetConfig,\n },\n };\n return gc;\n });\n } else {\n this.widgetGrid = [];\n }\n this.widgetGridSource.next(this.widgetGrid);\n }\n\n /**\n * Update config of an existing widget\n * @param widgetId ID of the widget to be updated\n * @param setupWidgetConfig The updated configuration for that widget\n */\n updateWidget(widgetId: string, setupWidgetConfig: any) {\n const gridWidget = this.widgetGrid.find((w) => w.id === widgetId);\n if (gridWidget && setupWidgetConfig) {\n gridWidget.widgetConfig = setupWidgetConfig;\n gridWidget.widgetConfigMap = { widgetConfig: setupWidgetConfig };\n }\n this.widgetGridSource.next(this.widgetGrid);\n this.widgetGridUpdateSource.next(widgetId);\n }\n\n replaceWidget(widgetId: string, widgetName: string, setupWidgetConfig?: any) {\n const gridWidgetIndex = this.widgetGrid.findIndex((w) => w.id === widgetId);\n if (gridWidgetIndex !== -1) {\n const w: WidgetGridItem = {\n ...this.widgetGrid[gridWidgetIndex],\n ...{\n widgetName,\n widgetConfig: setupWidgetConfig || {},\n widget: this.widgetGridRegistry.getWidgetComponent(widgetName),\n widgetConfigMap: { widgetConfig: setupWidgetConfig || {} },\n },\n };\n this.widgetGrid[gridWidgetIndex] = w;\n this.widgetGridSource.next(this.widgetGrid);\n this.widgetGridUpdateSource.next(widgetId);\n }\n }\n\n /**\n * Add a new grid item to the widget grid.\n * @param widgetName The name of the grid item to be added\n * @param setupWidgetConfig\n */\n addWidget(\n widgetName: string,\n setupWidgetConfig?: any\n ) {\n const gridWidget: WidgetGridItem = {\n id: WidgetGridUtils.uuid(),\n widgetName,\n widgetConfig: setupWidgetConfig,\n widget: this.widgetGridRegistry.getWidgetComponent(widgetName),\n widgetConfigMap: { widgetConfig: setupWidgetConfig },\n x: 0,\n y: 0,\n rows: this.addItemSize.rows,\n cols: this.addItemSize.cols,\n };\n this.widgetGrid.push(gridWidget);\n this.widgetGridSource.next(this.widgetGrid);\n this.widgetGridUpdateSource.next(gridWidget.id);\n }\n\n removeWidget(gridItemId: string) {\n const idx = this.widgetGrid.findIndex((w) => w.id === gridItemId);\n this.widgetGrid.splice(idx, 1);\n this.widgetGridSource.next(this.widgetGrid);\n this.widgetGridUpdateSource.next(gridItemId);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, OnInit, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormControlStatus, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { DialogComponent } from '@yuuvis/client-components/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { AttributesMap, DynamicIoModule, OutputsType } from 'ng-dynamic-component';\nimport { SignalComponentIoModule } from 'ng-dynamic-component/signal-component-io';\nimport { WidgetGridRegistry } from '../widget-grid-registry.service';\nimport { GridWidget, WidgetPickerData, WidgetPickerOptions } from '../widget-grid.interface';\nimport { WidgetGridService } from '../widget-grid.service';\n\n@Component({\n selector: 'yuv-widget-picker',\n imports: [\n CommonModule,\n MatButtonModule,\n TranslatePipe,\n MatIconModule,\n DialogComponent,\n YmtButtonDirective,\n MatListModule,\n DynamicIoModule,\n ReactiveFormsModule,\n SignalComponentIoModule\n ],\n templateUrl: './widget-picker.component.html',\n styleUrls: ['./widget-picker.component.scss']\n})\nexport class WidgetPickerComponent implements OnInit {\n #widgetGridRegistry = inject(WidgetGridRegistry);\n #widgetGridService = inject(WidgetGridService);\n #dialogData = inject<WidgetPickerOptions>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<WidgetPickerComponent>);\n\n pickerFormControl = new FormControl();\n\n widgetId: string | undefined;\n selectedWidget: GridWidget<any> | undefined;\n widgetConfigMap: AttributesMap = {};\n setupWidgetConfig: any;\n widgetConfigDirty = false;\n widgetConfigState?: FormControlStatus;\n registeredWidgets: Array<GridWidget<any>> = [];\n setupWidgetDynamicOutputs: OutputsType = {\n widgetConfigChange: (widgetConfig: any) => {\n this.onSetupConfigChange(widgetConfig);\n },\n widgetConfigStateChange: (s?: any) => {\n this.widgetConfigState = s || undefined;\n }\n };\n\n pickerData = input<WidgetPickerData | undefined>(this.#dialogData.pickerData);\n #pickerDataEffect = effect(() => {\n const pd = this.pickerData();\n if (pd) {\n const gridWidget: GridWidget<any> | undefined = this.#widgetGridRegistry\n .getRegisteredWidgets()\n .find((w) => w.id === pd.widgetName);\n this.selectedWidget = gridWidget?.setupComponent ? gridWidget : undefined;\n this.widgetConfigMap = pd.widgetConfigMap || {};\n this.widgetId = pd.widgetId;\n }\n });\n\n /**\n * Collection of buckets to load available widgets from. Wildcards are also posssible:\n * `[buckets]=\"['app.default', '*.public.*', 'app.no?.widgets']\"`\n *\n * `*` represents any character 0-n times\n * `?` represents exactly one character\n */\n buckets = input<string[] | undefined>(this.#dialogData.buckets);\n\n picked = output();\n canceled = output();\n\n constructor() {\n this.pickerFormControl.valueChanges.pipe(takeUntilDestroyed()).subscribe((widgets: GridWidget<any>[]) => {\n if (widgets.length) this.pick(widgets[0]);\n });\n }\n\n pick(widget: GridWidget<any>) {\n if (widget?.setupComponent) {\n // if the selected widget has a setup component, we'll continue ...\n this.selectedWidget = widget?.setupComponent ? widget : undefined;\n } else {\n if (this.widgetId) {\n // update existing widget\n this.#widgetGridService.replaceWidget(this.widgetId, widget.id);\n } else {\n this.#widgetGridService.addWidget(widget.id);\n }\n this.picked.emit();\n this.#dialogRef.close();\n }\n }\n\n private onSetupConfigChange(setupConfig: any) {\n this.widgetConfigDirty = !!setupConfig;\n this.setupWidgetConfig = setupConfig;\n }\n\n setupComponentSave() {\n // TODO: save/emit config\n if (this.widgetId && this.selectedWidget) {\n if (this.pickerData()?.widgetName !== this.selectedWidget.id) {\n this.#widgetGridService.replaceWidget(this.widgetId, this.selectedWidget.id, this.setupWidgetConfig);\n } else {\n this.#widgetGridService.updateWidget(this.widgetId, this.setupWidgetConfig);\n }\n } else {\n this.#widgetGridService.addWidget(this.selectedWidget!.id, this.setupWidgetConfig);\n }\n this.picked.emit();\n this.#dialogRef.close();\n }\n\n setupComponentCancel() {\n this.reset();\n }\n\n cancel() {\n this.canceled.emit();\n this.#dialogRef.close();\n }\n\n reset() {\n this.selectedWidget = undefined;\n this.setupWidgetConfig = undefined;\n }\n\n ngOnInit(): void {\n this.registeredWidgets = this.#widgetGridRegistry.getRegisteredWidgets(this.buckets());\n }\n}\n","<yuv-dialog [headertitel]=\"selectedWidget ? selectedWidget.label : ('yuv.widget-grid.widget-picker.title' | translate)\">\n <!-- <header class=\"dark\" [ngClass]=\"{ listing: !selectedWidget }\">\n @if (selectedWidget) {\n <button mat-icon-button (click)=\"reset()\"><mat-icon>back</mat-icon></button>\n }\n <div class=\"title\">{{ selectedWidget ? selectedWidget.label : ('yuv.widget-grid.widget-picker.title' | translate) }}</div>\n <button mat-icon-button (click)=\"cancel()\"><mat-icon>clear</mat-icon></button>\n </header> -->\n\n <main class=\"{{ !selectedWidget ? 'widget-listing' : 'widget-setup' }}\">\n @if (!selectedWidget) {\n <mat-selection-list role=\"list\" [formControl]=\"pickerFormControl\" [multiple]=\"false\" [hideSingleSelectionIndicator]=\"true\">\n <!-- list of avalable widgets -->\n @for (w of registeredWidgets; track $index) {\n <mat-list-option [value]=\"w\">\n {{ w.label }}\n </mat-list-option>\n } @empty {\n <div class=\"empty\">\n {{ 'yuv.widget-grid.widget-picker.empty' | translate }}\n </div>\n }\n </mat-selection-list>\n } @else {\n <div class=\"component\">\n <ng-container\n *ngComponentOutlet=\"selectedWidget!.setupComponent!; ndcDynamicInputs: widgetConfigMap; ndcDynamicOutputs: setupWidgetDynamicOutputs\"\n ></ng-container>\n </div>\n }\n </main>\n <footer>\n @if (selectedWidget) {\n <button ymtButton=\"secondary\" (click)=\"setupComponentCancel()\">{{ 'yuv.widget-grid.button.cancel' | translate }}</button>\n <button ymtButton=\"primary\" [disabled]=\"!widgetConfigDirty || widgetConfigState === 'INVALID'\" (click)=\"setupComponentSave()\">\n {{ 'yuv.widget-grid.button.save' | translate }}\n </button>\n } @else {\n <button ymtButton=\"secondary\" (click)=\"cancel()\">{{ 'yuv.widget-grid.button.cancel' | translate }}</button>\n }\n </footer>\n</yuv-dialog>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, output, signal, TemplateRef, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport {\n DisplayGrid,\n Gridster,\n GridsterConfig,\n GridsterItem,\n GridsterItemConfig,\n GridType\n} from 'angular-gridster2';\nimport { DynamicIoModule } from 'ng-dynamic-component';\nimport { WidgetGridEventService } from './widget-grid-event.service';\nimport {\n GridItemEvent,\n WidgetGridConfig,\n WidgetGridItem,\n WidgetGridItemConfig,\n WidgetPickerData\n} from './widget-grid.interface';\nimport { WidgetGridService } from './widget-grid.service';\nimport { WidgetPickerComponent } from './widget-picker/widget-picker.component';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { SignalComponentIoModule } from 'ng-dynamic-component/signal-component-io';\n@Component({\n selector: 'yuv-widget-grid',\n imports: [\n CommonModule,\n DynamicIoModule,\n SignalComponentIoModule,\n TranslatePipe,\n Gridster,\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n WidgetPickerComponent,\n GridsterItem,\n YmtIconButtonDirective,\n MatTooltip\n ],\n providers: [WidgetGridService],\n templateUrl: './widget-grid.component.html',\n styleUrl: './widget-grid.component.scss',\n host: { '[class.widget-grid-edit]': 'editMode()' }\n})\nexport class YuvWidgetGridComponent {\n #dialog = inject(MatDialog);\n #widgetGridService = inject(WidgetGridService);\n #widgetGridEventService = inject(WidgetGridEventService);\n\n gridster = viewChild(Gridster);\n widgetPicker = viewChild.required('widgetPicker', { read: TemplateRef });\n\n options: GridsterConfig = {\n gridType: GridType.Fit,\n displayGrid: DisplayGrid.None,\n pushItems: false,\n outerMargin: false,\n swap: false,\n draggable: {\n enabled: false,\n ignoreContent: true,\n dragHandleClass: 'dragHandle'\n },\n resizable: {\n enabled: false\n },\n itemChangeCallback: (item: GridsterItemConfig, itemComponent: GridsterItem) => {\n this.emitChange();\n }\n };\n\n gridConfig = input<Partial<WidgetGridConfig> | undefined>();\n #gridConfigEffect = effect(() => {\n const cfg = this.gridConfig();\n if (cfg?.rows) {\n this.options.minRows = cfg.rows;\n this.options.maxRows = cfg.rows;\n }\n if (cfg?.columns) {\n this.options.minCols = cfg.columns;\n this.options.maxCols = cfg.columns;\n }\n if (cfg?.gap) {\n this.options.margin = cfg.gap;\n }\n if (cfg?.newItemWidth || cfg?.newItemHeight) {\n this.#widgetGridService.addItemSize = {\n cols: cfg?.newItemWidth || -1, // default value -1 means the grid will autoposition the new item\n rows: cfg?.newItemHeight || -1 // default value -1 means the grid will autoposition the new item\n };\n }\n if (cfg?.gridType) {\n this.options.gridType = cfg.gridType;\n }\n this.gridster()?.api.calculateLayout();\n });\n\n _editMode = signal<boolean>(false);\n /**\n * Whether or not to enable edit mode. In edit mode controls\n * for editing existing tiles and creating new ones are shown.\n * This mode also enables positioning and resizing of the tiles.\n */\n editMode = input<boolean>(false);\n #editModeEffect = effect(() => {\n const e = this.editMode();\n this._editMode.set(e);\n this.options.draggable!.enabled = !!e;\n this.options.resizable!.enabled = !!e;\n this.options.displayGrid = e ? DisplayGrid.Always : DisplayGrid.None;\n\n // set timeout to ensure that the grid has been redrawn before notifying the widgets about the change\n setTimeout(() => {\n this.gridster()?.api.calculateLayout();\n }, 0);\n });\n\n gridItemConfig = input<Array<WidgetGridItemConfig> | undefined>(undefined);\n #gridItemConfigEffect = effect(() => {\n this.#widgetGridService.setWidgetGrid(this.gridItemConfig());\n });\n\n /**\n * Collection of buckets to load available widgets from. Wildcards are also posssible:\n * `[buckets]=\"['app.default', '*.public.*', 'app.no?.widgets']\"`\n *\n * `*` represents any character 0-n times\n * `?` represents exactly one character\n */\n buckets = input<string[] | undefined>(undefined);\n // @Input() buckets?: string[];\n\n /**\n * Emitted when the grid has been changed\n */\n gridChange = output<Array<WidgetGridItemConfig>>();\n gridItemEvent = output<GridItemEvent>();\n /**\n * Emitted when the widget picker is opened or closed in edit mode\n */\n widgetPickerOpen = output<boolean>();\n\n widgetGrid: Array<WidgetGridItem> = [];\n widgetPickerData: WidgetPickerData | undefined;\n\n constructor() {\n this.#widgetGridService.widgetGrid$.pipe(takeUntilDestroyed()).subscribe((widgetGrid: WidgetGridItem[]) => {\n this.widgetGrid = widgetGrid;\n });\n\n this.#widgetGridEventService.widgetEvents$.pipe(takeUntilDestroyed()).subscribe((evt: GridItemEvent) => {\n this.gridItemEvent.emit(evt);\n });\n\n this.#widgetGridService.widgetGridUpdate$.pipe(takeUntilDestroyed()).subscribe((_) => {\n this.emitChange();\n });\n }\n\n openWidgetPicker(item?: WidgetGridItem) {\n if (item) {\n // open setup component for selected grid item\n this.widgetPickerData = {\n widgetName: item.widgetName,\n widgetConfigMap: item.widgetConfigMap,\n widgetId: item.id\n };\n } else {\n this.widgetPickerData = undefined;\n }\n this.widgetPickerOpen.emit(true);\n this.#dialog\n .open(this.widgetPicker(), {\n data: {\n pickerData: this.widgetPickerData,\n buckets: this.buckets()\n }\n })\n .afterClosed()\n .subscribe(() => this.widgetPickerOpen.emit(false));\n }\n\n /**\n * Removes a widget from the grid\n * @param item The widget to be removed\n */\n removeItem(item: WidgetGridItem): void {\n this.#widgetGridService.removeWidget(item.id);\n }\n\n /**\n * Add a new widget to the grid by opening the widget picker\n */\n addItem(): void {\n this.openWidgetPicker();\n }\n\n private emitChange(): void {\n const mapped: WidgetGridItemConfig[] = [];\n this.widgetGrid.forEach((i) => {\n const m: WidgetGridItemConfig = { ...i };\n delete m['widget'];\n delete m['widgetConfigMap'];\n mapped.push(m);\n });\n this.gridChange.emit(mapped);\n }\n}\n","@if (_editMode()) {\n <button class=\"fab\" mat-fab [attr.aria-label]=\"'yuv.widget-grid.widget.add.label' | translate\" (click)=\"addItem()\" [matTooltip]=\"'yuv.widget-grid.widget.add.tooltip' | translate\">\n <mat-icon>add</mat-icon>\n </button>\n}\n\n@if (widgetGrid.length === 0 && !_editMode()) {\n <div class=\"empty\">\n <!-- <p>{{ 'yuv.widget-grid.empty' | translate }}</p>\n <button ymtButton=\"primary\" (click)=\"_editMode.set(true)\">\n {{'yuv.widget-grid.empty.create' | translate}}</button> -->\n <ng-content select=\".empty\"><p>{{ 'yuv.widget-grid.empty' | translate }}</p></ng-content>\n </div>\n} @else {\n <gridster [options]=\"options\">\n @for (item of widgetGrid; track item.id) {\n <gridster-item [item]=\"item\">\n @if (_editMode()) {\n <div class=\"toolbar\">\n <!-- drag handle -->\n <mat-icon class=\"dragHandle ymt-icon--size-s\">drag_indicator</mat-icon>\n <!-- edit -->\n <button ymt-icon-button icon-button-size=\"small\"\n [matTooltip]=\"'yuv.widget-grid.widget.edit.tooltip' | translate\"\n (click)=\"openWidgetPicker(item)\"><mat-icon class=\"ymt-icon--size-s\">edit</mat-icon></button>\n <!-- remove -->\n <button ymt-icon-button icon-button-size=\"small\"\n [matTooltip]=\"'yuv.widget-grid.widget.remove.tooltip' | translate\"\n (click)=\"removeItem(item)\"><mat-icon class=\"ymt-icon--size-s\">clear</mat-icon></button>\n </div>\n }\n <div class=\"cmp\">\n <ng-container *ngComponentOutlet=\"item.widget; ndcDynamicInputs: item.widgetConfigMap\"></ng-container>\n </div>\n </gridster-item>\n }\n </gridster>\n}\n<ng-template #widgetPicker>\n <yuv-widget-picker [pickerData]=\"widgetPickerData\" [buckets]=\"buckets()\"></yuv-widget-picker>\n</ng-template>\n","import { Component, inject, input, output } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { DialogComponent } from '@yuuvis/client-components/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'yuv-workspace-edit',\n imports: [\n DialogComponent,\n MatFormFieldModule,\n MatInputModule,\n YmtButtonDirective,\n TranslatePipe,\n ReactiveFormsModule\n ],\n templateUrl: './workspace-edit.component.html',\n styleUrl: './workspace-edit.component.scss'\n})\nexport class WorkspaceEditComponent {\n readonly dialogRef = inject(MatDialogRef<WorkspaceEditComponent>);\n workspaceForm = input.required<FormGroup>();\n\n workspaceSubmit = output();\n}\n","<yuv-dialog [headertitel]=\"'yuv.widget-grid.workspaces.edit.title' | translate\">\n <main>\n <form id=\"workspaceEditForm\" [formGroup]=\"workspaceForm()\" (ngSubmit)=\"workspaceSubmit.emit()\">\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.widget-grid.workspaces.workspace.label' | translate }}</mat-label>\n <input matInput formControlName=\"label\" />\n </mat-form-field>\n </form>\n </main>\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"dialogRef.close()\">\n {{ 'yuv.widget-grid.workspaces.edit.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" form=\"workspaceEditForm\" type=\"submit\" [disabled]=\"workspaceForm().invalid\">\n {{ 'yuv.widget-grid.workspaces.edit.save' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { Component, computed, effect, inject, input, output, signal, TemplateRef, untracked } from '@angular/core';\nimport { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { ConfirmService } from '@yuuvis/client-components/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { YuvWidgetGridComponent } from '../widget-grid.component';\nimport { GridItemEvent, WidgetGridItemConfig } from '../widget-grid.interface';\nimport { WidgetGridUtils } from '../widget-grid.utils';\nimport {\n WidgetGridWorkspace,\n WidgetGridWorkspaceConfig,\n WidgetGridWorkspaceOptions\n} from './widget-grid-workspaces.interface';\nimport { WorkspaceEditComponent } from './workspace-edit/workspace-edit.component';\n\n/**\n * Component for managing multiple widget grids in so called workspaces.\n * Each workspace can have its own configuration and widgets. The user can\n * switch between workspaces to use or edit the widgets in the current workspace.\n */\n@Component({\n selector: 'yuv-widget-grid-workspaces',\n imports: [\n YuvWidgetGridComponent,\n YmtButtonDirective,\n ReactiveFormsModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatMenuModule,\n MatDividerModule,\n MatTooltipModule,\n TranslatePipe,\n WorkspaceEditComponent\n ],\n templateUrl: './widget-grid-workspaces.component.html',\n styleUrl: './widget-grid-workspaces.component.scss'\n})\nexport class YuvWidgetGridWorkspacesComponent {\n #dialog = inject(MatDialog);\n #fb = inject(FormBuilder);\n #confirm = inject(ConfirmService);\n readonly translate = inject(TranslateService);\n\n workspaceDialogRef?: MatDialogRef<any, any>;\n\n #DEFAULT_WORKSPACE_OPTIONS: WidgetGridWorkspaceOptions = {\n gridConfig: {\n columns: 10,\n rows: 10\n }\n };\n\n workspaceForm = this.#fb.group({\n id: [''],\n label: ['', Validators.required]\n });\n\n get workspaceLabelControl(): FormControl {\n return this.workspaceForm.get('label') as FormControl;\n }\n options = input<WidgetGridWorkspaceOptions>(this.#DEFAULT_WORKSPACE_OPTIONS);\n _workspaceOptions = computed<WidgetGridWorkspaceOptions>(() => ({\n gridConfig: {\n ...this.#DEFAULT_WORKSPACE_OPTIONS.gridConfig,\n ...(this.options().gridConfig || {})\n }\n }));\n\n workspaceConfig = input<WidgetGridWorkspaceConfig | undefined>(undefined);\n _workspaceConfig = signal<WidgetGridWorkspaceConfig | undefined>(undefined);\n #workspaceConfigEffect = effect(() => {\n const wsc = this.workspaceConfig();\n untracked(() => {\n this._workspaceConfig.set(wsc);\n this.#updateOriginalWorkspaceConfig();\n if (wsc?.currentWorkspace) {\n this.setWorkspace(wsc.currentWorkspace, true);\n }\n });\n });\n\n /**\n * Collection of buckets to load available widgets from. Wildcards are also posssible:\n * `[buckets]=\"['app.default', '*.public.*', 'app.no?.widgets']\"`\n *\n * `*` represents any character 0-n times\n * `?` represents exactly one character\n */\n buckets = input<string[] | undefined>(undefined);\n\n configChange = output<WidgetGridWorkspaceConfig | undefined>();\n gridItemEvent = output<GridItemEvent>();\n editModeChange = output<boolean>();\n\n editMode = signal<boolean>(false);\n\n // persist the last 'accepted' workspace config to be able to revert changes\n #originalWidgetGridWorkspaceConfig: string | undefined;\n\n // currently selected workspace\n workspace = signal<WidgetGridWorkspace | undefined>(undefined);\n #workspaceEffect = effect(() => {\n const ws = this.workspace();\n this.workspaceLabel.set(ws ? this.getLabel(ws) : '');\n untracked(() => {\n if (ws) this.workspaceForm.patchValue({ label: this.workspaceLabel(), id: ws.id });\n this.gridItemConfig.set(ws ? JSON.parse(JSON.stringify(ws.grid)) : undefined);\n });\n });\n workspaceLabel = signal<string>('');\n gridItemConfig = signal<Array<WidgetGridItemConfig> | undefined>(undefined);\n\n getLabel(workspace: WidgetGridWorkspace): string {\n return workspace.translateLabel ? this.translate.instant(workspace.label) : workspace.label;\n }\n\n setWorkspace(id: string, silent = false) {\n const workspace = this._workspaceConfig()?.workspaces.find((w) => w.id === id);\n if (workspace) {\n this.workspace.set(workspace);\n this._workspaceConfig.update(\n (cfg) =>\n ({\n ...cfg,\n currentWorkspace: id\n }) as WidgetGridWorkspaceConfig\n );\n this.#updateOriginalWorkspaceConfig();\n } else {\n this.workspace.set(undefined);\n }\n if (!silent) this.emitConfigChange();\n }\n\n openWorkspaceDialog(create: boolean, tplRef: TemplateRef<any>) {\n if (create) {\n this.workspaceForm.reset();\n }\n this.workspaceDialogRef = this.#dialog.open(tplRef);\n }\n\n saveWorkspace() {\n let cfg = this._workspaceConfig();\n if (!cfg) {\n cfg = {\n workspaces: []\n };\n }\n const isNewWorkspace = !this.workspaceForm.value.id;\n\n if (isNewWorkspace) {\n const newWorkspace: WidgetGridWorkspace = {\n id: WidgetGridUtils.uuid(),\n label: this.workspaceForm.value.label as string,\n grid: []\n };\n\n this._workspaceConfig.set({\n ...cfg,\n workspaces: [...cfg.workspaces, newWorkspace],\n currentWorkspace: newWorkspace.id\n });\n this.workspace.set(newWorkspace);\n this.workspaceForm.patchValue({ id: newWorkspace.id, label: newWorkspace.label });\n } else {\n const existingIndex: number = cfg.workspaces.findIndex((w) => w.id === this.workspaceForm.value.id);\n if (existingIndex === -1) {\n const updatedWorkspace = cfg.workspaces[existingIndex];\n updatedWorkspace.label = this.workspaceForm.value.label as string;\n const workspaces: WidgetGridWorkspace[] = cfg.workspaces;\n workspaces[existingIndex] = updatedWorkspace;\n\n this._workspaceConfig.set({\n ...cfg,\n workspaces\n });\n } else {\n // workspace label may have changed\n cfg.workspaces[existingIndex].label = this.workspaceForm.value.label as string;\n }\n }\n\n this.workspaceDialogRef?.close();\n this.emitConfigChange();\n }\n\n #updateOriginalWorkspaceConfig() {\n this.#originalWidgetGridWorkspaceConfig = WidgetGridUtils.gridConfigStringify(this.workspaceConfig());\n }\n\n onGridEvent(e: GridItemEvent) {\n this.gridItemEvent.emit(e);\n }\n\n onGridChange(grid: Array<WidgetGridItemConfig>) {\n const ws = this.workspace();\n if (ws) {\n ws.grid = grid;\n const wsc = this._workspaceConfig();\n const idx: number = wsc ? wsc.workspaces.findIndex((w) => w.id === ws.id) : -1;\n if (idx > -1) {\n const wgw: WidgetGridWorkspace[] = this._workspaceConfig()?.workspaces || [];\n wgw[idx] = ws;\n this._workspaceConfig.update((curr) => ({\n ...curr,\n workspaces: wgw\n }));\n }\n }\n }\n\n // emit current changes and reset original workspace config internally\n persistWorkspaceConfig() {\n this.saveWorkspace();\n // this.#updateOriginalWorkspaceConfig();\n // this.emitConfigChange();\n this.editMode.set(false);\n }\n\n revertWorkspaceConfig() {\n if (this.#originalWidgetGridWorkspaceConfig) {\n this._workspaceConfig.set(WidgetGridUtils.gridConfigParse(this.#originalWidgetGridWorkspaceConfig));\n }\n const cws = this.workspaceConfig()?.currentWorkspace;\n if (cws) this.setWorkspace(cws, true);\n this.editMode.set(false);\n }\n\n deleteCurrentWorkspace() {\n const wsc = this._workspaceConfig();\n const ws = this.workspace();\n if (ws && wsc) {\n const idx: number = wsc.workspaces.findIndex((w) => w.id === ws.id);\n if (idx > -1) {\n this.#confirm\n .confirm({\n message: this.translate.instant('yuv.widget-grid.workspaces.workspace.delete.confirm.message', {\n label: ws.label\n })\n })\n .subscribe((confirmed: boolean) => {\n if (!confirmed) return;\n const workspaces: WidgetGridWorkspace[] = wsc.workspaces;\n workspaces.splice(idx, 1);\n\n // pick another workspace if the current one is deleted\n const newCurrentWorkspace = workspaces.length > 0 ? workspaces[0] : undefined;\n\n this._workspaceConfig.set({\n ...wsc,\n workspaces,\n currentWorkspace: newCurrentWorkspace?.id\n });\n this.workspace.set(newCurrentWorkspace);\n this.emitConfigChange();\n });\n }\n }\n }\n\n emitConfigChange() {\n this.configChange.emit(this._workspaceConfig());\n }\n}\n","@let ws = workspace();\n\n<div class=\"toolbar\">\n @if (ws) {\n @let workspaces = _workspaceConfig()?.workspaces || [];\n\n <button\n mat-icon-button\n [matTooltip]=\"'yuv.widget-grid.workspaces.workspace.menu.tooltip' | translate\"\n [disabled]=\"editMode()\"\n [matMenuTriggerFor]=\"workspacePickerMenu\"\n >\n <mat-icon>menu</mat-icon>\n </button>\n\n <mat-menu #workspacePickerMenu=\"matMenu\">\n @for (ws of workspaces; track ws.id) {\n <button mat-menu-item (click)=\"setWorkspace(ws.id)\">{{ getLabel(ws) }}</button>\n }\n <mat-divider></mat-divider>\n <button mat-menu-item (click)=\"openWorkspaceDialog(true, tplWorkspaceEdit)\">{{ 'yuv.widget-grid.workspaces.workspace.menu.create' | translate }}</button>\n </mat-menu>\n\n @if (!editMode()) {\n <h2 class=\"label\">{{ workspaceLabel() }}</h2>\n @if (!ws.preventEdit) {\n <button mat-icon-button [matMenuTriggerFor]=\"workspaceMenu\"><mat-icon>more_vert</mat-icon></button>\n <mat-menu #workspaceMenu=\"matMenu\">\n <button mat-menu-item (click)=\"editMode.set(!editMode())\">{{ 'yuv.widget-grid.workspaces.workspace.menu.edit' | translate }}</button>\n <button mat-menu-item (click)=\"deleteCurrentWorkspace()\">{{ 'yuv.widget-grid.workspaces.workspace.menu.delete' | translate }}</button>\n </mat-menu>\n }\n } @else {\n @if (ws.preventRename || ws.translateLabel) {\n <h2 class=\"label\">{{ workspaceLabel() }}</h2>\n } @else {\n <input type=\"text\" class=\"label\" [formControl]=\"workspaceLabelControl\" />\n }\n <button ymtButton=\"secondary\" (click)=\"revertWorkspaceConfig()\">\n {{ 'yuv.widget-grid.workspaces.editMode.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" (click)=\"persistWorkspaceConfig()\">\n {{ 'yuv.widget-grid.workspaces.editMode.save' | translate }}\n </button>\n }\n }\n</div>\n\n@if (ws) {\n <yuv-widget-grid\n [gridConfig]=\"_workspaceOptions().gridConfig\"\n [gridItemConfig]=\"gridItemConfig()\"\n [buckets]=\"buckets()\"\n [editMode]=\"editMode()\"\n (gridChange)=\"onGridChange($event)\"\n (gridItemEvent)=\"onGridEvent($event)\"\n >\n <div class=\"empty\">\n <p>{{ 'yuv.widget-grid.empty' | translate }}</p>\n <button ymtButton=\"primary\" (click)=\"editMode.set(true)\">\n {{ 'yuv.widget-grid.empty.create' | translate }}\n </button>\n </div>\n </yuv-widget-grid>\n} @else {\n <div class=\"empty\">\n <p>{{ 'yuv.widget-grid.workspaces.empty' | translate }}</p>\n <button ymtButton=\"primary\" (click)=\"openWorkspaceDialog(true, tplWorkspaceEdit)\">\n {{ 'yuv.widget-grid.workspaces.empty.button.create' | translate }}\n </button>\n </div>\n}\n\n<ng-template #tplWorkspaceEdit>\n <yuv-workspace-edit [workspaceForm]=\"workspaceForm\" (workspaceSubmit)=\"saveWorkspace()\"></yuv-workspace-edit>\n</ng-template>\n","import { NgModule } from \"@angular/core\";\nimport { YuvWidgetGridComponent } from \"./widget-grid.component\";\nimport { YuvWidgetGridWorkspacesComponent } from \"./widget-grid-workspaces/widget-grid-workspaces.component\";\n\n\nconst cmp = [\n YuvWidgetGridComponent,\n YuvWidgetGridWorkspacesComponent\n]\n\n@NgModule({\n imports: [cmp],\n exports: [cmp]\n })\n export class YuvWidgetGridModule {}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.WidgetGridRegistry","i4","i2","i3","i1","TranslatePipe","i5","i6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAOa,sBAAsB,CAAA;AACzB,IAAA,qBAAqB,GAAG,IAAI,aAAa,EAAiB;AAE3D,IAAA,aAAa,GAClB,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;AAEzC,IAAA,OAAO,CAAC,GAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;IACtC;wGARW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCGY,aAAa,CAAA;AACf,IAAA,YAAY;wGADV,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,8GCT1B,8fAAge,EAAA,MAAA,EAAA,CAAA,0RAAA,CAAA,EAAA,CAAA;;4FDSnd,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,SAAS;+BACE,UAAU,EAAA,QAAA,EAAA,8fAAA,EAAA,MAAA,EAAA,CAAA,0RAAA,CAAA,EAAA;;sBAKnB;;;AEJH;;;;AAIG;MAIU,kBAAkB,CAAA;AACpB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE7C;;;AAGG;IACK,iBAAiB,GAA+B,EAAE;AAC1D;;;;;AAKG;IACK,aAAa,GAA6B,EAAE;AAEpD;;;;;;;AAOG;IACH,aAAa,GAAA;QACX,OAAO;AACL,YAAA,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mCAAmC,CAAC;AAClE,YAAA,eAAe,EAAE;SAClB;IACH;AAEA;;;;;;;AAOG;AACH,IAAA,uBAAuB,CAAC,UAAkB,EAAA;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC;AACtE,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,MAAM,KAAK,CAAC,kCAAkC,CAAC;QAC5D,OAAO,MAAM,CAAC,cAAc;IAC9B;AAEA;;;;;;AAMG;AACH,IAAA,kBAAkB,CAAC,UAAkB,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC;AACtE,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC;AACxD,QAAA,OAAO,MAAM,EAAE,eAAe,IAAI,aAAa;IACjD;AAEA;;;;;;;AAOG;IACH,kBAAkB,CAAC,MAAuB,EAAE,OAAkB,EAAA;QAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;AAC7E,QAAA,IAAI,CAAC,cAAc;AAAE,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;AAExD,QAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACnB,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAS,KAAI;gBAC5B,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;AACjC,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;;;;AAKG;IACH,mBAAmB,CAAC,OAA0B,EAAE,OAAkB,EAAA;AAChE,QAAA,MAAM,4BAA4B,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9G,QAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACnB,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E;IACF;AAEA,IAAA,eAAe,CAAC,MAAuB,EAAA;AACrC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5D,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,eAAe,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,eAAe,GAAG,MAAM,CAAC,KAAK,EAAE;IAC1H;IAEQ,YAAY,CAAC,MAAc,EAAE,UAAkB,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE;QAChE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IAC7C;AAEA,IAAA,sBAAsB,CAAC,EAAU,EAAA;QAC/B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5E;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;AAEA;;;;;;AAMG;AACH,IAAA,oBAAoB,CAAC,OAAkB,EAAA;AACrC,QAAA,IAAI,OAAO,EAAE,MAAM,EAAE;;;YAGnB,MAAM,cAAc,GAA2B,EAAE;AACjD,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAS,KAAI;AAC5B,gBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;;AAEnB,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,EAAU,KAAI;AACrD,wBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;AAAE,4BAAA,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC;AACxD,oBAAA,CAAC,CAAC;gBACJ;;AAAO,oBAAA,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC;AAC9B,YAAA,CAAC,CAAC;YACF,MAAM,iBAAiB,GAA2B,EAAE;YACpD,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KACpC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAkB,KAAI;AACnD,gBAAA,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC;YACnC,CAAC,CAAC,CACH;YACD,MAAM,WAAW,GAAa,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC5D,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAkB,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC9H;;AAAO,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC1E;IAEQ,cAAc,CAAC,IAAY,EAAE,OAAe,EAAA;QAClD,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;AAC7F,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;wGAlJW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCbY,eAAe,CAAA;AAC1B,IAAA,OAAO,aAAa,GAAG,UAAU;AACjC,IAAA,OAAO,eAAe,GAAG,YAAY;AAErC;;;;AAIG;IACH,OAAO,mBAAmB,CAAC,CAAM,EAAA;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAI;AACtC,YAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;gBAC/B,OAAO,CAAA,CAAA,EAAI,eAAe,CAAC,aAAa,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,EAAE,CAAA,EAAA,CAAI;YAClE;AACA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;IACH,OAAO,eAAe,CAAC,iBAAyB,EAAA;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,UAAU,GAAG,EAAE,KAAK,EAAA;YACvD,IACE,OAAO,KAAK,KAAK,QAAQ;gBACzB,KAAK,CAAC,UAAU,CAAC,CAAA,CAAA,EAAI,eAAe,CAAC,aAAa,GAAG,CAAC;;AAEtD,gBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EACpB;AACA,gBAAA,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACnF,gBAAA,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;YACrC;AACA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,OAAO,IAAI,GAAA;QAChB,OAAO,eAAe,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,GAAG,EAAE;IAC9G;IAEQ,OAAO,GAAG,CAAC,CAAW,EAAA;QAC5B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE,GAAG,CAAC;IACvD;;;ACrCF;;;;;;;AAOG;MAEU,iBAAiB,CAAA;AAqBR,IAAA,kBAAA;IApBZ,UAAU,GAAqB,EAAE;AACjC,IAAA,gBAAgB,GAAG,IAAI,aAAa,EAAoB;AACzD,IAAA,WAAW,GAChB,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AAE9B,IAAA,sBAAsB,GAAG,IAAI,OAAO,EAAU;AACtD;;AAEG;AACI,IAAA,iBAAiB,GACtB,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE;AAErC,IAAA,WAAW,GAGd;AACF,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,IAAI,EAAE,CAAC;KACR;AAED,IAAA,WAAA,CAAoB,kBAAsC,EAAA;QAAtC,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;IAAuB;AAE7D,IAAA,aAAa,CAAC,cAAuD,EAAA;QACnE,IAAI,cAAc,EAAE;;AAElB,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAChD,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;AACtE,gBAAA,MAAM,EAAE,GAAmB;AACzB,oBAAA,GAAG,GAAG;AACN,oBAAA,MAAM,EAAE,GAAG;AACX,oBAAA,eAAe,EAAE;wBACf,YAAY,EACV,GAAG,KAAK;AACN,8BAAE;gCACE,UAAU,EAAE,GAAG,CAAC,UAAU;AAC3B;8BACD,GAAG,CAAC,YAAY;AACvB,qBAAA;iBACF;AACD,gBAAA,OAAO,EAAE;AACX,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACtB;QACA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAC7C;AAEA;;;;AAIG;IACH,YAAY,CAAC,QAAgB,EAAE,iBAAsB,EAAA;AACnD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AACjE,QAAA,IAAI,UAAU,IAAI,iBAAiB,EAAE;AACnC,YAAA,UAAU,CAAC,YAAY,GAAG,iBAAiB;YAC3C,UAAU,CAAC,eAAe,GAAG,EAAE,YAAY,EAAE,iBAAiB,EAAE;QAClE;QACA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3C,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5C;AAEA,IAAA,aAAa,CAAC,QAAgB,EAAE,UAAkB,EAAE,iBAAuB,EAAA;AACzE,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;AAC3E,QAAA,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE;AAC1B,YAAA,MAAM,CAAC,GAAmB;AACxB,gBAAA,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;gBACnC,GAAG;oBACD,UAAU;oBACV,YAAY,EAAE,iBAAiB,IAAI,EAAE;oBACrC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,UAAU,CAAC;AAC9D,oBAAA,eAAe,EAAE,EAAE,YAAY,EAAE,iBAAiB,IAAI,EAAE,EAAE;AAC3D,iBAAA;aACF;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC;YACpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3C,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC5C;IACF;AAEA;;;;AAIG;IACH,SAAS,CACP,UAAkB,EAClB,iBAAuB,EAAA;AAEvB,QAAA,MAAM,UAAU,GAAmB;AACjC,YAAA,EAAE,EAAE,eAAe,CAAC,IAAI,EAAE;YAC1B,UAAU;AACV,YAAA,YAAY,EAAE,iBAAiB;YAC/B,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,UAAU,CAAC;AAC9D,YAAA,eAAe,EAAE,EAAE,YAAY,EAAE,iBAAiB,EAAE;AACpD,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;AAC3B,YAAA,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;SAC5B;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;QAChC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;IACjD;AAEA,IAAA,YAAY,CAAC,UAAkB,EAAA;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3C,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC;IAC9C;wGA/GW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAAjB,iBAAiB,EAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;MCkBY,qBAAqB,CAAA;AAChC,IAAA,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAChD,IAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9C,IAAA,WAAW,GAAG,MAAM,CAAsB,eAAe,CAAC;AACjD,IAAA,UAAU,GAAG,MAAM,EAAC,YAAmC,EAAC;AAEjE,IAAA,iBAAiB,GAAG,IAAI,WAAW,EAAE;AAErC,IAAA,QAAQ;AACR,IAAA,cAAc;IACd,eAAe,GAAkB,EAAE;AACnC,IAAA,iBAAiB;IACjB,iBAAiB,GAAG,KAAK;AACzB,IAAA,iBAAiB;IACjB,iBAAiB,GAA2B,EAAE;AAC9C,IAAA,yBAAyB,GAAgB;AACvC,QAAA,kBAAkB,EAAE,CAAC,YAAiB,KAAI;AACxC,YAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;QACxC,CAAC;AACD,QAAA,uBAAuB,EAAE,CAAC,CAAO,KAAI;AACnC,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,SAAS;QACzC;KACD;IAED,UAAU,GAAG,KAAK,CAA+B,IAAI,CAAC,WAAW,CAAC,UAAU,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAC7E,IAAA,iBAAiB,GAAG,MAAM,CAAC,MAAK;AAC9B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;QAC5B,IAAI,EAAE,EAAE;AACN,YAAA,MAAM,UAAU,GAAgC,IAAI,CAAC;AAClD,iBAAA,oBAAoB;AACpB,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC;AACtC,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU,EAAE,cAAc,GAAG,UAAU,GAAG,SAAS;YACzE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,eAAe,IAAI,EAAE;AAC/C,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ;QAC7B;AACF,IAAA,CAAC,wFAAC;AAEF;;;;;;AAMG;IACH,OAAO,GAAG,KAAK,CAAuB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;IAE/D,MAAM,GAAG,MAAM,EAAE;IACjB,QAAQ,GAAG,MAAM,EAAE;AAEnB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,OAA0B,KAAI;YACtG,IAAI,OAAO,CAAC,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,CAAC,MAAuB,EAAA;AAC1B,QAAA,IAAI,MAAM,EAAE,cAAc,EAAE;;AAE1B,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;QACnE;aAAO;AACL,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;;AAEjB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;YACjE;iBAAO;gBACL,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;QACzB;IACF;AAEQ,IAAA,mBAAmB,CAAC,WAAgB,EAAA;AAC1C,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,WAAW;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACtC;IAEA,kBAAkB,GAAA;;QAEhB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AACxC,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,UAAU,KAAK,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE;AAC5D,gBAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC;YACtG;iBAAO;AACL,gBAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;YAC7E;QACF;aAAO;AACL,YAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,cAAe,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC;QACpF;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;IACzB;IAEA,oBAAoB,GAAA;QAClB,IAAI,CAAC,KAAK,EAAE;IACd;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;IACzB;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAC/B,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;IACpC;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACxF;wGA3GW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClClC,69DA0CA,EAAA,MAAA,EAAA,CAAA,+dAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtBI,YAAY,2UACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,eAAe,+FACf,kBAAkB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,8aACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,UAAA,EAAA,IAAA,EACnB,uBAAuB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAPvB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAYJ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAjBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,OAAA,EACpB;wBACP,YAAY;wBACZ,eAAe;wBACf,aAAa;wBACb,aAAa;wBACb,eAAe;wBACf,kBAAkB;wBAClB,aAAa;wBACb,eAAe;wBACf,mBAAmB;wBACnB;AACD,qBAAA,EAAA,QAAA,EAAA,69DAAA,EAAA,MAAA,EAAA,CAAA,+dAAA,CAAA,EAAA;;;MEqBU,sBAAsB,CAAA;AACjC,IAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;AAC3B,IAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9C,IAAA,uBAAuB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAExD,IAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,+EAAC;AAC9B,IAAA,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAExE,IAAA,OAAO,GAAmB;QACxB,QAAQ,EAAE,QAAQ,CAAC,GAAG;QACtB,WAAW,EAAE,WAAW,CAAC,IAAI;AAC7B,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,SAAS,EAAE;AACT,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,eAAe,EAAE;AAClB,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA,kBAAkB,EAAE,CAAC,IAAwB,EAAE,aAA2B,KAAI;YAC5E,IAAI,CAAC,UAAU,EAAE;QACnB;KACD;IAED,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAyC;AAC3D,IAAA,iBAAiB,GAAG,MAAM,CAAC,MAAK;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,IAAI,GAAG,EAAE,IAAI,EAAE;YACb,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI;YAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI;QACjC;AACA,QAAA,IAAI,GAAG,EAAE,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;YAClC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;QACpC;AACA,QAAA,IAAI,GAAG,EAAE,GAAG,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG;QAC/B;QACA,IAAI,GAAG,EAAE,YAAY,IAAI,GAAG,EAAE,aAAa,EAAE;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,GAAG;gBACpC,IAAI,EAAE,GAAG,EAAE,YAAY,IAAI,CAAC,CAAC;gBAC7B,IAAI,EAAE,GAAG,EAAE,aAAa,IAAI,CAAC,CAAC;aAC/B;QACH;AACA,QAAA,IAAI,GAAG,EAAE,QAAQ,EAAE;YACjB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;QACtC;QACA,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,eAAe,EAAE;AACxC,IAAA,CAAC,wFAAC;AAEF,IAAA,SAAS,GAAG,MAAM,CAAU,KAAK,gFAAC;AAClC;;;;AAIG;AACH,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;AAChC,IAAA,eAAe,GAAG,MAAM,CAAC,MAAK;AAC5B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,SAAU,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,SAAU,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI;;QAGpE,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,eAAe,EAAE;QACxC,CAAC,EAAE,CAAC,CAAC;AACP,IAAA,CAAC,sFAAC;AAEF,IAAA,cAAc,GAAG,KAAK,CAA0C,SAAS,qFAAC;AAC1E,IAAA,qBAAqB,GAAG,MAAM,CAAC,MAAK;QAClC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC9D,IAAA,CAAC,4FAAC;AAEF;;;;;;AAMG;AACH,IAAA,OAAO,GAAG,KAAK,CAAuB,SAAS,8EAAC;;AAGhD;;AAEG;IACH,UAAU,GAAG,MAAM,EAA+B;IAClD,aAAa,GAAG,MAAM,EAAiB;AACvC;;AAEG;IACH,gBAAgB,GAAG,MAAM,EAAW;IAEpC,UAAU,GAA0B,EAAE;AACtC,IAAA,gBAAgB;AAEhB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,UAA4B,KAAI;AACxG,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC9B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,GAAkB,KAAI;AACrG,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;YACnF,IAAI,CAAC,UAAU,EAAE;AACnB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,gBAAgB,CAAC,IAAqB,EAAA;QACpC,IAAI,IAAI,EAAE;;YAER,IAAI,CAAC,gBAAgB,GAAG;gBACtB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,QAAQ,EAAE,IAAI,CAAC;aAChB;QACH;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;QACnC;AACA,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACzB,YAAA,IAAI,EAAE;gBACJ,UAAU,EAAE,IAAI,CAAC,gBAAgB;AACjC,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB;SACF;AACA,aAAA,WAAW;AACX,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,IAAoB,EAAA;QAC7B,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/C;AAEA;;AAEG;IACH,OAAO,GAAA;QACL,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEQ,UAAU,GAAA;QAChB,MAAM,MAAM,GAA2B,EAAE;QACzC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC5B,YAAA,MAAM,CAAC,GAAyB,EAAE,GAAG,CAAC,EAAE;AACxC,YAAA,OAAO,CAAC,CAAC,QAAQ,CAAC;AAClB,YAAA,OAAO,CAAC,CAAC,iBAAiB,CAAC;AAC3B,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAChB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B;wGAlKW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,SAAA,EALtB,CAAC,iBAAiB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAUT,QAAQ,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAC6B,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzDvE,g3DAyCA,EAAA,MAAA,EAAA,CAAA,+7CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDRI,YAAY,2UACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,gCAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,CAAA,4BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0EAAA,EAAA,MAAA,EAAA,CAAA,mCAAA,EAAA,oCAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,uBAAuB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEvB,QAAQ,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACR,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,sBAAsB,4NAPtB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAeJ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBArBlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB;wBACP,YAAY;wBACZ,eAAe;wBACf,uBAAuB;wBACvB,aAAa;wBACb,QAAQ;wBACR,aAAa;wBACb,gBAAgB;wBAChB,eAAe;wBACf,qBAAqB;wBACrB,YAAY;wBACZ,sBAAsB;wBACtB;qBACD,EAAA,SAAA,EACU,CAAC,iBAAiB,CAAC,EAAA,IAAA,EAGxB,EAAE,0BAA0B,EAAE,YAAY,EAAE,EAAA,QAAA,EAAA,g3DAAA,EAAA,MAAA,EAAA,CAAA,+7CAAA,CAAA,EAAA;AAO7B,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,QAAQ,uEACK,cAAc,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,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,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,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,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,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEnC5D,sBAAsB,CAAA;AACxB,IAAA,SAAS,GAAG,MAAM,EAAC,YAAoC,EAAC;AACjE,IAAA,aAAa,GAAG,KAAK,CAAC,QAAQ,mFAAa;IAE3C,eAAe,GAAG,MAAM,EAAE;wGAJf,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBnC,o1BAkBA,EAAA,MAAA,EAAA,CAAA,4EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDNI,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,kBAAkB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAElB,mBAAmB,g+BADnBG,eAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAMJ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAblC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,OAAA,EACrB;wBACP,eAAe;wBACf,kBAAkB;wBAClB,cAAc;wBACd,kBAAkB;wBAClBA,eAAa;wBACb;AACD,qBAAA,EAAA,QAAA,EAAA,o1BAAA,EAAA,MAAA,EAAA,CAAA,4EAAA,CAAA,EAAA;;;AEKH;;;;AAIG;MAoBU,gCAAgC,CAAA;AAC3C,IAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;AAC3B,IAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;AACzB,IAAA,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;AACxB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE7C,IAAA,kBAAkB;AAElB,IAAA,0BAA0B,GAA+B;AACvD,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,EAAE;AACP;KACF;AAED,IAAA,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B,EAAE,EAAE,CAAC,EAAE,CAAC;AACR,QAAA,KAAK,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ;AAChC,KAAA,CAAC;AAEF,IAAA,IAAI,qBAAqB,GAAA;QACvB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAgB;IACvD;AACA,IAAA,OAAO,GAAG,KAAK,CAA6B,IAAI,CAAC,0BAA0B,8EAAC;AAC5E,IAAA,iBAAiB,GAAG,QAAQ,CAA6B,OAAO;AAC9D,QAAA,UAAU,EAAE;AACV,YAAA,GAAG,IAAI,CAAC,0BAA0B,CAAC,UAAU;YAC7C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,IAAI,EAAE;AACpC;AACF,KAAA,CAAC,wFAAC;AAEH,IAAA,eAAe,GAAG,KAAK,CAAwC,SAAS,sFAAC;AACzE,IAAA,gBAAgB,GAAG,MAAM,CAAwC,SAAS,uFAAC;AAC3E,IAAA,sBAAsB,GAAG,MAAM,CAAC,MAAK;AACnC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE;QAClC,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;YAC9B,IAAI,CAAC,8BAA8B,EAAE;AACrC,YAAA,IAAI,GAAG,EAAE,gBAAgB,EAAE;gBACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC;YAC/C;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,6FAAC;AAEF;;;;;;AAMG;AACH,IAAA,OAAO,GAAG,KAAK,CAAuB,SAAS,8EAAC;IAEhD,YAAY,GAAG,MAAM,EAAyC;IAC9D,aAAa,GAAG,MAAM,EAAiB;IACvC,cAAc,GAAG,MAAM,EAAW;AAElC,IAAA,QAAQ,GAAG,MAAM,CAAU,KAAK,+EAAC;;AAGjC,IAAA,kCAAkC;;AAGlC,IAAA,SAAS,GAAG,MAAM,CAAkC,SAAS,gFAAC;AAC9D,IAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;AAC7B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;QAC3B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QACpD,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,EAAE;gBAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAClF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;AAC/E,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,uFAAC;AACF,IAAA,cAAc,GAAG,MAAM,CAAS,EAAE,qFAAC;AACnC,IAAA,cAAc,GAAG,MAAM,CAA0C,SAAS,qFAAC;AAE3E,IAAA,QAAQ,CAAC,SAA8B,EAAA;QACrC,OAAO,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK;IAC7F;AAEA,IAAA,YAAY,CAAC,EAAU,EAAE,MAAM,GAAG,KAAK,EAAA;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QAC9E,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;YAC7B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAC1B,CAAC,GAAG,MACD;AACC,gBAAA,GAAG,GAAG;AACN,gBAAA,gBAAgB,EAAE;AACnB,aAAA,CAA8B,CAClC;YACD,IAAI,CAAC,8BAA8B,EAAE;QACvC;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B;AACA,QAAA,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,gBAAgB,EAAE;IACtC;IAEA,mBAAmB,CAAC,MAAe,EAAE,MAAwB,EAAA;QAC3D,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;QAC5B;QACA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IACrD;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACjC,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,GAAG,GAAG;AACJ,gBAAA,UAAU,EAAE;aACb;QACH;QACA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;QAEnD,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,YAAY,GAAwB;AACxC,gBAAA,EAAE,EAAE,eAAe,CAAC,IAAI,EAAE;AAC1B,gBAAA,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAe;AAC/C,gBAAA,IAAI,EAAE;aACP;AAED,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACxB,gBAAA,GAAG,GAAG;gBACN,UAAU,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC;gBAC7C,gBAAgB,EAAE,YAAY,CAAC;AAChC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;AAChC,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC;QACnF;aAAO;YACL,MAAM,aAAa,GAAW,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;AACnG,YAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;gBACxB,MAAM,gBAAgB,GAAG,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC;gBACtD,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAe;AACjE,gBAAA,MAAM,UAAU,GAA0B,GAAG,CAAC,UAAU;AACxD,gBAAA,UAAU,CAAC,aAAa,CAAC,GAAG,gBAAgB;AAE5C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACxB,oBAAA,GAAG,GAAG;oBACN;AACD,iBAAA,CAAC;YACJ;iBAAO;;AAEL,gBAAA,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAe;YAChF;QACF;AAEA,QAAA,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE;QAChC,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEA,8BAA8B,GAAA;AAC5B,QAAA,IAAI,CAAC,kCAAkC,GAAG,eAAe,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IACvG;AAEA,IAAA,WAAW,CAAC,CAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5B;AAEA,IAAA,YAAY,CAAC,IAAiC,EAAA;AAC5C,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;QAC3B,IAAI,EAAE,EAAE;AACN,YAAA,EAAE,CAAC,IAAI,GAAG,IAAI;AACd,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACnC,YAAA,MAAM,GAAG,GAAW,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAC9E,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;gBACZ,MAAM,GAAG,GAA0B,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,IAAI,EAAE;AAC5E,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;gBACb,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM;AACtC,oBAAA,GAAG,IAAI;AACP,oBAAA,UAAU,EAAE;AACb,iBAAA,CAAC,CAAC;YACL;QACF;IACF;;IAGA,sBAAsB,GAAA;QACpB,IAAI,CAAC,aAAa,EAAE;;;AAGpB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,kCAAkC,EAAE;AAC3C,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACrG;QACA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,gBAAgB;AACpD,QAAA,IAAI,GAAG;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;IAEA,sBAAsB,GAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACnC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;AAC3B,QAAA,IAAI,EAAE,IAAI,GAAG,EAAE;YACb,MAAM,GAAG,GAAW,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACnE,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;AACZ,gBAAA,IAAI,CAAC;AACF,qBAAA,OAAO,CAAC;oBACP,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,6DAA6D,EAAE;wBAC7F,KAAK,EAAE,EAAE,CAAC;qBACX;iBACF;AACA,qBAAA,SAAS,CAAC,CAAC,SAAkB,KAAI;AAChC,oBAAA,IAAI,CAAC,SAAS;wBAAE;AAChB,oBAAA,MAAM,UAAU,GAA0B,GAAG,CAAC,UAAU;AACxD,oBAAA,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;;AAGzB,oBAAA,MAAM,mBAAmB,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS;AAE7E,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACxB,wBAAA,GAAG,GAAG;wBACN,UAAU;wBACV,gBAAgB,EAAE,mBAAmB,EAAE;AACxC,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC;oBACvC,IAAI,CAAC,gBAAgB,EAAE;AACzB,gBAAA,CAAC,CAAC;YACN;QACF;IACF;IAEA,gBAAgB,GAAA;QACd,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACjD;wGAjOW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,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,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/C7C,m7FA4EA,EAAA,MAAA,EAAA,CAAA,2nBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7CI,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,eAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,kBAAkB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,UAAA,EAAA,IAAA,EACnB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,qNACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEhB,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EADtB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAMJ,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAnB5C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,OAAA,EAC7B;wBACP,sBAAsB;wBACtB,kBAAkB;wBAClB,mBAAmB;wBACnB,cAAc;wBACd,eAAe;wBACf,aAAa;wBACb,kBAAkB;wBAClB,aAAa;wBACb,gBAAgB;wBAChB,gBAAgB;wBAChB,aAAa;wBACb;AACD,qBAAA,EAAA,QAAA,EAAA,m7FAAA,EAAA,MAAA,EAAA,CAAA,2nBAAA,CAAA,EAAA;;;AEtCH,MAAM,GAAG,GAAG;IACR,sBAAsB;IACtB;CACH;MAMc,mBAAmB,CAAA;wGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAR9B,sBAAsB;AACtB,YAAA,gCAAgC,aADhC,sBAAsB;YACtB,gCAAgC,CAAA,EAAA,CAAA;AAOrB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAHpB,GAAG,CAAA,EAAA,CAAA;;4FAGF,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,GAAG,CAAC;oBACd,OAAO,EAAE,CAAC,GAAG;AACd,iBAAA;;;ACbH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-components-widget-grid.mjs","sources":["../../../../../libs/yuuvis/client-components/widget-grid/src/lib/services/widget-grid.utils.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/components/noop/noop.component.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/components/noop/noop.component.html","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/services/widget-grid-registry.service.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/services/widget-grid.service.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/components/widget-picker/widget-picker.component.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/components/widget-picker/widget-picker.component.html","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/services/widget-grid-event.service.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid/widget-grid.component.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid/widget-grid.component.html","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/components/workspace-edit/workspace-edit.component.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/components/workspace-edit/workspace-edit.component.html","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/components/widget-grid-workspaces/widget-grid-workspaces.component.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/components/widget-grid-workspaces/widget-grid-workspaces.component.html","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/components/index.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/services/index.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/lib/widget-grid.module.ts","../../../../../libs/yuuvis/client-components/widget-grid/src/yuuvis-client-components-widget-grid.ts"],"sourcesContent":["export class WidgetGridUtils {\n static PREF_FUNCTION = 'Function';\n static PREF_RANGEVALUE = 'RangeValue';\n\n /**\n * Takes a `WidgetGridItemConfig` and stringifies it. The challenge\n * here is that callback functions should also be stringified.\n * @param gridItemConfig the config object\n */\n static gridConfigStringify(o: any): string {\n return JSON.stringify(o, (key, value) => {\n if (typeof value === 'function') {\n return `/${WidgetGridUtils.PREF_FUNCTION}(${value.toString()})/`;\n }\n return value;\n });\n }\n\n /**\n * Takes a string stringified with `gridConfigStringify()` and parses it\n * to output a proper WidgetGridItemConfig.\n * @param stringifiedConfig stringified widget grid config\n */\n static gridConfigParse(stringifiedConfig: string): any {\n return JSON.parse(stringifiedConfig, function (key, value) {\n if (\n typeof value === 'string' &&\n value.startsWith(`/${WidgetGridUtils.PREF_FUNCTION}(`) &&\n // value.startsWith('/Function(') &&\n value.endsWith(')/')\n ) {\n value = value.substring(WidgetGridUtils.PREF_FUNCTION.length + 2, value.length - 2);\n return (0, eval)('(' + value + ')');\n }\n return value;\n });\n }\n\n public static uuid(): string {\n return WidgetGridUtils._p8() + WidgetGridUtils._p8(true) + WidgetGridUtils._p8(true) + WidgetGridUtils._p8();\n }\n\n private static _p8(s?: boolean): string {\n const p = (Math.random().toString(16) + '000000000').substr(2, 8);\n return s ? `-${p.substr(0, 4)}-${p.substr(4, 4)}` : p;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { IWidgetComponent } from '../../models';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'yuv-noop',\n templateUrl: './noop.component.html',\n styleUrls: ['./noop.component.scss']\n})\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class NoopComponent implements IWidgetComponent<any> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() widgetConfig: any;\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><circle cx=\"15.5\" cy=\"9.5\" r=\"1.5\"/><circle cx=\"8.5\" cy=\"9.5\" r=\"1.5\"/><path d=\"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm0-6c-2.33 0-4.32 1.45-5.12 3.5h1.67c.69-1.19 1.97-2 3.45-2s2.75.81 3.45 2h1.67c-.8-2.05-2.79-3.5-5.12-3.5z\"/></svg>","import { inject, Injectable, Type } from '@angular/core';\n\nimport { TranslateService } from '@yuuvis/client-core';\n\nimport { NoopComponent } from '../components/noop/noop.component';\nimport { GridWidget, IWidgetComponent } from '../models';\n\n/**\n * This service provides the list of widgets that could be added\n * to a widget grid. You could use it to register your own\n * widgets.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class WidgetGridRegistry {\n readonly translate = inject(TranslateService);\n\n /**\n * List of pre-registered widgets provided out-of-the-box\n * by the widget grid module\n */\n private registeredWidgets: GridWidget<unknown>[] = [];\n /**\n * Buckets are collection of widget references.\n * You can put any widget registered globally into a bucket. Later on you can grab\n * widgets from a certain bucket. This enables apps to structure their widgets when e.g.\n * using multiple widget grids with their own set of available widgets.\n */\n private widgetBuckets: Record<string, string[]> = {};\n\n /**\n * Get the noop component. This component will be rendered in\n * the grid tile if not matching widget could be found in the\n * list of registered widgets. It will show some kind of 'not\n * found' message and provide the controls to remove that none\n * existing component from the widget grid.\n * @returns NoopComponent\n */\n getNoopWidget(): GridWidget<unknown> {\n return {\n id: 'noop',\n label: this.translate.instant('yuv.widget-grid.widget.noop.label'),\n widgetComponent: NoopComponent\n };\n }\n\n /**\n * Setup components are the administrative part of a widget. They\n * are used to set up a widget. Not all the widgets will have a setup\n * component.\n * @param widgetName The widgets name\n * @returns The setup component of a widget. Throws error if there\n * is not widget registered with the given name\n */\n getWidgetSetupComponent(widgetName: string): Type<unknown> | undefined {\n const widget = this.registeredWidgets.find((widget) => widget.id === widgetName);\n if (!widget) throw Error('Widget setup component not found');\n return widget.setupComponent;\n }\n\n /**\n * Get the component for a widget. This is the component that will\n * be rendered in a grid tile.\n * @param widgetName The widgets name\n * @returns The widget component or noop component if there is\n * no component registered with the given name\n */\n getWidgetComponent(widgetName: string): typeof NoopComponent | Type<IWidgetComponent<unknown>> {\n const widget = this.registeredWidgets.find((widget) => widget.id === widgetName);\n if (!widget) console.error('Widget component not found');\n return widget?.widgetComponent || NoopComponent;\n }\n\n /**\n * Evaluates whether the widget with the given name is applicable for\n * the current runtime context. Widgets without an `isApplicable`\n * predicate are considered applicable. Unknown widgets are reported\n * as applicable so the noop fallback can still render.\n * @param widgetName The widgets name\n */\n isWidgetApplicable(widgetName: string): boolean {\n const widget = this.registeredWidgets.find((widget) => widget.id === widgetName);\n if (!widget) return true;\n return widget.isApplicable?.() ?? true;\n }\n\n /**\n * Adds a new widget to the list of registered widgets. That way\n * you can create custom widgets that are then available to be\n * added to a users widget grid.\n * @param widget The widget to be registered\n * @param bucket List of buckets to register to. If a bucket does\n * not exist it'll be created.\n */\n registerGridWidget(widget: GridWidget<unknown>, buckets?: string[]): void {\n const existingWidget = this.registeredWidgets.find((item) => item.id === widget.id);\n if (!existingWidget) this.registeredWidgets.push(widget);\n\n if (buckets?.length) {\n buckets.forEach((bucket) => {\n this._addToBucket(bucket, widget.id);\n });\n }\n }\n\n /**\n * Register a collection of widgets\n * @param widgets The widgets to be registered\n * @param bucket List of buckets to register to. If a bucket does\n * not exist it'll be created.\n */\n registerGridWidgets(widgets: GridWidget<unknown>[], buckets?: string[]): void {\n const alreadyRegisteredWidgetNames = this.registeredWidgets.map((widget) => widget.id);\n const widgetsToRegister = widgets.filter((widget) => !alreadyRegisteredWidgetNames.includes(widget.id));\n this.registeredWidgets = [\n ...this.registeredWidgets,\n ...widgetsToRegister.map((widget) => this.#translateLabel(widget))\n ];\n\n if (buckets?.length) {\n buckets.forEach((bucket) => widgets.forEach((widget) => this._addToBucket(bucket, widget.id)));\n }\n }\n\n removeRegisteredWidget(id: string): void {\n this.registeredWidgets = this.registeredWidgets.filter((widget) => widget.id !== id);\n }\n\n clearRegisteredWidget(): void {\n this.registeredWidgets = [];\n }\n\n /**\n * Get registered widgets. This list could be narrowed down by a list\n * of buckets. Buckets are lists of registered widgets registered for\n * a certain key (the buckets name).\n * @param buckets name of buckets to restrict the widgets to\n * @returns Array of grid widgets\n */\n getRegisteredWidgets(buckets?: string[]): GridWidget<unknown>[] {\n const applicable = (widget: GridWidget<unknown>): boolean => widget.isApplicable?.() ?? true;\n if (buckets?.length) {\n // buckets may contain wildcards ...\n // grab all buckets matching the wildcards\n const matchedBuckets: Record<string, number> = {};\n buckets.forEach((bucket) => {\n if (bucket.match(/[*?]/)) {\n // bucket has a pattern\n Object.keys(this.widgetBuckets).forEach((widgetBucket: string) => {\n if (this._wildcardMatch(widgetBucket, bucket)) matchedBuckets[widgetBucket] = 0;\n });\n } else matchedBuckets[bucket] = 0;\n });\n const bucketWidgetNames: Record<string, number> = {};\n Object.keys(matchedBuckets).forEach((bucket) =>\n this.widgetBuckets[bucket].forEach((widgetName: string) => {\n bucketWidgetNames[widgetName] = 0;\n })\n );\n const widgetNames: string[] = Object.keys(bucketWidgetNames);\n return this.registeredWidgets\n .filter((gridWidget: GridWidget<unknown>) => widgetNames.includes(gridWidget.id) && applicable(gridWidget))\n .map((widget) => this.#translateLabel(widget));\n } else return this.registeredWidgets.filter(applicable).map((widget) => this.#translateLabel(widget));\n }\n\n private _wildcardMatch(text: string, pattern: string): boolean {\n const regexPattern = new RegExp('^' + pattern.replace(/\\?/g, '.').replace(/\\*/g, '.*') + '$');\n return regexPattern.test(text);\n }\n\n private _addToBucket(bucket: string, widgetName: string): void {\n if (!this.widgetBuckets[bucket]) this.widgetBuckets[bucket] = [];\n this.widgetBuckets[bucket].push(widgetName);\n }\n\n #translateLabel(widget: GridWidget<unknown>): GridWidget<unknown> {\n return {\n ...widget,\n label: this.#tryTranslate(widget.label),\n description: widget.description ? this.#tryTranslate(widget.description) : widget.description,\n group: widget.group ? this.#tryTranslate(widget.group) : widget.group\n };\n }\n\n #tryTranslate(value: string): string {\n const translated = this.translate.instant(value);\n return translated && !translated.startsWith('!missing') ? translated : value;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\n\nimport { WidgetGridRegistry } from '../..';\nimport { NoopComponent } from '../components/noop/noop.component';\nimport { AddItemSize, WidgetGridItem, WidgetGridItemConfig } from '../models';\nimport { WidgetGridUtils } from './widget-grid.utils';\n\n/**\n * Service managing a widget grid. Also includes a set of labels that will be\n * used by the grid and its widgets. Default labels are provided out of the\n * box. But if you want to use custom ones or add i18n you could overwrite\n * them. The grid as well as the widgets will use those labels or fall back\n * to their default ones. If you are developing own widgets you should\n * consider using those labels as well.\n */\n@Injectable()\nexport class WidgetGridService {\n //#region Dependencies\n\n #widgetGridRegistry = inject(WidgetGridRegistry);\n\n //#endregion\n\n //#region Class properties\n\n #widgetGrid: WidgetGridItem[] = [];\n #widgetGridSource = new ReplaySubject<WidgetGridItem[]>();\n widgetGrid$: Observable<WidgetGridItem[]> = this.#widgetGridSource.asObservable();\n\n #widgetGridUpdateSource = new Subject<string>();\n /**\n * Emitted when the widget grid has been updated\n */\n widgetGridUpdate$: Observable<string> = this.#widgetGridUpdateSource.asObservable();\n\n addItemSize: AddItemSize = {\n rows: 2,\n cols: 3\n };\n\n //#endregion\n\n //#region Public methods\n\n setWidgetGrid(gridItemConfig: WidgetGridItemConfig[] | undefined): void {\n if (gridItemConfig) {\n // create actual widget grid from widget grid config\n this.#widgetGrid = [...gridItemConfig].map((gic) => {\n const cmp = this.#widgetGridRegistry.getWidgetComponent(gic.widgetName);\n const gridItem: WidgetGridItem = {\n ...gic,\n widget: cmp,\n widgetConfigMap: {\n widgetConfig:\n cmp === NoopComponent\n ? {\n widgetName: gic.widgetName\n }\n : gic.widgetConfig\n },\n isApplicable: this.#widgetGridRegistry.isWidgetApplicable(gic.widgetName)\n };\n return gridItem;\n });\n } else {\n this.#widgetGrid = [];\n }\n this.#widgetGridSource.next(this.#widgetGrid);\n }\n\n /**\n * Update config of an existing widget\n * @param widgetId ID of the widget to be updated\n * @param setupWidgetConfig The updated configuration for that widget\n */\n updateWidget(widgetId: string, setupWidgetConfig: unknown): void {\n const gridWidget = this.#widgetGrid.find((widget) => widget.id === widgetId);\n if (gridWidget && setupWidgetConfig) {\n gridWidget.widgetConfig = setupWidgetConfig;\n gridWidget.widgetConfigMap = { widgetConfig: setupWidgetConfig };\n }\n this.#widgetGridSource.next(this.#widgetGrid);\n this.#widgetGridUpdateSource.next(widgetId);\n }\n\n replaceWidget(widgetId: string, widgetName: string, setupWidgetConfig?: unknown): void {\n const gridWidgetIndex = this.#widgetGrid.findIndex((widget) => widget.id === widgetId);\n if (gridWidgetIndex !== -1) {\n const widget: WidgetGridItem = {\n ...this.#widgetGrid[gridWidgetIndex],\n ...{\n widgetName,\n widgetConfig: setupWidgetConfig || {},\n widget: this.#widgetGridRegistry.getWidgetComponent(widgetName),\n widgetConfigMap: { widgetConfig: setupWidgetConfig || {} },\n isApplicable: this.#widgetGridRegistry.isWidgetApplicable(widgetName)\n }\n };\n this.#widgetGrid[gridWidgetIndex] = widget;\n this.#widgetGridSource.next(this.#widgetGrid);\n this.#widgetGridUpdateSource.next(widgetId);\n }\n }\n\n /**\n * Add a new grid item to the widget grid.\n * @param widgetName The name of the grid item to be added\n * @param setupWidgetConfig\n */\n addWidget(widgetName: string, setupWidgetConfig?: unknown): void {\n const gridWidget: WidgetGridItem = {\n id: WidgetGridUtils.uuid(),\n widgetName,\n widgetConfig: setupWidgetConfig,\n widget: this.#widgetGridRegistry.getWidgetComponent(widgetName),\n widgetConfigMap: { widgetConfig: setupWidgetConfig },\n isApplicable: this.#widgetGridRegistry.isWidgetApplicable(widgetName),\n x: 0,\n y: 0,\n rows: this.addItemSize.rows,\n cols: this.addItemSize.cols\n };\n this.#widgetGrid.push(gridWidget);\n this.#widgetGridSource.next(this.#widgetGrid);\n this.#widgetGridUpdateSource.next(gridWidget.id);\n }\n\n removeWidget(gridItemId: string): void {\n const idx = this.#widgetGrid.findIndex((widget) => widget.id === gridItemId);\n this.#widgetGrid.splice(idx, 1);\n this.#widgetGridSource.next(this.#widgetGrid);\n this.#widgetGridUpdateSource.next(gridItemId);\n }\n\n //#endregion\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, OnInit, output, signal } from '@angular/core';\nimport { FormControlStatus } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DialogComponent } from '@yuuvis/client-components/common';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { DynamicIoModule, InputsType, OutputsType } from 'ng-dynamic-component';\nimport { SignalComponentIoModule } from 'ng-dynamic-component/signal-component-io';\nimport { GridWidget, WidgetPickerData, WidgetPickerOptions } from '../../models';\nimport { WidgetGridRegistry } from '../../services/widget-grid-registry.service';\nimport { WidgetGridService } from '../../services/widget-grid.service';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'yuv-widget-picker',\n imports: [\n CommonModule,\n MatButtonModule,\n TranslatePipe,\n MatIconModule,\n DialogComponent,\n YmtButtonDirective,\n DynamicIoModule,\n SignalComponentIoModule\n ],\n templateUrl: './widget-picker.component.html',\n styleUrls: ['./widget-picker.component.scss']\n})\nexport class WidgetPickerComponent implements OnInit {\n //#region Dependencies\n\n #widgetGridRegistry = inject(WidgetGridRegistry);\n #widgetGridService = inject(WidgetGridService);\n readonly translate = inject(TranslateService);\n #dialogData = inject<WidgetPickerOptions>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<WidgetPickerComponent>);\n\n //#endregion\n\n //#region Angular stuff\n\n pickerData = input<WidgetPickerData | undefined>(this.#dialogData.pickerData);\n\n /**\n * Collection of buckets to load available widgets from. Wildcards are also posssible:\n * `[buckets]=\"['app.default', '*.public.*', 'app.no?.widgets']\"`\n *\n * `*` represents any character 0-n times\n * `?` represents exactly one character\n */\n buckets = input<string[] | undefined>(this.#dialogData.buckets);\n\n picked = output();\n canceled = output();\n\n //#endregion\n\n //#region Properties\n\n #DEFAULT_GROUP_KEY = 'yuv.widget-grid.widget-picker.group.default';\n\n widgetId: string | undefined;\n selectedWidget: GridWidget<unknown> | undefined;\n // ADR: InputsType (not AttributesMap) - bound via ndcDynamicInputs in the template,\n // so values are component inputs (unknown), not HTML attribute strings.\n widgetConfigMap: InputsType = {};\n setupWidgetConfig: unknown;\n widgetConfigDirty = false;\n widgetConfigState?: FormControlStatus;\n registeredWidgets: GridWidget<unknown>[] = [];\n groupedWidgets: { group: string; widgets: GridWidget<unknown>[] }[] = [];\n setupWidgetDynamicOutputs: OutputsType = {\n widgetConfigChange: (widgetConfig: unknown) => {\n this.#handleSetupConfigChange(widgetConfig);\n },\n widgetConfigStateChange: (widgetConfigState?: unknown) => {\n this.widgetConfigState = widgetConfigState as FormControlStatus | undefined;\n }\n };\n #expandedGroups = signal(new Set<string>());\n expandedGroups = this.#expandedGroups.asReadonly();\n\n //#endregion\n\n constructor() {\n effect(this.#pickerDataEffect);\n }\n\n //#region Lifecycle hooks\n\n ngOnInit(): void {\n this.#initRegisteredWidgets();\n this.#initGroupedWidgets();\n }\n\n //#endregion\n\n //#region UI Methods\n\n onSetupComponentCancel(): void {\n this.selectedWidget = undefined;\n this.setupWidgetConfig = undefined;\n }\n\n onSetupComponentSave(): void {\n // TODO: save/emit config\n if (this.widgetId && this.selectedWidget) {\n if (this.pickerData()?.widgetName !== this.selectedWidget.id) {\n this.#widgetGridService.replaceWidget(this.widgetId, this.selectedWidget.id, this.setupWidgetConfig);\n } else {\n this.#widgetGridService.updateWidget(this.widgetId, this.setupWidgetConfig);\n }\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.#widgetGridService.addWidget(this.selectedWidget!.id, this.setupWidgetConfig);\n }\n this.picked.emit();\n this.#dialogRef.close();\n }\n\n onCancel(): void {\n this.canceled.emit();\n this.#dialogRef.close();\n }\n\n onToggleGroup(group: string): void {\n const next = new Set(this.#expandedGroups());\n if (next.has(group)) next.delete(group);\n else next.add(group);\n this.#expandedGroups.set(next);\n }\n\n onPick(widget: GridWidget<unknown>): void {\n if (widget?.setupComponent) {\n // if the selected widget has a setup component, we'll continue ...\n this.selectedWidget = widget?.setupComponent ? widget : undefined;\n } else {\n if (this.widgetId) {\n // update existing widget\n this.#widgetGridService.replaceWidget(this.widgetId, widget.id);\n } else {\n this.#widgetGridService.addWidget(widget.id);\n }\n this.picked.emit();\n this.#dialogRef.close();\n }\n }\n\n //#endregion\n\n //#region Init\n\n #initRegisteredWidgets(): void {\n this.registeredWidgets = this.#widgetGridRegistry.getRegisteredWidgets(this.buckets());\n }\n\n #initGroupedWidgets(): void {\n this.groupedWidgets = this.#groupWidgets(this.registeredWidgets);\n }\n\n //#endregion\n\n //#region Utilities\n\n #handleSetupConfigChange(setupConfig: unknown): void {\n this.widgetConfigDirty = !!setupConfig;\n this.setupWidgetConfig = setupConfig;\n }\n\n #groupWidgets(widgets: GridWidget<unknown>[]): { group: string; widgets: GridWidget<unknown>[] }[] {\n const defaultGroupLabel = this.translate.instant(this.#DEFAULT_GROUP_KEY);\n const order: string[] = [];\n const buckets = new Map<string, GridWidget<unknown>[]>();\n widgets.forEach((widget) => {\n const key = widget.group || defaultGroupLabel;\n let bucket = buckets.get(key);\n if (!bucket) {\n bucket = [];\n buckets.set(key, bucket);\n order.push(key);\n }\n bucket.push(widget);\n });\n return order.map((group) => ({ group, widgets: buckets.get(group) ?? [] }));\n }\n\n //#endregion\n\n //#region Effects\n\n readonly #pickerDataEffect = (): void => {\n const pickerData = this.pickerData();\n if (pickerData) {\n const gridWidget: GridWidget<unknown> | undefined = this.#widgetGridRegistry\n .getRegisteredWidgets()\n .find((widget) => widget.id === pickerData.widgetName);\n this.selectedWidget = gridWidget?.setupComponent ? gridWidget : undefined;\n this.widgetConfigMap = pickerData.widgetConfigMap || {};\n this.widgetId = pickerData.widgetId;\n }\n };\n\n //#endregion\n}\n","<yuv-dialog [headertitle]=\"selectedWidget ? selectedWidget.label : ('yuv.widget-grid.widget-picker.title' | translate)\">\n <!-- <header class=\"dark\" [ngClass]=\"{ listing: !selectedWidget }\">\n @if (selectedWidget) {\n <button mat-icon-button (click)=\"reset()\"><mat-icon>back</mat-icon></button>\n }\n <div class=\"title\">{{ selectedWidget ? selectedWidget.label : ('yuv.widget-grid.widget-picker.title' | translate) }}</div>\n <button mat-icon-button (click)=\"cancel()\"><mat-icon>clear</mat-icon></button>\n </header> -->\n\n <main [class]=\"!selectedWidget ? 'widget-listing' : 'widget-setup'\">\n @if (!selectedWidget) {\n <ul class=\"groups\" role=\"list\">\n @for (g of groupedWidgets; track g.group) {\n @let expanded = expandedGroups().has(g.group);\n <li class=\"group\" [class.group--expanded]=\"expanded\">\n <button type=\"button\" class=\"group-header\" [attr.aria-expanded]=\"expanded\" (click)=\"onToggleGroup(g.group)\">\n <mat-icon class=\"group-chevron ymt-icon--size-s\">\n {{ expanded ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n <span class=\"group-label\">{{ g.group }}</span>\n <span class=\"group-count\">{{ g.widgets.length }}</span>\n </button>\n @if (expanded) {\n <ul class=\"widgets\" role=\"list\">\n @for (w of g.widgets; track w.id) {\n <li>\n <button type=\"button\" class=\"widget-item\" (click)=\"onPick(w)\">\n <span class=\"widget-title\">{{ w.label }}</span>\n @if (w.description) {\n <span class=\"widget-description\">{{ w.description }}</span>\n }\n </button>\n </li>\n }\n </ul>\n }\n </li>\n } @empty {\n <div class=\"empty\">\n {{ 'yuv.widget-grid.widget-picker.empty' | translate }}\n </div>\n }\n </ul>\n } @else {\n <div class=\"component\">\n <ng-container\n *ngComponentOutlet=\"\n selectedWidget!.setupComponent!;\n ndcDynamicInputs: widgetConfigMap;\n ndcDynamicOutputs: setupWidgetDynamicOutputs\n \"\n />\n </div>\n }\n </main>\n <footer>\n @if (selectedWidget) {\n <button ymtButton=\"secondary\" (click)=\"onSetupComponentCancel()\">\n {{ 'yuv.widget-grid.button.cancel' | translate }}\n </button>\n <button\n ymtButton=\"primary\"\n [disabled]=\"!widgetConfigDirty || widgetConfigState === 'INVALID'\"\n (click)=\"onSetupComponentSave()\"\n >\n {{ 'yuv.widget-grid.button.save' | translate }}\n </button>\n } @else {\n <button ymtButton=\"secondary\" (click)=\"onCancel()\">{{ 'yuv.widget-grid.button.cancel' | translate }}</button>\n }\n </footer>\n</yuv-dialog>\n","import { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { GridItemEvent } from '../models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WidgetGridEventService {\n //#region Properties\n\n #widgetGridEventSource = new ReplaySubject<GridItemEvent>();\n\n widgetEvents$: Observable<GridItemEvent> = this.#widgetGridEventSource.asObservable();\n\n //#endregion\n\n //#region Public methods\n\n trigger(evt: GridItemEvent): void {\n this.#widgetGridEventSource.next(evt);\n }\n\n //#endregion\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n OnInit,\n output,\n signal,\n TemplateRef,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { DisplayGrid, Gridster, GridsterConfig, GridsterItem, GridsterItemConfig, GridType } from 'angular-gridster2';\nimport { DynamicIoModule } from 'ng-dynamic-component';\nimport { WidgetPickerComponent } from '../components/widget-picker/widget-picker.component';\nimport { GridItemEvent, WidgetGridConfig, WidgetGridItem, WidgetGridItemConfig, WidgetPickerData } from '../models';\nimport { WidgetGridEventService } from '../services/widget-grid-event.service';\nimport { WidgetGridService } from '../services/widget-grid.service';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { SignalComponentIoModule } from 'ng-dynamic-component/signal-component-io';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'yuv-widget-grid',\n imports: [\n CommonModule,\n DynamicIoModule,\n SignalComponentIoModule,\n TranslatePipe,\n Gridster,\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n WidgetPickerComponent,\n GridsterItem,\n YmtIconButtonDirective,\n MatTooltip\n ],\n providers: [WidgetGridService],\n templateUrl: './widget-grid.component.html',\n styleUrl: './widget-grid.component.scss',\n host: { '[class.widget-grid-edit]': 'editMode()' }\n})\nexport class YuvWidgetGridComponent implements OnInit {\n //#region Dependencies\n\n #dialog = inject(MatDialog);\n #widgetGridService = inject(WidgetGridService);\n #widgetGridEventService = inject(WidgetGridEventService);\n #destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region Angular stuff\n\n gridster = viewChild(Gridster);\n widgetPicker = viewChild.required('widgetPicker', { read: TemplateRef });\n gridConfig = input<Partial<WidgetGridConfig> | undefined>();\n\n _editMode = signal<boolean>(false);\n /**\n * Whether or not to enable edit mode. In edit mode controls\n * for editing existing tiles and creating new ones are shown.\n * This mode also enables positioning and resizing of the tiles.\n */\n editMode = input<boolean>(false);\n\n gridItemConfig = input<WidgetGridItemConfig[] | undefined>(undefined);\n\n /**\n * Collection of buckets to load available widgets from. Wildcards are also possible:\n * `[buckets]=\"['app.default', '*.public.*', 'app.no?.widgets']\"`\n *\n * `*` represents any character 0-n times\n * `?` represents exactly one character\n */\n buckets = input<string[] | undefined>(undefined);\n // @Input() buckets?: string[];\n\n /**\n * Emitted when the grid has been changed\n */\n gridChange = output<WidgetGridItemConfig[]>();\n gridItemEvent = output<GridItemEvent>();\n /**\n * Emitted when the widget picker is opened or closed in edit mode\n */\n widgetPickerOpen = output<boolean>();\n\n //#endregion\n\n //#region Class properties\n\n /**\n * Held as a signal so gridster's `options` InputSignal sees a new reference\n * whenever edit mode or grid config changes. Mutating the inner object would\n * keep the same reference and gridster's `$options` computed would never\n * recompute — leaving draggable/resizable stuck at their initial `false`.\n */\n options = signal<GridsterConfig>({\n gridType: GridType.Fit,\n displayGrid: DisplayGrid.None,\n pushItems: false,\n outerMargin: false,\n swap: false,\n draggable: {\n enabled: false,\n ignoreContent: true,\n dragHandleClass: 'dragHandle'\n },\n resizable: {\n enabled: false\n },\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n itemChangeCallback: (item: GridsterItemConfig, itemComponent: GridsterItem) => {\n this.#emitChange();\n }\n });\n\n widgetGrid: WidgetGridItem[] = [];\n widgetPickerData: WidgetPickerData | undefined;\n\n //#endregion\n\n constructor() {\n effect(this.#gridItemConfigEffect);\n effect(this.#editModeEffect);\n effect(this.#gridConfigEffect);\n }\n\n //#region Lifecycle Hooks\n\n ngOnInit(): void {\n this.#respondToWidgetServiceEvents();\n }\n\n //#endregion\n\n // #region UI Methods\n\n onOpenWidgetPicker(item?: WidgetGridItem): void {\n if (item) {\n // open setup component for selected grid item\n this.widgetPickerData = {\n widgetName: item.widgetName,\n widgetConfigMap: item.widgetConfigMap,\n widgetId: item.id\n };\n } else {\n this.widgetPickerData = undefined;\n }\n this.widgetPickerOpen.emit(true);\n this.#dialog\n .open(this.widgetPicker(), {\n data: {\n pickerData: this.widgetPickerData,\n buckets: this.buckets()\n }\n })\n .afterClosed()\n .subscribe(() => this.widgetPickerOpen.emit(false));\n }\n\n /**\n * Removes a widget from the grid\n * @param item The widget to be removed\n */\n onRemoveItem(item: WidgetGridItem): void {\n this.#widgetGridService.removeWidget(item.id);\n }\n\n /**\n * Add a new widget to the grid by opening the widget picker\n */\n onAddItem(): void {\n this.onOpenWidgetPicker();\n }\n\n //#endregion\n\n //#region Utilities\n\n #emitChange(): void {\n const mapped: WidgetGridItemConfig[] = [];\n this.widgetGrid.forEach((item) => {\n const mappedWidget: WidgetGridItemConfig = { ...item };\n delete mappedWidget['widget'];\n delete mappedWidget['widgetConfigMap'];\n delete mappedWidget['isApplicable'];\n mapped.push(mappedWidget);\n });\n this.gridChange.emit(mapped);\n }\n\n #respondToWidgetServiceEvents(): void {\n this.#widgetGridService.widgetGrid$\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe((widgetGrid: WidgetGridItem[]) => {\n this.widgetGrid = widgetGrid;\n });\n\n this.#widgetGridEventService.widgetEvents$\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe((evt: GridItemEvent) => {\n this.gridItemEvent.emit(evt);\n });\n\n this.#widgetGridService.widgetGridUpdate$.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {\n this.#emitChange();\n });\n }\n\n //#endregion\n\n //#region Effects\n\n readonly #gridItemConfigEffect = (): void => {\n this.#widgetGridService.setWidgetGrid(this.gridItemConfig());\n };\n\n readonly #editModeEffect = (): void => {\n const editMode = this.editMode();\n this._editMode.set(editMode);\n this.options.update((option) => ({\n ...option,\n draggable: { ...option.draggable, enabled: !!editMode },\n resizable: { ...option.resizable, enabled: !!editMode },\n displayGrid: editMode ? DisplayGrid.Always : DisplayGrid.None\n }));\n\n // set timeout to ensure that the grid has been redrawn before notifying the widgets about the change\n setTimeout(() => {\n this.gridster()?.api.calculateLayout();\n }, 0);\n };\n\n readonly #gridConfigEffect = (): void => {\n const cfg = this.gridConfig();\n this.options.update((option) => {\n const next = { ...option };\n if (cfg?.rows) {\n next.minRows = cfg.rows;\n next.maxRows = cfg.rows;\n }\n if (cfg?.columns) {\n next.minCols = cfg.columns;\n next.maxCols = cfg.columns;\n }\n if (cfg?.gap) {\n next.margin = cfg.gap;\n }\n if (cfg?.gridType) {\n next.gridType = cfg.gridType;\n }\n return next;\n });\n if (cfg?.newItemWidth || cfg?.newItemHeight) {\n this.#widgetGridService.addItemSize = {\n cols: cfg?.newItemWidth || -1, // default value -1 means the grid will auto-position the new item\n rows: cfg?.newItemHeight || -1 // default value -1 means the grid will auto-position the new item\n };\n }\n // setTimeout breaks the synchronous chain effect → options.update → calculateLayout →\n // itemChangeCallback → gridChange.emit → parent → gridConfig, which would re-trigger\n // this effect and cause NG0103. Also keeps the gridster() viewChild read out of the\n // reactive scope so it doesn't become an effect dependency.\n setTimeout(() => {\n this.gridster()?.api.calculateLayout();\n }, 0);\n };\n\n //#endregion\n}\n","@if (_editMode()) {\n <button\n class=\"fab\"\n mat-fab\n [attr.aria-label]=\"'yuv.widget-grid.widget.add.label' | translate\"\n (click)=\"onAddItem()\"\n [matTooltip]=\"'yuv.widget-grid.widget.add.tooltip' | translate\"\n >\n <mat-icon>add</mat-icon>\n </button>\n}\n\n@if (widgetGrid.length === 0 && !_editMode()) {\n <div class=\"empty\">\n <!-- <p>{{ 'yuv.widget-grid.empty' | translate }}</p>\n <button ymtButton=\"primary\" (click)=\"_editMode.set(true)\">\n {{'yuv.widget-grid.empty.create' | translate}}</button> -->\n <ng-content select=\".empty\"\n ><p>{{ 'yuv.widget-grid.empty' | translate }}</p></ng-content\n >\n </div>\n} @else {\n <gridster [options]=\"options()\">\n @for (item of widgetGrid; track item.id) {\n @if (item.isApplicable) {\n <gridster-item [item]=\"item\">\n @if (_editMode()) {\n <div class=\"toolbar\">\n <!-- drag handle -->\n <mat-icon class=\"dragHandle ymt-icon--size-s\">drag_indicator</mat-icon>\n <!-- edit -->\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"'yuv.widget-grid.widget.edit.tooltip' | translate\"\n (click)=\"onOpenWidgetPicker(item)\"\n >\n <mat-icon class=\"ymt-icon--size-s\">edit</mat-icon>\n </button>\n <!-- remove -->\n <button\n ymt-icon-button\n icon-button-size=\"small\"\n [matTooltip]=\"'yuv.widget-grid.widget.remove.tooltip' | translate\"\n (click)=\"onRemoveItem(item)\"\n >\n <mat-icon class=\"ymt-icon--size-s\">clear</mat-icon>\n </button>\n </div>\n }\n <div class=\"cmp\">\n <ng-container *ngComponentOutlet=\"item.widget; ndcDynamicInputs: item.widgetConfigMap\" />\n </div>\n </gridster-item>\n }\n }\n </gridster>\n}\n<ng-template #widgetPicker>\n <yuv-widget-picker [pickerData]=\"widgetPickerData\" [buckets]=\"buckets()\" />\n</ng-template>\n","import { Component, inject, input, output } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { DialogComponent } from '@yuuvis/client-components/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'yuv-workspace-edit',\n imports: [\n DialogComponent,\n MatFormFieldModule,\n MatInputModule,\n YmtButtonDirective,\n TranslatePipe,\n ReactiveFormsModule\n ],\n templateUrl: './workspace-edit.component.html',\n styleUrl: './workspace-edit.component.scss'\n})\nexport class WorkspaceEditComponent {\n //#region Dependencies\n\n readonly #dialogRef = inject(MatDialogRef<WorkspaceEditComponent>);\n\n //#endregion\n\n //#region Angular stuff\n\n workspaceForm = input.required<FormGroup>();\n\n workspaceSubmit = output();\n\n //#endregion\n\n //#region UI Methods\n\n onCancel(): void {\n this.#dialogRef.close();\n }\n\n //#endregion\n}\n","<yuv-dialog [headertitle]=\"'yuv.widget-grid.workspaces.edit.title' | translate\">\n <main>\n <form id=\"workspaceEditForm\" [formGroup]=\"workspaceForm()\" (ngSubmit)=\"workspaceSubmit.emit()\">\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{ 'yuv.widget-grid.workspaces.workspace.label' | translate }}</mat-label>\n <input matInput formControlName=\"label\" />\n </mat-form-field>\n </form>\n </main>\n <footer>\n <button ymtButton=\"secondary\" type=\"button\" (click)=\"onCancel()\">\n {{ 'yuv.widget-grid.workspaces.edit.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" form=\"workspaceEditForm\" type=\"submit\" [disabled]=\"workspaceForm().invalid\">\n {{ 'yuv.widget-grid.workspaces.edit.save' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { Component, computed, effect, inject, input, output, signal, TemplateRef, untracked } from '@angular/core';\nimport { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ConfirmService } from '@yuuvis/client-components/common';\nimport { Logger, TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport {\n GridItemEvent,\n WidgetGridItemConfig,\n WidgetGridWorkspace,\n WidgetGridWorkspaceConfig,\n WidgetGridWorkspaceOptions\n} from '../../models';\nimport { WidgetGridUtils } from '../../services/widget-grid.utils';\nimport { YuvWidgetGridComponent } from '../../widget-grid/widget-grid.component';\nimport { WorkspaceEditComponent } from '../workspace-edit/workspace-edit.component';\n\n/**\n * Component for managing multiple widget grids in so called workspaces.\n * Each workspace can have its own configuration and widgets. The user can\n * switch between workspaces to use or edit the widgets in the current workspace.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'yuv-widget-grid-workspaces',\n imports: [\n YuvWidgetGridComponent,\n YmtButtonDirective,\n ReactiveFormsModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatMenuModule,\n MatDividerModule,\n MatTooltipModule,\n TranslatePipe,\n WorkspaceEditComponent\n ],\n templateUrl: './widget-grid-workspaces.component.html',\n styleUrl: './widget-grid-workspaces.component.scss'\n})\nexport class YuvWidgetGridWorkspacesComponent {\n //#region Dependencies\n\n #dialog = inject(MatDialog);\n #fb = inject(FormBuilder);\n #confirm = inject(ConfirmService);\n #logger = inject(Logger);\n readonly translate = inject(TranslateService);\n\n //#endregion\n\n //#region Angular stuff\n\n /**\n * Collection of buckets to load available widgets from. Wildcards are also posssible:\n * `[buckets]=\"['app.default', '*.public.*', 'app.no?.widgets']\"`\n *\n * `*` represents any character 0-n times\n * `?` represents exactly one character\n */\n buckets = input<string[] | undefined>(undefined);\n\n configChange = output<WidgetGridWorkspaceConfig | undefined>();\n gridItemEvent = output<GridItemEvent>();\n editModeChange = output<boolean>();\n\n //#endregion\n\n //#region Properties\n\n workspaceDialogRef?: MatDialogRef<unknown, unknown>;\n\n #DEFAULT_WORKSPACE_OPTIONS: WidgetGridWorkspaceOptions = {\n gridConfig: {\n columns: 10,\n rows: 10\n }\n };\n\n workspaceForm = this.#fb.group({\n id: [''],\n label: ['', Validators.required]\n });\n\n get workspaceLabelControl(): FormControl {\n return this.workspaceForm.get('label') as FormControl;\n }\n\n options = input<WidgetGridWorkspaceOptions>(this.#DEFAULT_WORKSPACE_OPTIONS);\n\n _workspaceOptions = computed<WidgetGridWorkspaceOptions>(() => ({\n gridConfig: {\n ...this.#DEFAULT_WORKSPACE_OPTIONS.gridConfig,\n ...(this.options().gridConfig || {})\n }\n }));\n\n workspaceConfig = input<WidgetGridWorkspaceConfig | undefined>(undefined);\n\n _workspaceConfig = signal<WidgetGridWorkspaceConfig | undefined>(undefined);\n\n editMode = signal<boolean>(false);\n\n // currently selected workspace\n workspace = signal<WidgetGridWorkspace | undefined>(undefined);\n\n workspaceLabel = signal<string>('');\n gridItemConfig = signal<WidgetGridItemConfig[] | undefined>(undefined);\n\n // persist the last 'accepted' workspace config to be able to revert changes\n #originalWidgetGridWorkspaceConfig: string | undefined;\n\n //#endregion\n\n constructor() {\n effect(this.#workspaceEffect);\n effect(this.#workspaceConfigEffect);\n }\n\n getLabel(workspace: WidgetGridWorkspace): string {\n return workspace.translateLabel ? this.translate.instant(workspace.label) : workspace.label;\n }\n\n //#region UI Methods\n\n onSetWorkspace(id: string, silent = false): void {\n const workspace = this._workspaceConfig()?.workspaces.find((item) => item.id === id);\n if (workspace) {\n this.workspace.set(workspace);\n this._workspaceConfig.update(\n (cfg) =>\n ({\n ...cfg,\n currentWorkspace: id\n }) as WidgetGridWorkspaceConfig\n );\n this.#updateOriginalWorkspaceConfig();\n } else {\n this.workspace.set(undefined);\n }\n if (!silent) this.#emitConfigChange();\n }\n\n onOpenWorkspaceDialog(create: boolean, tplRef: TemplateRef<unknown>): void {\n if (create) {\n this.workspaceForm.reset();\n }\n this.workspaceDialogRef = this.#dialog.open(tplRef);\n }\n\n onDeleteCurrentWorkspace(): void {\n const workspaceConfig = this._workspaceConfig();\n const workspace = this.workspace();\n if (workspace && workspaceConfig) {\n const idx: number = workspaceConfig.workspaces.findIndex((item) => item.id === workspace.id);\n if (idx > -1) {\n this.#confirm\n .confirm({\n message: this.translate.instant('yuv.widget-grid.workspaces.workspace.delete.confirm.message', {\n label: workspace.label\n })\n })\n .subscribe((confirmed: boolean) => {\n if (!confirmed) return;\n const workspaces: WidgetGridWorkspace[] = workspaceConfig.workspaces;\n workspaces.splice(idx, 1);\n\n // pick another workspace if the current one is deleted\n const newCurrentWorkspace = workspaces.length > 0 ? workspaces[0] : undefined;\n\n this._workspaceConfig.set({\n ...workspaceConfig,\n workspaces,\n currentWorkspace: newCurrentWorkspace?.id\n });\n this.workspace.set(newCurrentWorkspace);\n this.#emitConfigChange();\n });\n }\n }\n }\n\n onToggleEditMode(): void {\n this.editMode.set(!this.editMode());\n }\n\n onRevertWorkspaceConfig(): void {\n if (this.#originalWidgetGridWorkspaceConfig) {\n this._workspaceConfig.set(WidgetGridUtils.gridConfigParse(this.#originalWidgetGridWorkspaceConfig));\n }\n const cws = this.workspaceConfig()?.currentWorkspace;\n if (cws) this.onSetWorkspace(cws, true);\n this.editMode.set(false);\n }\n\n /**\n * Emit current changes and reset original workspace config internally\n *\n * @returns void\n */\n onPersistWorkspaceConfig(): void {\n this.onSaveWorkspace();\n // this.#updateOriginalWorkspaceConfig();\n // this.emitConfigChange();\n this.editMode.set(false);\n }\n\n onGridChange(grid: WidgetGridItemConfig[]): void {\n const workspace = this.workspace();\n if (workspace) {\n workspace.grid = grid;\n const wsc = this._workspaceConfig();\n const idx: number = wsc ? wsc.workspaces.findIndex((item) => item.id === workspace.id) : -1;\n if (idx > -1) {\n const wgw: WidgetGridWorkspace[] = this._workspaceConfig()?.workspaces || [];\n wgw[idx] = workspace;\n this._workspaceConfig.update((curr) => ({\n ...curr,\n workspaces: wgw\n }));\n }\n }\n }\n\n onGridEvent(gridItemEvent: GridItemEvent): void {\n this.gridItemEvent.emit(gridItemEvent);\n }\n\n onEnableEditMode(): void {\n this.editMode.set(true);\n }\n\n onSaveWorkspace(): void {\n let cfg = this._workspaceConfig();\n if (!cfg) {\n cfg = {\n workspaces: []\n };\n }\n const isNewWorkspace = !this.workspaceForm.value.id;\n\n if (isNewWorkspace) {\n const newWorkspace: WidgetGridWorkspace = {\n id: WidgetGridUtils.uuid(),\n label: this.workspaceForm.value.label as string,\n grid: []\n };\n\n this._workspaceConfig.set({\n ...cfg,\n workspaces: [...cfg.workspaces, newWorkspace],\n currentWorkspace: newWorkspace.id\n });\n this.workspace.set(newWorkspace);\n this.workspaceForm.patchValue({ id: newWorkspace.id, label: newWorkspace.label });\n } else {\n const existingIndex: number = cfg.workspaces.findIndex((item) => item.id === this.workspaceForm.value.id);\n /**\n * ADR: only update the label when the workspace is found in the current config.\n *\n * The previous implementation had the index check inverted (`existingIndex === -1`),\n * which would have dereferenced `cfg.workspaces[-1]` and crashed on `.label` if a\n * form submission ever arrived for a non-existent workspace id. In the current UI\n * flow this branch is only entered with an id that exists in the list, so the bug\n * stayed silent — but the inverted check was load-bearing on that invariant.\n *\n * `existingIndex === -1` is treated as a \"should not happen\" state — it would only\n * occur if the workspace was removed externally (other tab/race) between opening\n * the edit dialog and submitting it. We no-op and log a warning so the anomaly is\n * visible in dev tools without crashing the UI.\n */\n if (existingIndex !== -1) {\n cfg.workspaces[existingIndex].label = this.workspaceForm.value.label as string;\n } else {\n this.#logger.error('onSaveWorkspace: workspace not in config; ignored', this.workspaceForm.value.id);\n }\n }\n\n this.workspaceDialogRef?.close();\n this.#emitConfigChange();\n }\n\n //#endregion\n\n //#region Utilities\n\n #emitConfigChange(): void {\n this.configChange.emit(this._workspaceConfig());\n }\n\n #updateOriginalWorkspaceConfig(): void {\n this.#originalWidgetGridWorkspaceConfig = WidgetGridUtils.gridConfigStringify(this.workspaceConfig());\n }\n\n //#endregion\n\n //#region Effect\n\n readonly #workspaceEffect = (): void => {\n const workspace = this.workspace();\n this.workspaceLabel.set(workspace ? this.getLabel(workspace) : '');\n untracked(() => {\n if (workspace) this.workspaceForm.patchValue({ label: this.workspaceLabel(), id: workspace.id });\n this.gridItemConfig.set(workspace ? JSON.parse(JSON.stringify(workspace.grid)) : undefined);\n });\n };\n\n readonly #workspaceConfigEffect = (): void => {\n const wsc = this.workspaceConfig();\n untracked(() => {\n this._workspaceConfig.set(wsc);\n this.#updateOriginalWorkspaceConfig();\n if (wsc?.currentWorkspace) {\n this.onSetWorkspace(wsc.currentWorkspace, true);\n }\n });\n };\n\n //#endregion\n}\n","@let ws = workspace();\n\n<div class=\"toolbar\">\n @if (ws) {\n @let workspaces = _workspaceConfig()?.workspaces || [];\n\n <button\n mat-icon-button\n [matTooltip]=\"'yuv.widget-grid.workspaces.workspace.menu.tooltip' | translate\"\n [disabled]=\"editMode()\"\n [matMenuTriggerFor]=\"workspacePickerMenu\"\n >\n <mat-icon>menu</mat-icon>\n </button>\n\n <mat-menu #workspacePickerMenu=\"matMenu\">\n @for (ws of workspaces; track ws.id) {\n <button mat-menu-item (click)=\"onSetWorkspace(ws.id)\">{{ getLabel(ws) }}</button>\n }\n <mat-divider />\n <button mat-menu-item (click)=\"onOpenWorkspaceDialog(true, tplWorkspaceEdit)\">\n {{ 'yuv.widget-grid.workspaces.workspace.menu.create' | translate }}\n </button>\n </mat-menu>\n\n @if (!editMode()) {\n <h2 class=\"label\">{{ workspaceLabel() }}</h2>\n @if (!ws.preventEdit) {\n <button mat-icon-button [matMenuTriggerFor]=\"workspaceMenu\"><mat-icon>more_vert</mat-icon></button>\n <mat-menu #workspaceMenu=\"matMenu\">\n <button mat-menu-item (click)=\"onToggleEditMode()\">\n {{ 'yuv.widget-grid.workspaces.workspace.menu.edit' | translate }}\n </button>\n <button mat-menu-item (click)=\"onDeleteCurrentWorkspace()\">\n {{ 'yuv.widget-grid.workspaces.workspace.menu.delete' | translate }}\n </button>\n </mat-menu>\n }\n } @else {\n @if (ws.preventRename || ws.translateLabel) {\n <h2 class=\"label\">{{ workspaceLabel() }}</h2>\n } @else {\n <input type=\"text\" class=\"label\" [formControl]=\"workspaceLabelControl\" />\n }\n <button ymtButton=\"secondary\" (click)=\"onRevertWorkspaceConfig()\">\n {{ 'yuv.widget-grid.workspaces.editMode.cancel' | translate }}\n </button>\n <button ymtButton=\"primary\" (click)=\"onPersistWorkspaceConfig()\">\n {{ 'yuv.widget-grid.workspaces.editMode.save' | translate }}\n </button>\n }\n }\n</div>\n\n@if (ws) {\n <yuv-widget-grid\n [gridConfig]=\"_workspaceOptions().gridConfig\"\n [gridItemConfig]=\"gridItemConfig()\"\n [buckets]=\"buckets()\"\n [editMode]=\"editMode()\"\n (gridChange)=\"onGridChange($event)\"\n (gridItemEvent)=\"onGridEvent($event)\"\n >\n <div class=\"empty\">\n <p>{{ 'yuv.widget-grid.empty' | translate }}</p>\n <button ymtButton=\"primary\" (click)=\"onEnableEditMode()\">\n {{ 'yuv.widget-grid.empty.create' | translate }}\n </button>\n </div>\n </yuv-widget-grid>\n} @else {\n <div class=\"empty\">\n <p>{{ 'yuv.widget-grid.workspaces.empty' | translate }}</p>\n <button ymtButton=\"primary\" (click)=\"onOpenWorkspaceDialog(true, tplWorkspaceEdit)\">\n {{ 'yuv.widget-grid.workspaces.empty.button.create' | translate }}\n </button>\n </div>\n}\n\n<ng-template #tplWorkspaceEdit>\n <yuv-workspace-edit [workspaceForm]=\"workspaceForm\" (workspaceSubmit)=\"onSaveWorkspace()\" />\n</ng-template>\n","// widget-grid-workspaces/widget-grid-workspaces.component\n\nexport * from './widget-grid-workspaces/widget-grid-workspaces.component';\n","// export * from './widget-grid-event.service';\nexport * from './widget-grid-registry.service';\nexport * from './widget-grid.service';\n// export * from './widget-grid.utils';\n","import { NgModule } from '@angular/core';\n\nimport { YuvWidgetGridWorkspacesComponent } from './components/widget-grid-workspaces/widget-grid-workspaces.component';\nimport { YuvWidgetGridComponent } from './widget-grid/widget-grid.component';\n\nconst cmp = [YuvWidgetGridComponent, YuvWidgetGridWorkspacesComponent];\n\n@NgModule({\n imports: [cmp],\n exports: [cmp]\n})\nexport class YuvWidgetGridModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3","i1","TranslatePipe","i4","i5","i6"],"mappings":"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"}
|
package/lib/assets/i18n/de.json
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"yuv.widget-grid.empty": "Es wurden noch keine Widgets zu diesem Workspace hinzugefügt.",
|
|
35
35
|
"yuv.widget-grid.empty.create": "Workspace bearbeiten",
|
|
36
36
|
"yuv.widget-grid.widget-picker.empty": "Es sind keine Widgets verfügbar.",
|
|
37
|
+
"yuv.widget-grid.widget-picker.group.default": "Allgemein",
|
|
37
38
|
"yuv.widget-grid.widget-picker.title": "Widgets",
|
|
38
39
|
"yuv.widget-grid.widget.add.label": "Widget hinzufügen",
|
|
39
40
|
"yuv.widget-grid.widget.add.tooltip": "Widget hinzufügen",
|
package/lib/assets/i18n/en.json
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"yuv.widget-grid.empty": "No widgets have been added to this workspace yet.",
|
|
35
35
|
"yuv.widget-grid.empty.create": "Edit workspace",
|
|
36
36
|
"yuv.widget-grid.widget-picker.empty": "No widgets available.",
|
|
37
|
+
"yuv.widget-grid.widget-picker.group.default": "General",
|
|
37
38
|
"yuv.widget-grid.widget-picker.title": "Widgets",
|
|
38
39
|
"yuv.widget-grid.widget.add.label": "Add widget",
|
|
39
40
|
"yuv.widget-grid.widget.add.tooltip": "Add widget",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuuvis/client-components",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"@angular/core": "^21.2.9",
|
|
9
9
|
"@angular/forms": "^21.2.9",
|
|
10
10
|
"@angular/material": "^21.2.7",
|
|
11
|
-
"@yuuvis/material": "^3.
|
|
11
|
+
"@yuuvis/material": "^3.3.0",
|
|
12
12
|
"ag-charts-angular": "^11.0.0",
|
|
13
13
|
"ag-charts-community": "^11.0.0"
|
|
14
14
|
},
|