@acorex-platform/module-application-management-client 0.0.30 → 0.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/fesm2022/{acorex-platform-module-application-management-client-assign-features.command-BG986HtP.mjs → acorex-platform-module-application-management-client-assign-features.command-CcVvmbTe.mjs} +2 -2
  2. package/fesm2022/{acorex-platform-module-application-management-client-assign-features.command-BG986HtP.mjs.map → acorex-platform-module-application-management-client-assign-features.command-CcVvmbTe.mjs.map} +1 -1
  3. package/fesm2022/acorex-platform-module-application-management-client-contracts-entities-app-term.mjs +523 -0
  4. package/fesm2022/acorex-platform-module-application-management-client-contracts-entities-app-term.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-module-application-management-client-contracts-entities-app-version.mjs +378 -0
  6. package/fesm2022/acorex-platform-module-application-management-client-contracts-entities-app-version.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-module-application-management-client-contracts-entities-application.mjs +946 -0
  8. package/fesm2022/acorex-platform-module-application-management-client-contracts-entities-application.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-application-management-client-contracts-entities-edition.mjs +365 -0
  10. package/fesm2022/acorex-platform-module-application-management-client-contracts-entities-edition.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-application-management-client-contracts-entity-catalog-acorex-platform-module-application-management-client-contracts-entity-catalog-joJGmPZP.mjs +79 -0
  12. package/fesm2022/acorex-platform-module-application-management-client-contracts-entity-catalog-acorex-platform-module-application-management-client-contracts-entity-catalog-joJGmPZP.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-module-application-management-client-contracts-entity-catalog-app-term.entity-BfVDQrrt.mjs +466 -0
  14. package/fesm2022/acorex-platform-module-application-management-client-contracts-entity-catalog-app-term.entity-BfVDQrrt.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-module-application-management-client-contracts-entity-catalog-app-version.entity-BVuFZBZ0.mjs +321 -0
  16. package/fesm2022/acorex-platform-module-application-management-client-contracts-entity-catalog-app-version.entity-BVuFZBZ0.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-module-application-management-client-contracts-entity-catalog-application.entity-BYn6bLjH.mjs +889 -0
  18. package/fesm2022/acorex-platform-module-application-management-client-contracts-entity-catalog-application.entity-BYn6bLjH.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-module-application-management-client-contracts-entity-catalog-edition.entity-DOhvvPnU.mjs +308 -0
  20. package/fesm2022/acorex-platform-module-application-management-client-contracts-entity-catalog-edition.entity-DOhvvPnU.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-module-application-management-client-contracts-entity-catalog.mjs +2 -0
  22. package/fesm2022/acorex-platform-module-application-management-client-contracts-entity-catalog.mjs.map +1 -0
  23. package/fesm2022/{acorex-platform-module-application-management-client-features-editor.component-B5yrn7eX.mjs → acorex-platform-module-application-management-client-features-editor.component-D9Tfh0gb.mjs} +3 -2
  24. package/fesm2022/acorex-platform-module-application-management-client-features-editor.component-D9Tfh0gb.mjs.map +1 -0
  25. package/fesm2022/{acorex-platform-module-application-management-client-features-widget-edit.component-D_IBCjfM.mjs → acorex-platform-module-application-management-client-features-widget-edit.component-B9YJsZFp.mjs} +2 -2
  26. package/fesm2022/{acorex-platform-module-application-management-client-features-widget-edit.component-D_IBCjfM.mjs.map → acorex-platform-module-application-management-client-features-widget-edit.component-B9YJsZFp.mjs.map} +1 -1
  27. package/fesm2022/acorex-platform-module-application-management-client-local-entities.mjs +32 -0
  28. package/fesm2022/acorex-platform-module-application-management-client-local-entities.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-module-application-management-client.mjs +3 -24
  30. package/fesm2022/acorex-platform-module-application-management-client.mjs.map +1 -1
  31. package/package.json +25 -1
  32. package/types/acorex-platform-module-application-management-client-contracts-entities-app-term.d.ts +5 -0
  33. package/types/acorex-platform-module-application-management-client-contracts-entities-app-version.d.ts +5 -0
  34. package/types/acorex-platform-module-application-management-client-contracts-entities-application.d.ts +5 -0
  35. package/types/acorex-platform-module-application-management-client-contracts-entities-edition.d.ts +5 -0
  36. package/types/acorex-platform-module-application-management-client-contracts-entity-catalog.d.ts +10 -0
  37. package/types/acorex-platform-module-application-management-client-local-entities.d.ts +12 -0
  38. package/fesm2022/acorex-platform-module-application-management-client-features-editor.component-B5yrn7eX.mjs.map +0 -1
