@masterteam/components 0.0.178 → 0.0.180

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/fesm2022/masterteam-components-confirmation.mjs +2 -2
  2. package/fesm2022/masterteam-components-confirmation.mjs.map +1 -1
  3. package/fesm2022/masterteam-components-drawer.mjs +2 -2
  4. package/fesm2022/masterteam-components-drawer.mjs.map +1 -1
  5. package/fesm2022/masterteam-components-dynamic-drawer.mjs.map +1 -1
  6. package/fesm2022/masterteam-components-entities.mjs +16 -16
  7. package/fesm2022/masterteam-components-entities.mjs.map +1 -1
  8. package/fesm2022/masterteam-components-location-field.mjs +4 -4
  9. package/fesm2022/masterteam-components-location-field.mjs.map +1 -1
  10. package/fesm2022/masterteam-components-modal.mjs +28 -5
  11. package/fesm2022/masterteam-components-modal.mjs.map +1 -1
  12. package/fesm2022/masterteam-components-number-field.mjs +2 -2
  13. package/fesm2022/masterteam-components-number-field.mjs.map +1 -1
  14. package/fesm2022/masterteam-components-radio-cards-field.mjs +2 -2
  15. package/fesm2022/masterteam-components-radio-cards-field.mjs.map +1 -1
  16. package/fesm2022/masterteam-components-runtime-action.mjs.map +1 -1
  17. package/fesm2022/masterteam-components-select-field.mjs +2 -2
  18. package/fesm2022/masterteam-components-select-field.mjs.map +1 -1
  19. package/fesm2022/masterteam-components-table.mjs +49 -7
  20. package/fesm2022/masterteam-components-table.mjs.map +1 -1
  21. package/fesm2022/masterteam-components-tabs.mjs +2 -2
  22. package/fesm2022/masterteam-components-tabs.mjs.map +1 -1
  23. package/fesm2022/masterteam-components-text-field.mjs +2 -2
  24. package/fesm2022/masterteam-components-text-field.mjs.map +1 -1
  25. package/fesm2022/masterteam-components-textarea-field.mjs +2 -2
  26. package/fesm2022/masterteam-components-textarea-field.mjs.map +1 -1
  27. package/fesm2022/masterteam-components-toggle-field.mjs +2 -2
  28. package/fesm2022/masterteam-components-toggle-field.mjs.map +1 -1
  29. package/fesm2022/masterteam-components.mjs +3 -3
  30. package/fesm2022/masterteam-components.mjs.map +1 -1
  31. package/package.json +1 -1
  32. package/types/masterteam-components-modal.d.ts +5 -1
  33. package/types/masterteam-components-table.d.ts +5 -0
@@ -243,11 +243,11 @@ class EntityUser {
243
243
  hasContactInfo = computed(() => (this.showPhoneNumber() && !!this.phoneNumber()) ||
244
244
  (this.showEmail() && !!this.email()), ...(ngDevMode ? [{ debugName: "hasContactInfo" }] : /* istanbul ignore next */ []));
245
245
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityUser, deps: [], target: i0.ɵɵFactoryTarget.Component });
246
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityUser, isStandalone: true, selector: "mt-entity-user", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mt-entity-field\n [label]=\"displayName()\"\n [configuration]=\"data()?.configuration\"\n gap=\"normal\"\n>\n <div class=\"flex items-center gap-2\">\n <mt-avatar\n [image]=\"\n userPhoto()\n ? (userPhoto() | secureImage: true : httpContext : 'avatar/')\n : ''\n \"\n [icon]=\"'user.user-01'\"\n styleClass=\"w-10! h-10! text-white! text-xxl! bg-primary-500!\"\n ></mt-avatar>\n\n @if (showDisplayName()) {\n <div class=\"flex flex-col min-w-0 flex-1\">\n <span class=\"text-sm text-gray-700 truncate\">{{ userName() }}</span>\n @if (labelText()) {\n <span class=\"text-xs text-gray-500 truncate\">{{ labelText() }}</span>\n }\n </div>\n }\n\n @if (hasContactInfo()) {\n <div class=\"flex items-center gap-1.5 ms-auto shrink-0\">\n @if (showPhoneNumber() && phoneNumber()) {\n <a\n [href]=\"'tel:' + phoneNumber()\"\n [attr.aria-label]=\"phoneNumber()\"\n [mtTooltip]=\"phoneNumber()\"\n tooltipPosition=\"top\"\n class=\"inline-flex\"\n >\n <mt-avatar\n icon=\"communication.phone\"\n badgeSeverity=\"secondary\"\n styleClass=\"bg-surface-100! text-surface-600! h-7! w-7! text-sm! font-semibold!\"\n />\n </a>\n }\n @if (showEmail() && email()) {\n <a\n [href]=\"'mailto:' + email()\"\n [attr.aria-label]=\"email()\"\n [mtTooltip]=\"email()\"\n tooltipPosition=\"top\"\n class=\"inline-flex\"\n >\n <mt-avatar\n styleClass=\"bg-surface-100! text-surface-600! h-7! w-7! text-sm! font-semibold!\"\n icon=\"communication.mail-01\"\n badgeSeverity=\"secondary\"\n />\n </a>\n }\n </div>\n }\n </div>\n</mt-entity-field>\n", dependencies: [{ kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "directive", type: Tooltip, selector: "[mtTooltip]" }, { kind: "component", type: EntityField, selector: "mt-entity-field", inputs: ["label", "labelIconName", "configuration", "gap"] }, { kind: "pipe", type: SecureImagePipe, name: "secureImage" }] });
246
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityUser, isStandalone: true, selector: "mt-entity-user", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mt-entity-field\r\n [label]=\"displayName()\"\r\n [configuration]=\"data()?.configuration\"\r\n gap=\"normal\"\r\n>\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar\r\n [image]=\"\r\n userPhoto()\r\n ? (userPhoto() | secureImage: true : httpContext : 'avatar/')\r\n : ''\r\n \"\r\n [icon]=\"'user.user-01'\"\r\n styleClass=\"w-10! h-10! text-white! text-xxl! bg-primary-500!\"\r\n ></mt-avatar>\r\n\r\n @if (showDisplayName()) {\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span class=\"text-sm text-gray-700 truncate\">{{ userName() }}</span>\r\n @if (labelText()) {\r\n <span class=\"text-xs text-gray-500 truncate\">{{ labelText() }}</span>\r\n }\r\n </div>\r\n }\r\n\r\n @if (hasContactInfo()) {\r\n <div class=\"flex items-center gap-1.5 ms-auto shrink-0\">\r\n @if (showPhoneNumber() && phoneNumber()) {\r\n <a\r\n [href]=\"'tel:' + phoneNumber()\"\r\n [attr.aria-label]=\"phoneNumber()\"\r\n [mtTooltip]=\"phoneNumber()\"\r\n tooltipPosition=\"top\"\r\n class=\"inline-flex\"\r\n >\r\n <mt-avatar\r\n icon=\"communication.phone\"\r\n badgeSeverity=\"secondary\"\r\n styleClass=\"bg-surface-100! text-surface-600! h-7! w-7! text-sm! font-semibold!\"\r\n />\r\n </a>\r\n }\r\n @if (showEmail() && email()) {\r\n <a\r\n [href]=\"'mailto:' + email()\"\r\n [attr.aria-label]=\"email()\"\r\n [mtTooltip]=\"email()\"\r\n tooltipPosition=\"top\"\r\n class=\"inline-flex\"\r\n >\r\n <mt-avatar\r\n styleClass=\"bg-surface-100! text-surface-600! h-7! w-7! text-sm! font-semibold!\"\r\n icon=\"communication.mail-01\"\r\n badgeSeverity=\"secondary\"\r\n />\r\n </a>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</mt-entity-field>\r\n", dependencies: [{ kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "directive", type: Tooltip, selector: "[mtTooltip]" }, { kind: "component", type: EntityField, selector: "mt-entity-field", inputs: ["label", "labelIconName", "configuration", "gap"] }, { kind: "pipe", type: SecureImagePipe, name: "secureImage" }] });
247
247
  }
