@meshmakers/octo-ui 3.4.1490 → 3.5.10

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.
@@ -1 +1 @@
1
- {"version":3,"file":"meshmakers-octo-ui-entity-forms.mjs","sources":["../../../../projects/meshmakers/octo-ui/entity-forms/src/models/entity-form.models.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/entity-forms.messages.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/attribute-path.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/ck-metadata.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/entity-form-parser.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/built-in-default-form.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/ck-type-name.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/entity-form-value-mapper.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/visible-when.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/entity-form-resolver.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/fallback-forms.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/entityFormTypeProbe.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormCkRecord.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormCkType.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityForms.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/services/entity-form.service.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/secret-write-availability.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/createEntityFormEntities.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/deleteEntityFormEntities.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityAttributePresence.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormAssociationDefinitions.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormAssociationTargets.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormCount.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormList.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormReferenceOptions.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormValues.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/updateEntityFormEntities.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/reference/reference-display-format.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/reference/entity-reference-data-source.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/services/entity-form-data.service.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/unset-placeholders.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/change-set-builder.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/entity-form-labels.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/before-save.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/entity-form-prefill.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/records/entity-form-record-row.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/records/entity-form-record-row-dialog.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/records/entity-form-records-field.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormReferenceOptionsWithAttributes.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/reference/entity-form-reference-field.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/editors/entity-form-chips-editor.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/editors/entity-form-secret-editor.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/entity-form-controls.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/entity-form-field.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/entity-form.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/entity-form.component.html","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/entity-form-catalog.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/list/entity-list-data-source.directive.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/list/entity-list-mono-cell.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/action-confirmation.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/list/entity-list.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/list/entity-list.component.html","../../../../projects/meshmakers/octo-ui/entity-forms/src/page/entity-page-actions.directive.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/page/entity-page.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/page/entity-page.component.html","../../../../projects/meshmakers/octo-ui/entity-forms/src/page/entity-page.routes.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/public-api.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/meshmakers-octo-ui-entity-forms.ts"],"sourcesContent":["/**\n * Contract types of the `@meshmakers/octo-ui/entity-forms` entry point (AB#5522).\n *\n * The `*Def` interfaces mirror the `System.UI/EntityForm` runtime entities as parsed from the\n * generic runtime API. The `Resolved*` interfaces are the output of `resolveEntityForm()`: a\n * form definition matched against the CK metadata of one concrete type, ready to render.\n */\n\nimport type { SecretState } from '@meshmakers/octo-services';\n\n/** Editor kinds a resolved field can use. */\nexport type EntityFormEditor = 'text' | 'multiline' | 'password' | 'number' | 'toggle' | 'enum' | 'datetime'\n | 'url' | 'email' | 'json' | 'yaml' | 'cron' | 'chips' | 'reference' | 'records' | 'unsupported';\n\n/** Read-only behaviour of a field. `afterCreate` means editable on create, read-only on edit. */\nexport type ReadOnlyMode = 'never' | 'always' | 'afterCreate';\n\n/** Mode a form is rendered in. */\nexport type EntityFormMode = 'create' | 'edit' | 'view';\n\n/** CK metadata of one attribute of a type or record. */\nexport interface CkAttributeInfo {\n /** camelCase, canonical attribute name as returned by the CK API. */\n attributeName: string;\n /** AttributeValueType (STRING, INT, INTEGER_64, RECORD_ARRAY, ...). */\n valueType: string;\n isOptional: boolean;\n description?: string | null;\n defaultValues: unknown[];\n enumOptions?: { key: number; name: string }[];\n /** Versioned record full name (usable with `records(ckId:)`). */\n ckRecordId?: string | null;\n /** True when the CK attribute metaData carries `secret = true`. */\n secret: boolean;\n /**\n * The CK metaData `secret` marker as a tri-state (AB#5542): `true`, `false` (explicit opt-out of\n * the credential-name rule) or `undefined` (no marker).\n */\n metaSecret?: boolean;\n}\n\n/** One association role a type takes part in. */\nexport interface CkAssociationRoleInfo {\n rtRoleId: string;\n navigationPropertyName: string;\n direction: 'out' | 'in';\n multiplicity: 'ONE' | 'ZERO_OR_ONE' | 'N';\n otherRtCkTypeId: string;\n}\n\n/** CK metadata of one type. */\nexport interface CkTypeInfo {\n rtCkTypeId: string;\n ckTypeIdFullName: string;\n isAbstract: boolean;\n /** Ancestor rtCkTypeIds, nearest first, ending with System/Entity; excludes the type itself. */\n ancestors: string[];\n /** Attributes in model order as returned (inherited ones included). */\n attributes: CkAttributeInfo[];\n associations: CkAssociationRoleInfo[];\n}\n\n/** CK metadata of one record. */\nexport interface CkRecordInfo {\n ckRecordId: string;\n attributes: CkAttributeInfo[];\n}\n\nexport interface EntityFormSectionDef {\n key: string;\n title?: string | null;\n description?: string | null;\n order?: number | null;\n collapsed?: boolean | null;\n columns?: number | null;\n}\n\nexport interface EntityFormFieldDef {\n attributePath: string;\n sectionKey?: string | null;\n order?: number | null;\n label?: string | null;\n help?: string | null;\n placeholder?: string | null;\n editor?: string | null;\n readOnly?: string | null;\n required?: boolean | null;\n width?: string | null;\n default?: string | null;\n min?: number | null;\n max?: number | null;\n pattern?: string | null;\n secret?: boolean | null;\n visibleWhen?: string | null;\n referenceCkTypeId?: string | null;\n associationRoleId?: string | null;\n recordColumns?: string[] | null;\n hidden?: boolean | null;\n /**\n * `EntityFormField.ReferenceDisplayAttributes` (System.UI 2.8.0; host fallback forms may set it\n * too): non-secret attributes of the reference target shown next to its name in the picker, e.g.\n * `['repositoryUrl', 'channel']`. Read with an explicit `attributeNames` list of exactly these\n * names (AB#5547).\n */\n referenceDisplayAttributes?: string[] | null;\n}\n\n/**\n * One entry of the default list order (AB#5623). Not part of the `System.UI/EntityForm` CK type:\n * set it in host fallback forms (`provideEntityFormFallbacks`) or pass `defaultSort` to the list.\n */\nexport interface EntityFormSortDef {\n /** Attribute path (any casing) or system property (`rtChangedDateTime`, `rtWellKnownName`, ...). */\n attributePath: string;\n /** Default `'asc'`. */\n direction?: 'asc' | 'desc' | null;\n}\n\nexport interface EntityFormColumnDef {\n attributePath: string;\n label?: string | null;\n width?: number | null;\n display?: string | null;\n}\n\n/** A parsed `System.UI/EntityForm` entity. */\nexport interface EntityFormDefinition {\n rtId: string;\n rtWellKnownName?: string | null;\n /** True when `rtBlueprintSource` is empty or null (the form was authored in the tenant). */\n isTenantForm: boolean;\n targetCkTypeId: string;\n includeDerivedTypes: boolean;\n priority: number;\n name?: string | null;\n description?: string | null;\n category?: string | null;\n icon?: string | null;\n canCreate?: boolean | null;\n canEdit?: boolean | null;\n canDelete?: boolean | null;\n canDuplicate?: boolean | null;\n canExport?: boolean | null;\n singleton?: boolean | null;\n singletonWellKnownName?: string | null;\n customComponent?: string | null;\n generateRemainingFields?: boolean | null;\n generatedSectionTitle?: string | null;\n sections: EntityFormSectionDef[];\n fields: EntityFormFieldDef[];\n listColumns: EntityFormColumnDef[];\n /**\n * Initial order of the list (AB#5623; host fallback forms only, the CK type has no such\n * attribute). The user can still sort by any column; without a user sort this order applies.\n */\n listDefaultSort?: EntityFormSortDef[] | null;\n}\n\n/** A parsed `VisibleWhen` expression: `Path=value` or `Path=*` (any value). */\nexport interface VisibleWhenRule {\n /** Form control key of the source field (canonical). */\n path: string;\n value: string | '*';\n}\n\nexport interface ResolvedField {\n /** Form control name: attributeName | 'rtWellKnownName' | 'assoc:<rtRoleId with . → _>' (`associationFieldKey`). */\n key: string;\n kind: 'attribute' | 'system' | 'association';\n attributeName?: string;\n valueType?: string;\n label: string;\n help?: string;\n placeholder?: string;\n editor: EntityFormEditor;\n required: boolean;\n readOnly: ReadOnlyMode;\n width: 'full' | 'half';\n order: number;\n /** Already parsed to the form value shape. Applied in create mode only. */\n defaultValue?: unknown;\n min?: number;\n max?: number;\n pattern?: string;\n secret: boolean;\n visibleWhen?: VisibleWhenRule;\n enumOptions?: { key: number; name: string }[];\n record?: { ckRecordId: string; single: boolean; columns: { path: string; label: string }[] };\n /** `role` absent means the attribute itself holds the target rtId. */\n reference?: {\n targetCkTypeId: string;\n role?: CkAssociationRoleInfo;\n multiple: boolean;\n displayAttributes?: string[];\n /**\n * CK metadata of the display attributes on the target type (set by `EntityFormService.resolve`),\n * used to format their values (enum names, yes/no, dates). Missing when the target type could not\n * be read; the raw values are shown then.\n */\n displayAttributeInfo?: CkAttributeInfo[];\n };\n generated: boolean;\n}\n\nexport interface ResolvedSection {\n key: string;\n title: string | null;\n description?: string;\n columns: 1 | 2;\n collapsed: boolean;\n generated: boolean;\n fields: ResolvedField[];\n}\n\nexport interface ResolvedListColumn {\n field: string;\n label: string;\n width?: number;\n display: 'text' | 'chip' | 'date' | 'mono';\n kind: 'attribute' | 'system';\n /**\n * CK value type of an attribute column (ENUM, BOOLEAN, DATE_TIME, ...). The list formats the\n * cells by it like the reference display does: enum key → name, boolean → yes/no (AB#5547).\n */\n valueType?: string;\n /** Options of an ENUM column (the API returns the key, e.g. `0`). */\n enumOptions?: { key: number; name: string }[];\n}\n\n/**\n * Sort order of `mm-entity-list` (AB#5623). Same shape as a Kendo `SortDescriptor`; `field` is the\n * list row field = GraphQL attribute path (camelCase attribute name or system property).\n */\nexport interface EntityListSortDescriptor {\n field: string;\n dir: 'asc' | 'desc';\n}\n\nexport interface ResolvedEntityForm {\n source: 'tenant' | 'seeded' | 'builtIn';\n formRtId?: string;\n formWellKnownName?: string;\n rtCkTypeId: string;\n formTargetCkTypeId: string;\n isAbstract: boolean;\n includeDerivedTypes: boolean;\n title: string;\n description?: string;\n category?: string;\n icon?: string;\n customComponent?: string;\n capabilities: {\n canCreate: boolean;\n canEdit: boolean;\n canDelete: boolean;\n canDuplicate: boolean;\n canExport: boolean;\n createRequiresSubtype: boolean;\n };\n singleton?: { wellKnownName?: string };\n sections: ResolvedSection[];\n listColumns: ResolvedListColumn[];\n /**\n * Initial list order from the form definition (`listDefaultSort`, canonicalised; secret\n * attributes dropped). Absent = server order (today's behaviour).\n */\n listDefaultSort?: EntityListSortDescriptor[];\n /**\n * Attribute names to read (non-secret fields plus record sub-attribute names, plus the SECRET\n * fields of {@link secretStateFields}, whose value the server never returns).\n */\n readAttributeNames: string[];\n /** attributeNames of all secret fields (never prefilled, never listed). */\n secretFields: string[];\n /**\n * The secret fields of value type SECRET (AB#5528): their state is read with the values\n * (`secretIsSet`, later `secretKeyMissing` / `secretSetAt`) and they can be cleared explicitly\n * (`clearSecretAttributes`). The other secret fields (credential-name / metadata fallback) are\n * probed for presence with a field filter and cannot be cleared.\n */\n secretStateFields?: string[];\n warnings: string[];\n}\n\n/**\n * State of one secret field (AB#5528): the shared octo-services {@link SecretState}\n * (`keyMissing` implies `isSet: false`). Kept as an alias for existing imports.\n */\nexport type EntityFormSecretFieldState = SecretState;\n\nexport interface EntityFormValueState {\n values: Record<string, unknown>;\n /** Per secret attributeName: set, or stored but unreadable (counts as present for \"required\"). */\n secretPresence: Record<string, boolean>;\n /** Per SECRET attributeName: the full state (badge \"Set · set at …\" / \"Key missing — re-enter\"). */\n secretStates?: Record<string, EntityFormSecretFieldState>;\n associations: Record<string, { rtId: string; ckTypeId: string; displayName: string }[]>;\n rtWellKnownName?: string | null;\n}\n\nexport interface EntityFormChangeSet {\n rtWellKnownName?: string;\n attributes: { attributeName: string; value: unknown }[];\n /** camelCase names of optional SECRET attributes to clear on save (edit mode only, Q8). */\n clearSecretAttributes?: string[];\n associations: {\n roleName: string;\n targets: { modOption: 'CREATE' | 'DELETE'; target: { ckTypeId: string; rtId: string } }[];\n }[];\n isEmpty: boolean;\n}\n","import { DEFAULT_SECRET_STATUS_LABELS, SecretStatusLabels } from '@meshmakers/octo-services';\n\n/**\n * UI strings of the entity form components (`mm-entity-form`, `mm-entity-list`,\n * `mm-entity-page` and their field editors).\n *\n * Hosts pass a `Partial<EntityFormsMessages>` through the `messages` input; missing keys fall\n * back to {@link DEFAULT_ENTITY_FORMS_MESSAGES}. Strings containing `{name}` placeholders are\n * filled with {@link formatEntityFormsMessage}.\n */\nexport interface EntityFormsMessages {\n // --- Buttons / actions ---\n save: string;\n cancel: string;\n delete: string;\n new: string;\n edit: string;\n duplicate: string;\n export: string;\n close: string;\n apply: string;\n refresh: string;\n back: string;\n add: string;\n remove: string;\n moveUp: string;\n moveDown: string;\n select: string;\n clear: string;\n\n // --- Secrets ---\n /** Placeholder of a secret field whose value is set on the server. */\n secretSetPlaceholder: string;\n /** Placeholder of a secret field without a value on the server. */\n secretNotSetPlaceholder: string;\n /** Badge next to a secret field label. */\n secretBadge: string;\n /** Help text explaining write-only secrets. */\n secretHelp: string;\n /** Badge of a set secret without a timestamp (legacy value). */\n secretStatusSet: string;\n /** Badge of a set secret; `{setAt}` = formatted timestamp. */\n secretStatusSetAt: string;\n /** Badge of a secret without a value. */\n secretStatusNotSet: string;\n /** Badge of a stored secret whose key is not in this environment's key ring (re-entry needed). */\n secretStatusKeyMissing: string;\n /** Badge of a required SECRET without a value (same wording as the secrets inventory). */\n secretStatusNeedsReEntry: string;\n /** Badge of a secret whose clear is staged for the next save. */\n secretStatusClearStaged: string;\n /** Button: stage clearing an optional secret. */\n secretClear: string;\n /** Button: undo a staged clear. */\n secretUndoClear: string;\n /** Note shown while a clear is staged. */\n secretClearStagedNote: string;\n /** Button: reveal the typed (unsaved) value. */\n secretShow: string;\n /** Button: mask the typed value again. */\n secretHide: string;\n /** Hint when secrets cannot be written (no key ring configured, Q17). */\n secretWritesDisabled: string;\n /**\n * Why Create is blocked: a required secret cannot be entered without a key ring (Q17).\n * `{fields}` = the field labels.\n */\n secretRequiredWritesDisabled: string;\n /** Status line of a masked multiline secret (PEM); `{lines}` = number of typed lines. */\n secretMultilineMasked: string;\n /** Placeholder of a SECRET record member whose stored value is kept when left empty. */\n secretRecordMemberKeep: string;\n /** Grid cell of a SECRET record member with a typed, unsaved value (never the value itself). */\n secretRecordMemberNewValue: string;\n\n // --- Sections ---\n /** Default title of the section holding fields that the form does not list. */\n furtherAttributes: string;\n\n // --- Confirmations ---\n /** @deprecated Deletes use the danger confirmation keys below (AB#5579); no longer shown. */\n confirmDeleteTitle: string;\n /** `{name}` = display name of the entity. @deprecated No longer shown (AB#5579). */\n confirmDeleteMessage: string;\n /** `{count}` = number of entities. @deprecated No longer shown (AB#5579). */\n confirmDeleteManyMessage: string;\n /**\n * Danger confirmation (AB#5579): title naming the entity, `{name}` = display name.\n * Optional for hosts that pass a complete message set; missing = English default.\n */\n confirmDeleteNamedTitle?: string;\n /** Danger confirmation title of a multi-delete; `{count}` = number of entities. */\n confirmDeleteManyTitle?: string;\n /** Target shown in a multi-delete confirmation; `{count}` = number of entities. */\n confirmDeleteManyTarget?: string;\n /** What a single delete loses. */\n confirmDeleteConsequence?: string;\n /** What a multi-delete loses; `{count}` = number of entities. */\n confirmDeleteManyConsequence?: string;\n /** Confirming button of a single delete (verb + object). */\n confirmDeleteConfirmText?: string;\n /** Confirming button of a multi-delete (verb + object). */\n confirmDeleteManyConfirmText?: string;\n /** Row name in the accessible names of the records editor's row buttons; `{index}` = 1-based row. */\n recordRowLabel?: string;\n unsavedChangesTitle: string;\n unsavedChangesMessage: string;\n discardChanges: string;\n keepEditing: string;\n\n // --- Notifications ---\n saveSuccess: string;\n saveError: string;\n createSuccess: string;\n deleteSuccess: string;\n deleteError: string;\n loadError: string;\n noChanges: string;\n /**\n * Warning when a host `beforeSave` hook vetoed the save without a message of its own (AB#5623).\n * Optional so that complete message objects of older hosts keep compiling.\n */\n saveVetoed?: string;\n /**\n * List cell and form field hint of a non-secret value that holds a host-listed placeholder\n * (`ENTITY_FORM_UNSET_PLACEHOLDER_VALUES`, AB#5623). Optional for older complete message objects.\n */\n notConfigured?: string;\n\n // --- Empty / not found states ---\n emptyList: string;\n emptyRecords: string;\n emptyReferences: string;\n entityNotFound: string;\n formNotFound: string;\n noFieldsToShow: string;\n loading: string;\n\n // --- Validation ---\n validationRequired: string;\n /** `{min}` = minimum value. */\n validationMin: string;\n /** `{max}` = maximum value. */\n validationMax: string;\n /** `{pattern}` = regular expression. */\n validationPattern: string;\n validationEmail: string;\n validationUrl: string;\n validationJson: string;\n validationNumber: string;\n /** `{max}` = maximum number of selected entities. */\n validationMaxItems: string;\n formInvalid: string;\n\n // --- Editors ---\n unsupportedEditor: string;\n chipsPlaceholder: string;\n referencePlaceholder: string;\n enumPlaceholder: string;\n toggleOn: string;\n toggleOff: string;\n /** Warning on a record field that cannot be saved safely (sub-attribute name collides with a secret). */\n recordReadOnlyWarning: string;\n nestedRecordReadOnly: string;\n recordRowDialogTitleAdd: string;\n recordRowDialogTitleEdit: string;\n\n // --- List / page ---\n columnWellKnownName: string;\n columnName: string;\n columnChanged: string;\n columnCreated: string;\n columnType: string;\n columnActions: string;\n copyId: string;\n copyRtId: string;\n copyCkTypeId: string;\n copyRtCkTypeId: string;\n copyRtEntityId: string;\n /** @deprecated No longer shown (AB#5623): both copy actions use {@link copiedId}. */\n copied: string;\n /** Tooltip of the Copy ID button in the form header (AB#5623). */\n copyIdTooltip: string;\n /** Notification after copying one ID (list menu and form header); `{label}` = RtId, CkTypeId, ... (AB#5623). */\n copiedId: string;\n /** Notification when the clipboard is not available (AB#5623). */\n copyFailed: string;\n searchPlaceholder: string;\n /** Header of the optional Type column of the list. */\n typeColumn: string;\n selectSubtypeTitle: string;\n createTitle: string;\n /** `{name}` = display name of the entity. */\n editTitle: string;\n viewTitle: string;\n readOnlyNotice: string;\n singletonCreateHint: string;\n}\n\n/** English defaults; hosts may override any key via the `messages` input. */\nexport const DEFAULT_ENTITY_FORMS_MESSAGES: EntityFormsMessages = {\n save: 'Save',\n cancel: 'Cancel',\n delete: 'Delete',\n new: 'New',\n edit: 'Edit',\n duplicate: 'Duplicate',\n export: 'Export',\n close: 'Close',\n apply: 'Apply',\n refresh: 'Refresh',\n back: 'Back',\n add: 'Add',\n remove: 'Remove',\n moveUp: 'Move up',\n moveDown: 'Move down',\n select: 'Select',\n clear: 'Clear',\n\n secretSetPlaceholder: 'Leave empty to keep',\n secretNotSetPlaceholder: 'Not set',\n secretBadge: 'Secret',\n secretHelp: 'Write-only. The stored value is never shown; type a new value to replace it.',\n // One set of status labels for every secret display (octo-services `formatSecretStatus`).\n secretStatusSet: DEFAULT_SECRET_STATUS_LABELS.set,\n secretStatusSetAt: DEFAULT_SECRET_STATUS_LABELS.setAt,\n secretStatusNotSet: DEFAULT_SECRET_STATUS_LABELS.notSet,\n secretStatusKeyMissing: DEFAULT_SECRET_STATUS_LABELS.keyMissing,\n secretStatusNeedsReEntry: 'Needs re-entry',\n secretStatusClearStaged: 'Will be cleared',\n secretClear: 'Clear',\n secretUndoClear: 'Undo',\n secretClearStagedNote: 'The stored value is removed when you save.',\n secretShow: 'Show',\n secretHide: 'Hide',\n secretWritesDisabled: 'Secrets cannot be changed: no encryption key ring is configured for this environment.',\n secretRequiredWritesDisabled: 'Cannot create: {fields} must be set, but secrets cannot be written without an encryption key ring.',\n secretMultilineMasked: 'Masked · {lines} line(s) entered. Use Show to check the value.',\n secretRecordMemberKeep: 'Leave empty to keep the stored value',\n secretRecordMemberNewValue: 'New value (unsaved)',\n\n furtherAttributes: 'Further attributes',\n\n confirmDeleteTitle: 'Delete entity',\n confirmDeleteMessage: 'Do you really want to delete \"{name}\"? This cannot be undone.',\n confirmDeleteManyMessage: 'Do you really want to delete {count} entities? This cannot be undone.',\n confirmDeleteNamedTitle: 'Delete {name}?',\n confirmDeleteManyTitle: 'Delete {count} entities?',\n confirmDeleteManyTarget: '{count} entities',\n confirmDeleteConsequence: 'The entity and its values are deleted. This cannot be undone.',\n confirmDeleteManyConsequence: 'The {count} entities and their values are deleted. This cannot be undone.',\n confirmDeleteConfirmText: 'Delete entity',\n confirmDeleteManyConfirmText: 'Delete entities',\n recordRowLabel: 'row {index}',\n unsavedChangesTitle: 'Unsaved changes',\n unsavedChangesMessage: 'You have unsaved changes. Do you want to discard them?',\n discardChanges: 'Discard',\n keepEditing: 'Keep editing',\n\n saveSuccess: 'Changes saved.',\n saveError: 'The changes could not be saved.',\n createSuccess: 'Entity created.',\n deleteSuccess: 'Entity deleted.',\n deleteError: 'The entity could not be deleted.',\n loadError: 'The data could not be loaded.',\n noChanges: 'There are no changes to save.',\n saveVetoed: 'The changes were not saved.',\n notConfigured: 'Not configured',\n\n emptyList: 'No entries yet.',\n emptyRecords: 'No entries.',\n emptyReferences: 'Nothing selected.',\n entityNotFound: 'The entity was not found.',\n formNotFound: 'No form is configured for this type.',\n noFieldsToShow: 'This form has no fields.',\n loading: 'Loading…',\n\n validationRequired: 'This field is required.',\n validationMin: 'The value must be at least {min}.',\n validationMax: 'The value must be at most {max}.',\n validationPattern: 'The value does not match the expected format.',\n validationEmail: 'Enter a valid email address.',\n validationUrl: 'Enter a valid URL.',\n validationJson: 'Enter valid JSON.',\n validationNumber: 'Enter a valid number.',\n validationMaxItems: 'Select at most {max} entries.',\n formInvalid: 'Please correct the highlighted fields.',\n\n unsupportedEditor: 'This value cannot be edited here.',\n chipsPlaceholder: 'Type a value and press Enter',\n referencePlaceholder: 'Search…',\n enumPlaceholder: 'Select…',\n toggleOn: 'Yes',\n toggleOff: 'No',\n recordReadOnlyWarning: 'This field is read-only here because one of its entries shares a name with a secret attribute.',\n nestedRecordReadOnly: 'Nested entries cannot be edited here.',\n recordRowDialogTitleAdd: 'Add entry',\n recordRowDialogTitleEdit: 'Edit entry',\n\n columnWellKnownName: 'Well-known name',\n columnName: 'Name',\n columnChanged: 'Changed',\n columnCreated: 'Created',\n columnType: 'Type',\n columnActions: 'Actions',\n copyId: 'Copy ID',\n copyRtId: 'RtId',\n copyCkTypeId: 'CkTypeId',\n copyRtCkTypeId: 'RtCkTypeId',\n copyRtEntityId: 'RtEntityId',\n copied: 'Copied to clipboard.',\n copyIdTooltip: 'Copy Entity ID to clipboard',\n copiedId: '{label} copied',\n copyFailed: 'Failed to copy to clipboard',\n searchPlaceholder: 'Search…',\n typeColumn: 'Type',\n selectSubtypeTitle: 'Select the type to create',\n createTitle: 'New entry',\n editTitle: 'Edit {name}',\n viewTitle: 'Details',\n readOnlyNotice: 'You can view this entry but not change it.',\n singletonCreateHint: 'This entry does not exist yet. Fill in the form to create it.',\n};\n\n/** Replaces `{key}` placeholders in a message with the given values. */\nexport function formatEntityFormsMessage(message: string, values: Record<string, string | number>): string {\n return message.replace(/\\{(\\w+)\\}/g, (match, key: string) =>\n Object.prototype.hasOwnProperty.call(values, key) ? String(values[key]) : match);\n}\n\n/** Merges host overrides over the English defaults. */\nexport function mergeEntityFormsMessages(overrides?: Partial<EntityFormsMessages> | null): EntityFormsMessages {\n return { ...DEFAULT_ENTITY_FORMS_MESSAGES, ...(overrides ?? {}) };\n}\n\n/** The secret status labels of a message set, for octo-services `formatSecretStatus`. */\nexport function secretStatusLabelsOf(messages: EntityFormsMessages): SecretStatusLabels {\n return {\n set: messages.secretStatusSet,\n setAt: messages.secretStatusSetAt,\n notSet: messages.secretStatusNotSet,\n keyMissing: messages.secretStatusKeyMissing,\n };\n}\n","import { CkAttributeInfo } from '../models/entity-form.models';\n\n/**\n * Entity system properties that a form may reference by AttributePath. They are not CK\n * attributes: `rtWellKnownName` is written through `RtEntityInput.rtWellKnownName`, the two\n * timestamps are engine-stamped and always read-only.\n */\nexport const SYSTEM_PROPERTIES: readonly string[] = ['rtWellKnownName', 'rtCreationDateTime', 'rtChangedDateTime'];\n\n/** Attributes the engine stamps; forced read-only whatever the form says. */\nexport const ENGINE_STAMPED_ATTRIBUTES: readonly string[] = [\n 'rtBlueprintSource', 'rtBlueprintLocked', 'rtBlueprintAppliedAt',\n];\n\n/**\n * Runtime state written by services and operators, never by a user (CK `ownership: RuntimeState`\n * of the System.Communication base types: deployable entity, communication entity, deployable\n * workload, adapter). The library cannot read the CK ownership marker yet (not in the schema it is\n * generated from), so this documented list stands in for it; it is the same set the Studio's\n * runtime-object forms hide. A **generated** field of one of these names (`form-default`, \"Further\n * attributes\") is read-only, so the generic editor (e.g. the Data Explorer peek) cannot overwrite\n * it. A field a form defines explicitly keeps the form's `ReadOnly` setting.\n */\nexport const RUNTIME_STATE_ATTRIBUTES: readonly string[] = [\n 'deploymentState', 'statusMessage', 'lastDeploymentError', 'lastDeploymentErrorTimestamp',\n 'communicationState', 'communicationStateTimestamp', 'configurationState', 'lastConfigurationError',\n 'lastConfigurationErrorTimestamp', 'lastSyncedSequenceNumber',\n 'lifecycleState', 'lastActivityAt', 'onDemandCapable', 'onDemandBlockingReasons',\n];\n\n/** True for a runtime-state attribute ({@link RUNTIME_STATE_ATTRIBUTES}; canonical camelCase name). */\nexport function isRuntimeStateAttribute(name: string): boolean {\n return RUNTIME_STATE_ATTRIBUTES.includes(name);\n}\n\n/** Result of matching a form AttributePath against the CK metadata of a type. */\nexport type CanonicalPath =\n | { kind: 'attribute'; name: string; attribute: CkAttributeInfo }\n | { kind: 'system'; name: string }\n | { kind: 'rtId' }\n | { kind: 'dotted'; path: string }\n | { kind: 'unknown'; path: string };\n\n/**\n * Canonicalises a form AttributePath (forms use PascalCase, the CK API camelCase):\n * system properties and attributes match case-insensitively, `rtId` is reported separately\n * (never a field), dotted paths are reported as deferred, everything else is unknown.\n */\nexport function canonicalisePath(path: string | null | undefined, attributes: readonly CkAttributeInfo[]): CanonicalPath {\n const raw = (path ?? '').trim();\n if (!raw) {\n return { kind: 'unknown', path: raw };\n }\n const lower = raw.toLowerCase();\n if (lower === 'rtid') {\n return { kind: 'rtId' };\n }\n const system = SYSTEM_PROPERTIES.find((p) => p.toLowerCase() === lower);\n if (system) {\n return { kind: 'system', name: system };\n }\n if (raw.includes('.')) {\n return { kind: 'dotted', path: raw };\n }\n const attribute = attributes.find((a) => a.attributeName.toLowerCase() === lower);\n if (attribute) {\n return { kind: 'attribute', name: attribute.attributeName, attribute };\n }\n return { kind: 'unknown', path: raw };\n}\n\n/** True when the given canonical name is an engine-stamped attribute or a system timestamp. */\nexport function isForcedReadOnly(name: string): boolean {\n return ENGINE_STAMPED_ATTRIBUTES.includes(name) || name === 'rtCreationDateTime' || name === 'rtChangedDateTime';\n}\n\n/** Converts `SftpConfiguration` / `System.Communication/SftpConfiguration` to `sftp-configuration`. */\nexport function toKebabTypeKey(rtCkTypeId: string): string {\n const name = rtCkTypeId.includes('/') ? rtCkTypeId.substring(rtCkTypeId.lastIndexOf('/') + 1) : rtCkTypeId;\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .replace(/[\\s_.]+/g, '-')\n .toLowerCase();\n}\n","import { CkAssociationRoleInfo, CkAttributeInfo, CkRecordInfo, CkTypeInfo } from '../models/entity-form.models';\n\n/** Shape of one attribute row of `entityFormGetCkType` / `entityFormGetCkRecord`. */\nexport interface RawCkAttribute {\n attributeName: string;\n attributeValueType: string;\n isOptional: boolean;\n ckAttributeId?: { fullName: string } | null;\n attribute?: {\n description?: string | null;\n defaultValues?: (unknown | null)[] | null;\n metaData?: ({ key: string; value?: string | null } | null)[] | null;\n ckEnum?: { values: ({ key?: number | null; name?: string | null } | null)[] } | null;\n ckRecord?: { ckRecordId: { fullName: string } } | null;\n } | null;\n}\n\ninterface RawBaseType {\n rtCkTypeId: string;\n isAbstract?: boolean;\n baseType?: RawBaseType | null;\n}\n\ninterface RawRole {\n rtRoleId: string;\n navigationPropertyName: string;\n multiplicity: string;\n rtTargetCkTypeId: string;\n rtOriginCkTypeId: string;\n}\n\n/** Shape of one type of `entityFormGetCkType`. */\nexport interface RawCkType {\n rtCkTypeId: string;\n isAbstract: boolean;\n description?: string | null;\n ckTypeId: { fullName: string };\n baseType?: RawBaseType | null;\n attributes?: { items?: (RawCkAttribute | null)[] | null } | null;\n associations?: {\n in?: { all?: (RawRole | null)[] | null } | null;\n out?: { all?: (RawRole | null)[] | null } | null;\n } | null;\n}\n\n/** Shape of one record of `entityFormGetCkRecord`. */\nexport interface RawCkRecord {\n ckRecordId: { fullName: string };\n isAbstract?: boolean;\n attributes?: { items?: (RawCkAttribute | null)[] | null } | null;\n}\n\n/**\n * The CK attribute metaData `secret` marker: `true`, `false` (explicit opt-out of the\n * credential-name rule) or `undefined` when there is no (valid) marker.\n */\nexport function secretMetaDataMarker(metaData: readonly ({ key: string; value?: string | null } | null)[] | null | undefined): boolean | undefined {\n const marker = (metaData ?? []).find((m) => !!m && m.key?.toLowerCase() === 'secret');\n const value = (marker?.value ?? '').trim().toLowerCase();\n return value === 'true' ? true : value === 'false' ? false : undefined;\n}\n\n/** True when the CK attribute metaData marks the attribute as secret (`secret = true`). */\nexport function isSecretMetaData(metaData: readonly ({ key: string; value?: string | null } | null)[] | null | undefined): boolean {\n return (metaData ?? []).some((m) => !!m && m.key?.toLowerCase() === 'secret' && (m.value ?? '').trim().toLowerCase() === 'true');\n}\n\nexport function toCkAttributeInfo(raw: RawCkAttribute): CkAttributeInfo {\n const info: CkAttributeInfo = {\n attributeName: raw.attributeName,\n valueType: raw.attributeValueType,\n isOptional: raw.isOptional,\n description: raw.attribute?.description ?? null,\n defaultValues: (raw.attribute?.defaultValues ?? []).filter((v) => v !== null && v !== undefined),\n ckRecordId: raw.attribute?.ckRecord?.ckRecordId?.fullName ?? null,\n secret: isSecretMetaData(raw.attribute?.metaData),\n };\n const marker = secretMetaDataMarker(raw.attribute?.metaData);\n if (marker !== undefined) {\n info.metaSecret = marker;\n }\n const values = raw.attribute?.ckEnum?.values;\n if (values?.length) {\n info.enumOptions = values\n .filter((v): v is { key: number; name: string } => !!v && v.key !== null && v.key !== undefined && !!v.name)\n .map((v) => ({ key: v.key, name: v.name }));\n }\n return info;\n}\n\nfunction toRole(raw: RawRole, direction: 'out' | 'in'): CkAssociationRoleInfo {\n return {\n rtRoleId: raw.rtRoleId,\n navigationPropertyName: raw.navigationPropertyName,\n direction,\n multiplicity: raw.multiplicity === 'ONE' || raw.multiplicity === 'ZERO_OR_ONE' ? raw.multiplicity : 'N',\n // out: this type is the origin, the other end is the target; in: the other end is the origin.\n otherRtCkTypeId: direction === 'out' ? raw.rtTargetCkTypeId : raw.rtOriginCkTypeId,\n };\n}\n\n/** Maps a raw `entityFormGetCkType` item to {@link CkTypeInfo}. */\nexport function toCkTypeInfo(raw: RawCkType): CkTypeInfo {\n const ancestors: string[] = [];\n let base = raw.baseType;\n while (base) {\n ancestors.push(base.rtCkTypeId);\n base = base.baseType;\n }\n return {\n rtCkTypeId: raw.rtCkTypeId,\n ckTypeIdFullName: raw.ckTypeId.fullName,\n isAbstract: raw.isAbstract,\n ancestors,\n attributes: (raw.attributes?.items ?? []).filter((a): a is RawCkAttribute => !!a).map(toCkAttributeInfo),\n associations: [\n ...(raw.associations?.out?.all ?? []).filter((r): r is RawRole => !!r).map((r) => toRole(r, 'out')),\n ...(raw.associations?.in?.all ?? []).filter((r): r is RawRole => !!r).map((r) => toRole(r, 'in')),\n ],\n };\n}\n\n/** Maps a raw `entityFormGetCkRecord` item to {@link CkRecordInfo}. */\nexport function toCkRecordInfo(raw: RawCkRecord): CkRecordInfo {\n return {\n ckRecordId: raw.ckRecordId.fullName,\n attributes: (raw.attributes?.items ?? []).filter((a): a is RawCkAttribute => !!a).map(toCkAttributeInfo),\n };\n}\n","import {\n EntityFormColumnDef,\n EntityFormDefinition,\n EntityFormFieldDef,\n EntityFormSectionDef,\n} from '../models/entity-form.models';\n\n/** Minimal shape of an `RtEntity` row as returned by `entityFormGetEntityForms`. */\nexport interface RawRtEntityRow {\n rtId: string;\n rtWellKnownName?: string | null;\n ckTypeId?: string | null;\n attributes?: { items?: ({ attributeName?: string | null; value?: unknown } | null)[] | null } | null;\n}\n\ntype Dict = Record<string, unknown>;\n\n/**\n * Turns the attribute list of an entity (or of a record read through the generic API) into a\n * dictionary keyed by the lower-cased attribute name, so lookups are casing-agnostic.\n */\nexport function attributeListToDict(items: readonly ({ attributeName?: string | null; value?: unknown } | null)[] | null | undefined): Dict {\n const dict: Dict = {};\n for (const item of items ?? []) {\n if (item?.attributeName) {\n dict[item.attributeName.toLowerCase()] = item.value;\n }\n }\n return dict;\n}\n\n/**\n * Normalises one record value to a lower-cased dictionary. Accepts the query shape\n * `{ ckRecordId, attributes: [{ attributeName, value }] }` and, defensively, a flat\n * `{ key: value }` dictionary.\n */\nexport function recordToDict(value: unknown): Dict | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n const v = value as Dict;\n if (Array.isArray(v['attributes'])) {\n return attributeListToDict(v['attributes'] as { attributeName?: string; value?: unknown }[]);\n }\n const dict: Dict = {};\n for (const [k, val] of Object.entries(v)) {\n if (k !== 'ckRecordId' && k !== '__typename') {\n dict[k.toLowerCase()] = val;\n }\n }\n return dict;\n}\n\nconst str = (v: unknown): string | null => (typeof v === 'string' ? v : v === null || v === undefined ? null : String(v));\nconst strOrUndef = (d: Dict, k: string): string | null | undefined => (k in d ? str(d[k]) : undefined);\nconst num = (v: unknown): number | null => {\n if (v === null || v === undefined || v === '') {\n return null;\n }\n const n = typeof v === 'number' ? v : Number(v);\n return Number.isFinite(n) ? n : null;\n};\nconst numOrUndef = (d: Dict, k: string): number | null | undefined => (k in d ? num(d[k]) : undefined);\nconst bool = (v: unknown): boolean | null => {\n if (v === null || v === undefined) {\n return null;\n }\n if (typeof v === 'boolean') {\n return v;\n }\n if (typeof v === 'string') {\n return v.toLowerCase() === 'true' ? true : v.toLowerCase() === 'false' ? false : null;\n }\n return Boolean(v);\n};\nconst boolOrUndef = (d: Dict, k: string): boolean | null | undefined => (k in d ? bool(d[k]) : undefined);\n\n/** A StringArray value; a comma-separated string is accepted defensively. Absent key = `undefined`. */\nconst strListOrUndef = (d: Dict, k: string): string[] | null | undefined => {\n if (!(k in d)) {\n return undefined;\n }\n const v = d[k];\n if (v === null || v === undefined) {\n return null;\n }\n return Array.isArray(v) ? v.map((c) => String(c)) : String(v).split(',').map((c) => c.trim()).filter(Boolean);\n};\n\nfunction records(value: unknown): Dict[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.map(recordToDict).filter((d): d is Dict => d !== null);\n}\n\nfunction stripUndefined<T extends object>(o: T): T {\n for (const k of Object.keys(o) as (keyof T)[]) {\n if (o[k] === undefined) {\n delete o[k];\n }\n }\n return o;\n}\n\nfunction parseSection(d: Dict): EntityFormSectionDef | null {\n const key = str(d['key']);\n if (!key) {\n return null;\n }\n return stripUndefined({\n key,\n title: strOrUndef(d, 'title'),\n description: strOrUndef(d, 'description'),\n order: numOrUndef(d, 'order'),\n collapsed: boolOrUndef(d, 'collapsed'),\n columns: numOrUndef(d, 'columns'),\n });\n}\n\nfunction parseField(d: Dict): EntityFormFieldDef | null {\n const attributePath = str(d['attributepath']);\n if (!attributePath) {\n return null;\n }\n return stripUndefined({\n attributePath,\n sectionKey: strOrUndef(d, 'sectionkey'),\n order: numOrUndef(d, 'order'),\n label: strOrUndef(d, 'label'),\n help: strOrUndef(d, 'help'),\n placeholder: strOrUndef(d, 'placeholder'),\n editor: strOrUndef(d, 'editor'),\n readOnly: strOrUndef(d, 'readonly'),\n required: boolOrUndef(d, 'required'),\n width: strOrUndef(d, 'width'),\n default: strOrUndef(d, 'default'),\n min: numOrUndef(d, 'min'),\n max: numOrUndef(d, 'max'),\n pattern: strOrUndef(d, 'pattern'),\n secret: boolOrUndef(d, 'secret'),\n visibleWhen: strOrUndef(d, 'visiblewhen'),\n referenceCkTypeId: strOrUndef(d, 'referencecktypeid'),\n associationRoleId: strOrUndef(d, 'associationroleid'),\n recordColumns: strListOrUndef(d, 'recordcolumns'),\n hidden: boolOrUndef(d, 'hidden'),\n // System.UI 2.9.0 (AB#5547); absent on older models, so the field simply stays unset.\n referenceDisplayAttributes: strListOrUndef(d, 'referencedisplayattributes'),\n });\n}\n\nfunction parseColumn(d: Dict): EntityFormColumnDef | null {\n const attributePath = str(d['attributepath']);\n if (!attributePath) {\n return null;\n }\n return stripUndefined({\n attributePath,\n label: strOrUndef(d, 'label'),\n width: numOrUndef(d, 'width'),\n display: strOrUndef(d, 'display'),\n });\n}\n\n/**\n * Parses one `System.UI/EntityForm` row of the generic runtime API into an\n * {@link EntityFormDefinition}. Returns `null` when the row has no `TargetCkTypeId`.\n * Absent optionals stay `undefined`; explicit `null` values from the server are kept as `null`.\n */\nexport function parseEntityForm(row: RawRtEntityRow): EntityFormDefinition | null {\n const a = attributeListToDict(row.attributes?.items);\n const targetCkTypeId = str(a['targetcktypeid']);\n if (!targetCkTypeId) {\n return null;\n }\n const blueprintSource = str(a['rtblueprintsource']);\n const def: EntityFormDefinition = {\n rtId: row.rtId,\n rtWellKnownName: row.rtWellKnownName ?? null,\n isTenantForm: !blueprintSource,\n targetCkTypeId,\n includeDerivedTypes: bool(a['includederivedtypes']) === true,\n priority: num(a['priority']) ?? 0,\n name: strOrUndef(a, 'name'),\n description: strOrUndef(a, 'description'),\n category: strOrUndef(a, 'category'),\n icon: strOrUndef(a, 'icon'),\n canCreate: boolOrUndef(a, 'cancreate'),\n canEdit: boolOrUndef(a, 'canedit'),\n canDelete: boolOrUndef(a, 'candelete'),\n canDuplicate: boolOrUndef(a, 'canduplicate'),\n canExport: boolOrUndef(a, 'canexport'),\n singleton: boolOrUndef(a, 'singleton'),\n singletonWellKnownName: strOrUndef(a, 'singletonwellknownname'),\n customComponent: strOrUndef(a, 'customcomponent'),\n generateRemainingFields: boolOrUndef(a, 'generateremainingfields'),\n generatedSectionTitle: strOrUndef(a, 'generatedsectiontitle'),\n sections: records(a['sections']).map(parseSection).filter((s): s is EntityFormSectionDef => s !== null),\n fields: records(a['fields']).map(parseField).filter((f): f is EntityFormFieldDef => f !== null),\n listColumns: records(a['listcolumns']).map(parseColumn).filter((c): c is EntityFormColumnDef => c !== null),\n };\n return stripUndefined(def);\n}\n\n/** Parses every row; rows without a target type are dropped. */\nexport function parseEntityForms(rows: readonly (RawRtEntityRow | null | undefined)[] | null | undefined): EntityFormDefinition[] {\n return (rows ?? [])\n .filter((r): r is RawRtEntityRow => !!r)\n .map(parseEntityForm)\n .filter((f): f is EntityFormDefinition => f !== null);\n}\n","import { EntityFormDefinition } from '../models/entity-form.models';\n\n/**\n * Built-in copy of the seeded `form-default` (platform-services\n * `SystemUiCkModel/Blueprints/System.UI.EntityForms/seed-data/entities.yaml`, rtId\n * 670300000000000000000001), transcribed field by field.\n *\n * Used when a tenant has no applicable form at all: System.UI < 2.7.0 (no EntityForm type), the\n * forms query failed, or `form-default` was deleted. Keep it in step with the seed; a spec asserts\n * that it resolves exactly like the parsed seed entity.\n */\nexport const BUILT_IN_DEFAULT_FORM: EntityFormDefinition = {\n rtId: '',\n rtWellKnownName: 'form-default',\n isTenantForm: false,\n name: 'Default form',\n description: 'Fallback form for every entity type without a form of its own. Seeded by platform-services; create a tenant EntityForm for a type to override it.',\n targetCkTypeId: 'System/Entity',\n includeDerivedTypes: true,\n priority: 0,\n canCreate: true,\n canEdit: true,\n canDelete: true,\n canDuplicate: false,\n canExport: true,\n generateRemainingFields: true,\n generatedSectionTitle: 'Attributes',\n sections: [\n { key: 'general', title: 'General', order: 0, columns: 2 },\n {\n key: 'system',\n title: 'System',\n description: 'Blueprint provenance stamped by the engine when a blueprint seeded this entity.',\n order: 99,\n collapsed: true,\n },\n ],\n fields: [\n {\n attributePath: 'rtWellKnownName',\n sectionKey: 'general',\n order: 0,\n label: 'Well-known name',\n help: 'Stable, tenant-unique handle other entities, pipelines and the Studio use to find this entity. Cannot be changed after creation.',\n readOnly: 'afterCreate',\n },\n { attributePath: 'Name', sectionKey: 'general', order: 1, width: 'half' },\n { attributePath: 'Description', sectionKey: 'general', order: 2, editor: 'multiline' },\n {\n attributePath: 'RtBlueprintSource',\n sectionKey: 'system',\n order: 0,\n label: 'Blueprint source',\n help: 'Blueprint that seeded this entity.',\n readOnly: 'always',\n },\n {\n attributePath: 'RtBlueprintLocked',\n sectionKey: 'system',\n order: 1,\n label: 'Blueprint locked',\n help: 'Whether the blueprint still manages this entity (a re-apply overwrites it); false keeps it as user data.',\n readOnly: 'always',\n },\n {\n attributePath: 'RtBlueprintAppliedAt',\n sectionKey: 'system',\n order: 2,\n label: 'Blueprint applied at',\n help: 'When the blueprint last wrote this entity.',\n readOnly: 'always',\n },\n ],\n listColumns: [\n { attributePath: 'rtWellKnownName', label: 'Name' },\n { attributePath: 'Name' },\n { attributePath: 'rtChangedDateTime', label: 'Changed', display: 'date' },\n ],\n};\n","/**\n * Human-readable names of CK types (AB#5524): `System.Communication/EMailReceiverConfiguration-1`\n * → `E-mail receiver configuration`, `…/FinApiConfiguration` → `finAPI configuration`.\n *\n * CK types carry no display name, so a name is derived from the type name: PascalCase is split\n * into words in sentence case, and known acronyms / brand names keep their spelling.\n */\n\n/** How a known word (or word sequence) is written. */\ninterface KnownTerm {\n /** Lower-case words of the split type name, e.g. `['e', 'mail']` for `EMail`. */\n words: string[];\n text: string;\n /**\n * `acronym`: always as written (SAP, SFTP); `brand`: always as written, even at the start\n * (finAPI, weclapp); `word`: sentence case — capitalised only at the start (E-mail / e-mail).\n */\n kind: 'acronym' | 'brand' | 'word';\n}\n\nconst KNOWN_TERMS: readonly KnownTerm[] = [\n { words: ['e', 'mail'], text: 'E-mail', kind: 'word' },\n { words: ['email'], text: 'E-mail', kind: 'word' },\n { words: ['fin', 'api'], text: 'finAPI', kind: 'brand' },\n { words: ['finapi'], text: 'finAPI', kind: 'brand' },\n { words: ['we', 'clapp'], text: 'weclapp', kind: 'brand' },\n { words: ['weclapp'], text: 'weclapp', kind: 'brand' },\n { words: ['open', 'ai'], text: 'OpenAI', kind: 'brand' },\n { words: ['openai'], text: 'OpenAI', kind: 'brand' },\n { words: ['mongo', 'db'], text: 'MongoDB', kind: 'brand' },\n { words: ['crate', 'db'], text: 'CrateDB', kind: 'brand' },\n { words: ['opc', 'ua'], text: 'OPC UA', kind: 'acronym' },\n ...['ai', 'api', 'ck', 'csv', 'eda', 'ftp', 'http', 'https', 'id', 'imap', 'json', 'llm', 'mcp', 'mqtt', 'ocr', 'opc',\n 'pdf', 'rest', 'sap', 'sftp', 'smtp', 'sql', 'ssh', 'tls', 'ui', 'uri', 'url', 'xml']\n .map((a): KnownTerm => ({ words: [a], text: a.toUpperCase(), kind: 'acronym' })),\n];\n\n/** Longest sequences first, so `Fin Api` wins over `Api`. */\nconst TERMS_BY_LENGTH = [...KNOWN_TERMS].sort((a, b) => b.words.length - a.words.length);\n\n/** `System.Communication/SftpConfiguration-1` → `SftpConfiguration` (no model, no version). */\nexport function ckTypeShortName(ckTypeId: string): string {\n const name = (ckTypeId ?? '').trim();\n return name.substring(name.lastIndexOf('/') + 1).replace(/-\\d+(\\.\\d+)*$/, '');\n}\n\n/** Splits `EMailReceiverConfiguration` / `SAPConnection` / `sftp_config` into words. */\nfunction splitWords(name: string): string[] {\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')\n .replace(/[_\\-.]+/g, ' ')\n .trim()\n .split(/\\s+/)\n .filter((w) => w.length > 0);\n}\n\n/**\n * Human-readable name of a CK type id or type name, in sentence case with known acronyms and\n * brand names (`SAP`, `SFTP`, `AI`, `EDA`, `E-mail`, `finAPI`, `weclapp`, …). Returns the input\n * when it holds no name.\n */\nexport function humanizeCkTypeName(ckTypeIdOrName: string): string {\n const words = splitWords(ckTypeShortName(ckTypeIdOrName));\n if (words.length === 0) {\n return ckTypeIdOrName ?? '';\n }\n const lower = words.map((w) => w.toLowerCase());\n const out: string[] = [];\n for (let i = 0; i < lower.length;) {\n const term = TERMS_BY_LENGTH.find((t) => t.words.every((w, k) => lower[i + k] === w));\n if (term) {\n const first = out.length === 0;\n out.push(term.kind === 'word' && !first ? term.text.toLowerCase() : term.text);\n i += term.words.length;\n continue;\n }\n // An all-caps word of the type name (SAPConnection → SAP) stays an acronym.\n const original = words[i];\n const acronym = original.length > 1 && original === original.toUpperCase() && /[A-Z]/.test(original);\n out.push(acronym ? original : out.length === 0 ? capitalise(lower[i]) : lower[i]);\n i += 1;\n }\n return out.join(' ');\n}\n\nfunction capitalise(word: string): string {\n return word.charAt(0).toUpperCase() + word.slice(1);\n}\n","import { isSecretStateObject, isSecretValueType, secretStateFromAttribute, toSecretState } from '@meshmakers/octo-services';\nimport { CkAttributeInfo, CkRecordInfo } from '../models/entity-form.models';\n\n/*\n * Pure value conversion between the generic runtime API and form controls. The rules are ported\n * from octo-ui's (non-exported) `AttributeMapperService`:\n *\n * - READ: a record comes back as `{ ckRecordId, attributes: [{ attributeName, value }] }`; the form\n * works with flat `{ camelSub: value }` dictionaries. A single RECORD is represented as an\n * array with at most one dictionary (the records editor always edits a list).\n * - WRITE: a record is sent as a flat `{ camelSub: value }` dict (NOT `{ attributes: [...] }`, which\n * the backend ignores -> ASSET1004), a record array as an array of those.\n * - Enums use the numeric key; names coming back are mapped to keys on read.\n * - DATE_TIME / DATE_TIME_OFFSET are `Date` in the form and ISO strings on the wire.\n * - An empty optional value is sent as `null`; an empty required value is omitted.\n */\n\nexport const NUMERIC_TYPES: readonly string[] = ['INT', 'INTEGER', 'INT_64', 'INTEGER_64', 'DOUBLE'];\nexport const DATE_TYPES: readonly string[] = ['DATE_TIME', 'DATE_TIME_OFFSET'];\nexport const ARRAY_TYPES: readonly string[] = ['STRING_ARRAY', 'INT_ARRAY', 'INTEGER_ARRAY'];\nexport const RECORD_TYPES: readonly string[] = ['RECORD', 'RECORD_ARRAY'];\n\nexport const isNumericType = (t?: string | null): boolean => !!t && NUMERIC_TYPES.includes(t);\nexport const isDateType = (t?: string | null): boolean => !!t && DATE_TYPES.includes(t);\nexport const isArrayType = (t?: string | null): boolean => !!t && ARRAY_TYPES.includes(t);\nexport const isRecordType = (t?: string | null): boolean => !!t && RECORD_TYPES.includes(t);\n\n/** Record infos keyed by versioned `ckRecordId` (as found in `CkAttributeInfo.ckRecordId`). */\nexport type RecordInfoMap = Record<string, CkRecordInfo>;\n\n/** Attribute metadata the mapper needs (a subset of {@link CkAttributeInfo}). */\nexport type MapperAttribute = Pick<CkAttributeInfo, 'attributeName' | 'valueType' | 'isOptional'>\n & Partial<Pick<CkAttributeInfo, 'enumOptions' | 'ckRecordId'>>;\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return !!v && typeof v === 'object' && !Array.isArray(v) && !(v instanceof Date);\n}\n\nfunction enumKey(value: unknown, options?: { key: number; name: string }[]): unknown {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n if (options?.length) {\n const found = options.find((o) => o.key === value || o.name === value\n || (typeof value === 'string' && o.name.toLowerCase() === value.toLowerCase())\n || (typeof value === 'string' && String(o.key) === value));\n if (found) {\n return found.key;\n }\n }\n const n = Number(value);\n return Number.isFinite(n) && value !== '' ? n : value;\n}\n\nfunction toDate(value: unknown): Date | null {\n if (value instanceof Date) {\n return isNaN(value.getTime()) ? null : value;\n }\n if (typeof value === 'string' || typeof value === 'number') {\n if (typeof value === 'string' && !value.trim()) {\n return null;\n }\n const d = new Date(value);\n return isNaN(d.getTime()) ? null : d;\n }\n return null;\n}\n\nfunction toPrimitiveArray(value: unknown, mode: 'number' | 'string'): (number | string)[] {\n let source: unknown = value;\n if (isPlainObject(source) && '_v' in source) {\n source = source['_v'];\n }\n if (!Array.isArray(source)) {\n return [];\n }\n return source\n .map((v) => (isPlainObject(v) && 'key' in v ? v['key'] : v))\n .filter((v) => v !== null && v !== undefined && v !== '')\n .map((v) => (mode === 'number' ? Number(v) : String(v)));\n}\n\n/** Converts a record value read from the API to a flat dict `{ camelSub: formValue }`. */\nexport function recordToFormDict(value: unknown, record?: CkRecordInfo, records?: RecordInfoMap): Record<string, unknown> {\n const dict: Record<string, unknown> = {};\n if (!isPlainObject(value)) {\n return dict;\n }\n // A SECRET member (AB#5528) arrives as `{ attributeName, value: null, secretIsSet, … }` in the\n // generic projection (or as the `{ isSet }` marker): it becomes its SecretState, never a value.\n const entries: [string, unknown][] = Array.isArray(value['attributes'])\n ? (value['attributes'] as { attributeName?: string; value?: unknown; secretIsSet?: boolean | null }[])\n .filter((a) => !!a?.attributeName)\n .map((a) => [a.attributeName as string, secretStateFromAttribute(a) ?? a.value])\n : Object.entries(value).filter(([k]) => k !== 'ckRecordId' && k !== '__typename');\n for (const [name, raw] of entries) {\n const sub = record?.attributes.find((a) => a.attributeName.toLowerCase() === name.toLowerCase());\n const key = sub?.attributeName ?? name;\n if ((sub && isSecretValueType(sub.valueType)) || isSecretStateObject(raw)) {\n dict[key] = toSecretState(isSecretStateObject(raw) ? raw : null);\n continue;\n }\n dict[key] = sub ? toFormValue(raw, sub, records) : raw;\n }\n return dict;\n}\n\n/**\n * Converts a raw API value to the form value shape of the given attribute.\n * Records/record arrays become arrays of flat dicts; unsupported types pass through unchanged.\n */\nexport function toFormValue(raw: unknown, attribute: MapperAttribute, records?: RecordInfoMap): unknown {\n const type = attribute.valueType;\n const record = attribute.ckRecordId ? records?.[attribute.ckRecordId] : undefined;\n if (type === 'RECORD') {\n if (raw === null || raw === undefined) {\n return [];\n }\n const items = Array.isArray(raw) ? raw : [raw];\n return items.slice(0, 1).map((r) => recordToFormDict(r, record, records));\n }\n if (type === 'RECORD_ARRAY') {\n return Array.isArray(raw) ? raw.map((r) => recordToFormDict(r, record, records)) : [];\n }\n if (raw === null || raw === undefined) {\n return isArrayType(type) ? [] : null;\n }\n if (type === 'ENUM') {\n return enumKey(raw, attribute.enumOptions);\n }\n if (isDateType(type)) {\n return toDate(raw);\n }\n if (type === 'STRING_ARRAY') {\n return toPrimitiveArray(raw, 'string');\n }\n if (type === 'INT_ARRAY' || type === 'INTEGER_ARRAY') {\n return toPrimitiveArray(raw, 'number');\n }\n if (isNumericType(type)) {\n const n = typeof raw === 'number' ? raw : Number(raw);\n return Number.isFinite(n) ? n : null;\n }\n if (type === 'BOOLEAN') {\n return raw === true || raw === 'true' || raw === 1;\n }\n return raw;\n}\n\n/** True when a form value is \"empty\" for the empty/optional rules. */\nexport function isEmptyFormValue(value: unknown, valueType?: string | null): boolean {\n if (value === null || value === undefined) {\n return true;\n }\n if (typeof value === 'string' && value === '') {\n return true;\n }\n if (Array.isArray(value) && value.length === 0 && (isArrayType(valueType) || isRecordType(valueType))) {\n return true;\n }\n if (valueType === 'RECORD' && isPlainObject(value) && Object.keys(value).length === 0) {\n return true;\n }\n return false;\n}\n\nfunction recordDictToWire(value: unknown, record?: CkRecordInfo, records?: RecordInfoMap): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (!isPlainObject(value)) {\n return result;\n }\n for (const [key, subValue] of Object.entries(value)) {\n if (!key) {\n continue;\n }\n const sub = record?.attributes.find((a) => a.attributeName === key);\n // SECRET member (handover §2): only a typed, non-empty string is sent; otherwise the member is\n // omitted and the server carries the stored value over from the element with the same record key.\n if ((sub && isSecretValueType(sub.valueType)) || isSecretStateObject(subValue)) {\n if (typeof subValue === 'string' && subValue.length > 0) {\n result[key] = subValue;\n }\n continue;\n }\n if (!sub) {\n // Pass-through without metadata (keeps explicit nulls), as AttributeMapperService does.\n result[key] = subValue;\n continue;\n }\n // Record sub-attributes count as optional (CK reports isOptional:false for every record\n // attribute; the server still enforces mandatory ones).\n const mapped = toWireValue(subValue, { ...sub, isOptional: true }, records);\n if (mapped.include) {\n result[key] = mapped.value;\n }\n }\n return result;\n}\n\n/**\n * Converts a form value to the mutation wire value.\n * `include: false` means \"omit the attribute\" (empty value of a required attribute).\n */\nexport function toWireValue(value: unknown, attribute: MapperAttribute, records?: RecordInfoMap): { include: boolean; value: unknown } {\n const type = attribute.valueType;\n const record = attribute.ckRecordId ? records?.[attribute.ckRecordId] : undefined;\n if (isEmptyFormValue(value, type)) {\n return attribute.isOptional ? { include: true, value: null } : { include: false, value: undefined };\n }\n switch (type) {\n case 'RECORD': {\n const first = Array.isArray(value) ? value[0] : value;\n const dict = recordDictToWire(first, record, records);\n if (Object.keys(dict).length === 0) {\n return attribute.isOptional ? { include: true, value: null } : { include: false, value: undefined };\n }\n return { include: true, value: dict };\n }\n case 'RECORD_ARRAY':\n return { include: true, value: (Array.isArray(value) ? value : [value]).map((r) => recordDictToWire(r, record, records)) };\n case 'ENUM':\n return { include: true, value: enumKey(value, attribute.enumOptions) };\n case 'DATE_TIME':\n case 'DATE_TIME_OFFSET': {\n const d = toDate(value);\n if (!d) {\n return attribute.isOptional ? { include: true, value: null } : { include: false, value: undefined };\n }\n return { include: true, value: d.toISOString() };\n }\n case 'STRING_ARRAY': {\n const arr = toPrimitiveArray(value, 'string');\n return arr.length ? { include: true, value: arr } : (attribute.isOptional ? { include: true, value: null } : { include: false, value: undefined });\n }\n case 'INT_ARRAY':\n case 'INTEGER_ARRAY': {\n const arr = toPrimitiveArray(value, 'number');\n return arr.length ? { include: true, value: arr } : (attribute.isOptional ? { include: true, value: null } : { include: false, value: undefined });\n }\n default:\n if (isNumericType(type) && typeof value === 'string') {\n const n = Number(value);\n return { include: true, value: Number.isFinite(n) ? n : value };\n }\n return { include: true, value };\n }\n}\n\n/**\n * Maps form values to `RtEntityAttributeInput[]` for the given attributes (in the given order).\n * Values whose key is absent from `values` are skipped.\n */\nexport function toAttributeInputs(\n values: Record<string, unknown>,\n attributes: readonly MapperAttribute[],\n records?: RecordInfoMap,\n): { attributeName: string; value: unknown }[] {\n const result: { attributeName: string; value: unknown }[] = [];\n for (const attribute of attributes) {\n if (!Object.prototype.hasOwnProperty.call(values, attribute.attributeName)) {\n continue;\n }\n const mapped = toWireValue(values[attribute.attributeName], attribute, records);\n if (mapped.include) {\n result.push({ attributeName: attribute.attributeName, value: mapped.value });\n }\n }\n return result;\n}\n\n/**\n * Parses a form `Default` string (or a CK `defaultValues[0]`) into the form value shape:\n * Int via parseInt, Double via parseFloat, Boolean via 'true'/'false', ENUM by name or key,\n * DateTime as ISO -> Date, arrays as a JSON array or a comma list. Returns `undefined` when the\n * input is empty or cannot be parsed.\n */\nexport function parseDefault(raw: unknown, attribute: MapperAttribute): unknown {\n if (raw === null || raw === undefined || (typeof raw === 'string' && raw.trim() === '')) {\n return undefined;\n }\n const type = attribute.valueType;\n const s = typeof raw === 'string' ? raw.trim() : raw;\n if (type === 'INT' || type === 'INTEGER' || type === 'INT_64' || type === 'INTEGER_64') {\n const n = typeof s === 'number' ? Math.trunc(s) : parseInt(String(s), 10);\n return Number.isNaN(n) ? undefined : n;\n }\n if (type === 'DOUBLE') {\n const n = typeof s === 'number' ? s : parseFloat(String(s));\n return Number.isNaN(n) ? undefined : n;\n }\n if (type === 'BOOLEAN') {\n if (s === true || s === false) {\n return s;\n }\n const lower = String(s).toLowerCase();\n return lower === 'true' ? true : lower === 'false' ? false : undefined;\n }\n if (type === 'ENUM') {\n const options = attribute.enumOptions ?? [];\n const found = options.find((o) => String(o.key) === String(s) || o.name.toLowerCase() === String(s).toLowerCase());\n if (found) {\n return found.key;\n }\n const n = Number(s);\n return options.length === 0 && Number.isFinite(n) ? n : undefined;\n }\n if (isDateType(type)) {\n return toDate(s) ?? undefined;\n }\n if (isArrayType(type)) {\n let arr: unknown[];\n if (Array.isArray(s)) {\n arr = s;\n } else {\n const text = String(s);\n try {\n const parsed: unknown = JSON.parse(text);\n arr = Array.isArray(parsed) ? parsed : [parsed];\n } catch {\n arr = text.split(',').map((p) => p.trim()).filter(Boolean);\n }\n }\n return type === 'STRING_ARRAY' ? arr.map((v) => String(v)) : arr.map((v) => Number(v)).filter((n) => Number.isFinite(n));\n }\n if (type === 'STRING') {\n return String(s);\n }\n return undefined;\n}\n\n/** Deep equality for form values (Dates by time, arrays/objects structurally). */\nexport function formValuesEqual(a: unknown, b: unknown): boolean {\n if (a === b) {\n return true;\n }\n const isEmpty = (v: unknown): boolean => v === null || v === undefined || v === '' || (Array.isArray(v) && v.length === 0);\n const emptyA = isEmpty(a);\n const emptyB = isEmpty(b);\n if (emptyA && emptyB) {\n return true;\n }\n if (a instanceof Date || b instanceof Date) {\n const da = toDate(a);\n const db = toDate(b);\n return !!da && !!db && da.getTime() === db.getTime();\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((v, i) => formValuesEqual(v, b[i]));\n }\n if (isPlainObject(a) && isPlainObject(b)) {\n const keys = new Set([...Object.keys(a), ...Object.keys(b)]);\n for (const k of keys) {\n if (!formValuesEqual(a[k], b[k])) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n","import { CkAttributeInfo, VisibleWhenRule } from '../models/entity-form.models';\nimport { canonicalisePath } from './attribute-path';\n\n/**\n * Parses a `VisibleWhen` expression (`Path=value` or `Path=*`). The expression is split at the\n * FIRST `=`, so values may contain `=`. The path is canonicalised against the type's attributes\n * (system properties allowed); returns `null` for an empty, malformed or unresolvable expression.\n */\nexport function parseVisibleWhen(expression: string | null | undefined, attributes: readonly CkAttributeInfo[]): VisibleWhenRule | null {\n const raw = (expression ?? '').trim();\n const eq = raw.indexOf('=');\n if (eq <= 0) {\n return null;\n }\n const canonical = canonicalisePath(raw.substring(0, eq).trim(), attributes);\n if (canonical.kind !== 'attribute' && canonical.kind !== 'system') {\n return null;\n }\n const value = raw.substring(eq + 1).trim();\n return { path: canonical.name, value: value === '*' ? '*' : value };\n}\n\n/** True when a form value counts as \"has a value\" (`Path=*`). */\nexport function hasValue(value: unknown): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n return true;\n}\n\n/**\n * Evaluates a rule against the current form values.\n *\n * - `*`: visible when the source has a value, or (for a secret source) when the server reports the\n * secret as set (`secretPresence[path] === true`).\n * - Booleans compare against `true`/`false` (case-insensitive).\n * - Enums compare against the key or the name (case-insensitive) using `enumOptions`.\n * - Everything else compares the string form (case-sensitive).\n */\nexport function isVisible(\n rule: VisibleWhenRule | undefined | null,\n values: Record<string, unknown>,\n secretPresence: Record<string, boolean> = {},\n enumOptions?: { key: number; name: string }[],\n): boolean {\n if (!rule) {\n return true;\n }\n const value = values[rule.path];\n if (rule.value === '*') {\n return hasValue(value) || secretPresence[rule.path] === true;\n }\n if (value === null || value === undefined) {\n return false;\n }\n if (typeof value === 'boolean') {\n return String(value) === rule.value.toLowerCase();\n }\n if (enumOptions?.length) {\n const target = enumOptions.find((o) => String(o.key) === rule.value || o.name.toLowerCase() === rule.value.toLowerCase());\n const current = enumOptions.find((o) => o.key === Number(value) || (typeof value === 'string' && o.name.toLowerCase() === value.toLowerCase()));\n if (target && current) {\n return target.key === current.key;\n }\n }\n return String(value) === rule.value;\n}\n","import {\n CkAssociationRoleInfo,\n CkAttributeInfo,\n CkRecordInfo,\n CkTypeInfo,\n EntityFormDefinition,\n EntityFormEditor,\n EntityFormFieldDef,\n ReadOnlyMode,\n ResolvedEntityForm,\n ResolvedField,\n EntityListSortDescriptor,\n ResolvedListColumn,\n ResolvedSection,\n} from '../models/entity-form.models';\nimport { isSecretAttributeCandidate, isSecretValueType } from '@meshmakers/octo-services';\nimport { canonicalisePath, isForcedReadOnly, isRuntimeStateAttribute } from './attribute-path';\nimport { BUILT_IN_DEFAULT_FORM } from './built-in-default-form';\nimport { humanizeCkTypeName } from './ck-type-name';\nimport { parseDefault, isArrayType, isDateType, isNumericType, isRecordType } from './entity-form-value-mapper';\nimport { parseVisibleWhen } from './visible-when';\n\n/** Section key of the implicit section used when a form declares no sections. */\nexport const DEFAULT_SECTION_KEY = '__default';\n/** Section key of the section holding generated (unmentioned) attributes. */\nexport const GENERATED_SECTION_KEY = '__generated';\n/** Default title of the generated section. */\nexport const DEFAULT_GENERATED_SECTION_TITLE = 'Further attributes';\n\nexport type EntityFormSource = 'tenant' | 'seeded';\n\nexport interface ResolveEntityFormOptions {\n /** Record metadata keyed by versioned ckRecordId (CkAttributeInfo.ckRecordId). */\n records?: Record<string, CkRecordInfo>;\n}\n\nconst TEXT_LIKE_EDITORS: readonly EntityFormEditor[] = ['text', 'multiline', 'password', 'url', 'email', 'json', 'yaml', 'cron'];\nconst PATTERN_EDITORS: readonly EntityFormEditor[] = ['text', 'multiline', 'password', 'url', 'email'];\nconst KNOWN_EDITORS: readonly EntityFormEditor[] = [\n 'text', 'multiline', 'password', 'number', 'toggle', 'enum', 'datetime', 'url', 'email', 'json', 'yaml',\n 'cron', 'chips', 'reference', 'records', 'unsupported',\n];\nconst SCALAR_LIST_TYPES: readonly string[] = ['STRING', 'INT', 'INTEGER', 'INT_64', 'INTEGER_64', 'DOUBLE', 'BOOLEAN', 'ENUM', 'DATE_TIME', 'DATE_TIME_OFFSET'];\n\n/**\n * Secret decision of an attribute (AB#5522 D5, AB#5542) — the shared octo-services rule\n * `isSecretAttributeCandidate` with one precedence everywhere:\n * 1. an explicit form decision (`Secret: true|false`; editor `password` counts as `true`),\n * 2. the CK metaData marker (`secret: true|false` — `false` opts out of the name rule),\n * 3. the credential-name rule for TEXTUAL attributes only (suffixes password, passphrase, secret,\n * secretKey, privateKey, apiKey, token, connectionString, credential(s), encryptedValue), so\n * `isSecret: BOOLEAN` or a `credentials` record are never secrets by name.\n * 0. Before all of these: the SECRET value type (AB#5528) is always secret — a form cannot opt\n * it out (`Secret: false` is ignored with a warning).\n * The marker and the name rule remain the fallback for non-SECRET attributes (models that have not\n * switched their credentials to SECRET yet).\n */\nfunction decideSecret(attribute: CkAttributeInfo, formDecision?: boolean | null): boolean {\n const metaSecret = attribute.metaSecret ?? (attribute.secret ? true : undefined);\n return isSecretAttributeCandidate({\n attributeName: attribute.attributeName,\n attributeValueType: attribute.valueType,\n secret: formDecision ?? metaSecret,\n });\n}\n\n/** True when a CK attribute is secret by metaData or by the name heuristic (no form decision). */\nexport function isSecretAttribute(attribute: CkAttributeInfo): boolean {\n return decideSecret(attribute);\n}\n\nconst sameId = (a: string | null | undefined, b: string | null | undefined): boolean =>\n !!a && !!b && a.toLowerCase() === b.toLowerCase();\n\n/** `maxConcurrentConnections` -> `Max concurrent connections`; `SftpConfiguration` -> `Sftp configuration`. */\nexport function humanize(name: string): string {\n const spaced = name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')\n .replace(/[_-]+/g, ' ')\n .trim()\n .toLowerCase();\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n}\n\n\n// ─── Picking ────────────────────────────────────────────────────────────────────────\n\nfunction compareCandidates(a: EntityFormDefinition, b: EntityFormDefinition): number {\n if (a.isTenantForm !== b.isTenantForm) {\n return a.isTenantForm ? -1 : 1;\n }\n const pa = a.priority ?? 0;\n const pb = b.priority ?? 0;\n if (pa !== pb) {\n return pb - pa;\n }\n // Deterministic final tie-break (plan addition): rtWellKnownName, then rtId, ascending.\n const ka = a.rtWellKnownName || a.rtId || '';\n const kb = b.rtWellKnownName || b.rtId || '';\n if (ka !== kb) {\n return ka < kb ? -1 : 1;\n }\n return (a.rtId || '') < (b.rtId || '') ? -1 : (a.rtId || '') > (b.rtId || '') ? 1 : 0;\n}\n\n/**\n * Picks the form for a type. Exact-target forms win; otherwise the nearest ancestor that has\n * forms with `includeDerivedTypes` supplies the candidates. Candidates are ordered tenant before\n * seeded, then priority descending, then rtWellKnownName/rtId ascending. Forms are never merged.\n */\nexport function pickEntityForm(\n type: CkTypeInfo,\n forms: readonly EntityFormDefinition[],\n): { form: EntityFormDefinition; source: EntityFormSource } | null {\n let candidates = forms.filter((f) => sameId(f.targetCkTypeId, type.rtCkTypeId));\n if (candidates.length === 0) {\n for (const ancestor of type.ancestors) {\n const atAncestor = forms.filter((f) => f.includeDerivedTypes === true && sameId(f.targetCkTypeId, ancestor));\n if (atAncestor.length > 0) {\n candidates = atAncestor;\n break;\n }\n }\n }\n if (candidates.length === 0) {\n return null;\n }\n const form = [...candidates].sort(compareCandidates)[0];\n return { form, source: form.isTenantForm ? 'tenant' : 'seeded' };\n}\n\n// ─── Field rules ─────────────────────────────────────────────────────────────────────\n\n/** Editor chosen when the form says `auto`, nothing, or something unknown. */\nexport function autoEditorFor(valueType: string | null | undefined): EntityFormEditor {\n switch (valueType) {\n case 'STRING':\n return 'text';\n case 'SECRET':\n // SECRET value type (AB#5528): a write-only secret field (badge, show toggle, clear).\n return 'password';\n case 'INT':\n case 'INTEGER':\n case 'INT_64':\n case 'INTEGER_64':\n case 'DOUBLE':\n return 'number';\n case 'BOOLEAN':\n return 'toggle';\n case 'DATE_TIME':\n case 'DATE_TIME_OFFSET':\n return 'datetime';\n case 'ENUM':\n return 'enum';\n case 'STRING_ARRAY':\n case 'INT_ARRAY':\n case 'INTEGER_ARRAY':\n return 'chips';\n case 'RECORD':\n case 'RECORD_ARRAY':\n return 'records';\n default:\n return 'unsupported';\n }\n}\n\n/** True when an explicit editor can edit the given value type. */\nexport function isEditorCompatible(editor: EntityFormEditor, valueType: string | null | undefined): boolean {\n if (editor === 'unsupported') {\n return true;\n }\n if (isSecretValueType(valueType)) {\n // A SECRET is always write-only text: single line (`password`) or multiline (PEM keys, Q10).\n return editor === 'password' || editor === 'multiline';\n }\n if (TEXT_LIKE_EDITORS.includes(editor)) {\n return valueType === 'STRING';\n }\n switch (editor) {\n case 'number':\n return isNumericType(valueType);\n case 'toggle':\n return valueType === 'BOOLEAN';\n case 'enum':\n return valueType === 'ENUM';\n case 'datetime':\n return isDateType(valueType);\n case 'records':\n return isRecordType(valueType);\n case 'chips':\n return isArrayType(valueType);\n case 'reference':\n return valueType === 'STRING';\n default:\n return false;\n }\n}\n\nfunction parseReadOnly(value: string | null | undefined): ReadOnlyMode {\n const v = (value ?? '').trim().toLowerCase();\n if (v === 'always') {\n return 'always';\n }\n if (v === 'aftercreate') {\n return 'afterCreate';\n }\n return 'never';\n}\n\nfunction resolveEditor(def: EntityFormFieldDef | null, attribute: CkAttributeInfo, warnings: string[]): EntityFormEditor {\n const auto = autoEditorFor(attribute.valueType);\n const raw = (def?.editor ?? '').trim().toLowerCase();\n if (!raw || raw === 'auto') {\n return auto;\n }\n const explicit = KNOWN_EDITORS.find((e) => e === raw);\n if (!explicit) {\n return auto;\n }\n if (!isEditorCompatible(explicit, attribute.valueType)) {\n warnings.push(`Field '${def?.attributePath}': editor '${explicit}' is not compatible with ${attribute.valueType}; using '${auto}'.`);\n return auto;\n }\n return explicit;\n}\n\nfunction recordColumns(attribute: CkAttributeInfo, def: EntityFormFieldDef | null, records?: Record<string, CkRecordInfo>): { path: string; label: string }[] {\n const record = attribute.ckRecordId ? records?.[attribute.ckRecordId] : undefined;\n if (def?.recordColumns?.length) {\n return def.recordColumns\n .map((c) => {\n const sub = record?.attributes.find((a) => a.attributeName.toLowerCase() === c.toLowerCase());\n if (record && !sub) {\n return null;\n }\n const path = sub?.attributeName ?? c.charAt(0).toLowerCase() + c.slice(1);\n return { path, label: humanize(path) };\n })\n .filter((c): c is { path: string; label: string } => c !== null);\n }\n return (record?.attributes ?? [])\n .filter((a) => SCALAR_LIST_TYPES.includes(a.valueType) && !isSecretAttribute(a))\n .slice(0, 4)\n .map((a) => ({ path: a.attributeName, label: humanize(a.attributeName) }));\n}\n\nfunction buildAttributeField(\n attribute: CkAttributeInfo,\n def: EntityFormFieldDef | null,\n generated: boolean,\n type: CkTypeInfo,\n warnings: string[],\n records?: Record<string, CkRecordInfo>,\n): ResolvedField {\n let editor = resolveEditor(def, attribute, warnings);\n const explicitPassword = (def?.editor ?? '').trim().toLowerCase() === 'password';\n // A `password` editor always means secret (it cannot be opted out of with Secret: false).\n const formDecision = def?.secret === true || explicitPassword ? true : def?.secret === false ? false : undefined;\n const secret = decideSecret(attribute, formDecision);\n if (formDecision === false && isSecretValueType(attribute.valueType)) {\n warnings.push(`Field '${def?.attributePath}': Secret: false is ignored for a SECRET attribute.`);\n }\n let readOnly = parseReadOnly(def?.readOnly);\n if (isForcedReadOnly(attribute.attributeName) || editor === 'unsupported') {\n readOnly = 'always';\n }\n // Generated fields never edit runtime state (form-default in the Data Explorer peek).\n if (generated && isRuntimeStateAttribute(attribute.attributeName)) {\n readOnly = 'always';\n }\n const numeric = isNumericType(attribute.valueType);\n const field: ResolvedField = {\n key: attribute.attributeName,\n kind: 'attribute',\n attributeName: attribute.attributeName,\n valueType: attribute.valueType,\n label: def?.label || humanize(attribute.attributeName),\n editor,\n required: !attribute.isOptional || def?.required === true,\n readOnly,\n width: 'full',\n order: 0,\n secret,\n generated,\n };\n const help = def?.help ?? (generated ? attribute.description ?? undefined : undefined);\n if (help) {\n field.help = help;\n }\n if (def?.placeholder) {\n field.placeholder = def.placeholder;\n }\n if (numeric && def?.min !== null && def?.min !== undefined) {\n field.min = def.min;\n }\n if (numeric && def?.max !== null && def?.max !== undefined) {\n field.max = def.max;\n }\n if (def?.pattern && PATTERN_EDITORS.includes(editor)) {\n field.pattern = def.pattern;\n }\n const defaultValue = def?.default !== null && def?.default !== undefined && def.default !== ''\n ? parseDefault(def.default, attribute)\n : parseDefault(attribute.defaultValues?.[0], attribute);\n if (defaultValue !== undefined) {\n field.defaultValue = defaultValue;\n }\n if (attribute.enumOptions?.length) {\n field.enumOptions = attribute.enumOptions;\n }\n if (isRecordType(attribute.valueType) && attribute.ckRecordId) {\n field.record = {\n ckRecordId: attribute.ckRecordId,\n single: attribute.valueType === 'RECORD',\n columns: recordColumns(attribute, def, records),\n };\n }\n if (editor === 'reference') {\n // Attribute-held reference: the STRING attribute stores the target rtId (single).\n const target = def?.referenceCkTypeId;\n if (target) {\n field.reference = { targetCkTypeId: target, multiple: false, ...displayAttributesOf(def) };\n } else {\n warnings.push(`Field '${def?.attributePath}': editor 'reference' needs ReferenceCkTypeId or AssociationRoleId; using text.`);\n editor = 'text';\n field.editor = editor;\n }\n }\n if (def?.visibleWhen) {\n const rule = parseVisibleWhen(def.visibleWhen, type.attributes);\n if (rule) {\n field.visibleWhen = rule;\n } else {\n warnings.push(`Field '${def.attributePath}': VisibleWhen '${def.visibleWhen}' cannot be resolved; rule dropped.`);\n }\n }\n return field;\n}\n\nfunction buildSystemField(name: string, def: EntityFormFieldDef, type: CkTypeInfo, warnings: string[]): ResolvedField {\n const isDate = name !== 'rtWellKnownName';\n const field: ResolvedField = {\n key: name,\n kind: 'system',\n valueType: isDate ? 'DATE_TIME' : 'STRING',\n label: def.label || (name === 'rtWellKnownName' ? 'Well-known name' : name === 'rtCreationDateTime' ? 'Created' : 'Changed'),\n editor: isDate ? 'datetime' : 'text',\n required: def.required === true,\n readOnly: isDate ? 'always' : parseReadOnly(def.readOnly),\n width: 'full',\n order: 0,\n secret: false,\n generated: false,\n };\n if (def.help) {\n field.help = def.help;\n }\n if (def.placeholder) {\n field.placeholder = def.placeholder;\n }\n if (!isDate && def.pattern) {\n field.pattern = def.pattern;\n }\n if (!isDate && def.default) {\n field.defaultValue = def.default;\n }\n if (def.visibleWhen) {\n const rule = parseVisibleWhen(def.visibleWhen, type.attributes);\n if (rule) {\n field.visibleWhen = rule;\n } else {\n warnings.push(`Field '${def.attributePath}': VisibleWhen '${def.visibleWhen}' cannot be resolved; rule dropped.`);\n }\n }\n return field;\n}\n\nfunction displayAttributesOf(def: EntityFormFieldDef | undefined | null): { displayAttributes?: string[] } {\n const names = (def?.referenceDisplayAttributes ?? []).map((n) => n.trim()).filter((n) => !!n);\n return names.length ? { displayAttributes: names } : {};\n}\n\n/**\n * Form control key of an association field: `assoc:<rtRoleId>` with `.` replaced by `_` —\n * Angular FormGroup keys must not contain `.` (\"FormGroup keys cannot include '.'\" for role ids\n * such as `System.Communication/Manages`, visual check 2026-10-06). The key is only an id; the\n * role itself travels on `ResolvedField.association`.\n */\nexport function associationFieldKey(rtRoleId: string): string {\n return `assoc:${rtRoleId.replace(/\\./g, '_')}`;\n}\n\nfunction findRole(type: CkTypeInfo, roleId: string): CkAssociationRoleInfo | undefined {\n const matches = type.associations.filter((r) => sameId(r.rtRoleId, roleId));\n return matches.find((r) => r.direction === 'out') ?? matches[0];\n}\n\nfunction buildAssociationField(role: CkAssociationRoleInfo, def: EntityFormFieldDef, type: CkTypeInfo, warnings: string[]): ResolvedField {\n const field: ResolvedField = {\n key: associationFieldKey(role.rtRoleId),\n kind: 'association',\n label: def.label || humanize(role.navigationPropertyName),\n editor: 'reference',\n required: def.required === true,\n readOnly: parseReadOnly(def.readOnly),\n width: 'full',\n order: 0,\n secret: false,\n generated: false,\n reference: {\n targetCkTypeId: def.referenceCkTypeId || role.otherRtCkTypeId,\n role,\n multiple: role.multiplicity === 'N',\n ...displayAttributesOf(def),\n },\n };\n if (def.help) {\n field.help = def.help;\n }\n if (def.placeholder) {\n field.placeholder = def.placeholder;\n }\n if (def.visibleWhen) {\n const rule = parseVisibleWhen(def.visibleWhen, type.attributes);\n if (rule) {\n field.visibleWhen = rule;\n } else {\n warnings.push(`Field '${def.attributePath}': VisibleWhen '${def.visibleWhen}' cannot be resolved; rule dropped.`);\n }\n }\n return field;\n}\n\n/** Sort by `order` ascending; absent orders after explicit ones, stable in definition order. */\nfunction sortByOrder<T>(items: readonly T[], order: (item: T) => number | null | undefined): T[] {\n return items\n .map((item, index) => ({ item, index, order: order(item) }))\n .sort((a, b) => {\n const ha = a.order !== null && a.order !== undefined;\n const hb = b.order !== null && b.order !== undefined;\n if (ha && hb && a.order !== b.order) {\n return (a.order as number) - (b.order as number);\n }\n if (ha !== hb) {\n return ha ? -1 : 1;\n }\n return a.index - b.index;\n })\n .map((x) => x.item);\n}\n\n// ─── Read set ────────────────────────────────────────────────────────────────────────\n\n/** Record sub-attribute names (nested records included) with every value type each name has. */\nfunction collectRecordSubNames(ckRecordId: string, records: Record<string, CkRecordInfo> | undefined, into: Map<string, Set<string>>, seen: Set<string>): void {\n if (seen.has(ckRecordId)) {\n return;\n }\n seen.add(ckRecordId);\n const record = records?.[ckRecordId];\n for (const sub of record?.attributes ?? []) {\n const types = into.get(sub.attributeName) ?? new Set<string>();\n types.add(sub.valueType ?? '');\n into.set(sub.attributeName, types);\n if (isRecordType(sub.valueType) && sub.ckRecordId) {\n collectRecordSubNames(sub.ckRecordId, records, into, seen);\n }\n }\n}\n\n// ─── List columns ────────────────────────────────────────────────────────────────────\n\nconst SYSTEM_COLUMN_LABELS: Record<string, string> = {\n rtWellKnownName: 'Well-known name',\n rtCreationDateTime: 'Created',\n rtChangedDateTime: 'Changed',\n};\n\nfunction resolveListColumns(form: EntityFormDefinition, type: CkTypeInfo, secretNames: Set<string>): ResolvedListColumn[] {\n const columns: ResolvedListColumn[] = [];\n const seen = new Set<string>();\n for (const def of form.listColumns) {\n const c = canonicalisePath(def.attributePath, type.attributes);\n let column: ResolvedListColumn | null = null;\n if (c.kind === 'system') {\n column = { field: c.name, label: def.label || SYSTEM_COLUMN_LABELS[c.name], kind: 'system', display: 'text' };\n column.display = normaliseDisplay(def.display, c.name === 'rtWellKnownName' ? 'STRING' : 'DATE_TIME');\n } else if (c.kind === 'attribute' && !secretNames.has(c.name) && !isSecretAttribute(c.attribute) && !isRecordType(c.attribute.valueType)) {\n column = { field: c.name, label: def.label || humanize(c.name), kind: 'attribute', display: normaliseDisplay(def.display, c.attribute.valueType), ...listColumnType(c.attribute) };\n }\n if (column && !seen.has(column.field)) {\n if (def.width !== null && def.width !== undefined) {\n column.width = def.width;\n }\n seen.add(column.field);\n columns.push(column);\n }\n }\n if (columns.length > 0) {\n return columns;\n }\n const derived: ResolvedListColumn[] = [{ field: 'rtWellKnownName', label: SYSTEM_COLUMN_LABELS['rtWellKnownName'], kind: 'system', display: 'text' }];\n const name = type.attributes.find((a) => a.attributeName === 'name');\n if (name && !secretNames.has('name') && !isSecretAttribute(name)) {\n derived.push({ field: 'name', label: 'Name', kind: 'attribute', display: 'text' });\n }\n derived.push({ field: 'rtChangedDateTime', label: SYSTEM_COLUMN_LABELS['rtChangedDateTime'], kind: 'system', display: 'date' });\n type.attributes\n .filter((a) => a.attributeName !== 'name' && !isSecretAttribute(a) && !secretNames.has(a.attributeName)\n && !isForcedReadOnly(a.attributeName) && SCALAR_LIST_TYPES.includes(a.valueType))\n .slice(0, 3)\n .forEach((a) => derived.push({ field: a.attributeName, label: humanize(a.attributeName), kind: 'attribute', display: normaliseDisplay(null, a.valueType), ...listColumnType(a) }));\n return derived;\n}\n\n/**\n * The default list order of a form (AB#5623): `listDefaultSort` canonicalised against the type.\n * Unknown paths, secrets and record attributes are dropped (with a warning); `rtId` sorts by id.\n */\nexport function resolveListDefaultSort(\n form: EntityFormDefinition,\n type: CkTypeInfo,\n secretNames: ReadonlySet<string>,\n warnings: string[] = [],\n): EntityListSortDescriptor[] {\n const result: EntityListSortDescriptor[] = [];\n for (const def of form.listDefaultSort ?? []) {\n const dir: 'asc' | 'desc' = def.direction === 'desc' ? 'desc' : 'asc';\n const c = canonicalisePath(def.attributePath, type.attributes);\n let field: string | null = null;\n if (c.kind === 'system') {\n field = c.name;\n } else if (c.kind === 'rtId') {\n field = 'rtId';\n } else if (c.kind === 'attribute' && !secretNames.has(c.name) && !isSecretAttribute(c.attribute) && !isRecordType(c.attribute.valueType)) {\n field = c.name;\n }\n if (!field) {\n warnings.push(`List default sort '${def.attributePath}' is not a sortable attribute of ${type.rtCkTypeId}; ignored.`);\n continue;\n }\n if (!result.some((r) => r.field === field)) {\n result.push({ field, dir });\n }\n }\n return result;\n}\n\n/** Value type (and enum options) of an attribute column, used to format its cells. */\nfunction listColumnType(attribute: CkAttributeInfo): Pick<ResolvedListColumn, 'valueType' | 'enumOptions'> {\n return {\n valueType: attribute.valueType,\n ...(attribute.enumOptions?.length ? { enumOptions: attribute.enumOptions } : {}),\n };\n}\n\nfunction normaliseDisplay(display: string | null | undefined, valueType: string): ResolvedListColumn['display'] {\n const d = (display ?? '').trim().toLowerCase();\n if (d === 'text' || d === 'chip' || d === 'date' || d === 'mono') {\n return d;\n }\n return isDateType(valueType) ? 'date' : 'text';\n}\n\n// ─── Resolve ─────────────────────────────────────────────────────────────────────────\n\n/**\n * Resolves the form for a type: picks it ({@link pickEntityForm}), falls back to\n * {@link BUILT_IN_DEFAULT_FORM} (`source: 'builtIn'`, with a warning), and matches every field\n * against the CK metadata. See plan §2.2 for the normative rules; they are implemented here\n * in the order they are listed there.\n */\nexport function resolveEntityForm(\n type: CkTypeInfo,\n forms: readonly EntityFormDefinition[],\n opts: ResolveEntityFormOptions = {},\n): ResolvedEntityForm {\n const warnings: string[] = [];\n const picked = pickEntityForm(type, forms);\n const form = picked?.form ?? BUILT_IN_DEFAULT_FORM;\n if (!picked) {\n warnings.push(`No entity form applies to '${type.rtCkTypeId}'; using the built-in default form.`);\n }\n const exact = sameId(form.targetCkTypeId, type.rtCkTypeId);\n\n // Sections\n const sortedSections = sortByOrder(form.sections, (s) => s.order);\n const sections: ResolvedSection[] = sortedSections.length\n ? sortedSections.map((s) => {\n const section: ResolvedSection = {\n key: s.key,\n title: s.title ?? s.key,\n columns: s.columns === 2 ? 2 : 1,\n collapsed: s.collapsed === true,\n generated: false,\n fields: [],\n };\n if (s.description) {\n section.description = s.description;\n }\n return section;\n })\n : [{ key: DEFAULT_SECTION_KEY, title: null, columns: 1, collapsed: false, generated: false, fields: [] }];\n\n // Fields\n const mentioned = new Set<string>();\n const placed: { section: ResolvedSection; field: ResolvedField; def: EntityFormFieldDef }[] = [];\n for (const def of form.fields) {\n let field: ResolvedField;\n const editorRaw = (def.editor ?? '').trim().toLowerCase();\n if (editorRaw === 'reference' && def.associationRoleId) {\n const role = findRole(type, def.associationRoleId);\n if (!role) {\n warnings.push(`Field '${def.attributePath}': association role '${def.associationRoleId}' not found on '${type.rtCkTypeId}'; skipped.`);\n continue;\n }\n const key = associationFieldKey(role.rtRoleId);\n if (mentioned.has(key)) {\n warnings.push(`Field '${def.attributePath}': duplicate definition; the first one wins.`);\n continue;\n }\n mentioned.add(key);\n if (def.hidden === true) {\n continue;\n }\n field = buildAssociationField(role, def, type, warnings);\n } else {\n const c = canonicalisePath(def.attributePath, type.attributes);\n if (c.kind === 'rtId' || c.kind === 'unknown') {\n continue;\n }\n if (c.kind === 'dotted') {\n warnings.push(`Field '${def.attributePath}': dotted attribute paths are not supported yet; skipped.`);\n continue;\n }\n if (mentioned.has(c.name)) {\n warnings.push(`Field '${def.attributePath}': duplicate definition; the first one wins.`);\n continue;\n }\n mentioned.add(c.name);\n if (def.hidden === true) {\n continue;\n }\n field = c.kind === 'system'\n ? buildSystemField(c.name, def, type, warnings)\n : buildAttributeField(c.attribute, def, false, type, warnings, opts.records);\n }\n const section = sections.find((s) => def.sectionKey && s.key === def.sectionKey) ?? sections[0];\n placed.push({ section, field, def });\n }\n for (const section of sections) {\n const mine = placed.filter((p) => p.section === section);\n section.fields = sortByOrder(mine, (p) => p.def.order).map((p, index) => {\n p.field.order = index;\n p.field.width = section.columns === 2 && (p.def.width ?? '').trim().toLowerCase() === 'half' ? 'half' : 'full';\n return p.field;\n });\n }\n const resultSections = sections.filter((s) => s.fields.length > 0);\n\n // Remaining fields\n if (form.generateRemainingFields !== false) {\n const generatedFields = type.attributes\n .filter((a) => !mentioned.has(a.attributeName))\n .map((a, index) => {\n const f = buildAttributeField(a, null, true, type, warnings, opts.records);\n f.order = index;\n return f;\n });\n if (generatedFields.length > 0) {\n resultSections.push({\n key: GENERATED_SECTION_KEY,\n title: form.generatedSectionTitle || DEFAULT_GENERATED_SECTION_TITLE,\n columns: 1,\n collapsed: false,\n generated: true,\n fields: generatedFields,\n });\n }\n }\n\n // Read set and secrets (D5.2)\n const allFields = resultSections.flatMap((s) => s.fields);\n const attributeFields = allFields.filter((f) => f.kind === 'attribute' && f.attributeName);\n const secretNames = new Set<string>([\n ...attributeFields.filter((f) => f.secret).map((f) => f.attributeName as string),\n // Attributes without a field: metaData > name rule (a field's own decision is above).\n ...type.attributes.filter((a) => !attributeFields.some((f) => f.attributeName === a.attributeName) && isSecretAttribute(a)).map((a) => a.attributeName),\n ]);\n const secretFields = attributeFields.filter((f) => f.secret).map((f) => f.attributeName as string);\n // SECRET-typed attributes (AB#5528) are safe to READ: the server returns value null plus\n // secretIsSet. A name that is also a heuristic (non-SECRET) secret is never read.\n const secretValueTypeNames = new Set(type.attributes.filter((a) => isSecretValueType(a.valueType)).map((a) => a.attributeName));\n const heuristicSecretNames = new Set([...secretNames].filter((n) => !secretValueTypeNames.has(n)));\n let secretStateFields = secretFields.filter((n) => secretValueTypeNames.has(n) && !heuristicSecretNames.has(n));\n const readableSecrets = new Set(secretStateFields);\n /**\n * SECRET names that must not be listed after all: the `attributeNames` filter also applies inside\n * records, so listing a top-level SECRET name would return a NON-SECRET record member of the same\n * name in clear text. Such a SECRET falls back to the presence probe (no `setAt` / key missing).\n */\n const unlistableSecrets = new Set<string>();\n const read = new Set<string>();\n for (const f of attributeFields) {\n if (f.secret) {\n continue;\n }\n read.add(f.attributeName as string);\n if (f.record) {\n const subs = new Map<string, Set<string>>();\n collectRecordSubNames(f.record.ckRecordId, opts.records, subs, new Set<string>());\n let collision = false;\n for (const [sub, subTypes] of subs) {\n // Safe only when the top-level name is a readable SECRET AND every member of that name is a\n // SECRET too (the server redacts both); otherwise keep the protective rule: not read, read-only.\n const onlySecretMembers = [...subTypes].every((t) => isSecretValueType(t));\n if (secretNames.has(sub) && !(readableSecrets.has(sub) && onlySecretMembers)) {\n collision = true;\n if (readableSecrets.has(sub)) {\n unlistableSecrets.add(sub);\n }\n } else {\n read.add(sub);\n }\n }\n if (collision) {\n f.readOnly = 'always';\n warnings.push(`Field '${f.attributeName}': a record sub-attribute shares its name with a secret attribute; the field is read-only so saving cannot erase it.`);\n }\n }\n }\n // A record sub-name must never re-add a secret top-level name.\n for (const s of secretNames) {\n read.delete(s);\n }\n secretStateFields = secretStateFields.filter((n) => !unlistableSecrets.has(n));\n // ...except SECRET attributes, which are read for their state only.\n for (const s of secretStateFields) {\n read.add(s);\n }\n\n const result: ResolvedEntityForm = {\n source: picked ? picked.source : 'builtIn',\n rtCkTypeId: type.rtCkTypeId,\n formTargetCkTypeId: form.targetCkTypeId,\n isAbstract: type.isAbstract,\n includeDerivedTypes: form.includeDerivedTypes,\n title: (exact && form.name) || humanizeCkTypeName(type.rtCkTypeId),\n capabilities: {\n canCreate: form.canCreate !== false,\n canEdit: form.canEdit !== false,\n canDelete: form.canDelete !== false,\n canDuplicate: form.canDuplicate === true,\n canExport: form.canExport === true,\n createRequiresSubtype: type.isAbstract,\n },\n sections: resultSections,\n listColumns: resolveListColumns(form, type, secretNames),\n readAttributeNames: [...read],\n secretFields,\n secretStateFields,\n warnings,\n };\n const listDefaultSort = resolveListDefaultSort(form, type, secretNames, warnings);\n if (listDefaultSort.length > 0) {\n result.listDefaultSort = listDefaultSort;\n }\n if (picked) {\n result.formRtId = form.rtId;\n if (form.rtWellKnownName) {\n result.formWellKnownName = form.rtWellKnownName;\n }\n }\n if (exact && form.description) {\n result.description = form.description;\n }\n if (form.category) {\n result.category = form.category;\n }\n if (form.icon) {\n result.icon = form.icon;\n }\n if (form.customComponent) {\n result.customComponent = form.customComponent;\n }\n if (form.singleton === true) {\n result.singleton = form.singletonWellKnownName ? { wellKnownName: form.singletonWellKnownName } : {};\n }\n return result;\n}\n","import { InjectionToken } from '@angular/core';\nimport { CkTypeInfo, EntityFormDefinition } from '../models/entity-form.models';\nimport { pickEntityForm } from './entity-form-resolver';\n\n/**\n * Host-provided built-in forms (AB#5524). Each one stands in for a delivered form of its target\n * type **only where the normal resolution would end at the chain end** (`form-default` on\n * `System/Entity`, or no form at all) — e.g. before a new version of the seeding blueprint has\n * been rolled out. A tenant or seeded form for the exact type, or for an ancestor with\n * `IncludeDerivedTypes`, always wins over a fallback. Same idea as the built-in `form-default`\n * safety net (concept §5.3 step 4), but per type and owned by the host.\n *\n * Provide them at root with this token, or — to keep the entry point out of the initial bundle —\n * with `provideEntityFormFallbacks(forms)` on lazy routes (registers them in the root\n * `EntityFormService`, one cache).\n *\n * Use the delivered form's `rtWellKnownName` (`form-sap-configuration`) so URL keys stay the same\n * when the seeded form arrives, set `isTenantForm: false` and leave `rtId` empty. As soon as any\n * form (tenant or seeded) targets the type, the fallback is ignored — a tenant can therefore hide\n * a fallback entry from a settings overview by creating a form without `Category`.\n */\nexport const ENTITY_FORM_FALLBACK_FORMS = new InjectionToken<readonly EntityFormDefinition[]>('ENTITY_FORM_FALLBACK_FORMS');\n\n/**\n * The loaded forms plus every fallback whose target type no loaded form targets (exact type,\n * case-insensitive). Later fallbacks for an already covered type are dropped as well.\n */\nexport function withFallbackForms(\n loaded: readonly EntityFormDefinition[],\n fallbacks: readonly EntityFormDefinition[] | null | undefined,\n): EntityFormDefinition[] {\n const result = [...loaded];\n if (!fallbacks?.length) {\n return result;\n }\n const covered = new Set(loaded.map((f) => (f.targetCkTypeId ?? '').trim().toLowerCase()).filter((t) => !!t));\n for (const fallback of fallbacks) {\n const target = (fallback.targetCkTypeId ?? '').trim().toLowerCase();\n if (!target || covered.has(target)) {\n continue;\n }\n covered.add(target);\n result.push({ ...fallback, isTenantForm: false });\n }\n return result;\n}\n\n/** The end of the resolution chain: a form on `System/Entity` (the seeded or built-in `form-default`). */\nexport function isChainEndForm(form: Pick<EntityFormDefinition, 'targetCkTypeId'>): boolean {\n return (form.targetCkTypeId ?? '').trim().toLowerCase() === 'system/entity';\n}\n\n/**\n * The fallbacks that apply on top of the loaded forms: per target type (first fallback wins),\n * only when the type exists (`typeOf` returns its CK metadata) and `pickEntityForm(type, loaded)`\n * finds nothing or only the chain end. Fallbacks for a type without metadata are dropped, so a\n * tenant without that model gets no Settings entry for it.\n */\nexport function selectFallbackForms(\n loaded: readonly EntityFormDefinition[],\n fallbacks: readonly EntityFormDefinition[] | null | undefined,\n typeOf: (rtCkTypeId: string) => CkTypeInfo | null | undefined,\n): EntityFormDefinition[] {\n const candidates = withFallbackForms(loaded, fallbacks).slice(loaded.length);\n return candidates.filter((fallback) => {\n const type = typeOf(fallback.targetCkTypeId);\n if (!type) {\n return false;\n }\n const picked = pickEntityForm(type, loaded);\n return !picked || isChainEndForm(picked.form);\n });\n}\n","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormTypeProbeQueryVariablesDto = Types.Exact<{ [key: string]: never; }>;\n\n\nexport type EntityFormTypeProbeQueryDto = { __typename?: 'OctoQuery', constructionKit?: { __typename?: 'ConstructionKitQuery', types?: { __typename?: 'CkTypeDtoConnection', items?: Array<{ __typename?: 'CkType', rtCkTypeId: any } | null> | null } | null } | null };\n\nexport const EntityFormTypeProbeDocumentDto = gql`\n query entityFormTypeProbe {\n constructionKit {\n types(rtCkId: \"System.UI/EntityForm\", first: 1) {\n items {\n rtCkTypeId\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormTypeProbeDtoGQL extends Apollo.Query<EntityFormTypeProbeQueryDto, EntityFormTypeProbeQueryVariablesDto> {\n document = EntityFormTypeProbeDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetCkRecordQueryVariablesDto = Types.Exact<{\n ckRecordId: Types.Scalars['String']['input'];\n}>;\n\n\nexport type EntityFormGetCkRecordQueryDto = { __typename?: 'OctoQuery', constructionKit?: { __typename?: 'ConstructionKitQuery', records?: { __typename?: 'CkRecordDtoConnection', items?: Array<{ __typename?: 'CkRecord', isAbstract: boolean, ckRecordId: { __typename?: 'CkRecordId', fullName: string }, attributes?: { __typename?: 'CkTypeAttributeDtoConnection', items?: Array<{ __typename?: 'CkTypeAttribute', attributeName: string, attributeValueType: Types.AttributeValueTypeDto, isOptional: boolean, ckAttributeId: { __typename?: 'CkAttributeId', fullName: string }, attribute?: { __typename?: 'CkAttribute', description?: string | null, defaultValues?: Array<any | null> | null, metaData?: Array<{ __typename?: 'CkAttributeMetaData', key: string, value?: string | null } | null> | null, ckEnum?: { __typename?: 'CkEnum', ckEnumId: { __typename?: 'CkEnumId', fullName: string }, values: Array<{ __typename?: 'CkEnumValue', key?: number | null, name?: string | null } | null> } | null, ckRecord?: { __typename?: 'CkRecord', ckRecordId: { __typename?: 'CkRecordId', fullName: string } } | null } | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetCkRecordDocumentDto = gql`\n query entityFormGetCkRecord($ckRecordId: String!) {\n constructionKit {\n records(ckId: $ckRecordId, first: 1) {\n items {\n ckRecordId {\n fullName\n }\n isAbstract\n attributes(first: 1000) {\n items {\n attributeName\n attributeValueType\n isOptional\n ckAttributeId {\n fullName\n }\n attribute {\n description\n defaultValues\n metaData {\n key\n value\n }\n ckEnum {\n ckEnumId {\n fullName\n }\n values {\n key\n name\n }\n }\n ckRecord {\n ckRecordId {\n fullName\n }\n }\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetCkRecordDtoGQL extends Apollo.Query<EntityFormGetCkRecordQueryDto, EntityFormGetCkRecordQueryVariablesDto> {\n document = EntityFormGetCkRecordDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetCkTypeQueryVariablesDto = Types.Exact<{\n rtCkTypeId: Types.Scalars['String']['input'];\n}>;\n\n\nexport type EntityFormGetCkTypeQueryDto = { __typename?: 'OctoQuery', constructionKit?: { __typename?: 'ConstructionKitQuery', types?: { __typename?: 'CkTypeDtoConnection', items?: Array<{ __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, description?: string | null, ckTypeId: { __typename?: 'CkTypeId', fullName: string }, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean } | null } | null } | null } | null } | null } | null } | null } | null } | null } | null, attributes?: { __typename?: 'CkTypeAttributeDtoConnection', items?: Array<{ __typename?: 'CkTypeAttribute', attributeName: string, attributeValueType: Types.AttributeValueTypeDto, isOptional: boolean, ckAttributeId: { __typename?: 'CkAttributeId', fullName: string }, attribute?: { __typename?: 'CkAttribute', description?: string | null, defaultValues?: Array<any | null> | null, metaData?: Array<{ __typename?: 'CkAttributeMetaData', key: string, value?: string | null } | null> | null, ckEnum?: { __typename?: 'CkEnum', ckEnumId: { __typename?: 'CkEnumId', fullName: string }, values: Array<{ __typename?: 'CkEnumValue', key?: number | null, name?: string | null } | null> } | null, ckRecord?: { __typename?: 'CkRecord', ckRecordId: { __typename?: 'CkRecordId', fullName: string } } | null } | null } | null> | null } | null, associations?: { __typename?: 'CkTypeAssociationDirection', in?: { __typename?: 'CkTypeAssociationSource', all?: Array<{ __typename?: 'CkTypeAssociation', rtRoleId: any, navigationPropertyName: string, multiplicity: Types.MultiplicitiesDto, rtTargetCkTypeId: any, rtOriginCkTypeId: any } | null> | null } | null, out?: { __typename?: 'CkTypeAssociationSource', all?: Array<{ __typename?: 'CkTypeAssociation', rtRoleId: any, navigationPropertyName: string, multiplicity: Types.MultiplicitiesDto, rtTargetCkTypeId: any, rtOriginCkTypeId: any } | null> | null } | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetCkTypeDocumentDto = gql`\n query entityFormGetCkType($rtCkTypeId: String!) {\n constructionKit {\n types(rtCkId: $rtCkTypeId, first: 1) {\n items {\n ckTypeId {\n fullName\n }\n rtCkTypeId\n isAbstract\n description\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n attributes(first: 1000) {\n items {\n attributeName\n attributeValueType\n isOptional\n ckAttributeId {\n fullName\n }\n attribute {\n description\n defaultValues\n metaData {\n key\n value\n }\n ckEnum {\n ckEnumId {\n fullName\n }\n values {\n key\n name\n }\n }\n ckRecord {\n ckRecordId {\n fullName\n }\n }\n }\n }\n }\n associations {\n in {\n all {\n rtRoleId\n navigationPropertyName\n multiplicity\n rtTargetCkTypeId\n rtOriginCkTypeId\n }\n }\n out {\n all {\n rtRoleId\n navigationPropertyName\n multiplicity\n rtTargetCkTypeId\n rtOriginCkTypeId\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetCkTypeDtoGQL extends Apollo.Query<EntityFormGetCkTypeQueryDto, EntityFormGetCkTypeQueryVariablesDto> {\n document = EntityFormGetCkTypeDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetEntityFormsQueryVariablesDto = Types.Exact<{ [key: string]: never; }>;\n\n\nexport type EntityFormGetEntityFormsQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'RtEntity', rtId: any, rtWellKnownName?: string | null, ckTypeId: any, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetEntityFormsDocumentDto = gql`\n query entityFormGetEntityForms {\n runtime {\n runtimeEntities(ckId: \"System.UI/EntityForm\", first: 500) {\n totalCount\n items {\n rtId\n rtWellKnownName\n ckTypeId\n attributes {\n items {\n attributeName\n value\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetEntityFormsDtoGQL extends Apollo.Query<EntityFormGetEntityFormsQueryDto, EntityFormGetEntityFormsQueryVariablesDto> {\n document = EntityFormGetEntityFormsDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { EnvironmentProviders, Injectable, inject, provideEnvironmentInitializer } from '@angular/core';\nimport { TENANT_ID_PROVIDER } from '@meshmakers/octo-services';\nimport { firstValueFrom } from 'rxjs';\nimport { toKebabTypeKey } from '../core/attribute-path';\nimport { RawCkRecord, RawCkType, toCkRecordInfo, toCkTypeInfo } from '../core/ck-metadata';\nimport { parseEntityForms, RawRtEntityRow } from '../core/entity-form-parser';\nimport { resolveEntityForm } from '../core/entity-form-resolver';\nimport { ENTITY_FORM_FALLBACK_FORMS, selectFallbackForms, withFallbackForms } from '../core/fallback-forms';\nimport { isRecordType } from '../core/entity-form-value-mapper';\nimport { EntityFormTypeProbeDtoGQL } from '../graphQL/entityFormTypeProbe';\nimport { EntityFormGetCkRecordDtoGQL } from '../graphQL/getEntityFormCkRecord';\nimport { EntityFormGetCkTypeDtoGQL } from '../graphQL/getEntityFormCkType';\nimport { EntityFormGetEntityFormsDtoGQL } from '../graphQL/getEntityForms';\nimport {\n CkAttributeInfo,\n CkRecordInfo,\n CkTypeInfo,\n EntityFormDefinition,\n ResolvedEntityForm,\n ResolvedField,\n} from '../models/entity-form.models';\n\n/**\n * Loads entity forms and CK metadata and resolves the form for a type (plan §2.3).\n *\n * - Forms are read only after the type probe confirms `System.UI/EntityForm` exists (System.UI >=\n * 2.7.0); otherwise, and when the forms query fails, every type resolves to the built-in form.\n * - Results are cached per tenant (`TENANT_ID_PROVIDER`, empty string when not provided) in a\n * `Map<string, Promise<…>>`; a failed entry is evicted so the next call retries.\n * - Host fallback forms (`ENTITY_FORM_FALLBACK_FORMS`, `registerFallbackForms`) are appended where\n * the normal resolution would end at `form-default` — also when the forms cannot be loaded\n * (AB#5524).\n * - Resolver warnings are logged with `console.warn`.\n */\n@Injectable({ providedIn: 'root' })\nexport class EntityFormService {\n private readonly probeGql = inject(EntityFormTypeProbeDtoGQL);\n private readonly formsGql = inject(EntityFormGetEntityFormsDtoGQL);\n private readonly ckTypeGql = inject(EntityFormGetCkTypeDtoGQL);\n private readonly ckRecordGql = inject(EntityFormGetCkRecordDtoGQL);\n private readonly tenantIdProvider = inject(TENANT_ID_PROVIDER, { optional: true });\n private readonly fallbackForms = inject(ENTITY_FORM_FALLBACK_FORMS, { optional: true });\n\n private readonly cache = new Map<string, Promise<unknown>>();\n private readonly registeredFallbacks: (readonly EntityFormDefinition[])[] = [];\n\n /**\n * Adds host fallback forms at runtime (see `provideEntityFormFallbacks`). Registering the same\n * array again is a no-op; a new one drops the cached forms and resolutions.\n */\n registerFallbackForms(forms: readonly EntityFormDefinition[]): void {\n if (!forms.length || this.registeredFallbacks.includes(forms)) {\n return;\n }\n this.registeredFallbacks.push(forms);\n this.invalidate();\n }\n\n /** Drops every cached form, type, record and resolution (all tenants). */\n invalidate(): void {\n this.cache.clear();\n }\n\n /**\n * All parsed `System.UI/EntityForm` definitions of the current tenant (`[]` when not installed),\n * plus the host fallback forms for target types without a loaded form.\n */\n async getForms(): Promise<EntityFormDefinition[]> {\n const loaded = await this.loadForms();\n const fallbacks = [...(this.fallbackForms ?? []), ...this.registeredFallbacks.flat()];\n if (!fallbacks.length) {\n return loaded;\n }\n // CK metadata of the candidate types (cached), to check the ancestor forms.\n const candidates = withFallbackForms(loaded, fallbacks).slice(loaded.length);\n const types = new Map<string, CkTypeInfo | null>();\n await Promise.all(candidates.map(async (f) => {\n types.set(f.targetCkTypeId.toLowerCase(), await this.getCkType(f.targetCkTypeId).catch(() => null));\n }));\n return [...loaded, ...selectFallbackForms(loaded, fallbacks, (id) => types.get(id.toLowerCase()))];\n }\n\n private async loadForms(): Promise<EntityFormDefinition[]> {\n return this.cached('forms', async () => {\n try {\n const probe = await firstValueFrom(this.probeGql.fetch({ fetchPolicy: 'network-only' }));\n if (!probe.data?.constructionKit?.types?.items?.length) {\n return [];\n }\n const result = await firstValueFrom(this.formsGql.fetch({ fetchPolicy: 'network-only' }));\n return parseEntityForms((result.data?.runtime?.runtimeEntities?.items ?? []) as RawRtEntityRow[]);\n } catch (error) {\n console.warn('EntityFormService: entity forms could not be loaded; using the built-in default form.', error);\n throw error;\n }\n }).catch(() => [] as EntityFormDefinition[]);\n }\n\n /** CK metadata of a type, or `null` when the type does not exist. */\n async getCkType(rtCkTypeId: string): Promise<CkTypeInfo | null> {\n return this.cached(`type::${rtCkTypeId}`, async () => {\n const result = await firstValueFrom(this.ckTypeGql.fetch({ variables: { rtCkTypeId }, fetchPolicy: 'network-only' }));\n const raw = result.data?.constructionKit?.types?.items?.[0];\n return raw ? toCkTypeInfo(raw as unknown as RawCkType) : null;\n });\n }\n\n /** CK metadata of a record (versioned ckRecordId, e.g. `System.UI-2.7.0/EntityFormSection-1`). */\n async getCkRecord(ckRecordId: string): Promise<CkRecordInfo | null> {\n return this.cached(`record::${ckRecordId}`, async () => {\n const result = await firstValueFrom(this.ckRecordGql.fetch({ variables: { ckRecordId }, fetchPolicy: 'network-only' }));\n const raw = result.data?.constructionKit?.records?.items?.[0];\n return raw ? toCkRecordInfo(raw as unknown as RawCkRecord) : null;\n });\n }\n\n /**\n * Loads every record reachable from the given attributes (recursively), keyed by ckRecordId.\n * Records that cannot be loaded are left out.\n */\n async getRecordsFor(type: CkTypeInfo): Promise<Record<string, CkRecordInfo>> {\n const records: Record<string, CkRecordInfo> = {};\n const pending = type.attributes.filter((a) => isRecordType(a.valueType) && a.ckRecordId).map((a) => a.ckRecordId as string);\n const seen = new Set<string>();\n while (pending.length) {\n const batch = pending.splice(0).filter((id) => !seen.has(id));\n batch.forEach((id) => seen.add(id));\n const loaded = await Promise.all(batch.map((id) => this.getCkRecord(id).catch(() => null)));\n for (const record of loaded) {\n if (!record) {\n continue;\n }\n records[record.ckRecordId] = record;\n record.attributes\n .filter((a) => isRecordType(a.valueType) && a.ckRecordId && !seen.has(a.ckRecordId))\n .forEach((a) => pending.push(a.ckRecordId as string));\n }\n }\n return records;\n }\n\n /**\n * Resolves the form for a type. Rejects when the CK type does not exist; falls back to the\n * built-in form when no form applies or the forms cannot be loaded.\n */\n async resolve(rtCkTypeId: string): Promise<ResolvedEntityForm> {\n return this.cached(`resolve::${rtCkTypeId}`, async () => {\n const [type, forms] = await Promise.all([this.getCkType(rtCkTypeId), this.getForms()]);\n if (!type) {\n throw new Error(`EntityFormService: CK type '${rtCkTypeId}' not found.`);\n }\n const records = await this.getRecordsFor(type);\n const resolved = resolveEntityForm(type, forms, { records });\n await this.attachDisplayAttributeInfo(resolved);\n for (const warning of resolved.warnings) {\n console.warn(`EntityFormService: ${warning}`);\n }\n return resolved;\n });\n }\n\n /**\n * Adds the target type's CK metadata of the display attributes to every reference field that\n * has `displayAttributes` (AB#5547: the channel enum showed its key `0` instead of \"Release\").\n * A display attribute marked secret on the target is dropped (it must never be read).\n */\n private async attachDisplayAttributeInfo(resolved: ResolvedEntityForm): Promise<void> {\n const fields = resolved.sections.flatMap((s) => s.fields).filter((f) => f.reference?.displayAttributes?.length);\n await Promise.all(fields.map(async (field) => {\n const reference = field.reference as NonNullable<ResolvedField['reference']>;\n const target = await this.getCkType(reference.targetCkTypeId).catch(() => null);\n if (!target) {\n return;\n }\n const byName = new Map(target.attributes.map((a) => [a.attributeName.toLowerCase(), a]));\n const names = reference.displayAttributes ?? [];\n const kept = names.filter((n) => !byName.get(n.toLowerCase())?.secret);\n if (kept.length !== names.length) {\n resolved.warnings.push(`Field '${field.key}': secret display attributes ignored.`);\n }\n reference.displayAttributes = kept;\n reference.displayAttributeInfo = kept.map((n) => byName.get(n.toLowerCase())).filter((a): a is CkAttributeInfo => !!a);\n }));\n }\n\n /**\n * Resolves by form key: the form's `rtWellKnownName` (`form-sftp-configuration`) or the kebab\n * type key (`sftp-configuration`, matched against `form-<key>` and then against the kebab-cased\n * name of each form's target type). The type's form is then resolved normally, so a tenant form\n * for the same type still wins. Returns `null` when no form matches the key.\n */\n async resolveByFormKey(formKey: string): Promise<ResolvedEntityForm | null> {\n const key = formKey.trim().toLowerCase();\n if (!key) {\n return null;\n }\n const forms = await this.getForms();\n const match = forms.find((f) => (f.rtWellKnownName ?? '').toLowerCase() === key)\n ?? forms.find((f) => (f.rtWellKnownName ?? '').toLowerCase() === `form-${key}`)\n ?? forms.find((f) => toKebabTypeKey(f.targetCkTypeId) === key);\n return match ? this.resolve(match.targetCkTypeId) : null;\n }\n\n private async tenantId(): Promise<string> {\n if (!this.tenantIdProvider) {\n return '';\n }\n try {\n return (await this.tenantIdProvider()) ?? '';\n } catch {\n return '';\n }\n }\n\n private async cached<T>(key: string, load: () => Promise<T>): Promise<T> {\n const fullKey = `${await this.tenantId()}::${key}`;\n const existing = this.cache.get(fullKey) as Promise<T> | undefined;\n if (existing) {\n return existing;\n }\n const promise = load();\n this.cache.set(fullKey, promise);\n promise.catch(() => {\n if (this.cache.get(fullKey) === promise) {\n this.cache.delete(fullKey);\n }\n });\n return promise;\n }\n}\n\n/**\n * Registers host fallback forms in the root `EntityFormService` when the providing (lazy) route's\n * environment injector is created — one service, one cache, and the entry point stays out of the\n * initial bundle (AB#5524). Put it into the `providers` of every lazy route that renders entity\n * forms; registering the same array several times is harmless.\n */\nexport function provideEntityFormFallbacks(forms: readonly EntityFormDefinition[]): EnvironmentProviders {\n return provideEnvironmentInitializer(() => inject(EntityFormService).registerFallbackForms(forms));\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Whether secrets can be written in this environment (decision Q17, AB#5544): `false` when the\n * environment has no key ring (`SecretEnvironmentStatusDto.keyRingConfigured`, bot services\n * `GET {tenantId}/v1/secrets/status`). Then every secret input of `mm-entity-form` is disabled with\n * a hint instead of failing late on save (`SecretEncryptionNotConfigured`).\n *\n * Optional: without a provider (or while the signal is `null` / `undefined`) secrets are writable.\n * The host provides it from its status client, e.g.\n * `{ provide: ENTITY_FORM_SECRET_KEY_RING_CONFIGURED, useFactory: () => statusService.keyRingConfigured }`.\n */\nexport const ENTITY_FORM_SECRET_KEY_RING_CONFIGURED = new InjectionToken<Signal<boolean | null | undefined>>(\n 'ENTITY_FORM_SECRET_KEY_RING_CONFIGURED',\n);\n\n/**\n * Values that count as \"not set\" for LEGACY secret fields (AB#5623): plain `STRING` attributes\n * treated as secrets by form decision, CK metadata or the credential-name rule. Their presence is\n * probed with field filters (`IS_NOT_NULL` and `NOT_EQUALS ''`); each value listed here adds a\n * `NOT_EQUALS <value>` filter, so a seeded placeholder (exact, case-sensitive match) reads\n * \"Not set\" instead of \"Set\".\n *\n * Optional; not provided = only `null` and `''` count as not set (unchanged behaviour). The\n * library ships no placeholder values of its own — the host lists the ones its seed data uses.\n * It has no effect on attributes of value type `SECRET` (AB#5528): their state comes from the\n * server (`secretIsSet`), which is the reliable way — migrate secrets to `SECRET` where possible.\n */\nexport const ENTITY_FORM_SECRET_PLACEHOLDER_VALUES = new InjectionToken<readonly string[]>(\n 'ENTITY_FORM_SECRET_PLACEHOLDER_VALUES',\n);\n","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormCreateEntitiesMutationVariablesDto = Types.Exact<{\n entities: Array<Types.InputMaybe<Types.RtEntityInputDto>> | Types.InputMaybe<Types.RtEntityInputDto>;\n}>;\n\n\nexport type EntityFormCreateEntitiesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', runtimeEntities?: { __typename?: 'RtEntityMutations', create?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any } | null> | null } | null } | null };\n\nexport const EntityFormCreateEntitiesDocumentDto = gql`\n mutation entityFormCreateEntities($entities: [RtEntityInput]!) {\n runtime {\n runtimeEntities {\n create(entities: $entities) {\n rtId\n ckTypeId\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormCreateEntitiesDtoGQL extends Apollo.Mutation<EntityFormCreateEntitiesMutationDto, EntityFormCreateEntitiesMutationVariablesDto> {\n document = EntityFormCreateEntitiesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormDeleteEntitiesMutationVariablesDto = Types.Exact<{\n rtEntityIds: Array<Types.InputMaybe<Types.RtEntityIdDto>> | Types.InputMaybe<Types.RtEntityIdDto>;\n deleteStrategy?: Types.DeleteStrategiesDto;\n}>;\n\n\nexport type EntityFormDeleteEntitiesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', runtimeEntities?: { __typename?: 'RtEntityMutations', delete?: boolean | null } | null } | null };\n\nexport const EntityFormDeleteEntitiesDocumentDto = gql`\n mutation entityFormDeleteEntities($rtEntityIds: [RtEntityId]!, $deleteStrategy: DeleteStrategies! = ARCHIVE) {\n runtime {\n runtimeEntities {\n delete(entities: $rtEntityIds, options: $deleteStrategy)\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormDeleteEntitiesDtoGQL extends Apollo.Mutation<EntityFormDeleteEntitiesMutationDto, EntityFormDeleteEntitiesMutationVariablesDto> {\n document = EntityFormDeleteEntitiesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetAttributePresenceQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n rtId: Types.Scalars['OctoObjectId']['input'];\n fieldFilters: Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>;\n}>;\n\n\nexport type EntityFormGetAttributePresenceQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null } | null } | null };\n\nexport const EntityFormGetAttributePresenceDocumentDto = gql`\n query entityFormGetAttributePresence($ckTypeId: String!, $rtId: OctoObjectId!, $fieldFilters: [FieldFilter]!) {\n runtime {\n runtimeEntities(\n ckId: $ckTypeId\n rtId: $rtId\n fieldFilter: $fieldFilters\n first: 1\n ) {\n totalCount\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetAttributePresenceDtoGQL extends Apollo.Query<EntityFormGetAttributePresenceQueryDto, EntityFormGetAttributePresenceQueryVariablesDto> {\n document = EntityFormGetAttributePresenceDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetAssociationDefinitionsQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n rtId: Types.Scalars['OctoObjectId']['input'];\n roleId: Types.Scalars['String']['input'];\n direction: Types.GraphDirectionDto;\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n}>;\n\n\nexport type EntityFormGetAssociationDefinitionsQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, associations?: { __typename?: 'RtEntityGenericAssociation', definitions?: { __typename?: 'RtAssociationDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'RtAssociation', originRtId: any, originCkTypeId: any, targetRtId: any, targetCkTypeId: any, ckAssociationRoleId: any } | null> | null } | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetAssociationDefinitionsDocumentDto = gql`\n query entityFormGetAssociationDefinitions($ckTypeId: String!, $rtId: OctoObjectId!, $roleId: String!, $direction: GraphDirection!, $first: Int) {\n runtime {\n runtimeEntities(ckId: $ckTypeId, rtId: $rtId, first: 1) {\n items {\n rtId\n associations {\n definitions(direction: $direction, roleId: $roleId, first: $first) {\n totalCount\n items {\n originRtId\n originCkTypeId\n targetRtId\n targetCkTypeId\n ckAssociationRoleId\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetAssociationDefinitionsDtoGQL extends Apollo.Query<EntityFormGetAssociationDefinitionsQueryDto, EntityFormGetAssociationDefinitionsQueryVariablesDto> {\n document = EntityFormGetAssociationDefinitionsDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetAssociationTargetsQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n rtId: Types.Scalars['OctoObjectId']['input'];\n roleId: Types.Scalars['String']['input'];\n targetCkTypeId: Types.Scalars['String']['input'];\n direction: Types.GraphDirectionDto;\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n}>;\n\n\nexport type EntityFormGetAssociationTargetsQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, associations?: { __typename?: 'RtEntityGenericAssociation', targets?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtDisplayName: string, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null } | null> | null } | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetAssociationTargetsDocumentDto = gql`\n query entityFormGetAssociationTargets($ckTypeId: String!, $rtId: OctoObjectId!, $roleId: String!, $targetCkTypeId: String!, $direction: GraphDirection!, $first: Int) {\n runtime {\n runtimeEntities(ckId: $ckTypeId, rtId: $rtId, first: 1) {\n items {\n rtId\n associations {\n targets(\n roleId: $roleId\n ckId: $targetCkTypeId\n direction: $direction\n first: $first\n ) {\n totalCount\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtDisplayName\n attributes(attributeNames: [\"name\"]) {\n items {\n attributeName\n value\n }\n }\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetAssociationTargetsDtoGQL extends Apollo.Query<EntityFormGetAssociationTargetsQueryDto, EntityFormGetAssociationTargetsQueryVariablesDto> {\n document = EntityFormGetAssociationTargetsDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetCountQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n}>;\n\n\nexport type EntityFormGetCountQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null } | null } | null };\n\nexport const EntityFormGetCountDocumentDto = gql`\n query entityFormGetCount($ckTypeId: String!, $fieldFilters: [FieldFilter]) {\n runtime {\n runtimeEntities(ckId: $ckTypeId, first: 1, fieldFilter: $fieldFilters) {\n totalCount\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetCountDtoGQL extends Apollo.Query<EntityFormGetCountQueryDto, EntityFormGetCountQueryVariablesDto> {\n document = EntityFormGetCountDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetListQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n searchFilter?: Types.InputMaybe<Types.SearchFilterDto>;\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n sort?: Types.InputMaybe<Array<Types.InputMaybe<Types.SortDto>> | Types.InputMaybe<Types.SortDto>>;\n attributeNames: Array<Types.InputMaybe<Types.Scalars['String']['input']>> | Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type EntityFormGetListQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean }, items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtDisplayName: string, rtCreationDateTime?: any | null, rtChangedDateTime?: any | null, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetListDocumentDto = gql`\n query entityFormGetList($ckTypeId: String!, $first: Int, $after: String, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort], $attributeNames: [String]!) {\n runtime {\n runtimeEntities(\n ckId: $ckTypeId\n first: $first\n after: $after\n searchFilter: $searchFilter\n fieldFilter: $fieldFilters\n sortOrder: $sort\n ) {\n totalCount\n pageInfo {\n endCursor\n hasNextPage\n }\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtDisplayName\n rtCreationDateTime\n rtChangedDateTime\n attributes(attributeNames: $attributeNames) {\n items {\n attributeName\n value\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetListDtoGQL extends Apollo.Query<EntityFormGetListQueryDto, EntityFormGetListQueryVariablesDto> {\n document = EntityFormGetListDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetReferenceOptionsQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n searchFilter?: Types.InputMaybe<Types.SearchFilterDto>;\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n sort?: Types.InputMaybe<Array<Types.InputMaybe<Types.SortDto>> | Types.InputMaybe<Types.SortDto>>;\n}>;\n\n\nexport type EntityFormGetReferenceOptionsQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean }, items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtDisplayName: string, rtDisplayDescription?: string | null, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetReferenceOptionsDocumentDto = gql`\n query entityFormGetReferenceOptions($ckTypeId: String!, $first: Int, $after: String, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort]) {\n runtime {\n runtimeEntities(\n ckId: $ckTypeId\n first: $first\n after: $after\n searchFilter: $searchFilter\n fieldFilter: $fieldFilters\n sortOrder: $sort\n ) {\n totalCount\n pageInfo {\n endCursor\n hasNextPage\n }\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtDisplayName\n attributes(attributeNames: [\"name\"]) {\n items {\n attributeName\n value\n }\n }\n rtDisplayDescription\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetReferenceOptionsDtoGQL extends Apollo.Query<EntityFormGetReferenceOptionsQueryDto, EntityFormGetReferenceOptionsQueryVariablesDto> {\n document = EntityFormGetReferenceOptionsDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetValuesQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n rtId?: Types.InputMaybe<Types.Scalars['OctoObjectId']['input']>;\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n attributeNames: Array<Types.InputMaybe<Types.Scalars['String']['input']>> | Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type EntityFormGetValuesQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtDisplayName: string, rtCreationDateTime?: any | null, rtChangedDateTime?: any | null, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null, secretIsSet?: boolean | null, secretKeyMissing?: boolean | null, secretSetAt?: any | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetValuesDocumentDto = gql`\n query entityFormGetValues($ckTypeId: String!, $rtId: OctoObjectId, $fieldFilters: [FieldFilter], $attributeNames: [String]!) {\n runtime {\n runtimeEntities(\n ckId: $ckTypeId\n rtId: $rtId\n fieldFilter: $fieldFilters\n first: 1\n ) {\n totalCount\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtDisplayName\n rtCreationDateTime\n rtChangedDateTime\n attributes(attributeNames: $attributeNames) {\n items {\n attributeName\n value\n secretIsSet\n secretKeyMissing\n secretSetAt\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetValuesDtoGQL extends Apollo.Query<EntityFormGetValuesQueryDto, EntityFormGetValuesQueryVariablesDto> {\n document = EntityFormGetValuesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormUpdateEntitiesMutationVariablesDto = Types.Exact<{\n entities: Array<Types.InputMaybe<Types.RtEntityUpdateDto>> | Types.InputMaybe<Types.RtEntityUpdateDto>;\n}>;\n\n\nexport type EntityFormUpdateEntitiesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', runtimeEntities?: { __typename?: 'RtEntityMutations', update?: Array<{ __typename?: 'RtEntity', rtId: any } | null> | null } | null } | null };\n\nexport const EntityFormUpdateEntitiesDocumentDto = gql`\n mutation entityFormUpdateEntities($entities: [RtEntityUpdate]!) {\n runtime {\n runtimeEntities {\n update(entities: $entities) {\n rtId\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormUpdateEntitiesDtoGQL extends Apollo.Mutation<EntityFormUpdateEntitiesMutationDto, EntityFormUpdateEntitiesMutationVariablesDto> {\n document = EntityFormUpdateEntitiesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import type { CkAttributeInfo } from '../../models/entity-form.models';\n\n/**\n * How the display attributes of a reference target (`referenceDisplayAttributes`, AB#5547) are\n * turned into text: by the CK value type of each attribute. Without metadata for an attribute the\n * raw value is shown (booleans still as yes/no).\n */\nexport interface ReferenceDisplayFormat {\n /** CK metadata of the target type's display attributes (matched case-insensitively by name). */\n attributes?: readonly CkAttributeInfo[];\n /** Label of `true` (default \"Yes\"). */\n yes?: string;\n /** Label of `false` (default \"No\"). */\n no?: string;\n /** Locale of dates; the browser locale when omitted. */\n locale?: string;\n}\n\nconst DATE_TYPES = ['DATE_TIME', 'DATE_TIME_OFFSET', 'DATE'];\n\nfunction isEmpty(value: unknown): boolean {\n return value === null || value === undefined || (typeof value === 'string' && value.trim() === '')\n || (Array.isArray(value) && value.length === 0);\n}\n\nfunction enumLabel(value: unknown, options: readonly { key: number; name: string }[] | undefined): string {\n const found = (options ?? []).find((o) => o.key === value\n || (typeof value === 'string' && (String(o.key) === value.trim() || o.name.toLowerCase() === value.trim().toLowerCase())));\n return found ? found.name : String(value);\n}\n\nfunction booleanLabel(value: unknown, format: ReferenceDisplayFormat): string | null {\n const b = value === true || value === 'true' ? true : value === false || value === 'false' ? false : null;\n if (b === null) {\n return null;\n }\n return b ? (format.yes ?? 'Yes') : (format.no ?? 'No');\n}\n\nfunction dateLabel(value: unknown, type: string, locale?: string): string {\n const date = value instanceof Date ? value : new Date(String(value));\n if (isNaN(date.getTime())) {\n return String(value);\n }\n return type === 'DATE'\n ? date.toLocaleDateString(locale, { dateStyle: 'medium' })\n : date.toLocaleString(locale, { dateStyle: 'medium', timeStyle: 'short' });\n}\n\n/**\n * Text of one display attribute value, or `null` when it is empty or not displayable (records).\n * ENUM → the enum value's name (the API returns the key, e.g. `0` for \"Release\"); BOOLEAN →\n * yes/no; DATE_TIME(_OFFSET) → localized date and time; arrays → comma-separated.\n */\nexport function formatReferenceDisplayValue(value: unknown, attribute: CkAttributeInfo | undefined, format: ReferenceDisplayFormat = {}): string | null {\n if (isEmpty(value)) {\n return null;\n }\n const type = attribute?.valueType?.toUpperCase() ?? '';\n if (type === 'RECORD' || type === 'RECORD_ARRAY' || (!Array.isArray(value) && typeof value === 'object' && !(value instanceof Date))) {\n return null;\n }\n if (Array.isArray(value)) {\n const parts = value.map((v) => formatReferenceDisplayValue(v, attribute ? { ...attribute, valueType: type.replace(/_ARRAY$/, '') } : undefined, format))\n .filter((p): p is string => p !== null);\n return parts.length ? parts.join(', ') : null;\n }\n if (type === 'ENUM') {\n return enumLabel(value, attribute?.enumOptions);\n }\n if (type === 'BOOLEAN' || (!type && typeof value === 'boolean')) {\n return booleanLabel(value, format) ?? String(value);\n }\n if (DATE_TYPES.includes(type)) {\n return dateLabel(value, type, format.locale);\n }\n return String(value);\n}\n","import { firstValueFrom, from, map, Observable } from 'rxjs';\nimport { EntitySelectDataSource, EntitySelectResult } from '@meshmakers/shared-services';\nimport {\n ColumnDefinition,\n DialogFetchOptions,\n DialogFetchResult,\n EntitySelectDialogDataSource\n} from '@meshmakers/shared-ui';\nimport { FieldFilterOperatorsDto, SearchFilterDto, SearchFilterTypesDto } from '@meshmakers/octo-services';\nimport {\n EntityFormGetReferenceOptionsDtoGQL,\n EntityFormGetReferenceOptionsQueryDto,\n EntityFormGetReferenceOptionsQueryVariablesDto\n} from '../../graphQL/getEntityFormReferenceOptions';\nimport { EntityFormGetReferenceOptionsWithAttributesDtoGQL } from '../../graphQL/getEntityFormReferenceOptionsWithAttributes';\nimport { formatReferenceDisplayValue, ReferenceDisplayFormat } from './reference-display-format';\n\n/** One candidate target of a reference field. Carries system properties only, never attributes. */\nexport interface EntityReferenceItem {\n rtId: string;\n ckTypeId: string;\n rtWellKnownName?: string;\n rtDisplayName?: string;\n rtDisplayDescription?: string;\n /** Label shown in the picker and stored as `displayName` in the field value. */\n displayName: string;\n}\n\n/** System properties the typeahead and the dialog search match against. */\nexport const ENTITY_REFERENCE_SEARCH_PATHS: readonly string[] = ['rtWellKnownName', 'rtDisplayName'];\n\n/** Column labels of the reference picker dialog. */\nexport interface EntityReferenceColumnLabels {\n name: string;\n wellKnownName: string;\n type: string;\n rtId: string;\n}\n\nconst DEFAULT_COLUMN_LABELS: EntityReferenceColumnLabels = {\n name: 'Name',\n wellKnownName: 'Well-known name',\n type: 'Type',\n rtId: 'RtId'\n};\n\ntype ReferenceRow = NonNullable<NonNullable<NonNullable<NonNullable<EntityFormGetReferenceOptionsQueryDto['runtime']>['runtimeEntities']>['items']>[number]>;\n\n/** Shape of the backend's synthetic display name (`System.Communication/Pool@<24 hex>`). */\nconst SYNTHETIC_DISPLAY_NAME = /^[^@\\s]+\\/[^@\\s]+@[0-9a-f]{24}$/i;\n\n/**\n * `rtDisplayName` is resolved by the backend to a synthetic `\"<ckTypeId>@<rtId>\"` when the engine\n * computed none (see the octo-ui CLAUDE.md, \"Runtime Browser node labels\"). That form is treated as\n * absent. Precedence: a real `rtDisplayName` > the target's `name` attribute (read by the\n * reference documents with `attributeNames: [\"name\"]`) > `rtWellKnownName` > the synthetic form >\n * the rtId. Without the `name` step a pool showed its well-known name `CommunicationPool` instead\n * of \"Default Cloud\" (AB#5547).\n */\nexport function referenceDisplayName(row: { rtId: string; ckTypeId: string; rtWellKnownName?: string | null; rtDisplayName?: string | null; name?: string | null }): string {\n const display = row.rtDisplayName ?? '';\n const synthetic = !display || display === `${row.ckTypeId}@${row.rtId}` || display.endsWith(`@${row.rtId}`)\n || SYNTHETIC_DISPLAY_NAME.test(display);\n if (!synthetic) {\n return display;\n }\n return row.name?.trim() || row.rtWellKnownName || display || row.rtId;\n}\n\n/** The `name` attribute of a row that selected `attributes(attributeNames: [\"name\"])`, else null. */\nexport function nameAttributeOf(row: DisplayAttributeSource): string | null {\n const item = (row.attributes?.items ?? []).find((i) => i?.attributeName?.toLowerCase() === 'name');\n const value = item?.value;\n return value === null || value === undefined || String(value).trim() === '' ? null : String(value);\n}\n\n/** A row of either options document; `attributes` only with display attributes. */\nexport interface DisplayAttributeSource {\n attributes?: { items?: ({ attributeName?: string | null; value?: unknown } | null)[] | null } | null;\n}\ntype AnyReferenceRow = ReferenceRow & DisplayAttributeSource;\n\n/**\n * `name · value1 · value2` for configured display attributes (in the configured order, empty values\n * skipped); the plain display name otherwise. Values are formatted by their CK value type when\n * `format.attributes` carries the target's metadata (enum key → name, booleans yes/no, dates).\n */\nexport function referenceLabel(base: string, row: DisplayAttributeSource, displayAttributes: readonly string[], format: ReferenceDisplayFormat = {}): string {\n if (!displayAttributes.length) {\n return base;\n }\n const values = new Map((row.attributes?.items ?? [])\n .filter((i): i is { attributeName: string; value?: unknown } => !!i?.attributeName)\n .map(i => [i.attributeName.toLowerCase(), i.value]));\n const infos = new Map((format.attributes ?? []).map(a => [a.attributeName.toLowerCase(), a]));\n const parts = displayAttributes\n .map(name => formatReferenceDisplayValue(values.get(name.toLowerCase()), infos.get(name.toLowerCase()), format))\n .filter((v): v is string => v !== null && v.trim() !== '');\n return parts.length ? `${base} · ${parts.join(' · ')}` : base;\n}\n\nfunction toItem(row: AnyReferenceRow, displayAttributes: readonly string[], format: ReferenceDisplayFormat): EntityReferenceItem {\n const rtId = String(row.rtId);\n const ckTypeId = String(row.ckTypeId);\n const base = referenceDisplayName({ rtId, ckTypeId, rtWellKnownName: row.rtWellKnownName, rtDisplayName: row.rtDisplayName, name: nameAttributeOf(row) });\n return {\n rtId,\n ckTypeId,\n rtWellKnownName: row.rtWellKnownName ?? undefined,\n rtDisplayName: row.rtDisplayName ?? undefined,\n rtDisplayDescription: row.rtDisplayDescription ?? undefined,\n displayName: referenceLabel(base, row, displayAttributes, format)\n };\n}\n\n/**\n * Secret-safe data source of `mm-entity-form-reference-field`, used both for the typeahead\n * (`EntitySelectDataSource`) and for the grid dialog (`EntitySelectDialogDataSource`) of shared-ui\n * `mm-entity-select-input`.\n *\n * It queries `entityFormGetReferenceOptions`, a document that selects **no `attributes` field at\n * all**: only `rtId`, `ckTypeId`, `rtWellKnownName`, `rtDisplayName` and `rtDisplayDescription`.\n * The target type's secrets therefore never reach the browser, unlike the octo-services\n * `RuntimeEntitySelectDataSource` (its `getEntitiesByCkType` selects every attribute).\n *\n * Derived types of `targetCkTypeId` are included (`runtimeEntities(ckId)` is polymorphic), which is\n * what a reference to a base type expects. Search matches `rtWellKnownName` and `rtDisplayName`.\n */\nexport class EntityReferenceDataSource\nimplements EntitySelectDataSource<EntityReferenceItem>, EntitySelectDialogDataSource<EntityReferenceItem> {\n private readonly columnLabels: EntityReferenceColumnLabels;\n\n /**\n * @param displayAttributes Non-secret target attributes shown next to the name (field\n * `referenceDisplayAttributes`). Non-empty → the options are read with\n * `entityFormGetReferenceOptionsWithAttributes` and exactly these `attributeNames` (plus the\n * non-secret `name`, which the plain document reads for the label as well).\n * @param format CK metadata and labels used to format the display attribute values.\n */\n constructor(\n private readonly gql: EntityFormGetReferenceOptionsDtoGQL,\n readonly targetCkTypeId: string,\n columnLabels?: Partial<EntityReferenceColumnLabels>,\n readonly displayAttributes: readonly string[] = [],\n private readonly attributesGql?: EntityFormGetReferenceOptionsWithAttributesDtoGQL,\n private readonly format: ReferenceDisplayFormat = {}\n ) {\n this.columnLabels = { ...DEFAULT_COLUMN_LABELS, ...(columnLabels ?? {}) };\n }\n\n /** Variables of one page; exposed for tests (it is the complete request apart from the document). */\n buildVariables(searchTerm: string | null, first: number, skip = 0): EntityFormGetReferenceOptionsQueryVariablesDto {\n const term = searchTerm?.trim();\n const searchFilter: SearchFilterDto | undefined = term\n ? { type: SearchFilterTypesDto.AttributeFilterDto, attributePaths: [...ENTITY_REFERENCE_SEARCH_PATHS], searchTerm: term }\n : undefined;\n return {\n ckTypeId: this.targetCkTypeId,\n first,\n after: skip > 0 ? btoa(`arrayconnection:${skip - 1}`) : undefined,\n searchFilter\n };\n }\n\n async onFilter(filter: string, take?: number): Promise<EntitySelectResult<EntityReferenceItem>> {\n const page = await firstValueFrom(this.fetchPage(filter, take ?? 20, 0));\n return { totalCount: page.totalCount, items: page.data.filter((i): i is EntityReferenceItem => i !== null) };\n }\n\n getColumns(): ColumnDefinition[] {\n return [\n { field: 'displayName', displayName: this.columnLabels.name },\n { field: 'rtWellKnownName', displayName: this.columnLabels.wellKnownName },\n { field: 'ckTypeId', displayName: this.columnLabels.type },\n { field: 'rtId', displayName: this.columnLabels.rtId }\n ];\n }\n\n fetchData(options: DialogFetchOptions): Observable<DialogFetchResult<EntityReferenceItem>> {\n return this.fetchPage(options.textSearch, options.take, options.skip);\n }\n\n onDisplayEntity(entity: EntityReferenceItem): string {\n return entity.displayName;\n }\n\n getIdEntity(entity: EntityReferenceItem): string {\n return entity.rtId;\n }\n\n /**\n * The targets with the given rtIds, labelled like the picker rows (display attributes included).\n * Used for the label of the current value; ids that cannot be read are missing from the map.\n */\n async lookup(rtIds: readonly string[]): Promise<Map<string, EntityReferenceItem>> {\n const ids = [...new Set(rtIds.filter(id => !!id))];\n const found = new Map<string, EntityReferenceItem>();\n if (!ids.length) {\n return found;\n }\n const variables: EntityFormGetReferenceOptionsQueryVariablesDto = {\n ckTypeId: this.targetCkTypeId,\n first: ids.length,\n fieldFilters: [{ attributePath: 'rtId', operator: FieldFilterOperatorsDto.InDto, comparisonValue: ids }]\n };\n const page = await firstValueFrom(this.request(variables));\n for (const item of page.data) {\n if (item) {\n found.set(item.rtId, item);\n }\n }\n return found;\n }\n\n private fetchPage(searchTerm: string | null, first: number, skip: number): Observable<DialogFetchResult<EntityReferenceItem>> {\n return this.request(this.buildVariables(searchTerm, first, skip));\n }\n\n private request(variables: EntityFormGetReferenceOptionsQueryVariablesDto): Observable<DialogFetchResult<EntityReferenceItem>> {\n const names = [...this.displayAttributes];\n // `name` keeps the label rule of the plain document (real display name > name > well-known name).\n const attributeNames = [...new Set(['name', ...names])];\n const request = names.length && this.attributesGql\n ? this.attributesGql.fetch({ variables: { ...variables, attributeNames }, fetchPolicy: 'network-only' })\n : this.gql.fetch({ variables, fetchPolicy: 'network-only' });\n return from(request).pipe(\n map(result => {\n const connection = (result.data as EntityFormGetReferenceOptionsQueryDto | undefined)?.runtime?.runtimeEntities;\n const data = (connection?.items ?? [])\n .filter((row): row is ReferenceRow => row !== null && row !== undefined)\n .map(row => toItem(row as AnyReferenceRow, names, this.format));\n return { data, totalCount: connection?.totalCount ?? data.length };\n })\n );\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n AssociationModOptionsDto,\n DeleteStrategiesDto,\n FieldFilterDto,\n FieldFilterOperatorsDto,\n GraphDirectionDto,\n RtEntityInputDto,\n RtEntityUpdateDto,\n isSecretPresent,\n OCTO_SILENT_ERRORS,\n secretStateFromAttribute,\n} from '@meshmakers/octo-services';\nimport { firstValueFrom } from 'rxjs';\nimport { toFormValue } from '../core/entity-form-value-mapper';\nimport { ENTITY_FORM_SECRET_PLACEHOLDER_VALUES } from '../core/secret-write-availability';\nimport { EntityFormCreateEntitiesDtoGQL } from '../graphQL/createEntityFormEntities';\nimport { EntityFormDeleteEntitiesDtoGQL } from '../graphQL/deleteEntityFormEntities';\nimport { EntityFormGetAttributePresenceDtoGQL } from '../graphQL/getEntityAttributePresence';\nimport { EntityFormGetAssociationDefinitionsDtoGQL } from '../graphQL/getEntityFormAssociationDefinitions';\nimport { EntityFormGetAssociationTargetsDtoGQL } from '../graphQL/getEntityFormAssociationTargets';\nimport { EntityFormGetCountDtoGQL } from '../graphQL/getEntityFormCount';\nimport { EntityFormGetListDtoGQL } from '../graphQL/getEntityFormList';\nimport { EntityFormGetReferenceOptionsDtoGQL } from '../graphQL/getEntityFormReferenceOptions';\nimport { EntityFormGetValuesDtoGQL } from '../graphQL/getEntityFormValues';\nimport { EntityFormUpdateEntitiesDtoGQL } from '../graphQL/updateEntityFormEntities';\nimport {\n CkRecordInfo,\n EntityFormChangeSet,\n EntityFormSecretFieldState,\n EntityFormValueState,\n ResolvedEntityForm,\n ResolvedField,\n} from '../models/entity-form.models';\nimport { EntityFormService } from './entity-form.service';\nimport { nameAttributeOf, referenceDisplayName } from '../form/reference/entity-reference-data-source';\n\n/** How to find the entity to load. `ckTypeId` defaults to the form's type (derived types match). */\nexport type EntityFormLoadKey =\n | { rtId: string; ckTypeId?: string }\n | { wellKnownName: string; ckTypeId?: string };\n\n/** Result of {@link EntityFormDataService.load}. */\nexport interface EntityFormLoadResult {\n rtId: string;\n ckTypeId: string;\n rtDisplayName?: string | null;\n state: EntityFormValueState;\n}\n\n/** One selected reference / association target as held by a reference control. */\nexport interface EntityFormTargetRef {\n rtId: string;\n ckTypeId: string;\n displayName: string;\n}\n\n/**\n * Types whose `targets(ckId:)` query fails with \"has no defining collection root\" (verified live\n * for System/Entity). Associations whose other end is one of these are read through the\n * association definitions instead.\n */\nconst NO_COLLECTION_ROOT_TYPES: readonly string[] = ['System/Entity'];\n\n/** Label of a target row: the shared reference rule (real display name > `name` > well-known name). */\nfunction displayNameOf(item: { rtId: string; ckTypeId?: string | null; rtDisplayName?: string | null; rtWellKnownName?: string | null; attributes?: DisplayAttributeRows | null }): string {\n return referenceDisplayName({\n rtId: item.rtId,\n ckTypeId: item.ckTypeId ?? '',\n rtDisplayName: item.rtDisplayName,\n rtWellKnownName: item.rtWellKnownName,\n name: nameAttributeOf(item),\n });\n}\n\ninterface DisplayAttributeRows { items?: ({ attributeName?: string | null; value?: unknown } | null)[] | null }\n\n/**\n * Reads and writes entity values for the entity form (plan §2.3, rules D5/D6).\n *\n * SECURITY: values are read with an explicit `attributeNames` list (`model.readAttributeNames`\n * minus every secret, never omitted — omission returns every attribute). SECRET attributes\n * (AB#5528, `model.secretStateFields`) are listed too: the server returns `value: null` and\n * `secretIsSet`. Fallback secrets (credential name / metadata on non-SECRET attributes) are only\n * probed for presence (`IS_NOT_NULL` + `totalCount`). Mutations never select attributes; an\n * explicit clear goes through `clearSecretAttributes`.\n */\n@Injectable({ providedIn: 'root' })\nexport class EntityFormDataService {\n private readonly valuesGql = inject(EntityFormGetValuesDtoGQL);\n private readonly presenceGql = inject(EntityFormGetAttributePresenceDtoGQL);\n private readonly targetsGql = inject(EntityFormGetAssociationTargetsDtoGQL);\n private readonly definitionsGql = inject(EntityFormGetAssociationDefinitionsDtoGQL);\n private readonly referenceOptionsGql = inject(EntityFormGetReferenceOptionsDtoGQL);\n private readonly createGql = inject(EntityFormCreateEntitiesDtoGQL);\n private readonly updateGql = inject(EntityFormUpdateEntitiesDtoGQL);\n private readonly deleteGql = inject(EntityFormDeleteEntitiesDtoGQL);\n private readonly listGql = inject(EntityFormGetListDtoGQL);\n private readonly countGql = inject(EntityFormGetCountDtoGQL);\n private readonly formService = inject(EntityFormService);\n private readonly secretPlaceholders = inject(ENTITY_FORM_SECRET_PLACEHOLDER_VALUES, { optional: true }) ?? [];\n\n /**\n * The attribute names to read for a model: `readAttributeNames` with every secret removed except\n * the SECRET fields (`secretStateFields`, read for their state only). Always an array (an omitted\n * list would return secrets).\n */\n static readAttributeNamesFor(model: ResolvedEntityForm): string[] {\n const stateFields = new Set((model.secretStateFields ?? []).map((s) => s.toLowerCase()));\n const secrets = new Set(model.secretFields.map((s) => s.toLowerCase()));\n model.sections.flatMap((s) => s.fields).filter((f) => f.secret && f.attributeName)\n .forEach((f) => secrets.add((f.attributeName as string).toLowerCase()));\n return [...new Set(model.readAttributeNames ?? [])]\n .filter((n) => !secrets.has(n.toLowerCase()) || stateFields.has(n.toLowerCase()));\n }\n\n /**\n * Number of entities of a type (e.g. for a settings overview). Without `includeDerivedTypes`\n * only entities of exactly that type are counted (`runtimeEntities(ckId)` includes derived\n * types by default). Selects only `totalCount` — no items, so no attributes are resolved\n * (with `attributes(attributeNames: [])` per item the count failed with CK_CACHE whenever one\n * item's type could not be resolved, AB#5523). Errors reject the promise without a toast.\n */\n async count(ckTypeId: string, includeDerivedTypes = false): Promise<number> {\n const fieldFilters: FieldFilterDto[] = includeDerivedTypes\n ? []\n : [{ attributePath: 'ckTypeId', operator: FieldFilterOperatorsDto.EqualsDto, comparisonValue: ckTypeId }];\n const result = await firstValueFrom(\n this.countGql.fetch({\n variables: {\n ckTypeId,\n fieldFilters: fieldFilters.length > 0 ? fieldFilters : null,\n },\n fetchPolicy: 'network-only',\n // Callers show \"status unavailable\" for a failed count; one failure must not toast.\n context: { [OCTO_SILENT_ERRORS]: true },\n }),\n );\n return result.data?.runtime?.runtimeEntities?.totalCount ?? 0;\n }\n\n /** Loads values, secret presence and associations of one entity in parallel; `null` if not found. */\n async load(model: ResolvedEntityForm, key: EntityFormLoadKey): Promise<EntityFormLoadResult | null> {\n const ckTypeId = key.ckTypeId ?? model.rtCkTypeId;\n const fieldFilters: FieldFilterDto[] | undefined = 'wellKnownName' in key\n ? [{ attributePath: 'rtWellKnownName', operator: FieldFilterOperatorsDto.EqualsDto, comparisonValue: key.wellKnownName }]\n : undefined;\n const fields = model.sections.flatMap((s) => s.fields);\n const recordsPromise = this.loadRecords(fields);\n\n const result = await firstValueFrom(this.valuesGql.fetch({\n variables: {\n ckTypeId,\n rtId: 'rtId' in key ? key.rtId : undefined,\n fieldFilters,\n attributeNames: EntityFormDataService.readAttributeNamesFor(model),\n },\n fetchPolicy: 'network-only',\n }));\n const entity = result.data?.runtime?.runtimeEntities?.items?.[0];\n if (!entity) {\n return null;\n }\n const rtId = entity.rtId as string;\n const entityCkTypeId = entity.ckTypeId as string;\n\n const raw = new Map<string, unknown>();\n const stateFields = model.secretStateFields ?? [];\n const secretStates: Record<string, EntityFormSecretFieldState> = {};\n for (const item of entity.attributes?.items ?? []) {\n if (item?.attributeName) {\n raw.set(item.attributeName.toLowerCase(), item.value);\n const stateField = stateFields.find((n) => n.toLowerCase() === item.attributeName?.toLowerCase());\n const state = stateField ? secretStateFromAttribute(item) : null;\n if (stateField && state) {\n secretStates[stateField] = state;\n }\n }\n }\n // A SECRET field the server did not report counts as not set.\n for (const name of stateFields) {\n secretStates[name] ??= { isSet: false, keyMissing: false, setAt: null };\n }\n const probed = model.secretFields.filter((n) => !stateFields.includes(n));\n\n const [records, probedPresence, associations] = await Promise.all([\n recordsPromise,\n this.loadSecretPresence(probed, entityCkTypeId, rtId, fields),\n this.loadAssociations(fields, entityCkTypeId, rtId),\n ]);\n const secretPresence: Record<string, boolean> = { ...probedPresence };\n for (const [name, state] of Object.entries(secretStates)) {\n secretPresence[name] = isSecretPresent(state);\n }\n\n const values: Record<string, unknown> = {};\n const attributeReferences: { field: ResolvedField; rtId: string }[] = [];\n for (const field of fields) {\n if (field.kind === 'system') {\n const v = field.key === 'rtWellKnownName' ? entity.rtWellKnownName\n : field.key === 'rtCreationDateTime' ? entity.rtCreationDateTime : entity.rtChangedDateTime;\n values[field.key] = field.key === 'rtWellKnownName' ? (v ?? null) : toFormValue(v, { attributeName: field.key, valueType: 'DATE_TIME', isOptional: true });\n } else if (field.kind === 'association') {\n values[field.key] = associations[field.key] ?? [];\n } else if (field.attributeName && !field.secret) {\n const rawValue = raw.get(field.attributeName.toLowerCase());\n if (field.editor === 'reference' && field.reference) {\n values[field.key] = [];\n if (typeof rawValue === 'string' && rawValue) {\n attributeReferences.push({ field, rtId: rawValue });\n }\n continue;\n }\n values[field.key] = toFormValue(rawValue, {\n attributeName: field.attributeName,\n valueType: field.valueType ?? 'STRING',\n isOptional: !field.required,\n enumOptions: field.enumOptions,\n ckRecordId: field.record?.ckRecordId,\n }, records);\n }\n }\n if (attributeReferences.length) {\n const named = await this.lookupDisplayNames(attributeReferences.map((r) => ({ rtId: r.rtId, ckTypeId: r.field.reference?.targetCkTypeId ?? '' })));\n for (const ref of attributeReferences) {\n values[ref.field.key] = [named.get(ref.rtId) ?? { rtId: ref.rtId, ckTypeId: ref.field.reference?.targetCkTypeId ?? '', displayName: ref.rtId }];\n }\n }\n\n return {\n rtId,\n ckTypeId: entityCkTypeId,\n rtDisplayName: entity.rtDisplayName,\n state: { values, secretPresence, secretStates, associations, rtWellKnownName: entity.rtWellKnownName ?? null },\n };\n }\n\n /** Creates an entity; returns its rtId. */\n async create(model: ResolvedEntityForm, ckTypeId: string, changeSet: EntityFormChangeSet): Promise<string> {\n const entity: RtEntityInputDto = {\n ckTypeId: ckTypeId || model.rtCkTypeId,\n attributes: changeSet.attributes,\n };\n if (changeSet.rtWellKnownName) {\n entity.rtWellKnownName = changeSet.rtWellKnownName;\n }\n if (changeSet.associations.length) {\n entity.associations = this.associationInputs(changeSet);\n }\n const result = await firstValueFrom(this.createGql.mutate({ variables: { entities: [entity] }, fetchPolicy: 'no-cache' }));\n const rtId = result.data?.runtime?.runtimeEntities?.create?.[0]?.rtId as string | undefined;\n if (!rtId) {\n throw new Error('EntityFormDataService: create returned no entity.');\n }\n return rtId;\n }\n\n /**\n * Updates an entity with exactly the change set (partial update: attributes that are not sent\n * keep their value — verified live, including the presence of secrets). `rtWellKnownName` is\n * never changed on update. Staged secret clears are sent as `clearSecretAttributes` (Q8).\n */\n async update(rtId: string, ckTypeId: string, changeSet: EntityFormChangeSet): Promise<void> {\n const item: RtEntityInputDto = { ckTypeId, attributes: changeSet.attributes };\n if (changeSet.associations.length) {\n item.associations = this.associationInputs(changeSet);\n }\n const entity: RtEntityUpdateDto = { rtId, item };\n if (changeSet.clearSecretAttributes?.length) {\n entity.clearSecretAttributes = changeSet.clearSecretAttributes;\n }\n await firstValueFrom(this.updateGql.mutate({ variables: { entities: [entity] }, fetchPolicy: 'no-cache' }));\n }\n\n /** Deletes entities (default strategy ARCHIVE). */\n async delete(entities: { rtId: string; ckTypeId: string }[], strategy: 'ARCHIVE' | 'ERASE' = 'ARCHIVE'): Promise<boolean> {\n if (!entities.length) {\n return true;\n }\n const result = await firstValueFrom(this.deleteGql.mutate({\n variables: {\n rtEntityIds: entities.map((e) => ({ rtId: e.rtId, ckTypeId: e.ckTypeId })),\n deleteStrategy: strategy === 'ERASE' ? DeleteStrategiesDto.EraseDto : DeleteStrategiesDto.ArchiveDto,\n },\n fetchPolicy: 'no-cache',\n }));\n return result.data?.runtime?.runtimeEntities?.delete === true;\n }\n\n private associationInputs(changeSet: EntityFormChangeSet): NonNullable<RtEntityInputDto['associations']> {\n return changeSet.associations.map((a) => ({\n roleName: a.roleName,\n targets: a.targets.map((t) => ({\n modOption: t.modOption === 'DELETE' ? AssociationModOptionsDto.DeleteDto : AssociationModOptionsDto.CreateDto,\n target: { ckTypeId: t.target.ckTypeId, rtId: t.target.rtId },\n })),\n }));\n }\n\n private async loadRecords(fields: ResolvedField[]): Promise<Record<string, CkRecordInfo>> {\n const ids = [...new Set(fields.map((f) => f.record?.ckRecordId).filter((id): id is string => !!id))];\n const records: Record<string, CkRecordInfo> = {};\n const pending = [...ids];\n const seen = new Set<string>();\n while (pending.length) {\n const batch = pending.splice(0).filter((id) => !seen.has(id));\n batch.forEach((id) => seen.add(id));\n const loaded = await Promise.all(batch.map((id) => this.formService.getCkRecord(id).catch(() => null)));\n for (const record of loaded) {\n if (record) {\n records[record.ckRecordId] = record;\n record.attributes.filter((a) => a.ckRecordId && !seen.has(a.ckRecordId)).forEach((a) => pending.push(a.ckRecordId as string));\n }\n }\n }\n return records;\n }\n\n /**\n * \"Set / not set\" per secret: not null AND — for STRING secrets — not the empty string (an empty\n * string is \"no secret\", AB#5524; same rule as the Studio's service account page) and none of the\n * host's placeholder values (`ENTITY_FORM_SECRET_PLACEHOLDER_VALUES`, AB#5623). SECRET-typed\n * attributes are not probed here: their state comes from the server.\n */\n private async loadSecretPresence(\n secretFields: string[],\n ckTypeId: string,\n rtId: string,\n fields: ResolvedField[] = [],\n ): Promise<Record<string, boolean>> {\n const entries = await Promise.all(secretFields.map(async (name) => {\n const valueType = fields.find((f) => f.attributeName === name)?.valueType ?? 'STRING';\n const fieldFilters = [\n { attributePath: name, operator: FieldFilterOperatorsDto.IsNotNullDto },\n ...(valueType === 'STRING'\n ? ['', ...this.secretPlaceholders.filter((v) => typeof v === 'string' && v !== '')]\n .map((comparisonValue) => ({ attributePath: name, operator: FieldFilterOperatorsDto.NotEqualsDto, comparisonValue }))\n : []),\n ];\n const result = await firstValueFrom(this.presenceGql.fetch({\n variables: { ckTypeId, rtId, fieldFilters },\n fetchPolicy: 'network-only',\n }));\n return [name, (result.data?.runtime?.runtimeEntities?.totalCount ?? 0) > 0] as const;\n }));\n return Object.fromEntries(entries);\n }\n\n private async loadAssociations(fields: ResolvedField[], ckTypeId: string, rtId: string): Promise<Record<string, EntityFormTargetRef[]>> {\n const assocFields = fields.filter((f) => f.kind === 'association' && f.reference?.role);\n const entries = await Promise.all(assocFields.map(async (field) => [field.key, await this.loadAssociationTargets(field, ckTypeId, rtId)] as const));\n return Object.fromEntries(entries);\n }\n\n private async loadAssociationTargets(field: ResolvedField, ckTypeId: string, rtId: string): Promise<EntityFormTargetRef[]> {\n const role = field.reference?.role;\n if (!role || !field.reference) {\n return [];\n }\n const direction = role.direction === 'out' ? GraphDirectionDto.OutboundDto : GraphDirectionDto.InboundDto;\n const targetCkTypeId = field.reference.targetCkTypeId;\n if (!NO_COLLECTION_ROOT_TYPES.includes(targetCkTypeId)) {\n try {\n const result = await firstValueFrom(this.targetsGql.fetch({\n variables: { ckTypeId, rtId, roleId: role.rtRoleId, targetCkTypeId, direction, first: 1000 },\n fetchPolicy: 'network-only',\n }));\n const items = result.data?.runtime?.runtimeEntities?.items?.[0]?.associations?.targets?.items ?? [];\n return items.filter((i): i is NonNullable<typeof i> => !!i).map((i) => ({\n rtId: i.rtId as string,\n ckTypeId: i.ckTypeId as string,\n displayName: displayNameOf(i as Parameters<typeof displayNameOf>[0]),\n }));\n } catch {\n // Fall through to the definitions-based read.\n }\n }\n const defs = await firstValueFrom(this.definitionsGql.fetch({\n variables: { ckTypeId, rtId, roleId: role.rtRoleId, direction, first: 1000 },\n fetchPolicy: 'network-only',\n }));\n const edges = defs.data?.runtime?.runtimeEntities?.items?.[0]?.associations?.definitions?.items ?? [];\n const refs = edges.filter((e): e is NonNullable<typeof e> => !!e).map((e) => role.direction === 'out'\n ? { rtId: e.targetRtId as string, ckTypeId: e.targetCkTypeId as string }\n : { rtId: e.originRtId as string, ckTypeId: e.originCkTypeId as string });\n const named = await this.lookupDisplayNames(refs);\n return refs.map((r) => named.get(r.rtId) ?? { ...r, displayName: r.rtId });\n }\n\n /** Display names for ids, grouped by type; selects only the `name` attribute (secret-safe). */\n private async lookupDisplayNames(refs: { rtId: string; ckTypeId: string }[]): Promise<Map<string, EntityFormTargetRef>> {\n const byType = new Map<string, string[]>();\n for (const r of refs) {\n if (!r.ckTypeId) {\n continue;\n }\n byType.set(r.ckTypeId, [...(byType.get(r.ckTypeId) ?? []), r.rtId]);\n }\n const named = new Map<string, EntityFormTargetRef>();\n await Promise.all([...byType.entries()].map(async ([ckTypeId, ids]) => {\n try {\n const result = await firstValueFrom(this.referenceOptionsGql.fetch({\n variables: { ckTypeId, first: ids.length, fieldFilters: [{ attributePath: 'rtId', operator: FieldFilterOperatorsDto.InDto, comparisonValue: ids }] },\n fetchPolicy: 'network-only',\n }));\n for (const i of result.data?.runtime?.runtimeEntities?.items ?? []) {\n if (i) {\n named.set(i.rtId as string, { rtId: i.rtId as string, ckTypeId: i.ckTypeId as string, displayName: displayNameOf(i as Parameters<typeof displayNameOf>[0]) });\n }\n }\n } catch {\n // Display names are cosmetic; ids are shown instead.\n }\n }));\n return named;\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { isSecretValueType } from '@meshmakers/octo-services';\nimport type { ResolvedEntityForm, ResolvedField } from '../models/entity-form.models';\n\n/**\n * Seeded placeholder values of NON-secret configuration attributes (AB#5623), e.g.\n * `TODO_SET_AZURE_TENANT_ID`, that must read as \"not configured\" instead of as a real value.\n *\n * - A list `readonly string[]` applies to every attribute.\n * - An object lists values `global`ly and/or per attribute (`attributes`, keyed by attribute name\n * in any casing: `azureTenantId`, `AzureTenantId`).\n *\n * Matching is exact and case-sensitive, on string values only.\n */\nexport type EntityFormUnsetPlaceholderValues =\n | readonly string[]\n | {\n readonly global?: readonly string[];\n readonly attributes?: Readonly<Record<string, readonly string[]>>;\n };\n\n/**\n * Placeholder values of non-secret attributes that count as \"not configured\" (AB#5623). Analogous\n * to `ENTITY_FORM_SECRET_PLACEHOLDER_VALUES`, but for plain configuration values:\n *\n * - **List** (`mm-entity-list`): a cell holding a placeholder shows the `notConfigured` message.\n * - **Form** (`mm-entity-form`): the field starts empty with the `notConfigured` message as\n * placeholder hint; the value counts as unset (a required field is invalid, `VisibleWhen` sees no\n * value).\n * - **Save**: the form never writes a placeholder back. An untouched placeholder field is not part\n * of the change set (the stored placeholder stays and keeps reading \"not configured\"); a typed\n * value replaces it; emptying the field again is \"no change\". A host that wants to remove the\n * placeholder from the store has to write `null` itself (e.g. in `beforeSave`).\n *\n * Never applies to secrets (SECRET decision, AB#5528: secret placeholders are dropped; a secret's\n * state comes from `secretIsSet`): fields with `secret` (value type `SECRET`, CK `secret` metadata,\n * the credential-name rule or a form decision) and attributes listed in `secretFields` are skipped,\n * even when listed here.\n *\n * Optional; not provided = no placeholders (unchanged behaviour). The library ships no values.\n */\nexport const ENTITY_FORM_UNSET_PLACEHOLDER_VALUES = new InjectionToken<EntityFormUnsetPlaceholderValues>(\n 'ENTITY_FORM_UNSET_PLACEHOLDER_VALUES',\n);\n\n/** Normalised lookup of {@link EntityFormUnsetPlaceholderValues}. */\nexport interface EntityFormUnsetPlaceholderLookup {\n readonly global: ReadonlySet<string>;\n /** Keyed by lower-case attribute name. */\n readonly attributes: ReadonlyMap<string, ReadonlySet<string>>;\n}\n\nconst EMPTY_LOOKUP: EntityFormUnsetPlaceholderLookup = { global: new Set(), attributes: new Map() };\n\n/** Builds the lookup of a placeholder configuration (`null` / `undefined` = none). */\nexport function entityFormUnsetPlaceholderLookup(\n config: EntityFormUnsetPlaceholderValues | null | undefined,\n): EntityFormUnsetPlaceholderLookup {\n if (!config) {\n return EMPTY_LOOKUP;\n }\n if (Array.isArray(config)) {\n return { global: new Set(config.filter(isString)), attributes: new Map() };\n }\n const object = config as Exclude<EntityFormUnsetPlaceholderValues, readonly string[]>;\n const attributes = new Map<string, Set<string>>();\n for (const [name, values] of Object.entries(object.attributes ?? {})) {\n const key = name.toLowerCase();\n const set = attributes.get(key) ?? new Set<string>();\n for (const value of values ?? []) {\n if (isString(value)) {\n set.add(value);\n }\n }\n attributes.set(key, set);\n }\n return { global: new Set((object.global ?? []).filter(isString)), attributes };\n}\n\n/** What is known about the attribute a value belongs to. */\nexport interface EntityFormUnsetPlaceholderTarget {\n attributeName: string;\n valueType?: string | null;\n /** The field / column is treated as a secret (any reason). */\n secret?: boolean;\n}\n\n/**\n * Whether `value` is a configured placeholder of the attribute. Always `false` for secrets\n * (`secret` flag or value type `SECRET`) and for non-string values.\n */\nexport function isEntityFormUnsetPlaceholder(\n lookup: EntityFormUnsetPlaceholderLookup,\n target: EntityFormUnsetPlaceholderTarget,\n value: unknown,\n): boolean {\n if (typeof value !== 'string' || target.secret || isSecretValueType(target.valueType)) {\n return false;\n }\n if (lookup.global.has(value)) {\n return true;\n }\n return !!lookup.attributes.get(target.attributeName.toLowerCase())?.has(value);\n}\n\n/** Whether a resolved form field may carry an unset placeholder (attribute, not a secret). */\nfunction placeholderCapable(model: ResolvedEntityForm, field: ResolvedField): field is ResolvedField & { attributeName: string } {\n if (field.kind !== 'attribute' || !field.attributeName || field.secret) {\n return false;\n }\n const lower = field.attributeName.toLowerCase();\n return !model.secretFields.some((s) => s.toLowerCase() === lower);\n}\n\n/**\n * Keys of the fields whose value in `values` (form values or `state.values`, keyed by field key)\n * is an unset placeholder. Only non-secret attribute fields are considered.\n */\nexport function entityFormUnsetPlaceholderFields(\n model: ResolvedEntityForm,\n values: Readonly<Record<string, unknown>> | null | undefined,\n lookup: EntityFormUnsetPlaceholderLookup,\n): string[] {\n if (!values || (lookup.global.size === 0 && lookup.attributes.size === 0)) {\n return [];\n }\n const keys: string[] = [];\n for (const section of model.sections) {\n for (const field of section.fields) {\n if (placeholderCapable(model, field) && isEntityFormUnsetPlaceholder(lookup, field, values[field.key])) {\n keys.push(field.key);\n }\n }\n }\n return keys;\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n","import {\n CkRecordInfo,\n EntityFormChangeSet,\n EntityFormMode,\n ResolvedEntityForm,\n ResolvedField,\n} from '../models/entity-form.models';\nimport { formValuesEqual, isEmptyFormValue, toWireValue } from './entity-form-value-mapper';\n\n/** One selected reference target as held by a reference control. */\nexport interface EntityFormReferenceValue {\n rtId: string;\n ckTypeId: string;\n displayName?: string;\n}\n\nexport interface BuildChangeSetOptions {\n /** Record metadata keyed by versioned ckRecordId, for type conversion of record sub-values. */\n records?: Record<string, CkRecordInfo>;\n /**\n * attributeNames of secrets whose clear the user staged (Q8, edit mode). Sent as\n * `clearSecretAttributes` unless a new value was typed for the same field (mutually exclusive —\n * the typed value wins, the server would reject both).\n */\n clearedSecrets?: ReadonlySet<string>;\n}\n\n/**\n * The association `roleName` written in `RtEntityAssociationInput`: the navigation property name\n * with a lower-case first letter (the backend matches it case-insensitively; verified live, and\n * the role id `System/Related` is NOT accepted as roleName — it is silently ignored).\n */\nexport function associationRoleName(navigationPropertyName: string): string {\n return navigationPropertyName.charAt(0).toLowerCase() + navigationPropertyName.slice(1);\n}\n\nfunction references(value: unknown): EntityFormReferenceValue[] {\n if (!Array.isArray(value)) {\n return value && typeof value === 'object' && 'rtId' in (value as object) ? [value as EntityFormReferenceValue] : [];\n }\n return value.filter((v): v is EntityFormReferenceValue => !!v && typeof v === 'object' && typeof (v as EntityFormReferenceValue).rtId === 'string');\n}\n\nfunction isEditable(field: ResolvedField, mode: EntityFormMode): boolean {\n if (field.editor === 'unsupported' || field.readOnly === 'always') {\n return false;\n }\n if (field.readOnly === 'afterCreate' && mode !== 'create') {\n return false;\n }\n return true;\n}\n\n/**\n * Builds the change set of a form (D6: only dirty controls on edit).\n *\n * - `current` is the form's enabled value: a key that is absent (disabled control, e.g. hidden by\n * VisibleWhen) is never sent.\n * - Create mode sends every non-empty editable value (defaults included) plus `rtWellKnownName`.\n * - Edit mode sends only attributes whose value differs from `initial`; read-only, `afterCreate`\n * and unsupported fields and `rtWellKnownName` are never sent.\n * - Secrets: an empty secret is left out (= unchanged); a typed secret is always sent. A staged\n * clear (edit mode, `options.clearedSecrets`) goes to `clearSecretAttributes` instead.\n * - Associations: diff of the selected targets by rtId; a single-valued replace produces DELETE old\n * plus CREATE new.\n * - View mode produces an empty change set.\n */\nexport function buildChangeSet(\n initial: Record<string, unknown>,\n current: Record<string, unknown>,\n model: ResolvedEntityForm,\n mode: EntityFormMode,\n // Reserved for presence-dependent rules; an empty secret is \"unchanged\" whatever the presence.\n _secretPresence: Record<string, boolean> = {},\n options: BuildChangeSetOptions = {},\n): EntityFormChangeSet {\n const changeSet: EntityFormChangeSet = { attributes: [], associations: [], isEmpty: true };\n if (mode === 'view') {\n return changeSet;\n }\n const has = (key: string): boolean => Object.prototype.hasOwnProperty.call(current, key);\n\n for (const field of model.sections.flatMap((s) => s.fields)) {\n if (!has(field.key) || !isEditable(field, mode)) {\n continue;\n }\n const value = current[field.key];\n\n if (field.kind === 'system') {\n if (field.key === 'rtWellKnownName' && mode === 'create' && typeof value === 'string' && value.trim()) {\n changeSet.rtWellKnownName = value.trim();\n }\n continue;\n }\n\n if (field.kind === 'association' && field.reference?.role) {\n const role = field.reference.role;\n const before = mode === 'create' ? [] : references(initial[field.key]);\n const after = references(value);\n const removed = before.filter((b) => !after.some((a) => a.rtId === b.rtId));\n const added = after.filter((a) => !before.some((b) => b.rtId === a.rtId));\n if (removed.length || added.length) {\n changeSet.associations.push({\n roleName: associationRoleName(role.navigationPropertyName),\n targets: [\n ...removed.map((t) => ({ modOption: 'DELETE' as const, target: { ckTypeId: t.ckTypeId, rtId: t.rtId } })),\n ...added.map((t) => ({ modOption: 'CREATE' as const, target: { ckTypeId: t.ckTypeId, rtId: t.rtId } })),\n ],\n });\n }\n continue;\n }\n\n if (field.kind !== 'attribute' || !field.attributeName) {\n continue;\n }\n\n // Attribute-held reference: the control holds [{rtId,...}], the attribute stores the rtId.\n let formValue = value;\n if (field.editor === 'reference') {\n formValue = references(value)[0]?.rtId ?? null;\n }\n\n if (field.secret) {\n if (isEmptyFormValue(formValue, field.valueType)) {\n continue;\n }\n } else if (mode === 'create') {\n if (isEmptyFormValue(formValue, field.valueType)) {\n continue;\n }\n } else {\n let initialValue = initial[field.key];\n if (field.editor === 'reference') {\n initialValue = typeof initialValue === 'string' ? initialValue : references(initialValue)[0]?.rtId ?? null;\n }\n if (formValuesEqual(initialValue, formValue)) {\n continue;\n }\n }\n\n const mapped = toWireValue(formValue, {\n attributeName: field.attributeName,\n valueType: field.valueType ?? 'STRING',\n isOptional: !field.required,\n enumOptions: field.enumOptions,\n ckRecordId: field.record?.ckRecordId,\n }, options.records);\n if (mapped.include) {\n changeSet.attributes.push({ attributeName: field.attributeName, value: mapped.value });\n }\n }\n\n if (mode === 'edit' && options.clearedSecrets?.size) {\n const sent = new Set(changeSet.attributes.map((a) => a.attributeName));\n const clears = model.sections.flatMap((s) => s.fields)\n .filter((f) => f.secret && f.attributeName && options.clearedSecrets?.has(f.attributeName) && !sent.has(f.attributeName)\n && isEditable(f, mode))\n .map((f) => f.attributeName as string);\n if (clears.length) {\n changeSet.clearSecretAttributes = [...new Set(clears)];\n }\n }\n\n changeSet.isEmpty = changeSet.attributes.length === 0 && changeSet.associations.length === 0 && !changeSet.rtWellKnownName\n && !changeSet.clearSecretAttributes?.length;\n return changeSet;\n}\n","import { InjectionToken } from '@angular/core';\nimport {\n CkAttributeInfo,\n ResolvedEntityForm,\n ResolvedField,\n ResolvedListColumn,\n ResolvedSection,\n} from '../models/entity-form.models';\n\n/**\n * What a label belongs to (AB#5623):\n * - `formTitle` / `formDescription` — the form's name and description (`key` = the form key, else\n * the runtime CK type id);\n * - `section` / `sectionDescription` — a section title / description (`key` = section key);\n * - `field` / `help` / `placeholder` — a field's label, help text and placeholder\n * (`key` = the field key: camelCase attribute name, `rtWellKnownName` or `assoc:<role>`);\n * - `listColumn` — a list column title (`key` = the column field);\n * - `recordColumn` — a column of a record grid (`key` = the record sub-attribute path,\n * `attributeName` = the record attribute);\n * - `enumOption` — the display text of an enum value (`key` = the enum value name, `enumKey` = its\n * numeric key, `attributeName` = the ENUM attribute).\n */\nexport type EntityFormLabelKind =\n | 'formTitle'\n | 'formDescription'\n | 'section'\n | 'sectionDescription'\n | 'field'\n | 'help'\n | 'placeholder'\n | 'listColumn'\n | 'recordColumn'\n | 'enumOption';\n\n/** One label lookup of {@link EntityFormLabelResolver}. */\nexport interface EntityFormLabelRequest {\n kind: EntityFormLabelKind;\n /**\n * Runtime CK type the label belongs to (`Basic.Accounting/BankAccount`). For enum options of a\n * reference display attribute this is the reference target type.\n */\n rtCkTypeId: string;\n /** Well-known name (else rtId) of the form definition, when the form came from one. */\n formKey?: string;\n /** See {@link EntityFormLabelKind}. */\n key: string;\n /** The attribute an `enumOption` / `recordColumn` belongs to (camelCase). */\n attributeName?: string;\n /** Numeric key of an `enumOption`. */\n enumKey?: number;\n /** The text shown without a resolver (form definition text, else derived from the CK model). */\n defaultText: string;\n}\n\n/**\n * Host hook that translates the texts of an entity form (AB#5623): field labels, help texts,\n * placeholders, section titles, form title, list column titles, record columns and enum option\n * texts. Return `null`, `undefined` or `''` to keep {@link EntityFormLabelRequest.defaultText}.\n *\n * The resolver is called inside Angular `computed`s: when it reads a signal (e.g. the current\n * language), the forms re-render on a change of that signal. A resolver that reads no signal is\n * evaluated once per model; pass a new function to the `labelResolver` input to refresh it.\n * A language change never rebuilds the form controls, so unsaved edits are kept.\n *\n * Fixed UI texts (buttons, notifications, validation messages) are translated with the `messages`\n * input ({@link EntityFormsMessages}), not with this hook.\n */\nexport type EntityFormLabelResolver = (request: EntityFormLabelRequest) => string | null | undefined;\n\n/**\n * App-wide {@link EntityFormLabelResolver} for `mm-entity-form`, `mm-entity-list` and\n * `mm-entity-page`. Their `labelResolver` input wins over this token. Not provided = the texts of\n * the form definition / CK model are shown unchanged (today's behaviour).\n */\nexport const ENTITY_FORM_LABEL_RESOLVER = new InjectionToken<EntityFormLabelResolver>('ENTITY_FORM_LABEL_RESOLVER');\n\n/** Resolvers that already threw (warned once each, not once per label). */\nconst failedResolvers = new WeakSet<EntityFormLabelResolver>();\n\n/**\n * Resolves one label; falls back to the default text when there is no resolver, no translation,\n * or the resolver throws (logged once per resolver with `console.warn`).\n */\nexport function resolveEntityFormLabel(\n resolver: EntityFormLabelResolver | null | undefined,\n request: EntityFormLabelRequest,\n): string {\n if (!resolver) {\n return request.defaultText;\n }\n let text: string | null | undefined;\n try {\n text = resolver(request);\n } catch (error) {\n if (!failedResolvers.has(resolver)) {\n failedResolvers.add(resolver);\n console.warn('entity-forms: the label resolver threw; showing the default texts', error);\n }\n return request.defaultText;\n }\n return typeof text === 'string' && text !== '' ? text : request.defaultText;\n}\n\ninterface LabelContext {\n resolver: EntityFormLabelResolver;\n rtCkTypeId: string;\n formKey?: string;\n}\n\nfunction contextOf(model: ResolvedEntityForm, resolver: EntityFormLabelResolver): LabelContext {\n const formKey = model.formWellKnownName ?? model.formRtId;\n return { resolver, rtCkTypeId: model.rtCkTypeId, ...(formKey ? { formKey } : {}) };\n}\n\nfunction label(ctx: LabelContext, kind: EntityFormLabelKind, key: string, defaultText: string, extra: Partial<EntityFormLabelRequest> = {}): string {\n return resolveEntityFormLabel(ctx.resolver, {\n kind,\n rtCkTypeId: ctx.rtCkTypeId,\n ...(ctx.formKey ? { formKey: ctx.formKey } : {}),\n key,\n defaultText,\n ...extra,\n });\n}\n\nfunction localizeEnumOptions(\n ctx: LabelContext,\n attributeName: string | undefined,\n options: { key: number; name: string }[] | undefined,\n): { key: number; name: string }[] | undefined {\n if (!options) {\n return options;\n }\n return options.map((o) => ({\n key: o.key,\n name: label(ctx, 'enumOption', o.name, o.name, { enumKey: o.key, ...(attributeName ? { attributeName } : {}) }),\n }));\n}\n\nfunction localizeAttributeInfo(ctx: LabelContext, info: CkAttributeInfo[] | undefined): CkAttributeInfo[] | undefined {\n if (!info) {\n return info;\n }\n return info.map((a) => (a.enumOptions?.length\n ? { ...a, enumOptions: localizeEnumOptions(ctx, a.attributeName, a.enumOptions) }\n : a));\n}\n\nfunction localizeField(ctx: LabelContext, field: ResolvedField): ResolvedField {\n const out: ResolvedField = { ...field, label: label(ctx, 'field', field.key, field.label) };\n if (field.help !== undefined) {\n out.help = label(ctx, 'help', field.key, field.help);\n }\n if (field.placeholder !== undefined) {\n out.placeholder = label(ctx, 'placeholder', field.key, field.placeholder);\n }\n if (field.enumOptions) {\n out.enumOptions = localizeEnumOptions(ctx, field.attributeName ?? field.key, field.enumOptions);\n }\n if (field.record) {\n out.record = {\n ...field.record,\n columns: field.record.columns.map((c) => ({\n path: c.path,\n label: label(ctx, 'recordColumn', c.path, c.label, { attributeName: field.attributeName ?? field.key }),\n })),\n };\n }\n if (field.reference?.displayAttributeInfo?.length) {\n const targetCtx: LabelContext = { resolver: ctx.resolver, rtCkTypeId: field.reference.targetCkTypeId };\n out.reference = { ...field.reference, displayAttributeInfo: localizeAttributeInfo(targetCtx, field.reference.displayAttributeInfo) };\n }\n return out;\n}\n\nfunction localizeSection(ctx: LabelContext, section: ResolvedSection): ResolvedSection {\n const out: ResolvedSection = {\n ...section,\n title: section.title === null ? null : label(ctx, 'section', section.key, section.title),\n fields: section.fields.map((f) => localizeField(ctx, f)),\n };\n if (section.description !== undefined) {\n out.description = label(ctx, 'sectionDescription', section.key, section.description);\n }\n return out;\n}\n\n/** The list columns of a model with translated titles and enum texts (unchanged without a resolver). */\nexport function localizeEntityListColumns(\n model: ResolvedEntityForm,\n resolver: EntityFormLabelResolver | null | undefined,\n): ResolvedListColumn[] {\n if (!resolver) {\n return model.listColumns;\n }\n const ctx = contextOf(model, resolver);\n return model.listColumns.map((c) => {\n const out: ResolvedListColumn = { ...c, label: label(ctx, 'listColumn', c.field, c.label) };\n if (c.enumOptions) {\n out.enumOptions = localizeEnumOptions(ctx, c.field, c.enumOptions);\n }\n return out;\n });\n}\n\n/** Translated form title (unchanged without a resolver). */\nexport function localizeEntityFormTitle(model: ResolvedEntityForm, resolver: EntityFormLabelResolver | null | undefined): string {\n return resolver ? label(contextOf(model, resolver), 'formTitle', model.formWellKnownName ?? model.formRtId ?? model.rtCkTypeId, model.title) : model.title;\n}\n\n/**\n * A copy of a resolved form with every display text passed through the resolver (AB#5623). Keys,\n * attribute names and enum keys are unchanged, so form controls, change sets and queries are not\n * affected. Returns the model itself when there is no resolver.\n */\nexport function localizeEntityForm(\n model: ResolvedEntityForm,\n resolver: EntityFormLabelResolver | null | undefined,\n): ResolvedEntityForm {\n if (!resolver) {\n return model;\n }\n const ctx = contextOf(model, resolver);\n const out: ResolvedEntityForm = {\n ...model,\n title: localizeEntityFormTitle(model, resolver),\n sections: model.sections.map((s) => localizeSection(ctx, s)),\n listColumns: localizeEntityListColumns(model, resolver),\n };\n if (model.description !== undefined) {\n out.description = label(ctx, 'formDescription', model.formWellKnownName ?? model.formRtId ?? model.rtCkTypeId, model.description);\n }\n return out;\n}\n","import { InjectionToken } from '@angular/core';\nimport { firstValueFrom, isObservable, Observable } from 'rxjs';\nimport { EntityFormChangeSet, EntityFormMode, ResolvedEntityForm } from '../models/entity-form.models';\n\n/** What a {@link EntityFormBeforeSaveHook} learns about the save besides the change set. */\nexport interface EntityFormBeforeSaveContext {\n /** `create` or `edit` (a view form never saves). */\n mode: Exclude<EntityFormMode, 'view'>;\n /** Runtime CK type id of the entity that is saved (the concrete type in create mode). */\n ckTypeId: string;\n /** rtId of the entity in edit mode; absent in create mode. */\n rtId?: string;\n /** The resolved form (fields, sections, secret field names) - metadata only, no values. */\n form: ResolvedEntityForm;\n}\n\n/**\n * Result of a {@link EntityFormBeforeSaveHook}:\n * - a change set → saved instead of the original one (`isEmpty` is recomputed);\n * - `undefined` / `void` / `true` → the change set handed to the hook is saved, including any\n * in-place changes the hook made to it;\n * - `null` / `false` → the save is vetoed silently (the hook told the user itself, or nothing\n * needs saying). To veto with a message, throw an {@link EntityFormSaveVeto}.\n */\nexport type EntityFormBeforeSaveResult = EntityFormChangeSet | boolean | null | undefined | void;\n\n/**\n * Host hook run right before an entity form is saved (AB#5623), after validation — e.g. to\n * normalise values (trim texts, format IBAN / BIC / phone numbers, lower-case an e-mail) or to\n * derive attributes (`NormalizedEmail` from `Email`). It may be synchronous or return a\n * `Promise` / `Observable` (the first emitted value counts).\n *\n * - Attribute names in `changeSet.attributes` are the camelCase CK attribute names\n * (`email`, `normalizedEmail`); values are wire values (strings, numbers, enum keys, …).\n * - Edit mode: the change set holds only changed attributes (D6). A hook that derives an\n * attribute from another one therefore acts only when the source is in the change set; it may\n * add attributes that are not in the form.\n * - **Secrets:** the hook sees nothing beyond the change set. A SECRET attribute appears there\n * only as the write value the user just typed into this form (or in `clearSecretAttributes`\n * when a clear is staged) — never a stored value, which the form never reads. Do not log the\n * change set.\n * - Throw an {@link EntityFormSaveVeto} to stop the save with a message for the user; any other\n * error also stops the save and is reported like a failed save.\n *\n * Provide it as the `beforeSave` input of `mm-entity-form` / `mm-entity-page`, as the\n * `beforeSave` option of `entityFormRoutes` (route data key `entityFormBeforeSave`), or via\n * {@link ENTITY_FORM_BEFORE_SAVE} on a route / root injector. Precedence: input > route data >\n * token.\n */\nexport type EntityFormBeforeSaveHook = (\n changeSet: EntityFormChangeSet,\n context: EntityFormBeforeSaveContext,\n) => EntityFormBeforeSaveResult | Promise<EntityFormBeforeSaveResult> | Observable<EntityFormBeforeSaveResult>;\n\n/** Injection token of a {@link EntityFormBeforeSaveHook} (lowest precedence, see there). */\nexport const ENTITY_FORM_BEFORE_SAVE = new InjectionToken<EntityFormBeforeSaveHook>('ENTITY_FORM_BEFORE_SAVE');\n\n/**\n * Thrown by a {@link EntityFormBeforeSaveHook} to stop a save on purpose. `userMessage` (already\n * translated by the host) is shown as a warning; without it the generic `saveVetoed` message is\n * shown.\n */\nexport class EntityFormSaveVeto extends Error {\n constructor(public readonly userMessage?: string) {\n super(userMessage ?? 'The save was vetoed by the host.');\n this.name = 'EntityFormSaveVeto';\n }\n}\n\n/** Outcome of {@link runEntityFormBeforeSave}. */\nexport type EntityFormBeforeSaveOutcome =\n | { kind: 'save'; changeSet: EntityFormChangeSet }\n | { kind: 'veto'; message?: string }\n | { kind: 'error'; error: unknown };\n\n/** True for a thrown {@link EntityFormSaveVeto} (also across bundle copies, by name). */\nexport function isEntityFormSaveVeto(error: unknown): error is EntityFormSaveVeto {\n return error instanceof EntityFormSaveVeto || (error instanceof Error && error.name === 'EntityFormSaveVeto');\n}\n\nfunction cloneChangeSet(changeSet: EntityFormChangeSet): EntityFormChangeSet {\n return {\n ...changeSet,\n attributes: changeSet.attributes.map((a) => ({ ...a })),\n associations: changeSet.associations.map((a) => ({\n ...a,\n targets: a.targets.map((t) => ({ ...t, target: { ...t.target } })),\n })),\n ...(changeSet.clearSecretAttributes ? { clearSecretAttributes: [...changeSet.clearSecretAttributes] } : {}),\n };\n}\n\nfunction withIsEmpty(changeSet: EntityFormChangeSet): EntityFormChangeSet {\n const attributes = Array.isArray(changeSet.attributes) ? changeSet.attributes : [];\n const associations = Array.isArray(changeSet.associations) ? changeSet.associations : [];\n return {\n ...changeSet,\n attributes,\n associations,\n isEmpty: attributes.length === 0 && associations.length === 0 && !changeSet.rtWellKnownName\n && !changeSet.clearSecretAttributes?.length,\n };\n}\n\n/**\n * Runs the host hook on a copy of the change set (the caller's object is never touched) and\n * normalises its result. Absent hook = save unchanged.\n */\nexport async function runEntityFormBeforeSave(\n hook: EntityFormBeforeSaveHook | null | undefined,\n changeSet: EntityFormChangeSet,\n context: EntityFormBeforeSaveContext,\n): Promise<EntityFormBeforeSaveOutcome> {\n if (!hook) {\n return { kind: 'save', changeSet };\n }\n const draft = cloneChangeSet(changeSet);\n try {\n const raw = hook(draft, context);\n const result = isObservable(raw)\n ? await firstValueFrom(raw, { defaultValue: undefined })\n : await raw;\n if (result === null || result === false) {\n return { kind: 'veto' };\n }\n if (result === undefined || result === true) {\n return { kind: 'save', changeSet: withIsEmpty(draft) };\n }\n if (typeof result === 'object' && Array.isArray((result as EntityFormChangeSet).attributes)) {\n return { kind: 'save', changeSet: withIsEmpty(result as EntityFormChangeSet) };\n }\n return { kind: 'error', error: new TypeError('beforeSave returned neither a change set nor a boolean.') };\n } catch (error) {\n if (isEntityFormSaveVeto(error)) {\n return { kind: 'veto', message: error.userMessage };\n }\n return { kind: 'error', error };\n }\n}\n","import { EntityFormValueState, ResolvedEntityForm, ResolvedField } from '../models/entity-form.models';\n\n/**\n * Values a host puts into a form (AB#5623), keyed by field key: the camelCase attribute name (any\n * casing is accepted), `rtWellKnownName`, or the association field key (`assoc:<role>`).\n *\n * Values use the form value shape (as in {@link EntityFormValueState.values}): strings, numbers,\n * booleans, `Date` for DATE_TIME, arrays for chips and records, and for references either a bare\n * rtId or `{ rtId, ckTypeId, displayName }[]`. Secret fields are never prefilled.\n */\nexport type EntityFormPrefillValues = Readonly<Record<string, unknown>>;\n\n/** Options of {@link entityFormPrefillState}. */\nexport interface EntityFormPrefillOptions {\n /** Well-known name of the entity to create (carried even when the form has no such field). */\n rtWellKnownName?: string | null;\n}\n\n/**\n * Builds the `state` of `<mm-entity-form mode=\"create\">` from host values (AB#5623): a prefilled\n * value wins over the field's default, everything else starts empty. Equivalent to the form's\n * `initialValues` input; use it when the host already passes a `state`.\n */\nexport function entityFormPrefillState(values: EntityFormPrefillValues | null | undefined, options: EntityFormPrefillOptions = {}): EntityFormValueState {\n const plain: Record<string, unknown> = {};\n const associations: EntityFormValueState['associations'] = {};\n let rtWellKnownName = options.rtWellKnownName ?? null;\n for (const [key, value] of Object.entries(values ?? {})) {\n if (value === undefined) {\n continue;\n }\n if (key === 'rtWellKnownName') {\n rtWellKnownName ??= typeof value === 'string' ? value : null;\n } else if (key.startsWith('assoc:') && Array.isArray(value)) {\n associations[key] = value as EntityFormValueState['associations'][string];\n } else {\n plain[key] = value;\n }\n }\n return { values: plain, secretPresence: {}, associations, rtWellKnownName };\n}\n\n/**\n * Merges host values over a create-mode state (host values win). Returns the state unchanged when\n * there are no values. Canonicalise the keys first ({@link canonicaliseEntityFormPrefill}).\n */\nexport function mergeEntityFormPrefill(state: EntityFormValueState | null | undefined, values: EntityFormPrefillValues | null | undefined): EntityFormValueState | null {\n if (!values || Object.keys(values).length === 0) {\n return state ?? null;\n }\n const prefill = entityFormPrefillState(values);\n const base = state ?? { values: {}, secretPresence: {}, associations: {}, rtWellKnownName: null };\n return {\n ...base,\n values: { ...base.values, ...prefill.values },\n associations: { ...base.associations, ...prefill.associations },\n rtWellKnownName: base.rtWellKnownName || prefill.rtWellKnownName,\n };\n}\n\n/**\n * The field a prefill key addresses: matched by field key, then by attribute name, both\n * case-insensitively. `undefined` for unknown keys.\n */\nexport function entityFormPrefillField(model: ResolvedEntityForm, key: string): ResolvedField | undefined {\n const lower = key.toLowerCase();\n const fields = model.sections.flatMap((s) => s.fields);\n return fields.find((f) => f.key.toLowerCase() === lower)\n ?? fields.find((f) => (f.attributeName ?? '').toLowerCase() === lower);\n}\n\n/**\n * Host values re-keyed to the form's field keys (AB#5623). Unknown keys are kept as they are\n * (`rtWellKnownName` is always kept); secret fields are dropped (never prefilled); a bare rtId for\n * a reference field becomes the reference editor's `{ rtId, ckTypeId, displayName }[]` value.\n */\nexport function canonicaliseEntityFormPrefill(model: ResolvedEntityForm, values: EntityFormPrefillValues | null | undefined): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(values ?? {})) {\n const field = entityFormPrefillField(model, key);\n if (!field) {\n out[key] = value;\n continue;\n }\n if (field.secret) {\n continue;\n }\n out[field.key] = toReferenceValue(field, value);\n }\n return out;\n}\n\n/** A bare rtId (or rtId list) for a reference field as the reference editor's value. */\nexport function toReferenceValue(field: ResolvedField, value: unknown): unknown {\n if (field.editor !== 'reference') {\n return value;\n }\n const ckTypeId = field.reference?.targetCkTypeId ?? '';\n const one = (v: unknown): unknown => (typeof v === 'string' && v ? { rtId: v, ckTypeId, displayName: v } : v);\n if (typeof value === 'string') {\n return value ? [one(value)] : [];\n }\n return Array.isArray(value) ? value.map(one) : value;\n}\n","import { SecretState, SecretStatusLabels, formatSecretStatus, isSecretStateObject, isSecretValueType, toSecretState } from '@meshmakers/octo-services';\nimport type { CkAttributeInfo } from '../../models/entity-form.models';\n\n/**\n * Editor kinds of a record sub-field. A subset of `EntityFormEditor`, derived with the auto rules\n * of the resolver (record sub-fields carry no form definition of their own).\n */\nexport type RecordFieldEditor = 'text' | 'number' | 'toggle' | 'enum' | 'datetime' | 'chips' | 'nested' | 'secret' | 'unsupported';\n\n/** One editable (or read-only displayed) sub-field of a record row. */\nexport interface RecordFieldModel {\n attributeName: string;\n valueType: string;\n label: string;\n description?: string | null;\n editor: RecordFieldEditor;\n /** Nested records and unsupported types are shown, never edited; their value is kept as is. */\n readOnly: boolean;\n enumOptions?: { key: number; name: string }[];\n /** True for INT/INTEGER arrays: chips are converted back to numbers. */\n numericChips?: boolean;\n}\n\nconst NUMERIC = new Set(['INT', 'INTEGER', 'INT_64', 'INTEGER_64', 'DOUBLE']);\nconst DATES = new Set(['DATE_TIME', 'DATE_TIME_OFFSET']);\nconst NUMERIC_ARRAYS = new Set(['INT_ARRAY', 'INTEGER_ARRAY']);\nconst ARRAYS = new Set(['STRING_ARRAY', 'INT_ARRAY', 'INTEGER_ARRAY']);\nconst RECORDS = new Set(['RECORD', 'RECORD_ARRAY']);\n\n/** Auto editor for a record sub-attribute (same table as the resolver's `auto` rule). */\nexport function recordFieldEditor(valueType: string): RecordFieldEditor {\n const t = (valueType ?? '').toUpperCase();\n if (isSecretValueType(t)) {\n // SECRET member (AB#5528): badge + write-only input; empty keeps the stored value (record key).\n return 'secret';\n }\n if (t === 'STRING') {\n return 'text';\n }\n if (NUMERIC.has(t)) {\n return 'number';\n }\n if (t === 'BOOLEAN') {\n return 'toggle';\n }\n if (DATES.has(t)) {\n return 'datetime';\n }\n if (t === 'ENUM') {\n return 'enum';\n }\n if (ARRAYS.has(t)) {\n return 'chips';\n }\n if (RECORDS.has(t)) {\n return 'nested';\n }\n return 'unsupported';\n}\n\n/** Turns `someAttributeName` into `Some attribute name` for a label. */\nexport function humanizeAttributeName(name: string): string {\n const spaced = name.replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/[_-]+/g, ' ').trim();\n if (!spaced) {\n return name;\n }\n return spaced.charAt(0).toUpperCase() + spaced.slice(1).toLowerCase();\n}\n\n/**\n * Builds the sub-field models of a record. Record sub-fields are **always optional** in the UI:\n * the CK API reports `isOptional: false` for every record attribute (backend defect), so no\n * \"required\" state is derived from it; the server still enforces mandatory attributes.\n */\nexport function buildRecordFieldModels(attributes: CkAttributeInfo[]): RecordFieldModel[] {\n return attributes.map(a => {\n const editor = recordFieldEditor(a.valueType);\n return {\n attributeName: a.attributeName,\n valueType: a.valueType,\n label: humanizeAttributeName(a.attributeName),\n description: a.description ?? null,\n editor,\n readOnly: editor === 'nested' || editor === 'unsupported',\n enumOptions: editor === 'enum' ? (a.enumOptions ?? []) : undefined,\n numericChips: editor === 'chips' && NUMERIC_ARRAYS.has((a.valueType ?? '').toUpperCase())\n };\n });\n}\n\nfunction isEmpty(value: unknown): boolean {\n return value === null || value === undefined || value === '' || (Array.isArray(value) && value.length === 0);\n}\n\n/** Converts a stored row value into the control value of its editor. */\nexport function toControlValue(field: RecordFieldModel, value: unknown): unknown {\n if (field.editor === 'secret') {\n // Never prefilled: a stored secret is a state object; a value typed earlier in this session\n // (not saved yet) is shown again so the row can still be corrected.\n return typeof value === 'string' ? value : null;\n }\n if (value === undefined || value === null) {\n return field.editor === 'chips' ? [] : null;\n }\n switch (field.editor) {\n case 'datetime': {\n if (value instanceof Date) {\n return value;\n }\n const date = new Date(String(value));\n return isNaN(date.getTime()) ? null : date;\n }\n case 'enum': {\n if (typeof value === 'number') {\n return value;\n }\n const byName = field.enumOptions?.find(o => o.name.toLowerCase() === String(value).toLowerCase());\n if (byName) {\n return byName.key;\n }\n const key = Number(value);\n return isNaN(key) ? null : key;\n }\n case 'chips':\n return Array.isArray(value) ? value.map(v => String(v)) : [String(value)];\n case 'number': {\n const n = typeof value === 'number' ? value : Number(value);\n return isNaN(n) ? null : n;\n }\n case 'toggle':\n return value === true || value === 'true';\n default:\n return value;\n }\n}\n\n/** Converts a control value back into the flat form-dict value (value-mapper form shape); `undefined` drops the key. */\nexport function fromControlValue(field: RecordFieldModel, value: unknown): unknown {\n if (isEmpty(value)) {\n return undefined;\n }\n switch (field.editor) {\n case 'datetime':\n // The form shape of a date is a `Date` (value mapper); it becomes ISO on the wire.\n return value;\n case 'chips':\n return field.numericChips\n ? (value as unknown[]).map(v => Number(v)).filter(v => !isNaN(v))\n : (value as unknown[]).map(v => String(v));\n case 'text':\n return String(value);\n default:\n return value;\n }\n}\n\n/**\n * Builds the resulting row: values of read-only sub-fields and of keys the record model does not\n * know are kept verbatim; editable sub-fields are taken from the form, empty ones are removed.\n */\nexport function buildRow(\n fields: RecordFieldModel[],\n original: Record<string, unknown> | null | undefined,\n formValue: Record<string, unknown>\n): Record<string, unknown> {\n const row: Record<string, unknown> = { ...(original ?? {}) };\n for (const field of fields) {\n if (field.readOnly) {\n continue;\n }\n if (field.editor === 'secret') {\n // A typed value replaces the member; empty keeps the stored state (carried over on save).\n const typed = formValue[field.attributeName];\n if (typeof typed === 'string' && typed.length > 0) {\n row[field.attributeName] = typed;\n } else if (typeof row[field.attributeName] === 'string') {\n delete row[field.attributeName];\n }\n continue;\n }\n const value = fromControlValue(field, formValue[field.attributeName]);\n if (value === undefined) {\n delete row[field.attributeName];\n } else {\n row[field.attributeName] = value;\n }\n }\n return row;\n}\n\n/** The stored state of a SECRET member value (`null` for a typed, unsaved string). */\nexport function recordSecretState(value: unknown): SecretState | null {\n if (typeof value === 'string' && value.length > 0) {\n return null;\n }\n return toSecretState(isSecretStateObject(value) ? value : null);\n}\n\n/**\n * Cell / badge text of a SECRET member: the shared status wording for a stored value, `newValue`\n * for a typed, unsaved value — never the value itself.\n */\nexport function formatRecordSecretCell(\n value: unknown,\n labels: SecretStatusLabels,\n newValue: string,\n formatDate?: (date: Date) => string,\n): string {\n const state = recordSecretState(value);\n return state ? formatSecretStatus(state, formatDate, labels) : newValue;\n}\n\n/** Short, single-line text of a cell value for the records grid and read-only displays. */\nexport function formatRecordCell(value: unknown, enumOptions?: { key: number; name: string }[]): string {\n if (value === null || value === undefined) {\n return '';\n }\n if (enumOptions && typeof value === 'number') {\n return enumOptions.find(o => o.key === value)?.name ?? String(value);\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (Array.isArray(value)) {\n if (value.some(v => v !== null && typeof v === 'object')) {\n return `[${value.length}]`;\n }\n return value.join(', ');\n }\n if (typeof value === 'object') {\n return '{…}';\n }\n return String(value);\n}\n","import { formatDate } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, LOCALE_ID, computed, inject, input } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { DialogRef } from '@progress/kendo-angular-dialog';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport type { CkRecordInfo } from '../../models/entity-form.models';\nimport { EntityFormsMessages, mergeEntityFormsMessages, secretStatusLabelsOf } from '../../entity-forms.messages';\nimport {\n buildRecordFieldModels,\n buildRow,\n formatRecordCell,\n formatRecordSecretCell,\n RecordFieldModel,\n recordSecretState,\n toControlValue\n} from './entity-form-record-row';\n\n/**\n * Row editor of `mm-entity-form-records-field`. Fields are generated from the record's CK\n * attributes with the auto-editor rules; every sub-field is optional (see\n * `buildRecordFieldModels`). Nested RECORD / RECORD_ARRAY sub-fields and unsupported value types\n * are shown read-only and their values are passed through unchanged.\n *\n * SECRET members (AB#5528, handover §2) show the set / not-set badge and a write-only input: a\n * typed value replaces the member, an empty input keeps the stored value — the server carries it\n * over from the stored element with the same record key (changing the key therefore drops it).\n * Read-only users see the badge only.\n *\n * Closes its `DialogRef` with the resulting flat camelCase row, or with `undefined` on cancel.\n */\n@Component({\n selector: 'mm-entity-form-record-row-dialog',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ReactiveFormsModule, ButtonsModule, InputsModule, DateInputsModule, DropDownsModule],\n template: `\n <form class=\"mm-efr-dialog\" [formGroup]=\"form()\" (ngSubmit)=\"onApply()\">\n @for (field of fields(); track field.attributeName) {\n <div class=\"mm-efr-field\" [attr.data-attribute]=\"field.attributeName\">\n <label class=\"mm-efr-label\" [attr.for]=\"'efr-' + field.attributeName\">{{ field.label }}</label>\n @switch (field.editor) {\n @case ('text') {\n <kendo-textbox [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\"></kendo-textbox>\n }\n @case ('number') {\n <kendo-numerictextbox [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\"\n [spinners]=\"false\" format=\"#.##########\"></kendo-numerictextbox>\n }\n @case ('toggle') {\n <kendo-switch [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\"></kendo-switch>\n }\n @case ('datetime') {\n <kendo-datetimepicker [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\"></kendo-datetimepicker>\n }\n @case ('enum') {\n <kendo-dropdownlist [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\"\n [data]=\"field.enumOptions ?? []\" textField=\"name\" valueField=\"key\"\n [valuePrimitive]=\"true\" [defaultItem]=\"enumDefaultItem()\"></kendo-dropdownlist>\n }\n @case ('chips') {\n <kendo-multiselect [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\"\n [data]=\"[]\" [allowCustom]=\"true\" [placeholder]=\"msg().chipsPlaceholder\"></kendo-multiselect>\n }\n @case ('secret') {\n <div class=\"mm-efr-secret\">\n <span class=\"mm-efr-secret-badge\" [attr.data-secret-state]=\"secretStateKey(field)\">{{ secretBadge(field) }}</span>\n @if (!readOnly()) {\n @if (secretWritesDisabled()) {\n <span class=\"mm-efr-hint\" data-secret-writes-disabled>{{ msg().secretWritesDisabled }}</span>\n }\n <kendo-textbox [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\" type=\"password\"\n [placeholder]=\"secretPlaceholder(field)\"\n [inputAttributes]=\"{ autocomplete: 'new-password', spellcheck: 'false' }\"></kendo-textbox>\n }\n </div>\n }\n @default {\n <div class=\"mm-efr-readonly\" [id]=\"'efr-' + field.attributeName\">\n <span class=\"mm-efr-readonly-value\">{{ display(field) }}</span>\n <span class=\"mm-efr-hint\">{{ field.editor === 'nested' ? msg().nestedRecordReadOnly : msg().unsupportedEditor }}</span>\n </div>\n }\n }\n @if (field.description) {\n <small class=\"mm-efr-help\">{{ field.description }}</small>\n }\n </div>\n }\n <div class=\"mm-efr-actions\">\n <button kendoButton type=\"button\" (click)=\"onCancel()\">{{ msg().cancel }}</button>\n @if (!readOnly()) {\n <button kendoButton type=\"submit\" themeColor=\"primary\">{{ msg().apply }}</button>\n }\n </div>\n </form>\n `,\n styles: [`\n :host { display: block; }\n .mm-efr-dialog { display: flex; flex-direction: column; gap: 12px; min-width: 320px; }\n .mm-efr-field { display: flex; flex-direction: column; gap: 4px; }\n .mm-efr-label { font-weight: 500; color: var(--theme-text-primary, inherit); }\n .mm-efr-help, .mm-efr-hint { color: var(--theme-text-secondary, inherit); font-size: 0.85em; }\n .mm-efr-readonly { display: flex; flex-direction: column; gap: 2px; padding: 4px 0; }\n .mm-efr-readonly-value { font-family: monospace; word-break: break-all; }\n .mm-efr-secret { display: flex; flex-direction: column; gap: 4px; }\n .mm-efr-secret-badge { align-self: flex-start; font-size: 0.8em; padding: 0 8px; border-radius: 8px;\n background: var(--theme-bg-subtle, rgba(127, 127, 127, 0.15)); color: var(--theme-text-secondary, inherit); }\n .mm-efr-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 8px; }\n `]\n})\nexport class EntityFormRecordRowDialogComponent {\n private readonly dialogRef = inject(DialogRef, { optional: true });\n private readonly locale = inject(LOCALE_ID);\n\n /** CK metadata of the record; set by the opener (`ComponentRef.setInput`). */\n readonly record = input<CkRecordInfo | null>(null);\n /** Row being edited; `null` adds a new row. */\n readonly row = input<Record<string, unknown> | null>(null);\n readonly readOnly = input(false);\n /** No key ring (Q17): SECRET members keep their stored value; the input is disabled with a hint. */\n readonly secretWritesDisabled = input(false);\n readonly messages = input<Partial<EntityFormsMessages>>({});\n\n protected readonly msg = computed(() => mergeEntityFormsMessages(this.messages()));\n protected readonly fields = computed<RecordFieldModel[]>(() => buildRecordFieldModels(this.record()?.attributes ?? []));\n protected readonly enumDefaultItem = computed(() => ({ key: null, name: this.msg().enumPlaceholder }));\n\n /** Rebuilt whenever the record metadata, the row or the read-only state changes. */\n readonly form = computed(() => this.buildForm(this.fields(), this.row(), this.readOnly(), this.secretWritesDisabled()));\n\n /** The row resulting from the current form state (original keys preserved). */\n result(): Record<string, unknown> {\n return buildRow(this.fields(), this.row(), this.form().getRawValue());\n }\n\n /** Badge of a SECRET member: the shared status wording, or \"new value\" for a typed one. */\n protected secretBadge(field: RecordFieldModel): string {\n const m = this.msg();\n return formatRecordSecretCell(this.row()?.[field.attributeName], secretStatusLabelsOf(m), m.secretRecordMemberNewValue,\n (date) => formatDate(date, 'medium', this.locale));\n }\n\n protected secretStateKey(field: RecordFieldModel): string {\n const state = recordSecretState(this.row()?.[field.attributeName]);\n return !state ? 'new' : state.keyMissing ? 'keyMissing' : state.isSet ? 'set' : 'notSet';\n }\n\n protected secretPlaceholder(field: RecordFieldModel): string {\n const state = recordSecretState(this.row()?.[field.attributeName]);\n return state && (state.isSet || state.keyMissing) ? this.msg().secretRecordMemberKeep : this.msg().secretNotSetPlaceholder;\n }\n\n protected display(field: RecordFieldModel): string {\n return formatRecordCell(this.row()?.[field.attributeName], field.enumOptions);\n }\n\n protected onApply(): void {\n if (this.readOnly()) {\n this.onCancel();\n return;\n }\n this.dialogRef?.close(this.result());\n }\n\n protected onCancel(): void {\n this.dialogRef?.close(undefined);\n }\n\n private buildForm(\n fields: RecordFieldModel[],\n row: Record<string, unknown> | null,\n readOnly: boolean,\n secretWritesDisabled = false\n ): FormGroup<Record<string, FormControl<unknown>>> {\n const form = new FormGroup<Record<string, FormControl<unknown>>>({});\n for (const field of fields) {\n if (field.readOnly) {\n continue;\n }\n const control = new FormControl<unknown>(toControlValue(field, row?.[field.attributeName]));\n if (readOnly || (secretWritesDisabled && field.editor === 'secret')) {\n control.disable({ emitEvent: false });\n }\n form.addControl(field.attributeName, control, { emitEvent: false });\n }\n return form;\n }\n}\n","import { formatDate } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, LOCALE_ID, computed, effect, forwardRef, inject, input, signal } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { firstValueFrom } from 'rxjs';\nimport { GridModule } from '@progress/kendo-angular-grid';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { DialogCloseResult, DialogService } from '@progress/kendo-angular-dialog';\nimport { arrowDownIcon, arrowUpIcon } from '@progress/kendo-svg-icons';\nimport { MM_ACTION_ICONS } from '@meshmakers/shared-ui';\nimport type { CkRecordInfo } from '../../models/entity-form.models';\nimport { DEFAULT_ENTITY_FORMS_MESSAGES, EntityFormsMessages, formatEntityFormsMessage, mergeEntityFormsMessages, secretStatusLabelsOf } from '../../entity-forms.messages';\nimport { EntityFormService } from '../../services/entity-form.service';\nimport { buildRecordFieldModels, formatRecordCell, formatRecordSecretCell, humanizeAttributeName } from './entity-form-record-row';\nimport { EntityFormRecordRowDialogComponent } from './entity-form-record-row-dialog.component';\n\n/** Grid column of the records editor. */\nexport interface EntityFormRecordColumn {\n path: string;\n label: string;\n}\n\n/** Number of columns derived from the record metadata when the form lists none. */\nconst DERIVED_COLUMN_COUNT = 4;\n\n/** Grid row: the stored dict plus its position (rows have no identity of their own). */\ninterface GridRow {\n index: number;\n row: Record<string, unknown>;\n}\n\n/**\n * Records editor of `mm-entity-form` for RECORD and RECORD_ARRAY attributes.\n *\n * - **Value:** `Record<string, unknown>[]`, one flat camelCase dict per record\n * (`{ key: 'a', order: 1 }`, the write shape of the value mapper). A single RECORD uses an array\n * of at most one entry (`single = true`); `[]` means \"no record\".\n * - **Grid:** add / edit / move up / move down / remove. Edit and add open\n * `EntityFormRecordRowDialogComponent`, whose fields come from `EntityFormService.getCkRecord()`.\n * - **Limits:** `single` disables \"add\" once one row exists. Nested RECORD / RECORD_ARRAY sub-fields\n * are read-only in the row dialog and their values are passed through unchanged.\n */\n@Component({\n selector: 'mm-entity-form-records-field',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [GridModule, ButtonsModule],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EntityFormRecordsFieldComponent), multi: true }\n ],\n template: `\n <div class=\"mm-efrec\">\n @if (!isDisabled()) {\n <div class=\"mm-efrec-toolbar\">\n <button kendoButton type=\"button\" size=\"small\" [svgIcon]=\"icons.plus\" class=\"mm-efrec-add\"\n [disabled]=\"!canAdd()\" (click)=\"addRow()\">{{ msg().add }}</button>\n </div>\n }\n <kendo-grid [data]=\"gridRows()\" [sortable]=\"false\" [pageable]=\"false\" [scrollable]=\"'none'\" class=\"mm-efrec-grid\">\n @for (column of effectiveColumns(); track column.path) {\n <kendo-grid-column [title]=\"column.label\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <span class=\"mm-efrec-cell\">{{ cellText(dataItem.row, column.path) }}</span>\n </ng-template>\n </kendo-grid-column>\n }\n <kendo-grid-column [title]=\"msg().columnActions\" [width]=\"isDisabled() ? 60 : 170\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <div class=\"mm-efrec-actions\">\n @if (isDisabled()) {\n <button kendoButton type=\"button\" fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.view\"\n [title]=\"msg().viewTitle\" [attr.aria-label]=\"msg().viewTitle + ' ' + rowLabel(dataItem.index)\" (click)=\"editRow(dataItem.index)\"></button>\n } @else {\n <button kendoButton type=\"button\" fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.edit\" class=\"mm-efrec-edit\"\n [title]=\"msg().edit\" [attr.aria-label]=\"msg().edit + ' ' + rowLabel(dataItem.index)\" (click)=\"editRow(dataItem.index)\"></button>\n <button kendoButton type=\"button\" fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.up\" class=\"mm-efrec-up\"\n [title]=\"msg().moveUp\" [attr.aria-label]=\"msg().moveUp + ' ' + rowLabel(dataItem.index)\" [disabled]=\"dataItem.index === 0\"\n (click)=\"moveUp(dataItem.index)\"></button>\n <button kendoButton type=\"button\" fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.down\" class=\"mm-efrec-down\"\n [title]=\"msg().moveDown\" [attr.aria-label]=\"msg().moveDown + ' ' + rowLabel(dataItem.index)\" [disabled]=\"dataItem.index === rows().length - 1\"\n (click)=\"moveDown(dataItem.index)\"></button>\n <button kendoButton type=\"button\" fillMode=\"flat\" size=\"small\" themeColor=\"error\" [svgIcon]=\"icons.remove\" class=\"mm-efrec-remove\"\n [title]=\"msg().remove\" [attr.aria-label]=\"msg().remove + ' ' + rowLabel(dataItem.index)\" (click)=\"removeRow(dataItem.index)\"></button>\n }\n </div>\n </ng-template>\n </kendo-grid-column>\n <ng-template kendoGridNoRecordsTemplate>\n <span class=\"mm-efrec-empty\">{{ msg().emptyRecords }}</span>\n </ng-template>\n </kendo-grid>\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; }\n .mm-efrec { display: flex; flex-direction: column; gap: 6px; }\n .mm-efrec-toolbar { display: flex; justify-content: flex-end; }\n .mm-efrec-actions { display: flex; gap: 2px; justify-content: flex-end; }\n .mm-efrec-cell { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; }\n .mm-efrec-empty { color: var(--theme-text-secondary); font-style: italic; }\n `]\n})\nexport class EntityFormRecordsFieldComponent implements ControlValueAccessor {\n private readonly entityFormService = inject(EntityFormService);\n private readonly dialogService = inject(DialogService);\n private readonly locale = inject(LOCALE_ID);\n\n readonly ckRecordId = input.required<string>();\n readonly columns = input<EntityFormRecordColumn[] | null | undefined>([]);\n readonly single = input(false);\n readonly readOnly = input(false);\n readonly messages = input<Partial<EntityFormsMessages>>({});\n /** No key ring (Q17): SECRET members cannot get a new value in the row editor (badge + hint only). */\n readonly secretWritesDisabled = input(false);\n\n protected readonly icons = {\n plus: MM_ACTION_ICONS.add, edit: MM_ACTION_ICONS.edit, up: arrowUpIcon, down: arrowDownIcon,\n remove: MM_ACTION_ICONS.delete, view: MM_ACTION_ICONS.view,\n };\n\n /** Row name in the accessible names of the row buttons (\"Remove row 2\", AB#5579). */\n protected rowLabel(index: number): string {\n const m = this.msg();\n return formatEntityFormsMessage(m.recordRowLabel ?? DEFAULT_ENTITY_FORMS_MESSAGES.recordRowLabel!, { index: index + 1 });\n }\n protected readonly msg = computed(() => mergeEntityFormsMessages(this.messages()));\n\n protected readonly rows = signal<Record<string, unknown>[]>([]);\n private readonly disabledByForm = signal(false);\n protected readonly isDisabled = computed(() => this.readOnly() || this.disabledByForm());\n /** CK metadata of the record, loaded per `ckRecordId`; `null` until loaded or when unknown. */\n readonly record = signal<CkRecordInfo | null>(null);\n\n protected readonly gridRows = computed<GridRow[]>(() => this.rows().map((row, index) => ({ index, row })));\n readonly canAdd = computed(() => !this.isDisabled() && (!this.single() || this.rows().length === 0));\n\n /** Configured columns, or the first record attributes when the form lists none. */\n readonly effectiveColumns = computed<EntityFormRecordColumn[]>(() => {\n const configured = this.columns() ?? [];\n if (configured.length > 0) {\n return configured;\n }\n return (this.record()?.attributes ?? [])\n .slice(0, DERIVED_COLUMN_COUNT)\n .map(a => ({ path: a.attributeName, label: humanizeAttributeName(a.attributeName) }));\n });\n\n private readonly enumOptionsByAttribute = computed(() => {\n const result = new Map<string, { key: number; name: string }[]>();\n for (const field of buildRecordFieldModels(this.record()?.attributes ?? [])) {\n if (field.enumOptions) {\n result.set(field.attributeName.toLowerCase(), field.enumOptions);\n }\n }\n return result;\n });\n\n /** Lower-cased names of SECRET members: their cells show the badge text, never a value. */\n private readonly secretAttributes = computed(() => new Set(\n buildRecordFieldModels(this.record()?.attributes ?? []).filter(f => f.editor === 'secret').map(f => f.attributeName.toLowerCase())));\n\n private onChange: (value: Record<string, unknown>[]) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n private recordRequest = 0;\n\n constructor() {\n effect(() => {\n const id = this.ckRecordId();\n void this.loadRecord(id);\n });\n }\n\n /** Current value (a shallow copy). */\n getValue(): Record<string, unknown>[] {\n return this.rows().map(r => ({ ...r }));\n }\n\n writeValue(value: Record<string, unknown>[] | Record<string, unknown> | null | undefined): void {\n if (Array.isArray(value)) {\n this.rows.set(value.filter(r => r !== null && typeof r === 'object').map(r => ({ ...r })));\n } else if (value && typeof value === 'object') {\n // Tolerate a bare dict for a single RECORD.\n this.rows.set([{ ...value }]);\n } else {\n this.rows.set([]);\n }\n }\n\n registerOnChange(fn: (value: Record<string, unknown>[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledByForm.set(isDisabled);\n }\n\n protected cellText(row: Record<string, unknown>, path: string): string {\n const key = Object.keys(row).find(k => k.toLowerCase() === path.toLowerCase()) ?? path;\n if (this.secretAttributes().has(path.toLowerCase())) {\n const m = this.msg();\n return formatRecordSecretCell(row[key], secretStatusLabelsOf(m), m.secretRecordMemberNewValue,\n (date) => formatDate(date, 'medium', this.locale));\n }\n return formatRecordCell(row[key], this.enumOptionsByAttribute().get(path.toLowerCase()));\n }\n\n /** Opens the row dialog for a new row and appends the result. No-op when the limit is reached. */\n async addRow(): Promise<void> {\n if (!this.canAdd()) {\n return;\n }\n const row = await this.openRowDialog(null);\n if (row && this.canAdd()) {\n this.commit([...this.rows(), row]);\n }\n }\n\n /** Opens the row dialog for an existing row; in read-only mode the dialog only displays it. */\n async editRow(index: number): Promise<void> {\n const current = this.rows()[index];\n if (!current) {\n return;\n }\n const row = await this.openRowDialog(current);\n if (row && !this.isDisabled()) {\n const next = [...this.rows()];\n next[index] = row;\n this.commit(next);\n }\n }\n\n removeRow(index: number): void {\n if (this.isDisabled() || index < 0 || index >= this.rows().length) {\n return;\n }\n this.commit(this.rows().filter((_, i) => i !== index));\n }\n\n moveUp(index: number): void {\n this.swap(index, index - 1);\n }\n\n moveDown(index: number): void {\n this.swap(index, index + 1);\n }\n\n /**\n * Opens `EntityFormRecordRowDialogComponent` and resolves with the edited row, or `undefined` when\n * cancelled. Protected seam so specs can stub the dialog.\n */\n protected async openRowDialog(row: Record<string, unknown> | null): Promise<Record<string, unknown> | undefined> {\n const record = this.record() ?? await this.loadRecord(this.ckRecordId());\n const m = this.msg();\n const dialogRef = this.dialogService.open({\n content: EntityFormRecordRowDialogComponent,\n title: row ? (this.isDisabled() ? m.viewTitle : m.recordRowDialogTitleEdit) : m.recordRowDialogTitleAdd,\n minWidth: 420,\n maxWidth: '90vw',\n maxHeight: '90vh'\n });\n const content = dialogRef.content;\n if (content) {\n content.setInput('record', record ?? { ckRecordId: this.ckRecordId(), attributes: [] });\n content.setInput('row', row);\n content.setInput('readOnly', this.isDisabled());\n content.setInput('secretWritesDisabled', this.secretWritesDisabled());\n content.setInput('messages', this.messages());\n }\n const result = await firstValueFrom(dialogRef.result);\n if (result && typeof result === 'object' && !(result instanceof DialogCloseResult)) {\n return result as unknown as Record<string, unknown>;\n }\n return undefined;\n }\n\n private swap(from: number, to: number): void {\n const rows = this.rows();\n if (this.isDisabled() || from < 0 || to < 0 || from >= rows.length || to >= rows.length) {\n return;\n }\n const next = [...rows];\n [next[from], next[to]] = [next[to], next[from]];\n this.commit(next);\n }\n\n private commit(next: Record<string, unknown>[]): void {\n this.rows.set(next);\n this.onTouched();\n this.onChange(this.getValue());\n }\n\n private async loadRecord(ckRecordId: string): Promise<CkRecordInfo | null> {\n const request = ++this.recordRequest;\n if (!ckRecordId) {\n this.record.set(null);\n return null;\n }\n try {\n const info = (await this.entityFormService.getCkRecord(ckRecordId)) ?? null;\n if (request === this.recordRequest) {\n this.record.set(info);\n }\n return info;\n } catch (error) {\n console.warn(`[entity-forms] Record metadata for ${ckRecordId} could not be loaded.`, error);\n if (request === this.recordRequest) {\n this.record.set(null);\n }\n return null;\n }\n }\n}\n","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetReferenceOptionsWithAttributesQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n searchFilter?: Types.InputMaybe<Types.SearchFilterDto>;\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n sort?: Types.InputMaybe<Array<Types.InputMaybe<Types.SortDto>> | Types.InputMaybe<Types.SortDto>>;\n attributeNames: Array<Types.InputMaybe<Types.Scalars['String']['input']>> | Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type EntityFormGetReferenceOptionsWithAttributesQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean }, items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtDisplayName: string, rtDisplayDescription?: string | null, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetReferenceOptionsWithAttributesDocumentDto = gql`\n query entityFormGetReferenceOptionsWithAttributes($ckTypeId: String!, $first: Int, $after: String, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort], $attributeNames: [String]!) {\n runtime {\n runtimeEntities(\n ckId: $ckTypeId\n first: $first\n after: $after\n searchFilter: $searchFilter\n fieldFilter: $fieldFilters\n sortOrder: $sort\n ) {\n totalCount\n pageInfo {\n endCursor\n hasNextPage\n }\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtDisplayName\n rtDisplayDescription\n attributes(attributeNames: $attributeNames) {\n items {\n attributeName\n value\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetReferenceOptionsWithAttributesDtoGQL extends Apollo.Query<EntityFormGetReferenceOptionsWithAttributesQueryDto, EntityFormGetReferenceOptionsWithAttributesQueryVariablesDto> {\n document = EntityFormGetReferenceOptionsWithAttributesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { ChangeDetectionStrategy, Component, computed, effect, forwardRef, inject, input, signal, untracked, viewChild } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { EntitySelectInputComponent } from '@meshmakers/shared-ui';\nimport { EntityFormGetReferenceOptionsDtoGQL } from '../../graphQL/getEntityFormReferenceOptions';\nimport { EntityFormGetReferenceOptionsWithAttributesDtoGQL } from '../../graphQL/getEntityFormReferenceOptionsWithAttributes';\nimport { EntityFormsMessages, formatEntityFormsMessage, mergeEntityFormsMessages } from '../../entity-forms.messages';\nimport { EntityReferenceDataSource, EntityReferenceItem } from './entity-reference-data-source';\nimport type { CkAttributeInfo } from '../../models/entity-form.models';\n\n/** One selected reference target. The field value is always an array of these. */\nexport interface EntityFormReferenceValue {\n rtId: string;\n ckTypeId: string;\n displayName: string;\n}\n\nfunction toValue(item: EntityReferenceItem | EntityFormReferenceValue): EntityFormReferenceValue {\n return { rtId: item.rtId, ckTypeId: item.ckTypeId, displayName: item.displayName };\n}\n\n/**\n * Reference editor of `mm-entity-form` (association roles and rtId-holding STRING attributes).\n *\n * - **Value:** `EntityFormReferenceValue[]` (`{ rtId, ckTypeId, displayName }`), an array even for\n * single selection; `[]` when nothing is selected.\n * - **Limit:** with `multiple = false` a new pick replaces the current one, so the value never\n * grows beyond one entry; a written value with more entries is reported by the validator as\n * `{ maxItems: { max: 1, actual } }`. With `multiple = true` picks are appended, de-duplicated by\n * `rtId`.\n * - **Picker:** shared-ui `mm-entity-select-input` (typeahead plus grid dialog) over the\n * secret-safe {@link EntityReferenceDataSource}, which selects only the non-secret `name` attribute of the targets.\n * - **Display attributes:** with `displayAttributes` the picker rows and the current value read\n * `name · value1 · value2`, each value formatted by its CK value type (`displayAttributeInfo`):\n * enum names, yes/no, dates. The current value's label is looked up once per rtId; it only\n * changes what is shown, never the field value.\n */\n@Component({\n selector: 'mm-entity-form-reference-field',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ButtonsModule, EntitySelectInputComponent],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EntityFormReferenceFieldComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => EntityFormReferenceFieldComponent), multi: true }\n ],\n template: `\n <div class=\"mm-efref\" [class.mm-efref--disabled]=\"isDisabled()\">\n @if (value().length > 0) {\n <ul class=\"mm-efref-list\">\n @for (item of value(); track item.rtId) {\n <li class=\"mm-efref-item\" [attr.data-rtid]=\"item.rtId\">\n <span class=\"mm-efref-name\" [title]=\"labelOf(item) + ' (' + item.ckTypeId + ' · ' + item.rtId + ')'\">{{ labelOf(item) }}</span>\n @if (!isDisabled()) {\n <button kendoButton type=\"button\" fillMode=\"flat\" size=\"small\" class=\"mm-efref-remove\"\n [attr.aria-label]=\"msg().remove + ' ' + labelOf(item)\" [title]=\"msg().remove\"\n (click)=\"remove(item.rtId)\">×</button>\n }\n </li>\n }\n </ul>\n } @else if (isDisabled()) {\n <span class=\"mm-efref-empty\">{{ msg().emptyReferences }}</span>\n }\n @if (!isDisabled() && dataSource(); as ds) {\n <mm-entity-select-input\n class=\"mm-efref-input\"\n [dataSource]=\"ds\"\n [dialogDataSource]=\"ds\"\n [multiSelect]=\"multiple()\"\n [minSearchLength]=\"1\"\n [placeholder]=\"placeholder() || msg().referencePlaceholder\"\n [dialogTitle]=\"msg().select\"\n (entitySelected)=\"onPicked([$event])\"\n (entitiesSelected)=\"onPicked($event)\">\n </mm-entity-select-input>\n }\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; }\n .mm-efref { display: flex; flex-direction: column; gap: 6px; }\n .mm-efref-list { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; }\n .mm-efref-item {\n display: inline-flex; align-items: center; gap: 4px; padding: 2px 4px 2px 10px;\n border: 1px solid var(--theme-border-subtle); border-radius: 12px;\n background: var(--theme-bg-elevated); color: var(--theme-text-primary);\n }\n .mm-efref--disabled .mm-efref-item { padding-right: 10px; }\n .mm-efref-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 320px; }\n .mm-efref-remove { min-width: 0; padding: 0 4px; line-height: 1; }\n .mm-efref-empty { color: var(--theme-text-secondary); font-style: italic; }\n `]\n})\nexport class EntityFormReferenceFieldComponent implements ControlValueAccessor, Validator {\n private readonly gql = inject(EntityFormGetReferenceOptionsDtoGQL);\n private readonly attributesGql = inject(EntityFormGetReferenceOptionsWithAttributesDtoGQL);\n\n readonly targetCkTypeId = input.required<string>();\n readonly multiple = input(false);\n /** Non-secret target attributes shown next to the name (AB#5547). */\n readonly displayAttributes = input<readonly string[]>([]);\n /** CK metadata of the display attributes on the target type; formats their values (AB#5547). */\n readonly displayAttributeInfo = input<readonly CkAttributeInfo[]>([]);\n readonly placeholder = input<string | null | undefined>(undefined);\n readonly readOnly = input(false);\n readonly messages = input<Partial<EntityFormsMessages>>({});\n\n protected readonly msg = computed(() => mergeEntityFormsMessages(this.messages()));\n protected readonly value = signal<EntityFormReferenceValue[]>([]);\n private readonly disabledByForm = signal(false);\n protected readonly isDisabled = computed(() => this.readOnly() || this.disabledByForm());\n /** Labels with display attributes, by rtId (from picks and from lookups of the current value). */\n private readonly labels = signal<ReadonlyMap<string, string>>(new Map());\n private readonly requested = new Set<string>();\n\n /** One data source per target type. */\n readonly dataSource = computed(() => {\n const target = this.targetCkTypeId();\n if (!target) {\n return null;\n }\n const m = this.msg();\n return new EntityReferenceDataSource(this.gql, target, {\n name: m.columnName,\n wellKnownName: m.columnWellKnownName,\n type: m.columnType,\n rtId: m.copyRtId\n }, this.displayAttributes(), this.attributesGql, {\n attributes: this.displayAttributeInfo(),\n yes: m.toggleOn,\n no: m.toggleOff\n });\n });\n\n constructor() {\n // The current value comes with the plain name only; read the display attributes of its targets.\n effect(() => {\n const ds = this.dataSource();\n const ids = this.value().map(v => v.rtId);\n if (!ds || !ds.displayAttributes.length) {\n return;\n }\n untracked(() => this.lookupLabels(ds, ids));\n });\n }\n\n /** Label shown for a selected target: with display attributes when known, else its display name. */\n labelOf(item: EntityFormReferenceValue): string {\n return this.labels().get(item.rtId) ?? item.displayName;\n }\n\n private readonly selectInput = viewChild(EntitySelectInputComponent);\n private onChange: (value: EntityFormReferenceValue[]) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n private onValidatorChange: () => void = () => undefined;\n\n /** Current value (a copy). */\n getValue(): EntityFormReferenceValue[] {\n return [...this.value()];\n }\n\n writeValue(value: EntityFormReferenceValue[] | null | undefined): void {\n this.value.set(Array.isArray(value) ? value.filter(v => !!v?.rtId).map(toValue) : []);\n }\n\n registerOnChange(fn: (value: EntityFormReferenceValue[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledByForm.set(isDisabled);\n }\n\n validate(_control: AbstractControl): ValidationErrors | null {\n const count = this.value().length;\n if (!this.multiple() && count > 1) {\n return { maxItems: { max: 1, actual: count, message: formatEntityFormsMessage(this.msg().validationMaxItems, { max: 1 }) } };\n }\n return null;\n }\n\n /** Applies picked entities: replaces in single mode (first pick wins), appends unique in multi mode. */\n onPicked(items: (EntityReferenceItem | EntityFormReferenceValue)[] | null | undefined): void {\n const picked = (items ?? []).filter(i => !!i?.rtId).map(toValue);\n if (this.isDisabled() || picked.length === 0) {\n return;\n }\n if (this.displayAttributes().length) {\n // Picker rows already carry the display attributes in their label.\n this.labels.update(current => new Map([...current, ...picked.map(p => [p.rtId, p.displayName] as const)]));\n }\n let next: EntityFormReferenceValue[];\n if (this.multiple()) {\n const seen = new Set(this.value().map(v => v.rtId));\n next = [...this.value()];\n for (const item of picked) {\n if (!seen.has(item.rtId)) {\n seen.add(item.rtId);\n next.push(item);\n }\n }\n } else {\n next = [picked[0]];\n }\n this.commit(next);\n // The select input is only a picker; its own text is reset after every pick.\n this.selectInput()?.writeValue(null);\n }\n\n /** Removes one selected target. */\n remove(rtId: string): void {\n if (this.isDisabled()) {\n return;\n }\n this.commit(this.value().filter(v => v.rtId !== rtId));\n }\n\n private lookupLabels(ds: EntityReferenceDataSource, ids: string[]): void {\n const missing = ids.filter(id => !this.labels().has(id) && !this.requested.has(id));\n if (!missing.length) {\n return;\n }\n missing.forEach(id => this.requested.add(id));\n ds.lookup(missing).then(found => {\n if (found.size) {\n this.labels.update(current => new Map([...current, ...[...found.values()].map(i => [i.rtId, i.displayName] as const)]));\n }\n }).catch(() => {\n // Labels are cosmetic; the plain display name stays.\n });\n }\n\n private commit(next: EntityFormReferenceValue[]): void {\n const unchanged = next.length === this.value().length && next.every((v, i) => v.rtId === this.value()[i].rtId);\n this.onTouched();\n if (unchanged) {\n return;\n }\n this.value.set(next);\n this.onChange(this.getValue());\n this.onValidatorChange();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { KENDO_CHIP } from '@progress/kendo-angular-buttons';\nimport { KENDO_TEXTBOX } from '@progress/kendo-angular-inputs';\n\n/** Value shape of the chips editor: a flat array of strings or integers. */\nexport type EntityFormChipValue = string | number;\n\n/**\n * Editor for STRING_ARRAY / INT_ARRAY attributes: a text box that adds a chip on\n * Enter or comma, and removable chips for the current items.\n *\n * With `numeric` set, input that does not parse as an integer is rejected and the\n * stored items are numbers. Duplicates are ignored. Value: `(string|number)[]`\n * (never `null`; an empty array means \"no items\").\n */\n@Component({\n selector: 'mm-entity-form-chips-editor',\n standalone: true,\n imports: [KENDO_CHIP, KENDO_TEXTBOX],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EntityFormChipsEditorComponent),\n multi: true,\n },\n ],\n template: `\n <div class=\"mm-ef-chips\">\n @if (items().length > 0) {\n <div class=\"mm-ef-chips__list\">\n @for (item of items(); track $index) {\n <kendo-chip\n size=\"small\"\n [label]=\"'' + item\"\n [removable]=\"!disabled()\"\n [disabled]=\"disabled()\"\n (remove)=\"removeAt($index)\"\n ></kendo-chip>\n }\n </div>\n }\n @if (!disabled()) {\n <kendo-textbox\n class=\"mm-ef-chips__input\"\n [value]=\"draft()\"\n [placeholder]=\"placeholder() ?? ''\"\n (valueChange)=\"draft.set($event ?? '')\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"onBlur()\"\n ></kendo-textbox>\n @if (invalidDraft()) {\n <span class=\"mm-ef-chips__hint\">{{ invalidMessage() }}</span>\n }\n }\n @if (disabled() && items().length === 0) {\n <span class=\"mm-ef-chips__empty\">—</span>\n }\n </div>\n `,\n styles: [`\n .mm-ef-chips { display: flex; flex-direction: column; gap: 6px; }\n .mm-ef-chips__list { display: flex; flex-wrap: wrap; gap: 4px; }\n .mm-ef-chips__hint { font-size: 12px; color: var(--theme-status-error); }\n .mm-ef-chips__empty { color: var(--theme-text-muted); }\n `],\n})\nexport class EntityFormChipsEditorComponent implements ControlValueAccessor {\n /** Store integers instead of strings (INT_ARRAY / INTEGER_ARRAY). */\n readonly numeric = input(false);\n readonly placeholder = input<string | null | undefined>(undefined);\n /** Shown below the input when a non-integer is entered in numeric mode. */\n readonly invalidMessage = input('Enter a whole number.');\n\n protected readonly items = signal<EntityFormChipValue[]>([]);\n protected readonly draft = signal('');\n protected readonly invalidDraft = signal(false);\n protected readonly disabled = signal(false);\n\n private onChange: (value: EntityFormChipValue[]) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n writeValue(value: unknown): void {\n this.items.set(Array.isArray(value) ? [...(value as EntityFormChipValue[])] : []);\n this.draft.set('');\n this.invalidDraft.set(false);\n }\n\n registerOnChange(fn: (value: EntityFormChipValue[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /** Adds the current draft (may contain several comma separated items). Returns true when something was consumed. */\n commitDraft(): boolean {\n const raw = this.draft().trim();\n if (!raw) {\n this.invalidDraft.set(false);\n return false;\n }\n const parts = raw.split(',').map((p) => p.trim()).filter((p) => p.length > 0);\n const parsed: EntityFormChipValue[] = [];\n for (const part of parts) {\n if (this.numeric()) {\n if (!/^[-+]?\\d+$/.test(part)) {\n this.invalidDraft.set(true);\n return false;\n }\n parsed.push(parseInt(part, 10));\n } else {\n parsed.push(part);\n }\n }\n const next = [...this.items()];\n for (const p of parsed) {\n if (!next.includes(p)) {\n next.push(p);\n }\n }\n this.invalidDraft.set(false);\n this.draft.set('');\n this.emit(next);\n return true;\n }\n\n removeAt(index: number): void {\n const next = this.items().filter((_, i) => i !== index);\n this.emit(next);\n this.onTouched();\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ',') {\n event.preventDefault();\n this.commitDraft();\n } else if (event.key === 'Backspace' && this.draft() === '' && this.items().length > 0) {\n this.removeAt(this.items().length - 1);\n }\n }\n\n protected onBlur(): void {\n this.commitDraft();\n this.onTouched();\n }\n\n private emit(next: EntityFormChipValue[]): void {\n this.items.set(next);\n this.onChange(next);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, input, output, signal } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { KENDO_BUTTON } from '@progress/kendo-angular-buttons';\nimport { KENDO_TEXTAREA, KENDO_TEXTBOX } from '@progress/kendo-angular-inputs';\nimport { EntityFormsMessages, formatEntityFormsMessage } from '../../entity-forms.messages';\n\n/**\n * Editor of a write-only secret field (AB#5542, AB#5544 item 4, decisions 2026-10-06 Q8/Q10/Q15/Q17).\n *\n * - The stored value is never shown or prefilled; the status badge lives in the field shell.\n * - \"Show\" reveals only the value the user typed in this session (never a stored value); it is\n * disabled while the input is empty and resets when the input is emptied.\n * - \"Clear\" stages removing an optional secret; the parent sends it on Save as\n * `clearSecretAttributes`. Clear and a new value are mutually exclusive: Clear is disabled while a\n * value is typed, and the input is replaced by a note with \"Undo\" while a clear is staged.\n * - `multiline` renders a monospace text area (PEM keys, `EntityFormField.Editor: multiline`). It is\n * masked by rendering the text transparent (caret, selection and placeholder stay visible) and a\n * status line says how many lines were entered. This works in every browser — unlike\n * `-webkit-text-security`, which Firefox does not reliably support and which cannot keep line\n * breaks visible; an `<input type=\"password\">` would drop the PEM line breaks.\n * - The placeholder is also the input's tooltip, so it stays readable when a narrow panel (Data\n * Explorer peek) truncates it.\n * - Read-only users get no editor at all (the badge is enough); without a key ring the input is\n * disabled and a hint explains why (`writesDisabled`, the parent disables the control).\n */\n@Component({\n selector: 'mm-entity-form-secret-editor',\n standalone: true,\n imports: [ReactiveFormsModule, KENDO_TEXTBOX, KENDO_TEXTAREA, KENDO_BUTTON],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'mm-ef-secret' },\n template: `\n @if (!readOnly()) {\n @if (clearStaged()) {\n <div class=\"mm-ef-secret__staged\" data-secret-clear-staged>\n <span>{{ messages().secretClearStagedNote }}</span>\n <button kendoButton type=\"button\" size=\"small\" fillMode=\"flat\" data-secret-undo (click)=\"clearStagedChange.emit(false)\">\n {{ messages().secretUndoClear }}\n </button>\n </div>\n } @else {\n <div class=\"mm-ef-secret__row\">\n @if (multiline()) {\n <kendo-textarea\n class=\"mm-ef-mono mm-ef-secret__input\"\n [class.mm-ef-secret__input--masked]=\"!revealed()\"\n [formControl]=\"control()\"\n [rows]=\"6\"\n resizable=\"vertical\"\n [placeholder]=\"placeholder()\"\n [inputAttributes]=\"{ autocomplete: 'off', autocorrect: 'off', autocapitalize: 'off', spellcheck: 'false', 'data-secret-input': 'multiline' }\"\n [attr.title]=\"placeholder() || null\"\n ></kendo-textarea>\n } @else {\n <kendo-textbox\n class=\"mm-ef-secret__input\"\n [formControl]=\"control()\"\n [type]=\"revealed() ? 'text' : 'password'\"\n [placeholder]=\"placeholder()\"\n [inputAttributes]=\"{ autocomplete: 'new-password', spellcheck: 'false', 'data-secret-input': 'single' }\"\n [attr.title]=\"placeholder() || null\"\n ></kendo-textbox>\n }\n <button\n kendoButton\n type=\"button\"\n size=\"small\"\n fillMode=\"flat\"\n data-secret-show\n [disabled]=\"!hasTypedValue()\"\n [attr.aria-pressed]=\"revealed()\"\n (click)=\"shown.set(!shown())\"\n >{{ revealed() ? messages().secretHide : messages().secretShow }}</button>\n @if (canClear()) {\n <button\n kendoButton\n type=\"button\"\n size=\"small\"\n fillMode=\"flat\"\n data-secret-clear\n [disabled]=\"hasTypedValue() || writesDisabled()\"\n (click)=\"clearStagedChange.emit(true)\"\n >{{ messages().secretClear }}</button>\n }\n </div>\n }\n @if (multiline() && !clearStaged() && hasTypedValue() && !revealed()) {\n <div class=\"mm-ef-secret__masked\" data-secret-masked-status>{{ maskedStatus() }}</div>\n }\n @if (writesDisabled()) {\n <div class=\"mm-ef-secret__hint\" data-secret-writes-disabled>{{ messages().secretWritesDisabled }}</div>\n }\n }\n `,\n})\nexport class EntityFormSecretEditorComponent {\n readonly control = input.required<FormControl<unknown>>();\n readonly messages = input.required<EntityFormsMessages>();\n readonly placeholder = input('');\n readonly multiline = input(false);\n readonly readOnly = input(false);\n /** Offer \"Clear\": optional SECRET with a stored value, edit mode, write access. */\n readonly canClear = input(false);\n readonly clearStaged = input(false);\n /** No key ring (Q17): the input is disabled by the parent; this shows the hint. */\n readonly writesDisabled = input(false);\n /** Change counter of the parent form, read so `hasTypedValue` follows the control value. */\n readonly revision = input(0);\n\n readonly clearStagedChange = output<boolean>();\n\n /** The user asked to reveal the typed value. */\n protected readonly shown = signal(false);\n\n protected readonly hasTypedValue = computed(() => {\n this.revision();\n const v = this.control().value;\n return typeof v === 'string' && v.length > 0;\n });\n\n /** Only a typed value can be revealed; emptying the input masks it again. */\n protected readonly revealed = computed(() => this.shown() && this.hasTypedValue());\n\n /** Status line of a masked multiline value: the number of lines, never the content. */\n protected readonly maskedStatus = computed(() => {\n this.revision();\n const v = this.control().value;\n const lines = typeof v === 'string' && v.length > 0 ? v.split(/\\r\\n|\\r|\\n/).length : 0;\n return formatEntityFormsMessage(this.messages().secretMultilineMasked, { lines });\n });\n\n constructor() {\n effect(() => {\n if (!this.hasTypedValue()) {\n this.shown.set(false);\n }\n });\n }\n}\n","import {\n AbstractControl,\n FormControl,\n FormGroup,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {\n EntityFormEditor,\n EntityFormMode,\n EntityFormValueState,\n ResolvedEntityForm,\n ResolvedField,\n} from '../models/entity-form.models';\n\n/** Editors whose value is free text (the `pattern` validator applies to these). */\nconst TEXT_LIKE_EDITORS: readonly EntityFormEditor[] = [\n 'text', 'multiline', 'password', 'url', 'email', 'json', 'yaml', 'cron',\n];\n\n/** Options of {@link buildFormGroup}. */\nexport interface EntityFormGroupOptions {\n /** Loaded values (edit / view). Absent in create mode unless the host prefills (singleton). */\n state?: EntityFormValueState | null;\n /** Everything read-only (host `readOnly` input or `capabilities.canEdit === false` in edit mode). */\n readOnly?: boolean;\n}\n\n/** All fields of a resolved form in section order. */\nexport function allFields(model: ResolvedEntityForm): ResolvedField[] {\n return model.sections.flatMap((s) => s.fields);\n}\n\n/** True when a field is a text-like editor. */\nexport function isTextLikeEditor(editor: EntityFormEditor): boolean {\n return TEXT_LIKE_EDITORS.includes(editor);\n}\n\n/**\n * True when the whole form is read-only: `view` mode, the host `readOnly` input, or an edit\n * form whose definition says `canEdit: false`.\n */\nexport function isFormReadOnly(model: ResolvedEntityForm, mode: EntityFormMode, readOnly: boolean): boolean {\n return readOnly || mode === 'view' || (mode === 'edit' && !model.capabilities.canEdit);\n}\n\n/**\n * Read-only rule of one field. `afterCreate` is editable only in create mode; `always` and the\n * `unsupported` editor are never editable.\n */\nexport function isFieldReadOnly(field: ResolvedField, mode: EntityFormMode, formReadOnly: boolean): boolean {\n if (formReadOnly || mode === 'view') {\n return true;\n }\n if (field.editor === 'unsupported' || field.readOnly === 'always') {\n return true;\n }\n return field.readOnly === 'afterCreate' && mode !== 'create';\n}\n\n/**\n * Whether a secret field is required right now: only on create, or when the server has no\n * value yet (D5.5). A set secret may be left empty (\"keep\").\n */\nexport function isSecretRequired(field: ResolvedField, mode: EntityFormMode, secretPresence: Record<string, boolean>): boolean {\n if (!field.required) {\n return false;\n }\n if (mode === 'create') {\n return true;\n }\n return !secretPresence[field.attributeName ?? field.key];\n}\n\n/** Empty form value of a field (never `undefined`). */\nexport function emptyValue(field: ResolvedField): unknown {\n switch (field.editor) {\n case 'toggle':\n return false;\n case 'chips':\n case 'reference':\n case 'records':\n return [];\n default:\n return null;\n }\n}\n\n/**\n * Initial form value of a field.\n * - Secrets are never prefilled (D5).\n * - Associations come from `state.associations` keyed by the field key (fallback: rtRoleId).\n * - In create mode a value from `state` (host prefill) wins over the field default.\n */\nexport function initialValue(field: ResolvedField, mode: EntityFormMode, state?: EntityFormValueState | null): unknown {\n if (field.secret) {\n return null;\n }\n let value: unknown;\n if (field.kind === 'association') {\n const role = field.reference?.role?.rtRoleId;\n value = state?.associations?.[field.key] ?? (role ? state?.associations?.[role] : undefined);\n value = Array.isArray(value) ? value.map((v) => ({ ...v })) : undefined;\n } else if (field.kind === 'system') {\n value = field.key === 'rtWellKnownName' ? state?.rtWellKnownName : state?.values?.[field.key];\n } else {\n value = state?.values?.[field.key];\n }\n if ((value === undefined || value === null) && mode === 'create' && field.defaultValue !== undefined) {\n value = field.defaultValue;\n }\n if (value === undefined || value === null) {\n return emptyValue(field);\n }\n return cloneValue(value);\n}\n\n/** Validator: value must parse as JSON (empty passes; `required` handles emptiness). */\nexport function jsonValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const v = control.value;\n if (v === null || v === undefined || (typeof v === 'string' && v.trim() === '')) {\n return null;\n }\n if (typeof v !== 'string') {\n return null;\n }\n try {\n JSON.parse(v);\n return null;\n } catch {\n return { json: true };\n }\n };\n}\n\n/** Validator: value must be an absolute URL with a scheme (`https://…`, `sftp://…`, `oci://…`). */\nexport function urlValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const v = control.value;\n if (v === null || v === undefined || (typeof v === 'string' && v.trim() === '')) {\n return null;\n }\n const s = String(v).trim();\n if (!/^[a-z][a-z0-9+.-]*:\\/\\/\\S+$/i.test(s)) {\n return { url: true };\n }\n try {\n new URL(s);\n return null;\n } catch {\n return { url: true };\n }\n };\n}\n\n/**\n * Validator for `pattern`. The expression is anchored like Angular's `Validators.pattern`; an\n * invalid expression is ignored (a broken form definition must not block saving).\n */\nexport function safePatternValidator(pattern: string): ValidatorFn | null {\n try {\n new RegExp(pattern);\n } catch {\n return null;\n }\n return Validators.pattern(pattern);\n}\n\n/** Validators of one field for the given mode. */\nexport function buildValidators(field: ResolvedField, mode: EntityFormMode, secretPresence: Record<string, boolean> = {}): ValidatorFn[] {\n const validators: ValidatorFn[] = [];\n const required = field.secret ? isSecretRequired(field, mode, secretPresence) : field.required;\n // A toggle always holds true/false, so \"required\" is trivially met.\n if (required && field.editor !== 'toggle') {\n validators.push(Validators.required);\n }\n if (field.editor === 'number') {\n if (typeof field.min === 'number') {\n validators.push(Validators.min(field.min));\n }\n if (typeof field.max === 'number') {\n validators.push(Validators.max(field.max));\n }\n }\n if (field.pattern && isTextLikeEditor(field.editor)) {\n const p = safePatternValidator(field.pattern);\n if (p) {\n validators.push(p);\n }\n }\n if (field.editor === 'email') {\n validators.push(Validators.email);\n }\n if (field.editor === 'url') {\n validators.push(urlValidator());\n }\n if (field.editor === 'json') {\n validators.push(jsonValidator());\n }\n return validators;\n}\n\n/**\n * Builds the reactive form group of a resolved form: one control per field, keyed by\n * `ResolvedField.key`. Read-only fields start disabled, so they never block validity and are\n * easy to tell apart from editable ones. Visibility (VisibleWhen) is applied afterwards by the\n * component, because it depends on live values.\n */\nexport function buildFormGroup(\n model: ResolvedEntityForm,\n mode: EntityFormMode,\n options: EntityFormGroupOptions = {},\n): FormGroup<Record<string, FormControl<unknown>>> {\n const state = options.state ?? null;\n const formReadOnly = isFormReadOnly(model, mode, options.readOnly ?? false);\n const secretPresence = state?.secretPresence ?? {};\n const controls: Record<string, FormControl<unknown>> = {};\n for (const field of allFields(model)) {\n if (controls[field.key]) {\n continue;\n }\n const disabled = isFieldReadOnly(field, mode, formReadOnly);\n controls[field.key] = new FormControl<unknown>(\n { value: initialValue(field, mode, state), disabled },\n { validators: buildValidators(field, mode, secretPresence) },\n );\n }\n return new FormGroup(controls);\n}\n\n/** Error message key of the first error of a control, in a stable priority order. */\nexport function firstErrorKey(errors: ValidationErrors | null | undefined): string | null {\n if (!errors) {\n return null;\n }\n const order = ['required', 'min', 'max', 'pattern', 'email', 'url', 'json'];\n return order.find((k) => k in errors) ?? Object.keys(errors)[0] ?? null;\n}\n\n/** Deep copy of plain form values (arrays, plain objects, Dates). */\nexport function cloneValue<T>(value: T): T {\n if (value instanceof Date) {\n return new Date(value.getTime()) as T;\n }\n if (Array.isArray(value)) {\n return value.map((v) => cloneValue(v)) as T;\n }\n if (value && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = cloneValue(v);\n }\n return out as T;\n }\n return value;\n}\n","import { formatDate } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, LOCALE_ID, computed, inject, input } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { formatSecretStatus } from '@meshmakers/octo-services';\nimport { EntityFormsMessages, formatEntityFormsMessage, secretStatusLabelsOf } from '../entity-forms.messages';\nimport { ResolvedField } from '../models/entity-form.models';\nimport { firstErrorKey } from './entity-form-controls';\n\n/**\n * Secret state shown next to a secret field (AB#5542 / AB#5544 item 4): set on the server, not set\n * (`needsReEntry` for a required SECRET — same wording as the secrets inventory),\n * stored but unreadable (`keyMissing`, re-entry needed), clear staged for the next save, or `null`\n * (not a secret, or create mode — then the plain \"Secret\" badge is shown).\n */\nexport type EntityFormSecretState = 'set' | 'notSet' | 'needsReEntry' | 'keyMissing' | 'clearStaged' | null;\n\n/**\n * Field shell of `mm-entity-form`: label (with required marker and secret badge), the projected\n * editor, help text and the first validation error. Purely presentational; the parent bumps\n * `revision` whenever the form's value, status or touched state changes so this OnPush shell\n * re-renders its error line.\n */\n@Component({\n selector: 'mm-entity-form-field',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mm-ef-field',\n '[class.mm-ef-field--full]': \"field().width === 'full'\",\n '[class.mm-ef-field--half]': \"field().width === 'half'\",\n '[class.mm-ef-field--invalid]': 'errorText() !== null',\n '[class.mm-ef-field--readonly]': 'readOnly()',\n '[attr.data-field-key]': 'field().key',\n },\n template: `\n <div class=\"mm-ef-field__label-row\">\n <label class=\"mm-ef-field__label\">\n {{ field().label }}\n @if (showRequired()) {\n <span class=\"mm-ef-field__required\" aria-hidden=\"true\">*</span>\n }\n </label>\n @if (field().secret) {\n <span\n class=\"mm-ef-field__badge\"\n [class.mm-ef-field__badge--set]=\"secretState() === 'set'\"\n [class.mm-ef-field__badge--not-set]=\"secretState() === 'notSet' || secretState() === 'needsReEntry'\"\n [class.mm-ef-field__badge--key-missing]=\"secretState() === 'keyMissing'\"\n [class.mm-ef-field__badge--clear-staged]=\"secretState() === 'clearStaged'\"\n [attr.data-secret-state]=\"secretState()\"\n [attr.title]=\"messages().secretHelp\"\n >{{ secretBadgeText() }}</span>\n }\n </div>\n <div class=\"mm-ef-field__editor\">\n <ng-content></ng-content>\n </div>\n @if (errorText(); as err) {\n <div class=\"mm-ef-field__error\" role=\"alert\">{{ err }}</div>\n } @else if (field().help) {\n <div class=\"mm-ef-field__help\">{{ field().help }}</div>\n }\n `,\n})\nexport class EntityFormFieldComponent {\n readonly field = input.required<ResolvedField>();\n readonly control = input<AbstractControl | null>(null);\n readonly messages = input.required<EntityFormsMessages>();\n readonly secretState = input<EntityFormSecretState>(null);\n /** When the current secret value was set (badge \"Set · set at …\"); null for legacy values. */\n readonly secretSetAt = input<Date | null>(null);\n readonly readOnly = input(false);\n /** Whether the field is required in the current mode (secrets: only when not set). */\n readonly required = input(false);\n /** Change counter from the parent form; read so `errorText` recomputes on every form event. */\n readonly revision = input(0);\n\n private readonly locale = inject(LOCALE_ID);\n\n protected readonly showRequired = computed(() => this.required() && !this.readOnly());\n\n /**\n * Badge text: visible to read-only users too (Q15). Set / not set / key missing use the shared\n * octo-services `formatSecretStatus` (one wording everywhere; labels from the messages).\n */\n protected readonly secretBadgeText = computed(() => {\n const m = this.messages();\n const state = this.secretState();\n switch (state) {\n case 'set':\n case 'notSet':\n case 'keyMissing':\n return formatSecretStatus(\n { isSet: state === 'set', keyMissing: state === 'keyMissing', setAt: state === 'set' ? this.secretSetAt() : null },\n (date) => formatDate(date, 'medium', this.locale),\n secretStatusLabelsOf(m),\n );\n case 'needsReEntry':\n return m.secretStatusNeedsReEntry;\n case 'clearStaged':\n return m.secretStatusClearStaged;\n default:\n return m.secretBadge;\n }\n });\n\n protected readonly errorText = computed<string | null>(() => {\n this.revision();\n const control = this.control();\n if (!control || control.disabled || !control.invalid || !(control.touched || control.dirty)) {\n return null;\n }\n const key = firstErrorKey(control.errors);\n const m = this.messages();\n const f = this.field();\n switch (key) {\n case null:\n return null;\n case 'required':\n return m.validationRequired;\n case 'min':\n return formatEntityFormsMessage(m.validationMin, { min: f.min ?? '' });\n case 'max':\n return formatEntityFormsMessage(m.validationMax, { max: f.max ?? '' });\n case 'pattern':\n return formatEntityFormsMessage(m.validationPattern, { pattern: f.pattern ?? '' });\n case 'email':\n return m.validationEmail;\n case 'url':\n return m.validationUrl;\n case 'json':\n return m.validationJson;\n default:\n return m.formInvalid;\n }\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { CronBuilderComponent } from '@meshmakers/shared-ui';\nimport { KENDO_SVGICON } from '@progress/kendo-angular-icons';\nimport { KENDO_DATETIMEPICKER } from '@progress/kendo-angular-dateinputs';\nimport { KENDO_DROPDOWNLIST } from '@progress/kendo-angular-dropdowns';\nimport {\n KENDO_NUMERICTEXTBOX,\n KENDO_SWITCH,\n KENDO_TEXTAREA,\n KENDO_TEXTBOX,\n} from '@progress/kendo-angular-inputs';\nimport { chevronDownIcon, chevronRightIcon } from '@progress/kendo-svg-icons';\nimport { isSecretValueType } from '@meshmakers/octo-services';\nimport { Subscription } from 'rxjs';\nimport { ENTITY_FORM_SECRET_KEY_RING_CONFIGURED } from '../core/secret-write-availability';\nimport {\n ENTITY_FORM_UNSET_PLACEHOLDER_VALUES,\n entityFormUnsetPlaceholderFields,\n entityFormUnsetPlaceholderLookup,\n} from '../core/unset-placeholders';\nimport { buildChangeSet } from '../core/change-set-builder';\nimport { formValuesEqual } from '../core/entity-form-value-mapper';\nimport { isVisible } from '../core/visible-when';\nimport { ENTITY_FORM_LABEL_RESOLVER, EntityFormLabelResolver, localizeEntityForm } from '../core/entity-form-labels';\nimport {\n ENTITY_FORM_BEFORE_SAVE,\n EntityFormBeforeSaveHook,\n EntityFormBeforeSaveOutcome,\n runEntityFormBeforeSave,\n} from '../core/before-save';\nimport {\n canonicaliseEntityFormPrefill,\n entityFormPrefillField,\n EntityFormPrefillValues,\n mergeEntityFormPrefill,\n toReferenceValue,\n} from '../core/entity-form-prefill';\nimport {\n DEFAULT_ENTITY_FORMS_MESSAGES,\n EntityFormsMessages,\n formatEntityFormsMessage,\n mergeEntityFormsMessages,\n} from '../entity-forms.messages';\nimport {\n CkAttributeInfo,\n CkRecordInfo,\n EntityFormChangeSet,\n EntityFormMode,\n EntityFormValueState,\n ResolvedEntityForm,\n ResolvedField,\n ResolvedSection,\n} from '../models/entity-form.models';\nimport { EntityFormRecordsFieldComponent } from './records/entity-form-records-field.component';\nimport { EntityFormReferenceFieldComponent } from './reference/entity-form-reference-field.component';\nimport { EntityFormChipsEditorComponent } from './editors/entity-form-chips-editor.component';\nimport { EntityFormSecretEditorComponent } from './editors/entity-form-secret-editor.component';\nimport {\n allFields,\n buildFormGroup,\n cloneValue,\n emptyValue,\n isFieldReadOnly,\n isFormReadOnly,\n isSecretRequired,\n} from './entity-form-controls';\nimport { EntityFormFieldComponent, EntityFormSecretState } from './entity-form-field.component';\n\n/** Integer value types: the number editor uses 0 decimals for these. */\nconst INTEGER_TYPES = ['INT', 'INTEGER', 'INT_64', 'INTEGER_64'];\n\n/**\n * Renders a {@link ResolvedEntityForm} as a reactive form: sections (1 or 2 columns,\n * collapsible), one field shell per field and the editor chosen by the resolver.\n *\n * Rules applied here (see the plan, §2.4):\n * - A field hidden by `VisibleWhen` has its control disabled, so it neither validates nor appears\n * in the change set. `Path=*` on a secret source counts the server-side presence as a value.\n * - Secrets are never prefilled; the badge says whether a value is set (also for read-only users).\n * Empty = unchanged. An optional SECRET can be cleared: the clear is staged and sent on Save as\n * `clearSecretAttributes` (mutually exclusive with a new value). Without a key ring\n * (`ENTITY_FORM_SECRET_KEY_RING_CONFIGURED` = false) secret inputs are disabled with a hint; the\n * signal may change at any time (status loaded asynchronously) and the controls follow it. In\n * create mode a required secret that cannot be entered blocks the form: `isValid()` is false and\n * `saveBlockedReason()` names the fields, so hosts disable Create with that reason (Q17: no late\n * `SecretEncryptionNotConfigured` / \"required secret missing\" error on save).\n * - `afterCreate` fields are read-only outside create mode; `readOnly`, `view` mode or\n * `capabilities.canEdit === false` (edit mode) make every field read-only.\n * - The change set holds only dirty controls (D6), built by `buildChangeSet`.\n * - Texts (labels, help, sections, enum options, record columns) go through the label resolver\n * (`labelResolver` input or `ENTITY_FORM_LABEL_RESOLVER`, AB#5623); a language change re-renders\n * the texts without rebuilding the controls.\n * - Host prefill (AB#5623): `initialValues` in create mode, `patchValues()` at any time.\n * - Before-save hook (AB#5623): `beforeSave` input / `ENTITY_FORM_BEFORE_SAVE`, applied by\n * {@link getChangeSetForSave}; secrets reach it only as values typed into this form.\n * - Unset placeholders (AB#5623, `ENTITY_FORM_UNSET_PLACEHOLDER_VALUES`): a non-secret field whose\n * stored / default / prefilled value is a listed placeholder starts empty with the\n * `notConfigured` hint; untouched it is not part of the change set, so the placeholder is never\n * written back. Secrets are never affected.\n */\n@Component({\n selector: 'mm-entity-form',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n KENDO_TEXTBOX,\n KENDO_TEXTAREA,\n KENDO_NUMERICTEXTBOX,\n KENDO_SWITCH,\n KENDO_DROPDOWNLIST,\n KENDO_DATETIMEPICKER,\n KENDO_SVGICON,\n CronBuilderComponent,\n EntityFormFieldComponent,\n EntityFormChipsEditorComponent,\n EntityFormSecretEditorComponent,\n EntityFormReferenceFieldComponent,\n EntityFormRecordsFieldComponent,\n ],\n templateUrl: './entity-form.component.html',\n styleUrl: './entity-form.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EntityFormComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly keyRingConfigured = inject(ENTITY_FORM_SECRET_KEY_RING_CONFIGURED, { optional: true });\n private readonly injectedLabelResolver = inject(ENTITY_FORM_LABEL_RESOLVER, { optional: true });\n private readonly injectedBeforeSave = inject(ENTITY_FORM_BEFORE_SAVE, { optional: true });\n private readonly unsetPlaceholders = entityFormUnsetPlaceholderLookup(inject(ENTITY_FORM_UNSET_PLACEHOLDER_VALUES, { optional: true }));\n\n // --- Inputs ---\n readonly model = input.required<ResolvedEntityForm>();\n readonly mode = input<EntityFormMode>('create');\n readonly state = input<EntityFormValueState | null | undefined>(undefined);\n readonly readOnly = input(false);\n readonly messages = input<Partial<EntityFormsMessages>>({});\n /** Record metadata keyed by versioned ckRecordId; improves type conversion of record sub-values. */\n readonly records = input<Record<string, CkRecordInfo>>({});\n /**\n * Translates field labels, help texts, section titles, enum option texts and record columns\n * (AB#5623). Wins over `ENTITY_FORM_LABEL_RESOLVER`; absent = the definition / CK texts.\n */\n readonly labelResolver = input<EntityFormLabelResolver | null | undefined>(undefined);\n /**\n * Host prefill of a create form (AB#5623), keyed by field key / attribute name (any casing).\n * Wins over the field defaults and over `state.values`; secrets are never prefilled. The values\n * are the starting point of the form (not \"dirty\"); a create sends every non-empty value anyway.\n * Ignored in edit / view mode — use {@link patchValues} there.\n */\n readonly initialValues = input<EntityFormPrefillValues | null | undefined>(undefined);\n /**\n * Hook run by {@link getChangeSetForSave} (AB#5623): may modify the change set or veto the save.\n * Wins over `ENTITY_FORM_BEFORE_SAVE`. `mm-entity-page` runs its own (input > route data >\n * token), so set it there when the page saves. See `EntityFormBeforeSaveHook`.\n */\n readonly beforeSave = input<EntityFormBeforeSaveHook | null | undefined>(undefined);\n\n // --- Outputs ---\n readonly changeSetChange = output<EntityFormChangeSet>();\n readonly validChange = output<boolean>();\n readonly dirtyChange = output<boolean>();\n\n // --- Icons (node_modules imports are safe as field initialisers) ---\n protected readonly chevronDownIcon = chevronDownIcon;\n protected readonly chevronRightIcon = chevronRightIcon;\n /** Stable empty list for reference fields without display attributes. */\n protected readonly noDisplayAttributes: readonly string[] = [];\n protected readonly noDisplayAttributeInfo: readonly CkAttributeInfo[] = [];\n\n // --- State ---\n protected readonly resolvedMessages = computed(() => mergeEntityFormsMessages(this.messages()));\n /** The effective label resolver (input, else the injected one, else none). */\n private readonly effectiveLabelResolver = computed(() => this.labelResolver() ?? this.injectedLabelResolver ?? null);\n /**\n * The model as rendered: every text passed through the label resolver (AB#5623). Keys are\n * unchanged, so the controls built from {@link model} match it.\n */\n protected readonly view = computed(() => localizeEntityForm(this.model(), this.effectiveLabelResolver()));\n protected readonly form = signal<FormGroup<Record<string, FormControl<unknown>>>>(new FormGroup({}));\n /** Bumped on every form event so OnPush children re-evaluate errors. */\n protected readonly revision = signal(0);\n /** Raw values (disabled controls included) for VisibleWhen evaluation. */\n private readonly rawValues = signal<Record<string, unknown>>({});\n private readonly collapsed = signal<ReadonlySet<string>>(new Set<string>());\n /** Keys of the fields whose stored value was an unset placeholder (AB#5623); they start empty. */\n protected readonly unsetPlaceholderFields = signal<ReadonlySet<string>>(new Set<string>());\n /** attributeNames of secrets whose clear is staged for the next save (Q8). */\n private readonly clearedSecrets = signal<ReadonlySet<string>>(new Set<string>());\n /** Value snapshot taken when the form was built (D6 baseline). */\n private baselineValues: Record<string, unknown> = {};\n /** The state the form was built from (input `state` plus host prefill). */\n private builtState: EntityFormValueState | null = null;\n private formSub?: Subscription;\n private lastValid?: boolean;\n private lastDirty?: boolean;\n\n protected readonly secretPresence = computed<Record<string, boolean>>(() => this.state()?.secretPresence ?? {});\n protected readonly formReadOnly = computed(() => isFormReadOnly(this.model(), this.mode(), this.readOnly()));\n /** No key ring in this environment (Q17): secret inputs are disabled with a hint. */\n protected readonly secretWritesDisabled = computed(() => this.keyRingConfigured?.() === false);\n /** The `secretWritesDisabled` value the controls were last enabled / disabled for. */\n private appliedSecretWritesDisabled?: boolean;\n\n /** Visibility per field key, from VisibleWhen and the current raw values. */\n protected readonly visibility = computed<Record<string, boolean>>(() => {\n const values = this.rawValues();\n const presence = this.secretPresence();\n const fields = allFields(this.model());\n const byKey = new Map(fields.map((f) => [f.key, f]));\n const result: Record<string, boolean> = {};\n for (const f of fields) {\n const source = f.visibleWhen ? byKey.get(f.visibleWhen.path) : undefined;\n result[f.key] = isVisible(f.visibleWhen, values, presence, source?.enumOptions);\n }\n return result;\n });\n\n /**\n * Why the form cannot be saved although every enabled control is valid, or `null`: in create\n * mode without a key ring (Q17), a visible, writable, required secret cannot be entered — the\n * server would reject the create (required secret missing). Hosts disable Create and show this.\n * In edit mode a missing required secret does not block saving other fields (the server only\n * enforces required secrets on create).\n */\n readonly saveBlockedReason = computed<string | null>(() => {\n if (!this.secretWritesDisabled() || this.mode() !== 'create' || this.formReadOnly()) {\n return null;\n }\n const vis = this.visibility();\n const presence = this.secretPresence();\n // Only SECRET-typed fields need the key ring; name-rule / metadata secrets are stored as plain values.\n const labels = allFields(this.view())\n .filter((f) => f.secret && isSecretValueType(f.valueType) && vis[f.key] !== false\n && !isFieldReadOnly(f, 'create', false) && isSecretRequired(f, 'create', presence))\n .map((f) => f.label);\n return labels.length\n ? formatEntityFormsMessage(this.resolvedMessages().secretRequiredWritesDisabled, { fields: labels.join(', ') })\n : null;\n });\n\n /** Default item of optional enum dropdowns. */\n protected readonly enumDefaultItem = computed(() => ({ key: null, name: this.resolvedMessages().enumPlaceholder }));\n\n constructor() {\n effect(() => {\n const model = this.model();\n const mode = this.mode();\n const state = this.state();\n const readOnly = this.readOnly();\n const initialValues = this.initialValues();\n untracked(() => this.rebuild(model, mode, this.withPrefill(model, mode, state ?? null, initialValues), readOnly));\n });\n // The key ring status arrives asynchronously (and may change): re-apply the enabled state of\n // the secret controls whenever it flips after the form was built.\n effect(() => {\n const disabled = this.secretWritesDisabled();\n untracked(() => {\n if (this.appliedSecretWritesDisabled === undefined || this.appliedSecretWritesDisabled === disabled) {\n return;\n }\n this.applyVisibility();\n this.bump();\n this.emitState();\n });\n });\n this.destroyRef.onDestroy(() => this.formSub?.unsubscribe());\n }\n\n // --- Public API ---\n\n /** Change set of the current values (only dirty controls on edit). */\n getChangeSet(): EntityFormChangeSet {\n const mode = this.mode();\n const changeSet = buildChangeSet(\n this.baselineValues,\n this.enabledValues(),\n this.model(),\n mode,\n this.secretPresence(),\n { records: this.records(), clearedSecrets: this.clearedSecrets() },\n );\n // A host-prefilled well-known name (singleton create) is carried even when its field is\n // read-only or not part of the form.\n const prefilled = this.builtState?.rtWellKnownName ?? this.state()?.rtWellKnownName;\n if (mode === 'create' && !changeSet.rtWellKnownName && typeof prefilled === 'string' && prefilled.trim()) {\n changeSet.rtWellKnownName = prefilled.trim();\n changeSet.isEmpty = false;\n }\n return changeSet;\n }\n\n /**\n * The change set to save, after the before-save hook (`beforeSave` input, else\n * `ENTITY_FORM_BEFORE_SAVE`; AB#5623) — for hosts that render `mm-entity-form` and save\n * themselves. The form never shows notifications: on `veto` / `error` the host tells the user\n * (e.g. `outcome.message ?? messages.saveVetoed`). View mode, and an edit form without changes,\n * skip the hook. `context.rtId` names the edited entity; `context.ckTypeId` defaults to the\n * form's runtime CK type.\n */\n async getChangeSetForSave(context: { rtId?: string; ckTypeId?: string } = {}): Promise<EntityFormBeforeSaveOutcome> {\n const changeSet = this.getChangeSet();\n const mode = this.mode();\n if (mode === 'view' || (mode === 'edit' && changeSet.isEmpty)) {\n return { kind: 'save', changeSet };\n }\n const model = this.model();\n return runEntityFormBeforeSave(this.beforeSave() ?? this.injectedBeforeSave ?? null, changeSet, {\n mode,\n ckTypeId: context.ckTypeId ?? model.rtCkTypeId,\n ...(context.rtId ? { rtId: context.rtId } : {}),\n form: model,\n });\n }\n\n /** True when any editable, visible control differs from the value it was built with. */\n isDirty(): boolean {\n if (this.clearedSecrets().size > 0) {\n return true;\n }\n const current = this.enabledValues();\n return Object.keys(current).some((k) => !formValuesEqual(this.baselineValues[k], current[k]));\n }\n\n /** True when every enabled control is valid and nothing blocks saving ({@link saveBlockedReason}). */\n isValid(): boolean {\n const form = this.form();\n return (form.valid || form.disabled) && this.saveBlockedReason() === null;\n }\n\n /** Marks every control as touched so validation errors become visible. */\n markAllAsTouched(): void {\n this.form().markAllAsTouched();\n this.bump();\n }\n\n /** Rebuilds the form from the current inputs, discarding user edits. */\n reset(): void {\n this.rebuild(this.model(), this.mode(), this.withPrefill(this.model(), this.mode(), this.state() ?? null, this.initialValues()), this.readOnly());\n }\n\n /**\n * Sets form values from the host (AB#5623), e.g. a \"Prefill from user\" action. Keys are field\n * keys or attribute names (any casing). The values always count as user edits: the form gets\n * dirty (compared with the values it was built from), the unsaved-changes guard applies and the\n * change set sends them. To start a create form with values that are NOT edits, use the\n * `initialValues` input instead. Secret fields, read-only fields and unknown keys are skipped.\n * Returns the field keys that were set.\n */\n patchValues(values: EntityFormPrefillValues): string[] {\n const model = this.model();\n const form = this.form();\n const applied: string[] = [];\n for (const [key, value] of Object.entries(values ?? {})) {\n const field = entityFormPrefillField(model, key);\n const control = field ? form.controls[field.key] : undefined;\n if (!field || !control || field.secret || isFieldReadOnly(field, this.mode(), this.formReadOnly())) {\n continue;\n }\n control.setValue(cloneValue(toReferenceValue(field, value ?? null)), { emitEvent: false });\n control.markAsDirty();\n applied.push(field.key);\n }\n if (applied.length > 0) {\n // One form event for all values: VisibleWhen, validity and dirty state follow.\n form.updateValueAndValidity();\n }\n return applied;\n }\n\n // --- Template helpers ---\n\n protected control(key: string): FormControl<unknown> {\n return this.form().controls[key];\n }\n\n protected isFieldVisible(field: ResolvedField): boolean {\n return this.visibility()[field.key] !== false;\n }\n\n protected visibleFieldCount(section: ResolvedSection): number {\n const vis = this.visibility();\n return section.fields.filter((f) => vis[f.key] !== false).length;\n }\n\n protected isCollapsed(section: ResolvedSection): boolean {\n return !!section.title && this.collapsed().has(section.key);\n }\n\n protected toggleSection(section: ResolvedSection): void {\n const next = new Set(this.collapsed());\n if (next.has(section.key)) {\n next.delete(section.key);\n } else {\n next.add(section.key);\n }\n this.collapsed.set(next);\n }\n\n protected isReadOnly(field: ResolvedField): boolean {\n return isFieldReadOnly(field, this.mode(), this.formReadOnly());\n }\n\n protected isRequired(field: ResolvedField): boolean {\n return field.secret ? isSecretRequired(field, this.mode(), this.secretPresence()) : field.required;\n }\n\n protected secretState(field: ResolvedField): EntityFormSecretState {\n if (!field.secret || this.mode() === 'create') {\n return null;\n }\n const name = field.attributeName ?? field.key;\n if (this.clearedSecrets().has(name)) {\n return 'clearStaged';\n }\n const state = this.state()?.secretStates?.[name];\n if (state?.keyMissing) {\n return 'keyMissing';\n }\n if (state ? state.isSet : this.secretPresence()[name]) {\n return 'set';\n }\n // Same rule as the secrets inventory (`needsReEntry`: NOT_SET and required, handover §7).\n return field.required && isSecretValueType(field.valueType) ? 'needsReEntry' : 'notSet';\n }\n\n protected secretSetAt(field: ResolvedField): Date | null {\n return this.state()?.secretStates?.[field.attributeName ?? field.key]?.setAt ?? null;\n }\n\n /**\n * \"Clear\" is offered for an optional SECRET (only SECRET attributes accept\n * `clearSecretAttributes`) that holds a value (set or key missing), in edit mode, when the field\n * is writable. Required secrets cannot be cleared (Q8).\n */\n protected canClearSecret(field: ResolvedField): boolean {\n if (!field.secret || field.required || this.mode() !== 'edit' || !isSecretValueType(field.valueType)) {\n return false;\n }\n if (isFieldReadOnly(field, this.mode(), this.formReadOnly())) {\n return false;\n }\n const state = this.secretState(field);\n return state === 'set' || state === 'keyMissing' || state === 'clearStaged';\n }\n\n protected isSecretClearStaged(field: ResolvedField): boolean {\n return this.clearedSecrets().has(field.attributeName ?? field.key);\n }\n\n /** Stages or undoes clearing a secret; a staged clear empties and disables the input. */\n protected setSecretClearStaged(field: ResolvedField, staged: boolean): void {\n const name = field.attributeName ?? field.key;\n const next = new Set(this.clearedSecrets());\n if (staged) {\n next.add(name);\n this.control(field.key)?.setValue(null, { emitEvent: false });\n } else {\n next.delete(name);\n }\n this.clearedSecrets.set(next);\n this.applyVisibility();\n this.bump();\n this.emitState();\n }\n\n protected placeholder(field: ResolvedField): string {\n if (this.unsetPlaceholderFields().has(field.key)) {\n return this.resolvedMessages().notConfigured ?? DEFAULT_ENTITY_FORMS_MESSAGES.notConfigured ?? '';\n }\n const state = this.secretState(field);\n if (state === 'set' || state === 'keyMissing') {\n return this.resolvedMessages().secretSetPlaceholder;\n }\n if (state === 'notSet' || state === 'needsReEntry') {\n return field.placeholder ?? this.resolvedMessages().secretNotSetPlaceholder;\n }\n return field.placeholder ?? '';\n }\n\n /** Q17 applies to SECRET-typed fields only (the encryption key ring is not needed for fallback secrets). */\n protected isSecretWriteBlocked(field: ResolvedField): boolean {\n return this.secretWritesDisabled() && isSecretValueType(field.valueType);\n }\n\n protected isIntegerField(field: ResolvedField): boolean {\n return INTEGER_TYPES.includes(field.valueType ?? '');\n }\n\n protected isIntArray(field: ResolvedField): boolean {\n return field.valueType === 'INT_ARRAY' || field.valueType === 'INTEGER_ARRAY';\n }\n\n protected displayUnsupported(field: ResolvedField): string {\n const value = this.control(field.key)?.value;\n if (value === null || value === undefined || value === '') {\n return '—';\n }\n if (typeof value === 'object') {\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n }\n return String(value);\n }\n\n // --- Internals ---\n\n /** `state` with the host prefill merged in (create mode only). */\n private withPrefill(\n model: ResolvedEntityForm,\n mode: EntityFormMode,\n state: EntityFormValueState | null,\n initialValues: EntityFormPrefillValues | null | undefined,\n ): EntityFormValueState | null {\n if (mode !== 'create' || !initialValues) {\n return state;\n }\n return mergeEntityFormPrefill(state, canonicaliseEntityFormPrefill(model, initialValues));\n }\n\n private rebuild(model: ResolvedEntityForm, mode: EntityFormMode, state: EntityFormValueState | null, readOnly: boolean): void {\n this.formSub?.unsubscribe();\n this.builtState = state;\n this.clearedSecrets.set(new Set<string>());\n const form = buildFormGroup(model, mode, { state, readOnly });\n this.normaliseAttributeReferences(model, form);\n this.clearUnsetPlaceholders(model, form);\n this.form.set(form);\n this.collapsed.set(new Set(model.sections.filter((s) => s.collapsed && s.title).map((s) => s.key)));\n this.rawValues.set(form.getRawValue());\n this.applyVisibility();\n this.baselineValues = cloneValue(form.getRawValue());\n this.lastValid = undefined;\n this.lastDirty = undefined;\n this.formSub = form.events.subscribe(() => this.onFormEvent());\n this.bump();\n this.emitState();\n }\n\n /**\n * Empties the fields that hold an unset placeholder (AB#5623) before the baseline is taken, so an\n * untouched field is \"no change\" and the placeholder is never written back.\n */\n private clearUnsetPlaceholders(model: ResolvedEntityForm, form: FormGroup<Record<string, FormControl<unknown>>>): void {\n const keys = entityFormUnsetPlaceholderFields(model, form.getRawValue(), this.unsetPlaceholders);\n const byKey = new Map(allFields(model).map((f) => [f.key, f]));\n for (const key of keys) {\n const field = byKey.get(key);\n form.controls[key]?.setValue(field ? emptyValue(field) : null, { emitEvent: false });\n }\n this.unsetPlaceholderFields.set(new Set(keys));\n }\n\n /** Attribute-held references store a bare rtId; the reference editor works with an array. */\n private normaliseAttributeReferences(model: ResolvedEntityForm, form: FormGroup<Record<string, FormControl<unknown>>>): void {\n for (const field of allFields(model)) {\n if (field.kind !== 'attribute' || field.editor !== 'reference') {\n continue;\n }\n const control = form.controls[field.key];\n const v = control?.value;\n if (typeof v === 'string' && v) {\n control.setValue([{ rtId: v, ckTypeId: field.reference?.targetCkTypeId ?? '', displayName: v }], { emitEvent: false });\n } else if (v === null || v === undefined) {\n control.setValue([], { emitEvent: false });\n }\n }\n }\n\n private onFormEvent(): void {\n const form = this.form();\n const raw = form.getRawValue();\n if (!formValuesEqual(raw, this.rawValues())) {\n this.rawValues.set(raw);\n this.applyVisibility();\n }\n this.bump();\n this.emitState();\n }\n\n /**\n * Enables/disables controls by visibility. A hidden field is always disabled; a visible field\n * is enabled unless it is read-only.\n */\n private applyVisibility(): void {\n const form = this.form();\n const vis = this.visibility();\n const mode = this.mode();\n const formReadOnly = this.formReadOnly();\n const writesDisabled = this.secretWritesDisabled();\n this.appliedSecretWritesDisabled = writesDisabled;\n for (const field of allFields(this.model())) {\n const control = form.controls[field.key];\n if (!control) {\n continue;\n }\n // The key ring only gates SECRET-typed fields (fallback secrets are plain values server-side).\n const secretBlocked = field.secret\n && ((writesDisabled && isSecretValueType(field.valueType)) || this.clearedSecrets().has(field.attributeName ?? field.key));\n const shouldEnable = vis[field.key] !== false && !isFieldReadOnly(field, mode, formReadOnly) && !secretBlocked;\n if (shouldEnable && control.disabled) {\n control.enable({ emitEvent: false });\n } else if (!shouldEnable && control.enabled) {\n control.disable({ emitEvent: false });\n }\n }\n }\n\n /** Values of enabled controls only (hidden and read-only fields are absent). */\n private enabledValues(): Record<string, unknown> {\n const form = this.form();\n const out: Record<string, unknown> = {};\n for (const [key, control] of Object.entries(form.controls)) {\n if (control.enabled) {\n out[key] = control.value;\n }\n }\n return out;\n }\n\n private emitState(): void {\n const valid = this.isValid();\n const dirty = this.isDirty();\n if (valid !== this.lastValid) {\n this.lastValid = valid;\n this.validChange.emit(valid);\n }\n if (dirty !== this.lastDirty) {\n this.lastDirty = dirty;\n this.dirtyChange.emit(dirty);\n }\n this.changeSetChange.emit(this.getChangeSet());\n }\n\n private bump(): void {\n this.revision.update((r) => r + 1);\n }\n}\n","@let m = resolvedMessages();\n@let rev = revision();\n<form class=\"mm-entity-form\" [formGroup]=\"form()\" (submit)=\"$event.preventDefault()\" novalidate>\n @if (saveBlockedReason(); as reason) {\n <p class=\"mm-ef-blocked\" role=\"status\" data-save-blocked>{{ reason }}</p>\n }\n @for (section of view().sections; track section.key) {\n @if (visibleFieldCount(section) > 0) {\n <section\n class=\"mm-ef-section\"\n [class.mm-ef-section--generated]=\"section.generated\"\n [class.mm-ef-section--collapsed]=\"isCollapsed(section)\"\n [attr.data-section-key]=\"section.key\"\n >\n @if (section.title) {\n <button\n type=\"button\"\n class=\"mm-ef-section__header\"\n [attr.aria-expanded]=\"!isCollapsed(section)\"\n (click)=\"toggleSection(section)\"\n >\n <kendo-svgicon [icon]=\"isCollapsed(section) ? chevronRightIcon : chevronDownIcon\"></kendo-svgicon>\n <span class=\"mm-ef-section__title\">{{ section.title }}</span>\n </button>\n }\n @if (!isCollapsed(section)) {\n @if (section.description) {\n <p class=\"mm-ef-section__description\">{{ section.description }}</p>\n }\n <div class=\"mm-ef-section__grid\" [class.mm-ef-section__grid--two]=\"section.columns === 2\">\n @for (field of section.fields; track field.key) {\n @if (isFieldVisible(field)) {\n @let ctrl = control(field.key);\n @let ro = isReadOnly(field);\n <mm-entity-form-field\n [field]=\"field\"\n [control]=\"ctrl\"\n [messages]=\"m\"\n [secretState]=\"secretState(field)\"\n [secretSetAt]=\"secretSetAt(field)\"\n [readOnly]=\"ro\"\n [required]=\"isRequired(field)\"\n [revision]=\"rev\"\n >\n @if (field.secret && field.kind === 'attribute' && (field.editor === 'password' || field.editor === 'multiline' || field.editor === 'text')) {\n <mm-entity-form-secret-editor\n [control]=\"ctrl\"\n [messages]=\"m\"\n [placeholder]=\"placeholder(field)\"\n [multiline]=\"field.editor === 'multiline'\"\n [readOnly]=\"ro\"\n [canClear]=\"canClearSecret(field)\"\n [clearStaged]=\"isSecretClearStaged(field)\"\n [writesDisabled]=\"isSecretWriteBlocked(field)\"\n [revision]=\"rev\"\n (clearStagedChange)=\"setSecretClearStaged(field, $event)\"\n ></mm-entity-form-secret-editor>\n } @else {\n @switch (field.editor) {\n @case ('multiline') {\n <kendo-textarea\n [formControl]=\"ctrl\"\n [rows]=\"4\"\n resizable=\"vertical\"\n [placeholder]=\"placeholder(field)\"\n [readonly]=\"ro\"\n ></kendo-textarea>\n }\n @case ('json') {\n <kendo-textarea\n class=\"mm-ef-mono\"\n [formControl]=\"ctrl\"\n [rows]=\"8\"\n resizable=\"vertical\"\n [placeholder]=\"placeholder(field)\"\n [readonly]=\"ro\"\n ></kendo-textarea>\n }\n @case ('yaml') {\n <kendo-textarea\n class=\"mm-ef-mono\"\n [formControl]=\"ctrl\"\n [rows]=\"8\"\n resizable=\"vertical\"\n [placeholder]=\"placeholder(field)\"\n [readonly]=\"ro\"\n ></kendo-textarea>\n }\n @case ('number') {\n <kendo-numerictextbox\n [formControl]=\"ctrl\"\n [decimals]=\"isIntegerField(field) ? 0 : 6\"\n [format]=\"isIntegerField(field) ? 'n0' : 'n'\"\n [placeholder]=\"placeholder(field)\"\n [readonly]=\"ro\"\n ></kendo-numerictextbox>\n }\n @case ('toggle') {\n <kendo-switch\n [formControl]=\"ctrl\"\n [onLabel]=\"m.toggleOn\"\n [offLabel]=\"m.toggleOff\"\n ></kendo-switch>\n }\n @case ('enum') {\n <kendo-dropdownlist\n [formControl]=\"ctrl\"\n [data]=\"field.enumOptions ?? []\"\n textField=\"name\"\n valueField=\"key\"\n [valuePrimitive]=\"true\"\n [defaultItem]=\"enumDefaultItem()\"\n ></kendo-dropdownlist>\n }\n @case ('datetime') {\n <kendo-datetimepicker\n [formControl]=\"ctrl\"\n [placeholder]=\"placeholder(field)\"\n [readOnlyInput]=\"ro\"\n ></kendo-datetimepicker>\n }\n @case ('cron') {\n <mm-cron-builder [formControl]=\"ctrl\"></mm-cron-builder>\n }\n @case ('chips') {\n <mm-entity-form-chips-editor\n [formControl]=\"ctrl\"\n [numeric]=\"isIntArray(field)\"\n [placeholder]=\"field.placeholder ?? m.chipsPlaceholder\"\n [invalidMessage]=\"m.validationNumber\"\n ></mm-entity-form-chips-editor>\n }\n @case ('reference') {\n <mm-entity-form-reference-field\n [formControl]=\"ctrl\"\n [targetCkTypeId]=\"field.reference?.targetCkTypeId ?? ''\"\n [multiple]=\"field.reference?.multiple ?? false\"\n [displayAttributes]=\"field.reference?.displayAttributes ?? noDisplayAttributes\"\n [displayAttributeInfo]=\"field.reference?.displayAttributeInfo ?? noDisplayAttributeInfo\"\n [messages]=\"messages()\"\n [placeholder]=\"field.placeholder ?? m.referencePlaceholder\"\n [readOnly]=\"ro\"\n ></mm-entity-form-reference-field>\n }\n @case ('records') {\n <mm-entity-form-records-field\n [formControl]=\"ctrl\"\n [ckRecordId]=\"field.record?.ckRecordId ?? ''\"\n [columns]=\"field.record?.columns ?? []\"\n [single]=\"field.record?.single ?? false\"\n [readOnly]=\"ro\"\n [secretWritesDisabled]=\"secretWritesDisabled()\"\n [messages]=\"messages()\"\n ></mm-entity-form-records-field>\n }\n @case ('unsupported') {\n <div class=\"mm-ef-unsupported\" [attr.title]=\"m.unsupportedEditor\">\n <span class=\"mm-ef-mono\">{{ displayUnsupported(field) }}</span>\n </div>\n }\n @default {\n <!-- text, password, url, email -->\n <kendo-textbox\n [formControl]=\"ctrl\"\n [type]=\"field.secret || field.editor === 'password' ? 'password' : 'text'\"\n [inputAttributes]=\"field.secret || field.editor === 'password' ? { autocomplete: 'new-password' } : {}\"\n [placeholder]=\"placeholder(field)\"\n [readonly]=\"ro\"\n ></kendo-textbox>\n }\n }\n }\n </mm-entity-form-field>\n }\n }\n </div>\n }\n </section>\n }\n } @empty {\n <p class=\"mm-ef-empty\">{{ m.noFieldsToShow }}</p>\n }\n</form>\n","import { EntityFormDefinition } from '../models/entity-form.models';\nimport { toKebabTypeKey } from './attribute-path';\nimport { humanizeCkTypeName } from './ck-type-name';\n\n/** Prefix of the well-known names of delivered forms (`form-sftp-configuration`). */\nconst FORM_WELL_KNOWN_NAME_PREFIX = 'form-';\n\n/**\n * URL key of a form (`sftp-configuration`), accepted by `EntityFormService.resolveByFormKey`:\n * the well-known name without the `form-` prefix, otherwise the kebab-cased target type name.\n * The well-known name wins because the kebab form of some type names differs from the seeded\n * name (`EMailSenderConfiguration` → `e-mail-sender-configuration`, seeded as\n * `form-email-sender-configuration`).\n */\nexport function entityFormKey(form: Pick<EntityFormDefinition, 'rtWellKnownName' | 'targetCkTypeId'>): string {\n const name = (form.rtWellKnownName ?? '').trim().toLowerCase();\n if (name.startsWith(FORM_WELL_KNOWN_NAME_PREFIX) && name.length > FORM_WELL_KNOWN_NAME_PREFIX.length) {\n return name.substring(FORM_WELL_KNOWN_NAME_PREFIX.length);\n }\n return toKebabTypeKey(form.targetCkTypeId);\n}\n\n/** One entry of {@link entityFormCatalog}: the effective form of one target type. */\nexport interface EntityFormCatalogEntry {\n /** URL key (see {@link entityFormKey}); stable per target type. */\n key: string;\n /** Settings category key (`connections`, `ai`, …), lower case. */\n category: string;\n title: string;\n description?: string;\n icon?: string;\n targetCkTypeId: string;\n includeDerivedTypes: boolean;\n singleton: boolean;\n /** The form that wins for the target type (tenant form before seeded, then priority). */\n form: EntityFormDefinition;\n}\n\nfunction compareForms(a: EntityFormDefinition, b: EntityFormDefinition): number {\n if (a.isTenantForm !== b.isTenantForm) {\n return a.isTenantForm ? -1 : 1;\n }\n if ((a.priority ?? 0) !== (b.priority ?? 0)) {\n return (b.priority ?? 0) - (a.priority ?? 0);\n }\n const ka = a.rtWellKnownName || a.rtId || '';\n const kb = b.rtWellKnownName || b.rtId || '';\n return ka < kb ? -1 : ka > kb ? 1 : 0;\n}\n\n/**\n * The forms that belong in a settings overview (concept §5.6): one entry per target type whose\n * effective form has a `Category`. The effective form is picked like the resolver does for an\n * exact type match (tenant form first, then higher priority, then well-known name), so a tenant\n * override replaces the delivered entry — and can also move it to another category or remove it\n * from the overview by leaving `Category` empty. The key prefers a delivered `form-*` name of\n * the type, so URLs stay stable when a tenant form is added. Sorted by title.\n */\nexport function entityFormCatalog(forms: readonly EntityFormDefinition[]): EntityFormCatalogEntry[] {\n const byType = new Map<string, EntityFormDefinition[]>();\n for (const form of forms) {\n const target = (form.targetCkTypeId ?? '').trim();\n if (!target) {\n continue;\n }\n const id = target.toLowerCase();\n byType.set(id, [...(byType.get(id) ?? []), form]);\n }\n\n const entries: EntityFormCatalogEntry[] = [];\n for (const candidates of byType.values()) {\n const sorted = [...candidates].sort(compareForms);\n const winner = sorted[0];\n const category = (winner.category ?? '').trim().toLowerCase();\n if (!category) {\n continue;\n }\n const keySource = sorted.find((f) => (f.rtWellKnownName ?? '').toLowerCase().startsWith(FORM_WELL_KNOWN_NAME_PREFIX)) ?? winner;\n entries.push({\n key: entityFormKey(keySource),\n category,\n title: winner.name?.trim() || humanizeCkTypeName(winner.targetCkTypeId),\n ...(winner.description?.trim() && { description: winner.description.trim() }),\n ...(winner.icon?.trim() && { icon: winner.icon.trim() }),\n targetCkTypeId: winner.targetCkTypeId,\n includeDerivedTypes: winner.includeDerivedTypes,\n singleton: !!winner.singleton,\n form: winner,\n });\n }\n return entries.sort((a, b) => a.title.localeCompare(b.title));\n}\n\n/**\n * Display names of CK types from the forms (AB#5524): per target type (lower-case key) the\n * `Name` of its effective form (tenant form first, then priority), for every form with a name —\n * also forms without `Category`. CK types carry no display name of their own.\n */\nexport function entityFormTypeTitles(forms: readonly EntityFormDefinition[]): Map<string, string> {\n const titles = new Map<string, string>();\n for (const form of [...forms].sort(compareForms)) {\n const target = (form.targetCkTypeId ?? '').trim().toLowerCase();\n const name = form.name?.trim();\n if (target && name && !titles.has(target)) {\n titles.set(target, name);\n }\n }\n return titles;\n}\n\n/**\n * Display name of a CK type: the form title of {@link entityFormTypeTitles} when there is one,\n * else {@link humanizeCkTypeName} (`FinApiConfiguration` → `finAPI configuration`).\n */\nexport function ckTypeDisplayName(ckTypeId: string, titles?: ReadonlyMap<string, string>): string {\n const id = (ckTypeId ?? '').trim();\n return titles?.get(id.toLowerCase()) ?? titles?.get(id.replace(/-\\d+(\\.\\d+)*$/, '').toLowerCase()) ?? humanizeCkTypeName(id);\n}\n","import { Directive, forwardRef, inject } from '@angular/core';\nimport { FieldFilterDto, FieldFilterOperatorsDto, GraphQL, SortDto, SortOrdersDto } from '@meshmakers/octo-services';\nimport { OctoGraphQlDataSource } from '@meshmakers/octo-ui';\nimport {\n DataSourceBase,\n FetchDataOptions,\n FetchResultTyped,\n ListViewComponent,\n} from '@meshmakers/shared-ui';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { EntityFormGetListDtoGQL, EntityFormGetListQueryDto } from '../graphQL/getEntityFormList';\nimport { EntityListSortDescriptor, ResolvedEntityForm } from '../models/entity-form.models';\n\n/**\n * One row of `<mm-entity-list>`. System properties keep their GraphQL names and every list\n * attribute is flattened onto the row under its camelCase CK attribute name, so a Kendo column\n * `field` equals the GraphQL `attributePath` and server-side sort / filter work unchanged.\n */\nexport interface EntityListRow {\n rtId: string;\n ckTypeId: string;\n rtWellKnownName: string | null;\n rtDisplayName: string | null;\n rtCreationDateTime: string | null;\n rtChangedDateTime: string | null;\n [attributeName: string]: unknown;\n}\n\ntype ListItem = NonNullable<\n NonNullable<NonNullable<NonNullable<EntityFormGetListQueryDto['runtime']>['runtimeEntities']>['items']>[number]\n>;\n\n/**\n * Attribute names the list may read for a resolved form: the `attribute` list columns, minus\n * anything flagged secret. The resolver already drops secret columns; the second filter is a\n * defensive guard so a resolver regression can never put a secret into the list query.\n */\nexport function entityListAttributeNames(model: ResolvedEntityForm): string[] {\n const secrets = new Set(model.secretFields.map((s) => s.toLowerCase()));\n const names = model.listColumns\n .filter((c) => c.kind === 'attribute')\n .map((c) => c.field)\n .filter((f) => !secrets.has(f.toLowerCase()));\n return Array.from(new Set(names));\n}\n\n/** Whether the list shows derived types too (`includeDerivedTypes` or an abstract target type). */\nexport function entityListIncludesDerivedTypes(model: ResolvedEntityForm): boolean {\n return model.includeDerivedTypes || model.isAbstract;\n}\n\n/** Flattens a GraphQL list item into an {@link EntityListRow}. */\nexport function toEntityListRow(item: ListItem, fallbackCkTypeId: string): EntityListRow {\n const row: EntityListRow = {\n rtId: String(item.rtId ?? ''),\n ckTypeId: String(item.ckTypeId ?? fallbackCkTypeId),\n rtWellKnownName: item.rtWellKnownName ?? null,\n rtDisplayName: item.rtDisplayName ?? null,\n rtCreationDateTime: (item.rtCreationDateTime as string | null | undefined) ?? null,\n rtChangedDateTime: (item.rtChangedDateTime as string | null | undefined) ?? null,\n };\n for (const attr of item.attributes?.items ?? []) {\n if (attr?.attributeName && !isSystemKey(attr.attributeName)) {\n row[attr.attributeName] = attr.value;\n }\n }\n return row;\n}\n\nconst SYSTEM_KEYS = new Set(['rtId', 'ckTypeId', 'rtWellKnownName', 'rtDisplayName', 'rtCreationDateTime', 'rtChangedDateTime']);\nfunction isSystemKey(key: string): boolean {\n return SYSTEM_KEYS.has(key);\n}\n\n/**\n * Secret-safe `mm-list-view` data source of `<mm-entity-list>`.\n *\n * - Uses the package's own `entityFormGetList` document, whose `$attributeNames` is\n * `[String]!` — it always sends the explicit list of non-secret list-column attributes\n * (an omitted variable would make the server return every attribute, secrets included).\n * - Restricts the query to the exact type with a `ckTypeId EQUALS` field filter unless the\n * form includes derived types or the type is abstract (`runtimeEntities(ckId)` returns\n * derived types by default).\n */\n@Directive({\n selector: '[mmEntityListDataSource]',\n exportAs: 'mmEntityListDataSource',\n standalone: true,\n providers: [\n {\n provide: DataSourceBase,\n useExisting: forwardRef(() => EntityListDataSourceDirective),\n },\n ],\n})\nexport class EntityListDataSourceDirective extends OctoGraphQlDataSource<EntityListRow> {\n private readonly listGQL = inject(EntityFormGetListDtoGQL);\n private model: ResolvedEntityForm | null = null;\n private defaultSort: readonly EntityListSortDescriptor[] = [];\n\n constructor() {\n super(inject(ListViewComponent));\n }\n\n /**\n * Sets the order used while the user has not sorted by a column (AB#5623). Refetches when the\n * order changed and a model is set.\n */\n public setDefaultSort(sort: readonly EntityListSortDescriptor[] | null | undefined): void {\n const next = (sort ?? []).filter((s) => !!s?.field);\n if (JSON.stringify(next) === JSON.stringify(this.defaultSort)) {\n return;\n }\n this.defaultSort = next;\n if (this.model) {\n this.fetchAgain({ resetSkip: true });\n }\n }\n\n /** The user's column sort, else the default sort, else `null` (server order). */\n private effectiveSort(options: FetchDataOptions): SortDto[] | null {\n const userSorted = (options.state.sort ?? []).some((s) => !!s.dir);\n if (userSorted || this.defaultSort.length === 0) {\n return this.getSortDefinitions(options.state);\n }\n return this.defaultSort.map((s) => ({\n attributePath: s.field,\n sortOrder: s.dir === 'desc' ? SortOrdersDto.DescendingDto : SortOrdersDto.AscendingDto,\n }));\n }\n\n /**\n * Sets the resolved form and refetches from the first page. `defaultSort` (optional) replaces\n * the order used while the user has not sorted by a column (see {@link setDefaultSort}).\n */\n public setModel(model: ResolvedEntityForm | null, defaultSort?: readonly EntityListSortDescriptor[] | null): void {\n this.model = model;\n if (defaultSort !== undefined) {\n this.defaultSort = (defaultSort ?? []).filter((s) => !!s?.field);\n }\n this.searchFilterAttributePaths = model\n ? model.listColumns.filter((c) => c.display !== 'date').map((c) => c.field)\n : [];\n this.fetchAgain({ resetSkip: true });\n }\n\n /** The variables of the next list query (exposed for tests). */\n public buildVariables(options: FetchDataOptions): Record<string, unknown> | null {\n const model = this.model;\n if (!model) {\n return null;\n }\n const fieldFilters: FieldFilterDto[] = [...(this.getFieldFilterDefinitions(options.state) ?? [])];\n if (!entityListIncludesDerivedTypes(model)) {\n fieldFilters.push({\n attributePath: 'ckTypeId',\n operator: FieldFilterOperatorsDto.EqualsDto,\n comparisonValue: model.rtCkTypeId,\n });\n }\n return {\n ckTypeId: model.rtCkTypeId,\n first: options.state.take,\n after: GraphQL.offsetToCursor(options.state.skip ?? 0),\n sort: this.effectiveSort(options),\n fieldFilters: fieldFilters.length > 0 ? fieldFilters : null,\n searchFilter: this.getSearchFilterDefinitions(options.textSearch),\n attributeNames: entityListAttributeNames(model),\n };\n }\n\n public fetchData(options: FetchDataOptions): Observable<FetchResultTyped<EntityListRow> | null> {\n const model = this.model;\n const variables = this.buildVariables(options);\n if (!model || !variables) {\n return of(new FetchResultTyped<EntityListRow>([], 0));\n }\n return this.listGQL\n .fetch({\n variables: variables as never,\n fetchPolicy: 'network-only',\n })\n .pipe(\n map((result) => {\n const connection = result.data?.runtime?.runtimeEntities;\n const rows = (connection?.items ?? [])\n .filter((i): i is ListItem => i != null)\n .map((i) => toEntityListRow(i, model.rtCkTypeId));\n return new FetchResultTyped<EntityListRow>(rows, connection?.totalCount ?? 0);\n }),\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n/** Cell of a list column with `Display: mono` — the raw value in a monospace font. */\n@Component({\n selector: 'mm-entity-list-mono-cell',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<span class=\"mm-entity-list-mono\" [title]=\"text\">{{ text }}</span>`,\n styles: [`\n .mm-entity-list-mono {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 0.9em;\n }\n `],\n})\nexport class EntityListMonoCellComponent {\n @Input() value: unknown;\n\n protected get text(): string {\n if (this.value === null || this.value === undefined) {\n return '';\n }\n return typeof this.value === 'object' ? JSON.stringify(this.value) : String(this.value);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ConfirmationService, DangerConfirmationOptions } from '@meshmakers/shared-ui';\nimport { DEFAULT_ENTITY_FORMS_MESSAGES, EntityFormsMessages, formatEntityFormsMessage } from '../entity-forms.messages';\n\n/** A destructive action the entity form components are about to run (AB#5524). */\nexport interface EntityFormActionRequest {\n action: 'delete';\n /** Runtime CK type id of the (first) affected entity. */\n ckTypeId: string;\n /** Number of affected entities. */\n count: number;\n /** Short English description, e.g. `delete 2 entities`. */\n description: string;\n}\n\n/**\n * Optional host hook asked **before** the component's own danger confirmation of a destructive\n * action — e.g. the Refinery Studio's production-mode check (`TenantModeService\n * .confirmProductionAction`), which the former configuration list ran before deleting. Resolve\n * `false` to cancel. Provide it on the route (or root) injector of the pages that render\n * `mm-entity-list` / `mm-entity-page`.\n */\nexport type EntityFormActionConfirmation = (request: EntityFormActionRequest) => Promise<boolean>;\n\nexport const ENTITY_FORM_ACTION_CONFIRMATION = new InjectionToken<EntityFormActionConfirmation>('ENTITY_FORM_ACTION_CONFIRMATION');\n\n/** Runs the host hook (absent = allowed); a throwing hook cancels the action. */\nexport async function confirmEntityFormAction(\n hook: EntityFormActionConfirmation | null | undefined,\n request: EntityFormActionRequest,\n): Promise<boolean> {\n if (!hook) {\n return true;\n }\n try {\n return await hook(request);\n } catch (error) {\n console.warn('Entity forms: action confirmation failed; the action is cancelled.', error);\n return false;\n }\n}\n\n/**\n * Optional host replacement of the components' own danger confirmation (AB#5579). By default\n * `mm-entity-list` / `mm-entity-page` ask `ConfirmationService.showDangerConfirm(options)`; a host\n * that adds environment knowledge (e.g. the Refinery Studio's `DangerConfirmService`: production =\n * type the name) provides this token instead and then usually needs no\n * {@link ENTITY_FORM_ACTION_CONFIRMATION} for deletes. Resolve `false` to cancel.\n */\nexport type EntityFormDangerConfirmation = (\n options: DangerConfirmationOptions,\n request: EntityFormActionRequest,\n) => Promise<boolean>;\n\nexport const ENTITY_FORM_DANGER_CONFIRMATION = new InjectionToken<EntityFormDangerConfirmation>('ENTITY_FORM_DANGER_CONFIRMATION');\n\n/**\n * The danger confirmation of an entity delete (AB#5579): the title names the entity (or the\n * count), `confirmText` = verb + object, texts from {@link EntityFormsMessages}.\n */\nexport function entityDeleteConfirmation(messages: EntityFormsMessages, names: readonly string[]): DangerConfirmationOptions {\n const d = DEFAULT_ENTITY_FORMS_MESSAGES;\n const text = (key: keyof EntityFormsMessages): string => (messages[key] ?? d[key]) as string;\n if (names.length === 1) {\n const name = names[0];\n return {\n title: formatEntityFormsMessage(text('confirmDeleteNamedTitle'), { name }),\n targetName: name,\n consequence: text('confirmDeleteConsequence'),\n confirmText: text('confirmDeleteConfirmText'),\n cancelText: messages.cancel,\n };\n }\n const count = names.length;\n return {\n title: formatEntityFormsMessage(text('confirmDeleteManyTitle'), { count }),\n targetName: formatEntityFormsMessage(text('confirmDeleteManyTarget'), { count }),\n consequence: formatEntityFormsMessage(text('confirmDeleteManyConsequence'), { count }),\n confirmText: text('confirmDeleteManyConfirmText'),\n cancelText: messages.cancel,\n };\n}\n\n/** Asks the host replacement (when provided) or `ConfirmationService.showDangerConfirm`; errors cancel. */\nexport async function confirmEntityFormDanger(\n hook: EntityFormDangerConfirmation | null | undefined,\n confirmation: ConfirmationService,\n options: DangerConfirmationOptions,\n request: EntityFormActionRequest,\n): Promise<boolean> {\n try {\n return hook ? await hook(options, request) : await confirmation.showDangerConfirm(options);\n } catch (error) {\n console.warn('Entity forms: danger confirmation failed; the action is cancelled.', error);\n return false;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n InjectionToken,\n Injector,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { CkTypeSelectorDialogService } from '@meshmakers/octo-ui';\nimport { CommandItem, CommandItemExecuteEventArgs } from '@meshmakers/shared-services';\nimport {\n BadgeMappingTable,\n ConfirmationService,\n ListViewComponent,\n MM_ACTION_ICONS,\n NotificationDisplayService,\n RowClassFn,\n TableColumn,\n} from '@meshmakers/shared-ui';\nimport {\n EntityFormsMessages,\n formatEntityFormsMessage,\n mergeEntityFormsMessages,\n} from '../entity-forms.messages';\nimport { CkAttributeInfo, EntityListSortDescriptor, ResolvedEntityForm, ResolvedListColumn } from '../models/entity-form.models';\nimport { ENTITY_FORM_LABEL_RESOLVER, EntityFormLabelResolver, localizeEntityListColumns } from '../core/entity-form-labels';\nimport { formatReferenceDisplayValue } from '../form/reference/reference-display-format';\nimport { EntityFormDataService } from '../services/entity-form-data.service';\nimport { EntityFormService } from '../services/entity-form.service';\nimport { ckTypeDisplayName, entityFormTypeTitles } from '../core/entity-form-catalog';\nimport { humanizeCkTypeName } from '../core/ck-type-name';\nimport { EntityListDataSourceDirective, EntityListRow } from './entity-list-data-source.directive';\nimport { EntityListMonoCellComponent } from './entity-list-mono-cell.component';\nimport {\n confirmEntityFormAction,\n confirmEntityFormDanger,\n ENTITY_FORM_ACTION_CONFIRMATION,\n ENTITY_FORM_DANGER_CONFIRMATION,\n entityDeleteConfirmation,\n} from '../core/action-confirmation';\nimport {\n ENTITY_FORM_UNSET_PLACEHOLDER_VALUES,\n EntityFormUnsetPlaceholderLookup,\n entityFormUnsetPlaceholderLookup,\n} from '../core/unset-placeholders';\nimport { isSecretValueType } from '@meshmakers/octo-services';\n\n/** Payload of {@link EntityListComponent.createRequested}: the concrete type to create. */\nexport interface EntityListCreateRequest {\n ckTypeId: string;\n}\n\n/** Payload of {@link EntityListComponent.openRequested}. */\nexport interface EntityListOpenRequest {\n rtId: string;\n ckTypeId: string;\n}\n\n/**\n * CSS classes of one list row (AB#5623), e.g. `{ 'row-disabled': row['enabled'] === false }`.\n * Same shapes as Angular's `[ngClass]`; `null` / `undefined` = no class. The classes are set on the\n * row's `<tr>` of the Kendo grid, so style them with global (or `::ng-deep`) CSS of the host.\n */\nexport type EntityListRowClass = (row: EntityListRow) => string | string[] | Record<string, boolean> | null | undefined;\n\n/**\n * App-wide default of {@link EntityListComponent.rowClass} (AB#5623). The input (and\n * `mm-entity-page`'s `listRowClass` / route data `entityListRowClass`) wins.\n */\nexport const ENTITY_LIST_ROW_CLASS = new InjectionToken<EntityListRowClass>('ENTITY_LIST_ROW_CLASS');\n\n/**\n * Maps an {@link EntityListRowClass} onto `mm-list-view`'s `rowClass`. A throwing callback is\n * logged and yields no class, so a host bug never breaks the list.\n */\nexport function toListViewRowClass(rowClass: EntityListRowClass | null | undefined): RowClassFn | undefined {\n if (!rowClass) {\n return undefined;\n }\n return ({ dataItem }) => {\n try {\n return rowClass(dataItem as EntityListRow) ?? {};\n } catch (error) {\n console.error('mm-entity-list: rowClass failed', error);\n return {};\n }\n };\n}\n\n/** Labels of boolean list cells (default \"Yes\" / \"No\"). */\nexport interface EntityListCellLabels {\n yes?: string;\n no?: string;\n /** Text of a cell holding an unset placeholder (AB#5623). Default \"Not configured\". */\n notConfigured?: string;\n}\n\n/** Whether a column's cells need formatting by CK value type (enum names, yes/no). */\nfunction isFormattedType(column: ResolvedListColumn): boolean {\n const type = (column.valueType ?? '').toUpperCase().replace(/_ARRAY$/, '');\n return type === 'ENUM' || type === 'BOOLEAN';\n}\n\n/**\n * Badge mapping of a `chip` column over an ENUM / BOOLEAN attribute: the raw key (`0`, `true`)\n * shows the enum value name / yes-no label in the neutral pill (AB#5547).\n */\nfunction chipLabels(column: ResolvedListColumn, labels: EntityListCellLabels): BadgeMappingTable | undefined {\n const type = (column.valueType ?? '').toUpperCase();\n if (type === 'ENUM' && column.enumOptions?.length) {\n const table: BadgeMappingTable = {};\n for (const option of column.enumOptions) {\n table[String(option.key)] = { label: option.name };\n table[option.name] = { label: option.name };\n }\n return table;\n }\n if (type === 'BOOLEAN') {\n return { true: { label: labels.yes ?? 'Yes' }, false: { label: labels.no ?? 'No' } };\n }\n return undefined;\n}\n\n/**\n * Maps a resolved list column onto an `mm-list-view` column definition. Cells are formatted by the\n * CK value type like the reference display of the form (AB#5547): ENUM → the enum value's name\n * (the API returns the key), BOOLEAN → yes/no, dates → localized date and time.\n */\nexport function toEntityListColumn(\n column: ResolvedListColumn,\n labels: EntityListCellLabels = {},\n unsetPlaceholders?: EntityFormUnsetPlaceholderLookup,\n): TableColumn {\n // AB#5623: a placeholder value of a non-secret attribute reads \"Not configured\".\n const placeholderValues = column.kind === 'attribute' && unsetPlaceholders && !isSecretValueType(column.valueType)\n ? [...unsetPlaceholders.global, ...(unsetPlaceholders.attributes.get(column.field.toLowerCase()) ?? [])]\n : [];\n const notConfigured = labels.notConfigured ?? 'Not configured';\n const isUnset = (value: unknown): boolean => typeof value === 'string' && placeholderValues.includes(value);\n const base: TableColumn = {\n field: column.field,\n displayName: column.label,\n ...(column.width ? { width: column.width } : { minWidth: 120 }),\n };\n const attribute: CkAttributeInfo | undefined = column.valueType\n ? { attributeName: column.field, valueType: column.valueType, isOptional: true, defaultValues: [], secret: false, enumOptions: column.enumOptions }\n : undefined;\n const format = (value: unknown): string => formatReferenceDisplayValue(value, attribute, labels) ?? '';\n switch (column.display) {\n case 'chip': {\n let badgeMapping = chipLabels(column, labels);\n if (placeholderValues.length) {\n badgeMapping = { ...(badgeMapping ?? {}) };\n for (const value of placeholderValues) {\n badgeMapping[value] = { label: notConfigured };\n }\n }\n return { ...base, dataType: 'badge', ...(badgeMapping ? { badgeMapping } : {}) };\n }\n case 'date':\n return { ...base, dataType: 'iso8601', format: 'medium' };\n case 'mono':\n return {\n ...base,\n dataType: 'component',\n cellComponent: EntityListMonoCellComponent,\n cellInputs: (item: unknown) => {\n const value = (item as Record<string, unknown>)[column.field];\n if (isUnset(value)) {\n return { value: notConfigured };\n }\n return { value: isFormattedType(column) ? format(value) : value };\n },\n };\n default:\n if (placeholderValues.length) {\n return {\n ...base,\n dataType: 'text',\n truncate: true,\n formatter: (value: unknown) => isUnset(value)\n ? notConfigured\n : isFormattedType(column) ? format(value) : value === null || value === undefined ? '' : String(value),\n };\n }\n return { ...base, dataType: 'text', truncate: true, ...(isFormattedType(column) ? { formatter: format } : {}) };\n }\n}\n\n/**\n * `<mm-entity-list>` — the list view of a resolved entity form.\n *\n * Columns come from the form's `ListColumns` (secret columns are never listed or queried).\n * Row click and the \"Edit\"/\"View\" action emit {@link openRequested}; \"New\" emits\n * {@link createRequested} — for an abstract type only after the user picked a concrete\n * subtype. The context menu carries the Copy ID submenu (RtId / CkTypeId / RtCkTypeId /\n * RtEntityId) and, when `canDelete && canWrite`, Delete with a confirmation.\n *\n * Host extensions (AB#5623): `toolbarActions` (after New), `rowActions` (icon buttons in the\n * actions column after Edit/View), `rowMenuActions` (context menu between Copy ID and Delete) —\n * plain `CommandItem`s as in `mm-list-view`; `onClick` receives the row (`EntityListRow`) as\n * `e.data`. `rowClass` sets CSS classes per row (e.g. disabled rows). `defaultSort` (or the form's `listDefaultSort`) orders the list while the user has not\n * sorted by a column; `labelResolver` translates column titles and enum texts.\n *\n * The component does not navigate; `<mm-entity-page>` (or the host) reacts to the outputs.\n */\n@Component({\n selector: 'mm-entity-list',\n standalone: true,\n imports: [ListViewComponent, EntityListDataSourceDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './entity-list.component.html',\n styleUrl: './entity-list.component.scss',\n})\nexport class EntityListComponent {\n private readonly confirmationService = inject(ConfirmationService);\n private readonly dangerConfirmation = inject(ENTITY_FORM_DANGER_CONFIRMATION, { optional: true });\n private readonly actionConfirmation = inject(ENTITY_FORM_ACTION_CONFIRMATION, { optional: true });\n private readonly notificationService = inject(NotificationDisplayService);\n private readonly dataService = inject(EntityFormDataService);\n private readonly ckTypeSelectorDialog = inject(CkTypeSelectorDialogService, { optional: true });\n /** Resolves `EntityFormService` lazily: only the Type column needs the form titles. */\n private readonly injector = inject(Injector);\n private readonly injectedLabelResolver = inject(ENTITY_FORM_LABEL_RESOLVER, { optional: true });\n private readonly injectedRowClass = inject(ENTITY_LIST_ROW_CLASS, { optional: true });\n private readonly unsetPlaceholders = entityFormUnsetPlaceholderLookup(inject(ENTITY_FORM_UNSET_PLACEHOLDER_VALUES, { optional: true }));\n /** Form titles per CK type (lower-case id) for the Type column (AB#5524). */\n private readonly typeTitles = signal<ReadonlyMap<string, string>>(new Map());\n private typeTitlesRequested = false;\n\n /** The resolved form (`EntityFormService.resolve` / `resolveByFormKey`). */\n readonly model = input.required<ResolvedEntityForm>();\n /** Whether the current user may write (mapped from roles by the host). Default `true`. */\n readonly canWrite = input<boolean>(true);\n /** Partial message overrides; missing keys use the English defaults. */\n readonly messages = input<Partial<EntityFormsMessages>>({});\n /** `mm-list-view` state persistence key; defaults to the route path. */\n readonly listStateKey = input<string | undefined>(undefined);\n /**\n * Appends a \"Type\" column with the display name of each row's CK type (lists over a base type):\n * the title of the type's entity form, else the humanized type name (AB#5524).\n */\n readonly showTypeColumn = input<boolean>(false);\n /**\n * Order while the user has not sorted by a column (AB#5623). Wins over the form's\n * `listDefaultSort`; `[]` = server order. A sort the user picked (also a remembered one from\n * `listStateKey`) always wins. The column header shows no sort marker for the default order.\n */\n readonly defaultSort = input<readonly EntityListSortDescriptor[] | null | undefined>(undefined);\n /** Translates column titles and enum texts (AB#5623); wins over `ENTITY_FORM_LABEL_RESOLVER`. */\n readonly labelResolver = input<EntityFormLabelResolver | null | undefined>(undefined);\n /** Host toolbar actions, shown after \"New\" (AB#5623). */\n readonly toolbarActions = input<readonly CommandItem[]>([]);\n /**\n * Host row actions (AB#5623): icon buttons in the actions column after Edit / View. Set\n * `svgIcon` and `text` (tooltip / aria-label); `onClick` gets the row as `e.data`.\n */\n readonly rowActions = input<readonly CommandItem[]>([]);\n /** Host row menu entries (AB#5623): context menu, between Copy ID and Delete. */\n readonly rowMenuActions = input<readonly CommandItem[]>([]);\n /**\n * CSS classes per row (AB#5623), e.g. to style disabled rows. Wins over `ENTITY_LIST_ROW_CLASS`;\n * absent = no row classes (unchanged). See {@link EntityListRowClass}.\n */\n readonly rowClass = input<EntityListRowClass | null | undefined>(undefined);\n\n /** \"New\" was confirmed; carries the concrete type (after the subtype picker for abstract types). */\n readonly createRequested = output<EntityListCreateRequest>();\n /** A row was opened. */\n readonly openRequested = output<EntityListOpenRequest>();\n /** Entities were deleted. */\n readonly deleted = output<EntityListOpenRequest[]>();\n\n private readonly dataSource = viewChild(EntityListDataSourceDirective);\n\n protected readonly msgs = computed(() => mergeEntityFormsMessages(this.messages()));\n\n protected readonly listViewMessages = computed(() => ({\n searchPlaceholder: this.msgs().searchPlaceholder,\n noRecords: this.msgs().emptyList,\n }));\n\n protected readonly columns = computed<TableColumn[]>(() => {\n const m = this.msgs();\n const labels: EntityListCellLabels = { yes: m.toggleOn, no: m.toggleOff, notConfigured: m.notConfigured };\n const model = this.model();\n const secrets = new Set(model.secretFields.map((f) => f.toLowerCase()));\n const columns = localizeEntityListColumns(model, this.labelResolver() ?? this.injectedLabelResolver)\n .map((c) => toEntityListColumn(c, labels, secrets.has(c.field.toLowerCase()) ? undefined : this.unsetPlaceholders));\n if (this.showTypeColumn() && !columns.some((c) => c.field === 'ckTypeId')) {\n const titles = this.typeTitles();\n const changed = columns.findIndex((c) => c.field === 'rtChangedDateTime');\n const typeColumn: TableColumn = {\n field: 'ckTypeId',\n displayName: this.msgs().typeColumn,\n dataType: 'text',\n sortable: false,\n filterable: false,\n formatter: (value) => ckTypeDisplayName(String(value ?? ''), titles),\n };\n columns.splice(changed >= 0 ? changed : columns.length, 0, typeColumn);\n }\n return columns;\n });\n\n protected readonly canCreate = computed(() => this.canWrite() && this.model().capabilities.canCreate);\n protected readonly canDelete = computed(() => this.canWrite() && this.model().capabilities.canDelete);\n protected readonly editable = computed(() => this.canWrite() && this.model().capabilities.canEdit);\n\n /** Copy ID submenu (Studio convention, see the refinery-studio CLAUDE.md). */\n readonly copyIdMenuItem = computed<CommandItem>(() => {\n const m = this.msgs();\n return {\n id: 'copyId',\n type: 'link',\n text: m.copyId,\n svgIcon: MM_ACTION_ICONS.copy,\n children: [\n { id: 'copyRtId', type: 'link', text: m.copyRtId, onClick: (e) => this.copy(e, 'rtId') },\n { id: 'copyCkTypeId', type: 'link', text: m.copyCkTypeId, onClick: (e) => this.copy(e, 'ckTypeId') },\n { id: 'copyRtCkTypeId', type: 'link', text: m.copyRtCkTypeId, onClick: (e) => this.copy(e, 'rtCkTypeId') },\n { id: 'copyRtEntityId', type: 'link', text: m.copyRtEntityId, onClick: (e) => this.copy(e, 'rtEntityId') },\n ],\n };\n });\n\n /**\n * Context menu: Copy ID, the host's `rowMenuActions`, then (only with `canDelete && canWrite`)\n * separator + Delete.\n */\n readonly contextMenuItems = computed<CommandItem[]>(() => {\n const items: CommandItem[] = [this.copyIdMenuItem(), ...this.rowMenuActions()];\n if (this.canDelete()) {\n items.push(\n { id: 'separator1', type: 'separator' },\n {\n id: 'delete',\n type: 'link',\n text: this.msgs().delete,\n svgIcon: MM_ACTION_ICONS.delete,\n danger: true,\n onClick: (e) => this.onDelete(e),\n },\n );\n }\n return items;\n });\n\n /** Row action column: Edit (or View when read-only), then the host's `rowActions`. */\n readonly actionItems = computed<CommandItem[]>(() => [\n {\n id: 'open',\n type: 'link',\n text: this.editable() ? this.msgs().edit : this.msgs().viewTitle,\n svgIcon: this.editable() ? MM_ACTION_ICONS.edit : MM_ACTION_ICONS.view,\n onClick: async (e) => this.open(e.data as EntityListRow | undefined),\n },\n ...this.rowActions(),\n ]);\n\n /** The `mm-list-view` row class callback (input, else the token, else none). */\n protected readonly listViewRowClass = computed<RowClassFn | undefined>(() =>\n toListViewRowClass(this.rowClass() ?? this.injectedRowClass));\n\n /** Width of the actions column: Edit/View + the row menu, plus one icon button per host row action. */\n protected readonly actionsColumnWidth = computed(() => 80 + 40 * this.rowActions().length);\n\n /** Toolbar: New (only with `canCreate && canWrite`), then the host's `toolbarActions`. */\n readonly toolbarItems = computed<CommandItem[]>(() => [\n ...(this.canCreate()\n ? [{ id: 'new', type: 'link', text: this.msgs().new, svgIcon: MM_ACTION_ICONS.add, onClick: async () => this.requestCreate() } as CommandItem]\n : []),\n ...this.toolbarActions(),\n ]);\n\n /** The order used while the user has not sorted: the input, else the form's `listDefaultSort`. */\n protected readonly effectiveDefaultSort = computed<readonly EntityListSortDescriptor[]>(() =>\n this.defaultSort() ?? this.model().listDefaultSort ?? []);\n\n constructor() {\n effect(() => {\n const ds = this.dataSource();\n const model = this.model();\n const defaultSort = this.effectiveDefaultSort();\n ds?.setModel(model, defaultSort);\n });\n effect(() => {\n if (this.showTypeColumn()) {\n untracked(() => void this.loadTypeTitles());\n }\n });\n }\n\n /** Loads the form titles of the Type column once; without them the type names are humanized. */\n private async loadTypeTitles(): Promise<void> {\n if (this.typeTitlesRequested) {\n return;\n }\n this.typeTitlesRequested = true;\n try {\n const forms = await this.injector.get(EntityFormService).getForms();\n this.typeTitles.set(entityFormTypeTitles(forms));\n } catch (error) {\n console.warn('mm-entity-list: form titles for the Type column could not be loaded', error);\n }\n }\n\n /** Reloads the list. */\n refresh(): void {\n this.dataSource()?.fetchAgain();\n }\n\n /**\n * Starts \"New\". For an abstract type (`createRequiresSubtype`) the concrete-subtype picker\n * opens first; cancelling it emits nothing.\n */\n async requestCreate(): Promise<void> {\n const model = this.model();\n if (!this.canCreate()) {\n return;\n }\n if (!model.capabilities.createRequiresSubtype) {\n this.createRequested.emit({ ckTypeId: model.rtCkTypeId });\n return;\n }\n if (!this.ckTypeSelectorDialog) {\n console.warn('mm-entity-list: CkTypeSelectorDialogService is not provided (provideOctoUi()); cannot pick a subtype.');\n return;\n }\n const result = await this.ckTypeSelectorDialog.openCkTypeSelector({\n derivedFromRtCkTypeId: model.rtCkTypeId,\n allowAbstract: false,\n dialogTitle: this.msgs().selectSubtypeTitle,\n });\n if (result.confirmed && result.selectedCkType) {\n this.createRequested.emit({ ckTypeId: result.selectedCkType.rtCkTypeId });\n }\n }\n\n protected onRowClicked(rows: unknown[]): void {\n const row = rows?.[rows.length - 1] as EntityListRow | undefined;\n this.open(row);\n }\n\n private open(row: EntityListRow | undefined): void {\n if (row?.rtId) {\n this.openRequested.emit({ rtId: row.rtId, ckTypeId: row.ckTypeId || this.model().rtCkTypeId });\n }\n }\n\n private async onDelete(e: CommandItemExecuteEventArgs): Promise<void> {\n if (!this.canDelete()) {\n return;\n }\n const rows = (Array.isArray(e.data) ? e.data : [e.data]).filter(\n (r): r is EntityListRow => !!(r as EntityListRow | undefined)?.rtId,\n );\n if (rows.length === 0) {\n return;\n }\n const request = {\n action: 'delete' as const,\n ckTypeId: rows[0].ckTypeId || this.model().rtCkTypeId,\n count: rows.length,\n description: rows.length === 1 ? 'delete 1 entity' : `delete ${rows.length} entities`,\n };\n if (!await confirmEntityFormAction(this.actionConfirmation, request)) {\n return;\n }\n const m = this.msgs();\n const options = entityDeleteConfirmation(m, rows.map(rowName));\n if (!await confirmEntityFormDanger(this.dangerConfirmation, this.confirmationService, options, request)) {\n return;\n }\n const entities = rows.map((r) => ({ rtId: r.rtId, ckTypeId: r.ckTypeId || this.model().rtCkTypeId }));\n try {\n const ok = await this.dataService.delete(entities);\n if (!ok) {\n this.notificationService.showError(m.deleteError);\n return;\n }\n this.notificationService.showSuccess(m.deleteSuccess, 3000);\n this.deleted.emit(entities);\n this.dataSource()?.fetchAgain();\n } catch (error) {\n console.error('mm-entity-list: delete failed', error);\n this.notificationService.showError(m.deleteError, error instanceof Error ? error.message : undefined);\n }\n }\n\n private async copy(e: CommandItemExecuteEventArgs, kind: 'rtId' | 'ckTypeId' | 'rtCkTypeId' | 'rtEntityId'): Promise<void> {\n const row = e.data as EntityListRow | undefined;\n if (!row?.rtId) {\n return;\n }\n const m = this.msgs();\n // Rows carry the runtime ckTypeId only; it is both the CkTypeId and the RtCkTypeId here.\n const ckTypeId = row.ckTypeId || this.model().rtCkTypeId;\n const values = {\n rtId: { value: row.rtId, label: m.copyRtId },\n ckTypeId: { value: ckTypeId, label: m.copyCkTypeId },\n rtCkTypeId: { value: ckTypeId, label: m.copyRtCkTypeId },\n rtEntityId: { value: `${ckTypeId}@${row.rtId}`, label: m.copyRtEntityId },\n } as const;\n const { value, label } = values[kind];\n try {\n await navigator.clipboard.writeText(value);\n this.notificationService.showSuccess(formatEntityFormsMessage(m.copiedId, { label }), 2000);\n } catch (error) {\n console.error('mm-entity-list: failed to copy to clipboard', error);\n this.notificationService.showError(m.copyFailed);\n }\n }\n}\n\nfunction rowName(row: EntityListRow): string {\n const name = row['name'];\n if (typeof name === 'string' && name) {\n return name;\n }\n return row.rtWellKnownName || row.rtDisplayName || row.rtId;\n}\n\n/**\n * `System.Communication/SftpConfiguration` → `SFTP configuration`.\n * @deprecated Use `humanizeCkTypeName` (or `ckTypeDisplayName` with form titles).\n */\nexport function shortTypeName(ckTypeId: string): string {\n return humanizeCkTypeName(ckTypeId) || ckTypeId;\n}\n","<mm-list-view\n mmEntityListDataSource\n [columns]=\"columns()\"\n [sortable]=\"true\"\n [rowFilterEnabled]=\"true\"\n [searchTextBoxEnabled]=\"true\"\n [autoPageSize]=\"true\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [showRowCheckBoxes]=\"false\"\n [actionsColumnWidth]=\"actionsColumnWidth()\"\n [actionCommandItems]=\"actionItems()\"\n [contextMenuCommandItems]=\"contextMenuItems()\"\n [leftToolbarActions]=\"toolbarItems()\"\n [listStateKey]=\"listStateKey()\"\n [messages]=\"listViewMessages()\"\n [rowClass]=\"listViewRowClass()\"\n (rowClicked)=\"onRowClicked($event)\"\n>\n</mm-list-view>\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { EntityFormMode, ResolvedEntityForm } from '../models/entity-form.models';\n\n/** Template context of {@link EntityPageActionsDirective} (AB#5623). */\nexport interface EntityPageActionsContext {\n /** The context object itself (`let-ctx`). */\n $implicit: EntityPageActionsContext;\n /** Which part of the page is shown. */\n view: 'list' | 'form';\n /** Form mode (`null` on the list). */\n mode: EntityFormMode | null;\n /** rtId of the open entity (`null` on the list and in create mode). */\n rtId: string | null;\n /** Runtime CK type of the open entity, else of the list. */\n ckTypeId: string | null;\n /** The resolved form of the open entity, else of the list. */\n model: ResolvedEntityForm | null;\n /** True while a save is running. */\n saving: boolean;\n /**\n * The page (typed loosely to avoid a circular import): call `saveChanges()`, `patchFormValues()`\n * or `refreshList()` on it, e.g. `(ctx.page as EntityPageComponent).patchFormValues({...})`.\n */\n page: unknown;\n}\n\n/**\n * Host page actions of `<mm-entity-page>` (AB#5623): the template is rendered next to the page's\n * own buttons — in the list header, and in the form's action bar (header or bottom bar, see\n * `actionBarPosition`) before Cancel / Delete / Save.\n *\n * ```html\n * <mm-entity-page formKey=\"form-company-profile\">\n * <ng-template mmEntityPageActions let-ctx>\n * @if (ctx.view === 'form') {\n * <button kendoButton fillMode=\"flat\" (click)=\"export(ctx.rtId)\">Export</button>\n * }\n * </ng-template>\n * </mm-entity-page>\n * ```\n */\n@Directive({\n selector: 'ng-template[mmEntityPageActions]',\n standalone: true,\n})\nexport class EntityPageActionsDirective {\n readonly templateRef = inject<TemplateRef<EntityPageActionsContext>>(TemplateRef);\n\n static ngTemplateContextGuard(_dir: EntityPageActionsDirective, _ctx: unknown): _ctx is EntityPageActionsContext {\n return true;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, ParamMap, Router } from '@angular/router';\nimport { FieldFilterDto, FieldFilterOperatorsDto } from '@meshmakers/octo-services';\nimport { EntityIdInfoComponent } from '@meshmakers/octo-ui';\nimport { BreadCrumbService } from '@meshmakers/shared-services';\nimport {\n ConfirmationService,\n HAS_UNSAVED_CHANGES,\n HasUnsavedChanges,\n MM_ACTION_ICONS,\n NotificationDisplayService,\n UnsavedChangesMessages,\n} from '@meshmakers/shared-ui';\nimport { ButtonComponent } from '@progress/kendo-angular-buttons';\nimport { KENDO_DIALOG } from '@progress/kendo-angular-dialog';\nimport { arrowLeftIcon, saveIcon } from '@progress/kendo-svg-icons';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CommandItem } from '@meshmakers/shared-services';\nimport { firstValueFrom } from 'rxjs';\nimport {\n EntityFormsMessages,\n formatEntityFormsMessage,\n mergeEntityFormsMessages,\n} from '../entity-forms.messages';\nimport { EntityFormComponent } from '../form/entity-form.component';\nimport { EntityFormGetListDtoGQL } from '../graphQL/getEntityFormList';\nimport {\n CkRecordInfo,\n EntityFormMode,\n EntityFormValueState,\n EntityListSortDescriptor,\n ResolvedEntityForm,\n} from '../models/entity-form.models';\nimport {\n ENTITY_FORM_LABEL_RESOLVER,\n EntityFormLabelResolver,\n localizeEntityForm,\n localizeEntityFormTitle,\n} from '../core/entity-form-labels';\nimport { EntityFormPrefillValues } from '../core/entity-form-prefill';\nimport { EntityPageActionsContext, EntityPageActionsDirective } from './entity-page-actions.directive';\nimport { EntityFormDataService } from '../services/entity-form-data.service';\nimport { EntityFormService } from '../services/entity-form.service';\nimport { entityListIncludesDerivedTypes } from '../list/entity-list-data-source.directive';\nimport {\n EntityListComponent,\n EntityListCreateRequest,\n EntityListOpenRequest,\n EntityListRowClass,\n} from '../list/entity-list.component';\nimport {\n confirmEntityFormAction,\n confirmEntityFormDanger,\n ENTITY_FORM_ACTION_CONFIRMATION,\n ENTITY_FORM_DANGER_CONFIRMATION,\n entityDeleteConfirmation,\n} from '../core/action-confirmation';\nimport { ENTITY_FORM_BEFORE_SAVE, EntityFormBeforeSaveHook, runEntityFormBeforeSave } from '../core/before-save';\n\n/** Value of the `rtId` input / route parameter that opens the create form. */\nexport const ENTITY_PAGE_NEW = 'new';\n\n/**\n * Query parameter carrying the concrete runtime CK type of the entity to create or open\n * (`new?type=…` after the subtype picker of an abstract type, `:rtId?type=…` for an entity of\n * a derived type). Named `type`, not `ckTypeId`, so that `withComponentInputBinding` never\n * binds it onto the page's `ckTypeId` input (the form's target type).\n */\nexport const ENTITY_PAGE_TYPE_QUERY_PARAM = 'type';\n\n/** Event of {@link EntityPageComponent.navigate}. */\nexport interface EntityPageNavigateEvent {\n kind: 'list' | 'create' | 'edit';\n rtId?: string;\n ckTypeId?: string;\n}\n\n/** Event of {@link EntityPageComponent.saved}: an entity was created or updated. */\nexport interface EntityPageSavedEvent {\n kind: 'create' | 'update';\n rtId: string;\n ckTypeId: string;\n}\n\n/** Event of {@link EntityPageComponent.deleted}. */\nexport interface EntityPageDeletedEvent {\n rtId: string;\n ckTypeId: string;\n}\n\n/** Which part of the page is shown. */\nexport type EntityPageView = 'loading' | 'list' | 'form' | 'error';\n\n/** Where the form's Save / Cancel / Delete buttons sit (AB#5623). */\nexport type EntityPageActionBarPosition = 'top' | 'bottom';\n\n/**\n * How create / edit of a list row opens (AB#5623): `'page'` (navigate to the `new` / `:rtId`\n * route, default) or `'dialog'` (a dialog over the list; the URL does not change).\n */\nexport type EntityPageEditMode = 'page' | 'dialog';\n\n/**\n * Prefill of the create form (AB#5623): the values, or a function of the concrete type to create\n * (called once per create form; may return `null`).\n */\nexport type EntityPageInitialValues =\n | EntityFormPrefillValues\n | ((context: { ckTypeId: string }) => EntityFormPrefillValues | null | undefined);\n\ninterface PageContext {\n formKey?: string;\n ckTypeId?: string;\n rtId?: string;\n type?: string;\n}\n\n/**\n * `<mm-entity-page>` — route component that combines `<mm-entity-list>` and `<mm-entity-form>`\n * for one form (by `formKey`) or CK type (by `ckTypeId`).\n *\n * - No `rtId` → list (or, for a singleton form, the singleton entity directly).\n * - `rtId === 'new'` → create form (`?type=` carries the concrete subtype of an abstract type).\n * - any other `rtId` → edit form (or view form without write permission).\n *\n * Inputs can be bound by `withComponentInputBinding()` from route params / data; without it the\n * page falls back to `ActivatedRoute` (params, data of this route and its parents, query params).\n * Navigation is relative (`..`, `new`, `:rtId`), so it works under any mount point; set\n * `routerNavigation` to `false` and handle {@link navigate} to drive it yourself.\n *\n * Host extensions (AB#5623, all optional, defaults = unchanged behaviour): `actionBarPosition`\n * (Save / Cancel at the bottom), page actions via `<ng-template mmEntityPageActions>`, list\n * `listToolbarActions` / `listRowActions` / `listRowMenuActions`, `defaultSort`, `labelResolver`\n * (translated labels and enum texts), `initialValues` (create prefill),\n * {@link patchFormValues} (prefill from a host action), `beforeSave` (normalise / veto the\n * change set before it is saved), `listRowClass` (CSS classes per row) and `editMode: 'dialog'`\n * (create / edit in a dialog over the list).\n *\n * Dialog mode (`editMode: 'dialog'`, AB#5623): \"New\", row click and Edit / View open the form in\n * a Kendo dialog over the list instead of navigating. The same form, hooks and texts apply\n * (`beforeSave`, `initialValues`, `labelResolver`, secrets, page actions with `view: 'form'`);\n * actions sit in the dialog's bottom bar (page actions, Cancel, Delete, Save — Cancel left of the\n * primary Save). Cancel, the close button and Escape ask before discarding unsaved changes; a\n * route change while the dialog has changes goes through the unsaved-changes guard. After a save\n * or delete the dialog closes and the list reloads; focus returns to the element that opened the\n * dialog. No `navigate` events are emitted for dialog transitions. The `new` / `:rtId` routes keep\n * working as pages (deep links); singleton forms always use the page.\n */\n@Component({\n selector: 'mm-entity-page',\n standalone: true,\n imports: [EntityListComponent, EntityFormComponent, EntityIdInfoComponent, ButtonComponent, NgTemplateOutlet, KENDO_DIALOG],\n providers: [{ provide: HAS_UNSAVED_CHANGES, useExisting: EntityPageComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './entity-page.component.html',\n styleUrl: './entity-page.component.scss',\n})\nexport class EntityPageComponent implements HasUnsavedChanges {\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly formService = inject(EntityFormService);\n private readonly dataService = inject(EntityFormDataService);\n private readonly listGQL = inject(EntityFormGetListDtoGQL);\n private readonly notificationService = inject(NotificationDisplayService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly actionConfirmation = inject(ENTITY_FORM_ACTION_CONFIRMATION, { optional: true });\n private readonly dangerConfirmation = inject(ENTITY_FORM_DANGER_CONFIRMATION, { optional: true });\n private readonly breadCrumbService = inject(BreadCrumbService, { optional: true });\n private readonly injectedLabelResolver = inject(ENTITY_FORM_LABEL_RESOLVER, { optional: true });\n private readonly injectedBeforeSave = inject(ENTITY_FORM_BEFORE_SAVE, { optional: true });\n\n /** Form key (`form-sftp-configuration` or `sftp-configuration`). Wins over `ckTypeId`. */\n readonly formKey = input<string | undefined>(undefined);\n /** Runtime CK type id of the form's target type (used when no `formKey` is given). */\n readonly ckTypeId = input<string | undefined>(undefined);\n /** Entity to edit; `'new'` opens the create form; absent shows the list. */\n readonly rtId = input<string | undefined>(undefined);\n /** Whether the user may write. Falls back to route data `canWrite`, then `true`. */\n readonly canWrite = input<boolean | undefined>(undefined);\n /** Partial message overrides; falls back to route data `messages`, then English. */\n readonly messages = input<Partial<EntityFormsMessages> | undefined>(undefined);\n /** Perform the default relative Router navigation (in addition to emitting {@link navigate}). */\n readonly routerNavigation = input<boolean>(true);\n /**\n * Where Save / Cancel / Delete sit on the form (AB#5623): `'top'` (header, default) or\n * `'bottom'` (a bar below the form, right-aligned). Falls back to route data\n * `entityPageActionBarPosition`.\n */\n readonly actionBarPosition = input<EntityPageActionBarPosition | undefined>(undefined);\n /** Translates labels, titles and enum texts (AB#5623); wins over `ENTITY_FORM_LABEL_RESOLVER`. */\n readonly labelResolver = input<EntityFormLabelResolver | null | undefined>(undefined);\n /** List order while the user has not sorted (AB#5623). Falls back to route data `entityListDefaultSort`, then the form's `listDefaultSort`. */\n readonly defaultSort = input<readonly EntityListSortDescriptor[] | null | undefined>(undefined);\n /** Prefill of the create form (AB#5623). Falls back to route data `entityFormInitialValues`. */\n readonly initialValues = input<EntityPageInitialValues | null | undefined>(undefined);\n /**\n * Hook run before every save (AB#5623): may modify the change set or veto the save. Wins over\n * route data `entityFormBeforeSave` and `ENTITY_FORM_BEFORE_SAVE`. See {@link EntityFormBeforeSaveHook}.\n */\n readonly beforeSave = input<EntityFormBeforeSaveHook | null | undefined>(undefined);\n /** Host toolbar actions of the list, after \"New\" (AB#5623). */\n readonly listToolbarActions = input<readonly CommandItem[]>([]);\n /** Host row actions of the list (icon buttons after Edit / View, AB#5623). */\n readonly listRowActions = input<readonly CommandItem[]>([]);\n /** Host row menu entries of the list (context menu, AB#5623). */\n readonly listRowMenuActions = input<readonly CommandItem[]>([]);\n /**\n * How create / edit opens (AB#5623): `'page'` (default) or `'dialog'` (over the list). Falls back\n * to route data `entityPageEditMode`. Ignored for singleton forms.\n */\n readonly editMode = input<EntityPageEditMode | undefined>(undefined);\n /**\n * CSS classes per list row (AB#5623), passed to `mm-entity-list`'s `rowClass`. Falls back to\n * route data `entityListRowClass`, then `ENTITY_LIST_ROW_CLASS`.\n */\n readonly listRowClass = input<EntityListRowClass | null | undefined>(undefined);\n\n /** Emitted for every list / create / edit transition. */\n readonly navigate = output<EntityPageNavigateEvent>();\n /** Emitted after a successful create or update (not for \"no changes\"). Hosts refresh their lists on it. */\n readonly saved = output<EntityPageSavedEvent>();\n /** Emitted after the open entity was deleted from the form (before the navigation to the list). */\n readonly deleted = output<EntityPageDeletedEvent>();\n\n // Queried by template reference so specs can swap in stubs with the same selector.\n private readonly form = viewChild<EntityFormComponent>('entityForm');\n /** Why Save / Create is disabled (e.g. a required secret without key ring, Q17), or `null`. */\n protected readonly saveBlockedReason = computed(() => this.form()?.saveBlockedReason() ?? null);\n private readonly list = viewChild<EntityListComponent>('entityList');\n private readonly listElement = viewChild('entityList', { read: ElementRef });\n /** Host page actions (`<ng-template mmEntityPageActions>`, AB#5623). */\n protected readonly pageActions = contentChild(EntityPageActionsDirective);\n\n private readonly paramMap = toSignal(this.route.paramMap);\n private readonly queryParamMap = toSignal(this.route.queryParamMap);\n private readonly routeData = toSignal(this.route.data);\n\n protected readonly view = signal<EntityPageView>('loading');\n protected readonly errorMessage = signal<string | null>(null);\n /** The form resolved for the page's type (list + breadcrumb title). */\n protected readonly baseModel = signal<ResolvedEntityForm | null>(null);\n /** The form resolved for the entity's concrete type (create / edit). */\n protected readonly formModel = signal<ResolvedEntityForm | null>(null);\n protected readonly mode = signal<EntityFormMode>('create');\n protected readonly state = signal<EntityFormValueState | undefined>(undefined);\n protected readonly entityRtId = signal<string | null>(null);\n protected readonly entityCkTypeId = signal<string | null>(null);\n protected readonly entityName = signal<string | null>(null);\n protected readonly saving = signal(false);\n /** Record metadata of the form's type (type conversion of record sub-values in the form). */\n protected readonly records = signal<Record<string, CkRecordInfo>>({});\n /** Well-known name forced onto a singleton that is created on first save. */\n protected readonly singletonWellKnownName = signal<string | null>(null);\n /** The create / edit dialog over the list is shown (`editMode: 'dialog'`, AB#5623). */\n protected readonly dialogOpen = signal(false);\n\n protected readonly saveIcon = saveIcon;\n protected readonly backIcon = arrowLeftIcon;\n protected readonly deleteIcon = MM_ACTION_ICONS.delete;\n\n protected readonly msgs = computed(() =>\n mergeEntityFormsMessages(this.messages() ?? (this.inheritedData('messages') as Partial<EntityFormsMessages> | undefined)),\n );\n\n protected readonly effectiveCanWrite = computed(() => {\n const bound = this.canWrite();\n if (bound !== undefined) {\n return bound;\n }\n const fromData = this.inheritedData('canWrite');\n return fromData === undefined ? true : fromData !== false;\n });\n\n protected readonly effectiveLabelResolver = computed(() => this.labelResolver() ?? this.injectedLabelResolver ?? null);\n\n /** The effective before-save hook: input, else route data `entityFormBeforeSave`, else the token. */\n private effectiveBeforeSave(): EntityFormBeforeSaveHook | null {\n const bound = this.beforeSave();\n if (bound) {\n return bound;\n }\n const fromData = this.inheritedData('entityFormBeforeSave');\n if (typeof fromData === 'function') {\n return fromData as EntityFormBeforeSaveHook;\n }\n return this.injectedBeforeSave ?? null;\n }\n /** `'dialog'` only for non-singleton forms with `editMode` (input, else route data) `'dialog'`. */\n protected readonly effectiveEditMode = computed<EntityPageEditMode>(() => {\n this.routeData();\n const mode = this.editMode() ?? this.inheritedData('entityPageEditMode');\n return mode === 'dialog' && !this.isSingleton() ? 'dialog' : 'page';\n });\n protected readonly effectiveActionBarPosition = computed<EntityPageActionBarPosition>(() => {\n this.routeData();\n return (this.actionBarPosition() ?? this.inheritedData('entityPageActionBarPosition')) === 'bottom' ? 'bottom' : 'top';\n });\n /** `undefined` = no page-level default (the list falls back to the form's `listDefaultSort`). */\n protected readonly effectiveDefaultSort = computed<readonly EntityListSortDescriptor[] | undefined>(() => {\n this.routeData();\n return this.defaultSort() ?? (this.inheritedData('entityListDefaultSort') as EntityListSortDescriptor[] | undefined);\n });\n /** The list's row class callback: input, else route data `entityListRowClass` (else the list's token). */\n protected readonly effectiveListRowClass = computed<EntityListRowClass | undefined>(() => {\n this.routeData();\n const bound = this.listRowClass();\n if (bound) {\n return bound;\n }\n const fromData = this.inheritedData('entityListRowClass');\n return typeof fromData === 'function' ? fromData as EntityListRowClass : undefined;\n });\n /** The prefill of the current create form (AB#5623), computed when the form opens. */\n protected readonly createInitialValues = signal<EntityFormPrefillValues | null>(null);\n /** Base model with translated title / description (list header). */\n protected readonly localizedBase = computed(() => {\n const model = this.baseModel();\n return model ? localizeEntityForm(model, this.effectiveLabelResolver()) : null;\n });\n /**\n * Breadcrumb labels (`{{entityFormTitle}}` / `{{entityName}}`), derived from the page state so\n * they follow a language change of the label resolver or the messages (AB#5623). `null` while\n * nothing is resolved.\n */\n protected readonly breadcrumbLabels = computed<Record<string, string> | null>(() => {\n this.routeData();\n const base = this.baseModel();\n const view = this.view();\n if (!base || view === 'loading') {\n return null;\n }\n if (view !== 'form') {\n const listLabels: Record<string, string> = { entityFormTitle: asString(this.inheritedData('entityListTitle')) ?? this.formTitle(base) ?? base.title };\n return listLabels;\n }\n const entityFormTitle = this.formTitle(base) ?? this.formTitle(this.formModel()) ?? '';\n const entityName = this.mode() === 'create' && !this.entityRtId() ? this.msgs().createTitle : this.entityName() ?? '';\n return { entityFormTitle, entityName };\n });\n\n /** Context of the host page actions template. */\n protected readonly actionsContext = computed<EntityPageActionsContext>(() =>\n this.buildActionsContext(this.view() === 'form' ? 'form' : 'list'));\n /** Context of the host page actions in the create / edit dialog (always the form view). */\n protected readonly dialogActionsContext = computed<EntityPageActionsContext>(() => this.buildActionsContext('form'));\n\n private buildActionsContext(view: 'list' | 'form'): EntityPageActionsContext {\n const ctx: EntityPageActionsContext = {\n view,\n mode: view === 'form' ? this.mode() : null,\n rtId: view === 'form' ? this.entityRtId() : null,\n ckTypeId: view === 'form' ? this.entityCkTypeId() : this.baseModel()?.rtCkTypeId ?? null,\n model: view === 'form' ? this.formModel() : this.baseModel(),\n saving: this.saving(),\n page: this,\n } as EntityPageActionsContext;\n ctx.$implicit = ctx;\n return ctx;\n }\n\n protected readonly isSingleton = computed(() => !!this.baseModel()?.singleton);\n /** Host heading override (`entityListTitle` route data), else the resolved form title. */\n protected readonly listTitle = computed(() => {\n this.routeData();\n return asString(this.inheritedData('entityListTitle')) ?? this.localizedBase()?.title ?? '';\n });\n /** `entityListTypeColumn` route data: show the row's CK type in the list. */\n protected readonly showTypeColumn = computed(() => {\n this.routeData();\n return this.inheritedData('entityListTypeColumn') === true;\n });\n protected readonly readOnly = computed(() => this.mode() === 'view');\n protected readonly canDeleteEntity = computed(() =>\n this.mode() === 'edit' && !this.isSingleton() && this.effectiveCanWrite() && !!this.formModel()?.capabilities.canDelete,\n );\n protected readonly title = computed(() => {\n const m = this.msgs();\n if (this.mode() === 'create' && !this.isSingleton()) {\n return m.createTitle;\n }\n // A singleton is \"the\" setting (e.g. Tenant mode): its form name, not \"Edit <entity name>\".\n if (this.isSingleton()) {\n return asString(this.inheritedData('entityListTitle')) ?? this.formTitle(this.formModel()) ?? this.localizedBase()?.title ?? m.viewTitle;\n }\n const name = this.entityName() ?? '';\n return this.mode() === 'edit' ? formatEntityFormsMessage(m.editTitle, { name }) : name || m.viewTitle;\n });\n\n /** The effective navigation context (inputs win over the route). */\n private readonly context = computed<PageContext>(() => {\n const params = this.paramMap();\n const query = this.queryParamMap();\n // Read the route data signal so a data change re-evaluates the context.\n this.routeData();\n return {\n // Route params come last: a host can mount the routes under `:formKey` (Refinery Studio\n // settings, AB#5523); the param reaches the child routes by params inheritance.\n formKey: this.formKey() ?? asString(this.inheritedData('formKey')) ?? paramValue(params, 'formKey'),\n ckTypeId: this.ckTypeId() ?? asString(this.inheritedData('ckTypeId')) ?? paramValue(params, 'ckTypeId'),\n rtId: this.rtId() ?? paramValue(params, 'rtId') ?? asString(this.route.snapshot?.data?.['rtId']),\n type: paramValue(query, ENTITY_PAGE_TYPE_QUERY_PARAM),\n };\n });\n\n private loadToken = 0;\n private suppressGuard = false;\n /** Where the next loaded form is shown: the page, or the dialog over the list. */\n private formTarget: 'page' | 'dialog' = 'page';\n /** Element focused when the dialog opened; focused again when it closes. */\n private dialogTrigger: HTMLElement | null = null;\n\n constructor() {\n let lastKey: string | null = null;\n effect(() => {\n const ctx = this.context();\n const key = JSON.stringify(ctx);\n if (key === lastKey) {\n return;\n }\n lastKey = key;\n untracked(() => void this.load(ctx));\n });\n effect(() => {\n const labels = this.breadcrumbLabels();\n if (labels) {\n untracked(() => void this.breadCrumbService?.updateBreadcrumbLabels(labels));\n }\n });\n }\n\n // ---------------------------------------------------------------------------------------------\n // HasUnsavedChanges\n // ---------------------------------------------------------------------------------------------\n\n hasUnsavedChanges(): boolean {\n const formShown = this.view() === 'form' || this.dialogOpen();\n if (this.suppressGuard || !formShown || this.mode() === 'view') {\n return false;\n }\n return !!this.form()?.isDirty();\n }\n\n unsavedChangesMessages(): UnsavedChangesMessages {\n return { title: this.msgs().unsavedChangesTitle };\n }\n\n /**\n * Validates and saves the form. Creates the entity in create mode (then switches to its edit\n * route), updates only the changed attributes in edit mode. Resolves `false` when the form is\n * invalid or the server rejected the change.\n */\n async saveChanges(): Promise<boolean> {\n const form = this.form();\n const model = this.formModel();\n const ckTypeId = this.entityCkTypeId();\n const m = this.msgs();\n if (!form || !model || !ckTypeId || this.mode() === 'view' || this.saving()) {\n return false;\n }\n if (!form.isValid()) {\n form.markAllAsTouched();\n this.notificationService.showWarning(m.formInvalid);\n return false;\n }\n let changeSet = form.getChangeSet();\n const isCreate = this.mode() === 'create';\n if (isCreate) {\n const wellKnownName = this.singletonWellKnownName();\n if (wellKnownName) {\n changeSet = { ...changeSet, rtWellKnownName: wellKnownName, isEmpty: false };\n }\n }\n this.saving.set(true);\n try {\n // Nothing changed on an edit form: nothing to normalise either (the hook is skipped).\n const hook = isCreate || !changeSet.isEmpty ? this.effectiveBeforeSave() : null;\n const outcome = await runEntityFormBeforeSave(hook, changeSet, {\n mode: isCreate ? 'create' : 'edit',\n ckTypeId,\n ...(isCreate ? {} : { rtId: this.entityRtId() ?? undefined }),\n form: model,\n });\n if (outcome.kind === 'veto') {\n this.notificationService.showWarning(outcome.message || m.saveVetoed || m.saveError);\n return false;\n }\n if (outcome.kind === 'error') {\n // Never log the change set: it may hold a secret the user typed.\n console.error('mm-entity-page: beforeSave failed; nothing was saved', outcome.error);\n this.notificationService.showError(m.saveError, outcome.error instanceof Error ? outcome.error.message : undefined);\n return false;\n }\n changeSet = outcome.changeSet;\n\n if (isCreate) {\n const rtId = await this.dataService.create(model, ckTypeId, changeSet);\n this.notificationService.showSuccess(m.createSuccess, 3000);\n this.saved.emit({ kind: 'create', rtId, ckTypeId });\n if (this.dialogOpen()) {\n this.closeDialog(true);\n } else if (this.isSingleton()) {\n this.singletonWellKnownName.set(null);\n await this.openEntity(model, { rtId }, this.loadToken);\n } else {\n this.suppressGuard = true;\n await this.go({ kind: 'edit', rtId, ckTypeId }, true);\n }\n return true;\n }\n\n const rtId = this.entityRtId();\n if (!rtId) {\n return false;\n }\n if (changeSet.isEmpty) {\n this.notificationService.showInfo(m.noChanges, 2000);\n if (this.dialogOpen()) {\n this.closeDialog(false);\n }\n return true;\n }\n await this.dataService.update(rtId, ckTypeId, changeSet);\n this.notificationService.showSuccess(m.saveSuccess, 3000);\n this.saved.emit({ kind: 'update', rtId, ckTypeId });\n if (this.dialogOpen()) {\n this.closeDialog(true);\n return true;\n }\n const reloaded = await this.dataService.load(model, { rtId });\n if (reloaded) {\n this.applyLoaded(reloaded.rtId, reloaded.ckTypeId, reloaded.state, reloaded.rtDisplayName);\n }\n return true;\n } catch (error) {\n console.error('mm-entity-page: save failed', error);\n this.notificationService.showError(m.saveError, error instanceof Error ? error.message : undefined);\n return false;\n } finally {\n this.saving.set(false);\n }\n }\n\n // ---------------------------------------------------------------------------------------------\n // Template handlers\n // ---------------------------------------------------------------------------------------------\n\n protected async onSave(): Promise<void> {\n await this.saveChanges();\n }\n\n protected async onBack(): Promise<void> {\n await this.go({ kind: 'list' });\n }\n\n protected async onCreateRequested(event: EntityListCreateRequest): Promise<void> {\n if (this.effectiveEditMode() === 'dialog') {\n await this.openDialog({ kind: 'create', ckTypeId: event.ckTypeId });\n return;\n }\n await this.go({ kind: 'create', ckTypeId: event.ckTypeId });\n }\n\n protected async onOpenRequested(event: EntityListOpenRequest): Promise<void> {\n if (this.effectiveEditMode() === 'dialog') {\n await this.openDialog({ kind: 'edit', rtId: event.rtId, ckTypeId: event.ckTypeId });\n return;\n }\n await this.go({ kind: 'edit', rtId: event.rtId, ckTypeId: event.ckTypeId });\n }\n\n /** Cancel, the dialog's close button and Escape: asks before discarding unsaved changes. */\n protected async onDialogCancel(): Promise<void> {\n if (!this.dialogOpen() || this.saving()) {\n return;\n }\n if (this.hasUnsavedChanges()) {\n const m = this.msgs();\n const discard = await this.confirmationService.showYesNoConfirmationDialog(\n m.unsavedChangesTitle,\n m.unsavedChangesMessage,\n undefined,\n { yes: m.discardChanges, no: m.keepEditing },\n );\n if (!discard) {\n return;\n }\n }\n this.closeDialog(false);\n }\n\n protected async onDelete(): Promise<void> {\n const rtId = this.entityRtId();\n const ckTypeId = this.entityCkTypeId();\n if (!rtId || !ckTypeId || !this.canDeleteEntity()) {\n return;\n }\n const request = { action: 'delete' as const, ckTypeId, count: 1, description: 'delete 1 entity' };\n if (!await confirmEntityFormAction(this.actionConfirmation, request)) {\n return;\n }\n const m = this.msgs();\n const options = entityDeleteConfirmation(m, [this.entityName() || rtId]);\n if (!await confirmEntityFormDanger(this.dangerConfirmation, this.confirmationService, options, request)) {\n return;\n }\n try {\n const ok = await this.dataService.delete([{ rtId, ckTypeId }]);\n if (!ok) {\n this.notificationService.showError(m.deleteError);\n return;\n }\n this.notificationService.showSuccess(m.deleteSuccess, 3000);\n if (this.dialogOpen()) {\n this.deleted.emit({ rtId, ckTypeId });\n this.closeDialog(true);\n return;\n }\n this.suppressGuard = true;\n this.deleted.emit({ rtId, ckTypeId });\n await this.go({ kind: 'list' });\n } catch (error) {\n console.error('mm-entity-page: delete failed', error);\n this.notificationService.showError(m.deleteError, error instanceof Error ? error.message : undefined);\n }\n }\n\n // ---------------------------------------------------------------------------------------------\n // Loading\n // ---------------------------------------------------------------------------------------------\n\n private async load(ctx: PageContext): Promise<void> {\n const token = ++this.loadToken;\n this.suppressGuard = false;\n this.formTarget = 'page';\n this.dialogOpen.set(false);\n this.dialogTrigger = null;\n this.view.set('loading');\n this.errorMessage.set(null);\n const m = this.msgs();\n try {\n let model: ResolvedEntityForm | null = null;\n if (ctx.formKey) {\n model = await this.formService.resolveByFormKey(ctx.formKey);\n } else if (ctx.ckTypeId) {\n model = await this.formService.resolve(ctx.ckTypeId);\n }\n if (token !== this.loadToken) {\n return;\n }\n if (!model) {\n this.fail(m.formNotFound);\n return;\n }\n this.baseModel.set(model);\n\n if (!ctx.rtId) {\n if (model.singleton) {\n await this.openSingleton(model, token);\n } else {\n this.resetEntity();\n this.view.set('list');\n }\n return;\n }\n\n if (ctx.rtId === ENTITY_PAGE_NEW) {\n await this.openCreate(model, ctx.type, token);\n return;\n }\n\n const formModel = await this.modelForType(model, ctx.type);\n if (token !== this.loadToken) {\n return;\n }\n await this.openEntity(formModel, { rtId: ctx.rtId }, token);\n } catch (error) {\n if (token === this.loadToken) {\n console.error('mm-entity-page: load failed', error);\n this.fail(m.loadError);\n }\n }\n }\n\n private async openCreate(model: ResolvedEntityForm, type: string | undefined, token: number): Promise<void> {\n const m = this.msgs();\n if (!this.effectiveCanWrite() || !model.capabilities.canCreate) {\n this.fail(m.readOnlyNotice);\n return;\n }\n if (model.capabilities.createRequiresSubtype && (!type || type === model.rtCkTypeId)) {\n // An abstract type cannot be instantiated: go through the list's subtype picker.\n this.resetEntity();\n this.view.set('list');\n return;\n }\n const formModel = await this.modelForType(model, type);\n if (token !== this.loadToken) {\n return;\n }\n await this.startCreate(formModel, null, token);\n }\n\n private async openSingleton(model: ResolvedEntityForm, token: number): Promise<void> {\n const wellKnownName = model.singleton?.wellKnownName;\n if (wellKnownName) {\n const loaded = await this.openEntity(model, { wellKnownName }, token, true);\n if (loaded || token !== this.loadToken) {\n return;\n }\n } else {\n const firstRtId = await this.firstEntityRtId(model);\n if (token !== this.loadToken) {\n return;\n }\n if (firstRtId) {\n await this.openEntity(model, { rtId: firstRtId }, token);\n return;\n }\n }\n if (!this.effectiveCanWrite() || !model.capabilities.canCreate) {\n this.fail(this.msgs().entityNotFound);\n return;\n }\n await this.startCreate(model, wellKnownName ?? null, token);\n }\n\n private async startCreate(formModel: ResolvedEntityForm, singletonWellKnownName: string | null, token: number): Promise<void> {\n const records = await this.recordsFor(formModel);\n if (token !== this.loadToken) {\n return;\n }\n this.records.set(records);\n this.formModel.set(formModel);\n this.singletonWellKnownName.set(singletonWellKnownName);\n this.entityRtId.set(null);\n this.entityCkTypeId.set(formModel.rtCkTypeId);\n this.entityName.set(null);\n this.createInitialValues.set(this.initialValuesFor(formModel.rtCkTypeId));\n this.state.set({\n values: {},\n secretPresence: {},\n associations: {},\n rtWellKnownName: singletonWellKnownName,\n });\n this.mode.set('create');\n this.showForm();\n }\n\n /**\n * Loads an entity into the form. When the entity turns out to be of a different (derived)\n * type than the model, the form for that type is resolved and the values are read again with\n * its attribute list. Resolves `false` when the entity does not exist.\n */\n private async openEntity(\n model: ResolvedEntityForm,\n key: { rtId: string } | { wellKnownName: string },\n token: number,\n quietWhenMissing = false,\n ): Promise<boolean> {\n let formModel = model;\n let loaded = await this.dataService.load(formModel, key);\n if (token !== this.loadToken) {\n return false;\n }\n if (loaded && loaded.ckTypeId && loaded.ckTypeId !== formModel.rtCkTypeId) {\n formModel = await this.formService.resolve(loaded.ckTypeId);\n loaded = await this.dataService.load(formModel, { rtId: loaded.rtId });\n if (token !== this.loadToken) {\n return false;\n }\n }\n if (!loaded) {\n if (!quietWhenMissing) {\n this.fail(this.msgs().entityNotFound);\n }\n return false;\n }\n const records = await this.recordsFor(formModel);\n if (token !== this.loadToken) {\n return false;\n }\n this.records.set(records);\n this.formModel.set(formModel);\n this.singletonWellKnownName.set(null);\n this.createInitialValues.set(null);\n this.applyLoaded(loaded.rtId, loaded.ckTypeId || formModel.rtCkTypeId, loaded.state, loaded.rtDisplayName);\n const writable = this.effectiveCanWrite() && formModel.capabilities.canEdit;\n this.mode.set(writable ? 'edit' : 'view');\n this.showForm();\n return true;\n }\n\n private applyLoaded(rtId: string, ckTypeId: string, state: EntityFormValueState, rtDisplayName?: string | null): void {\n this.entityRtId.set(rtId);\n this.entityCkTypeId.set(ckTypeId);\n this.state.set(state);\n const name = displayNameOf(state, rtId, rtDisplayName);\n this.entityName.set(name);\n }\n\n private async recordsFor(model: ResolvedEntityForm): Promise<Record<string, CkRecordInfo>> {\n try {\n const type = await this.formService.getCkType(model.rtCkTypeId);\n return type ? await this.formService.getRecordsFor(type) : {};\n } catch (error) {\n console.warn('mm-entity-page: record metadata could not be loaded', error);\n return {};\n }\n }\n\n private async modelForType(model: ResolvedEntityForm, type: string | undefined): Promise<ResolvedEntityForm> {\n if (!type || type === model.rtCkTypeId) {\n return model;\n }\n return this.formService.resolve(type);\n }\n\n /** rtId of the first entity of the type (singleton forms without a well-known name). */\n private async firstEntityRtId(model: ResolvedEntityForm): Promise<string | null> {\n const fieldFilters: FieldFilterDto[] = entityListIncludesDerivedTypes(model)\n ? []\n : [{ attributePath: 'ckTypeId', operator: FieldFilterOperatorsDto.EqualsDto, comparisonValue: model.rtCkTypeId }];\n const result = await firstValueFrom(\n this.listGQL.fetch({\n variables: {\n ckTypeId: model.rtCkTypeId,\n first: 1,\n fieldFilters: fieldFilters.length > 0 ? fieldFilters : null,\n // An empty list reads no attributes at all (never omit the variable: that reads all).\n attributeNames: [],\n },\n fetchPolicy: 'network-only',\n }),\n );\n const item = result.data?.runtime?.runtimeEntities?.items?.find((i) => !!i?.rtId);\n return item ? String(item.rtId) : null;\n }\n\n private resetEntity(): void {\n this.formModel.set(null);\n this.state.set(undefined);\n this.entityRtId.set(null);\n this.entityCkTypeId.set(null);\n this.entityName.set(null);\n this.singletonWellKnownName.set(null);\n this.createInitialValues.set(null);\n }\n\n private fail(message: string): void {\n if (this.formTarget === 'dialog') {\n // The list stays: tell the user and reload it (the entity may be gone).\n this.notificationService.showError(message);\n this.closeDialog(true);\n return;\n }\n this.errorMessage.set(message);\n this.view.set('error');\n }\n\n /** Shows the loaded form: on the page, or in the dialog over the list. */\n private showForm(): void {\n if (this.formTarget === 'dialog') {\n this.dialogOpen.set(true);\n } else {\n this.view.set('form');\n }\n }\n\n // ---------------------------------------------------------------------------------------------\n // Dialog mode (AB#5623)\n // ---------------------------------------------------------------------------------------------\n\n /** Loads the create / edit form into the dialog over the list. */\n private async openDialog(target: { kind: 'create'; ckTypeId: string } | { kind: 'edit'; rtId: string; ckTypeId: string }): Promise<void> {\n const base = this.baseModel();\n if (!base || this.dialogOpen()) {\n return;\n }\n const m = this.msgs();\n if (target.kind === 'create' && (!this.effectiveCanWrite() || !base.capabilities.canCreate)) {\n this.notificationService.showWarning(m.readOnlyNotice);\n return;\n }\n this.dialogTrigger = activeElement();\n const token = ++this.loadToken;\n this.formTarget = 'dialog';\n try {\n const formModel = await this.modelForType(base, target.ckTypeId);\n if (token !== this.loadToken) {\n return;\n }\n if (target.kind === 'create') {\n await this.startCreate(formModel, null, token);\n } else {\n await this.openEntity(formModel, { rtId: target.rtId }, token);\n }\n } catch (error) {\n if (token === this.loadToken) {\n console.error('mm-entity-page: dialog load failed', error);\n this.fail(m.loadError);\n }\n }\n }\n\n /**\n * Closes the dialog without asking, optionally reloads the list, and gives the focus back to\n * the element that opened the dialog (or the list when that element is gone).\n */\n private closeDialog(refresh: boolean): void {\n this.loadToken++;\n this.formTarget = 'page';\n this.dialogOpen.set(false);\n this.resetEntity();\n if (refresh) {\n this.list()?.refresh();\n }\n const trigger = this.dialogTrigger;\n this.dialogTrigger = null;\n const listElement = this.listElement()?.nativeElement as HTMLElement | undefined;\n setTimeout(() => {\n const target = trigger?.isConnected\n ? trigger\n : listElement?.querySelector<HTMLElement>('.k-grid [tabindex=\"0\"], .k-grid-table, .k-grid') ?? null;\n target?.focus?.();\n });\n }\n\n // ---------------------------------------------------------------------------------------------\n // Navigation\n // ---------------------------------------------------------------------------------------------\n\n private async go(event: EntityPageNavigateEvent, replaceUrl = false): Promise<void> {\n this.navigate.emit(event);\n if (!this.routerNavigation()) {\n return;\n }\n const atList = !this.context().rtId;\n const prefix = atList ? [] : ['..'];\n let commands: string[];\n switch (event.kind) {\n case 'list':\n commands = prefix;\n break;\n case 'create':\n commands = [...prefix, ENTITY_PAGE_NEW];\n break;\n default:\n commands = [...prefix, event.rtId ?? ''];\n }\n const baseType = this.baseModel()?.rtCkTypeId;\n const queryParams = event.kind !== 'list' && event.ckTypeId && event.ckTypeId !== baseType\n ? { [ENTITY_PAGE_TYPE_QUERY_PARAM]: event.ckTypeId }\n : {};\n await this.router.navigate(commands, { relativeTo: this.route, queryParams, replaceUrl });\n }\n\n /** Reads a route data key from this route or the nearest ancestor that defines it. */\n private inheritedData(key: string): unknown {\n let snapshot = this.route.snapshot;\n while (snapshot) {\n const value = snapshot.data?.[key];\n if (value !== undefined) {\n return value;\n }\n snapshot = snapshot.parent as typeof snapshot;\n }\n return undefined;\n }\n\n /** Reloads the list (when the list is shown). */\n refreshList(): void {\n this.list()?.refresh();\n }\n\n /**\n * Sets values of the open form from the host (AB#5623), e.g. a \"Prefill from user\" page action.\n * See `EntityFormComponent.patchValues`: the values always count as user edits (the form gets\n * dirty, the unsaved-changes guard applies and Save sends them); secret and read-only fields are\n * skipped. Returns the field keys that were set (`[]` when no writable form is shown).\n */\n patchFormValues(values: EntityFormPrefillValues): string[] {\n if ((this.view() !== 'form' && !this.dialogOpen()) || this.mode() === 'view') {\n return [];\n }\n return this.form()?.patchValues(values) ?? [];\n }\n\n /** Translated title of a model (AB#5623). */\n private formTitle(model: ResolvedEntityForm | null): string | undefined {\n return model ? localizeEntityFormTitle(model, this.effectiveLabelResolver()) : undefined;\n }\n\n /** The host prefill for a create form of the given type. */\n private initialValuesFor(ckTypeId: string): EntityFormPrefillValues | null {\n const source = this.initialValues() ?? (this.inheritedData('entityFormInitialValues') as EntityPageInitialValues | undefined);\n if (!source) {\n return null;\n }\n try {\n return (typeof source === 'function' ? source({ ckTypeId }) : source) ?? null;\n } catch (error) {\n console.error('mm-entity-page: initialValues failed', error);\n return null;\n }\n }\n}\n\n/** The focused element (the dialog's trigger), or `null` outside a browser. */\nfunction activeElement(): HTMLElement | null {\n const element = typeof document !== 'undefined' ? document.activeElement : null;\n return element instanceof HTMLElement && element !== document.body ? element : null;\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === 'string' && value ? value : undefined;\n}\n\nfunction paramValue(map: ParamMap | undefined, key: string): string | undefined {\n return asString(map?.get(key) ?? undefined);\n}\n\n/**\n * Entity label: `name` attribute, then `rtWellKnownName`, then a computed `rtDisplayName`\n * (the backend's synthetic `<ckTypeId>@<rtId>` form counts as absent), then the rtId.\n */\nfunction displayNameOf(state: EntityFormValueState, rtId: string, rtDisplayName?: string | null): string {\n const name = state.values['name'];\n if (typeof name === 'string' && name) {\n return name;\n }\n if (state.rtWellKnownName) {\n return state.rtWellKnownName;\n }\n if (rtDisplayName && !rtDisplayName.endsWith(`@${rtId}`)) {\n return rtDisplayName;\n }\n return rtId;\n}\n","<div class=\"mm-entity-page\">\n @switch (view()) {\n @case ('loading') {\n <div class=\"mm-entity-page__state\">{{ msgs().loading }}</div>\n }\n\n @case ('error') {\n <div class=\"mm-entity-page__state mm-entity-page__state--error\" role=\"alert\">\n <p>{{ errorMessage() }}</p>\n @if (baseModel() && !isSingleton()) {\n <button kendoButton fillMode=\"flat\" [svgIcon]=\"backIcon\" (click)=\"onBack()\">{{ msgs().back }}</button>\n }\n </div>\n }\n\n @case ('list') {\n @if (baseModel(); as model) {\n <header class=\"mm-entity-page__header\">\n <div class=\"mm-entity-page__titles\">\n <h2 class=\"mm-entity-page__title\">{{ listTitle() }}</h2>\n @if (localizedBase()?.description; as description) {\n <p class=\"mm-entity-page__description\">{{ description }}</p>\n }\n </div>\n @if (pageActions(); as actions) {\n <div class=\"mm-entity-page__actions\" data-entity-page-host-actions>\n <ng-container *ngTemplateOutlet=\"actions.templateRef; context: actionsContext()\" />\n </div>\n }\n </header>\n <mm-entity-list\n #entityList\n class=\"mm-entity-page__list\"\n [model]=\"model\"\n [canWrite]=\"effectiveCanWrite()\"\n [messages]=\"msgs()\"\n [showTypeColumn]=\"showTypeColumn()\"\n [defaultSort]=\"effectiveDefaultSort()\"\n [labelResolver]=\"effectiveLabelResolver()\"\n [toolbarActions]=\"listToolbarActions()\"\n [rowActions]=\"listRowActions()\"\n [rowMenuActions]=\"listRowMenuActions()\"\n [rowClass]=\"effectiveListRowClass()\"\n (createRequested)=\"onCreateRequested($event)\"\n (openRequested)=\"onOpenRequested($event)\"\n />\n\n <!-- Dialog mode (editMode 'dialog', AB#5623): create / edit over the list, actions in the\n dialog's bottom bar (Cancel left of the primary Save, as in the record row dialog). -->\n @if (dialogOpen()) {\n @if (formModel(); as formModelInDialog) {\n <kendo-dialog\n class=\"mm-entity-page__dialog\"\n data-entity-page-dialog\n [title]=\"title()\"\n [width]=\"760\"\n [maxWidth]=\"'95vw'\"\n [maxHeight]=\"'90vh'\"\n (close)=\"onDialogCancel()\"\n >\n <kendo-dialog-messages [closeTitle]=\"msgs().close\" />\n <div class=\"mm-entity-page__dialog-body\">\n @if (mode() === 'view') {\n <p class=\"mm-entity-page__notice\">{{ msgs().readOnlyNotice }}</p>\n }\n <mm-entity-form\n #entityForm\n class=\"mm-entity-page__form\"\n [model]=\"formModelInDialog\"\n [mode]=\"mode()\"\n [state]=\"state()\"\n [readOnly]=\"readOnly()\"\n [messages]=\"msgs()\"\n [records]=\"records()\"\n [labelResolver]=\"effectiveLabelResolver()\"\n [initialValues]=\"createInitialValues()\"\n />\n </div>\n <kendo-dialog-actions layout=\"end\">\n @if (pageActions(); as actions) {\n <ng-container *ngTemplateOutlet=\"actions.templateRef; context: dialogActionsContext()\" />\n }\n <button kendoButton type=\"button\" data-entity-page-dialog-cancel (click)=\"onDialogCancel()\">\n {{ mode() === 'view' ? msgs().close : msgs().cancel }}\n </button>\n @if (canDeleteEntity()) {\n <button kendoButton type=\"button\" fillMode=\"outline\" themeColor=\"error\" [svgIcon]=\"deleteIcon\" (click)=\"onDelete()\">\n {{ msgs().delete }}\n </button>\n }\n @if (mode() !== 'view') {\n <button kendoButton type=\"button\" themeColor=\"primary\" [svgIcon]=\"saveIcon\"\n [disabled]=\"saving() || !!saveBlockedReason()\" [attr.title]=\"saveBlockedReason()\"\n data-entity-page-save (click)=\"onSave()\">\n {{ msgs().save }}\n </button>\n }\n </kendo-dialog-actions>\n </kendo-dialog>\n }\n }\n }\n }\n\n @case ('form') {\n @if (formModel(); as model) {\n <header class=\"mm-entity-page__header\">\n <div class=\"mm-entity-page__titles\">\n <h2 class=\"mm-entity-page__title\">{{ title() }}</h2>\n @if (mode() !== 'create' && entityRtId()) {\n <mm-entity-id-info\n [rtId]=\"entityRtId()!\"\n [rtCkTypeId]=\"entityCkTypeId() ?? model.rtCkTypeId\"\n [ckTypeId]=\"entityCkTypeId() ?? model.rtCkTypeId\"\n [buttonText]=\"msgs().copyId\"\n [tooltip]=\"msgs().copyIdTooltip\"\n [copiedMessage]=\"msgs().copiedId\"\n [copyFailedMessage]=\"msgs().copyFailed\"\n />\n }\n </div>\n @if (effectiveActionBarPosition() === 'top') {\n <ng-container *ngTemplateOutlet=\"formActions\" />\n }\n </header>\n @if (mode() === 'view') {\n <p class=\"mm-entity-page__notice\">{{ msgs().readOnlyNotice }}</p>\n }\n @if (mode() === 'create' && singletonWellKnownName()) {\n <p class=\"mm-entity-page__notice\">{{ msgs().singletonCreateHint }}</p>\n }\n <mm-entity-form\n #entityForm\n class=\"mm-entity-page__form\"\n [model]=\"model\"\n [mode]=\"mode()\"\n [state]=\"state()\"\n [readOnly]=\"readOnly()\"\n [messages]=\"msgs()\"\n [records]=\"records()\"\n [labelResolver]=\"effectiveLabelResolver()\"\n [initialValues]=\"createInitialValues()\"\n />\n @if (effectiveActionBarPosition() === 'bottom') {\n <footer class=\"mm-entity-page__footer\" data-entity-page-footer>\n <ng-container *ngTemplateOutlet=\"formActions\" />\n </footer>\n }\n\n <ng-template #formActions>\n <div class=\"mm-entity-page__actions\">\n @if (pageActions(); as actions) {\n <ng-container *ngTemplateOutlet=\"actions.templateRef; context: actionsContext()\" />\n }\n @if (!isSingleton()) {\n <button kendoButton fillMode=\"flat\" [svgIcon]=\"backIcon\" data-entity-page-back (click)=\"onBack()\">\n {{ mode() === 'view' ? msgs().back : msgs().cancel }}\n </button>\n }\n @if (canDeleteEntity()) {\n <button kendoButton fillMode=\"outline\" themeColor=\"error\" [svgIcon]=\"deleteIcon\" (click)=\"onDelete()\">\n {{ msgs().delete }}\n </button>\n }\n @if (mode() !== 'view') {\n <button kendoButton themeColor=\"primary\" [svgIcon]=\"saveIcon\" [disabled]=\"saving() || !!saveBlockedReason()\"\n [attr.title]=\"saveBlockedReason()\" data-entity-page-save (click)=\"onSave()\">\n {{ msgs().save }}\n </button>\n }\n </div>\n </ng-template>\n }\n }\n }\n</div>\n","import { Route, Routes } from '@angular/router';\nimport { UnsavedChangesGuard } from '@meshmakers/shared-ui';\nimport { SVGIcon } from '@progress/kendo-svg-icons';\nimport { EntityFormsMessages } from '../entity-forms.messages';\nimport { EntityListSortDescriptor } from '../models/entity-form.models';\nimport { EntityFormPrefillValues } from '../core/entity-form-prefill';\nimport { EntityFormBeforeSaveHook } from '../core/before-save';\nimport type { EntityListRowClass } from '../list/entity-list.component';\n\n/**\n * Options of {@link entityFormRoutes}.\n *\n * Route parameter contract (stable, relied upon by the Refinery Studio, AB#5523):\n *\n * | Path | Page state |\n * |-----------|---------------------------------------------------------------------|\n * | `''` | list (a singleton form opens its entity directly) |\n * | `new` | create form; `?type=<rtCkTypeId>` = concrete type (abstract forms) |\n * | `:rtId` | edit form (view form without write permission); optional `?type=` |\n *\n * Route `data` carries `formKey` / `ckTypeId` / `canWrite` / `messages` (bound to the page\n * inputs by `withComponentInputBinding()`, read from `ActivatedRoute` otherwise), the `new`\n * route additionally `rtId: 'new'`, and the `breadcrumb` items with the `{{entityFormTitle}}` /\n * `{{entityName}}` labels the page fills via `BreadCrumbService.updateBreadcrumbLabels`.\n */\nexport interface EntityFormRoutesOptions {\n /** Form key (`form-sftp-configuration` or `sftp-configuration`). Wins over `ckTypeId`. */\n formKey?: string;\n /** Runtime CK type id of the target type, used when no `formKey` is given. */\n ckTypeId?: string;\n /**\n * Write permission for every user who can reach the routes. Hosts with role-dependent\n * permissions bind `canWrite` on their own wrapper or pass it as route data of a parent.\n */\n canWrite?: boolean;\n /** Message overrides passed to the page. */\n messages?: Partial<EntityFormsMessages>;\n /**\n * Breadcrumb URL of the list (relative to the host's breadcrumb root, e.g.\n * `communication/sftp`). Without it no breadcrumb items are added.\n */\n breadcrumbUrl?: string;\n /** Label of the list breadcrumb. Default `{{entityFormTitle}}` (the resolved form title). */\n breadcrumbLabel?: string;\n /**\n * Heading of the list (and of the singleton form) instead of the resolved form's title — e.g.\n * \"All configurations\" for a generic list over a base type whose `form-default` title would be\n * the type name. Route data key `entityListTitle`.\n */\n title?: string;\n /**\n * Adds a \"Type\" column (short CK type name of each row) to the list — for lists over a base type\n * with derived types. Route data key `entityListTypeColumn`.\n */\n showTypeColumn?: boolean;\n /**\n * Order of the list while the user has not sorted by a column (AB#5623). Wins over the form's\n * `listDefaultSort`. Route data key `entityListDefaultSort`.\n */\n defaultSort?: EntityListSortDescriptor[];\n /**\n * Where the form's Save / Cancel / Delete buttons sit (AB#5623): `'top'` (header, default) or\n * `'bottom'` (bar below the form). Route data key `entityPageActionBarPosition`.\n */\n actionBarPosition?: 'top' | 'bottom';\n /** Prefill of the create form (AB#5623). Route data key `entityFormInitialValues`. */\n initialValues?: EntityFormPrefillValues;\n /**\n * Hook run before every save (AB#5623): normalise / derive values or veto the save. Route data\n * key `entityFormBeforeSave`. See `EntityFormBeforeSaveHook`.\n */\n beforeSave?: EntityFormBeforeSaveHook;\n /**\n * CSS classes per list row (AB#5623), e.g. to style disabled rows. Route data key\n * `entityListRowClass`. See `EntityListRowClass`.\n */\n rowClass?: EntityListRowClass;\n /**\n * `'dialog'` opens create / edit of a list row in a dialog over the list instead of navigating\n * to `new` / `:rtId` (AB#5623; those routes still work as pages). Default `'page'`. Route data\n * key `entityPageEditMode`.\n */\n editMode?: 'page' | 'dialog';\n /** Label of the create breadcrumb. Default `New`. */\n newBreadcrumbLabel?: string;\n /** Label of the edit breadcrumb. Default `{{entityName}}`. */\n entityBreadcrumbLabel?: string;\n /** Icon of the list breadcrumb. */\n svgIcon?: SVGIcon;\n /** Additional route data merged into all three routes (e.g. `roles`). */\n data?: Record<string, unknown>;\n}\n\n/**\n * Builds the three child routes of an entity form page: `''` (list), `new` (create) and\n * `:rtId` (edit), each rendering `EntityPageComponent` lazily and guarded by\n * `UnsavedChangesGuard`. Mount them under any path:\n *\n * ```ts\n * { path: 'sftp', children: entityFormRoutes({ formKey: 'sftp-configuration', breadcrumbUrl: 'communication/sftp' }) }\n * ```\n */\nexport function entityFormRoutes(opts: EntityFormRoutesOptions = {}): Routes {\n const {\n formKey,\n ckTypeId,\n canWrite,\n messages,\n breadcrumbUrl,\n breadcrumbLabel = '{{entityFormTitle}}',\n newBreadcrumbLabel = 'New',\n entityBreadcrumbLabel = '{{entityName}}',\n svgIcon,\n title,\n showTypeColumn,\n defaultSort,\n actionBarPosition,\n initialValues,\n beforeSave,\n rowClass,\n editMode,\n data = {},\n } = opts;\n\n const baseData: Record<string, unknown> = {\n ...data,\n ...(formKey !== undefined && { formKey }),\n ...(ckTypeId !== undefined && { ckTypeId }),\n ...(canWrite !== undefined && { canWrite }),\n ...(messages !== undefined && { messages }),\n ...(title !== undefined && { entityListTitle: title }),\n ...(showTypeColumn !== undefined && { entityListTypeColumn: showTypeColumn }),\n ...(defaultSort !== undefined && { entityListDefaultSort: defaultSort }),\n ...(actionBarPosition !== undefined && { entityPageActionBarPosition: actionBarPosition }),\n ...(initialValues !== undefined && { entityFormInitialValues: initialValues }),\n ...(beforeSave !== undefined && { entityFormBeforeSave: beforeSave }),\n ...(rowClass !== undefined && { entityListRowClass: rowClass }),\n ...(editMode !== undefined && { entityPageEditMode: editMode }),\n };\n\n const listCrumb = breadcrumbUrl !== undefined\n ? { label: breadcrumbLabel, url: breadcrumbUrl, ...(svgIcon && { svgIcon }) }\n : null;\n const crumbs = (extra?: { label: string; url: string }): Record<string, unknown> => {\n if (!listCrumb) {\n return {};\n }\n return { breadcrumb: extra ? [listCrumb, extra] : [listCrumb] };\n };\n\n const loadComponent = () => import('./entity-page.component').then((m) => m.EntityPageComponent);\n\n const listRoute: Route = {\n path: '',\n loadComponent,\n canDeactivate: [UnsavedChangesGuard],\n data: { ...baseData, ...crumbs() },\n };\n const newRoute: Route = {\n path: 'new',\n loadComponent,\n canDeactivate: [UnsavedChangesGuard],\n data: {\n ...baseData,\n rtId: 'new',\n ...crumbs({ label: newBreadcrumbLabel, url: `${breadcrumbUrl}/new` }),\n },\n };\n const editRoute: Route = {\n path: ':rtId',\n loadComponent,\n canDeactivate: [UnsavedChangesGuard],\n data: {\n ...baseData,\n ...crumbs({ label: entityBreadcrumbLabel, url: `${breadcrumbUrl}/:rtId` }),\n },\n };\n return [listRoute, newRoute, editRoute];\n}\n","/*\n * Public API Surface of @meshmakers/octo-ui/entity-forms (AB#5522)\n *\n * Form-driven list / create / edit pages for runtime entities, configured by the tenant's\n * System.UI/EntityForm definitions (with a built-in default form as fallback). Lives in its own\n * secondary entry point so hosts that do not render entity forms keep the primary\n * `@meshmakers/octo-ui` bundle unchanged. See ../README.md.\n */\n\n// --- Contract types and messages ---\nexport * from './models/entity-form.models';\nexport * from './entity-forms.messages';\n\n// --- Services ---\nexport * from './services/entity-form.service';\nexport * from './services/entity-form-data.service';\n\n// --- Components ---\nexport * from './form/entity-form.component';\nexport { EntityFormReferenceFieldComponent } from './form/reference/entity-form-reference-field.component';\nexport { EntityFormRecordsFieldComponent } from './form/records/entity-form-records-field.component';\nexport { EntityFormSecretEditorComponent } from './form/editors/entity-form-secret-editor.component';\nexport type { EntityFormRecordColumn } from './form/records/entity-form-records-field.component';\nexport * from './list/entity-list.component';\nexport * from './list/entity-list-data-source.directive';\nexport * from './page/entity-page.component';\nexport * from './page/entity-page-actions.directive';\n\n// --- Routes ---\nexport * from './page/entity-page.routes';\n\n// --- Pure functions (form parsing / resolution, reusable by hosts such as the Studio) ---\nexport { parseEntityForm, parseEntityForms } from './core/entity-form-parser';\nexport type { RawRtEntityRow } from './core/entity-form-parser';\nexport {\n pickEntityForm,\n resolveEntityForm,\n autoEditorFor,\n associationFieldKey,\n isEditorCompatible,\n DEFAULT_SECTION_KEY,\n GENERATED_SECTION_KEY,\n DEFAULT_GENERATED_SECTION_TITLE,\n} from './core/entity-form-resolver';\nexport type { EntityFormSource, ResolveEntityFormOptions } from './core/entity-form-resolver';\nexport { entityFormCatalog, entityFormKey, entityFormTypeTitles, ckTypeDisplayName } from './core/entity-form-catalog';\nexport { humanizeCkTypeName, ckTypeShortName } from './core/ck-type-name';\nexport type { EntityFormCatalogEntry } from './core/entity-form-catalog';\nexport { BUILT_IN_DEFAULT_FORM } from './core/built-in-default-form';\nexport { ENTITY_FORM_FALLBACK_FORMS, withFallbackForms, selectFallbackForms, isChainEndForm } from './core/fallback-forms';\nexport {\n ENTITY_FORM_ACTION_CONFIRMATION,\n ENTITY_FORM_DANGER_CONFIRMATION,\n confirmEntityFormAction,\n confirmEntityFormDanger,\n entityDeleteConfirmation,\n} from './core/action-confirmation';\nexport {\n ENTITY_FORM_BEFORE_SAVE,\n EntityFormSaveVeto,\n isEntityFormSaveVeto,\n runEntityFormBeforeSave,\n} from './core/before-save';\nexport type {\n EntityFormBeforeSaveHook,\n EntityFormBeforeSaveContext,\n EntityFormBeforeSaveResult,\n EntityFormBeforeSaveOutcome,\n} from './core/before-save';\nexport { ENTITY_FORM_SECRET_KEY_RING_CONFIGURED, ENTITY_FORM_SECRET_PLACEHOLDER_VALUES } from './core/secret-write-availability';\nexport {\n ENTITY_FORM_UNSET_PLACEHOLDER_VALUES,\n entityFormUnsetPlaceholderLookup,\n entityFormUnsetPlaceholderFields,\n isEntityFormUnsetPlaceholder,\n} from './core/unset-placeholders';\nexport type {\n EntityFormUnsetPlaceholderValues,\n EntityFormUnsetPlaceholderLookup,\n EntityFormUnsetPlaceholderTarget,\n} from './core/unset-placeholders';\nexport {\n ENTITY_FORM_LABEL_RESOLVER,\n resolveEntityFormLabel,\n localizeEntityForm,\n localizeEntityListColumns,\n localizeEntityFormTitle,\n} from './core/entity-form-labels';\nexport type { EntityFormLabelResolver, EntityFormLabelRequest, EntityFormLabelKind } from './core/entity-form-labels';\nexport {\n entityFormPrefillState,\n mergeEntityFormPrefill,\n canonicaliseEntityFormPrefill,\n} from './core/entity-form-prefill';\nexport type { EntityFormPrefillValues, EntityFormPrefillOptions } from './core/entity-form-prefill';\nexport { resolveListDefaultSort } from './core/entity-form-resolver';\nexport type { EntityFormActionConfirmation, EntityFormActionRequest, EntityFormDangerConfirmation } from './core/action-confirmation';\nexport { canonicalisePath, SYSTEM_PROPERTIES, toKebabTypeKey } from './core/attribute-path';\nexport type { CanonicalPath } from './core/attribute-path';\nexport { parseVisibleWhen, isVisible } from './core/visible-when';\nexport { toFormValue, toAttributeInputs, parseDefault } from './core/entity-form-value-mapper';\nexport { buildChangeSet, associationRoleName } from './core/change-set-builder';\nexport type { BuildChangeSetOptions, EntityFormReferenceValue } from './core/change-set-builder';\nexport { toCkTypeInfo, toCkRecordInfo, isSecretMetaData, secretMetaDataMarker } from './core/ck-metadata';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DATE_TYPES","TEXT_LIKE_EDITORS","Apollo","isEmpty","displayNameOf","i3","i1","i2","map"],"mappings":"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"}
1
+ {"version":3,"file":"meshmakers-octo-ui-entity-forms.mjs","sources":["../../../../projects/meshmakers/octo-ui/entity-forms/src/models/entity-form.models.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/entity-forms.messages.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/attribute-path.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/ck-metadata.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/entity-form-parser.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/built-in-default-form.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/ck-type-name.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/entity-form-value-mapper.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/visible-when.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/entity-form-resolver.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/fallback-forms.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/entityFormTypeProbe.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormCkRecord.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormCkType.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityForms.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/services/entity-form.service.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/secret-write-availability.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/createEntityFormEntities.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/deleteEntityFormEntities.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityAttributePresence.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormAssociationDefinitions.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormAssociationTargets.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormCount.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormList.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormReferenceOptions.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormValues.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/updateEntityFormEntities.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/reference/reference-display-format.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/reference/entity-reference-data-source.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/services/entity-form-data.service.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/unset-placeholders.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/change-set-builder.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/entity-form-labels.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/before-save.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/entity-form-prefill.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/records/entity-form-record-row.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/records/entity-form-record-row-dialog.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/records/entity-form-records-field.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/graphQL/getEntityFormReferenceOptionsWithAttributes.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/reference/entity-form-reference-field.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/editors/entity-form-chips-editor.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/editors/entity-form-secret-editor.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/entity-form-controls.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/entity-form-field.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/entity-form.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/form/entity-form.component.html","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/entity-form-catalog.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/list/entity-list-data-source.directive.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/list/entity-list-mono-cell.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/core/action-confirmation.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/list/entity-list.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/list/entity-list.component.html","../../../../projects/meshmakers/octo-ui/entity-forms/src/page/entity-page-actions.directive.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/page/entity-page.component.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/page/entity-page.component.html","../../../../projects/meshmakers/octo-ui/entity-forms/src/page/entity-page.routes.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/public-api.ts","../../../../projects/meshmakers/octo-ui/entity-forms/src/meshmakers-octo-ui-entity-forms.ts"],"sourcesContent":["/**\n * Contract types of the `@meshmakers/octo-ui/entity-forms` entry point (AB#5522).\n *\n * The `*Def` interfaces mirror the `System.UI/EntityForm` runtime entities as parsed from the\n * generic runtime API. The `Resolved*` interfaces are the output of `resolveEntityForm()`: a\n * form definition matched against the CK metadata of one concrete type, ready to render.\n */\n\nimport type { SecretState } from '@meshmakers/octo-services';\n\n/** Editor kinds a resolved field can use. */\nexport type EntityFormEditor = 'text' | 'multiline' | 'password' | 'number' | 'toggle' | 'enum' | 'datetime'\n | 'url' | 'email' | 'json' | 'yaml' | 'cron' | 'chips' | 'reference' | 'records' | 'unsupported';\n\n/** Read-only behaviour of a field. `afterCreate` means editable on create, read-only on edit. */\nexport type ReadOnlyMode = 'never' | 'always' | 'afterCreate';\n\n/** Mode a form is rendered in. */\nexport type EntityFormMode = 'create' | 'edit' | 'view';\n\n/** CK metadata of one attribute of a type or record. */\nexport interface CkAttributeInfo {\n /** camelCase, canonical attribute name as returned by the CK API. */\n attributeName: string;\n /** AttributeValueType (STRING, INT, INTEGER_64, RECORD_ARRAY, ...). */\n valueType: string;\n isOptional: boolean;\n description?: string | null;\n defaultValues: unknown[];\n enumOptions?: { key: number; name: string }[];\n /** Versioned record full name (usable with `records(ckId:)`). */\n ckRecordId?: string | null;\n /** True when the CK attribute metaData carries `secret = true`. */\n secret: boolean;\n /**\n * The CK metaData `secret` marker as a tri-state (AB#5542): `true`, `false` (explicit opt-out of\n * the credential-name rule) or `undefined` (no marker).\n */\n metaSecret?: boolean;\n}\n\n/** One association role a type takes part in. */\nexport interface CkAssociationRoleInfo {\n rtRoleId: string;\n navigationPropertyName: string;\n direction: 'out' | 'in';\n multiplicity: 'ONE' | 'ZERO_OR_ONE' | 'N';\n otherRtCkTypeId: string;\n}\n\n/** CK metadata of one type. */\nexport interface CkTypeInfo {\n rtCkTypeId: string;\n ckTypeIdFullName: string;\n isAbstract: boolean;\n /** Ancestor rtCkTypeIds, nearest first, ending with System/Entity; excludes the type itself. */\n ancestors: string[];\n /** Attributes in model order as returned (inherited ones included). */\n attributes: CkAttributeInfo[];\n associations: CkAssociationRoleInfo[];\n}\n\n/** CK metadata of one record. */\nexport interface CkRecordInfo {\n ckRecordId: string;\n attributes: CkAttributeInfo[];\n}\n\nexport interface EntityFormSectionDef {\n key: string;\n title?: string | null;\n description?: string | null;\n order?: number | null;\n collapsed?: boolean | null;\n columns?: number | null;\n}\n\nexport interface EntityFormFieldDef {\n attributePath: string;\n sectionKey?: string | null;\n order?: number | null;\n label?: string | null;\n help?: string | null;\n placeholder?: string | null;\n editor?: string | null;\n readOnly?: string | null;\n required?: boolean | null;\n width?: string | null;\n default?: string | null;\n min?: number | null;\n max?: number | null;\n pattern?: string | null;\n secret?: boolean | null;\n visibleWhen?: string | null;\n referenceCkTypeId?: string | null;\n associationRoleId?: string | null;\n recordColumns?: string[] | null;\n hidden?: boolean | null;\n /**\n * `EntityFormField.ReferenceDisplayAttributes` (System.UI 2.8.0; host fallback forms may set it\n * too): non-secret attributes of the reference target shown next to its name in the picker, e.g.\n * `['repositoryUrl', 'channel']`. Read with an explicit `attributeNames` list of exactly these\n * names (AB#5547).\n */\n referenceDisplayAttributes?: string[] | null;\n}\n\n/**\n * One entry of the default list order (AB#5623). Not part of the `System.UI/EntityForm` CK type:\n * set it in host fallback forms (`provideEntityFormFallbacks`) or pass `defaultSort` to the list.\n */\nexport interface EntityFormSortDef {\n /** Attribute path (any casing) or system property (`rtChangedDateTime`, `rtWellKnownName`, ...). */\n attributePath: string;\n /** Default `'asc'`. */\n direction?: 'asc' | 'desc' | null;\n}\n\nexport interface EntityFormColumnDef {\n attributePath: string;\n label?: string | null;\n width?: number | null;\n display?: string | null;\n}\n\n/** A parsed `System.UI/EntityForm` entity. */\nexport interface EntityFormDefinition {\n rtId: string;\n rtWellKnownName?: string | null;\n /** True when `rtBlueprintSource` is empty or null (the form was authored in the tenant). */\n isTenantForm: boolean;\n targetCkTypeId: string;\n includeDerivedTypes: boolean;\n priority: number;\n name?: string | null;\n description?: string | null;\n category?: string | null;\n icon?: string | null;\n canCreate?: boolean | null;\n canEdit?: boolean | null;\n canDelete?: boolean | null;\n canDuplicate?: boolean | null;\n canExport?: boolean | null;\n singleton?: boolean | null;\n singletonWellKnownName?: string | null;\n customComponent?: string | null;\n generateRemainingFields?: boolean | null;\n generatedSectionTitle?: string | null;\n sections: EntityFormSectionDef[];\n fields: EntityFormFieldDef[];\n listColumns: EntityFormColumnDef[];\n /**\n * Initial order of the list (AB#5623; host fallback forms only, the CK type has no such\n * attribute). The user can still sort by any column; without a user sort this order applies.\n */\n listDefaultSort?: EntityFormSortDef[] | null;\n}\n\n/** A parsed `VisibleWhen` expression: `Path=value` or `Path=*` (any value). */\nexport interface VisibleWhenRule {\n /** Form control key of the source field (canonical). */\n path: string;\n value: string | '*';\n}\n\nexport interface ResolvedField {\n /** Form control name: attributeName | 'rtWellKnownName' | 'assoc:<rtRoleId with . → _>' (`associationFieldKey`). */\n key: string;\n kind: 'attribute' | 'system' | 'association';\n attributeName?: string;\n valueType?: string;\n label: string;\n help?: string;\n placeholder?: string;\n editor: EntityFormEditor;\n required: boolean;\n readOnly: ReadOnlyMode;\n width: 'full' | 'half';\n order: number;\n /** Already parsed to the form value shape. Applied in create mode only. */\n defaultValue?: unknown;\n min?: number;\n max?: number;\n pattern?: string;\n secret: boolean;\n visibleWhen?: VisibleWhenRule;\n enumOptions?: { key: number; name: string }[];\n record?: { ckRecordId: string; single: boolean; columns: { path: string; label: string }[] };\n /** `role` absent means the attribute itself holds the target rtId. */\n reference?: {\n targetCkTypeId: string;\n role?: CkAssociationRoleInfo;\n multiple: boolean;\n displayAttributes?: string[];\n /**\n * CK metadata of the display attributes on the target type (set by `EntityFormService.resolve`),\n * used to format their values (enum names, yes/no, dates). Missing when the target type could not\n * be read; the raw values are shown then.\n */\n displayAttributeInfo?: CkAttributeInfo[];\n };\n generated: boolean;\n}\n\nexport interface ResolvedSection {\n key: string;\n title: string | null;\n description?: string;\n columns: 1 | 2;\n collapsed: boolean;\n generated: boolean;\n fields: ResolvedField[];\n}\n\nexport interface ResolvedListColumn {\n field: string;\n label: string;\n width?: number;\n /**\n * Cell rendering. `icon` (AB#5623) shows a BOOLEAN column as a check / x icon with an accessible\n * name (other value types render as `text`).\n */\n display: 'text' | 'chip' | 'date' | 'mono' | 'icon';\n kind: 'attribute' | 'system';\n /**\n * CK value type of an attribute column (ENUM, BOOLEAN, DATE_TIME, ...). The list formats the\n * cells by it like the reference display does: enum key → name, boolean → yes/no (AB#5547).\n */\n valueType?: string;\n /** Options of an ENUM column (the API returns the key, e.g. `0`). */\n enumOptions?: { key: number; name: string }[];\n}\n\n/**\n * Sort order of `mm-entity-list` (AB#5623). Same shape as a Kendo `SortDescriptor`; `field` is the\n * list row field = GraphQL attribute path (camelCase attribute name or system property).\n */\nexport interface EntityListSortDescriptor {\n field: string;\n dir: 'asc' | 'desc';\n}\n\nexport interface ResolvedEntityForm {\n source: 'tenant' | 'seeded' | 'builtIn';\n formRtId?: string;\n formWellKnownName?: string;\n rtCkTypeId: string;\n formTargetCkTypeId: string;\n isAbstract: boolean;\n includeDerivedTypes: boolean;\n title: string;\n description?: string;\n category?: string;\n icon?: string;\n customComponent?: string;\n capabilities: {\n canCreate: boolean;\n canEdit: boolean;\n canDelete: boolean;\n canDuplicate: boolean;\n canExport: boolean;\n createRequiresSubtype: boolean;\n };\n singleton?: { wellKnownName?: string };\n sections: ResolvedSection[];\n listColumns: ResolvedListColumn[];\n /**\n * Initial list order from the form definition (`listDefaultSort`, canonicalised; secret\n * attributes dropped). Absent = server order (today's behaviour).\n */\n listDefaultSort?: EntityListSortDescriptor[];\n /**\n * Attribute names to read (non-secret fields plus record sub-attribute names, plus the SECRET\n * fields of {@link secretStateFields}, whose value the server never returns).\n */\n readAttributeNames: string[];\n /** attributeNames of all secret fields (never prefilled, never listed). */\n secretFields: string[];\n /**\n * The secret fields of value type SECRET (AB#5528): their state is read with the values\n * (`secretIsSet`, later `secretKeyMissing` / `secretSetAt`) and they can be cleared explicitly\n * (`clearSecretAttributes`). The other secret fields (credential-name / metadata fallback) are\n * probed for presence with a field filter and cannot be cleared.\n */\n secretStateFields?: string[];\n warnings: string[];\n}\n\n/**\n * State of one secret field (AB#5528): the shared octo-services {@link SecretState}\n * (`keyMissing` implies `isSet: false`). Kept as an alias for existing imports.\n */\nexport type EntityFormSecretFieldState = SecretState;\n\nexport interface EntityFormValueState {\n values: Record<string, unknown>;\n /** Per secret attributeName: set, or stored but unreadable (counts as present for \"required\"). */\n secretPresence: Record<string, boolean>;\n /** Per SECRET attributeName: the full state (badge \"Set · set at …\" / \"Key missing — re-enter\"). */\n secretStates?: Record<string, EntityFormSecretFieldState>;\n associations: Record<string, { rtId: string; ckTypeId: string; displayName: string }[]>;\n rtWellKnownName?: string | null;\n}\n\nexport interface EntityFormChangeSet {\n rtWellKnownName?: string;\n attributes: { attributeName: string; value: unknown }[];\n /** camelCase names of optional SECRET attributes to clear on save (edit mode only, Q8). */\n clearSecretAttributes?: string[];\n associations: {\n roleName: string;\n targets: { modOption: 'CREATE' | 'DELETE'; target: { ckTypeId: string; rtId: string } }[];\n }[];\n isEmpty: boolean;\n}\n","import { DEFAULT_SECRET_STATUS_LABELS, SecretStatusLabels } from '@meshmakers/octo-services';\n\n/**\n * UI strings of the entity form components (`mm-entity-form`, `mm-entity-list`,\n * `mm-entity-page` and their field editors).\n *\n * Hosts pass a `Partial<EntityFormsMessages>` through the `messages` input; missing keys fall\n * back to {@link DEFAULT_ENTITY_FORMS_MESSAGES}. Strings containing `{name}` placeholders are\n * filled with {@link formatEntityFormsMessage}.\n */\nexport interface EntityFormsMessages {\n // --- Buttons / actions ---\n save: string;\n cancel: string;\n delete: string;\n new: string;\n edit: string;\n duplicate: string;\n export: string;\n close: string;\n apply: string;\n refresh: string;\n back: string;\n add: string;\n remove: string;\n moveUp: string;\n moveDown: string;\n select: string;\n clear: string;\n\n // --- Secrets ---\n /** Placeholder of a secret field whose value is set on the server. */\n secretSetPlaceholder: string;\n /** Placeholder of a secret field without a value on the server. */\n secretNotSetPlaceholder: string;\n /** Badge next to a secret field label. */\n secretBadge: string;\n /** Help text explaining write-only secrets. */\n secretHelp: string;\n /** Badge of a set secret without a timestamp (legacy value). */\n secretStatusSet: string;\n /** Badge of a set secret; `{setAt}` = formatted timestamp. */\n secretStatusSetAt: string;\n /** Badge of a secret without a value. */\n secretStatusNotSet: string;\n /** Badge of a stored secret whose key is not in this environment's key ring (re-entry needed). */\n secretStatusKeyMissing: string;\n /** Badge of a required SECRET without a value (same wording as the secrets inventory). */\n secretStatusNeedsReEntry: string;\n /** Badge of a secret whose clear is staged for the next save. */\n secretStatusClearStaged: string;\n /** Button: stage clearing an optional secret. */\n secretClear: string;\n /** Button: undo a staged clear. */\n secretUndoClear: string;\n /** Note shown while a clear is staged. */\n secretClearStagedNote: string;\n /** Button: reveal the typed (unsaved) value. */\n secretShow: string;\n /** Button: mask the typed value again. */\n secretHide: string;\n /** Hint when secrets cannot be written (no key ring configured, Q17). */\n secretWritesDisabled: string;\n /**\n * Why Create is blocked: a required secret cannot be entered without a key ring (Q17).\n * `{fields}` = the field labels.\n */\n secretRequiredWritesDisabled: string;\n /** Status line of a masked multiline secret (PEM); `{lines}` = number of typed lines. */\n secretMultilineMasked: string;\n /** Placeholder of a SECRET record member whose stored value is kept when left empty. */\n secretRecordMemberKeep: string;\n /** Grid cell of a SECRET record member with a typed, unsaved value (never the value itself). */\n secretRecordMemberNewValue: string;\n\n // --- Sections ---\n /** Default title of the section holding fields that the form does not list. */\n furtherAttributes: string;\n\n // --- Confirmations ---\n /** @deprecated Deletes use the danger confirmation keys below (AB#5579); no longer shown. */\n confirmDeleteTitle: string;\n /** `{name}` = display name of the entity. @deprecated No longer shown (AB#5579). */\n confirmDeleteMessage: string;\n /** `{count}` = number of entities. @deprecated No longer shown (AB#5579). */\n confirmDeleteManyMessage: string;\n /**\n * Danger confirmation (AB#5579): title naming the entity, `{name}` = display name.\n * Optional for hosts that pass a complete message set; missing = English default.\n */\n confirmDeleteNamedTitle?: string;\n /** Danger confirmation title of a multi-delete; `{count}` = number of entities. */\n confirmDeleteManyTitle?: string;\n /** Target shown in a multi-delete confirmation; `{count}` = number of entities. */\n confirmDeleteManyTarget?: string;\n /** What a single delete loses. */\n confirmDeleteConsequence?: string;\n /** What a multi-delete loses; `{count}` = number of entities. */\n confirmDeleteManyConsequence?: string;\n /** Confirming button of a single delete (verb + object). */\n confirmDeleteConfirmText?: string;\n /** Confirming button of a multi-delete (verb + object). */\n confirmDeleteManyConfirmText?: string;\n /** Row name in the accessible names of the records editor's row buttons; `{index}` = 1-based row. */\n recordRowLabel?: string;\n unsavedChangesTitle: string;\n unsavedChangesMessage: string;\n discardChanges: string;\n keepEditing: string;\n\n // --- Notifications ---\n saveSuccess: string;\n saveError: string;\n createSuccess: string;\n deleteSuccess: string;\n deleteError: string;\n loadError: string;\n noChanges: string;\n /**\n * Warning when a host `beforeSave` hook vetoed the save without a message of its own (AB#5623).\n * Optional so that complete message objects of older hosts keep compiling.\n */\n saveVetoed?: string;\n /**\n * List cell and form field hint of a non-secret value that holds a host-listed placeholder\n * (`ENTITY_FORM_UNSET_PLACEHOLDER_VALUES`, AB#5623). Optional for older complete message objects.\n */\n notConfigured?: string;\n\n // --- Empty / not found states ---\n emptyList: string;\n emptyRecords: string;\n emptyReferences: string;\n entityNotFound: string;\n formNotFound: string;\n noFieldsToShow: string;\n loading: string;\n\n // --- Validation ---\n validationRequired: string;\n /** `{min}` = minimum value. */\n validationMin: string;\n /** `{max}` = maximum value. */\n validationMax: string;\n /** `{pattern}` = regular expression. */\n validationPattern: string;\n validationEmail: string;\n validationUrl: string;\n validationJson: string;\n validationNumber: string;\n /** `{max}` = maximum number of selected entities. */\n validationMaxItems: string;\n formInvalid: string;\n\n // --- Editors ---\n unsupportedEditor: string;\n chipsPlaceholder: string;\n referencePlaceholder: string;\n enumPlaceholder: string;\n toggleOn: string;\n toggleOff: string;\n /** Warning on a record field that cannot be saved safely (sub-attribute name collides with a secret). */\n recordReadOnlyWarning: string;\n nestedRecordReadOnly: string;\n recordRowDialogTitleAdd: string;\n recordRowDialogTitleEdit: string;\n\n // --- List / page ---\n columnWellKnownName: string;\n columnName: string;\n columnChanged: string;\n columnCreated: string;\n columnType: string;\n columnActions: string;\n copyId: string;\n copyRtId: string;\n copyCkTypeId: string;\n copyRtCkTypeId: string;\n copyRtEntityId: string;\n /** @deprecated No longer shown (AB#5623): both copy actions use {@link copiedId}. */\n copied: string;\n /** Tooltip of the Copy ID button in the form header (AB#5623). */\n copyIdTooltip: string;\n /** Notification after copying one ID (list menu and form header); `{label}` = RtId, CkTypeId, ... (AB#5623). */\n copiedId: string;\n /** Notification when the clipboard is not available (AB#5623). */\n copyFailed: string;\n searchPlaceholder: string;\n /** Header of the optional Type column of the list. */\n typeColumn: string;\n selectSubtypeTitle: string;\n createTitle: string;\n /** `{name}` = display name of the entity. */\n editTitle: string;\n viewTitle: string;\n readOnlyNotice: string;\n singletonCreateHint: string;\n}\n\n/** English defaults; hosts may override any key via the `messages` input. */\nexport const DEFAULT_ENTITY_FORMS_MESSAGES: EntityFormsMessages = {\n save: 'Save',\n cancel: 'Cancel',\n delete: 'Delete',\n new: 'New',\n edit: 'Edit',\n duplicate: 'Duplicate',\n export: 'Export',\n close: 'Close',\n apply: 'Apply',\n refresh: 'Refresh',\n back: 'Back',\n add: 'Add',\n remove: 'Remove',\n moveUp: 'Move up',\n moveDown: 'Move down',\n select: 'Select',\n clear: 'Clear',\n\n secretSetPlaceholder: 'Leave empty to keep',\n secretNotSetPlaceholder: 'Not set',\n secretBadge: 'Secret',\n secretHelp: 'Write-only. The stored value is never shown; type a new value to replace it.',\n // One set of status labels for every secret display (octo-services `formatSecretStatus`).\n secretStatusSet: DEFAULT_SECRET_STATUS_LABELS.set,\n secretStatusSetAt: DEFAULT_SECRET_STATUS_LABELS.setAt,\n secretStatusNotSet: DEFAULT_SECRET_STATUS_LABELS.notSet,\n secretStatusKeyMissing: DEFAULT_SECRET_STATUS_LABELS.keyMissing,\n secretStatusNeedsReEntry: 'Needs re-entry',\n secretStatusClearStaged: 'Will be cleared',\n secretClear: 'Clear',\n secretUndoClear: 'Undo',\n secretClearStagedNote: 'The stored value is removed when you save.',\n secretShow: 'Show',\n secretHide: 'Hide',\n secretWritesDisabled: 'Secrets cannot be changed: no encryption key ring is configured for this environment.',\n secretRequiredWritesDisabled: 'Cannot create: {fields} must be set, but secrets cannot be written without an encryption key ring.',\n secretMultilineMasked: 'Masked · {lines} line(s) entered. Use Show to check the value.',\n secretRecordMemberKeep: 'Leave empty to keep the stored value',\n secretRecordMemberNewValue: 'New value (unsaved)',\n\n furtherAttributes: 'Further attributes',\n\n confirmDeleteTitle: 'Delete entity',\n confirmDeleteMessage: 'Do you really want to delete \"{name}\"? This cannot be undone.',\n confirmDeleteManyMessage: 'Do you really want to delete {count} entities? This cannot be undone.',\n confirmDeleteNamedTitle: 'Delete {name}?',\n confirmDeleteManyTitle: 'Delete {count} entities?',\n confirmDeleteManyTarget: '{count} entities',\n confirmDeleteConsequence: 'The entity and its values are deleted. This cannot be undone.',\n confirmDeleteManyConsequence: 'The {count} entities and their values are deleted. This cannot be undone.',\n confirmDeleteConfirmText: 'Delete entity',\n confirmDeleteManyConfirmText: 'Delete entities',\n recordRowLabel: 'row {index}',\n unsavedChangesTitle: 'Unsaved changes',\n unsavedChangesMessage: 'You have unsaved changes. Do you want to discard them?',\n discardChanges: 'Discard',\n keepEditing: 'Keep editing',\n\n saveSuccess: 'Changes saved.',\n saveError: 'The changes could not be saved.',\n createSuccess: 'Entity created.',\n deleteSuccess: 'Entity deleted.',\n deleteError: 'The entity could not be deleted.',\n loadError: 'The data could not be loaded.',\n noChanges: 'There are no changes to save.',\n saveVetoed: 'The changes were not saved.',\n notConfigured: 'Not configured',\n\n emptyList: 'No entries yet.',\n emptyRecords: 'No entries.',\n emptyReferences: 'Nothing selected.',\n entityNotFound: 'The entity was not found.',\n formNotFound: 'No form is configured for this type.',\n noFieldsToShow: 'This form has no fields.',\n loading: 'Loading…',\n\n validationRequired: 'This field is required.',\n validationMin: 'The value must be at least {min}.',\n validationMax: 'The value must be at most {max}.',\n validationPattern: 'The value does not match the expected format.',\n validationEmail: 'Enter a valid email address.',\n validationUrl: 'Enter a valid URL.',\n validationJson: 'Enter valid JSON.',\n validationNumber: 'Enter a valid number.',\n validationMaxItems: 'Select at most {max} entries.',\n formInvalid: 'Please correct the highlighted fields.',\n\n unsupportedEditor: 'This value cannot be edited here.',\n chipsPlaceholder: 'Type a value and press Enter',\n referencePlaceholder: 'Search…',\n enumPlaceholder: 'Select…',\n toggleOn: 'Yes',\n toggleOff: 'No',\n recordReadOnlyWarning: 'This field is read-only here because one of its entries shares a name with a secret attribute.',\n nestedRecordReadOnly: 'Nested entries cannot be edited here.',\n recordRowDialogTitleAdd: 'Add entry',\n recordRowDialogTitleEdit: 'Edit entry',\n\n columnWellKnownName: 'Well-known name',\n columnName: 'Name',\n columnChanged: 'Changed',\n columnCreated: 'Created',\n columnType: 'Type',\n columnActions: 'Actions',\n copyId: 'Copy ID',\n copyRtId: 'RtId',\n copyCkTypeId: 'CkTypeId',\n copyRtCkTypeId: 'RtCkTypeId',\n copyRtEntityId: 'RtEntityId',\n copied: 'Copied to clipboard.',\n copyIdTooltip: 'Copy Entity ID to clipboard',\n copiedId: '{label} copied',\n copyFailed: 'Failed to copy to clipboard',\n searchPlaceholder: 'Search…',\n typeColumn: 'Type',\n selectSubtypeTitle: 'Select the type to create',\n createTitle: 'New entry',\n editTitle: 'Edit {name}',\n viewTitle: 'Details',\n readOnlyNotice: 'You can view this entry but not change it.',\n singletonCreateHint: 'This entry does not exist yet. Fill in the form to create it.',\n};\n\n/** Replaces `{key}` placeholders in a message with the given values. */\nexport function formatEntityFormsMessage(message: string, values: Record<string, string | number>): string {\n return message.replace(/\\{(\\w+)\\}/g, (match, key: string) =>\n Object.prototype.hasOwnProperty.call(values, key) ? String(values[key]) : match);\n}\n\n/** Merges host overrides over the English defaults. */\nexport function mergeEntityFormsMessages(overrides?: Partial<EntityFormsMessages> | null): EntityFormsMessages {\n return { ...DEFAULT_ENTITY_FORMS_MESSAGES, ...(overrides ?? {}) };\n}\n\n/** The secret status labels of a message set, for octo-services `formatSecretStatus`. */\nexport function secretStatusLabelsOf(messages: EntityFormsMessages): SecretStatusLabels {\n return {\n set: messages.secretStatusSet,\n setAt: messages.secretStatusSetAt,\n notSet: messages.secretStatusNotSet,\n keyMissing: messages.secretStatusKeyMissing,\n };\n}\n","import { CkAttributeInfo } from '../models/entity-form.models';\n\n/**\n * Entity system properties that a form may reference by AttributePath. They are not CK\n * attributes: `rtWellKnownName` is written through `RtEntityInput.rtWellKnownName`, the two\n * timestamps are engine-stamped and always read-only.\n */\nexport const SYSTEM_PROPERTIES: readonly string[] = ['rtWellKnownName', 'rtCreationDateTime', 'rtChangedDateTime'];\n\n/** Attributes the engine stamps; forced read-only whatever the form says. */\nexport const ENGINE_STAMPED_ATTRIBUTES: readonly string[] = [\n 'rtBlueprintSource', 'rtBlueprintLocked', 'rtBlueprintAppliedAt',\n];\n\n/**\n * Runtime state written by services and operators, never by a user (CK `ownership: RuntimeState`\n * of the System.Communication base types: deployable entity, communication entity, deployable\n * workload, adapter). The library cannot read the CK ownership marker yet (not in the schema it is\n * generated from), so this documented list stands in for it; it is the same set the Studio's\n * runtime-object forms hide. A **generated** field of one of these names (`form-default`, \"Further\n * attributes\") is read-only, so the generic editor (e.g. the Data Explorer peek) cannot overwrite\n * it. A field a form defines explicitly keeps the form's `ReadOnly` setting.\n */\nexport const RUNTIME_STATE_ATTRIBUTES: readonly string[] = [\n 'deploymentState', 'statusMessage', 'lastDeploymentError', 'lastDeploymentErrorTimestamp',\n 'communicationState', 'communicationStateTimestamp', 'configurationState', 'lastConfigurationError',\n 'lastConfigurationErrorTimestamp', 'lastSyncedSequenceNumber',\n 'lifecycleState', 'lastActivityAt', 'onDemandCapable', 'onDemandBlockingReasons',\n];\n\n/** True for a runtime-state attribute ({@link RUNTIME_STATE_ATTRIBUTES}; canonical camelCase name). */\nexport function isRuntimeStateAttribute(name: string): boolean {\n return RUNTIME_STATE_ATTRIBUTES.includes(name);\n}\n\n/** Result of matching a form AttributePath against the CK metadata of a type. */\nexport type CanonicalPath =\n | { kind: 'attribute'; name: string; attribute: CkAttributeInfo }\n | { kind: 'system'; name: string }\n | { kind: 'rtId' }\n | { kind: 'dotted'; path: string }\n | { kind: 'unknown'; path: string };\n\n/**\n * Canonicalises a form AttributePath (forms use PascalCase, the CK API camelCase):\n * system properties and attributes match case-insensitively, `rtId` is reported separately\n * (never a field), dotted paths are reported as deferred, everything else is unknown.\n */\nexport function canonicalisePath(path: string | null | undefined, attributes: readonly CkAttributeInfo[]): CanonicalPath {\n const raw = (path ?? '').trim();\n if (!raw) {\n return { kind: 'unknown', path: raw };\n }\n const lower = raw.toLowerCase();\n if (lower === 'rtid') {\n return { kind: 'rtId' };\n }\n const system = SYSTEM_PROPERTIES.find((p) => p.toLowerCase() === lower);\n if (system) {\n return { kind: 'system', name: system };\n }\n if (raw.includes('.')) {\n return { kind: 'dotted', path: raw };\n }\n const attribute = attributes.find((a) => a.attributeName.toLowerCase() === lower);\n if (attribute) {\n return { kind: 'attribute', name: attribute.attributeName, attribute };\n }\n return { kind: 'unknown', path: raw };\n}\n\n/** True when the given canonical name is an engine-stamped attribute or a system timestamp. */\nexport function isForcedReadOnly(name: string): boolean {\n return ENGINE_STAMPED_ATTRIBUTES.includes(name) || name === 'rtCreationDateTime' || name === 'rtChangedDateTime';\n}\n\n/** Converts `SftpConfiguration` / `System.Communication/SftpConfiguration` to `sftp-configuration`. */\nexport function toKebabTypeKey(rtCkTypeId: string): string {\n const name = rtCkTypeId.includes('/') ? rtCkTypeId.substring(rtCkTypeId.lastIndexOf('/') + 1) : rtCkTypeId;\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1-$2')\n .replace(/[\\s_.]+/g, '-')\n .toLowerCase();\n}\n","import { CkAssociationRoleInfo, CkAttributeInfo, CkRecordInfo, CkTypeInfo } from '../models/entity-form.models';\n\n/** Shape of one attribute row of `entityFormGetCkType` / `entityFormGetCkRecord`. */\nexport interface RawCkAttribute {\n attributeName: string;\n attributeValueType: string;\n isOptional: boolean;\n ckAttributeId?: { fullName: string } | null;\n attribute?: {\n description?: string | null;\n defaultValues?: (unknown | null)[] | null;\n metaData?: ({ key: string; value?: string | null } | null)[] | null;\n ckEnum?: { values: ({ key?: number | null; name?: string | null } | null)[] } | null;\n ckRecord?: { ckRecordId: { fullName: string } } | null;\n } | null;\n}\n\ninterface RawBaseType {\n rtCkTypeId: string;\n isAbstract?: boolean;\n baseType?: RawBaseType | null;\n}\n\ninterface RawRole {\n rtRoleId: string;\n navigationPropertyName: string;\n multiplicity: string;\n rtTargetCkTypeId: string;\n rtOriginCkTypeId: string;\n}\n\n/** Shape of one type of `entityFormGetCkType`. */\nexport interface RawCkType {\n rtCkTypeId: string;\n isAbstract: boolean;\n description?: string | null;\n ckTypeId: { fullName: string };\n baseType?: RawBaseType | null;\n attributes?: { items?: (RawCkAttribute | null)[] | null } | null;\n associations?: {\n in?: { all?: (RawRole | null)[] | null } | null;\n out?: { all?: (RawRole | null)[] | null } | null;\n } | null;\n}\n\n/** Shape of one record of `entityFormGetCkRecord`. */\nexport interface RawCkRecord {\n ckRecordId: { fullName: string };\n isAbstract?: boolean;\n attributes?: { items?: (RawCkAttribute | null)[] | null } | null;\n}\n\n/**\n * The CK attribute metaData `secret` marker: `true`, `false` (explicit opt-out of the\n * credential-name rule) or `undefined` when there is no (valid) marker.\n */\nexport function secretMetaDataMarker(metaData: readonly ({ key: string; value?: string | null } | null)[] | null | undefined): boolean | undefined {\n const marker = (metaData ?? []).find((m) => !!m && m.key?.toLowerCase() === 'secret');\n const value = (marker?.value ?? '').trim().toLowerCase();\n return value === 'true' ? true : value === 'false' ? false : undefined;\n}\n\n/** True when the CK attribute metaData marks the attribute as secret (`secret = true`). */\nexport function isSecretMetaData(metaData: readonly ({ key: string; value?: string | null } | null)[] | null | undefined): boolean {\n return (metaData ?? []).some((m) => !!m && m.key?.toLowerCase() === 'secret' && (m.value ?? '').trim().toLowerCase() === 'true');\n}\n\nexport function toCkAttributeInfo(raw: RawCkAttribute): CkAttributeInfo {\n const info: CkAttributeInfo = {\n attributeName: raw.attributeName,\n valueType: raw.attributeValueType,\n isOptional: raw.isOptional,\n description: raw.attribute?.description ?? null,\n defaultValues: (raw.attribute?.defaultValues ?? []).filter((v) => v !== null && v !== undefined),\n ckRecordId: raw.attribute?.ckRecord?.ckRecordId?.fullName ?? null,\n secret: isSecretMetaData(raw.attribute?.metaData),\n };\n const marker = secretMetaDataMarker(raw.attribute?.metaData);\n if (marker !== undefined) {\n info.metaSecret = marker;\n }\n const values = raw.attribute?.ckEnum?.values;\n if (values?.length) {\n info.enumOptions = values\n .filter((v): v is { key: number; name: string } => !!v && v.key !== null && v.key !== undefined && !!v.name)\n .map((v) => ({ key: v.key, name: v.name }));\n }\n return info;\n}\n\nfunction toRole(raw: RawRole, direction: 'out' | 'in'): CkAssociationRoleInfo {\n return {\n rtRoleId: raw.rtRoleId,\n navigationPropertyName: raw.navigationPropertyName,\n direction,\n multiplicity: raw.multiplicity === 'ONE' || raw.multiplicity === 'ZERO_OR_ONE' ? raw.multiplicity : 'N',\n // out: this type is the origin, the other end is the target; in: the other end is the origin.\n otherRtCkTypeId: direction === 'out' ? raw.rtTargetCkTypeId : raw.rtOriginCkTypeId,\n };\n}\n\n/** Maps a raw `entityFormGetCkType` item to {@link CkTypeInfo}. */\nexport function toCkTypeInfo(raw: RawCkType): CkTypeInfo {\n const ancestors: string[] = [];\n let base = raw.baseType;\n while (base) {\n ancestors.push(base.rtCkTypeId);\n base = base.baseType;\n }\n return {\n rtCkTypeId: raw.rtCkTypeId,\n ckTypeIdFullName: raw.ckTypeId.fullName,\n isAbstract: raw.isAbstract,\n ancestors,\n attributes: (raw.attributes?.items ?? []).filter((a): a is RawCkAttribute => !!a).map(toCkAttributeInfo),\n associations: [\n ...(raw.associations?.out?.all ?? []).filter((r): r is RawRole => !!r).map((r) => toRole(r, 'out')),\n ...(raw.associations?.in?.all ?? []).filter((r): r is RawRole => !!r).map((r) => toRole(r, 'in')),\n ],\n };\n}\n\n/** Maps a raw `entityFormGetCkRecord` item to {@link CkRecordInfo}. */\nexport function toCkRecordInfo(raw: RawCkRecord): CkRecordInfo {\n return {\n ckRecordId: raw.ckRecordId.fullName,\n attributes: (raw.attributes?.items ?? []).filter((a): a is RawCkAttribute => !!a).map(toCkAttributeInfo),\n };\n}\n","import {\n EntityFormColumnDef,\n EntityFormDefinition,\n EntityFormFieldDef,\n EntityFormSectionDef,\n} from '../models/entity-form.models';\n\n/** Minimal shape of an `RtEntity` row as returned by `entityFormGetEntityForms`. */\nexport interface RawRtEntityRow {\n rtId: string;\n rtWellKnownName?: string | null;\n ckTypeId?: string | null;\n attributes?: { items?: ({ attributeName?: string | null; value?: unknown } | null)[] | null } | null;\n}\n\ntype Dict = Record<string, unknown>;\n\n/**\n * Turns the attribute list of an entity (or of a record read through the generic API) into a\n * dictionary keyed by the lower-cased attribute name, so lookups are casing-agnostic.\n */\nexport function attributeListToDict(items: readonly ({ attributeName?: string | null; value?: unknown } | null)[] | null | undefined): Dict {\n const dict: Dict = {};\n for (const item of items ?? []) {\n if (item?.attributeName) {\n dict[item.attributeName.toLowerCase()] = item.value;\n }\n }\n return dict;\n}\n\n/**\n * Normalises one record value to a lower-cased dictionary. Accepts the query shape\n * `{ ckRecordId, attributes: [{ attributeName, value }] }` and, defensively, a flat\n * `{ key: value }` dictionary.\n */\nexport function recordToDict(value: unknown): Dict | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n const v = value as Dict;\n if (Array.isArray(v['attributes'])) {\n return attributeListToDict(v['attributes'] as { attributeName?: string; value?: unknown }[]);\n }\n const dict: Dict = {};\n for (const [k, val] of Object.entries(v)) {\n if (k !== 'ckRecordId' && k !== '__typename') {\n dict[k.toLowerCase()] = val;\n }\n }\n return dict;\n}\n\nconst str = (v: unknown): string | null => (typeof v === 'string' ? v : v === null || v === undefined ? null : String(v));\nconst strOrUndef = (d: Dict, k: string): string | null | undefined => (k in d ? str(d[k]) : undefined);\nconst num = (v: unknown): number | null => {\n if (v === null || v === undefined || v === '') {\n return null;\n }\n const n = typeof v === 'number' ? v : Number(v);\n return Number.isFinite(n) ? n : null;\n};\nconst numOrUndef = (d: Dict, k: string): number | null | undefined => (k in d ? num(d[k]) : undefined);\nconst bool = (v: unknown): boolean | null => {\n if (v === null || v === undefined) {\n return null;\n }\n if (typeof v === 'boolean') {\n return v;\n }\n if (typeof v === 'string') {\n return v.toLowerCase() === 'true' ? true : v.toLowerCase() === 'false' ? false : null;\n }\n return Boolean(v);\n};\nconst boolOrUndef = (d: Dict, k: string): boolean | null | undefined => (k in d ? bool(d[k]) : undefined);\n\n/** A StringArray value; a comma-separated string is accepted defensively. Absent key = `undefined`. */\nconst strListOrUndef = (d: Dict, k: string): string[] | null | undefined => {\n if (!(k in d)) {\n return undefined;\n }\n const v = d[k];\n if (v === null || v === undefined) {\n return null;\n }\n return Array.isArray(v) ? v.map((c) => String(c)) : String(v).split(',').map((c) => c.trim()).filter(Boolean);\n};\n\nfunction records(value: unknown): Dict[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.map(recordToDict).filter((d): d is Dict => d !== null);\n}\n\nfunction stripUndefined<T extends object>(o: T): T {\n for (const k of Object.keys(o) as (keyof T)[]) {\n if (o[k] === undefined) {\n delete o[k];\n }\n }\n return o;\n}\n\nfunction parseSection(d: Dict): EntityFormSectionDef | null {\n const key = str(d['key']);\n if (!key) {\n return null;\n }\n return stripUndefined({\n key,\n title: strOrUndef(d, 'title'),\n description: strOrUndef(d, 'description'),\n order: numOrUndef(d, 'order'),\n collapsed: boolOrUndef(d, 'collapsed'),\n columns: numOrUndef(d, 'columns'),\n });\n}\n\nfunction parseField(d: Dict): EntityFormFieldDef | null {\n const attributePath = str(d['attributepath']);\n if (!attributePath) {\n return null;\n }\n return stripUndefined({\n attributePath,\n sectionKey: strOrUndef(d, 'sectionkey'),\n order: numOrUndef(d, 'order'),\n label: strOrUndef(d, 'label'),\n help: strOrUndef(d, 'help'),\n placeholder: strOrUndef(d, 'placeholder'),\n editor: strOrUndef(d, 'editor'),\n readOnly: strOrUndef(d, 'readonly'),\n required: boolOrUndef(d, 'required'),\n width: strOrUndef(d, 'width'),\n default: strOrUndef(d, 'default'),\n min: numOrUndef(d, 'min'),\n max: numOrUndef(d, 'max'),\n pattern: strOrUndef(d, 'pattern'),\n secret: boolOrUndef(d, 'secret'),\n visibleWhen: strOrUndef(d, 'visiblewhen'),\n referenceCkTypeId: strOrUndef(d, 'referencecktypeid'),\n associationRoleId: strOrUndef(d, 'associationroleid'),\n recordColumns: strListOrUndef(d, 'recordcolumns'),\n hidden: boolOrUndef(d, 'hidden'),\n // System.UI 2.9.0 (AB#5547); absent on older models, so the field simply stays unset.\n referenceDisplayAttributes: strListOrUndef(d, 'referencedisplayattributes'),\n });\n}\n\nfunction parseColumn(d: Dict): EntityFormColumnDef | null {\n const attributePath = str(d['attributepath']);\n if (!attributePath) {\n return null;\n }\n return stripUndefined({\n attributePath,\n label: strOrUndef(d, 'label'),\n width: numOrUndef(d, 'width'),\n display: strOrUndef(d, 'display'),\n });\n}\n\n/**\n * Parses one `System.UI/EntityForm` row of the generic runtime API into an\n * {@link EntityFormDefinition}. Returns `null` when the row has no `TargetCkTypeId`.\n * Absent optionals stay `undefined`; explicit `null` values from the server are kept as `null`.\n */\nexport function parseEntityForm(row: RawRtEntityRow): EntityFormDefinition | null {\n const a = attributeListToDict(row.attributes?.items);\n const targetCkTypeId = str(a['targetcktypeid']);\n if (!targetCkTypeId) {\n return null;\n }\n const blueprintSource = str(a['rtblueprintsource']);\n const def: EntityFormDefinition = {\n rtId: row.rtId,\n rtWellKnownName: row.rtWellKnownName ?? null,\n isTenantForm: !blueprintSource,\n targetCkTypeId,\n includeDerivedTypes: bool(a['includederivedtypes']) === true,\n priority: num(a['priority']) ?? 0,\n name: strOrUndef(a, 'name'),\n description: strOrUndef(a, 'description'),\n category: strOrUndef(a, 'category'),\n icon: strOrUndef(a, 'icon'),\n canCreate: boolOrUndef(a, 'cancreate'),\n canEdit: boolOrUndef(a, 'canedit'),\n canDelete: boolOrUndef(a, 'candelete'),\n canDuplicate: boolOrUndef(a, 'canduplicate'),\n canExport: boolOrUndef(a, 'canexport'),\n singleton: boolOrUndef(a, 'singleton'),\n singletonWellKnownName: strOrUndef(a, 'singletonwellknownname'),\n customComponent: strOrUndef(a, 'customcomponent'),\n generateRemainingFields: boolOrUndef(a, 'generateremainingfields'),\n generatedSectionTitle: strOrUndef(a, 'generatedsectiontitle'),\n sections: records(a['sections']).map(parseSection).filter((s): s is EntityFormSectionDef => s !== null),\n fields: records(a['fields']).map(parseField).filter((f): f is EntityFormFieldDef => f !== null),\n listColumns: records(a['listcolumns']).map(parseColumn).filter((c): c is EntityFormColumnDef => c !== null),\n };\n return stripUndefined(def);\n}\n\n/** Parses every row; rows without a target type are dropped. */\nexport function parseEntityForms(rows: readonly (RawRtEntityRow | null | undefined)[] | null | undefined): EntityFormDefinition[] {\n return (rows ?? [])\n .filter((r): r is RawRtEntityRow => !!r)\n .map(parseEntityForm)\n .filter((f): f is EntityFormDefinition => f !== null);\n}\n","import { EntityFormDefinition } from '../models/entity-form.models';\n\n/**\n * Built-in copy of the seeded `form-default` (platform-services\n * `SystemUiCkModel/Blueprints/System.UI.EntityForms/seed-data/entities.yaml`, rtId\n * 670300000000000000000001), transcribed field by field.\n *\n * Used when a tenant has no applicable form at all: System.UI < 2.7.0 (no EntityForm type), the\n * forms query failed, or `form-default` was deleted. Keep it in step with the seed; a spec asserts\n * that it resolves exactly like the parsed seed entity.\n */\nexport const BUILT_IN_DEFAULT_FORM: EntityFormDefinition = {\n rtId: '',\n rtWellKnownName: 'form-default',\n isTenantForm: false,\n name: 'Default form',\n description: 'Fallback form for every entity type without a form of its own. Seeded by platform-services; create a tenant EntityForm for a type to override it.',\n targetCkTypeId: 'System/Entity',\n includeDerivedTypes: true,\n priority: 0,\n canCreate: true,\n canEdit: true,\n canDelete: true,\n canDuplicate: false,\n canExport: true,\n generateRemainingFields: true,\n generatedSectionTitle: 'Attributes',\n sections: [\n { key: 'general', title: 'General', order: 0, columns: 2 },\n {\n key: 'system',\n title: 'System',\n description: 'Blueprint provenance stamped by the engine when a blueprint seeded this entity.',\n order: 99,\n collapsed: true,\n },\n ],\n fields: [\n {\n attributePath: 'rtWellKnownName',\n sectionKey: 'general',\n order: 0,\n label: 'Well-known name',\n help: 'Stable, tenant-unique handle other entities, pipelines and the Studio use to find this entity. Cannot be changed after creation.',\n readOnly: 'afterCreate',\n },\n { attributePath: 'Name', sectionKey: 'general', order: 1, width: 'half' },\n { attributePath: 'Description', sectionKey: 'general', order: 2, editor: 'multiline' },\n {\n attributePath: 'RtBlueprintSource',\n sectionKey: 'system',\n order: 0,\n label: 'Blueprint source',\n help: 'Blueprint that seeded this entity.',\n readOnly: 'always',\n },\n {\n attributePath: 'RtBlueprintLocked',\n sectionKey: 'system',\n order: 1,\n label: 'Blueprint locked',\n help: 'Whether the blueprint still manages this entity (a re-apply overwrites it); false keeps it as user data.',\n readOnly: 'always',\n },\n {\n attributePath: 'RtBlueprintAppliedAt',\n sectionKey: 'system',\n order: 2,\n label: 'Blueprint applied at',\n help: 'When the blueprint last wrote this entity.',\n readOnly: 'always',\n },\n ],\n listColumns: [\n { attributePath: 'rtWellKnownName', label: 'Name' },\n { attributePath: 'Name' },\n { attributePath: 'rtChangedDateTime', label: 'Changed', display: 'date' },\n ],\n};\n","/**\n * Human-readable names of CK types (AB#5524): `System.Communication/EMailReceiverConfiguration-1`\n * → `E-mail receiver configuration`, `…/FinApiConfiguration` → `finAPI configuration`.\n *\n * CK types carry no display name, so a name is derived from the type name: PascalCase is split\n * into words in sentence case, and known acronyms / brand names keep their spelling.\n */\n\n/** How a known word (or word sequence) is written. */\ninterface KnownTerm {\n /** Lower-case words of the split type name, e.g. `['e', 'mail']` for `EMail`. */\n words: string[];\n text: string;\n /**\n * `acronym`: always as written (SAP, SFTP); `brand`: always as written, even at the start\n * (finAPI, weclapp); `word`: sentence case — capitalised only at the start (E-mail / e-mail).\n */\n kind: 'acronym' | 'brand' | 'word';\n}\n\nconst KNOWN_TERMS: readonly KnownTerm[] = [\n { words: ['e', 'mail'], text: 'E-mail', kind: 'word' },\n { words: ['email'], text: 'E-mail', kind: 'word' },\n { words: ['fin', 'api'], text: 'finAPI', kind: 'brand' },\n { words: ['finapi'], text: 'finAPI', kind: 'brand' },\n { words: ['we', 'clapp'], text: 'weclapp', kind: 'brand' },\n { words: ['weclapp'], text: 'weclapp', kind: 'brand' },\n { words: ['open', 'ai'], text: 'OpenAI', kind: 'brand' },\n { words: ['openai'], text: 'OpenAI', kind: 'brand' },\n { words: ['mongo', 'db'], text: 'MongoDB', kind: 'brand' },\n { words: ['crate', 'db'], text: 'CrateDB', kind: 'brand' },\n { words: ['opc', 'ua'], text: 'OPC UA', kind: 'acronym' },\n ...['ai', 'api', 'ck', 'csv', 'eda', 'ftp', 'http', 'https', 'id', 'imap', 'json', 'llm', 'mcp', 'mqtt', 'ocr', 'opc',\n 'pdf', 'rest', 'sap', 'sftp', 'smtp', 'sql', 'ssh', 'tls', 'ui', 'uri', 'url', 'xml']\n .map((a): KnownTerm => ({ words: [a], text: a.toUpperCase(), kind: 'acronym' })),\n];\n\n/** Longest sequences first, so `Fin Api` wins over `Api`. */\nconst TERMS_BY_LENGTH = [...KNOWN_TERMS].sort((a, b) => b.words.length - a.words.length);\n\n/** `System.Communication/SftpConfiguration-1` → `SftpConfiguration` (no model, no version). */\nexport function ckTypeShortName(ckTypeId: string): string {\n const name = (ckTypeId ?? '').trim();\n return name.substring(name.lastIndexOf('/') + 1).replace(/-\\d+(\\.\\d+)*$/, '');\n}\n\n/** Splits `EMailReceiverConfiguration` / `SAPConnection` / `sftp_config` into words. */\nfunction splitWords(name: string): string[] {\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')\n .replace(/[_\\-.]+/g, ' ')\n .trim()\n .split(/\\s+/)\n .filter((w) => w.length > 0);\n}\n\n/**\n * Human-readable name of a CK type id or type name, in sentence case with known acronyms and\n * brand names (`SAP`, `SFTP`, `AI`, `EDA`, `E-mail`, `finAPI`, `weclapp`, …). Returns the input\n * when it holds no name.\n */\nexport function humanizeCkTypeName(ckTypeIdOrName: string): string {\n const words = splitWords(ckTypeShortName(ckTypeIdOrName));\n if (words.length === 0) {\n return ckTypeIdOrName ?? '';\n }\n const lower = words.map((w) => w.toLowerCase());\n const out: string[] = [];\n for (let i = 0; i < lower.length;) {\n const term = TERMS_BY_LENGTH.find((t) => t.words.every((w, k) => lower[i + k] === w));\n if (term) {\n const first = out.length === 0;\n out.push(term.kind === 'word' && !first ? term.text.toLowerCase() : term.text);\n i += term.words.length;\n continue;\n }\n // An all-caps word of the type name (SAPConnection → SAP) stays an acronym.\n const original = words[i];\n const acronym = original.length > 1 && original === original.toUpperCase() && /[A-Z]/.test(original);\n out.push(acronym ? original : out.length === 0 ? capitalise(lower[i]) : lower[i]);\n i += 1;\n }\n return out.join(' ');\n}\n\nfunction capitalise(word: string): string {\n return word.charAt(0).toUpperCase() + word.slice(1);\n}\n","import { isSecretStateObject, isSecretValueType, secretStateFromAttribute, toSecretState } from '@meshmakers/octo-services';\nimport { CkAttributeInfo, CkRecordInfo } from '../models/entity-form.models';\n\n/*\n * Pure value conversion between the generic runtime API and form controls. The rules are ported\n * from octo-ui's (non-exported) `AttributeMapperService`:\n *\n * - READ: a record comes back as `{ ckRecordId, attributes: [{ attributeName, value }] }`; the form\n * works with flat `{ camelSub: value }` dictionaries. A single RECORD is represented as an\n * array with at most one dictionary (the records editor always edits a list).\n * - WRITE: a record is sent as a flat `{ camelSub: value }` dict (NOT `{ attributes: [...] }`, which\n * the backend ignores -> ASSET1004), a record array as an array of those.\n * - Enums use the numeric key; names coming back are mapped to keys on read.\n * - DATE_TIME / DATE_TIME_OFFSET are `Date` in the form and ISO strings on the wire.\n * - An empty optional value is sent as `null`; an empty required value is omitted.\n */\n\nexport const NUMERIC_TYPES: readonly string[] = ['INT', 'INTEGER', 'INT_64', 'INTEGER_64', 'DOUBLE'];\nexport const DATE_TYPES: readonly string[] = ['DATE_TIME', 'DATE_TIME_OFFSET'];\nexport const ARRAY_TYPES: readonly string[] = ['STRING_ARRAY', 'INT_ARRAY', 'INTEGER_ARRAY'];\nexport const RECORD_TYPES: readonly string[] = ['RECORD', 'RECORD_ARRAY'];\n\nexport const isNumericType = (t?: string | null): boolean => !!t && NUMERIC_TYPES.includes(t);\nexport const isDateType = (t?: string | null): boolean => !!t && DATE_TYPES.includes(t);\nexport const isArrayType = (t?: string | null): boolean => !!t && ARRAY_TYPES.includes(t);\nexport const isRecordType = (t?: string | null): boolean => !!t && RECORD_TYPES.includes(t);\n\n/** Record infos keyed by versioned `ckRecordId` (as found in `CkAttributeInfo.ckRecordId`). */\nexport type RecordInfoMap = Record<string, CkRecordInfo>;\n\n/** Attribute metadata the mapper needs (a subset of {@link CkAttributeInfo}). */\nexport type MapperAttribute = Pick<CkAttributeInfo, 'attributeName' | 'valueType' | 'isOptional'>\n & Partial<Pick<CkAttributeInfo, 'enumOptions' | 'ckRecordId'>>;\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return !!v && typeof v === 'object' && !Array.isArray(v) && !(v instanceof Date);\n}\n\nfunction enumKey(value: unknown, options?: { key: number; name: string }[]): unknown {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n if (options?.length) {\n const found = options.find((o) => o.key === value || o.name === value\n || (typeof value === 'string' && o.name.toLowerCase() === value.toLowerCase())\n || (typeof value === 'string' && String(o.key) === value));\n if (found) {\n return found.key;\n }\n }\n const n = Number(value);\n return Number.isFinite(n) && value !== '' ? n : value;\n}\n\nfunction toDate(value: unknown): Date | null {\n if (value instanceof Date) {\n return isNaN(value.getTime()) ? null : value;\n }\n if (typeof value === 'string' || typeof value === 'number') {\n if (typeof value === 'string' && !value.trim()) {\n return null;\n }\n const d = new Date(value);\n return isNaN(d.getTime()) ? null : d;\n }\n return null;\n}\n\nfunction toPrimitiveArray(value: unknown, mode: 'number' | 'string'): (number | string)[] {\n let source: unknown = value;\n if (isPlainObject(source) && '_v' in source) {\n source = source['_v'];\n }\n if (!Array.isArray(source)) {\n return [];\n }\n return source\n .map((v) => (isPlainObject(v) && 'key' in v ? v['key'] : v))\n .filter((v) => v !== null && v !== undefined && v !== '')\n .map((v) => (mode === 'number' ? Number(v) : String(v)));\n}\n\n/** Converts a record value read from the API to a flat dict `{ camelSub: formValue }`. */\nexport function recordToFormDict(value: unknown, record?: CkRecordInfo, records?: RecordInfoMap): Record<string, unknown> {\n const dict: Record<string, unknown> = {};\n if (!isPlainObject(value)) {\n return dict;\n }\n // A SECRET member (AB#5528) arrives as `{ attributeName, value: null, secretIsSet, … }` in the\n // generic projection (or as the `{ isSet }` marker): it becomes its SecretState, never a value.\n const entries: [string, unknown][] = Array.isArray(value['attributes'])\n ? (value['attributes'] as { attributeName?: string; value?: unknown; secretIsSet?: boolean | null }[])\n .filter((a) => !!a?.attributeName)\n .map((a) => [a.attributeName as string, secretStateFromAttribute(a) ?? a.value])\n : Object.entries(value).filter(([k]) => k !== 'ckRecordId' && k !== '__typename');\n for (const [name, raw] of entries) {\n const sub = record?.attributes.find((a) => a.attributeName.toLowerCase() === name.toLowerCase());\n const key = sub?.attributeName ?? name;\n if ((sub && isSecretValueType(sub.valueType)) || isSecretStateObject(raw)) {\n dict[key] = toSecretState(isSecretStateObject(raw) ? raw : null);\n continue;\n }\n dict[key] = sub ? toFormValue(raw, sub, records) : raw;\n }\n return dict;\n}\n\n/**\n * Converts a raw API value to the form value shape of the given attribute.\n * Records/record arrays become arrays of flat dicts; unsupported types pass through unchanged.\n */\nexport function toFormValue(raw: unknown, attribute: MapperAttribute, records?: RecordInfoMap): unknown {\n const type = attribute.valueType;\n const record = attribute.ckRecordId ? records?.[attribute.ckRecordId] : undefined;\n if (type === 'RECORD') {\n if (raw === null || raw === undefined) {\n return [];\n }\n const items = Array.isArray(raw) ? raw : [raw];\n return items.slice(0, 1).map((r) => recordToFormDict(r, record, records));\n }\n if (type === 'RECORD_ARRAY') {\n return Array.isArray(raw) ? raw.map((r) => recordToFormDict(r, record, records)) : [];\n }\n if (raw === null || raw === undefined) {\n return isArrayType(type) ? [] : null;\n }\n if (type === 'ENUM') {\n return enumKey(raw, attribute.enumOptions);\n }\n if (isDateType(type)) {\n return toDate(raw);\n }\n if (type === 'STRING_ARRAY') {\n return toPrimitiveArray(raw, 'string');\n }\n if (type === 'INT_ARRAY' || type === 'INTEGER_ARRAY') {\n return toPrimitiveArray(raw, 'number');\n }\n if (isNumericType(type)) {\n const n = typeof raw === 'number' ? raw : Number(raw);\n return Number.isFinite(n) ? n : null;\n }\n if (type === 'BOOLEAN') {\n return raw === true || raw === 'true' || raw === 1;\n }\n return raw;\n}\n\n/** True when a form value is \"empty\" for the empty/optional rules. */\nexport function isEmptyFormValue(value: unknown, valueType?: string | null): boolean {\n if (value === null || value === undefined) {\n return true;\n }\n if (typeof value === 'string' && value === '') {\n return true;\n }\n if (Array.isArray(value) && value.length === 0 && (isArrayType(valueType) || isRecordType(valueType))) {\n return true;\n }\n if (valueType === 'RECORD' && isPlainObject(value) && Object.keys(value).length === 0) {\n return true;\n }\n return false;\n}\n\nfunction recordDictToWire(value: unknown, record?: CkRecordInfo, records?: RecordInfoMap): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n if (!isPlainObject(value)) {\n return result;\n }\n for (const [key, subValue] of Object.entries(value)) {\n if (!key) {\n continue;\n }\n const sub = record?.attributes.find((a) => a.attributeName === key);\n // SECRET member (handover §2): only a typed, non-empty string is sent; otherwise the member is\n // omitted and the server carries the stored value over from the element with the same record key.\n if ((sub && isSecretValueType(sub.valueType)) || isSecretStateObject(subValue)) {\n if (typeof subValue === 'string' && subValue.length > 0) {\n result[key] = subValue;\n }\n continue;\n }\n if (!sub) {\n // Pass-through without metadata (keeps explicit nulls), as AttributeMapperService does.\n result[key] = subValue;\n continue;\n }\n // Record sub-attributes count as optional (CK reports isOptional:false for every record\n // attribute; the server still enforces mandatory ones).\n const mapped = toWireValue(subValue, { ...sub, isOptional: true }, records);\n if (mapped.include) {\n result[key] = mapped.value;\n }\n }\n return result;\n}\n\n/**\n * Converts a form value to the mutation wire value.\n * `include: false` means \"omit the attribute\" (empty value of a required attribute).\n */\nexport function toWireValue(value: unknown, attribute: MapperAttribute, records?: RecordInfoMap): { include: boolean; value: unknown } {\n const type = attribute.valueType;\n const record = attribute.ckRecordId ? records?.[attribute.ckRecordId] : undefined;\n if (isEmptyFormValue(value, type)) {\n return attribute.isOptional ? { include: true, value: null } : { include: false, value: undefined };\n }\n switch (type) {\n case 'RECORD': {\n const first = Array.isArray(value) ? value[0] : value;\n const dict = recordDictToWire(first, record, records);\n if (Object.keys(dict).length === 0) {\n return attribute.isOptional ? { include: true, value: null } : { include: false, value: undefined };\n }\n return { include: true, value: dict };\n }\n case 'RECORD_ARRAY':\n return { include: true, value: (Array.isArray(value) ? value : [value]).map((r) => recordDictToWire(r, record, records)) };\n case 'ENUM':\n return { include: true, value: enumKey(value, attribute.enumOptions) };\n case 'DATE_TIME':\n case 'DATE_TIME_OFFSET': {\n const d = toDate(value);\n if (!d) {\n return attribute.isOptional ? { include: true, value: null } : { include: false, value: undefined };\n }\n return { include: true, value: d.toISOString() };\n }\n case 'STRING_ARRAY': {\n const arr = toPrimitiveArray(value, 'string');\n return arr.length ? { include: true, value: arr } : (attribute.isOptional ? { include: true, value: null } : { include: false, value: undefined });\n }\n case 'INT_ARRAY':\n case 'INTEGER_ARRAY': {\n const arr = toPrimitiveArray(value, 'number');\n return arr.length ? { include: true, value: arr } : (attribute.isOptional ? { include: true, value: null } : { include: false, value: undefined });\n }\n default:\n if (isNumericType(type) && typeof value === 'string') {\n const n = Number(value);\n return { include: true, value: Number.isFinite(n) ? n : value };\n }\n return { include: true, value };\n }\n}\n\n/**\n * Maps form values to `RtEntityAttributeInput[]` for the given attributes (in the given order).\n * Values whose key is absent from `values` are skipped.\n */\nexport function toAttributeInputs(\n values: Record<string, unknown>,\n attributes: readonly MapperAttribute[],\n records?: RecordInfoMap,\n): { attributeName: string; value: unknown }[] {\n const result: { attributeName: string; value: unknown }[] = [];\n for (const attribute of attributes) {\n if (!Object.prototype.hasOwnProperty.call(values, attribute.attributeName)) {\n continue;\n }\n const mapped = toWireValue(values[attribute.attributeName], attribute, records);\n if (mapped.include) {\n result.push({ attributeName: attribute.attributeName, value: mapped.value });\n }\n }\n return result;\n}\n\n/**\n * Parses a form `Default` string (or a CK `defaultValues[0]`) into the form value shape:\n * Int via parseInt, Double via parseFloat, Boolean via 'true'/'false', ENUM by name or key,\n * DateTime as ISO -> Date, arrays as a JSON array or a comma list. Returns `undefined` when the\n * input is empty or cannot be parsed.\n */\nexport function parseDefault(raw: unknown, attribute: MapperAttribute): unknown {\n if (raw === null || raw === undefined || (typeof raw === 'string' && raw.trim() === '')) {\n return undefined;\n }\n const type = attribute.valueType;\n const s = typeof raw === 'string' ? raw.trim() : raw;\n if (type === 'INT' || type === 'INTEGER' || type === 'INT_64' || type === 'INTEGER_64') {\n const n = typeof s === 'number' ? Math.trunc(s) : parseInt(String(s), 10);\n return Number.isNaN(n) ? undefined : n;\n }\n if (type === 'DOUBLE') {\n const n = typeof s === 'number' ? s : parseFloat(String(s));\n return Number.isNaN(n) ? undefined : n;\n }\n if (type === 'BOOLEAN') {\n if (s === true || s === false) {\n return s;\n }\n const lower = String(s).toLowerCase();\n return lower === 'true' ? true : lower === 'false' ? false : undefined;\n }\n if (type === 'ENUM') {\n const options = attribute.enumOptions ?? [];\n const found = options.find((o) => String(o.key) === String(s) || o.name.toLowerCase() === String(s).toLowerCase());\n if (found) {\n return found.key;\n }\n const n = Number(s);\n return options.length === 0 && Number.isFinite(n) ? n : undefined;\n }\n if (isDateType(type)) {\n return toDate(s) ?? undefined;\n }\n if (isArrayType(type)) {\n let arr: unknown[];\n if (Array.isArray(s)) {\n arr = s;\n } else {\n const text = String(s);\n try {\n const parsed: unknown = JSON.parse(text);\n arr = Array.isArray(parsed) ? parsed : [parsed];\n } catch {\n arr = text.split(',').map((p) => p.trim()).filter(Boolean);\n }\n }\n return type === 'STRING_ARRAY' ? arr.map((v) => String(v)) : arr.map((v) => Number(v)).filter((n) => Number.isFinite(n));\n }\n if (type === 'STRING') {\n return String(s);\n }\n return undefined;\n}\n\n/** Deep equality for form values (Dates by time, arrays/objects structurally). */\nexport function formValuesEqual(a: unknown, b: unknown): boolean {\n if (a === b) {\n return true;\n }\n const isEmpty = (v: unknown): boolean => v === null || v === undefined || v === '' || (Array.isArray(v) && v.length === 0);\n const emptyA = isEmpty(a);\n const emptyB = isEmpty(b);\n if (emptyA && emptyB) {\n return true;\n }\n if (a instanceof Date || b instanceof Date) {\n const da = toDate(a);\n const db = toDate(b);\n return !!da && !!db && da.getTime() === db.getTime();\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((v, i) => formValuesEqual(v, b[i]));\n }\n if (isPlainObject(a) && isPlainObject(b)) {\n const keys = new Set([...Object.keys(a), ...Object.keys(b)]);\n for (const k of keys) {\n if (!formValuesEqual(a[k], b[k])) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n","import { CkAttributeInfo, VisibleWhenRule } from '../models/entity-form.models';\nimport { canonicalisePath } from './attribute-path';\n\n/**\n * Parses a `VisibleWhen` expression (`Path=value` or `Path=*`). The expression is split at the\n * FIRST `=`, so values may contain `=`. The path is canonicalised against the type's attributes\n * (system properties allowed); returns `null` for an empty, malformed or unresolvable expression.\n */\nexport function parseVisibleWhen(expression: string | null | undefined, attributes: readonly CkAttributeInfo[]): VisibleWhenRule | null {\n const raw = (expression ?? '').trim();\n const eq = raw.indexOf('=');\n if (eq <= 0) {\n return null;\n }\n const canonical = canonicalisePath(raw.substring(0, eq).trim(), attributes);\n if (canonical.kind !== 'attribute' && canonical.kind !== 'system') {\n return null;\n }\n const value = raw.substring(eq + 1).trim();\n return { path: canonical.name, value: value === '*' ? '*' : value };\n}\n\n/** True when a form value counts as \"has a value\" (`Path=*`). */\nexport function hasValue(value: unknown): boolean {\n if (value === null || value === undefined) {\n return false;\n }\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n return true;\n}\n\n/**\n * Evaluates a rule against the current form values.\n *\n * - `*`: visible when the source has a value, or (for a secret source) when the server reports the\n * secret as set (`secretPresence[path] === true`).\n * - Booleans compare against `true`/`false` (case-insensitive).\n * - Enums compare against the key or the name (case-insensitive) using `enumOptions`.\n * - Everything else compares the string form (case-sensitive).\n */\nexport function isVisible(\n rule: VisibleWhenRule | undefined | null,\n values: Record<string, unknown>,\n secretPresence: Record<string, boolean> = {},\n enumOptions?: { key: number; name: string }[],\n): boolean {\n if (!rule) {\n return true;\n }\n const value = values[rule.path];\n if (rule.value === '*') {\n return hasValue(value) || secretPresence[rule.path] === true;\n }\n if (value === null || value === undefined) {\n return false;\n }\n if (typeof value === 'boolean') {\n return String(value) === rule.value.toLowerCase();\n }\n if (enumOptions?.length) {\n const target = enumOptions.find((o) => String(o.key) === rule.value || o.name.toLowerCase() === rule.value.toLowerCase());\n const current = enumOptions.find((o) => o.key === Number(value) || (typeof value === 'string' && o.name.toLowerCase() === value.toLowerCase()));\n if (target && current) {\n return target.key === current.key;\n }\n }\n return String(value) === rule.value;\n}\n","import {\n CkAssociationRoleInfo,\n CkAttributeInfo,\n CkRecordInfo,\n CkTypeInfo,\n EntityFormDefinition,\n EntityFormEditor,\n EntityFormFieldDef,\n ReadOnlyMode,\n ResolvedEntityForm,\n ResolvedField,\n EntityListSortDescriptor,\n ResolvedListColumn,\n ResolvedSection,\n} from '../models/entity-form.models';\nimport { isSecretAttributeCandidate, isSecretValueType } from '@meshmakers/octo-services';\nimport { canonicalisePath, isForcedReadOnly, isRuntimeStateAttribute } from './attribute-path';\nimport { BUILT_IN_DEFAULT_FORM } from './built-in-default-form';\nimport { humanizeCkTypeName } from './ck-type-name';\nimport { parseDefault, isArrayType, isDateType, isNumericType, isRecordType } from './entity-form-value-mapper';\nimport { parseVisibleWhen } from './visible-when';\n\n/** Section key of the implicit section used when a form declares no sections. */\nexport const DEFAULT_SECTION_KEY = '__default';\n/** Section key of the section holding generated (unmentioned) attributes. */\nexport const GENERATED_SECTION_KEY = '__generated';\n/** Default title of the generated section. */\nexport const DEFAULT_GENERATED_SECTION_TITLE = 'Further attributes';\n\nexport type EntityFormSource = 'tenant' | 'seeded';\n\nexport interface ResolveEntityFormOptions {\n /** Record metadata keyed by versioned ckRecordId (CkAttributeInfo.ckRecordId). */\n records?: Record<string, CkRecordInfo>;\n}\n\nconst TEXT_LIKE_EDITORS: readonly EntityFormEditor[] = ['text', 'multiline', 'password', 'url', 'email', 'json', 'yaml', 'cron'];\nconst PATTERN_EDITORS: readonly EntityFormEditor[] = ['text', 'multiline', 'password', 'url', 'email'];\nconst KNOWN_EDITORS: readonly EntityFormEditor[] = [\n 'text', 'multiline', 'password', 'number', 'toggle', 'enum', 'datetime', 'url', 'email', 'json', 'yaml',\n 'cron', 'chips', 'reference', 'records', 'unsupported',\n];\nconst SCALAR_LIST_TYPES: readonly string[] = ['STRING', 'INT', 'INTEGER', 'INT_64', 'INTEGER_64', 'DOUBLE', 'BOOLEAN', 'ENUM', 'DATE_TIME', 'DATE_TIME_OFFSET'];\n\n/**\n * Secret decision of an attribute (AB#5522 D5, AB#5542) — the shared octo-services rule\n * `isSecretAttributeCandidate` with one precedence everywhere:\n * 1. an explicit form decision (`Secret: true|false`; editor `password` counts as `true`),\n * 2. the CK metaData marker (`secret: true|false` — `false` opts out of the name rule),\n * 3. the credential-name rule for TEXTUAL attributes only (suffixes password, passphrase, secret,\n * secretKey, privateKey, apiKey, token, connectionString, credential(s), encryptedValue), so\n * `isSecret: BOOLEAN` or a `credentials` record are never secrets by name.\n * 0. Before all of these: the SECRET value type (AB#5528) is always secret — a form cannot opt\n * it out (`Secret: false` is ignored with a warning).\n * The marker and the name rule remain the fallback for non-SECRET attributes (models that have not\n * switched their credentials to SECRET yet).\n */\nfunction decideSecret(attribute: CkAttributeInfo, formDecision?: boolean | null): boolean {\n const metaSecret = attribute.metaSecret ?? (attribute.secret ? true : undefined);\n return isSecretAttributeCandidate({\n attributeName: attribute.attributeName,\n attributeValueType: attribute.valueType,\n secret: formDecision ?? metaSecret,\n });\n}\n\n/** True when a CK attribute is secret by metaData or by the name heuristic (no form decision). */\nexport function isSecretAttribute(attribute: CkAttributeInfo): boolean {\n return decideSecret(attribute);\n}\n\nconst sameId = (a: string | null | undefined, b: string | null | undefined): boolean =>\n !!a && !!b && a.toLowerCase() === b.toLowerCase();\n\n/** `maxConcurrentConnections` -> `Max concurrent connections`; `SftpConfiguration` -> `Sftp configuration`. */\nexport function humanize(name: string): string {\n const spaced = name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')\n .replace(/[_-]+/g, ' ')\n .trim()\n .toLowerCase();\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n}\n\n\n// ─── Picking ────────────────────────────────────────────────────────────────────────\n\nfunction compareCandidates(a: EntityFormDefinition, b: EntityFormDefinition): number {\n if (a.isTenantForm !== b.isTenantForm) {\n return a.isTenantForm ? -1 : 1;\n }\n const pa = a.priority ?? 0;\n const pb = b.priority ?? 0;\n if (pa !== pb) {\n return pb - pa;\n }\n // Deterministic final tie-break (plan addition): rtWellKnownName, then rtId, ascending.\n const ka = a.rtWellKnownName || a.rtId || '';\n const kb = b.rtWellKnownName || b.rtId || '';\n if (ka !== kb) {\n return ka < kb ? -1 : 1;\n }\n return (a.rtId || '') < (b.rtId || '') ? -1 : (a.rtId || '') > (b.rtId || '') ? 1 : 0;\n}\n\n/**\n * Picks the form for a type. Exact-target forms win; otherwise the nearest ancestor that has\n * forms with `includeDerivedTypes` supplies the candidates. Candidates are ordered tenant before\n * seeded, then priority descending, then rtWellKnownName/rtId ascending. Forms are never merged.\n */\nexport function pickEntityForm(\n type: CkTypeInfo,\n forms: readonly EntityFormDefinition[],\n): { form: EntityFormDefinition; source: EntityFormSource } | null {\n let candidates = forms.filter((f) => sameId(f.targetCkTypeId, type.rtCkTypeId));\n if (candidates.length === 0) {\n for (const ancestor of type.ancestors) {\n const atAncestor = forms.filter((f) => f.includeDerivedTypes === true && sameId(f.targetCkTypeId, ancestor));\n if (atAncestor.length > 0) {\n candidates = atAncestor;\n break;\n }\n }\n }\n if (candidates.length === 0) {\n return null;\n }\n const form = [...candidates].sort(compareCandidates)[0];\n return { form, source: form.isTenantForm ? 'tenant' : 'seeded' };\n}\n\n// ─── Field rules ─────────────────────────────────────────────────────────────────────\n\n/** Editor chosen when the form says `auto`, nothing, or something unknown. */\nexport function autoEditorFor(valueType: string | null | undefined): EntityFormEditor {\n switch (valueType) {\n case 'STRING':\n return 'text';\n case 'SECRET':\n // SECRET value type (AB#5528): a write-only secret field (badge, show toggle, clear).\n return 'password';\n case 'INT':\n case 'INTEGER':\n case 'INT_64':\n case 'INTEGER_64':\n case 'DOUBLE':\n return 'number';\n case 'BOOLEAN':\n return 'toggle';\n case 'DATE_TIME':\n case 'DATE_TIME_OFFSET':\n return 'datetime';\n case 'ENUM':\n return 'enum';\n case 'STRING_ARRAY':\n case 'INT_ARRAY':\n case 'INTEGER_ARRAY':\n return 'chips';\n case 'RECORD':\n case 'RECORD_ARRAY':\n return 'records';\n default:\n return 'unsupported';\n }\n}\n\n/** True when an explicit editor can edit the given value type. */\nexport function isEditorCompatible(editor: EntityFormEditor, valueType: string | null | undefined): boolean {\n if (editor === 'unsupported') {\n return true;\n }\n if (isSecretValueType(valueType)) {\n // A SECRET is always write-only text: single line (`password`) or multiline (PEM keys, Q10).\n return editor === 'password' || editor === 'multiline';\n }\n if (TEXT_LIKE_EDITORS.includes(editor)) {\n return valueType === 'STRING';\n }\n switch (editor) {\n case 'number':\n return isNumericType(valueType);\n case 'toggle':\n return valueType === 'BOOLEAN';\n case 'enum':\n return valueType === 'ENUM';\n case 'datetime':\n return isDateType(valueType);\n case 'records':\n return isRecordType(valueType);\n case 'chips':\n return isArrayType(valueType);\n case 'reference':\n return valueType === 'STRING';\n default:\n return false;\n }\n}\n\nfunction parseReadOnly(value: string | null | undefined): ReadOnlyMode {\n const v = (value ?? '').trim().toLowerCase();\n if (v === 'always') {\n return 'always';\n }\n if (v === 'aftercreate') {\n return 'afterCreate';\n }\n return 'never';\n}\n\nfunction resolveEditor(def: EntityFormFieldDef | null, attribute: CkAttributeInfo, warnings: string[]): EntityFormEditor {\n const auto = autoEditorFor(attribute.valueType);\n const raw = (def?.editor ?? '').trim().toLowerCase();\n if (!raw || raw === 'auto') {\n return auto;\n }\n const explicit = KNOWN_EDITORS.find((e) => e === raw);\n if (!explicit) {\n return auto;\n }\n if (!isEditorCompatible(explicit, attribute.valueType)) {\n warnings.push(`Field '${def?.attributePath}': editor '${explicit}' is not compatible with ${attribute.valueType}; using '${auto}'.`);\n return auto;\n }\n return explicit;\n}\n\nfunction recordColumns(attribute: CkAttributeInfo, def: EntityFormFieldDef | null, records?: Record<string, CkRecordInfo>): { path: string; label: string }[] {\n const record = attribute.ckRecordId ? records?.[attribute.ckRecordId] : undefined;\n if (def?.recordColumns?.length) {\n return def.recordColumns\n .map((c) => {\n const sub = record?.attributes.find((a) => a.attributeName.toLowerCase() === c.toLowerCase());\n if (record && !sub) {\n return null;\n }\n const path = sub?.attributeName ?? c.charAt(0).toLowerCase() + c.slice(1);\n return { path, label: humanize(path) };\n })\n .filter((c): c is { path: string; label: string } => c !== null);\n }\n return (record?.attributes ?? [])\n .filter((a) => SCALAR_LIST_TYPES.includes(a.valueType) && !isSecretAttribute(a))\n .slice(0, 4)\n .map((a) => ({ path: a.attributeName, label: humanize(a.attributeName) }));\n}\n\nfunction buildAttributeField(\n attribute: CkAttributeInfo,\n def: EntityFormFieldDef | null,\n generated: boolean,\n type: CkTypeInfo,\n warnings: string[],\n records?: Record<string, CkRecordInfo>,\n): ResolvedField {\n let editor = resolveEditor(def, attribute, warnings);\n const explicitPassword = (def?.editor ?? '').trim().toLowerCase() === 'password';\n // A `password` editor always means secret (it cannot be opted out of with Secret: false).\n const formDecision = def?.secret === true || explicitPassword ? true : def?.secret === false ? false : undefined;\n const secret = decideSecret(attribute, formDecision);\n if (formDecision === false && isSecretValueType(attribute.valueType)) {\n warnings.push(`Field '${def?.attributePath}': Secret: false is ignored for a SECRET attribute.`);\n }\n let readOnly = parseReadOnly(def?.readOnly);\n if (isForcedReadOnly(attribute.attributeName) || editor === 'unsupported') {\n readOnly = 'always';\n }\n // Generated fields never edit runtime state (form-default in the Data Explorer peek).\n if (generated && isRuntimeStateAttribute(attribute.attributeName)) {\n readOnly = 'always';\n }\n const numeric = isNumericType(attribute.valueType);\n const field: ResolvedField = {\n key: attribute.attributeName,\n kind: 'attribute',\n attributeName: attribute.attributeName,\n valueType: attribute.valueType,\n label: def?.label || humanize(attribute.attributeName),\n editor,\n required: !attribute.isOptional || def?.required === true,\n readOnly,\n width: 'full',\n order: 0,\n secret,\n generated,\n };\n const help = def?.help ?? (generated ? attribute.description ?? undefined : undefined);\n if (help) {\n field.help = help;\n }\n if (def?.placeholder) {\n field.placeholder = def.placeholder;\n }\n if (numeric && def?.min !== null && def?.min !== undefined) {\n field.min = def.min;\n }\n if (numeric && def?.max !== null && def?.max !== undefined) {\n field.max = def.max;\n }\n if (def?.pattern && PATTERN_EDITORS.includes(editor)) {\n field.pattern = def.pattern;\n }\n const defaultValue = def?.default !== null && def?.default !== undefined && def.default !== ''\n ? parseDefault(def.default, attribute)\n : parseDefault(attribute.defaultValues?.[0], attribute);\n if (defaultValue !== undefined) {\n field.defaultValue = defaultValue;\n }\n if (attribute.enumOptions?.length) {\n field.enumOptions = attribute.enumOptions;\n }\n if (isRecordType(attribute.valueType) && attribute.ckRecordId) {\n field.record = {\n ckRecordId: attribute.ckRecordId,\n single: attribute.valueType === 'RECORD',\n columns: recordColumns(attribute, def, records),\n };\n }\n if (editor === 'reference') {\n // Attribute-held reference: the STRING attribute stores the target rtId (single).\n const target = def?.referenceCkTypeId;\n if (target) {\n field.reference = { targetCkTypeId: target, multiple: false, ...displayAttributesOf(def) };\n } else {\n warnings.push(`Field '${def?.attributePath}': editor 'reference' needs ReferenceCkTypeId or AssociationRoleId; using text.`);\n editor = 'text';\n field.editor = editor;\n }\n }\n if (def?.visibleWhen) {\n const rule = parseVisibleWhen(def.visibleWhen, type.attributes);\n if (rule) {\n field.visibleWhen = rule;\n } else {\n warnings.push(`Field '${def.attributePath}': VisibleWhen '${def.visibleWhen}' cannot be resolved; rule dropped.`);\n }\n }\n return field;\n}\n\nfunction buildSystemField(name: string, def: EntityFormFieldDef, type: CkTypeInfo, warnings: string[]): ResolvedField {\n const isDate = name !== 'rtWellKnownName';\n const field: ResolvedField = {\n key: name,\n kind: 'system',\n valueType: isDate ? 'DATE_TIME' : 'STRING',\n label: def.label || (name === 'rtWellKnownName' ? 'Well-known name' : name === 'rtCreationDateTime' ? 'Created' : 'Changed'),\n editor: isDate ? 'datetime' : 'text',\n required: def.required === true,\n readOnly: isDate ? 'always' : parseReadOnly(def.readOnly),\n width: 'full',\n order: 0,\n secret: false,\n generated: false,\n };\n if (def.help) {\n field.help = def.help;\n }\n if (def.placeholder) {\n field.placeholder = def.placeholder;\n }\n if (!isDate && def.pattern) {\n field.pattern = def.pattern;\n }\n if (!isDate && def.default) {\n field.defaultValue = def.default;\n }\n if (def.visibleWhen) {\n const rule = parseVisibleWhen(def.visibleWhen, type.attributes);\n if (rule) {\n field.visibleWhen = rule;\n } else {\n warnings.push(`Field '${def.attributePath}': VisibleWhen '${def.visibleWhen}' cannot be resolved; rule dropped.`);\n }\n }\n return field;\n}\n\nfunction displayAttributesOf(def: EntityFormFieldDef | undefined | null): { displayAttributes?: string[] } {\n const names = (def?.referenceDisplayAttributes ?? []).map((n) => n.trim()).filter((n) => !!n);\n return names.length ? { displayAttributes: names } : {};\n}\n\n/**\n * Form control key of an association field: `assoc:<rtRoleId>` with `.` replaced by `_` —\n * Angular FormGroup keys must not contain `.` (\"FormGroup keys cannot include '.'\" for role ids\n * such as `System.Communication/Manages`, visual check 2026-10-06). The key is only an id; the\n * role itself travels on `ResolvedField.association`.\n */\nexport function associationFieldKey(rtRoleId: string): string {\n return `assoc:${rtRoleId.replace(/\\./g, '_')}`;\n}\n\nfunction findRole(type: CkTypeInfo, roleId: string): CkAssociationRoleInfo | undefined {\n const matches = type.associations.filter((r) => sameId(r.rtRoleId, roleId));\n return matches.find((r) => r.direction === 'out') ?? matches[0];\n}\n\nfunction buildAssociationField(role: CkAssociationRoleInfo, def: EntityFormFieldDef, type: CkTypeInfo, warnings: string[]): ResolvedField {\n const field: ResolvedField = {\n key: associationFieldKey(role.rtRoleId),\n kind: 'association',\n label: def.label || humanize(role.navigationPropertyName),\n editor: 'reference',\n required: def.required === true,\n readOnly: parseReadOnly(def.readOnly),\n width: 'full',\n order: 0,\n secret: false,\n generated: false,\n reference: {\n targetCkTypeId: def.referenceCkTypeId || role.otherRtCkTypeId,\n role,\n multiple: role.multiplicity === 'N',\n ...displayAttributesOf(def),\n },\n };\n if (def.help) {\n field.help = def.help;\n }\n if (def.placeholder) {\n field.placeholder = def.placeholder;\n }\n if (def.visibleWhen) {\n const rule = parseVisibleWhen(def.visibleWhen, type.attributes);\n if (rule) {\n field.visibleWhen = rule;\n } else {\n warnings.push(`Field '${def.attributePath}': VisibleWhen '${def.visibleWhen}' cannot be resolved; rule dropped.`);\n }\n }\n return field;\n}\n\n/** Sort by `order` ascending; absent orders after explicit ones, stable in definition order. */\nfunction sortByOrder<T>(items: readonly T[], order: (item: T) => number | null | undefined): T[] {\n return items\n .map((item, index) => ({ item, index, order: order(item) }))\n .sort((a, b) => {\n const ha = a.order !== null && a.order !== undefined;\n const hb = b.order !== null && b.order !== undefined;\n if (ha && hb && a.order !== b.order) {\n return (a.order as number) - (b.order as number);\n }\n if (ha !== hb) {\n return ha ? -1 : 1;\n }\n return a.index - b.index;\n })\n .map((x) => x.item);\n}\n\n// ─── Read set ────────────────────────────────────────────────────────────────────────\n\n/** Record sub-attribute names (nested records included) with every value type each name has. */\nfunction collectRecordSubNames(ckRecordId: string, records: Record<string, CkRecordInfo> | undefined, into: Map<string, Set<string>>, seen: Set<string>): void {\n if (seen.has(ckRecordId)) {\n return;\n }\n seen.add(ckRecordId);\n const record = records?.[ckRecordId];\n for (const sub of record?.attributes ?? []) {\n const types = into.get(sub.attributeName) ?? new Set<string>();\n types.add(sub.valueType ?? '');\n into.set(sub.attributeName, types);\n if (isRecordType(sub.valueType) && sub.ckRecordId) {\n collectRecordSubNames(sub.ckRecordId, records, into, seen);\n }\n }\n}\n\n// ─── List columns ────────────────────────────────────────────────────────────────────\n\nconst SYSTEM_COLUMN_LABELS: Record<string, string> = {\n rtWellKnownName: 'Well-known name',\n rtCreationDateTime: 'Created',\n rtChangedDateTime: 'Changed',\n};\n\nfunction resolveListColumns(form: EntityFormDefinition, type: CkTypeInfo, secretNames: Set<string>): ResolvedListColumn[] {\n const columns: ResolvedListColumn[] = [];\n const seen = new Set<string>();\n for (const def of form.listColumns) {\n const c = canonicalisePath(def.attributePath, type.attributes);\n let column: ResolvedListColumn | null = null;\n if (c.kind === 'system') {\n column = { field: c.name, label: def.label || SYSTEM_COLUMN_LABELS[c.name], kind: 'system', display: 'text' };\n column.display = normaliseDisplay(def.display, c.name === 'rtWellKnownName' ? 'STRING' : 'DATE_TIME');\n } else if (c.kind === 'attribute' && !secretNames.has(c.name) && !isSecretAttribute(c.attribute) && !isRecordType(c.attribute.valueType)) {\n column = { field: c.name, label: def.label || humanize(c.name), kind: 'attribute', display: normaliseDisplay(def.display, c.attribute.valueType), ...listColumnType(c.attribute) };\n }\n if (column && !seen.has(column.field)) {\n if (def.width !== null && def.width !== undefined) {\n column.width = def.width;\n }\n seen.add(column.field);\n columns.push(column);\n }\n }\n if (columns.length > 0) {\n return columns;\n }\n const derived: ResolvedListColumn[] = [{ field: 'rtWellKnownName', label: SYSTEM_COLUMN_LABELS['rtWellKnownName'], kind: 'system', display: 'text' }];\n const name = type.attributes.find((a) => a.attributeName === 'name');\n if (name && !secretNames.has('name') && !isSecretAttribute(name)) {\n derived.push({ field: 'name', label: 'Name', kind: 'attribute', display: 'text' });\n }\n derived.push({ field: 'rtChangedDateTime', label: SYSTEM_COLUMN_LABELS['rtChangedDateTime'], kind: 'system', display: 'date' });\n type.attributes\n .filter((a) => a.attributeName !== 'name' && !isSecretAttribute(a) && !secretNames.has(a.attributeName)\n && !isForcedReadOnly(a.attributeName) && SCALAR_LIST_TYPES.includes(a.valueType))\n .slice(0, 3)\n .forEach((a) => derived.push({ field: a.attributeName, label: humanize(a.attributeName), kind: 'attribute', display: normaliseDisplay(null, a.valueType), ...listColumnType(a) }));\n return derived;\n}\n\n/**\n * The default list order of a form (AB#5623): `listDefaultSort` canonicalised against the type.\n * Unknown paths, secrets and record attributes are dropped (with a warning); `rtId` sorts by id.\n */\nexport function resolveListDefaultSort(\n form: EntityFormDefinition,\n type: CkTypeInfo,\n secretNames: ReadonlySet<string>,\n warnings: string[] = [],\n): EntityListSortDescriptor[] {\n const result: EntityListSortDescriptor[] = [];\n for (const def of form.listDefaultSort ?? []) {\n const dir: 'asc' | 'desc' = def.direction === 'desc' ? 'desc' : 'asc';\n const c = canonicalisePath(def.attributePath, type.attributes);\n let field: string | null = null;\n if (c.kind === 'system') {\n field = c.name;\n } else if (c.kind === 'rtId') {\n field = 'rtId';\n } else if (c.kind === 'attribute' && !secretNames.has(c.name) && !isSecretAttribute(c.attribute) && !isRecordType(c.attribute.valueType)) {\n field = c.name;\n }\n if (!field) {\n warnings.push(`List default sort '${def.attributePath}' is not a sortable attribute of ${type.rtCkTypeId}; ignored.`);\n continue;\n }\n if (!result.some((r) => r.field === field)) {\n result.push({ field, dir });\n }\n }\n return result;\n}\n\n/** Value type (and enum options) of an attribute column, used to format its cells. */\nfunction listColumnType(attribute: CkAttributeInfo): Pick<ResolvedListColumn, 'valueType' | 'enumOptions'> {\n return {\n valueType: attribute.valueType,\n ...(attribute.enumOptions?.length ? { enumOptions: attribute.enumOptions } : {}),\n };\n}\n\nfunction normaliseDisplay(display: string | null | undefined, valueType: string): ResolvedListColumn['display'] {\n const d = (display ?? '').trim().toLowerCase();\n if (d === 'text' || d === 'chip' || d === 'date' || d === 'mono' || d === 'icon') {\n return d;\n }\n return isDateType(valueType) ? 'date' : 'text';\n}\n\n// ─── Resolve ─────────────────────────────────────────────────────────────────────────\n\n/**\n * Resolves the form for a type: picks it ({@link pickEntityForm}), falls back to\n * {@link BUILT_IN_DEFAULT_FORM} (`source: 'builtIn'`, with a warning), and matches every field\n * against the CK metadata. See plan §2.2 for the normative rules; they are implemented here\n * in the order they are listed there.\n */\nexport function resolveEntityForm(\n type: CkTypeInfo,\n forms: readonly EntityFormDefinition[],\n opts: ResolveEntityFormOptions = {},\n): ResolvedEntityForm {\n const warnings: string[] = [];\n const picked = pickEntityForm(type, forms);\n const form = picked?.form ?? BUILT_IN_DEFAULT_FORM;\n if (!picked) {\n warnings.push(`No entity form applies to '${type.rtCkTypeId}'; using the built-in default form.`);\n }\n const exact = sameId(form.targetCkTypeId, type.rtCkTypeId);\n\n // Sections\n const sortedSections = sortByOrder(form.sections, (s) => s.order);\n const sections: ResolvedSection[] = sortedSections.length\n ? sortedSections.map((s) => {\n const section: ResolvedSection = {\n key: s.key,\n title: s.title ?? s.key,\n columns: s.columns === 2 ? 2 : 1,\n collapsed: s.collapsed === true,\n generated: false,\n fields: [],\n };\n if (s.description) {\n section.description = s.description;\n }\n return section;\n })\n : [{ key: DEFAULT_SECTION_KEY, title: null, columns: 1, collapsed: false, generated: false, fields: [] }];\n\n // Fields\n const mentioned = new Set<string>();\n const placed: { section: ResolvedSection; field: ResolvedField; def: EntityFormFieldDef }[] = [];\n for (const def of form.fields) {\n let field: ResolvedField;\n const editorRaw = (def.editor ?? '').trim().toLowerCase();\n if (editorRaw === 'reference' && def.associationRoleId) {\n const role = findRole(type, def.associationRoleId);\n if (!role) {\n warnings.push(`Field '${def.attributePath}': association role '${def.associationRoleId}' not found on '${type.rtCkTypeId}'; skipped.`);\n continue;\n }\n const key = associationFieldKey(role.rtRoleId);\n if (mentioned.has(key)) {\n warnings.push(`Field '${def.attributePath}': duplicate definition; the first one wins.`);\n continue;\n }\n mentioned.add(key);\n if (def.hidden === true) {\n continue;\n }\n field = buildAssociationField(role, def, type, warnings);\n } else {\n const c = canonicalisePath(def.attributePath, type.attributes);\n if (c.kind === 'rtId' || c.kind === 'unknown') {\n continue;\n }\n if (c.kind === 'dotted') {\n warnings.push(`Field '${def.attributePath}': dotted attribute paths are not supported yet; skipped.`);\n continue;\n }\n if (mentioned.has(c.name)) {\n warnings.push(`Field '${def.attributePath}': duplicate definition; the first one wins.`);\n continue;\n }\n mentioned.add(c.name);\n if (def.hidden === true) {\n continue;\n }\n field = c.kind === 'system'\n ? buildSystemField(c.name, def, type, warnings)\n : buildAttributeField(c.attribute, def, false, type, warnings, opts.records);\n }\n const section = sections.find((s) => def.sectionKey && s.key === def.sectionKey) ?? sections[0];\n placed.push({ section, field, def });\n }\n for (const section of sections) {\n const mine = placed.filter((p) => p.section === section);\n section.fields = sortByOrder(mine, (p) => p.def.order).map((p, index) => {\n p.field.order = index;\n p.field.width = section.columns === 2 && (p.def.width ?? '').trim().toLowerCase() === 'half' ? 'half' : 'full';\n return p.field;\n });\n }\n const resultSections = sections.filter((s) => s.fields.length > 0);\n\n // Remaining fields\n if (form.generateRemainingFields !== false) {\n const generatedFields = type.attributes\n .filter((a) => !mentioned.has(a.attributeName))\n .map((a, index) => {\n const f = buildAttributeField(a, null, true, type, warnings, opts.records);\n f.order = index;\n return f;\n });\n if (generatedFields.length > 0) {\n resultSections.push({\n key: GENERATED_SECTION_KEY,\n title: form.generatedSectionTitle || DEFAULT_GENERATED_SECTION_TITLE,\n columns: 1,\n collapsed: false,\n generated: true,\n fields: generatedFields,\n });\n }\n }\n\n // Read set and secrets (D5.2)\n const allFields = resultSections.flatMap((s) => s.fields);\n const attributeFields = allFields.filter((f) => f.kind === 'attribute' && f.attributeName);\n const secretNames = new Set<string>([\n ...attributeFields.filter((f) => f.secret).map((f) => f.attributeName as string),\n // Attributes without a field: metaData > name rule (a field's own decision is above).\n ...type.attributes.filter((a) => !attributeFields.some((f) => f.attributeName === a.attributeName) && isSecretAttribute(a)).map((a) => a.attributeName),\n ]);\n const secretFields = attributeFields.filter((f) => f.secret).map((f) => f.attributeName as string);\n // SECRET-typed attributes (AB#5528) are safe to READ: the server returns value null plus\n // secretIsSet. A name that is also a heuristic (non-SECRET) secret is never read.\n const secretValueTypeNames = new Set(type.attributes.filter((a) => isSecretValueType(a.valueType)).map((a) => a.attributeName));\n const heuristicSecretNames = new Set([...secretNames].filter((n) => !secretValueTypeNames.has(n)));\n let secretStateFields = secretFields.filter((n) => secretValueTypeNames.has(n) && !heuristicSecretNames.has(n));\n const readableSecrets = new Set(secretStateFields);\n /**\n * SECRET names that must not be listed after all: the `attributeNames` filter also applies inside\n * records, so listing a top-level SECRET name would return a NON-SECRET record member of the same\n * name in clear text. Such a SECRET falls back to the presence probe (no `setAt` / key missing).\n */\n const unlistableSecrets = new Set<string>();\n const read = new Set<string>();\n for (const f of attributeFields) {\n if (f.secret) {\n continue;\n }\n read.add(f.attributeName as string);\n if (f.record) {\n const subs = new Map<string, Set<string>>();\n collectRecordSubNames(f.record.ckRecordId, opts.records, subs, new Set<string>());\n let collision = false;\n for (const [sub, subTypes] of subs) {\n // Safe only when the top-level name is a readable SECRET AND every member of that name is a\n // SECRET too (the server redacts both); otherwise keep the protective rule: not read, read-only.\n const onlySecretMembers = [...subTypes].every((t) => isSecretValueType(t));\n if (secretNames.has(sub) && !(readableSecrets.has(sub) && onlySecretMembers)) {\n collision = true;\n if (readableSecrets.has(sub)) {\n unlistableSecrets.add(sub);\n }\n } else {\n read.add(sub);\n }\n }\n if (collision) {\n f.readOnly = 'always';\n warnings.push(`Field '${f.attributeName}': a record sub-attribute shares its name with a secret attribute; the field is read-only so saving cannot erase it.`);\n }\n }\n }\n // A record sub-name must never re-add a secret top-level name.\n for (const s of secretNames) {\n read.delete(s);\n }\n secretStateFields = secretStateFields.filter((n) => !unlistableSecrets.has(n));\n // ...except SECRET attributes, which are read for their state only.\n for (const s of secretStateFields) {\n read.add(s);\n }\n\n const result: ResolvedEntityForm = {\n source: picked ? picked.source : 'builtIn',\n rtCkTypeId: type.rtCkTypeId,\n formTargetCkTypeId: form.targetCkTypeId,\n isAbstract: type.isAbstract,\n includeDerivedTypes: form.includeDerivedTypes,\n title: (exact && form.name) || humanizeCkTypeName(type.rtCkTypeId),\n capabilities: {\n canCreate: form.canCreate !== false,\n canEdit: form.canEdit !== false,\n canDelete: form.canDelete !== false,\n canDuplicate: form.canDuplicate === true,\n canExport: form.canExport === true,\n createRequiresSubtype: type.isAbstract,\n },\n sections: resultSections,\n listColumns: resolveListColumns(form, type, secretNames),\n readAttributeNames: [...read],\n secretFields,\n secretStateFields,\n warnings,\n };\n const listDefaultSort = resolveListDefaultSort(form, type, secretNames, warnings);\n if (listDefaultSort.length > 0) {\n result.listDefaultSort = listDefaultSort;\n }\n if (picked) {\n result.formRtId = form.rtId;\n if (form.rtWellKnownName) {\n result.formWellKnownName = form.rtWellKnownName;\n }\n }\n if (exact && form.description) {\n result.description = form.description;\n }\n if (form.category) {\n result.category = form.category;\n }\n if (form.icon) {\n result.icon = form.icon;\n }\n if (form.customComponent) {\n result.customComponent = form.customComponent;\n }\n if (form.singleton === true) {\n result.singleton = form.singletonWellKnownName ? { wellKnownName: form.singletonWellKnownName } : {};\n }\n return result;\n}\n","import { InjectionToken } from '@angular/core';\nimport { CkTypeInfo, EntityFormDefinition } from '../models/entity-form.models';\nimport { pickEntityForm } from './entity-form-resolver';\n\n/**\n * Host-provided built-in forms (AB#5524). Each one stands in for a delivered form of its target\n * type **only where the normal resolution would end at the chain end** (`form-default` on\n * `System/Entity`, or no form at all) — e.g. before a new version of the seeding blueprint has\n * been rolled out. A tenant or seeded form for the exact type, or for an ancestor with\n * `IncludeDerivedTypes`, always wins over a fallback. Same idea as the built-in `form-default`\n * safety net (concept §5.3 step 4), but per type and owned by the host.\n *\n * Provide them at root with this token, or — to keep the entry point out of the initial bundle —\n * with `provideEntityFormFallbacks(forms)` on lazy routes (registers them in the root\n * `EntityFormService`, one cache).\n *\n * Use the delivered form's `rtWellKnownName` (`form-sap-configuration`) so URL keys stay the same\n * when the seeded form arrives, set `isTenantForm: false` and leave `rtId` empty. As soon as any\n * form (tenant or seeded) targets the type, the fallback is ignored — a tenant can therefore hide\n * a fallback entry from a settings overview by creating a form without `Category`.\n */\nexport const ENTITY_FORM_FALLBACK_FORMS = new InjectionToken<readonly EntityFormDefinition[]>('ENTITY_FORM_FALLBACK_FORMS');\n\n/**\n * The loaded forms plus every fallback whose target type no loaded form targets (exact type,\n * case-insensitive). Later fallbacks for an already covered type are dropped as well.\n */\nexport function withFallbackForms(\n loaded: readonly EntityFormDefinition[],\n fallbacks: readonly EntityFormDefinition[] | null | undefined,\n): EntityFormDefinition[] {\n const result = [...loaded];\n if (!fallbacks?.length) {\n return result;\n }\n const covered = new Set(loaded.map((f) => (f.targetCkTypeId ?? '').trim().toLowerCase()).filter((t) => !!t));\n for (const fallback of fallbacks) {\n const target = (fallback.targetCkTypeId ?? '').trim().toLowerCase();\n if (!target || covered.has(target)) {\n continue;\n }\n covered.add(target);\n result.push({ ...fallback, isTenantForm: false });\n }\n return result;\n}\n\n/** The end of the resolution chain: a form on `System/Entity` (the seeded or built-in `form-default`). */\nexport function isChainEndForm(form: Pick<EntityFormDefinition, 'targetCkTypeId'>): boolean {\n return (form.targetCkTypeId ?? '').trim().toLowerCase() === 'system/entity';\n}\n\n/**\n * The fallbacks that apply on top of the loaded forms: per target type (first fallback wins),\n * only when the type exists (`typeOf` returns its CK metadata) and `pickEntityForm(type, loaded)`\n * finds nothing or only the chain end. Fallbacks for a type without metadata are dropped, so a\n * tenant without that model gets no Settings entry for it.\n */\nexport function selectFallbackForms(\n loaded: readonly EntityFormDefinition[],\n fallbacks: readonly EntityFormDefinition[] | null | undefined,\n typeOf: (rtCkTypeId: string) => CkTypeInfo | null | undefined,\n): EntityFormDefinition[] {\n const candidates = withFallbackForms(loaded, fallbacks).slice(loaded.length);\n return candidates.filter((fallback) => {\n const type = typeOf(fallback.targetCkTypeId);\n if (!type) {\n return false;\n }\n const picked = pickEntityForm(type, loaded);\n return !picked || isChainEndForm(picked.form);\n });\n}\n","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormTypeProbeQueryVariablesDto = Types.Exact<{ [key: string]: never; }>;\n\n\nexport type EntityFormTypeProbeQueryDto = { __typename?: 'OctoQuery', constructionKit?: { __typename?: 'ConstructionKitQuery', types?: { __typename?: 'CkTypeDtoConnection', items?: Array<{ __typename?: 'CkType', rtCkTypeId: any } | null> | null } | null } | null };\n\nexport const EntityFormTypeProbeDocumentDto = gql`\n query entityFormTypeProbe {\n constructionKit {\n types(rtCkId: \"System.UI/EntityForm\", first: 1) {\n items {\n rtCkTypeId\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormTypeProbeDtoGQL extends Apollo.Query<EntityFormTypeProbeQueryDto, EntityFormTypeProbeQueryVariablesDto> {\n document = EntityFormTypeProbeDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetCkRecordQueryVariablesDto = Types.Exact<{\n ckRecordId: Types.Scalars['String']['input'];\n}>;\n\n\nexport type EntityFormGetCkRecordQueryDto = { __typename?: 'OctoQuery', constructionKit?: { __typename?: 'ConstructionKitQuery', records?: { __typename?: 'CkRecordDtoConnection', items?: Array<{ __typename?: 'CkRecord', isAbstract: boolean, ckRecordId: { __typename?: 'CkRecordId', fullName: string }, attributes?: { __typename?: 'CkTypeAttributeDtoConnection', items?: Array<{ __typename?: 'CkTypeAttribute', attributeName: string, attributeValueType: Types.AttributeValueTypeDto, isOptional: boolean, ckAttributeId: { __typename?: 'CkAttributeId', fullName: string }, attribute?: { __typename?: 'CkAttribute', description?: string | null, defaultValues?: Array<any | null> | null, metaData?: Array<{ __typename?: 'CkAttributeMetaData', key: string, value?: string | null } | null> | null, ckEnum?: { __typename?: 'CkEnum', ckEnumId: { __typename?: 'CkEnumId', fullName: string }, values: Array<{ __typename?: 'CkEnumValue', key?: number | null, name?: string | null } | null> } | null, ckRecord?: { __typename?: 'CkRecord', ckRecordId: { __typename?: 'CkRecordId', fullName: string } } | null } | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetCkRecordDocumentDto = gql`\n query entityFormGetCkRecord($ckRecordId: String!) {\n constructionKit {\n records(ckId: $ckRecordId, first: 1) {\n items {\n ckRecordId {\n fullName\n }\n isAbstract\n attributes(first: 1000) {\n items {\n attributeName\n attributeValueType\n isOptional\n ckAttributeId {\n fullName\n }\n attribute {\n description\n defaultValues\n metaData {\n key\n value\n }\n ckEnum {\n ckEnumId {\n fullName\n }\n values {\n key\n name\n }\n }\n ckRecord {\n ckRecordId {\n fullName\n }\n }\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetCkRecordDtoGQL extends Apollo.Query<EntityFormGetCkRecordQueryDto, EntityFormGetCkRecordQueryVariablesDto> {\n document = EntityFormGetCkRecordDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetCkTypeQueryVariablesDto = Types.Exact<{\n rtCkTypeId: Types.Scalars['String']['input'];\n}>;\n\n\nexport type EntityFormGetCkTypeQueryDto = { __typename?: 'OctoQuery', constructionKit?: { __typename?: 'ConstructionKitQuery', types?: { __typename?: 'CkTypeDtoConnection', items?: Array<{ __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, description?: string | null, ckTypeId: { __typename?: 'CkTypeId', fullName: string }, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean, baseType?: { __typename?: 'CkType', rtCkTypeId: any, isAbstract: boolean } | null } | null } | null } | null } | null } | null } | null } | null } | null } | null, attributes?: { __typename?: 'CkTypeAttributeDtoConnection', items?: Array<{ __typename?: 'CkTypeAttribute', attributeName: string, attributeValueType: Types.AttributeValueTypeDto, isOptional: boolean, ckAttributeId: { __typename?: 'CkAttributeId', fullName: string }, attribute?: { __typename?: 'CkAttribute', description?: string | null, defaultValues?: Array<any | null> | null, metaData?: Array<{ __typename?: 'CkAttributeMetaData', key: string, value?: string | null } | null> | null, ckEnum?: { __typename?: 'CkEnum', ckEnumId: { __typename?: 'CkEnumId', fullName: string }, values: Array<{ __typename?: 'CkEnumValue', key?: number | null, name?: string | null } | null> } | null, ckRecord?: { __typename?: 'CkRecord', ckRecordId: { __typename?: 'CkRecordId', fullName: string } } | null } | null } | null> | null } | null, associations?: { __typename?: 'CkTypeAssociationDirection', in?: { __typename?: 'CkTypeAssociationSource', all?: Array<{ __typename?: 'CkTypeAssociation', rtRoleId: any, navigationPropertyName: string, multiplicity: Types.MultiplicitiesDto, rtTargetCkTypeId: any, rtOriginCkTypeId: any } | null> | null } | null, out?: { __typename?: 'CkTypeAssociationSource', all?: Array<{ __typename?: 'CkTypeAssociation', rtRoleId: any, navigationPropertyName: string, multiplicity: Types.MultiplicitiesDto, rtTargetCkTypeId: any, rtOriginCkTypeId: any } | null> | null } | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetCkTypeDocumentDto = gql`\n query entityFormGetCkType($rtCkTypeId: String!) {\n constructionKit {\n types(rtCkId: $rtCkTypeId, first: 1) {\n items {\n ckTypeId {\n fullName\n }\n rtCkTypeId\n isAbstract\n description\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n baseType {\n rtCkTypeId\n isAbstract\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n attributes(first: 1000) {\n items {\n attributeName\n attributeValueType\n isOptional\n ckAttributeId {\n fullName\n }\n attribute {\n description\n defaultValues\n metaData {\n key\n value\n }\n ckEnum {\n ckEnumId {\n fullName\n }\n values {\n key\n name\n }\n }\n ckRecord {\n ckRecordId {\n fullName\n }\n }\n }\n }\n }\n associations {\n in {\n all {\n rtRoleId\n navigationPropertyName\n multiplicity\n rtTargetCkTypeId\n rtOriginCkTypeId\n }\n }\n out {\n all {\n rtRoleId\n navigationPropertyName\n multiplicity\n rtTargetCkTypeId\n rtOriginCkTypeId\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetCkTypeDtoGQL extends Apollo.Query<EntityFormGetCkTypeQueryDto, EntityFormGetCkTypeQueryVariablesDto> {\n document = EntityFormGetCkTypeDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetEntityFormsQueryVariablesDto = Types.Exact<{ [key: string]: never; }>;\n\n\nexport type EntityFormGetEntityFormsQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'RtEntity', rtId: any, rtWellKnownName?: string | null, ckTypeId: any, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetEntityFormsDocumentDto = gql`\n query entityFormGetEntityForms {\n runtime {\n runtimeEntities(ckId: \"System.UI/EntityForm\", first: 500) {\n totalCount\n items {\n rtId\n rtWellKnownName\n ckTypeId\n attributes {\n items {\n attributeName\n value\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetEntityFormsDtoGQL extends Apollo.Query<EntityFormGetEntityFormsQueryDto, EntityFormGetEntityFormsQueryVariablesDto> {\n document = EntityFormGetEntityFormsDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { EnvironmentProviders, Injectable, inject, provideEnvironmentInitializer } from '@angular/core';\nimport { TENANT_ID_PROVIDER } from '@meshmakers/octo-services';\nimport { firstValueFrom } from 'rxjs';\nimport { toKebabTypeKey } from '../core/attribute-path';\nimport { RawCkRecord, RawCkType, toCkRecordInfo, toCkTypeInfo } from '../core/ck-metadata';\nimport { parseEntityForms, RawRtEntityRow } from '../core/entity-form-parser';\nimport { resolveEntityForm } from '../core/entity-form-resolver';\nimport { ENTITY_FORM_FALLBACK_FORMS, selectFallbackForms, withFallbackForms } from '../core/fallback-forms';\nimport { isRecordType } from '../core/entity-form-value-mapper';\nimport { EntityFormTypeProbeDtoGQL } from '../graphQL/entityFormTypeProbe';\nimport { EntityFormGetCkRecordDtoGQL } from '../graphQL/getEntityFormCkRecord';\nimport { EntityFormGetCkTypeDtoGQL } from '../graphQL/getEntityFormCkType';\nimport { EntityFormGetEntityFormsDtoGQL } from '../graphQL/getEntityForms';\nimport {\n CkAttributeInfo,\n CkRecordInfo,\n CkTypeInfo,\n EntityFormDefinition,\n ResolvedEntityForm,\n ResolvedField,\n} from '../models/entity-form.models';\n\n/**\n * Loads entity forms and CK metadata and resolves the form for a type (plan §2.3).\n *\n * - Forms are read only after the type probe confirms `System.UI/EntityForm` exists (System.UI >=\n * 2.7.0); otherwise, and when the forms query fails, every type resolves to the built-in form.\n * - Results are cached per tenant (`TENANT_ID_PROVIDER`, empty string when not provided) in a\n * `Map<string, Promise<…>>`; a failed entry is evicted so the next call retries.\n * - Host fallback forms (`ENTITY_FORM_FALLBACK_FORMS`, `registerFallbackForms`) are appended where\n * the normal resolution would end at `form-default` — also when the forms cannot be loaded\n * (AB#5524).\n * - Resolver warnings are logged with `console.warn`.\n */\n@Injectable({ providedIn: 'root' })\nexport class EntityFormService {\n private readonly probeGql = inject(EntityFormTypeProbeDtoGQL);\n private readonly formsGql = inject(EntityFormGetEntityFormsDtoGQL);\n private readonly ckTypeGql = inject(EntityFormGetCkTypeDtoGQL);\n private readonly ckRecordGql = inject(EntityFormGetCkRecordDtoGQL);\n private readonly tenantIdProvider = inject(TENANT_ID_PROVIDER, { optional: true });\n private readonly fallbackForms = inject(ENTITY_FORM_FALLBACK_FORMS, { optional: true });\n\n private readonly cache = new Map<string, Promise<unknown>>();\n private readonly registeredFallbacks: (readonly EntityFormDefinition[])[] = [];\n\n /**\n * Adds host fallback forms at runtime (see `provideEntityFormFallbacks`). Registering the same\n * array again is a no-op; a new one drops the cached forms and resolutions.\n */\n registerFallbackForms(forms: readonly EntityFormDefinition[]): void {\n if (!forms.length || this.registeredFallbacks.includes(forms)) {\n return;\n }\n this.registeredFallbacks.push(forms);\n this.invalidate();\n }\n\n /** Drops every cached form, type, record and resolution (all tenants). */\n invalidate(): void {\n this.cache.clear();\n }\n\n /**\n * All parsed `System.UI/EntityForm` definitions of the current tenant (`[]` when not installed),\n * plus the host fallback forms for target types without a loaded form.\n */\n async getForms(): Promise<EntityFormDefinition[]> {\n const loaded = await this.loadForms();\n const fallbacks = [...(this.fallbackForms ?? []), ...this.registeredFallbacks.flat()];\n if (!fallbacks.length) {\n return loaded;\n }\n // CK metadata of the candidate types (cached), to check the ancestor forms.\n const candidates = withFallbackForms(loaded, fallbacks).slice(loaded.length);\n const types = new Map<string, CkTypeInfo | null>();\n await Promise.all(candidates.map(async (f) => {\n types.set(f.targetCkTypeId.toLowerCase(), await this.getCkType(f.targetCkTypeId).catch(() => null));\n }));\n return [...loaded, ...selectFallbackForms(loaded, fallbacks, (id) => types.get(id.toLowerCase()))];\n }\n\n private async loadForms(): Promise<EntityFormDefinition[]> {\n return this.cached('forms', async () => {\n try {\n const probe = await firstValueFrom(this.probeGql.fetch({ fetchPolicy: 'network-only' }));\n if (!probe.data?.constructionKit?.types?.items?.length) {\n return [];\n }\n const result = await firstValueFrom(this.formsGql.fetch({ fetchPolicy: 'network-only' }));\n return parseEntityForms((result.data?.runtime?.runtimeEntities?.items ?? []) as RawRtEntityRow[]);\n } catch (error) {\n console.warn('EntityFormService: entity forms could not be loaded; using the built-in default form.', error);\n throw error;\n }\n }).catch(() => [] as EntityFormDefinition[]);\n }\n\n /** CK metadata of a type, or `null` when the type does not exist. */\n async getCkType(rtCkTypeId: string): Promise<CkTypeInfo | null> {\n return this.cached(`type::${rtCkTypeId}`, async () => {\n const result = await firstValueFrom(this.ckTypeGql.fetch({ variables: { rtCkTypeId }, fetchPolicy: 'network-only' }));\n const raw = result.data?.constructionKit?.types?.items?.[0];\n return raw ? toCkTypeInfo(raw as unknown as RawCkType) : null;\n });\n }\n\n /** CK metadata of a record (versioned ckRecordId, e.g. `System.UI-2.7.0/EntityFormSection-1`). */\n async getCkRecord(ckRecordId: string): Promise<CkRecordInfo | null> {\n return this.cached(`record::${ckRecordId}`, async () => {\n const result = await firstValueFrom(this.ckRecordGql.fetch({ variables: { ckRecordId }, fetchPolicy: 'network-only' }));\n const raw = result.data?.constructionKit?.records?.items?.[0];\n return raw ? toCkRecordInfo(raw as unknown as RawCkRecord) : null;\n });\n }\n\n /**\n * Loads every record reachable from the given attributes (recursively), keyed by ckRecordId.\n * Records that cannot be loaded are left out.\n */\n async getRecordsFor(type: CkTypeInfo): Promise<Record<string, CkRecordInfo>> {\n const records: Record<string, CkRecordInfo> = {};\n const pending = type.attributes.filter((a) => isRecordType(a.valueType) && a.ckRecordId).map((a) => a.ckRecordId as string);\n const seen = new Set<string>();\n while (pending.length) {\n const batch = pending.splice(0).filter((id) => !seen.has(id));\n batch.forEach((id) => seen.add(id));\n const loaded = await Promise.all(batch.map((id) => this.getCkRecord(id).catch(() => null)));\n for (const record of loaded) {\n if (!record) {\n continue;\n }\n records[record.ckRecordId] = record;\n record.attributes\n .filter((a) => isRecordType(a.valueType) && a.ckRecordId && !seen.has(a.ckRecordId))\n .forEach((a) => pending.push(a.ckRecordId as string));\n }\n }\n return records;\n }\n\n /**\n * Resolves the form for a type. Rejects when the CK type does not exist; falls back to the\n * built-in form when no form applies or the forms cannot be loaded.\n */\n async resolve(rtCkTypeId: string): Promise<ResolvedEntityForm> {\n return this.cached(`resolve::${rtCkTypeId}`, async () => {\n const [type, forms] = await Promise.all([this.getCkType(rtCkTypeId), this.getForms()]);\n if (!type) {\n throw new Error(`EntityFormService: CK type '${rtCkTypeId}' not found.`);\n }\n const records = await this.getRecordsFor(type);\n const resolved = resolveEntityForm(type, forms, { records });\n await this.attachDisplayAttributeInfo(resolved);\n for (const warning of resolved.warnings) {\n console.warn(`EntityFormService: ${warning}`);\n }\n return resolved;\n });\n }\n\n /**\n * Adds the target type's CK metadata of the display attributes to every reference field that\n * has `displayAttributes` (AB#5547: the channel enum showed its key `0` instead of \"Release\").\n * A display attribute marked secret on the target is dropped (it must never be read).\n */\n private async attachDisplayAttributeInfo(resolved: ResolvedEntityForm): Promise<void> {\n const fields = resolved.sections.flatMap((s) => s.fields).filter((f) => f.reference?.displayAttributes?.length);\n await Promise.all(fields.map(async (field) => {\n const reference = field.reference as NonNullable<ResolvedField['reference']>;\n const target = await this.getCkType(reference.targetCkTypeId).catch(() => null);\n if (!target) {\n return;\n }\n const byName = new Map(target.attributes.map((a) => [a.attributeName.toLowerCase(), a]));\n const names = reference.displayAttributes ?? [];\n const kept = names.filter((n) => !byName.get(n.toLowerCase())?.secret);\n if (kept.length !== names.length) {\n resolved.warnings.push(`Field '${field.key}': secret display attributes ignored.`);\n }\n reference.displayAttributes = kept;\n reference.displayAttributeInfo = kept.map((n) => byName.get(n.toLowerCase())).filter((a): a is CkAttributeInfo => !!a);\n }));\n }\n\n /**\n * Resolves by form key: the form's `rtWellKnownName` (`form-sftp-configuration`) or the kebab\n * type key (`sftp-configuration`, matched against `form-<key>` and then against the kebab-cased\n * name of each form's target type). The type's form is then resolved normally, so a tenant form\n * for the same type still wins. Returns `null` when no form matches the key.\n */\n async resolveByFormKey(formKey: string): Promise<ResolvedEntityForm | null> {\n const key = formKey.trim().toLowerCase();\n if (!key) {\n return null;\n }\n const forms = await this.getForms();\n const match = forms.find((f) => (f.rtWellKnownName ?? '').toLowerCase() === key)\n ?? forms.find((f) => (f.rtWellKnownName ?? '').toLowerCase() === `form-${key}`)\n ?? forms.find((f) => toKebabTypeKey(f.targetCkTypeId) === key);\n return match ? this.resolve(match.targetCkTypeId) : null;\n }\n\n private async tenantId(): Promise<string> {\n if (!this.tenantIdProvider) {\n return '';\n }\n try {\n return (await this.tenantIdProvider()) ?? '';\n } catch {\n return '';\n }\n }\n\n private async cached<T>(key: string, load: () => Promise<T>): Promise<T> {\n const fullKey = `${await this.tenantId()}::${key}`;\n const existing = this.cache.get(fullKey) as Promise<T> | undefined;\n if (existing) {\n return existing;\n }\n const promise = load();\n this.cache.set(fullKey, promise);\n promise.catch(() => {\n if (this.cache.get(fullKey) === promise) {\n this.cache.delete(fullKey);\n }\n });\n return promise;\n }\n}\n\n/**\n * Registers host fallback forms in the root `EntityFormService` when the providing (lazy) route's\n * environment injector is created — one service, one cache, and the entry point stays out of the\n * initial bundle (AB#5524). Put it into the `providers` of every lazy route that renders entity\n * forms; registering the same array several times is harmless.\n */\nexport function provideEntityFormFallbacks(forms: readonly EntityFormDefinition[]): EnvironmentProviders {\n return provideEnvironmentInitializer(() => inject(EntityFormService).registerFallbackForms(forms));\n}\n","import { InjectionToken, Signal } from '@angular/core';\n\n/**\n * Whether secrets can be written in this environment (decision Q17, AB#5544): `false` when the\n * environment has no key ring (`SecretEnvironmentStatusDto.keyRingConfigured`, bot services\n * `GET {tenantId}/v1/secrets/status`). Then every secret input of `mm-entity-form` is disabled with\n * a hint instead of failing late on save (`SecretEncryptionNotConfigured`).\n *\n * Optional: without a provider (or while the signal is `null` / `undefined`) secrets are writable.\n * The host provides it from its status client, e.g.\n * `{ provide: ENTITY_FORM_SECRET_KEY_RING_CONFIGURED, useFactory: () => statusService.keyRingConfigured }`.\n */\nexport const ENTITY_FORM_SECRET_KEY_RING_CONFIGURED = new InjectionToken<Signal<boolean | null | undefined>>(\n 'ENTITY_FORM_SECRET_KEY_RING_CONFIGURED',\n);\n\n/**\n * Values that count as \"not set\" for LEGACY secret fields (AB#5623): plain `STRING` attributes\n * treated as secrets by form decision, CK metadata or the credential-name rule. Their presence is\n * probed with field filters (`IS_NOT_NULL` and `NOT_EQUALS ''`); each value listed here adds a\n * `NOT_EQUALS <value>` filter, so a seeded placeholder (exact, case-sensitive match) reads\n * \"Not set\" instead of \"Set\".\n *\n * Optional; not provided = only `null` and `''` count as not set (unchanged behaviour). The\n * library ships no placeholder values of its own — the host lists the ones its seed data uses.\n * It has no effect on attributes of value type `SECRET` (AB#5528): their state comes from the\n * server (`secretIsSet`), which is the reliable way — migrate secrets to `SECRET` where possible.\n */\nexport const ENTITY_FORM_SECRET_PLACEHOLDER_VALUES = new InjectionToken<readonly string[]>(\n 'ENTITY_FORM_SECRET_PLACEHOLDER_VALUES',\n);\n","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormCreateEntitiesMutationVariablesDto = Types.Exact<{\n entities: Array<Types.InputMaybe<Types.RtEntityInputDto>> | Types.InputMaybe<Types.RtEntityInputDto>;\n}>;\n\n\nexport type EntityFormCreateEntitiesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', runtimeEntities?: { __typename?: 'RtEntityMutations', create?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any } | null> | null } | null } | null };\n\nexport const EntityFormCreateEntitiesDocumentDto = gql`\n mutation entityFormCreateEntities($entities: [RtEntityInput]!) {\n runtime {\n runtimeEntities {\n create(entities: $entities) {\n rtId\n ckTypeId\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormCreateEntitiesDtoGQL extends Apollo.Mutation<EntityFormCreateEntitiesMutationDto, EntityFormCreateEntitiesMutationVariablesDto> {\n document = EntityFormCreateEntitiesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormDeleteEntitiesMutationVariablesDto = Types.Exact<{\n rtEntityIds: Array<Types.InputMaybe<Types.RtEntityIdDto>> | Types.InputMaybe<Types.RtEntityIdDto>;\n deleteStrategy?: Types.DeleteStrategiesDto;\n}>;\n\n\nexport type EntityFormDeleteEntitiesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', runtimeEntities?: { __typename?: 'RtEntityMutations', delete?: boolean | null } | null } | null };\n\nexport const EntityFormDeleteEntitiesDocumentDto = gql`\n mutation entityFormDeleteEntities($rtEntityIds: [RtEntityId]!, $deleteStrategy: DeleteStrategies! = ARCHIVE) {\n runtime {\n runtimeEntities {\n delete(entities: $rtEntityIds, options: $deleteStrategy)\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormDeleteEntitiesDtoGQL extends Apollo.Mutation<EntityFormDeleteEntitiesMutationDto, EntityFormDeleteEntitiesMutationVariablesDto> {\n document = EntityFormDeleteEntitiesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetAttributePresenceQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n rtId: Types.Scalars['OctoObjectId']['input'];\n fieldFilters: Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>;\n}>;\n\n\nexport type EntityFormGetAttributePresenceQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null } | null } | null };\n\nexport const EntityFormGetAttributePresenceDocumentDto = gql`\n query entityFormGetAttributePresence($ckTypeId: String!, $rtId: OctoObjectId!, $fieldFilters: [FieldFilter]!) {\n runtime {\n runtimeEntities(\n ckId: $ckTypeId\n rtId: $rtId\n fieldFilter: $fieldFilters\n first: 1\n ) {\n totalCount\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetAttributePresenceDtoGQL extends Apollo.Query<EntityFormGetAttributePresenceQueryDto, EntityFormGetAttributePresenceQueryVariablesDto> {\n document = EntityFormGetAttributePresenceDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetAssociationDefinitionsQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n rtId: Types.Scalars['OctoObjectId']['input'];\n roleId: Types.Scalars['String']['input'];\n direction: Types.GraphDirectionDto;\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n}>;\n\n\nexport type EntityFormGetAssociationDefinitionsQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, associations?: { __typename?: 'RtEntityGenericAssociation', definitions?: { __typename?: 'RtAssociationDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'RtAssociation', originRtId: any, originCkTypeId: any, targetRtId: any, targetCkTypeId: any, ckAssociationRoleId: any } | null> | null } | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetAssociationDefinitionsDocumentDto = gql`\n query entityFormGetAssociationDefinitions($ckTypeId: String!, $rtId: OctoObjectId!, $roleId: String!, $direction: GraphDirection!, $first: Int) {\n runtime {\n runtimeEntities(ckId: $ckTypeId, rtId: $rtId, first: 1) {\n items {\n rtId\n associations {\n definitions(direction: $direction, roleId: $roleId, first: $first) {\n totalCount\n items {\n originRtId\n originCkTypeId\n targetRtId\n targetCkTypeId\n ckAssociationRoleId\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetAssociationDefinitionsDtoGQL extends Apollo.Query<EntityFormGetAssociationDefinitionsQueryDto, EntityFormGetAssociationDefinitionsQueryVariablesDto> {\n document = EntityFormGetAssociationDefinitionsDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetAssociationTargetsQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n rtId: Types.Scalars['OctoObjectId']['input'];\n roleId: Types.Scalars['String']['input'];\n targetCkTypeId: Types.Scalars['String']['input'];\n direction: Types.GraphDirectionDto;\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n}>;\n\n\nexport type EntityFormGetAssociationTargetsQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', items?: Array<{ __typename?: 'RtEntity', rtId: any, associations?: { __typename?: 'RtEntityGenericAssociation', targets?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtDisplayName: string, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null } | null> | null } | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetAssociationTargetsDocumentDto = gql`\n query entityFormGetAssociationTargets($ckTypeId: String!, $rtId: OctoObjectId!, $roleId: String!, $targetCkTypeId: String!, $direction: GraphDirection!, $first: Int) {\n runtime {\n runtimeEntities(ckId: $ckTypeId, rtId: $rtId, first: 1) {\n items {\n rtId\n associations {\n targets(\n roleId: $roleId\n ckId: $targetCkTypeId\n direction: $direction\n first: $first\n ) {\n totalCount\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtDisplayName\n attributes(attributeNames: [\"name\"]) {\n items {\n attributeName\n value\n }\n }\n }\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetAssociationTargetsDtoGQL extends Apollo.Query<EntityFormGetAssociationTargetsQueryDto, EntityFormGetAssociationTargetsQueryVariablesDto> {\n document = EntityFormGetAssociationTargetsDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetCountQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n}>;\n\n\nexport type EntityFormGetCountQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null } | null } | null };\n\nexport const EntityFormGetCountDocumentDto = gql`\n query entityFormGetCount($ckTypeId: String!, $fieldFilters: [FieldFilter]) {\n runtime {\n runtimeEntities(ckId: $ckTypeId, first: 1, fieldFilter: $fieldFilters) {\n totalCount\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetCountDtoGQL extends Apollo.Query<EntityFormGetCountQueryDto, EntityFormGetCountQueryVariablesDto> {\n document = EntityFormGetCountDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetListQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n searchFilter?: Types.InputMaybe<Types.SearchFilterDto>;\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n sort?: Types.InputMaybe<Array<Types.InputMaybe<Types.SortDto>> | Types.InputMaybe<Types.SortDto>>;\n attributeNames: Array<Types.InputMaybe<Types.Scalars['String']['input']>> | Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type EntityFormGetListQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean }, items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtDisplayName: string, rtCreationDateTime?: any | null, rtChangedDateTime?: any | null, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetListDocumentDto = gql`\n query entityFormGetList($ckTypeId: String!, $first: Int, $after: String, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort], $attributeNames: [String]!) {\n runtime {\n runtimeEntities(\n ckId: $ckTypeId\n first: $first\n after: $after\n searchFilter: $searchFilter\n fieldFilter: $fieldFilters\n sortOrder: $sort\n ) {\n totalCount\n pageInfo {\n endCursor\n hasNextPage\n }\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtDisplayName\n rtCreationDateTime\n rtChangedDateTime\n attributes(attributeNames: $attributeNames) {\n items {\n attributeName\n value\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetListDtoGQL extends Apollo.Query<EntityFormGetListQueryDto, EntityFormGetListQueryVariablesDto> {\n document = EntityFormGetListDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetReferenceOptionsQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n searchFilter?: Types.InputMaybe<Types.SearchFilterDto>;\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n sort?: Types.InputMaybe<Array<Types.InputMaybe<Types.SortDto>> | Types.InputMaybe<Types.SortDto>>;\n}>;\n\n\nexport type EntityFormGetReferenceOptionsQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean }, items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtDisplayName: string, rtDisplayDescription?: string | null, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetReferenceOptionsDocumentDto = gql`\n query entityFormGetReferenceOptions($ckTypeId: String!, $first: Int, $after: String, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort]) {\n runtime {\n runtimeEntities(\n ckId: $ckTypeId\n first: $first\n after: $after\n searchFilter: $searchFilter\n fieldFilter: $fieldFilters\n sortOrder: $sort\n ) {\n totalCount\n pageInfo {\n endCursor\n hasNextPage\n }\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtDisplayName\n attributes(attributeNames: [\"name\"]) {\n items {\n attributeName\n value\n }\n }\n rtDisplayDescription\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetReferenceOptionsDtoGQL extends Apollo.Query<EntityFormGetReferenceOptionsQueryDto, EntityFormGetReferenceOptionsQueryVariablesDto> {\n document = EntityFormGetReferenceOptionsDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetValuesQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n rtId?: Types.InputMaybe<Types.Scalars['OctoObjectId']['input']>;\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n attributeNames: Array<Types.InputMaybe<Types.Scalars['String']['input']>> | Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type EntityFormGetValuesQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtDisplayName: string, rtCreationDateTime?: any | null, rtChangedDateTime?: any | null, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null, secretIsSet?: boolean | null, secretKeyMissing?: boolean | null, secretSetAt?: any | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetValuesDocumentDto = gql`\n query entityFormGetValues($ckTypeId: String!, $rtId: OctoObjectId, $fieldFilters: [FieldFilter], $attributeNames: [String]!) {\n runtime {\n runtimeEntities(\n ckId: $ckTypeId\n rtId: $rtId\n fieldFilter: $fieldFilters\n first: 1\n ) {\n totalCount\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtDisplayName\n rtCreationDateTime\n rtChangedDateTime\n attributes(attributeNames: $attributeNames) {\n items {\n attributeName\n value\n secretIsSet\n secretKeyMissing\n secretSetAt\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetValuesDtoGQL extends Apollo.Query<EntityFormGetValuesQueryDto, EntityFormGetValuesQueryVariablesDto> {\n document = EntityFormGetValuesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormUpdateEntitiesMutationVariablesDto = Types.Exact<{\n entities: Array<Types.InputMaybe<Types.RtEntityUpdateDto>> | Types.InputMaybe<Types.RtEntityUpdateDto>;\n}>;\n\n\nexport type EntityFormUpdateEntitiesMutationDto = { __typename?: 'OctoMutation', runtime?: { __typename?: 'Runtime', runtimeEntities?: { __typename?: 'RtEntityMutations', update?: Array<{ __typename?: 'RtEntity', rtId: any } | null> | null } | null } | null };\n\nexport const EntityFormUpdateEntitiesDocumentDto = gql`\n mutation entityFormUpdateEntities($entities: [RtEntityUpdate]!) {\n runtime {\n runtimeEntities {\n update(entities: $entities) {\n rtId\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormUpdateEntitiesDtoGQL extends Apollo.Mutation<EntityFormUpdateEntitiesMutationDto, EntityFormUpdateEntitiesMutationVariablesDto> {\n document = EntityFormUpdateEntitiesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import type { CkAttributeInfo } from '../../models/entity-form.models';\n\n/**\n * How the display attributes of a reference target (`referenceDisplayAttributes`, AB#5547) are\n * turned into text: by the CK value type of each attribute. Without metadata for an attribute the\n * raw value is shown (booleans still as yes/no).\n */\nexport interface ReferenceDisplayFormat {\n /** CK metadata of the target type's display attributes (matched case-insensitively by name). */\n attributes?: readonly CkAttributeInfo[];\n /** Label of `true` (default \"Yes\"). */\n yes?: string;\n /** Label of `false` (default \"No\"). */\n no?: string;\n /** Locale of dates; the browser locale when omitted. */\n locale?: string;\n}\n\nconst DATE_TYPES = ['DATE_TIME', 'DATE_TIME_OFFSET', 'DATE'];\n\nfunction isEmpty(value: unknown): boolean {\n return value === null || value === undefined || (typeof value === 'string' && value.trim() === '')\n || (Array.isArray(value) && value.length === 0);\n}\n\nfunction enumLabel(value: unknown, options: readonly { key: number; name: string }[] | undefined): string {\n const found = (options ?? []).find((o) => o.key === value\n || (typeof value === 'string' && (String(o.key) === value.trim() || o.name.toLowerCase() === value.trim().toLowerCase())));\n return found ? found.name : String(value);\n}\n\nfunction booleanLabel(value: unknown, format: ReferenceDisplayFormat): string | null {\n const b = value === true || value === 'true' ? true : value === false || value === 'false' ? false : null;\n if (b === null) {\n return null;\n }\n return b ? (format.yes ?? 'Yes') : (format.no ?? 'No');\n}\n\nfunction dateLabel(value: unknown, type: string, locale?: string): string {\n const date = value instanceof Date ? value : new Date(String(value));\n if (isNaN(date.getTime())) {\n return String(value);\n }\n return type === 'DATE'\n ? date.toLocaleDateString(locale, { dateStyle: 'medium' })\n : date.toLocaleString(locale, { dateStyle: 'medium', timeStyle: 'short' });\n}\n\n/**\n * Text of one display attribute value, or `null` when it is empty or not displayable (records).\n * ENUM → the enum value's name (the API returns the key, e.g. `0` for \"Release\"); BOOLEAN →\n * yes/no; DATE_TIME(_OFFSET) → localized date and time; arrays → comma-separated.\n */\nexport function formatReferenceDisplayValue(value: unknown, attribute: CkAttributeInfo | undefined, format: ReferenceDisplayFormat = {}): string | null {\n if (isEmpty(value)) {\n return null;\n }\n const type = attribute?.valueType?.toUpperCase() ?? '';\n if (type === 'RECORD' || type === 'RECORD_ARRAY' || (!Array.isArray(value) && typeof value === 'object' && !(value instanceof Date))) {\n return null;\n }\n if (Array.isArray(value)) {\n const parts = value.map((v) => formatReferenceDisplayValue(v, attribute ? { ...attribute, valueType: type.replace(/_ARRAY$/, '') } : undefined, format))\n .filter((p): p is string => p !== null);\n return parts.length ? parts.join(', ') : null;\n }\n if (type === 'ENUM') {\n return enumLabel(value, attribute?.enumOptions);\n }\n if (type === 'BOOLEAN' || (!type && typeof value === 'boolean')) {\n return booleanLabel(value, format) ?? String(value);\n }\n if (DATE_TYPES.includes(type)) {\n return dateLabel(value, type, format.locale);\n }\n return String(value);\n}\n","import { firstValueFrom, from, map, Observable } from 'rxjs';\nimport { EntitySelectDataSource, EntitySelectResult } from '@meshmakers/shared-services';\nimport {\n ColumnDefinition,\n DialogFetchOptions,\n DialogFetchResult,\n EntitySelectDialogDataSource\n} from '@meshmakers/shared-ui';\nimport { FieldFilterOperatorsDto, SearchFilterDto, SearchFilterTypesDto } from '@meshmakers/octo-services';\nimport {\n EntityFormGetReferenceOptionsDtoGQL,\n EntityFormGetReferenceOptionsQueryDto,\n EntityFormGetReferenceOptionsQueryVariablesDto\n} from '../../graphQL/getEntityFormReferenceOptions';\nimport { EntityFormGetReferenceOptionsWithAttributesDtoGQL } from '../../graphQL/getEntityFormReferenceOptionsWithAttributes';\nimport { formatReferenceDisplayValue, ReferenceDisplayFormat } from './reference-display-format';\n\n/** One candidate target of a reference field. Carries system properties only, never attributes. */\nexport interface EntityReferenceItem {\n rtId: string;\n ckTypeId: string;\n rtWellKnownName?: string;\n rtDisplayName?: string;\n rtDisplayDescription?: string;\n /** Label shown in the picker and stored as `displayName` in the field value. */\n displayName: string;\n}\n\n/** System properties the typeahead and the dialog search match against. */\nexport const ENTITY_REFERENCE_SEARCH_PATHS: readonly string[] = ['rtWellKnownName', 'rtDisplayName'];\n\n/** Column labels of the reference picker dialog. */\nexport interface EntityReferenceColumnLabels {\n name: string;\n wellKnownName: string;\n type: string;\n rtId: string;\n}\n\nconst DEFAULT_COLUMN_LABELS: EntityReferenceColumnLabels = {\n name: 'Name',\n wellKnownName: 'Well-known name',\n type: 'Type',\n rtId: 'RtId'\n};\n\ntype ReferenceRow = NonNullable<NonNullable<NonNullable<NonNullable<EntityFormGetReferenceOptionsQueryDto['runtime']>['runtimeEntities']>['items']>[number]>;\n\n/** Shape of the backend's synthetic display name (`System.Communication/Pool@<24 hex>`). */\nconst SYNTHETIC_DISPLAY_NAME = /^[^@\\s]+\\/[^@\\s]+@[0-9a-f]{24}$/i;\n\n/**\n * `rtDisplayName` is resolved by the backend to a synthetic `\"<ckTypeId>@<rtId>\"` when the engine\n * computed none (see the octo-ui CLAUDE.md, \"Runtime Browser node labels\"). That form is treated as\n * absent. Precedence: a real `rtDisplayName` > the target's `name` attribute (read by the\n * reference documents with `attributeNames: [\"name\"]`) > `rtWellKnownName` > the synthetic form >\n * the rtId. Without the `name` step a pool showed its well-known name `CommunicationPool` instead\n * of \"Default Cloud\" (AB#5547).\n */\nexport function referenceDisplayName(row: { rtId: string; ckTypeId: string; rtWellKnownName?: string | null; rtDisplayName?: string | null; name?: string | null }): string {\n const display = row.rtDisplayName ?? '';\n const synthetic = !display || display === `${row.ckTypeId}@${row.rtId}` || display.endsWith(`@${row.rtId}`)\n || SYNTHETIC_DISPLAY_NAME.test(display);\n if (!synthetic) {\n return display;\n }\n return row.name?.trim() || row.rtWellKnownName || display || row.rtId;\n}\n\n/** The `name` attribute of a row that selected `attributes(attributeNames: [\"name\"])`, else null. */\nexport function nameAttributeOf(row: DisplayAttributeSource): string | null {\n const item = (row.attributes?.items ?? []).find((i) => i?.attributeName?.toLowerCase() === 'name');\n const value = item?.value;\n return value === null || value === undefined || String(value).trim() === '' ? null : String(value);\n}\n\n/** A row of either options document; `attributes` only with display attributes. */\nexport interface DisplayAttributeSource {\n attributes?: { items?: ({ attributeName?: string | null; value?: unknown } | null)[] | null } | null;\n}\ntype AnyReferenceRow = ReferenceRow & DisplayAttributeSource;\n\n/**\n * `name · value1 · value2` for configured display attributes (in the configured order, empty values\n * skipped); the plain display name otherwise. Values are formatted by their CK value type when\n * `format.attributes` carries the target's metadata (enum key → name, booleans yes/no, dates).\n */\nexport function referenceLabel(base: string, row: DisplayAttributeSource, displayAttributes: readonly string[], format: ReferenceDisplayFormat = {}): string {\n if (!displayAttributes.length) {\n return base;\n }\n const values = new Map((row.attributes?.items ?? [])\n .filter((i): i is { attributeName: string; value?: unknown } => !!i?.attributeName)\n .map(i => [i.attributeName.toLowerCase(), i.value]));\n const infos = new Map((format.attributes ?? []).map(a => [a.attributeName.toLowerCase(), a]));\n const parts = displayAttributes\n .map(name => formatReferenceDisplayValue(values.get(name.toLowerCase()), infos.get(name.toLowerCase()), format))\n .filter((v): v is string => v !== null && v.trim() !== '');\n return parts.length ? `${base} · ${parts.join(' · ')}` : base;\n}\n\nfunction toItem(row: AnyReferenceRow, displayAttributes: readonly string[], format: ReferenceDisplayFormat): EntityReferenceItem {\n const rtId = String(row.rtId);\n const ckTypeId = String(row.ckTypeId);\n const base = referenceDisplayName({ rtId, ckTypeId, rtWellKnownName: row.rtWellKnownName, rtDisplayName: row.rtDisplayName, name: nameAttributeOf(row) });\n return {\n rtId,\n ckTypeId,\n rtWellKnownName: row.rtWellKnownName ?? undefined,\n rtDisplayName: row.rtDisplayName ?? undefined,\n rtDisplayDescription: row.rtDisplayDescription ?? undefined,\n displayName: referenceLabel(base, row, displayAttributes, format)\n };\n}\n\n/**\n * Secret-safe data source of `mm-entity-form-reference-field`, used both for the typeahead\n * (`EntitySelectDataSource`) and for the grid dialog (`EntitySelectDialogDataSource`) of shared-ui\n * `mm-entity-select-input`.\n *\n * It queries `entityFormGetReferenceOptions`, a document that selects **no `attributes` field at\n * all**: only `rtId`, `ckTypeId`, `rtWellKnownName`, `rtDisplayName` and `rtDisplayDescription`.\n * The target type's secrets therefore never reach the browser, unlike the octo-services\n * `RuntimeEntitySelectDataSource` (its `getEntitiesByCkType` selects every attribute).\n *\n * Derived types of `targetCkTypeId` are included (`runtimeEntities(ckId)` is polymorphic), which is\n * what a reference to a base type expects. Search matches `rtWellKnownName` and `rtDisplayName`.\n */\nexport class EntityReferenceDataSource\nimplements EntitySelectDataSource<EntityReferenceItem>, EntitySelectDialogDataSource<EntityReferenceItem> {\n private readonly columnLabels: EntityReferenceColumnLabels;\n\n /**\n * @param displayAttributes Non-secret target attributes shown next to the name (field\n * `referenceDisplayAttributes`). Non-empty → the options are read with\n * `entityFormGetReferenceOptionsWithAttributes` and exactly these `attributeNames` (plus the\n * non-secret `name`, which the plain document reads for the label as well).\n * @param format CK metadata and labels used to format the display attribute values.\n */\n constructor(\n private readonly gql: EntityFormGetReferenceOptionsDtoGQL,\n readonly targetCkTypeId: string,\n columnLabels?: Partial<EntityReferenceColumnLabels>,\n readonly displayAttributes: readonly string[] = [],\n private readonly attributesGql?: EntityFormGetReferenceOptionsWithAttributesDtoGQL,\n private readonly format: ReferenceDisplayFormat = {}\n ) {\n this.columnLabels = { ...DEFAULT_COLUMN_LABELS, ...(columnLabels ?? {}) };\n }\n\n /** Variables of one page; exposed for tests (it is the complete request apart from the document). */\n buildVariables(searchTerm: string | null, first: number, skip = 0): EntityFormGetReferenceOptionsQueryVariablesDto {\n const term = searchTerm?.trim();\n const searchFilter: SearchFilterDto | undefined = term\n ? { type: SearchFilterTypesDto.AttributeFilterDto, attributePaths: [...ENTITY_REFERENCE_SEARCH_PATHS], searchTerm: term }\n : undefined;\n return {\n ckTypeId: this.targetCkTypeId,\n first,\n after: skip > 0 ? btoa(`arrayconnection:${skip - 1}`) : undefined,\n searchFilter\n };\n }\n\n async onFilter(filter: string, take?: number): Promise<EntitySelectResult<EntityReferenceItem>> {\n const page = await firstValueFrom(this.fetchPage(filter, take ?? 20, 0));\n return { totalCount: page.totalCount, items: page.data.filter((i): i is EntityReferenceItem => i !== null) };\n }\n\n getColumns(): ColumnDefinition[] {\n return [\n { field: 'displayName', displayName: this.columnLabels.name },\n { field: 'rtWellKnownName', displayName: this.columnLabels.wellKnownName },\n { field: 'ckTypeId', displayName: this.columnLabels.type },\n { field: 'rtId', displayName: this.columnLabels.rtId }\n ];\n }\n\n fetchData(options: DialogFetchOptions): Observable<DialogFetchResult<EntityReferenceItem>> {\n return this.fetchPage(options.textSearch, options.take, options.skip);\n }\n\n onDisplayEntity(entity: EntityReferenceItem): string {\n return entity.displayName;\n }\n\n getIdEntity(entity: EntityReferenceItem): string {\n return entity.rtId;\n }\n\n /**\n * The targets with the given rtIds, labelled like the picker rows (display attributes included).\n * Used for the label of the current value; ids that cannot be read are missing from the map.\n */\n async lookup(rtIds: readonly string[]): Promise<Map<string, EntityReferenceItem>> {\n const ids = [...new Set(rtIds.filter(id => !!id))];\n const found = new Map<string, EntityReferenceItem>();\n if (!ids.length) {\n return found;\n }\n const variables: EntityFormGetReferenceOptionsQueryVariablesDto = {\n ckTypeId: this.targetCkTypeId,\n first: ids.length,\n fieldFilters: [{ attributePath: 'rtId', operator: FieldFilterOperatorsDto.InDto, comparisonValue: ids }]\n };\n const page = await firstValueFrom(this.request(variables));\n for (const item of page.data) {\n if (item) {\n found.set(item.rtId, item);\n }\n }\n return found;\n }\n\n private fetchPage(searchTerm: string | null, first: number, skip: number): Observable<DialogFetchResult<EntityReferenceItem>> {\n return this.request(this.buildVariables(searchTerm, first, skip));\n }\n\n private request(variables: EntityFormGetReferenceOptionsQueryVariablesDto): Observable<DialogFetchResult<EntityReferenceItem>> {\n const names = [...this.displayAttributes];\n // `name` keeps the label rule of the plain document (real display name > name > well-known name).\n const attributeNames = [...new Set(['name', ...names])];\n const request = names.length && this.attributesGql\n ? this.attributesGql.fetch({ variables: { ...variables, attributeNames }, fetchPolicy: 'network-only' })\n : this.gql.fetch({ variables, fetchPolicy: 'network-only' });\n return from(request).pipe(\n map(result => {\n const connection = (result.data as EntityFormGetReferenceOptionsQueryDto | undefined)?.runtime?.runtimeEntities;\n const data = (connection?.items ?? [])\n .filter((row): row is ReferenceRow => row !== null && row !== undefined)\n .map(row => toItem(row as AnyReferenceRow, names, this.format));\n return { data, totalCount: connection?.totalCount ?? data.length };\n })\n );\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n AssociationModOptionsDto,\n DeleteStrategiesDto,\n FieldFilterDto,\n FieldFilterOperatorsDto,\n GraphDirectionDto,\n RtEntityInputDto,\n RtEntityUpdateDto,\n isSecretPresent,\n OCTO_SILENT_ERRORS,\n secretStateFromAttribute,\n} from '@meshmakers/octo-services';\nimport { firstValueFrom } from 'rxjs';\nimport { toFormValue } from '../core/entity-form-value-mapper';\nimport { ENTITY_FORM_SECRET_PLACEHOLDER_VALUES } from '../core/secret-write-availability';\nimport { EntityFormCreateEntitiesDtoGQL } from '../graphQL/createEntityFormEntities';\nimport { EntityFormDeleteEntitiesDtoGQL } from '../graphQL/deleteEntityFormEntities';\nimport { EntityFormGetAttributePresenceDtoGQL } from '../graphQL/getEntityAttributePresence';\nimport { EntityFormGetAssociationDefinitionsDtoGQL } from '../graphQL/getEntityFormAssociationDefinitions';\nimport { EntityFormGetAssociationTargetsDtoGQL } from '../graphQL/getEntityFormAssociationTargets';\nimport { EntityFormGetCountDtoGQL } from '../graphQL/getEntityFormCount';\nimport { EntityFormGetListDtoGQL } from '../graphQL/getEntityFormList';\nimport { EntityFormGetReferenceOptionsDtoGQL } from '../graphQL/getEntityFormReferenceOptions';\nimport { EntityFormGetValuesDtoGQL } from '../graphQL/getEntityFormValues';\nimport { EntityFormUpdateEntitiesDtoGQL } from '../graphQL/updateEntityFormEntities';\nimport {\n CkRecordInfo,\n EntityFormChangeSet,\n EntityFormSecretFieldState,\n EntityFormValueState,\n ResolvedEntityForm,\n ResolvedField,\n} from '../models/entity-form.models';\nimport { EntityFormService } from './entity-form.service';\nimport { nameAttributeOf, referenceDisplayName } from '../form/reference/entity-reference-data-source';\n\n/** How to find the entity to load. `ckTypeId` defaults to the form's type (derived types match). */\nexport type EntityFormLoadKey =\n | { rtId: string; ckTypeId?: string }\n | { wellKnownName: string; ckTypeId?: string };\n\n/** Result of {@link EntityFormDataService.load}. */\nexport interface EntityFormLoadResult {\n rtId: string;\n ckTypeId: string;\n rtDisplayName?: string | null;\n state: EntityFormValueState;\n}\n\n/** One selected reference / association target as held by a reference control. */\nexport interface EntityFormTargetRef {\n rtId: string;\n ckTypeId: string;\n displayName: string;\n}\n\n/**\n * Types whose `targets(ckId:)` query fails with \"has no defining collection root\" (verified live\n * for System/Entity). Associations whose other end is one of these are read through the\n * association definitions instead.\n */\nconst NO_COLLECTION_ROOT_TYPES: readonly string[] = ['System/Entity'];\n\n/** Label of a target row: the shared reference rule (real display name > `name` > well-known name). */\nfunction displayNameOf(item: { rtId: string; ckTypeId?: string | null; rtDisplayName?: string | null; rtWellKnownName?: string | null; attributes?: DisplayAttributeRows | null }): string {\n return referenceDisplayName({\n rtId: item.rtId,\n ckTypeId: item.ckTypeId ?? '',\n rtDisplayName: item.rtDisplayName,\n rtWellKnownName: item.rtWellKnownName,\n name: nameAttributeOf(item),\n });\n}\n\ninterface DisplayAttributeRows { items?: ({ attributeName?: string | null; value?: unknown } | null)[] | null }\n\n/**\n * Reads and writes entity values for the entity form (plan §2.3, rules D5/D6).\n *\n * SECURITY: values are read with an explicit `attributeNames` list (`model.readAttributeNames`\n * minus every secret, never omitted — omission returns every attribute). SECRET attributes\n * (AB#5528, `model.secretStateFields`) are listed too: the server returns `value: null` and\n * `secretIsSet`. Fallback secrets (credential name / metadata on non-SECRET attributes) are only\n * probed for presence (`IS_NOT_NULL` + `totalCount`). Mutations never select attributes; an\n * explicit clear goes through `clearSecretAttributes`.\n */\n@Injectable({ providedIn: 'root' })\nexport class EntityFormDataService {\n private readonly valuesGql = inject(EntityFormGetValuesDtoGQL);\n private readonly presenceGql = inject(EntityFormGetAttributePresenceDtoGQL);\n private readonly targetsGql = inject(EntityFormGetAssociationTargetsDtoGQL);\n private readonly definitionsGql = inject(EntityFormGetAssociationDefinitionsDtoGQL);\n private readonly referenceOptionsGql = inject(EntityFormGetReferenceOptionsDtoGQL);\n private readonly createGql = inject(EntityFormCreateEntitiesDtoGQL);\n private readonly updateGql = inject(EntityFormUpdateEntitiesDtoGQL);\n private readonly deleteGql = inject(EntityFormDeleteEntitiesDtoGQL);\n private readonly listGql = inject(EntityFormGetListDtoGQL);\n private readonly countGql = inject(EntityFormGetCountDtoGQL);\n private readonly formService = inject(EntityFormService);\n private readonly secretPlaceholders = inject(ENTITY_FORM_SECRET_PLACEHOLDER_VALUES, { optional: true }) ?? [];\n\n /**\n * The attribute names to read for a model: `readAttributeNames` with every secret removed except\n * the SECRET fields (`secretStateFields`, read for their state only). Always an array (an omitted\n * list would return secrets).\n */\n static readAttributeNamesFor(model: ResolvedEntityForm): string[] {\n const stateFields = new Set((model.secretStateFields ?? []).map((s) => s.toLowerCase()));\n const secrets = new Set(model.secretFields.map((s) => s.toLowerCase()));\n model.sections.flatMap((s) => s.fields).filter((f) => f.secret && f.attributeName)\n .forEach((f) => secrets.add((f.attributeName as string).toLowerCase()));\n return [...new Set(model.readAttributeNames ?? [])]\n .filter((n) => !secrets.has(n.toLowerCase()) || stateFields.has(n.toLowerCase()));\n }\n\n /**\n * Number of entities of a type (e.g. for a settings overview). Without `includeDerivedTypes`\n * only entities of exactly that type are counted (`runtimeEntities(ckId)` includes derived\n * types by default). Selects only `totalCount` — no items, so no attributes are resolved\n * (with `attributes(attributeNames: [])` per item the count failed with CK_CACHE whenever one\n * item's type could not be resolved, AB#5523). Errors reject the promise without a toast.\n */\n async count(ckTypeId: string, includeDerivedTypes = false): Promise<number> {\n const fieldFilters: FieldFilterDto[] = includeDerivedTypes\n ? []\n : [{ attributePath: 'ckTypeId', operator: FieldFilterOperatorsDto.EqualsDto, comparisonValue: ckTypeId }];\n const result = await firstValueFrom(\n this.countGql.fetch({\n variables: {\n ckTypeId,\n fieldFilters: fieldFilters.length > 0 ? fieldFilters : null,\n },\n fetchPolicy: 'network-only',\n // Callers show \"status unavailable\" for a failed count; one failure must not toast.\n context: { [OCTO_SILENT_ERRORS]: true },\n }),\n );\n return result.data?.runtime?.runtimeEntities?.totalCount ?? 0;\n }\n\n /** Loads values, secret presence and associations of one entity in parallel; `null` if not found. */\n async load(model: ResolvedEntityForm, key: EntityFormLoadKey): Promise<EntityFormLoadResult | null> {\n const ckTypeId = key.ckTypeId ?? model.rtCkTypeId;\n const fieldFilters: FieldFilterDto[] | undefined = 'wellKnownName' in key\n ? [{ attributePath: 'rtWellKnownName', operator: FieldFilterOperatorsDto.EqualsDto, comparisonValue: key.wellKnownName }]\n : undefined;\n const fields = model.sections.flatMap((s) => s.fields);\n const recordsPromise = this.loadRecords(fields);\n\n const result = await firstValueFrom(this.valuesGql.fetch({\n variables: {\n ckTypeId,\n rtId: 'rtId' in key ? key.rtId : undefined,\n fieldFilters,\n attributeNames: EntityFormDataService.readAttributeNamesFor(model),\n },\n fetchPolicy: 'network-only',\n }));\n const entity = result.data?.runtime?.runtimeEntities?.items?.[0];\n if (!entity) {\n return null;\n }\n const rtId = entity.rtId as string;\n const entityCkTypeId = entity.ckTypeId as string;\n\n const raw = new Map<string, unknown>();\n const stateFields = model.secretStateFields ?? [];\n const secretStates: Record<string, EntityFormSecretFieldState> = {};\n for (const item of entity.attributes?.items ?? []) {\n if (item?.attributeName) {\n raw.set(item.attributeName.toLowerCase(), item.value);\n const stateField = stateFields.find((n) => n.toLowerCase() === item.attributeName?.toLowerCase());\n const state = stateField ? secretStateFromAttribute(item) : null;\n if (stateField && state) {\n secretStates[stateField] = state;\n }\n }\n }\n // A SECRET field the server did not report counts as not set.\n for (const name of stateFields) {\n secretStates[name] ??= { isSet: false, keyMissing: false, setAt: null };\n }\n const probed = model.secretFields.filter((n) => !stateFields.includes(n));\n\n const [records, probedPresence, associations] = await Promise.all([\n recordsPromise,\n this.loadSecretPresence(probed, entityCkTypeId, rtId, fields),\n this.loadAssociations(fields, entityCkTypeId, rtId),\n ]);\n const secretPresence: Record<string, boolean> = { ...probedPresence };\n for (const [name, state] of Object.entries(secretStates)) {\n secretPresence[name] = isSecretPresent(state);\n }\n\n const values: Record<string, unknown> = {};\n const attributeReferences: { field: ResolvedField; rtId: string }[] = [];\n for (const field of fields) {\n if (field.kind === 'system') {\n const v = field.key === 'rtWellKnownName' ? entity.rtWellKnownName\n : field.key === 'rtCreationDateTime' ? entity.rtCreationDateTime : entity.rtChangedDateTime;\n values[field.key] = field.key === 'rtWellKnownName' ? (v ?? null) : toFormValue(v, { attributeName: field.key, valueType: 'DATE_TIME', isOptional: true });\n } else if (field.kind === 'association') {\n values[field.key] = associations[field.key] ?? [];\n } else if (field.attributeName && !field.secret) {\n const rawValue = raw.get(field.attributeName.toLowerCase());\n if (field.editor === 'reference' && field.reference) {\n values[field.key] = [];\n if (typeof rawValue === 'string' && rawValue) {\n attributeReferences.push({ field, rtId: rawValue });\n }\n continue;\n }\n values[field.key] = toFormValue(rawValue, {\n attributeName: field.attributeName,\n valueType: field.valueType ?? 'STRING',\n isOptional: !field.required,\n enumOptions: field.enumOptions,\n ckRecordId: field.record?.ckRecordId,\n }, records);\n }\n }\n if (attributeReferences.length) {\n const named = await this.lookupDisplayNames(attributeReferences.map((r) => ({ rtId: r.rtId, ckTypeId: r.field.reference?.targetCkTypeId ?? '' })));\n for (const ref of attributeReferences) {\n values[ref.field.key] = [named.get(ref.rtId) ?? { rtId: ref.rtId, ckTypeId: ref.field.reference?.targetCkTypeId ?? '', displayName: ref.rtId }];\n }\n }\n\n return {\n rtId,\n ckTypeId: entityCkTypeId,\n rtDisplayName: entity.rtDisplayName,\n state: { values, secretPresence, secretStates, associations, rtWellKnownName: entity.rtWellKnownName ?? null },\n };\n }\n\n /** Creates an entity; returns its rtId. */\n async create(model: ResolvedEntityForm, ckTypeId: string, changeSet: EntityFormChangeSet): Promise<string> {\n const entity: RtEntityInputDto = {\n ckTypeId: ckTypeId || model.rtCkTypeId,\n attributes: changeSet.attributes,\n };\n if (changeSet.rtWellKnownName) {\n entity.rtWellKnownName = changeSet.rtWellKnownName;\n }\n if (changeSet.associations.length) {\n entity.associations = this.associationInputs(changeSet);\n }\n const result = await firstValueFrom(this.createGql.mutate({ variables: { entities: [entity] }, fetchPolicy: 'no-cache' }));\n const rtId = result.data?.runtime?.runtimeEntities?.create?.[0]?.rtId as string | undefined;\n if (!rtId) {\n throw new Error('EntityFormDataService: create returned no entity.');\n }\n return rtId;\n }\n\n /**\n * Updates an entity with exactly the change set (partial update: attributes that are not sent\n * keep their value — verified live, including the presence of secrets). `rtWellKnownName` is\n * never changed on update. Staged secret clears are sent as `clearSecretAttributes` (Q8).\n */\n async update(rtId: string, ckTypeId: string, changeSet: EntityFormChangeSet): Promise<void> {\n const item: RtEntityInputDto = { ckTypeId, attributes: changeSet.attributes };\n if (changeSet.associations.length) {\n item.associations = this.associationInputs(changeSet);\n }\n const entity: RtEntityUpdateDto = { rtId, item };\n if (changeSet.clearSecretAttributes?.length) {\n entity.clearSecretAttributes = changeSet.clearSecretAttributes;\n }\n await firstValueFrom(this.updateGql.mutate({ variables: { entities: [entity] }, fetchPolicy: 'no-cache' }));\n }\n\n /** Deletes entities (default strategy ARCHIVE). */\n async delete(entities: { rtId: string; ckTypeId: string }[], strategy: 'ARCHIVE' | 'ERASE' = 'ARCHIVE'): Promise<boolean> {\n if (!entities.length) {\n return true;\n }\n const result = await firstValueFrom(this.deleteGql.mutate({\n variables: {\n rtEntityIds: entities.map((e) => ({ rtId: e.rtId, ckTypeId: e.ckTypeId })),\n deleteStrategy: strategy === 'ERASE' ? DeleteStrategiesDto.EraseDto : DeleteStrategiesDto.ArchiveDto,\n },\n fetchPolicy: 'no-cache',\n }));\n return result.data?.runtime?.runtimeEntities?.delete === true;\n }\n\n private associationInputs(changeSet: EntityFormChangeSet): NonNullable<RtEntityInputDto['associations']> {\n return changeSet.associations.map((a) => ({\n roleName: a.roleName,\n targets: a.targets.map((t) => ({\n modOption: t.modOption === 'DELETE' ? AssociationModOptionsDto.DeleteDto : AssociationModOptionsDto.CreateDto,\n target: { ckTypeId: t.target.ckTypeId, rtId: t.target.rtId },\n })),\n }));\n }\n\n private async loadRecords(fields: ResolvedField[]): Promise<Record<string, CkRecordInfo>> {\n const ids = [...new Set(fields.map((f) => f.record?.ckRecordId).filter((id): id is string => !!id))];\n const records: Record<string, CkRecordInfo> = {};\n const pending = [...ids];\n const seen = new Set<string>();\n while (pending.length) {\n const batch = pending.splice(0).filter((id) => !seen.has(id));\n batch.forEach((id) => seen.add(id));\n const loaded = await Promise.all(batch.map((id) => this.formService.getCkRecord(id).catch(() => null)));\n for (const record of loaded) {\n if (record) {\n records[record.ckRecordId] = record;\n record.attributes.filter((a) => a.ckRecordId && !seen.has(a.ckRecordId)).forEach((a) => pending.push(a.ckRecordId as string));\n }\n }\n }\n return records;\n }\n\n /**\n * \"Set / not set\" per secret: not null AND — for STRING secrets — not the empty string (an empty\n * string is \"no secret\", AB#5524; same rule as the Studio's service account page) and none of the\n * host's placeholder values (`ENTITY_FORM_SECRET_PLACEHOLDER_VALUES`, AB#5623). SECRET-typed\n * attributes are not probed here: their state comes from the server.\n */\n private async loadSecretPresence(\n secretFields: string[],\n ckTypeId: string,\n rtId: string,\n fields: ResolvedField[] = [],\n ): Promise<Record<string, boolean>> {\n const entries = await Promise.all(secretFields.map(async (name) => {\n const valueType = fields.find((f) => f.attributeName === name)?.valueType ?? 'STRING';\n const fieldFilters = [\n { attributePath: name, operator: FieldFilterOperatorsDto.IsNotNullDto },\n ...(valueType === 'STRING'\n ? ['', ...this.secretPlaceholders.filter((v) => typeof v === 'string' && v !== '')]\n .map((comparisonValue) => ({ attributePath: name, operator: FieldFilterOperatorsDto.NotEqualsDto, comparisonValue }))\n : []),\n ];\n const result = await firstValueFrom(this.presenceGql.fetch({\n variables: { ckTypeId, rtId, fieldFilters },\n fetchPolicy: 'network-only',\n }));\n return [name, (result.data?.runtime?.runtimeEntities?.totalCount ?? 0) > 0] as const;\n }));\n return Object.fromEntries(entries);\n }\n\n private async loadAssociations(fields: ResolvedField[], ckTypeId: string, rtId: string): Promise<Record<string, EntityFormTargetRef[]>> {\n const assocFields = fields.filter((f) => f.kind === 'association' && f.reference?.role);\n const entries = await Promise.all(assocFields.map(async (field) => [field.key, await this.loadAssociationTargets(field, ckTypeId, rtId)] as const));\n return Object.fromEntries(entries);\n }\n\n private async loadAssociationTargets(field: ResolvedField, ckTypeId: string, rtId: string): Promise<EntityFormTargetRef[]> {\n const role = field.reference?.role;\n if (!role || !field.reference) {\n return [];\n }\n const direction = role.direction === 'out' ? GraphDirectionDto.OutboundDto : GraphDirectionDto.InboundDto;\n const targetCkTypeId = field.reference.targetCkTypeId;\n if (!NO_COLLECTION_ROOT_TYPES.includes(targetCkTypeId)) {\n try {\n const result = await firstValueFrom(this.targetsGql.fetch({\n variables: { ckTypeId, rtId, roleId: role.rtRoleId, targetCkTypeId, direction, first: 1000 },\n fetchPolicy: 'network-only',\n }));\n const items = result.data?.runtime?.runtimeEntities?.items?.[0]?.associations?.targets?.items ?? [];\n return items.filter((i): i is NonNullable<typeof i> => !!i).map((i) => ({\n rtId: i.rtId as string,\n ckTypeId: i.ckTypeId as string,\n displayName: displayNameOf(i as Parameters<typeof displayNameOf>[0]),\n }));\n } catch {\n // Fall through to the definitions-based read.\n }\n }\n const defs = await firstValueFrom(this.definitionsGql.fetch({\n variables: { ckTypeId, rtId, roleId: role.rtRoleId, direction, first: 1000 },\n fetchPolicy: 'network-only',\n }));\n const edges = defs.data?.runtime?.runtimeEntities?.items?.[0]?.associations?.definitions?.items ?? [];\n const refs = edges.filter((e): e is NonNullable<typeof e> => !!e).map((e) => role.direction === 'out'\n ? { rtId: e.targetRtId as string, ckTypeId: e.targetCkTypeId as string }\n : { rtId: e.originRtId as string, ckTypeId: e.originCkTypeId as string });\n const named = await this.lookupDisplayNames(refs);\n return refs.map((r) => named.get(r.rtId) ?? { ...r, displayName: r.rtId });\n }\n\n /** Display names for ids, grouped by type; selects only the `name` attribute (secret-safe). */\n private async lookupDisplayNames(refs: { rtId: string; ckTypeId: string }[]): Promise<Map<string, EntityFormTargetRef>> {\n const byType = new Map<string, string[]>();\n for (const r of refs) {\n if (!r.ckTypeId) {\n continue;\n }\n byType.set(r.ckTypeId, [...(byType.get(r.ckTypeId) ?? []), r.rtId]);\n }\n const named = new Map<string, EntityFormTargetRef>();\n await Promise.all([...byType.entries()].map(async ([ckTypeId, ids]) => {\n try {\n const result = await firstValueFrom(this.referenceOptionsGql.fetch({\n variables: { ckTypeId, first: ids.length, fieldFilters: [{ attributePath: 'rtId', operator: FieldFilterOperatorsDto.InDto, comparisonValue: ids }] },\n fetchPolicy: 'network-only',\n }));\n for (const i of result.data?.runtime?.runtimeEntities?.items ?? []) {\n if (i) {\n named.set(i.rtId as string, { rtId: i.rtId as string, ckTypeId: i.ckTypeId as string, displayName: displayNameOf(i as Parameters<typeof displayNameOf>[0]) });\n }\n }\n } catch {\n // Display names are cosmetic; ids are shown instead.\n }\n }));\n return named;\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { isSecretValueType } from '@meshmakers/octo-services';\nimport type { ResolvedEntityForm, ResolvedField } from '../models/entity-form.models';\n\n/**\n * Seeded placeholder values of NON-secret configuration attributes (AB#5623), e.g.\n * `TODO_SET_AZURE_TENANT_ID`, that must read as \"not configured\" instead of as a real value.\n *\n * - A list `readonly string[]` applies to every attribute.\n * - An object lists values `global`ly and/or per attribute (`attributes`, keyed by attribute name\n * in any casing: `azureTenantId`, `AzureTenantId`).\n *\n * Matching is exact and case-sensitive, on string values only.\n */\nexport type EntityFormUnsetPlaceholderValues =\n | readonly string[]\n | {\n readonly global?: readonly string[];\n readonly attributes?: Readonly<Record<string, readonly string[]>>;\n };\n\n/**\n * Placeholder values of non-secret attributes that count as \"not configured\" (AB#5623). Analogous\n * to `ENTITY_FORM_SECRET_PLACEHOLDER_VALUES`, but for plain configuration values:\n *\n * - **List** (`mm-entity-list`): a cell holding a placeholder shows the `notConfigured` message.\n * - **Form** (`mm-entity-form`): the field starts empty with the `notConfigured` message as\n * placeholder hint; the value counts as unset (a required field is invalid, `VisibleWhen` sees no\n * value).\n * - **Save**: the form never writes a placeholder back. An untouched placeholder field is not part\n * of the change set (the stored placeholder stays and keeps reading \"not configured\"); a typed\n * value replaces it; emptying the field again is \"no change\". A host that wants to remove the\n * placeholder from the store has to write `null` itself (e.g. in `beforeSave`).\n *\n * Never applies to secrets (SECRET decision, AB#5528: secret placeholders are dropped; a secret's\n * state comes from `secretIsSet`): fields with `secret` (value type `SECRET`, CK `secret` metadata,\n * the credential-name rule or a form decision) and attributes listed in `secretFields` are skipped,\n * even when listed here.\n *\n * Optional; not provided = no placeholders (unchanged behaviour). The library ships no values.\n */\nexport const ENTITY_FORM_UNSET_PLACEHOLDER_VALUES = new InjectionToken<EntityFormUnsetPlaceholderValues>(\n 'ENTITY_FORM_UNSET_PLACEHOLDER_VALUES',\n);\n\n/** Normalised lookup of {@link EntityFormUnsetPlaceholderValues}. */\nexport interface EntityFormUnsetPlaceholderLookup {\n readonly global: ReadonlySet<string>;\n /** Keyed by lower-case attribute name. */\n readonly attributes: ReadonlyMap<string, ReadonlySet<string>>;\n}\n\nconst EMPTY_LOOKUP: EntityFormUnsetPlaceholderLookup = { global: new Set(), attributes: new Map() };\n\n/** Builds the lookup of a placeholder configuration (`null` / `undefined` = none). */\nexport function entityFormUnsetPlaceholderLookup(\n config: EntityFormUnsetPlaceholderValues | null | undefined,\n): EntityFormUnsetPlaceholderLookup {\n if (!config) {\n return EMPTY_LOOKUP;\n }\n if (Array.isArray(config)) {\n return { global: new Set(config.filter(isString)), attributes: new Map() };\n }\n const object = config as Exclude<EntityFormUnsetPlaceholderValues, readonly string[]>;\n const attributes = new Map<string, Set<string>>();\n for (const [name, values] of Object.entries(object.attributes ?? {})) {\n const key = name.toLowerCase();\n const set = attributes.get(key) ?? new Set<string>();\n for (const value of values ?? []) {\n if (isString(value)) {\n set.add(value);\n }\n }\n attributes.set(key, set);\n }\n return { global: new Set((object.global ?? []).filter(isString)), attributes };\n}\n\n/** What is known about the attribute a value belongs to. */\nexport interface EntityFormUnsetPlaceholderTarget {\n attributeName: string;\n valueType?: string | null;\n /** The field / column is treated as a secret (any reason). */\n secret?: boolean;\n}\n\n/**\n * Whether `value` is a configured placeholder of the attribute. Always `false` for secrets\n * (`secret` flag or value type `SECRET`) and for non-string values.\n */\nexport function isEntityFormUnsetPlaceholder(\n lookup: EntityFormUnsetPlaceholderLookup,\n target: EntityFormUnsetPlaceholderTarget,\n value: unknown,\n): boolean {\n if (typeof value !== 'string' || target.secret || isSecretValueType(target.valueType)) {\n return false;\n }\n if (lookup.global.has(value)) {\n return true;\n }\n return !!lookup.attributes.get(target.attributeName.toLowerCase())?.has(value);\n}\n\n/** Whether a resolved form field may carry an unset placeholder (attribute, not a secret). */\nfunction placeholderCapable(model: ResolvedEntityForm, field: ResolvedField): field is ResolvedField & { attributeName: string } {\n if (field.kind !== 'attribute' || !field.attributeName || field.secret) {\n return false;\n }\n const lower = field.attributeName.toLowerCase();\n return !model.secretFields.some((s) => s.toLowerCase() === lower);\n}\n\n/**\n * Keys of the fields whose value in `values` (form values or `state.values`, keyed by field key)\n * is an unset placeholder. Only non-secret attribute fields are considered.\n */\nexport function entityFormUnsetPlaceholderFields(\n model: ResolvedEntityForm,\n values: Readonly<Record<string, unknown>> | null | undefined,\n lookup: EntityFormUnsetPlaceholderLookup,\n): string[] {\n if (!values || (lookup.global.size === 0 && lookup.attributes.size === 0)) {\n return [];\n }\n const keys: string[] = [];\n for (const section of model.sections) {\n for (const field of section.fields) {\n if (placeholderCapable(model, field) && isEntityFormUnsetPlaceholder(lookup, field, values[field.key])) {\n keys.push(field.key);\n }\n }\n }\n return keys;\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n","import {\n CkRecordInfo,\n EntityFormChangeSet,\n EntityFormMode,\n ResolvedEntityForm,\n ResolvedField,\n} from '../models/entity-form.models';\nimport { formValuesEqual, isEmptyFormValue, toWireValue } from './entity-form-value-mapper';\n\n/** One selected reference target as held by a reference control. */\nexport interface EntityFormReferenceValue {\n rtId: string;\n ckTypeId: string;\n displayName?: string;\n}\n\nexport interface BuildChangeSetOptions {\n /** Record metadata keyed by versioned ckRecordId, for type conversion of record sub-values. */\n records?: Record<string, CkRecordInfo>;\n /**\n * attributeNames of secrets whose clear the user staged (Q8, edit mode). Sent as\n * `clearSecretAttributes` unless a new value was typed for the same field (mutually exclusive —\n * the typed value wins, the server would reject both).\n */\n clearedSecrets?: ReadonlySet<string>;\n}\n\n/**\n * The association `roleName` written in `RtEntityAssociationInput`: the navigation property name\n * with a lower-case first letter (the backend matches it case-insensitively; verified live, and\n * the role id `System/Related` is NOT accepted as roleName — it is silently ignored).\n */\nexport function associationRoleName(navigationPropertyName: string): string {\n return navigationPropertyName.charAt(0).toLowerCase() + navigationPropertyName.slice(1);\n}\n\nfunction references(value: unknown): EntityFormReferenceValue[] {\n if (!Array.isArray(value)) {\n return value && typeof value === 'object' && 'rtId' in (value as object) ? [value as EntityFormReferenceValue] : [];\n }\n return value.filter((v): v is EntityFormReferenceValue => !!v && typeof v === 'object' && typeof (v as EntityFormReferenceValue).rtId === 'string');\n}\n\nfunction isEditable(field: ResolvedField, mode: EntityFormMode): boolean {\n if (field.editor === 'unsupported' || field.readOnly === 'always') {\n return false;\n }\n if (field.readOnly === 'afterCreate' && mode !== 'create') {\n return false;\n }\n return true;\n}\n\n/**\n * Builds the change set of a form (D6: only dirty controls on edit).\n *\n * - `current` is the form's enabled value: a key that is absent (disabled control, e.g. hidden by\n * VisibleWhen) is never sent.\n * - Create mode sends every non-empty editable value (defaults included) plus `rtWellKnownName`.\n * - Edit mode sends only attributes whose value differs from `initial`; read-only, `afterCreate`\n * and unsupported fields and `rtWellKnownName` are never sent.\n * - Secrets: an empty secret is left out (= unchanged); a typed secret is always sent. A staged\n * clear (edit mode, `options.clearedSecrets`) goes to `clearSecretAttributes` instead.\n * - Associations: diff of the selected targets by rtId; a single-valued replace produces DELETE old\n * plus CREATE new.\n * - View mode produces an empty change set.\n */\nexport function buildChangeSet(\n initial: Record<string, unknown>,\n current: Record<string, unknown>,\n model: ResolvedEntityForm,\n mode: EntityFormMode,\n // Reserved for presence-dependent rules; an empty secret is \"unchanged\" whatever the presence.\n _secretPresence: Record<string, boolean> = {},\n options: BuildChangeSetOptions = {},\n): EntityFormChangeSet {\n const changeSet: EntityFormChangeSet = { attributes: [], associations: [], isEmpty: true };\n if (mode === 'view') {\n return changeSet;\n }\n const has = (key: string): boolean => Object.prototype.hasOwnProperty.call(current, key);\n\n for (const field of model.sections.flatMap((s) => s.fields)) {\n if (!has(field.key) || !isEditable(field, mode)) {\n continue;\n }\n const value = current[field.key];\n\n if (field.kind === 'system') {\n if (field.key === 'rtWellKnownName' && mode === 'create' && typeof value === 'string' && value.trim()) {\n changeSet.rtWellKnownName = value.trim();\n }\n continue;\n }\n\n if (field.kind === 'association' && field.reference?.role) {\n const role = field.reference.role;\n const before = mode === 'create' ? [] : references(initial[field.key]);\n const after = references(value);\n const removed = before.filter((b) => !after.some((a) => a.rtId === b.rtId));\n const added = after.filter((a) => !before.some((b) => b.rtId === a.rtId));\n if (removed.length || added.length) {\n changeSet.associations.push({\n roleName: associationRoleName(role.navigationPropertyName),\n targets: [\n ...removed.map((t) => ({ modOption: 'DELETE' as const, target: { ckTypeId: t.ckTypeId, rtId: t.rtId } })),\n ...added.map((t) => ({ modOption: 'CREATE' as const, target: { ckTypeId: t.ckTypeId, rtId: t.rtId } })),\n ],\n });\n }\n continue;\n }\n\n if (field.kind !== 'attribute' || !field.attributeName) {\n continue;\n }\n\n // Attribute-held reference: the control holds [{rtId,...}], the attribute stores the rtId.\n let formValue = value;\n if (field.editor === 'reference') {\n formValue = references(value)[0]?.rtId ?? null;\n }\n\n if (field.secret) {\n if (isEmptyFormValue(formValue, field.valueType)) {\n continue;\n }\n } else if (mode === 'create') {\n if (isEmptyFormValue(formValue, field.valueType)) {\n continue;\n }\n } else {\n let initialValue = initial[field.key];\n if (field.editor === 'reference') {\n initialValue = typeof initialValue === 'string' ? initialValue : references(initialValue)[0]?.rtId ?? null;\n }\n if (formValuesEqual(initialValue, formValue)) {\n continue;\n }\n }\n\n const mapped = toWireValue(formValue, {\n attributeName: field.attributeName,\n valueType: field.valueType ?? 'STRING',\n isOptional: !field.required,\n enumOptions: field.enumOptions,\n ckRecordId: field.record?.ckRecordId,\n }, options.records);\n if (mapped.include) {\n changeSet.attributes.push({ attributeName: field.attributeName, value: mapped.value });\n }\n }\n\n if (mode === 'edit' && options.clearedSecrets?.size) {\n const sent = new Set(changeSet.attributes.map((a) => a.attributeName));\n const clears = model.sections.flatMap((s) => s.fields)\n .filter((f) => f.secret && f.attributeName && options.clearedSecrets?.has(f.attributeName) && !sent.has(f.attributeName)\n && isEditable(f, mode))\n .map((f) => f.attributeName as string);\n if (clears.length) {\n changeSet.clearSecretAttributes = [...new Set(clears)];\n }\n }\n\n changeSet.isEmpty = changeSet.attributes.length === 0 && changeSet.associations.length === 0 && !changeSet.rtWellKnownName\n && !changeSet.clearSecretAttributes?.length;\n return changeSet;\n}\n","import { InjectionToken } from '@angular/core';\nimport {\n CkAttributeInfo,\n ResolvedEntityForm,\n ResolvedField,\n ResolvedListColumn,\n ResolvedSection,\n} from '../models/entity-form.models';\n\n/**\n * What a label belongs to (AB#5623):\n * - `formTitle` / `formDescription` — the form's name and description (`key` = the form key, else\n * the runtime CK type id);\n * - `section` / `sectionDescription` — a section title / description (`key` = section key);\n * - `field` / `help` / `placeholder` — a field's label, help text and placeholder\n * (`key` = the field key: camelCase attribute name, `rtWellKnownName` or `assoc:<role>`);\n * - `listColumn` — a list column title (`key` = the column field);\n * - `recordColumn` — a column of a record grid (`key` = the record sub-attribute path,\n * `attributeName` = the record attribute);\n * - `enumOption` — the display text of an enum value (`key` = the enum value name, `enumKey` = its\n * numeric key, `attributeName` = the ENUM attribute).\n */\nexport type EntityFormLabelKind =\n | 'formTitle'\n | 'formDescription'\n | 'section'\n | 'sectionDescription'\n | 'field'\n | 'help'\n | 'placeholder'\n | 'listColumn'\n | 'recordColumn'\n | 'enumOption';\n\n/** One label lookup of {@link EntityFormLabelResolver}. */\nexport interface EntityFormLabelRequest {\n kind: EntityFormLabelKind;\n /**\n * Runtime CK type the label belongs to (`Basic.Accounting/BankAccount`). For enum options of a\n * reference display attribute this is the reference target type.\n */\n rtCkTypeId: string;\n /** Well-known name (else rtId) of the form definition, when the form came from one. */\n formKey?: string;\n /** See {@link EntityFormLabelKind}. */\n key: string;\n /** The attribute an `enumOption` / `recordColumn` belongs to (camelCase). */\n attributeName?: string;\n /** Numeric key of an `enumOption`. */\n enumKey?: number;\n /** The text shown without a resolver (form definition text, else derived from the CK model). */\n defaultText: string;\n}\n\n/**\n * Host hook that translates the texts of an entity form (AB#5623): field labels, help texts,\n * placeholders, section titles, form title, list column titles, record columns and enum option\n * texts. Return `null`, `undefined` or `''` to keep {@link EntityFormLabelRequest.defaultText}.\n *\n * The resolver is called inside Angular `computed`s: when it reads a signal (e.g. the current\n * language), the forms re-render on a change of that signal. A resolver that reads no signal is\n * evaluated once per model; pass a new function to the `labelResolver` input to refresh it.\n * A language change never rebuilds the form controls, so unsaved edits are kept.\n *\n * Fixed UI texts (buttons, notifications, validation messages) are translated with the `messages`\n * input ({@link EntityFormsMessages}), not with this hook.\n */\nexport type EntityFormLabelResolver = (request: EntityFormLabelRequest) => string | null | undefined;\n\n/**\n * App-wide {@link EntityFormLabelResolver} for `mm-entity-form`, `mm-entity-list` and\n * `mm-entity-page`. Their `labelResolver` input wins over this token. Not provided = the texts of\n * the form definition / CK model are shown unchanged (today's behaviour).\n */\nexport const ENTITY_FORM_LABEL_RESOLVER = new InjectionToken<EntityFormLabelResolver>('ENTITY_FORM_LABEL_RESOLVER');\n\n/** Resolvers that already threw (warned once each, not once per label). */\nconst failedResolvers = new WeakSet<EntityFormLabelResolver>();\n\n/**\n * Resolves one label; falls back to the default text when there is no resolver, no translation,\n * or the resolver throws (logged once per resolver with `console.warn`).\n */\nexport function resolveEntityFormLabel(\n resolver: EntityFormLabelResolver | null | undefined,\n request: EntityFormLabelRequest,\n): string {\n if (!resolver) {\n return request.defaultText;\n }\n let text: string | null | undefined;\n try {\n text = resolver(request);\n } catch (error) {\n if (!failedResolvers.has(resolver)) {\n failedResolvers.add(resolver);\n console.warn('entity-forms: the label resolver threw; showing the default texts', error);\n }\n return request.defaultText;\n }\n return typeof text === 'string' && text !== '' ? text : request.defaultText;\n}\n\ninterface LabelContext {\n resolver: EntityFormLabelResolver;\n rtCkTypeId: string;\n formKey?: string;\n}\n\nfunction contextOf(model: ResolvedEntityForm, resolver: EntityFormLabelResolver): LabelContext {\n const formKey = model.formWellKnownName ?? model.formRtId;\n return { resolver, rtCkTypeId: model.rtCkTypeId, ...(formKey ? { formKey } : {}) };\n}\n\nfunction label(ctx: LabelContext, kind: EntityFormLabelKind, key: string, defaultText: string, extra: Partial<EntityFormLabelRequest> = {}): string {\n return resolveEntityFormLabel(ctx.resolver, {\n kind,\n rtCkTypeId: ctx.rtCkTypeId,\n ...(ctx.formKey ? { formKey: ctx.formKey } : {}),\n key,\n defaultText,\n ...extra,\n });\n}\n\nfunction localizeEnumOptions(\n ctx: LabelContext,\n attributeName: string | undefined,\n options: { key: number; name: string }[] | undefined,\n): { key: number; name: string }[] | undefined {\n if (!options) {\n return options;\n }\n return options.map((o) => ({\n key: o.key,\n name: label(ctx, 'enumOption', o.name, o.name, { enumKey: o.key, ...(attributeName ? { attributeName } : {}) }),\n }));\n}\n\nfunction localizeAttributeInfo(ctx: LabelContext, info: CkAttributeInfo[] | undefined): CkAttributeInfo[] | undefined {\n if (!info) {\n return info;\n }\n return info.map((a) => (a.enumOptions?.length\n ? { ...a, enumOptions: localizeEnumOptions(ctx, a.attributeName, a.enumOptions) }\n : a));\n}\n\nfunction localizeField(ctx: LabelContext, field: ResolvedField): ResolvedField {\n const out: ResolvedField = { ...field, label: label(ctx, 'field', field.key, field.label) };\n if (field.help !== undefined) {\n out.help = label(ctx, 'help', field.key, field.help);\n }\n if (field.placeholder !== undefined) {\n out.placeholder = label(ctx, 'placeholder', field.key, field.placeholder);\n }\n if (field.enumOptions) {\n out.enumOptions = localizeEnumOptions(ctx, field.attributeName ?? field.key, field.enumOptions);\n }\n if (field.record) {\n out.record = {\n ...field.record,\n columns: field.record.columns.map((c) => ({\n path: c.path,\n label: label(ctx, 'recordColumn', c.path, c.label, { attributeName: field.attributeName ?? field.key }),\n })),\n };\n }\n if (field.reference?.displayAttributeInfo?.length) {\n const targetCtx: LabelContext = { resolver: ctx.resolver, rtCkTypeId: field.reference.targetCkTypeId };\n out.reference = { ...field.reference, displayAttributeInfo: localizeAttributeInfo(targetCtx, field.reference.displayAttributeInfo) };\n }\n return out;\n}\n\nfunction localizeSection(ctx: LabelContext, section: ResolvedSection): ResolvedSection {\n const out: ResolvedSection = {\n ...section,\n title: section.title === null ? null : label(ctx, 'section', section.key, section.title),\n fields: section.fields.map((f) => localizeField(ctx, f)),\n };\n if (section.description !== undefined) {\n out.description = label(ctx, 'sectionDescription', section.key, section.description);\n }\n return out;\n}\n\n/** The list columns of a model with translated titles and enum texts (unchanged without a resolver). */\nexport function localizeEntityListColumns(\n model: ResolvedEntityForm,\n resolver: EntityFormLabelResolver | null | undefined,\n): ResolvedListColumn[] {\n if (!resolver) {\n return model.listColumns;\n }\n const ctx = contextOf(model, resolver);\n return model.listColumns.map((c) => {\n const out: ResolvedListColumn = { ...c, label: label(ctx, 'listColumn', c.field, c.label) };\n if (c.enumOptions) {\n out.enumOptions = localizeEnumOptions(ctx, c.field, c.enumOptions);\n }\n return out;\n });\n}\n\n/** Translated form title (unchanged without a resolver). */\nexport function localizeEntityFormTitle(model: ResolvedEntityForm, resolver: EntityFormLabelResolver | null | undefined): string {\n return resolver ? label(contextOf(model, resolver), 'formTitle', model.formWellKnownName ?? model.formRtId ?? model.rtCkTypeId, model.title) : model.title;\n}\n\n/**\n * A copy of a resolved form with every display text passed through the resolver (AB#5623). Keys,\n * attribute names and enum keys are unchanged, so form controls, change sets and queries are not\n * affected. Returns the model itself when there is no resolver.\n */\nexport function localizeEntityForm(\n model: ResolvedEntityForm,\n resolver: EntityFormLabelResolver | null | undefined,\n): ResolvedEntityForm {\n if (!resolver) {\n return model;\n }\n const ctx = contextOf(model, resolver);\n const out: ResolvedEntityForm = {\n ...model,\n title: localizeEntityFormTitle(model, resolver),\n sections: model.sections.map((s) => localizeSection(ctx, s)),\n listColumns: localizeEntityListColumns(model, resolver),\n };\n if (model.description !== undefined) {\n out.description = label(ctx, 'formDescription', model.formWellKnownName ?? model.formRtId ?? model.rtCkTypeId, model.description);\n }\n return out;\n}\n","import { InjectionToken } from '@angular/core';\nimport { firstValueFrom, isObservable, Observable } from 'rxjs';\nimport { EntityFormChangeSet, EntityFormMode, ResolvedEntityForm } from '../models/entity-form.models';\n\n/** What a {@link EntityFormBeforeSaveHook} learns about the save besides the change set. */\nexport interface EntityFormBeforeSaveContext {\n /** `create` or `edit` (a view form never saves). */\n mode: Exclude<EntityFormMode, 'view'>;\n /** Runtime CK type id of the entity that is saved (the concrete type in create mode). */\n ckTypeId: string;\n /** rtId of the entity in edit mode; absent in create mode. */\n rtId?: string;\n /** The resolved form (fields, sections, secret field names) - metadata only, no values. */\n form: ResolvedEntityForm;\n}\n\n/**\n * Result of a {@link EntityFormBeforeSaveHook}:\n * - a change set → saved instead of the original one (`isEmpty` is recomputed);\n * - `undefined` / `void` / `true` → the change set handed to the hook is saved, including any\n * in-place changes the hook made to it;\n * - `null` / `false` → the save is vetoed silently (the hook told the user itself, or nothing\n * needs saying). To veto with a message, throw an {@link EntityFormSaveVeto}.\n */\nexport type EntityFormBeforeSaveResult = EntityFormChangeSet | boolean | null | undefined | void;\n\n/**\n * Host hook run right before an entity form is saved (AB#5623), after validation — e.g. to\n * normalise values (trim texts, format IBAN / BIC / phone numbers, lower-case an e-mail) or to\n * derive attributes (`NormalizedEmail` from `Email`). It may be synchronous or return a\n * `Promise` / `Observable` (the first emitted value counts).\n *\n * - Attribute names in `changeSet.attributes` are the camelCase CK attribute names\n * (`email`, `normalizedEmail`); values are wire values (strings, numbers, enum keys, …).\n * - Edit mode: the change set holds only changed attributes (D6). A hook that derives an\n * attribute from another one therefore acts only when the source is in the change set; it may\n * add attributes that are not in the form.\n * - **Secrets:** the hook sees nothing beyond the change set. A SECRET attribute appears there\n * only as the write value the user just typed into this form (or in `clearSecretAttributes`\n * when a clear is staged) — never a stored value, which the form never reads. Do not log the\n * change set.\n * - Throw an {@link EntityFormSaveVeto} to stop the save with a message for the user; any other\n * error also stops the save and is reported like a failed save.\n *\n * Provide it as the `beforeSave` input of `mm-entity-form` / `mm-entity-page`, as the\n * `beforeSave` option of `entityFormRoutes` (route data key `entityFormBeforeSave`), or via\n * {@link ENTITY_FORM_BEFORE_SAVE} on a route / root injector. Precedence: input > route data >\n * token.\n */\nexport type EntityFormBeforeSaveHook = (\n changeSet: EntityFormChangeSet,\n context: EntityFormBeforeSaveContext,\n) => EntityFormBeforeSaveResult | Promise<EntityFormBeforeSaveResult> | Observable<EntityFormBeforeSaveResult>;\n\n/** Injection token of a {@link EntityFormBeforeSaveHook} (lowest precedence, see there). */\nexport const ENTITY_FORM_BEFORE_SAVE = new InjectionToken<EntityFormBeforeSaveHook>('ENTITY_FORM_BEFORE_SAVE');\n\n/**\n * Thrown by a {@link EntityFormBeforeSaveHook} to stop a save on purpose. `userMessage` (already\n * translated by the host) is shown as a warning; without it the generic `saveVetoed` message is\n * shown.\n */\nexport class EntityFormSaveVeto extends Error {\n constructor(public readonly userMessage?: string) {\n super(userMessage ?? 'The save was vetoed by the host.');\n this.name = 'EntityFormSaveVeto';\n }\n}\n\n/** Outcome of {@link runEntityFormBeforeSave}. */\nexport type EntityFormBeforeSaveOutcome =\n | { kind: 'save'; changeSet: EntityFormChangeSet }\n | { kind: 'veto'; message?: string }\n | { kind: 'error'; error: unknown };\n\n/** True for a thrown {@link EntityFormSaveVeto} (also across bundle copies, by name). */\nexport function isEntityFormSaveVeto(error: unknown): error is EntityFormSaveVeto {\n return error instanceof EntityFormSaveVeto || (error instanceof Error && error.name === 'EntityFormSaveVeto');\n}\n\nfunction cloneChangeSet(changeSet: EntityFormChangeSet): EntityFormChangeSet {\n return {\n ...changeSet,\n attributes: changeSet.attributes.map((a) => ({ ...a })),\n associations: changeSet.associations.map((a) => ({\n ...a,\n targets: a.targets.map((t) => ({ ...t, target: { ...t.target } })),\n })),\n ...(changeSet.clearSecretAttributes ? { clearSecretAttributes: [...changeSet.clearSecretAttributes] } : {}),\n };\n}\n\nfunction withIsEmpty(changeSet: EntityFormChangeSet): EntityFormChangeSet {\n const attributes = Array.isArray(changeSet.attributes) ? changeSet.attributes : [];\n const associations = Array.isArray(changeSet.associations) ? changeSet.associations : [];\n return {\n ...changeSet,\n attributes,\n associations,\n isEmpty: attributes.length === 0 && associations.length === 0 && !changeSet.rtWellKnownName\n && !changeSet.clearSecretAttributes?.length,\n };\n}\n\n/**\n * Runs the host hook on a copy of the change set (the caller's object is never touched) and\n * normalises its result. Absent hook = save unchanged.\n */\nexport async function runEntityFormBeforeSave(\n hook: EntityFormBeforeSaveHook | null | undefined,\n changeSet: EntityFormChangeSet,\n context: EntityFormBeforeSaveContext,\n): Promise<EntityFormBeforeSaveOutcome> {\n if (!hook) {\n return { kind: 'save', changeSet };\n }\n const draft = cloneChangeSet(changeSet);\n try {\n const raw = hook(draft, context);\n const result = isObservable(raw)\n ? await firstValueFrom(raw, { defaultValue: undefined })\n : await raw;\n if (result === null || result === false) {\n return { kind: 'veto' };\n }\n if (result === undefined || result === true) {\n return { kind: 'save', changeSet: withIsEmpty(draft) };\n }\n if (typeof result === 'object' && Array.isArray((result as EntityFormChangeSet).attributes)) {\n return { kind: 'save', changeSet: withIsEmpty(result as EntityFormChangeSet) };\n }\n return { kind: 'error', error: new TypeError('beforeSave returned neither a change set nor a boolean.') };\n } catch (error) {\n if (isEntityFormSaveVeto(error)) {\n return { kind: 'veto', message: error.userMessage };\n }\n return { kind: 'error', error };\n }\n}\n","import { EntityFormValueState, ResolvedEntityForm, ResolvedField } from '../models/entity-form.models';\n\n/**\n * Values a host puts into a form (AB#5623), keyed by field key: the camelCase attribute name (any\n * casing is accepted), `rtWellKnownName`, or the association field key (`assoc:<role>`).\n *\n * Values use the form value shape (as in {@link EntityFormValueState.values}): strings, numbers,\n * booleans, `Date` for DATE_TIME, arrays for chips and records, and for references either a bare\n * rtId or `{ rtId, ckTypeId, displayName }[]`. Secret fields are never prefilled.\n */\nexport type EntityFormPrefillValues = Readonly<Record<string, unknown>>;\n\n/** Options of {@link entityFormPrefillState}. */\nexport interface EntityFormPrefillOptions {\n /** Well-known name of the entity to create (carried even when the form has no such field). */\n rtWellKnownName?: string | null;\n}\n\n/**\n * Builds the `state` of `<mm-entity-form mode=\"create\">` from host values (AB#5623): a prefilled\n * value wins over the field's default, everything else starts empty. Equivalent to the form's\n * `initialValues` input; use it when the host already passes a `state`.\n */\nexport function entityFormPrefillState(values: EntityFormPrefillValues | null | undefined, options: EntityFormPrefillOptions = {}): EntityFormValueState {\n const plain: Record<string, unknown> = {};\n const associations: EntityFormValueState['associations'] = {};\n let rtWellKnownName = options.rtWellKnownName ?? null;\n for (const [key, value] of Object.entries(values ?? {})) {\n if (value === undefined) {\n continue;\n }\n if (key === 'rtWellKnownName') {\n rtWellKnownName ??= typeof value === 'string' ? value : null;\n } else if (key.startsWith('assoc:') && Array.isArray(value)) {\n associations[key] = value as EntityFormValueState['associations'][string];\n } else {\n plain[key] = value;\n }\n }\n return { values: plain, secretPresence: {}, associations, rtWellKnownName };\n}\n\n/**\n * Merges host values over a create-mode state (host values win). Returns the state unchanged when\n * there are no values. Canonicalise the keys first ({@link canonicaliseEntityFormPrefill}).\n */\nexport function mergeEntityFormPrefill(state: EntityFormValueState | null | undefined, values: EntityFormPrefillValues | null | undefined): EntityFormValueState | null {\n if (!values || Object.keys(values).length === 0) {\n return state ?? null;\n }\n const prefill = entityFormPrefillState(values);\n const base = state ?? { values: {}, secretPresence: {}, associations: {}, rtWellKnownName: null };\n return {\n ...base,\n values: { ...base.values, ...prefill.values },\n associations: { ...base.associations, ...prefill.associations },\n rtWellKnownName: base.rtWellKnownName || prefill.rtWellKnownName,\n };\n}\n\n/**\n * The field a prefill key addresses: matched by field key, then by attribute name, both\n * case-insensitively. `undefined` for unknown keys.\n */\nexport function entityFormPrefillField(model: ResolvedEntityForm, key: string): ResolvedField | undefined {\n const lower = key.toLowerCase();\n const fields = model.sections.flatMap((s) => s.fields);\n return fields.find((f) => f.key.toLowerCase() === lower)\n ?? fields.find((f) => (f.attributeName ?? '').toLowerCase() === lower);\n}\n\n/**\n * Host values re-keyed to the form's field keys (AB#5623). Unknown keys are kept as they are\n * (`rtWellKnownName` is always kept); secret fields are dropped (never prefilled); a bare rtId for\n * a reference field becomes the reference editor's `{ rtId, ckTypeId, displayName }[]` value.\n */\nexport function canonicaliseEntityFormPrefill(model: ResolvedEntityForm, values: EntityFormPrefillValues | null | undefined): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(values ?? {})) {\n const field = entityFormPrefillField(model, key);\n if (!field) {\n out[key] = value;\n continue;\n }\n if (field.secret) {\n continue;\n }\n out[field.key] = toReferenceValue(field, value);\n }\n return out;\n}\n\n/** A bare rtId (or rtId list) for a reference field as the reference editor's value. */\nexport function toReferenceValue(field: ResolvedField, value: unknown): unknown {\n if (field.editor !== 'reference') {\n return value;\n }\n const ckTypeId = field.reference?.targetCkTypeId ?? '';\n const one = (v: unknown): unknown => (typeof v === 'string' && v ? { rtId: v, ckTypeId, displayName: v } : v);\n if (typeof value === 'string') {\n return value ? [one(value)] : [];\n }\n return Array.isArray(value) ? value.map(one) : value;\n}\n","import { SecretState, SecretStatusLabels, formatSecretStatus, isSecretStateObject, isSecretValueType, toSecretState } from '@meshmakers/octo-services';\nimport type { CkAttributeInfo } from '../../models/entity-form.models';\n\n/**\n * Editor kinds of a record sub-field. A subset of `EntityFormEditor`, derived with the auto rules\n * of the resolver (record sub-fields carry no form definition of their own).\n */\nexport type RecordFieldEditor = 'text' | 'number' | 'toggle' | 'enum' | 'datetime' | 'chips' | 'nested' | 'secret' | 'unsupported';\n\n/** One editable (or read-only displayed) sub-field of a record row. */\nexport interface RecordFieldModel {\n attributeName: string;\n valueType: string;\n label: string;\n description?: string | null;\n editor: RecordFieldEditor;\n /** Nested records and unsupported types are shown, never edited; their value is kept as is. */\n readOnly: boolean;\n enumOptions?: { key: number; name: string }[];\n /** True for INT/INTEGER arrays: chips are converted back to numbers. */\n numericChips?: boolean;\n}\n\nconst NUMERIC = new Set(['INT', 'INTEGER', 'INT_64', 'INTEGER_64', 'DOUBLE']);\nconst DATES = new Set(['DATE_TIME', 'DATE_TIME_OFFSET']);\nconst NUMERIC_ARRAYS = new Set(['INT_ARRAY', 'INTEGER_ARRAY']);\nconst ARRAYS = new Set(['STRING_ARRAY', 'INT_ARRAY', 'INTEGER_ARRAY']);\nconst RECORDS = new Set(['RECORD', 'RECORD_ARRAY']);\n\n/** Auto editor for a record sub-attribute (same table as the resolver's `auto` rule). */\nexport function recordFieldEditor(valueType: string): RecordFieldEditor {\n const t = (valueType ?? '').toUpperCase();\n if (isSecretValueType(t)) {\n // SECRET member (AB#5528): badge + write-only input; empty keeps the stored value (record key).\n return 'secret';\n }\n if (t === 'STRING') {\n return 'text';\n }\n if (NUMERIC.has(t)) {\n return 'number';\n }\n if (t === 'BOOLEAN') {\n return 'toggle';\n }\n if (DATES.has(t)) {\n return 'datetime';\n }\n if (t === 'ENUM') {\n return 'enum';\n }\n if (ARRAYS.has(t)) {\n return 'chips';\n }\n if (RECORDS.has(t)) {\n return 'nested';\n }\n return 'unsupported';\n}\n\n/** Turns `someAttributeName` into `Some attribute name` for a label. */\nexport function humanizeAttributeName(name: string): string {\n const spaced = name.replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/[_-]+/g, ' ').trim();\n if (!spaced) {\n return name;\n }\n return spaced.charAt(0).toUpperCase() + spaced.slice(1).toLowerCase();\n}\n\n/**\n * Builds the sub-field models of a record. Record sub-fields are **always optional** in the UI:\n * the CK API reports `isOptional: false` for every record attribute (backend defect), so no\n * \"required\" state is derived from it; the server still enforces mandatory attributes.\n */\nexport function buildRecordFieldModels(attributes: CkAttributeInfo[]): RecordFieldModel[] {\n return attributes.map(a => {\n const editor = recordFieldEditor(a.valueType);\n return {\n attributeName: a.attributeName,\n valueType: a.valueType,\n label: humanizeAttributeName(a.attributeName),\n description: a.description ?? null,\n editor,\n readOnly: editor === 'nested' || editor === 'unsupported',\n enumOptions: editor === 'enum' ? (a.enumOptions ?? []) : undefined,\n numericChips: editor === 'chips' && NUMERIC_ARRAYS.has((a.valueType ?? '').toUpperCase())\n };\n });\n}\n\nfunction isEmpty(value: unknown): boolean {\n return value === null || value === undefined || value === '' || (Array.isArray(value) && value.length === 0);\n}\n\n/** Converts a stored row value into the control value of its editor. */\nexport function toControlValue(field: RecordFieldModel, value: unknown): unknown {\n if (field.editor === 'secret') {\n // Never prefilled: a stored secret is a state object; a value typed earlier in this session\n // (not saved yet) is shown again so the row can still be corrected.\n return typeof value === 'string' ? value : null;\n }\n if (value === undefined || value === null) {\n return field.editor === 'chips' ? [] : null;\n }\n switch (field.editor) {\n case 'datetime': {\n if (value instanceof Date) {\n return value;\n }\n const date = new Date(String(value));\n return isNaN(date.getTime()) ? null : date;\n }\n case 'enum': {\n if (typeof value === 'number') {\n return value;\n }\n const byName = field.enumOptions?.find(o => o.name.toLowerCase() === String(value).toLowerCase());\n if (byName) {\n return byName.key;\n }\n const key = Number(value);\n return isNaN(key) ? null : key;\n }\n case 'chips':\n return Array.isArray(value) ? value.map(v => String(v)) : [String(value)];\n case 'number': {\n const n = typeof value === 'number' ? value : Number(value);\n return isNaN(n) ? null : n;\n }\n case 'toggle':\n return value === true || value === 'true';\n default:\n return value;\n }\n}\n\n/** Converts a control value back into the flat form-dict value (value-mapper form shape); `undefined` drops the key. */\nexport function fromControlValue(field: RecordFieldModel, value: unknown): unknown {\n if (isEmpty(value)) {\n return undefined;\n }\n switch (field.editor) {\n case 'datetime':\n // The form shape of a date is a `Date` (value mapper); it becomes ISO on the wire.\n return value;\n case 'chips':\n return field.numericChips\n ? (value as unknown[]).map(v => Number(v)).filter(v => !isNaN(v))\n : (value as unknown[]).map(v => String(v));\n case 'text':\n return String(value);\n default:\n return value;\n }\n}\n\n/**\n * Builds the resulting row: values of read-only sub-fields and of keys the record model does not\n * know are kept verbatim; editable sub-fields are taken from the form, empty ones are removed.\n */\nexport function buildRow(\n fields: RecordFieldModel[],\n original: Record<string, unknown> | null | undefined,\n formValue: Record<string, unknown>\n): Record<string, unknown> {\n const row: Record<string, unknown> = { ...(original ?? {}) };\n for (const field of fields) {\n if (field.readOnly) {\n continue;\n }\n if (field.editor === 'secret') {\n // A typed value replaces the member; empty keeps the stored state (carried over on save).\n const typed = formValue[field.attributeName];\n if (typeof typed === 'string' && typed.length > 0) {\n row[field.attributeName] = typed;\n } else if (typeof row[field.attributeName] === 'string') {\n delete row[field.attributeName];\n }\n continue;\n }\n const value = fromControlValue(field, formValue[field.attributeName]);\n if (value === undefined) {\n delete row[field.attributeName];\n } else {\n row[field.attributeName] = value;\n }\n }\n return row;\n}\n\n/** The stored state of a SECRET member value (`null` for a typed, unsaved string). */\nexport function recordSecretState(value: unknown): SecretState | null {\n if (typeof value === 'string' && value.length > 0) {\n return null;\n }\n return toSecretState(isSecretStateObject(value) ? value : null);\n}\n\n/**\n * Cell / badge text of a SECRET member: the shared status wording for a stored value, `newValue`\n * for a typed, unsaved value — never the value itself.\n */\nexport function formatRecordSecretCell(\n value: unknown,\n labels: SecretStatusLabels,\n newValue: string,\n formatDate?: (date: Date) => string,\n): string {\n const state = recordSecretState(value);\n return state ? formatSecretStatus(state, formatDate, labels) : newValue;\n}\n\n/** Short, single-line text of a cell value for the records grid and read-only displays. */\nexport function formatRecordCell(value: unknown, enumOptions?: { key: number; name: string }[]): string {\n if (value === null || value === undefined) {\n return '';\n }\n if (enumOptions && typeof value === 'number') {\n return enumOptions.find(o => o.key === value)?.name ?? String(value);\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (Array.isArray(value)) {\n if (value.some(v => v !== null && typeof v === 'object')) {\n return `[${value.length}]`;\n }\n return value.join(', ');\n }\n if (typeof value === 'object') {\n return '{…}';\n }\n return String(value);\n}\n","import { formatDate } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, LOCALE_ID, computed, inject, input } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { DialogRef } from '@progress/kendo-angular-dialog';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport type { CkRecordInfo } from '../../models/entity-form.models';\nimport { EntityFormsMessages, mergeEntityFormsMessages, secretStatusLabelsOf } from '../../entity-forms.messages';\nimport {\n buildRecordFieldModels,\n buildRow,\n formatRecordCell,\n formatRecordSecretCell,\n RecordFieldModel,\n recordSecretState,\n toControlValue\n} from './entity-form-record-row';\n\n/**\n * Row editor of `mm-entity-form-records-field`. Fields are generated from the record's CK\n * attributes with the auto-editor rules; every sub-field is optional (see\n * `buildRecordFieldModels`). Nested RECORD / RECORD_ARRAY sub-fields and unsupported value types\n * are shown read-only and their values are passed through unchanged.\n *\n * SECRET members (AB#5528, handover §2) show the set / not-set badge and a write-only input: a\n * typed value replaces the member, an empty input keeps the stored value — the server carries it\n * over from the stored element with the same record key (changing the key therefore drops it).\n * Read-only users see the badge only.\n *\n * Closes its `DialogRef` with the resulting flat camelCase row, or with `undefined` on cancel.\n */\n@Component({\n selector: 'mm-entity-form-record-row-dialog',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ReactiveFormsModule, ButtonsModule, InputsModule, DateInputsModule, DropDownsModule],\n template: `\n <form class=\"mm-efr-dialog\" [formGroup]=\"form()\" (ngSubmit)=\"onApply()\">\n @for (field of fields(); track field.attributeName) {\n <div class=\"mm-efr-field\" [attr.data-attribute]=\"field.attributeName\">\n <label class=\"mm-efr-label\" [attr.for]=\"'efr-' + field.attributeName\">{{ field.label }}</label>\n @switch (field.editor) {\n @case ('text') {\n <kendo-textbox [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\"></kendo-textbox>\n }\n @case ('number') {\n <kendo-numerictextbox [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\"\n [spinners]=\"false\" format=\"#.##########\"></kendo-numerictextbox>\n }\n @case ('toggle') {\n <kendo-switch [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\"></kendo-switch>\n }\n @case ('datetime') {\n <kendo-datetimepicker [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\"></kendo-datetimepicker>\n }\n @case ('enum') {\n <kendo-dropdownlist [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\"\n [data]=\"field.enumOptions ?? []\" textField=\"name\" valueField=\"key\"\n [valuePrimitive]=\"true\" [defaultItem]=\"enumDefaultItem()\"></kendo-dropdownlist>\n }\n @case ('chips') {\n <kendo-multiselect [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\"\n [data]=\"[]\" [allowCustom]=\"true\" [placeholder]=\"msg().chipsPlaceholder\"></kendo-multiselect>\n }\n @case ('secret') {\n <div class=\"mm-efr-secret\">\n <span class=\"mm-efr-secret-badge\" [attr.data-secret-state]=\"secretStateKey(field)\">{{ secretBadge(field) }}</span>\n @if (!readOnly()) {\n @if (secretWritesDisabled()) {\n <span class=\"mm-efr-hint\" data-secret-writes-disabled>{{ msg().secretWritesDisabled }}</span>\n }\n <kendo-textbox [id]=\"'efr-' + field.attributeName\" [formControlName]=\"field.attributeName\" type=\"password\"\n [placeholder]=\"secretPlaceholder(field)\"\n [inputAttributes]=\"{ autocomplete: 'new-password', spellcheck: 'false' }\"></kendo-textbox>\n }\n </div>\n }\n @default {\n <div class=\"mm-efr-readonly\" [id]=\"'efr-' + field.attributeName\">\n <span class=\"mm-efr-readonly-value\">{{ display(field) }}</span>\n <span class=\"mm-efr-hint\">{{ field.editor === 'nested' ? msg().nestedRecordReadOnly : msg().unsupportedEditor }}</span>\n </div>\n }\n }\n @if (field.description) {\n <small class=\"mm-efr-help\">{{ field.description }}</small>\n }\n </div>\n }\n <div class=\"mm-efr-actions\">\n <button kendoButton type=\"button\" (click)=\"onCancel()\">{{ msg().cancel }}</button>\n @if (!readOnly()) {\n <button kendoButton type=\"submit\" themeColor=\"primary\">{{ msg().apply }}</button>\n }\n </div>\n </form>\n `,\n styles: [`\n :host { display: block; }\n .mm-efr-dialog { display: flex; flex-direction: column; gap: 12px; min-width: 320px; }\n .mm-efr-field { display: flex; flex-direction: column; gap: 4px; }\n .mm-efr-label { font-weight: 500; color: var(--theme-text-primary, inherit); }\n .mm-efr-help, .mm-efr-hint { color: var(--theme-text-secondary, inherit); font-size: 0.85em; }\n .mm-efr-readonly { display: flex; flex-direction: column; gap: 2px; padding: 4px 0; }\n .mm-efr-readonly-value { font-family: monospace; word-break: break-all; }\n .mm-efr-secret { display: flex; flex-direction: column; gap: 4px; }\n .mm-efr-secret-badge { align-self: flex-start; font-size: 0.8em; padding: 0 8px; border-radius: 8px;\n background: var(--theme-bg-subtle, rgba(127, 127, 127, 0.15)); color: var(--theme-text-secondary, inherit); }\n .mm-efr-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 8px; }\n `]\n})\nexport class EntityFormRecordRowDialogComponent {\n private readonly dialogRef = inject(DialogRef, { optional: true });\n private readonly locale = inject(LOCALE_ID);\n\n /** CK metadata of the record; set by the opener (`ComponentRef.setInput`). */\n readonly record = input<CkRecordInfo | null>(null);\n /** Row being edited; `null` adds a new row. */\n readonly row = input<Record<string, unknown> | null>(null);\n readonly readOnly = input(false);\n /** No key ring (Q17): SECRET members keep their stored value; the input is disabled with a hint. */\n readonly secretWritesDisabled = input(false);\n readonly messages = input<Partial<EntityFormsMessages>>({});\n\n protected readonly msg = computed(() => mergeEntityFormsMessages(this.messages()));\n protected readonly fields = computed<RecordFieldModel[]>(() => buildRecordFieldModels(this.record()?.attributes ?? []));\n protected readonly enumDefaultItem = computed(() => ({ key: null, name: this.msg().enumPlaceholder }));\n\n /** Rebuilt whenever the record metadata, the row or the read-only state changes. */\n readonly form = computed(() => this.buildForm(this.fields(), this.row(), this.readOnly(), this.secretWritesDisabled()));\n\n /** The row resulting from the current form state (original keys preserved). */\n result(): Record<string, unknown> {\n return buildRow(this.fields(), this.row(), this.form().getRawValue());\n }\n\n /** Badge of a SECRET member: the shared status wording, or \"new value\" for a typed one. */\n protected secretBadge(field: RecordFieldModel): string {\n const m = this.msg();\n return formatRecordSecretCell(this.row()?.[field.attributeName], secretStatusLabelsOf(m), m.secretRecordMemberNewValue,\n (date) => formatDate(date, 'medium', this.locale));\n }\n\n protected secretStateKey(field: RecordFieldModel): string {\n const state = recordSecretState(this.row()?.[field.attributeName]);\n return !state ? 'new' : state.keyMissing ? 'keyMissing' : state.isSet ? 'set' : 'notSet';\n }\n\n protected secretPlaceholder(field: RecordFieldModel): string {\n const state = recordSecretState(this.row()?.[field.attributeName]);\n return state && (state.isSet || state.keyMissing) ? this.msg().secretRecordMemberKeep : this.msg().secretNotSetPlaceholder;\n }\n\n protected display(field: RecordFieldModel): string {\n return formatRecordCell(this.row()?.[field.attributeName], field.enumOptions);\n }\n\n protected onApply(): void {\n if (this.readOnly()) {\n this.onCancel();\n return;\n }\n this.dialogRef?.close(this.result());\n }\n\n protected onCancel(): void {\n this.dialogRef?.close(undefined);\n }\n\n private buildForm(\n fields: RecordFieldModel[],\n row: Record<string, unknown> | null,\n readOnly: boolean,\n secretWritesDisabled = false\n ): FormGroup<Record<string, FormControl<unknown>>> {\n const form = new FormGroup<Record<string, FormControl<unknown>>>({});\n for (const field of fields) {\n if (field.readOnly) {\n continue;\n }\n const control = new FormControl<unknown>(toControlValue(field, row?.[field.attributeName]));\n if (readOnly || (secretWritesDisabled && field.editor === 'secret')) {\n control.disable({ emitEvent: false });\n }\n form.addControl(field.attributeName, control, { emitEvent: false });\n }\n return form;\n }\n}\n","import { formatDate } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, LOCALE_ID, computed, effect, forwardRef, inject, input, signal } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { firstValueFrom } from 'rxjs';\nimport { GridModule } from '@progress/kendo-angular-grid';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { DialogCloseResult, DialogService } from '@progress/kendo-angular-dialog';\nimport { arrowDownIcon, arrowUpIcon } from '@progress/kendo-svg-icons';\nimport { MM_ACTION_ICONS } from '@meshmakers/shared-ui';\nimport type { CkRecordInfo } from '../../models/entity-form.models';\nimport { DEFAULT_ENTITY_FORMS_MESSAGES, EntityFormsMessages, formatEntityFormsMessage, mergeEntityFormsMessages, secretStatusLabelsOf } from '../../entity-forms.messages';\nimport { EntityFormService } from '../../services/entity-form.service';\nimport { buildRecordFieldModels, formatRecordCell, formatRecordSecretCell, humanizeAttributeName } from './entity-form-record-row';\nimport { EntityFormRecordRowDialogComponent } from './entity-form-record-row-dialog.component';\n\n/** Grid column of the records editor. */\nexport interface EntityFormRecordColumn {\n path: string;\n label: string;\n}\n\n/** Number of columns derived from the record metadata when the form lists none. */\nconst DERIVED_COLUMN_COUNT = 4;\n\n/** Grid row: the stored dict plus its position (rows have no identity of their own). */\ninterface GridRow {\n index: number;\n row: Record<string, unknown>;\n}\n\n/**\n * Records editor of `mm-entity-form` for RECORD and RECORD_ARRAY attributes.\n *\n * - **Value:** `Record<string, unknown>[]`, one flat camelCase dict per record\n * (`{ key: 'a', order: 1 }`, the write shape of the value mapper). A single RECORD uses an array\n * of at most one entry (`single = true`); `[]` means \"no record\".\n * - **Grid:** add / edit / move up / move down / remove. Edit and add open\n * `EntityFormRecordRowDialogComponent`, whose fields come from `EntityFormService.getCkRecord()`.\n * - **Limits:** `single` disables \"add\" once one row exists. Nested RECORD / RECORD_ARRAY sub-fields\n * are read-only in the row dialog and their values are passed through unchanged.\n */\n@Component({\n selector: 'mm-entity-form-records-field',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [GridModule, ButtonsModule],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EntityFormRecordsFieldComponent), multi: true }\n ],\n template: `\n <div class=\"mm-efrec\">\n @if (!isDisabled()) {\n <div class=\"mm-efrec-toolbar\">\n <button kendoButton type=\"button\" size=\"small\" [svgIcon]=\"icons.plus\" class=\"mm-efrec-add\"\n [disabled]=\"!canAdd()\" (click)=\"addRow()\">{{ msg().add }}</button>\n </div>\n }\n <kendo-grid [data]=\"gridRows()\" [sortable]=\"false\" [pageable]=\"false\" [scrollable]=\"'none'\" class=\"mm-efrec-grid\">\n @for (column of effectiveColumns(); track column.path) {\n <kendo-grid-column [title]=\"column.label\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <span class=\"mm-efrec-cell\">{{ cellText(dataItem.row, column.path) }}</span>\n </ng-template>\n </kendo-grid-column>\n }\n <kendo-grid-column [title]=\"msg().columnActions\" [width]=\"isDisabled() ? 60 : 170\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <div class=\"mm-efrec-actions\">\n @if (isDisabled()) {\n <button kendoButton type=\"button\" fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.view\"\n [title]=\"msg().viewTitle\" [attr.aria-label]=\"msg().viewTitle + ' ' + rowLabel(dataItem.index)\" (click)=\"editRow(dataItem.index)\"></button>\n } @else {\n <button kendoButton type=\"button\" fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.edit\" class=\"mm-efrec-edit\"\n [title]=\"msg().edit\" [attr.aria-label]=\"msg().edit + ' ' + rowLabel(dataItem.index)\" (click)=\"editRow(dataItem.index)\"></button>\n <button kendoButton type=\"button\" fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.up\" class=\"mm-efrec-up\"\n [title]=\"msg().moveUp\" [attr.aria-label]=\"msg().moveUp + ' ' + rowLabel(dataItem.index)\" [disabled]=\"dataItem.index === 0\"\n (click)=\"moveUp(dataItem.index)\"></button>\n <button kendoButton type=\"button\" fillMode=\"flat\" size=\"small\" [svgIcon]=\"icons.down\" class=\"mm-efrec-down\"\n [title]=\"msg().moveDown\" [attr.aria-label]=\"msg().moveDown + ' ' + rowLabel(dataItem.index)\" [disabled]=\"dataItem.index === rows().length - 1\"\n (click)=\"moveDown(dataItem.index)\"></button>\n <button kendoButton type=\"button\" fillMode=\"flat\" size=\"small\" themeColor=\"error\" [svgIcon]=\"icons.remove\" class=\"mm-efrec-remove\"\n [title]=\"msg().remove\" [attr.aria-label]=\"msg().remove + ' ' + rowLabel(dataItem.index)\" (click)=\"removeRow(dataItem.index)\"></button>\n }\n </div>\n </ng-template>\n </kendo-grid-column>\n <ng-template kendoGridNoRecordsTemplate>\n <span class=\"mm-efrec-empty\">{{ msg().emptyRecords }}</span>\n </ng-template>\n </kendo-grid>\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; }\n .mm-efrec { display: flex; flex-direction: column; gap: 6px; }\n .mm-efrec-toolbar { display: flex; justify-content: flex-end; }\n .mm-efrec-actions { display: flex; gap: 2px; justify-content: flex-end; }\n .mm-efrec-cell { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block; }\n .mm-efrec-empty { color: var(--theme-text-secondary); font-style: italic; }\n `]\n})\nexport class EntityFormRecordsFieldComponent implements ControlValueAccessor {\n private readonly entityFormService = inject(EntityFormService);\n private readonly dialogService = inject(DialogService);\n private readonly locale = inject(LOCALE_ID);\n\n readonly ckRecordId = input.required<string>();\n readonly columns = input<EntityFormRecordColumn[] | null | undefined>([]);\n readonly single = input(false);\n readonly readOnly = input(false);\n readonly messages = input<Partial<EntityFormsMessages>>({});\n /** No key ring (Q17): SECRET members cannot get a new value in the row editor (badge + hint only). */\n readonly secretWritesDisabled = input(false);\n\n protected readonly icons = {\n plus: MM_ACTION_ICONS.add, edit: MM_ACTION_ICONS.edit, up: arrowUpIcon, down: arrowDownIcon,\n remove: MM_ACTION_ICONS.delete, view: MM_ACTION_ICONS.view,\n };\n\n /** Row name in the accessible names of the row buttons (\"Remove row 2\", AB#5579). */\n protected rowLabel(index: number): string {\n const m = this.msg();\n return formatEntityFormsMessage(m.recordRowLabel ?? DEFAULT_ENTITY_FORMS_MESSAGES.recordRowLabel!, { index: index + 1 });\n }\n protected readonly msg = computed(() => mergeEntityFormsMessages(this.messages()));\n\n protected readonly rows = signal<Record<string, unknown>[]>([]);\n private readonly disabledByForm = signal(false);\n protected readonly isDisabled = computed(() => this.readOnly() || this.disabledByForm());\n /** CK metadata of the record, loaded per `ckRecordId`; `null` until loaded or when unknown. */\n readonly record = signal<CkRecordInfo | null>(null);\n\n protected readonly gridRows = computed<GridRow[]>(() => this.rows().map((row, index) => ({ index, row })));\n readonly canAdd = computed(() => !this.isDisabled() && (!this.single() || this.rows().length === 0));\n\n /** Configured columns, or the first record attributes when the form lists none. */\n readonly effectiveColumns = computed<EntityFormRecordColumn[]>(() => {\n const configured = this.columns() ?? [];\n if (configured.length > 0) {\n return configured;\n }\n return (this.record()?.attributes ?? [])\n .slice(0, DERIVED_COLUMN_COUNT)\n .map(a => ({ path: a.attributeName, label: humanizeAttributeName(a.attributeName) }));\n });\n\n private readonly enumOptionsByAttribute = computed(() => {\n const result = new Map<string, { key: number; name: string }[]>();\n for (const field of buildRecordFieldModels(this.record()?.attributes ?? [])) {\n if (field.enumOptions) {\n result.set(field.attributeName.toLowerCase(), field.enumOptions);\n }\n }\n return result;\n });\n\n /** Lower-cased names of SECRET members: their cells show the badge text, never a value. */\n private readonly secretAttributes = computed(() => new Set(\n buildRecordFieldModels(this.record()?.attributes ?? []).filter(f => f.editor === 'secret').map(f => f.attributeName.toLowerCase())));\n\n private onChange: (value: Record<string, unknown>[]) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n private recordRequest = 0;\n\n constructor() {\n effect(() => {\n const id = this.ckRecordId();\n void this.loadRecord(id);\n });\n }\n\n /** Current value (a shallow copy). */\n getValue(): Record<string, unknown>[] {\n return this.rows().map(r => ({ ...r }));\n }\n\n writeValue(value: Record<string, unknown>[] | Record<string, unknown> | null | undefined): void {\n if (Array.isArray(value)) {\n this.rows.set(value.filter(r => r !== null && typeof r === 'object').map(r => ({ ...r })));\n } else if (value && typeof value === 'object') {\n // Tolerate a bare dict for a single RECORD.\n this.rows.set([{ ...value }]);\n } else {\n this.rows.set([]);\n }\n }\n\n registerOnChange(fn: (value: Record<string, unknown>[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledByForm.set(isDisabled);\n }\n\n protected cellText(row: Record<string, unknown>, path: string): string {\n const key = Object.keys(row).find(k => k.toLowerCase() === path.toLowerCase()) ?? path;\n if (this.secretAttributes().has(path.toLowerCase())) {\n const m = this.msg();\n return formatRecordSecretCell(row[key], secretStatusLabelsOf(m), m.secretRecordMemberNewValue,\n (date) => formatDate(date, 'medium', this.locale));\n }\n return formatRecordCell(row[key], this.enumOptionsByAttribute().get(path.toLowerCase()));\n }\n\n /** Opens the row dialog for a new row and appends the result. No-op when the limit is reached. */\n async addRow(): Promise<void> {\n if (!this.canAdd()) {\n return;\n }\n const row = await this.openRowDialog(null);\n if (row && this.canAdd()) {\n this.commit([...this.rows(), row]);\n }\n }\n\n /** Opens the row dialog for an existing row; in read-only mode the dialog only displays it. */\n async editRow(index: number): Promise<void> {\n const current = this.rows()[index];\n if (!current) {\n return;\n }\n const row = await this.openRowDialog(current);\n if (row && !this.isDisabled()) {\n const next = [...this.rows()];\n next[index] = row;\n this.commit(next);\n }\n }\n\n removeRow(index: number): void {\n if (this.isDisabled() || index < 0 || index >= this.rows().length) {\n return;\n }\n this.commit(this.rows().filter((_, i) => i !== index));\n }\n\n moveUp(index: number): void {\n this.swap(index, index - 1);\n }\n\n moveDown(index: number): void {\n this.swap(index, index + 1);\n }\n\n /**\n * Opens `EntityFormRecordRowDialogComponent` and resolves with the edited row, or `undefined` when\n * cancelled. Protected seam so specs can stub the dialog.\n */\n protected async openRowDialog(row: Record<string, unknown> | null): Promise<Record<string, unknown> | undefined> {\n const record = this.record() ?? await this.loadRecord(this.ckRecordId());\n const m = this.msg();\n const dialogRef = this.dialogService.open({\n content: EntityFormRecordRowDialogComponent,\n title: row ? (this.isDisabled() ? m.viewTitle : m.recordRowDialogTitleEdit) : m.recordRowDialogTitleAdd,\n minWidth: 420,\n maxWidth: '90vw',\n maxHeight: '90vh'\n });\n const content = dialogRef.content;\n if (content) {\n content.setInput('record', record ?? { ckRecordId: this.ckRecordId(), attributes: [] });\n content.setInput('row', row);\n content.setInput('readOnly', this.isDisabled());\n content.setInput('secretWritesDisabled', this.secretWritesDisabled());\n content.setInput('messages', this.messages());\n }\n const result = await firstValueFrom(dialogRef.result);\n if (result && typeof result === 'object' && !(result instanceof DialogCloseResult)) {\n return result as unknown as Record<string, unknown>;\n }\n return undefined;\n }\n\n private swap(from: number, to: number): void {\n const rows = this.rows();\n if (this.isDisabled() || from < 0 || to < 0 || from >= rows.length || to >= rows.length) {\n return;\n }\n const next = [...rows];\n [next[from], next[to]] = [next[to], next[from]];\n this.commit(next);\n }\n\n private commit(next: Record<string, unknown>[]): void {\n this.rows.set(next);\n this.onTouched();\n this.onChange(this.getValue());\n }\n\n private async loadRecord(ckRecordId: string): Promise<CkRecordInfo | null> {\n const request = ++this.recordRequest;\n if (!ckRecordId) {\n this.record.set(null);\n return null;\n }\n try {\n const info = (await this.entityFormService.getCkRecord(ckRecordId)) ?? null;\n if (request === this.recordRequest) {\n this.record.set(info);\n }\n return info;\n } catch (error) {\n console.warn(`[entity-forms] Record metadata for ${ckRecordId} could not be loaded.`, error);\n if (request === this.recordRequest) {\n this.record.set(null);\n }\n return null;\n }\n }\n}\n","import * as Types from '@meshmakers/octo-services';\n\nimport { gql } from 'apollo-angular';\nimport { Injectable } from '@angular/core';\nimport * as Apollo from 'apollo-angular';\nexport type EntityFormGetReferenceOptionsWithAttributesQueryVariablesDto = Types.Exact<{\n ckTypeId: Types.Scalars['String']['input'];\n first?: Types.InputMaybe<Types.Scalars['Int']['input']>;\n after?: Types.InputMaybe<Types.Scalars['String']['input']>;\n searchFilter?: Types.InputMaybe<Types.SearchFilterDto>;\n fieldFilters?: Types.InputMaybe<Array<Types.InputMaybe<Types.FieldFilterDto>> | Types.InputMaybe<Types.FieldFilterDto>>;\n sort?: Types.InputMaybe<Array<Types.InputMaybe<Types.SortDto>> | Types.InputMaybe<Types.SortDto>>;\n attributeNames: Array<Types.InputMaybe<Types.Scalars['String']['input']>> | Types.InputMaybe<Types.Scalars['String']['input']>;\n}>;\n\n\nexport type EntityFormGetReferenceOptionsWithAttributesQueryDto = { __typename?: 'OctoQuery', runtime?: { __typename?: 'RuntimeModelQuery', runtimeEntities?: { __typename?: 'RtEntityGenericDtoConnection', totalCount?: number | null, pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean }, items?: Array<{ __typename?: 'RtEntity', rtId: any, ckTypeId: any, rtWellKnownName?: string | null, rtDisplayName: string, rtDisplayDescription?: string | null, attributes?: { __typename?: 'RtEntityAttributeDtoConnection', items?: Array<{ __typename?: 'RtEntityAttribute', attributeName?: string | null, value?: any | null } | null> | null } | null } | null> | null } | null } | null };\n\nexport const EntityFormGetReferenceOptionsWithAttributesDocumentDto = gql`\n query entityFormGetReferenceOptionsWithAttributes($ckTypeId: String!, $first: Int, $after: String, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort], $attributeNames: [String]!) {\n runtime {\n runtimeEntities(\n ckId: $ckTypeId\n first: $first\n after: $after\n searchFilter: $searchFilter\n fieldFilter: $fieldFilters\n sortOrder: $sort\n ) {\n totalCount\n pageInfo {\n endCursor\n hasNextPage\n }\n items {\n rtId\n ckTypeId\n rtWellKnownName\n rtDisplayName\n rtDisplayDescription\n attributes(attributeNames: $attributeNames) {\n items {\n attributeName\n value\n }\n }\n }\n }\n }\n}\n `;\n\n @Injectable({\n providedIn: 'root'\n })\n export class EntityFormGetReferenceOptionsWithAttributesDtoGQL extends Apollo.Query<EntityFormGetReferenceOptionsWithAttributesQueryDto, EntityFormGetReferenceOptionsWithAttributesQueryVariablesDto> {\n document = EntityFormGetReferenceOptionsWithAttributesDocumentDto;\n \n constructor(apollo: Apollo.Apollo) {\n super(apollo);\n }\n }","import { ChangeDetectionStrategy, Component, computed, effect, forwardRef, inject, input, signal, untracked, viewChild } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { EntitySelectInputComponent } from '@meshmakers/shared-ui';\nimport { EntityFormGetReferenceOptionsDtoGQL } from '../../graphQL/getEntityFormReferenceOptions';\nimport { EntityFormGetReferenceOptionsWithAttributesDtoGQL } from '../../graphQL/getEntityFormReferenceOptionsWithAttributes';\nimport { EntityFormsMessages, formatEntityFormsMessage, mergeEntityFormsMessages } from '../../entity-forms.messages';\nimport { EntityReferenceDataSource, EntityReferenceItem } from './entity-reference-data-source';\nimport type { CkAttributeInfo } from '../../models/entity-form.models';\n\n/** One selected reference target. The field value is always an array of these. */\nexport interface EntityFormReferenceValue {\n rtId: string;\n ckTypeId: string;\n displayName: string;\n}\n\nfunction toValue(item: EntityReferenceItem | EntityFormReferenceValue): EntityFormReferenceValue {\n return { rtId: item.rtId, ckTypeId: item.ckTypeId, displayName: item.displayName };\n}\n\n/**\n * Reference editor of `mm-entity-form` (association roles and rtId-holding STRING attributes).\n *\n * - **Value:** `EntityFormReferenceValue[]` (`{ rtId, ckTypeId, displayName }`), an array even for\n * single selection; `[]` when nothing is selected.\n * - **Limit:** with `multiple = false` a new pick replaces the current one, so the value never\n * grows beyond one entry; a written value with more entries is reported by the validator as\n * `{ maxItems: { max: 1, actual } }`. With `multiple = true` picks are appended, de-duplicated by\n * `rtId`.\n * - **Picker:** shared-ui `mm-entity-select-input` (typeahead plus grid dialog) over the\n * secret-safe {@link EntityReferenceDataSource}, which selects only the non-secret `name` attribute of the targets.\n * - **Display attributes:** with `displayAttributes` the picker rows and the current value read\n * `name · value1 · value2`, each value formatted by its CK value type (`displayAttributeInfo`):\n * enum names, yes/no, dates. The current value's label is looked up once per rtId; it only\n * changes what is shown, never the field value.\n */\n@Component({\n selector: 'mm-entity-form-reference-field',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ButtonsModule, EntitySelectInputComponent],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EntityFormReferenceFieldComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => EntityFormReferenceFieldComponent), multi: true }\n ],\n template: `\n <div class=\"mm-efref\" [class.mm-efref--disabled]=\"isDisabled()\">\n @if (value().length > 0) {\n <ul class=\"mm-efref-list\">\n @for (item of value(); track item.rtId) {\n <li class=\"mm-efref-item\" [attr.data-rtid]=\"item.rtId\">\n <span class=\"mm-efref-name\" [title]=\"labelOf(item) + ' (' + item.ckTypeId + ' · ' + item.rtId + ')'\">{{ labelOf(item) }}</span>\n @if (!isDisabled()) {\n <button kendoButton type=\"button\" fillMode=\"flat\" size=\"small\" class=\"mm-efref-remove\"\n [attr.aria-label]=\"msg().remove + ' ' + labelOf(item)\" [title]=\"msg().remove\"\n (click)=\"remove(item.rtId)\">×</button>\n }\n </li>\n }\n </ul>\n } @else if (isDisabled()) {\n <span class=\"mm-efref-empty\">{{ msg().emptyReferences }}</span>\n }\n @if (!isDisabled() && dataSource(); as ds) {\n <mm-entity-select-input\n class=\"mm-efref-input\"\n [dataSource]=\"ds\"\n [dialogDataSource]=\"ds\"\n [multiSelect]=\"multiple()\"\n [minSearchLength]=\"1\"\n [placeholder]=\"placeholder() || msg().referencePlaceholder\"\n [dialogTitle]=\"msg().select\"\n (entitySelected)=\"onPicked([$event])\"\n (entitiesSelected)=\"onPicked($event)\">\n </mm-entity-select-input>\n }\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; }\n .mm-efref { display: flex; flex-direction: column; gap: 6px; }\n .mm-efref-list { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; }\n .mm-efref-item {\n display: inline-flex; align-items: center; gap: 4px; padding: 2px 4px 2px 10px;\n border: 1px solid var(--theme-border-subtle); border-radius: 12px;\n background: var(--theme-bg-elevated); color: var(--theme-text-primary);\n }\n .mm-efref--disabled .mm-efref-item { padding-right: 10px; }\n .mm-efref-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 320px; }\n .mm-efref-remove { min-width: 0; padding: 0 4px; line-height: 1; }\n .mm-efref-empty { color: var(--theme-text-secondary); font-style: italic; }\n `]\n})\nexport class EntityFormReferenceFieldComponent implements ControlValueAccessor, Validator {\n private readonly gql = inject(EntityFormGetReferenceOptionsDtoGQL);\n private readonly attributesGql = inject(EntityFormGetReferenceOptionsWithAttributesDtoGQL);\n\n readonly targetCkTypeId = input.required<string>();\n readonly multiple = input(false);\n /** Non-secret target attributes shown next to the name (AB#5547). */\n readonly displayAttributes = input<readonly string[]>([]);\n /** CK metadata of the display attributes on the target type; formats their values (AB#5547). */\n readonly displayAttributeInfo = input<readonly CkAttributeInfo[]>([]);\n readonly placeholder = input<string | null | undefined>(undefined);\n readonly readOnly = input(false);\n readonly messages = input<Partial<EntityFormsMessages>>({});\n\n protected readonly msg = computed(() => mergeEntityFormsMessages(this.messages()));\n protected readonly value = signal<EntityFormReferenceValue[]>([]);\n private readonly disabledByForm = signal(false);\n protected readonly isDisabled = computed(() => this.readOnly() || this.disabledByForm());\n /** Labels with display attributes, by rtId (from picks and from lookups of the current value). */\n private readonly labels = signal<ReadonlyMap<string, string>>(new Map());\n private readonly requested = new Set<string>();\n\n /** One data source per target type. */\n readonly dataSource = computed(() => {\n const target = this.targetCkTypeId();\n if (!target) {\n return null;\n }\n const m = this.msg();\n return new EntityReferenceDataSource(this.gql, target, {\n name: m.columnName,\n wellKnownName: m.columnWellKnownName,\n type: m.columnType,\n rtId: m.copyRtId\n }, this.displayAttributes(), this.attributesGql, {\n attributes: this.displayAttributeInfo(),\n yes: m.toggleOn,\n no: m.toggleOff\n });\n });\n\n constructor() {\n // The current value comes with the plain name only; read the display attributes of its targets.\n effect(() => {\n const ds = this.dataSource();\n const ids = this.value().map(v => v.rtId);\n if (!ds || !ds.displayAttributes.length) {\n return;\n }\n untracked(() => this.lookupLabels(ds, ids));\n });\n }\n\n /** Label shown for a selected target: with display attributes when known, else its display name. */\n labelOf(item: EntityFormReferenceValue): string {\n return this.labels().get(item.rtId) ?? item.displayName;\n }\n\n private readonly selectInput = viewChild(EntitySelectInputComponent);\n private onChange: (value: EntityFormReferenceValue[]) => void = () => undefined;\n private onTouched: () => void = () => undefined;\n private onValidatorChange: () => void = () => undefined;\n\n /** Current value (a copy). */\n getValue(): EntityFormReferenceValue[] {\n return [...this.value()];\n }\n\n writeValue(value: EntityFormReferenceValue[] | null | undefined): void {\n this.value.set(Array.isArray(value) ? value.filter(v => !!v?.rtId).map(toValue) : []);\n }\n\n registerOnChange(fn: (value: EntityFormReferenceValue[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledByForm.set(isDisabled);\n }\n\n validate(_control: AbstractControl): ValidationErrors | null {\n const count = this.value().length;\n if (!this.multiple() && count > 1) {\n return { maxItems: { max: 1, actual: count, message: formatEntityFormsMessage(this.msg().validationMaxItems, { max: 1 }) } };\n }\n return null;\n }\n\n /** Applies picked entities: replaces in single mode (first pick wins), appends unique in multi mode. */\n onPicked(items: (EntityReferenceItem | EntityFormReferenceValue)[] | null | undefined): void {\n const picked = (items ?? []).filter(i => !!i?.rtId).map(toValue);\n if (this.isDisabled() || picked.length === 0) {\n return;\n }\n if (this.displayAttributes().length) {\n // Picker rows already carry the display attributes in their label.\n this.labels.update(current => new Map([...current, ...picked.map(p => [p.rtId, p.displayName] as const)]));\n }\n let next: EntityFormReferenceValue[];\n if (this.multiple()) {\n const seen = new Set(this.value().map(v => v.rtId));\n next = [...this.value()];\n for (const item of picked) {\n if (!seen.has(item.rtId)) {\n seen.add(item.rtId);\n next.push(item);\n }\n }\n } else {\n next = [picked[0]];\n }\n this.commit(next);\n // The select input is only a picker; its own text is reset after every pick.\n this.selectInput()?.writeValue(null);\n }\n\n /** Removes one selected target. */\n remove(rtId: string): void {\n if (this.isDisabled()) {\n return;\n }\n this.commit(this.value().filter(v => v.rtId !== rtId));\n }\n\n private lookupLabels(ds: EntityReferenceDataSource, ids: string[]): void {\n const missing = ids.filter(id => !this.labels().has(id) && !this.requested.has(id));\n if (!missing.length) {\n return;\n }\n missing.forEach(id => this.requested.add(id));\n ds.lookup(missing).then(found => {\n if (found.size) {\n this.labels.update(current => new Map([...current, ...[...found.values()].map(i => [i.rtId, i.displayName] as const)]));\n }\n }).catch(() => {\n // Labels are cosmetic; the plain display name stays.\n });\n }\n\n private commit(next: EntityFormReferenceValue[]): void {\n const unchanged = next.length === this.value().length && next.every((v, i) => v.rtId === this.value()[i].rtId);\n this.onTouched();\n if (unchanged) {\n return;\n }\n this.value.set(next);\n this.onChange(this.getValue());\n this.onValidatorChange();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { KENDO_CHIP } from '@progress/kendo-angular-buttons';\nimport { KENDO_TEXTBOX } from '@progress/kendo-angular-inputs';\n\n/** Value shape of the chips editor: a flat array of strings or integers. */\nexport type EntityFormChipValue = string | number;\n\n/**\n * Editor for STRING_ARRAY / INT_ARRAY attributes: a text box that adds a chip on\n * Enter or comma, and removable chips for the current items.\n *\n * With `numeric` set, input that does not parse as an integer is rejected and the\n * stored items are numbers. Duplicates are ignored. Value: `(string|number)[]`\n * (never `null`; an empty array means \"no items\").\n */\n@Component({\n selector: 'mm-entity-form-chips-editor',\n standalone: true,\n imports: [KENDO_CHIP, KENDO_TEXTBOX],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EntityFormChipsEditorComponent),\n multi: true,\n },\n ],\n template: `\n <div class=\"mm-ef-chips\">\n @if (items().length > 0) {\n <div class=\"mm-ef-chips__list\">\n @for (item of items(); track $index) {\n <kendo-chip\n size=\"small\"\n [label]=\"'' + item\"\n [removable]=\"!disabled()\"\n [disabled]=\"disabled()\"\n (remove)=\"removeAt($index)\"\n ></kendo-chip>\n }\n </div>\n }\n @if (!disabled()) {\n <kendo-textbox\n class=\"mm-ef-chips__input\"\n [value]=\"draft()\"\n [placeholder]=\"placeholder() ?? ''\"\n (valueChange)=\"draft.set($event ?? '')\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"onBlur()\"\n ></kendo-textbox>\n @if (invalidDraft()) {\n <span class=\"mm-ef-chips__hint\">{{ invalidMessage() }}</span>\n }\n }\n @if (disabled() && items().length === 0) {\n <span class=\"mm-ef-chips__empty\">—</span>\n }\n </div>\n `,\n styles: [`\n .mm-ef-chips { display: flex; flex-direction: column; gap: 6px; }\n .mm-ef-chips__list { display: flex; flex-wrap: wrap; gap: 4px; }\n .mm-ef-chips__hint { font-size: 12px; color: var(--theme-status-error); }\n .mm-ef-chips__empty { color: var(--theme-text-muted); }\n `],\n})\nexport class EntityFormChipsEditorComponent implements ControlValueAccessor {\n /** Store integers instead of strings (INT_ARRAY / INTEGER_ARRAY). */\n readonly numeric = input(false);\n readonly placeholder = input<string | null | undefined>(undefined);\n /** Shown below the input when a non-integer is entered in numeric mode. */\n readonly invalidMessage = input('Enter a whole number.');\n\n protected readonly items = signal<EntityFormChipValue[]>([]);\n protected readonly draft = signal('');\n protected readonly invalidDraft = signal(false);\n protected readonly disabled = signal(false);\n\n private onChange: (value: EntityFormChipValue[]) => void = () => { /* noop */ };\n private onTouched: () => void = () => { /* noop */ };\n\n writeValue(value: unknown): void {\n this.items.set(Array.isArray(value) ? [...(value as EntityFormChipValue[])] : []);\n this.draft.set('');\n this.invalidDraft.set(false);\n }\n\n registerOnChange(fn: (value: EntityFormChipValue[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /** Adds the current draft (may contain several comma separated items). Returns true when something was consumed. */\n commitDraft(): boolean {\n const raw = this.draft().trim();\n if (!raw) {\n this.invalidDraft.set(false);\n return false;\n }\n const parts = raw.split(',').map((p) => p.trim()).filter((p) => p.length > 0);\n const parsed: EntityFormChipValue[] = [];\n for (const part of parts) {\n if (this.numeric()) {\n if (!/^[-+]?\\d+$/.test(part)) {\n this.invalidDraft.set(true);\n return false;\n }\n parsed.push(parseInt(part, 10));\n } else {\n parsed.push(part);\n }\n }\n const next = [...this.items()];\n for (const p of parsed) {\n if (!next.includes(p)) {\n next.push(p);\n }\n }\n this.invalidDraft.set(false);\n this.draft.set('');\n this.emit(next);\n return true;\n }\n\n removeAt(index: number): void {\n const next = this.items().filter((_, i) => i !== index);\n this.emit(next);\n this.onTouched();\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ',') {\n event.preventDefault();\n this.commitDraft();\n } else if (event.key === 'Backspace' && this.draft() === '' && this.items().length > 0) {\n this.removeAt(this.items().length - 1);\n }\n }\n\n protected onBlur(): void {\n this.commitDraft();\n this.onTouched();\n }\n\n private emit(next: EntityFormChipValue[]): void {\n this.items.set(next);\n this.onChange(next);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, input, output, signal } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { KENDO_BUTTON } from '@progress/kendo-angular-buttons';\nimport { KENDO_TEXTAREA, KENDO_TEXTBOX } from '@progress/kendo-angular-inputs';\nimport { EntityFormsMessages, formatEntityFormsMessage } from '../../entity-forms.messages';\n\n/**\n * Editor of a write-only secret field (AB#5542, AB#5544 item 4, decisions 2026-10-06 Q8/Q10/Q15/Q17).\n *\n * - The stored value is never shown or prefilled; the status badge lives in the field shell.\n * - \"Show\" reveals only the value the user typed in this session (never a stored value); it is\n * disabled while the input is empty and resets when the input is emptied.\n * - \"Clear\" stages removing an optional secret; the parent sends it on Save as\n * `clearSecretAttributes`. Clear and a new value are mutually exclusive: Clear is disabled while a\n * value is typed, and the input is replaced by a note with \"Undo\" while a clear is staged.\n * - `multiline` renders a monospace text area (PEM keys, `EntityFormField.Editor: multiline`). It is\n * masked by rendering the text transparent (caret, selection and placeholder stay visible) and a\n * status line says how many lines were entered. This works in every browser — unlike\n * `-webkit-text-security`, which Firefox does not reliably support and which cannot keep line\n * breaks visible; an `<input type=\"password\">` would drop the PEM line breaks.\n * - The placeholder is also the input's tooltip, so it stays readable when a narrow panel (Data\n * Explorer peek) truncates it.\n * - Read-only users get no editor at all (the badge is enough); without a key ring the input is\n * disabled and a hint explains why (`writesDisabled`, the parent disables the control).\n */\n@Component({\n selector: 'mm-entity-form-secret-editor',\n standalone: true,\n imports: [ReactiveFormsModule, KENDO_TEXTBOX, KENDO_TEXTAREA, KENDO_BUTTON],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'mm-ef-secret' },\n template: `\n @if (!readOnly()) {\n @if (clearStaged()) {\n <div class=\"mm-ef-secret__staged\" data-secret-clear-staged>\n <span>{{ messages().secretClearStagedNote }}</span>\n <button kendoButton type=\"button\" size=\"small\" fillMode=\"flat\" data-secret-undo (click)=\"clearStagedChange.emit(false)\">\n {{ messages().secretUndoClear }}\n </button>\n </div>\n } @else {\n <div class=\"mm-ef-secret__row\">\n @if (multiline()) {\n <kendo-textarea\n class=\"mm-ef-mono mm-ef-secret__input\"\n [class.mm-ef-secret__input--masked]=\"!revealed()\"\n [formControl]=\"control()\"\n [rows]=\"6\"\n resizable=\"vertical\"\n [placeholder]=\"placeholder()\"\n [inputAttributes]=\"{ autocomplete: 'off', autocorrect: 'off', autocapitalize: 'off', spellcheck: 'false', 'data-secret-input': 'multiline' }\"\n [attr.title]=\"placeholder() || null\"\n ></kendo-textarea>\n } @else {\n <kendo-textbox\n class=\"mm-ef-secret__input\"\n [formControl]=\"control()\"\n [type]=\"revealed() ? 'text' : 'password'\"\n [placeholder]=\"placeholder()\"\n [inputAttributes]=\"{ autocomplete: 'new-password', spellcheck: 'false', 'data-secret-input': 'single' }\"\n [attr.title]=\"placeholder() || null\"\n ></kendo-textbox>\n }\n <button\n kendoButton\n type=\"button\"\n size=\"small\"\n fillMode=\"flat\"\n data-secret-show\n [disabled]=\"!hasTypedValue()\"\n [attr.aria-pressed]=\"revealed()\"\n (click)=\"shown.set(!shown())\"\n >{{ revealed() ? messages().secretHide : messages().secretShow }}</button>\n @if (canClear()) {\n <button\n kendoButton\n type=\"button\"\n size=\"small\"\n fillMode=\"flat\"\n data-secret-clear\n [disabled]=\"hasTypedValue() || writesDisabled()\"\n (click)=\"clearStagedChange.emit(true)\"\n >{{ messages().secretClear }}</button>\n }\n </div>\n }\n @if (multiline() && !clearStaged() && hasTypedValue() && !revealed()) {\n <div class=\"mm-ef-secret__masked\" data-secret-masked-status>{{ maskedStatus() }}</div>\n }\n @if (writesDisabled()) {\n <div class=\"mm-ef-secret__hint\" data-secret-writes-disabled>{{ messages().secretWritesDisabled }}</div>\n }\n }\n `,\n})\nexport class EntityFormSecretEditorComponent {\n readonly control = input.required<FormControl<unknown>>();\n readonly messages = input.required<EntityFormsMessages>();\n readonly placeholder = input('');\n readonly multiline = input(false);\n readonly readOnly = input(false);\n /** Offer \"Clear\": optional SECRET with a stored value, edit mode, write access. */\n readonly canClear = input(false);\n readonly clearStaged = input(false);\n /** No key ring (Q17): the input is disabled by the parent; this shows the hint. */\n readonly writesDisabled = input(false);\n /** Change counter of the parent form, read so `hasTypedValue` follows the control value. */\n readonly revision = input(0);\n\n readonly clearStagedChange = output<boolean>();\n\n /** The user asked to reveal the typed value. */\n protected readonly shown = signal(false);\n\n protected readonly hasTypedValue = computed(() => {\n this.revision();\n const v = this.control().value;\n return typeof v === 'string' && v.length > 0;\n });\n\n /** Only a typed value can be revealed; emptying the input masks it again. */\n protected readonly revealed = computed(() => this.shown() && this.hasTypedValue());\n\n /** Status line of a masked multiline value: the number of lines, never the content. */\n protected readonly maskedStatus = computed(() => {\n this.revision();\n const v = this.control().value;\n const lines = typeof v === 'string' && v.length > 0 ? v.split(/\\r\\n|\\r|\\n/).length : 0;\n return formatEntityFormsMessage(this.messages().secretMultilineMasked, { lines });\n });\n\n constructor() {\n effect(() => {\n if (!this.hasTypedValue()) {\n this.shown.set(false);\n }\n });\n }\n}\n","import {\n AbstractControl,\n FormControl,\n FormGroup,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {\n EntityFormEditor,\n EntityFormMode,\n EntityFormValueState,\n ResolvedEntityForm,\n ResolvedField,\n} from '../models/entity-form.models';\n\n/** Editors whose value is free text (the `pattern` validator applies to these). */\nconst TEXT_LIKE_EDITORS: readonly EntityFormEditor[] = [\n 'text', 'multiline', 'password', 'url', 'email', 'json', 'yaml', 'cron',\n];\n\n/** Options of {@link buildFormGroup}. */\nexport interface EntityFormGroupOptions {\n /** Loaded values (edit / view). Absent in create mode unless the host prefills (singleton). */\n state?: EntityFormValueState | null;\n /** Everything read-only (host `readOnly` input or `capabilities.canEdit === false` in edit mode). */\n readOnly?: boolean;\n}\n\n/** All fields of a resolved form in section order. */\nexport function allFields(model: ResolvedEntityForm): ResolvedField[] {\n return model.sections.flatMap((s) => s.fields);\n}\n\n/** True when a field is a text-like editor. */\nexport function isTextLikeEditor(editor: EntityFormEditor): boolean {\n return TEXT_LIKE_EDITORS.includes(editor);\n}\n\n/**\n * True when the whole form is read-only: `view` mode, the host `readOnly` input, or an edit\n * form whose definition says `canEdit: false`.\n */\nexport function isFormReadOnly(model: ResolvedEntityForm, mode: EntityFormMode, readOnly: boolean): boolean {\n return readOnly || mode === 'view' || (mode === 'edit' && !model.capabilities.canEdit);\n}\n\n/**\n * Read-only rule of one field. `afterCreate` is editable only in create mode; `always` and the\n * `unsupported` editor are never editable.\n */\nexport function isFieldReadOnly(field: ResolvedField, mode: EntityFormMode, formReadOnly: boolean): boolean {\n if (formReadOnly || mode === 'view') {\n return true;\n }\n if (field.editor === 'unsupported' || field.readOnly === 'always') {\n return true;\n }\n return field.readOnly === 'afterCreate' && mode !== 'create';\n}\n\n/**\n * Whether a secret field is required right now: only on create, or when the server has no\n * value yet (D5.5). A set secret may be left empty (\"keep\").\n */\nexport function isSecretRequired(field: ResolvedField, mode: EntityFormMode, secretPresence: Record<string, boolean>): boolean {\n if (!field.required) {\n return false;\n }\n if (mode === 'create') {\n return true;\n }\n return !secretPresence[field.attributeName ?? field.key];\n}\n\n/** Empty form value of a field (never `undefined`). */\nexport function emptyValue(field: ResolvedField): unknown {\n switch (field.editor) {\n case 'toggle':\n return false;\n case 'chips':\n case 'reference':\n case 'records':\n return [];\n default:\n return null;\n }\n}\n\n/**\n * Initial form value of a field.\n * - Secrets are never prefilled (D5).\n * - Associations come from `state.associations` keyed by the field key (fallback: rtRoleId).\n * - In create mode a value from `state` (host prefill) wins over the field default.\n */\nexport function initialValue(field: ResolvedField, mode: EntityFormMode, state?: EntityFormValueState | null): unknown {\n if (field.secret) {\n return null;\n }\n let value: unknown;\n if (field.kind === 'association') {\n const role = field.reference?.role?.rtRoleId;\n value = state?.associations?.[field.key] ?? (role ? state?.associations?.[role] : undefined);\n value = Array.isArray(value) ? value.map((v) => ({ ...v })) : undefined;\n } else if (field.kind === 'system') {\n value = field.key === 'rtWellKnownName' ? state?.rtWellKnownName : state?.values?.[field.key];\n } else {\n value = state?.values?.[field.key];\n }\n if ((value === undefined || value === null) && mode === 'create' && field.defaultValue !== undefined) {\n value = field.defaultValue;\n }\n if (value === undefined || value === null) {\n return emptyValue(field);\n }\n return cloneValue(value);\n}\n\n/** Validator: value must parse as JSON (empty passes; `required` handles emptiness). */\nexport function jsonValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const v = control.value;\n if (v === null || v === undefined || (typeof v === 'string' && v.trim() === '')) {\n return null;\n }\n if (typeof v !== 'string') {\n return null;\n }\n try {\n JSON.parse(v);\n return null;\n } catch {\n return { json: true };\n }\n };\n}\n\n/** Validator: value must be an absolute URL with a scheme (`https://…`, `sftp://…`, `oci://…`). */\nexport function urlValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const v = control.value;\n if (v === null || v === undefined || (typeof v === 'string' && v.trim() === '')) {\n return null;\n }\n const s = String(v).trim();\n if (!/^[a-z][a-z0-9+.-]*:\\/\\/\\S+$/i.test(s)) {\n return { url: true };\n }\n try {\n new URL(s);\n return null;\n } catch {\n return { url: true };\n }\n };\n}\n\n/**\n * Validator for `pattern`. The expression is anchored like Angular's `Validators.pattern`; an\n * invalid expression is ignored (a broken form definition must not block saving).\n */\nexport function safePatternValidator(pattern: string): ValidatorFn | null {\n try {\n new RegExp(pattern);\n } catch {\n return null;\n }\n return Validators.pattern(pattern);\n}\n\n/** Validators of one field for the given mode. */\nexport function buildValidators(field: ResolvedField, mode: EntityFormMode, secretPresence: Record<string, boolean> = {}): ValidatorFn[] {\n const validators: ValidatorFn[] = [];\n const required = field.secret ? isSecretRequired(field, mode, secretPresence) : field.required;\n // A toggle always holds true/false, so \"required\" is trivially met.\n if (required && field.editor !== 'toggle') {\n validators.push(Validators.required);\n }\n if (field.editor === 'number') {\n if (typeof field.min === 'number') {\n validators.push(Validators.min(field.min));\n }\n if (typeof field.max === 'number') {\n validators.push(Validators.max(field.max));\n }\n }\n if (field.pattern && isTextLikeEditor(field.editor)) {\n const p = safePatternValidator(field.pattern);\n if (p) {\n validators.push(p);\n }\n }\n if (field.editor === 'email') {\n validators.push(Validators.email);\n }\n if (field.editor === 'url') {\n validators.push(urlValidator());\n }\n if (field.editor === 'json') {\n validators.push(jsonValidator());\n }\n return validators;\n}\n\n/**\n * Builds the reactive form group of a resolved form: one control per field, keyed by\n * `ResolvedField.key`. Read-only fields start disabled, so they never block validity and are\n * easy to tell apart from editable ones. Visibility (VisibleWhen) is applied afterwards by the\n * component, because it depends on live values.\n */\nexport function buildFormGroup(\n model: ResolvedEntityForm,\n mode: EntityFormMode,\n options: EntityFormGroupOptions = {},\n): FormGroup<Record<string, FormControl<unknown>>> {\n const state = options.state ?? null;\n const formReadOnly = isFormReadOnly(model, mode, options.readOnly ?? false);\n const secretPresence = state?.secretPresence ?? {};\n const controls: Record<string, FormControl<unknown>> = {};\n for (const field of allFields(model)) {\n if (controls[field.key]) {\n continue;\n }\n const disabled = isFieldReadOnly(field, mode, formReadOnly);\n controls[field.key] = new FormControl<unknown>(\n { value: initialValue(field, mode, state), disabled },\n { validators: buildValidators(field, mode, secretPresence) },\n );\n }\n return new FormGroup(controls);\n}\n\n/** Error message key of the first error of a control, in a stable priority order. */\nexport function firstErrorKey(errors: ValidationErrors | null | undefined): string | null {\n if (!errors) {\n return null;\n }\n const order = ['required', 'min', 'max', 'pattern', 'email', 'url', 'json'];\n return order.find((k) => k in errors) ?? Object.keys(errors)[0] ?? null;\n}\n\n/** Deep copy of plain form values (arrays, plain objects, Dates). */\nexport function cloneValue<T>(value: T): T {\n if (value instanceof Date) {\n return new Date(value.getTime()) as T;\n }\n if (Array.isArray(value)) {\n return value.map((v) => cloneValue(v)) as T;\n }\n if (value && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = cloneValue(v);\n }\n return out as T;\n }\n return value;\n}\n","import { formatDate } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, LOCALE_ID, computed, inject, input } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { formatSecretStatus } from '@meshmakers/octo-services';\nimport { EntityFormsMessages, formatEntityFormsMessage, secretStatusLabelsOf } from '../entity-forms.messages';\nimport { ResolvedField } from '../models/entity-form.models';\nimport { firstErrorKey } from './entity-form-controls';\n\n/**\n * Secret state shown next to a secret field (AB#5542 / AB#5544 item 4): set on the server, not set\n * (`needsReEntry` for a required SECRET — same wording as the secrets inventory),\n * stored but unreadable (`keyMissing`, re-entry needed), clear staged for the next save, or `null`\n * (not a secret, or create mode — then the plain \"Secret\" badge is shown).\n */\nexport type EntityFormSecretState = 'set' | 'notSet' | 'needsReEntry' | 'keyMissing' | 'clearStaged' | null;\n\n/**\n * Field shell of `mm-entity-form`: label (with required marker and secret badge), the projected\n * editor, help text and the first validation error. Purely presentational; the parent bumps\n * `revision` whenever the form's value, status or touched state changes so this OnPush shell\n * re-renders its error line.\n */\n@Component({\n selector: 'mm-entity-form-field',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mm-ef-field',\n '[class.mm-ef-field--full]': \"field().width === 'full'\",\n '[class.mm-ef-field--half]': \"field().width === 'half'\",\n '[class.mm-ef-field--invalid]': 'errorText() !== null',\n '[class.mm-ef-field--readonly]': 'readOnly()',\n '[attr.data-field-key]': 'field().key',\n },\n template: `\n <div class=\"mm-ef-field__label-row\">\n <label class=\"mm-ef-field__label\">\n {{ field().label }}\n @if (showRequired()) {\n <span class=\"mm-ef-field__required\" aria-hidden=\"true\">*</span>\n }\n </label>\n @if (field().secret) {\n <span\n class=\"mm-ef-field__badge\"\n [class.mm-ef-field__badge--set]=\"secretState() === 'set'\"\n [class.mm-ef-field__badge--not-set]=\"secretState() === 'notSet' || secretState() === 'needsReEntry'\"\n [class.mm-ef-field__badge--key-missing]=\"secretState() === 'keyMissing'\"\n [class.mm-ef-field__badge--clear-staged]=\"secretState() === 'clearStaged'\"\n [attr.data-secret-state]=\"secretState()\"\n [attr.title]=\"messages().secretHelp\"\n >{{ secretBadgeText() }}</span>\n }\n </div>\n <div class=\"mm-ef-field__editor\">\n <ng-content></ng-content>\n </div>\n @if (errorText(); as err) {\n <div class=\"mm-ef-field__error\" role=\"alert\">{{ err }}</div>\n } @else if (field().help) {\n <div class=\"mm-ef-field__help\">{{ field().help }}</div>\n }\n `,\n})\nexport class EntityFormFieldComponent {\n readonly field = input.required<ResolvedField>();\n readonly control = input<AbstractControl | null>(null);\n readonly messages = input.required<EntityFormsMessages>();\n readonly secretState = input<EntityFormSecretState>(null);\n /** When the current secret value was set (badge \"Set · set at …\"); null for legacy values. */\n readonly secretSetAt = input<Date | null>(null);\n readonly readOnly = input(false);\n /** Whether the field is required in the current mode (secrets: only when not set). */\n readonly required = input(false);\n /** Change counter from the parent form; read so `errorText` recomputes on every form event. */\n readonly revision = input(0);\n\n private readonly locale = inject(LOCALE_ID);\n\n protected readonly showRequired = computed(() => this.required() && !this.readOnly());\n\n /**\n * Badge text: visible to read-only users too (Q15). Set / not set / key missing use the shared\n * octo-services `formatSecretStatus` (one wording everywhere; labels from the messages).\n */\n protected readonly secretBadgeText = computed(() => {\n const m = this.messages();\n const state = this.secretState();\n switch (state) {\n case 'set':\n case 'notSet':\n case 'keyMissing':\n return formatSecretStatus(\n { isSet: state === 'set', keyMissing: state === 'keyMissing', setAt: state === 'set' ? this.secretSetAt() : null },\n (date) => formatDate(date, 'medium', this.locale),\n secretStatusLabelsOf(m),\n );\n case 'needsReEntry':\n return m.secretStatusNeedsReEntry;\n case 'clearStaged':\n return m.secretStatusClearStaged;\n default:\n return m.secretBadge;\n }\n });\n\n protected readonly errorText = computed<string | null>(() => {\n this.revision();\n const control = this.control();\n if (!control || control.disabled || !control.invalid || !(control.touched || control.dirty)) {\n return null;\n }\n const key = firstErrorKey(control.errors);\n const m = this.messages();\n const f = this.field();\n switch (key) {\n case null:\n return null;\n case 'required':\n return m.validationRequired;\n case 'min':\n return formatEntityFormsMessage(m.validationMin, { min: f.min ?? '' });\n case 'max':\n return formatEntityFormsMessage(m.validationMax, { max: f.max ?? '' });\n case 'pattern':\n return formatEntityFormsMessage(m.validationPattern, { pattern: f.pattern ?? '' });\n case 'email':\n return m.validationEmail;\n case 'url':\n return m.validationUrl;\n case 'json':\n return m.validationJson;\n default:\n return m.formInvalid;\n }\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { CronBuilderComponent } from '@meshmakers/shared-ui';\nimport { KENDO_SVGICON } from '@progress/kendo-angular-icons';\nimport { KENDO_DATETIMEPICKER } from '@progress/kendo-angular-dateinputs';\nimport { KENDO_DROPDOWNLIST } from '@progress/kendo-angular-dropdowns';\nimport {\n KENDO_NUMERICTEXTBOX,\n KENDO_SWITCH,\n KENDO_TEXTAREA,\n KENDO_TEXTBOX,\n} from '@progress/kendo-angular-inputs';\nimport { chevronDownIcon, chevronRightIcon } from '@progress/kendo-svg-icons';\nimport { isSecretValueType } from '@meshmakers/octo-services';\nimport { Subscription } from 'rxjs';\nimport { ENTITY_FORM_SECRET_KEY_RING_CONFIGURED } from '../core/secret-write-availability';\nimport {\n ENTITY_FORM_UNSET_PLACEHOLDER_VALUES,\n entityFormUnsetPlaceholderFields,\n entityFormUnsetPlaceholderLookup,\n} from '../core/unset-placeholders';\nimport { buildChangeSet } from '../core/change-set-builder';\nimport { formValuesEqual } from '../core/entity-form-value-mapper';\nimport { isVisible } from '../core/visible-when';\nimport { ENTITY_FORM_LABEL_RESOLVER, EntityFormLabelResolver, localizeEntityForm } from '../core/entity-form-labels';\nimport {\n ENTITY_FORM_BEFORE_SAVE,\n EntityFormBeforeSaveHook,\n EntityFormBeforeSaveOutcome,\n runEntityFormBeforeSave,\n} from '../core/before-save';\nimport {\n canonicaliseEntityFormPrefill,\n entityFormPrefillField,\n EntityFormPrefillValues,\n mergeEntityFormPrefill,\n toReferenceValue,\n} from '../core/entity-form-prefill';\nimport {\n DEFAULT_ENTITY_FORMS_MESSAGES,\n EntityFormsMessages,\n formatEntityFormsMessage,\n mergeEntityFormsMessages,\n} from '../entity-forms.messages';\nimport {\n CkAttributeInfo,\n CkRecordInfo,\n EntityFormChangeSet,\n EntityFormMode,\n EntityFormValueState,\n ResolvedEntityForm,\n ResolvedField,\n ResolvedSection,\n} from '../models/entity-form.models';\nimport { EntityFormRecordsFieldComponent } from './records/entity-form-records-field.component';\nimport { EntityFormReferenceFieldComponent } from './reference/entity-form-reference-field.component';\nimport { EntityFormChipsEditorComponent } from './editors/entity-form-chips-editor.component';\nimport { EntityFormSecretEditorComponent } from './editors/entity-form-secret-editor.component';\nimport {\n allFields,\n buildFormGroup,\n cloneValue,\n emptyValue,\n isFieldReadOnly,\n isFormReadOnly,\n isSecretRequired,\n} from './entity-form-controls';\nimport { EntityFormFieldComponent, EntityFormSecretState } from './entity-form-field.component';\n\n/** Integer value types: the number editor uses 0 decimals for these. */\nconst INTEGER_TYPES = ['INT', 'INTEGER', 'INT_64', 'INTEGER_64'];\n\n/**\n * Renders a {@link ResolvedEntityForm} as a reactive form: sections (1 or 2 columns,\n * collapsible), one field shell per field and the editor chosen by the resolver.\n *\n * Rules applied here (see the plan, §2.4):\n * - A field hidden by `VisibleWhen` has its control disabled, so it neither validates nor appears\n * in the change set. `Path=*` on a secret source counts the server-side presence as a value.\n * - Secrets are never prefilled; the badge says whether a value is set (also for read-only users).\n * Empty = unchanged. An optional SECRET can be cleared: the clear is staged and sent on Save as\n * `clearSecretAttributes` (mutually exclusive with a new value). Without a key ring\n * (`ENTITY_FORM_SECRET_KEY_RING_CONFIGURED` = false) secret inputs are disabled with a hint; the\n * signal may change at any time (status loaded asynchronously) and the controls follow it. In\n * create mode a required secret that cannot be entered blocks the form: `isValid()` is false and\n * `saveBlockedReason()` names the fields, so hosts disable Create with that reason (Q17: no late\n * `SecretEncryptionNotConfigured` / \"required secret missing\" error on save).\n * - `afterCreate` fields are read-only outside create mode; `readOnly`, `view` mode or\n * `capabilities.canEdit === false` (edit mode) make every field read-only.\n * - The change set holds only dirty controls (D6), built by `buildChangeSet`.\n * - Texts (labels, help, sections, enum options, record columns) go through the label resolver\n * (`labelResolver` input or `ENTITY_FORM_LABEL_RESOLVER`, AB#5623); a language change re-renders\n * the texts without rebuilding the controls.\n * - Host prefill (AB#5623): `initialValues` in create mode, `patchValues()` at any time.\n * - Before-save hook (AB#5623): `beforeSave` input / `ENTITY_FORM_BEFORE_SAVE`, applied by\n * {@link getChangeSetForSave}; secrets reach it only as values typed into this form.\n * - Unset placeholders (AB#5623, `ENTITY_FORM_UNSET_PLACEHOLDER_VALUES`): a non-secret field whose\n * stored / default / prefilled value is a listed placeholder starts empty with the\n * `notConfigured` hint; untouched it is not part of the change set, so the placeholder is never\n * written back. Secrets are never affected.\n */\n@Component({\n selector: 'mm-entity-form',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n KENDO_TEXTBOX,\n KENDO_TEXTAREA,\n KENDO_NUMERICTEXTBOX,\n KENDO_SWITCH,\n KENDO_DROPDOWNLIST,\n KENDO_DATETIMEPICKER,\n KENDO_SVGICON,\n CronBuilderComponent,\n EntityFormFieldComponent,\n EntityFormChipsEditorComponent,\n EntityFormSecretEditorComponent,\n EntityFormReferenceFieldComponent,\n EntityFormRecordsFieldComponent,\n ],\n templateUrl: './entity-form.component.html',\n styleUrl: './entity-form.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EntityFormComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly keyRingConfigured = inject(ENTITY_FORM_SECRET_KEY_RING_CONFIGURED, { optional: true });\n private readonly injectedLabelResolver = inject(ENTITY_FORM_LABEL_RESOLVER, { optional: true });\n private readonly injectedBeforeSave = inject(ENTITY_FORM_BEFORE_SAVE, { optional: true });\n private readonly unsetPlaceholders = entityFormUnsetPlaceholderLookup(inject(ENTITY_FORM_UNSET_PLACEHOLDER_VALUES, { optional: true }));\n\n // --- Inputs ---\n readonly model = input.required<ResolvedEntityForm>();\n readonly mode = input<EntityFormMode>('create');\n readonly state = input<EntityFormValueState | null | undefined>(undefined);\n readonly readOnly = input(false);\n readonly messages = input<Partial<EntityFormsMessages>>({});\n /** Record metadata keyed by versioned ckRecordId; improves type conversion of record sub-values. */\n readonly records = input<Record<string, CkRecordInfo>>({});\n /**\n * Translates field labels, help texts, section titles, enum option texts and record columns\n * (AB#5623). Wins over `ENTITY_FORM_LABEL_RESOLVER`; absent = the definition / CK texts.\n */\n readonly labelResolver = input<EntityFormLabelResolver | null | undefined>(undefined);\n /**\n * Host prefill of a create form (AB#5623), keyed by field key / attribute name (any casing).\n * Wins over the field defaults and over `state.values`; secrets are never prefilled. The values\n * are the starting point of the form (not \"dirty\"); a create sends every non-empty value anyway.\n * Ignored in edit / view mode — use {@link patchValues} there.\n */\n readonly initialValues = input<EntityFormPrefillValues | null | undefined>(undefined);\n /**\n * Hook run by {@link getChangeSetForSave} (AB#5623): may modify the change set or veto the save.\n * Wins over `ENTITY_FORM_BEFORE_SAVE`. `mm-entity-page` runs its own (input > route data >\n * token), so set it there when the page saves. See `EntityFormBeforeSaveHook`.\n */\n readonly beforeSave = input<EntityFormBeforeSaveHook | null | undefined>(undefined);\n\n // --- Outputs ---\n readonly changeSetChange = output<EntityFormChangeSet>();\n readonly validChange = output<boolean>();\n readonly dirtyChange = output<boolean>();\n\n // --- Icons (node_modules imports are safe as field initialisers) ---\n protected readonly chevronDownIcon = chevronDownIcon;\n protected readonly chevronRightIcon = chevronRightIcon;\n /** Stable empty list for reference fields without display attributes. */\n protected readonly noDisplayAttributes: readonly string[] = [];\n protected readonly noDisplayAttributeInfo: readonly CkAttributeInfo[] = [];\n\n // --- State ---\n protected readonly resolvedMessages = computed(() => mergeEntityFormsMessages(this.messages()));\n /** The effective label resolver (input, else the injected one, else none). */\n private readonly effectiveLabelResolver = computed(() => this.labelResolver() ?? this.injectedLabelResolver ?? null);\n /**\n * The model as rendered: every text passed through the label resolver (AB#5623). Keys are\n * unchanged, so the controls built from {@link model} match it.\n */\n protected readonly view = computed(() => localizeEntityForm(this.model(), this.effectiveLabelResolver()));\n protected readonly form = signal<FormGroup<Record<string, FormControl<unknown>>>>(new FormGroup({}));\n /** Bumped on every form event so OnPush children re-evaluate errors. */\n protected readonly revision = signal(0);\n /** Raw values (disabled controls included) for VisibleWhen evaluation. */\n private readonly rawValues = signal<Record<string, unknown>>({});\n private readonly collapsed = signal<ReadonlySet<string>>(new Set<string>());\n /** Keys of the fields whose stored value was an unset placeholder (AB#5623); they start empty. */\n protected readonly unsetPlaceholderFields = signal<ReadonlySet<string>>(new Set<string>());\n /** attributeNames of secrets whose clear is staged for the next save (Q8). */\n private readonly clearedSecrets = signal<ReadonlySet<string>>(new Set<string>());\n /** Value snapshot taken when the form was built (D6 baseline). */\n private baselineValues: Record<string, unknown> = {};\n /** The state the form was built from (input `state` plus host prefill). */\n private builtState: EntityFormValueState | null = null;\n private formSub?: Subscription;\n private lastValid?: boolean;\n private lastDirty?: boolean;\n\n protected readonly secretPresence = computed<Record<string, boolean>>(() => this.state()?.secretPresence ?? {});\n protected readonly formReadOnly = computed(() => isFormReadOnly(this.model(), this.mode(), this.readOnly()));\n /** No key ring in this environment (Q17): secret inputs are disabled with a hint. */\n protected readonly secretWritesDisabled = computed(() => this.keyRingConfigured?.() === false);\n /** The `secretWritesDisabled` value the controls were last enabled / disabled for. */\n private appliedSecretWritesDisabled?: boolean;\n\n /** Visibility per field key, from VisibleWhen and the current raw values. */\n protected readonly visibility = computed<Record<string, boolean>>(() => {\n const values = this.rawValues();\n const presence = this.secretPresence();\n const fields = allFields(this.model());\n const byKey = new Map(fields.map((f) => [f.key, f]));\n const result: Record<string, boolean> = {};\n for (const f of fields) {\n const source = f.visibleWhen ? byKey.get(f.visibleWhen.path) : undefined;\n result[f.key] = isVisible(f.visibleWhen, values, presence, source?.enumOptions);\n }\n return result;\n });\n\n /**\n * Why the form cannot be saved although every enabled control is valid, or `null`: in create\n * mode without a key ring (Q17), a visible, writable, required secret cannot be entered — the\n * server would reject the create (required secret missing). Hosts disable Create and show this.\n * In edit mode a missing required secret does not block saving other fields (the server only\n * enforces required secrets on create).\n */\n readonly saveBlockedReason = computed<string | null>(() => {\n if (!this.secretWritesDisabled() || this.mode() !== 'create' || this.formReadOnly()) {\n return null;\n }\n const vis = this.visibility();\n const presence = this.secretPresence();\n // Only SECRET-typed fields need the key ring; name-rule / metadata secrets are stored as plain values.\n const labels = allFields(this.view())\n .filter((f) => f.secret && isSecretValueType(f.valueType) && vis[f.key] !== false\n && !isFieldReadOnly(f, 'create', false) && isSecretRequired(f, 'create', presence))\n .map((f) => f.label);\n return labels.length\n ? formatEntityFormsMessage(this.resolvedMessages().secretRequiredWritesDisabled, { fields: labels.join(', ') })\n : null;\n });\n\n /** Default item of optional enum dropdowns. */\n protected readonly enumDefaultItem = computed(() => ({ key: null, name: this.resolvedMessages().enumPlaceholder }));\n\n constructor() {\n effect(() => {\n const model = this.model();\n const mode = this.mode();\n const state = this.state();\n const readOnly = this.readOnly();\n const initialValues = this.initialValues();\n untracked(() => this.rebuild(model, mode, this.withPrefill(model, mode, state ?? null, initialValues), readOnly));\n });\n // The key ring status arrives asynchronously (and may change): re-apply the enabled state of\n // the secret controls whenever it flips after the form was built.\n effect(() => {\n const disabled = this.secretWritesDisabled();\n untracked(() => {\n if (this.appliedSecretWritesDisabled === undefined || this.appliedSecretWritesDisabled === disabled) {\n return;\n }\n this.applyVisibility();\n this.bump();\n this.emitState();\n });\n });\n this.destroyRef.onDestroy(() => this.formSub?.unsubscribe());\n }\n\n // --- Public API ---\n\n /** Change set of the current values (only dirty controls on edit). */\n getChangeSet(): EntityFormChangeSet {\n const mode = this.mode();\n const changeSet = buildChangeSet(\n this.baselineValues,\n this.enabledValues(),\n this.model(),\n mode,\n this.secretPresence(),\n { records: this.records(), clearedSecrets: this.clearedSecrets() },\n );\n // A host-prefilled well-known name (singleton create) is carried even when its field is\n // read-only or not part of the form.\n const prefilled = this.builtState?.rtWellKnownName ?? this.state()?.rtWellKnownName;\n if (mode === 'create' && !changeSet.rtWellKnownName && typeof prefilled === 'string' && prefilled.trim()) {\n changeSet.rtWellKnownName = prefilled.trim();\n changeSet.isEmpty = false;\n }\n return changeSet;\n }\n\n /**\n * The change set to save, after the before-save hook (`beforeSave` input, else\n * `ENTITY_FORM_BEFORE_SAVE`; AB#5623) — for hosts that render `mm-entity-form` and save\n * themselves. The form never shows notifications: on `veto` / `error` the host tells the user\n * (e.g. `outcome.message ?? messages.saveVetoed`). View mode, and an edit form without changes,\n * skip the hook. `context.rtId` names the edited entity; `context.ckTypeId` defaults to the\n * form's runtime CK type.\n */\n async getChangeSetForSave(context: { rtId?: string; ckTypeId?: string } = {}): Promise<EntityFormBeforeSaveOutcome> {\n const changeSet = this.getChangeSet();\n const mode = this.mode();\n if (mode === 'view' || (mode === 'edit' && changeSet.isEmpty)) {\n return { kind: 'save', changeSet };\n }\n const model = this.model();\n return runEntityFormBeforeSave(this.beforeSave() ?? this.injectedBeforeSave ?? null, changeSet, {\n mode,\n ckTypeId: context.ckTypeId ?? model.rtCkTypeId,\n ...(context.rtId ? { rtId: context.rtId } : {}),\n form: model,\n });\n }\n\n /** True when any editable, visible control differs from the value it was built with. */\n isDirty(): boolean {\n if (this.clearedSecrets().size > 0) {\n return true;\n }\n const current = this.enabledValues();\n return Object.keys(current).some((k) => !formValuesEqual(this.baselineValues[k], current[k]));\n }\n\n /** True when every enabled control is valid and nothing blocks saving ({@link saveBlockedReason}). */\n isValid(): boolean {\n const form = this.form();\n return (form.valid || form.disabled) && this.saveBlockedReason() === null;\n }\n\n /** Marks every control as touched so validation errors become visible. */\n markAllAsTouched(): void {\n this.form().markAllAsTouched();\n this.bump();\n }\n\n /** Rebuilds the form from the current inputs, discarding user edits. */\n reset(): void {\n this.rebuild(this.model(), this.mode(), this.withPrefill(this.model(), this.mode(), this.state() ?? null, this.initialValues()), this.readOnly());\n }\n\n /**\n * Sets form values from the host (AB#5623), e.g. a \"Prefill from user\" action. Keys are field\n * keys or attribute names (any casing). The values always count as user edits: the form gets\n * dirty (compared with the values it was built from), the unsaved-changes guard applies and the\n * change set sends them. To start a create form with values that are NOT edits, use the\n * `initialValues` input instead. Secret fields, read-only fields and unknown keys are skipped.\n * Returns the field keys that were set.\n */\n patchValues(values: EntityFormPrefillValues): string[] {\n const model = this.model();\n const form = this.form();\n const applied: string[] = [];\n for (const [key, value] of Object.entries(values ?? {})) {\n const field = entityFormPrefillField(model, key);\n const control = field ? form.controls[field.key] : undefined;\n if (!field || !control || field.secret || isFieldReadOnly(field, this.mode(), this.formReadOnly())) {\n continue;\n }\n control.setValue(cloneValue(toReferenceValue(field, value ?? null)), { emitEvent: false });\n control.markAsDirty();\n applied.push(field.key);\n }\n if (applied.length > 0) {\n // One form event for all values: VisibleWhen, validity and dirty state follow.\n form.updateValueAndValidity();\n }\n return applied;\n }\n\n // --- Template helpers ---\n\n protected control(key: string): FormControl<unknown> {\n return this.form().controls[key];\n }\n\n protected isFieldVisible(field: ResolvedField): boolean {\n return this.visibility()[field.key] !== false;\n }\n\n protected visibleFieldCount(section: ResolvedSection): number {\n const vis = this.visibility();\n return section.fields.filter((f) => vis[f.key] !== false).length;\n }\n\n protected isCollapsed(section: ResolvedSection): boolean {\n return !!section.title && this.collapsed().has(section.key);\n }\n\n protected toggleSection(section: ResolvedSection): void {\n const next = new Set(this.collapsed());\n if (next.has(section.key)) {\n next.delete(section.key);\n } else {\n next.add(section.key);\n }\n this.collapsed.set(next);\n }\n\n protected isReadOnly(field: ResolvedField): boolean {\n return isFieldReadOnly(field, this.mode(), this.formReadOnly());\n }\n\n protected isRequired(field: ResolvedField): boolean {\n return field.secret ? isSecretRequired(field, this.mode(), this.secretPresence()) : field.required;\n }\n\n protected secretState(field: ResolvedField): EntityFormSecretState {\n if (!field.secret || this.mode() === 'create') {\n return null;\n }\n const name = field.attributeName ?? field.key;\n if (this.clearedSecrets().has(name)) {\n return 'clearStaged';\n }\n const state = this.state()?.secretStates?.[name];\n if (state?.keyMissing) {\n return 'keyMissing';\n }\n if (state ? state.isSet : this.secretPresence()[name]) {\n return 'set';\n }\n // Same rule as the secrets inventory (`needsReEntry`: NOT_SET and required, handover §7).\n return field.required && isSecretValueType(field.valueType) ? 'needsReEntry' : 'notSet';\n }\n\n protected secretSetAt(field: ResolvedField): Date | null {\n return this.state()?.secretStates?.[field.attributeName ?? field.key]?.setAt ?? null;\n }\n\n /**\n * \"Clear\" is offered for an optional SECRET (only SECRET attributes accept\n * `clearSecretAttributes`) that holds a value (set or key missing), in edit mode, when the field\n * is writable. Required secrets cannot be cleared (Q8).\n */\n protected canClearSecret(field: ResolvedField): boolean {\n if (!field.secret || field.required || this.mode() !== 'edit' || !isSecretValueType(field.valueType)) {\n return false;\n }\n if (isFieldReadOnly(field, this.mode(), this.formReadOnly())) {\n return false;\n }\n const state = this.secretState(field);\n return state === 'set' || state === 'keyMissing' || state === 'clearStaged';\n }\n\n protected isSecretClearStaged(field: ResolvedField): boolean {\n return this.clearedSecrets().has(field.attributeName ?? field.key);\n }\n\n /** Stages or undoes clearing a secret; a staged clear empties and disables the input. */\n protected setSecretClearStaged(field: ResolvedField, staged: boolean): void {\n const name = field.attributeName ?? field.key;\n const next = new Set(this.clearedSecrets());\n if (staged) {\n next.add(name);\n this.control(field.key)?.setValue(null, { emitEvent: false });\n } else {\n next.delete(name);\n }\n this.clearedSecrets.set(next);\n this.applyVisibility();\n this.bump();\n this.emitState();\n }\n\n protected placeholder(field: ResolvedField): string {\n if (this.unsetPlaceholderFields().has(field.key)) {\n return this.resolvedMessages().notConfigured ?? DEFAULT_ENTITY_FORMS_MESSAGES.notConfigured ?? '';\n }\n const state = this.secretState(field);\n if (state === 'set' || state === 'keyMissing') {\n return this.resolvedMessages().secretSetPlaceholder;\n }\n if (state === 'notSet' || state === 'needsReEntry') {\n return field.placeholder ?? this.resolvedMessages().secretNotSetPlaceholder;\n }\n return field.placeholder ?? '';\n }\n\n /** Q17 applies to SECRET-typed fields only (the encryption key ring is not needed for fallback secrets). */\n protected isSecretWriteBlocked(field: ResolvedField): boolean {\n return this.secretWritesDisabled() && isSecretValueType(field.valueType);\n }\n\n protected isIntegerField(field: ResolvedField): boolean {\n return INTEGER_TYPES.includes(field.valueType ?? '');\n }\n\n protected isIntArray(field: ResolvedField): boolean {\n return field.valueType === 'INT_ARRAY' || field.valueType === 'INTEGER_ARRAY';\n }\n\n protected displayUnsupported(field: ResolvedField): string {\n const value = this.control(field.key)?.value;\n if (value === null || value === undefined || value === '') {\n return '—';\n }\n if (typeof value === 'object') {\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n }\n return String(value);\n }\n\n // --- Internals ---\n\n /** `state` with the host prefill merged in (create mode only). */\n private withPrefill(\n model: ResolvedEntityForm,\n mode: EntityFormMode,\n state: EntityFormValueState | null,\n initialValues: EntityFormPrefillValues | null | undefined,\n ): EntityFormValueState | null {\n if (mode !== 'create' || !initialValues) {\n return state;\n }\n return mergeEntityFormPrefill(state, canonicaliseEntityFormPrefill(model, initialValues));\n }\n\n private rebuild(model: ResolvedEntityForm, mode: EntityFormMode, state: EntityFormValueState | null, readOnly: boolean): void {\n this.formSub?.unsubscribe();\n this.builtState = state;\n this.clearedSecrets.set(new Set<string>());\n const form = buildFormGroup(model, mode, { state, readOnly });\n this.normaliseAttributeReferences(model, form);\n this.clearUnsetPlaceholders(model, form);\n this.form.set(form);\n this.collapsed.set(new Set(model.sections.filter((s) => s.collapsed && s.title).map((s) => s.key)));\n this.rawValues.set(form.getRawValue());\n this.applyVisibility();\n this.baselineValues = cloneValue(form.getRawValue());\n this.lastValid = undefined;\n this.lastDirty = undefined;\n this.formSub = form.events.subscribe(() => this.onFormEvent());\n this.bump();\n this.emitState();\n }\n\n /**\n * Empties the fields that hold an unset placeholder (AB#5623) before the baseline is taken, so an\n * untouched field is \"no change\" and the placeholder is never written back.\n */\n private clearUnsetPlaceholders(model: ResolvedEntityForm, form: FormGroup<Record<string, FormControl<unknown>>>): void {\n const keys = entityFormUnsetPlaceholderFields(model, form.getRawValue(), this.unsetPlaceholders);\n const byKey = new Map(allFields(model).map((f) => [f.key, f]));\n for (const key of keys) {\n const field = byKey.get(key);\n form.controls[key]?.setValue(field ? emptyValue(field) : null, { emitEvent: false });\n }\n this.unsetPlaceholderFields.set(new Set(keys));\n }\n\n /** Attribute-held references store a bare rtId; the reference editor works with an array. */\n private normaliseAttributeReferences(model: ResolvedEntityForm, form: FormGroup<Record<string, FormControl<unknown>>>): void {\n for (const field of allFields(model)) {\n if (field.kind !== 'attribute' || field.editor !== 'reference') {\n continue;\n }\n const control = form.controls[field.key];\n const v = control?.value;\n if (typeof v === 'string' && v) {\n control.setValue([{ rtId: v, ckTypeId: field.reference?.targetCkTypeId ?? '', displayName: v }], { emitEvent: false });\n } else if (v === null || v === undefined) {\n control.setValue([], { emitEvent: false });\n }\n }\n }\n\n private onFormEvent(): void {\n const form = this.form();\n const raw = form.getRawValue();\n if (!formValuesEqual(raw, this.rawValues())) {\n this.rawValues.set(raw);\n this.applyVisibility();\n }\n this.bump();\n this.emitState();\n }\n\n /**\n * Enables/disables controls by visibility. A hidden field is always disabled; a visible field\n * is enabled unless it is read-only.\n */\n private applyVisibility(): void {\n const form = this.form();\n const vis = this.visibility();\n const mode = this.mode();\n const formReadOnly = this.formReadOnly();\n const writesDisabled = this.secretWritesDisabled();\n this.appliedSecretWritesDisabled = writesDisabled;\n for (const field of allFields(this.model())) {\n const control = form.controls[field.key];\n if (!control) {\n continue;\n }\n // The key ring only gates SECRET-typed fields (fallback secrets are plain values server-side).\n const secretBlocked = field.secret\n && ((writesDisabled && isSecretValueType(field.valueType)) || this.clearedSecrets().has(field.attributeName ?? field.key));\n const shouldEnable = vis[field.key] !== false && !isFieldReadOnly(field, mode, formReadOnly) && !secretBlocked;\n if (shouldEnable && control.disabled) {\n control.enable({ emitEvent: false });\n } else if (!shouldEnable && control.enabled) {\n control.disable({ emitEvent: false });\n }\n }\n }\n\n /** Values of enabled controls only (hidden and read-only fields are absent). */\n private enabledValues(): Record<string, unknown> {\n const form = this.form();\n const out: Record<string, unknown> = {};\n for (const [key, control] of Object.entries(form.controls)) {\n if (control.enabled) {\n out[key] = control.value;\n }\n }\n return out;\n }\n\n private emitState(): void {\n const valid = this.isValid();\n const dirty = this.isDirty();\n if (valid !== this.lastValid) {\n this.lastValid = valid;\n this.validChange.emit(valid);\n }\n if (dirty !== this.lastDirty) {\n this.lastDirty = dirty;\n this.dirtyChange.emit(dirty);\n }\n this.changeSetChange.emit(this.getChangeSet());\n }\n\n private bump(): void {\n this.revision.update((r) => r + 1);\n }\n}\n","@let m = resolvedMessages();\n@let rev = revision();\n<form class=\"mm-entity-form\" [formGroup]=\"form()\" (submit)=\"$event.preventDefault()\" novalidate>\n @if (saveBlockedReason(); as reason) {\n <p class=\"mm-ef-blocked\" role=\"status\" data-save-blocked>{{ reason }}</p>\n }\n @for (section of view().sections; track section.key) {\n @if (visibleFieldCount(section) > 0) {\n <section\n class=\"mm-ef-section\"\n [class.mm-ef-section--generated]=\"section.generated\"\n [class.mm-ef-section--collapsed]=\"isCollapsed(section)\"\n [attr.data-section-key]=\"section.key\"\n >\n @if (section.title) {\n <button\n type=\"button\"\n class=\"mm-ef-section__header\"\n [attr.aria-expanded]=\"!isCollapsed(section)\"\n (click)=\"toggleSection(section)\"\n >\n <kendo-svgicon [icon]=\"isCollapsed(section) ? chevronRightIcon : chevronDownIcon\"></kendo-svgicon>\n <span class=\"mm-ef-section__title\">{{ section.title }}</span>\n </button>\n }\n @if (!isCollapsed(section)) {\n @if (section.description) {\n <p class=\"mm-ef-section__description\">{{ section.description }}</p>\n }\n <div class=\"mm-ef-section__grid\" [class.mm-ef-section__grid--two]=\"section.columns === 2\">\n @for (field of section.fields; track field.key) {\n @if (isFieldVisible(field)) {\n @let ctrl = control(field.key);\n @let ro = isReadOnly(field);\n <mm-entity-form-field\n [field]=\"field\"\n [control]=\"ctrl\"\n [messages]=\"m\"\n [secretState]=\"secretState(field)\"\n [secretSetAt]=\"secretSetAt(field)\"\n [readOnly]=\"ro\"\n [required]=\"isRequired(field)\"\n [revision]=\"rev\"\n >\n @if (field.secret && field.kind === 'attribute' && (field.editor === 'password' || field.editor === 'multiline' || field.editor === 'text')) {\n <mm-entity-form-secret-editor\n [control]=\"ctrl\"\n [messages]=\"m\"\n [placeholder]=\"placeholder(field)\"\n [multiline]=\"field.editor === 'multiline'\"\n [readOnly]=\"ro\"\n [canClear]=\"canClearSecret(field)\"\n [clearStaged]=\"isSecretClearStaged(field)\"\n [writesDisabled]=\"isSecretWriteBlocked(field)\"\n [revision]=\"rev\"\n (clearStagedChange)=\"setSecretClearStaged(field, $event)\"\n ></mm-entity-form-secret-editor>\n } @else {\n @switch (field.editor) {\n @case ('multiline') {\n <kendo-textarea\n [formControl]=\"ctrl\"\n [rows]=\"4\"\n resizable=\"vertical\"\n [placeholder]=\"placeholder(field)\"\n [readonly]=\"ro\"\n ></kendo-textarea>\n }\n @case ('json') {\n <kendo-textarea\n class=\"mm-ef-mono\"\n [formControl]=\"ctrl\"\n [rows]=\"8\"\n resizable=\"vertical\"\n [placeholder]=\"placeholder(field)\"\n [readonly]=\"ro\"\n ></kendo-textarea>\n }\n @case ('yaml') {\n <kendo-textarea\n class=\"mm-ef-mono\"\n [formControl]=\"ctrl\"\n [rows]=\"8\"\n resizable=\"vertical\"\n [placeholder]=\"placeholder(field)\"\n [readonly]=\"ro\"\n ></kendo-textarea>\n }\n @case ('number') {\n <kendo-numerictextbox\n [formControl]=\"ctrl\"\n [decimals]=\"isIntegerField(field) ? 0 : 6\"\n [format]=\"isIntegerField(field) ? 'n0' : 'n'\"\n [placeholder]=\"placeholder(field)\"\n [readonly]=\"ro\"\n ></kendo-numerictextbox>\n }\n @case ('toggle') {\n <kendo-switch\n [formControl]=\"ctrl\"\n [onLabel]=\"m.toggleOn\"\n [offLabel]=\"m.toggleOff\"\n ></kendo-switch>\n }\n @case ('enum') {\n <kendo-dropdownlist\n [formControl]=\"ctrl\"\n [data]=\"field.enumOptions ?? []\"\n textField=\"name\"\n valueField=\"key\"\n [valuePrimitive]=\"true\"\n [defaultItem]=\"enumDefaultItem()\"\n ></kendo-dropdownlist>\n }\n @case ('datetime') {\n <kendo-datetimepicker\n [formControl]=\"ctrl\"\n [placeholder]=\"placeholder(field)\"\n [readOnlyInput]=\"ro\"\n ></kendo-datetimepicker>\n }\n @case ('cron') {\n <mm-cron-builder [formControl]=\"ctrl\"></mm-cron-builder>\n }\n @case ('chips') {\n <mm-entity-form-chips-editor\n [formControl]=\"ctrl\"\n [numeric]=\"isIntArray(field)\"\n [placeholder]=\"field.placeholder ?? m.chipsPlaceholder\"\n [invalidMessage]=\"m.validationNumber\"\n ></mm-entity-form-chips-editor>\n }\n @case ('reference') {\n <mm-entity-form-reference-field\n [formControl]=\"ctrl\"\n [targetCkTypeId]=\"field.reference?.targetCkTypeId ?? ''\"\n [multiple]=\"field.reference?.multiple ?? false\"\n [displayAttributes]=\"field.reference?.displayAttributes ?? noDisplayAttributes\"\n [displayAttributeInfo]=\"field.reference?.displayAttributeInfo ?? noDisplayAttributeInfo\"\n [messages]=\"messages()\"\n [placeholder]=\"field.placeholder ?? m.referencePlaceholder\"\n [readOnly]=\"ro\"\n ></mm-entity-form-reference-field>\n }\n @case ('records') {\n <mm-entity-form-records-field\n [formControl]=\"ctrl\"\n [ckRecordId]=\"field.record?.ckRecordId ?? ''\"\n [columns]=\"field.record?.columns ?? []\"\n [single]=\"field.record?.single ?? false\"\n [readOnly]=\"ro\"\n [secretWritesDisabled]=\"secretWritesDisabled()\"\n [messages]=\"messages()\"\n ></mm-entity-form-records-field>\n }\n @case ('unsupported') {\n <div class=\"mm-ef-unsupported\" [attr.title]=\"m.unsupportedEditor\">\n <span class=\"mm-ef-mono\">{{ displayUnsupported(field) }}</span>\n </div>\n }\n @default {\n <!-- text, password, url, email -->\n <kendo-textbox\n [formControl]=\"ctrl\"\n [type]=\"field.secret || field.editor === 'password' ? 'password' : 'text'\"\n [inputAttributes]=\"field.secret || field.editor === 'password' ? { autocomplete: 'new-password' } : {}\"\n [placeholder]=\"placeholder(field)\"\n [readonly]=\"ro\"\n ></kendo-textbox>\n }\n }\n }\n </mm-entity-form-field>\n }\n }\n </div>\n }\n </section>\n }\n } @empty {\n <p class=\"mm-ef-empty\">{{ m.noFieldsToShow }}</p>\n }\n</form>\n","import { EntityFormDefinition } from '../models/entity-form.models';\nimport { toKebabTypeKey } from './attribute-path';\nimport { humanizeCkTypeName } from './ck-type-name';\n\n/** Prefix of the well-known names of delivered forms (`form-sftp-configuration`). */\nconst FORM_WELL_KNOWN_NAME_PREFIX = 'form-';\n\n/**\n * URL key of a form (`sftp-configuration`), accepted by `EntityFormService.resolveByFormKey`:\n * the well-known name without the `form-` prefix, otherwise the kebab-cased target type name.\n * The well-known name wins because the kebab form of some type names differs from the seeded\n * name (`EMailSenderConfiguration` → `e-mail-sender-configuration`, seeded as\n * `form-email-sender-configuration`).\n */\nexport function entityFormKey(form: Pick<EntityFormDefinition, 'rtWellKnownName' | 'targetCkTypeId'>): string {\n const name = (form.rtWellKnownName ?? '').trim().toLowerCase();\n if (name.startsWith(FORM_WELL_KNOWN_NAME_PREFIX) && name.length > FORM_WELL_KNOWN_NAME_PREFIX.length) {\n return name.substring(FORM_WELL_KNOWN_NAME_PREFIX.length);\n }\n return toKebabTypeKey(form.targetCkTypeId);\n}\n\n/** One entry of {@link entityFormCatalog}: the effective form of one target type. */\nexport interface EntityFormCatalogEntry {\n /** URL key (see {@link entityFormKey}); stable per target type. */\n key: string;\n /** Settings category key (`connections`, `ai`, …), lower case. */\n category: string;\n title: string;\n description?: string;\n icon?: string;\n targetCkTypeId: string;\n includeDerivedTypes: boolean;\n singleton: boolean;\n /** The form that wins for the target type (tenant form before seeded, then priority). */\n form: EntityFormDefinition;\n}\n\nfunction compareForms(a: EntityFormDefinition, b: EntityFormDefinition): number {\n if (a.isTenantForm !== b.isTenantForm) {\n return a.isTenantForm ? -1 : 1;\n }\n if ((a.priority ?? 0) !== (b.priority ?? 0)) {\n return (b.priority ?? 0) - (a.priority ?? 0);\n }\n const ka = a.rtWellKnownName || a.rtId || '';\n const kb = b.rtWellKnownName || b.rtId || '';\n return ka < kb ? -1 : ka > kb ? 1 : 0;\n}\n\n/**\n * The forms that belong in a settings overview (concept §5.6): one entry per target type whose\n * effective form has a `Category`. The effective form is picked like the resolver does for an\n * exact type match (tenant form first, then higher priority, then well-known name), so a tenant\n * override replaces the delivered entry — and can also move it to another category or remove it\n * from the overview by leaving `Category` empty. The key prefers a delivered `form-*` name of\n * the type, so URLs stay stable when a tenant form is added. Sorted by title.\n */\nexport function entityFormCatalog(forms: readonly EntityFormDefinition[]): EntityFormCatalogEntry[] {\n const byType = new Map<string, EntityFormDefinition[]>();\n for (const form of forms) {\n const target = (form.targetCkTypeId ?? '').trim();\n if (!target) {\n continue;\n }\n const id = target.toLowerCase();\n byType.set(id, [...(byType.get(id) ?? []), form]);\n }\n\n const entries: EntityFormCatalogEntry[] = [];\n for (const candidates of byType.values()) {\n const sorted = [...candidates].sort(compareForms);\n const winner = sorted[0];\n const category = (winner.category ?? '').trim().toLowerCase();\n if (!category) {\n continue;\n }\n const keySource = sorted.find((f) => (f.rtWellKnownName ?? '').toLowerCase().startsWith(FORM_WELL_KNOWN_NAME_PREFIX)) ?? winner;\n entries.push({\n key: entityFormKey(keySource),\n category,\n title: winner.name?.trim() || humanizeCkTypeName(winner.targetCkTypeId),\n ...(winner.description?.trim() && { description: winner.description.trim() }),\n ...(winner.icon?.trim() && { icon: winner.icon.trim() }),\n targetCkTypeId: winner.targetCkTypeId,\n includeDerivedTypes: winner.includeDerivedTypes,\n singleton: !!winner.singleton,\n form: winner,\n });\n }\n return entries.sort((a, b) => a.title.localeCompare(b.title));\n}\n\n/**\n * Display names of CK types from the forms (AB#5524): per target type (lower-case key) the\n * `Name` of its effective form (tenant form first, then priority), for every form with a name —\n * also forms without `Category`. CK types carry no display name of their own.\n */\nexport function entityFormTypeTitles(forms: readonly EntityFormDefinition[]): Map<string, string> {\n const titles = new Map<string, string>();\n for (const form of [...forms].sort(compareForms)) {\n const target = (form.targetCkTypeId ?? '').trim().toLowerCase();\n const name = form.name?.trim();\n if (target && name && !titles.has(target)) {\n titles.set(target, name);\n }\n }\n return titles;\n}\n\n/**\n * Display name of a CK type: the form title of {@link entityFormTypeTitles} when there is one,\n * else {@link humanizeCkTypeName} (`FinApiConfiguration` → `finAPI configuration`).\n */\nexport function ckTypeDisplayName(ckTypeId: string, titles?: ReadonlyMap<string, string>): string {\n const id = (ckTypeId ?? '').trim();\n return titles?.get(id.toLowerCase()) ?? titles?.get(id.replace(/-\\d+(\\.\\d+)*$/, '').toLowerCase()) ?? humanizeCkTypeName(id);\n}\n","import { Directive, forwardRef, inject } from '@angular/core';\nimport { FieldFilterDto, FieldFilterOperatorsDto, GraphQL, SortDto, SortOrdersDto } from '@meshmakers/octo-services';\nimport { OctoGraphQlDataSource } from '@meshmakers/octo-ui';\nimport {\n DataSourceBase,\n FetchDataOptions,\n FetchResultTyped,\n ListViewComponent,\n} from '@meshmakers/shared-ui';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { EntityFormGetListDtoGQL, EntityFormGetListQueryDto } from '../graphQL/getEntityFormList';\nimport { EntityListSortDescriptor, ResolvedEntityForm } from '../models/entity-form.models';\n\n/**\n * One row of `<mm-entity-list>`. System properties keep their GraphQL names and every list\n * attribute is flattened onto the row under its camelCase CK attribute name, so a Kendo column\n * `field` equals the GraphQL `attributePath` and server-side sort / filter work unchanged.\n */\nexport interface EntityListRow {\n rtId: string;\n ckTypeId: string;\n rtWellKnownName: string | null;\n rtDisplayName: string | null;\n rtCreationDateTime: string | null;\n rtChangedDateTime: string | null;\n [attributeName: string]: unknown;\n}\n\ntype ListItem = NonNullable<\n NonNullable<NonNullable<NonNullable<EntityFormGetListQueryDto['runtime']>['runtimeEntities']>['items']>[number]\n>;\n\n/**\n * Attribute names the list may read for a resolved form: the `attribute` list columns, minus\n * anything flagged secret. The resolver already drops secret columns; the second filter is a\n * defensive guard so a resolver regression can never put a secret into the list query.\n */\nexport function entityListAttributeNames(model: ResolvedEntityForm): string[] {\n const secrets = new Set(model.secretFields.map((s) => s.toLowerCase()));\n const names = model.listColumns\n .filter((c) => c.kind === 'attribute')\n .map((c) => c.field)\n .filter((f) => !secrets.has(f.toLowerCase()));\n return Array.from(new Set(names));\n}\n\n/** Whether the list shows derived types too (`includeDerivedTypes` or an abstract target type). */\nexport function entityListIncludesDerivedTypes(model: ResolvedEntityForm): boolean {\n return model.includeDerivedTypes || model.isAbstract;\n}\n\n/** Flattens a GraphQL list item into an {@link EntityListRow}. */\nexport function toEntityListRow(item: ListItem, fallbackCkTypeId: string): EntityListRow {\n const row: EntityListRow = {\n rtId: String(item.rtId ?? ''),\n ckTypeId: String(item.ckTypeId ?? fallbackCkTypeId),\n rtWellKnownName: item.rtWellKnownName ?? null,\n rtDisplayName: item.rtDisplayName ?? null,\n rtCreationDateTime: (item.rtCreationDateTime as string | null | undefined) ?? null,\n rtChangedDateTime: (item.rtChangedDateTime as string | null | undefined) ?? null,\n };\n for (const attr of item.attributes?.items ?? []) {\n if (attr?.attributeName && !isSystemKey(attr.attributeName)) {\n row[attr.attributeName] = attr.value;\n }\n }\n return row;\n}\n\nconst SYSTEM_KEYS = new Set(['rtId', 'ckTypeId', 'rtWellKnownName', 'rtDisplayName', 'rtCreationDateTime', 'rtChangedDateTime']);\nfunction isSystemKey(key: string): boolean {\n return SYSTEM_KEYS.has(key);\n}\n\n/**\n * Secret-safe `mm-list-view` data source of `<mm-entity-list>`.\n *\n * - Uses the package's own `entityFormGetList` document, whose `$attributeNames` is\n * `[String]!` — it always sends the explicit list of non-secret list-column attributes\n * (an omitted variable would make the server return every attribute, secrets included).\n * - Restricts the query to the exact type with a `ckTypeId EQUALS` field filter unless the\n * form includes derived types or the type is abstract (`runtimeEntities(ckId)` returns\n * derived types by default).\n */\n@Directive({\n selector: '[mmEntityListDataSource]',\n exportAs: 'mmEntityListDataSource',\n standalone: true,\n providers: [\n {\n provide: DataSourceBase,\n useExisting: forwardRef(() => EntityListDataSourceDirective),\n },\n ],\n})\nexport class EntityListDataSourceDirective extends OctoGraphQlDataSource<EntityListRow> {\n private readonly listGQL = inject(EntityFormGetListDtoGQL);\n private model: ResolvedEntityForm | null = null;\n private defaultSort: readonly EntityListSortDescriptor[] = [];\n\n constructor() {\n super(inject(ListViewComponent));\n }\n\n /**\n * Sets the order used while the user has not sorted by a column (AB#5623). Refetches when the\n * order changed and a model is set.\n */\n public setDefaultSort(sort: readonly EntityListSortDescriptor[] | null | undefined): void {\n const next = (sort ?? []).filter((s) => !!s?.field);\n if (JSON.stringify(next) === JSON.stringify(this.defaultSort)) {\n return;\n }\n this.defaultSort = next;\n if (this.model) {\n this.fetchAgain({ resetSkip: true });\n }\n }\n\n /** The user's column sort, else the default sort, else `null` (server order). */\n private effectiveSort(options: FetchDataOptions): SortDto[] | null {\n const userSorted = (options.state.sort ?? []).some((s) => !!s.dir);\n if (userSorted || this.defaultSort.length === 0) {\n return this.getSortDefinitions(options.state);\n }\n return this.defaultSort.map((s) => ({\n attributePath: s.field,\n sortOrder: s.dir === 'desc' ? SortOrdersDto.DescendingDto : SortOrdersDto.AscendingDto,\n }));\n }\n\n /**\n * Sets the resolved form and refetches from the first page. `defaultSort` (optional) replaces\n * the order used while the user has not sorted by a column (see {@link setDefaultSort}).\n */\n public setModel(model: ResolvedEntityForm | null, defaultSort?: readonly EntityListSortDescriptor[] | null): void {\n this.model = model;\n if (defaultSort !== undefined) {\n this.defaultSort = (defaultSort ?? []).filter((s) => !!s?.field);\n }\n this.searchFilterAttributePaths = model\n ? model.listColumns.filter((c) => c.display !== 'date').map((c) => c.field)\n : [];\n this.fetchAgain({ resetSkip: true });\n }\n\n /** The variables of the next list query (exposed for tests). */\n public buildVariables(options: FetchDataOptions): Record<string, unknown> | null {\n const model = this.model;\n if (!model) {\n return null;\n }\n const fieldFilters: FieldFilterDto[] = [...(this.getFieldFilterDefinitions(options.state) ?? [])];\n if (!entityListIncludesDerivedTypes(model)) {\n fieldFilters.push({\n attributePath: 'ckTypeId',\n operator: FieldFilterOperatorsDto.EqualsDto,\n comparisonValue: model.rtCkTypeId,\n });\n }\n return {\n ckTypeId: model.rtCkTypeId,\n first: options.state.take,\n after: GraphQL.offsetToCursor(options.state.skip ?? 0),\n sort: this.effectiveSort(options),\n fieldFilters: fieldFilters.length > 0 ? fieldFilters : null,\n searchFilter: this.getSearchFilterDefinitions(options.textSearch),\n attributeNames: entityListAttributeNames(model),\n };\n }\n\n public fetchData(options: FetchDataOptions): Observable<FetchResultTyped<EntityListRow> | null> {\n const model = this.model;\n const variables = this.buildVariables(options);\n if (!model || !variables) {\n return of(new FetchResultTyped<EntityListRow>([], 0));\n }\n return this.listGQL\n .fetch({\n variables: variables as never,\n fetchPolicy: 'network-only',\n })\n .pipe(\n map((result) => {\n const connection = result.data?.runtime?.runtimeEntities;\n const rows = (connection?.items ?? [])\n .filter((i): i is ListItem => i != null)\n .map((i) => toEntityListRow(i, model.rtCkTypeId));\n return new FetchResultTyped<EntityListRow>(rows, connection?.totalCount ?? 0);\n }),\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n/** Cell of a list column with `Display: mono` — the raw value in a monospace font. */\n@Component({\n selector: 'mm-entity-list-mono-cell',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<span class=\"mm-entity-list-mono\" [title]=\"text\">{{ text }}</span>`,\n styles: [`\n .mm-entity-list-mono {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 0.9em;\n }\n `],\n})\nexport class EntityListMonoCellComponent {\n @Input() value: unknown;\n\n protected get text(): string {\n if (this.value === null || this.value === undefined) {\n return '';\n }\n return typeof this.value === 'object' ? JSON.stringify(this.value) : String(this.value);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { ConfirmationService, DangerConfirmationOptions } from '@meshmakers/shared-ui';\nimport { DEFAULT_ENTITY_FORMS_MESSAGES, EntityFormsMessages, formatEntityFormsMessage } from '../entity-forms.messages';\n\n/** A destructive action the entity form components are about to run (AB#5524). */\nexport interface EntityFormActionRequest {\n action: 'delete';\n /** Runtime CK type id of the (first) affected entity. */\n ckTypeId: string;\n /** Number of affected entities. */\n count: number;\n /** Short English description, e.g. `delete 2 entities`. */\n description: string;\n}\n\n/**\n * Optional host hook asked **before** the component's own danger confirmation of a destructive\n * action — e.g. the Refinery Studio's production-mode check (`TenantModeService\n * .confirmProductionAction`), which the former configuration list ran before deleting. Resolve\n * `false` to cancel. Provide it on the route (or root) injector of the pages that render\n * `mm-entity-list` / `mm-entity-page`.\n */\nexport type EntityFormActionConfirmation = (request: EntityFormActionRequest) => Promise<boolean>;\n\nexport const ENTITY_FORM_ACTION_CONFIRMATION = new InjectionToken<EntityFormActionConfirmation>('ENTITY_FORM_ACTION_CONFIRMATION');\n\n/** Runs the host hook (absent = allowed); a throwing hook cancels the action. */\nexport async function confirmEntityFormAction(\n hook: EntityFormActionConfirmation | null | undefined,\n request: EntityFormActionRequest,\n): Promise<boolean> {\n if (!hook) {\n return true;\n }\n try {\n return await hook(request);\n } catch (error) {\n console.warn('Entity forms: action confirmation failed; the action is cancelled.', error);\n return false;\n }\n}\n\n/**\n * Optional host replacement of the components' own danger confirmation (AB#5579). By default\n * `mm-entity-list` / `mm-entity-page` ask `ConfirmationService.showDangerConfirm(options)`; a host\n * that adds environment knowledge (e.g. the Refinery Studio's `DangerConfirmService`: production =\n * type the name) provides this token instead and then usually needs no\n * {@link ENTITY_FORM_ACTION_CONFIRMATION} for deletes. Resolve `false` to cancel.\n */\nexport type EntityFormDangerConfirmation = (\n options: DangerConfirmationOptions,\n request: EntityFormActionRequest,\n) => Promise<boolean>;\n\nexport const ENTITY_FORM_DANGER_CONFIRMATION = new InjectionToken<EntityFormDangerConfirmation>('ENTITY_FORM_DANGER_CONFIRMATION');\n\n/**\n * The danger confirmation of an entity delete (AB#5579): the title names the entity (or the\n * count), `confirmText` = verb + object, texts from {@link EntityFormsMessages}.\n */\nexport function entityDeleteConfirmation(messages: EntityFormsMessages, names: readonly string[]): DangerConfirmationOptions {\n const d = DEFAULT_ENTITY_FORMS_MESSAGES;\n const text = (key: keyof EntityFormsMessages): string => (messages[key] ?? d[key]) as string;\n if (names.length === 1) {\n const name = names[0];\n return {\n title: formatEntityFormsMessage(text('confirmDeleteNamedTitle'), { name }),\n targetName: name,\n consequence: text('confirmDeleteConsequence'),\n confirmText: text('confirmDeleteConfirmText'),\n cancelText: messages.cancel,\n };\n }\n const count = names.length;\n return {\n title: formatEntityFormsMessage(text('confirmDeleteManyTitle'), { count }),\n targetName: formatEntityFormsMessage(text('confirmDeleteManyTarget'), { count }),\n consequence: formatEntityFormsMessage(text('confirmDeleteManyConsequence'), { count }),\n confirmText: text('confirmDeleteManyConfirmText'),\n cancelText: messages.cancel,\n };\n}\n\n/** Asks the host replacement (when provided) or `ConfirmationService.showDangerConfirm`; errors cancel. */\nexport async function confirmEntityFormDanger(\n hook: EntityFormDangerConfirmation | null | undefined,\n confirmation: ConfirmationService,\n options: DangerConfirmationOptions,\n request: EntityFormActionRequest,\n): Promise<boolean> {\n try {\n return hook ? await hook(options, request) : await confirmation.showDangerConfirm(options);\n } catch (error) {\n console.warn('Entity forms: danger confirmation failed; the action is cancelled.', error);\n return false;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n InjectionToken,\n Injector,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { CkTypeSelectorDialogService } from '@meshmakers/octo-ui';\nimport { CommandItem, CommandItemExecuteEventArgs } from '@meshmakers/shared-services';\nimport {\n BadgeMappingTable,\n ConfirmationService,\n ListViewComponent,\n MM_ACTION_ICONS,\n NotificationDisplayService,\n resolveListRowLabel,\n RowClassFn,\n TableColumn,\n} from '@meshmakers/shared-ui';\nimport {\n EntityFormsMessages,\n formatEntityFormsMessage,\n mergeEntityFormsMessages,\n} from '../entity-forms.messages';\nimport { CkAttributeInfo, EntityListSortDescriptor, ResolvedEntityForm, ResolvedListColumn } from '../models/entity-form.models';\nimport { ENTITY_FORM_LABEL_RESOLVER, EntityFormLabelResolver, localizeEntityListColumns } from '../core/entity-form-labels';\nimport { formatReferenceDisplayValue } from '../form/reference/reference-display-format';\nimport { EntityFormDataService } from '../services/entity-form-data.service';\nimport { EntityFormService } from '../services/entity-form.service';\nimport { ckTypeDisplayName, entityFormTypeTitles } from '../core/entity-form-catalog';\nimport { humanizeCkTypeName } from '../core/ck-type-name';\nimport { EntityListDataSourceDirective, EntityListRow } from './entity-list-data-source.directive';\nimport { EntityListMonoCellComponent } from './entity-list-mono-cell.component';\nimport {\n confirmEntityFormAction,\n confirmEntityFormDanger,\n ENTITY_FORM_ACTION_CONFIRMATION,\n ENTITY_FORM_DANGER_CONFIRMATION,\n entityDeleteConfirmation,\n} from '../core/action-confirmation';\nimport {\n ENTITY_FORM_UNSET_PLACEHOLDER_VALUES,\n EntityFormUnsetPlaceholderLookup,\n entityFormUnsetPlaceholderLookup,\n} from '../core/unset-placeholders';\nimport { isSecretValueType } from '@meshmakers/octo-services';\n\n/** Payload of {@link EntityListComponent.createRequested}: the concrete type to create. */\nexport interface EntityListCreateRequest {\n ckTypeId: string;\n}\n\n/** Payload of {@link EntityListComponent.openRequested}. */\nexport interface EntityListOpenRequest {\n rtId: string;\n ckTypeId: string;\n}\n\n/**\n * CSS classes of one list row (AB#5623), e.g. `{ 'row-disabled': row['enabled'] === false }`.\n * Same shapes as Angular's `[ngClass]`; `null` / `undefined` = no class. The classes are set on the\n * row's `<tr>` of the Kendo grid, so style them with global (or `::ng-deep`) CSS of the host.\n */\nexport type EntityListRowClass = (row: EntityListRow) => string | string[] | Record<string, boolean> | null | undefined;\n\n/**\n * App-wide default of {@link EntityListComponent.rowClass} (AB#5623). The input (and\n * `mm-entity-page`'s `listRowClass` / route data `entityListRowClass`) wins.\n */\nexport const ENTITY_LIST_ROW_CLASS = new InjectionToken<EntityListRowClass>('ENTITY_LIST_ROW_CLASS');\n\n/**\n * Maps an {@link EntityListRowClass} onto `mm-list-view`'s `rowClass`. A throwing callback is\n * logged and yields no class, so a host bug never breaks the list.\n */\nexport function toListViewRowClass(rowClass: EntityListRowClass | null | undefined): RowClassFn | undefined {\n if (!rowClass) {\n return undefined;\n }\n return ({ dataItem }) => {\n try {\n return rowClass(dataItem as EntityListRow) ?? {};\n } catch (error) {\n console.error('mm-entity-list: rowClass failed', error);\n return {};\n }\n };\n}\n\n/** Labels of boolean list cells (default \"Yes\" / \"No\"). */\nexport interface EntityListCellLabels {\n yes?: string;\n no?: string;\n /** Text of a cell holding an unset placeholder (AB#5623). Default \"Not configured\". */\n notConfigured?: string;\n}\n\n/**\n * How BOOLEAN list columns without an explicit `display` render (AB#5623): `'text'` (Yes / No,\n * default) or `'icon'` (check / x icon named \"<column>: Yes|No\", filterable as boolean).\n */\nexport type EntityListBooleanDisplay = 'text' | 'icon';\n\n/** Options of {@link toEntityListColumn}. */\nexport interface EntityListColumnOptions {\n /** See {@link EntityListBooleanDisplay}. Default `'text'`. */\n booleanDisplay?: EntityListBooleanDisplay;\n}\n\n/** Whether a column is a single (non-array) BOOLEAN attribute. */\nfunction isBooleanColumn(column: ResolvedListColumn): boolean {\n return (column.valueType ?? '').toUpperCase() === 'BOOLEAN';\n}\n\n/** Whether a column's cells need formatting by CK value type (enum names, yes/no). */\nfunction isFormattedType(column: ResolvedListColumn): boolean {\n const type = (column.valueType ?? '').toUpperCase().replace(/_ARRAY$/, '');\n return type === 'ENUM' || type === 'BOOLEAN';\n}\n\n/**\n * Badge mapping of a `chip` column over an ENUM / BOOLEAN attribute: the raw key (`0`, `true`)\n * shows the enum value name / yes-no label in the neutral pill (AB#5547).\n */\nfunction chipLabels(column: ResolvedListColumn, labels: EntityListCellLabels): BadgeMappingTable | undefined {\n const type = (column.valueType ?? '').toUpperCase();\n if (type === 'ENUM' && column.enumOptions?.length) {\n const table: BadgeMappingTable = {};\n for (const option of column.enumOptions) {\n table[String(option.key)] = { label: option.name };\n table[option.name] = { label: option.name };\n }\n return table;\n }\n if (type === 'BOOLEAN') {\n return { true: { label: labels.yes ?? 'Yes' }, false: { label: labels.no ?? 'No' } };\n }\n return undefined;\n}\n\n/**\n * Maps a resolved list column onto an `mm-list-view` column definition. Cells are formatted by the\n * CK value type like the reference display of the form (AB#5547): ENUM → the enum value's name\n * (the API returns the key), BOOLEAN → yes/no, dates → localized date and time.\n */\nexport function toEntityListColumn(\n column: ResolvedListColumn,\n labels: EntityListCellLabels = {},\n unsetPlaceholders?: EntityFormUnsetPlaceholderLookup,\n options: EntityListColumnOptions = {},\n): TableColumn {\n // AB#5623: a placeholder value of a non-secret attribute reads \"Not configured\".\n const placeholderValues = column.kind === 'attribute' && unsetPlaceholders && !isSecretValueType(column.valueType)\n ? [...unsetPlaceholders.global, ...(unsetPlaceholders.attributes.get(column.field.toLowerCase()) ?? [])]\n : [];\n const notConfigured = labels.notConfigured ?? 'Not configured';\n const isUnset = (value: unknown): boolean => typeof value === 'string' && placeholderValues.includes(value);\n const base: TableColumn = {\n field: column.field,\n displayName: column.label,\n ...(column.width ? { width: column.width } : { minWidth: 120 }),\n };\n const attribute: CkAttributeInfo | undefined = column.valueType\n ? { attributeName: column.field, valueType: column.valueType, isOptional: true, defaultValues: [], secret: false, enumOptions: column.enumOptions }\n : undefined;\n const format = (value: unknown): string => formatReferenceDisplayValue(value, attribute, labels) ?? '';\n // AB#5623: boolean as icon — per column (`display: icon`) or for every plain BOOLEAN column.\n const asIcon = isBooleanColumn(column)\n && (column.display === 'icon' || (column.display === 'text' && options.booleanDisplay === 'icon'));\n if (asIcon) {\n return { ...base, dataType: 'booleanIcon' };\n }\n switch (column.display) {\n case 'chip': {\n let badgeMapping = chipLabels(column, labels);\n if (placeholderValues.length) {\n badgeMapping = { ...(badgeMapping ?? {}) };\n for (const value of placeholderValues) {\n badgeMapping[value] = { label: notConfigured };\n }\n }\n return { ...base, dataType: 'badge', ...(badgeMapping ? { badgeMapping } : {}) };\n }\n case 'date':\n return { ...base, dataType: 'iso8601', format: 'medium' };\n case 'mono':\n return {\n ...base,\n dataType: 'component',\n cellComponent: EntityListMonoCellComponent,\n cellInputs: (item: unknown) => {\n const value = (item as Record<string, unknown>)[column.field];\n if (isUnset(value)) {\n return { value: notConfigured };\n }\n return { value: isFormattedType(column) ? format(value) : value };\n },\n };\n default:\n if (placeholderValues.length) {\n return {\n ...base,\n dataType: 'text',\n truncate: true,\n formatter: (value: unknown) => isUnset(value)\n ? notConfigured\n : isFormattedType(column) ? format(value) : value === null || value === undefined ? '' : String(value),\n };\n }\n return { ...base, dataType: 'text', truncate: true, ...(isFormattedType(column) ? { formatter: format } : {}) };\n }\n}\n\n/**\n * `<mm-entity-list>` — the list view of a resolved entity form.\n *\n * Columns come from the form's `ListColumns` (secret columns are never listed or queried).\n * Row click and the \"Edit\"/\"View\" action emit {@link openRequested}; \"New\" emits\n * {@link createRequested} — for an abstract type only after the user picked a concrete\n * subtype. The context menu carries the Copy ID submenu (RtId / CkTypeId / RtCkTypeId /\n * RtEntityId) and, when `canDelete && canWrite`, Delete with a confirmation.\n *\n * Host extensions (AB#5623): `toolbarActions` (after New), `rowActions` (icon buttons in the\n * actions column after Edit/View), `rowMenuActions` (context menu between Copy ID and Delete) —\n * plain `CommandItem`s as in `mm-list-view`; `onClick` receives the row (`EntityListRow`) as\n * `e.data`. `rowClass` sets CSS classes per row (e.g. disabled rows). `defaultSort` (or the form's `listDefaultSort`) orders the list while the user has not\n * sorted by a column; `labelResolver` translates column titles and enum texts.\n *\n * The component does not navigate; `<mm-entity-page>` (or the host) reacts to the outputs.\n */\n@Component({\n selector: 'mm-entity-list',\n standalone: true,\n imports: [ListViewComponent, EntityListDataSourceDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './entity-list.component.html',\n styleUrl: './entity-list.component.scss',\n})\nexport class EntityListComponent {\n private readonly confirmationService = inject(ConfirmationService);\n private readonly dangerConfirmation = inject(ENTITY_FORM_DANGER_CONFIRMATION, { optional: true });\n private readonly actionConfirmation = inject(ENTITY_FORM_ACTION_CONFIRMATION, { optional: true });\n private readonly notificationService = inject(NotificationDisplayService);\n private readonly dataService = inject(EntityFormDataService);\n private readonly ckTypeSelectorDialog = inject(CkTypeSelectorDialogService, { optional: true });\n /** Resolves `EntityFormService` lazily: only the Type column needs the form titles. */\n private readonly injector = inject(Injector);\n private readonly injectedLabelResolver = inject(ENTITY_FORM_LABEL_RESOLVER, { optional: true });\n private readonly injectedRowClass = inject(ENTITY_LIST_ROW_CLASS, { optional: true });\n private readonly unsetPlaceholders = entityFormUnsetPlaceholderLookup(inject(ENTITY_FORM_UNSET_PLACEHOLDER_VALUES, { optional: true }));\n /** Form titles per CK type (lower-case id) for the Type column (AB#5524). */\n private readonly typeTitles = signal<ReadonlyMap<string, string>>(new Map());\n private typeTitlesRequested = false;\n\n /** The resolved form (`EntityFormService.resolve` / `resolveByFormKey`). */\n readonly model = input.required<ResolvedEntityForm>();\n /** Whether the current user may write (mapped from roles by the host). Default `true`. */\n readonly canWrite = input<boolean>(true);\n /** Partial message overrides; missing keys use the English defaults. */\n readonly messages = input<Partial<EntityFormsMessages>>({});\n /** `mm-list-view` state persistence key; defaults to the route path. */\n readonly listStateKey = input<string | undefined>(undefined);\n /**\n * Appends a \"Type\" column with the display name of each row's CK type (lists over a base type):\n * the title of the type's entity form, else the humanized type name (AB#5524).\n */\n readonly showTypeColumn = input<boolean>(false);\n /**\n * Order while the user has not sorted by a column (AB#5623). Wins over the form's\n * `listDefaultSort`; `[]` = server order. A sort the user picked (also a remembered one from\n * `listStateKey`) always wins. The column header shows no sort marker for the default order.\n */\n readonly defaultSort = input<readonly EntityListSortDescriptor[] | null | undefined>(undefined);\n /** Translates column titles and enum texts (AB#5623); wins over `ENTITY_FORM_LABEL_RESOLVER`. */\n readonly labelResolver = input<EntityFormLabelResolver | null | undefined>(undefined);\n /** Host toolbar actions, shown after \"New\" (AB#5623). */\n readonly toolbarActions = input<readonly CommandItem[]>([]);\n /**\n * Host row actions (AB#5623): icon buttons in the actions column after Edit / View. Set\n * `svgIcon` and `text` (tooltip / aria-label); `onClick` gets the row as `e.data`.\n */\n readonly rowActions = input<readonly CommandItem[]>([]);\n /** Host row menu entries (AB#5623): context menu, between Copy ID and Delete. */\n readonly rowMenuActions = input<readonly CommandItem[]>([]);\n /**\n * CSS classes per row (AB#5623), e.g. to style disabled rows. Wins over `ENTITY_LIST_ROW_CLASS`;\n * absent = no row classes (unchanged). See {@link EntityListRowClass}.\n */\n readonly rowClass = input<EntityListRowClass | null | undefined>(undefined);\n /**\n * How BOOLEAN columns without an explicit display render (AB#5623): `'text'` (Yes / No, default)\n * or `'icon'` (check / x with an accessible name, boolean filter). A column's own\n * `display: icon` always renders as icon.\n */\n readonly booleanDisplay = input<EntityListBooleanDisplay>('text');\n /**\n * Row field used as the row's human label (AB#5623): row action names (\"Actions for <label>\"),\n * the delete confirmation target. A dotted path reads a nested value. Absent = today's\n * behaviour (`name`, then `rtWellKnownName`, display name, `rtId`).\n */\n readonly rowLabelField = input<string | null | undefined>(undefined);\n\n /** \"New\" was confirmed; carries the concrete type (after the subtype picker for abstract types). */\n readonly createRequested = output<EntityListCreateRequest>();\n /** A row was opened. */\n readonly openRequested = output<EntityListOpenRequest>();\n /** Entities were deleted. */\n readonly deleted = output<EntityListOpenRequest[]>();\n\n private readonly dataSource = viewChild(EntityListDataSourceDirective);\n\n protected readonly msgs = computed(() => mergeEntityFormsMessages(this.messages()));\n\n protected readonly listViewMessages = computed(() => ({\n searchPlaceholder: this.msgs().searchPlaceholder,\n noRecords: this.msgs().emptyList,\n booleanYes: this.msgs().toggleOn,\n booleanNo: this.msgs().toggleOff,\n }));\n\n protected readonly columns = computed<TableColumn[]>(() => {\n const m = this.msgs();\n const labels: EntityListCellLabels = { yes: m.toggleOn, no: m.toggleOff, notConfigured: m.notConfigured };\n const model = this.model();\n const secrets = new Set(model.secretFields.map((f) => f.toLowerCase()));\n const columns = localizeEntityListColumns(model, this.labelResolver() ?? this.injectedLabelResolver)\n .map((c) => toEntityListColumn(c, labels, secrets.has(c.field.toLowerCase()) ? undefined : this.unsetPlaceholders, { booleanDisplay: this.booleanDisplay() }));\n if (this.showTypeColumn() && !columns.some((c) => c.field === 'ckTypeId')) {\n const titles = this.typeTitles();\n const changed = columns.findIndex((c) => c.field === 'rtChangedDateTime');\n const typeColumn: TableColumn = {\n field: 'ckTypeId',\n displayName: this.msgs().typeColumn,\n dataType: 'text',\n sortable: false,\n filterable: false,\n formatter: (value) => ckTypeDisplayName(String(value ?? ''), titles),\n };\n columns.splice(changed >= 0 ? changed : columns.length, 0, typeColumn);\n }\n return columns;\n });\n\n protected readonly canCreate = computed(() => this.canWrite() && this.model().capabilities.canCreate);\n protected readonly canDelete = computed(() => this.canWrite() && this.model().capabilities.canDelete);\n protected readonly editable = computed(() => this.canWrite() && this.model().capabilities.canEdit);\n\n /** Copy ID submenu (Studio convention, see the refinery-studio CLAUDE.md). */\n readonly copyIdMenuItem = computed<CommandItem>(() => {\n const m = this.msgs();\n return {\n id: 'copyId',\n type: 'link',\n text: m.copyId,\n svgIcon: MM_ACTION_ICONS.copy,\n children: [\n { id: 'copyRtId', type: 'link', text: m.copyRtId, onClick: (e) => this.copy(e, 'rtId') },\n { id: 'copyCkTypeId', type: 'link', text: m.copyCkTypeId, onClick: (e) => this.copy(e, 'ckTypeId') },\n { id: 'copyRtCkTypeId', type: 'link', text: m.copyRtCkTypeId, onClick: (e) => this.copy(e, 'rtCkTypeId') },\n { id: 'copyRtEntityId', type: 'link', text: m.copyRtEntityId, onClick: (e) => this.copy(e, 'rtEntityId') },\n ],\n };\n });\n\n /**\n * Context menu: Copy ID, the host's `rowMenuActions`, then (only with `canDelete && canWrite`)\n * separator + Delete.\n */\n readonly contextMenuItems = computed<CommandItem[]>(() => {\n const items: CommandItem[] = [this.copyIdMenuItem(), ...this.rowMenuActions()];\n if (this.canDelete()) {\n items.push(\n { id: 'separator1', type: 'separator' },\n {\n id: 'delete',\n type: 'link',\n text: this.msgs().delete,\n svgIcon: MM_ACTION_ICONS.delete,\n danger: true,\n onClick: (e) => this.onDelete(e),\n },\n );\n }\n return items;\n });\n\n /** Row action column: Edit (or View when read-only), then the host's `rowActions`. */\n readonly actionItems = computed<CommandItem[]>(() => [\n {\n id: 'open',\n type: 'link',\n text: this.editable() ? this.msgs().edit : this.msgs().viewTitle,\n svgIcon: this.editable() ? MM_ACTION_ICONS.edit : MM_ACTION_ICONS.view,\n onClick: async (e) => this.open(e.data as EntityListRow | undefined),\n },\n ...this.rowActions(),\n ]);\n\n /** The `mm-list-view` row class callback (input, else the token, else none). */\n protected readonly listViewRowClass = computed<RowClassFn | undefined>(() =>\n toListViewRowClass(this.rowClass() ?? this.injectedRowClass));\n\n /** Width of the actions column: Edit/View + the row menu, plus one icon button per host row action. */\n protected readonly actionsColumnWidth = computed(() => 80 + 40 * this.rowActions().length);\n\n /** Toolbar: New (only with `canCreate && canWrite`), then the host's `toolbarActions`. */\n readonly toolbarItems = computed<CommandItem[]>(() => [\n ...(this.canCreate()\n ? [{ id: 'new', type: 'link', text: this.msgs().new, svgIcon: MM_ACTION_ICONS.add, onClick: async () => this.requestCreate() } as CommandItem]\n : []),\n ...this.toolbarActions(),\n ]);\n\n /** The order used while the user has not sorted: the input, else the form's `listDefaultSort`. */\n protected readonly effectiveDefaultSort = computed<readonly EntityListSortDescriptor[]>(() =>\n this.defaultSort() ?? this.model().listDefaultSort ?? []);\n\n constructor() {\n effect(() => {\n const ds = this.dataSource();\n const model = this.model();\n const defaultSort = this.effectiveDefaultSort();\n ds?.setModel(model, defaultSort);\n });\n effect(() => {\n if (this.showTypeColumn()) {\n untracked(() => void this.loadTypeTitles());\n }\n });\n }\n\n /** Loads the form titles of the Type column once; without them the type names are humanized. */\n private async loadTypeTitles(): Promise<void> {\n if (this.typeTitlesRequested) {\n return;\n }\n this.typeTitlesRequested = true;\n try {\n const forms = await this.injector.get(EntityFormService).getForms();\n this.typeTitles.set(entityFormTypeTitles(forms));\n } catch (error) {\n console.warn('mm-entity-list: form titles for the Type column could not be loaded', error);\n }\n }\n\n /** Reloads the list. */\n refresh(): void {\n this.dataSource()?.fetchAgain();\n }\n\n /**\n * Starts \"New\". For an abstract type (`createRequiresSubtype`) the concrete-subtype picker\n * opens first; cancelling it emits nothing.\n */\n async requestCreate(): Promise<void> {\n const model = this.model();\n if (!this.canCreate()) {\n return;\n }\n if (!model.capabilities.createRequiresSubtype) {\n this.createRequested.emit({ ckTypeId: model.rtCkTypeId });\n return;\n }\n if (!this.ckTypeSelectorDialog) {\n console.warn('mm-entity-list: CkTypeSelectorDialogService is not provided (provideOctoUi()); cannot pick a subtype.');\n return;\n }\n const result = await this.ckTypeSelectorDialog.openCkTypeSelector({\n derivedFromRtCkTypeId: model.rtCkTypeId,\n allowAbstract: false,\n dialogTitle: this.msgs().selectSubtypeTitle,\n });\n if (result.confirmed && result.selectedCkType) {\n this.createRequested.emit({ ckTypeId: result.selectedCkType.rtCkTypeId });\n }\n }\n\n protected onRowClicked(rows: unknown[]): void {\n const row = rows?.[rows.length - 1] as EntityListRow | undefined;\n this.open(row);\n }\n\n private open(row: EntityListRow | undefined): void {\n if (row?.rtId) {\n this.openRequested.emit({ rtId: row.rtId, ckTypeId: row.ckTypeId || this.model().rtCkTypeId });\n }\n }\n\n private async onDelete(e: CommandItemExecuteEventArgs): Promise<void> {\n if (!this.canDelete()) {\n return;\n }\n const rows = (Array.isArray(e.data) ? e.data : [e.data]).filter(\n (r): r is EntityListRow => !!(r as EntityListRow | undefined)?.rtId,\n );\n if (rows.length === 0) {\n return;\n }\n const request = {\n action: 'delete' as const,\n ckTypeId: rows[0].ckTypeId || this.model().rtCkTypeId,\n count: rows.length,\n description: rows.length === 1 ? 'delete 1 entity' : `delete ${rows.length} entities`,\n };\n if (!await confirmEntityFormAction(this.actionConfirmation, request)) {\n return;\n }\n const m = this.msgs();\n const labelField = this.rowLabelField();\n const options = entityDeleteConfirmation(m, rows.map((row) => rowName(row, labelField)));\n if (!await confirmEntityFormDanger(this.dangerConfirmation, this.confirmationService, options, request)) {\n return;\n }\n const entities = rows.map((r) => ({ rtId: r.rtId, ckTypeId: r.ckTypeId || this.model().rtCkTypeId }));\n try {\n const ok = await this.dataService.delete(entities);\n if (!ok) {\n this.notificationService.showError(m.deleteError);\n return;\n }\n this.notificationService.showSuccess(m.deleteSuccess, 3000);\n this.deleted.emit(entities);\n this.dataSource()?.fetchAgain();\n } catch (error) {\n console.error('mm-entity-list: delete failed', error);\n this.notificationService.showError(m.deleteError, error instanceof Error ? error.message : undefined);\n }\n }\n\n private async copy(e: CommandItemExecuteEventArgs, kind: 'rtId' | 'ckTypeId' | 'rtCkTypeId' | 'rtEntityId'): Promise<void> {\n const row = e.data as EntityListRow | undefined;\n if (!row?.rtId) {\n return;\n }\n const m = this.msgs();\n // Rows carry the runtime ckTypeId only; it is both the CkTypeId and the RtCkTypeId here.\n const ckTypeId = row.ckTypeId || this.model().rtCkTypeId;\n const values = {\n rtId: { value: row.rtId, label: m.copyRtId },\n ckTypeId: { value: ckTypeId, label: m.copyCkTypeId },\n rtCkTypeId: { value: ckTypeId, label: m.copyRtCkTypeId },\n rtEntityId: { value: `${ckTypeId}@${row.rtId}`, label: m.copyRtEntityId },\n } as const;\n const { value, label } = values[kind];\n try {\n await navigator.clipboard.writeText(value);\n this.notificationService.showSuccess(formatEntityFormsMessage(m.copiedId, { label }), 2000);\n } catch (error) {\n console.error('mm-entity-list: failed to copy to clipboard', error);\n this.notificationService.showError(m.copyFailed);\n }\n }\n}\n\nfunction rowName(row: EntityListRow, labelField?: string | null): string {\n const label = labelField ? resolveListRowLabel(row, labelField, []) : '';\n if (label) {\n return label;\n }\n const name = row['name'];\n if (typeof name === 'string' && name) {\n return name;\n }\n return row.rtWellKnownName || row.rtDisplayName || row.rtId;\n}\n\n/**\n * `System.Communication/SftpConfiguration` → `SFTP configuration`.\n * @deprecated Use `humanizeCkTypeName` (or `ckTypeDisplayName` with form titles).\n */\nexport function shortTypeName(ckTypeId: string): string {\n return humanizeCkTypeName(ckTypeId) || ckTypeId;\n}\n","<mm-list-view\n mmEntityListDataSource\n [columns]=\"columns()\"\n [sortable]=\"true\"\n [rowFilterEnabled]=\"true\"\n [searchTextBoxEnabled]=\"true\"\n [autoPageSize]=\"true\"\n [selectable]=\"{ mode: 'single', enabled: true }\"\n [showRowCheckBoxes]=\"false\"\n [actionsColumnWidth]=\"actionsColumnWidth()\"\n [actionCommandItems]=\"actionItems()\"\n [contextMenuCommandItems]=\"contextMenuItems()\"\n [leftToolbarActions]=\"toolbarItems()\"\n [listStateKey]=\"listStateKey()\"\n [messages]=\"listViewMessages()\"\n [rowClass]=\"listViewRowClass()\"\n [rowLabelField]=\"rowLabelField() || 'name'\"\n (rowClicked)=\"onRowClicked($event)\"\n>\n</mm-list-view>\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { EntityFormMode, ResolvedEntityForm } from '../models/entity-form.models';\n\n/** Template context of {@link EntityPageActionsDirective} (AB#5623). */\nexport interface EntityPageActionsContext {\n /** The context object itself (`let-ctx`). */\n $implicit: EntityPageActionsContext;\n /** Which part of the page is shown. */\n view: 'list' | 'form';\n /** Form mode (`null` on the list). */\n mode: EntityFormMode | null;\n /** rtId of the open entity (`null` on the list and in create mode). */\n rtId: string | null;\n /** Runtime CK type of the open entity, else of the list. */\n ckTypeId: string | null;\n /** The resolved form of the open entity, else of the list. */\n model: ResolvedEntityForm | null;\n /** True while a save is running. */\n saving: boolean;\n /**\n * The page (typed loosely to avoid a circular import): call `saveChanges()`, `patchFormValues()`\n * or `refreshList()` on it, e.g. `(ctx.page as EntityPageComponent).patchFormValues({...})`.\n */\n page: unknown;\n}\n\n/**\n * Host page actions of `<mm-entity-page>` (AB#5623): the template is rendered next to the page's\n * own buttons — in the list header, and in the form's action bar (header or bottom bar, see\n * `actionBarPosition`) before Cancel / Delete / Save.\n *\n * ```html\n * <mm-entity-page formKey=\"form-company-profile\">\n * <ng-template mmEntityPageActions let-ctx>\n * @if (ctx.view === 'form') {\n * <button kendoButton fillMode=\"flat\" (click)=\"export(ctx.rtId)\">Export</button>\n * }\n * </ng-template>\n * </mm-entity-page>\n * ```\n */\n@Directive({\n selector: 'ng-template[mmEntityPageActions]',\n standalone: true,\n})\nexport class EntityPageActionsDirective {\n readonly templateRef = inject<TemplateRef<EntityPageActionsContext>>(TemplateRef);\n\n static ngTemplateContextGuard(_dir: EntityPageActionsDirective, _ctx: unknown): _ctx is EntityPageActionsContext {\n return true;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, ParamMap, Router } from '@angular/router';\nimport { FieldFilterDto, FieldFilterOperatorsDto } from '@meshmakers/octo-services';\nimport { EntityIdInfoComponent } from '@meshmakers/octo-ui';\nimport { BreadCrumbService } from '@meshmakers/shared-services';\nimport {\n ConfirmationService,\n HAS_UNSAVED_CHANGES,\n HasUnsavedChanges,\n MM_ACTION_ICONS,\n NotificationDisplayService,\n resolveListRowLabel,\n UnsavedChangesMessages,\n} from '@meshmakers/shared-ui';\nimport { ButtonComponent } from '@progress/kendo-angular-buttons';\nimport { KENDO_DIALOG } from '@progress/kendo-angular-dialog';\nimport { arrowLeftIcon, saveIcon } from '@progress/kendo-svg-icons';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CommandItem } from '@meshmakers/shared-services';\nimport { firstValueFrom } from 'rxjs';\nimport {\n EntityFormsMessages,\n formatEntityFormsMessage,\n mergeEntityFormsMessages,\n} from '../entity-forms.messages';\nimport { EntityFormComponent } from '../form/entity-form.component';\nimport { EntityFormGetListDtoGQL } from '../graphQL/getEntityFormList';\nimport {\n CkRecordInfo,\n EntityFormMode,\n EntityFormValueState,\n EntityListSortDescriptor,\n ResolvedEntityForm,\n} from '../models/entity-form.models';\nimport {\n ENTITY_FORM_LABEL_RESOLVER,\n EntityFormLabelResolver,\n localizeEntityForm,\n localizeEntityFormTitle,\n} from '../core/entity-form-labels';\nimport { EntityFormPrefillValues } from '../core/entity-form-prefill';\nimport { EntityPageActionsContext, EntityPageActionsDirective } from './entity-page-actions.directive';\nimport { EntityFormDataService } from '../services/entity-form-data.service';\nimport { EntityFormService } from '../services/entity-form.service';\nimport { entityListIncludesDerivedTypes } from '../list/entity-list-data-source.directive';\nimport {\n EntityListComponent,\n EntityListCreateRequest,\n EntityListOpenRequest,\n EntityListBooleanDisplay,\n EntityListRowClass,\n} from '../list/entity-list.component';\nimport {\n confirmEntityFormAction,\n confirmEntityFormDanger,\n ENTITY_FORM_ACTION_CONFIRMATION,\n ENTITY_FORM_DANGER_CONFIRMATION,\n entityDeleteConfirmation,\n} from '../core/action-confirmation';\nimport { ENTITY_FORM_BEFORE_SAVE, EntityFormBeforeSaveHook, runEntityFormBeforeSave } from '../core/before-save';\n\n/** Value of the `rtId` input / route parameter that opens the create form. */\nexport const ENTITY_PAGE_NEW = 'new';\n\n/**\n * Query parameter carrying the concrete runtime CK type of the entity to create or open\n * (`new?type=…` after the subtype picker of an abstract type, `:rtId?type=…` for an entity of\n * a derived type). Named `type`, not `ckTypeId`, so that `withComponentInputBinding` never\n * binds it onto the page's `ckTypeId` input (the form's target type).\n */\nexport const ENTITY_PAGE_TYPE_QUERY_PARAM = 'type';\n\n/** Event of {@link EntityPageComponent.navigate}. */\nexport interface EntityPageNavigateEvent {\n kind: 'list' | 'create' | 'edit';\n rtId?: string;\n ckTypeId?: string;\n}\n\n/** Event of {@link EntityPageComponent.saved}: an entity was created or updated. */\nexport interface EntityPageSavedEvent {\n kind: 'create' | 'update';\n rtId: string;\n ckTypeId: string;\n}\n\n/** Event of {@link EntityPageComponent.deleted}. */\nexport interface EntityPageDeletedEvent {\n rtId: string;\n ckTypeId: string;\n}\n\n/** Which part of the page is shown. */\nexport type EntityPageView = 'loading' | 'list' | 'form' | 'error';\n\n/** Where the form's Save / Cancel / Delete buttons sit (AB#5623). */\nexport type EntityPageActionBarPosition = 'top' | 'bottom';\n\n/**\n * How create / edit of a list row opens (AB#5623): `'page'` (navigate to the `new` / `:rtId`\n * route, default) or `'dialog'` (a dialog over the list; the URL does not change).\n */\nexport type EntityPageEditMode = 'page' | 'dialog';\n\n/**\n * Prefill of the create form (AB#5623): the values, or a function of the concrete type to create\n * (called once per create form; may return `null`).\n */\nexport type EntityPageInitialValues =\n | EntityFormPrefillValues\n | ((context: { ckTypeId: string }) => EntityFormPrefillValues | null | undefined);\n\ninterface PageContext {\n formKey?: string;\n ckTypeId?: string;\n rtId?: string;\n type?: string;\n}\n\n/**\n * `<mm-entity-page>` — route component that combines `<mm-entity-list>` and `<mm-entity-form>`\n * for one form (by `formKey`) or CK type (by `ckTypeId`).\n *\n * - No `rtId` → list (or, for a singleton form, the singleton entity directly).\n * - `rtId === 'new'` → create form (`?type=` carries the concrete subtype of an abstract type).\n * - any other `rtId` → edit form (or view form without write permission).\n *\n * Inputs can be bound by `withComponentInputBinding()` from route params / data; without it the\n * page falls back to `ActivatedRoute` (params, data of this route and its parents, query params).\n * Navigation is relative (`..`, `new`, `:rtId`), so it works under any mount point; set\n * `routerNavigation` to `false` and handle {@link navigate} to drive it yourself.\n *\n * Host extensions (AB#5623, all optional, defaults = unchanged behaviour): `actionBarPosition`\n * (Save / Cancel at the bottom), page actions via `<ng-template mmEntityPageActions>`, list\n * `listToolbarActions` / `listRowActions` / `listRowMenuActions`, `defaultSort`, `labelResolver`\n * (translated labels and enum texts), `initialValues` (create prefill),\n * {@link patchFormValues} (prefill from a host action), `beforeSave` (normalise / veto the\n * change set before it is saved), `listRowClass` (CSS classes per row) and `editMode: 'dialog'`\n * (create / edit in a dialog over the list).\n *\n * Dialog mode (`editMode: 'dialog'`, AB#5623): \"New\", row click and Edit / View open the form in\n * a Kendo dialog over the list instead of navigating. The same form, hooks and texts apply\n * (`beforeSave`, `initialValues`, `labelResolver`, secrets, page actions with `view: 'form'`);\n * actions sit in the dialog's bottom bar (page actions, Cancel, Delete, Save — Cancel left of the\n * primary Save). Cancel, the close button and Escape ask before discarding unsaved changes; a\n * route change while the dialog has changes goes through the unsaved-changes guard. After a save\n * or delete the dialog closes and the list reloads; focus returns to the element that opened the\n * dialog. No `navigate` events are emitted for dialog transitions. The `new` / `:rtId` routes keep\n * working as pages (deep links); singleton forms always use the page.\n */\n@Component({\n selector: 'mm-entity-page',\n standalone: true,\n imports: [EntityListComponent, EntityFormComponent, EntityIdInfoComponent, ButtonComponent, NgTemplateOutlet, KENDO_DIALOG],\n providers: [{ provide: HAS_UNSAVED_CHANGES, useExisting: EntityPageComponent }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './entity-page.component.html',\n styleUrl: './entity-page.component.scss',\n})\nexport class EntityPageComponent implements HasUnsavedChanges {\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly formService = inject(EntityFormService);\n private readonly dataService = inject(EntityFormDataService);\n private readonly listGQL = inject(EntityFormGetListDtoGQL);\n private readonly notificationService = inject(NotificationDisplayService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly actionConfirmation = inject(ENTITY_FORM_ACTION_CONFIRMATION, { optional: true });\n private readonly dangerConfirmation = inject(ENTITY_FORM_DANGER_CONFIRMATION, { optional: true });\n private readonly breadCrumbService = inject(BreadCrumbService, { optional: true });\n private readonly injectedLabelResolver = inject(ENTITY_FORM_LABEL_RESOLVER, { optional: true });\n private readonly injectedBeforeSave = inject(ENTITY_FORM_BEFORE_SAVE, { optional: true });\n\n /** Form key (`form-sftp-configuration` or `sftp-configuration`). Wins over `ckTypeId`. */\n readonly formKey = input<string | undefined>(undefined);\n /** Runtime CK type id of the form's target type (used when no `formKey` is given). */\n readonly ckTypeId = input<string | undefined>(undefined);\n /** Entity to edit; `'new'` opens the create form; absent shows the list. */\n readonly rtId = input<string | undefined>(undefined);\n /** Whether the user may write. Falls back to route data `canWrite`, then `true`. */\n readonly canWrite = input<boolean | undefined>(undefined);\n /** Partial message overrides; falls back to route data `messages`, then English. */\n readonly messages = input<Partial<EntityFormsMessages> | undefined>(undefined);\n /** Perform the default relative Router navigation (in addition to emitting {@link navigate}). */\n readonly routerNavigation = input<boolean>(true);\n /**\n * Where Save / Cancel / Delete sit on the form (AB#5623): `'top'` (header, default) or\n * `'bottom'` (a bar below the form, right-aligned). Falls back to route data\n * `entityPageActionBarPosition`.\n */\n readonly actionBarPosition = input<EntityPageActionBarPosition | undefined>(undefined);\n /** Translates labels, titles and enum texts (AB#5623); wins over `ENTITY_FORM_LABEL_RESOLVER`. */\n readonly labelResolver = input<EntityFormLabelResolver | null | undefined>(undefined);\n /** List order while the user has not sorted (AB#5623). Falls back to route data `entityListDefaultSort`, then the form's `listDefaultSort`. */\n readonly defaultSort = input<readonly EntityListSortDescriptor[] | null | undefined>(undefined);\n /** Prefill of the create form (AB#5623). Falls back to route data `entityFormInitialValues`. */\n readonly initialValues = input<EntityPageInitialValues | null | undefined>(undefined);\n /**\n * Hook run before every save (AB#5623): may modify the change set or veto the save. Wins over\n * route data `entityFormBeforeSave` and `ENTITY_FORM_BEFORE_SAVE`. See {@link EntityFormBeforeSaveHook}.\n */\n readonly beforeSave = input<EntityFormBeforeSaveHook | null | undefined>(undefined);\n /** Host toolbar actions of the list, after \"New\" (AB#5623). */\n readonly listToolbarActions = input<readonly CommandItem[]>([]);\n /** Host row actions of the list (icon buttons after Edit / View, AB#5623). */\n readonly listRowActions = input<readonly CommandItem[]>([]);\n /** Host row menu entries of the list (context menu, AB#5623). */\n readonly listRowMenuActions = input<readonly CommandItem[]>([]);\n /**\n * How create / edit opens (AB#5623): `'page'` (default) or `'dialog'` (over the list). Falls back\n * to route data `entityPageEditMode`. Ignored for singleton forms.\n */\n readonly editMode = input<EntityPageEditMode | undefined>(undefined);\n /**\n * CSS classes per list row (AB#5623), passed to `mm-entity-list`'s `rowClass`. Falls back to\n * route data `entityListRowClass`, then `ENTITY_LIST_ROW_CLASS`.\n */\n readonly listRowClass = input<EntityListRowClass | null | undefined>(undefined);\n /**\n * How the list renders BOOLEAN columns (AB#5623), passed to `mm-entity-list`'s `booleanDisplay`:\n * `'text'` (default) or `'icon'`. Falls back to route data `entityListBooleanDisplay`.\n */\n readonly listBooleanDisplay = input<EntityListBooleanDisplay | undefined>(undefined);\n /**\n * Field naming a row / entity for people (AB#5623): passed to `mm-entity-list`'s\n * `rowLabelField` (row action names, delete confirmation) and used for the dialog / page title\n * (\"Edit <label>\") and the delete confirmation of the open entity. Falls back to route data\n * `entityListRowLabelField`; absent = today's behaviour (`name`, well-known name, display name, rtId).\n */\n readonly listRowLabelField = input<string | undefined>(undefined);\n\n /** Emitted for every list / create / edit transition. */\n readonly navigate = output<EntityPageNavigateEvent>();\n /** Emitted after a successful create or update (not for \"no changes\"). Hosts refresh their lists on it. */\n readonly saved = output<EntityPageSavedEvent>();\n /** Emitted after the open entity was deleted from the form (before the navigation to the list). */\n readonly deleted = output<EntityPageDeletedEvent>();\n\n // Queried by template reference so specs can swap in stubs with the same selector.\n private readonly form = viewChild<EntityFormComponent>('entityForm');\n /** Why Save / Create is disabled (e.g. a required secret without key ring, Q17), or `null`. */\n protected readonly saveBlockedReason = computed(() => this.form()?.saveBlockedReason() ?? null);\n private readonly list = viewChild<EntityListComponent>('entityList');\n private readonly listElement = viewChild('entityList', { read: ElementRef });\n /** Host page actions (`<ng-template mmEntityPageActions>`, AB#5623). */\n protected readonly pageActions = contentChild(EntityPageActionsDirective);\n\n private readonly paramMap = toSignal(this.route.paramMap);\n private readonly queryParamMap = toSignal(this.route.queryParamMap);\n private readonly routeData = toSignal(this.route.data);\n\n protected readonly view = signal<EntityPageView>('loading');\n protected readonly errorMessage = signal<string | null>(null);\n /** The form resolved for the page's type (list + breadcrumb title). */\n protected readonly baseModel = signal<ResolvedEntityForm | null>(null);\n /** The form resolved for the entity's concrete type (create / edit). */\n protected readonly formModel = signal<ResolvedEntityForm | null>(null);\n protected readonly mode = signal<EntityFormMode>('create');\n protected readonly state = signal<EntityFormValueState | undefined>(undefined);\n protected readonly entityRtId = signal<string | null>(null);\n protected readonly entityCkTypeId = signal<string | null>(null);\n protected readonly entityName = signal<string | null>(null);\n protected readonly saving = signal(false);\n /** Record metadata of the form's type (type conversion of record sub-values in the form). */\n protected readonly records = signal<Record<string, CkRecordInfo>>({});\n /** Well-known name forced onto a singleton that is created on first save. */\n protected readonly singletonWellKnownName = signal<string | null>(null);\n /** The create / edit dialog over the list is shown (`editMode: 'dialog'`, AB#5623). */\n protected readonly dialogOpen = signal(false);\n\n protected readonly saveIcon = saveIcon;\n protected readonly backIcon = arrowLeftIcon;\n protected readonly deleteIcon = MM_ACTION_ICONS.delete;\n\n protected readonly msgs = computed(() =>\n mergeEntityFormsMessages(this.messages() ?? (this.inheritedData('messages') as Partial<EntityFormsMessages> | undefined)),\n );\n\n protected readonly effectiveCanWrite = computed(() => {\n const bound = this.canWrite();\n if (bound !== undefined) {\n return bound;\n }\n const fromData = this.inheritedData('canWrite');\n return fromData === undefined ? true : fromData !== false;\n });\n\n protected readonly effectiveLabelResolver = computed(() => this.labelResolver() ?? this.injectedLabelResolver ?? null);\n\n /** The effective before-save hook: input, else route data `entityFormBeforeSave`, else the token. */\n private effectiveBeforeSave(): EntityFormBeforeSaveHook | null {\n const bound = this.beforeSave();\n if (bound) {\n return bound;\n }\n const fromData = this.inheritedData('entityFormBeforeSave');\n if (typeof fromData === 'function') {\n return fromData as EntityFormBeforeSaveHook;\n }\n return this.injectedBeforeSave ?? null;\n }\n /** `'dialog'` only for non-singleton forms with `editMode` (input, else route data) `'dialog'`. */\n protected readonly effectiveEditMode = computed<EntityPageEditMode>(() => {\n this.routeData();\n const mode = this.editMode() ?? this.inheritedData('entityPageEditMode');\n return mode === 'dialog' && !this.isSingleton() ? 'dialog' : 'page';\n });\n protected readonly effectiveActionBarPosition = computed<EntityPageActionBarPosition>(() => {\n this.routeData();\n return (this.actionBarPosition() ?? this.inheritedData('entityPageActionBarPosition')) === 'bottom' ? 'bottom' : 'top';\n });\n /** `undefined` = no page-level default (the list falls back to the form's `listDefaultSort`). */\n protected readonly effectiveDefaultSort = computed<readonly EntityListSortDescriptor[] | undefined>(() => {\n this.routeData();\n return this.defaultSort() ?? (this.inheritedData('entityListDefaultSort') as EntityListSortDescriptor[] | undefined);\n });\n /** The list's row class callback: input, else route data `entityListRowClass` (else the list's token). */\n protected readonly effectiveListRowClass = computed<EntityListRowClass | undefined>(() => {\n this.routeData();\n const bound = this.listRowClass();\n if (bound) {\n return bound;\n }\n const fromData = this.inheritedData('entityListRowClass');\n return typeof fromData === 'function' ? fromData as EntityListRowClass : undefined;\n });\n /** Row label field: input, else route data `entityListRowLabelField`, else none (default naming). */\n protected readonly effectiveRowLabelField = computed<string | undefined>(() => {\n this.routeData();\n const bound = this.listRowLabelField() ?? this.inheritedData('entityListRowLabelField');\n return typeof bound === 'string' && bound.trim() ? bound.trim() : undefined;\n });\n /** Boolean columns of the list: input, else route data `entityListBooleanDisplay`, else text. */\n protected readonly effectiveListBooleanDisplay = computed<EntityListBooleanDisplay>(() => {\n this.routeData();\n return (this.listBooleanDisplay() ?? this.inheritedData('entityListBooleanDisplay')) === 'icon' ? 'icon' : 'text';\n });\n /** The prefill of the current create form (AB#5623), computed when the form opens. */\n protected readonly createInitialValues = signal<EntityFormPrefillValues | null>(null);\n /** Base model with translated title / description (list header). */\n protected readonly localizedBase = computed(() => {\n const model = this.baseModel();\n return model ? localizeEntityForm(model, this.effectiveLabelResolver()) : null;\n });\n /**\n * Breadcrumb labels (`{{entityFormTitle}}` / `{{entityName}}`), derived from the page state so\n * they follow a language change of the label resolver or the messages (AB#5623). `null` while\n * nothing is resolved.\n */\n protected readonly breadcrumbLabels = computed<Record<string, string> | null>(() => {\n this.routeData();\n const base = this.baseModel();\n const view = this.view();\n if (!base || view === 'loading') {\n return null;\n }\n if (view !== 'form') {\n const listLabels: Record<string, string> = { entityFormTitle: asString(this.inheritedData('entityListTitle')) ?? this.formTitle(base) ?? base.title };\n return listLabels;\n }\n const entityFormTitle = this.formTitle(base) ?? this.formTitle(this.formModel()) ?? '';\n const entityName = this.mode() === 'create' && !this.entityRtId() ? this.msgs().createTitle : this.entityName() ?? '';\n return { entityFormTitle, entityName };\n });\n\n /** Context of the host page actions template. */\n protected readonly actionsContext = computed<EntityPageActionsContext>(() =>\n this.buildActionsContext(this.view() === 'form' ? 'form' : 'list'));\n /** Context of the host page actions in the create / edit dialog (always the form view). */\n protected readonly dialogActionsContext = computed<EntityPageActionsContext>(() => this.buildActionsContext('form'));\n\n private buildActionsContext(view: 'list' | 'form'): EntityPageActionsContext {\n const ctx: EntityPageActionsContext = {\n view,\n mode: view === 'form' ? this.mode() : null,\n rtId: view === 'form' ? this.entityRtId() : null,\n ckTypeId: view === 'form' ? this.entityCkTypeId() : this.baseModel()?.rtCkTypeId ?? null,\n model: view === 'form' ? this.formModel() : this.baseModel(),\n saving: this.saving(),\n page: this,\n } as EntityPageActionsContext;\n ctx.$implicit = ctx;\n return ctx;\n }\n\n protected readonly isSingleton = computed(() => !!this.baseModel()?.singleton);\n /** Host heading override (`entityListTitle` route data), else the resolved form title. */\n protected readonly listTitle = computed(() => {\n this.routeData();\n return asString(this.inheritedData('entityListTitle')) ?? this.localizedBase()?.title ?? '';\n });\n /** `entityListTypeColumn` route data: show the row's CK type in the list. */\n protected readonly showTypeColumn = computed(() => {\n this.routeData();\n return this.inheritedData('entityListTypeColumn') === true;\n });\n protected readonly readOnly = computed(() => this.mode() === 'view');\n protected readonly canDeleteEntity = computed(() =>\n this.mode() === 'edit' && !this.isSingleton() && this.effectiveCanWrite() && !!this.formModel()?.capabilities.canDelete,\n );\n protected readonly title = computed(() => {\n const m = this.msgs();\n if (this.mode() === 'create' && !this.isSingleton()) {\n return m.createTitle;\n }\n // A singleton is \"the\" setting (e.g. Tenant mode): its form name, not \"Edit <entity name>\".\n if (this.isSingleton()) {\n return asString(this.inheritedData('entityListTitle')) ?? this.formTitle(this.formModel()) ?? this.localizedBase()?.title ?? m.viewTitle;\n }\n const name = this.entityName() ?? '';\n return this.mode() === 'edit' ? formatEntityFormsMessage(m.editTitle, { name }) : name || m.viewTitle;\n });\n\n /** The effective navigation context (inputs win over the route). */\n private readonly context = computed<PageContext>(() => {\n const params = this.paramMap();\n const query = this.queryParamMap();\n // Read the route data signal so a data change re-evaluates the context.\n this.routeData();\n return {\n // Route params come last: a host can mount the routes under `:formKey` (Refinery Studio\n // settings, AB#5523); the param reaches the child routes by params inheritance.\n formKey: this.formKey() ?? asString(this.inheritedData('formKey')) ?? paramValue(params, 'formKey'),\n ckTypeId: this.ckTypeId() ?? asString(this.inheritedData('ckTypeId')) ?? paramValue(params, 'ckTypeId'),\n rtId: this.rtId() ?? paramValue(params, 'rtId') ?? asString(this.route.snapshot?.data?.['rtId']),\n type: paramValue(query, ENTITY_PAGE_TYPE_QUERY_PARAM),\n };\n });\n\n private loadToken = 0;\n private suppressGuard = false;\n /** Where the next loaded form is shown: the page, or the dialog over the list. */\n private formTarget: 'page' | 'dialog' = 'page';\n /** Element focused when the dialog opened; focused again when it closes. */\n private dialogTrigger: HTMLElement | null = null;\n\n constructor() {\n let lastKey: string | null = null;\n effect(() => {\n const ctx = this.context();\n const key = JSON.stringify(ctx);\n if (key === lastKey) {\n return;\n }\n lastKey = key;\n untracked(() => void this.load(ctx));\n });\n effect(() => {\n const labels = this.breadcrumbLabels();\n if (labels) {\n untracked(() => void this.breadCrumbService?.updateBreadcrumbLabels(labels));\n }\n });\n }\n\n // ---------------------------------------------------------------------------------------------\n // HasUnsavedChanges\n // ---------------------------------------------------------------------------------------------\n\n hasUnsavedChanges(): boolean {\n const formShown = this.view() === 'form' || this.dialogOpen();\n if (this.suppressGuard || !formShown || this.mode() === 'view') {\n return false;\n }\n return !!this.form()?.isDirty();\n }\n\n unsavedChangesMessages(): UnsavedChangesMessages {\n return { title: this.msgs().unsavedChangesTitle };\n }\n\n /**\n * Validates and saves the form. Creates the entity in create mode (then switches to its edit\n * route), updates only the changed attributes in edit mode. Resolves `false` when the form is\n * invalid or the server rejected the change.\n */\n async saveChanges(): Promise<boolean> {\n const form = this.form();\n const model = this.formModel();\n const ckTypeId = this.entityCkTypeId();\n const m = this.msgs();\n if (!form || !model || !ckTypeId || this.mode() === 'view' || this.saving()) {\n return false;\n }\n if (!form.isValid()) {\n form.markAllAsTouched();\n this.notificationService.showWarning(m.formInvalid);\n return false;\n }\n let changeSet = form.getChangeSet();\n const isCreate = this.mode() === 'create';\n if (isCreate) {\n const wellKnownName = this.singletonWellKnownName();\n if (wellKnownName) {\n changeSet = { ...changeSet, rtWellKnownName: wellKnownName, isEmpty: false };\n }\n }\n this.saving.set(true);\n try {\n // Nothing changed on an edit form: nothing to normalise either (the hook is skipped).\n const hook = isCreate || !changeSet.isEmpty ? this.effectiveBeforeSave() : null;\n const outcome = await runEntityFormBeforeSave(hook, changeSet, {\n mode: isCreate ? 'create' : 'edit',\n ckTypeId,\n ...(isCreate ? {} : { rtId: this.entityRtId() ?? undefined }),\n form: model,\n });\n if (outcome.kind === 'veto') {\n this.notificationService.showWarning(outcome.message || m.saveVetoed || m.saveError);\n return false;\n }\n if (outcome.kind === 'error') {\n // Never log the change set: it may hold a secret the user typed.\n console.error('mm-entity-page: beforeSave failed; nothing was saved', outcome.error);\n this.notificationService.showError(m.saveError, outcome.error instanceof Error ? outcome.error.message : undefined);\n return false;\n }\n changeSet = outcome.changeSet;\n\n if (isCreate) {\n const rtId = await this.dataService.create(model, ckTypeId, changeSet);\n this.notificationService.showSuccess(m.createSuccess, 3000);\n this.saved.emit({ kind: 'create', rtId, ckTypeId });\n if (this.dialogOpen()) {\n this.closeDialog(true);\n } else if (this.isSingleton()) {\n this.singletonWellKnownName.set(null);\n await this.openEntity(model, { rtId }, this.loadToken);\n } else {\n this.suppressGuard = true;\n await this.go({ kind: 'edit', rtId, ckTypeId }, true);\n }\n return true;\n }\n\n const rtId = this.entityRtId();\n if (!rtId) {\n return false;\n }\n if (changeSet.isEmpty) {\n this.notificationService.showInfo(m.noChanges, 2000);\n if (this.dialogOpen()) {\n this.closeDialog(false);\n }\n return true;\n }\n await this.dataService.update(rtId, ckTypeId, changeSet);\n this.notificationService.showSuccess(m.saveSuccess, 3000);\n this.saved.emit({ kind: 'update', rtId, ckTypeId });\n if (this.dialogOpen()) {\n this.closeDialog(true);\n return true;\n }\n const reloaded = await this.dataService.load(model, { rtId });\n if (reloaded) {\n this.applyLoaded(reloaded.rtId, reloaded.ckTypeId, reloaded.state, reloaded.rtDisplayName);\n }\n return true;\n } catch (error) {\n console.error('mm-entity-page: save failed', error);\n this.notificationService.showError(m.saveError, error instanceof Error ? error.message : undefined);\n return false;\n } finally {\n this.saving.set(false);\n }\n }\n\n // ---------------------------------------------------------------------------------------------\n // Template handlers\n // ---------------------------------------------------------------------------------------------\n\n protected async onSave(): Promise<void> {\n await this.saveChanges();\n }\n\n protected async onBack(): Promise<void> {\n await this.go({ kind: 'list' });\n }\n\n protected async onCreateRequested(event: EntityListCreateRequest): Promise<void> {\n if (this.effectiveEditMode() === 'dialog') {\n await this.openDialog({ kind: 'create', ckTypeId: event.ckTypeId });\n return;\n }\n await this.go({ kind: 'create', ckTypeId: event.ckTypeId });\n }\n\n protected async onOpenRequested(event: EntityListOpenRequest): Promise<void> {\n if (this.effectiveEditMode() === 'dialog') {\n await this.openDialog({ kind: 'edit', rtId: event.rtId, ckTypeId: event.ckTypeId });\n return;\n }\n await this.go({ kind: 'edit', rtId: event.rtId, ckTypeId: event.ckTypeId });\n }\n\n /** Cancel, the dialog's close button and Escape: asks before discarding unsaved changes. */\n protected async onDialogCancel(): Promise<void> {\n if (!this.dialogOpen() || this.saving()) {\n return;\n }\n if (this.hasUnsavedChanges()) {\n const m = this.msgs();\n const discard = await this.confirmationService.showYesNoConfirmationDialog(\n m.unsavedChangesTitle,\n m.unsavedChangesMessage,\n undefined,\n { yes: m.discardChanges, no: m.keepEditing },\n );\n if (!discard) {\n return;\n }\n }\n this.closeDialog(false);\n }\n\n protected async onDelete(): Promise<void> {\n const rtId = this.entityRtId();\n const ckTypeId = this.entityCkTypeId();\n if (!rtId || !ckTypeId || !this.canDeleteEntity()) {\n return;\n }\n const request = { action: 'delete' as const, ckTypeId, count: 1, description: 'delete 1 entity' };\n if (!await confirmEntityFormAction(this.actionConfirmation, request)) {\n return;\n }\n const m = this.msgs();\n const options = entityDeleteConfirmation(m, [this.entityName() || rtId]);\n if (!await confirmEntityFormDanger(this.dangerConfirmation, this.confirmationService, options, request)) {\n return;\n }\n try {\n const ok = await this.dataService.delete([{ rtId, ckTypeId }]);\n if (!ok) {\n this.notificationService.showError(m.deleteError);\n return;\n }\n this.notificationService.showSuccess(m.deleteSuccess, 3000);\n if (this.dialogOpen()) {\n this.deleted.emit({ rtId, ckTypeId });\n this.closeDialog(true);\n return;\n }\n this.suppressGuard = true;\n this.deleted.emit({ rtId, ckTypeId });\n await this.go({ kind: 'list' });\n } catch (error) {\n console.error('mm-entity-page: delete failed', error);\n this.notificationService.showError(m.deleteError, error instanceof Error ? error.message : undefined);\n }\n }\n\n // ---------------------------------------------------------------------------------------------\n // Loading\n // ---------------------------------------------------------------------------------------------\n\n private async load(ctx: PageContext): Promise<void> {\n const token = ++this.loadToken;\n this.suppressGuard = false;\n this.formTarget = 'page';\n this.dialogOpen.set(false);\n this.dialogTrigger = null;\n this.view.set('loading');\n this.errorMessage.set(null);\n const m = this.msgs();\n try {\n let model: ResolvedEntityForm | null = null;\n if (ctx.formKey) {\n model = await this.formService.resolveByFormKey(ctx.formKey);\n } else if (ctx.ckTypeId) {\n model = await this.formService.resolve(ctx.ckTypeId);\n }\n if (token !== this.loadToken) {\n return;\n }\n if (!model) {\n this.fail(m.formNotFound);\n return;\n }\n this.baseModel.set(model);\n\n if (!ctx.rtId) {\n if (model.singleton) {\n await this.openSingleton(model, token);\n } else {\n this.resetEntity();\n this.view.set('list');\n }\n return;\n }\n\n if (ctx.rtId === ENTITY_PAGE_NEW) {\n await this.openCreate(model, ctx.type, token);\n return;\n }\n\n const formModel = await this.modelForType(model, ctx.type);\n if (token !== this.loadToken) {\n return;\n }\n await this.openEntity(formModel, { rtId: ctx.rtId }, token);\n } catch (error) {\n if (token === this.loadToken) {\n console.error('mm-entity-page: load failed', error);\n this.fail(m.loadError);\n }\n }\n }\n\n private async openCreate(model: ResolvedEntityForm, type: string | undefined, token: number): Promise<void> {\n const m = this.msgs();\n if (!this.effectiveCanWrite() || !model.capabilities.canCreate) {\n this.fail(m.readOnlyNotice);\n return;\n }\n if (model.capabilities.createRequiresSubtype && (!type || type === model.rtCkTypeId)) {\n // An abstract type cannot be instantiated: go through the list's subtype picker.\n this.resetEntity();\n this.view.set('list');\n return;\n }\n const formModel = await this.modelForType(model, type);\n if (token !== this.loadToken) {\n return;\n }\n await this.startCreate(formModel, null, token);\n }\n\n private async openSingleton(model: ResolvedEntityForm, token: number): Promise<void> {\n const wellKnownName = model.singleton?.wellKnownName;\n if (wellKnownName) {\n const loaded = await this.openEntity(model, { wellKnownName }, token, true);\n if (loaded || token !== this.loadToken) {\n return;\n }\n } else {\n const firstRtId = await this.firstEntityRtId(model);\n if (token !== this.loadToken) {\n return;\n }\n if (firstRtId) {\n await this.openEntity(model, { rtId: firstRtId }, token);\n return;\n }\n }\n if (!this.effectiveCanWrite() || !model.capabilities.canCreate) {\n this.fail(this.msgs().entityNotFound);\n return;\n }\n await this.startCreate(model, wellKnownName ?? null, token);\n }\n\n private async startCreate(formModel: ResolvedEntityForm, singletonWellKnownName: string | null, token: number): Promise<void> {\n const records = await this.recordsFor(formModel);\n if (token !== this.loadToken) {\n return;\n }\n this.records.set(records);\n this.formModel.set(formModel);\n this.singletonWellKnownName.set(singletonWellKnownName);\n this.entityRtId.set(null);\n this.entityCkTypeId.set(formModel.rtCkTypeId);\n this.entityName.set(null);\n this.createInitialValues.set(this.initialValuesFor(formModel.rtCkTypeId));\n this.state.set({\n values: {},\n secretPresence: {},\n associations: {},\n rtWellKnownName: singletonWellKnownName,\n });\n this.mode.set('create');\n this.showForm();\n }\n\n /**\n * Loads an entity into the form. When the entity turns out to be of a different (derived)\n * type than the model, the form for that type is resolved and the values are read again with\n * its attribute list. Resolves `false` when the entity does not exist.\n */\n private async openEntity(\n model: ResolvedEntityForm,\n key: { rtId: string } | { wellKnownName: string },\n token: number,\n quietWhenMissing = false,\n ): Promise<boolean> {\n let formModel = model;\n let loaded = await this.dataService.load(formModel, key);\n if (token !== this.loadToken) {\n return false;\n }\n if (loaded && loaded.ckTypeId && loaded.ckTypeId !== formModel.rtCkTypeId) {\n formModel = await this.formService.resolve(loaded.ckTypeId);\n loaded = await this.dataService.load(formModel, { rtId: loaded.rtId });\n if (token !== this.loadToken) {\n return false;\n }\n }\n if (!loaded) {\n if (!quietWhenMissing) {\n this.fail(this.msgs().entityNotFound);\n }\n return false;\n }\n const records = await this.recordsFor(formModel);\n if (token !== this.loadToken) {\n return false;\n }\n this.records.set(records);\n this.formModel.set(formModel);\n this.singletonWellKnownName.set(null);\n this.createInitialValues.set(null);\n this.applyLoaded(loaded.rtId, loaded.ckTypeId || formModel.rtCkTypeId, loaded.state, loaded.rtDisplayName);\n const writable = this.effectiveCanWrite() && formModel.capabilities.canEdit;\n this.mode.set(writable ? 'edit' : 'view');\n this.showForm();\n return true;\n }\n\n private applyLoaded(rtId: string, ckTypeId: string, state: EntityFormValueState, rtDisplayName?: string | null): void {\n this.entityRtId.set(rtId);\n this.entityCkTypeId.set(ckTypeId);\n this.state.set(state);\n const name = displayNameOf(state, rtId, rtDisplayName, untracked(() => this.effectiveRowLabelField()));\n this.entityName.set(name);\n }\n\n private async recordsFor(model: ResolvedEntityForm): Promise<Record<string, CkRecordInfo>> {\n try {\n const type = await this.formService.getCkType(model.rtCkTypeId);\n return type ? await this.formService.getRecordsFor(type) : {};\n } catch (error) {\n console.warn('mm-entity-page: record metadata could not be loaded', error);\n return {};\n }\n }\n\n private async modelForType(model: ResolvedEntityForm, type: string | undefined): Promise<ResolvedEntityForm> {\n if (!type || type === model.rtCkTypeId) {\n return model;\n }\n return this.formService.resolve(type);\n }\n\n /** rtId of the first entity of the type (singleton forms without a well-known name). */\n private async firstEntityRtId(model: ResolvedEntityForm): Promise<string | null> {\n const fieldFilters: FieldFilterDto[] = entityListIncludesDerivedTypes(model)\n ? []\n : [{ attributePath: 'ckTypeId', operator: FieldFilterOperatorsDto.EqualsDto, comparisonValue: model.rtCkTypeId }];\n const result = await firstValueFrom(\n this.listGQL.fetch({\n variables: {\n ckTypeId: model.rtCkTypeId,\n first: 1,\n fieldFilters: fieldFilters.length > 0 ? fieldFilters : null,\n // An empty list reads no attributes at all (never omit the variable: that reads all).\n attributeNames: [],\n },\n fetchPolicy: 'network-only',\n }),\n );\n const item = result.data?.runtime?.runtimeEntities?.items?.find((i) => !!i?.rtId);\n return item ? String(item.rtId) : null;\n }\n\n private resetEntity(): void {\n this.formModel.set(null);\n this.state.set(undefined);\n this.entityRtId.set(null);\n this.entityCkTypeId.set(null);\n this.entityName.set(null);\n this.singletonWellKnownName.set(null);\n this.createInitialValues.set(null);\n }\n\n private fail(message: string): void {\n if (this.formTarget === 'dialog') {\n // The list stays: tell the user and reload it (the entity may be gone).\n this.notificationService.showError(message);\n this.closeDialog(true);\n return;\n }\n this.errorMessage.set(message);\n this.view.set('error');\n }\n\n /** Shows the loaded form: on the page, or in the dialog over the list. */\n private showForm(): void {\n if (this.formTarget === 'dialog') {\n this.dialogOpen.set(true);\n } else {\n this.view.set('form');\n }\n }\n\n // ---------------------------------------------------------------------------------------------\n // Dialog mode (AB#5623)\n // ---------------------------------------------------------------------------------------------\n\n /** Loads the create / edit form into the dialog over the list. */\n private async openDialog(target: { kind: 'create'; ckTypeId: string } | { kind: 'edit'; rtId: string; ckTypeId: string }): Promise<void> {\n const base = this.baseModel();\n if (!base || this.dialogOpen()) {\n return;\n }\n const m = this.msgs();\n if (target.kind === 'create' && (!this.effectiveCanWrite() || !base.capabilities.canCreate)) {\n this.notificationService.showWarning(m.readOnlyNotice);\n return;\n }\n this.dialogTrigger = activeElement();\n const token = ++this.loadToken;\n this.formTarget = 'dialog';\n try {\n const formModel = await this.modelForType(base, target.ckTypeId);\n if (token !== this.loadToken) {\n return;\n }\n if (target.kind === 'create') {\n await this.startCreate(formModel, null, token);\n } else {\n await this.openEntity(formModel, { rtId: target.rtId }, token);\n }\n } catch (error) {\n if (token === this.loadToken) {\n console.error('mm-entity-page: dialog load failed', error);\n this.fail(m.loadError);\n }\n }\n }\n\n /**\n * Closes the dialog without asking, optionally reloads the list, and gives the focus back to\n * the element that opened the dialog (or the list when that element is gone).\n */\n private closeDialog(refresh: boolean): void {\n this.loadToken++;\n this.formTarget = 'page';\n this.dialogOpen.set(false);\n this.resetEntity();\n if (refresh) {\n this.list()?.refresh();\n }\n const trigger = this.dialogTrigger;\n this.dialogTrigger = null;\n const listElement = this.listElement()?.nativeElement as HTMLElement | undefined;\n setTimeout(() => {\n const target = trigger?.isConnected\n ? trigger\n : listElement?.querySelector<HTMLElement>('.k-grid [tabindex=\"0\"], .k-grid-table, .k-grid') ?? null;\n target?.focus?.();\n });\n }\n\n // ---------------------------------------------------------------------------------------------\n // Navigation\n // ---------------------------------------------------------------------------------------------\n\n private async go(event: EntityPageNavigateEvent, replaceUrl = false): Promise<void> {\n this.navigate.emit(event);\n if (!this.routerNavigation()) {\n return;\n }\n const atList = !this.context().rtId;\n const prefix = atList ? [] : ['..'];\n let commands: string[];\n switch (event.kind) {\n case 'list':\n commands = prefix;\n break;\n case 'create':\n commands = [...prefix, ENTITY_PAGE_NEW];\n break;\n default:\n commands = [...prefix, event.rtId ?? ''];\n }\n const baseType = this.baseModel()?.rtCkTypeId;\n const queryParams = event.kind !== 'list' && event.ckTypeId && event.ckTypeId !== baseType\n ? { [ENTITY_PAGE_TYPE_QUERY_PARAM]: event.ckTypeId }\n : {};\n await this.router.navigate(commands, { relativeTo: this.route, queryParams, replaceUrl });\n }\n\n /** Reads a route data key from this route or the nearest ancestor that defines it. */\n private inheritedData(key: string): unknown {\n let snapshot = this.route.snapshot;\n while (snapshot) {\n const value = snapshot.data?.[key];\n if (value !== undefined) {\n return value;\n }\n snapshot = snapshot.parent as typeof snapshot;\n }\n return undefined;\n }\n\n /** Reloads the list (when the list is shown). */\n refreshList(): void {\n this.list()?.refresh();\n }\n\n /**\n * Sets values of the open form from the host (AB#5623), e.g. a \"Prefill from user\" page action.\n * See `EntityFormComponent.patchValues`: the values always count as user edits (the form gets\n * dirty, the unsaved-changes guard applies and Save sends them); secret and read-only fields are\n * skipped. Returns the field keys that were set (`[]` when no writable form is shown).\n */\n patchFormValues(values: EntityFormPrefillValues): string[] {\n if ((this.view() !== 'form' && !this.dialogOpen()) || this.mode() === 'view') {\n return [];\n }\n return this.form()?.patchValues(values) ?? [];\n }\n\n /** Translated title of a model (AB#5623). */\n private formTitle(model: ResolvedEntityForm | null): string | undefined {\n return model ? localizeEntityFormTitle(model, this.effectiveLabelResolver()) : undefined;\n }\n\n /** The host prefill for a create form of the given type. */\n private initialValuesFor(ckTypeId: string): EntityFormPrefillValues | null {\n const source = this.initialValues() ?? (this.inheritedData('entityFormInitialValues') as EntityPageInitialValues | undefined);\n if (!source) {\n return null;\n }\n try {\n return (typeof source === 'function' ? source({ ckTypeId }) : source) ?? null;\n } catch (error) {\n console.error('mm-entity-page: initialValues failed', error);\n return null;\n }\n }\n}\n\n/** The focused element (the dialog's trigger), or `null` outside a browser. */\nfunction activeElement(): HTMLElement | null {\n const element = typeof document !== 'undefined' ? document.activeElement : null;\n return element instanceof HTMLElement && element !== document.body ? element : null;\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === 'string' && value ? value : undefined;\n}\n\nfunction paramValue(map: ParamMap | undefined, key: string): string | undefined {\n return asString(map?.get(key) ?? undefined);\n}\n\n/**\n * Entity label: `name` attribute, then `rtWellKnownName`, then a computed `rtDisplayName`\n * (the backend's synthetic `<ckTypeId>@<rtId>` form counts as absent), then the rtId.\n */\nfunction displayNameOf(state: EntityFormValueState, rtId: string, rtDisplayName?: string | null, labelField?: string): string {\n const label = labelField ? resolveListRowLabel(state.values, labelField, []) : '';\n if (label) {\n return label;\n }\n const name = state.values['name'];\n if (typeof name === 'string' && name) {\n return name;\n }\n if (state.rtWellKnownName) {\n return state.rtWellKnownName;\n }\n if (rtDisplayName && !rtDisplayName.endsWith(`@${rtId}`)) {\n return rtDisplayName;\n }\n return rtId;\n}\n","<div class=\"mm-entity-page\">\n @switch (view()) {\n @case ('loading') {\n <div class=\"mm-entity-page__state\">{{ msgs().loading }}</div>\n }\n\n @case ('error') {\n <div class=\"mm-entity-page__state mm-entity-page__state--error\" role=\"alert\">\n <p>{{ errorMessage() }}</p>\n @if (baseModel() && !isSingleton()) {\n <button kendoButton fillMode=\"flat\" [svgIcon]=\"backIcon\" (click)=\"onBack()\">{{ msgs().back }}</button>\n }\n </div>\n }\n\n @case ('list') {\n @if (baseModel(); as model) {\n <header class=\"mm-entity-page__header\">\n <div class=\"mm-entity-page__titles\">\n <h2 class=\"mm-entity-page__title\">{{ listTitle() }}</h2>\n @if (localizedBase()?.description; as description) {\n <p class=\"mm-entity-page__description\">{{ description }}</p>\n }\n </div>\n @if (pageActions(); as actions) {\n <div class=\"mm-entity-page__actions\" data-entity-page-host-actions>\n <ng-container *ngTemplateOutlet=\"actions.templateRef; context: actionsContext()\" />\n </div>\n }\n </header>\n <mm-entity-list\n #entityList\n class=\"mm-entity-page__list\"\n [model]=\"model\"\n [canWrite]=\"effectiveCanWrite()\"\n [messages]=\"msgs()\"\n [showTypeColumn]=\"showTypeColumn()\"\n [defaultSort]=\"effectiveDefaultSort()\"\n [labelResolver]=\"effectiveLabelResolver()\"\n [toolbarActions]=\"listToolbarActions()\"\n [rowActions]=\"listRowActions()\"\n [rowMenuActions]=\"listRowMenuActions()\"\n [rowClass]=\"effectiveListRowClass()\"\n [booleanDisplay]=\"effectiveListBooleanDisplay()\"\n [rowLabelField]=\"effectiveRowLabelField()\"\n (createRequested)=\"onCreateRequested($event)\"\n (openRequested)=\"onOpenRequested($event)\"\n />\n\n <!-- Dialog mode (editMode 'dialog', AB#5623): create / edit over the list, actions in the\n dialog's bottom bar (Cancel left of the primary Save, as in the record row dialog). -->\n @if (dialogOpen()) {\n @if (formModel(); as formModelInDialog) {\n <kendo-dialog\n class=\"mm-entity-page__dialog\"\n data-entity-page-dialog\n [title]=\"title()\"\n [width]=\"760\"\n [maxWidth]=\"'95vw'\"\n [maxHeight]=\"'90vh'\"\n (close)=\"onDialogCancel()\"\n >\n <kendo-dialog-messages [closeTitle]=\"msgs().close\" />\n <div class=\"mm-entity-page__dialog-body\">\n @if (mode() === 'view') {\n <p class=\"mm-entity-page__notice\">{{ msgs().readOnlyNotice }}</p>\n }\n <mm-entity-form\n #entityForm\n class=\"mm-entity-page__form\"\n [model]=\"formModelInDialog\"\n [mode]=\"mode()\"\n [state]=\"state()\"\n [readOnly]=\"readOnly()\"\n [messages]=\"msgs()\"\n [records]=\"records()\"\n [labelResolver]=\"effectiveLabelResolver()\"\n [initialValues]=\"createInitialValues()\"\n />\n </div>\n <kendo-dialog-actions layout=\"end\">\n @if (pageActions(); as actions) {\n <ng-container *ngTemplateOutlet=\"actions.templateRef; context: dialogActionsContext()\" />\n }\n <button kendoButton type=\"button\" data-entity-page-dialog-cancel (click)=\"onDialogCancel()\">\n {{ mode() === 'view' ? msgs().close : msgs().cancel }}\n </button>\n @if (canDeleteEntity()) {\n <button kendoButton type=\"button\" fillMode=\"outline\" themeColor=\"error\" [svgIcon]=\"deleteIcon\" (click)=\"onDelete()\">\n {{ msgs().delete }}\n </button>\n }\n @if (mode() !== 'view') {\n <button kendoButton type=\"button\" themeColor=\"primary\" [svgIcon]=\"saveIcon\"\n [disabled]=\"saving() || !!saveBlockedReason()\" [attr.title]=\"saveBlockedReason()\"\n data-entity-page-save (click)=\"onSave()\">\n {{ msgs().save }}\n </button>\n }\n </kendo-dialog-actions>\n </kendo-dialog>\n }\n }\n }\n }\n\n @case ('form') {\n @if (formModel(); as model) {\n <header class=\"mm-entity-page__header\">\n <div class=\"mm-entity-page__titles\">\n <h2 class=\"mm-entity-page__title\">{{ title() }}</h2>\n @if (mode() !== 'create' && entityRtId()) {\n <mm-entity-id-info\n [rtId]=\"entityRtId()!\"\n [rtCkTypeId]=\"entityCkTypeId() ?? model.rtCkTypeId\"\n [ckTypeId]=\"entityCkTypeId() ?? model.rtCkTypeId\"\n [buttonText]=\"msgs().copyId\"\n [tooltip]=\"msgs().copyIdTooltip\"\n [copiedMessage]=\"msgs().copiedId\"\n [copyFailedMessage]=\"msgs().copyFailed\"\n />\n }\n </div>\n @if (effectiveActionBarPosition() === 'top') {\n <ng-container *ngTemplateOutlet=\"formActions\" />\n }\n </header>\n @if (mode() === 'view') {\n <p class=\"mm-entity-page__notice\">{{ msgs().readOnlyNotice }}</p>\n }\n @if (mode() === 'create' && singletonWellKnownName()) {\n <p class=\"mm-entity-page__notice\">{{ msgs().singletonCreateHint }}</p>\n }\n <mm-entity-form\n #entityForm\n class=\"mm-entity-page__form\"\n [model]=\"model\"\n [mode]=\"mode()\"\n [state]=\"state()\"\n [readOnly]=\"readOnly()\"\n [messages]=\"msgs()\"\n [records]=\"records()\"\n [labelResolver]=\"effectiveLabelResolver()\"\n [initialValues]=\"createInitialValues()\"\n />\n @if (effectiveActionBarPosition() === 'bottom') {\n <footer class=\"mm-entity-page__footer\" data-entity-page-footer>\n <ng-container *ngTemplateOutlet=\"formActions\" />\n </footer>\n }\n\n <ng-template #formActions>\n <div class=\"mm-entity-page__actions\">\n @if (pageActions(); as actions) {\n <ng-container *ngTemplateOutlet=\"actions.templateRef; context: actionsContext()\" />\n }\n @if (!isSingleton()) {\n <button kendoButton fillMode=\"flat\" [svgIcon]=\"backIcon\" data-entity-page-back (click)=\"onBack()\">\n {{ mode() === 'view' ? msgs().back : msgs().cancel }}\n </button>\n }\n @if (canDeleteEntity()) {\n <button kendoButton fillMode=\"outline\" themeColor=\"error\" [svgIcon]=\"deleteIcon\" (click)=\"onDelete()\">\n {{ msgs().delete }}\n </button>\n }\n @if (mode() !== 'view') {\n <button kendoButton themeColor=\"primary\" [svgIcon]=\"saveIcon\" [disabled]=\"saving() || !!saveBlockedReason()\"\n [attr.title]=\"saveBlockedReason()\" data-entity-page-save (click)=\"onSave()\">\n {{ msgs().save }}\n </button>\n }\n </div>\n </ng-template>\n }\n }\n }\n</div>\n","import { Route, Routes } from '@angular/router';\nimport { UnsavedChangesGuard } from '@meshmakers/shared-ui';\nimport { SVGIcon } from '@progress/kendo-svg-icons';\nimport { EntityFormsMessages } from '../entity-forms.messages';\nimport { EntityListSortDescriptor } from '../models/entity-form.models';\nimport { EntityFormPrefillValues } from '../core/entity-form-prefill';\nimport { EntityFormBeforeSaveHook } from '../core/before-save';\nimport type { EntityListRowClass } from '../list/entity-list.component';\n\n/**\n * Options of {@link entityFormRoutes}.\n *\n * Route parameter contract (stable, relied upon by the Refinery Studio, AB#5523):\n *\n * | Path | Page state |\n * |-----------|---------------------------------------------------------------------|\n * | `''` | list (a singleton form opens its entity directly) |\n * | `new` | create form; `?type=<rtCkTypeId>` = concrete type (abstract forms) |\n * | `:rtId` | edit form (view form without write permission); optional `?type=` |\n *\n * Route `data` carries `formKey` / `ckTypeId` / `canWrite` / `messages` (bound to the page\n * inputs by `withComponentInputBinding()`, read from `ActivatedRoute` otherwise), the `new`\n * route additionally `rtId: 'new'`, and the `breadcrumb` items with the `{{entityFormTitle}}` /\n * `{{entityName}}` labels the page fills via `BreadCrumbService.updateBreadcrumbLabels`.\n */\nexport interface EntityFormRoutesOptions {\n /** Form key (`form-sftp-configuration` or `sftp-configuration`). Wins over `ckTypeId`. */\n formKey?: string;\n /** Runtime CK type id of the target type, used when no `formKey` is given. */\n ckTypeId?: string;\n /**\n * Write permission for every user who can reach the routes. Hosts with role-dependent\n * permissions bind `canWrite` on their own wrapper or pass it as route data of a parent.\n */\n canWrite?: boolean;\n /** Message overrides passed to the page. */\n messages?: Partial<EntityFormsMessages>;\n /**\n * Breadcrumb URL of the list (relative to the host's breadcrumb root, e.g.\n * `communication/sftp`). Without it no breadcrumb items are added.\n */\n breadcrumbUrl?: string;\n /** Label of the list breadcrumb. Default `{{entityFormTitle}}` (the resolved form title). */\n breadcrumbLabel?: string;\n /**\n * Heading of the list (and of the singleton form) instead of the resolved form's title — e.g.\n * \"All configurations\" for a generic list over a base type whose `form-default` title would be\n * the type name. Route data key `entityListTitle`.\n */\n title?: string;\n /**\n * Adds a \"Type\" column (short CK type name of each row) to the list — for lists over a base type\n * with derived types. Route data key `entityListTypeColumn`.\n */\n showTypeColumn?: boolean;\n /**\n * Order of the list while the user has not sorted by a column (AB#5623). Wins over the form's\n * `listDefaultSort`. Route data key `entityListDefaultSort`.\n */\n defaultSort?: EntityListSortDescriptor[];\n /**\n * Where the form's Save / Cancel / Delete buttons sit (AB#5623): `'top'` (header, default) or\n * `'bottom'` (bar below the form). Route data key `entityPageActionBarPosition`.\n */\n actionBarPosition?: 'top' | 'bottom';\n /** Prefill of the create form (AB#5623). Route data key `entityFormInitialValues`. */\n initialValues?: EntityFormPrefillValues;\n /**\n * Hook run before every save (AB#5623): normalise / derive values or veto the save. Route data\n * key `entityFormBeforeSave`. See `EntityFormBeforeSaveHook`.\n */\n beforeSave?: EntityFormBeforeSaveHook;\n /**\n * CSS classes per list row (AB#5623), e.g. to style disabled rows. Route data key\n * `entityListRowClass`. See `EntityListRowClass`.\n */\n rowClass?: EntityListRowClass;\n /**\n * `'dialog'` opens create / edit of a list row in a dialog over the list instead of navigating\n * to `new` / `:rtId` (AB#5623; those routes still work as pages). Default `'page'`. Route data\n * key `entityPageEditMode`.\n */\n editMode?: 'page' | 'dialog';\n /**\n * `'icon'` renders the list's BOOLEAN columns as check / x icons (AB#5623). Default `'text'`.\n * Route data key `entityListBooleanDisplay`.\n */\n booleanDisplay?: 'text' | 'icon';\n /**\n * Field naming a row / entity for people (AB#5623): row action names, dialog / page title and\n * delete confirmations. Route data key `entityListRowLabelField`.\n */\n rowLabelField?: string;\n /** Label of the create breadcrumb. Default `New`. */\n newBreadcrumbLabel?: string;\n /** Label of the edit breadcrumb. Default `{{entityName}}`. */\n entityBreadcrumbLabel?: string;\n /** Icon of the list breadcrumb. */\n svgIcon?: SVGIcon;\n /** Additional route data merged into all three routes (e.g. `roles`). */\n data?: Record<string, unknown>;\n}\n\n/**\n * Builds the three child routes of an entity form page: `''` (list), `new` (create) and\n * `:rtId` (edit), each rendering `EntityPageComponent` lazily and guarded by\n * `UnsavedChangesGuard`. Mount them under any path:\n *\n * ```ts\n * { path: 'sftp', children: entityFormRoutes({ formKey: 'sftp-configuration', breadcrumbUrl: 'communication/sftp' }) }\n * ```\n */\nexport function entityFormRoutes(opts: EntityFormRoutesOptions = {}): Routes {\n const {\n formKey,\n ckTypeId,\n canWrite,\n messages,\n breadcrumbUrl,\n breadcrumbLabel = '{{entityFormTitle}}',\n newBreadcrumbLabel = 'New',\n entityBreadcrumbLabel = '{{entityName}}',\n svgIcon,\n title,\n showTypeColumn,\n defaultSort,\n actionBarPosition,\n initialValues,\n beforeSave,\n rowClass,\n editMode,\n booleanDisplay,\n rowLabelField,\n data = {},\n } = opts;\n\n const baseData: Record<string, unknown> = {\n ...data,\n ...(formKey !== undefined && { formKey }),\n ...(ckTypeId !== undefined && { ckTypeId }),\n ...(canWrite !== undefined && { canWrite }),\n ...(messages !== undefined && { messages }),\n ...(title !== undefined && { entityListTitle: title }),\n ...(showTypeColumn !== undefined && { entityListTypeColumn: showTypeColumn }),\n ...(defaultSort !== undefined && { entityListDefaultSort: defaultSort }),\n ...(actionBarPosition !== undefined && { entityPageActionBarPosition: actionBarPosition }),\n ...(initialValues !== undefined && { entityFormInitialValues: initialValues }),\n ...(beforeSave !== undefined && { entityFormBeforeSave: beforeSave }),\n ...(rowClass !== undefined && { entityListRowClass: rowClass }),\n ...(editMode !== undefined && { entityPageEditMode: editMode }),\n ...(booleanDisplay !== undefined && { entityListBooleanDisplay: booleanDisplay }),\n ...(rowLabelField !== undefined && { entityListRowLabelField: rowLabelField }),\n };\n\n const listCrumb = breadcrumbUrl !== undefined\n ? { label: breadcrumbLabel, url: breadcrumbUrl, ...(svgIcon && { svgIcon }) }\n : null;\n const crumbs = (extra?: { label: string; url: string }): Record<string, unknown> => {\n if (!listCrumb) {\n return {};\n }\n return { breadcrumb: extra ? [listCrumb, extra] : [listCrumb] };\n };\n\n const loadComponent = () => import('./entity-page.component').then((m) => m.EntityPageComponent);\n\n const listRoute: Route = {\n path: '',\n loadComponent,\n canDeactivate: [UnsavedChangesGuard],\n data: { ...baseData, ...crumbs() },\n };\n const newRoute: Route = {\n path: 'new',\n loadComponent,\n canDeactivate: [UnsavedChangesGuard],\n data: {\n ...baseData,\n rtId: 'new',\n ...crumbs({ label: newBreadcrumbLabel, url: `${breadcrumbUrl}/new` }),\n },\n };\n const editRoute: Route = {\n path: ':rtId',\n loadComponent,\n canDeactivate: [UnsavedChangesGuard],\n data: {\n ...baseData,\n ...crumbs({ label: entityBreadcrumbLabel, url: `${breadcrumbUrl}/:rtId` }),\n },\n };\n return [listRoute, newRoute, editRoute];\n}\n","/*\n * Public API Surface of @meshmakers/octo-ui/entity-forms (AB#5522)\n *\n * Form-driven list / create / edit pages for runtime entities, configured by the tenant's\n * System.UI/EntityForm definitions (with a built-in default form as fallback). Lives in its own\n * secondary entry point so hosts that do not render entity forms keep the primary\n * `@meshmakers/octo-ui` bundle unchanged. See ../README.md.\n */\n\n// --- Contract types and messages ---\nexport * from './models/entity-form.models';\nexport * from './entity-forms.messages';\n\n// --- Services ---\nexport * from './services/entity-form.service';\nexport * from './services/entity-form-data.service';\n\n// --- Components ---\nexport * from './form/entity-form.component';\nexport { EntityFormReferenceFieldComponent } from './form/reference/entity-form-reference-field.component';\nexport { EntityFormRecordsFieldComponent } from './form/records/entity-form-records-field.component';\nexport { EntityFormSecretEditorComponent } from './form/editors/entity-form-secret-editor.component';\nexport type { EntityFormRecordColumn } from './form/records/entity-form-records-field.component';\nexport * from './list/entity-list.component';\nexport * from './list/entity-list-data-source.directive';\nexport * from './page/entity-page.component';\nexport * from './page/entity-page-actions.directive';\n\n// --- Routes ---\nexport * from './page/entity-page.routes';\n\n// --- Pure functions (form parsing / resolution, reusable by hosts such as the Studio) ---\nexport { parseEntityForm, parseEntityForms } from './core/entity-form-parser';\nexport type { RawRtEntityRow } from './core/entity-form-parser';\nexport {\n pickEntityForm,\n resolveEntityForm,\n autoEditorFor,\n associationFieldKey,\n isEditorCompatible,\n DEFAULT_SECTION_KEY,\n GENERATED_SECTION_KEY,\n DEFAULT_GENERATED_SECTION_TITLE,\n} from './core/entity-form-resolver';\nexport type { EntityFormSource, ResolveEntityFormOptions } from './core/entity-form-resolver';\nexport { entityFormCatalog, entityFormKey, entityFormTypeTitles, ckTypeDisplayName } from './core/entity-form-catalog';\nexport { humanizeCkTypeName, ckTypeShortName } from './core/ck-type-name';\nexport type { EntityFormCatalogEntry } from './core/entity-form-catalog';\nexport { BUILT_IN_DEFAULT_FORM } from './core/built-in-default-form';\nexport { ENTITY_FORM_FALLBACK_FORMS, withFallbackForms, selectFallbackForms, isChainEndForm } from './core/fallback-forms';\nexport {\n ENTITY_FORM_ACTION_CONFIRMATION,\n ENTITY_FORM_DANGER_CONFIRMATION,\n confirmEntityFormAction,\n confirmEntityFormDanger,\n entityDeleteConfirmation,\n} from './core/action-confirmation';\nexport {\n ENTITY_FORM_BEFORE_SAVE,\n EntityFormSaveVeto,\n isEntityFormSaveVeto,\n runEntityFormBeforeSave,\n} from './core/before-save';\nexport type {\n EntityFormBeforeSaveHook,\n EntityFormBeforeSaveContext,\n EntityFormBeforeSaveResult,\n EntityFormBeforeSaveOutcome,\n} from './core/before-save';\nexport { ENTITY_FORM_SECRET_KEY_RING_CONFIGURED, ENTITY_FORM_SECRET_PLACEHOLDER_VALUES } from './core/secret-write-availability';\nexport {\n ENTITY_FORM_UNSET_PLACEHOLDER_VALUES,\n entityFormUnsetPlaceholderLookup,\n entityFormUnsetPlaceholderFields,\n isEntityFormUnsetPlaceholder,\n} from './core/unset-placeholders';\nexport type {\n EntityFormUnsetPlaceholderValues,\n EntityFormUnsetPlaceholderLookup,\n EntityFormUnsetPlaceholderTarget,\n} from './core/unset-placeholders';\nexport {\n ENTITY_FORM_LABEL_RESOLVER,\n resolveEntityFormLabel,\n localizeEntityForm,\n localizeEntityListColumns,\n localizeEntityFormTitle,\n} from './core/entity-form-labels';\nexport type { EntityFormLabelResolver, EntityFormLabelRequest, EntityFormLabelKind } from './core/entity-form-labels';\nexport {\n entityFormPrefillState,\n mergeEntityFormPrefill,\n canonicaliseEntityFormPrefill,\n} from './core/entity-form-prefill';\nexport type { EntityFormPrefillValues, EntityFormPrefillOptions } from './core/entity-form-prefill';\nexport { resolveListDefaultSort } from './core/entity-form-resolver';\nexport type { EntityFormActionConfirmation, EntityFormActionRequest, EntityFormDangerConfirmation } from './core/action-confirmation';\nexport { canonicalisePath, SYSTEM_PROPERTIES, toKebabTypeKey } from './core/attribute-path';\nexport type { CanonicalPath } from './core/attribute-path';\nexport { parseVisibleWhen, isVisible } from './core/visible-when';\nexport { toFormValue, toAttributeInputs, parseDefault } from './core/entity-form-value-mapper';\nexport { buildChangeSet, associationRoleName } from './core/change-set-builder';\nexport type { BuildChangeSetOptions, EntityFormReferenceValue } from './core/change-set-builder';\nexport { toCkTypeInfo, toCkRecordInfo, isSecretMetaData, secretMetaDataMarker } from './core/ck-metadata';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DATE_TYPES","TEXT_LIKE_EDITORS","Apollo","isEmpty","displayNameOf","i3","i1","i2","map"],"mappings":"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"}