@acorex/platform 21.0.0-next.39 → 21.0.0-next.41

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 (59) hide show
  1. package/fesm2022/acorex-platform-common.mjs +6 -2
  2. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-core.mjs +8 -1
  4. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-domain.mjs +3 -0
  6. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-layout-builder.mjs +137 -34
  8. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-layout-components.mjs +25 -13
  10. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-designer.mjs +261 -58
  12. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-entity.mjs +1583 -632
  14. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-layout-widget-core.mjs +169 -85
  16. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  17. package/fesm2022/{acorex-platform-layout-widgets-repeater-widget-column.component-BGQqY5Mw.mjs → acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs} +9 -4
  18. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-layout-widgets.mjs +1053 -409
  20. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-runtime.mjs +120 -9
  22. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  23. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-Cvvr4HnL.mjs → acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs} +3 -3
  24. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs.map +1 -0
  25. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-TYoLN1Jq.mjs → acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs} +3 -3
  26. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs.map +1 -0
  27. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-C2z5Lq9y.mjs → acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs} +3 -3
  28. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-themes-default.mjs +10 -10
  30. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  31. package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-D13QB3Hr.mjs} +2 -2
  32. package/fesm2022/acorex-platform-themes-shared-settings.provider-D13QB3Hr.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs +94 -0
  34. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-BSmvnUVq.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs} +38 -16
  36. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-themes-shared.mjs +183 -84
  38. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  39. package/fesm2022/acorex-platform-workflow.mjs +52 -11
  40. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  41. package/package.json +1 -1
  42. package/types/acorex-platform-common.d.ts +14 -10
  43. package/types/acorex-platform-core.d.ts +13 -2
  44. package/types/acorex-platform-domain.d.ts +28 -2
  45. package/types/acorex-platform-layout-builder.d.ts +61 -29
  46. package/types/acorex-platform-layout-designer.d.ts +88 -16
  47. package/types/acorex-platform-layout-entity.d.ts +190 -15
  48. package/types/acorex-platform-layout-widget-core.d.ts +81 -71
  49. package/types/acorex-platform-layout-widgets.d.ts +131 -54
  50. package/types/acorex-platform-runtime.d.ts +156 -61
  51. package/types/acorex-platform-workflow.d.ts +37 -2
  52. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGQqY5Mw.mjs.map +0 -1
  53. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cvvr4HnL.mjs.map +0 -1
  54. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-TYoLN1Jq.mjs.map +0 -1
  55. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-C2z5Lq9y.mjs.map +0 -1
  56. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
  57. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-CHfrTtol.mjs +0 -65
  58. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-CHfrTtol.mjs.map +0 -1
  59. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BSmvnUVq.mjs.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/platform",