248
248
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityUser, decorators: [{
249
249
  type: Component,
250
- args: [{ selector: 'mt-entity-user', standalone: true, imports: [Avatar, Tooltip, SecureImagePipe, EntityField], template: "<mt-entity-field\n [label]=\"displayName()\"\n [configuration]=\"data()?.configuration\"\n gap=\"normal\"\n>\n <div class=\"flex items-center gap-2\">\n <mt-avatar\n [image]=\"\n userPhoto()\n ? (userPhoto() | secureImage: true : httpContext : 'avatar/')\n : ''\n \"\n [icon]=\"'user.user-01'\"\n styleClass=\"w-10! h-10! text-white! text-xxl! bg-primary-500!\"\n ></mt-avatar>\n\n @if (showDisplayName()) {\n <div class=\"flex flex-col min-w-0 flex-1\">\n <span class=\"text-sm text-gray-700 truncate\">{{ userName() }}</span>\n @if (labelText()) {\n <span class=\"text-xs text-gray-500 truncate\">{{ labelText() }}</span>\n }\n </div>\n }\n\n @if (hasContactInfo()) {\n <div class=\"flex items-center gap-1.5 ms-auto shrink-0\">\n @if (showPhoneNumber() && phoneNumber()) {\n <a\n [href]=\"'tel:' + phoneNumber()\"\n [attr.aria-label]=\"phoneNumber()\"\n [mtTooltip]=\"phoneNumber()\"\n tooltipPosition=\"top\"\n class=\"inline-flex\"\n >\n <mt-avatar\n icon=\"communication.phone\"\n badgeSeverity=\"secondary\"\n styleClass=\"bg-surface-100! text-surface-600! h-7! w-7! text-sm! font-semibold!\"\n />\n </a>\n }\n @if (showEmail() && email()) {\n <a\n [href]=\"'mailto:' + email()\"\n [attr.aria-label]=\"email()\"\n [mtTooltip]=\"email()\"\n tooltipPosition=\"top\"\n class=\"inline-flex\"\n >\n <mt-avatar\n styleClass=\"bg-surface-100! text-surface-600! h-7! w-7! text-sm! font-semibold!\"\n icon=\"communication.mail-01\"\n badgeSeverity=\"secondary\"\n />\n </a>\n }\n </div>\n }\n </div>\n</mt-entity-field>\n" }]
250
+ args: [{ selector: 'mt-entity-user', standalone: true, imports: [Avatar, Tooltip, SecureImagePipe, EntityField], template: "<mt-entity-field\r\n [label]=\"displayName()\"\r\n [configuration]=\"data()?.configuration\"\r\n gap=\"normal\"\r\n>\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar\r\n [image]=\"\r\n userPhoto()\r\n ? (userPhoto() | secureImage: true : httpContext : 'avatar/')\r\n : ''\r\n \"\r\n [icon]=\"'user.user-01'\"\r\n styleClass=\"w-10! h-10! text-white! text-xxl! bg-primary-500!\"\r\n ></mt-avatar>\r\n\r\n @if (showDisplayName()) {\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <span class=\"text-sm text-gray-700 truncate\">{{ userName() }}</span>\r\n @if (labelText()) {\r\n <span class=\"text-xs text-gray-500 truncate\">{{ labelText() }}</span>\r\n }\r\n </div>\r\n }\r\n\r\n @if (hasContactInfo()) {\r\n <div class=\"flex items-center gap-1.5 ms-auto shrink-0\">\r\n @if (showPhoneNumber() && phoneNumber()) {\r\n <a\r\n [href]=\"'tel:' + phoneNumber()\"\r\n [attr.aria-label]=\"phoneNumber()\"\r\n [mtTooltip]=\"phoneNumber()\"\r\n tooltipPosition=\"top\"\r\n class=\"inline-flex\"\r\n >\r\n <mt-avatar\r\n icon=\"communication.phone\"\r\n badgeSeverity=\"secondary\"\r\n styleClass=\"bg-surface-100! text-surface-600! h-7! w-7! text-sm! font-semibold!\"\r\n />\r\n </a>\r\n }\r\n @if (showEmail() && email()) {\r\n <a\r\n [href]=\"'mailto:' + email()\"\r\n [attr.aria-label]=\"email()\"\r\n [mtTooltip]=\"email()\"\r\n tooltipPosition=\"top\"\r\n class=\"inline-flex\"\r\n >\r\n <mt-avatar\r\n styleClass=\"bg-surface-100! text-surface-600! h-7! w-7! text-sm! font-semibold!\"\r\n icon=\"communication.mail-01\"\r\n badgeSeverity=\"secondary\"\r\n />\r\n </a>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</mt-entity-field>\r\n" }]
251
251
  }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }] } });
252
252
 
253
253
  class EntityPercentage {
@@ -721,11 +721,11 @@ class EntityAttachment {
721
721
  return undefined;
722
722
  }
723
723
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityAttachment, deps: [], target: i0.ɵɵFactoryTarget.Component });
724
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityAttachment, isStandalone: true, selector: "mt-entity-attachment", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, endPoint: { classPropertyName: "endPoint", publicName: "endPoint", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mt-entity-field\n [label]=\"displayName()\"\n [configuration]=\"data()?.configuration\"\n gap=\"relaxed\"\n>\n @if (hasAttachments()) {\n @if (shape() === \"compact\") {\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (\n attachment of attachments();\n track attachmentTrackBy($index, attachment)\n ) {\n <mt-button\n iconPos=\"top\"\n size=\"small\"\n severity=\"secondary\"\n variant=\"outlined\"\n [icon]=\"attachmentActionIcon($index, attachment)\"\n [tooltip]=\"attachmentTooltip(attachment)\"\n styleClass=\"h-9! w-9! rounded-lg! transition-all duration-200 hover:scale-105 hover:border-primary-500! hover:text-primary-600! hover:bg-primary-50!\"\n (onClick)=\"onCompactAttachmentClick($event, attachment)\"\n (mouseenter)=\"\n hoveredAttachmentKey.set(attachmentTrackBy($index, attachment))\n \"\n (mouseleave)=\"hoveredAttachmentKey.set(null)\"\n (onFocus)=\"\n hoveredAttachmentKey.set(attachmentTrackBy($index, attachment))\n \"\n (onBlur)=\"hoveredAttachmentKey.set(null)\"\n />\n }\n </div>\n } @else {\n <mt-upload-field\n class=\"w-full\"\n [ngModel]=\"uploadValue()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [shape]=\"'card'\"\n [multiple]=\"isMultiple()\"\n [readonly]=\"true\"\n [endPoint]=\"endPoint()\"\n [accept]=\"acceptTypes()\"\n [context]=\"context()\"\n />\n }\n } @else {\n <span class=\"text-sm font-semibold\">{{ empty }}</span>\n }\n</mt-entity-field>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: UploadField, selector: "mt-upload-field", inputs: ["label", "title", "description", "endPoint", "size", "userImgClass", "shape", "multiple", "accept", "isDragging", "fileSizeLimit", "readonly", "context"], outputs: ["isDraggingChange", "onChange"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: EntityField, selector: "mt-entity-field", inputs: ["label", "labelIconName", "configuration", "gap"] }] });
724
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityAttachment, isStandalone: true, selector: "mt-entity-attachment", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, endPoint: { classPropertyName: "endPoint", publicName: "endPoint", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mt-entity-field\r\n [label]=\"displayName()\"\r\n [configuration]=\"data()?.configuration\"\r\n gap=\"relaxed\"\r\n>\r\n @if (hasAttachments()) {\r\n @if (shape() === \"compact\") {\r\n <div class=\"flex flex-wrap items-center gap-2\">\r\n @for (\r\n attachment of attachments();\r\n track attachmentTrackBy($index, attachment)\r\n ) {\r\n <mt-button\r\n iconPos=\"top\"\r\n size=\"small\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [icon]=\"attachmentActionIcon($index, attachment)\"\r\n [tooltip]=\"attachmentTooltip(attachment)\"\r\n styleClass=\"h-9! w-9! rounded-lg! transition-all duration-200 hover:scale-105 hover:border-primary-500! hover:text-primary-600! hover:bg-primary-50!\"\r\n (onClick)=\"onCompactAttachmentClick($event, attachment)\"\r\n (mouseenter)=\"\r\n hoveredAttachmentKey.set(attachmentTrackBy($index, attachment))\r\n \"\r\n (mouseleave)=\"hoveredAttachmentKey.set(null)\"\r\n (onFocus)=\"\r\n hoveredAttachmentKey.set(attachmentTrackBy($index, attachment))\r\n \"\r\n (onBlur)=\"hoveredAttachmentKey.set(null)\"\r\n />\r\n }\r\n </div>\r\n } @else {\r\n <mt-upload-field\r\n class=\"w-full\"\r\n [ngModel]=\"uploadValue()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [shape]=\"'card'\"\r\n [multiple]=\"isMultiple()\"\r\n [readonly]=\"true\"\r\n [endPoint]=\"endPoint()\"\r\n [accept]=\"acceptTypes()\"\r\n [context]=\"context()\"\r\n />\r\n }\r\n } @else {\r\n <span class=\"text-sm font-semibold\">{{ empty }}</span>\r\n }\r\n</mt-entity-field>\r\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: UploadField, selector: "mt-upload-field", inputs: ["label", "title", "description", "endPoint", "size", "userImgClass", "shape", "multiple", "accept", "isDragging", "fileSizeLimit", "readonly", "context"], outputs: ["isDraggingChange", "onChange"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: EntityField, selector: "mt-entity-field", inputs: ["label", "labelIconName", "configuration", "gap"] }] });
725
725
  }
726
726
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityAttachment, decorators: [{
727
727
  type: Component,
728
- args: [{ selector: 'mt-entity-attachment', standalone: true, imports: [FormsModule, UploadField, Button, EntityField], template: "<mt-entity-field\n [label]=\"displayName()\"\n [configuration]=\"data()?.configuration\"\n gap=\"relaxed\"\n>\n @if (hasAttachments()) {\n @if (shape() === \"compact\") {\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (\n attachment of attachments();\n track attachmentTrackBy($index, attachment)\n ) {\n <mt-button\n iconPos=\"top\"\n size=\"small\"\n severity=\"secondary\"\n variant=\"outlined\"\n [icon]=\"attachmentActionIcon($index, attachment)\"\n [tooltip]=\"attachmentTooltip(attachment)\"\n styleClass=\"h-9! w-9! rounded-lg! transition-all duration-200 hover:scale-105 hover:border-primary-500! hover:text-primary-600! hover:bg-primary-50!\"\n (onClick)=\"onCompactAttachmentClick($event, attachment)\"\n (mouseenter)=\"\n hoveredAttachmentKey.set(attachmentTrackBy($index, attachment))\n \"\n (mouseleave)=\"hoveredAttachmentKey.set(null)\"\n (onFocus)=\"\n hoveredAttachmentKey.set(attachmentTrackBy($index, attachment))\n \"\n (onBlur)=\"hoveredAttachmentKey.set(null)\"\n />\n }\n </div>\n } @else {\n <mt-upload-field\n class=\"w-full\"\n [ngModel]=\"uploadValue()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [shape]=\"'card'\"\n [multiple]=\"isMultiple()\"\n [readonly]=\"true\"\n [endPoint]=\"endPoint()\"\n [accept]=\"acceptTypes()\"\n [context]=\"context()\"\n />\n }\n } @else {\n <span class=\"text-sm font-semibold\">{{ empty }}</span>\n }\n</mt-entity-field>\n" }]
728
+ args: [{ selector: 'mt-entity-attachment', standalone: true, imports: [FormsModule, UploadField, Button, EntityField], template: "<mt-entity-field\r\n [label]=\"displayName()\"\r\n [configuration]=\"data()?.configuration\"\r\n gap=\"relaxed\"\r\n>\r\n @if (hasAttachments()) {\r\n @if (shape() === \"compact\") {\r\n <div class=\"flex flex-wrap items-center gap-2\">\r\n @for (\r\n attachment of attachments();\r\n track attachmentTrackBy($index, attachment)\r\n ) {\r\n <mt-button\r\n iconPos=\"top\"\r\n size=\"small\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [icon]=\"attachmentActionIcon($index, attachment)\"\r\n [tooltip]=\"attachmentTooltip(attachment)\"\r\n styleClass=\"h-9! w-9! rounded-lg! transition-all duration-200 hover:scale-105 hover:border-primary-500! hover:text-primary-600! hover:bg-primary-50!\"\r\n (onClick)=\"onCompactAttachmentClick($event, attachment)\"\r\n (mouseenter)=\"\r\n hoveredAttachmentKey.set(attachmentTrackBy($index, attachment))\r\n \"\r\n (mouseleave)=\"hoveredAttachmentKey.set(null)\"\r\n (onFocus)=\"\r\n hoveredAttachmentKey.set(attachmentTrackBy($index, attachment))\r\n \"\r\n (onBlur)=\"hoveredAttachmentKey.set(null)\"\r\n />\r\n }\r\n </div>\r\n } @else {\r\n <mt-upload-field\r\n class=\"w-full\"\r\n [ngModel]=\"uploadValue()\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [shape]=\"'card'\"\r\n [multiple]=\"isMultiple()\"\r\n [readonly]=\"true\"\r\n [endPoint]=\"endPoint()\"\r\n [accept]=\"acceptTypes()\"\r\n [context]=\"context()\"\r\n />\r\n }\r\n } @else {\r\n <span class=\"text-sm font-semibold\">{{ empty }}</span>\r\n }\r\n</mt-entity-field>\r\n" }]
729
729
  }], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], endPoint: [{ type: i0.Input, args: [{ isSignal: true, alias: "endPoint", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "context", required: false }] }] } });
