@abp/ng.theme.shared 6.0.0-rc.3 → 6.0.0-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/esm2020/extensions/lib/components/extensible-form/extensible-form-prop.component.mjs +33 -10
  2. package/esm2020/extensions/lib/components/extensible-form/extensible-form.component.mjs +3 -3
  3. package/esm2020/extensions/lib/components/extensible-table/extensible-table.component.mjs +10 -7
  4. package/esm2020/extensions/lib/models/form-props.mjs +2 -2
  5. package/esm2020/extensions/lib/models/props.mjs +4 -2
  6. package/esm2020/extensions/lib/tokens/extensible-form-view-provider.token.mjs +3 -0
  7. package/esm2020/extensions/lib/tokens/extensions.token.mjs +3 -1
  8. package/esm2020/extensions/public-api.mjs +2 -1
  9. package/esm2020/lib/constants/validation.mjs +2 -1
  10. package/extensions/lib/components/extensible-form/extensible-form-prop.component.d.ts +7 -5
  11. package/extensions/lib/models/form-props.d.ts +2 -0
  12. package/extensions/lib/models/props.d.ts +3 -1
  13. package/extensions/lib/tokens/extensible-form-view-provider.token.d.ts +5 -0
  14. package/extensions/lib/tokens/extensions.token.d.ts +3 -0
  15. package/extensions/public-api.d.ts +1 -0
  16. package/fesm2015/abp-ng.theme.shared-extensions.mjs +62 -30
  17. package/fesm2015/abp-ng.theme.shared-extensions.mjs.map +1 -1
  18. package/fesm2015/abp-ng.theme.shared.mjs +1 -0
  19. package/fesm2015/abp-ng.theme.shared.mjs.map +1 -1
  20. package/fesm2020/abp-ng.theme.shared-extensions.mjs +61 -30
  21. package/fesm2020/abp-ng.theme.shared-extensions.mjs.map +1 -1
  22. package/fesm2020/abp-ng.theme.shared.mjs +1 -0
  23. package/fesm2020/abp-ng.theme.shared.mjs.map +1 -1
  24. package/lib/constants/validation.d.ts +1 -0
  25. package/package.json +2 -2
