@yuuvis/client-framework 2.4.3 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/common/lib/components/busy-overlay/busy-overlay.component.d.ts +10 -0
  2. package/common/lib/components/busy-overlay/busy-overlay.interface.d.ts +4 -0
  3. package/common/lib/components/dialog/dialog.component.d.ts +5 -1
  4. package/common/lib/components/index.d.ts +1 -0
  5. package/common/lib/directives/busy-overlay.directive.d.ts +51 -13
  6. package/fesm2022/yuuvis-client-framework-actions.mjs +1 -1
  7. package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
  8. package/fesm2022/yuuvis-client-framework-common.mjs +166 -74
  9. package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
  10. package/fesm2022/yuuvis-client-framework-forms.mjs +31 -22
  11. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  12. package/fesm2022/yuuvis-client-framework-object-details.mjs +28 -32
  13. package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
  14. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +2 -2
  15. package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
  16. package/fesm2022/yuuvis-client-framework-object-relationship.mjs +3 -3
  17. package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
  18. package/fesm2022/yuuvis-client-framework-object-summary.mjs +1 -1
  19. package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
  20. package/fesm2022/yuuvis-client-framework-object-versions.mjs +1 -1
  21. package/fesm2022/yuuvis-client-framework-object-versions.mjs.map +1 -1
  22. package/fesm2022/yuuvis-client-framework-tile-list.mjs +46 -46
  23. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  24. package/fesm2022/yuuvis-client-framework-widget-grid.mjs +2 -2
  25. package/fesm2022/yuuvis-client-framework-widget-grid.mjs.map +1 -1
  26. package/forms/lib/elements/catalog/catalog.component.d.ts +4 -1
  27. package/forms/lib/elements/data-grid/data-grid/data-grid.component.d.ts +0 -1
  28. package/forms/lib/elements/data-grid/model/data-grid.interface.d.ts +6 -0
  29. package/object-details/lib/object-details-header/object-details-header.component.d.ts +9 -7
  30. package/object-details/lib/object-details-shell/object-details-shell.component.d.ts +3 -1
  31. package/object-details/lib/object-details.component.d.ts +3 -1
  32. package/object-details/lib/object-metadata/object-metadata.component.d.ts +2 -2
  33. package/package.json +4 -4
  34. package/tile-list/lib/tile-list/tile-list.component.d.ts +2 -3