3
- "version": "21.0.0-next.39",
3
+ "version": "21.0.0-next.41",
4
4
  "peerDependencies": {
5
5
  "@acorex/cdk": "^19.0.0 || ^20.0.0 || ^21.0.0-next.0",
6
6
  "@acorex/core": "^19.0.0 || ^20.0.0 || ^21.0.0-next.0",
@@ -307,13 +307,8 @@ interface AXPRelatedEntity {
307
307
  entity: string;
308
308
  title?: string;
309
309
  icon?: string;
310
- /**
311
- * Either a list of property names, or full table column metadata (`AXPEntityTableColumn`).
312
- * For table columns, use `options.visible` as boolean or expression string (evaluated on parent detail).
313
- */
314
310
  columns?: string[] | AXPEntityTableColumn[];
315
311
  properties?: string[];
316
- /** Exclude these properties from the related entity (for merge-detail) */
317
312
  excludeProperties?: string[];
318
313
  layout?: {
319
314
  type: 'tab-detail' | 'tab-list' | 'page-detail' | 'page-list' | 'merge-detail';
@@ -321,13 +316,21 @@ interface AXPRelatedEntity {
321
316
  position?: 'before' | 'after' | 'middle';
322
317
  };
323
318
  conditions?: AXPQueryFilter[];
324
- /**
325
- * Optional toolbar filter definitions merged when the related list is built.
326
- * Entries matching an existing property `field` override/extend that filter definition.
327
- */
328
319
  customFilterDefinitions?: Partial<AXPFilterDefinition>[];
329
- hidden?: boolean | string;
320
+ hidden?: boolean | AXPExpression;
330
321
  actions?: AXPEntityAction[];
322
+ /**
323
+ * Controls inclusion on the host entity master **create** / **update** form.
324
+ * Defaults depend on layout:
325
+ * - **merge-detail**: omitted flags behave as **true** (opt-out with `false`).
326
+ * - **tab-list** / **page-list**: omitted flags behave as **false** (opt-in with `true`).
327
+ */
328
+ appearOn?: {
329
+ /** Include on host create form (see defaults above per layout type). */
330
+ create?: boolean;
331
+ /** Include on host update form (see defaults above per layout type). */
332
+ update?: boolean;
333
+ };
331
334
  /**
332
335
  * Relationship-level persistence strategy for merge-detail data.
333
336
  * Defaults:
@@ -346,6 +349,7 @@ interface AXPRelatedEntity {
346
349
  cascade?: {
347
350
  delete?: 'none' | 'orphans' | 'all';
348
351
  };
352
+ foreignKeyField?: string;
349
353
  };
350
354
  }
351
355
  interface AXPEntityPage {
@@ -920,6 +920,17 @@ type AXPExpression = string;
920
920
  * `{ "en-US": "<p>Pick one</p>", "fa-IR": "<p>یکی را انتخاب کنید</p>" }`
921
921
  */
922
922
  type AXPMultiLanguageString = AXMultiLanguageString;
923
+ /**
924
+ * Shared category descriptor for widgets, query catalog tooling, and other definition groupings.
925
+ */
926
+ interface AXPDefinitionCategory {
927
+ name: string;
928
+ title: AXPMultiLanguageString;
929
+ order: number;
930
+ icon?: string;
931
+ }
932
+ /** Normalizes definition categories to an array for iteration and serialization. */
933
+ declare function normalizeDefinitionCategories(categories?: AXPDefinitionCategory | AXPDefinitionCategory[]): AXPDefinitionCategory[];
923
934
  type AXPMetaData = Record<string, any>;
924
935
  type AXPOptionsData<T extends Record<string, unknown> = Record<string, any>> = T;
925
936
  interface AXPValueUnit {
@@ -2867,5 +2878,5 @@ declare function containsHtmlMarkup(value: string | null | undefined): boolean;
2867
2878
  */
2868
2879
  declare function generateKebabCase(title: string): string;
2869
2880
 
2870
- export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPColorPaletteProvider, AXPColorPaletteService, AXPColumnWidthService, AXPComponentLogoConfig, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPContentCheckerDirective, AXPContextChangeEvent, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDblClickDirective, AXPDefaultColorPalettesProvider, AXPDeviceService, AXPDeviceType, AXPDistributedEventListenerService, AXPElementDataDirective, AXPExportTemplateToken, AXPExpressionEvaluatorScopeProviderContext, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPFeatureDefinitionProviderContext, AXPGridLayoutDirective, AXPHookService, AXPIconLogoConfig, AXPImageUrlLogoConfig, AXPModuleManifestModule, AXPModuleManifestRegistry, AXPModuleManifestsDataSourceDefinition, AXPPlatformScope, AXPScreenSize, AXPSystemActionType, AXPSystemActions, AXPTagProvider, AXPTagService, AXP_ACTIVITY_LOG_PROVIDER, AXP_COLOR_PALETTE_PROVIDER, AXP_COLUMN_WIDTH_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER, AXP_SESSION_SERVICE, AXP_TAG_PROVIDER, MODULE_MANIFESTS_DATASOURCE_NAME, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, cleanDeep, compareMultiLanguageStrings, containsHtmlMarkup, createProviderWithInjectionContext, defaultColumnWidthProvider, extractNestedFieldsWildcard, extractTextFromHtml, extractValue, generateKebabCase, getActionButton, getChangedPaths, getDetailedChanges, getEnumValues, getNestedKeys, getSmart, getSystemActions, objectKeyValueTransforms, provideLazyProvider, resolveActionLook, resolvePlatformScopeKey, resolvePlatformScopeName, setSmart, sortByMultiLanguageString };
2871
- export type { AXPActionMenuItem, AXPActivityLog, AXPActivityLogChange, AXPApplicationUserReference, AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPCategorizedEntity, AXPCategorizedEntityDto, AXPCategoryEntity, AXPCategoryEntityWithItems, AXPCategoryListItem, AXPColorPalette, AXPColorPaletteFilterOptions, AXPColumnQuery, AXPColumnWidthMatcher, AXPColumnWidthProvider, AXPCommandMessage, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPContent, AXPContentDirection, AXPContentType, AXPContextData, AXPContextState, AXPDataSource, AXPDataSourceArray, AXPDataSourceDataFieldDefinition, AXPDataSourceDefinition, AXPDataSourceDefinitionProvider, AXPDataSourceSample, AXPDataSourceType, AXPDataSourceValue, AXPDataType, AXPDistributedEventListenerProvider, AXPDistributedEventListenerProviderToken, AXPEntityOp, AXPEntityReference, AXPEqualValidationRule, AXPExecuteCommand, AXPExecuteCommandResult, AXPExportCsvOptions, AXPExportExcelOptions, AXPExportOptions, AXPExportPdfOptions, AXPExportPrintOptions, AXPExpression, AXPExpressionEvaluatorScope, AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviders, AXPFeatureDefinition, AXPFeatureDefinitionProvider, AXPFeatureName, AXPFileListItem, AXPFileSource, AXPFileStatus, AXPFilterClause, AXPFilterDefinition, AXPFilterQuery, AXPFilterTriggerDefinition, AXPFlowDirection, AXPGridLayoutOptions, AXPGridPlacement, AXPISessionService, AXPLazyDataSource, AXPLogoConfig, AXPMaxLengthValidationRule, AXPMaybePromise, AXPMetaData, AXPMiddlewareErrorResponse, AXPMinLengthValidationRule, AXPModuleFeatureDefinition, AXPModuleFeatureDefinitionWithKey, AXPModuleManifest, AXPMultiLanguageString, AXPNavigateActionCommand, AXPNavigateActionOptions, AXPOptionsData, AXPPageStatus, AXPPagedListResult, AXPPartialNested, AXPPlatformScopeKey, AXPProperty, AXPPropertyGroup, AXPPropertyInterface, AXPQueryFetchResult, AXPQueryRequest, AXPReqexValidationRule, AXPRequiredValidationRule, AXPSortDefinition, AXPSortQuery, AXPStartUpTask, AXPStringValidationRules, AXPSystemAction, AXPTag, AXPTagFilterOptions, AXPUserReference, AXPValidationRule, AXPValidationRules, AXPValueTransformerFunction, AXPValueTransformerFunctions, AXPValueUnit, AXPValueUnits, AXPViewBlockDefinition, AXPViewDefinition, AXPViewFieldDefinition, AXPViewQuery, AXPWidgetTrigger, AXPWidgetTriggers, ColumnNameMatcher, ColumnWidthValue, IColumnWithWidth, WidgetTypeMatcher };
2881
+ export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPColorPaletteProvider, AXPColorPaletteService, AXPColumnWidthService, AXPComponentLogoConfig, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPContentCheckerDirective, AXPContextChangeEvent, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDblClickDirective, AXPDefaultColorPalettesProvider, AXPDeviceService, AXPDeviceType, AXPDistributedEventListenerService, AXPElementDataDirective, AXPExportTemplateToken, AXPExpressionEvaluatorScopeProviderContext, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPFeatureDefinitionProviderContext, AXPGridLayoutDirective, AXPHookService, AXPIconLogoConfig, AXPImageUrlLogoConfig, AXPModuleManifestModule, AXPModuleManifestRegistry, AXPModuleManifestsDataSourceDefinition, AXPPlatformScope, AXPScreenSize, AXPSystemActionType, AXPSystemActions, AXPTagProvider, AXPTagService, AXP_ACTIVITY_LOG_PROVIDER, AXP_COLOR_PALETTE_PROVIDER, AXP_COLUMN_WIDTH_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER, AXP_SESSION_SERVICE, AXP_TAG_PROVIDER, MODULE_MANIFESTS_DATASOURCE_NAME, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, cleanDeep, compareMultiLanguageStrings, containsHtmlMarkup, createProviderWithInjectionContext, defaultColumnWidthProvider, extractNestedFieldsWildcard, extractTextFromHtml, extractValue, generateKebabCase, getActionButton, getChangedPaths, getDetailedChanges, getEnumValues, getNestedKeys, getSmart, getSystemActions, normalizeDefinitionCategories, objectKeyValueTransforms, provideLazyProvider, resolveActionLook, resolvePlatformScopeKey, resolvePlatformScopeName, setSmart, sortByMultiLanguageString };
2882
+ export type { AXPActionMenuItem, AXPActivityLog, AXPActivityLogChange, AXPApplicationUserReference, AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPCategorizedEntity, AXPCategorizedEntityDto, AXPCategoryEntity, AXPCategoryEntityWithItems, AXPCategoryListItem, AXPColorPalette, AXPColorPaletteFilterOptions, AXPColumnQuery, AXPColumnWidthMatcher, AXPColumnWidthProvider, AXPCommandMessage, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPContent, AXPContentDirection, AXPContentType, AXPContextData, AXPContextState, AXPDataSource, AXPDataSourceArray, AXPDataSourceDataFieldDefinition, AXPDataSourceDefinition, AXPDataSourceDefinitionProvider, AXPDataSourceSample, AXPDataSourceType, AXPDataSourceValue, AXPDataType, AXPDefinitionCategory, AXPDistributedEventListenerProvider, AXPDistributedEventListenerProviderToken, AXPEntityOp, AXPEntityReference, AXPEqualValidationRule, AXPExecuteCommand, AXPExecuteCommandResult, AXPExportCsvOptions, AXPExportExcelOptions, AXPExportOptions, AXPExportPdfOptions, AXPExportPrintOptions, AXPExpression, AXPExpressionEvaluatorScope, AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviders, AXPFeatureDefinition, AXPFeatureDefinitionProvider, AXPFeatureName, AXPFileListItem, AXPFileSource, AXPFileStatus, AXPFilterClause, AXPFilterDefinition, AXPFilterQuery, AXPFilterTriggerDefinition, AXPFlowDirection, AXPGridLayoutOptions, AXPGridPlacement, AXPISessionService, AXPLazyDataSource, AXPLogoConfig, AXPMaxLengthValidationRule, AXPMaybePromise, AXPMetaData, AXPMiddlewareErrorResponse, AXPMinLengthValidationRule, AXPModuleFeatureDefinition, AXPModuleFeatureDefinitionWithKey, AXPModuleManifest, AXPMultiLanguageString, AXPNavigateActionCommand, AXPNavigateActionOptions, AXPOptionsData, AXPPageStatus, AXPPagedListResult, AXPPartialNested, AXPPlatformScopeKey, AXPProperty, AXPPropertyGroup, AXPPropertyInterface, AXPQueryFetchResult, AXPQueryRequest, AXPReqexValidationRule, AXPRequiredValidationRule, AXPSortDefinition, AXPSortQuery, AXPStartUpTask, AXPStringValidationRules, AXPSystemAction, AXPTag, AXPTagFilterOptions, AXPUserReference, AXPValidationRule, AXPValidationRules, AXPValueTransformerFunction, AXPValueTransformerFunctions, AXPValueUnit, AXPValueUnits, AXPViewBlockDefinition, AXPViewDefinition, AXPViewFieldDefinition, AXPViewQuery, AXPWidgetTrigger, AXPWidgetTriggers, ColumnNameMatcher, ColumnWidthValue, IColumnWithWidth, WidgetTypeMatcher };
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Type, EnvironmentProviders } from '@angular/core';
3
- import { AXPExpression, AXPMetaData, AXPDataType, AXPOptionsData, AXPValidationRules } from '@acorex/platform/core';
3
+ import { AXPExpression, AXPMetaData, AXPDataType, AXPOptionsData, AXPDefinitionCategory, AXPValidationRules } from '@acorex/platform/core';
4
4
  import * as i1 from '@acorex/platform/runtime';
5
5
 
6
6
  /**
@@ -307,6 +307,8 @@ interface AXPCommandRegistryRecord {
307
307
  * Omitted or empty means no declared surface; consumers may still apply legacy rules (e.g. AI `ai-tool` tag).
308
308
  */
309
309
  capabilities?: AXPCommandCapability[];
310
+ /** Optional grouping from build-time command metadata (`categories` on `defineCommand`). */
311
+ categories?: AXPDefinitionCategory[];
310
312
  }