@@ -21,9 +21,10 @@ export { ToolbarAction, ToolbarActionList, ToolbarActions, ToolbarActionsFactory
21
21
  export * from './lib/pipes/create-injector.pipe';
22
22
  export * from './lib/services/extensions.service';
23
23
  export * from './lib/tokens/extensions.token';
24
+ export * from './lib/tokens/extensible-form-view-provider.token';
24
25
  export * from './lib/ui-extensions.module';
25
26
  export * from './lib/utils/actions.util';
26
27
  export * from './lib/utils/form-props.util';
27
28
  export * from './lib/utils/props.util';
28
29
  export * from './lib/utils/state.util';
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLXNoYXJlZC9leHRlbnNpb25zL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLDREQUE0RCxDQUFDO0FBQzNFLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxzREFBc0QsQ0FBQztBQUNyRSxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsT0FBTyxFQUVMLFVBQVUsR0FHWCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxZQUFZLEVBRVosZ0JBQWdCLEVBRWhCLGFBQWEsRUFDYixvQkFBb0IsR0FDckIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsVUFBVSxFQUVWLGNBQWMsRUFFZCxXQUFXLEVBQ1gsa0JBQWtCLEdBQ25CLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUVMLHNCQUFzQixFQUV0QixvQkFBb0IsRUFDcEIsUUFBUSxFQUNSLFlBQVksRUFDWixZQUFZLEVBRVosU0FBUyxHQUNWLE1BQU0seUJBQXlCLENBQUM7QUFDakMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxPQUFPLEVBRUwsUUFBUSxHQUdULE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLGFBQWEsRUFFYixpQkFBaUIsRUFFakIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixnQkFBZ0IsR0FFakIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9hZGFwdGVycy9kYXRlLXRpbWUuYWRhcHRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FkYXB0ZXJzL2RhdGUuYWRhcHRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FkYXB0ZXJzL3RpbWUuYWRhcHRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0ZS10aW1lLXBpY2tlci9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZXh0ZW5zaWJsZS1mb3JtL2V4dGVuc2libGUtZm9ybS1wcm9wLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZXh0ZW5zaWJsZS1mb3JtL2V4dGVuc2libGUtZm9ybS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2V4dGVuc2libGUtdGFibGUvZXh0ZW5zaWJsZS10YWJsZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2dyaWQtYWN0aW9ucy9ncmlkLWFjdGlvbnMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wYWdlLXRvb2xiYXIvcGFnZS10b29sYmFyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnN0YW50cy9leHRyYS1wcm9wZXJ0aWVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9kaXNhYmxlZC5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3Byb3AtZGF0YS5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbnVtcy9wcm9wcy5lbnVtJztcclxuZXhwb3J0IHtcclxuICBBY3Rpb25DYWxsYmFjayxcclxuICBBY3Rpb25MaXN0LFxyXG4gIEFjdGlvblByZWRpY2F0ZSxcclxuICBSZWFkb25seUFjdGlvbkRhdGEgYXMgQWN0aW9uRGF0YSxcclxufSBmcm9tICcuL2xpYi9tb2RlbHMvYWN0aW9ucyc7XHJcbmV4cG9ydCB7XHJcbiAgRW50aXR5QWN0aW9uLFxyXG4gIEVudGl0eUFjdGlvbkNvbnRyaWJ1dG9yQ2FsbGJhY2ssXHJcbiAgRW50aXR5QWN0aW9uTGlzdCxcclxuICBFbnRpdHlBY3Rpb25PcHRpb25zLFxyXG4gIEVudGl0eUFjdGlvbnMsXHJcbiAgRW50aXR5QWN0aW9uc0ZhY3RvcnksXHJcbn0gZnJvbSAnLi9saWIvbW9kZWxzL2VudGl0eS1hY3Rpb25zJztcclxuZXhwb3J0IHtcclxuICBFbnRpdHlQcm9wLFxyXG4gIEVudGl0eVByb3BDb250cmlidXRvckNhbGxiYWNrLFxyXG4gIEVudGl0eVByb3BMaXN0LFxyXG4gIEVudGl0eVByb3BPcHRpb25zLFxyXG4gIEVudGl0eVByb3BzLFxyXG4gIEVudGl0eVByb3BzRmFjdG9yeSxcclxufSBmcm9tICcuL2xpYi9tb2RlbHMvZW50aXR5LXByb3BzJztcclxuZXhwb3J0IHtcclxuICBDcmVhdGVGb3JtUHJvcENvbnRyaWJ1dG9yQ2FsbGJhY2ssXHJcbiAgQ3JlYXRlRm9ybVByb3BzRmFjdG9yeSxcclxuICBFZGl0Rm9ybVByb3BDb250cmlidXRvckNhbGxiYWNrLFxyXG4gIEVkaXRGb3JtUHJvcHNGYWN0b3J5LFxyXG4gIEZvcm1Qcm9wLFxyXG4gIEZvcm1Qcm9wRGF0YSxcclxuICBGb3JtUHJvcExpc3QsXHJcbiAgRm9ybVByb3BPcHRpb25zLFxyXG4gIEZvcm1Qcm9wcyxcclxufSBmcm9tICcuL2xpYi9tb2RlbHMvZm9ybS1wcm9wcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9vYmplY3QtZXh0ZW5zaW9ucyc7XHJcbmV4cG9ydCB7XHJcbiAgUHJvcENhbGxiYWNrLFxyXG4gIFByb3BMaXN0LFxyXG4gIFByb3BQcmVkaWNhdGUsXHJcbiAgUmVhZG9ubHlQcm9wRGF0YSBhcyBQcm9wRGF0YSxcclxufSBmcm9tICcuL2xpYi9tb2RlbHMvcHJvcHMnO1xyXG5leHBvcnQge1xyXG4gIFRvb2xiYXJBY3Rpb24sXHJcbiAgVG9vbGJhckFjdGlvbkNvbnRyaWJ1dG9yQ2FsbGJhY2ssXHJcbiAgVG9vbGJhckFjdGlvbkxpc3QsXHJcbiAgVG9vbGJhckFjdGlvbk9wdGlvbnMsXHJcbiAgVG9vbGJhckFjdGlvbnMsXHJcbiAgVG9vbGJhckFjdGlvbnNGYWN0b3J5LFxyXG4gIFRvb2xiYXJDb21wb25lbnQsXHJcbiAgVG9vbGJhckNvbXBvbmVudE9wdGlvbnMsXHJcbn0gZnJvbSAnLi9saWIvbW9kZWxzL3Rvb2xiYXItYWN0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL2NyZWF0ZS1pbmplY3Rvci5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZXh0ZW5zaW9ucy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9rZW5zL2V4dGVuc2lvbnMudG9rZW4nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91aS1leHRlbnNpb25zLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2FjdGlvbnMudXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2Zvcm0tcHJvcHMudXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3Byb3BzLnV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9zdGF0ZS51dGlsJztcclxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLXNoYXJlZC9leHRlbnNpb25zL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLDREQUE0RCxDQUFDO0FBQzNFLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxzREFBc0QsQ0FBQztBQUNyRSxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsT0FBTyxFQUVMLFVBQVUsR0FHWCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxZQUFZLEVBRVosZ0JBQWdCLEVBRWhCLGFBQWEsRUFDYixvQkFBb0IsR0FDckIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsVUFBVSxFQUVWLGNBQWMsRUFFZCxXQUFXLEVBQ1gsa0JBQWtCLEdBQ25CLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUVMLHNCQUFzQixFQUV0QixvQkFBb0IsRUFDcEIsUUFBUSxFQUNSLFlBQVksRUFDWixZQUFZLEVBRVosU0FBUyxHQUNWLE1BQU0seUJBQXlCLENBQUM7QUFDakMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxPQUFPLEVBRUwsUUFBUSxHQUdULE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLGFBQWEsRUFFYixpQkFBaUIsRUFFakIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixnQkFBZ0IsR0FFakIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2FkYXB0ZXJzL2RhdGUtdGltZS5hZGFwdGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYWRhcHRlcnMvZGF0ZS5hZGFwdGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYWRhcHRlcnMvdGltZS5hZGFwdGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRlLXRpbWUtcGlja2VyL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHRlbnNpYmxlLWZvcm0vZXh0ZW5zaWJsZS1mb3JtLXByb3AuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHRlbnNpYmxlLWZvcm0vZXh0ZW5zaWJsZS1mb3JtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZXh0ZW5zaWJsZS10YWJsZS9leHRlbnNpYmxlLXRhYmxlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZ3JpZC1hY3Rpb25zL2dyaWQtYWN0aW9ucy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3BhZ2UtdG9vbGJhci9wYWdlLXRvb2xiYXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29uc3RhbnRzL2V4dHJhLXByb3BlcnRpZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2Rpc2FibGVkLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcHJvcC1kYXRhLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VudW1zL3Byb3BzLmVudW0nO1xyXG5leHBvcnQge1xyXG4gIEFjdGlvbkNhbGxiYWNrLFxyXG4gIEFjdGlvbkxpc3QsXHJcbiAgQWN0aW9uUHJlZGljYXRlLFxyXG4gIFJlYWRvbmx5QWN0aW9uRGF0YSBhcyBBY3Rpb25EYXRhLFxyXG59IGZyb20gJy4vbGliL21vZGVscy9hY3Rpb25zJztcclxuZXhwb3J0IHtcclxuICBFbnRpdHlBY3Rpb24sXHJcbiAgRW50aXR5QWN0aW9uQ29udHJpYnV0b3JDYWxsYmFjayxcclxuICBFbnRpdHlBY3Rpb25MaXN0LFxyXG4gIEVudGl0eUFjdGlvbk9wdGlvbnMsXHJcbiAgRW50aXR5QWN0aW9ucyxcclxuICBFbnRpdHlBY3Rpb25zRmFjdG9yeSxcclxufSBmcm9tICcuL2xpYi9tb2RlbHMvZW50aXR5LWFjdGlvbnMnO1xyXG5leHBvcnQge1xyXG4gIEVudGl0eVByb3AsXHJcbiAgRW50aXR5UHJvcENvbnRyaWJ1dG9yQ2FsbGJhY2ssXHJcbiAgRW50aXR5UHJvcExpc3QsXHJcbiAgRW50aXR5UHJvcE9wdGlvbnMsXHJcbiAgRW50aXR5UHJvcHMsXHJcbiAgRW50aXR5UHJvcHNGYWN0b3J5LFxyXG59IGZyb20gJy4vbGliL21vZGVscy9lbnRpdHktcHJvcHMnO1xyXG5leHBvcnQge1xyXG4gIENyZWF0ZUZvcm1Qcm9wQ29udHJpYnV0b3JDYWxsYmFjayxcclxuICBDcmVhdGVGb3JtUHJvcHNGYWN0b3J5LFxyXG4gIEVkaXRGb3JtUHJvcENvbnRyaWJ1dG9yQ2FsbGJhY2ssXHJcbiAgRWRpdEZvcm1Qcm9wc0ZhY3RvcnksXHJcbiAgRm9ybVByb3AsXHJcbiAgRm9ybVByb3BEYXRhLFxyXG4gIEZvcm1Qcm9wTGlzdCxcclxuICBGb3JtUHJvcE9wdGlvbnMsXHJcbiAgRm9ybVByb3BzLFxyXG59IGZyb20gJy4vbGliL21vZGVscy9mb3JtLXByb3BzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL29iamVjdC1leHRlbnNpb25zJztcclxuZXhwb3J0IHtcclxuICBQcm9wQ2FsbGJhY2ssXHJcbiAgUHJvcExpc3QsXHJcbiAgUHJvcFByZWRpY2F0ZSxcclxuICBSZWFkb25seVByb3BEYXRhIGFzIFByb3BEYXRhLFxyXG59IGZyb20gJy4vbGliL21vZGVscy9wcm9wcyc7XHJcbmV4cG9ydCB7XHJcbiAgVG9vbGJhckFjdGlvbixcclxuICBUb29sYmFyQWN0aW9uQ29udHJpYnV0b3JDYWxsYmFjayxcclxuICBUb29sYmFyQWN0aW9uTGlzdCxcclxuICBUb29sYmFyQWN0aW9uT3B0aW9ucyxcclxuICBUb29sYmFyQWN0aW9ucyxcclxuICBUb29sYmFyQWN0aW9uc0ZhY3RvcnksXHJcbiAgVG9vbGJhckNvbXBvbmVudCxcclxuICBUb29sYmFyQ29tcG9uZW50T3B0aW9ucyxcclxufSBmcm9tICcuL2xpYi9tb2RlbHMvdG9vbGJhci1hY3Rpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvY3JlYXRlLWluamVjdG9yLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9leHRlbnNpb25zLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2tlbnMvZXh0ZW5zaW9ucy50b2tlbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Rva2Vucy9leHRlbnNpYmxlLWZvcm0tdmlldy1wcm92aWRlci50b2tlbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VpLWV4dGVuc2lvbnMubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvYWN0aW9ucy51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvZm9ybS1wcm9wcy51dGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvcHJvcHMudXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3N0YXRlLnV0aWwnO1xyXG4iXX0=
@@ -15,5 +15,6 @@ export const DEFAULT_VALIDATION_BLUEPRINTS = {
15
15
  passwordRequiresUpper: 'AbpIdentity::Volo.Abp.Identity:PasswordRequiresUpper',
16
16
  passwordRequiresDigit: 'AbpIdentity::Volo.Abp.Identity:PasswordRequiresDigit',
17
17
  passwordRequiresNonAlphanumeric: 'AbpIdentity::Volo.Abp.Identity:PasswordRequiresNonAlphanumeric',
18
+ usernamePattern: 'AbpIdentity::Volo.Abp.Identity:InvalidUserName[{{ actualValue }}]',
18
19
  };
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLXNoYXJlZC9zcmMvbGliL2NvbnN0YW50cy92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHO0lBQzNDLFVBQVUsRUFBRSxzREFBc0Q7SUFDbEUsS0FBSyxFQUFFLGtEQUFrRDtJQUN6RCxPQUFPLEVBQUUscUNBQXFDO0lBQzlDLEdBQUcsRUFBRSx5REFBeUQ7SUFDOUQsU0FBUyxFQUNQLCtGQUErRjtJQUNqRyxHQUFHLEVBQUUsZ0VBQWdFO0lBQ3JFLFNBQVMsRUFDUCwrRkFBK0Y7SUFDakcsT0FBTyxFQUFFLHFDQUFxQztJQUM5QyxnQkFBZ0IsRUFBRSwyREFBMkQ7SUFDN0UsS0FBSyxFQUFFLHFFQUFxRTtJQUM1RSxRQUFRLEVBQUUscUNBQXFDO0lBQy9DLEdBQUcsRUFBRSxvRUFBb0U7SUFDekUscUJBQXFCLEVBQUUsc0RBQXNEO0lBQzdFLHFCQUFxQixFQUFFLHNEQUFzRDtJQUM3RSxxQkFBcUIsRUFBRSxzREFBc0Q7SUFDN0UsK0JBQStCLEVBQUUsZ0VBQWdFO0NBQ2xHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgREVGQVVMVF9WQUxJREFUSU9OX0JMVUVQUklOVFMgPSB7XHJcbiAgY3JlZGl0Q2FyZDogJ0FicFZhbGlkYXRpb246OlRoaXNGaWVsZElzTm90QVZhbGlkQ3JlZGl0Q2FyZE51bWJlci4nLFxyXG4gIGVtYWlsOiAnQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkSXNOb3RBVmFsaWRFbWFpbEFkZHJlc3MuJyxcclxuICBpbnZhbGlkOiAnQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkSXNOb3RWYWxpZC4nLFxyXG4gIG1heDogJ0FicFZhbGlkYXRpb246OlRoaXNGaWVsZE11c3RCZUxlc3NPckVxdWFsezB9W3t7IG1heCB9fV0nLFxyXG4gIG1heGxlbmd0aDpcclxuICAgICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRNdXN0QmVBU3RyaW5nT3JBcnJheVR5cGVXaXRoQU1heGltdW1MZW5ndGhPZnswfVt7eyByZXF1aXJlZExlbmd0aCB9fV0nLFxyXG4gIG1pbjogJ0FicFZhbGlkYXRpb246OlRoaXNGaWVsZE11c3RCZUdyZWF0ZXJUaGFuT3JFcXVhbHswfVt7eyBtaW4gfX1dJyxcclxuICBtaW5sZW5ndGg6XHJcbiAgICAnQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkTXVzdEJlQVN0cmluZ09yQXJyYXlUeXBlV2l0aEFNaW5pbXVtTGVuZ3RoT2Z7MH1be3sgcmVxdWlyZWRMZW5ndGggfX1dJyxcclxuICBuZ2JEYXRlOiAnQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkSXNOb3RWYWxpZC4nLFxyXG4gIHBhc3N3b3JkTWlzbWF0Y2g6ICdBYnBJZGVudGl0eTo6Vm9sby5BYnAuSWRlbnRpdHk6UGFzc3dvcmRDb25maXJtYXRpb25GYWlsZWQnLFxyXG4gIHJhbmdlOiAnQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkTXVzdEJlQmV0d2VlbnswfUFuZHsxfVt7eyBtaW4gfX0se3sgbWF4IH19XScsXHJcbiAgcmVxdWlyZWQ6ICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRJc1JlcXVpcmVkLicsXHJcbiAgdXJsOiAnQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkSXNOb3RBVmFsaWRGdWxseVF1YWxpZmllZEh0dHBIdHRwc09yRnRwVXJsJyxcclxuICBwYXNzd29yZFJlcXVpcmVzTG93ZXI6ICdBYnBJZGVudGl0eTo6Vm9sby5BYnAuSWRlbnRpdHk6UGFzc3dvcmRSZXF1aXJlc0xvd2VyJyxcclxuICBwYXNzd29yZFJlcXVpcmVzVXBwZXI6ICdBYnBJZGVudGl0eTo6Vm9sby5BYnAuSWRlbnRpdHk6UGFzc3dvcmRSZXF1aXJlc1VwcGVyJyxcclxuICBwYXNzd29yZFJlcXVpcmVzRGlnaXQ6ICdBYnBJZGVudGl0eTo6Vm9sby5BYnAuSWRlbnRpdHk6UGFzc3dvcmRSZXF1aXJlc0RpZ2l0JyxcclxuICBwYXNzd29yZFJlcXVpcmVzTm9uQWxwaGFudW1lcmljOiAnQWJwSWRlbnRpdHk6OlZvbG8uQWJwLklkZW50aXR5OlBhc3N3b3JkUmVxdWlyZXNOb25BbHBoYW51bWVyaWMnLFxyXG59O1xyXG4iXX0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLXNoYXJlZC9zcmMvbGliL2NvbnN0YW50cy92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHO0lBQzNDLFVBQVUsRUFBRSxzREFBc0Q7SUFDbEUsS0FBSyxFQUFFLGtEQUFrRDtJQUN6RCxPQUFPLEVBQUUscUNBQXFDO0lBQzlDLEdBQUcsRUFBRSx5REFBeUQ7SUFDOUQsU0FBUyxFQUNQLCtGQUErRjtJQUNqRyxHQUFHLEVBQUUsZ0VBQWdFO0lBQ3JFLFNBQVMsRUFDUCwrRkFBK0Y7SUFDakcsT0FBTyxFQUFFLHFDQUFxQztJQUM5QyxnQkFBZ0IsRUFBRSwyREFBMkQ7SUFDN0UsS0FBSyxFQUFFLHFFQUFxRTtJQUM1RSxRQUFRLEVBQUUscUNBQXFDO0lBQy9DLEdBQUcsRUFBRSxvRUFBb0U7SUFDekUscUJBQXFCLEVBQUUsc0RBQXNEO0lBQzdFLHFCQUFxQixFQUFFLHNEQUFzRDtJQUM3RSxxQkFBcUIsRUFBRSxzREFBc0Q7SUFDN0UsK0JBQStCLEVBQUUsZ0VBQWdFO0lBQ2pHLGVBQWUsRUFBRSxtRUFBbUU7Q0FDckYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBERUZBVUxUX1ZBTElEQVRJT05fQkxVRVBSSU5UUyA9IHtcclxuICBjcmVkaXRDYXJkOiAnQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkSXNOb3RBVmFsaWRDcmVkaXRDYXJkTnVtYmVyLicsXHJcbiAgZW1haWw6ICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRJc05vdEFWYWxpZEVtYWlsQWRkcmVzcy4nLFxyXG4gIGludmFsaWQ6ICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRJc05vdFZhbGlkLicsXHJcbiAgbWF4OiAnQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkTXVzdEJlTGVzc09yRXF1YWx7MH1be3sgbWF4IH19XScsXHJcbiAgbWF4bGVuZ3RoOlxyXG4gICAgJ0FicFZhbGlkYXRpb246OlRoaXNGaWVsZE11c3RCZUFTdHJpbmdPckFycmF5VHlwZVdpdGhBTWF4aW11bUxlbmd0aE9mezB9W3t7IHJlcXVpcmVkTGVuZ3RoIH19XScsXHJcbiAgbWluOiAnQWJwVmFsaWRhdGlvbjo6VGhpc0ZpZWxkTXVzdEJlR3JlYXRlclRoYW5PckVxdWFsezB9W3t7IG1pbiB9fV0nLFxyXG4gIG1pbmxlbmd0aDpcclxuICAgICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRNdXN0QmVBU3RyaW5nT3JBcnJheVR5cGVXaXRoQU1pbmltdW1MZW5ndGhPZnswfVt7eyByZXF1aXJlZExlbmd0aCB9fV0nLFxyXG4gIG5nYkRhdGU6ICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRJc05vdFZhbGlkLicsXHJcbiAgcGFzc3dvcmRNaXNtYXRjaDogJ0FicElkZW50aXR5OjpWb2xvLkFicC5JZGVudGl0eTpQYXNzd29yZENvbmZpcm1hdGlvbkZhaWxlZCcsXHJcbiAgcmFuZ2U6ICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRNdXN0QmVCZXR3ZWVuezB9QW5kezF9W3t7IG1pbiB9fSx7eyBtYXggfX1dJyxcclxuICByZXF1aXJlZDogJ0FicFZhbGlkYXRpb246OlRoaXNGaWVsZElzUmVxdWlyZWQuJyxcclxuICB1cmw6ICdBYnBWYWxpZGF0aW9uOjpUaGlzRmllbGRJc05vdEFWYWxpZEZ1bGx5UXVhbGlmaWVkSHR0cEh0dHBzT3JGdHBVcmwnLFxyXG4gIHBhc3N3b3JkUmVxdWlyZXNMb3dlcjogJ0FicElkZW50aXR5OjpWb2xvLkFicC5JZGVudGl0eTpQYXNzd29yZFJlcXVpcmVzTG93ZXInLFxyXG4gIHBhc3N3b3JkUmVxdWlyZXNVcHBlcjogJ0FicElkZW50aXR5OjpWb2xvLkFicC5JZGVudGl0eTpQYXNzd29yZFJlcXVpcmVzVXBwZXInLFxyXG4gIHBhc3N3b3JkUmVxdWlyZXNEaWdpdDogJ0FicElkZW50aXR5OjpWb2xvLkFicC5JZGVudGl0eTpQYXNzd29yZFJlcXVpcmVzRGlnaXQnLFxyXG4gIHBhc3N3b3JkUmVxdWlyZXNOb25BbHBoYW51bWVyaWM6ICdBYnBJZGVudGl0eTo6Vm9sby5BYnAuSWRlbnRpdHk6UGFzc3dvcmRSZXF1aXJlc05vbkFscGhhbnVtZXJpYycsXHJcbiAgdXNlcm5hbWVQYXR0ZXJuOiAnQWJwSWRlbnRpdHk6OlZvbG8uQWJwLklkZW50aXR5OkludmFsaWRVc2VyTmFtZVt7eyBhY3R1YWxWYWx1ZSB9fV0nLFxyXG59O1xyXG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { ABP, ConfigStateService, TrackByService } from '@abp/ng.core';
2
- import { AfterViewInit, ChangeDetectorRef, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { AfterViewInit, ChangeDetectorRef, Injector, OnChanges, SimpleChanges } from '@angular/core';
3
3
  import { FormGroupDirective, ValidatorFn } from '@angular/forms';
4
4
  import { Observable } from 'rxjs';
5
5
  import { FormProp } from '../../models/form-props';
@@ -9,30 +9,32 @@ export declare class ExtensibleFormPropComponent implements OnChanges, AfterView
9
9
  readonly cdRef: ChangeDetectorRef;
10
10
  readonly track: TrackByService;
11
11
  protected configState: ConfigStateService;
12
+ private injector;
12
13
  data: PropData;
13
14
  prop: FormProp;
14
15
  first?: boolean;
15
16
  private fieldRef;
17
+ injectorForCustomComponent: Injector;
16
18
  asterisk: string;
17
19
  options$: Observable<ABP.Option<any>[]>;
18
20
  validators: ValidatorFn[];
19
21
  readonly: boolean;
22
+ typeaheadModel: any;
23
+ private readonly form;
20
24
  disabledFn: (data: PropData) => boolean;
21
25
  get disabled(): boolean;
22
- private readonly form;
23
- typeaheadModel: any;
24
26
  setTypeaheadValue(selectedOption: ABP.Option<string>): void;
25
27
  search: (text$: Observable<string>) => Observable<any[]>;
26
28
  typeaheadFormatter: (option: ABP.Option<any>) => string;
27
29
  get meridian(): any;
28
30
  get isInvalid(): boolean;
29
- constructor(cdRef: ChangeDetectorRef, track: TrackByService, configState: ConfigStateService, groupDirective: FormGroupDirective);
31
+ constructor(cdRef: ChangeDetectorRef, track: TrackByService, configState: ConfigStateService, groupDirective: FormGroupDirective, injector: Injector);
30
32
  private getTypeaheadControls;
31
33
  private setAsterisk;
32
34
  ngAfterViewInit(): void;
33
35
  getComponent(prop: FormProp): string;
34
36
  getType(prop: FormProp): string;
35
- ngOnChanges({ prop }: SimpleChanges): void;
37
+ ngOnChanges({ prop, data }: SimpleChanges): void;
36
38
  static ɵfac: i0.ɵɵFactoryDeclaration<ExtensibleFormPropComponent, never>;
37
39
  static ɵcmp: i0.ɵɵComponentDeclaration<ExtensibleFormPropComponent, "abp-extensible-form-prop", never, { "data": "data"; "prop": "prop"; "first": "first"; }, {}, never, never>;
38
40
  }
@@ -24,6 +24,8 @@ export declare class FormProp<R = any> extends Prop<R> {
24
24
  readonly defaultValue: boolean | number | string | Date;
25
25
  readonly options: PropCallback<R, Observable<ABP.Option<any>[]>> | undefined;
26
26
  readonly id: string | undefined;
27
+ readonly template?: Type<any>;
28
+ readonly className?: string;
27
29
  constructor(options: FormPropOptions<R>);
28
30
  static create<R = any>(options: FormPropOptions<R>): FormProp<R>;
29
31
  static createMany<R = any>(arrayOfOptions: FormPropOptions<R>[]): FormProp<R>[];
@@ -18,7 +18,9 @@ export declare abstract class Prop<R = any> {
18
18
  readonly permission: string;
19
19
  readonly visible: PropPredicate<R>;
20
20
  readonly isExtra: boolean;
21
- constructor(type: ePropType, name: string, displayName: string, permission: string, visible?: PropPredicate<R>, isExtra?: boolean);
21
+ readonly template?: Type<any>;
22
+ readonly className?: string;
23
+ constructor(type: ePropType, name: string, displayName: string, permission: string, visible?: PropPredicate<R>, isExtra?: boolean, template?: Type<any>, className?: string);
22
24
  }
23
25
  export declare type PropCallback<T, R = any> = (data: Omit<PropData<T>, 'data'>, auxData?: any) => R;
24
26
  export declare type PropPredicate<T> = (data?: Omit<PropData<T>, 'data'>, auxData?: any) => boolean;
@@ -0,0 +1,5 @@
1
+ import { ControlContainer, FormGroupDirective } from "@angular/forms";
2
+ export declare const EXTENSIBLE_FORM_VIEW_PROVIDER: {
3
+ provide: typeof ControlContainer;
4
+ useExisting: typeof FormGroupDirective;
5
+ };
@@ -3,6 +3,7 @@ import { ActionCallback } from '../models/actions';
3
3
  import { ExtensionsService } from '../services/extensions.service';
4
4
  import { Observable } from 'rxjs';
5
5
  import { ePropType } from '../enums/props.enum';
6
+ import { FormProp } from '../models/form-props';
6
7
  export declare const EXTENSIONS_IDENTIFIER: InjectionToken<string>;
7
8
  export declare type ActionKeys = Extract<'entityActions' | 'toolbarActions', keyof ExtensionsService>;
8
9
  export declare const EXTENSIONS_ACTION_TYPE: InjectionToken<ActionKeys>;
@@ -18,4 +19,6 @@ declare type EntityPropTypeClassMap = {
18
19
  };
19
20
  export declare type EntityPropTypeClass = Partial<EntityPropTypeClassMap>;
20
21
  export declare const ENTITY_PROP_TYPE_CLASSES: InjectionToken<Partial<EntityPropTypeClassMap>>;
22
+ export declare const EXTENSIONS_FORM_PROP: InjectionToken<FormProp<any>>;
23
+ export declare const EXTENSIONS_FORM_PROP_DATA: InjectionToken<unknown>;
21
24
  export {};
@@ -21,6 +21,7 @@ export { ToolbarAction, ToolbarActionContributorCallback, ToolbarActionList, Too
21
21
  export * from './lib/pipes/create-injector.pipe';
22
22
  export * from './lib/services/extensions.service';
23
23
  export * from './lib/tokens/extensions.token';
24
+ export * from './lib/tokens/extensible-form-view-provider.token';
24
25
  export * from './lib/ui-extensions.module';
25
26
  export * from './lib/utils/actions.util';
26
27
  export * from './lib/utils/form-props.util';
@@ -1,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Optional, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, Host, InjectionToken, Inject, ViewChildren, Injector, LOCALE_ID, Pipe, NgModule } from '@angular/core';
2
+ import { Injectable, Optional, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, InjectionToken, Directive, Host, Injector, Inject, ViewChildren, LOCALE_ID, Pipe, NgModule } from '@angular/core';
3
3
  import * as i5 from '@angular/common';
4
4
  import { formatDate } from '@angular/common';
5
5
  import * as i2 from '@ng-bootstrap/ng-bootstrap';
6
6
  import { NgbDateAdapter, NgbTimeAdapter, NgbInputDatepicker, NgbTimepicker, NgbDatepickerModule, NgbDropdownModule, NgbTimepickerModule, NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';
7
7
  import * as i2$1 from '@angular/forms';
8
- import { ControlContainer, Validators, FormGroup, FormControl } from '@angular/forms';
8
+ import { ControlContainer, FormGroupDirective, Validators, FormGroup, FormControl } from '@angular/forms';
9
9
  import * as i6 from '@ngx-validate/core';
10
10
  import { NgxValidateCoreModule } from '@ngx-validate/core';
11
11
  import * as i1 from '@abp/ng.core';
@@ -223,6 +223,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
223
223
  args: [NgbTimepicker]
224
224
  }] } });
