@acorex/platform 20.8.9 → 20.8.11

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 (123) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +125 -27
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-common-common-settings.provider-DVvuLUfF.mjs → acorex-platform-common-common-settings.provider-Bi1RYif5.mjs} +30 -32
  4. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +711 -205
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +420 -127
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain.mjs +557 -826
  10. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +634 -114
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-CSxCnzwU.mjs → acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs} +9 -9
  14. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-layout-components.mjs +3365 -880
  16. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-designer.mjs +456 -204
  18. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity.mjs +18667 -14048
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +413 -171
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs +507 -441
  24. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  25. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-CPBzE96V.mjs → acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs} +10 -10
  26. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
  27. package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-Dtv6U3df.mjs → acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs} +21 -76
  28. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-QxJfswhK.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
  30. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-CVdssZBD.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
  32. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs +116 -0
  34. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-DVaZN9QN.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs} +5 -5
  36. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DPGHgXa6.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs} +4 -4
  38. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-CdiNW691.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs} +6 -6
  40. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-layout-widgets.mjs +6578 -4314
  42. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  43. package/fesm2022/acorex-platform-native.mjs +8 -7
  44. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  45. package/fesm2022/acorex-platform-runtime.mjs +391 -166
  46. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  47. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs +160 -0
  48. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs.map +1 -0
  49. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs +120 -0
  50. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs.map +1 -0
  51. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-rGsMVAZj.mjs → acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs} +16 -23
  52. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs.map +1 -0
  53. package/fesm2022/{acorex-platform-themes-default-error-401.component-53VB-PS_.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
  54. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
  55. package/fesm2022/{acorex-platform-themes-default-error-404.component-DVF9soT5.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
  56. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
  57. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
  58. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default.mjs +1784 -61
  60. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  61. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-TJ9PWHMY.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
  62. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
  63. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-BHcKkIx0.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
  64. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs} +24 -25
  66. package/fesm2022/acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs.map +1 -0
  67. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs +94 -0
  68. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs +86 -0
  70. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-themes-shared.mjs +408 -305
  72. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  73. package/fesm2022/acorex-platform-workflow.mjs +359 -100
  74. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  75. package/fesm2022/acorex-platform.mjs.map +1 -1
  76. package/package.json +31 -31
  77. package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +14 -2
  78. package/{common/index.d.ts → types/acorex-platform-common.d.ts} +302 -30
  79. package/{core/index.d.ts → types/acorex-platform-core.d.ts} +188 -44
  80. package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +744 -412
  81. package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +160 -38
  82. package/{layout/components/index.d.ts → types/acorex-platform-layout-components.d.ts} +854 -125
  83. package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +96 -18
  84. package/{layout/entity/index.d.ts → types/acorex-platform-layout-entity.d.ts} +848 -63
  85. package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +80 -47
  86. package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +274 -197
  87. package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +608 -122
  88. package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
  89. package/types/acorex-platform-runtime.d.ts +571 -0
  90. package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +113 -4
  91. package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +5 -4
  92. package/{workflow/index.d.ts → types/acorex-platform-workflow.d.ts} +162 -81
  93. package/fesm2022/acorex-platform-common-common-settings.provider-DVvuLUfF.mjs.map +0 -1
  94. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CSxCnzwU.mjs.map +0 -1
  95. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-CPBzE96V.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-Dtv6U3df.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-QxJfswhK.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-CVdssZBD.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BCxE0RTB.mjs +0 -111
  100. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BCxE0RTB.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DVaZN9QN.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DPGHgXa6.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-CdiNW691.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D4hU2SCE.mjs +0 -160
  105. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D4hU2SCE.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-D2CtNrSn.mjs +0 -1716
  107. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-D2CtNrSn.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BVTklnzs.mjs +0 -120
  109. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BVTklnzs.mjs.map +0 -1
  110. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-rGsMVAZj.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-themes-default-error-401.component-53VB-PS_.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-themes-default-error-404.component-DVF9soT5.mjs.map +0 -1
  113. package/fesm2022/acorex-platform-themes-default-error-offline.component-CwNNHzZn.mjs +0 -19
  114. package/fesm2022/acorex-platform-themes-default-error-offline.component-CwNNHzZn.mjs.map +0 -1
  115. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-TJ9PWHMY.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BHcKkIx0.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BUPs84MI.mjs +0 -65
  119. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BUPs84MI.mjs.map +0 -1
  120. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BotknoHn.mjs +0 -64
  121. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BotknoHn.mjs.map +0 -1
  122. package/runtime/index.d.ts +0 -307
  123. /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
@@ -1,7 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Type, InjectionToken, OnInit, ViewContainerRef, ModuleWithProviders, ElementRef, EventEmitter, OnChanges, Renderer2, SimpleChanges, OnDestroy, Injector, PipeTransform, Provider } from '@angular/core';
3
- import { AXStyleColorType, AXDataSource, AXDataSourceSortOption, AXDataSourceFilterOption, AXDataSourceQuery, AXDataSourceCallbackResult } from '@acorex/cdk/common';
3
+ import { AXStyleColorType, AXDataSource, AXDataSourceSortOption, AXDataSourceFilterOption, AXStyleLookType, AXDataSourceQuery, AXDataSourceCallbackResult } from '@acorex/cdk/common';
4
+ import { AXMultiLanguageString } from '@acorex/core/translation';
4
5
  import * as _ngrx_signals from '@ngrx/signals';