@@ -1 +1 @@
1
- {"version":3,"file":"yuuvis-client-framework-widget-grid.mjs","sources":["../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid-event.service.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widgets/noop/noop.component.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widgets/noop/noop.component.html","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid-registry.service.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid.utils.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid.service.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-picker/widget-picker.component.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-picker/widget-picker.component.html","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid.component.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid.component.html","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid-workspaces/workspace-edit/workspace-edit.component.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid-workspaces/workspace-edit/workspace-edit.component.html","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid-workspaces/widget-grid-workspaces.component.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid-workspaces/widget-grid-workspaces.component.html","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid.module.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/yuuvis-client-framework-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 { Component, effect, inject, input, OnInit, output } from '@angular/core';\nimport { AttributesMap, OutputsType, DynamicIoModule } from 'ng-dynamic-component';\n\nimport { CommonModule } from '@angular/common';\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 { TranslateModule } from '@yuuvis/client-core';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\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';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { MatListModule } from '@angular/material/list';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'yuv-widget-picker',\n imports: [\n CommonModule,\n MatButtonModule,\n TranslateModule,\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.getRegisteredWidgets().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\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 { TranslateModule } from '@yuuvis/client-core';\nimport {\n DisplayGrid,\n GridsterComponent,\n GridsterConfig,\n GridsterItem,\n GridsterItemComponent,\n GridsterItemComponentInterface,\n GridType\n} from 'angular-gridster2';\nimport { DynamicIoModule } from 'ng-dynamic-component';\nimport { WidgetGridEventService } from './widget-grid-event.service';\nimport { GridItemEvent, WidgetGridConfig, WidgetGridItem, WidgetGridItemConfig, WidgetPickerData } 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 { YmtIconButtonDirective } from '@yuuvis/material';\nimport { SignalComponentIoModule } from 'ng-dynamic-component/signal-component-io';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\n@Component({\n selector: 'yuv-widget-grid',\n imports: [\n CommonModule,\n DynamicIoModule,\n SignalComponentIoModule,\n TranslateModule,\n GridsterComponent,\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n WidgetPickerComponent,\n GridsterItemComponent,\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 gridsterItems = viewChild.required(GridsterItemComponent);\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\n resizable: {\n enabled: false\n },\n itemChangeCallback: (gridsterItem: GridsterItem, gridsterItemComponent: GridsterItemComponentInterface) => {\n this.emitChange();\n }\n };\n\n gridConfig = input<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 });\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 if (this.options.api && this.options.api.optionsChanged) {\n this.options.api.optionsChanged();\n }\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()\">\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 { CommonModule } from '@angular/common';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'yuv-workspace-edit',\n imports: [CommonModule, DialogComponent, MatFormFieldModule, \n MatInputModule,\n YmtButtonDirective,\n TranslateModule,\n ReactiveFormsModule],\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 { CommonModule } from '@angular/common';\nimport { 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 { 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 { TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { ConfirmService } from '@yuuvis/client-framework/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 { WidgetGridWorkspace, WidgetGridWorkspaceConfig, WidgetGridWorkspaceOptions } from './widget-grid-workspaces.interface';\nimport { WorkspaceEditComponent } from './workspace-edit/workspace-edit.component';\nimport { MatDividerModule } from '@angular/material/divider';\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 CommonModule,\n YuvWidgetGridComponent,\n YmtButtonDirective,\n ReactiveFormsModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatMenuModule,\n MatDividerModule,\n TranslateModule,\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 mat-icon-button [disabled]=\"editMode()\" [matMenuTriggerFor]=\"workspacePickerMenu\"><mat-icon>menu</mat-icon></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, tplWworkspaceEdit)\">{{ '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, tplWworkspaceEdit)\">\n {{ 'yuv.widget-grid.workspaces.empty.button.create' | translate }}\n </button>\n </div>\n}\n\n<ng-template #tplWworkspaceEdit>\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","i2","i5","i4","i1","TranslateModule","i3","i6"],"mappings":"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"}
1
+ {"version":3,"file":"yuuvis-client-framework-widget-grid.mjs","sources":["../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid-event.service.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widgets/noop/noop.component.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widgets/noop/noop.component.html","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid-registry.service.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid.utils.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid.service.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-picker/widget-picker.component.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-picker/widget-picker.component.html","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid.component.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid.component.html","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid-workspaces/workspace-edit/workspace-edit.component.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid-workspaces/workspace-edit/workspace-edit.component.html","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid-workspaces/widget-grid-workspaces.component.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid-workspaces/widget-grid-workspaces.component.html","../../../../../libs/yuuvis/client-framework/widget-grid/src/lib/widget-grid.module.ts","../../../../../libs/yuuvis/client-framework/widget-grid/src/yuuvis-client-framework-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 { Component, effect, inject, input, OnInit, output } from '@angular/core';\nimport { AttributesMap, OutputsType, DynamicIoModule } from 'ng-dynamic-component';\n\nimport { CommonModule } from '@angular/common';\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 { TranslateModule } from '@yuuvis/client-core';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\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';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { MatListModule } from '@angular/material/list';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'yuv-widget-picker',\n imports: [\n CommonModule,\n MatButtonModule,\n TranslateModule,\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.getRegisteredWidgets().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\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 { TranslateModule } from '@yuuvis/client-core';\nimport {\n DisplayGrid,\n GridsterComponent,\n GridsterConfig,\n GridsterItem,\n GridsterItemComponent,\n GridsterItemComponentInterface,\n GridType\n} from 'angular-gridster2';\nimport { DynamicIoModule } from 'ng-dynamic-component';\nimport { WidgetGridEventService } from './widget-grid-event.service';\nimport { GridItemEvent, WidgetGridConfig, WidgetGridItem, WidgetGridItemConfig, WidgetPickerData } 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 { YmtIconButtonDirective } from '@yuuvis/material';\nimport { SignalComponentIoModule } from 'ng-dynamic-component/signal-component-io';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\n@Component({\n selector: 'yuv-widget-grid',\n imports: [\n CommonModule,\n DynamicIoModule,\n SignalComponentIoModule,\n TranslateModule,\n GridsterComponent,\n MatIconModule,\n MatTooltipModule,\n MatButtonModule,\n WidgetPickerComponent,\n GridsterItemComponent,\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 gridsterItems = viewChild.required(GridsterItemComponent);\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\n resizable: {\n enabled: false\n },\n itemChangeCallback: (gridsterItem: GridsterItem, gridsterItemComponent: GridsterItemComponentInterface) => {\n this.emitChange();\n }\n };\n\n gridConfig = input<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 });\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 if (this.options.api && this.options.api.optionsChanged) {\n this.options.api.optionsChanged();\n }\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()\">\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 { CommonModule } from '@angular/common';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'yuv-workspace-edit',\n imports: [CommonModule, DialogComponent, MatFormFieldModule, \n MatInputModule,\n YmtButtonDirective,\n TranslateModule,\n ReactiveFormsModule],\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 { CommonModule } from '@angular/common';\nimport { 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 { 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 { TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { ConfirmService } from '@yuuvis/client-framework/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 { WidgetGridWorkspace, WidgetGridWorkspaceConfig, WidgetGridWorkspaceOptions } from './widget-grid-workspaces.interface';\nimport { WorkspaceEditComponent } from './workspace-edit/workspace-edit.component';\nimport { MatDividerModule } from '@angular/material/divider';\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 CommonModule,\n YuvWidgetGridComponent,\n YmtButtonDirective,\n ReactiveFormsModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatMenuModule,\n MatDividerModule,\n TranslateModule,\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 mat-icon-button [disabled]=\"editMode()\" [matMenuTriggerFor]=\"workspacePickerMenu\"><mat-icon>menu</mat-icon></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, tplWworkspaceEdit)\">{{ '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, tplWworkspaceEdit)\">\n {{ 'yuv.widget-grid.workspaces.empty.button.create' | translate }}\n </button>\n </div>\n}\n\n<ng-template #tplWworkspaceEdit>\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","i2","i5","i4","i1","TranslateModule","i3","i6"],"mappings":"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"}
@@ -7,7 +7,10 @@ export declare class CatalogComponent extends AbstractMatFormField<string | stri
7
7
  private readonly translate;