730
730
 
731
731
  class EntityLocation {
@@ -752,11 +752,11 @@ class EntityLocation {
752
752
  return `https://www.google.com/maps/?q=${encodeURIComponent(`${lat},${lon}`)}`;
753
753
  }, ...(ngDevMode ? [{ debugName: "mapsUrl" }] : /* istanbul ignore next */ []));
754
754
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityLocation, deps: [], target: i0.ɵɵFactoryTarget.Component });
755
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityLocation, isStandalone: true, selector: "mt-entity-location", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mt-entity-field\n [label]=\"displayName()\"\n [labelIconName]=\"'map.marker-pin-01'\"\n [configuration]=\"data()?.configuration\"\n gap=\"normal\"\n>\n @if (mapsUrl()) {\n <a\n [href]=\"mapsUrl()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"flex min-w-0 max-w-full items-center gap-1.5 text-sm font-semibold text-primary-600 hover:text-primary-700\"\n mtTruncateTooltip\n tooltipPosition=\"top\"\n >\n <mt-icon icon=\"map.marker-pin-01\" size=\"sm\" class=\"shrink-0\" />\n <span class=\"min-w-0 truncate\">{{ displayValue() }}</span>\n </a>\n } @else {\n <div\n class=\"min-w-0 max-w-full truncate text-sm font-semibold\"\n mtTruncateTooltip\n tooltipPosition=\"top\"\n >\n {{ displayValue() }}\n </div>\n }\n\n @if (coordinates()) {\n <div class=\"min-w-0 truncate text-xs text-gray-500\">\n {{ coordinates() }}\n </div>\n }\n</mt-entity-field>\n", dependencies: [{ kind: "component", type: EntityField, selector: "mt-entity-field", inputs: ["label", "labelIconName", "configuration", "gap"] }, { kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "directive", type: TruncateTooltip, selector: "[mtTruncateTooltip]" }] });
755
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityLocation, isStandalone: true, selector: "mt-entity-location", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mt-entity-field\r\n [label]=\"displayName()\"\r\n [labelIconName]=\"'map.marker-pin-01'\"\r\n [configuration]=\"data()?.configuration\"\r\n gap=\"normal\"\r\n>\r\n @if (mapsUrl()) {\r\n <a\r\n [href]=\"mapsUrl()\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n class=\"flex min-w-0 max-w-full items-center gap-1.5 text-sm font-semibold text-primary-600 hover:text-primary-700\"\r\n mtTruncateTooltip\r\n tooltipPosition=\"top\"\r\n >\r\n <mt-icon icon=\"map.marker-pin-01\" size=\"sm\" class=\"shrink-0\" />\r\n <span class=\"min-w-0 truncate\">{{ displayValue() }}</span>\r\n </a>\r\n } @else {\r\n <div\r\n class=\"min-w-0 max-w-full truncate text-sm font-semibold\"\r\n mtTruncateTooltip\r\n tooltipPosition=\"top\"\r\n >\r\n {{ displayValue() }}\r\n </div>\r\n }\r\n\r\n @if (coordinates()) {\r\n <div class=\"min-w-0 truncate text-xs text-gray-500\">\r\n {{ coordinates() }}\r\n </div>\r\n }\r\n</mt-entity-field>\r\n", dependencies: [{ kind: "component", type: EntityField, selector: "mt-entity-field", inputs: ["label", "labelIconName", "configuration", "gap"] }, { kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "directive", type: TruncateTooltip, selector: "[mtTruncateTooltip]" }] });
756
756
  }
757
757
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityLocation, decorators: [{
758
758
  type: Component,
759
- args: [{ selector: 'mt-entity-location', imports: [EntityField, Icon, TruncateTooltip], template: "<mt-entity-field\n [label]=\"displayName()\"\n [labelIconName]=\"'map.marker-pin-01'\"\n [configuration]=\"data()?.configuration\"\n gap=\"normal\"\n>\n @if (mapsUrl()) {\n <a\n [href]=\"mapsUrl()\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"flex min-w-0 max-w-full items-center gap-1.5 text-sm font-semibold text-primary-600 hover:text-primary-700\"\n mtTruncateTooltip\n tooltipPosition=\"top\"\n >\n <mt-icon icon=\"map.marker-pin-01\" size=\"sm\" class=\"shrink-0\" />\n <span class=\"min-w-0 truncate\">{{ displayValue() }}</span>\n </a>\n } @else {\n <div\n class=\"min-w-0 max-w-full truncate text-sm font-semibold\"\n mtTruncateTooltip\n tooltipPosition=\"top\"\n >\n {{ displayValue() }}\n </div>\n }\n\n @if (coordinates()) {\n <div class=\"min-w-0 truncate text-xs text-gray-500\">\n {{ coordinates() }}\n </div>\n }\n</mt-entity-field>\n" }]
759
+ args: [{ selector: 'mt-entity-location', imports: [EntityField, Icon, TruncateTooltip], template: "<mt-entity-field\r\n [label]=\"displayName()\"\r\n [labelIconName]=\"'map.marker-pin-01'\"\r\n [configuration]=\"data()?.configuration\"\r\n gap=\"normal\"\r\n>\r\n @if (mapsUrl()) {\r\n <a\r\n [href]=\"mapsUrl()\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n class=\"flex min-w-0 max-w-full items-center gap-1.5 text-sm font-semibold text-primary-600 hover:text-primary-700\"\r\n mtTruncateTooltip\r\n tooltipPosition=\"top\"\r\n >\r\n <mt-icon icon=\"map.marker-pin-01\" size=\"sm\" class=\"shrink-0\" />\r\n <span class=\"min-w-0 truncate\">{{ displayValue() }}</span>\r\n </a>\r\n } @else {\r\n <div\r\n class=\"min-w-0 max-w-full truncate text-sm font-semibold\"\r\n mtTruncateTooltip\r\n tooltipPosition=\"top\"\r\n >\r\n {{ displayValue() }}\r\n </div>\r\n }\r\n\r\n @if (coordinates()) {\r\n <div class=\"min-w-0 truncate text-xs text-gray-500\">\r\n {{ coordinates() }}\r\n </div>\r\n }\r\n</mt-entity-field>\r\n" }]
760
760
  }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }] } });