225
225
 
226
+ const EXTENSIONS_IDENTIFIER = new InjectionToken('EXTENSIONS_IDENTIFIER');
227
+ const EXTENSIONS_ACTION_TYPE = new InjectionToken('EXTENSIONS_ACTION_TYPE');
228
+ const EXTENSIONS_ACTION_DATA = new InjectionToken('EXTENSIONS_ACTION_DATA');
229
+ const EXTENSIONS_ACTION_CALLBACK = new InjectionToken('EXTENSIONS_ACTION_DATA');
230
+ const PROP_DATA_STREAM = new InjectionToken('PROP_DATA_STREAM');
231
+ const ENTITY_PROP_TYPE_CLASSES = new InjectionToken('ENTITY_PROP_TYPE_CLASSES', {
232
+ factory: () => ({}),
233
+ });
234
+ const EXTENSIONS_FORM_PROP = new InjectionToken('EXTENSIONS_FORM_PROP');
235
+ const EXTENSIONS_FORM_PROP_DATA = new InjectionToken('EXTENSIONS_FORM_PROP_DATA');
236
+
226
237
  const EXTRA_PROPERTIES_KEY = 'extraProperties';
227
238
 
228
239
  const TYPEAHEAD_TEXT_SUFFIX = '_Text';
@@ -302,10 +313,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
302
313
  }] } });