8
8
  readonly: import("@angular/core").InputSignal<boolean>;
9
9
  multiple: import("@angular/core").InputSignal<boolean>;
10
- _options: import("@angular/core").WritableSignal<string[]>;
10
+ _options: import("@angular/core").WritableSignal<{
11
+ label: string;
12
+ value: string;
13
+ }[]>;
11
14
  options: import("@angular/core").InputSignal<string[]>;
12
15
  /**
13
16
  * Additional semantics for the form element.
@@ -27,7 +27,6 @@ export declare class DataGridComponent implements ControlValueAccessor, Validato
27
27
  };
28
28
  displayedColumnsWithActions: import("@angular/core").WritableSignal<string[]>;
29
29
  displayedColumns: import("@angular/core").WritableSignal<any[]>;
30
- copyLine(element: unknown): void;
31
30
  onMenuTrigger(element: unknown | null): void;
32
31
  editRow(element: unknown): void;
33
32
  addRow(): void;
@@ -12,3 +12,9 @@ export interface DataGridSize {
12
12
  small: DataGridSizeType.SMALL;
13
13
  auto: DataGridSizeType.AUTO;
14
14
  }
15
+ export interface DataGridData {
16
+ columnDef: string;
17
+ header: string;
18
+ type: string;
19
+ cell: (element: any) => any;
20
+ }
@@ -2,6 +2,11 @@ import { TemplateRef } from '@angular/core';
2
2
  import { DmsObject, VirtualObjectType } from '@yuuvis/client-core';
3
3
  import { RendererDirectiveInput } from '@yuuvis/client-framework/renderer';
4
4
  import * as i0 from "@angular/core";
5
+ interface HeaderData {
6
+ title: RendererDirectiveInput;
7
+ description?: RendererDirectiveInput;
8
+ icon: string;
9
+ }
5
10
  /**
6
11
  * Component showing header data for a dms object. These will be
7
12
  * generated from the object config for the given object.
@@ -17,7 +22,6 @@ import * as i0 from "@angular/core";
17
22
  */