761
761
  function normalizeEntityLocation(value) {
762
762
  if (value === null || value === undefined || value === '') {
@@ -1027,7 +1027,7 @@ class EntityPreviewBody {
1027
1027
  return viewType === 'LookupMatrix' ? 'Lookup' : viewType;
1028
1028
  }, ...(ngDevMode ? [{ debugName: "previewType" }] : /* istanbul ignore next */ []));
1029
1029
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityPreviewBody, deps: [], target: i0.ɵɵFactoryTarget.Component });
1030
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityPreviewBody, isStandalone: true, selector: "mt-entity-preview-body", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, attachmentShape: { classPropertyName: "attachmentShape", publicName: "attachmentShape", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "w-full" }, ngImport: i0, template: "@switch (previewType()) {\n @case (\"Text\") {\n <mt-entity-text [data]=\"data()\" />\n }\n @case (\"LongText\") {\n <mt-entity-long-text [data]=\"data()\" />\n }\n @case (\"Date\") {\n <mt-entity-date [data]=\"data()\" />\n }\n @case (\"DateTime\") {\n <mt-entity-date [data]=\"data()\" [viewType]=\"'DateTime'\" />\n }\n @case (\"User\") {\n <mt-entity-user [data]=\"data()\" />\n }\n @case (\"Percentage\") {\n <mt-entity-percentage [data]=\"data()\" />\n }\n @case (\"Currency\") {\n <mt-entity-currency [data]=\"data()\" />\n }\n @case (\"Number\") {\n <mt-entity-text [data]=\"data()\" />\n }\n @case (\"Checkbox\") {\n <mt-entity-checkbox [data]=\"data()\" />\n }\n @case (\"Lookup\") {\n <mt-entity-lookup [data]=\"data()\" />\n }\n @case (\"Status\") {\n <mt-entity-status [data]=\"data()\" />\n }\n @case (\"Attachment\") {\n <mt-entity-attachment [data]=\"data()\" [shape]=\"attachmentShape()\" />\n }\n @case (\"Location\") {\n <mt-entity-location [data]=\"data()\" />\n }\n @case (\"LeafDetails\") {\n <mt-entity-leaf-details [data]=\"data()\" />\n }\n @default {\n <mt-entity-text [data]=\"data()\" />\n }\n}\n", dependencies: [{ kind: "component", type: EntityText, selector: "mt-entity-text", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityLongText, selector: "mt-entity-long-text", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityDate, selector: "mt-entity-date", inputs: ["data", "name", "value", "viewType"] }, { kind: "component", type: EntityUser, selector: "mt-entity-user", inputs: ["data"] }, { kind: "component", type: EntityPercentage, selector: "mt-entity-percentage", inputs: ["data", "name", "value", "rawValue"] }, { kind: "component", type: EntityCurrency, selector: "mt-entity-currency", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityCheckbox, selector: "mt-entity-checkbox", inputs: ["data", "name", "value", "rawValue"] }, { kind: "component", type: EntityLookup, selector: "mt-entity-lookup", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityAttachment, selector: "mt-entity-attachment", inputs: ["data", "name", "shape", "value", "endPoint", "context"] }, { kind: "component", type: EntityStatus, selector: "mt-entity-status", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityLeafDetails, selector: "mt-entity-leaf-details", inputs: ["data"] }, { kind: "component", type: EntityLocation, selector: "mt-entity-location", inputs: ["data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1030
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityPreviewBody, isStandalone: true, selector: "mt-entity-preview-body", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, attachmentShape: { classPropertyName: "attachmentShape", publicName: "attachmentShape", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "w-full" }, ngImport: i0, template: "@switch (previewType()) {\r\n @case (\"Text\") {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n @case (\"LongText\") {\r\n <mt-entity-long-text [data]=\"data()\" />\r\n }\r\n @case (\"Date\") {\r\n <mt-entity-date [data]=\"data()\" />\r\n }\r\n @case (\"DateTime\") {\r\n <mt-entity-date [data]=\"data()\" [viewType]=\"'DateTime'\" />\r\n }\r\n @case (\"User\") {\r\n <mt-entity-user [data]=\"data()\" />\r\n }\r\n @case (\"Percentage\") {\r\n <mt-entity-percentage [data]=\"data()\" />\r\n }\r\n @case (\"Currency\") {\r\n <mt-entity-currency [data]=\"data()\" />\r\n }\r\n @case (\"Number\") {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n @case (\"Checkbox\") {\r\n <mt-entity-checkbox [data]=\"data()\" />\r\n }\r\n @case (\"Lookup\") {\r\n <mt-entity-lookup [data]=\"data()\" />\r\n }\r\n @case (\"Status\") {\r\n <mt-entity-status [data]=\"data()\" />\r\n }\r\n @case (\"Attachment\") {\r\n <mt-entity-attachment [data]=\"data()\" [shape]=\"attachmentShape()\" />\r\n }\r\n @case (\"Location\") {\r\n <mt-entity-location [data]=\"data()\" />\r\n }\r\n @case (\"LeafDetails\") {\r\n <mt-entity-leaf-details [data]=\"data()\" />\r\n }\r\n @default {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n}\r\n", dependencies: [{ kind: "component", type: EntityText, selector: "mt-entity-text", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityLongText, selector: "mt-entity-long-text", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityDate, selector: "mt-entity-date", inputs: ["data", "name", "value", "viewType"] }, { kind: "component", type: EntityUser, selector: "mt-entity-user", inputs: ["data"] }, { kind: "component", type: EntityPercentage, selector: "mt-entity-percentage", inputs: ["data", "name", "value", "rawValue"] }, { kind: "component", type: EntityCurrency, selector: "mt-entity-currency", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityCheckbox, selector: "mt-entity-checkbox", inputs: ["data", "name", "value", "rawValue"] }, { kind: "component", type: EntityLookup, selector: "mt-entity-lookup", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityAttachment, selector: "mt-entity-attachment", inputs: ["data", "name", "shape", "value", "endPoint", "context"] }, { kind: "component", type: EntityStatus, selector: "mt-entity-status", inputs: ["data", "name", "value"] }, { kind: "component", type: EntityLeafDetails, selector: "mt-entity-leaf-details", inputs: ["data"] }, { kind: "component", type: EntityLocation, selector: "mt-entity-location", inputs: ["data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1031
1031
  }
1032
1032
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityPreviewBody, decorators: [{
1033
1033
  type: Component,
@@ -1046,7 +1046,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
1046
1046
  EntityLocation,
1047
1047
  ], host: {
1048
1048
  class: 'w-full',
1049
- }, template: "@switch (previewType()) {\n @case (\"Text\") {\n <mt-entity-text [data]=\"data()\" />\n }\n @case (\"LongText\") {\n <mt-entity-long-text [data]=\"data()\" />\n }\n @case (\"Date\") {\n <mt-entity-date [data]=\"data()\" />\n }\n @case (\"DateTime\") {\n <mt-entity-date [data]=\"data()\" [viewType]=\"'DateTime'\" />\n }\n @case (\"User\") {\n <mt-entity-user [data]=\"data()\" />\n }\n @case (\"Percentage\") {\n <mt-entity-percentage [data]=\"data()\" />\n }\n @case (\"Currency\") {\n <mt-entity-currency [data]=\"data()\" />\n }\n @case (\"Number\") {\n <mt-entity-text [data]=\"data()\" />\n }\n @case (\"Checkbox\") {\n <mt-entity-checkbox [data]=\"data()\" />\n }\n @case (\"Lookup\") {\n <mt-entity-lookup [data]=\"data()\" />\n }\n @case (\"Status\") {\n <mt-entity-status [data]=\"data()\" />\n }\n @case (\"Attachment\") {\n <mt-entity-attachment [data]=\"data()\" [shape]=\"attachmentShape()\" />\n }\n @case (\"Location\") {\n <mt-entity-location [data]=\"data()\" />\n }\n @case (\"LeafDetails\") {\n <mt-entity-leaf-details [data]=\"data()\" />\n }\n @default {\n <mt-entity-text [data]=\"data()\" />\n }\n}\n" }]
1049
+ }, template: "@switch (previewType()) {\r\n @case (\"Text\") {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n @case (\"LongText\") {\r\n <mt-entity-long-text [data]=\"data()\" />\r\n }\r\n @case (\"Date\") {\r\n <mt-entity-date [data]=\"data()\" />\r\n }\r\n @case (\"DateTime\") {\r\n <mt-entity-date [data]=\"data()\" [viewType]=\"'DateTime'\" />\r\n }\r\n @case (\"User\") {\r\n <mt-entity-user [data]=\"data()\" />\r\n }\r\n @case (\"Percentage\") {\r\n <mt-entity-percentage [data]=\"data()\" />\r\n }\r\n @case (\"Currency\") {\r\n <mt-entity-currency [data]=\"data()\" />\r\n }\r\n @case (\"Number\") {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n @case (\"Checkbox\") {\r\n <mt-entity-checkbox [data]=\"data()\" />\r\n }\r\n @case (\"Lookup\") {\r\n <mt-entity-lookup [data]=\"data()\" />\r\n }\r\n @case (\"Status\") {\r\n <mt-entity-status [data]=\"data()\" />\r\n }\r\n @case (\"Attachment\") {\r\n <mt-entity-attachment [data]=\"data()\" [shape]=\"attachmentShape()\" />\r\n }\r\n @case (\"Location\") {\r\n <mt-entity-location [data]=\"data()\" />\r\n }\r\n @case (\"LeafDetails\") {\r\n <mt-entity-leaf-details [data]=\"data()\" />\r\n }\r\n @default {\r\n <mt-entity-text [data]=\"data()\" />\r\n }\r\n}\r\n" }]
1050
1050
  }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], attachmentShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachmentShape", required: false }] }] } });
