@yuuvis/client-framework 2.0.14 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/yuuvis-client-framework-forms.mjs +11 -9
- package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-summary.mjs +1 -1
- package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-overflow-menu.mjs +19 -8
- package/fesm2022/yuuvis-client-framework-overflow-menu.mjs.map +1 -1
- package/overflow-menu/lib/overflow-menu.component.d.ts +3 -1
- package/overflow-menu/lib/overflow-menu.interface.d.ts +1 -1
- package/package.json +8 -8
|
@@ -270,7 +270,7 @@ class ObjectSummaryComponent {
|
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
272
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: ObjectSummaryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
273
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: ObjectSummaryComponent, isStandalone: true, selector: "yuv-object-summary", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, dmsObjectInput: { classPropertyName: "dmsObjectInput", publicName: "dmsObject", isSignal: true, isRequired: false, transformFunction: null }, objectId: { classPropertyName: "objectId", publicName: "objectId", isSignal: true, isRequired: false, transformFunction: null }, configType: { classPropertyName: "configType", publicName: "configType", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "flavorCmp", first: true, predicate: ObjectFlavorComponent, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.BusyOverlayDirective, inputs: ["yuvBusyOverlay", "busy"] }], ngImport: i0, template: "@let imageSlide = slide();\n<section class=\"slide\" [yuvBusyOverlay]=\"imageSlide.loading\">\n @if (imageSlide.uri || imageSlide.loading) {\n <img draggable=\"false\" [ngClass]=\"{ loading: imageSlide.loading }\" [attr.data-orientation]=\"imageSlide.orientation\" [src]=\"imageSlide.uri\" />\n } @else if (imageSlide.icon && imageSlide.icon.name) {\n <mat-icon draggable=\"false\" class=\"ymt-icon--size-6xl\">{{ imageSlide.icon.name }}</mat-icon>\n }\n @if (folderInfo) {\n <div class=\"badge\">\n {{ folderInfo.size }}\n </div>\n }\n</section>\n\n@let o = dmsObject();\n@if (o) {\n <section class=\"object-flavors\">\n <yuv-object-flavor [dmsObject]=\"o\" (flavorSelect)=\"onFlavorSelect($event)\"></yuv-object-flavor>\n </section>\n}\n\n<div class=\"content\">\n @let header = headerData();\n <section class=\"title\">\n <h2>{{ header?.title }}</h2>\n\n <div class=\"actions\">\n <yuv-overflow-menu [menuItems]=\"actions()\"></yuv-overflow-menu>\n </div>\n </section>\n\n @if (o) {\n <section class=\"badges\">\n <yuv-retention-badge [dmsObject]=\"o\"></yuv-retention-badge>\n </section>\n }\n\n @if (flavorData) {\n <section class=\"flavor properties\">\n <!-- <h2>{{ flavorData.label }}</h2> -->\n @for (p of flavorData.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.value\"></ng-container>\n </div>\n </div>\n }\n </section>\n }\n\n <section class=\"properties\">\n @for (p of baseData; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.value\"></ng-container>\n </div>\n </div>\n }\n </section>\n</div>\n", styles: ["section.title{padding:var(--ymt-spacing-m);display:flex;justify-content:space-between;align-items:center;gap:var(--ymt-spacing-m)}section.title .actions button.quickAccess.isFavorite{color:var(--ymt-primary)}section.slide{display:flex;flex-flow:column;align-items:center;justify-content:center;border-block-end:1px solid var(--ymt-outline-variant);background-color:var(--ymt-surface-panel);position:relative;height:25%;overflow:hidden;container-type:size}section.slide .badge{position:absolute;inset-inline-end:var(--ymt-spacing-l);inset-block-start:var(--ymt-spacing-m);font-size:var(--ymt-sizing-2xl);font-weight:700;line-height:1}section.slide .badge,section.slide mat-icon{color:var(--ymt-text-color-subtle)}section.slide img{object-fit:cover;object-position:top;opacity:0;transition:opacity .3s;margin:auto;max-height:100%;max-width:100%;outline:4px solid var(--ymt-surface-panel);outline-offset:-4px;box-shadow:0 0 0 1px var(--ymt-outline-variant)}section.slide img:not(.loading){opacity:1}@container (height < 160px){section.slide mat-icon{height:var(--ymt-sizing-4xl);width:var(--ymt-sizing-4xl);font-size:var(--ymt-sizing-4xl);line-height:1}section.slide .badge{inset-inline-end:var(--ymt-spacing-m);inset-block-start:var(--ymt-spacing-s);font-size:var(--ymt-sizing-s)}}:host{--max-slide-size: 150px;display:flex;flex-flow:column;height:100%}:host section:not(.badges){padding:var(--ymt-spacing-m)}:host section.object-flavors{padding:0;border-block-end:1px solid var(--ymt-outline-variant)}:host section.object-flavors yuv-object-flavor{padding-inline-start:9px;min-height:30px}:host .content{flex:1;overflow-y:auto}:host .content section.title h2{margin:0}:host .content section.title .actions{align-self:start}:host section.badges{display:flex;flex-flow:row wrap;align-items:center;justify-content:flex-start;gap:var(--ymt-spacing-2xs);padding-inline:var(--ymt-spacing-m)}:host section.properties{container:section/inline-size}:host section.properties .row{display:grid;grid-template-columns:[start] minmax(50px,1.5fr) repeat(auto-fit,[cell-start] minmax(50px,2fr) [cell-end]) [end];margin-block-end:var(--ymt-spacing-2xs);align-items:baseline}:host section.properties .row .label{font:var(--ymt-font-body-subtle);font-weight:700;grid-column:start/end;padding-inline-end:var(--ymt-spacing-m);margin-block-end:var(--ymt-spacing-3xs);align-self:flex-start;word-break:break-word}:host section.properties .row .value{word-break:break-all;font:var(--ymt-font-body-subtle);grid-column:span 2;margin-block-end:var(--ymt-spacing-xs)}@container section (min-width: 150px){:host section.properties .row .label{grid-column:auto}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay"] }, { kind: "component", type: RetentionBadgeComponent, selector: "yuv-retention-badge", inputs: ["dmsObject"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: RendererDirective, selector: "[yuvRenderer]", inputs: ["yuvRenderer"] }, { kind: "component", type: ObjectFlavorComponent, selector: "yuv-object-flavor", inputs: ["dmsObject"], outputs: ["flavorSelect"] }, { kind: "component", type: OverflowMenuComponent, selector: "yuv-overflow-menu", inputs: ["overflowIcon", "groupLabels", "menuItems"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
273
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: ObjectSummaryComponent, isStandalone: true, selector: "yuv-object-summary", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, dmsObjectInput: { classPropertyName: "dmsObjectInput", publicName: "dmsObject", isSignal: true, isRequired: false, transformFunction: null }, objectId: { classPropertyName: "objectId", publicName: "objectId", isSignal: true, isRequired: false, transformFunction: null }, configType: { classPropertyName: "configType", publicName: "configType", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "flavorCmp", first: true, predicate: ObjectFlavorComponent, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.BusyOverlayDirective, inputs: ["yuvBusyOverlay", "busy"] }], ngImport: i0, template: "@let imageSlide = slide();\n<section class=\"slide\" [yuvBusyOverlay]=\"imageSlide.loading\">\n @if (imageSlide.uri || imageSlide.loading) {\n <img draggable=\"false\" [ngClass]=\"{ loading: imageSlide.loading }\" [attr.data-orientation]=\"imageSlide.orientation\" [src]=\"imageSlide.uri\" />\n } @else if (imageSlide.icon && imageSlide.icon.name) {\n <mat-icon draggable=\"false\" class=\"ymt-icon--size-6xl\">{{ imageSlide.icon.name }}</mat-icon>\n }\n @if (folderInfo) {\n <div class=\"badge\">\n {{ folderInfo.size }}\n </div>\n }\n</section>\n\n@let o = dmsObject();\n@if (o) {\n <section class=\"object-flavors\">\n <yuv-object-flavor [dmsObject]=\"o\" (flavorSelect)=\"onFlavorSelect($event)\"></yuv-object-flavor>\n </section>\n}\n\n<div class=\"content\">\n @let header = headerData();\n <section class=\"title\">\n <h2>{{ header?.title }}</h2>\n\n <div class=\"actions\">\n <yuv-overflow-menu [menuItems]=\"actions()\"></yuv-overflow-menu>\n </div>\n </section>\n\n @if (o) {\n <section class=\"badges\">\n <yuv-retention-badge [dmsObject]=\"o\"></yuv-retention-badge>\n </section>\n }\n\n @if (flavorData) {\n <section class=\"flavor properties\">\n <!-- <h2>{{ flavorData.label }}</h2> -->\n @for (p of flavorData.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.value\"></ng-container>\n </div>\n </div>\n }\n </section>\n }\n\n <section class=\"properties\">\n @for (p of baseData; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.value\"></ng-container>\n </div>\n </div>\n }\n </section>\n</div>\n", styles: ["section.title{padding:var(--ymt-spacing-m);display:flex;justify-content:space-between;align-items:center;gap:var(--ymt-spacing-m)}section.title .actions button.quickAccess.isFavorite{color:var(--ymt-primary)}section.slide{display:flex;flex-flow:column;align-items:center;justify-content:center;border-block-end:1px solid var(--ymt-outline-variant);background-color:var(--ymt-surface-panel);position:relative;height:25%;overflow:hidden;container-type:size}section.slide .badge{position:absolute;inset-inline-end:var(--ymt-spacing-l);inset-block-start:var(--ymt-spacing-m);font-size:var(--ymt-sizing-2xl);font-weight:700;line-height:1}section.slide .badge,section.slide mat-icon{color:var(--ymt-text-color-subtle)}section.slide img{object-fit:cover;object-position:top;opacity:0;transition:opacity .3s;margin:auto;max-height:100%;max-width:100%;outline:4px solid var(--ymt-surface-panel);outline-offset:-4px;box-shadow:0 0 0 1px var(--ymt-outline-variant)}section.slide img:not(.loading){opacity:1}@container (height < 160px){section.slide mat-icon{height:var(--ymt-sizing-4xl);width:var(--ymt-sizing-4xl);font-size:var(--ymt-sizing-4xl);line-height:1}section.slide .badge{inset-inline-end:var(--ymt-spacing-m);inset-block-start:var(--ymt-spacing-s);font-size:var(--ymt-sizing-s)}}:host{--max-slide-size: 150px;display:flex;flex-flow:column;height:100%}:host section:not(.badges){padding:var(--ymt-spacing-m)}:host section.object-flavors{padding:0;border-block-end:1px solid var(--ymt-outline-variant)}:host section.object-flavors yuv-object-flavor{padding-inline-start:9px;min-height:30px}:host .content{flex:1;overflow-y:auto}:host .content section.title h2{margin:0}:host .content section.title .actions{align-self:start}:host section.badges{display:flex;flex-flow:row wrap;align-items:center;justify-content:flex-start;gap:var(--ymt-spacing-2xs);padding-inline:var(--ymt-spacing-m)}:host section.properties{container:section/inline-size}:host section.properties .row{display:grid;grid-template-columns:[start] minmax(50px,1.5fr) repeat(auto-fit,[cell-start] minmax(50px,2fr) [cell-end]) [end];margin-block-end:var(--ymt-spacing-2xs);align-items:baseline}:host section.properties .row .label{font:var(--ymt-font-body-subtle);font-weight:700;grid-column:start/end;padding-inline-end:var(--ymt-spacing-m);margin-block-end:var(--ymt-spacing-3xs);align-self:flex-start;word-break:break-word}:host section.properties .row .value{word-break:break-all;font:var(--ymt-font-body-subtle);grid-column:span 2;margin-block-end:var(--ymt-spacing-xs)}@container section (min-width: 150px){:host section.properties .row .label{grid-column:auto}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay"] }, { kind: "component", type: RetentionBadgeComponent, selector: "yuv-retention-badge", inputs: ["dmsObject"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: RendererDirective, selector: "[yuvRenderer]", inputs: ["yuvRenderer"] }, { kind: "component", type: ObjectFlavorComponent, selector: "yuv-object-flavor", inputs: ["dmsObject"], outputs: ["flavorSelect"] }, { kind: "component", type: OverflowMenuComponent, selector: "yuv-overflow-menu", inputs: ["overflowIcon", "groupLabels", "menuItems", "vertical"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
274
274
|
}
|
|
275
275
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: ObjectSummaryComponent, decorators: [{
|
|
276
276
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-object-summary.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary.module.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary/object-summary.component.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary/object-summary.component.html","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/multi-object-summary/multi-object-summary.component.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary-data/object-summary-data.component.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary-data/object-summary-data.component.html","../../../../../libs/yuuvis/client-framework/object-summary/src/yuuvis-client-framework-object-summary.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule]\n})\nexport class ObjectSummaryModule {}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectorRef, Component, effect, inject, input, signal, untracked, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n BaseObjectTypeField,\n ConfigTypeOption,\n ContentStreamField,\n DmsObject,\n DmsService,\n EventService,\n ObjectConfigRecord,\n ObjectConfigService,\n Operator,\n ResolvedObjectConfig,\n SearchQuery,\n SearchService,\n SystemService,\n SystemSOT,\n TranslateModule,\n TranslateService,\n VirtualObjectType,\n YuvEvent,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective } from '@yuuvis/client-framework/common';\nimport { YUV_ICONS } from '@yuuvis/client-framework/icons';\nimport { RetentionBadgeComponent } from '@yuuvis/client-framework/object-details';\nimport { ObjectFlavorComponent } from '@yuuvis/client-framework/object-flavor';\nimport { OverflowMenuComponent, OverflowMenuItem } from '@yuuvis/client-framework/overflow-menu';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { ObjectFlavor } from '@yuuvis/client-shell-core';\n\n/**\n * Component showing a summary of the given dms object.\n */\n@Component({\n selector: 'yuv-object-summary',\n standalone: true,\n imports: [\n NgClass,\n BusyOverlayDirective,\n RetentionBadgeComponent,\n TranslateModule,\n RendererDirective,\n ObjectFlavorComponent,\n OverflowMenuComponent,\n MatIconModule\n ],\n templateUrl: './object-summary.component.html',\n styleUrl: './object-summary.component.scss',\n hostDirectives: [\n {\n directive: BusyOverlayDirective,\n inputs: ['yuvBusyOverlay: busy']\n }\n ]\n})\nexport class ObjectSummaryComponent {\n readonly #eventService = inject(EventService);\n readonly #dmsService = inject(DmsService);\n private readonly translate = inject(TranslateService);\n readonly #systemService = inject(SystemService);\n readonly #objectConfigService = inject(ObjectConfigService);\n readonly #searchService = inject(SearchService);\n readonly #cd = inject(ChangeDetectorRef);\n\n flavorCmp = viewChild(ObjectFlavorComponent);\n\n #oc?: ObjectConfigRecord;\n\n slide = signal<{\n icon?: {\n name?: string;\n title?: string;\n };\n uri?: string;\n loading: boolean;\n orientation?: 'portrait' | 'landscape';\n }>({\n loading: false\n });\n busy = true;\n\n contextError?: string;\n headerData = signal<\n | {\n icon?: {\n name?: string;\n title?: string;\n };\n title?: string;\n description?: string;\n }\n | undefined\n >(undefined);\n\n baseData: {\n label: string;\n value: RendererDirectiveInput;\n }[] = [];\n\n flavorData?: {\n flavor: ObjectFlavor;\n label: string;\n properties: {\n label: string;\n value: RendererDirectiveInput;\n }[];\n };\n\n icons = {\n folder: YUV_ICONS.folder\n };\n\n actions = input<OverflowMenuItem[]>([]);\n\n folderInfo?: {\n size: number;\n entries: {\n key: string;\n count: number;\n }[];\n };\n\n /**\n * DmsObject to show the details for.\n */\n\n dmsObject = signal<DmsObject | undefined>(undefined);\n\n dmsObjectInput = input<DmsObject | undefined>(undefined, { alias: 'dmsObject' });\n #dmsObjectInputEffect = effect(() => {\n const dmsObject = this.dmsObjectInput();\n const contentChanged = this.dmsObject()?.content?.contentStreamId !== dmsObject?.content?.contentStreamId;\n\n untracked(() => {\n this.dmsObject.set(dmsObject);\n contentChanged && this.slide.update((slide) => ({ ...slide, uri: undefined, icon: undefined, iconSvg: undefined }));\n this.flavorData = undefined;\n if (dmsObject) {\n this.#getHeaderData();\n this.#getBaseData();\n (contentChanged || dmsObject.isFolder) && this.#setupSlide();\n this.folderInfo = undefined;\n\n if (dmsObject.isFolder) this.#fetchFolderInfo(dmsObject.id);\n\n // if a flavor has been selected and a new object comes in, we'll check if\n // the new object has the same flavor and update the flavor data\n // if (this.flavorData && dmsObject.sots.includes(this.flavorData.flavor.sot)) {\n // this.#getFlavorData(this.flavorData.flavor);\n // } else this.flavorData = undefined;\n } \n // else {\n // this.flavorData = undefined;\n // }\n });\n });\n\n /**\n * ID of a DmsObject. The object will be fetched from the backend upfront.\n */\n objectId = input<string | undefined | null>(null);\n #objectIdEffect = effect(() => {\n const id = this.objectId();\n untracked(() => {\n id && this.#getDmsObject(id);\n });\n });\n\n // virtual object type to be used for header data\n configType = input<ConfigTypeOption>();\n\n constructor() {\n this.#objectConfigService\n .getObjectConfigs$(undefined, true)\n .pipe(takeUntilDestroyed())\n .subscribe((res: ObjectConfigRecord) => {\n this.#oc = res;\n const dmsObject = this.dmsObject();\n if (dmsObject) this.#getHeaderData();\n });\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(takeUntilDestroyed())\n .subscribe((e: YuvEvent) => {\n const o = e.data as DmsObject;\n const dmsObject = this.dmsObject();\n this.#setupSlide();\n if (dmsObject?.id === o.id) {\n this.dmsObject.set(o);\n }\n });\n }\n\n #setupSlide() {\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n if (dmsObject.content) {\n const slideUri = this.#dmsService.getSlideURI(dmsObject.id, dmsObject.content?.mimeType);\n if (slideUri) {\n this.slide.update((slide) => ({ ...slide, loading: true }));\n const img = new Image();\n img.onload = () => {\n this.slide.update((slide) => ({\n ...slide,\n orientation: img.width > img.height ? 'landscape' : 'portrait',\n uri: `${slideUri}?${new Date().getTime()}`, // add Timestamp to force image reload\n loading: false\n }));\n this.#cd.markForCheck();\n };\n img.onerror = () => {\n const headerData = this.headerData();\n this.slide.update((slide) => ({ ...slide, icon: headerData?.icon, loading: false }));\n this.#cd.markForCheck();\n };\n img.src = slideUri;\n }\n } else {\n const headerData = this.headerData();\n this.slide.update((slide) => ({ ...slide, icon: headerData?.icon }));\n }\n }\n }\n\n onFlavorSelect(flavor: ObjectFlavor | undefined) {\n if (flavor) {\n this.#getFlavorData(flavor);\n } else this.flavorData = undefined;\n }\n\n #fetchFolderInfo(id: string) {\n const q: SearchQuery = {\n fields: [`SUM(${ContentStreamField.LENGTH})`],\n aggs: [BaseObjectTypeField.BASE_TYPE_ID],\n filters: [\n {\n f: BaseObjectTypeField.PARENT_ID,\n o: Operator.EQUAL,\n v1: id\n }\n ]\n };\n this.#searchService.aggregate(q, [BaseObjectTypeField.BASE_TYPE_ID]).subscribe((res) => {\n const entries = res.aggregations[0].entries;\n this.folderInfo = {\n size: entries.reduce((s, v) => s + v.count, 0),\n entries\n };\n });\n }\n\n #getDmsObject(id: string) {\n this.busy = true;\n this.#dmsService.getDmsObject(id).subscribe({\n next: (dmsObject) => this.dmsObject.set(dmsObject),\n error: () => {\n this.dmsObject.set(undefined);\n this.contextError = this.translate.instant('yuv.object-summary.load.error');\n },\n complete: () => {\n this.busy = false;\n }\n });\n }\n\n #getObjectConfig(type?: VirtualObjectType, bucket?: string): ResolvedObjectConfig | undefined {\n const dmsObject = this.dmsObject();\n return dmsObject\n ? this.#objectConfigService.getResolvedObjectConfig(\n dmsObject.data,\n type || {\n id: dmsObject.objectTypeId,\n objectType: dmsObject.objectTypeId\n },\n bucket,\n true\n )\n : undefined;\n }\n\n #getFlavorData(flavor: ObjectFlavor) {\n if (!flavor) {\n this.flavorData = undefined;\n return;\n }\n const sot = this.#systemService.getSecondaryObjectType(flavor.sot, true);\n const dmsObject = this.dmsObject();\n if (dmsObject && sot) {\n this.flavorData = {\n flavor,\n label: this.translate.instant(flavor.id),\n properties: sot.fields\n .filter((f) => f._internalType !== 'table')\n .map((f) => ({\n label: this.#systemService.getLocalizedLabel(f.id) || f.id,\n value: {\n propertyName: f.id,\n value: dmsObject.data[f.id]\n }\n }))\n };\n } else this.flavorData = undefined;\n }\n\n #getHeaderData() {\n const oc = this.#getObjectConfig(this.configType()?.type, this.configType()?.bucket);\n const dmsObject = this.dmsObject();\n if (oc && dmsObject) {\n this.headerData.update((data) => ({\n ...data,\n title: oc.title.value,\n description: oc.description?.value,\n icon: {\n title: oc.title.value,\n ...(oc.icon ? { name: oc.icon.value } : undefined)\n }\n }));\n\n // this.headerData.icon =;\n } else this.headerData.set(undefined);\n }\n\n #getBaseData() {\n this.baseData = [];\n\n const fields = [\n BaseObjectTypeField.CREATION_DATE,\n `${BaseObjectTypeField.CREATED_BY}_title`,\n BaseObjectTypeField.MODIFICATION_DATE,\n `${BaseObjectTypeField.MODIFIED_BY}_title`\n ];\n const contentFields = [ContentStreamField.FILENAME, ContentStreamField.LENGTH, ContentStreamField.MIME_TYPE];\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n const retentionFields = (dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[]).includes(SystemSOT.DESTRUCTION_RETENTION)\n ? [BaseObjectTypeField.RETENTION_START, BaseObjectTypeField.RETENTION_END]\n : [];\n\n (dmsObject.content ? [...fields, ...contentFields, ...retentionFields] : fields).forEach((f) => {\n this.baseData.push({\n label: this.#systemService.getLocalizedLabel(f.replace('_title', '')) || f,\n value: {\n propertyName: f,\n value: dmsObject.data[f]\n }\n });\n });\n }\n }\n}\n","@let imageSlide = slide();\n<section class=\"slide\" [yuvBusyOverlay]=\"imageSlide.loading\">\n @if (imageSlide.uri || imageSlide.loading) {\n <img draggable=\"false\" [ngClass]=\"{ loading: imageSlide.loading }\" [attr.data-orientation]=\"imageSlide.orientation\" [src]=\"imageSlide.uri\" />\n } @else if (imageSlide.icon && imageSlide.icon.name) {\n <mat-icon draggable=\"false\" class=\"ymt-icon--size-6xl\">{{ imageSlide.icon.name }}</mat-icon>\n }\n @if (folderInfo) {\n <div class=\"badge\">\n {{ folderInfo.size }}\n </div>\n }\n</section>\n\n@let o = dmsObject();\n@if (o) {\n <section class=\"object-flavors\">\n <yuv-object-flavor [dmsObject]=\"o\" (flavorSelect)=\"onFlavorSelect($event)\"></yuv-object-flavor>\n </section>\n}\n\n<div class=\"content\">\n @let header = headerData();\n <section class=\"title\">\n <h2>{{ header?.title }}</h2>\n\n <div class=\"actions\">\n <yuv-overflow-menu [menuItems]=\"actions()\"></yuv-overflow-menu>\n </div>\n </section>\n\n @if (o) {\n <section class=\"badges\">\n <yuv-retention-badge [dmsObject]=\"o\"></yuv-retention-badge>\n </section>\n }\n\n @if (flavorData) {\n <section class=\"flavor properties\">\n <!-- <h2>{{ flavorData.label }}</h2> -->\n @for (p of flavorData.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.value\"></ng-container>\n </div>\n </div>\n }\n </section>\n }\n\n <section class=\"properties\">\n @for (p of baseData; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.value\"></ng-container>\n </div>\n </div>\n }\n </section>\n</div>\n","import { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'yuv-multi-object-summary',\n standalone: true,\n imports: [MatIcon],\n template: `\n <section class=\"slide\">\n <mat-icon class=\"ymt-icon--size-6xl\">{{ icon() }}</mat-icon>\n </section>\n\n <section class=\"title\">\n <h1>{{ headline() }}</h1>\n </section>\n `,\n styleUrl: './multi-object-summary.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MultiObjectSummaryComponent {\n icon = signal('home_storage');\n\n headline = input<string>('this could be your headline');\n}\n","import { ChangeDetectionStrategy, Component, effect, inject, input, signal, untracked } from '@angular/core';\nimport { BaseObjectTypeField, ContentStreamField, DmsObject, SystemService, TranslateService } from '@yuuvis/client-core';\nimport { RendererDirective } from '@yuuvis/client-framework/renderer';\nimport { ShellService } from '@yuuvis/client-shell-core';\n\n@Component({\n selector: 'yuv-object-summary-data',\n standalone: true,\n imports: [RendererDirective],\n templateUrl: './object-summary-data.component.html',\n styleUrl: './object-summary-data.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ObjectSummaryDataComponent {\n readonly #shell = inject(ShellService);\n readonly #systemService = inject(SystemService);\n readonly translate = inject(TranslateService);\n\n dmsObject = input.required<DmsObject>();\n\n baseData = signal<any[]>([]);\n flavorData = signal<any[]>([]);\n\n #dmsObjectEffect = effect(() => {\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n untracked(() => {\n this.#getBaseData();\n this.#getAppliedFlavors(dmsObject);\n });\n }\n });\n\n #getBaseData() {\n this.baseData.set([]);\n\n const fields = [\n BaseObjectTypeField.CREATION_DATE,\n `${BaseObjectTypeField.CREATED_BY}_title`,\n BaseObjectTypeField.MODIFICATION_DATE,\n `${BaseObjectTypeField.MODIFIED_BY}_title`\n ];\n const contentFields = [ContentStreamField.FILENAME, ContentStreamField.LENGTH, ContentStreamField.MIME_TYPE];\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n (dmsObject.content ? [...fields, ...contentFields] : fields).forEach((f) => {\n this.baseData.update((data) => [\n ...data,\n {\n label: this.#systemService.getLocalizedLabel(f.replace('_title', '')) || f,\n value: {\n propertyName: f,\n value: dmsObject.data[f]\n }\n }\n ]);\n });\n }\n // console.log('baseData', this.baseData());\n }\n\n #getAppliedFlavors(dmsObject: DmsObject) {\n this.flavorData.set([]);\n const appliedFlavors = this.#shell.getAppliedObjectFlavors(dmsObject).applied;\n for (const flavor of appliedFlavors) {\n this.flavorData.update((data) => [\n ...data,\n {\n flavor,\n label: this.translate.instant(flavor.id),\n properties: this.#systemService.getSecondaryObjectType(flavor.sot, true)?.fields.map((f) => ({\n label: this.#systemService.getLocalizedLabel(f.id) || f.id,\n value: {\n propertyName: f.id,\n value: dmsObject.data[f.id]\n }\n }))\n }\n ]);\n }\n }\n}\n","@let flavors = flavorData();\n\n<div class=\"content\">\n @if (flavors.length > 0) {\n <section class=\"flavor properties\">\n @for (flavor of flavors; track $index) {\n <div class=\"flavour-groups\">\n <h2>{{ flavor.label }}</h2>\n @for (property of flavor.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ property.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"property.value\"></ng-container>\n </div>\n </div>\n }\n </div>\n }\n </section>\n }\n\n @let base = baseData();\n @if (base) {\n <section class=\"base properties\">\n <h2>BASE</h2>\n @for (p of base; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.value\"></ng-container>\n </div>\n </div>\n }\n </section>\n }\n</div>\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-object-summary.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary.module.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary/object-summary.component.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary/object-summary.component.html","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/multi-object-summary/multi-object-summary.component.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary-data/object-summary-data.component.ts","../../../../../libs/yuuvis/client-framework/object-summary/src/lib/object-summary-data/object-summary-data.component.html","../../../../../libs/yuuvis/client-framework/object-summary/src/yuuvis-client-framework-object-summary.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CommonModule]\n})\nexport class ObjectSummaryModule {}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectorRef, Component, effect, inject, input, signal, untracked, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n BaseObjectTypeField,\n ConfigTypeOption,\n ContentStreamField,\n DmsObject,\n DmsService,\n EventService,\n ObjectConfigRecord,\n ObjectConfigService,\n Operator,\n ResolvedObjectConfig,\n SearchQuery,\n SearchService,\n SystemService,\n SystemSOT,\n TranslateModule,\n TranslateService,\n VirtualObjectType,\n YuvEvent,\n YuvEventType\n} from '@yuuvis/client-core';\nimport { BusyOverlayDirective } from '@yuuvis/client-framework/common';\nimport { YUV_ICONS } from '@yuuvis/client-framework/icons';\nimport { RetentionBadgeComponent } from '@yuuvis/client-framework/object-details';\nimport { ObjectFlavorComponent } from '@yuuvis/client-framework/object-flavor';\nimport { OverflowMenuComponent, OverflowMenuItem } from '@yuuvis/client-framework/overflow-menu';\nimport { RendererDirective, RendererDirectiveInput } from '@yuuvis/client-framework/renderer';\nimport { ObjectFlavor } from '@yuuvis/client-shell-core';\n\n/**\n * Component showing a summary of the given dms object.\n */\n@Component({\n selector: 'yuv-object-summary',\n standalone: true,\n imports: [\n NgClass,\n BusyOverlayDirective,\n RetentionBadgeComponent,\n TranslateModule,\n RendererDirective,\n ObjectFlavorComponent,\n OverflowMenuComponent,\n MatIconModule\n ],\n templateUrl: './object-summary.component.html',\n styleUrl: './object-summary.component.scss',\n hostDirectives: [\n {\n directive: BusyOverlayDirective,\n inputs: ['yuvBusyOverlay: busy']\n }\n ]\n})\nexport class ObjectSummaryComponent {\n readonly #eventService = inject(EventService);\n readonly #dmsService = inject(DmsService);\n private readonly translate = inject(TranslateService);\n readonly #systemService = inject(SystemService);\n readonly #objectConfigService = inject(ObjectConfigService);\n readonly #searchService = inject(SearchService);\n readonly #cd = inject(ChangeDetectorRef);\n\n flavorCmp = viewChild(ObjectFlavorComponent);\n\n #oc?: ObjectConfigRecord;\n\n slide = signal<{\n icon?: {\n name?: string;\n title?: string;\n };\n uri?: string;\n loading: boolean;\n orientation?: 'portrait' | 'landscape';\n }>({\n loading: false\n });\n busy = true;\n\n contextError?: string;\n headerData = signal<\n | {\n icon?: {\n name?: string;\n title?: string;\n };\n title?: string;\n description?: string;\n }\n | undefined\n >(undefined);\n\n baseData: {\n label: string;\n value: RendererDirectiveInput;\n }[] = [];\n\n flavorData?: {\n flavor: ObjectFlavor;\n label: string;\n properties: {\n label: string;\n value: RendererDirectiveInput;\n }[];\n };\n\n icons = {\n folder: YUV_ICONS.folder\n };\n\n actions = input<OverflowMenuItem[]>([]);\n\n folderInfo?: {\n size: number;\n entries: {\n key: string;\n count: number;\n }[];\n };\n\n /**\n * DmsObject to show the details for.\n */\n\n dmsObject = signal<DmsObject | undefined>(undefined);\n\n dmsObjectInput = input<DmsObject | undefined>(undefined, { alias: 'dmsObject' });\n #dmsObjectInputEffect = effect(() => {\n const dmsObject = this.dmsObjectInput();\n const contentChanged = this.dmsObject()?.content?.contentStreamId !== dmsObject?.content?.contentStreamId;\n\n untracked(() => {\n this.dmsObject.set(dmsObject);\n contentChanged && this.slide.update((slide) => ({ ...slide, uri: undefined, icon: undefined, iconSvg: undefined }));\n this.flavorData = undefined;\n if (dmsObject) {\n this.#getHeaderData();\n this.#getBaseData();\n (contentChanged || dmsObject.isFolder) && this.#setupSlide();\n this.folderInfo = undefined;\n\n if (dmsObject.isFolder) this.#fetchFolderInfo(dmsObject.id);\n\n // if a flavor has been selected and a new object comes in, we'll check if\n // the new object has the same flavor and update the flavor data\n // if (this.flavorData && dmsObject.sots.includes(this.flavorData.flavor.sot)) {\n // this.#getFlavorData(this.flavorData.flavor);\n // } else this.flavorData = undefined;\n } \n // else {\n // this.flavorData = undefined;\n // }\n });\n });\n\n /**\n * ID of a DmsObject. The object will be fetched from the backend upfront.\n */\n objectId = input<string | undefined | null>(null);\n #objectIdEffect = effect(() => {\n const id = this.objectId();\n untracked(() => {\n id && this.#getDmsObject(id);\n });\n });\n\n // virtual object type to be used for header data\n configType = input<ConfigTypeOption>();\n\n constructor() {\n this.#objectConfigService\n .getObjectConfigs$(undefined, true)\n .pipe(takeUntilDestroyed())\n .subscribe((res: ObjectConfigRecord) => {\n this.#oc = res;\n const dmsObject = this.dmsObject();\n if (dmsObject) this.#getHeaderData();\n });\n this.#eventService\n .on(YuvEventType.DMS_OBJECT_UPDATED)\n .pipe(takeUntilDestroyed())\n .subscribe((e: YuvEvent) => {\n const o = e.data as DmsObject;\n const dmsObject = this.dmsObject();\n this.#setupSlide();\n if (dmsObject?.id === o.id) {\n this.dmsObject.set(o);\n }\n });\n }\n\n #setupSlide() {\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n if (dmsObject.content) {\n const slideUri = this.#dmsService.getSlideURI(dmsObject.id, dmsObject.content?.mimeType);\n if (slideUri) {\n this.slide.update((slide) => ({ ...slide, loading: true }));\n const img = new Image();\n img.onload = () => {\n this.slide.update((slide) => ({\n ...slide,\n orientation: img.width > img.height ? 'landscape' : 'portrait',\n uri: `${slideUri}?${new Date().getTime()}`, // add Timestamp to force image reload\n loading: false\n }));\n this.#cd.markForCheck();\n };\n img.onerror = () => {\n const headerData = this.headerData();\n this.slide.update((slide) => ({ ...slide, icon: headerData?.icon, loading: false }));\n this.#cd.markForCheck();\n };\n img.src = slideUri;\n }\n } else {\n const headerData = this.headerData();\n this.slide.update((slide) => ({ ...slide, icon: headerData?.icon }));\n }\n }\n }\n\n onFlavorSelect(flavor: ObjectFlavor | undefined) {\n if (flavor) {\n this.#getFlavorData(flavor);\n } else this.flavorData = undefined;\n }\n\n #fetchFolderInfo(id: string) {\n const q: SearchQuery = {\n fields: [`SUM(${ContentStreamField.LENGTH})`],\n aggs: [BaseObjectTypeField.BASE_TYPE_ID],\n filters: [\n {\n f: BaseObjectTypeField.PARENT_ID,\n o: Operator.EQUAL,\n v1: id\n }\n ]\n };\n this.#searchService.aggregate(q, [BaseObjectTypeField.BASE_TYPE_ID]).subscribe((res) => {\n const entries = res.aggregations[0].entries;\n this.folderInfo = {\n size: entries.reduce((s, v) => s + v.count, 0),\n entries\n };\n });\n }\n\n #getDmsObject(id: string) {\n this.busy = true;\n this.#dmsService.getDmsObject(id).subscribe({\n next: (dmsObject) => this.dmsObject.set(dmsObject),\n error: () => {\n this.dmsObject.set(undefined);\n this.contextError = this.translate.instant('yuv.object-summary.load.error');\n },\n complete: () => {\n this.busy = false;\n }\n });\n }\n\n #getObjectConfig(type?: VirtualObjectType, bucket?: string): ResolvedObjectConfig | undefined {\n const dmsObject = this.dmsObject();\n return dmsObject\n ? this.#objectConfigService.getResolvedObjectConfig(\n dmsObject.data,\n type || {\n id: dmsObject.objectTypeId,\n objectType: dmsObject.objectTypeId\n },\n bucket,\n true\n )\n : undefined;\n }\n\n #getFlavorData(flavor: ObjectFlavor) {\n if (!flavor) {\n this.flavorData = undefined;\n return;\n }\n const sot = this.#systemService.getSecondaryObjectType(flavor.sot, true);\n const dmsObject = this.dmsObject();\n if (dmsObject && sot) {\n this.flavorData = {\n flavor,\n label: this.translate.instant(flavor.id),\n properties: sot.fields\n .filter((f) => f._internalType !== 'table')\n .map((f) => ({\n label: this.#systemService.getLocalizedLabel(f.id) || f.id,\n value: {\n propertyName: f.id,\n value: dmsObject.data[f.id]\n }\n }))\n };\n } else this.flavorData = undefined;\n }\n\n #getHeaderData() {\n const oc = this.#getObjectConfig(this.configType()?.type, this.configType()?.bucket);\n const dmsObject = this.dmsObject();\n if (oc && dmsObject) {\n this.headerData.update((data) => ({\n ...data,\n title: oc.title.value,\n description: oc.description?.value,\n icon: {\n title: oc.title.value,\n ...(oc.icon ? { name: oc.icon.value } : undefined)\n }\n }));\n\n // this.headerData.icon =;\n } else this.headerData.set(undefined);\n }\n\n #getBaseData() {\n this.baseData = [];\n\n const fields = [\n BaseObjectTypeField.CREATION_DATE,\n `${BaseObjectTypeField.CREATED_BY}_title`,\n BaseObjectTypeField.MODIFICATION_DATE,\n `${BaseObjectTypeField.MODIFIED_BY}_title`\n ];\n const contentFields = [ContentStreamField.FILENAME, ContentStreamField.LENGTH, ContentStreamField.MIME_TYPE];\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n const retentionFields = (dmsObject.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string[]).includes(SystemSOT.DESTRUCTION_RETENTION)\n ? [BaseObjectTypeField.RETENTION_START, BaseObjectTypeField.RETENTION_END]\n : [];\n\n (dmsObject.content ? [...fields, ...contentFields, ...retentionFields] : fields).forEach((f) => {\n this.baseData.push({\n label: this.#systemService.getLocalizedLabel(f.replace('_title', '')) || f,\n value: {\n propertyName: f,\n value: dmsObject.data[f]\n }\n });\n });\n }\n }\n}\n","@let imageSlide = slide();\n<section class=\"slide\" [yuvBusyOverlay]=\"imageSlide.loading\">\n @if (imageSlide.uri || imageSlide.loading) {\n <img draggable=\"false\" [ngClass]=\"{ loading: imageSlide.loading }\" [attr.data-orientation]=\"imageSlide.orientation\" [src]=\"imageSlide.uri\" />\n } @else if (imageSlide.icon && imageSlide.icon.name) {\n <mat-icon draggable=\"false\" class=\"ymt-icon--size-6xl\">{{ imageSlide.icon.name }}</mat-icon>\n }\n @if (folderInfo) {\n <div class=\"badge\">\n {{ folderInfo.size }}\n </div>\n }\n</section>\n\n@let o = dmsObject();\n@if (o) {\n <section class=\"object-flavors\">\n <yuv-object-flavor [dmsObject]=\"o\" (flavorSelect)=\"onFlavorSelect($event)\"></yuv-object-flavor>\n </section>\n}\n\n<div class=\"content\">\n @let header = headerData();\n <section class=\"title\">\n <h2>{{ header?.title }}</h2>\n\n <div class=\"actions\">\n <yuv-overflow-menu [menuItems]=\"actions()\"></yuv-overflow-menu>\n </div>\n </section>\n\n @if (o) {\n <section class=\"badges\">\n <yuv-retention-badge [dmsObject]=\"o\"></yuv-retention-badge>\n </section>\n }\n\n @if (flavorData) {\n <section class=\"flavor properties\">\n <!-- <h2>{{ flavorData.label }}</h2> -->\n @for (p of flavorData.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.value\"></ng-container>\n </div>\n </div>\n }\n </section>\n }\n\n <section class=\"properties\">\n @for (p of baseData; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.value\"></ng-container>\n </div>\n </div>\n }\n </section>\n</div>\n","import { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'yuv-multi-object-summary',\n standalone: true,\n imports: [MatIcon],\n template: `\n <section class=\"slide\">\n <mat-icon class=\"ymt-icon--size-6xl\">{{ icon() }}</mat-icon>\n </section>\n\n <section class=\"title\">\n <h1>{{ headline() }}</h1>\n </section>\n `,\n styleUrl: './multi-object-summary.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MultiObjectSummaryComponent {\n icon = signal('home_storage');\n\n headline = input<string>('this could be your headline');\n}\n","import { ChangeDetectionStrategy, Component, effect, inject, input, signal, untracked } from '@angular/core';\nimport { BaseObjectTypeField, ContentStreamField, DmsObject, SystemService, TranslateService } from '@yuuvis/client-core';\nimport { RendererDirective } from '@yuuvis/client-framework/renderer';\nimport { ShellService } from '@yuuvis/client-shell-core';\n\n@Component({\n selector: 'yuv-object-summary-data',\n standalone: true,\n imports: [RendererDirective],\n templateUrl: './object-summary-data.component.html',\n styleUrl: './object-summary-data.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ObjectSummaryDataComponent {\n readonly #shell = inject(ShellService);\n readonly #systemService = inject(SystemService);\n readonly translate = inject(TranslateService);\n\n dmsObject = input.required<DmsObject>();\n\n baseData = signal<any[]>([]);\n flavorData = signal<any[]>([]);\n\n #dmsObjectEffect = effect(() => {\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n untracked(() => {\n this.#getBaseData();\n this.#getAppliedFlavors(dmsObject);\n });\n }\n });\n\n #getBaseData() {\n this.baseData.set([]);\n\n const fields = [\n BaseObjectTypeField.CREATION_DATE,\n `${BaseObjectTypeField.CREATED_BY}_title`,\n BaseObjectTypeField.MODIFICATION_DATE,\n `${BaseObjectTypeField.MODIFIED_BY}_title`\n ];\n const contentFields = [ContentStreamField.FILENAME, ContentStreamField.LENGTH, ContentStreamField.MIME_TYPE];\n const dmsObject = this.dmsObject();\n if (dmsObject) {\n (dmsObject.content ? [...fields, ...contentFields] : fields).forEach((f) => {\n this.baseData.update((data) => [\n ...data,\n {\n label: this.#systemService.getLocalizedLabel(f.replace('_title', '')) || f,\n value: {\n propertyName: f,\n value: dmsObject.data[f]\n }\n }\n ]);\n });\n }\n // console.log('baseData', this.baseData());\n }\n\n #getAppliedFlavors(dmsObject: DmsObject) {\n this.flavorData.set([]);\n const appliedFlavors = this.#shell.getAppliedObjectFlavors(dmsObject).applied;\n for (const flavor of appliedFlavors) {\n this.flavorData.update((data) => [\n ...data,\n {\n flavor,\n label: this.translate.instant(flavor.id),\n properties: this.#systemService.getSecondaryObjectType(flavor.sot, true)?.fields.map((f) => ({\n label: this.#systemService.getLocalizedLabel(f.id) || f.id,\n value: {\n propertyName: f.id,\n value: dmsObject.data[f.id]\n }\n }))\n }\n ]);\n }\n }\n}\n","@let flavors = flavorData();\n\n<div class=\"content\">\n @if (flavors.length > 0) {\n <section class=\"flavor properties\">\n @for (flavor of flavors; track $index) {\n <div class=\"flavour-groups\">\n <h2>{{ flavor.label }}</h2>\n @for (property of flavor.properties; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ property.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"property.value\"></ng-container>\n </div>\n </div>\n }\n </div>\n }\n </section>\n }\n\n @let base = baseData();\n @if (base) {\n <section class=\"base properties\">\n <h2>BASE</h2>\n @for (p of base; track $index) {\n <div class=\"row\">\n <div class=\"label\">{{ p.label }}</div>\n <div class=\"value\">\n <ng-container *yuvRenderer=\"p.value\"></ng-container>\n </div>\n </div>\n }\n </section>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, ElementRef, input, effect, computed, signal, Component, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/common';
|
|
3
4
|
import { CommonModule } from '@angular/common';
|
|
4
|
-
import * as i2 from '@angular/material/
|
|
5
|
-
import { MatMenuModule } from '@angular/material/menu';
|
|
6
|
-
import * as i3 from '@angular/material/icon';
|
|
7
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
8
|
-
import * as i1 from '@angular/material/button';
|
|
5
|
+
import * as i2 from '@angular/material/button';
|
|
9
6
|
import { MatButtonModule } from '@angular/material/button';
|
|
10
|
-
import * as i4 from '@angular/material/
|
|
7
|
+
import * as i4 from '@angular/material/icon';
|
|
8
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
9
|
+
import * as i3 from '@angular/material/menu';
|
|
10
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
11
|
+
import * as i5 from '@angular/material/tooltip';
|
|
11
12
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
12
13
|
|
|
13
14
|
/**
|
|
@@ -26,6 +27,7 @@ class OverflowMenuComponent {
|
|
|
26
27
|
this.#menuItemsEffect = effect(() => {
|
|
27
28
|
this.#observe(this.menuItems());
|
|
28
29
|
});
|
|
30
|
+
this.vertical = input(false);
|
|
29
31
|
this.__menuGroups = computed(() => this.#groupItems(this.__menuItems()));
|
|
30
32
|
this.__menuItems = computed(() => {
|
|
31
33
|
return this.menuItems().map((i) => ({ ...i, overflow: false }));
|
|
@@ -35,6 +37,7 @@ class OverflowMenuComponent {
|
|
|
35
37
|
observer: undefined,
|
|
36
38
|
observedElements: []
|
|
37
39
|
};
|
|
40
|
+
this.activeStyles = {};
|
|
38
41
|
}
|
|
39
42
|
#elRef;
|
|
40
43
|
#menuItemsEffect;
|
|
@@ -92,17 +95,25 @@ class OverflowMenuComponent {
|
|
|
92
95
|
}
|
|
93
96
|
ngAfterViewInit() {
|
|
94
97
|
this.#initObservers();
|
|
98
|
+
// get active styles
|
|
99
|
+
const style = window.getComputedStyle(this.#elRef.nativeElement);
|
|
100
|
+
this.activeStyles = {
|
|
101
|
+
'background-color': style.getPropertyValue('--menu-active-background'),
|
|
102
|
+
'color': style.getPropertyValue('--menu-on-active'),
|
|
103
|
+
};
|
|
95
104
|
}
|
|
96
105
|
ngOnDestroy() {
|
|
97
106
|
if (this.#itemObserver.observer)
|
|
98
107
|
this.#itemObserver.observer.disconnect();
|
|
99
108
|
}
|
|
100
109
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: OverflowMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
101
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: OverflowMenuComponent, isStandalone: true, selector: "yuv-overflow-menu", inputs: { overflowIcon: { classPropertyName: "overflowIcon", publicName: "overflowIcon", isSignal: true, isRequired: false, transformFunction: null }, groupLabels: { classPropertyName: "groupLabels", publicName: "groupLabels", isSignal: true, isRequired: false, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"overflow-wrapper\">\n @for (group of __menuGroups(); track group.id) {\n <section>\n @for (item of group.items; track item.id) {\n <button
|
|
110
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: OverflowMenuComponent, isStandalone: true, selector: "yuv-overflow-menu", inputs: { overflowIcon: { classPropertyName: "overflowIcon", publicName: "overflowIcon", isSignal: true, isRequired: false, transformFunction: null }, groupLabels: { classPropertyName: "groupLabels", publicName: "groupLabels", isSignal: true, isRequired: false, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.vertical": "vertical()" } }, ngImport: i0, template: "<div class=\"overflow-wrapper\">\n @for (group of __menuGroups(); track group.id) {\n <section>\n @for (item of group.items; track item.id) {\n <button\n mat-icon-button\n class=\"menu-item\"\n [disabled]=\"item.disabled\"\n [ngClass]=\"{ active: item.active }\"\n [matTooltip]=\"item.label\"\n [attr.data-item-id]=\"item.id\"\n (click)=\"item.callback(item)\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n </button>\n }\n </section>\n }\n</div>\n\n<button class=\"overflow-trigger\" inert=\"true\" mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>{{ overflowIcon() }}</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n @let gl = groupLabels();\n @for (g of overflowGroups(); track g.id) {\n @if (gl && gl[g.id]) {\n <div class=\"group\">{{ gl[g.id] }}</div>\n }\n @for (item of g.items; track item.id) {\n <div class=\"menu-item\" mat-menu-item [disabled]=\"item.disabled\" [ngStyle]=\"item.active ? activeStyles : {}\" (click)=\"item.callback(item)\">\n <mat-icon>{{ item.icon }}</mat-icon>\n <span> {{ item.label }} </span>\n </div>\n }\n }\n</mat-menu>\n", styles: [":host{--menu-group-divider-color: var(--ymt-outline-variant);--menu-item-gap: 2px;--menu-item-padding: var(--ymt-spacing-xs);--menu-item-icon-size: 24px;--menu-item-overflow-padding: var(--menu-item-padding);--menu-item-overflow-icon-size: var(--menu-item-icon-size);--menu-item-max-label-width: 20ch;--menu-item-flow: row;--menu-active-background: var(--ymt-primary-container);--menu-on-active: var(--ymt-on-primary-container);overflow:hidden;display:flex;align-items:center;flex-wrap:nowrap}:host.vertical{height:100%;flex-direction:column}:host.vertical .overflow-wrapper>section{flex-direction:column}:host.noLabel .menu-item span{display:none}:host .overflow-wrapper{overflow:hidden;display:flex}:host .overflow-wrapper>section{display:flex;gap:var(--menu-item-gap)}:host .overflow-wrapper>section:not(:first-child){border-inline-start:1px solid var(--menu-group-divider-color);padding-inline-start:var(--ymt-spacing-xs)}:host .menu-item{display:flex;align-items:center;border-radius:var(--ymt-corner-s)}:host .menu-item.active{background-color:var(--menu-active-background);color:var(--menu-on-active)}:host .menu-item[inert=true]{opacity:0}:host .overflow-trigger{opacity:0;display:none}:host .overflow-trigger:not([inert=true]){opacity:1;display:inline}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
102
111
|
}
|
|
103
112
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: OverflowMenuComponent, decorators: [{
|
|
104
113
|
type: Component,
|
|
105
|
-
args: [{ selector: 'yuv-overflow-menu', imports: [CommonModule, MatButtonModule, MatMenuModule, MatIconModule, MatTooltipModule],
|
|
114
|
+
args: [{ selector: 'yuv-overflow-menu', imports: [CommonModule, MatButtonModule, MatMenuModule, MatIconModule, MatTooltipModule], host: {
|
|
115
|
+
'[class.vertical]': 'vertical()'
|
|
116
|
+
}, template: "<div class=\"overflow-wrapper\">\n @for (group of __menuGroups(); track group.id) {\n <section>\n @for (item of group.items; track item.id) {\n <button\n mat-icon-button\n class=\"menu-item\"\n [disabled]=\"item.disabled\"\n [ngClass]=\"{ active: item.active }\"\n [matTooltip]=\"item.label\"\n [attr.data-item-id]=\"item.id\"\n (click)=\"item.callback(item)\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n </button>\n }\n </section>\n }\n</div>\n\n<button class=\"overflow-trigger\" inert=\"true\" mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>{{ overflowIcon() }}</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n @let gl = groupLabels();\n @for (g of overflowGroups(); track g.id) {\n @if (gl && gl[g.id]) {\n <div class=\"group\">{{ gl[g.id] }}</div>\n }\n @for (item of g.items; track item.id) {\n <div class=\"menu-item\" mat-menu-item [disabled]=\"item.disabled\" [ngStyle]=\"item.active ? activeStyles : {}\" (click)=\"item.callback(item)\">\n <mat-icon>{{ item.icon }}</mat-icon>\n <span> {{ item.label }} </span>\n </div>\n }\n }\n</mat-menu>\n", styles: [":host{--menu-group-divider-color: var(--ymt-outline-variant);--menu-item-gap: 2px;--menu-item-padding: var(--ymt-spacing-xs);--menu-item-icon-size: 24px;--menu-item-overflow-padding: var(--menu-item-padding);--menu-item-overflow-icon-size: var(--menu-item-icon-size);--menu-item-max-label-width: 20ch;--menu-item-flow: row;--menu-active-background: var(--ymt-primary-container);--menu-on-active: var(--ymt-on-primary-container);overflow:hidden;display:flex;align-items:center;flex-wrap:nowrap}:host.vertical{height:100%;flex-direction:column}:host.vertical .overflow-wrapper>section{flex-direction:column}:host.noLabel .menu-item span{display:none}:host .overflow-wrapper{overflow:hidden;display:flex}:host .overflow-wrapper>section{display:flex;gap:var(--menu-item-gap)}:host .overflow-wrapper>section:not(:first-child){border-inline-start:1px solid var(--menu-group-divider-color);padding-inline-start:var(--ymt-spacing-xs)}:host .menu-item{display:flex;align-items:center;border-radius:var(--ymt-corner-s)}:host .menu-item.active{background-color:var(--menu-active-background);color:var(--menu-on-active)}:host .menu-item[inert=true]{opacity:0}:host .overflow-trigger{opacity:0;display:none}:host .overflow-trigger:not([inert=true]){opacity:1;display:inline}\n"] }]
|
|
106
117
|
}] });
|
|
107
118
|
|
|
108
119
|
class YuvOverflowMenuModule {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-overflow-menu.mjs","sources":["../../../../../libs/yuuvis/client-framework/overflow-menu/src/lib/overflow-menu.component.ts","../../../../../libs/yuuvis/client-framework/overflow-menu/src/lib/overflow-menu.component.html","../../../../../libs/yuuvis/client-framework/overflow-menu/src/lib/overflow-menu.module.ts","../../../../../libs/yuuvis/client-framework/overflow-menu/src/yuuvis-client-framework-overflow-menu.ts"],"sourcesContent":["import { AfterViewInit, Component, computed, effect, ElementRef, inject, input, OnDestroy, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OverflowMenuItem } from './overflow-menu.interface';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\ntype __MenuItem = OverflowMenuItem & { overflow: boolean };\ninterface MenuGroup {\n id: string;\n items: __MenuItem[];\n}\n\n/**\n * Renders items in a toolbar. If menu items provide a 'group' property they will\n * be organized in sections.\n */\n@Component({\n selector: 'yuv-overflow-menu',\n imports: [CommonModule, MatButtonModule, MatMenuModule, MatIconModule, MatTooltipModule],\n templateUrl: './overflow-menu.component.html',\n styleUrl: './overflow-menu.component.scss'\n})\nexport class OverflowMenuComponent implements AfterViewInit, OnDestroy {\n #elRef = inject(ElementRef);\n\n overflowIcon = input<string>('more_horiz');\n groupLabels = input<Record<string, string>>();\n\n /**\n * Items of the menu\n */\n menuItems = input<OverflowMenuItem[]>([]);\n #menuItemsEffect = effect(() => {\n this.#observe(this.menuItems());\n });\n\n __menuGroups = computed<MenuGroup[]>(() => this.#groupItems(this.__menuItems()));\n\n private __menuItems = computed<__MenuItem[]>(() => {\n return this.menuItems().map((i) => ({ ...i, overflow: false }));\n });\n\n overflowGroups = signal<MenuGroup[]>([]);\n\n #itemObserver: {\n observer: IntersectionObserver | undefined;\n observedElements: Element[];\n } = {\n observer: undefined,\n observedElements: []\n };\n\n #initObservers() {\n // observe tab navigation elements to show navigation controls (arrow buttons) once\n // the first or the last tab is not visible anymore\n this.#itemObserver.observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((e, i) => {\n const id = e.target.getAttribute('data-item-id');\n const _i: __MenuItem | undefined = this.__menuItems().find((mi) => id === mi.id);\n if (_i) _i.overflow = !e.isIntersecting;\n const overflowTrigger = (this.#elRef.nativeElement as HTMLElement).querySelector('button.overflow-trigger');\n\n if (overflowTrigger) {\n !this.__menuItems().find((i) => i.overflow) ? overflowTrigger.setAttribute('inert', 'true') : overflowTrigger.removeAttribute('inert');\n }\n const intersecting = !e.isIntersecting;\n if (intersecting) e.target.setAttribute('inert', 'true');\n else e.target.removeAttribute('inert');\n });\n\n this.overflowGroups.set(this.#groupItems(this.__menuItems().filter((i) => i.overflow)));\n },\n {\n threshold: 1,\n root: this.#elRef.nativeElement.querySelector('.overflow-wrapper')\n }\n );\n }\n\n #observe(items: OverflowMenuItem[]) {\n setTimeout(() => {\n if (this.#itemObserver.observer) {\n // cleanup existing observed elements\n this.#itemObserver.observedElements.forEach((e) => this.#itemObserver.observer!.unobserve(e));\n this.#itemObserver.observedElements = [];\n\n if (items.length > 0) {\n this.#itemObserver.observedElements = this.#elRef.nativeElement.querySelectorAll('.menu-item');\n this.#itemObserver.observedElements.forEach((e) => this.#itemObserver.observer!.observe(e));\n }\n }\n });\n }\n\n #groupItems(items: OverflowMenuItem[]): MenuGroup[] {\n const g = this.#groupBy(items, 'group');\n return Object.keys(g).map((id) => ({\n id,\n items: g[id]\n }));\n }\n\n #groupBy(arr: any[], key: string): Record<string, any> {\n return arr.reduce((rv, x) => {\n (rv[x[key]] = rv[x[key]] || []).push(x);\n return rv;\n }, {});\n }\n\n ngAfterViewInit(): void {\n this.#initObservers();\n }\n\n ngOnDestroy(): void {\n if (this.#itemObserver.observer) this.#itemObserver.observer.disconnect();\n }\n}\n","<div class=\"overflow-wrapper\">\n @for (group of __menuGroups(); track group.id) {\n <section>\n @for (item of group.items; track item.id) {\n <button mat-icon-button class=\"menu-item\" [disabled]=\"item.disabled\" [matTooltip]=\"item.label\" [attr.data-item-id]=\"item.id\" (click)=\"item.callback()\">\n <mat-icon>{{ item.icon }}</mat-icon>\n </button>\n }\n </section>\n }\n</div>\n\n<button class=\"overflow-trigger\" inert=\"true\" mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>{{ overflowIcon() }}</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n @let gl = groupLabels();\n @for (g of overflowGroups(); track g.id) {\n @if (gl && gl[g.id]) {\n <div class=\"group\">{{ gl[g.id] }}</div>\n }\n @for (item of g.items; track item.id) {\n <div class=\"menu-item\" mat-menu-item [disabled]=\"item.disabled\" (click)=\"item.callback()\">\n <mat-icon>{{ item.icon }}</mat-icon>\n <span> {{ item.label }} </span>\n </div>\n }\n }\n</mat-menu>\n","import { NgModule } from '@angular/core';\nimport { OverflowMenuComponent } from './overflow-menu.component';\n\n@NgModule({\n imports: [OverflowMenuComponent],\n exports: [OverflowMenuComponent]\n})\nexport class YuvOverflowMenuModule {}\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-overflow-menu.mjs","sources":["../../../../../libs/yuuvis/client-framework/overflow-menu/src/lib/overflow-menu.component.ts","../../../../../libs/yuuvis/client-framework/overflow-menu/src/lib/overflow-menu.component.html","../../../../../libs/yuuvis/client-framework/overflow-menu/src/lib/overflow-menu.module.ts","../../../../../libs/yuuvis/client-framework/overflow-menu/src/yuuvis-client-framework-overflow-menu.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, computed, effect, ElementRef, inject, input, OnDestroy, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { OverflowMenuItem } from './overflow-menu.interface';\n\ntype __MenuItem = OverflowMenuItem & { overflow: boolean };\ninterface MenuGroup {\n id: string;\n items: __MenuItem[];\n}\n\n/**\n * Renders items in a toolbar. If menu items provide a 'group' property they will\n * be organized in sections.\n */\n@Component({\n selector: 'yuv-overflow-menu',\n imports: [CommonModule, MatButtonModule, MatMenuModule, MatIconModule, MatTooltipModule],\n templateUrl: './overflow-menu.component.html',\n styleUrl: './overflow-menu.component.scss',\n host: {\n '[class.vertical]': 'vertical()'\n }\n})\nexport class OverflowMenuComponent implements AfterViewInit, OnDestroy {\n #elRef = inject(ElementRef);\n\n overflowIcon = input<string>('more_horiz');\n groupLabels = input<Record<string, string>>();\n\n /**\n * Items of the menu\n */\n menuItems = input<OverflowMenuItem[]>([]);\n #menuItemsEffect = effect(() => {\n this.#observe(this.menuItems());\n });\n\n vertical = input<boolean>(false);\n\n __menuGroups = computed<MenuGroup[]>(() => this.#groupItems(this.__menuItems()));\n\n private __menuItems = computed<__MenuItem[]>(() => {\n return this.menuItems().map((i) => ({ ...i, overflow: false }));\n });\n\n overflowGroups = signal<MenuGroup[]>([]);\n\n #itemObserver: {\n observer: IntersectionObserver | undefined;\n observedElements: Element[];\n } = {\n observer: undefined,\n observedElements: []\n };\n\n activeStyles = {};\n\n #initObservers() {\n // observe tab navigation elements to show navigation controls (arrow buttons) once\n // the first or the last tab is not visible anymore\n this.#itemObserver.observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((e, i) => {\n const id = e.target.getAttribute('data-item-id');\n const _i: __MenuItem | undefined = this.__menuItems().find((mi) => id === mi.id);\n if (_i) _i.overflow = !e.isIntersecting;\n const overflowTrigger = (this.#elRef.nativeElement as HTMLElement).querySelector('button.overflow-trigger');\n\n if (overflowTrigger) {\n !this.__menuItems().find((i) => i.overflow) ? overflowTrigger.setAttribute('inert', 'true') : overflowTrigger.removeAttribute('inert');\n }\n const intersecting = !e.isIntersecting;\n if (intersecting) e.target.setAttribute('inert', 'true');\n else e.target.removeAttribute('inert');\n });\n\n this.overflowGroups.set(this.#groupItems(this.__menuItems().filter((i) => i.overflow)));\n },\n {\n threshold: 1,\n root: this.#elRef.nativeElement.querySelector('.overflow-wrapper')\n }\n );\n }\n\n #observe(items: OverflowMenuItem[]) {\n setTimeout(() => {\n if (this.#itemObserver.observer) {\n // cleanup existing observed elements\n this.#itemObserver.observedElements.forEach((e) => this.#itemObserver.observer!.unobserve(e));\n this.#itemObserver.observedElements = [];\n\n if (items.length > 0) {\n this.#itemObserver.observedElements = this.#elRef.nativeElement.querySelectorAll('.menu-item');\n this.#itemObserver.observedElements.forEach((e) => this.#itemObserver.observer!.observe(e));\n }\n }\n });\n }\n\n #groupItems(items: OverflowMenuItem[]): MenuGroup[] {\n const g = this.#groupBy(items, 'group');\n return Object.keys(g).map((id) => ({\n id,\n items: g[id]\n }));\n }\n\n #groupBy(arr: any[], key: string): Record<string, any> {\n return arr.reduce((rv, x) => {\n (rv[x[key]] = rv[x[key]] || []).push(x);\n return rv;\n }, {});\n }\n\n ngAfterViewInit(): void {\n this.#initObservers();\n // get active styles\n const style = window.getComputedStyle(this.#elRef.nativeElement);\n this.activeStyles = {\n 'background-color': style.getPropertyValue('--menu-active-background'),\n 'color': style.getPropertyValue('--menu-on-active'),\n }\n\n }\n\n ngOnDestroy(): void {\n if (this.#itemObserver.observer) this.#itemObserver.observer.disconnect();\n }\n}\n","<div class=\"overflow-wrapper\">\n @for (group of __menuGroups(); track group.id) {\n <section>\n @for (item of group.items; track item.id) {\n <button\n mat-icon-button\n class=\"menu-item\"\n [disabled]=\"item.disabled\"\n [ngClass]=\"{ active: item.active }\"\n [matTooltip]=\"item.label\"\n [attr.data-item-id]=\"item.id\"\n (click)=\"item.callback(item)\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n </button>\n }\n </section>\n }\n</div>\n\n<button class=\"overflow-trigger\" inert=\"true\" mat-icon-button [matMenuTriggerFor]=\"menu\">\n <mat-icon>{{ overflowIcon() }}</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n @let gl = groupLabels();\n @for (g of overflowGroups(); track g.id) {\n @if (gl && gl[g.id]) {\n <div class=\"group\">{{ gl[g.id] }}</div>\n }\n @for (item of g.items; track item.id) {\n <div class=\"menu-item\" mat-menu-item [disabled]=\"item.disabled\" [ngStyle]=\"item.active ? activeStyles : {}\" (click)=\"item.callback(item)\">\n <mat-icon>{{ item.icon }}</mat-icon>\n <span> {{ item.label }} </span>\n </div>\n }\n }\n</mat-menu>\n","import { NgModule } from '@angular/core';\nimport { OverflowMenuComponent } from './overflow-menu.component';\n\n@NgModule({\n imports: [OverflowMenuComponent],\n exports: [OverflowMenuComponent]\n})\nexport class YuvOverflowMenuModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -20,12 +20,14 @@ export declare class OverflowMenuComponent implements AfterViewInit, OnDestroy {
|
|
|
20
20
|
* Items of the menu
|
|
21
21
|
*/
|
|
22
22
|
menuItems: import("@angular/core").InputSignal<OverflowMenuItem[]>;
|
|
23
|
+
vertical: import("@angular/core").InputSignal<boolean>;
|
|
23
24
|
__menuGroups: import("@angular/core").Signal<MenuGroup[]>;
|
|
24
25
|
private __menuItems;
|
|
25
26
|
overflowGroups: import("@angular/core").WritableSignal<MenuGroup[]>;
|
|
27
|
+
activeStyles: {};
|
|
26
28
|
ngAfterViewInit(): void;
|
|
27
29
|
ngOnDestroy(): void;
|
|
28
30
|
static ɵfac: i0.ɵɵFactoryDeclaration<OverflowMenuComponent, never>;
|
|
29
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<OverflowMenuComponent, "yuv-overflow-menu", never, { "overflowIcon": { "alias": "overflowIcon"; "required": false; "isSignal": true; }; "groupLabels": { "alias": "groupLabels"; "required": false; "isSignal": true; }; "menuItems": { "alias": "menuItems"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
31
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<OverflowMenuComponent, "yuv-overflow-menu", never, { "overflowIcon": { "alias": "overflowIcon"; "required": false; "isSignal": true; }; "groupLabels": { "alias": "groupLabels"; "required": false; "isSignal": true; }; "menuItems": { "alias": "menuItems"; "required": false; "isSignal": true; }; "vertical": { "alias": "vertical"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
30
32
|
}
|
|
31
33
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuuvis/client-framework",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.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.0
|
|
12
|
-
"@yuuvis/client-shell-core": "^2.0
|
|
11
|
+
"@yuuvis/client-core": "^2.1.0",
|
|
12
|
+
"@yuuvis/client-shell-core": "^2.1.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.0
|
|
19
|
+
"@yuuvis/material": "2.1.0",
|
|
20
20
|
"@yuuvis/media-viewer": "^2.0.4",
|
|
21
21
|
"angular-split": "^19.0.0",
|
|
22
22
|
"tslib": "^2.3.0"
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
"types": "./actions/index.d.ts",
|
|
36
36
|
"default": "./fesm2022/yuuvis-client-framework-actions.mjs"
|
|
37
37
|
},
|
|
38
|
-
"./autocomplete": {
|
|
39
|
-
"types": "./autocomplete/index.d.ts",
|
|
40
|
-
"default": "./fesm2022/yuuvis-client-framework-autocomplete.mjs"
|
|
41
|
-
},
|
|
42
38
|
"./app-bar": {
|
|
43
39
|
"types": "./app-bar/index.d.ts",
|
|
44
40
|
"default": "./fesm2022/yuuvis-client-framework-app-bar.mjs"
|
|
45
41
|
},
|
|
42
|
+
"./autocomplete": {
|
|
43
|
+
"types": "./autocomplete/index.d.ts",
|
|
44
|
+
"default": "./fesm2022/yuuvis-client-framework-autocomplete.mjs"
|
|
45
|
+
},
|
|
46
46
|
"./clipboard": {
|
|
47
47
|
"types": "./clipboard/index.d.ts",
|
|
48
48
|
"default": "./fesm2022/yuuvis-client-framework-clipboard.mjs"
|