@yuuvis/client-framework 2.1.22 → 2.1.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/yuuvis-client-framework-forms.mjs +18 -8
- package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-list.mjs +30 -2
- package/fesm2022/yuuvis-client-framework-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-details.mjs +2 -2
- package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs +2 -2
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-versions.mjs +1 -1
- package/fesm2022/yuuvis-client-framework-object-versions.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-renderer.mjs +16 -22
- package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-tile-list.mjs +51 -24
- package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
- package/list/lib/list.component.d.ts +6 -3
- package/package.json +5 -5
- package/renderer/lib/property-renderer/table.renderer.component.d.ts +5 -1
- package/tile-list/lib/tile-config/tile-config.component.d.ts +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-renderer.mjs","sources":["../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/abstract.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/boolean.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/datetime.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/decimal.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/filesize.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/icon.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/integer.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/organization.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/string.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/table.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/unknown.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/services/renderer/renderer.service.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/renderer.directive.ts","../../../../../libs/yuuvis/client-framework/renderer/src/yuuvis-client-framework-renderer.ts"],"sourcesContent":["import { Component, inject, input } from '@angular/core';\nimport { SchemaResponseFieldDefinition, SystemService } from '@yuuvis/client-core';\n\n/**\n * Abstract class to be extended by property renderers\n */\n@Component({\n selector: 'yuv-abstract-renderer',\n template: ''\n})\nexport abstract class AbstractRendererComponent<T = string, U = null> {\n #system = inject(SystemService);\n\n propertyName = input.required<string>();\n value = input.required<T | null>();\n meta = input<Record<string, unknown> | U>();\n\n protected getProperty(): SchemaResponseFieldDefinition | undefined {\n return this.#system.system?.allFields[this.propertyName()];\n }\n}\n","import { Component } from '@angular/core';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'yuv-boolean-renderer',\n imports: [MatIcon],\n template: ` <mat-icon>{{ value() ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>`,\n styles: [\n `\n :host {\n --mdc-checkbox-state-layer-size: 18px;\n display: flex;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class BooleanRendererComponent extends AbstractRendererComponent {}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { LocaleDatePipe } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-datetime-renderer',\n imports: [LocaleDatePipe],\n template: '{{(value() || undefined) | localeDate}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class DateTimeRendererComponent extends AbstractRendererComponent<Date> {}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-decimal-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class DecimalRendererComponent extends AbstractRendererComponent<number> {\n // TODO: deal with precision and scale\n}\n","import { Component, computed } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { FileSizePipe } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-string-renderer',\n imports: [FileSizePipe],\n template: '{{parsedValue() | fileSize}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class FileSizeRendererComponent extends AbstractRendererComponent {\n parsedValue = computed<number>(() => {\n let n = 0;\n const v = this.value();\n if (v)\n try {\n n = parseInt(v);\n } catch (e) {\n console.error(e);\n }\n return n;\n });\n}\n","import { Component, effect, inject } from '@angular/core';\nimport { MatIcon, MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ObjectTypeIconComponent } from '@yuuvis/client-framework/icons';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-icon-renderer',\n imports: [ObjectTypeIconComponent, MatIcon],\n template: ` @let icon = value();\n @if (propertyName() !== 'custom') {\n <yuv-object-type-icon [objectTypeId]=\"icon || ''\"></yuv-object-type-icon>\n } @else if (icon !== null) {\n @let metaData = meta();\n @if (metaData && metaData['isFontIcon']) {\n <mat-icon>{{ icon }}</mat-icon>\n } @else {\n <mat-icon [svgIcon]=\"customId\"></mat-icon>\n }\n }`,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--tile-slot-padding);\n yuv-icon,\n yuv-object-type-icon {\n --icon-size: var(--icon-renderer-icon-size);\n width: var(--icon-size);\n height: var(--icon-size);\n }\n }\n `\n ]\n})\nexport class IconRendererComponent extends AbstractRendererComponent {\n readonly #iconRegistry = inject(MatIconRegistry);\n\n readonly #sanitizer = inject(DomSanitizer);\n protected readonly customId = crypto.randomUUID();\n\n #registerIconsEffect = effect(async () => {\n const meta = this.meta();\n this.propertyName() === 'custom' &&\n !(meta && meta['isFontIcon']) &&\n this.#iconRegistry.addSvgIconLiteral(this.customId, this.#sanitizer.bypassSecurityTrustHtml(this.value() as string));\n });\n}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-integer-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class IntegerRendererComponent extends AbstractRendererComponent<number> {}\n","import { Component, computed } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-organization-renderer',\n standalone: true,\n template: '{{resolvedValue()}}',\n styles: [\n `\n :host {\n padding: var(--tile-slot-padding);\n display: var(--yuv-renderer-display, inline-block);\n }\n `\n ]\n})\nexport class OrganizationRendererComponent extends AbstractRendererComponent {\n resolvedValue = computed<string>(() => {\n const m = this.meta();\n return (m ? m['title'] : this.value() || '') as string;\n });\n}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-string-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class StringRendererComponent extends AbstractRendererComponent {}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed } from '@angular/core';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n@Component({\n selector: 'yuv-table-renderer',\n standalone: true,\n imports: [CommonModule, TranslateModule],\n template: `\n <div class=\"table-container\">\n <table>\n <thead>\n <tr>\n @for (header of tableHeaders(); track header) {\n <th>{{ header }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of tableData(); track $index) {\n <tr>\n @for (header of tableHeaders(); track header) {\n <td>{{ row[header] }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (reducedData()) {\n <p>\n {{ 'yuv.table.renderer.moreEntries' | translate: { count: value()?.length } }}\n </p>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: flex;\n padding: var(--tile-slot-padding);\n width: 100%;\n }\n\n .table-container {\n width: 100%;\n overflow-x: auto;\n max-width: 100%;\n }\n\n table {\n width: 100%;\n border-collapse: collapse;\n min-width: 400px;\n }\n\n th,\n td {\n padding: 8px;\n text-align: left;\n border-bottom: 1px solid var(--ymt-outline-variant);\n }\n\n th {\n background-color: var(--_object-summary-section-background, #f2f2f2);\n font-weight: bold;\n }\n\n tr:hover {\n background-color: var(--ymt-hover-background);\n }\n `\n ]\n})\nexport class TableRendererComponent extends AbstractRendererComponent<any[]> {\n protected tableHeaders = computed(() => {\n const value = this.value();\n if (!value || !value.length) return [];\n\n // Extract all unique headers from the data\n const headers = new Set<string>();\n value.forEach((item) => {\n Object.keys(item).forEach((key) => headers.add(key));\n });\n\n return Array.from(headers);\n });\n\n protected tableData = computed(() => {\n const data = this.value() || [];\n if (data.length > 10) {\n return data.slice(0, 10);\n }\n return data;\n });\n\n protected reducedData = computed(() => {\n const data = this.value() || [];\n return data.length > 10;\n });\n}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-unknown-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class UnknownRendererComponent extends AbstractRendererComponent<any> {}\n","import { Injectable, Type, inject, signal } from '@angular/core';\nimport { ContentStreamField, InternalFieldType, RendererType, SchemaResponseFieldDefinition, SystemService } from '@yuuvis/client-core';\nimport { RendererComponent } from './renderer.interface';\nimport {\n AbstractRendererComponent,\n BooleanRendererComponent,\n DateTimeRendererComponent,\n DecimalRendererComponent,\n FileSizeRendererComponent,\n IconRendererComponent,\n IntegerRendererComponent,\n OrganizationRendererComponent,\n StringRendererComponent,\n UnknownRendererComponent\n} from '../../property-renderer';\nimport { TableRendererComponent } from '../../property-renderer/table.renderer.component';\n\n/**\n * Service for managing property type renderers. Renderers are components that will render certain\n * property types.\n *\n * You are able to register your own renderer to overwrite an existing one or provide a custom\n * renderer for your context.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RendererService {\n private system = inject(SystemService);\n\n #renderers = signal<Record<string, Type<RendererComponent>>>({});\n\n constructor() {\n const initialRenderers: Record<string, Type<RendererComponent>> = {\n integer: IntegerRendererComponent,\n decimal: DecimalRendererComponent,\n datetime: DateTimeRendererComponent,\n icon: IconRendererComponent,\n string: StringRendererComponent,\n boolean: BooleanRendererComponent,\n table: TableRendererComponent\n };\n initialRenderers[InternalFieldType.STRING_ORGANIZATION] = OrganizationRendererComponent;\n initialRenderers[ContentStreamField.LENGTH] = FileSizeRendererComponent;\n this.#renderers.set(initialRenderers);\n }\n\n getRendererByType(type: RendererType): Type<RendererComponent> {\n return this.#renderers()[type] || UnknownRendererComponent;\n }\n\n getRenderer(propertyName: string, typeName?: string): Type<RendererComponent> {\n // try to find a renderer based on property and object type\n let r = this.#renderers()[this._getKey(propertyName, typeName)];\n\n if (!r) {\n // not special renderer found so we'll try to get one for the internal type\n // of the given property\n const srf: SchemaResponseFieldDefinition | undefined = this.system.system && this.system.system.allFields[propertyName];\n if (srf) {\n r = this.getRendererByType(this.system.getInternalFormElementType(srf.propertyType, srf.classifications));\n }\n }\n\n return r || UnknownRendererComponent;\n }\n\n /**\n * Register a renderer for a particular property. Providing `typeName` will register that renderer\n * for a certain context (use same inputs when calling `getRenderer()`).\n * @param cmp The component to actually render the property\n * @param propertyName property name (used for registering the renderer for a certain context)\n * @param typeName Optional type name (used for registering the renderer for a certain context)\n */\n registerRenderer(cmp: Type<AbstractRendererComponent>, propertyName: string, typeName?: string) {\n this.#renderers.update((curr) => ({ ...curr, ...{ [this._getKey(propertyName, typeName)]: cmp } }));\n }\n\n /**\n *\n * @param type The type of property this renderer is supposed to be used for\n */\n registerRendererByType(type: RendererType, cmp: Type<RendererComponent>) {\n this.#renderers.update((curr) => ({ ...curr, ...{ [type]: cmp } }));\n }\n\n // Generate the unique key for a renderer\n private _getKey(propertyName: string, typeName?: string): string {\n const k = [propertyName];\n typeName && k.push(typeName);\n return k.join('-');\n }\n}\n","import { ComponentRef, Directive, Injector, Type, ViewContainerRef, effect, inject, input, runInInjectionContext } from '@angular/core';\nimport { RendererComponent, RendererDirectiveInput } from './services/renderer/renderer.interface';\nimport { RendererService } from './services/renderer/renderer.service';\n\n/**\n * Structural directive for rendering an obect type property\n */\n@Directive({\n selector: '[yuvRenderer]',\n standalone: true\n})\nexport class RendererDirective {\n private readonly rendererService = inject(RendererService);\n private readonly containerRef = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n\n component!: ComponentRef<RendererComponent>;\n\n private _rendererInput?: RendererDirectiveInput;\n\n yuvRenderer = input<RendererDirectiveInput | undefined>(undefined);\n\n #yuvRendererEffect = effect(() => {\n const i = this.yuvRenderer();\n if (i && !this._alreadyRendered(i)) {\n this._rendererInput = i;\n\n if (i) {\n if (this.component) this.containerRef.clear();\n\n const cmp: Type<RendererComponent> = i.rendererType\n ? this.rendererService.getRendererByType(i.rendererType)\n : this.rendererService.getRenderer(i.propertyName);\n\n this.component = this.containerRef.createComponent(cmp);\n // pass inputs to the renderer. As they are signals they need an injection context\n // runInInjectionContext(this.injector, () => { // FOLLOWUP: this is not needed anymore with the new input() API\n this.component.setInput('propertyName', i.propertyName);\n this.component.setInput('value', i.value);\n if (i.meta) this.component.setInput('meta', i.meta);\n // });\n } else {\n this.containerRef.clear();\n }\n }\n });\n\n private _alreadyRendered(i: RendererDirectiveInput): boolean {\n return !!this._rendererInput && JSON.stringify(this._rendererInput) === JSON.stringify(i);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-renderer.mjs","sources":["../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/abstract.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/boolean.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/datetime.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/decimal.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/filesize.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/icon.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/integer.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/organization.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/string.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/table.renderer.component.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/property-renderer/unknown.renderer.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/services/renderer/renderer.service.ts","../../../../../libs/yuuvis/client-framework/renderer/src/lib/renderer.directive.ts","../../../../../libs/yuuvis/client-framework/renderer/src/yuuvis-client-framework-renderer.ts"],"sourcesContent":["import { Component, inject, input } from '@angular/core';\nimport { SchemaResponseFieldDefinition, SystemService } from '@yuuvis/client-core';\n\n/**\n * Abstract class to be extended by property renderers\n */\n@Component({\n selector: 'yuv-abstract-renderer',\n template: ''\n})\nexport abstract class AbstractRendererComponent<T = string, U = null> {\n #system = inject(SystemService);\n\n propertyName = input.required<string>();\n value = input.required<T | null>();\n meta = input<Record<string, unknown> | U>();\n\n protected getProperty(): SchemaResponseFieldDefinition | undefined {\n return this.#system.system?.allFields[this.propertyName()];\n }\n}\n","import { Component } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-boolean-renderer',\n imports: [MatIcon],\n template: ` <mat-icon>{{ value() ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>`,\n styles: [\n `\n :host {\n display: flex;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class BooleanRendererComponent extends AbstractRendererComponent {}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { LocaleDatePipe } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-datetime-renderer',\n imports: [LocaleDatePipe],\n template: '{{(value() || undefined) | localeDate}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class DateTimeRendererComponent extends AbstractRendererComponent<Date> {}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-decimal-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class DecimalRendererComponent extends AbstractRendererComponent<number> {\n // TODO: deal with precision and scale\n}\n","import { Component, computed } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\nimport { FileSizePipe } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-string-renderer',\n imports: [FileSizePipe],\n template: '{{parsedValue() | fileSize}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class FileSizeRendererComponent extends AbstractRendererComponent {\n parsedValue = computed<number>(() => {\n let n = 0;\n const v = this.value();\n if (v)\n try {\n n = parseInt(v);\n } catch (e) {\n console.error(e);\n }\n return n;\n });\n}\n","import { Component, effect, inject } from '@angular/core';\nimport { MatIcon, MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ObjectTypeIconComponent } from '@yuuvis/client-framework/icons';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-icon-renderer',\n imports: [ObjectTypeIconComponent, MatIcon],\n template: ` @let icon = value();\n @if (propertyName() !== 'custom') {\n <yuv-object-type-icon [objectTypeId]=\"icon || ''\"></yuv-object-type-icon>\n } @else if (icon !== null) {\n @let metaData = meta();\n @if (metaData && metaData['isFontIcon']) {\n <mat-icon>{{ icon }}</mat-icon>\n } @else {\n <mat-icon [svgIcon]=\"customId\"></mat-icon>\n }\n }`,\n styles: [\n `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--tile-slot-padding);\n yuv-icon,\n yuv-object-type-icon {\n --icon-size: var(--icon-renderer-icon-size);\n width: var(--icon-size);\n height: var(--icon-size);\n }\n }\n `\n ]\n})\nexport class IconRendererComponent extends AbstractRendererComponent {\n readonly #iconRegistry = inject(MatIconRegistry);\n\n readonly #sanitizer = inject(DomSanitizer);\n protected readonly customId = crypto.randomUUID();\n\n #registerIconsEffect = effect(async () => {\n const meta = this.meta();\n this.propertyName() === 'custom' &&\n !(meta && meta['isFontIcon']) &&\n this.#iconRegistry.addSvgIconLiteral(this.customId, this.#sanitizer.bypassSecurityTrustHtml(this.value() as string));\n });\n}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-integer-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class IntegerRendererComponent extends AbstractRendererComponent<number> {}\n","import { Component, computed } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-organization-renderer',\n standalone: true,\n template: '{{resolvedValue()}}',\n styles: [\n `\n :host {\n padding: var(--tile-slot-padding);\n display: var(--yuv-renderer-display, inline-block);\n }\n `\n ]\n})\nexport class OrganizationRendererComponent extends AbstractRendererComponent {\n resolvedValue = computed<string>(() => {\n const m = this.meta();\n return (m ? m['title'] : this.value() || '') as string;\n });\n}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-string-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class StringRendererComponent extends AbstractRendererComponent {}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject } from '@angular/core';\nimport { SystemService, TranslateModule } from '@yuuvis/client-core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-table-renderer',\n standalone: true,\n imports: [CommonModule, TranslateModule],\n template: `\n <div class=\"table-container\">\n <table>\n <thead>\n <tr>\n @for (header of tableHeaders(); track header) {\n <th>{{ header.label }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of tableData(); track $index) {\n <tr>\n @for (header of tableHeaders(); track header) {\n <td>{{ row[header.key] }}</td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (reducedData()) {\n <p>{{ 'yuv.table.renderer.moreEntries' | translate: { count: value()?.length } }}</p>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: flex;\n padding: var(--tile-slot-padding);\n width: 100%;\n }\n\n .table-container {\n width: 100%;\n overflow-x: auto;\n max-width: 100%;\n }\n\n table {\n width: 100%;\n border-collapse: collapse;\n min-width: 400px;\n }\n\n th,\n td {\n padding: 8px;\n text-align: left;\n border-bottom: 1px solid var(--ymt-outline-variant);\n word-break: normal;\n }\n\n th {\n background-color: var(--object-summary-section-background, var(--ymt-surface));\n font-weight: bold;\n }\n\n tr:hover {\n background-color: var(--ymt-hover-background);\n }\n `\n ]\n})\nexport class TableRendererComponent extends AbstractRendererComponent<any[]> {\n readonly #system = inject(SystemService);\n\n protected tableHeaders = computed(() => {\n const value = this.value() as { [key: string]: string | number }[] | undefined;\n if (!value || !value.length) return [];\n const headers = new Set<{ key: string; label: string }>();\n\n const allKeys = new Set<string>();\n value.forEach((item) => Object.keys(item).forEach((key) => allKeys.add(key)));\n allKeys.forEach((key) => headers.add({ key, label: this.#system.getLocalizedLabel(`${key}`) || key }));\n\n return Array.from(headers);\n });\n\n protected tableData = computed(() => {\n const data = this.value() || [];\n return data.length > 10 ? data.slice(0, 10) : data;\n });\n\n protected reducedData = computed(() => {\n const data = this.value() || [];\n return data.length > 10;\n });\n}\n","import { Component } from '@angular/core';\nimport { AbstractRendererComponent } from './abstract.renderer';\n\n@Component({\n selector: 'yuv-unknown-renderer',\n template: '{{value()}}',\n styles: [\n `\n :host {\n display: inline-block;\n padding: var(--tile-slot-padding);\n }\n `\n ]\n})\nexport class UnknownRendererComponent extends AbstractRendererComponent<any> {}\n","import { Injectable, Type, inject, signal } from '@angular/core';\nimport { ContentStreamField, InternalFieldType, RendererType, SchemaResponseFieldDefinition, SystemService } from '@yuuvis/client-core';\nimport { RendererComponent } from './renderer.interface';\nimport {\n AbstractRendererComponent,\n BooleanRendererComponent,\n DateTimeRendererComponent,\n DecimalRendererComponent,\n FileSizeRendererComponent,\n IconRendererComponent,\n IntegerRendererComponent,\n OrganizationRendererComponent,\n StringRendererComponent,\n UnknownRendererComponent\n} from '../../property-renderer';\nimport { TableRendererComponent } from '../../property-renderer/table.renderer.component';\n\n/**\n * Service for managing property type renderers. Renderers are components that will render certain\n * property types.\n *\n * You are able to register your own renderer to overwrite an existing one or provide a custom\n * renderer for your context.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RendererService {\n private system = inject(SystemService);\n\n #renderers = signal<Record<string, Type<RendererComponent>>>({});\n\n constructor() {\n const initialRenderers: Record<string, Type<RendererComponent>> = {\n integer: IntegerRendererComponent,\n decimal: DecimalRendererComponent,\n datetime: DateTimeRendererComponent,\n icon: IconRendererComponent,\n string: StringRendererComponent,\n boolean: BooleanRendererComponent,\n table: TableRendererComponent\n };\n initialRenderers[InternalFieldType.STRING_ORGANIZATION] = OrganizationRendererComponent;\n initialRenderers[ContentStreamField.LENGTH] = FileSizeRendererComponent;\n this.#renderers.set(initialRenderers);\n }\n\n getRendererByType(type: RendererType): Type<RendererComponent> {\n return this.#renderers()[type] || UnknownRendererComponent;\n }\n\n getRenderer(propertyName: string, typeName?: string): Type<RendererComponent> {\n // try to find a renderer based on property and object type\n let r = this.#renderers()[this._getKey(propertyName, typeName)];\n\n if (!r) {\n // not special renderer found so we'll try to get one for the internal type\n // of the given property\n const srf: SchemaResponseFieldDefinition | undefined = this.system.system && this.system.system.allFields[propertyName];\n if (srf) {\n r = this.getRendererByType(this.system.getInternalFormElementType(srf.propertyType, srf.classifications));\n }\n }\n\n return r || UnknownRendererComponent;\n }\n\n /**\n * Register a renderer for a particular property. Providing `typeName` will register that renderer\n * for a certain context (use same inputs when calling `getRenderer()`).\n * @param cmp The component to actually render the property\n * @param propertyName property name (used for registering the renderer for a certain context)\n * @param typeName Optional type name (used for registering the renderer for a certain context)\n */\n registerRenderer(cmp: Type<AbstractRendererComponent>, propertyName: string, typeName?: string) {\n this.#renderers.update((curr) => ({ ...curr, ...{ [this._getKey(propertyName, typeName)]: cmp } }));\n }\n\n /**\n *\n * @param type The type of property this renderer is supposed to be used for\n */\n registerRendererByType(type: RendererType, cmp: Type<RendererComponent>) {\n this.#renderers.update((curr) => ({ ...curr, ...{ [type]: cmp } }));\n }\n\n // Generate the unique key for a renderer\n private _getKey(propertyName: string, typeName?: string): string {\n const k = [propertyName];\n typeName && k.push(typeName);\n return k.join('-');\n }\n}\n","import { ComponentRef, Directive, Injector, Type, ViewContainerRef, effect, inject, input, runInInjectionContext } from '@angular/core';\nimport { RendererComponent, RendererDirectiveInput } from './services/renderer/renderer.interface';\nimport { RendererService } from './services/renderer/renderer.service';\n\n/**\n * Structural directive for rendering an obect type property\n */\n@Directive({\n selector: '[yuvRenderer]',\n standalone: true\n})\nexport class RendererDirective {\n private readonly rendererService = inject(RendererService);\n private readonly containerRef = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n\n component!: ComponentRef<RendererComponent>;\n\n private _rendererInput?: RendererDirectiveInput;\n\n yuvRenderer = input<RendererDirectiveInput | undefined>(undefined);\n\n #yuvRendererEffect = effect(() => {\n const i = this.yuvRenderer();\n if (i && !this._alreadyRendered(i)) {\n this._rendererInput = i;\n\n if (i) {\n if (this.component) this.containerRef.clear();\n\n const cmp: Type<RendererComponent> = i.rendererType\n ? this.rendererService.getRendererByType(i.rendererType)\n : this.rendererService.getRenderer(i.propertyName);\n\n this.component = this.containerRef.createComponent(cmp);\n // pass inputs to the renderer. As they are signals they need an injection context\n // runInInjectionContext(this.injector, () => { // FOLLOWUP: this is not needed anymore with the new input() API\n this.component.setInput('propertyName', i.propertyName);\n this.component.setInput('value', i.value);\n if (i.meta) this.component.setInput('meta', i.meta);\n // });\n } else {\n this.containerRef.clear();\n }\n }\n });\n\n private _alreadyRendered(i: RendererDirectiveInput): boolean {\n return !!this._rendererInput && JSON.stringify(this._rendererInput) === JSON.stringify(i);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
|
|
|
17
17
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
18
18
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
19
19
|
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
|
|
20
|
-
import { YUV_ICONS,
|
|
20
|
+
import { YUV_ICONS, ObjectTypeIconComponent } from '@yuuvis/client-framework/icons';
|
|
21
21
|
import * as i3 from '@yuuvis/client-framework/list';
|
|
22
22
|
import { ListItemDirective, YuvListModule } from '@yuuvis/client-framework/list';
|
|
23
23
|
import { YmtMatIconRegistryService, YmtButtonDirective } from '@yuuvis/material';
|
|
@@ -790,12 +790,12 @@ class PropertySelectComponent {
|
|
|
790
790
|
return this.system.getLocalizedLabel(otf.id) || otf.id;
|
|
791
791
|
}
|
|
792
792
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: PropertySelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
793
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: PropertySelectComponent, isStandalone: true, selector: "yuv-tile-property-select", inputs: { objectType: { classPropertyName: "objectType", publicName: "objectType", isSignal: true, isRequired: false, transformFunction: null }, selectedProperty: { classPropertyName: "selectedProperty", publicName: "selectedProperty", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { propertySelect: "propertySelect" }, ngImport: i0, template: "<!-- TODO: enable once filtering of properties makes sense -->\n<!-- <form class=\"filter\">\n <div class=\"filter-input\">\n <input type=\"text\" [placeholder]=\"'yuv.tile-config.property-select.filter.placeholder' | translate\" name=\"query\" [(ngModel)]=\"query\" />\n @if (query()) {\n <button class=\"icn\" (click)=\"query.set(null)\">\n <yuv-icon [svg]=\"clearIcon\"></yuv-icon>\n </button>\n }\n </div>\n</form> -->\n\n<ul class=\"properties\">\n @for (p of filteredObjectTypeFields(); track $index) {\n <li [ngClass]=\"{ baseProperty: p.baseProperty, selected: p.id === selectedProperty()?.propertyName }\" (click)=\"selectProperty(p)\">\n <div class=\"label\">{{ p.label }}</div>\n <button mat-icon-button (click)=\"removeProperty($event)\">\n <mat-icon>close</mat-icon>\n </button>\n </li>\n }\n</ul>\n", styles: [":host{display:flex;flex-flow:column;max-height:100%}:host .filter{flex:0 0 auto}:host .filter .filter-input{background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);display:flex;padding:.25em;align-items:center}:host .filter .filter-input input{background-color:transparent;border:0;outline:0;flex:1;color:var(--ymt-text-color)}:host .properties{flex:1;column-count:3;column-width:30ch;column-rule:1px dotted var(--ymt-outline);column-gap:2em;margin-block-start:var(--ymt-spacing-m)}:host .properties li{border:1px solid var(--ymt-outline-variant);border-radius:0;margin-block-end:1px;display:flex;align-items:center;justify-content:space-between;cursor:default}:host .properties li:hover{background-color:var(--ymt-hover-background)}:host .properties li.baseProperty{font-style:italic}:host .properties li.selected{background-color:var(--ymt-primary);color:var(--ymt-on-primary)}:host .properties li:not(.selected) button{display:none}:host .properties li .label{padding:var(--ymt-spacing-xs) var(--ymt-spacing-m)}:host .properties li button{color:currentColor}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
793
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: PropertySelectComponent, isStandalone: true, selector: "yuv-tile-property-select", inputs: { objectType: { classPropertyName: "objectType", publicName: "objectType", isSignal: true, isRequired: false, transformFunction: null }, selectedProperty: { classPropertyName: "selectedProperty", publicName: "selectedProperty", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { propertySelect: "propertySelect" }, ngImport: i0, template: "<!-- TODO: enable once filtering of properties makes sense -->\n<!-- <form class=\"filter\">\n <div class=\"filter-input\">\n <input type=\"text\" [placeholder]=\"'yuv.tile-config.property-select.filter.placeholder' | translate\" name=\"query\" [(ngModel)]=\"query\" />\n @if (query()) {\n <button class=\"icn\" (click)=\"query.set(null)\">\n <yuv-icon [svg]=\"clearIcon\"></yuv-icon>\n </button>\n }\n </div>\n</form> -->\n\n<ul class=\"properties\">\n @for (p of filteredObjectTypeFields(); track $index) {\n <li [ngClass]=\"{ baseProperty: p.baseProperty, selected: p.id === selectedProperty()?.propertyName }\" (click)=\"selectProperty(p)\">\n <div class=\"label\">{{ p.label }}</div>\n <button mat-icon-button (click)=\"removeProperty($event)\">\n <mat-icon>close</mat-icon>\n </button>\n </li>\n }\n</ul>\n", styles: [":host{display:flex;flex-flow:column;max-height:100%}:host .filter{flex:0 0 auto}:host .filter .filter-input{background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);display:flex;padding:.25em;align-items:center}:host .filter .filter-input input{background-color:transparent;border:0;outline:0;flex:1;color:var(--ymt-text-color)}:host .properties{flex:1;column-count:3;column-width:30ch;column-rule:1px dotted var(--ymt-outline);column-gap:2em;margin-block-start:var(--ymt-spacing-m)}:host .properties li{border:1px solid var(--ymt-outline-variant);border-radius:0;margin-block-end:1px;display:flex;align-items:center;justify-content:space-between;cursor:default}:host .properties li:hover{background-color:var(--ymt-hover-background)}:host .properties li.baseProperty{font-style:italic}:host .properties li.selected{background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container)}:host .properties li:not(.selected) button{display:none}:host .properties li .label{padding:var(--ymt-spacing-xs) var(--ymt-spacing-m)}:host .properties li button{color:currentColor}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
794
794
|
}
|
|
795
795
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: PropertySelectComponent, decorators: [{
|
|
796
796
|
type: Component,
|
|
797
797
|
args: [{ selector: 'yuv-tile-property-select', standalone: true, imports: [NgClass, FormsModule, TranslateModule,
|
|
798
|
-
MatButtonModule, MatIconModule], template: "<!-- TODO: enable once filtering of properties makes sense -->\n<!-- <form class=\"filter\">\n <div class=\"filter-input\">\n <input type=\"text\" [placeholder]=\"'yuv.tile-config.property-select.filter.placeholder' | translate\" name=\"query\" [(ngModel)]=\"query\" />\n @if (query()) {\n <button class=\"icn\" (click)=\"query.set(null)\">\n <yuv-icon [svg]=\"clearIcon\"></yuv-icon>\n </button>\n }\n </div>\n</form> -->\n\n<ul class=\"properties\">\n @for (p of filteredObjectTypeFields(); track $index) {\n <li [ngClass]=\"{ baseProperty: p.baseProperty, selected: p.id === selectedProperty()?.propertyName }\" (click)=\"selectProperty(p)\">\n <div class=\"label\">{{ p.label }}</div>\n <button mat-icon-button (click)=\"removeProperty($event)\">\n <mat-icon>close</mat-icon>\n </button>\n </li>\n }\n</ul>\n", styles: [":host{display:flex;flex-flow:column;max-height:100%}:host .filter{flex:0 0 auto}:host .filter .filter-input{background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);display:flex;padding:.25em;align-items:center}:host .filter .filter-input input{background-color:transparent;border:0;outline:0;flex:1;color:var(--ymt-text-color)}:host .properties{flex:1;column-count:3;column-width:30ch;column-rule:1px dotted var(--ymt-outline);column-gap:2em;margin-block-start:var(--ymt-spacing-m)}:host .properties li{border:1px solid var(--ymt-outline-variant);border-radius:0;margin-block-end:1px;display:flex;align-items:center;justify-content:space-between;cursor:default}:host .properties li:hover{background-color:var(--ymt-hover-background)}:host .properties li.baseProperty{font-style:italic}:host .properties li.selected{background-color:var(--ymt-primary);color:var(--ymt-on-primary)}:host .properties li:not(.selected) button{display:none}:host .properties li .label{padding:var(--ymt-spacing-xs) var(--ymt-spacing-m)}:host .properties li button{color:currentColor}\n"] }]
|
|
798
|
+
MatButtonModule, MatIconModule], template: "<!-- TODO: enable once filtering of properties makes sense -->\n<!-- <form class=\"filter\">\n <div class=\"filter-input\">\n <input type=\"text\" [placeholder]=\"'yuv.tile-config.property-select.filter.placeholder' | translate\" name=\"query\" [(ngModel)]=\"query\" />\n @if (query()) {\n <button class=\"icn\" (click)=\"query.set(null)\">\n <yuv-icon [svg]=\"clearIcon\"></yuv-icon>\n </button>\n }\n </div>\n</form> -->\n\n<ul class=\"properties\">\n @for (p of filteredObjectTypeFields(); track $index) {\n <li [ngClass]=\"{ baseProperty: p.baseProperty, selected: p.id === selectedProperty()?.propertyName }\" (click)=\"selectProperty(p)\">\n <div class=\"label\">{{ p.label }}</div>\n <button mat-icon-button (click)=\"removeProperty($event)\">\n <mat-icon>close</mat-icon>\n </button>\n </li>\n }\n</ul>\n", styles: [":host{display:flex;flex-flow:column;max-height:100%}:host .filter{flex:0 0 auto}:host .filter .filter-input{background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);display:flex;padding:.25em;align-items:center}:host .filter .filter-input input{background-color:transparent;border:0;outline:0;flex:1;color:var(--ymt-text-color)}:host .properties{flex:1;column-count:3;column-width:30ch;column-rule:1px dotted var(--ymt-outline);column-gap:2em;margin-block-start:var(--ymt-spacing-m)}:host .properties li{border:1px solid var(--ymt-outline-variant);border-radius:0;margin-block-end:1px;display:flex;align-items:center;justify-content:space-between;cursor:default}:host .properties li:hover{background-color:var(--ymt-hover-background)}:host .properties li.baseProperty{font-style:italic}:host .properties li.selected{background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container)}:host .properties li:not(.selected) button{display:none}:host .properties li .label{padding:var(--ymt-spacing-xs) var(--ymt-spacing-m)}:host .properties li button{color:currentColor}\n"] }]
|
|
799
799
|
}] });
|
|
800
800
|
|
|
801
801
|
/**
|
|
@@ -824,7 +824,7 @@ class TileConfigTileComponent {
|
|
|
824
824
|
this.actions = computed(() => {
|
|
825
825
|
const actionsList = [];
|
|
826
826
|
const ocActions = this.objectConfig();
|
|
827
|
-
if (ocActions
|
|
827
|
+
if (ocActions?.actions?.length) {
|
|
828
828
|
ocActions.actions?.forEach((a) => {
|
|
829
829
|
const aa = this.actionService.getActionById(a.id);
|
|
830
830
|
if (aa)
|
|
@@ -849,13 +849,13 @@ class TileConfigTileComponent {
|
|
|
849
849
|
});
|
|
850
850
|
}
|
|
851
851
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: TileConfigTileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
852
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: TileConfigTileComponent, isStandalone: true, selector: "yuv-tile-config-tile", inputs: { disableIconSlot: { classPropertyName: "disableIconSlot", publicName: "disableIconSlot", isSignal: true, isRequired: false, transformFunction: null }, disableBadgesSlot: { classPropertyName: "disableBadgesSlot", publicName: "disableBadgesSlot", isSignal: true, isRequired: false, transformFunction: null }, objectConfig: { classPropertyName: "objectConfig", publicName: "objectConfig", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { slotSelect: "slotSelect" }, ngImport: i0, template: "@let oc = _objectConfig();\n\n<div data-slot=\"icon\" [attr.disabled]=\"disableIconSlot()\" (click)=\"selectSlot('icon')\">\n @if (oc.icon) {\n <
|
|
852
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: TileConfigTileComponent, isStandalone: true, selector: "yuv-tile-config-tile", inputs: { disableIconSlot: { classPropertyName: "disableIconSlot", publicName: "disableIconSlot", isSignal: true, isRequired: false, transformFunction: null }, disableBadgesSlot: { classPropertyName: "disableBadgesSlot", publicName: "disableBadgesSlot", isSignal: true, isRequired: false, transformFunction: null }, objectConfig: { classPropertyName: "objectConfig", publicName: "objectConfig", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { slotSelect: "slotSelect" }, ngImport: i0, template: "@let oc = _objectConfig();\n\n<div data-slot=\"icon\" [attr.disabled]=\"disableIconSlot()\" (click)=\"selectSlot('icon')\">\n @if (oc && oc.icon) {\n <mat-icon>{{ oc.icon.svg }}</mat-icon>\n } @else if (oc && oc.objectTypeId) {\n <yuv-object-type-icon [objectTypeId]=\"oc.objectTypeId\"></yuv-object-type-icon>\n }\n</div>\n<div data-slot=\"title\" (click)=\"selectSlot('title')\">{{ oc?.title?.label }}</div>\n<div data-slot=\"actions\" (click)=\"selectSlot('actions')\">\n @for (a of actions(); track a.id) {\n <button mat-icon-button [matTooltip]=\"a.label\">\n <mat-icon inert=\"true\">{{ a.icon }}</mat-icon>\n </button>\n }\n</div>\n<div data-slot=\"description\" (click)=\"selectSlot('description')\">{{ oc?.description?.label }}</div>\n<div data-slot=\"aside\" (click)=\"selectSlot('aside')\">{{ oc?.aside?.label }}</div>\n<div data-slot=\"meta\" (click)=\"selectSlot('meta')\">{{ oc?.meta?.label }}</div>\n@if (!disableBadgesSlot()) {\n <div data-slot=\"badges\" (click)=\"selectSlot('badges')\">\n {{ oc?.badges }}\n </div>\n}\n", styles: [":host{--tile-item-gap: .5em;--tile-background: transparent;--tile-icon-fill: currentColor;display:grid;grid-template-rows:auto auto auto auto;grid-template-columns:3rem 1fr auto;grid-template-areas:\"icon title title actions\" \"icon description aside aside\" \"icon meta meta badges\";gap:var(--tile-item-gap);padding:var(--ymt-spacing-m);background-color:var(--tile-background)}:host:hover [data-slot=actions]{opacity:1}:host [data-slot=icon]{grid-area:icon;display:flex;align-items:center;justify-content:center}:host [data-slot=title]{grid-area:title;font-weight:700}:host [data-slot=description]{grid-area:description}:host [data-slot=meta]{grid-area:meta}:host [data-slot=aside]{flex:0 0 auto;grid-area:aside}:host [data-slot=actions]{flex:0 0 auto;display:flex;justify-self:end;grid-area:actions}:host [data-slot=actions] button{padding:0;gap:2px}:host [data-slot=badges]{grid-area:badges;justify-self:end;flex:0 0 auto}:host :where([data-slot=badges],[data-slot=actions],[data-slot=aside],[data-slot=icon],[data-slot=title],[data-slot=description],[data-slot=meta]){display:flex;align-items:center;background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline);padding:.25em .5em;box-sizing:border-box;min-height:2.2em;border-radius:var(--ymt-corner-xs)}:host :where([data-slot=badges],[data-slot=actions],[data-slot=aside],[data-slot=icon],[data-slot=title],[data-slot=description],[data-slot=meta]):not([disabled]){cursor:pointer}:host :where([data-slot=badges],[data-slot=actions],[data-slot=aside],[data-slot=icon],[data-slot=title],[data-slot=description],[data-slot=meta]):not([disabled]):hover{background-color:var(--ymt-focus-background);color:var(--ymt-on-focus-background)}:host :where([data-slot=badges],[data-slot=actions],[data-slot=aside],[data-slot=icon],[data-slot=title],[data-slot=description],[data-slot=meta]):not([disabled]).active{background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container)}:host :where([data-slot=badges],[data-slot=actions],[data-slot=aside],[data-slot=icon],[data-slot=title],[data-slot=description],[data-slot=meta])[disabled]{border:none;background-color:transparent}:host :where([data-slot=badges],[data-slot=actions]){min-width:3em}:host :where([data-slot=badges],[data-slot=actions]) button{width:24px;height:24px;pointer-events:none;color:currentColor}:host [data-slot=aside]{min-width:4em}:host [data-slot=icon]{height:3em;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: ObjectTypeIconComponent, selector: "yuv-object-type-icon", inputs: ["objectTypeId"] }] }); }
|
|
853
853
|
}
|
|
854
854
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: TileConfigTileComponent, decorators: [{
|
|
855
855
|
type: Component,
|
|
856
|
-
args: [{ selector: 'yuv-tile-config-tile', standalone: true, imports: [
|
|
856
|
+
args: [{ selector: 'yuv-tile-config-tile', standalone: true, imports: [MatButtonModule,
|
|
857
857
|
MatTooltipModule,
|
|
858
|
-
MatIconModule, CommonModule, ObjectTypeIconComponent], template: "@let oc = _objectConfig();\n\n<div data-slot=\"icon\" [attr.disabled]=\"disableIconSlot()\" (click)=\"selectSlot('icon')\">\n @if (oc.icon) {\n <
|
|
858
|
+
MatIconModule, CommonModule, ObjectTypeIconComponent], template: "@let oc = _objectConfig();\n\n<div data-slot=\"icon\" [attr.disabled]=\"disableIconSlot()\" (click)=\"selectSlot('icon')\">\n @if (oc && oc.icon) {\n <mat-icon>{{ oc.icon.svg }}</mat-icon>\n } @else if (oc && oc.objectTypeId) {\n <yuv-object-type-icon [objectTypeId]=\"oc.objectTypeId\"></yuv-object-type-icon>\n }\n</div>\n<div data-slot=\"title\" (click)=\"selectSlot('title')\">{{ oc?.title?.label }}</div>\n<div data-slot=\"actions\" (click)=\"selectSlot('actions')\">\n @for (a of actions(); track a.id) {\n <button mat-icon-button [matTooltip]=\"a.label\">\n <mat-icon inert=\"true\">{{ a.icon }}</mat-icon>\n </button>\n }\n</div>\n<div data-slot=\"description\" (click)=\"selectSlot('description')\">{{ oc?.description?.label }}</div>\n<div data-slot=\"aside\" (click)=\"selectSlot('aside')\">{{ oc?.aside?.label }}</div>\n<div data-slot=\"meta\" (click)=\"selectSlot('meta')\">{{ oc?.meta?.label }}</div>\n@if (!disableBadgesSlot()) {\n <div data-slot=\"badges\" (click)=\"selectSlot('badges')\">\n {{ oc?.badges }}\n </div>\n}\n", styles: [":host{--tile-item-gap: .5em;--tile-background: transparent;--tile-icon-fill: currentColor;display:grid;grid-template-rows:auto auto auto auto;grid-template-columns:3rem 1fr auto;grid-template-areas:\"icon title title actions\" \"icon description aside aside\" \"icon meta meta badges\";gap:var(--tile-item-gap);padding:var(--ymt-spacing-m);background-color:var(--tile-background)}:host:hover [data-slot=actions]{opacity:1}:host [data-slot=icon]{grid-area:icon;display:flex;align-items:center;justify-content:center}:host [data-slot=title]{grid-area:title;font-weight:700}:host [data-slot=description]{grid-area:description}:host [data-slot=meta]{grid-area:meta}:host [data-slot=aside]{flex:0 0 auto;grid-area:aside}:host [data-slot=actions]{flex:0 0 auto;display:flex;justify-self:end;grid-area:actions}:host [data-slot=actions] button{padding:0;gap:2px}:host [data-slot=badges]{grid-area:badges;justify-self:end;flex:0 0 auto}:host :where([data-slot=badges],[data-slot=actions],[data-slot=aside],[data-slot=icon],[data-slot=title],[data-slot=description],[data-slot=meta]){display:flex;align-items:center;background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline);padding:.25em .5em;box-sizing:border-box;min-height:2.2em;border-radius:var(--ymt-corner-xs)}:host :where([data-slot=badges],[data-slot=actions],[data-slot=aside],[data-slot=icon],[data-slot=title],[data-slot=description],[data-slot=meta]):not([disabled]){cursor:pointer}:host :where([data-slot=badges],[data-slot=actions],[data-slot=aside],[data-slot=icon],[data-slot=title],[data-slot=description],[data-slot=meta]):not([disabled]):hover{background-color:var(--ymt-focus-background);color:var(--ymt-on-focus-background)}:host :where([data-slot=badges],[data-slot=actions],[data-slot=aside],[data-slot=icon],[data-slot=title],[data-slot=description],[data-slot=meta]):not([disabled]).active{background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container)}:host :where([data-slot=badges],[data-slot=actions],[data-slot=aside],[data-slot=icon],[data-slot=title],[data-slot=description],[data-slot=meta])[disabled]{border:none;background-color:transparent}:host :where([data-slot=badges],[data-slot=actions]){min-width:3em}:host :where([data-slot=badges],[data-slot=actions]) button{width:24px;height:24px;pointer-events:none;color:currentColor}:host [data-slot=aside]{min-width:4em}:host [data-slot=icon]{height:3em;width:100%}\n"] }]
|
|
859
859
|
}] });
|
|
860
860
|
|
|
861
861
|
class TileConfigComponent {
|
|
@@ -880,7 +880,7 @@ class TileConfigComponent {
|
|
|
880
880
|
return [...ct.map((t) => ({ id: t.id, icon: t.icon, data: t })), ...cf.map((f) => ({ id: f.id, icon: f.icon, flavor: true, data: f }))];
|
|
881
881
|
});
|
|
882
882
|
this.save = output();
|
|
883
|
-
this.
|
|
883
|
+
this.canceled = output();
|
|
884
884
|
this.selectedTypeProperties = [];
|
|
885
885
|
this.#emptyObjectConfig = {
|
|
886
886
|
objectTypeId: '',
|
|
@@ -935,7 +935,7 @@ class TileConfigComponent {
|
|
|
935
935
|
const alreadyChanged = this.changes[t.id];
|
|
936
936
|
// load tile config
|
|
937
937
|
// if the type has been changed before load that config instead of the persisted one
|
|
938
|
-
this.objectConfig = alreadyChanged ||
|
|
938
|
+
this.objectConfig = { ...alreadyChanged || this.#objectConfigService.getObjectConfig(t, this.bucket() || '') };
|
|
939
939
|
if (!this.objectConfig) {
|
|
940
940
|
this.objectConfig = {
|
|
941
941
|
...this.#emptyObjectConfig,
|
|
@@ -971,15 +971,14 @@ class TileConfigComponent {
|
|
|
971
971
|
if (!this.selectedType)
|
|
972
972
|
return;
|
|
973
973
|
if (this.objectConfig) {
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
const idx = this.objectConfig.actions.findIndex((a) => a.id === action.id);
|
|
974
|
+
const actions = this.objectConfig?.actions ? [...this.objectConfig.actions] : [];
|
|
975
|
+
const idx = actions.findIndex((a) => a.id === action.id);
|
|
977
976
|
if (idx !== -1)
|
|
978
|
-
|
|
977
|
+
actions.splice(idx, 1);
|
|
979
978
|
else
|
|
980
|
-
|
|
981
|
-
this.objectConfig =
|
|
982
|
-
this.changes[this.selectedType.id] = this.objectConfig;
|
|
979
|
+
actions.push({ id: action.id });
|
|
980
|
+
this.objectConfig = { ...this.objectConfig, actions };
|
|
981
|
+
this.changes[this.selectedType.id] = { ...this.objectConfig };
|
|
983
982
|
}
|
|
984
983
|
}
|
|
985
984
|
saveConfig() {
|
|
@@ -989,23 +988,51 @@ class TileConfigComponent {
|
|
|
989
988
|
}
|
|
990
989
|
resetConfig() {
|
|
991
990
|
if (this.selectedType) {
|
|
992
|
-
this.
|
|
993
|
-
this.
|
|
991
|
+
const defaults = this.#objectConfigService.getRegisteredDefault(this.selectedType.id, this.bucket()) || this.#emptyObjectConfig;
|
|
992
|
+
this.changes[this.selectedType.id] = { ...defaults };
|
|
993
|
+
this.objectConfig = { ...defaults };
|
|
994
|
+
const originalConfig = this.#objectConfigService.getObjectConfig(this.selectedType, this.bucket());
|
|
995
|
+
if (this.#deepEqual(defaults, originalConfig)) {
|
|
996
|
+
this.changes[this.selectedType.id] = undefined;
|
|
997
|
+
delete this.changes[this.selectedType.id];
|
|
998
|
+
}
|
|
999
|
+
else {
|
|
1000
|
+
this.changes[this.selectedType.id] = { ...defaults };
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
cancelConfig() {
|
|
1005
|
+
this.changes = {};
|
|
1006
|
+
this.canceled.emit();
|
|
1007
|
+
}
|
|
1008
|
+
#deepEqual(a, b) {
|
|
1009
|
+
if (a === b)
|
|
1010
|
+
return true;
|
|
1011
|
+
if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null)
|
|
1012
|
+
return false;
|
|
1013
|
+
const keysA = Object.keys(a);
|
|
1014
|
+
const keysB = Object.keys(b);
|
|
1015
|
+
if (keysA.length !== keysB.length)
|
|
1016
|
+
return false;
|
|
1017
|
+
for (const key of keysA) {
|
|
1018
|
+
if (!keysB.includes(key))
|
|
1019
|
+
return false;
|
|
1020
|
+
if (!this.#deepEqual(a[key], b[key]))
|
|
1021
|
+
return false;
|
|
994
1022
|
}
|
|
1023
|
+
return true;
|
|
995
1024
|
}
|
|
996
1025
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: TileConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
997
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: TileConfigComponent, isStandalone: true, selector: "yuv-tile-config", inputs: { bucket: { classPropertyName: "bucket", publicName: "bucket", isSignal: true, isRequired: false, transformFunction: null }, bucketLabel: { classPropertyName: "bucketLabel", publicName: "bucketLabel", isSignal: true, isRequired: false, transformFunction: null }, configTypes: { classPropertyName: "configTypes", publicName: "configTypes", isSignal: true, isRequired: false, transformFunction: null }, configFlavors: { classPropertyName: "configFlavors", publicName: "configFlavors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { save: "save",
|
|
1026
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: TileConfigComponent, isStandalone: true, selector: "yuv-tile-config", inputs: { bucket: { classPropertyName: "bucket", publicName: "bucket", isSignal: true, isRequired: false, transformFunction: null }, bucketLabel: { classPropertyName: "bucketLabel", publicName: "bucketLabel", isSignal: true, isRequired: false, transformFunction: null }, configTypes: { classPropertyName: "configTypes", publicName: "configTypes", isSignal: true, isRequired: false, transformFunction: null }, configFlavors: { classPropertyName: "configFlavors", publicName: "configFlavors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { save: "save", canceled: "canceled" }, ngImport: i0, template: "<yuv-dialog [headertitel]=\"'yuv.tile-config.title' | translate: { bucket: bucketLabel() }\">\n <main class=\"tile-config\">\n <yuv-split-view [gutterSize]=\"1\" [layoutSettingsID]=\"'yuv.framework.tile-config.layout'\">\n <!-- list of types -->\n <ng-template yuvSplitArea [size]=\"30\">\n <div class=\"types\">\n <yuv-list (itemSelect)=\"itemSelected($event)\" autoSelect>\n @for (t of types() || []; track t.id; let i = $index) {\n <div\n yuvListItem\n >\n @if (t.icon) {\n <mat-icon>{{ t.icon }}</mat-icon>\n }\n {{ t.id | translate }}\n </div>\n }\n </yuv-list>\n </div>\n </ng-template>\n\n <!-- selected type details-->\n <ng-template yuvSplitArea [size]=\"70\">\n <div class=\"details\">\n @if (selectedType) {\n <header>\n <h2>{{ selectedType.id | translate }}</h2>\n <button ymtButton=\"secondary\" (click)=\"resetConfig()\">{{ 'yuv.tile-config.button.reset' | translate }}</button>\n </header>\n <div class=\"dummy-preview\">\n <yuv-tile-config-tile\n [disableIconSlot]=\"true\"\n [disableBadgesSlot]=\"true\"\n [objectConfig]=\"objectConfig!\"\n (slotSelect)=\"slotSelect($event)\"\n ></yuv-tile-config-tile>\n </div>\n\n <main>\n @if (selectedSlot === 'icon') {\n <h3>{{ 'yuv.tile-config.slot.icon.headline' | translate }}</h3>\n <yuv-icon-select [objectType]=\"selectedType\" (iconSelect)=\"iconSelected($event)\"></yuv-icon-select>\n } @else if (selectedSlot === 'badges') {\n <div class=\"placeholder empty\">\n <p>Future feature: Select badges (like: is favorite, ratings, ...)</p>\n </div>\n } @else if (!selectedSlot) {\n } @else if (selectedSlot === 'actions') {\n <h3>{{ 'yuv.tile-config.slot.action.headline' | translate }}</h3>\n <yuv-tile-action-select\n [objectType]=\"selectedType\"\n [selectedActionIds]=\"getSelectedActions()\"\n (actionSelect)=\"actionSelected($event)\"\n ></yuv-tile-action-select>\n } @else {\n <h3>{{ 'yuv.tile-config.slot.property.headline' | translate }}</h3>\n <yuv-tile-property-select\n [objectType]=\"selectedType\"\n [selectedProperty]=\"getConfigProperty(selectedSlot)\"\n (propertySelect)=\"propertySelected(selectedSlot, $event)\"\n ></yuv-tile-property-select>\n }\n </main>\n } @else {\n <div class=\"placeholder empty\">\n <h2>{{ 'yuv.tile-config.details.empty.title' | translate }}</h2>\n <p>{{ 'yuv.tile-config.details.empty.description' | translate }}</p>\n </div>\n }\n </div>\n </ng-template>\n </yuv-split-view>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" (click)=\"cancelConfig()\">{{ 'yuv.tile-config.button.close' | translate }}</button>\n <button ymtButton=\"primary\" [disabled]=\"!configChanged\" (click)=\"saveConfig()\">{{ 'yuv.tile-config.button.save' | translate }}</button>\n </footer>\n</yuv-dialog>\n", styles: [":host{display:flex;height:100%;flex-flow:column}:host main.tile-config{height:100%;display:contents}:host yuv-split-view{--split-gutter-background-color: var(--ymt-outline-variant);flex:1}:host .details{box-sizing:border-box}:host div.types{box-sizing:border-box;height:100%;overflow-y:auto}:host div.types div[yuvListItem]{display:flex;gap:var(--ymt-spacing-m);align-items:center;padding:var(--ymt-spacing-xs) var(--ymt-spacing-m);cursor:pointer}:host div.types div[yuvListItem]:not([aria-selected=true]):hover,:host div.types div[yuvListItem]:not([aria-selected=true])[aria-current=true]{background-color:var(--ymt-focus-background)}:host div.types div[yuvListItem][aria-selected=true]{background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container)}:host div.types div[yuvListItem] yuv-object-type-icon{flex:0 0 auto;color:currentColor;opacity:.54}:host .details{height:100%;display:flex;flex-flow:column;overflow:hidden}:host .details header{flex:0 0 auto;display:flex;align-items:center;border-bottom:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-m);gap:var(--ymt-spacing-m)}:host .details header h2{flex:1;overflow:hidden;text-overflow:ellipsis;margin:0}:host .details .dummy-preview{flex:0 0 auto;padding:var(--ymt-spacing-m);background-color:var(--ymt-surface-panel);border-bottom:1px solid var(--ymt-outline-variant)}:host .details .dummy-preview yuv-tile-config-tile{border-radius:var(--ymt-corner-m);border:1px solid var(--ymt-outline);background-color:var(--ymt-surface-container)}:host .details main{flex:1;overflow-y:auto;padding:var(--ymt-spacing-m)}:host .details main h3{margin:0;padding-block-end:var(--ymt-spacing-m);font:var(--ymt-font-subhead)}:host .details .placeholder.empty{height:100%;display:grid;place-content:center;color:var(--ymt-text-color-subtle)}\n"], dependencies: [{ kind: "ngmodule", type: YuvSplitViewModule }, { kind: "directive", type: i1$3.SplitAreaDirective, selector: "[yuvSplitArea]", inputs: ["size", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "component", type: i1$3.SplitViewComponent, selector: "yuv-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "component", type: TileConfigTileComponent, selector: "yuv-tile-config-tile", inputs: ["disableIconSlot", "disableBadgesSlot", "objectConfig"], outputs: ["slotSelect"] }, { kind: "component", type: IconSelectComponent, selector: "yuv-icon-select", inputs: ["objectType"], outputs: ["iconSelect"] }, { kind: "component", type: PropertySelectComponent, selector: "yuv-tile-property-select", inputs: ["objectType", "selectedProperty"], outputs: ["propertySelect"] }, { kind: "component", type: ActionSelectComponent, selector: "yuv-tile-action-select", inputs: ["objectType", "selectedActionIds"], outputs: ["actionSelect"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: YuvListModule }, { kind: "component", type: i3.ListComponent, selector: "yuv-list", inputs: ["multiselect", "selfHandleSelection", "autoSelect", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "directive", type: i3.ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitel"] }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }] }); }
|
|
998
1027
|
}
|
|
999
1028
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: TileConfigComponent, decorators: [{
|
|
1000
1029
|
type: Component,
|
|
1001
1030
|
args: [{ selector: 'yuv-tile-config', standalone: true, imports: [
|
|
1002
1031
|
YuvSplitViewModule,
|
|
1003
|
-
ObjectTypeIconComponent,
|
|
1004
1032
|
TileConfigTileComponent,
|
|
1005
1033
|
IconSelectComponent,
|
|
1006
1034
|
PropertySelectComponent,
|
|
1007
1035
|
ActionSelectComponent,
|
|
1008
|
-
YuvIconComponent,
|
|
1009
1036
|
TranslateModule,
|
|
1010
1037
|
YuvListModule,
|
|
1011
1038
|
MatIconModule,
|
|
@@ -1013,7 +1040,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImpo
|
|
|
1013
1040
|
MatButtonModule,
|
|
1014
1041
|
DialogComponent,
|
|
1015
1042
|
YmtButtonDirective
|
|
1016
|
-
], template: "<yuv-dialog [headertitel]=\"'yuv.tile-config.title' | translate: { bucket: bucketLabel() }\">\n <main class=\"tile-config\">\n <yuv-split-view [gutterSize]=\"1\" [layoutSettingsID]=\"'yuv.framework.tile-config.layout'\">\n <!-- list of types -->\n <ng-template yuvSplitArea [size]=\"30\">\n <div class=\"types\">\n <yuv-list (itemSelect)=\"itemSelected($event)\">\n @for (t of types() || []; track t.id) {\n <div
|
|
1043
|
+
], template: "<yuv-dialog [headertitel]=\"'yuv.tile-config.title' | translate: { bucket: bucketLabel() }\">\n <main class=\"tile-config\">\n <yuv-split-view [gutterSize]=\"1\" [layoutSettingsID]=\"'yuv.framework.tile-config.layout'\">\n <!-- list of types -->\n <ng-template yuvSplitArea [size]=\"30\">\n <div class=\"types\">\n <yuv-list (itemSelect)=\"itemSelected($event)\" autoSelect>\n @for (t of types() || []; track t.id; let i = $index) {\n <div\n yuvListItem\n >\n @if (t.icon) {\n <mat-icon>{{ t.icon }}</mat-icon>\n }\n {{ t.id | translate }}\n </div>\n }\n </yuv-list>\n </div>\n </ng-template>\n\n <!-- selected type details-->\n <ng-template yuvSplitArea [size]=\"70\">\n <div class=\"details\">\n @if (selectedType) {\n <header>\n <h2>{{ selectedType.id | translate }}</h2>\n <button ymtButton=\"secondary\" (click)=\"resetConfig()\">{{ 'yuv.tile-config.button.reset' | translate }}</button>\n </header>\n <div class=\"dummy-preview\">\n <yuv-tile-config-tile\n [disableIconSlot]=\"true\"\n [disableBadgesSlot]=\"true\"\n [objectConfig]=\"objectConfig!\"\n (slotSelect)=\"slotSelect($event)\"\n ></yuv-tile-config-tile>\n </div>\n\n <main>\n @if (selectedSlot === 'icon') {\n <h3>{{ 'yuv.tile-config.slot.icon.headline' | translate }}</h3>\n <yuv-icon-select [objectType]=\"selectedType\" (iconSelect)=\"iconSelected($event)\"></yuv-icon-select>\n } @else if (selectedSlot === 'badges') {\n <div class=\"placeholder empty\">\n <p>Future feature: Select badges (like: is favorite, ratings, ...)</p>\n </div>\n } @else if (!selectedSlot) {\n } @else if (selectedSlot === 'actions') {\n <h3>{{ 'yuv.tile-config.slot.action.headline' | translate }}</h3>\n <yuv-tile-action-select\n [objectType]=\"selectedType\"\n [selectedActionIds]=\"getSelectedActions()\"\n (actionSelect)=\"actionSelected($event)\"\n ></yuv-tile-action-select>\n } @else {\n <h3>{{ 'yuv.tile-config.slot.property.headline' | translate }}</h3>\n <yuv-tile-property-select\n [objectType]=\"selectedType\"\n [selectedProperty]=\"getConfigProperty(selectedSlot)\"\n (propertySelect)=\"propertySelected(selectedSlot, $event)\"\n ></yuv-tile-property-select>\n }\n </main>\n } @else {\n <div class=\"placeholder empty\">\n <h2>{{ 'yuv.tile-config.details.empty.title' | translate }}</h2>\n <p>{{ 'yuv.tile-config.details.empty.description' | translate }}</p>\n </div>\n }\n </div>\n </ng-template>\n </yuv-split-view>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" (click)=\"cancelConfig()\">{{ 'yuv.tile-config.button.close' | translate }}</button>\n <button ymtButton=\"primary\" [disabled]=\"!configChanged\" (click)=\"saveConfig()\">{{ 'yuv.tile-config.button.save' | translate }}</button>\n </footer>\n</yuv-dialog>\n", styles: [":host{display:flex;height:100%;flex-flow:column}:host main.tile-config{height:100%;display:contents}:host yuv-split-view{--split-gutter-background-color: var(--ymt-outline-variant);flex:1}:host .details{box-sizing:border-box}:host div.types{box-sizing:border-box;height:100%;overflow-y:auto}:host div.types div[yuvListItem]{display:flex;gap:var(--ymt-spacing-m);align-items:center;padding:var(--ymt-spacing-xs) var(--ymt-spacing-m);cursor:pointer}:host div.types div[yuvListItem]:not([aria-selected=true]):hover,:host div.types div[yuvListItem]:not([aria-selected=true])[aria-current=true]{background-color:var(--ymt-focus-background)}:host div.types div[yuvListItem][aria-selected=true]{background-color:var(--ymt-primary-container);color:var(--ymt-on-primary-container)}:host div.types div[yuvListItem] yuv-object-type-icon{flex:0 0 auto;color:currentColor;opacity:.54}:host .details{height:100%;display:flex;flex-flow:column;overflow:hidden}:host .details header{flex:0 0 auto;display:flex;align-items:center;border-bottom:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-m);gap:var(--ymt-spacing-m)}:host .details header h2{flex:1;overflow:hidden;text-overflow:ellipsis;margin:0}:host .details .dummy-preview{flex:0 0 auto;padding:var(--ymt-spacing-m);background-color:var(--ymt-surface-panel);border-bottom:1px solid var(--ymt-outline-variant)}:host .details .dummy-preview yuv-tile-config-tile{border-radius:var(--ymt-corner-m);border:1px solid var(--ymt-outline);background-color:var(--ymt-surface-container)}:host .details main{flex:1;overflow-y:auto;padding:var(--ymt-spacing-m)}:host .details main h3{margin:0;padding-block-end:var(--ymt-spacing-m);font:var(--ymt-font-subhead)}:host .details .placeholder.empty{height:100%;display:grid;place-content:center;color:var(--ymt-text-color-subtle)}\n"] }]
|
|
1017
1044
|
}] });
|
|
1018
1045
|
|
|
1019
1046
|
class TileConfigTriggerComponent {
|
|
@@ -1044,11 +1071,11 @@ class TileConfigTriggerComponent {
|
|
|
1044
1071
|
this.#dialogRef.close();
|
|
1045
1072
|
}
|
|
1046
1073
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: TileConfigTriggerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1047
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.12", type: TileConfigTriggerComponent, isStandalone: true, selector: "yuv-tile-config-trigger", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, bucket: { classPropertyName: "bucket", publicName: "bucket", isSignal: true, isRequired: false, transformFunction: null }, bucketLabel: { classPropertyName: "bucketLabel", publicName: "bucketLabel", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "tplTileConfig", first: true, predicate: ["tplTileConfig"], descendants: true, isSignal: true }], ngImport: i0, template: "<button mat-icon-button class=\"settings icon\" (click)=\"openTileConfigOverlay()\" [matTooltip]=\"'yuv.tile-config.trigger.tooltip' | translate\">\n <mat-icon>settings</mat-icon>\n</button>\n\n<ng-template #tplTileConfig>\n <yuv-tile-config\n (save)=\"onObjectConfigSave()\"\n (
|
|
1074
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.12", type: TileConfigTriggerComponent, isStandalone: true, selector: "yuv-tile-config-trigger", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, bucket: { classPropertyName: "bucket", publicName: "bucket", isSignal: true, isRequired: false, transformFunction: null }, bucketLabel: { classPropertyName: "bucketLabel", publicName: "bucketLabel", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "tplTileConfig", first: true, predicate: ["tplTileConfig"], descendants: true, isSignal: true }], ngImport: i0, template: "<button mat-icon-button class=\"settings icon\" (click)=\"openTileConfigOverlay()\" [matTooltip]=\"'yuv.tile-config.trigger.tooltip' | translate\">\n <mat-icon>settings</mat-icon>\n</button>\n\n<ng-template #tplTileConfig>\n <yuv-tile-config\n (save)=\"onObjectConfigSave()\"\n (canceled)=\"onObjectConfigCancel()\"\n [bucket]=\"bucket() || undefined\"\n [bucketLabel]=\"bucketLabel()\"\n [configTypes]=\"options()?.configTypes\"\n [configFlavors]=\"options()?.configFlavors || []\"\n ></yuv-tile-config>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TileConfigComponent, selector: "yuv-tile-config", inputs: ["bucket", "bucketLabel", "configTypes", "configFlavors"], outputs: ["save", "canceled"] }, { kind: "ngmodule", type: TranslateModule$1 }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
1048
1075
|
}
|
|
1049
1076
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: TileConfigTriggerComponent, decorators: [{
|
|
1050
1077
|
type: Component,
|
|
1051
|
-
args: [{ selector: 'yuv-tile-config-trigger', standalone: true, imports: [CommonModule, TileConfigComponent, TranslateModule$1, MatButtonModule, MatTooltipModule, MatIcon], template: "<button mat-icon-button class=\"settings icon\" (click)=\"openTileConfigOverlay()\" [matTooltip]=\"'yuv.tile-config.trigger.tooltip' | translate\">\n <mat-icon>settings</mat-icon>\n</button>\n\n<ng-template #tplTileConfig>\n <yuv-tile-config\n (save)=\"onObjectConfigSave()\"\n (
|
|
1078
|
+
args: [{ selector: 'yuv-tile-config-trigger', standalone: true, imports: [CommonModule, TileConfigComponent, TranslateModule$1, MatButtonModule, MatTooltipModule, MatIcon], template: "<button mat-icon-button class=\"settings icon\" (click)=\"openTileConfigOverlay()\" [matTooltip]=\"'yuv.tile-config.trigger.tooltip' | translate\">\n <mat-icon>settings</mat-icon>\n</button>\n\n<ng-template #tplTileConfig>\n <yuv-tile-config\n (save)=\"onObjectConfigSave()\"\n (canceled)=\"onObjectConfigCancel()\"\n [bucket]=\"bucket() || undefined\"\n [bucketLabel]=\"bucketLabel()\"\n [configTypes]=\"options()?.configTypes\"\n [configFlavors]=\"options()?.configFlavors || []\"\n ></yuv-tile-config>\n</ng-template>\n" }]
|
|
1052
1079
|
}] });
|
|
1053
1080
|
|
|
1054
1081
|
class EmailTileExtensionComponent {
|