1051
1051
 
1052
1052
  class ComparisonValue {
@@ -1071,13 +1071,13 @@ class ComparisonValue {
1071
1071
  };
1072
1072
  }
1073
1073
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ComparisonValue, deps: [], target: i0.ɵɵFactoryTarget.Component });
1074
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ComparisonValue, isStandalone: true, selector: "mt-comparison-value", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "block w-full" }, ngImport: i0, template: "@if (comparison(); as cmp) {\n <div class=\"flex w-full min-w-0 items-stretch gap-3\">\n <div\n class=\"flex min-w-0 flex-1 flex-col gap-1 rounded-md border border-surface-200 bg-surface-50 px-3 py-2\"\n >\n <span class=\"text-xs font-medium uppercase tracking-wide text-muted-color\"\n >Before</span\n >\n @if (oldEntity(); as old) {\n <mt-entity-preview-body [data]=\"old\" />\n } @else {\n <span class=\"text-sm text-muted-color\">_</span>\n }\n </div>\n <div class=\"flex shrink-0 items-center text-muted-color\" aria-hidden=\"true\">\n &rarr;\n </div>\n <div\n class=\"flex min-w-0 flex-1 flex-col gap-1 rounded-md border border-primary-200 bg-primary-50 px-3 py-2\"\n >\n <span class=\"text-xs font-medium uppercase tracking-wide text-primary-600\"\n >After</span\n >\n @if (newEntity(); as next) {\n <mt-entity-preview-body [data]=\"next\" />\n } @else {\n <span class=\"text-sm text-muted-color\">_</span>\n }\n </div>\n </div>\n}\n", dependencies: [{ kind: "component", type: EntityPreviewBody, selector: "mt-entity-preview-body", inputs: ["data", "attachmentShape"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1074
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ComparisonValue, isStandalone: true, selector: "mt-comparison-value", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "block w-full" }, ngImport: i0, template: "@if (comparison(); as cmp) {\r\n <div class=\"flex w-full min-w-0 items-stretch gap-3\">\r\n <div\r\n class=\"flex min-w-0 flex-1 flex-col gap-1 rounded-md border border-surface-200 bg-surface-50 px-3 py-2\"\r\n >\r\n <span class=\"text-xs font-medium uppercase tracking-wide text-muted-color\"\r\n >Before</span\r\n >\r\n @if (oldEntity(); as old) {\r\n <mt-entity-preview-body [data]=\"old\" />\r\n } @else {\r\n <span class=\"text-sm text-muted-color\">_</span>\r\n }\r\n </div>\r\n <div class=\"flex shrink-0 items-center text-muted-color\" aria-hidden=\"true\">\r\n &rarr;\r\n </div>\r\n <div\r\n class=\"flex min-w-0 flex-1 flex-col gap-1 rounded-md border border-primary-200 bg-primary-50 px-3 py-2\"\r\n >\r\n <span class=\"text-xs font-medium uppercase tracking-wide text-primary-600\"\r\n >After</span\r\n >\r\n @if (newEntity(); as next) {\r\n <mt-entity-preview-body [data]=\"next\" />\r\n } @else {\r\n <span class=\"text-sm text-muted-color\">_</span>\r\n }\r\n </div>\r\n </div>\r\n}\r\n", dependencies: [{ kind: "component", type: EntityPreviewBody, selector: "mt-entity-preview-body", inputs: ["data", "attachmentShape"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1075
1075
  }
1076
1076
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ComparisonValue, decorators: [{
1077
1077
  type: Component,
1078
1078
  args: [{ selector: 'mt-comparison-value', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [EntityPreviewBody], host: {
1079
1079
  class: 'block w-full',
1080
- }, template: "@if (comparison(); as cmp) {\n <div class=\"flex w-full min-w-0 items-stretch gap-3\">\n <div\n class=\"flex min-w-0 flex-1 flex-col gap-1 rounded-md border border-surface-200 bg-surface-50 px-3 py-2\"\n >\n <span class=\"text-xs font-medium uppercase tracking-wide text-muted-color\"\n >Before</span\n >\n @if (oldEntity(); as old) {\n <mt-entity-preview-body [data]=\"old\" />\n } @else {\n <span class=\"text-sm text-muted-color\">_</span>\n }\n </div>\n <div class=\"flex shrink-0 items-center text-muted-color\" aria-hidden=\"true\">\n &rarr;\n </div>\n <div\n class=\"flex min-w-0 flex-1 flex-col gap-1 rounded-md border border-primary-200 bg-primary-50 px-3 py-2\"\n >\n <span class=\"text-xs font-medium uppercase tracking-wide text-primary-600\"\n >After</span\n >\n @if (newEntity(); as next) {\n <mt-entity-preview-body [data]=\"next\" />\n } @else {\n <span class=\"text-sm text-muted-color\">_</span>\n }\n </div>\n </div>\n}\n" }]
1080
+ }, template: "@if (comparison(); as cmp) {\r\n <div class=\"flex w-full min-w-0 items-stretch gap-3\">\r\n <div\r\n class=\"flex min-w-0 flex-1 flex-col gap-1 rounded-md border border-surface-200 bg-surface-50 px-3 py-2\"\r\n >\r\n <span class=\"text-xs font-medium uppercase tracking-wide text-muted-color\"\r\n >Before</span\r\n >\r\n @if (oldEntity(); as old) {\r\n <mt-entity-preview-body [data]=\"old\" />\r\n } @else {\r\n <span class=\"text-sm text-muted-color\">_</span>\r\n }\r\n </div>\r\n <div class=\"flex shrink-0 items-center text-muted-color\" aria-hidden=\"true\">\r\n &rarr;\r\n </div>\r\n <div\r\n class=\"flex min-w-0 flex-1 flex-col gap-1 rounded-md border border-primary-200 bg-primary-50 px-3 py-2\"\r\n >\r\n <span class=\"text-xs font-medium uppercase tracking-wide text-primary-600\"\r\n >After</span\r\n >\r\n @if (newEntity(); as next) {\r\n <mt-entity-preview-body [data]=\"next\" />\r\n } @else {\r\n <span class=\"text-sm text-muted-color\">_</span>\r\n }\r\n </div>\r\n </div>\r\n}\r\n" }]
1081
1081
  }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }] } });
1082
1082
 