303
314
 
304
315
  class ExtensibleFormPropComponent {
305
- constructor(cdRef, track, configState, groupDirective) {
316
+ constructor(cdRef, track, configState, groupDirective, injector) {
306
317
  this.cdRef = cdRef;
307
318
  this.track = track;
308
319
  this.configState = configState;
320
+ this.injector = injector;
309
321
  this.asterisk = '';
310
322
  this.options$ = of([]);
311
323
  this.validators = [];
@@ -352,6 +364,9 @@ class ExtensibleFormPropComponent {
352
364
  }
353
365
  }
354
366
  getComponent(prop) {
367
+ if (prop.template) {
368
+ return 'template';
369
+ }
355
370
  switch (prop.type) {
356
371
  case "boolean" /* Boolean */:
357
372
  return 'checkbox';
@@ -390,9 +405,26 @@ class ExtensibleFormPropComponent {
390
405
  return 'hidden';
391
406
  }
392
407
  }
393
- ngOnChanges({ prop }) {
408
+ ngOnChanges({ prop, data }) {
409
+ var _a;
394
410
  const currentProp = prop === null || prop === void 0 ? void 0 : prop.currentValue;
395
- const { options, readonly, disabled, validators } = currentProp || {};
411
+ const { options, readonly, disabled, validators, template } = currentProp || {};
412
+ if (template) {
413
+ this.injectorForCustomComponent = Injector.create({
414
+ providers: [
415
+ {
416
+ provide: EXTENSIONS_FORM_PROP,
417
+ useValue: currentProp,
418
+ },
419
+ {
420
+ provide: EXTENSIONS_FORM_PROP_DATA,
421
+ useValue: (_a = data === null || data === void 0 ? void 0 : data.currentValue) === null || _a === void 0 ? void 0 : _a.record,
422
+ },
423
+ { provide: ControlContainer, useExisting: FormGroupDirective },
424
+ ],
425
+ parent: this.injector,
426
+ });
427
+ }
396
428
  if (options)
397
429
  this.options$ = options(this.data);
398
430
  if (readonly)
@@ -409,8 +441,8 @@ class ExtensibleFormPropComponent {
409
441
  this.typeaheadModel = { key: keyControl.value, value: valueControl.value };
410
442
  }
411
443
  }
412
- ExtensibleFormPropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ExtensibleFormPropComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TrackByService }, { token: i1.ConfigStateService }, { token: i2$1.FormGroupDirective }], target: i0.ɵɵFactoryTarget.Component });
413
- ExtensibleFormPropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: { data: "data", prop: "prop", first: "first" }, viewQueries: [{ propertyName: "fieldRef", first: true, predicate: ["field"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"mb-3 form-group\"\r\n *abpPermission=\"prop.permission; runChangeDetection: false\"\r\n [ngSwitch]=\"getComponent(prop)\"\r\n>\r\n <ng-template ngSwitchCase=\"input\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [type]=\"getType(prop)\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"hidden\">\r\n <input [formControlName]=\"prop.name\" type=\"hidden\" />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"checkbox\">\r\n <div class=\"form-check\" validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n />\r\n <ng-template\r\n [ngTemplateOutlet]=\"label\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 'form-check-label' }\"\r\n ></ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"select\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"multiselect\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n multiple=\"multiple\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"typeahead\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <div #typeahead class=\"position-relative\" validationStyle validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [abpDisabled]=\"disabled\"\r\n [ngbTypeahead]=\"search\"\r\n [editable]=\"false\"\r\n [inputFormatter]=\"typeaheadFormatter\"\r\n [resultFormatter]=\"typeaheadFormatter\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [(ngModel)]=\"typeaheadModel\"\r\n (selectItem)=\"setTypeaheadValue($event.item)\"\r\n (blur)=\"setTypeaheadValue(typeaheadModel)\"\r\n [class.is-invalid]=\"typeahead.classList.contains('is-invalid')\"\r\n class=\"form-control\"\r\n />\r\n <input [formControlName]=\"prop.name\" type=\"hidden\" />\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"date\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n (click)=\"datepicker.open()\"\r\n (keyup.space)=\"datepicker.open()\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"time\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <ngb-timepicker [formControlName]=\"prop.name\"></ngb-timepicker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"dateTime\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <abp-date-time-picker [prop]=\"prop\" [meridian]=\"meridian\"></abp-date-time-picker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"textarea\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <textarea\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n ></textarea>\r\n </ng-template>\r\n</div>\r\n\r\n<ng-template #label let-classes>\r\n <label [htmlFor]=\"prop.id\" [ngClass]=\"classes || 'form-label'\"\r\n >{{ prop.displayName | abpLocalization }} {{ asterisk }}</label\r\n >\r\n</ng-template>\r\n", components: [{ type: i2.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"] }, { type: DateTimePickerComponent, selector: "abp-date-time-picker", inputs: ["prop", "meridian"], exportAs: ["abpDateTimePicker"] }], directives: [{ type: i1.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { type: DisabledDirective, selector: "[abpDisabled]", inputs: ["abpDisabled"] }, { type: i6.ValidationTargetDirective, selector: "[validationTarget]", exportAs: ["validationTarget"] }, { type: i2$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i2$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2$1.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { type: i6.ValidationStyleDirective, selector: "[validationStyle]", exportAs: ["validationStyle"] }, { type: i2.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "showHint", "placement", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "async": i5.AsyncPipe, "abpLocalization": i1.LocalizationPipe }, viewProviders: [
444
+ ExtensibleFormPropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ExtensibleFormPropComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TrackByService }, { token: i1.ConfigStateService }, { token: i2$1.FormGroupDirective }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
445
+ ExtensibleFormPropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: { data: "data", prop: "prop", first: "first" }, viewQueries: [{ propertyName: "fieldRef", first: true, predicate: ["field"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container [ngSwitch]=\"getComponent(prop)\"\r\n *abpPermission=\"prop.permission; runChangeDetection: false\">\r\n\r\n <ng-template ngSwitchCase=\"template\">\r\n <ng-container\r\n *ngComponentOutlet=\"prop.template;injector:injectorForCustomComponent\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <div\r\n class=\"mb-3 form-group\"\r\n >\r\n\r\n <ng-template ngSwitchCase=\"input\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [type]=\"getType(prop)\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"hidden\">\r\n <input [formControlName]=\"prop.name\" type=\"hidden\"/>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"checkbox\">\r\n <div class=\"form-check\" validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n />\r\n <ng-template\r\n [ngTemplateOutlet]=\"label\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 'form-check-label' }\"\r\n ></ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"select\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"multiselect\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n multiple=\"multiple\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"typeahead\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <div #typeahead class=\"position-relative\" validationStyle validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [abpDisabled]=\"disabled\"\r\n [ngbTypeahead]=\"search\"\r\n [editable]=\"false\"\r\n [inputFormatter]=\"typeaheadFormatter\"\r\n [resultFormatter]=\"typeaheadFormatter\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [(ngModel)]=\"typeaheadModel\"\r\n (selectItem)=\"setTypeaheadValue($event.item)\"\r\n (blur)=\"setTypeaheadValue(typeaheadModel)\"\r\n [class.is-invalid]=\"typeahead.classList.contains('is-invalid')\"\r\n class=\"form-control\"\r\n />\r\n <input [formControlName]=\"prop.name\" type=\"hidden\"/>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"date\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n (click)=\"datepicker.open()\"\r\n (keyup.space)=\"datepicker.open()\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"time\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <ngb-timepicker [formControlName]=\"prop.name\"></ngb-timepicker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"dateTime\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <abp-date-time-picker [prop]=\"prop\" [meridian]=\"meridian\"></abp-date-time-picker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"textarea\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <textarea\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n ></textarea>\r\n </ng-template>\r\n </div>\r\n\r\n</ng-container>\r\n\r\n<ng-template #label let-classes>\r\n <label [htmlFor]=\"prop.id\" [ngClass]=\"classes || 'form-label'\" x\r\n >{{ prop.displayName | abpLocalization }} {{ asterisk }}</label\r\n >\r\n</ng-template>\r\n", components: [{ type: i2.NgbTimepicker, selector: "ngb-timepicker", inputs: ["meridian", "spinners", "seconds", "hourStep", "minuteStep", "secondStep", "readonlyInputs", "size"] }, { type: DateTimePickerComponent, selector: "abp-date-time-picker", inputs: ["prop", "meridian"], exportAs: ["abpDateTimePicker"] }], directives: [{ type: i1.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i5.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModuleFactory"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { type: DisabledDirective, selector: "[abpDisabled]", inputs: ["abpDisabled"] }, { type: i6.ValidationTargetDirective, selector: "[validationTarget]", exportAs: ["validationTarget"] }, { type: i2$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i2$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2$1.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { type: i6.ValidationStyleDirective, selector: "[validationStyle]", exportAs: ["validationStyle"] }, { type: i2.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "showHint", "placement", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }, { type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "async": i5.AsyncPipe, "abpLocalization": i1.LocalizationPipe }, viewProviders: [
414
446
  {
415
447
  provide: ControlContainer,
416
448
  useFactory: selfFactory,
@@ -429,8 +461,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
429
461
  },
430
462
  { provide: NgbDateAdapter, useClass: DateAdapter },
431
463
  { provide: NgbTimeAdapter, useClass: TimeAdapter },
432
- ], template: "<div\r\n class=\"mb-3 form-group\"\r\n *abpPermission=\"prop.permission; runChangeDetection: false\"\r\n [ngSwitch]=\"getComponent(prop)\"\r\n>\r\n <ng-template ngSwitchCase=\"input\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [type]=\"getType(prop)\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"hidden\">\r\n <input [formControlName]=\"prop.name\" type=\"hidden\" />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"checkbox\">\r\n <div class=\"form-check\" validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n />\r\n <ng-template\r\n [ngTemplateOutlet]=\"label\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 'form-check-label' }\"\r\n ></ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"select\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"multiselect\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n multiple=\"multiple\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"typeahead\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <div #typeahead class=\"position-relative\" validationStyle validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [abpDisabled]=\"disabled\"\r\n [ngbTypeahead]=\"search\"\r\n [editable]=\"false\"\r\n [inputFormatter]=\"typeaheadFormatter\"\r\n [resultFormatter]=\"typeaheadFormatter\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [(ngModel)]=\"typeaheadModel\"\r\n (selectItem)=\"setTypeaheadValue($event.item)\"\r\n (blur)=\"setTypeaheadValue(typeaheadModel)\"\r\n [class.is-invalid]=\"typeahead.classList.contains('is-invalid')\"\r\n class=\"form-control\"\r\n />\r\n <input [formControlName]=\"prop.name\" type=\"hidden\" />\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"date\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n (click)=\"datepicker.open()\"\r\n (keyup.space)=\"datepicker.open()\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"time\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <ngb-timepicker [formControlName]=\"prop.name\"></ngb-timepicker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"dateTime\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <abp-date-time-picker [prop]=\"prop\" [meridian]=\"meridian\"></abp-date-time-picker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"textarea\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <textarea\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n ></textarea>\r\n </ng-template>\r\n</div>\r\n\r\n<ng-template #label let-classes>\r\n <label [htmlFor]=\"prop.id\" [ngClass]=\"classes || 'form-label'\"\r\n >{{ prop.displayName | abpLocalization }} {{ asterisk }}</label\r\n >\r\n</ng-template>\r\n" }]
433
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.TrackByService }, { type: i1.ConfigStateService }, { type: i2$1.FormGroupDirective }]; }, propDecorators: { data: [{
464
+ ], template: "<ng-container [ngSwitch]=\"getComponent(prop)\"\r\n *abpPermission=\"prop.permission; runChangeDetection: false\">\r\n\r\n <ng-template ngSwitchCase=\"template\">\r\n <ng-container\r\n *ngComponentOutlet=\"prop.template;injector:injectorForCustomComponent\">\r\n </ng-container>\r\n </ng-template>\r\n\r\n <div\r\n class=\"mb-3 form-group\"\r\n >\r\n\r\n <ng-template ngSwitchCase=\"input\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [type]=\"getType(prop)\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"hidden\">\r\n <input [formControlName]=\"prop.name\" type=\"hidden\"/>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"checkbox\">\r\n <div class=\"form-check\" validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n type=\"checkbox\"\r\n class=\"form-check-input\"\r\n />\r\n <ng-template\r\n [ngTemplateOutlet]=\"label\"\r\n [ngTemplateOutletContext]=\"{ $implicit: 'form-check-label' }\"\r\n ></ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"select\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"multiselect\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <select\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n multiple=\"multiple\"\r\n class=\"form-select form-control\"\r\n >\r\n <option\r\n *ngFor=\"let option of options$ | async; trackBy: track.by('value')\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.key }}\r\n </option>\r\n </select>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"typeahead\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <div #typeahead class=\"position-relative\" validationStyle validationTarget>\r\n <input\r\n #field\r\n [id]=\"prop.id\"\r\n [autocomplete]=\"prop.autocomplete\"\r\n [abpDisabled]=\"disabled\"\r\n [ngbTypeahead]=\"search\"\r\n [editable]=\"false\"\r\n [inputFormatter]=\"typeaheadFormatter\"\r\n [resultFormatter]=\"typeaheadFormatter\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n [(ngModel)]=\"typeaheadModel\"\r\n (selectItem)=\"setTypeaheadValue($event.item)\"\r\n (blur)=\"setTypeaheadValue(typeaheadModel)\"\r\n [class.is-invalid]=\"typeahead.classList.contains('is-invalid')\"\r\n class=\"form-control\"\r\n />\r\n <input [formControlName]=\"prop.name\" type=\"hidden\"/>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"date\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <input\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n (click)=\"datepicker.open()\"\r\n (keyup.space)=\"datepicker.open()\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n type=\"text\"\r\n class=\"form-control\"\r\n />\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"time\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <ngb-timepicker [formControlName]=\"prop.name\"></ngb-timepicker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"dateTime\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <abp-date-time-picker [prop]=\"prop\" [meridian]=\"meridian\"></abp-date-time-picker>\r\n </ng-template>\r\n\r\n <ng-template ngSwitchCase=\"textarea\">\r\n <ng-template [ngTemplateOutlet]=\"label\"></ng-template>\r\n <textarea\r\n #field\r\n [id]=\"prop.id\"\r\n [formControlName]=\"prop.name\"\r\n [abpDisabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n class=\"form-control\"\r\n ></textarea>\r\n </ng-template>\r\n </div>\r\n\r\n</ng-container>\r\n\r\n<ng-template #label let-classes>\r\n <label [htmlFor]=\"prop.id\" [ngClass]=\"classes || 'form-label'\" x\r\n >{{ prop.displayName | abpLocalization }} {{ asterisk }}</label\r\n >\r\n</ng-template>\r\n" }]
465
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.TrackByService }, { type: i1.ConfigStateService }, { type: i2$1.FormGroupDirective }, { type: i0.Injector }]; }, propDecorators: { data: [{
434
466
  type: Input
435
467
  }], prop: [{
436
468
  type: Input
@@ -441,18 +473,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
441
473
  args: ['field']
442
474
  }] } });
