@api-client/ui 0.6.3 → 0.6.4

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":"DomainEntityEditor.js","sourceRoot":"","sources":["../../../../src/modeling/internals/DomainEntityEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, type PropertyValues, type TemplateResult } from 'lit'\nimport { live } from 'lit-html/directives/live.js'\nimport { property, state } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { type ClassInfo, classMap } from 'lit/directives/class-map.js'\nimport { DomainEntity } from '@api-client/core/modeling/DomainEntity.js'\nimport { addAutoField, addRecommendedFields } from '@api-client/core/modeling/helpers/Intelisense.js'\nimport { DomainAssociationKind, DomainEntityKind, DomainPropertyKind } from '@api-client/core/models/kinds.js'\nimport { cancelEvent } from '@api-client/core/lib/events/Utils.js'\nimport type { DomainAssociation } from '@api-client/core/modeling/DomainAssociation.js'\nimport type { DomainProperty } from '@api-client/core/modeling/DomainProperty.js'\nimport { ModelingElement } from './ModelingElement.js'\nimport type { UiTabsElement } from '../../md/tabs/ui-tabs.js'\nimport { getFieldDataTypeLabel, getFieldIcon } from '../lib/ui_mapping.js'\nimport { Events } from '../../events/Events.js'\nimport {\n type EntitySemantic,\n getSemanticsByCategory,\n SemanticCategory,\n SemanticScope,\n SemanticType,\n} from '@api-client/core/modeling/Semantics.js'\nimport { renderHelp } from '../../help/render.js'\nimport type { DomainBrowseInit, DomainSelectionInfo } from '../types.js'\nimport type { UiListSelection } from '../../md/list/ui-list.js'\nimport { openAutoFieldsDialog } from '../domain-auto-fields-dialog.js'\n\n/**\n * Dispatched when a field (either a `DomainProperty` or a `DomainAssociation`) within the entity is selected.\n *\n * @event DomainEntityEditor#select\n * @type {CustomEvent}\n * @property {object} detail - The event details.\n * @property {string} detail.key - The key of the selected field.\n * @property {string} detail.kind - The kind of the selected field (e.g., `DomainPropertyKind`,\n * `DomainAssociationKind`).\n */\n\n/**\n * Dispatched when the user wants to navigate to a parent entity.\n *\n * @event DomainEntityEditor#openentity\n * @type {CustomEvent}\n * @property {object} detail - The event details.\n * @property {string} detail.key - The key of the parent entity to navigate to.\n * @property {string} detail.kind - The kind of the parent entity. It will always be `DomainEntityKind`.\n */\n\n/**\n * An element that provides an editor interface for a domain entity.\n * @fires DomainEntityEditor#select - A custom event with the `key` and `type` when a property was selected.\n * @fires DomainEntityEditor#openentity - A custom event with the `key` and `type` when a property was selected.\n */\nexport default class DomainEntityEditor extends ModelingElement {\n protected domainElement: DomainEntity | undefined\n\n /**\n * The currently selected tab in the editor.\n * @attribute\n */\n @property({ type: String, reflect: true }) accessor contentTab: 'design' | 'preview' = 'design'\n\n /**\n * The key of the currently selected property.\n * @attribute\n */\n @property({ type: String, reflect: true }) accessor selectedProperty: string | undefined\n\n /**\n * The mime type of the preview to render.\n * @attribute\n */\n @property({ type: String }) accessor mime = 'application/json'\n /**\n * When set, the preview tab will generate example (mock) data.\n * By default it only render values as defined in the schema.\n * @attribute\n */\n @property({ type: Boolean }) accessor mockValues = false\n\n /**\n * The generated schema preview.\n */\n @state() accessor schemaPreview: string | undefined\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('selected') || cp.has('root') || cp.has('namespace')) {\n this.computeEntity()\n }\n if (cp.has('mime') || cp.has('mockValues')) {\n this.generateExample()\n } else if (cp.has('contentTab')) {\n this.generateExample()\n } else if (this.contentTab === 'preview') {\n this.generateExample()\n }\n super.willUpdate(cp)\n }\n\n protected computeEntity(): void {\n const { root, selected, namespace } = this\n if (!root || !selected) {\n this.domainElement = undefined\n return\n }\n this.domainElement = root.findEntity(selected, namespace)\n }\n\n handleMetaChange(e: Event): void {\n const { domainElement } = this\n if (!domainElement) {\n return\n }\n const node = e.target as HTMLInputElement\n if (!node.reportValidity()) {\n return\n }\n const { name, value } = node\n if (!['name', 'displayName', 'description'].includes(name as string)) {\n return\n }\n if (name === 'name' && !value) {\n return\n }\n const preLabel = domainElement.info.getLabel()\n domainElement.info[name as 'name' | 'description' | 'displayName'] = value\n const postLabel = domainElement.info.getLabel()\n this.notifyChange()\n if (preLabel !== postLabel) {\n Events.Domain.rename(domainElement.key, domainElement.domain.key, DomainEntityKind, value, this)\n }\n }\n\n handleContentTabChange(e: Event): void {\n const tabs = e.target as UiTabsElement\n const tab = tabs.activeTab\n if (!tab) {\n return\n }\n const { key = '' } = tab.dataset\n if (!['design', 'preview'].includes(key)) {\n return\n }\n this.contentTab = key as 'design' | 'preview'\n }\n\n /**\n * Generates the example data for the preview tab.\n */\n generateExample(): void {\n const { domainElement: model, mime, mockValues = false, contentTab } = this\n if (!model || contentTab !== 'preview') {\n return\n }\n const value = model.toExample(mime, { renderMocked: mockValues, renderExamples: true })\n this.schemaPreview = value as string | undefined\n }\n\n override notifyChange(): void {\n super.notifyChange()\n this.generateExample()\n }\n\n /**\n * A handler for the mime type change event.\n */\n handleMimeChange(e: Event): void {\n const node = e.currentTarget as HTMLSelectElement\n const { value } = node\n if (!value) {\n return\n }\n this.mime = value\n }\n\n /**\n * A handler for the field item click to select a field.\n * @param e The click event.\n */\n handleFieldListSelect(e: CustomEvent<UiListSelection>): void {\n const item = e.detail.item\n const { key, kind } = item.dataset\n if (!key || !kind) {\n return\n }\n this.select(key, kind)\n }\n\n /**\n * Selects a field in the editor and dispatches a custom event with the key and kind of the field.\n * @param key The key of the field to select.\n * @param kind The kind of the field to select.\n */\n select(key: string, kind: string): void {\n const detail: DomainSelectionInfo = {\n key,\n kind,\n domain: this.root?.key || '',\n }\n this.selectedProperty = key\n this.dispatchEvent(\n new CustomEvent('select', {\n detail,\n })\n )\n }\n\n addProperty(name?: string): void {\n const { domainElement } = this\n if (!domainElement) {\n return\n }\n const prop = domainElement.addProperty({ info: { name: name || 'new_field' } })\n this.select(prop.key, DomainPropertyKind)\n this.notifyChange()\n }\n\n addAssociation(name?: string): void {\n const { domainElement } = this\n if (!domainElement) {\n return\n }\n const prop = domainElement.addAssociation({}, { info: { name: name || 'new_reference' } })\n this.select(prop.key, DomainAssociationKind)\n this.notifyChange()\n }\n\n handleFieldMenuSelect(e: CustomEvent<{ item: HTMLElement }>): void {\n if (!this.domainElement) {\n return\n }\n const { item } = e.detail\n const { action = '' } = item.dataset\n if (action === 'property') {\n this.addProperty()\n } else if (action === 'association') {\n this.addAssociation()\n } else if (action === 'all-recommended') {\n addRecommendedFields(this.domainElement)\n this.notifyChange()\n } else if (action === 'auto-fields-dialog') {\n this.openAutoFieldsDialog()\n }\n }\n\n /**\n * Opens the auto fields selection dialog\n */\n openAutoFieldsDialog(): void {\n if (!this.domainElement) {\n return\n }\n\n openAutoFieldsDialog((selectedFields: string[]) => {\n if (!this.domainElement) {\n return\n }\n\n let lastField: { key: string; kind: string } | undefined\n\n // Add all selected fields\n for (const fieldId of selectedFields) {\n const field = addAutoField(this.domainElement, fieldId)\n lastField = { key: field.key, kind: field.kind }\n }\n\n // Select the last added field if any\n if (lastField) {\n this.select(lastField.key, lastField.kind)\n }\n\n this.notifyChange()\n })\n }\n\n protected async handleChooseParent(): Promise<void> {\n if (!this.domainElement) {\n return\n }\n const data: DomainBrowseInit = {\n reason: 'pick',\n domain: this.domainElement.domain,\n allowed: [DomainEntityKind],\n withRecent: true,\n }\n const result = await Events.Domain.Browse.browse(data)\n if (!result) {\n return\n }\n if (result.result === 'canceled') {\n return\n }\n this.addParentEntity(result.selected, result.domain)\n }\n\n protected handleDeleteParent(e: Event): void {\n const { domainElement } = this\n if (!domainElement) {\n return\n }\n const item = e.currentTarget as HTMLElement\n const { key, domain } = item.dataset\n if (!key || !domain) {\n return\n }\n domainElement.removeParent(key, domain)\n this.notifyChange()\n this.requestUpdate()\n }\n\n protected handleNavigateParent(e: Event): void {\n const item = e.currentTarget as HTMLElement\n const { key } = item.dataset\n if (!key) {\n return\n }\n this.openEntity(key)\n }\n\n addParentEntity(key: string, domain?: string): void {\n const { domainElement } = this\n if (!domainElement || !key) {\n return\n }\n try {\n const entity = domainElement.domain.findEntity(key, domain)\n if (!entity) {\n throw new Error(`Entity with key ${key} not found in domain ${domainElement.domain.key}.`)\n }\n domainElement.addParent(key, domain)\n this.notifyChange()\n this.requestUpdate()\n } catch (error) {\n this.reportError(error as Error)\n }\n }\n\n protected handleInheritanceDragEnter(e: DragEvent): void {\n const dt = e.dataTransfer\n if (!dt) {\n return\n }\n const hasJsonData = dt.types.includes('application/json')\n if (!hasJsonData) {\n return\n }\n const zone = e.currentTarget as HTMLElement\n zone.classList.add('drop-zone')\n dt.dropEffect = 'link'\n dt.effectAllowed = 'link'\n }\n\n protected handleInheritanceDragOver(e: DragEvent): void {\n const dt = e.dataTransfer\n if (!dt) {\n return\n }\n const hasJsonData = dt.types.includes('application/json')\n if (!hasJsonData) {\n return\n }\n e.preventDefault()\n }\n\n protected handleInheritanceDragLeave(e: DragEvent): void {\n const dt = e.dataTransfer\n if (!dt) {\n return\n }\n const zone = e.currentTarget as HTMLElement\n zone.classList.remove('drop-zone')\n }\n\n protected handleInheritanceDrop(e: DragEvent): void {\n const dt = e.dataTransfer\n if (!dt) {\n return\n }\n const zone = e.currentTarget as HTMLElement\n zone.classList.remove('drop-zone')\n const raw = dt.getData('application/json')\n const data = JSON.parse(raw) as { items: DomainSelectionInfo[] }\n const entities = data.items.filter((item) => item.kind === DomainEntityKind)\n if (entities.length === 0 || !this.domainElement) {\n return\n }\n for (const entity of entities) {\n this.domainElement.addParent(entity.key, entity.domain)\n }\n this.notifyChange()\n this.requestUpdate()\n }\n\n protected handleTaxonomyChange(e: Event): void {\n const node = e.currentTarget as HTMLSelectElement\n const { value } = node\n if (!value) {\n return\n }\n this.domainElement?.addSemantic({\n id: value as SemanticType,\n })\n this.requestUpdate()\n }\n\n protected handleTaxonomyClear(e: Event): void {\n e.preventDefault()\n e.stopPropagation()\n const { domainElement } = this\n if (!domainElement) {\n return\n }\n domainElement.semantics = []\n this.requestUpdate()\n }\n\n protected handleFieldContextMenuSelect(e: CustomEvent<{ item: HTMLElement }>): void {\n const menu = e.currentTarget as HTMLElement\n const { key, kind } = menu.dataset\n if (!key || !kind) {\n return\n }\n const { item } = e.detail\n const { action = '' } = item.dataset\n if (action === 'edit') {\n this.select(key, kind)\n } else if (action === 'delete') {\n this.deleteField(key, kind)\n } else if (action === 'convert') {\n if (kind === DomainPropertyKind) {\n this.convertToAssociation(key)\n } else if (kind === DomainAssociationKind) {\n this.convertToProperty(key)\n }\n } else if (action === 'duplicate') {\n this.duplicateField(key, kind)\n }\n }\n\n /**\n * Duplicates a field (property or association).\n * Creates a copy with the same properties but a new unique name.\n * @param key The key of the field to duplicate.\n * @param kind The kind of the field to duplicate.\n */\n duplicateField(key: string, kind: string): void {\n const { root, domainElement } = this\n if (!root || !domainElement) {\n return\n }\n\n if (kind === DomainPropertyKind) {\n this.duplicateProperty(key)\n } else if (kind === DomainAssociationKind) {\n this.duplicateAssociation(key)\n }\n }\n\n /**\n * Duplicates a property field.\n * @param key The key of the property to duplicate.\n */\n protected duplicateProperty(key: string): void {\n const { root, domainElement } = this\n if (!root || !domainElement) {\n return\n }\n\n // Find the property to duplicate\n const property = root.findProperty(key, this.namespace)\n if (!property) {\n return\n }\n\n const originalIndex = domainElement.fields.findIndex((f) => f.key === key)\n if (originalIndex === -1) {\n return\n }\n\n // Generate a unique name for the duplicate\n const baseName = property.info.name || 'field'\n const newName = this.generateUniqueName(baseName)\n\n // Get the web binding for format information\n const webBinding = property.getWebBinding()\n\n // Create the duplicate with all the same properties\n const duplicateProperty = domainElement.addProperty({\n type: property.type,\n info: {\n name: newName,\n displayName: property.info.displayName,\n description: property.info.description,\n },\n required: property.required,\n multiple: property.multiple,\n primary: false, // Don't duplicate primary key\n index: property.index,\n readOnly: property.readOnly,\n })\n\n // Copy the web binding format if it exists\n if (webBinding.format) {\n const duplicateBinding = duplicateProperty.getWebBinding()\n duplicateBinding.format = webBinding.format\n }\n\n // Copy the schema if it exists\n if (property.schema) {\n const duplicateSchema = duplicateProperty.ensureSchema()\n const originalSchema = property.schema\n\n if (originalSchema.defaultValue) {\n duplicateSchema.defaultValue = { ...originalSchema.defaultValue }\n }\n if (originalSchema.enum) {\n duplicateSchema.enum = [...originalSchema.enum]\n }\n if (originalSchema.examples) {\n duplicateSchema.examples = [...originalSchema.examples]\n }\n if (originalSchema.minimum !== undefined) {\n duplicateSchema.minimum = originalSchema.minimum\n }\n if (originalSchema.maximum !== undefined) {\n duplicateSchema.maximum = originalSchema.maximum\n }\n if (originalSchema.exclusiveMinimum !== undefined) {\n duplicateSchema.exclusiveMinimum = originalSchema.exclusiveMinimum\n }\n if (originalSchema.exclusiveMaximum !== undefined) {\n duplicateSchema.exclusiveMaximum = originalSchema.exclusiveMaximum\n }\n if (originalSchema.multipleOf !== undefined) {\n duplicateSchema.multipleOf = originalSchema.multipleOf\n }\n }\n\n // Move the duplicate to be right after the original\n const fromIndex = domainElement.fields.length - 1\n const duplicateField = domainElement.fields[fromIndex]\n domainElement.fields.splice(fromIndex, 1)\n domainElement.fields.splice(originalIndex + 1, 0, duplicateField)\n\n // Select the new duplicate\n this.select(duplicateProperty.key, DomainPropertyKind)\n this.notifyChange()\n }\n\n /**\n * Duplicates an association field.\n * @param key The key of the association to duplicate.\n */\n private duplicateAssociation(key: string): void {\n const { root, domainElement } = this\n if (!root || !domainElement) {\n return\n }\n\n // Find the association to duplicate\n const association = root.findAssociation(key, this.namespace)\n if (!association) {\n return\n }\n\n const originalIndex = domainElement.fields.findIndex((f) => f.key === key)\n if (originalIndex === -1) {\n return\n }\n\n // Generate a unique name for the duplicate\n const baseName = association.info.name || 'reference'\n const newName = this.generateUniqueName(baseName)\n\n // Create the duplicate with all the same properties\n const duplicateAssociation = domainElement.addAssociation(\n {},\n {\n info: {\n name: newName,\n displayName: association.info.displayName,\n description: association.info.description,\n },\n required: association.required,\n multiple: association.multiple,\n }\n )\n\n // Copy the schema if it exists\n if (association.schema) {\n const duplicateSchema = duplicateAssociation.ensureSchema()\n const originalSchema = association.schema\n\n if (originalSchema.linked !== undefined) {\n duplicateSchema.linked = originalSchema.linked\n }\n if (originalSchema.unionType) {\n duplicateSchema.unionType = originalSchema.unionType\n }\n }\n\n // Copy the target entities\n for (const target of association.listTargets()) {\n duplicateAssociation.addTarget(target.key, target.domain.key)\n }\n\n // Move the duplicate to be right after the original\n const fromIndex = domainElement.fields.length - 1\n const duplicateField = domainElement.fields[fromIndex]\n domainElement.fields.splice(fromIndex, 1)\n domainElement.fields.splice(originalIndex + 1, 0, duplicateField)\n\n // Select the new duplicate\n this.select(duplicateAssociation.key, DomainAssociationKind)\n this.notifyChange()\n }\n\n /**\n * Generates a unique name by appending a number to the base name.\n * @param baseName The base name to make unique.\n * @returns A unique name within the current entity.\n */\n protected generateUniqueName(baseName: string): string {\n const { domainElement } = this\n if (!domainElement) {\n return baseName\n }\n\n const existingNames = new Set<string>()\n for (const field of domainElement.listFields()) {\n if (field.info.name) {\n existingNames.add(field.info.name)\n }\n }\n\n let counter = 2\n let newName = `${baseName}_copy`\n while (existingNames.has(newName)) {\n newName = `${baseName}_copy_${counter}`\n counter++\n }\n\n return newName\n }\n\n deleteField(key: string, kind: string): void {\n const { root } = this\n if (!root) {\n return\n }\n if (kind === DomainPropertyKind) {\n root.removeProperty(key)\n } else if (kind === DomainAssociationKind) {\n root.removeAssociation(key)\n } else {\n return\n }\n this.dispatchEvent(new CustomEvent('delete', { detail: { key, kind } }))\n }\n\n openEntity(key: string): void {\n const detail: DomainSelectionInfo = {\n key,\n kind: DomainEntityKind,\n domain: this.root?.key || '',\n }\n this.dispatchEvent(new CustomEvent('openentity', { detail }))\n }\n\n /**\n * Converts a property to an association.\n * Keeps as many properties as possible.\n * @param key The key of the property to convert.\n */\n convertToAssociation(key: string): void {\n const { root, domainElement } = this\n if (!root || !domainElement) {\n return\n }\n\n // Find the property to convert\n const property = root.findProperty(key, this.namespace)\n if (!property) {\n return\n }\n const toIndex = domainElement.fields.findIndex((f) => f.key === key)\n if (toIndex === -1) {\n return\n }\n\n // Store the property information before removal\n const info = {\n name: property.info.name,\n displayName: property.info.displayName,\n description: property.info.description,\n }\n const required = property.required\n const multiple = property.multiple\n\n // Remove the original property\n root.removeProperty(key)\n\n // Create a new association with preserved information\n const association = domainElement.addAssociation({}, { info, required, multiple })\n const fromIndex = domainElement.fields.length - 1\n const value = domainElement.fields[fromIndex]\n // Move the association to the same position as the original property\n domainElement.fields.splice(fromIndex, 1)\n domainElement.fields.splice(toIndex, 0, value)\n\n // Select the new association\n this.select(association.key, DomainAssociationKind)\n this.notifyChange()\n }\n\n /**\n * Converts an association to a property.\n * Keeps as many properties as possible.\n * @param key The key of the association to convert.\n */\n convertToProperty(key: string): void {\n const { root, domainElement } = this\n if (!root || !domainElement) {\n return\n }\n\n // Find the association to convert\n const association = root.findAssociation(key, this.namespace)\n if (!association) {\n return\n }\n\n const toIndex = domainElement.fields.findIndex((f) => f.key === key)\n if (toIndex === -1) {\n return\n }\n\n // Store the association information before removal\n const info = {\n name: association.info.name,\n displayName: association.info.displayName,\n description: association.info.description,\n }\n const required = association.required\n const multiple = association.multiple\n\n // Remove the original association\n root.removeAssociation(key)\n\n // Create a new property with preserved information\n // Default to string type since we can't preserve the target reference as a data type\n const property = domainElement.addProperty({\n type: 'string',\n info,\n required,\n multiple,\n })\n const fromIndex = domainElement.fields.length - 1\n const value = domainElement.fields[fromIndex]\n // Move the property to the same position as the original association\n domainElement.fields.splice(fromIndex, 1)\n domainElement.fields.splice(toIndex, 0, value)\n\n // Select the new property\n this.select(property.key, DomainPropertyKind)\n this.notifyChange()\n }\n\n protected handleTaxonomySelect(e: CustomEvent<{ item: HTMLElement }>): void {\n const { value } = e.detail.item.dataset\n if (value) {\n this.domainElement?.addSemantic({\n id: value as SemanticType,\n })\n this.requestUpdate()\n }\n }\n\n protected handleDeleteTaxonomy(e: Event): void {\n const button = e.currentTarget as HTMLButtonElement\n const { id } = button.dataset\n if (!id) {\n return\n }\n this.domainElement?.removeSemantic(id as SemanticType)\n }\n\n protected override render(): TemplateResult | typeof nothing {\n const { domainElement } = this\n if (!domainElement) {\n return nothing\n }\n return html`${this.renderForm(domainElement)}`\n }\n\n protected renderForm(model: DomainEntity): TemplateResult {\n return html`\n <form name=\"entity\" @submit=\"${cancelEvent}\" data-key=\"${model.key}\" class=\"modeling-form\">\n ${this.renderMetaInputs(model)} ${this.renderParentEntity(model)} ${this.renderContentTabs()}\n ${this.renderTabsContent(model)}\n </form>\n `\n }\n\n protected renderMetaInputs(model: DomainEntity): TemplateResult {\n const disabled = !this.canEdit\n const formatError =\n 'Name must start with a letter or underscore and can only contain letters, numbers, and underscores.'\n return html`\n <div class=\"editor-section\">\n <div class=\"row input-row\">\n <ui-outlined-text-field\n class=\"input\"\n name=\"name\"\n .value=\"${live(model.info.name || '')}\"\n label=\"Name\"\n required\n minLength=\"2\"\n maxLength=\"31\"\n pattern=\"[a-zA-Z_][a-zA-Z0-9_]+\"\n .invalidText=\"${formatError}\"\n ?disabled=\"${disabled}\"\n @change=\"${this.handleMetaChange}\"\n ></ui-outlined-text-field>\n ${renderHelp('entity', 'name-input')}\n </div>\n <div class=\"row input-row\">\n <ui-outlined-text-field\n class=\"input\"\n name=\"displayName\"\n .value=\"${live(model.info.displayName || '')}\"\n label=\"Display name (optional)\"\n ?disabled=\"${disabled}\"\n @change=\"${this.handleMetaChange}\"\n ></ui-outlined-text-field>\n ${renderHelp('entity', 'displayName-input')}\n </div>\n <div class=\"row input-row\">\n <ui-outlined-text-field\n class=\"input\"\n name=\"description\"\n .value=\"${live(model.info.description || '')}\"\n label=\"Description (optional)\"\n ?disabled=\"${disabled}\"\n @change=\"${this.handleMetaChange}\"\n ></ui-outlined-text-field>\n ${renderHelp('entity', 'description-input')}\n </div>\n </div>\n `\n }\n\n protected renderParentEntity(model: DomainEntity): TemplateResult {\n const disabled = !this.canEdit\n return html`\n <div\n class=\"inheritance-section\"\n @dragenter=\"${this.handleInheritanceDragEnter}\"\n @dragover=\"${this.handleInheritanceDragOver}\"\n @dragleave=\"${this.handleInheritanceDragLeave}\"\n @drop=\"${this.handleInheritanceDrop}\"\n >\n <div class=\"section-header\">\n <span class=\"label-large\">Inherits from</span>\n <ui-button\n color=\"tonal\"\n type=\"button\"\n class=\"select\"\n @click=\"${this.handleChooseParent}\"\n ?disabled=\"${disabled}\"\n >Choose parent entity</ui-button\n >\n ${renderHelp('entity', 'inherits-from-selector')}\n </div>\n ${this.renderParentItems(model)}\n </div>\n `\n }\n\n protected renderParentItems(model: DomainEntity): TemplateResult | typeof nothing {\n if (!model.hasParents()) {\n return nothing\n }\n const contents: TemplateResult[] = []\n const disabled = !this.canEdit\n for (const item of model.listParents()) {\n const label = item.info.getLabel()\n contents.push(\n html`<ui-chip\n class=\"parent-chip\"\n data-key=\"${item.key}\"\n data-domain=\"${item.domain.key}\"\n removable\n type=\"input\"\n title=\"Open the parent entity\"\n aria-label=\"Open the parent entity ${label}\"\n ?disabled=\"${disabled}\"\n @remove=\"${this.handleDeleteParent}\"\n @click=\"${this.handleNavigateParent}\"\n >${label}</ui-chip\n >`\n )\n }\n return html`<ui-chip-set>${contents}</ui-chip-set>`\n }\n\n protected renderContentTabs(): TemplateResult {\n return html`\n <ui-tabs priority=\"secondary\" @change=\"${this.handleContentTabChange}\">\n <ui-tab data-key=\"design\" selected>Design</ui-tab>\n <ui-tab data-key=\"preview\">Preview</ui-tab>\n </ui-tabs>\n `\n }\n\n protected renderTabsContent(model: DomainEntity): TemplateResult {\n const { contentTab } = this\n switch (contentTab) {\n case 'design':\n return this.renderDesignTabContent(model)\n case 'preview':\n return this.renderPreviewTabContent()\n default:\n return html`<p>Invalid selection.</p>`\n }\n }\n\n protected renderDesignTabContent(model: DomainEntity): TemplateResult {\n // TODO: Add taxonomy related UI.\n return html`${this.renderFieldsSection(model)} ${this.renderDataGovernanceSection(model)}`\n }\n\n protected renderPreviewTabContent(): TemplateResult {\n return html`\n <div class=\"preview-section\">\n ${this.renderPreviewMimeSelector()}\n <div class=\"schema-preview\"><pre class=\"title-small\">${this.schemaPreview}</pre></div>\n </div>\n `\n }\n\n protected renderPreviewMimeSelector(): TemplateResult {\n const { mime } = this\n const mimes = ['application/json', 'application/xml']\n return html`<div class=\"row\">\n <ui-select label=\"Media Type\" class=\"input\" name=\"mime\" .value=\"${mime}\" @change=\"${this.handleMimeChange}\">\n ${mimes.map(\n (item) =>\n html`<ui-option value=\"${item}\">\n <div>${item}</div>\n </ui-option>`\n )}\n </ui-select>\n </div>`\n }\n\n protected renderFieldsSection(model: DomainEntity): TemplateResult {\n return html`\n <div class=\"fields-section\">\n <div class=\"fields-header\">\n <span class=\"label-large\">Fields</span>\n ${this.renderFieldAddButton()}\n </div>\n ${model.hasFields() ? this.renderFieldsList(model) : this.renderFieldsEmptyState()}\n </div>\n `\n }\n\n protected renderFieldAddButton(): TemplateResult {\n const disabled = !this.canEdit\n return html`<div class=\"field-add-button\">\n <ui-button\n id=\"field-new-anchor\"\n trailingIcon\n type=\"button\"\n color=\"tonal\"\n ?disabled=\"${disabled}\"\n popoverTarget=\"new-field-menu\"\n >\n Add field\n <ui-icon slot=\"icon\">arrow_drop_down</ui-icon>\n </ui-button>\n <ui-menu id=\"new-field-menu\" popover=\"auto\" @select=\"${this.handleFieldMenuSelect}\">\n <ui-menu-item data-action=\"property\">\n <div>Property</div>\n <div slot=\"supporting-text\">Data property in the schema</div>\n </ui-menu-item>\n <ui-menu-item data-action=\"association\">\n <div>Reference</div>\n <div slot=\"supporting-text\">Connect to another entity object</div>\n </ui-menu-item>\n <ui-menu-item data-action=\"auto-fields-dialog\">\n <div>Auto fields...</div>\n <div slot=\"supporting-text\">Choose from common field types</div>\n </ui-menu-item>\n <ui-menu-item data-action=\"all-recommended\">\n <div>All Recommended Fields</div>\n <div slot=\"supporting-text\">Adds all commonly recommended fields (ID, timestamps, audit trail).</div>\n </ui-menu-item>\n </ui-menu>\n </div>`\n }\n\n protected renderFieldsEmptyState(): TemplateResult {\n return html`<div class=\"empty-fields\">\n <div class=\"icon-wrapper\">\n <ui-icon class=\"icon\" icon=\"textFields\"></ui-icon>\n </div>\n <p class=\"empty-message body-large\">Find your data entities here</p>\n <p class=\"empty-message body-large\">Add a data entity to describe your schema.</p>\n </div>`\n }\n\n protected renderFieldsList(items: DomainEntity): TemplateResult {\n const contents: TemplateResult[] = []\n for (const item of items.listFields()) {\n contents.push(this.renderField(item))\n }\n return html`<ui-list class=\"fields-list\" @select=\"${this.handleFieldListSelect}\">${contents}</ui-list>`\n }\n\n protected renderField(item: DomainAssociation | DomainProperty): TemplateResult {\n const selected = this.selectedProperty === item.key\n const classes: ClassInfo = {\n 'field-item': true,\n 'selected': selected,\n }\n const label = item.info.getLabel()\n const icon = selected ? 'check' : getFieldIcon(item)\n return html`<ui-list-item class=\"${classMap(classes)}\" data-key=\"${item.key}\" data-kind=\"${item.kind}\">\n <span slot=\"start\"><ui-icon class=\"icon\" icon=\"${icon}\"></ui-icon></span>\n <span>${label}</span>\n <span slot=\"end-text\">${getFieldDataTypeLabel(item)}</span>\n ${this.createFieldContextualMenu(item)}\n </ui-list-item>`\n }\n\n protected createFieldContextualMenu(item: DomainAssociation | DomainProperty): TemplateResult {\n const disabled = !this.canEdit\n return html`\n <div\n class=\"field-menu\"\n slot=\"end\"\n @click=\"${cancelEvent}\"\n @keydown=\"${cancelEvent}\"\n @keyup=\"${cancelEvent}\"\n @mousedown=\"${cancelEvent}\"\n @mouseup=\"${cancelEvent}\"\n @pointerdown=\"${cancelEvent}\"\n @pointerup=\"${cancelEvent}\"\n @contextmenu=\"${cancelEvent}\"\n @touchstart=\"${cancelEvent}\"\n @touchend=\"${cancelEvent}\"\n @touchcancel=\"${cancelEvent}\"\n >\n <ui-icon-button\n id=\"field-menu-anchor-${item.key}-menu\"\n popoverTarget=\"field-${item.key}-menu\"\n color=\"outlined\"\n aria-label=\"Field options\"\n ?disabled=\"${!this.canEdit}\"\n >\n <ui-icon>more_vert</ui-icon>\n </ui-icon-button>\n <ui-menu\n data-key=\"${item.key}\"\n data-kind=\"${item.kind}\"\n id=\"field-${item.key}-menu\"\n popover=\"auto\"\n @select=\"${this.handleFieldContextMenuSelect}\"\n >\n <ui-menu-item data-action=\"edit\" ?disabled=\"${disabled}\" lines=\"two\">\n <div>Edit</div>\n <div slot=\"supporting-text\">Edit the field properties</div>\n </ui-menu-item>\n <ui-menu-item data-action=\"duplicate\" ?disabled=\"${disabled}\" lines=\"two\">\n <div>Duplicate</div>\n <div slot=\"supporting-text\">Create a copy of this field</div>\n </ui-menu-item>\n ${when(\n item.kind === DomainPropertyKind,\n () =>\n html`<ui-menu-item data-action=\"convert\" ?disabled=\"${disabled}\" lines=\"two\">\n <div>Convert to association</div>\n <div slot=\"supporting-text\">Replaces this property with an association</div>\n </ui-menu-item>`,\n () =>\n html`<ui-menu-item data-action=\"convert\" ?disabled=\"${disabled}\" lines=\"two\">\n <div>Convert to property</div>\n <div slot=\"supporting-text\">Replaces this association with a property</div>\n </ui-menu-item>`\n )}\n <ui-divider></ui-divider>\n <ui-menu-item data-action=\"delete\" ?disabled=\"${disabled}\" lines=\"two\">\n <div>Delete</div>\n <div slot=\"supporting-text\">Remove the field from the schema</div>\n </ui-menu-item>\n </ui-menu>\n </div>\n `\n }\n\n protected renderDataGovernanceSection(model: DomainEntity): TemplateResult {\n // TODO: Add classification UI (data tagging)\n return html`<div class=\"data-gov-section\">\n <div class=\"data-gov-header\">\n <span class=\"label-large\">Data Governance</span>\n </div>\n ${this.renderTaxonomyInput(model)}\n </div>`\n }\n\n protected renderTaxonomyInput(model: DomainEntity): TemplateResult | typeof nothing {\n const allCategories = getSemanticsByCategory(SemanticScope.Entity)\n const selectedSemantics: EntitySemantic[] = []\n const filteredCategories: Record<string, EntitySemantic[]> = {}\n\n // Filter categories and semantics, excluding already selected ones\n for (const category of Object.keys(allCategories)) {\n const semantics = allCategories[category as SemanticCategory].filter((s) => {\n // Check if this semantic is already selected\n if (model.semantics.some((ms) => ms.id === s.id)) {\n selectedSemantics.push(s)\n return false\n }\n return true\n })\n\n if (semantics.length > 0) {\n filteredCategories[category] = semantics\n }\n }\n\n if (Object.keys(filteredCategories).length === 0 && selectedSemantics.length === 0) {\n return nothing\n }\n\n return html`<div class=\"taxonomy\">\n <ui-button\n id=\"taxonomy-menu-anchor\"\n popoverTarget=\"taxonomy-menu\"\n color=\"outlined\"\n aria-label=\"Add entity taxonomy\"\n ?disabled=\"${!this.canEdit}\"\n >\n <ui-icon slot=\"icon\">add</ui-icon>Add taxonomy\n </ui-button>\n <ui-menu popover=\"auto\" id=\"taxonomy-menu\" class=\"taxonomy-menu\" @select=\"${this.handleTaxonomySelect}\">\n ${this.renderTaxonomyCategories(filteredCategories)}\n </ui-menu>\n ${renderHelp('entity', 'taxonomy-select')}\n </div>\n ${this.renderSelectedSemantics(selectedSemantics)}`\n\n // const options: TemplateResult[] = []\n // let hasSelection = false\n // for (const semantic of Object.values(DataSemantics)) {\n // if (semantic.scope !== SemanticScope.Entity) {\n // continue\n // }\n // const has = model.semantics.some((s) => s.id === semantic.id)\n // if (has) {\n // hasSelection = true\n // }\n // options.push(\n // html`<ui-option value=\"${semantic.id}\" ?selected=\"${has}\">\n // <div>${semantic.displayName}</div>\n // <div slot=\"supporting-text\">${semantic.description}</div>\n // </ui-option>`\n // )\n // }\n // const support = 'Helps recognize what the entity represents'\n // return html`<div class=\"row input-row\">\n // <ui-select\n // label=\"Entity taxonomy\"\n // class=\"input\"\n // name=\"taxonomy\"\n // ?disabled=\"${!this.canEdit}\"\n // .supportingText=\"${support}\"\n // @change=\"${this.handleTaxonomyChange}\"\n // >\n // ${options}\n // ${hasSelection\n // ? html`<ui-icon slot=\"trailing-icon\" icon=\"cancel\" @click=\"${this.handleTaxonomyClear}\"></ui-icon>`\n // : nothing}\n // </ui-select>\n // ${renderHelp('entity', 'taxonomy-select')}\n // </div>`\n }\n\n protected renderSelectedSemantics(selected: EntitySemantic[]): TemplateResult | typeof nothing {\n if (selected.length === 0) {\n return nothing\n }\n const items = selected.map((semantic) => this.renderTaxonomyItem(semantic))\n return html`<div class=\"enabled-taxonomy\">${items}</div>`\n }\n\n protected renderTaxonomyItem(semantic: EntitySemantic): TemplateResult {\n const canEdit = this.canEdit\n return html`<div class=\"taxonomy-item\">\n <span class=\"label body-large\">${semantic.displayName}</span>\n ${semantic.hasConfig\n ? html`<ui-button color=\"text\" data-id=\"${semantic.id}\" ?disabled=\"${!canEdit}\">Configure</ui-button>`\n : nothing}\n ${canEdit\n ? html`<ui-icon-button\n type=\"button\"\n data-id=\"${semantic.id}\"\n @click=\"${this.handleDeleteTaxonomy}\"\n ?disabled=\"${!canEdit}\"\n ><ui-icon icon=\"deleteOutline\"></ui-icon\n ></ui-icon-button>`\n : nothing}\n </div>`\n }\n\n protected renderTaxonomyCategories(categories: Record<string, EntitySemantic[]>): TemplateResult[] {\n const items: TemplateResult[] = []\n const entries = Object.entries(categories)\n const cLen = entries.length\n\n entries.forEach(([categoryName, semantics], categoryIndex) => {\n // Add category title as a non-selectable menu item\n items.push(html` <div class=\"menu-category-title title-small\">${categoryName}</div> `)\n\n // Add semantics from this category\n for (const semantic of semantics) {\n items.push(html`\n <ui-menu-item data-value=\"${semantic.id}\" lines=\"two\">\n <div>${semantic.displayName}</div>\n <div slot=\"supporting-text\">${semantic.description}</div>\n </ui-menu-item>\n `)\n }\n\n // Add divider after each category except the last one\n if (categoryIndex < cLen - 1) {\n items.push(html`<ui-divider></ui-divider>`)\n }\n })\n\n return items\n }\n}\n"]}
1
+ {"version":3,"file":"DomainEntityEditor.js","sourceRoot":"","sources":["../../../../src/modeling/internals/DomainEntityEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, nothing, type PropertyValues, type TemplateResult } from 'lit'\nimport { live } from 'lit-html/directives/live.js'\nimport { property, state } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { type ClassInfo, classMap } from 'lit/directives/class-map.js'\nimport { DomainEntity } from '@api-client/core/modeling/DomainEntity.js'\nimport { addAutoField, addRecommendedFields } from '@api-client/core/modeling/helpers/Intelisense.js'\nimport { DomainAssociationKind, DomainEntityKind, DomainPropertyKind } from '@api-client/core/models/kinds.js'\nimport { cancelEvent } from '@api-client/core/lib/events/Utils.js'\nimport type { DomainAssociation } from '@api-client/core/modeling/DomainAssociation.js'\nimport type { DomainProperty } from '@api-client/core/modeling/DomainProperty.js'\nimport { ModelingElement } from './ModelingElement.js'\nimport type { UiTabsElement } from '../../md/tabs/ui-tabs.js'\nimport { getFieldDataTypeLabel, getFieldIcon } from '../lib/ui_mapping.js'\nimport { Events } from '../../events/Events.js'\nimport {\n type EntitySemantic,\n getSemanticsByCategory,\n SemanticCategory,\n SemanticScope,\n SemanticType,\n} from '@api-client/core/modeling/Semantics.js'\nimport { renderHelp } from '../../help/render.js'\nimport type { DomainBrowseInit, DomainSelectionInfo } from '../types.js'\nimport type { UiListSelection } from '../../md/list/ui-list.js'\nimport { openAutoFieldsDialog } from '../domain-auto-fields-dialog.js'\n\n/**\n * Dispatched when a field (either a `DomainProperty` or a `DomainAssociation`) within the entity is selected.\n *\n * @event DomainEntityEditor#select\n * @type {CustomEvent}\n * @property {object} detail - The event details.\n * @property {string} detail.key - The key of the selected field.\n * @property {string} detail.kind - The kind of the selected field (e.g., `DomainPropertyKind`,\n * `DomainAssociationKind`).\n */\n\n/**\n * Dispatched when the user wants to navigate to a parent entity.\n *\n * @event DomainEntityEditor#openentity\n * @type {CustomEvent}\n * @property {object} detail - The event details.\n * @property {string} detail.key - The key of the parent entity to navigate to.\n * @property {string} detail.kind - The kind of the parent entity. It will always be `DomainEntityKind`.\n */\n\n/**\n * An element that provides an editor interface for a domain entity.\n * @fires DomainEntityEditor#select - A custom event with the `key` and `type` when a property was selected.\n * @fires DomainEntityEditor#openentity - A custom event with the `key` and `type` when a property was selected.\n * @fires domainbrowserbrowse - Dispatched when the user clicks on the \"choose parent\" button. The detail object\n * has the full intent configuration.\n * @fires domainrename - Dispatched when the user renames the entity.\n */\nexport default class DomainEntityEditor extends ModelingElement {\n protected domainElement: DomainEntity | undefined\n\n /**\n * The currently selected tab in the editor.\n * @attribute\n */\n @property({ type: String, reflect: true }) accessor contentTab: 'design' | 'preview' = 'design'\n\n /**\n * The key of the currently selected property.\n * @attribute\n */\n @property({ type: String, reflect: true }) accessor selectedProperty: string | undefined\n\n /**\n * The mime type of the preview to render.\n * @attribute\n */\n @property({ type: String }) accessor mime = 'application/json'\n /**\n * When set, the preview tab will generate example (mock) data.\n * By default it only render values as defined in the schema.\n * @attribute\n */\n @property({ type: Boolean }) accessor mockValues = false\n\n /**\n * The generated schema preview.\n */\n @state() accessor schemaPreview: string | undefined\n\n protected override willUpdate(cp: PropertyValues<this>): void {\n if (cp.has('selected') || cp.has('root') || cp.has('namespace')) {\n this.computeEntity()\n }\n if (cp.has('mime') || cp.has('mockValues')) {\n this.generateExample()\n } else if (cp.has('contentTab')) {\n this.generateExample()\n } else if (this.contentTab === 'preview') {\n this.generateExample()\n }\n super.willUpdate(cp)\n }\n\n protected computeEntity(): void {\n const { root, selected, namespace } = this\n if (!root || !selected) {\n this.domainElement = undefined\n return\n }\n this.domainElement = root.findEntity(selected, namespace)\n }\n\n handleMetaChange(e: Event): void {\n const { domainElement } = this\n if (!domainElement) {\n return\n }\n const node = e.target as HTMLInputElement\n if (!node.reportValidity()) {\n return\n }\n const { name, value } = node\n if (!['name', 'displayName', 'description'].includes(name as string)) {\n return\n }\n if (name === 'name' && !value) {\n return\n }\n const preLabel = domainElement.info.getLabel()\n domainElement.info[name as 'name' | 'description' | 'displayName'] = value\n const postLabel = domainElement.info.getLabel()\n this.notifyChange()\n if (preLabel !== postLabel) {\n Events.Domain.rename(domainElement.key, domainElement.domain.key, DomainEntityKind, value, this)\n }\n }\n\n handleContentTabChange(e: Event): void {\n const tabs = e.target as UiTabsElement\n const tab = tabs.activeTab\n if (!tab) {\n return\n }\n const { key = '' } = tab.dataset\n if (!['design', 'preview'].includes(key)) {\n return\n }\n this.contentTab = key as 'design' | 'preview'\n }\n\n /**\n * Generates the example data for the preview tab.\n */\n generateExample(): void {\n const { domainElement: model, mime, mockValues = false, contentTab } = this\n if (!model || contentTab !== 'preview') {\n return\n }\n const value = model.toExample(mime, { renderMocked: mockValues, renderExamples: true })\n this.schemaPreview = value as string | undefined\n }\n\n override notifyChange(): void {\n super.notifyChange()\n this.generateExample()\n }\n\n /**\n * A handler for the mime type change event.\n */\n handleMimeChange(e: Event): void {\n const node = e.currentTarget as HTMLSelectElement\n const { value } = node\n if (!value) {\n return\n }\n this.mime = value\n }\n\n /**\n * A handler for the field item click to select a field.\n * @param e The click event.\n */\n handleFieldListSelect(e: CustomEvent<UiListSelection>): void {\n const item = e.detail.item\n const { key, kind } = item.dataset\n if (!key || !kind) {\n return\n }\n this.select(key, kind)\n }\n\n /**\n * Selects a field in the editor and dispatches a custom event with the key and kind of the field.\n * @param key The key of the field to select.\n * @param kind The kind of the field to select.\n */\n select(key: string, kind: string): void {\n const detail: DomainSelectionInfo = {\n key,\n kind,\n domain: this.root?.key || '',\n }\n this.selectedProperty = key\n this.dispatchEvent(\n new CustomEvent('select', {\n detail,\n })\n )\n }\n\n addProperty(name?: string): void {\n const { domainElement } = this\n if (!domainElement) {\n return\n }\n const prop = domainElement.addProperty({ info: { name: name || 'new_field' } })\n this.select(prop.key, DomainPropertyKind)\n this.notifyChange()\n }\n\n addAssociation(name?: string): void {\n const { domainElement } = this\n if (!domainElement) {\n return\n }\n const prop = domainElement.addAssociation({}, { info: { name: name || 'new_reference' } })\n this.select(prop.key, DomainAssociationKind)\n this.notifyChange()\n }\n\n handleFieldMenuSelect(e: CustomEvent<{ item: HTMLElement }>): void {\n if (!this.domainElement) {\n return\n }\n const { item } = e.detail\n const { action = '' } = item.dataset\n if (action === 'property') {\n this.addProperty()\n } else if (action === 'association') {\n this.addAssociation()\n } else if (action === 'all-recommended') {\n addRecommendedFields(this.domainElement)\n this.notifyChange()\n } else if (action === 'auto-fields-dialog') {\n this.openAutoFieldsDialog()\n }\n }\n\n /**\n * Opens the auto fields selection dialog\n */\n openAutoFieldsDialog(): void {\n if (!this.domainElement) {\n return\n }\n\n openAutoFieldsDialog((selectedFields: string[]) => {\n if (!this.domainElement) {\n return\n }\n\n let lastField: { key: string; kind: string } | undefined\n\n // Add all selected fields\n for (const fieldId of selectedFields) {\n const field = addAutoField(this.domainElement, fieldId)\n lastField = { key: field.key, kind: field.kind }\n }\n\n // Select the last added field if any\n if (lastField) {\n this.select(lastField.key, lastField.kind)\n }\n\n this.notifyChange()\n })\n }\n\n protected async handleChooseParent(): Promise<void> {\n if (!this.domainElement) {\n return\n }\n const data: DomainBrowseInit = {\n reason: 'pick',\n domain: this.domainElement.domain,\n allowed: [DomainEntityKind],\n withRecent: true,\n }\n const result = await Events.Domain.Browse.browse(data, this)\n if (!result) {\n return\n }\n if (result.result === 'canceled') {\n return\n }\n this.addParentEntity(result.selected, result.domain)\n }\n\n protected handleDeleteParent(e: Event): void {\n const { domainElement } = this\n if (!domainElement) {\n return\n }\n const item = e.currentTarget as HTMLElement\n const { key, domain } = item.dataset\n if (!key || !domain) {\n return\n }\n domainElement.removeParent(key, domain)\n this.notifyChange()\n this.requestUpdate()\n }\n\n protected handleNavigateParent(e: Event): void {\n const item = e.currentTarget as HTMLElement\n const { key } = item.dataset\n if (!key) {\n return\n }\n this.openEntity(key)\n }\n\n addParentEntity(key: string, domain?: string): void {\n const { domainElement } = this\n if (!domainElement || !key) {\n return\n }\n try {\n const entity = domainElement.domain.findEntity(key, domain)\n if (!entity) {\n throw new Error(`Entity with key ${key} not found in domain ${domainElement.domain.key}.`)\n }\n domainElement.addParent(key, domain)\n this.notifyChange()\n this.requestUpdate()\n } catch (error) {\n this.reportError(error as Error)\n }\n }\n\n protected handleInheritanceDragEnter(e: DragEvent): void {\n const dt = e.dataTransfer\n if (!dt) {\n return\n }\n const hasJsonData = dt.types.includes('application/json')\n if (!hasJsonData) {\n return\n }\n const zone = e.currentTarget as HTMLElement\n zone.classList.add('drop-zone')\n dt.dropEffect = 'link'\n dt.effectAllowed = 'link'\n }\n\n protected handleInheritanceDragOver(e: DragEvent): void {\n const dt = e.dataTransfer\n if (!dt) {\n return\n }\n const hasJsonData = dt.types.includes('application/json')\n if (!hasJsonData) {\n return\n }\n e.preventDefault()\n }\n\n protected handleInheritanceDragLeave(e: DragEvent): void {\n const dt = e.dataTransfer\n if (!dt) {\n return\n }\n const zone = e.currentTarget as HTMLElement\n zone.classList.remove('drop-zone')\n }\n\n protected handleInheritanceDrop(e: DragEvent): void {\n const dt = e.dataTransfer\n if (!dt) {\n return\n }\n const zone = e.currentTarget as HTMLElement\n zone.classList.remove('drop-zone')\n const raw = dt.getData('application/json')\n const data = JSON.parse(raw) as { items: DomainSelectionInfo[] }\n const entities = data.items.filter((item) => item.kind === DomainEntityKind)\n if (entities.length === 0 || !this.domainElement) {\n return\n }\n for (const entity of entities) {\n this.domainElement.addParent(entity.key, entity.domain)\n }\n this.notifyChange()\n this.requestUpdate()\n }\n\n protected handleTaxonomyChange(e: Event): void {\n const node = e.currentTarget as HTMLSelectElement\n const { value } = node\n if (!value) {\n return\n }\n this.domainElement?.addSemantic({\n id: value as SemanticType,\n })\n this.requestUpdate()\n }\n\n protected handleTaxonomyClear(e: Event): void {\n e.preventDefault()\n e.stopPropagation()\n const { domainElement } = this\n if (!domainElement) {\n return\n }\n domainElement.semantics = []\n this.requestUpdate()\n }\n\n protected handleFieldContextMenuSelect(e: CustomEvent<{ item: HTMLElement }>): void {\n const menu = e.currentTarget as HTMLElement\n const { key, kind } = menu.dataset\n if (!key || !kind) {\n return\n }\n const { item } = e.detail\n const { action = '' } = item.dataset\n if (action === 'edit') {\n this.select(key, kind)\n } else if (action === 'delete') {\n this.deleteField(key, kind)\n } else if (action === 'convert') {\n if (kind === DomainPropertyKind) {\n this.convertToAssociation(key)\n } else if (kind === DomainAssociationKind) {\n this.convertToProperty(key)\n }\n } else if (action === 'duplicate') {\n this.duplicateField(key, kind)\n }\n }\n\n /**\n * Duplicates a field (property or association).\n * Creates a copy with the same properties but a new unique name.\n * @param key The key of the field to duplicate.\n * @param kind The kind of the field to duplicate.\n */\n duplicateField(key: string, kind: string): void {\n const { root, domainElement } = this\n if (!root || !domainElement) {\n return\n }\n\n if (kind === DomainPropertyKind) {\n this.duplicateProperty(key)\n } else if (kind === DomainAssociationKind) {\n this.duplicateAssociation(key)\n }\n }\n\n /**\n * Duplicates a property field.\n * @param key The key of the property to duplicate.\n */\n protected duplicateProperty(key: string): void {\n const { root, domainElement } = this\n if (!root || !domainElement) {\n return\n }\n\n // Find the property to duplicate\n const property = root.findProperty(key, this.namespace)\n if (!property) {\n return\n }\n\n const originalIndex = domainElement.fields.findIndex((f) => f.key === key)\n if (originalIndex === -1) {\n return\n }\n\n // Generate a unique name for the duplicate\n const baseName = property.info.name || 'field'\n const newName = this.generateUniqueName(baseName)\n\n // Get the web binding for format information\n const webBinding = property.getWebBinding()\n\n // Create the duplicate with all the same properties\n const duplicateProperty = domainElement.addProperty({\n type: property.type,\n info: {\n name: newName,\n displayName: property.info.displayName,\n description: property.info.description,\n },\n required: property.required,\n multiple: property.multiple,\n primary: false, // Don't duplicate primary key\n index: property.index,\n readOnly: property.readOnly,\n })\n\n // Copy the web binding format if it exists\n if (webBinding.format) {\n const duplicateBinding = duplicateProperty.getWebBinding()\n duplicateBinding.format = webBinding.format\n }\n\n // Copy the schema if it exists\n if (property.schema) {\n const duplicateSchema = duplicateProperty.ensureSchema()\n const originalSchema = property.schema\n\n if (originalSchema.defaultValue) {\n duplicateSchema.defaultValue = { ...originalSchema.defaultValue }\n }\n if (originalSchema.enum) {\n duplicateSchema.enum = [...originalSchema.enum]\n }\n if (originalSchema.examples) {\n duplicateSchema.examples = [...originalSchema.examples]\n }\n if (originalSchema.minimum !== undefined) {\n duplicateSchema.minimum = originalSchema.minimum\n }\n if (originalSchema.maximum !== undefined) {\n duplicateSchema.maximum = originalSchema.maximum\n }\n if (originalSchema.exclusiveMinimum !== undefined) {\n duplicateSchema.exclusiveMinimum = originalSchema.exclusiveMinimum\n }\n if (originalSchema.exclusiveMaximum !== undefined) {\n duplicateSchema.exclusiveMaximum = originalSchema.exclusiveMaximum\n }\n if (originalSchema.multipleOf !== undefined) {\n duplicateSchema.multipleOf = originalSchema.multipleOf\n }\n }\n\n // Move the duplicate to be right after the original\n const fromIndex = domainElement.fields.length - 1\n const duplicateField = domainElement.fields[fromIndex]\n domainElement.fields.splice(fromIndex, 1)\n domainElement.fields.splice(originalIndex + 1, 0, duplicateField)\n\n // Select the new duplicate\n this.select(duplicateProperty.key, DomainPropertyKind)\n this.notifyChange()\n }\n\n /**\n * Duplicates an association field.\n * @param key The key of the association to duplicate.\n */\n private duplicateAssociation(key: string): void {\n const { root, domainElement } = this\n if (!root || !domainElement) {\n return\n }\n\n // Find the association to duplicate\n const association = root.findAssociation(key, this.namespace)\n if (!association) {\n return\n }\n\n const originalIndex = domainElement.fields.findIndex((f) => f.key === key)\n if (originalIndex === -1) {\n return\n }\n\n // Generate a unique name for the duplicate\n const baseName = association.info.name || 'reference'\n const newName = this.generateUniqueName(baseName)\n\n // Create the duplicate with all the same properties\n const duplicateAssociation = domainElement.addAssociation(\n {},\n {\n info: {\n name: newName,\n displayName: association.info.displayName,\n description: association.info.description,\n },\n required: association.required,\n multiple: association.multiple,\n }\n )\n\n // Copy the schema if it exists\n if (association.schema) {\n const duplicateSchema = duplicateAssociation.ensureSchema()\n const originalSchema = association.schema\n\n if (originalSchema.linked !== undefined) {\n duplicateSchema.linked = originalSchema.linked\n }\n if (originalSchema.unionType) {\n duplicateSchema.unionType = originalSchema.unionType\n }\n }\n\n // Copy the target entities\n for (const target of association.listTargets()) {\n duplicateAssociation.addTarget(target.key, target.domain.key)\n }\n\n // Move the duplicate to be right after the original\n const fromIndex = domainElement.fields.length - 1\n const duplicateField = domainElement.fields[fromIndex]\n domainElement.fields.splice(fromIndex, 1)\n domainElement.fields.splice(originalIndex + 1, 0, duplicateField)\n\n // Select the new duplicate\n this.select(duplicateAssociation.key, DomainAssociationKind)\n this.notifyChange()\n }\n\n /**\n * Generates a unique name by appending a number to the base name.\n * @param baseName The base name to make unique.\n * @returns A unique name within the current entity.\n */\n protected generateUniqueName(baseName: string): string {\n const { domainElement } = this\n if (!domainElement) {\n return baseName\n }\n\n const existingNames = new Set<string>()\n for (const field of domainElement.listFields()) {\n if (field.info.name) {\n existingNames.add(field.info.name)\n }\n }\n\n let counter = 2\n let newName = `${baseName}_copy`\n while (existingNames.has(newName)) {\n newName = `${baseName}_copy_${counter}`\n counter++\n }\n\n return newName\n }\n\n deleteField(key: string, kind: string): void {\n const { root } = this\n if (!root) {\n return\n }\n if (kind === DomainPropertyKind) {\n root.removeProperty(key)\n } else if (kind === DomainAssociationKind) {\n root.removeAssociation(key)\n } else {\n return\n }\n this.dispatchEvent(new CustomEvent('delete', { detail: { key, kind } }))\n }\n\n openEntity(key: string): void {\n const detail: DomainSelectionInfo = {\n key,\n kind: DomainEntityKind,\n domain: this.root?.key || '',\n }\n this.dispatchEvent(new CustomEvent('openentity', { detail }))\n }\n\n /**\n * Converts a property to an association.\n * Keeps as many properties as possible.\n * @param key The key of the property to convert.\n */\n convertToAssociation(key: string): void {\n const { root, domainElement } = this\n if (!root || !domainElement) {\n return\n }\n\n // Find the property to convert\n const property = root.findProperty(key, this.namespace)\n if (!property) {\n return\n }\n const toIndex = domainElement.fields.findIndex((f) => f.key === key)\n if (toIndex === -1) {\n return\n }\n\n // Store the property information before removal\n const info = {\n name: property.info.name,\n displayName: property.info.displayName,\n description: property.info.description,\n }\n const required = property.required\n const multiple = property.multiple\n\n // Remove the original property\n root.removeProperty(key)\n\n // Create a new association with preserved information\n const association = domainElement.addAssociation({}, { info, required, multiple })\n const fromIndex = domainElement.fields.length - 1\n const value = domainElement.fields[fromIndex]\n // Move the association to the same position as the original property\n domainElement.fields.splice(fromIndex, 1)\n domainElement.fields.splice(toIndex, 0, value)\n\n // Select the new association\n this.select(association.key, DomainAssociationKind)\n this.notifyChange()\n }\n\n /**\n * Converts an association to a property.\n * Keeps as many properties as possible.\n * @param key The key of the association to convert.\n */\n convertToProperty(key: string): void {\n const { root, domainElement } = this\n if (!root || !domainElement) {\n return\n }\n\n // Find the association to convert\n const association = root.findAssociation(key, this.namespace)\n if (!association) {\n return\n }\n\n const toIndex = domainElement.fields.findIndex((f) => f.key === key)\n if (toIndex === -1) {\n return\n }\n\n // Store the association information before removal\n const info = {\n name: association.info.name,\n displayName: association.info.displayName,\n description: association.info.description,\n }\n const required = association.required\n const multiple = association.multiple\n\n // Remove the original association\n root.removeAssociation(key)\n\n // Create a new property with preserved information\n // Default to string type since we can't preserve the target reference as a data type\n const property = domainElement.addProperty({\n type: 'string',\n info,\n required,\n multiple,\n })\n const fromIndex = domainElement.fields.length - 1\n const value = domainElement.fields[fromIndex]\n // Move the property to the same position as the original association\n domainElement.fields.splice(fromIndex, 1)\n domainElement.fields.splice(toIndex, 0, value)\n\n // Select the new property\n this.select(property.key, DomainPropertyKind)\n this.notifyChange()\n }\n\n protected handleTaxonomySelect(e: CustomEvent<{ item: HTMLElement }>): void {\n const { value } = e.detail.item.dataset\n if (value) {\n this.domainElement?.addSemantic({\n id: value as SemanticType,\n })\n this.requestUpdate()\n }\n }\n\n protected handleDeleteTaxonomy(e: Event): void {\n const button = e.currentTarget as HTMLButtonElement\n const { id } = button.dataset\n if (!id) {\n return\n }\n this.domainElement?.removeSemantic(id as SemanticType)\n }\n\n protected override render(): TemplateResult | typeof nothing {\n const { domainElement } = this\n if (!domainElement) {\n return nothing\n }\n return html`${this.renderForm(domainElement)}`\n }\n\n protected renderForm(model: DomainEntity): TemplateResult {\n return html`\n <form name=\"entity\" @submit=\"${cancelEvent}\" data-key=\"${model.key}\" class=\"modeling-form\">\n ${this.renderMetaInputs(model)} ${this.renderParentEntity(model)} ${this.renderContentTabs()}\n ${this.renderTabsContent(model)}\n </form>\n `\n }\n\n protected renderMetaInputs(model: DomainEntity): TemplateResult {\n const disabled = !this.canEdit\n const formatError =\n 'Name must start with a letter or underscore and can only contain letters, numbers, and underscores.'\n return html`\n <div class=\"editor-section\">\n <div class=\"row input-row\">\n <ui-outlined-text-field\n class=\"input\"\n name=\"name\"\n .value=\"${live(model.info.name || '')}\"\n label=\"Name\"\n required\n minLength=\"2\"\n maxLength=\"31\"\n pattern=\"[a-zA-Z_][a-zA-Z0-9_]+\"\n .invalidText=\"${formatError}\"\n ?disabled=\"${disabled}\"\n @change=\"${this.handleMetaChange}\"\n ></ui-outlined-text-field>\n ${renderHelp('entity', 'name-input')}\n </div>\n <div class=\"row input-row\">\n <ui-outlined-text-field\n class=\"input\"\n name=\"displayName\"\n .value=\"${live(model.info.displayName || '')}\"\n label=\"Display name (optional)\"\n ?disabled=\"${disabled}\"\n @change=\"${this.handleMetaChange}\"\n ></ui-outlined-text-field>\n ${renderHelp('entity', 'displayName-input')}\n </div>\n <div class=\"row input-row\">\n <ui-outlined-text-field\n class=\"input\"\n name=\"description\"\n .value=\"${live(model.info.description || '')}\"\n label=\"Description (optional)\"\n ?disabled=\"${disabled}\"\n @change=\"${this.handleMetaChange}\"\n ></ui-outlined-text-field>\n ${renderHelp('entity', 'description-input')}\n </div>\n </div>\n `\n }\n\n protected renderParentEntity(model: DomainEntity): TemplateResult {\n const disabled = !this.canEdit\n return html`\n <div\n class=\"inheritance-section\"\n @dragenter=\"${this.handleInheritanceDragEnter}\"\n @dragover=\"${this.handleInheritanceDragOver}\"\n @dragleave=\"${this.handleInheritanceDragLeave}\"\n @drop=\"${this.handleInheritanceDrop}\"\n >\n <div class=\"section-header\">\n <span class=\"label-large\">Inherits from</span>\n <ui-button\n color=\"tonal\"\n type=\"button\"\n class=\"select\"\n @click=\"${this.handleChooseParent}\"\n ?disabled=\"${disabled}\"\n >Choose parent entity</ui-button\n >\n ${renderHelp('entity', 'inherits-from-selector')}\n </div>\n ${this.renderParentItems(model)}\n </div>\n `\n }\n\n protected renderParentItems(model: DomainEntity): TemplateResult | typeof nothing {\n if (!model.hasParents()) {\n return nothing\n }\n const contents: TemplateResult[] = []\n const disabled = !this.canEdit\n for (const item of model.listParents()) {\n const label = item.info.getLabel()\n contents.push(\n html`<ui-chip\n class=\"parent-chip\"\n data-key=\"${item.key}\"\n data-domain=\"${item.domain.key}\"\n removable\n type=\"input\"\n title=\"Open the parent entity\"\n aria-label=\"Open the parent entity ${label}\"\n ?disabled=\"${disabled}\"\n @remove=\"${this.handleDeleteParent}\"\n @click=\"${this.handleNavigateParent}\"\n >${label}</ui-chip\n >`\n )\n }\n return html`<ui-chip-set>${contents}</ui-chip-set>`\n }\n\n protected renderContentTabs(): TemplateResult {\n return html`\n <ui-tabs priority=\"secondary\" @change=\"${this.handleContentTabChange}\">\n <ui-tab data-key=\"design\" selected>Design</ui-tab>\n <ui-tab data-key=\"preview\">Preview</ui-tab>\n </ui-tabs>\n `\n }\n\n protected renderTabsContent(model: DomainEntity): TemplateResult {\n const { contentTab } = this\n switch (contentTab) {\n case 'design':\n return this.renderDesignTabContent(model)\n case 'preview':\n return this.renderPreviewTabContent()\n default:\n return html`<p>Invalid selection.</p>`\n }\n }\n\n protected renderDesignTabContent(model: DomainEntity): TemplateResult {\n // TODO: Add taxonomy related UI.\n return html`${this.renderFieldsSection(model)} ${this.renderDataGovernanceSection(model)}`\n }\n\n protected renderPreviewTabContent(): TemplateResult {\n return html`\n <div class=\"preview-section\">\n ${this.renderPreviewMimeSelector()}\n <div class=\"schema-preview\"><pre class=\"title-small\">${this.schemaPreview}</pre></div>\n </div>\n `\n }\n\n protected renderPreviewMimeSelector(): TemplateResult {\n const { mime } = this\n const mimes = ['application/json', 'application/xml']\n return html`<div class=\"row\">\n <ui-select label=\"Media Type\" class=\"input\" name=\"mime\" .value=\"${mime}\" @change=\"${this.handleMimeChange}\">\n ${mimes.map(\n (item) =>\n html`<ui-option value=\"${item}\">\n <div>${item}</div>\n </ui-option>`\n )}\n </ui-select>\n </div>`\n }\n\n protected renderFieldsSection(model: DomainEntity): TemplateResult {\n return html`\n <div class=\"fields-section\">\n <div class=\"fields-header\">\n <span class=\"label-large\">Fields</span>\n ${this.renderFieldAddButton()}\n </div>\n ${model.hasFields() ? this.renderFieldsList(model) : this.renderFieldsEmptyState()}\n </div>\n `\n }\n\n protected renderFieldAddButton(): TemplateResult {\n const disabled = !this.canEdit\n return html`<div class=\"field-add-button\">\n <ui-button\n id=\"field-new-anchor\"\n trailingIcon\n type=\"button\"\n color=\"tonal\"\n ?disabled=\"${disabled}\"\n popoverTarget=\"new-field-menu\"\n >\n Add field\n <ui-icon slot=\"icon\">arrow_drop_down</ui-icon>\n </ui-button>\n <ui-menu id=\"new-field-menu\" popover=\"auto\" @select=\"${this.handleFieldMenuSelect}\">\n <ui-menu-item data-action=\"property\">\n <div>Property</div>\n <div slot=\"supporting-text\">Data property in the schema</div>\n </ui-menu-item>\n <ui-menu-item data-action=\"association\">\n <div>Reference</div>\n <div slot=\"supporting-text\">Connect to another entity object</div>\n </ui-menu-item>\n <ui-menu-item data-action=\"auto-fields-dialog\">\n <div>Auto fields...</div>\n <div slot=\"supporting-text\">Choose from common field types</div>\n </ui-menu-item>\n <ui-menu-item data-action=\"all-recommended\">\n <div>All Recommended Fields</div>\n <div slot=\"supporting-text\">Adds all commonly recommended fields (ID, timestamps, audit trail).</div>\n </ui-menu-item>\n </ui-menu>\n </div>`\n }\n\n protected renderFieldsEmptyState(): TemplateResult {\n return html`<div class=\"empty-fields\">\n <div class=\"icon-wrapper\">\n <ui-icon class=\"icon\" icon=\"textFields\"></ui-icon>\n </div>\n <p class=\"empty-message body-large\">Find your data entities here</p>\n <p class=\"empty-message body-large\">Add a data entity to describe your schema.</p>\n </div>`\n }\n\n protected renderFieldsList(items: DomainEntity): TemplateResult {\n const contents: TemplateResult[] = []\n for (const item of items.listFields()) {\n contents.push(this.renderField(item))\n }\n return html`<ui-list class=\"fields-list\" @select=\"${this.handleFieldListSelect}\">${contents}</ui-list>`\n }\n\n protected renderField(item: DomainAssociation | DomainProperty): TemplateResult {\n const selected = this.selectedProperty === item.key\n const classes: ClassInfo = {\n 'field-item': true,\n 'selected': selected,\n }\n const label = item.info.getLabel()\n const icon = selected ? 'check' : getFieldIcon(item)\n return html`<ui-list-item class=\"${classMap(classes)}\" data-key=\"${item.key}\" data-kind=\"${item.kind}\">\n <span slot=\"start\"><ui-icon class=\"icon\" icon=\"${icon}\"></ui-icon></span>\n <span>${label}</span>\n <span slot=\"end-text\">${getFieldDataTypeLabel(item)}</span>\n ${this.createFieldContextualMenu(item)}\n </ui-list-item>`\n }\n\n protected createFieldContextualMenu(item: DomainAssociation | DomainProperty): TemplateResult {\n const disabled = !this.canEdit\n return html`\n <div\n class=\"field-menu\"\n slot=\"end\"\n @click=\"${cancelEvent}\"\n @keydown=\"${cancelEvent}\"\n @keyup=\"${cancelEvent}\"\n @mousedown=\"${cancelEvent}\"\n @mouseup=\"${cancelEvent}\"\n @pointerdown=\"${cancelEvent}\"\n @pointerup=\"${cancelEvent}\"\n @contextmenu=\"${cancelEvent}\"\n @touchstart=\"${cancelEvent}\"\n @touchend=\"${cancelEvent}\"\n @touchcancel=\"${cancelEvent}\"\n >\n <ui-icon-button\n id=\"field-menu-anchor-${item.key}-menu\"\n popoverTarget=\"field-${item.key}-menu\"\n color=\"outlined\"\n aria-label=\"Field options\"\n ?disabled=\"${!this.canEdit}\"\n >\n <ui-icon>more_vert</ui-icon>\n </ui-icon-button>\n <ui-menu\n data-key=\"${item.key}\"\n data-kind=\"${item.kind}\"\n id=\"field-${item.key}-menu\"\n popover=\"auto\"\n @select=\"${this.handleFieldContextMenuSelect}\"\n >\n <ui-menu-item data-action=\"edit\" ?disabled=\"${disabled}\" lines=\"two\">\n <div>Edit</div>\n <div slot=\"supporting-text\">Edit the field properties</div>\n </ui-menu-item>\n <ui-menu-item data-action=\"duplicate\" ?disabled=\"${disabled}\" lines=\"two\">\n <div>Duplicate</div>\n <div slot=\"supporting-text\">Create a copy of this field</div>\n </ui-menu-item>\n ${when(\n item.kind === DomainPropertyKind,\n () =>\n html`<ui-menu-item data-action=\"convert\" ?disabled=\"${disabled}\" lines=\"two\">\n <div>Convert to association</div>\n <div slot=\"supporting-text\">Replaces this property with an association</div>\n </ui-menu-item>`,\n () =>\n html`<ui-menu-item data-action=\"convert\" ?disabled=\"${disabled}\" lines=\"two\">\n <div>Convert to property</div>\n <div slot=\"supporting-text\">Replaces this association with a property</div>\n </ui-menu-item>`\n )}\n <ui-divider></ui-divider>\n <ui-menu-item data-action=\"delete\" ?disabled=\"${disabled}\" lines=\"two\">\n <div>Delete</div>\n <div slot=\"supporting-text\">Remove the field from the schema</div>\n </ui-menu-item>\n </ui-menu>\n </div>\n `\n }\n\n protected renderDataGovernanceSection(model: DomainEntity): TemplateResult {\n // TODO: Add classification UI (data tagging)\n return html`<div class=\"data-gov-section\">\n <div class=\"data-gov-header\">\n <span class=\"label-large\">Data Governance</span>\n </div>\n ${this.renderTaxonomyInput(model)}\n </div>`\n }\n\n protected renderTaxonomyInput(model: DomainEntity): TemplateResult | typeof nothing {\n const allCategories = getSemanticsByCategory(SemanticScope.Entity)\n const selectedSemantics: EntitySemantic[] = []\n const filteredCategories: Record<string, EntitySemantic[]> = {}\n\n // Filter categories and semantics, excluding already selected ones\n for (const category of Object.keys(allCategories)) {\n const semantics = allCategories[category as SemanticCategory].filter((s) => {\n // Check if this semantic is already selected\n if (model.semantics.some((ms) => ms.id === s.id)) {\n selectedSemantics.push(s)\n return false\n }\n return true\n })\n\n if (semantics.length > 0) {\n filteredCategories[category] = semantics\n }\n }\n\n if (Object.keys(filteredCategories).length === 0 && selectedSemantics.length === 0) {\n return nothing\n }\n\n return html`<div class=\"taxonomy\">\n <ui-button\n id=\"taxonomy-menu-anchor\"\n popoverTarget=\"taxonomy-menu\"\n color=\"outlined\"\n aria-label=\"Add entity taxonomy\"\n ?disabled=\"${!this.canEdit}\"\n >\n <ui-icon slot=\"icon\">add</ui-icon>Add taxonomy\n </ui-button>\n <ui-menu popover=\"auto\" id=\"taxonomy-menu\" class=\"taxonomy-menu\" @select=\"${this.handleTaxonomySelect}\">\n ${this.renderTaxonomyCategories(filteredCategories)}\n </ui-menu>\n ${renderHelp('entity', 'taxonomy-select')}\n </div>\n ${this.renderSelectedSemantics(selectedSemantics)}`\n\n // const options: TemplateResult[] = []\n // let hasSelection = false\n // for (const semantic of Object.values(DataSemantics)) {\n // if (semantic.scope !== SemanticScope.Entity) {\n // continue\n // }\n // const has = model.semantics.some((s) => s.id === semantic.id)\n // if (has) {\n // hasSelection = true\n // }\n // options.push(\n // html`<ui-option value=\"${semantic.id}\" ?selected=\"${has}\">\n // <div>${semantic.displayName}</div>\n // <div slot=\"supporting-text\">${semantic.description}</div>\n // </ui-option>`\n // )\n // }\n // const support = 'Helps recognize what the entity represents'\n // return html`<div class=\"row input-row\">\n // <ui-select\n // label=\"Entity taxonomy\"\n // class=\"input\"\n // name=\"taxonomy\"\n // ?disabled=\"${!this.canEdit}\"\n // .supportingText=\"${support}\"\n // @change=\"${this.handleTaxonomyChange}\"\n // >\n // ${options}\n // ${hasSelection\n // ? html`<ui-icon slot=\"trailing-icon\" icon=\"cancel\" @click=\"${this.handleTaxonomyClear}\"></ui-icon>`\n // : nothing}\n // </ui-select>\n // ${renderHelp('entity', 'taxonomy-select')}\n // </div>`\n }\n\n protected renderSelectedSemantics(selected: EntitySemantic[]): TemplateResult | typeof nothing {\n if (selected.length === 0) {\n return nothing\n }\n const items = selected.map((semantic) => this.renderTaxonomyItem(semantic))\n return html`<div class=\"enabled-taxonomy\">${items}</div>`\n }\n\n protected renderTaxonomyItem(semantic: EntitySemantic): TemplateResult {\n const canEdit = this.canEdit\n return html`<div class=\"taxonomy-item\">\n <span class=\"label body-large\">${semantic.displayName}</span>\n ${semantic.hasConfig\n ? html`<ui-button color=\"text\" data-id=\"${semantic.id}\" ?disabled=\"${!canEdit}\">Configure</ui-button>`\n : nothing}\n ${canEdit\n ? html`<ui-icon-button\n type=\"button\"\n data-id=\"${semantic.id}\"\n @click=\"${this.handleDeleteTaxonomy}\"\n ?disabled=\"${!canEdit}\"\n ><ui-icon icon=\"deleteOutline\"></ui-icon\n ></ui-icon-button>`\n : nothing}\n </div>`\n }\n\n protected renderTaxonomyCategories(categories: Record<string, EntitySemantic[]>): TemplateResult[] {\n const items: TemplateResult[] = []\n const entries = Object.entries(categories)\n const cLen = entries.length\n\n entries.forEach(([categoryName, semantics], categoryIndex) => {\n // Add category title as a non-selectable menu item\n items.push(html` <div class=\"menu-category-title title-small\">${categoryName}</div> `)\n\n // Add semantics from this category\n for (const semantic of semantics) {\n items.push(html`\n <ui-menu-item data-value=\"${semantic.id}\" lines=\"two\">\n <div>${semantic.displayName}</div>\n <div slot=\"supporting-text\">${semantic.description}</div>\n </ui-menu-item>\n `)\n }\n\n // Add divider after each category except the last one\n if (categoryIndex < cLen - 1) {\n items.push(html`<ui-divider></ui-divider>`)\n }\n })\n\n return items\n }\n}\n"]}