1083
1083
  const OPERATION_BADGE_KEYS = {
@@ -1123,13 +1123,13 @@ class ComparisonEntityList {
1123
1123
  return row.oldValues.find((v) => v.propertyKey === propertyKey);
1124
1124
  }
1125
1125
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ComparisonEntityList, deps: [], target: i0.ɵɵFactoryTarget.Component });
1126
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ComparisonEntityList, isStandalone: true, selector: "mt-comparison-entity-list", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "block w-full" }, ngImport: i0, template: "@if (comparison(); as cmp) {\n <div class=\"flex w-full min-w-0 flex-col gap-2\">\n @if (label()) {\n <div class=\"flex items-baseline justify-between\">\n <span class=\"text-sm font-medium text-color\">{{ label() }}</span>\n @if (targetModuleKey()) {\n <span class=\"text-xs text-muted-color\">{{ targetModuleKey() }}</span>\n }\n </div>\n }\n @if (rows().length === 0) {\n <div class=\"text-sm text-muted-color\">_</div>\n } @else {\n <ul class=\"flex flex-col gap-2\">\n @for (row of rows(); track rowId($index, row)) {\n <li\n class=\"flex flex-col gap-2 rounded-md border border-surface-200 bg-surface-50 px-3 py-2\"\n >\n <div class=\"flex items-center justify-between gap-2\">\n <span\n class=\"inline-flex items-center rounded px-2 py-0.5 text-xs font-medium\"\n [class]=\"badgeFor(row.operation).classes\"\n >\n {{ badgeFor(row.operation).label }}\n </span>\n <span class=\"text-xs text-muted-color\">#{{ row.entityId }}</span>\n </div>\n\n @switch (row.operation) {\n @case (\"CreateRecord\") {\n <dl class=\"grid grid-cols-1 gap-1 sm:grid-cols-2\">\n @for (f of row.newValues; track f.propertyKey) {\n <div class=\"flex min-w-0 flex-col\">\n <dt class=\"text-xs text-muted-color\">{{ f.label }}</dt>\n <dd class=\"truncate text-sm text-color\">\n {{ displayField(f.value, f.display) }}\n </dd>\n </div>\n }\n </dl>\n }\n @case (\"DeleteRecord\") {\n <dl class=\"grid grid-cols-1 gap-1 sm:grid-cols-2\">\n @for (f of row.oldValues; track f.propertyKey) {\n <div class=\"flex min-w-0 flex-col\">\n <dt class=\"text-xs text-muted-color\">{{ f.label }}</dt>\n <dd class=\"truncate text-sm text-color line-through\">\n {{ displayField(f.value, f.display) }}\n </dd>\n </div>\n }\n </dl>\n }\n @default {\n <dl class=\"flex flex-col gap-1\">\n @for (f of row.newValues; track f.propertyKey) {\n <div class=\"flex min-w-0 flex-col\">\n <dt class=\"text-xs text-muted-color\">{{ f.label }}</dt>\n <dd class=\"flex min-w-0 flex-wrap items-center gap-2\">\n <span\n class=\"max-w-[40%] truncate text-sm text-muted-color line-through\"\n >\n {{\n displayField(\n $any(oldField(row, f.propertyKey))?.value,\n $any(oldField(row, f.propertyKey))?.display\n )\n }}\n </span>\n <span class=\"text-muted-color\" aria-hidden=\"true\"\n >&rarr;</span\n >\n <span class=\"max-w-[40%] truncate text-sm text-color\">\n {{ displayField(f.value, f.display) }}\n </span>\n </dd>\n </div>\n }\n </dl>\n }\n }\n </li>\n }\n </ul>\n }\n </div>\n}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
1126
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ComparisonEntityList, isStandalone: true, selector: "mt-comparison-entity-list", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "block w-full" }, ngImport: i0, template: "@if (comparison(); as cmp) {\r\n <div class=\"flex w-full min-w-0 flex-col gap-2\">\r\n @if (label()) {\r\n <div class=\"flex items-baseline justify-between\">\r\n <span class=\"text-sm font-medium text-color\">{{ label() }}</span>\r\n @if (targetModuleKey()) {\r\n <span class=\"text-xs text-muted-color\">{{ targetModuleKey() }}</span>\r\n }\r\n </div>\r\n }\r\n @if (rows().length === 0) {\r\n <div class=\"text-sm text-muted-color\">_</div>\r\n } @else {\r\n <ul class=\"flex flex-col gap-2\">\r\n @for (row of rows(); track rowId($index, row)) {\r\n <li\r\n class=\"flex flex-col gap-2 rounded-md border border-surface-200 bg-surface-50 px-3 py-2\"\r\n >\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <span\r\n class=\"inline-flex items-center rounded px-2 py-0.5 text-xs font-medium\"\r\n [class]=\"badgeFor(row.operation).classes\"\r\n >\r\n {{ badgeFor(row.operation).label }}\r\n </span>\r\n <span class=\"text-xs text-muted-color\">#{{ row.entityId }}</span>\r\n </div>\r\n\r\n @switch (row.operation) {\r\n @case (\"CreateRecord\") {\r\n <dl class=\"grid grid-cols-1 gap-1 sm:grid-cols-2\">\r\n @for (f of row.newValues; track f.propertyKey) {\r\n <div class=\"flex min-w-0 flex-col\">\r\n <dt class=\"text-xs text-muted-color\">{{ f.label }}</dt>\r\n <dd class=\"truncate text-sm text-color\">\r\n {{ displayField(f.value, f.display) }}\r\n </dd>\r\n </div>\r\n }\r\n </dl>\r\n }\r\n @case (\"DeleteRecord\") {\r\n <dl class=\"grid grid-cols-1 gap-1 sm:grid-cols-2\">\r\n @for (f of row.oldValues; track f.propertyKey) {\r\n <div class=\"flex min-w-0 flex-col\">\r\n <dt class=\"text-xs text-muted-color\">{{ f.label }}</dt>\r\n <dd class=\"truncate text-sm text-color line-through\">\r\n {{ displayField(f.value, f.display) }}\r\n </dd>\r\n </div>\r\n }\r\n </dl>\r\n }\r\n @default {\r\n <dl class=\"flex flex-col gap-1\">\r\n @for (f of row.newValues; track f.propertyKey) {\r\n <div class=\"flex min-w-0 flex-col\">\r\n <dt class=\"text-xs text-muted-color\">{{ f.label }}</dt>\r\n <dd class=\"flex min-w-0 flex-wrap items-center gap-2\">\r\n <span\r\n class=\"max-w-[40%] truncate text-sm text-muted-color line-through\"\r\n >\r\n {{\r\n displayField(\r\n $any(oldField(row, f.propertyKey))?.value,\r\n $any(oldField(row, f.propertyKey))?.display\r\n )\r\n }}\r\n </span>\r\n <span class=\"text-muted-color\" aria-hidden=\"true\"\r\n >&rarr;</span\r\n >\r\n <span class=\"max-w-[40%] truncate text-sm text-color\">\r\n {{ displayField(f.value, f.display) }}\r\n </span>\r\n </dd>\r\n </div>\r\n }\r\n </dl>\r\n }\r\n }\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n}\r\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
1127
1127
  }
1128
1128
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ComparisonEntityList, decorators: [{
1129
1129
  type: Component,
1130
1130
  args: [{ selector: 'mt-comparison-entity-list', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [], host: {
1131
1131
  class: 'block w-full',
1132
- }, template: "@if (comparison(); as cmp) {\n <div class=\"flex w-full min-w-0 flex-col gap-2\">\n @if (label()) {\n <div class=\"flex items-baseline justify-between\">\n <span class=\"text-sm font-medium text-color\">{{ label() }}</span>\n @if (targetModuleKey()) {\n <span class=\"text-xs text-muted-color\">{{ targetModuleKey() }}</span>\n }\n </div>\n }\n @if (rows().length === 0) {\n <div class=\"text-sm text-muted-color\">_</div>\n } @else {\n <ul class=\"flex flex-col gap-2\">\n @for (row of rows(); track rowId($index, row)) {\n <li\n class=\"flex flex-col gap-2 rounded-md border border-surface-200 bg-surface-50 px-3 py-2\"\n >\n <div class=\"flex items-center justify-between gap-2\">\n <span\n class=\"inline-flex items-center rounded px-2 py-0.5 text-xs font-medium\"\n [class]=\"badgeFor(row.operation).classes\"\n >\n {{ badgeFor(row.operation).label }}\n </span>\n <span class=\"text-xs text-muted-color\">#{{ row.entityId }}</span>\n </div>\n\n @switch (row.operation) {\n @case (\"CreateRecord\") {\n <dl class=\"grid grid-cols-1 gap-1 sm:grid-cols-2\">\n @for (f of row.newValues; track f.propertyKey) {\n <div class=\"flex min-w-0 flex-col\">\n <dt class=\"text-xs text-muted-color\">{{ f.label }}</dt>\n <dd class=\"truncate text-sm text-color\">\n {{ displayField(f.value, f.display) }}\n </dd>\n </div>\n }\n </dl>\n }\n @case (\"DeleteRecord\") {\n <dl class=\"grid grid-cols-1 gap-1 sm:grid-cols-2\">\n @for (f of row.oldValues; track f.propertyKey) {\n <div class=\"flex min-w-0 flex-col\">\n <dt class=\"text-xs text-muted-color\">{{ f.label }}</dt>\n <dd class=\"truncate text-sm text-color line-through\">\n {{ displayField(f.value, f.display) }}\n </dd>\n </div>\n }\n </dl>\n }\n @default {\n <dl class=\"flex flex-col gap-1\">\n @for (f of row.newValues; track f.propertyKey) {\n <div class=\"flex min-w-0 flex-col\">\n <dt class=\"text-xs text-muted-color\">{{ f.label }}</dt>\n <dd class=\"flex min-w-0 flex-wrap items-center gap-2\">\n <span\n class=\"max-w-[40%] truncate text-sm text-muted-color line-through\"\n >\n {{\n displayField(\n $any(oldField(row, f.propertyKey))?.value,\n $any(oldField(row, f.propertyKey))?.display\n )\n }}\n </span>\n <span class=\"text-muted-color\" aria-hidden=\"true\"\n >&rarr;</span\n >\n <span class=\"max-w-[40%] truncate text-sm text-color\">\n {{ displayField(f.value, f.display) }}\n </span>\n </dd>\n </div>\n }\n </dl>\n }\n }\n </li>\n }\n </ul>\n }\n </div>\n}\n" }]
1132
+ }, template: "@if (comparison(); as cmp) {\r\n <div class=\"flex w-full min-w-0 flex-col gap-2\">\r\n @if (label()) {\r\n <div class=\"flex items-baseline justify-between\">\r\n <span class=\"text-sm font-medium text-color\">{{ label() }}</span>\r\n @if (targetModuleKey()) {\r\n <span class=\"text-xs text-muted-color\">{{ targetModuleKey() }}</span>\r\n }\r\n </div>\r\n }\r\n @if (rows().length === 0) {\r\n <div class=\"text-sm text-muted-color\">_</div>\r\n } @else {\r\n <ul class=\"flex flex-col gap-2\">\r\n @for (row of rows(); track rowId($index, row)) {\r\n <li\r\n class=\"flex flex-col gap-2 rounded-md border border-surface-200 bg-surface-50 px-3 py-2\"\r\n >\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <span\r\n class=\"inline-flex items-center rounded px-2 py-0.5 text-xs font-medium\"\r\n [class]=\"badgeFor(row.operation).classes\"\r\n >\r\n {{ badgeFor(row.operation).label }}\r\n </span>\r\n <span class=\"text-xs text-muted-color\">#{{ row.entityId }}</span>\r\n </div>\r\n\r\n @switch (row.operation) {\r\n @case (\"CreateRecord\") {\r\n <dl class=\"grid grid-cols-1 gap-1 sm:grid-cols-2\">\r\n @for (f of row.newValues; track f.propertyKey) {\r\n <div class=\"flex min-w-0 flex-col\">\r\n <dt class=\"text-xs text-muted-color\">{{ f.label }}</dt>\r\n <dd class=\"truncate text-sm text-color\">\r\n {{ displayField(f.value, f.display) }}\r\n </dd>\r\n </div>\r\n }\r\n </dl>\r\n }\r\n @case (\"DeleteRecord\") {\r\n <dl class=\"grid grid-cols-1 gap-1 sm:grid-cols-2\">\r\n @for (f of row.oldValues; track f.propertyKey) {\r\n <div class=\"flex min-w-0 flex-col\">\r\n <dt class=\"text-xs text-muted-color\">{{ f.label }}</dt>\r\n <dd class=\"truncate text-sm text-color line-through\">\r\n {{ displayField(f.value, f.display) }}\r\n </dd>\r\n </div>\r\n }\r\n </dl>\r\n }\r\n @default {\r\n <dl class=\"flex flex-col gap-1\">\r\n @for (f of row.newValues; track f.propertyKey) {\r\n <div class=\"flex min-w-0 flex-col\">\r\n <dt class=\"text-xs text-muted-color\">{{ f.label }}</dt>\r\n <dd class=\"flex min-w-0 flex-wrap items-center gap-2\">\r\n <span\r\n class=\"max-w-[40%] truncate text-sm text-muted-color line-through\"\r\n >\r\n {{\r\n displayField(\r\n $any(oldField(row, f.propertyKey))?.value,\r\n $any(oldField(row, f.propertyKey))?.display\r\n )\r\n }}\r\n </span>\r\n <span class=\"text-muted-color\" aria-hidden=\"true\"\r\n >&rarr;</span\r\n >\r\n <span class=\"max-w-[40%] truncate text-sm text-color\">\r\n {{ displayField(f.value, f.display) }}\r\n </span>\r\n </dd>\r\n </div>\r\n }\r\n </dl>\r\n }\r\n }\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n}\r\n" }]
1133
1133
  }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }] } });