18
23
  export declare class ObjectDetailsHeaderComponent {
19
24
  #private;
20
- headerActions: import("@angular/core").Signal<TemplateRef<any> | undefined>;
21
25
  dmsObject: import("@angular/core").InputSignal<DmsObject | undefined>;
22
26
  /**
23
27
  * Virtual object type to use for retrieving header data
@@ -27,12 +31,10 @@ export declare class ObjectDetailsHeaderComponent {
27
31
  * Bucket of the object config to retrieve header data from
28
32
  */
29
33
  bucket: import("@angular/core").InputSignal<string | undefined>;
30
- headerData?: {
31
- title: RendererDirectiveInput;
32
- description?: RendererDirectiveInput;
33
- icon: string;
34
- };
34
+ actions: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
35
+ headerData: import("@angular/core").Signal<HeaderData | undefined>;
35
36
  constructor();
36
37
  static ɵfac: i0.ɵɵFactoryDeclaration<ObjectDetailsHeaderComponent, never>;
37
- static ɵcmp: i0.ɵɵComponentDeclaration<ObjectDetailsHeaderComponent, "yuv-object-details-header", never, { "dmsObject": { "alias": "dmsObject"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": true; "isSignal": true; }; "bucket": { "alias": "bucket"; "required": false; "isSignal": true; }; }, {}, ["headerActions"], never, true, never>;
38
+ static ɵcmp: i0.ɵɵComponentDeclaration<ObjectDetailsHeaderComponent, "yuv-object-details-header", never, { "dmsObject": { "alias": "dmsObject"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": true; "isSignal": true; }; "bucket": { "alias": "bucket"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
38
39
  }
40
+ export {};
@@ -1,3 +1,4 @@
1
+ import { TemplateRef } from '@angular/core';
1
2
  import { DmsObject, RetentionState, VirtualObjectType } from '@yuuvis/client-core';
2
3
  import * as i0 from "@angular/core";
3
4
  /**
@@ -11,6 +12,7 @@ export declare class ObjectDetailsShellComponent {
11
12
  contextError: import("@angular/core").WritableSignal<string | undefined>;
12
13
  dmsObject: import("@angular/core").Signal<DmsObject | undefined>;
13
14
  busy: import("@angular/core").WritableSignal<boolean>;
15
+ actions: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
14
16
  /**
15
17
  * Virtual object type to use for retrieving header data
16
18
  */
@@ -25,5 +27,5 @@ export declare class ObjectDetailsShellComponent {
25
27
  hideHeader: import("@angular/core").InputSignal<boolean>;
26
28
  constructor();
27
29
  static ɵfac: i0.ɵɵFactoryDeclaration<ObjectDetailsShellComponent, never>;
28
- static ɵcmp: i0.ɵɵComponentDeclaration<ObjectDetailsShellComponent, "yuv-object-details-shell", never, { "type": { "alias": "type"; "required": true; "isSignal": true; }; "bucket": { "alias": "bucket"; "required": false; "isSignal": true; }; "hideHeader": { "alias": "hideHeader"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<ObjectDetailsShellComponent, "yuv-object-details-shell", never, { "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": true; "isSignal": true; }; "bucket": { "alias": "bucket"; "required": false; "isSignal": true; }; "hideHeader": { "alias": "hideHeader"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
29
31
  }
@@ -1,3 +1,4 @@
1
+ import { TemplateRef } from '@angular/core';
1
2
  import { DmsObject, ObjectTypeFlavor, VirtualObjectType } from '@yuuvis/client-core';
2
3
  import * as i0 from "@angular/core";
3
4
  export declare class ObjectDetailsComponent {
@@ -37,7 +38,8 @@ export declare class ObjectDetailsComponent {
37
38
  * Whether to hide the header
38
39
  */
39
40
  hideHeader: import("@angular/core").InputSignal<boolean>;
41
+ actions: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
40
42
  onIndexdataSaved(updatedObject: DmsObject): void;
41
43
  static ɵfac: i0.ɵɵFactoryDeclaration<ObjectDetailsComponent, never>;
42
- static ɵcmp: i0.ɵɵComponentDeclaration<ObjectDetailsComponent, "yuv-object-details", never, { "dmsObjectInput": { "alias": "dmsObject"; "required": false; "isSignal": true; }; "flavors": { "alias": "flavors"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": true; "isSignal": true; }; "objectConfigBucket": { "alias": "objectConfigBucket"; "required": false; "isSignal": true; }; "objectId": { "alias": "objectId"; "required": false; "isSignal": true; }; "hideHeader": { "alias": "hideHeader"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
44
+ static ɵcmp: i0.ɵɵComponentDeclaration<ObjectDetailsComponent, "yuv-object-details", never, { "dmsObjectInput": { "alias": "dmsObject"; "required": false; "isSignal": true; }; "flavors": { "alias": "flavors"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": true; "isSignal": true; }; "objectConfigBucket": { "alias": "objectConfigBucket"; "required": false; "isSignal": true; }; "objectId": { "alias": "objectId"; "required": false; "isSignal": true; }; "hideHeader": { "alias": "hideHeader"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
43
45
  }
@@ -31,7 +31,7 @@ export declare class ObjectMetadataComponent implements OnDestroy {
31
31
  /**
32
32
  * Form situation, if not set default will be 'EDIT'
33
33
  */
34
- situation: Situation;
34
+ situation: import("@angular/core").InputSignal<Situation>;
35
35
  /**
36
36
  * Set to 'true' to prevent all metadata from being edited
37
37
  */
@@ -70,5 +70,5 @@ export declare class ObjectMetadataComponent implements OnDestroy {
70
70
  setFormPristine(): void;
71
71
  ngOnDestroy(): void;
72
72
  static ɵfac: i0.ɵɵFactoryDeclaration<ObjectMetadataComponent, never>;
73
- static ɵcmp: i0.ɵɵComponentDeclaration<ObjectMetadataComponent, "yuv-object-metadata", never, { "disableControls": { "alias": "disableControls"; "required": false; "isSignal": true; }; "disableBasicMetadata": { "alias": "disableBasicMetadata"; "required": false; "isSignal": true; }; "elementExtensions": { "alias": "elementExtensions"; "required": false; "isSignal": true; }; "situation": { "alias": "situation"; "required": false; }; "formDisabled": { "alias": "formDisabled"; "required": false; }; "dmsObject": { "alias": "dmsObject"; "required": false; "isSignal": true; }; "flavoredDmsObject": { "alias": "flavoredDmsObject"; "required": false; "isSignal": true; }; "flavors": { "alias": "flavors"; "required": false; "isSignal": true; }; }, { "indexDataSaved": "indexDataSaved"; "statusChanged": "statusChanged"; }, never, never, true, never>;
73
+ static ɵcmp: i0.ɵɵComponentDeclaration<ObjectMetadataComponent, "yuv-object-metadata", never, { "disableControls": { "alias": "disableControls"; "required": false; "isSignal": true; }; "disableBasicMetadata": { "alias": "disableBasicMetadata"; "required": false; "isSignal": true; }; "elementExtensions": { "alias": "elementExtensions"; "required": false; "isSignal": true; }; "situation": { "alias": "situation"; "required": false; "isSignal": true; }; "formDisabled": { "alias": "formDisabled"; "required": false; }; "dmsObject": { "alias": "dmsObject"; "required": false; "isSignal": true; }; "flavoredDmsObject": { "alias": "flavoredDmsObject"; "required": false; "isSignal": true; }; "flavors": { "alias": "flavors"; "required": false; "isSignal": true; }; }, { "indexDataSaved": "indexDataSaved"; "statusChanged": "statusChanged"; }, never, never, true, never>;
74
74
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuuvis/client-framework",
3
- "version": "2.4.3",
3
+ "version": "2.5.0",
4
4
  "author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {
@@ -8,15 +8,15 @@
8
8
  "@angular/common": "^19.2.1",
9
9
  "@angular/core": "^19.2.1",
10
10
  "angular-gridster2": "^19.0.0",
11
- "@yuuvis/client-core": "^2.4.3",
12
- "@yuuvis/client-shell-core": "^2.4.3",
11
+ "@yuuvis/client-core": "^2.5.0",
12
+ "@yuuvis/client-shell-core": "^2.5.0",
13
13
  "ng-dynamic-component": "^10.8.2",
14
14
  "modern-normalize": "^3.0.1"
15
15
  },
16
16
  "dependencies": {
17
17
  "@angular/material": "^19.2.15",
18
18
  "@ngrx/signals": "^19.2.0",
19
- "@yuuvis/material": "2.4.3",
19
+ "@yuuvis/material": "2.5.0",
20
20
  "@yuuvis/media-viewer": "^2.0.11",
21
21
  "angular-split": "^19.0.0",
22
22
  "vis-network": "^10.0.2",
@@ -5,9 +5,8 @@ import { Action } from '@yuuvis/client-framework/actions';
5
5
  import { ListComponent, ListTileComponent } from '@yuuvis/client-framework/list';
6
6
  import { Pagination } from '@yuuvis/client-framework/pagination';
7
7
  import { ObjectFlavor } from '@yuuvis/client-shell-core';
8
- import { TileData, TileListConfigOptions, TileListHighlight } from './tile-list.interface';
9
- import { MatMenu } from '@angular/material/menu';
10
8
  import { TileActionsMenuComponent } from '../tile-actions-menu/tile-actions-menu.component';
9
+ import { TileData, TileListConfigOptions, TileListHighlight } from './tile-list.interface';
11
10
  import * as i0 from "@angular/core";
12
11
  type InnerTileData = TileData & {
13
12
  actions: any;
@@ -15,7 +14,7 @@ type InnerTileData = TileData & {
15
14
  export declare class TileListComponent implements OnInit, OnDestroy {
16
15
  #private;
17
16
  menuComponent: import("@angular/core").Signal<TileActionsMenuComponent | undefined>;
18
- menu: import("@angular/core").Signal<MatMenu | null>;
17
+ menu: import("@angular/core").Signal<import("@angular/material/menu").MatMenu | null>;
19
18
  emptyContent: import("@angular/core").Signal<ElementRef<any> | undefined>;
20
19
  isTouchDevice: boolean;
21
20
  tiles: import("@angular/core").Signal<readonly ListTileComponent[]>;