443
475
  function isRequired(validator) {
444
- return validator === Validators.required || validator === AbpValidators.required;
476
+ return (validator === Validators.required ||
477
+ validator === AbpValidators.required ||
478
+ validator.name === 'required');
445
479
  }
446
480
 
447
- const EXTENSIONS_IDENTIFIER = new InjectionToken('EXTENSIONS_IDENTIFIER');
448
- const EXTENSIONS_ACTION_TYPE = new InjectionToken('EXTENSIONS_ACTION_TYPE');
449
- const EXTENSIONS_ACTION_DATA = new InjectionToken('EXTENSIONS_ACTION_DATA');
450
- const EXTENSIONS_ACTION_CALLBACK = new InjectionToken('EXTENSIONS_ACTION_DATA');
451
- const PROP_DATA_STREAM = new InjectionToken('PROP_DATA_STREAM');
452
- const ENTITY_PROP_TYPE_CLASSES = new InjectionToken('ENTITY_PROP_TYPE_CLASSES', {
453
- factory: () => ({}),
454
- });
455
-
456
481
  class ActionList extends LinkedList {
457
482
  }
458
483
  class ActionData {
@@ -538,13 +563,15 @@ class PropData {
538
563
  }
539
564
  }
540
565
  class Prop {
541
- constructor(type, name, displayName, permission, visible = _ => true, isExtra = false) {
566
+ constructor(type, name, displayName, permission, visible = _ => true, isExtra = false, template, className) {
542
567
  this.type = type;
543
568
  this.name = name;
544
569
  this.displayName = displayName;
545
570
  this.permission = permission;
546
571
  this.visible = visible;
547
572
  this.isExtra = isExtra;
573
+ this.template = template;
574
+ this.className = className;
548
575
  this.displayName = this.displayName || this.name;
549
576
  }
550
577
  }
@@ -630,7 +657,7 @@ class EditFormPropsFactory extends PropsFactory {
630
657
  }
631
658
  class FormProp extends Prop {
632
659
  constructor(options) {
633
- super(options.type, options.name, options.displayName, options.permission, options.visible, options.isExtra);
660
+ super(options.type, options.name, options.displayName, options.permission, options.visible, options.isExtra, options.template, options.className);
634
661
  this.asyncValidators = options.asyncValidators || (_ => []);
635
662
  this.validators = options.validators || (_ => []);
636
663
  this.disabled = options.disabled || (_ => false);
@@ -780,7 +807,7 @@ class ExtensibleFormComponent {
780
807
  }
781
808
  }
782
809
  ExtensibleFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ExtensibleFormComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TrackByService }, { token: i2$1.ControlContainer }, { token: ExtensionsService }, { token: EXTENSIONS_IDENTIFIER }], target: i0.ɵɵFactoryTarget.Component });