6
+ import * as _acorex_platform_core from '@acorex/platform/core';
5
7
  import { Observable } from 'rxjs';
6
8
  import { NavigationExtras } from '@angular/router';
7
9
 
@@ -907,6 +909,28 @@ type AXPPartialNested<T> = {
907
909
  };
908
910
  declare function getNestedKeys(obj: any, prefix?: string): string[];
909
911
  type AXPExpression = string;
912
+ /**
913
+ * Plain or rich text that may be localized: a single string or a map of locale code to string.
914
+ * Use when multi-language editing stores `Record<locale, string>` instead of one string.
915
+ *
916
+ * @example Single value (one locale or shared text)
917
+ * `"<p>Pick one</p>"`
918
+ *
919
+ * @example Per-locale map (e.g. after multi-language editor save)
920
+ * `{ "en-US": "<p>Pick one</p>", "fa-IR": "<p>یکی را انتخاب کنید</p>" }`
921
+ */
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[];
910
934
  type AXPMetaData = Record<string, any>;
911
935
  type AXPOptionsData<T extends Record<string, unknown> = Record<string, any>> = T;
912
936
  interface AXPValueUnit {
@@ -943,9 +967,10 @@ interface AXPContent {
943
967
  content: string;
944
968
  contentType: AXPContentType;
945
969
  }
970
+ type AXPMaybePromise<T = unknown> = T | Promise<T>;
946
971
 
947
972
  type AXPDataSource = string | AXDataSource | any[];
948
- type AXPDataType = 'string' | 'number' | 'object' | 'boolean' | 'array';
973
+ type AXPDataType = 'string' | 'number' | 'boolean' | 'date' | 'object' | 'array' | 'blob';
949
974
  interface AXPPagedListResult<T = any> {
950
975
  items: T[];
951
976
  total: number;
@@ -986,9 +1011,9 @@ interface AXPCategoryEntity<TKey = string> {
986
1011
  /** Unique identifier for the category */
987
1012
  id: TKey;
988
1013
  /** Display name of the category (required) */
989
- title: string;
1014
+ title: AXPMultiLanguageString;
990
1015
  /** Optional description of the category */
991
- description?: string;
1016
+ description?: AXPMultiLanguageString;
992
1017
  /** Parent category ID (undefined for root categories) */
993
1018
  parentId?: TKey;
994
1019
  /**
@@ -1079,17 +1104,22 @@ interface AXPCategoryEntityWithItems<T> extends AXPCategoryEntity {
1079
1104
  items: T[];
1080
1105
  children?: AXPCategoryEntityWithItems<T>[];
1081
1106
  }
1107
+ /**
1108
+ * Denormalized category row on entities and DTOs (id + localized display title).
1109
+ * Use for `categories` arrays expanded from {@link AXPCategoryEntity} assignments.
1110
+ */
1111
+ interface AXPCategoryListItem<TKey extends string = string> {
1112
+ id: TKey;
1113
+ title: AXPMultiLanguageString;
1114
+ }
1082
1115
  interface AXPCategorizedEntity {
1083
1116
  categoryIds: string[];
1084
1117
  }
1085
1118
  interface AXPCategorizedEntityDto {
1086
1119
  categoryIds: string[];
1087
- categories: {
1088
- id: string;
1089
- title: string;
1090
- }[];
1120
+ categories: AXPCategoryListItem[];
1091
1121
  }
1092
- type AXPEntityOp = 'initial' | 'create' | 'update' | 'delete' | 'getOne' | 'getAll' | 'query';
1122
+ type AXPEntityOp = 'initial' | 'create' | 'update' | 'delete' | 'getOne' | 'getAll' | 'query' | 'count' | 'queryAll' | 'getMany' | 'exists' | 'upsertOne' | 'aggregate';
1093
1123
 
1094
1124
  type AXPWidgetTrigger = {
1095
1125
  event: string;
@@ -1119,6 +1149,15 @@ interface AXPFileListItem {
1119
1149
  description?: string;
1120
1150
  }
1121
1151
 
1152
+ /**
1153
+ * Filter toolbar trigger entries (same shape as entity `schema.interface.triggers`).
1154
+ * Declared on `AXPFilterDefinition` and populated when building list filter definitions.
1155
+ */
1156
+ interface AXPFilterTriggerDefinition {
1157
+ event: string;
1158
+ action: string;
1159
+ disabled?: boolean;
1160
+ }
1122
1161
  interface AXPFilterClause extends AXDataSourceFilterOption {
1123
1162
  id?: string;
1124
1163
  order?: number;
@@ -1141,6 +1180,13 @@ interface AXPFilterDefinition extends AXPFilterClause {
1141
1180
  };
1142
1181
  };
1143
1182
  hidden?: boolean;
1183
+ /**
1184
+ * When true, the filter is not selectable. When a string, it is evaluated as an expression (e.g. `{{ ... }}`)
1185
+ * using the current filters context.
1186
+ */
1187
+ disabled?: boolean | string;
1188
+ /** Expression-driven triggers (events/actions); same semantics as entity `schema.interface.triggers`. */
1189
+ triggers?: AXPFilterTriggerDefinition[];
1144
1190
  }
1145
1191
  interface AXPFilterQuery extends Pick<AXPFilterDefinition, 'field' | 'value' | 'operator' | 'logic' | 'hidden'> {
1146
1192
  filters?: AXPFilterQuery[];
@@ -1149,10 +1195,11 @@ interface AXPFilterQuery extends Pick<AXPFilterDefinition, 'field' | 'value' | '
1149
1195
 
1150
1196
  type AXPActionMenuItem = {
1151
1197
  name?: string;
1152
- title: string;
1198
+ title: AXPMultiLanguageString;
1153
1199
  icon?: string;
1154
1200
  iconOnly?: boolean;
1155
1201
  color?: string;
1202
+ look?: AXStyleLookType;
1156
1203
  break?: boolean;
1157
1204
  items?: AXPActionMenuItem[];
1158
1205
  command?: AXPExecuteCommand;
@@ -1161,11 +1208,11 @@ type AXPActionMenuItem = {
1161
1208
  policy?: string;
1162
1209
  };
1163
1210
  type AXPBackButton = {
1164
- title: string;
1211
+ title: AXPMultiLanguageString;
1165
1212
  };
1166
1213
  type AXPBreadcrumbItem = {
1167
1214
  name?: string;
1168
- title: string;
1215
+ title: AXPMultiLanguageString;
1169
1216
  icon?: string;
1170
1217
  command?: AXPExecuteCommand;
1171
1218
  };
@@ -1183,7 +1230,7 @@ type AXPPageStatus = {
1183
1230
  interface AXPCommandMessage {
1184
1231
  type?: 'info' | 'success' | 'warning' | 'error';
1185
1232
  code?: string;
1186
- text: string;
1233
+ text: AXPMultiLanguageString;
1187
1234
  details?: unknown;
1188
1235
  }
1189
1236
  type AXPExecuteCommand = {
@@ -1205,7 +1252,7 @@ interface AXPQueryFetchResult<T = any> {
1205
1252
  };
1206
1253
  message?: {
1207
1254
  code?: string;
1208
- text?: string;
1255
+ text?: AXPMultiLanguageString;
1209
1256
  details?: any;
1210
1257
  };
1211
1258
  }
@@ -1218,7 +1265,7 @@ type AXPNavigateActionOptions = {
1218
1265
  };
1219
1266
  modal: {
1220
1267
  component: Type<any>;
1221
- title: string;
1268
+ title: AXPMultiLanguageString;
1222
1269
  options?: any;
1223
1270
  };
1224
1271
  };
@@ -1270,23 +1317,6 @@ declare class AXPIconLogoConfig implements AXPLogoConfig {
1270
1317
  constructor(icon: string, color?: string | undefined);
1271
1318
  }
1272
1319
 
1273
- type AXPPlatformScopeKey = 'P' | 'T' | 'U';
1274
- declare enum AXPPlatformScope {
1275
- Platform = "P",
1276
- Tenant = "T",
1277
- User = "U"
1278
- }
1279
- declare function resolvePlatformScopeKey(name: string): AXPPlatformScopeKey;
1280
- declare function resolvePlatformScopeName(scope: AXPPlatformScopeKey): string;
1281
-
1282
- interface AXPSortDefinition {
1283
- name: string;
1284
- title: string;
1285
- dir?: 'asc' | 'desc';
1286
- }
1287
- interface AXPSortQuery extends Pick<AXPSortDefinition, 'name' | 'dir'> {
1288
- }
1289
-
1290
1320
  type AXPValidationRule = {
1291
1321
  rule: string;
1292
1322
  message?: string;
@@ -1323,6 +1353,52 @@ interface AXPReqexValidationRule extends AXPValidationRule {
1323
1353
  }
1324
1354
  type AXPStringValidationRules = (AXPRequiredValidationRule | AXPMinLengthValidationRule | AXPMaxLengthValidationRule | AXPEqualValidationRule<string> | AXPReqexValidationRule)[];
1325
1355
 
1356
+ interface AXPPropertyGroup {
1357
+ name: string;
1358
+ title: AXPMultiLanguageString;
1359
+ icon?: string;
1360
+ description?: AXPMultiLanguageString;
1361
+ order?: number;
1362
+ }
1363
+ interface AXPPropertyInterface {
1364
+ type: string;
1365
+ options: AXPOptionsData;
1366
+ triggers?: AXPWidgetTriggers;
1367
+ }
1368
+ /**
1369
+ * Platform property bag (entity fields, workflow inputs, etc.).
1370
+ *
1371
+ * For property viewer rows, use `mapAXPPropertyToWidgetProperty` from `@acorex/platform/layout/widget-core`
1372
+ * (keeps `platform/core` free of a dependency on `layout/widget-core`).
1373
+ */
1374
+ interface AXPProperty {
1375
+ name: string;
1376
+ title: AXPMultiLanguageString;
1377
+ description?: AXPMultiLanguageString;
1378
+ dataType: AXPDataType;
1379
+ validations?: AXPValidationRules;
1380
+ group?: AXPPropertyGroup | string;
1381
+ order?: number;
1382
+ interface: AXPPropertyInterface;
1383
+ }
1384
+
1385
+ type AXPPlatformScopeKey = 'P' | 'T' | 'U';
1386
+ declare enum AXPPlatformScope {
1387
+ Platform = "P",
1388
+ Tenant = "T",
1389
+ User = "U"
1390
+ }
1391
+ declare function resolvePlatformScopeKey(name: string): AXPPlatformScopeKey;
1392
+ declare function resolvePlatformScopeName(scope: AXPPlatformScopeKey): string;
1393
+
1394
+ interface AXPSortDefinition {
1395
+ name: string;
1396
+ title: string;
1397
+ dir?: 'asc' | 'desc';
1398
+ }
1399
+ interface AXPSortQuery extends Pick<AXPSortDefinition, 'name' | 'dir'> {
1400
+ }
1401
+
1326
1402
  interface AXPViewQuery {
1327
1403
  name: string;
1328
1404
  fixed: boolean;
@@ -1442,6 +1518,18 @@ interface AXPMiddlewareErrorResponse {
1442
1518
  interface AXPActivityLogChange {
1443
1519
  type: AXPSystemActionType;
1444
1520
  description: string;
1521
+ /** I18n key for field label. When set with actionKey, used for translated display. */
1522
+ fieldKey?: string;
1523
+ /** Params for fieldKey translation (e.g. for unknown-field with {{name}}). */
1524
+ fieldKeyParams?: Record<string, string>;
1525
+ /** I18n key for action (e.g. @activity-log:changes.replaced). When set with fieldKey, overrides description. */
1526
+ actionKey?: string;
1527
+ oldValue?: unknown;
1528
+ newValue?: unknown;
1529
+ /** Short human-readable summary for Change History (e.g. "Updated from 'X' to 'Y'"). Used when layout is present. */
1530
+ summary?: string;
1531
+ /** Custom layout (AXPWidgetNode) for Change History. When set, rendered via AXPLayoutRenderer instead of default fieldKey/actionKey text. */
1532
+ layout?: unknown;
1445
1533
  }
1446
1534
  interface AXPActivityLog {
1447
1535
  id: string;
@@ -1789,10 +1877,11 @@ declare const AXPContextStore: i0.Type<{
1789
1877
  previous: i0.Signal<{}>;
1790
1878
  changeEvent: i0.Signal<AXPContextChangeEvent>;
1791
1879
  update: (path: string, value: any) => void;
1792
- patch: (context: {}) => void;
1880
+ patch: (context: Record<string, any>, skipDirtyTracking?: boolean) => void;
1793
1881
  reset: () => void;
1794
1882
  set: (initialData: any) => void;
1795
1883
  getValue: (path: string) => any;
1884
+ hasValue: (path: string) => boolean;
1796
1885
  } & _ngrx_signals.StateSource<{
1797
1886
  data: AXPContextData;
1798
1887
  state: AXPContextState;
@@ -1830,10 +1919,10 @@ declare class AXPComponentSlotDirective implements OnInit {
1830
1919
  viewContainerRef: ViewContainerRef;
1831
1920
  contextStore: {
1832
1921
  data: i0.Signal<AXPContextData>;
1833
- state: i0.Signal<AXPContextState>;
1922
+ state: i0.Signal<_acorex_platform_core.AXPContextState>;
1834
1923
  initialSnapshot: i0.Signal<{}>;
1835
1924
  previousSnapshot: i0.Signal<{}>;
1836
- lastChange: _ngrx_signals.DeepSignal<AXPContextChangeEvent>;
1925
+ lastChange: _ngrx_signals.DeepSignal<_acorex_platform_core.AXPContextChangeEvent>;
1837
1926
  isChanged: i0.Signal<boolean>;
1838
1927
  isReset: i0.Signal<boolean>;
1839
1928
  isInitiated: i0.Signal<boolean>;
@@ -1842,18 +1931,19 @@ declare class AXPComponentSlotDirective implements OnInit {
1842
1931
  snapshot: i0.Signal<AXPContextData>;
1843
1932
  initial: i0.Signal<{}>;
1844
1933
  previous: i0.Signal<{}>;
1845
- changeEvent: i0.Signal<AXPContextChangeEvent>;
1934
+ changeEvent: i0.Signal<_acorex_platform_core.AXPContextChangeEvent>;
1846
1935
  update: (path: string, value: any) => void;
1847
- patch: (context: {}) => void;
1936
+ patch: (context: Record<string, any>, skipDirtyTracking?: boolean) => void;
1848
1937
  reset: () => void;
1849
1938
  set: (initialData: any) => void;
1850
1939
  getValue: (path: string) => any;
1940
+ hasValue: (path: string) => boolean;
1851
1941
  } & _ngrx_signals.StateSource<{
1852
1942
  data: AXPContextData;
1853
- state: AXPContextState;
1943
+ state: _acorex_platform_core.AXPContextState;
1854
1944
  initialSnapshot: {};
1855
1945
  previousSnapshot: {};
1856
- lastChange: AXPContextChangeEvent;
1946
+ lastChange: _acorex_platform_core.AXPContextChangeEvent;
1857
1947
  }>;
1858
1948
  isEmpty: i0.Signal<boolean>;
1859
1949
  private _viewCount;
@@ -1930,6 +2020,11 @@ interface AXPDataSourceDataFieldDefinition {
1930
2020
  type: string;
1931
2021
  options?: AXPOptionsData;
1932
2022
  }
2023
+ type AXPLazyDataSource<T = unknown> = AXPMaybePromise<AXDataSource<T>>;
2024
+ type AXPDataSourceArray<T = unknown> = AXPMaybePromise<Array<T>>;
2025
+ type AXPDataSourceValue<T = unknown> = AXPMaybePromise<T>;
2026
+ type AXPDataSourceType<T = any> = AXPLazyDataSource<T> | AXPDataSourceArray<T> | AXPDataSourceValue<T>;
2027
+ type AXPDataSourceSample<T = any> = AXPDataSourceArray<T> | AXPDataSourceValue<T>;
1933
2028
  interface AXPDataSourceDefinition<T = any> {
1934
2029
  name: string;
1935
2030
  title: string;
@@ -1943,9 +2038,9 @@ interface AXPDataSourceDefinition<T = any> {
1943
2038
  };
1944
2039
  columns: AXPDataSourceDataFieldDefinition[];
1945
2040
  filters: AXPFilterDefinition[];
1946
- samples?: any[];
2041
+ samples?: AXPDataSourceSample<T>;
1947
2042
  visible?: boolean;
1948
- source: () => AXDataSource<T> | Promise<AXDataSource<T>>;
2043
+ source: () => AXPDataSourceType<T>;
1949
2044
  }
1950
2045
  interface AXPDataSourceDefinitionProvider {
1951
2046
  items(): Promise<AXPDataSourceDefinition[]>;
@@ -1954,7 +2049,7 @@ declare const AXP_DATASOURCE_DEFINITION_PROVIDER: InjectionToken<AXPDataSourceDe
1954
2049
  declare class AXPDataSourceDefinitionProviderService implements AXPDataSourceDefinitionProvider {
1955
2050
  private providers;
1956
2051
  items(): Promise<AXPDataSourceDefinition[]>;
1957
- get(name: string): Promise<AXPDataSourceDefinition | undefined>;
2052
+ get<T = any>(name: string): Promise<AXPDataSourceDefinition<T> | undefined>;
1958
2053
  static ɵfac: i0.ɵɵFactoryDeclaration<AXPDataSourceDefinitionProviderService, never>;
1959
2054
  static ɵprov: i0.ɵɵInjectableDeclaration<AXPDataSourceDefinitionProviderService>;
1960
2055
  }
@@ -2278,6 +2373,18 @@ interface AXPFeatureDefinition extends AXPModuleFeatureDefinition {
2278
2373
  key: string;
2279
2374
  }
2280
2375
 
2376
+ /**
2377
+ * Registered module manifests for select widgets via dataSource name {@link MODULE_MANIFESTS_DATASOURCE_NAME}.
2378
+ */
2379
+ declare const MODULE_MANIFESTS_DATASOURCE_NAME = "platform-module-manifests";
2380
+ /**
2381
+ * Data source definition for module names/titles from {@link AXPModuleManifestRegistry}.
2382
+ */
2383
+ declare class AXPModuleManifestsDataSourceDefinition implements AXPDataSourceDefinitionProvider {
2384
+ private readonly manifestRegistry;
2385
+ items(): Promise<AXPDataSourceDefinition[]>;
2386
+ }
2387
+
2281
2388
  /**
2282
2389
  * Registry service for module manifests.
2283
2390
  * Collects and manages all registered module manifests.
@@ -2445,6 +2552,21 @@ declare const AXP_SESSION_SERVICE: InjectionToken<AXPISessionService>;
2445
2552
  */
2446
2553
  declare const AXP_MODULE_MANIFEST_PROVIDER: InjectionToken<AXPModuleManifest[]>;
2447
2554
 
2555
+ /**
2556
+ * Locale-aware comparison of {@link AXPMultiLanguageString} values (plain string, `@scope:key`, or locale map).
2557
+ * Resolves each side with {@link resolveMultiLanguageString} for `locale`, then compares with `String#localeCompare`.
2558
+ */
2559
+ declare function compareMultiLanguageStrings(a: AXPMultiLanguageString | null | undefined, b: AXPMultiLanguageString | null | undefined, locale: string, collatorOptions?: Intl.CollatorOptions): number;
2560
+ /**
2561
+ * Stable sort copy: orders items by resolved string for `getValue(item)` using the active `locale`.
2562
+ */
2563
+ declare function sortByMultiLanguageString<T>(items: readonly T[], getValue: (item: T) => AXPMultiLanguageString | null | undefined, locale: string, collatorOptions?: Intl.CollatorOptions): T[];
2564
+ /**
2565
+ * True when the resolved value contains `query` (case-insensitive) for `locale`.
2566
+ * Useful for search/filter flows over {@link AXPMultiLanguageString}.
2567
+ */
2568
+ declare function searchInMultiLanguageString(value: AXPMultiLanguageString | null | undefined, query: string, locale: string): boolean;
2569
+
2448
2570
  /**
2449
2571
  * Represents a tag with text, color, and metadata
2450
2572
  */
@@ -2751,11 +2873,33 @@ declare function createProviderWithInjectionContext<T>(loader: () => Promise<new
2751
2873
  */
2752
2874
  declare function provideLazyProvider<TProvider>(token: InjectionToken<any>, loader: () => Promise<new () => TProvider>, multi?: boolean): Provider;
2753
2875
 
2876
+ /**
2877
+ * If `raw` is a plain non-array object with a `value` property, returns `value`; otherwise returns `raw`.
2878
+ */
2879
+ declare function unwrapValueProperty(raw: unknown): unknown;
2880
+ /**
2881
+ * Coerces to a trimmed string. Plain objects may carry `{ value }` from setting widgets or `{ id }` from select payloads using `valueField: 'id'`.
2882
+ */
2883
+ declare function coerceUnknownToTrimmedString(raw: unknown): string;
2884
+ /**
2885
+ * Coerces to boolean: direct booleans pass through; wrapped `{ value: true | 'true' }` is respected; otherwise false.
2886
+ */
2887
+ declare function coerceUnknownToBoolean(raw: unknown): boolean;
2888
+ /** Parses a finite number after optional `{ value }` unwrap; non-finite or empty string yields NaN. */
2889
+ declare function coerceUnknownToFiniteNumber(raw: unknown): number;
2890
+ /** Parses a Date after optional `{ value }` unwrap; invalid input yields Invalid Date. */
2891
+ declare function coerceUnknownToDate(raw: unknown): Date;
2892
+
2754
2893
  declare function extractTextFromHtml(value: string): string;
2894
+ /**
2895
+ * True when the string likely contains HTML markup (e.g. `<p>`, `<ul>`), as opposed to plain text.
2896
+ * Used to choose innerHTML vs text interpolation for multilingual fields.
2897
+ */
2898
+ declare function containsHtmlMarkup(value: string | null | undefined): boolean;
2755
2899
  /**
2756
2900
  * Generate kebab-case group name from title
2757
2901
  */
2758
2902
  declare function generateKebabCase(title: string): string;
2759
2903
 
2760
- 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, 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, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, cleanDeep, createProviderWithInjectionContext, defaultColumnWidthProvider, extractNestedFieldsWildcard, extractTextFromHtml, extractValue, generateKebabCase, getActionButton, getChangedPaths, getDetailedChanges, getEnumValues, getNestedKeys, getSmart, getSystemActions, objectKeyValueTransforms, provideLazyProvider, resolveActionLook, resolvePlatformScopeKey, resolvePlatformScopeName, setSmart };
2761
- export type { AXPActionMenuItem, AXPActivityLog, AXPActivityLogChange, AXPApplicationUserReference, AXPBackButton, AXPBadge, AXPBreadcrumbItem, AXPCategorizedEntity, AXPCategorizedEntityDto, AXPCategoryEntity, AXPCategoryEntityWithItems, AXPColorPalette, AXPColorPaletteFilterOptions, AXPColumnQuery, AXPColumnWidthMatcher, AXPColumnWidthProvider, AXPCommandMessage, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPContent, AXPContentDirection, AXPContentType, AXPContextData, AXPContextState, AXPDataSource, AXPDataSourceDataFieldDefinition, AXPDataSourceDefinition, AXPDataSourceDefinitionProvider, 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, AXPFlowDirection, AXPGridLayoutOptions, AXPGridPlacement, AXPISessionService, AXPLogoConfig, AXPMaxLengthValidationRule, AXPMetaData, AXPMiddlewareErrorResponse, AXPMinLengthValidationRule, AXPModuleFeatureDefinition, AXPModuleFeatureDefinitionWithKey, AXPModuleManifest, AXPNavigateActionCommand, AXPNavigateActionOptions, AXPOptionsData, AXPPageStatus, AXPPagedListResult, AXPPartialNested, AXPPlatformScopeKey, 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 };
2904
+ 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, coerceUnknownToBoolean, coerceUnknownToDate, coerceUnknownToFiniteNumber, coerceUnknownToTrimmedString, compareMultiLanguageStrings, containsHtmlMarkup, createProviderWithInjectionContext, defaultColumnWidthProvider, extractNestedFieldsWildcard, extractTextFromHtml, extractValue, generateKebabCase, getActionButton, getChangedPaths, getDetailedChanges, getEnumValues, getNestedKeys, getSmart, getSystemActions, normalizeDefinitionCategories, objectKeyValueTransforms, provideLazyProvider, resolveActionLook, resolvePlatformScopeKey, resolvePlatformScopeName, searchInMultiLanguageString, setSmart, sortByMultiLanguageString, unwrapValueProperty };
2905
+ 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 };