1134
1134
 
1135
1135
  class EntityPreview {
@@ -1146,13 +1146,13 @@ class EntityPreview {
1146
1146
  return null;
1147
1147
  }, ...(ngDevMode ? [{ debugName: "comparisonKind" }] : /* istanbul ignore next */ []));
1148
1148
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityPreview, deps: [], target: i0.ɵɵFactoryTarget.Component });
1149
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityPreview, isStandalone: true, selector: "mt-entity-preview", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, attachmentShape: { classPropertyName: "attachmentShape", publicName: "attachmentShape", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "w-full" }, ngImport: i0, template: "@switch (comparisonKind()) {\n @case (\"Value\") {\n <mt-comparison-value [data]=\"data()\" />\n }\n @case (\"EntityList\") {\n <mt-comparison-entity-list [data]=\"data()\" />\n }\n @default {\n <mt-entity-preview-body\n [data]=\"data()\"\n [attachmentShape]=\"attachmentShape()\"\n />\n }\n}\n", dependencies: [{ kind: "component", type: EntityPreviewBody, selector: "mt-entity-preview-body", inputs: ["data", "attachmentShape"] }, { kind: "component", type: ComparisonValue, selector: "mt-comparison-value", inputs: ["data"] }, { kind: "component", type: ComparisonEntityList, selector: "mt-comparison-entity-list", inputs: ["data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1149
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntityPreview, isStandalone: true, selector: "mt-entity-preview", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, attachmentShape: { classPropertyName: "attachmentShape", publicName: "attachmentShape", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "w-full" }, ngImport: i0, template: "@switch (comparisonKind()) {\r\n @case (\"Value\") {\r\n <mt-comparison-value [data]=\"data()\" />\r\n }\r\n @case (\"EntityList\") {\r\n <mt-comparison-entity-list [data]=\"data()\" />\r\n }\r\n @default {\r\n <mt-entity-preview-body\r\n [data]=\"data()\"\r\n [attachmentShape]=\"attachmentShape()\"\r\n />\r\n }\r\n}\r\n", dependencies: [{ kind: "component", type: EntityPreviewBody, selector: "mt-entity-preview-body", inputs: ["data", "attachmentShape"] }, { kind: "component", type: ComparisonValue, selector: "mt-comparison-value", inputs: ["data"] }, { kind: "component", type: ComparisonEntityList, selector: "mt-comparison-entity-list", inputs: ["data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1150
1150
  }
1151
1151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntityPreview, decorators: [{
1152
1152
  type: Component,
1153
1153
  args: [{ selector: 'mt-entity-preview', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [EntityPreviewBody, ComparisonValue, ComparisonEntityList], host: {
1154
1154
  class: 'w-full',
1155
- }, template: "@switch (comparisonKind()) {\n @case (\"Value\") {\n <mt-comparison-value [data]=\"data()\" />\n }\n @case (\"EntityList\") {\n <mt-comparison-entity-list [data]=\"data()\" />\n }\n @default {\n <mt-entity-preview-body\n [data]=\"data()\"\n [attachmentShape]=\"attachmentShape()\"\n />\n }\n}\n" }]
1155
+ }, template: "@switch (comparisonKind()) {\r\n @case (\"Value\") {\r\n <mt-comparison-value [data]=\"data()\" />\r\n }\r\n @case (\"EntityList\") {\r\n <mt-comparison-entity-list [data]=\"data()\" />\r\n }\r\n @default {\r\n <mt-entity-preview-body\r\n [data]=\"data()\"\r\n [attachmentShape]=\"attachmentShape()\"\r\n />\r\n }\r\n}\r\n" }]
1156
1156
  }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], attachmentShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachmentShape", required: false }] }] } });
1157
1157
 
1158
1158
  const EMPTY_KEY_SET = new Set();
@@ -1215,11 +1215,11 @@ class EntitiesPreview {
1215
1215
  this.entityClick.emit({ entity, key, source });
1216
1216
  }
1217
1217
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntitiesPreview, deps: [], target: i0.ɵɵFactoryTarget.Component });
1218
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntitiesPreview, isStandalone: true, selector: "mt-entities-preview", inputs: { entities: { classPropertyName: "entities", publicName: "entities", isSignal: true, isRequired: true, transformFunction: null }, attachmentShape: { classPropertyName: "attachmentShape", publicName: "attachmentShape", isSignal: true, isRequired: false, transformFunction: null }, clickableKeys: { classPropertyName: "clickableKeys", publicName: "clickableKeys", isSignal: true, isRequired: false, transformFunction: null }, activeKeys: { classPropertyName: "activeKeys", publicName: "activeKeys", isSignal: true, isRequired: false, transformFunction: null }, clickableTooltip: { classPropertyName: "clickableTooltip", publicName: "clickableTooltip", isSignal: true, isRequired: false, transformFunction: null }, activeTooltip: { classPropertyName: "activeTooltip", publicName: "activeTooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { entityClick: "entityClick" }, ngImport: i0, template: "<div class=\"grid grid-cols-24 gap-x-3 gap-y-5\">\n @for (\n entity of displayEntities();\n track entity.key ?? entity.order ?? $index\n ) {\n <div\n class=\"min-w-0 flex items-center rounded transition-colors\"\n [class.border]=\"entity.configuration?.showBorder\"\n [class.p-3]=\"entity.configuration?.showBorder\"\n [class.border-dashed]=\"entity.configuration?.showBorder\"\n [class.border-gray-200]=\"entity.configuration?.showBorder\"\n [class.rounded-lg]=\"entity.configuration?.showBorder\"\n [class.mt-entity-filterable]=\"isClickable(entity) && !isActive(entity)\"\n [class.mt-entity-filter-active]=\"isClickable(entity) && isActive(entity)\"\n [attr.data-row-click-ignore]=\"isClickable(entity) ? 'true' : null\"\n [attr.title]=\"\n isClickable(entity)\n ? isActive(entity)\n ? activeTooltip()\n : clickableTooltip()\n : null\n \"\n [style.grid-column]=\"getColSpan(entity)\"\n (click)=\"onEntityClick($event, entity)\"\n >\n <mt-entity-preview\n [data]=\"entity\"\n [attachmentShape]=\"attachmentShape()\"\n />\n </div>\n }\n</div>\n", styles: [".mt-entity-filterable{cursor:url(\"data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2314b8a6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 3H2l8 9.46V19l4 2v-8.54L22 3z'/%3E%3C/svg%3E\") 7 3,zoom-in!important}.mt-entity-filter-active{cursor:url(\"data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='%2314b8a6' stroke='%2314b8a6' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 3H2l8 9.46V19l4 2v-8.54L22 3z'/%3E%3C/svg%3E\") 7 3,zoom-out!important}.mt-entity-filterable:hover{background-color:#ccfbf147;outline:1px dashed rgb(20 184 166 / .28);outline-offset:2px}.mt-entity-filter-active{background-color:#ccfbf14d;box-shadow:inset 0 0 0 1.5px #14b8a666,0 0 0 1px #ffffff80}\n"], dependencies: [{ kind: "component", type: EntityPreview, selector: "mt-entity-preview", inputs: ["data", "attachmentShape"] }] });
1218
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: EntitiesPreview, isStandalone: true, selector: "mt-entities-preview", inputs: { entities: { classPropertyName: "entities", publicName: "entities", isSignal: true, isRequired: true, transformFunction: null }, attachmentShape: { classPropertyName: "attachmentShape", publicName: "attachmentShape", isSignal: true, isRequired: false, transformFunction: null }, clickableKeys: { classPropertyName: "clickableKeys", publicName: "clickableKeys", isSignal: true, isRequired: false, transformFunction: null }, activeKeys: { classPropertyName: "activeKeys", publicName: "activeKeys", isSignal: true, isRequired: false, transformFunction: null }, clickableTooltip: { classPropertyName: "clickableTooltip", publicName: "clickableTooltip", isSignal: true, isRequired: false, transformFunction: null }, activeTooltip: { classPropertyName: "activeTooltip", publicName: "activeTooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { entityClick: "entityClick" }, ngImport: i0, template: "<div class=\"grid grid-cols-24 gap-x-3 gap-y-5\">\r\n @for (\r\n entity of displayEntities();\r\n track entity.key ?? entity.order ?? $index\r\n ) {\r\n <div\r\n class=\"min-w-0 flex items-center rounded transition-colors\"\r\n [class.border]=\"entity.configuration?.showBorder\"\r\n [class.p-3]=\"entity.configuration?.showBorder\"\r\n [class.border-dashed]=\"entity.configuration?.showBorder\"\r\n [class.border-gray-200]=\"entity.configuration?.showBorder\"\r\n [class.rounded-lg]=\"entity.configuration?.showBorder\"\r\n [class.mt-entity-filterable]=\"isClickable(entity) && !isActive(entity)\"\r\n [class.mt-entity-filter-active]=\"isClickable(entity) && isActive(entity)\"\r\n [attr.data-row-click-ignore]=\"isClickable(entity) ? 'true' : null\"\r\n [attr.title]=\"\r\n isClickable(entity)\r\n ? isActive(entity)\r\n ? activeTooltip()\r\n : clickableTooltip()\r\n : null\r\n \"\r\n [style.grid-column]=\"getColSpan(entity)\"\r\n (click)=\"onEntityClick($event, entity)\"\r\n >\r\n <mt-entity-preview\r\n [data]=\"entity\"\r\n [attachmentShape]=\"attachmentShape()\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n", styles: [".mt-entity-filterable{cursor:url(\"data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2314b8a6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 3H2l8 9.46V19l4 2v-8.54L22 3z'/%3E%3C/svg%3E\") 7 3,zoom-in!important}.mt-entity-filter-active{cursor:url(\"data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='%2314b8a6' stroke='%2314b8a6' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 3H2l8 9.46V19l4 2v-8.54L22 3z'/%3E%3C/svg%3E\") 7 3,zoom-out!important}.mt-entity-filterable:hover{background-color:#ccfbf147;outline:1px dashed rgb(20 184 166 / .28);outline-offset:2px}.mt-entity-filter-active{background-color:#ccfbf14d;box-shadow:inset 0 0 0 1.5px #14b8a666,0 0 0 1px #ffffff80}\n"], dependencies: [{ kind: "component", type: EntityPreview, selector: "mt-entity-preview", inputs: ["data", "attachmentShape"] }] });
1219
1219
  }