311
313
 
312
314
  /**
@@ -334,6 +336,22 @@ interface AXPQueryRegistryRecord {
334
336
  * Omitted or empty means no declared surface; consumers may still apply legacy rules (e.g. AI `ai-tool` tag).
335
337
  */
336
338
  capabilities?: AXPCommandCapability[];
339
+ /** Optional grouping from build-time query metadata (`categories` on `defineQuery`). */
340
+ categories?: AXPDefinitionCategory[];
341
+ }
342
+
343
+ /**
344
+ * Persisted layout-widget catalog row (Dexie/Firestore via AXPEntityDefinitionCrudService).
345
+ * `name` is the widget registry name from build-time `defineWidget` metadata; `metadataJson` holds the full payload.
346
+ */
347
+ interface AXPWidgetCatalogRecord {
348
+ name: string;
349
+ active: boolean;
350
+ description?: string;
351
+ /** Localized / catalog title from metadata `title`. */
352
+ catalogTitle?: string;
353
+ /** Pretty-printed JSON of full widget metadata (`defineWidget` sidecar). */
354
+ metadataJson?: string;
337
355
  }
338
356
 
339
357
  /**
@@ -437,6 +455,14 @@ interface AXPEntityDefinitionCrudService {
437
455
  createQuery(id: string, definition: AXPQueryRegistryRecord): Promise<void>;
438
456
  updateQuery(id: string, definition: AXPQueryRegistryRecord): Promise<void>;
439
457
  deleteQuery(id: string): Promise<void>;
458
+ listWidgets(): Promise<Array<{
459
+ id: string;
460
+ definition: AXPWidgetCatalogRecord;
461
+ }>>;
462
+ getWidget(id: string): Promise<AXPWidgetCatalogRecord | null>;
463
+ createWidget(id: string, definition: AXPWidgetCatalogRecord): Promise<void>;
464
+ updateWidget(id: string, definition: AXPWidgetCatalogRecord): Promise<void>;
465
+ deleteWidget(id: string): Promise<void>;
440
466
  }
441
467
  declare const AXP_ENTITY_DEFINITION_CRUD_SERVICE: InjectionToken<AXPEntityDefinitionCrudService | null>;
442
468
 
@@ -2350,4 +2376,4 @@ declare function provideDomainMiddleware(config: {
2350
2376
  }): EnvironmentProviders;
2351
2377
 
2352
2378
  export { AXPAggregateModel, AXPDomainActionSide, AXPDomainMiddlewareContext, AXPDomainModule, AXPDomainRegistry, AXPDomainService, AXPEntityCommandScope, AXPEntityFieldModel, AXPEntityModel, AXPEntityType, AXPModuleHelper, AXPModuleModel, AXPPropertyMiddlewareContext, AXPPropertyModel, AXPPropertyRegistry, AXPPropertyService, AXPRelationModel, AXPRelationshipCardinality, AXPRelationshipKind, AXP_AGGREGATE_MIDDLEWARE_SETUP, AXP_ENTITY_CRUD_SETUP, AXP_ENTITY_DEFINITION_CRUD_SERVICE, AXP_ENTITY_MIDDLEWARE_SETUP, AXP_MODULE_MIDDLEWARE_SETUP, AXP_PROPERTY_EXTENSION, AXP_PROPERTY_LOADER_SETUP, AXP_PROPERTY_MIDDLEWARE_SETUP, AXP_PROPERTY_SETUP, provideAggregateMiddleware, provideDomainLoader, provideDomainLoaders, provideDomainMiddleware, provideEntityMiddleware, provideModuleMiddleware, providePropertiesFromFactory, provideProperty, providePropertyLoaders, providePropertyMiddleware, providePropertySetups, toPropertyDefinition };
2353
- export type { AXPAggregateDefinition, AXPAggregateEntityList, AXPCommandCapability, AXPCommandRegistryRecord, AXPDomainAction, AXPDomainDefinition, AXPDomainLoader, AXPDomainLoaderConfig, AXPDomainMiddleware, AXPDomainPathInfo, AXPDomainRealtedModuleEntity, AXPEntityDefinition, AXPEntityDefinitionCrudService, AXPEntityPropertyDefinition, AXPEntityPropertyFeatures, AXPInterfaceCategory, AXPInterfaceDefinition, AXPInterfaceDefinitionValue, AXPMenuDefinitionEntityListRef, AXPMenuDefinitionRecord, AXPMenuDefinitionStoredCommand, AXPModuleDefinition, AXPPermissionDefinitionRecord, AXPPermissionGroupDefinitionRecord, AXPPermissionLeafRecord, AXPPluginDefinition, AXPPluginDefinitionValue, AXPPropertyDefinition, AXPPropertyEntry, AXPPropertyFeatures, AXPPropertyLoader, AXPPropertyLoaderConfig, AXPPropertyMiddleware, AXPPropertyMiddlewareEntry, AXPPropertyRegistrationOptions, AXPQueryRegistryRecord, AXPRegisteredProperty, AXPRelationDefinition, AXPValidationRuleDefinition, AXPValidationRuleValue, AXPValidationRunAt };
2379
+ export type { AXPAggregateDefinition, AXPAggregateEntityList, AXPCommandCapability, AXPCommandRegistryRecord, AXPDomainAction, AXPDomainDefinition, AXPDomainLoader, AXPDomainLoaderConfig, AXPDomainMiddleware, AXPDomainPathInfo, AXPDomainRealtedModuleEntity, AXPEntityDefinition, AXPEntityDefinitionCrudService, AXPEntityPropertyDefinition, AXPEntityPropertyFeatures, AXPInterfaceCategory, AXPInterfaceDefinition, AXPInterfaceDefinitionValue, AXPMenuDefinitionEntityListRef, AXPMenuDefinitionRecord, AXPMenuDefinitionStoredCommand, AXPModuleDefinition, AXPPermissionDefinitionRecord, AXPPermissionGroupDefinitionRecord, AXPPermissionLeafRecord, AXPPluginDefinition, AXPPluginDefinitionValue, AXPPropertyDefinition, AXPPropertyEntry, AXPPropertyFeatures, AXPPropertyLoader, AXPPropertyLoaderConfig, AXPPropertyMiddleware, AXPPropertyMiddlewareEntry, AXPPropertyRegistrationOptions, AXPQueryRegistryRecord, AXPRegisteredProperty, AXPRelationDefinition, AXPValidationRuleDefinition, AXPValidationRuleValue, AXPValidationRunAt, AXPWidgetCatalogRecord };
@@ -1,4 +1,4 @@
1
- import * as i0 from '@angular/core';
1
+ import * as _angular_core from '@angular/core';
2
2
  import { OnInit, EventEmitter } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { AXFormComponent } from '@acorex/components/form';
@@ -65,7 +65,7 @@ interface AXPDialogRef {
65
65
  /**
66
66
  * Manually close the dialog (optional - dialog closes automatically after user interaction)
67
67
  */