783
- ExtensibleFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: { selectedRecord: "selectedRecord" }, viewQueries: [{ propertyName: "formProps", predicate: ExtensibleFormPropComponent, descendants: true }], exportAs: ["abpExtensibleForm"], ngImport: i0, template: "<ng-container *ngIf=\"form\">\r\n <ng-container *abpPropData=\"let data; fromList: propList; withRecord: record\">\r\n <ng-container *ngFor=\"let prop of propList; let first = first; trackBy: track.by('name')\">\r\n <ng-container *ngIf=\"prop.visible(data)\">\r\n <ng-container\r\n [formGroupName]=\"extraPropertiesKey\"\r\n *ngIf=\"extraProperties.controls[prop.name]; else tempDefault\"\r\n >\r\n <abp-extensible-form-prop [prop]=\"prop\" [data]=\"data\"></abp-extensible-form-prop>\r\n </ng-container>\r\n\r\n <ng-template #tempDefault>\r\n <abp-extensible-form-prop\r\n *ngIf=\"form.get(prop.name)\"\r\n [prop]=\"prop\"\r\n [data]=\"data\"\r\n [first]=\"first\"\r\n ></abp-extensible-form-prop>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n", components: [{ type: ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: ["data", "prop", "first"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: PropDataDirective, selector: "[abpPropData]", inputs: ["abpPropDataFromList", "abpPropDataWithRecord", "abpPropDataAtIndex"], exportAs: ["abpPropData"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2$1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i6.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }], viewProviders: [
810
+ ExtensibleFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ExtensibleFormComponent, selector: "abp-extensible-form", inputs: { selectedRecord: "selectedRecord" }, viewQueries: [{ propertyName: "formProps", predicate: ExtensibleFormPropComponent, descendants: true }], exportAs: ["abpExtensibleForm"], ngImport: i0, template: "<ng-container *ngIf=\"form\">\r\n <ng-container *abpPropData=\"let data; fromList: propList; withRecord: record\">\r\n <ng-container *ngFor=\"let prop of propList; let first = first; trackBy: track.by('name')\">\r\n <ng-container *ngIf=\"prop.visible(data)\">\r\n <ng-container\r\n [formGroupName]=\"extraPropertiesKey\"\r\n *ngIf=\"extraProperties.controls[prop.name]; else tempDefault\"\r\n >\r\n <abp-extensible-form-prop [class]=\"prop.className\" [prop]=\"prop\" [data]=\"data\"></abp-extensible-form-prop>\r\n </ng-container>\r\n\r\n <ng-template #tempDefault>\r\n <abp-extensible-form-prop [class]=\"prop.className\"\r\n *ngIf=\"form.get(prop.name)\"\r\n [prop]=\"prop\"\r\n [data]=\"data\"\r\n [first]=\"first\"\r\n ></abp-extensible-form-prop>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n", components: [{ type: ExtensibleFormPropComponent, selector: "abp-extensible-form-prop", inputs: ["data", "prop", "first"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: PropDataDirective, selector: "[abpPropData]", inputs: ["abpPropDataFromList", "abpPropDataWithRecord", "abpPropDataAtIndex"], exportAs: ["abpPropData"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2$1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i6.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }], viewProviders: [
784
811
  {
785
812
  provide: ControlContainer,
786
813
  useFactory: selfFactory,
@@ -795,7 +822,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
795
822
  useFactory: selfFactory,
796
823
  deps: [[new Optional(), new SkipSelf(), ControlContainer]],
797
824
  },
798
- ], template: "<ng-container *ngIf=\"form\">\r\n <ng-container *abpPropData=\"let data; fromList: propList; withRecord: record\">\r\n <ng-container *ngFor=\"let prop of propList; let first = first; trackBy: track.by('name')\">\r\n <ng-container *ngIf=\"prop.visible(data)\">\r\n <ng-container\r\n [formGroupName]=\"extraPropertiesKey\"\r\n *ngIf=\"extraProperties.controls[prop.name]; else tempDefault\"\r\n >\r\n <abp-extensible-form-prop [prop]=\"prop\" [data]=\"data\"></abp-extensible-form-prop>\r\n </ng-container>\r\n\r\n <ng-template #tempDefault>\r\n <abp-extensible-form-prop\r\n *ngIf=\"form.get(prop.name)\"\r\n [prop]=\"prop\"\r\n [data]=\"data\"\r\n [first]=\"first\"\r\n ></abp-extensible-form-prop>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n" }]
825
+ ], template: "<ng-container *ngIf=\"form\">\r\n <ng-container *abpPropData=\"let data; fromList: propList; withRecord: record\">\r\n <ng-container *ngFor=\"let prop of propList; let first = first; trackBy: track.by('name')\">\r\n <ng-container *ngIf=\"prop.visible(data)\">\r\n <ng-container\r\n [formGroupName]=\"extraPropertiesKey\"\r\n *ngIf=\"extraProperties.controls[prop.name]; else tempDefault\"\r\n >\r\n <abp-extensible-form-prop [class]=\"prop.className\" [prop]=\"prop\" [data]=\"data\"></abp-extensible-form-prop>\r\n </ng-container>\r\n\r\n <ng-template #tempDefault>\r\n <abp-extensible-form-prop [class]=\"prop.className\"\r\n *ngIf=\"form.get(prop.name)\"\r\n [prop]=\"prop\"\r\n [data]=\"data\"\r\n [first]=\"first\"\r\n ></abp-extensible-form-prop>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n" }]
799
826
  }], ctorParameters: function () {
800
827
  return [{ type: i0.ChangeDetectorRef }, { type: i1.TrackByService }, { type: i2$1.ControlContainer }, { type: ExtensionsService }, { type: undefined, decorators: [{
801
828
  type: Inject,
@@ -941,12 +968,15 @@ class ExtensibleTableComponent {
941
968
  value,
942
969
  };
943
970
  if (prop.value.component) {
944
- const injector = Injector.create([
945
- {
946
- provide: PROP_DATA_STREAM,
947
- useValue: value,
948
- },
949
- ], this.injector);
971
+ const injector = Injector.create({
972
+ providers: [
973
+ {
974
+ provide: PROP_DATA_STREAM,
975
+ useValue: value,
976
+ },
977
+ ],
978
+ parent: this.injector,
979
+ });
950
980
  record[propKey].injector = injector;
951
981
  record[propKey].component = prop.value.component;
952
982
  }
@@ -1042,6 +1072,8 @@ var objectExtensions = /*#__PURE__*/Object.freeze({
1042
1072
  __proto__: null
1043
1073
  });
1044
1074
 
1075
+ const EXTENSIBLE_FORM_VIEW_PROVIDER = { provide: ControlContainer, useExisting: FormGroupDirective };
1076
+
1045
1077
  class BaseUiExtensionsModule {
1046
1078
  }
1047
1079
  BaseUiExtensionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: BaseUiExtensionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -1368,5 +1400,5 @@ function isUndefined(obj) {
1368
1400
  * Generated bundle index. Do not edit.
1369
1401
  */
1370
1402
 
1371
- export { ActionList, BaseUiExtensionsModule, CreateFormPropsFactory, CreateInjectorPipe, DateAdapter, DateTimeAdapter, DateTimePickerComponent, DisabledDirective, ENTITY_PROP_TYPE_CLASSES, EXTENSIONS_ACTION_CALLBACK, EXTENSIONS_ACTION_DATA, EXTENSIONS_ACTION_TYPE, EXTENSIONS_IDENTIFIER, EXTRA_PROPERTIES_KEY, EditFormPropsFactory, EntityAction, EntityActionList, EntityActions, EntityActionsFactory, EntityProp, EntityPropList, EntityProps, EntityPropsFactory, ExtensibleFormComponent, ExtensibleFormPropComponent, ExtensibleTableComponent, ExtensionsService, FormProp, FormPropData, FormPropList, FormProps, GridActionsComponent, objectExtensions as ObjectExtensions, PROP_DATA_STREAM, PageToolbarComponent, PropDataDirective, PropList, TimeAdapter, ToolbarAction, ToolbarActionList, ToolbarActions, ToolbarActionsFactory, ToolbarComponent, UiExtensionsModule, createExtraPropertyValueResolver, generateFormFromProps, getObjectExtensionEntitiesFromStore, mapEntitiesToContributors, mergeWithDefaultActions, mergeWithDefaultProps };
1403
+ export { ActionList, BaseUiExtensionsModule, CreateFormPropsFactory, CreateInjectorPipe, DateAdapter, DateTimeAdapter, DateTimePickerComponent, DisabledDirective, ENTITY_PROP_TYPE_CLASSES, EXTENSIBLE_FORM_VIEW_PROVIDER, EXTENSIONS_ACTION_CALLBACK, EXTENSIONS_ACTION_DATA, EXTENSIONS_ACTION_TYPE, EXTENSIONS_FORM_PROP, EXTENSIONS_FORM_PROP_DATA, EXTENSIONS_IDENTIFIER, EXTRA_PROPERTIES_KEY, EditFormPropsFactory, EntityAction, EntityActionList, EntityActions, EntityActionsFactory, EntityProp, EntityPropList, EntityProps, EntityPropsFactory, ExtensibleFormComponent, ExtensibleFormPropComponent, ExtensibleTableComponent, ExtensionsService, FormProp, FormPropData, FormPropList, FormProps, GridActionsComponent, objectExtensions as ObjectExtensions, PROP_DATA_STREAM, PageToolbarComponent, PropDataDirective, PropList, TimeAdapter, ToolbarAction, ToolbarActionList, ToolbarActions, ToolbarActionsFactory, ToolbarComponent, UiExtensionsModule, createExtraPropertyValueResolver, generateFormFromProps, getObjectExtensionEntitiesFromStore, mapEntitiesToContributors, mergeWithDefaultActions, mergeWithDefaultProps };
1372
1404
  //# sourceMappingURL=abp-ng.theme.shared-extensions.mjs.map