1220
1220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: EntitiesPreview, decorators: [{
1221
1221
  type: Component,
1222
- args: [{ selector: 'mt-entities-preview', standalone: true, imports: [EntityPreview], template: "<div class=\"grid grid-cols-24 gap-x-3 gap-y-5\">\n @for (\n entity of displayEntities();\n track entity.key ?? entity.order ?? $index\n ) {\n <div\n class=\"min-w-0 flex items-center rounded transition-colors\"\n [class.border]=\"entity.configuration?.showBorder\"\n [class.p-3]=\"entity.configuration?.showBorder\"\n [class.border-dashed]=\"entity.configuration?.showBorder\"\n [class.border-gray-200]=\"entity.configuration?.showBorder\"\n [class.rounded-lg]=\"entity.configuration?.showBorder\"\n [class.mt-entity-filterable]=\"isClickable(entity) && !isActive(entity)\"\n [class.mt-entity-filter-active]=\"isClickable(entity) && isActive(entity)\"\n [attr.data-row-click-ignore]=\"isClickable(entity) ? 'true' : null\"\n [attr.title]=\"\n isClickable(entity)\n ? isActive(entity)\n ? activeTooltip()\n : clickableTooltip()\n : null\n \"\n [style.grid-column]=\"getColSpan(entity)\"\n (click)=\"onEntityClick($event, entity)\"\n >\n <mt-entity-preview\n [data]=\"entity\"\n [attachmentShape]=\"attachmentShape()\"\n />\n </div>\n }\n</div>\n", styles: [".mt-entity-filterable{cursor:url(\"data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2314b8a6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 3H2l8 9.46V19l4 2v-8.54L22 3z'/%3E%3C/svg%3E\") 7 3,zoom-in!important}.mt-entity-filter-active{cursor:url(\"data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='%2314b8a6' stroke='%2314b8a6' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 3H2l8 9.46V19l4 2v-8.54L22 3z'/%3E%3C/svg%3E\") 7 3,zoom-out!important}.mt-entity-filterable:hover{background-color:#ccfbf147;outline:1px dashed rgb(20 184 166 / .28);outline-offset:2px}.mt-entity-filter-active{background-color:#ccfbf14d;box-shadow:inset 0 0 0 1.5px #14b8a666,0 0 0 1px #ffffff80}\n"] }]
1222
+ args: [{ selector: 'mt-entities-preview', standalone: true, imports: [EntityPreview], template: "<div class=\"grid grid-cols-24 gap-x-3 gap-y-5\">\r\n @for (\r\n entity of displayEntities();\r\n track entity.key ?? entity.order ?? $index\r\n ) {\r\n <div\r\n class=\"min-w-0 flex items-center rounded transition-colors\"\r\n [class.border]=\"entity.configuration?.showBorder\"\r\n [class.p-3]=\"entity.configuration?.showBorder\"\r\n [class.border-dashed]=\"entity.configuration?.showBorder\"\r\n [class.border-gray-200]=\"entity.configuration?.showBorder\"\r\n [class.rounded-lg]=\"entity.configuration?.showBorder\"\r\n [class.mt-entity-filterable]=\"isClickable(entity) && !isActive(entity)\"\r\n [class.mt-entity-filter-active]=\"isClickable(entity) && isActive(entity)\"\r\n [attr.data-row-click-ignore]=\"isClickable(entity) ? 'true' : null\"\r\n [attr.title]=\"\r\n isClickable(entity)\r\n ? isActive(entity)\r\n ? activeTooltip()\r\n : clickableTooltip()\r\n : null\r\n \"\r\n [style.grid-column]=\"getColSpan(entity)\"\r\n (click)=\"onEntityClick($event, entity)\"\r\n >\r\n <mt-entity-preview\r\n [data]=\"entity\"\r\n [attachmentShape]=\"attachmentShape()\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n", styles: [".mt-entity-filterable{cursor:url(\"data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2314b8a6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 3H2l8 9.46V19l4 2v-8.54L22 3z'/%3E%3C/svg%3E\") 7 3,zoom-in!important}.mt-entity-filter-active{cursor:url(\"data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='%2314b8a6' stroke='%2314b8a6' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 3H2l8 9.46V19l4 2v-8.54L22 3z'/%3E%3C/svg%3E\") 7 3,zoom-out!important}.mt-entity-filterable:hover{background-color:#ccfbf147;outline:1px dashed rgb(20 184 166 / .28);outline-offset:2px}.mt-entity-filter-active{background-color:#ccfbf14d;box-shadow:inset 0 0 0 1.5px #14b8a666,0 0 0 1px #ffffff80}\n"] }]
1223
1223
  }], propDecorators: { entities: [{ type: i0.Input, args: [{ isSignal: true, alias: "entities", required: true }] }], attachmentShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachmentShape", required: false }] }], clickableKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickableKeys", required: false }] }], activeKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeKeys", required: false }] }], clickableTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickableTooltip", required: false }] }], activeTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTooltip", required: false }] }], entityClick: [{ type: i0.Output, args: ["entityClick"] }] } });
1224
1224
 
1225
1225
  /**