68
- close(): void;
68
+ close(result?: any): void;
69
69
  /**
70
70
  * Get the form data from the dialog
71
71
  */
@@ -78,6 +78,17 @@ interface AXPDialogRef {
78
78
  * Set the loading state of the dialog
79
79
  */
80
80
  setLoading(loading: boolean): void;
81
+ /**
82
+ * Deep-merge partial values into the dialog layout context (e.g. after create returns an id).
83
+ */
84
+ patchContext?(partial: Record<string, unknown>): void;
85
+ /**
86
+ * Invoke a registered widget's public `api()` method (e.g. step-wizard `next`).
87
+ */
88
+ invokeWidget?(widgetName: string, method: string, options?: {
89
+ setLoading?: (loading: boolean) => void;
90
+ close?: (result?: any) => void;
91
+ }): Promise<void>;
81
92
  }
82
93
  interface LayoutWidgetOptions {
83
94
  name?: string;
@@ -228,12 +239,18 @@ interface AXPFieldsetContainerOptions extends LayoutWidgetOptions {
228
239
  isOpen?: boolean;
229
240
  look?: 'fieldset' | 'card' | 'group' | 'container';
230
241
  disabled?: boolean;
242
+ showTitle?: boolean;
231
243
  showHeader?: boolean;
232
244
  cols?: number;
233
245
  }
246
+ /** How optional `hint` text is rendered in `form-field` layout widgets. */
247
+ type AXPFormFieldHintDisplayMode = 'icon' | 'note';
234
248
  interface AXPFormFieldOptions extends LayoutWidgetOptions {
235
249
  label?: string;
236
250
  showLabel?: boolean;
251
+ /** Translated/helper copy; pairing with {@link hintDisplayMode}. */
252
+ hint?: AXPMultiLanguageString;
253
+ hintDisplayMode?: AXPFormFieldHintDisplayMode;
237
254
  }
238
255
  interface AXPDialogContainerOptions extends LayoutWidgetOptions {
239
256
  title?: string;
@@ -246,6 +263,10 @@ interface RichTextOptions extends ValueWidgetOptions {
246
263
  placeholder?: AXPMultiLanguageString;
247
264
  toolbar?: string[];
248
265
  readonly?: boolean;
266
+ /** Max height (px) for scrollable full preview when `showFullContent` is true. */
267
+ height?: number;
268
+ /** When true, view mode renders full HTML in a scrollable area instead of a truncated snippet. */
269
+ showFullContent?: boolean;
249
270
  }
250
271
  interface PasswordBoxOptions extends ValueWidgetOptions {
251
272
  placeholder?: AXPMultiLanguageString;
@@ -650,38 +671,43 @@ declare class AXPLayoutRendererComponent implements OnInit {
650
671
  /**
651
672
  * Form definition containing groups and fields OR widget tree
652
673
  */
653
- layout: i0.InputSignal<AXPWidgetNode | AXPDynamicFormDefinition>;
674
+ layout: _angular_core.InputSignal<AXPWidgetNode | AXPDynamicFormDefinition>;
654
675
  /**
655
676
  * Form context/model data
656
677
  */
657
- context: i0.ModelSignal<any>;
678
+ context: _angular_core.ModelSignal<any>;
658
679
  /**
659
680
  * Form appearance and density styling (normal, compact, spacious)
660
681
  */
661
- look: i0.InputSignal<AXPDynamicFormLook>;
682
+ look: _angular_core.InputSignal<AXPDynamicFormLook>;
662
683
  /**
663
684
  * Default form mode. Can be overridden by section/group and field.
664
685
  */
665
- mode: i0.InputSignal<AXPDynamicFormMode>;
666
- protected widgetTree: i0.WritableSignal<AXPWidgetNode | null>;
686
+ mode: _angular_core.InputSignal<AXPDynamicFormMode>;
687
+ protected widgetTree: _angular_core.WritableSignal<AXPWidgetNode | null>;
688
+ /**
689
+ * Prefer explicit {@link AXPWidgetNode.mode} on the root node (e.g. dialog flex `mode('view')`)
690
+ * so nested widgets resolve view vs edit correctly; fall back to the layout `mode` input.
691
+ */
692
+ protected effectiveRenderMode: _angular_core.Signal<"view" | "edit" | "column" | "designer" | "print" | "filter">;
667
693
  /**
668
694
  * Convert layout data to widget tree when inputs change
669
695
  */
670
- conversionEffect: i0.EffectRef;
696
+ conversionEffect: _angular_core.EffectRef;
671
697
  /**
672
698
  * Emitted when context change is initiated
673
699
  */
674
- contextInitiated: i0.OutputEmitterRef<any>;
700
+ contextInitiated: _angular_core.OutputEmitterRef<any>;
675
701
  /**
676
702
  * Emitted when form becomes valid/invalid
677
703
  */
678
- validityChange: i0.OutputEmitterRef<boolean>;
704
+ validityChange: _angular_core.OutputEmitterRef<boolean>;
679
705
  private form;
680
706
  private container;
681
707
  /**
682
708
  * Internal context signal for reactivity
683
709
  */
684
- protected internalContext: i0.WritableSignal<any>;
710
+ protected internalContext: _angular_core.WritableSignal<any>;
685
711
  /**
686
712
  * Initial context for reset functionality
687
713
  */
@@ -735,14 +761,14 @@ declare class AXPLayoutRendererComponent implements OnInit {
735
761
  * Type guard to check if the input is a widget node
736
762
  */
737
763
  private isWidgetNode;
738
- static ɵfac: i0.ɵɵFactoryDeclaration<AXPLayoutRendererComponent, never>;
739
- static ɵcmp: i0.ɵɵComponentDeclaration<AXPLayoutRendererComponent, "axp-layout-renderer", never, { "layout": { "alias": "layout"; "required": true; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "context": "contextChange"; "contextInitiated": "contextInitiated"; "validityChange": "validityChange"; }, never, never, true, never>;
764
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutRendererComponent, never>;
765
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLayoutRendererComponent, "axp-layout-renderer", never, { "layout": { "alias": "layout"; "required": true; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "context": "contextChange"; "contextInitiated": "contextInitiated"; "validityChange": "validityChange"; }, never, never, true, never>;
740
766
  }
741
767
 
742
768
  declare class LayoutBuilderModule {
743
- static ɵfac: i0.ɵɵFactoryDeclaration<LayoutBuilderModule, never>;
744
- static ɵmod: i0.ɵɵNgModuleDeclaration<LayoutBuilderModule, never, [typeof i1.CommonModule, typeof AXPLayoutRendererComponent], [typeof AXPLayoutRendererComponent]>;
745
- static ɵinj: i0.ɵɵInjectorDeclaration<LayoutBuilderModule>;
769
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutBuilderModule, never>;
770
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<LayoutBuilderModule, never, [typeof i1.CommonModule, typeof AXPLayoutRendererComponent], [typeof AXPLayoutRendererComponent]>;
771
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<LayoutBuilderModule>;
746
772
  }
747
773
 
748
774
  declare class AXPLayoutBuilderService {
@@ -751,8 +777,8 @@ declare class AXPLayoutBuilderService {
751
777
  * Create a new layout builder
752
778
  */
753
779
  create(): ILayoutBuilder;
754
- static ɵfac: i0.ɵɵFactoryDeclaration<AXPLayoutBuilderService, never>;
755
- static ɵprov: i0.ɵɵInjectableDeclaration<AXPLayoutBuilderService>;
780
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutBuilderService, never>;
781
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPLayoutBuilderService>;
756
782
  }
757
783
 
758
784
  declare class AXPLayoutConversionService {
@@ -817,8 +843,8 @@ declare class AXPLayoutConversionService {
817
843
  * Create a simple hash from a string
818
844
  */
819
845
  private createSimpleHash;
820
- static ɵfac: i0.ɵɵFactoryDeclaration<AXPLayoutConversionService, never>;
821
- static ɵprov: i0.ɵɵInjectableDeclaration<AXPLayoutConversionService>;
846
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutConversionService, never>;
847
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPLayoutConversionService>;
822
848
  }
823
849
 
824
850
  interface DialogRendererConfig {
@@ -849,12 +875,12 @@ declare class AXPDialogRendererComponent extends AXBasePageComponent implements
849
875
  private widgetCoreService;
850
876
  private expressionEvaluator;
851
877
  private dialogResult?;
852
- context: i0.WritableSignal<any>;
878
+ context: _angular_core.WritableSignal<any>;
853
879
  callBack: (dialogRef: AXPDialogRef) => void;
854
880
  data: any;
855
881
  private isDialogLoading;
856
- footerPrefix: i0.WritableSignal<AXPWidgetCoreElementAction[]>;
857
- footerSuffix: i0.WritableSignal<AXPWidgetCoreElementAction[]>;
882
+ footerPrefix: _angular_core.WritableSignal<AXPWidgetCoreElementAction[]>;
883
+ footerSuffix: _angular_core.WritableSignal<AXPWidgetCoreElementAction[]>;
858
884
  ngOnInit(): void;
859
885
  private layoutRenderer;
860
886
  private debounceTimer?;
@@ -865,19 +891,25 @@ declare class AXPDialogRendererComponent extends AXBasePageComponent implements
865
891
  isFormLoading(): boolean;
866
892
  isSubmitting(): boolean;
867
893
  executeAction(action: AXPWidgetCoreElementAction): Promise<void>;
894
+ /** Whether the layout form should be validated before running this footer command. */
895
+ private shouldValidateBeforeAction;
896
+ private createDialogRef;
897
+ private closeWithOptionalSkipValidate;
868
898
  /** Resolves footer/widget action command to a string (e.g. `cancel`, `submit`, `widget:...`). */
869
899
  private resolveActionCommandName;
870
900
  private parseWidgetCommand;
871
- private executeWidgetApi;
901
+ private invokeWidget;
872
902
  close(result?: DialogRendererResult): Promise<void>;
873
903
  private aggregateAndEvaluateActions;
874
904
  private collectWidgetActions;
875
905
  private collectDialogActionsFromConfig;
876
906
  private evaluatePredicates;
877
907
  private evalBool;
908
+ /** Resolves footer action title when it contains {{ ... }} (e.g. wizard labels from dialog context). */
909
+ private evalActionTitle;
878
910
  private resolveApi;
879
- static ɵfac: i0.ɵɵFactoryDeclaration<AXPDialogRendererComponent, never>;
880
- static ɵcmp: i0.ɵɵComponentDeclaration<AXPDialogRendererComponent, "axp-dialog-renderer", never, {}, { "result": "result"; }, never, never, true, never>;
911
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDialogRendererComponent, never>;
912
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDialogRendererComponent, "axp-dialog-renderer", never, {}, { "result": "result"; }, never, never, true, never>;
881
913
  }
882
914
 
883
915
  /** Registration key for {@link AXPPreviewWidgetFieldCommand}; lives alone so `LayoutBuilderModule` can reference it without static-importing the command implementation. */
@@ -917,9 +949,9 @@ declare class AXPPreviewWidgetFieldCommand implements AXPCommand<AXPPreviewWidge
917
949
  private resolveFieldTitleLabel;
918
950
  private isCancelDialogOutcome;
919
951
  private resolveWidgetDisplayTitle;
920
- static ɵfac: i0.ɵɵFactoryDeclaration<AXPPreviewWidgetFieldCommand, never>;
921
- static ɵprov: i0.ɵɵInjectableDeclaration<AXPPreviewWidgetFieldCommand>;
952
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPreviewWidgetFieldCommand, never>;
953
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPPreviewWidgetFieldCommand>;
922
954
  }
923
955
 
924
956
  export { AXPDialogRendererComponent, AXPLayoutBuilderService, AXPLayoutConversionService, AXPLayoutRendererComponent, AXPPreviewWidgetFieldCommand, AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY, LayoutBuilderModule };
925
- export type { AXPDialogContainerOptions, AXPDialogRef, AXPDynamicFormDefinition, AXPDynamicFormDirection, AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition, AXPDynamicFormLook, AXPDynamicFormMode, AXPFieldsetContainerOptions, AXPFlexContainerOptions, AXPFormFieldOptions, AXPGridContainerOptions, AXPListWidgetColumn, AXPListWidgetOptions, AXPListWidgetRowCommand, AXPPageContainerOptions, AXPPanelContainerOptions, AXPPreviewWidgetFieldCommandInput, AXPStepDefinition, AXPStepWizardContainerOptions, AXPStepWizardDefinition, AXPStepWizardGuardPayload, AXPStepWizardStatus, AXPTabsetContainerOptions, AXPWidgetConfiguration, AXPWidgetNodeExtendedProperties, AXPWizardActionDefinition, AXPWizardActions, ColorBoxOptions, DateTimeBoxOptions, DialogBuilderState, DialogRendererConfig, DialogRendererResult, FormFieldBuilderState, IActionBuilder, IBaseContainerBuilder, IChildContainerBuilder, IDialogBuilder, IFieldsetContainerBuilder, IFlexContainerBuilder, IFormFieldBuilder, IGridContainerBuilder, ILayoutBuilder, ILayoutContainerBuilder, IListWidgetBuilder, IPageContainerBuilder, IPanelContainerBuilder, IStepBuilder, IStepWizardBuilder, ITabsetContainerBuilder, IWidgetBuilder, IWidgetContainerBuilder, InheritanceContext, InheritedProperties, LargeTextBoxOptions, LayoutBuilderState, LayoutWidgetOptions, LookupBoxOptions, NumberBoxOptions, PasswordBoxOptions, RichTextOptions, SelectBoxOptions, SelectionListOptions, TextBoxOptions, ToggleSwitchOptions, ValueWidgetOptions, WidgetBuilderState };
957
+ export type { AXPDialogContainerOptions, AXPDialogRef, AXPDynamicFormDefinition, AXPDynamicFormDirection, AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition, AXPDynamicFormLook, AXPDynamicFormMode, AXPFieldsetContainerOptions, AXPFlexContainerOptions, AXPFormFieldHintDisplayMode, AXPFormFieldOptions, AXPGridContainerOptions, AXPListWidgetColumn, AXPListWidgetOptions, AXPListWidgetRowCommand, AXPPageContainerOptions, AXPPanelContainerOptions, AXPPreviewWidgetFieldCommandInput, AXPStepDefinition, AXPStepWizardContainerOptions, AXPStepWizardDefinition, AXPStepWizardGuardPayload, AXPStepWizardStatus, AXPTabsetContainerOptions, AXPWidgetConfiguration, AXPWidgetNodeExtendedProperties, AXPWizardActionDefinition, AXPWizardActions, ColorBoxOptions, DateTimeBoxOptions, DialogBuilderState, DialogRendererConfig, DialogRendererResult, FormFieldBuilderState, IActionBuilder, IBaseContainerBuilder, IChildContainerBuilder, IDialogBuilder, IFieldsetContainerBuilder, IFlexContainerBuilder, IFormFieldBuilder, IGridContainerBuilder, ILayoutBuilder, ILayoutContainerBuilder, IListWidgetBuilder, IPageContainerBuilder, IPanelContainerBuilder, IStepBuilder, IStepWizardBuilder, ITabsetContainerBuilder, IWidgetBuilder, IWidgetContainerBuilder, InheritanceContext, InheritedProperties, LargeTextBoxOptions, LayoutBuilderState, LayoutWidgetOptions, LookupBoxOptions, NumberBoxOptions, PasswordBoxOptions, RichTextOptions, SelectBoxOptions, SelectionListOptions, TextBoxOptions, ToggleSwitchOptions, ValueWidgetOptions, WidgetBuilderState };
@@ -3,12 +3,12 @@ import * as _angular_core from '@angular/core';
3
3
  import { EventEmitter, OnChanges, OnDestroy, WritableSignal, NgZone, ComponentRef, SimpleChanges } from '@angular/core';
4
4
  import { AXBasePageComponent } from '@acorex/components/page';
5
5
  import { AXTabStripChangedEvent } from '@acorex/components/tabs';
6
+ import { AXPMultiLanguageString, AXPDefinitionCategory, AXPBroadcastEventService, AXPContextChangeEvent } from '@acorex/platform/core';
6
7
  import { AXPWidgetItemData, AXPWidgetItemClickEvent } from '@acorex/platform/layout/components';
7
8
  import * as _acorex_platform_layout_widget_core from '@acorex/platform/layout/widget-core';
8
- import { AXPWidgetConfig, AXPWidgetCategory, AXPWidgetGroupEnum, AXPWidgetNode, AXPBaseWidgetComponent, AXPWidgetRegistryService, AXPLayoutBaseWidgetComponent } from '@acorex/platform/layout/widget-core';
9
+ import { AXPWidgetConfig, AXPWidgetGroupEnum, AXPWidgetNode, AXPBaseWidgetComponent, AXPWidgetRegistryService, AXPLayoutBaseWidgetComponent } from '@acorex/platform/layout/widget-core';
9
10
  import { AXMenuItem } from '@acorex/components/menu';
10
11
  import { Subject } from 'rxjs';
11
- import { AXPBroadcastEventService, AXPContextChangeEvent } from '@acorex/platform/core';
12
12
  import { AXUnsubscriber } from '@acorex/core/utils';
13
13
  import { AXPClipBoardService, AXPSettingsService } from '@acorex/platform/common';
14
14
 
@@ -72,53 +72,93 @@ declare class AXPDesignerGridDrawerComponent {
72
72
  interface AXPDisplayWidgetConfig extends AXPWidgetConfig {
73
73
  pinned: boolean;
74
74
  }
75
+ interface AXPWidgetPickerSection {
76
+ trackKey: string;
77
+ title: AXPMultiLanguageString | null;
78
+ widgetItems: AXPWidgetItemData[];
79
+ }
75
80
  declare class AXPDesignerWidgetPickerComponent extends AXBasePageComponent {
81
+ private readonly injector;
76
82
  private settingsService;
77
83
  private readonly mlResolver;
78
84
  private readonly pinnedSettingKey;
85
+ /** Keeps the line indicator in sync when the selected index is set programmatically (e.g. restored tab). */
86
+ private readonly tabsHost;
87
+ constructor();
79
88
  protected readonly i18n: {
80
89
  readonly searchPlaceholder: "@form-template-management:designer.components.widget-picker.search-placeholder";
81
90
  readonly selectedCount: "@form-template-management:designer.components.widget-picker.selected-count";
82
91
  readonly tabAll: "@form-template-management:designer.components.widget-picker.tab-all";
92
+ readonly pinnedSectionTitle: "@form-template-management:designer.components.widget-picker.pinned-section-title";
83
93
  };
84
94
  protected searchTerm: _angular_core.ModelSignal<string>;
95
+ /** Populated by popup `data.tabPersistenceContext` (optional for tests). */
96
+ tabPersistenceContext?: string;
85
97
  private widgets;
86
98
  private allWidgets;
87
99
  private pinnedWidgets;
88
- private displayWidgets;
89
100
  protected selectedWidgets: _angular_core.WritableSignal<AXPDisplayWidgetConfig[]>;
101
+ protected currentTabIndex: _angular_core.WritableSignal<number>;
102
+ /** Avoid persisting spurious tab events before restore + first paint complete. */
103
+ private allowTabPersistence;
104
+ private displayWidgets;
90
105
  private orderedList;
91
106
  protected pinnedList: _angular_core.Signal<AXPDisplayWidgetConfig[]>;
92
107
  protected regularList: _angular_core.Signal<AXPDisplayWidgetConfig[]>;
93
108
  protected pinnedWidgetItems: _angular_core.Signal<AXPWidgetItemData[]>;
94
- protected regularWidgetItems: _angular_core.Signal<AXPWidgetItemData[]>;
95
- protected categories: _angular_core.Signal<AXPWidgetCategory[]>;
96
- protected tabs: _angular_core.Signal<AXPWidgetCategory[]>;
109
+ protected regularGroupedSections: _angular_core.Signal<AXPWidgetPickerSection[]>;
110
+ protected categories: _angular_core.Signal<AXPDefinitionCategory[]>;
111
+ protected tabs: _angular_core.Signal<AXPDefinitionCategory[]>;
97
112
  protected maxVisibleWidgets: _angular_core.Signal<number>;
98
- protected currentTabIndex: _angular_core.WritableSignal<number>;
99
- protected selectedTab: _angular_core.Signal<AXPWidgetCategory>;
113
+ protected selectedTab: _angular_core.Signal<AXPDefinitionCategory>;
114
+ protected pickerShellClass: _angular_core.Signal<string>;
100
115
  protected ngOnInit(): Promise<void>;
101
- protected handleTabChange(event: AXTabStripChangedEvent): void;
116
+ private lastTabSettingKey;
117
+ private restoreLastTabFromSettings;
118
+ /**
119
+ * `ax-tab-item` [active] updates labels, but `ax-tabs` keeps the underline from its own index until `select` runs.
120
+ */
121
+ private syncTabsStripToIndex;
122
+ private persistTabSelection;
123
+ /**
124
+ * Picks the primary parent category for the "All" tab (lowest `order` wins).
125
+ */
126
+ private primaryCategory;
127
+ private buildAllTabSections;
128
+ private buildCategoryTabSections;
129
+ protected handleTabChange(event: AXTabStripChangedEvent): Promise<void>;
102
130
  protected handleWidgetClick(clickEvent: AXPWidgetItemClickEvent): void;
103
131
  protected handleWidgetPinClick(clickEvent: AXPWidgetItemClickEvent): Promise<void>;
132
+ protected handleConfirmSelection(): void;
104
133
  protected isWidgetSelected(widget: AXPDisplayWidgetConfig): boolean;
105
134
  protected isWidgetItemSelected(widgetItem: AXPWidgetItemData): boolean;
106
- protected handleConfirmSelection(): void;
107
135
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDesignerWidgetPickerComponent, never>;
108
136
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDesignerWidgetPickerComponent, "ng-component", never, { "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; }, { "searchTerm": "searchTermChange"; }, never, never, true, never>;
109
137
  }
110
138
 
139
+ interface AXPWidgetPickerShowOptions {
140
+ groups: AXPWidgetGroupEnum[];
141
+ /** User-scoped last tab; unique per picker host (use `AXP_WIDGET_PICKER_TAB_CONTEXT`). */
142
+ tabPersistenceContext: string;
143
+ }
111
144
  declare class AXPWidgetPickerService {
112
145
  private popupService;
113
146
  private widgetRegistryService;
114
147
  private translationService;
115
- showPicker(options: {
116
- groups: AXPWidgetGroupEnum[];
117
- }): Promise<AXPWidgetNode[]>;
148
+ showPicker(options: AXPWidgetPickerShowOptions): Promise<AXPWidgetNode[]>;
118
149
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPickerService, never>;
119
150
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPWidgetPickerService>;
120
151
  }
121
152
 
153
+ /**
154
+ * Suffixes for `forms:widgets:picker:last-tab:{id}` user settings keys.
155
+ * Use one id per distinct widget-picker host (different tab strips / widget sets).
156
+ */
157
+ declare const AXP_WIDGET_PICKER_TAB_CONTEXT: {
158
+ readonly layoutDesignerFormElements: "layout-designer-form-elements";
159
+ readonly dashboardHome: "dashboard-home";
160
+ };
161
+
122
162
  type AXPDesignerMode = {
123
163
  id: 'designer';
124
164
  title: 'Designer';
@@ -248,7 +288,7 @@ declare class AXPDesignerService {
248
288
  readonly onRefresh: Subject<AXPDesignerRefreshEvent>;
249
289
  readonly onUpdate: Subject<AXPDesignerUpdateEvent>;
250
290
  readonly onFocused: Subject<AXPDesignerFocusEvent>;
251
- private templateId;
291
+ readonly templateId: _angular_core.WritableSignal<string | null>;
252
292
  private loadingStrategy;
253
293
  constructor();
254
294
  private can;
@@ -334,6 +374,38 @@ declare abstract class AXPDesignerConnector<T = string> {
334
374
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDesignerConnector<any>>;
335
375
  }
336
376
 
377
+ /**
378
+ * Distributed hooks for extending the layout designer header menu without coupling the designer library to feature modules.
379
+ *
380
+ * - {@link AXPLayoutDesignerHeaderMenuHookKeys.root}: top-level bar items (siblings of File, Edit, …).
381
+ * - {@link AXPLayoutDesignerHeaderMenuHookKeys.submenu}: extra items inside a top-level menu (`file`, `edit`, `run`, `help`).
382
+ */
383
+ declare const AXPLayoutDesignerHeaderMenuHookKeys: {
384
+ readonly root: "layout-designer.header-menu.root";
385
+ readonly submenu: "layout-designer.header-menu.submenu";
386
+ };
387
+ type AXPLayoutDesignerHeaderParentMenuId = 'file' | 'edit' | 'run' | 'help';
388
+ interface AXPLayoutDesignerHeaderMenuEntry {
389
+ id: string;
390
+ priority?: number;
391
+ /** i18n key (resolved by the menu host when set). */
392
+ labelKey?: string;
393
+ /** Plain label when no translation key is used. */
394
+ label?: string;
395
+ iconClass?: string;
396
+ run: () => void | Promise<void>;
397
+ }
398
+ interface AXPLayoutDesignerHeaderMenuRootPayload {
399
+ /** Current designer instance (typed as unknown to avoid circular imports in consumers). */
400
+ designer: unknown;
401
+ items: AXPLayoutDesignerHeaderMenuEntry[];
402
+ }
403
+ interface AXPLayoutDesignerHeaderMenuSubmenuPayload {
404
+ designer: unknown;
405
+ parentMenuId: AXPLayoutDesignerHeaderParentMenuId;
406
+ items: AXPLayoutDesignerHeaderMenuEntry[];
407
+ }
408
+
337
409
  declare const AXP_DESIGNER_COPY_MENU: AXMenuItem;
338
410
  declare const AXP_DESIGNER_CLONE_MENU: AXMenuItem;
339
411
  declare const AXP_DESIGNER_CUT_MENU: AXMenuItem;
@@ -424,5 +496,5 @@ declare class AXPLayoutDesignerPreviewComponent extends AXBasePageComponent {
424
496
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLayoutDesignerPreviewComponent, "axp-layout-preview", never, {}, {}, never, never, true, never>;
425
497
  }
426
498
 
427
- export { AXPDesignerAddWidgetButtonComponent, AXPDesignerAddWidgetLineButtonComponent, AXPDesignerAddWidgetMiniButtonComponent, AXPDesignerConnector, AXPDesignerFlexDrawerComponent, AXPDesignerGridDrawerComponent, AXPDesignerMessageKeys, AXPDesignerModes, AXPDesignerService, AXPDesignerWidgetPickerComponent, AXPLayoutDesignerComponent, AXPLayoutDesignerPreviewComponent, AXPLayoutDesignerPreviewViewerComponent, AXPTemplateLoadingStrategy, AXPWidgetDesignerRendererDirective, AXPWidgetPickerService, AXP_DESIGNER_ADD_WIDGET_MENU, AXP_DESIGNER_CLONE_MENU, AXP_DESIGNER_COPY_MENU, AXP_DESIGNER_CUT_MENU, AXP_DESIGNER_DELETE_WIDGET_MENU, AXP_DESIGNER_PASTE_MENU, AXP_DESIGNER_SAVE_AS_WIDGET_MENU, AXP_DESIGNER_SELECT_WIDGET_MENU, cloneWidgetMenu };
428
- export type { AXPDesignerAddNodeCommand, AXPDesignerAddNodeEvent, AXPDesignerContent, AXPDesignerFocusCommand, AXPDesignerFocusEvent, AXPDesignerMode, AXPDesignerPreviewMessage, AXPDesignerPreviewSize, AXPDesignerRefreshCommand, AXPDesignerRefreshEvent, AXPDesignerRegisterCommand, AXPDesignerSaveFormMessage, AXPDesignerSelectCommand, AXPDesignerSelectEvent, AXPDesignerUpdateCommand, AXPDesignerUpdateEvent, AXPDesignerWidgetComponent, AXPDisplayWidgetConfig };
499
+ export { AXPDesignerAddWidgetButtonComponent, AXPDesignerAddWidgetLineButtonComponent, AXPDesignerAddWidgetMiniButtonComponent, AXPDesignerConnector, AXPDesignerFlexDrawerComponent, AXPDesignerGridDrawerComponent, AXPDesignerMessageKeys, AXPDesignerModes, AXPDesignerService, AXPDesignerWidgetPickerComponent, AXPLayoutDesignerComponent, AXPLayoutDesignerHeaderMenuHookKeys, AXPLayoutDesignerPreviewComponent, AXPLayoutDesignerPreviewViewerComponent, AXPTemplateLoadingStrategy, AXPWidgetDesignerRendererDirective, AXPWidgetPickerService, AXP_DESIGNER_ADD_WIDGET_MENU, AXP_DESIGNER_CLONE_MENU, AXP_DESIGNER_COPY_MENU, AXP_DESIGNER_CUT_MENU, AXP_DESIGNER_DELETE_WIDGET_MENU, AXP_DESIGNER_PASTE_MENU, AXP_DESIGNER_SAVE_AS_WIDGET_MENU, AXP_DESIGNER_SELECT_WIDGET_MENU, AXP_WIDGET_PICKER_TAB_CONTEXT, cloneWidgetMenu };
500
+ export type { AXPDesignerAddNodeCommand, AXPDesignerAddNodeEvent, AXPDesignerContent, AXPDesignerFocusCommand, AXPDesignerFocusEvent, AXPDesignerMode, AXPDesignerPreviewMessage, AXPDesignerPreviewSize, AXPDesignerRefreshCommand, AXPDesignerRefreshEvent, AXPDesignerRegisterCommand, AXPDesignerSaveFormMessage, AXPDesignerSelectCommand, AXPDesignerSelectEvent, AXPDesignerUpdateCommand, AXPDesignerUpdateEvent, AXPDesignerWidgetComponent, AXPDisplayWidgetConfig, AXPLayoutDesignerHeaderMenuEntry, AXPLayoutDesignerHeaderMenuRootPayload, AXPLayoutDesignerHeaderMenuSubmenuPayload, AXPLayoutDesignerHeaderParentMenuId, AXPWidgetPickerShowOptions };