@@ -0,0 +1,12 @@
1
+ import * as _angular_core from '@angular/core';
2
+ export { applicationManagementLocalEntityCatalog } from '@acorex-platform/module-application-management-client/contracts/entity-catalog';
3
+
4
+ /**
5
+ * Registers application-management layouts on the client from packaged factories.
6
+ * Each `import()` targets a secondary entry so unused entities stay out of the
7
+ * bundle. Do not add this to the demo app; demo continues to load layouts via
8
+ * `Domain:GetEntityLayout`.
9
+ */
10
+ declare function provideApplicationManagementLocalEntities(): _angular_core.EnvironmentProviders;
11
+
12
+ export { provideApplicationManagementLocalEntities };
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-platform-module-application-management-client-features-editor.component-B5yrn7eX.mjs","sources":["../../../../libs/modules/application-management/client/src/lib/features/features-widget/features-editor.component.ts","../../../../libs/modules/application-management/client/src/lib/features/features-widget/features-editor.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport {\n Component,\n ViewEncapsulation,\n computed,\n inject,\n signal,\n input,\n output,\n OnInit,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport {\n AXPModuleManifestRegistry,\n AXPModuleManifest,\n AXPModuleFeatureDefinition,\n AXP_MODULE_TYPE,\n AXP_MODULE_DOMAIN,\n resolveModuleType,\n resolveModuleDomain,\n type AXPModuleType,\n} from '@acorex-platform/framework-client/core';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPApplicationInfoSettings } from '@acorex-platform/module-application-management-client/contracts';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype EditionModulesViewMode = 'type' | 'domain';\n\ntype ModuleListItem = AXPModuleManifest & {\n translatedTitle?: string;\n translatedDescription?: string;\n featureSearchText?: string;\n};\n\ntype ModuleGroupView = {\n id: string;\n titleKey: string;\n modules: ModuleListItem[];\n};\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst I18N = '@application-management:editions.modules-editor';\n\nconst TYPE_ORDER: AXPModuleType[] = [\n AXP_MODULE_TYPE.platform,\n AXP_MODULE_TYPE.domain,\n AXP_MODULE_TYPE.integration,\n];\n\nconst DOMAIN_ORDER: string[] = [\n AXP_MODULE_DOMAIN.platform,\n AXP_MODULE_DOMAIN.humanCapital,\n AXP_MODULE_DOMAIN.projectManagement,\n AXP_MODULE_DOMAIN.assetMaintenance,\n AXP_MODULE_DOMAIN.workplaceSafety,\n AXP_MODULE_DOMAIN.assessmentLearning,\n AXP_MODULE_DOMAIN.financeCommerce,\n AXP_MODULE_DOMAIN.customerSupplier,\n AXP_MODULE_DOMAIN.communication,\n AXP_MODULE_DOMAIN.ai,\n AXP_MODULE_DOMAIN.contentDocuments,\n AXP_MODULE_DOMAIN.data,\n AXP_MODULE_DOMAIN.operations,\n AXP_MODULE_DOMAIN.weather,\n AXP_MODULE_DOMAIN.sourceControl,\n AXP_MODULE_DOMAIN.general,\n];\n\n//#endregion\n\n//#region ----- Features Editor Component -----\n\n@Component({\n selector: 'axm-features-editor',\n templateUrl: './features-editor.component.html',\n styleUrl: './features-editor.component.css',\n imports: [\n CommonModule,\n FormsModule,\n AXFormModule,\n AXCheckBoxModule,\n AXLabelModule,\n AXTranslationModule,\n AXTooltipModule,\n AXSearchBoxModule,\n AXButtonGroupModule,\n AXButtonModule,\n AXDecoratorModule,\n AXPWidgetCoreModule,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n host: {\n class: 'axm-features-editor flex flex-col w-full min-h-0',\n },\n})\nexport class AXPFeaturesEditorComponent implements OnInit {\n //#region ----- Services & Dependencies -----\n\n private readonly manifestRegistry = inject(AXPModuleManifestRegistry);\n private readonly translationService = inject(AXTranslationService);\n private readonly settingsService = inject(AXPSettingsService);\n\n //#endregion\n\n //#region ----- Inputs / Outputs -----\n\n /** Initial value: { modules: string[], features: Record<string, any> } */\n initialValue = input<{ modules?: string[]; features?: Record<string, any> }>({});\n\n /** Whether the editor is in read-only mode */\n readOnly = input<boolean>(false);\n\n /** Event emitted when modules/features selection/values change */\n valueChanged = output<{ modules: string[]; features: Record<string, any> }>();\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly i18n = I18N;\n\n protected readonly searchTerm = signal('');\n\n protected readonly viewMode = signal<EditionModulesViewMode>('type');\n\n /** All available module manifests with translated titles */\n private readonly allModules = signal<ModuleListItem[]>([]);\n\n /** Selected module names */\n protected readonly selectedModules = signal<Set<string>>(new Set());\n\n /** Expanded module names */\n protected readonly expandedModules = signal<Set<string>>(new Set());\n\n /** Expanded feature full names */\n protected readonly expandedFeatures = signal<Set<string>>(new Set());\n\n /** Map of feature values: Record<featureName, featureValue> */\n protected readonly featureValues = signal<Record<string, any>>({});\n\n /** Cache for widget nodes to prevent re-creation and blinking */\n private readonly widgetNodeCache = new Map<string, AXPWidgetNode>();\n\n /** Cache for feature data to prevent re-computation */\n private readonly moduleFeaturesCache = new Map<\n string,\n Array<{\n key: string;\n fullName: string;\n definition: AXPModuleFeatureDefinition;\n isEnabled: boolean;\n widgetNode: AXPWidgetNode | null;\n }>\n >();\n\n /** Set of modules that are currently loading features */\n private readonly loadingFeatures = signal<Set<string>>(new Set());\n\n /** Signal to trigger change detection when features are loaded */\n private readonly featuresLoaded = signal<number>(0);\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n /** Required module names (always enabled, cannot be disabled) */\n protected readonly requiredModules = computed(() => {\n return new Set(this.allModules().filter((m) => m.required === true).map((m) => m.name));\n });\n\n /** Modules that are dependencies of selected modules (auto-selected and disabled) */\n protected readonly dependencyModules = computed(() => {\n const selected = this.selectedModules();\n const allManifests = this.manifestRegistry.getAll();\n const dependencySet = new Set<string>();\n\n for (const manifest of allManifests) {\n if (selected.has(manifest.name) && manifest.dependencies) {\n for (const dep of manifest.dependencies) {\n if (!dep.includes('.')) {\n dependencySet.add(dep);\n }\n }\n }\n }\n\n return dependencySet;\n });\n\n /** Always-available (required) modules matching the current search */\n protected readonly alwaysAvailableModules = computed(() => {\n return this.sortModules(\n this.allModules().filter((m) => m.required === true && this.matchesSearch(m)),\n );\n });\n\n /** Grouped non-required modules for the active view mode */\n protected readonly moduleGroups = computed((): ModuleGroupView[] => {\n const modules = this.sortModules(\n this.allModules().filter((m) => m.required !== true && this.matchesSearch(m)),\n );\n\n if (this.viewMode() === 'type') {\n return this.groupByType(modules);\n }\n return this.groupByDomain(modules);\n });\n\n protected readonly hasVisibleModules = computed(() => {\n return this.alwaysAvailableModules().length > 0 || this.moduleGroups().some((g) => g.modules.length > 0);\n });\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n ngOnInit() {\n // Sync paint only — never await settings/i18n/initialize on the critical path\n // (settings.get can hang on session ready and previously left the UI stuck).\n const manifests = this.manifestRegistry.getAll();\n this.allModules.set(\n manifests.map((manifest) => ({\n ...manifest,\n translatedTitle: manifest.title,\n translatedDescription: manifest.description || '',\n featureSearchText: '',\n })),\n );\n\n const initialValue = this.initialValue();\n const initialModules = new Set<string>(initialValue.modules || []);\n\n if (initialValue.features) {\n for (const featureKey of Object.keys(initialValue.features)) {\n const [moduleName] = featureKey.split(':');\n if (moduleName) {\n initialModules.add(moduleName);\n }\n }\n }\n\n this.requiredModules().forEach((moduleName) => {\n initialModules.add(moduleName);\n });\n\n this.ensureDependencies(initialModules);\n this.selectedModules.set(initialModules);\n\n if (initialValue.features) {\n this.featureValues.set(initialValue.features);\n }\n\n this.widgetNodeCache.clear();\n this.moduleFeaturesCache.clear();\n\n // Prefer sync cache — scoped get() can block on session/scope load.\n const cachedViewMode = this.settingsService.peekCached(\n AXPApplicationInfoSettings.EditionModulesViewMode,\n );\n if (cachedViewMode === 'type' || cachedViewMode === 'domain') {\n this.viewMode.set(cachedViewMode);\n }\n\n void this.hydrateAsync();\n }\n\n private async hydrateAsync(): Promise<void> {\n try {\n if (this.allModules().length === 0) {\n await this.manifestRegistry.initialize();\n const manifests = this.manifestRegistry.getAll();\n this.allModules.set(\n manifests.map((manifest) => ({\n ...manifest,\n translatedTitle: manifest.title,\n translatedDescription: manifest.description || '',\n featureSearchText: '',\n })),\n );\n this.requiredModules().forEach((moduleName) => {\n const selected = new Set(this.selectedModules());\n selected.add(moduleName);\n this.ensureDependencies(selected);\n this.selectedModules.set(selected);\n });\n }\n\n const modules = this.allModules();\n const enriched = await Promise.all(\n modules.map(async (module) => {\n let translatedTitle = module.title;\n try {\n translatedTitle =\n (await this.translationService.translateAsync(module.title)) || module.title;\n } catch {\n // keep raw title\n }\n return {\n ...module,\n translatedTitle,\n } satisfies ModuleListItem;\n }),\n );\n this.allModules.set(enriched);\n } catch (error) {\n console.warn('Features editor background hydrate failed', error);\n }\n }\n\n //#endregion\n\n //#region ----- Grouping & Search -----\n\n private matchesSearch(module: ModuleListItem): boolean {\n const term = String(this.searchTerm() ?? '')\n .trim()\n .toLowerCase();\n if (!term) {\n return true;\n }\n\n const haystack = [\n module.translatedTitle,\n module.translatedDescription,\n module.title,\n module.description,\n module.name,\n module.featureSearchText,\n ]\n .filter(Boolean)\n .join(' ')\n .toLowerCase();\n\n return haystack.includes(term);\n }\n\n private sortModules(modules: ModuleListItem[]): ModuleListItem[] {\n return [...modules].sort((a, b) => {\n const titleA = a.translatedTitle || a.title || '';\n const titleB = b.translatedTitle || b.title || '';\n return titleA.localeCompare(titleB, undefined, { sensitivity: 'base' });\n });\n }\n\n private groupByType(modules: ModuleListItem[]): ModuleGroupView[] {\n const buckets = new Map<AXPModuleType, ModuleListItem[]>();\n for (const type of TYPE_ORDER) {\n buckets.set(type, []);\n }\n\n for (const module of modules) {\n const type = resolveModuleType(module);\n const list = buckets.get(type) ?? [];\n list.push(module);\n buckets.set(type, list);\n }\n\n return TYPE_ORDER.filter((type) => (buckets.get(type)?.length ?? 0) > 0).map((type) => ({\n id: `type:${type}`,\n titleKey: `${I18N}.types.${type}`,\n modules: buckets.get(type) ?? [],\n }));\n }\n\n private groupByDomain(modules: ModuleListItem[]): ModuleGroupView[] {\n const buckets = new Map<string, ModuleListItem[]>();\n\n for (const module of modules) {\n const domain = resolveModuleDomain(module);\n const list = buckets.get(domain) ?? [];\n list.push(module);\n buckets.set(domain, list);\n }\n\n const known = DOMAIN_ORDER.filter((domain) => (buckets.get(domain)?.length ?? 0) > 0);\n const extra = [...buckets.keys()]\n .filter((domain) => !DOMAIN_ORDER.includes(domain))\n .sort((a, b) => a.localeCompare(b));\n\n return [...known, ...extra].map((domain) => ({\n id: `domain:${domain}`,\n titleKey: `${I18N}.domains.${domain}`,\n modules: buckets.get(domain) ?? [],\n }));\n }\n\n //#endregion\n\n //#region ----- Public API -----\n\n public getValue(): { modules: string[]; features: Record<string, any> } {\n return {\n modules: Array.from(this.selectedModules()),\n features: this.featureValues(),\n };\n }\n\n public setValue(value: { modules?: string[]; features?: Record<string, any> }): void {\n if (value.modules) {\n this.selectedModules.set(new Set(value.modules));\n }\n if (value.features) {\n this.featureValues.set(value.features);\n }\n this.emitValueChanged();\n }\n\n //#endregion\n\n //#region ----- Data Loading -----\n\n private createWidgetNode(definition: AXPModuleFeatureDefinition, fullName: string): AXPWidgetNode | null {\n if (!definition.interface) {\n return null;\n }\n\n const currentValue = this.featureValues()[fullName];\n const defaultValue =\n currentValue !== undefined && currentValue !== null ? currentValue : definition.defaultValue;\n\n let widgetNode = this.widgetNodeCache.get(fullName);\n\n if (!widgetNode) {\n widgetNode = {\n type: definition.interface.type,\n name: fullName,\n defaultValue: defaultValue,\n options: definition.interface.options || {},\n };\n this.widgetNodeCache.set(fullName, widgetNode);\n } else if (widgetNode.defaultValue !== defaultValue) {\n widgetNode.defaultValue = defaultValue;\n }\n\n return widgetNode;\n }\n\n private emitValueChanged(): void {\n this.valueChanged.emit(this.getValue());\n }\n\n private ensureDependencies(modules: Set<string>): void {\n const allManifests = this.manifestRegistry.getAll();\n let changed = true;\n\n while (changed) {\n changed = false;\n for (const manifest of allManifests) {\n if (modules.has(manifest.name) && manifest.dependencies) {\n for (const dep of manifest.dependencies) {\n if (!dep.includes('.') && !modules.has(dep)) {\n modules.add(dep);\n changed = true;\n }\n }\n }\n }\n }\n }\n\n protected getModuleFeatures(module: AXPModuleManifest): Array<{\n key: string;\n fullName: string;\n definition: AXPModuleFeatureDefinition;\n isEnabled: boolean;\n widgetNode: AXPWidgetNode | null;\n }> {\n this.featuresLoaded();\n\n const moduleFeatures = this.manifestRegistry.getModuleFeatures(module.name);\n if (moduleFeatures.length === 0) {\n return [];\n }\n\n const cacheKey = module.name;\n const currentValues = this.featureValues();\n const cached = this.moduleFeaturesCache.get(cacheKey);\n if (cached) {\n cached.forEach((feature) => {\n const currentValue = currentValues[feature.fullName];\n feature.isEnabled = currentValue !== undefined && currentValue !== null;\n\n if (feature.widgetNode) {\n const newDefaultValue =\n currentValue !== undefined && currentValue !== null\n ? currentValue\n : feature.definition.defaultValue;\n if (feature.widgetNode.defaultValue !== newDefaultValue) {\n feature.widgetNode.defaultValue = newDefaultValue;\n }\n }\n });\n return cached;\n }\n\n const features = moduleFeatures.map((featureDef) => {\n const fullName = featureDef.name;\n const shortKey = featureDef.key;\n const currentValue = currentValues[fullName];\n const isEnabled = currentValue !== undefined && currentValue !== null;\n const widgetNode = this.createWidgetNode(featureDef, fullName);\n\n return {\n key: shortKey,\n fullName,\n definition: featureDef,\n isEnabled,\n widgetNode,\n };\n });\n\n this.moduleFeaturesCache.set(cacheKey, features);\n return features;\n }\n\n private async loadModuleFeatures(module: AXPModuleManifest): Promise<void> {\n try {\n this.moduleFeaturesCache.delete(module.name);\n this.featuresLoaded.update((v) => v + 1);\n } finally {\n this.loadingFeatures.update((set) => {\n const newSet = new Set(set);\n newSet.delete(module.name);\n return newSet;\n });\n }\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onSearchTermChange(value: string | null | undefined): void {\n this.searchTerm.set(String(value ?? ''));\n }\n\n protected onViewModeChange(mode: EditionModulesViewMode): void {\n if (this.viewMode() === mode) {\n return;\n }\n this.viewMode.set(mode);\n // Fire-and-forget; do not block UI if scope load is slow.\n void this.settingsService\n .scope(AXPPlatformScope.User)\n .set(AXPApplicationInfoSettings.EditionModulesViewMode, mode)\n .catch((error) => {\n console.warn('Failed to persist edition modules view mode', error);\n });\n }\n\n protected toggleModule(module: AXPModuleManifest): void {\n const moduleName = module.name;\n const expanded = new Set(this.expandedModules());\n if (expanded.has(moduleName)) {\n expanded.delete(moduleName);\n } else {\n expanded.add(moduleName);\n if (!this.loadingFeatures().has(moduleName)) {\n this.loadingFeatures.update((set) => new Set(set).add(moduleName));\n this.loadModuleFeatures(module).catch((error) => {\n console.error(`Failed to refresh features for module ${moduleName}:`, error);\n });\n }\n }\n this.expandedModules.set(expanded);\n }\n\n protected toggleFeature(fullName: string): void {\n const expanded = new Set(this.expandedFeatures());\n if (expanded.has(fullName)) {\n expanded.delete(fullName);\n } else {\n expanded.add(fullName);\n }\n this.expandedFeatures.set(expanded);\n }\n\n protected isModuleExpanded(moduleName: string): boolean {\n return this.expandedModules().has(moduleName);\n }\n\n protected isFeatureExpanded(fullName: string): boolean {\n return this.expandedFeatures().has(fullName);\n }\n\n protected isModuleSelected(moduleName: string): boolean {\n if (this.selectedModules().has(moduleName)) {\n return true;\n }\n const featureValue = this.featureValues()[moduleName];\n return featureValue !== undefined && featureValue !== null;\n }\n\n protected isModuleRequired(moduleName: string): boolean {\n return this.requiredModules().has(moduleName);\n }\n\n protected isModuleDependency(moduleName: string): boolean {\n return this.dependencyModules().has(moduleName);\n }\n\n protected isModuleDisabled(moduleName: string): boolean {\n return this.isModuleRequired(moduleName) || this.isModuleDependency(moduleName);\n }\n\n protected canEnableModule(moduleName: string): boolean {\n const manifest = this.manifestRegistry.get(moduleName);\n if (!manifest?.dependencies || manifest.dependencies.length === 0) {\n return true;\n }\n\n const selected = this.selectedModules();\n const moduleDeps = manifest.dependencies.filter((dep) => !dep.includes('.'));\n return moduleDeps.every((dep) => selected.has(dep));\n }\n\n protected getMissingDependencies(moduleName: string): string[] {\n const manifest = this.manifestRegistry.get(moduleName);\n if (!manifest?.dependencies || manifest.dependencies.length === 0) {\n return [];\n }\n\n const selected = this.selectedModules();\n const moduleDeps = manifest.dependencies.filter((dep) => !dep.includes('.'));\n return moduleDeps.filter((dep) => !selected.has(dep));\n }\n\n protected getDependentModules(moduleName: string): string[] {\n const allManifests = this.manifestRegistry.getAll();\n return allManifests.filter((m) => m.dependencies?.includes(moduleName)).map((m) => m.name);\n }\n\n protected getModuleIcon(module: AXPModuleManifest): string {\n return module.icon || 'fa-light fa-cube';\n }\n\n protected hasModuleFeatures(module: AXPModuleManifest): boolean {\n return this.manifestRegistry.getModuleFeatures(module.name).length > 0;\n }\n\n protected onModuleToggle(module: AXPModuleManifest, event: AXValueChangedEvent): void {\n if (this.readOnly() || this.isModuleDisabled(module.name)) {\n return;\n }\n\n const selectedModules = new Set(this.selectedModules());\n const currentValues = { ...this.featureValues() };\n\n if (event.value) {\n selectedModules.add(module.name);\n currentValues[module.name] = true;\n this.ensureDependencies(selectedModules);\n\n if (!this.loadingFeatures().has(module.name)) {\n setTimeout(() => {\n this.loadingFeatures.update((set) => new Set(set).add(module.name));\n this.loadModuleFeatures(module).catch((error) => {\n console.error(`Failed to refresh features for module ${module.name}:`, error);\n this.loadingFeatures.update((set) => {\n const newSet = new Set(set);\n newSet.delete(module.name);\n return newSet;\n });\n });\n }, 0);\n }\n } else {\n const dependentModules = this.getDependentModules(module.name);\n const hasSelectedDependents = dependentModules.some((dep) => selectedModules.has(dep));\n\n if (hasSelectedDependents) {\n return;\n }\n\n selectedModules.delete(module.name);\n delete currentValues[module.name];\n }\n\n this.selectedModules.set(selectedModules);\n this.featureValues.set(currentValues);\n this.emitValueChanged();\n }\n\n protected onFeatureToggle(\n feature: {\n fullName: string;\n definition: AXPModuleFeatureDefinition;\n widgetNode: AXPWidgetNode | null;\n },\n event: AXValueChangedEvent,\n ): void {\n if (this.readOnly()) {\n return;\n }\n\n const currentValues = { ...this.featureValues() };\n\n if (event.value) {\n if (currentValues[feature.fullName] === undefined || currentValues[feature.fullName] === null) {\n currentValues[feature.fullName] = feature.definition.defaultValue;\n }\n } else {\n delete currentValues[feature.fullName];\n }\n\n this.featureValues.set(currentValues);\n this.emitValueChanged();\n }\n\n protected onFeatureValueChange(featureFullName: string, value: any): void {\n if (this.readOnly()) {\n return;\n }\n\n const currentValues = { ...this.featureValues() };\n currentValues[featureFullName] = value;\n this.featureValues.set(currentValues);\n this.emitValueChanged();\n }\n\n //#endregion\n}\n\n//#endregion\n","<!-- ----- Toolbar: search + view mode ----- -->\n<div class=\"axm-features-editor__toolbar\">\n <ax-search-box\n class=\"flex-1 min-w-[12rem]\"\n look=\"outline\"\n [placeholder]=\"(i18n + '.search-placeholder' | translate | async) || ''\"\n [ngModel]=\"searchTerm()\"\n [delayTime]=\"300\"\n (ngModelChange)=\"onSearchTermChange($event)\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n\n <ax-button-group selection=\"single\" look=\"outline\" class=\"shrink-0\">\n <ax-button-group-item\n [text]=\"(i18n + '.view-mode.type' | translate | async) ?? ''\"\n [selected]=\"viewMode() === 'type'\"\n [data]=\"'type'\"\n (onClick)=\"onViewModeChange('type')\">\n </ax-button-group-item>\n <ax-button-group-item\n [text]=\"(i18n + '.view-mode.domain' | translate | async) ?? ''\"\n [selected]=\"viewMode() === 'domain'\"\n [data]=\"'domain'\"\n (onClick)=\"onViewModeChange('domain')\">\n </ax-button-group-item>\n </ax-button-group>\n</div>\n\n<!-- ----- Module groups list ----- -->\n<div class=\"axm-features-editor__list overflow-auto\">\n <!--->\n <!-- ----- Empty search / filter result ----- -->\n @if (!hasVisibleModules()) {\n <div class=\"text-sm text-muted py-6 text-center\">\n {{ i18n + '.empty' | translate | async }}\n </div>\n }\n <!-- ----- Grouped modules with Always Available pinned first ----- -->\n @else {\n <!--->\n <!-- ----- Always available (required) modules ----- -->\n @if (alwaysAvailableModules().length > 0) {\n <section class=\"axm-features-editor__group\">\n <div class=\"axm-features-editor__group-title\">\n {{ i18n + '.always-available' | translate | async }}\n </div>\n <div class=\"flex flex-col gap-2\">\n @for (module of alwaysAvailableModules(); track module.name) {\n <ng-container *ngTemplateOutlet=\"moduleTemplate; context: { $implicit: module, level: 0 }\">\n </ng-container>\n }\n </div>\n </section>\n }\n\n @for (group of moduleGroups(); track group.id) {\n <section class=\"axm-features-editor__group\">\n <div class=\"axm-features-editor__group-title\">\n {{ group.titleKey | translate | async }}\n </div>\n <div class=\"flex flex-col gap-2\">\n @for (module of group.modules; track module.name) {\n <ng-container *ngTemplateOutlet=\"moduleTemplate; context: { $implicit: module, level: 0 }\">\n </ng-container>\n }\n </div>\n </section>\n }\n }\n</div>\n\n<!-- ----- Module row template ----- -->\n<ng-template #moduleTemplate let-module let-level=\"level\">\n <div class=\"flex flex-col\">\n <!-- ----- Module checkbox row ----- -->\n <div class=\"flex items-center gap-3 rounded hover:bg-surface-lowest\" [style.padding-left.px]=\"level * 32\">\n <span class=\"w-4\"></span>\n\n <ax-check-box\n [ngModel]=\"isModuleSelected(module.name)\"\n [readonly]=\"readOnly() || isModuleDisabled(module.name)\"\n [class.opacity-50]=\"isModuleDependency(module.name) && !isModuleRequired(module.name)\"\n (onValueChanged)=\"onModuleToggle(module, $event)\"\n (click)=\"$event.stopPropagation()\">\n </ax-check-box>\n\n <i [class]=\"getModuleIcon(module) + ' text-primary fa-fw'\"></i>\n\n <span class=\"flex-1 font-semibold\">{{ module.title | translate | async }}</span>\n\n <!--->\n <!-- ----- Required badge ----- -->\n @if (isModuleRequired(module.name)) {\n <span class=\"text-xs text-primary font-medium\">\n ({{ i18n + '.badges.required' | translate | async }})\n </span>\n }\n\n <!--->\n <!-- ----- Dependency badge ----- -->\n @if (isModuleDependency(module.name) && !isModuleRequired(module.name)) {\n <span class=\"text-xs text-secondary font-medium\">\n ({{ i18n + '.badges.dependency' | translate | async }})\n </span>\n }\n </div>\n\n <!--->\n <!-- ----- Nested features when module selected ----- -->\n @if (isModuleSelected(module.name) && hasModuleFeatures(module)) {\n <div class=\"flex flex-col gap-3 py-4 px-3\">\n @for (feature of getModuleFeatures(module); track feature.fullName) {\n <ng-container\n *ngTemplateOutlet=\"featureTemplate; context: { $implicit: feature, module: module, level: level + 1 }\">\n </ng-container>\n }\n </div>\n }\n </div>\n</ng-template>\n\n<!-- ----- Feature row template ----- -->\n<ng-template #featureTemplate let-feature let-module=\"module\" let-level=\"level\">\n <div class=\"flex flex-col\">\n <div class=\"flex items-start gap-3 rounded hover:bg-surface-lowest\" [style.padding-left.px]=\"level * 32\">\n <span class=\"w-4\"></span>\n\n <ax-check-box\n [ngModel]=\"feature.isEnabled\"\n [readonly]=\"readOnly()\"\n (onValueChanged)=\"onFeatureToggle(feature, $event)\"\n (click)=\"$event.stopPropagation()\">\n </ax-check-box>\n\n <div class=\"flex flex-col flex-1 gap-1.5\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa-light fa-toggle-on text-secondary\"></i>\n <span class=\"font-semibold\">{{ feature.definition.title | translate | async }}</span>\n </div>\n\n <!--->\n <!-- ----- Feature description ----- -->\n @if (feature.definition.description) {\n <div class=\"text-sm text-muted ms-6 leading-relaxed\">\n {{ feature.definition.description | translate | async }}\n </div>\n }\n\n <!--->\n <!-- ----- Feature config widget ----- -->\n @if (feature.isEnabled && feature.widgetNode) {\n <div class=\"mt-3 ms-6 ax-sm\">\n <ng-container\n axp-widget-renderer\n [node]=\"feature.widgetNode\"\n [mode]=\"readOnly() ? 'view' : 'edit'\"\n (onValueChanged)=\"onFeatureValueChange(feature.fullName, $event.widget.getValue())\">\n </ng-container>\n </div>\n }\n </div>\n </div>\n </div>\n</ng-template>\n"],"names":["i3","i6","i8"],"mappings":"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"}