@gnggln/ng-ui-system 1.0.0-alpha.0

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 (141) hide show
  1. package/esm2022/gnggln-ng-ui-system.mjs +5 -0
  2. package/esm2022/lib/components/accordion/accordion.component.mjs +353 -0
  3. package/esm2022/lib/components/accordion/accordion.types.mjs +6 -0
  4. package/esm2022/lib/components/accordion/index.mjs +2 -0
  5. package/esm2022/lib/components/base-layout/base-layout.component.mjs +218 -0
  6. package/esm2022/lib/components/base-layout/base-layout.types.mjs +6 -0
  7. package/esm2022/lib/components/base-layout/index.mjs +14 -0
  8. package/esm2022/lib/components/button/button-area.component.mjs +196 -0
  9. package/esm2022/lib/components/button/button.component.mjs +164 -0
  10. package/esm2022/lib/components/button/button.types.mjs +6 -0
  11. package/esm2022/lib/components/button/index.mjs +16 -0
  12. package/esm2022/lib/components/crud-table/crud-table.component.mjs +789 -0
  13. package/esm2022/lib/components/crud-table/crud-table.types.mjs +6 -0
  14. package/esm2022/lib/components/crud-table/index.mjs +16 -0
  15. package/esm2022/lib/components/form-builder/adapters/it-date-adapter.mjs +82 -0
  16. package/esm2022/lib/components/form-builder/directives/currency-input.directive.mjs +184 -0
  17. package/esm2022/lib/components/form-builder/form-builder.component.mjs +824 -0
  18. package/esm2022/lib/components/form-builder/form-wizard.component.mjs +510 -0
  19. package/esm2022/lib/components/form-builder/index.mjs +19 -0
  20. package/esm2022/lib/components/form-builder/services/form-condition.service.mjs +132 -0
  21. package/esm2022/lib/components/form-builder/services/form-validation.service.mjs +381 -0
  22. package/esm2022/lib/components/form-builder/services/location.service.mjs +140 -0
  23. package/esm2022/lib/components/form-builder/services/wizard-sync.service.mjs +84 -0
  24. package/esm2022/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +161 -0
  25. package/esm2022/lib/components/form-builder/sub-components/file-input/file-input.component.mjs +310 -0
  26. package/esm2022/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.mjs +648 -0
  27. package/esm2022/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +432 -0
  28. package/esm2022/lib/components/form-builder/types/condition.types.mjs +6 -0
  29. package/esm2022/lib/components/form-builder/types/field.types.mjs +6 -0
  30. package/esm2022/lib/components/form-builder/types/index.mjs +2 -0
  31. package/esm2022/lib/components/form-builder/types/schema.types.mjs +6 -0
  32. package/esm2022/lib/components/form-builder/types/territoriale.types.mjs +6 -0
  33. package/esm2022/lib/components/form-builder/types/validation.types.mjs +6 -0
  34. package/esm2022/lib/components/form-builder-editor/form-builder-editor.component.mjs +730 -0
  35. package/esm2022/lib/components/form-builder-editor/form-builder-editor.service.mjs +56 -0
  36. package/esm2022/lib/components/form-builder-editor/index.mjs +21 -0
  37. package/esm2022/lib/components/form-builder-editor/services/editor-persistence.service.mjs +190 -0
  38. package/esm2022/lib/components/form-builder-editor/services/editor-state.service.mjs +324 -0
  39. package/esm2022/lib/components/form-builder-editor/services/field-factory.service.mjs +188 -0
  40. package/esm2022/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.mjs +667 -0
  41. package/esm2022/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.mjs +317 -0
  42. package/esm2022/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.mjs +611 -0
  43. package/esm2022/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.mjs +267 -0
  44. package/esm2022/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.mjs +276 -0
  45. package/esm2022/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.mjs +323 -0
  46. package/esm2022/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.mjs +238 -0
  47. package/esm2022/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.mjs +472 -0
  48. package/esm2022/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.mjs +473 -0
  49. package/esm2022/lib/components/form-builder-editor/types/editor.types.mjs +6 -0
  50. package/esm2022/lib/components/layout-builder/index.mjs +18 -0
  51. package/esm2022/lib/components/layout-builder/layout-builder.component.mjs +1730 -0
  52. package/esm2022/lib/components/layout-builder/layout-builder.types.mjs +9 -0
  53. package/esm2022/lib/components/layout-builder/layout.service.mjs +239 -0
  54. package/esm2022/lib/components/modal/confirm-dialog.component.mjs +151 -0
  55. package/esm2022/lib/components/modal/index.mjs +4 -0
  56. package/esm2022/lib/components/modal/modal.component.mjs +139 -0
  57. package/esm2022/lib/components/modal/modal.service.mjs +194 -0
  58. package/esm2022/lib/components/modal/modal.types.mjs +6 -0
  59. package/esm2022/lib/components/page-header/breadcrumb.service.mjs +242 -0
  60. package/esm2022/lib/components/page-header/index.mjs +20 -0
  61. package/esm2022/lib/components/page-header/page-header.component.mjs +243 -0
  62. package/esm2022/lib/components/page-header/page-header.types.mjs +21 -0
  63. package/esm2022/lib/components/table/index.mjs +2 -0
  64. package/esm2022/lib/components/table/paginated-table.component.mjs +407 -0
  65. package/esm2022/lib/components/table/table.types.mjs +6 -0
  66. package/esm2022/lib/core/types/index.mjs +6 -0
  67. package/esm2022/lib/core/utils/index.mjs +53 -0
  68. package/esm2022/lib/sources/location-data.opt.json +8942 -0
  69. package/esm2022/lib/sources/nazioni.opt.json +215 -0
  70. package/esm2022/public-api.mjs +34 -0
  71. package/fesm2022/gnggln-ng-ui-system.mjs +55752 -0
  72. package/fesm2022/gnggln-ng-ui-system.mjs.map +1 -0
  73. package/index.d.ts +5 -0
  74. package/lib/components/accordion/accordion.component.d.ts +118 -0
  75. package/lib/components/accordion/accordion.types.d.ts +62 -0
  76. package/lib/components/accordion/index.d.ts +2 -0
  77. package/lib/components/base-layout/base-layout.component.d.ts +83 -0
  78. package/lib/components/base-layout/base-layout.types.d.ts +26 -0
  79. package/lib/components/base-layout/index.d.ts +13 -0
  80. package/lib/components/button/button-area.component.d.ts +88 -0
  81. package/lib/components/button/button.component.d.ts +55 -0
  82. package/lib/components/button/button.types.d.ts +70 -0
  83. package/lib/components/button/index.d.ts +15 -0
  84. package/lib/components/crud-table/crud-table.component.d.ts +143 -0
  85. package/lib/components/crud-table/crud-table.types.d.ts +207 -0
  86. package/lib/components/crud-table/index.d.ts +15 -0
  87. package/lib/components/form-builder/adapters/it-date-adapter.d.ts +32 -0
  88. package/lib/components/form-builder/directives/currency-input.directive.d.ts +48 -0
  89. package/lib/components/form-builder/form-builder.component.d.ts +183 -0
  90. package/lib/components/form-builder/form-wizard.component.d.ts +87 -0
  91. package/lib/components/form-builder/index.d.ts +13 -0
  92. package/lib/components/form-builder/services/form-condition.service.d.ts +46 -0
  93. package/lib/components/form-builder/services/form-validation.service.d.ts +63 -0
  94. package/lib/components/form-builder/services/location.service.d.ts +83 -0
  95. package/lib/components/form-builder/services/wizard-sync.service.d.ts +63 -0
  96. package/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +28 -0
  97. package/lib/components/form-builder/sub-components/file-input/file-input.component.d.ts +41 -0
  98. package/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.d.ts +145 -0
  99. package/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.d.ts +108 -0
  100. package/lib/components/form-builder/types/condition.types.d.ts +51 -0
  101. package/lib/components/form-builder/types/field.types.d.ts +288 -0
  102. package/lib/components/form-builder/types/index.d.ts +5 -0
  103. package/lib/components/form-builder/types/schema.types.d.ts +227 -0
  104. package/lib/components/form-builder/types/territoriale.types.d.ts +170 -0
  105. package/lib/components/form-builder/types/validation.types.d.ts +174 -0
  106. package/lib/components/form-builder-editor/form-builder-editor.component.d.ts +117 -0
  107. package/lib/components/form-builder-editor/form-builder-editor.service.d.ts +38 -0
  108. package/lib/components/form-builder-editor/index.d.ts +15 -0
  109. package/lib/components/form-builder-editor/services/editor-persistence.service.d.ts +42 -0
  110. package/lib/components/form-builder-editor/services/editor-state.service.d.ts +66 -0
  111. package/lib/components/form-builder-editor/services/field-factory.service.d.ts +28 -0
  112. package/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.d.ts +139 -0
  113. package/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.d.ts +43 -0
  114. package/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.d.ts +83 -0
  115. package/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.d.ts +40 -0
  116. package/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.d.ts +51 -0
  117. package/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.d.ts +63 -0
  118. package/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.d.ts +68 -0
  119. package/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.d.ts +82 -0
  120. package/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.d.ts +112 -0
  121. package/lib/components/form-builder-editor/types/editor.types.d.ts +124 -0
  122. package/lib/components/layout-builder/index.d.ts +16 -0
  123. package/lib/components/layout-builder/layout-builder.component.d.ts +85 -0
  124. package/lib/components/layout-builder/layout-builder.types.d.ts +436 -0
  125. package/lib/components/layout-builder/layout.service.d.ts +100 -0
  126. package/lib/components/modal/confirm-dialog.component.d.ts +46 -0
  127. package/lib/components/modal/index.d.ts +4 -0
  128. package/lib/components/modal/modal.component.d.ts +44 -0
  129. package/lib/components/modal/modal.service.d.ts +93 -0
  130. package/lib/components/modal/modal.types.d.ts +110 -0
  131. package/lib/components/page-header/breadcrumb.service.d.ts +96 -0
  132. package/lib/components/page-header/index.d.ts +16 -0
  133. package/lib/components/page-header/page-header.component.d.ts +59 -0
  134. package/lib/components/page-header/page-header.types.d.ts +96 -0
  135. package/lib/components/table/index.d.ts +2 -0
  136. package/lib/components/table/paginated-table.component.d.ts +85 -0
  137. package/lib/components/table/table.types.d.ts +81 -0
  138. package/lib/core/types/index.d.ts +57 -0
  139. package/lib/core/utils/index.d.ts +29 -0
  140. package/package.json +44 -0
  141. package/public-api.d.ts +22 -0
@@ -0,0 +1,242 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { NavigationEnd, Router } from '@angular/router';
3
+ import { filter } from 'rxjs/operators';
4
+ import { UI_BREADCRUMB_LABEL_RESOLVER, } from './page-header.types';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Service that builds a nested breadcrumb trail from Angular route configuration.
8
+ *
9
+ * Routes must define `data.id`, `data.title`, and optionally `data.breadcrumbs`
10
+ * (an array of parent route IDs) for the chain to resolve correctly.
11
+ *
12
+ * Supports lazy-loaded routes: the internal route map is rebuilt automatically
13
+ * whenever new routes are loaded via `NavigationEnd`.
14
+ *
15
+ * Label resolution for route parameters (`:param`) is delegated to an injectable
16
+ * `UiLabelResolverFn` via the `UI_BREADCRUMB_LABEL_RESOLVER` token.
17
+ *
18
+ * @usageNotes
19
+ * ### Route configuration
20
+ * ```typescript
21
+ * const routes: Routes = [
22
+ * {
23
+ * path: 'users',
24
+ * data: { id: 'users', title: 'Utenti' },
25
+ * children: [
26
+ * {
27
+ * path: ':userId',
28
+ * data: { id: 'user-detail', title: ':userId', breadcrumbs: ['users'] },
29
+ * component: UserDetailComponent,
30
+ * },
31
+ * ],
32
+ * },
33
+ * ];
34
+ * ```
35
+ *
36
+ * ### Custom label resolver
37
+ * ```typescript
38
+ * providers: [
39
+ * {
40
+ * provide: UI_BREADCRUMB_LABEL_RESOLVER,
41
+ * useValue: (name: string, value: string) =>
42
+ * name === 'userId' ? `User #${value}` : value,
43
+ * },
44
+ * ]
45
+ * ```
46
+ */
47
+ export class UiBreadcrumbService {
48
+ constructor() {
49
+ this.router = inject(Router);
50
+ this.labelResolver = inject(UI_BREADCRUMB_LABEL_RESOLVER);
51
+ /** @internal Map of route ID → breadcrumb configuration. */
52
+ this.breadcrumbMap = new Map();
53
+ /** @internal Tracks route count to detect lazy-loaded route additions. */
54
+ this.lastRouteConfigLength = 0;
55
+ /** @internal Last computed breadcrumbs for navigateBack. */
56
+ this.lastBreadcrumbs = [];
57
+ this.rebuildRouteMap();
58
+ this.router.events
59
+ .pipe(filter((event) => event instanceof NavigationEnd))
60
+ .subscribe(() => this.rebuildRouteMapIfNeeded());
61
+ }
62
+ /**
63
+ * Computes the breadcrumb trail for the currently active route.
64
+ *
65
+ * @param route - The root `ActivatedRoute` (typically injected in the component).
66
+ * @returns Ordered array of breadcrumb items from root to current route.
67
+ */
68
+ getBreadcrumbsForRoute(route) {
69
+ let deepestRoute = route;
70
+ while (deepestRoute.firstChild) {
71
+ deepestRoute = deepestRoute.firstChild;
72
+ }
73
+ let routeWithId = deepestRoute;
74
+ while (routeWithId && !routeWithId.snapshot.data['id']) {
75
+ routeWithId = routeWithId.parent;
76
+ }
77
+ const routeId = routeWithId?.snapshot.data['id'];
78
+ if (!routeId) {
79
+ this.lastBreadcrumbs = [];
80
+ return [];
81
+ }
82
+ const params = this.collectParamsFromPath(route);
83
+ const breadcrumbs = this.buildBreadcrumbChain(routeId, params);
84
+ this.lastBreadcrumbs = breadcrumbs;
85
+ return breadcrumbs;
86
+ }
87
+ /**
88
+ * Navigates to the previous breadcrumb (parent route).
89
+ * Falls back to `fallbackUrl` (default: `/`) when no parent exists.
90
+ */
91
+ navigateBack(fallbackUrl = '/') {
92
+ const prev = this.lastBreadcrumbs.length > 1 ? this.lastBreadcrumbs[this.lastBreadcrumbs.length - 2] : null;
93
+ const target = prev?.url ?? fallbackUrl;
94
+ this.router.navigateByUrl(target);
95
+ }
96
+ /** @internal Collects all route params from the full path (including parents). */
97
+ collectParamsFromPath(route) {
98
+ const params = {};
99
+ for (const r of route.pathFromRoot) {
100
+ Object.assign(params, r.snapshot.params);
101
+ }
102
+ return params;
103
+ }
104
+ // ─── Private helpers ─────────────────────────────────────────────
105
+ /** @internal Rebuilds the map only when new lazy routes appear. */
106
+ rebuildRouteMapIfNeeded() {
107
+ const currentLength = this.countRoutes(this.router.config);
108
+ if (currentLength !== this.lastRouteConfigLength) {
109
+ this.rebuildRouteMap();
110
+ }
111
+ }
112
+ /** @internal Recursively counts routes including lazy-loaded children. */
113
+ countRoutes(routes) {
114
+ let count = routes.length;
115
+ for (const route of routes) {
116
+ if (route.children) {
117
+ count += this.countRoutes(route.children);
118
+ }
119
+ if (route._loadedRoutes) {
120
+ count += this.countRoutes(route._loadedRoutes);
121
+ }
122
+ }
123
+ return count;
124
+ }
125
+ /** @internal Clears and rebuilds the full route → breadcrumb map. */
126
+ rebuildRouteMap() {
127
+ this.breadcrumbMap.clear();
128
+ this.buildRouteMap(this.router.config);
129
+ this.lastRouteConfigLength = this.countRoutes(this.router.config);
130
+ }
131
+ /** @internal Recursively walks route tree to build the breadcrumb map. */
132
+ buildRouteMap(routes, parentPath = '') {
133
+ for (const route of routes) {
134
+ const currentPath = parentPath + '/' + (route.path || '');
135
+ if (route.data?.['id']) {
136
+ const fullPath = this.normalizePath(currentPath);
137
+ this.breadcrumbMap.set(route.data['id'], {
138
+ id: route.data['id'],
139
+ path: fullPath,
140
+ label: route.data['title'] || route.path || route.data['id'],
141
+ parentIds: route.data['breadcrumbs'] || [],
142
+ metadata: route.data,
143
+ });
144
+ }
145
+ if (route.children) {
146
+ this.buildRouteMap(route.children, currentPath);
147
+ }
148
+ if (route._loadedRoutes) {
149
+ this.buildRouteMap(route._loadedRoutes, currentPath);
150
+ }
151
+ }
152
+ }
153
+ /** @internal Builds the full breadcrumb chain for a route by its ID. */
154
+ buildBreadcrumbChain(routeId, params) {
155
+ const config = this.breadcrumbMap.get(routeId);
156
+ if (!config)
157
+ return [];
158
+ this.saveFullPath(routeId, this.router.url);
159
+ const parentChain = this.getParentChain(config.parentIds, params);
160
+ const breadcrumbs = [...parentChain];
161
+ breadcrumbs.push({
162
+ label: this.resolveLabel(config.label, params),
163
+ url: this.stripQueryParams(this.router.url),
164
+ isLast: true,
165
+ });
166
+ return breadcrumbs;
167
+ }
168
+ /** @internal Resolves parent breadcrumbs from ordered parent IDs. */
169
+ getParentChain(parentIds, params) {
170
+ if (!parentIds?.length)
171
+ return [];
172
+ return parentIds
173
+ .map((id) => {
174
+ const config = this.breadcrumbMap.get(id);
175
+ if (!config)
176
+ return null;
177
+ return {
178
+ label: this.resolveLabel(config.label, params),
179
+ url: this.resolveUrl(config.path, params),
180
+ isLast: false,
181
+ };
182
+ })
183
+ .filter(Boolean);
184
+ }
185
+ /**
186
+ * @internal Resolves `:param` placeholders in a label using
187
+ * the injected label resolver function.
188
+ */
189
+ resolveLabel(label, params) {
190
+ if (!label.includes(':'))
191
+ return label;
192
+ let resolved = label;
193
+ for (const [key, value] of Object.entries(params)) {
194
+ const readableValue = this.labelResolver(key, value);
195
+ resolved = resolved.replace(`:${key}`, readableValue);
196
+ }
197
+ return resolved;
198
+ }
199
+ /** @internal Resolves `:param` placeholders in a path and creates a URL. */
200
+ resolveUrl(path, params) {
201
+ let processedPath = path;
202
+ if (path.includes(':')) {
203
+ const segments = path.split('/');
204
+ const processedSegments = segments.map((segment) => {
205
+ if (segment.startsWith(':')) {
206
+ const paramName = segment.substring(1);
207
+ return params[paramName] || segment;
208
+ }
209
+ return segment;
210
+ });
211
+ processedPath = processedSegments.join('/');
212
+ }
213
+ try {
214
+ return this.router.createUrlTree([processedPath]).toString();
215
+ }
216
+ catch {
217
+ return processedPath;
218
+ }
219
+ }
220
+ /** @internal Normalizes path by collapsing double slashes and trimming trailing slash. */
221
+ normalizePath(path) {
222
+ return path.replace(/\/+/g, '/').replace(/\/$/, '');
223
+ }
224
+ /** @internal Removes query parameters from a URL. */
225
+ stripQueryParams(url) {
226
+ return url.split('?')[0];
227
+ }
228
+ /** @internal Caches the fully resolved URL for a route ID. */
229
+ saveFullPath(routeId, fullPath) {
230
+ const config = this.breadcrumbMap.get(routeId);
231
+ if (config) {
232
+ config.fullPath = this.stripQueryParams(fullPath);
233
+ }
234
+ }
235
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBreadcrumbService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
236
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBreadcrumbService, providedIn: 'root' }); }
237
+ }
238
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBreadcrumbService, decorators: [{
239
+ type: Injectable,
240
+ args: [{ providedIn: 'root' }]
241
+ }], ctorParameters: () => [] });
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9wYWdlLWhlYWRlci9icmVhZGNydW1iLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFrQixhQUFhLEVBQUUsTUFBTSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFJTCw0QkFBNEIsR0FDN0IsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Q0c7QUFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBVzlCO1FBVmlCLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsa0JBQWEsR0FBRyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUV0RSw0REFBNEQ7UUFDcEQsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztRQUM5RCwwRUFBMEU7UUFDbEUsMEJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLDREQUE0RDtRQUNwRCxvQkFBZSxHQUF1QixFQUFFLENBQUM7UUFHL0MsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTthQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsQ0FBQzthQUN2RCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxzQkFBc0IsQ0FBQyxLQUFxQjtRQUMxQyxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDekIsT0FBTyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDL0IsWUFBWSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksV0FBVyxHQUEwQixZQUFZLENBQUM7UUFDdEQsT0FBTyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZELFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ25DLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUMxQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztRQUNuQyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLFdBQVcsR0FBRyxHQUFHO1FBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVHLE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksV0FBVyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxrRkFBa0Y7SUFDMUUscUJBQXFCLENBQUMsS0FBcUI7UUFDakQsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsb0VBQW9FO0lBRXBFLG1FQUFtRTtJQUMzRCx1QkFBdUI7UUFDN0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELElBQUksYUFBYSxLQUFLLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELDBFQUEwRTtJQUNsRSxXQUFXLENBQUMsTUFBYztRQUNoQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzFCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0IsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25CLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsSUFBSyxLQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2pDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFFLEtBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELHFFQUFxRTtJQUM3RCxlQUFlO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELDBFQUEwRTtJQUNsRSxhQUFhLENBQUMsTUFBYyxFQUFFLFVBQVUsR0FBRyxFQUFFO1FBQ25ELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0IsTUFBTSxXQUFXLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7WUFFMUQsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDdkMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNwQixJQUFJLEVBQUUsUUFBUTtvQkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUM1RCxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO29CQUMxQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUk7aUJBQ3JCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFDRCxJQUFLLEtBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBRSxLQUFhLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELHdFQUF3RTtJQUNoRSxvQkFBb0IsQ0FBQyxPQUFlLEVBQUUsTUFBOEI7UUFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRSxNQUFNLFdBQVcsR0FBdUIsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBRXpELFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztZQUM5QyxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQzNDLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELHFFQUFxRTtJQUM3RCxjQUFjLENBQUMsU0FBbUIsRUFBRSxNQUE4QjtRQUN4RSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVsQyxPQUFPLFNBQVM7YUFDYixHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNWLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBRXpCLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7Z0JBQzlDLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO2dCQUN6QyxNQUFNLEVBQUUsS0FBSzthQUNkLENBQUM7UUFDSixDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsT0FBTyxDQUF1QixDQUFDO0lBQzNDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxZQUFZLENBQUMsS0FBYSxFQUFFLE1BQThCO1FBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXZDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNyQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2xELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JELFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCw0RUFBNEU7SUFDcEUsVUFBVSxDQUFDLElBQVksRUFBRSxNQUE4QjtRQUM3RCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzVCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztnQkFDdEMsQ0FBQztnQkFDRCxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUNILGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9ELENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVELDBGQUEwRjtJQUNsRixhQUFhLENBQUMsSUFBWTtRQUNoQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELHFEQUFxRDtJQUM3QyxnQkFBZ0IsQ0FBQyxHQUFXO1FBQ2xDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsOERBQThEO0lBQ3RELFlBQVksQ0FBQyxPQUFlLEVBQUUsUUFBZ0I7UUFDcEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDOytHQXJOVSxtQkFBbUI7bUhBQW5CLG1CQUFtQixjQUROLE1BQU07OzRGQUNuQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtcclxuICBVaUJyZWFkY3J1bWJDb25maWcsXHJcbiAgVWlCcmVhZGNydW1iSXRlbSxcclxuICBVaUxhYmVsUmVzb2x2ZXJGbixcclxuICBVSV9CUkVBRENSVU1CX0xBQkVMX1JFU09MVkVSLFxyXG59IGZyb20gJy4vcGFnZS1oZWFkZXIudHlwZXMnO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgdGhhdCBidWlsZHMgYSBuZXN0ZWQgYnJlYWRjcnVtYiB0cmFpbCBmcm9tIEFuZ3VsYXIgcm91dGUgY29uZmlndXJhdGlvbi5cclxuICpcclxuICogUm91dGVzIG11c3QgZGVmaW5lIGBkYXRhLmlkYCwgYGRhdGEudGl0bGVgLCBhbmQgb3B0aW9uYWxseSBgZGF0YS5icmVhZGNydW1ic2BcclxuICogKGFuIGFycmF5IG9mIHBhcmVudCByb3V0ZSBJRHMpIGZvciB0aGUgY2hhaW4gdG8gcmVzb2x2ZSBjb3JyZWN0bHkuXHJcbiAqXHJcbiAqIFN1cHBvcnRzIGxhenktbG9hZGVkIHJvdXRlczogdGhlIGludGVybmFsIHJvdXRlIG1hcCBpcyByZWJ1aWx0IGF1dG9tYXRpY2FsbHlcclxuICogd2hlbmV2ZXIgbmV3IHJvdXRlcyBhcmUgbG9hZGVkIHZpYSBgTmF2aWdhdGlvbkVuZGAuXHJcbiAqXHJcbiAqIExhYmVsIHJlc29sdXRpb24gZm9yIHJvdXRlIHBhcmFtZXRlcnMgKGA6cGFyYW1gKSBpcyBkZWxlZ2F0ZWQgdG8gYW4gaW5qZWN0YWJsZVxyXG4gKiBgVWlMYWJlbFJlc29sdmVyRm5gIHZpYSB0aGUgYFVJX0JSRUFEQ1JVTUJfTEFCRUxfUkVTT0xWRVJgIHRva2VuLlxyXG4gKlxyXG4gKiBAdXNhZ2VOb3Rlc1xyXG4gKiAjIyMgUm91dGUgY29uZmlndXJhdGlvblxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xyXG4gKiAgIHtcclxuICogICAgIHBhdGg6ICd1c2VycycsXHJcbiAqICAgICBkYXRhOiB7IGlkOiAndXNlcnMnLCB0aXRsZTogJ1V0ZW50aScgfSxcclxuICogICAgIGNoaWxkcmVuOiBbXHJcbiAqICAgICAgIHtcclxuICogICAgICAgICBwYXRoOiAnOnVzZXJJZCcsXHJcbiAqICAgICAgICAgZGF0YTogeyBpZDogJ3VzZXItZGV0YWlsJywgdGl0bGU6ICc6dXNlcklkJywgYnJlYWRjcnVtYnM6IFsndXNlcnMnXSB9LFxyXG4gKiAgICAgICAgIGNvbXBvbmVudDogVXNlckRldGFpbENvbXBvbmVudCxcclxuICogICAgICAgfSxcclxuICogICAgIF0sXHJcbiAqICAgfSxcclxuICogXTtcclxuICogYGBgXHJcbiAqXHJcbiAqICMjIyBDdXN0b20gbGFiZWwgcmVzb2x2ZXJcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBwcm92aWRlcnM6IFtcclxuICogICB7XHJcbiAqICAgICBwcm92aWRlOiBVSV9CUkVBRENSVU1CX0xBQkVMX1JFU09MVkVSLFxyXG4gKiAgICAgdXNlVmFsdWU6IChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+XHJcbiAqICAgICAgIG5hbWUgPT09ICd1c2VySWQnID8gYFVzZXIgIyR7dmFsdWV9YCA6IHZhbHVlLFxyXG4gKiAgIH0sXHJcbiAqIF1cclxuICogYGBgXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgVWlCcmVhZGNydW1iU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxhYmVsUmVzb2x2ZXIgPSBpbmplY3QoVUlfQlJFQURDUlVNQl9MQUJFTF9SRVNPTFZFUik7XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgTWFwIG9mIHJvdXRlIElEIOKGkiBicmVhZGNydW1iIGNvbmZpZ3VyYXRpb24uICovXHJcbiAgcHJpdmF0ZSBicmVhZGNydW1iTWFwID0gbmV3IE1hcDxzdHJpbmcsIFVpQnJlYWRjcnVtYkNvbmZpZz4oKTtcclxuICAvKiogQGludGVybmFsIFRyYWNrcyByb3V0ZSBjb3VudCB0byBkZXRlY3QgbGF6eS1sb2FkZWQgcm91dGUgYWRkaXRpb25zLiAqL1xyXG4gIHByaXZhdGUgbGFzdFJvdXRlQ29uZmlnTGVuZ3RoID0gMDtcclxuICAvKiogQGludGVybmFsIExhc3QgY29tcHV0ZWQgYnJlYWRjcnVtYnMgZm9yIG5hdmlnYXRlQmFjay4gKi9cclxuICBwcml2YXRlIGxhc3RCcmVhZGNydW1iczogVWlCcmVhZGNydW1iSXRlbVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5yZWJ1aWxkUm91dGVNYXAoKTtcclxuXHJcbiAgICB0aGlzLnJvdXRlci5ldmVudHNcclxuICAgICAgLnBpcGUoZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlYnVpbGRSb3V0ZU1hcElmTmVlZGVkKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcHV0ZXMgdGhlIGJyZWFkY3J1bWIgdHJhaWwgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIHJvdXRlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvdXRlIC0gVGhlIHJvb3QgYEFjdGl2YXRlZFJvdXRlYCAodHlwaWNhbGx5IGluamVjdGVkIGluIHRoZSBjb21wb25lbnQpLlxyXG4gICAqIEByZXR1cm5zIE9yZGVyZWQgYXJyYXkgb2YgYnJlYWRjcnVtYiBpdGVtcyBmcm9tIHJvb3QgdG8gY3VycmVudCByb3V0ZS5cclxuICAgKi9cclxuICBnZXRCcmVhZGNydW1ic0ZvclJvdXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IFVpQnJlYWRjcnVtYkl0ZW1bXSB7XHJcbiAgICBsZXQgZGVlcGVzdFJvdXRlID0gcm91dGU7XHJcbiAgICB3aGlsZSAoZGVlcGVzdFJvdXRlLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgZGVlcGVzdFJvdXRlID0gZGVlcGVzdFJvdXRlLmZpcnN0Q2hpbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJvdXRlV2l0aElkOiBBY3RpdmF0ZWRSb3V0ZSB8IG51bGwgPSBkZWVwZXN0Um91dGU7XHJcbiAgICB3aGlsZSAocm91dGVXaXRoSWQgJiYgIXJvdXRlV2l0aElkLnNuYXBzaG90LmRhdGFbJ2lkJ10pIHtcclxuICAgICAgcm91dGVXaXRoSWQgPSByb3V0ZVdpdGhJZC5wYXJlbnQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCByb3V0ZUlkID0gcm91dGVXaXRoSWQ/LnNuYXBzaG90LmRhdGFbJ2lkJ107XHJcbiAgICBpZiAoIXJvdXRlSWQpIHtcclxuICAgICAgdGhpcy5sYXN0QnJlYWRjcnVtYnMgPSBbXTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuY29sbGVjdFBhcmFtc0Zyb21QYXRoKHJvdXRlKTtcclxuICAgIGNvbnN0IGJyZWFkY3J1bWJzID0gdGhpcy5idWlsZEJyZWFkY3J1bWJDaGFpbihyb3V0ZUlkLCBwYXJhbXMpO1xyXG4gICAgdGhpcy5sYXN0QnJlYWRjcnVtYnMgPSBicmVhZGNydW1icztcclxuICAgIHJldHVybiBicmVhZGNydW1icztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgYnJlYWRjcnVtYiAocGFyZW50IHJvdXRlKS5cclxuICAgKiBGYWxscyBiYWNrIHRvIGBmYWxsYmFja1VybGAgKGRlZmF1bHQ6IGAvYCkgd2hlbiBubyBwYXJlbnQgZXhpc3RzLlxyXG4gICAqL1xyXG4gIG5hdmlnYXRlQmFjayhmYWxsYmFja1VybCA9ICcvJyk6IHZvaWQge1xyXG4gICAgY29uc3QgcHJldiA9IHRoaXMubGFzdEJyZWFkY3J1bWJzLmxlbmd0aCA+IDEgPyB0aGlzLmxhc3RCcmVhZGNydW1ic1t0aGlzLmxhc3RCcmVhZGNydW1icy5sZW5ndGggLSAyXSA6IG51bGw7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBwcmV2Py51cmwgPz8gZmFsbGJhY2tVcmw7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRhcmdldCk7XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsIENvbGxlY3RzIGFsbCByb3V0ZSBwYXJhbXMgZnJvbSB0aGUgZnVsbCBwYXRoIChpbmNsdWRpbmcgcGFyZW50cykuICovXHJcbiAgcHJpdmF0ZSBjb2xsZWN0UGFyYW1zRnJvbVBhdGgocm91dGU6IEFjdGl2YXRlZFJvdXRlKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgIGZvciAoY29uc3QgciBvZiByb3V0ZS5wYXRoRnJvbVJvb3QpIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHIuc25hcHNob3QucGFyYW1zKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgUHJpdmF0ZSBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICAvKiogQGludGVybmFsIFJlYnVpbGRzIHRoZSBtYXAgb25seSB3aGVuIG5ldyBsYXp5IHJvdXRlcyBhcHBlYXIuICovXHJcbiAgcHJpdmF0ZSByZWJ1aWxkUm91dGVNYXBJZk5lZWRlZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRMZW5ndGggPSB0aGlzLmNvdW50Um91dGVzKHRoaXMucm91dGVyLmNvbmZpZyk7XHJcbiAgICBpZiAoY3VycmVudExlbmd0aCAhPT0gdGhpcy5sYXN0Um91dGVDb25maWdMZW5ndGgpIHtcclxuICAgICAgdGhpcy5yZWJ1aWxkUm91dGVNYXAoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgUmVjdXJzaXZlbHkgY291bnRzIHJvdXRlcyBpbmNsdWRpbmcgbGF6eS1sb2FkZWQgY2hpbGRyZW4uICovXHJcbiAgcHJpdmF0ZSBjb3VudFJvdXRlcyhyb3V0ZXM6IFJvdXRlcyk6IG51bWJlciB7XHJcbiAgICBsZXQgY291bnQgPSByb3V0ZXMubGVuZ3RoO1xyXG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcclxuICAgICAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgY291bnQgKz0gdGhpcy5jb3VudFJvdXRlcyhyb3V0ZS5jaGlsZHJlbik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKChyb3V0ZSBhcyBhbnkpLl9sb2FkZWRSb3V0ZXMpIHtcclxuICAgICAgICBjb3VudCArPSB0aGlzLmNvdW50Um91dGVzKChyb3V0ZSBhcyBhbnkpLl9sb2FkZWRSb3V0ZXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY291bnQ7XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsIENsZWFycyBhbmQgcmVidWlsZHMgdGhlIGZ1bGwgcm91dGUg4oaSIGJyZWFkY3J1bWIgbWFwLiAqL1xyXG4gIHByaXZhdGUgcmVidWlsZFJvdXRlTWFwKCk6IHZvaWQge1xyXG4gICAgdGhpcy5icmVhZGNydW1iTWFwLmNsZWFyKCk7XHJcbiAgICB0aGlzLmJ1aWxkUm91dGVNYXAodGhpcy5yb3V0ZXIuY29uZmlnKTtcclxuICAgIHRoaXMubGFzdFJvdXRlQ29uZmlnTGVuZ3RoID0gdGhpcy5jb3VudFJvdXRlcyh0aGlzLnJvdXRlci5jb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCBSZWN1cnNpdmVseSB3YWxrcyByb3V0ZSB0cmVlIHRvIGJ1aWxkIHRoZSBicmVhZGNydW1iIG1hcC4gKi9cclxuICBwcml2YXRlIGJ1aWxkUm91dGVNYXAocm91dGVzOiBSb3V0ZXMsIHBhcmVudFBhdGggPSAnJyk6IHZvaWQge1xyXG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcclxuICAgICAgY29uc3QgY3VycmVudFBhdGggPSBwYXJlbnRQYXRoICsgJy8nICsgKHJvdXRlLnBhdGggfHwgJycpO1xyXG5cclxuICAgICAgaWYgKHJvdXRlLmRhdGE/LlsnaWQnXSkge1xyXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gdGhpcy5ub3JtYWxpemVQYXRoKGN1cnJlbnRQYXRoKTtcclxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJNYXAuc2V0KHJvdXRlLmRhdGFbJ2lkJ10sIHtcclxuICAgICAgICAgIGlkOiByb3V0ZS5kYXRhWydpZCddLFxyXG4gICAgICAgICAgcGF0aDogZnVsbFBhdGgsXHJcbiAgICAgICAgICBsYWJlbDogcm91dGUuZGF0YVsndGl0bGUnXSB8fCByb3V0ZS5wYXRoIHx8IHJvdXRlLmRhdGFbJ2lkJ10sXHJcbiAgICAgICAgICBwYXJlbnRJZHM6IHJvdXRlLmRhdGFbJ2JyZWFkY3J1bWJzJ10gfHwgW10sXHJcbiAgICAgICAgICBtZXRhZGF0YTogcm91dGUuZGF0YSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgdGhpcy5idWlsZFJvdXRlTWFwKHJvdXRlLmNoaWxkcmVuLCBjdXJyZW50UGF0aCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKChyb3V0ZSBhcyBhbnkpLl9sb2FkZWRSb3V0ZXMpIHtcclxuICAgICAgICB0aGlzLmJ1aWxkUm91dGVNYXAoKHJvdXRlIGFzIGFueSkuX2xvYWRlZFJvdXRlcywgY3VycmVudFBhdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsIEJ1aWxkcyB0aGUgZnVsbCBicmVhZGNydW1iIGNoYWluIGZvciBhIHJvdXRlIGJ5IGl0cyBJRC4gKi9cclxuICBwcml2YXRlIGJ1aWxkQnJlYWRjcnVtYkNoYWluKHJvdXRlSWQ6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogVWlCcmVhZGNydW1iSXRlbVtdIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuYnJlYWRjcnVtYk1hcC5nZXQocm91dGVJZCk7XHJcbiAgICBpZiAoIWNvbmZpZykgcmV0dXJuIFtdO1xyXG5cclxuICAgIHRoaXMuc2F2ZUZ1bGxQYXRoKHJvdXRlSWQsIHRoaXMucm91dGVyLnVybCk7XHJcblxyXG4gICAgY29uc3QgcGFyZW50Q2hhaW4gPSB0aGlzLmdldFBhcmVudENoYWluKGNvbmZpZy5wYXJlbnRJZHMsIHBhcmFtcyk7XHJcbiAgICBjb25zdCBicmVhZGNydW1iczogVWlCcmVhZGNydW1iSXRlbVtdID0gWy4uLnBhcmVudENoYWluXTtcclxuXHJcbiAgICBicmVhZGNydW1icy5wdXNoKHtcclxuICAgICAgbGFiZWw6IHRoaXMucmVzb2x2ZUxhYmVsKGNvbmZpZy5sYWJlbCwgcGFyYW1zKSxcclxuICAgICAgdXJsOiB0aGlzLnN0cmlwUXVlcnlQYXJhbXModGhpcy5yb3V0ZXIudXJsKSxcclxuICAgICAgaXNMYXN0OiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJyZWFkY3J1bWJzO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCBSZXNvbHZlcyBwYXJlbnQgYnJlYWRjcnVtYnMgZnJvbSBvcmRlcmVkIHBhcmVudCBJRHMuICovXHJcbiAgcHJpdmF0ZSBnZXRQYXJlbnRDaGFpbihwYXJlbnRJZHM6IHN0cmluZ1tdLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBVaUJyZWFkY3J1bWJJdGVtW10ge1xyXG4gICAgaWYgKCFwYXJlbnRJZHM/Lmxlbmd0aCkgcmV0dXJuIFtdO1xyXG5cclxuICAgIHJldHVybiBwYXJlbnRJZHNcclxuICAgICAgLm1hcCgoaWQpID0+IHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmJyZWFkY3J1bWJNYXAuZ2V0KGlkKTtcclxuICAgICAgICBpZiAoIWNvbmZpZykgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5yZXNvbHZlTGFiZWwoY29uZmlnLmxhYmVsLCBwYXJhbXMpLFxyXG4gICAgICAgICAgdXJsOiB0aGlzLnJlc29sdmVVcmwoY29uZmlnLnBhdGgsIHBhcmFtcyksXHJcbiAgICAgICAgICBpc0xhc3Q6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgVWlCcmVhZGNydW1iSXRlbVtdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGludGVybmFsIFJlc29sdmVzIGA6cGFyYW1gIHBsYWNlaG9sZGVycyBpbiBhIGxhYmVsIHVzaW5nXHJcbiAgICogdGhlIGluamVjdGVkIGxhYmVsIHJlc29sdmVyIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVzb2x2ZUxhYmVsKGxhYmVsOiBzdHJpbmcsIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XHJcbiAgICBpZiAoIWxhYmVsLmluY2x1ZGVzKCc6JykpIHJldHVybiBsYWJlbDtcclxuXHJcbiAgICBsZXQgcmVzb2x2ZWQgPSBsYWJlbDtcclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFtcykpIHtcclxuICAgICAgY29uc3QgcmVhZGFibGVWYWx1ZSA9IHRoaXMubGFiZWxSZXNvbHZlcihrZXksIHZhbHVlKTtcclxuICAgICAgcmVzb2x2ZWQgPSByZXNvbHZlZC5yZXBsYWNlKGA6JHtrZXl9YCwgcmVhZGFibGVWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzb2x2ZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsIFJlc29sdmVzIGA6cGFyYW1gIHBsYWNlaG9sZGVycyBpbiBhIHBhdGggYW5kIGNyZWF0ZXMgYSBVUkwuICovXHJcbiAgcHJpdmF0ZSByZXNvbHZlVXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcclxuICAgIGxldCBwcm9jZXNzZWRQYXRoID0gcGF0aDtcclxuXHJcbiAgICBpZiAocGF0aC5pbmNsdWRlcygnOicpKSB7XHJcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpO1xyXG4gICAgICBjb25zdCBwcm9jZXNzZWRTZWdtZW50cyA9IHNlZ21lbnRzLm1hcCgoc2VnbWVudCkgPT4ge1xyXG4gICAgICAgIGlmIChzZWdtZW50LnN0YXJ0c1dpdGgoJzonKSkge1xyXG4gICAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gc2VnbWVudC5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgICByZXR1cm4gcGFyYW1zW3BhcmFtTmFtZV0gfHwgc2VnbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlZ21lbnQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICBwcm9jZXNzZWRQYXRoID0gcHJvY2Vzc2VkU2VnbWVudHMuam9pbignLycpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtwcm9jZXNzZWRQYXRoXSkudG9TdHJpbmcoKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gcHJvY2Vzc2VkUGF0aDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgTm9ybWFsaXplcyBwYXRoIGJ5IGNvbGxhcHNpbmcgZG91YmxlIHNsYXNoZXMgYW5kIHRyaW1taW5nIHRyYWlsaW5nIHNsYXNoLiAqL1xyXG4gIHByaXZhdGUgbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwvKy9nLCAnLycpLnJlcGxhY2UoL1xcLyQvLCAnJyk7XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsIFJlbW92ZXMgcXVlcnkgcGFyYW1ldGVycyBmcm9tIGEgVVJMLiAqL1xyXG4gIHByaXZhdGUgc3RyaXBRdWVyeVBhcmFtcyh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdXJsLnNwbGl0KCc/JylbMF07XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsIENhY2hlcyB0aGUgZnVsbHkgcmVzb2x2ZWQgVVJMIGZvciBhIHJvdXRlIElELiAqL1xyXG4gIHByaXZhdGUgc2F2ZUZ1bGxQYXRoKHJvdXRlSWQ6IHN0cmluZywgZnVsbFBhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5icmVhZGNydW1iTWFwLmdldChyb3V0ZUlkKTtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgY29uZmlnLmZ1bGxQYXRoID0gdGhpcy5zdHJpcFF1ZXJ5UGFyYW1zKGZ1bGxQYXRoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ng-ui-system — Page Header entry point.
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import {
7
+ * UiPageHeaderComponent,
8
+ * UiBreadcrumbService,
9
+ * UiBreadcrumbItem,
10
+ * UI_BREADCRUMB_LABEL_RESOLVER,
11
+ * } from 'ng-ui-system';
12
+ * ```
13
+ */
14
+ // Components
15
+ export { UiPageHeaderComponent } from './page-header.component';
16
+ // Services
17
+ export { UiBreadcrumbService } from './breadcrumb.service';
18
+ // Types & Tokens
19
+ export { UI_BREADCRUMB_LABEL_RESOLVER, } from './page-header.types';
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy11aS1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL3BhZ2UtaGVhZGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILGFBQWE7QUFDYixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRSxXQUFXO0FBQ1gsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFM0QsaUJBQWlCO0FBQ2pCLE9BQU8sRUFJTCw0QkFBNEIsR0FDN0IsTUFBTSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBuZy11aS1zeXN0ZW0g4oCUIFBhZ2UgSGVhZGVyIGVudHJ5IHBvaW50LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7XHJcbiAqICAgVWlQYWdlSGVhZGVyQ29tcG9uZW50LFxyXG4gKiAgIFVpQnJlYWRjcnVtYlNlcnZpY2UsXHJcbiAqICAgVWlCcmVhZGNydW1iSXRlbSxcclxuICogICBVSV9CUkVBRENSVU1CX0xBQkVMX1JFU09MVkVSLFxyXG4gKiB9IGZyb20gJ25nLXVpLXN5c3RlbSc7XHJcbiAqIGBgYFxyXG4gKi9cclxuXHJcbi8vIENvbXBvbmVudHNcclxuZXhwb3J0IHsgVWlQYWdlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdlLWhlYWRlci5jb21wb25lbnQnO1xyXG5cclxuLy8gU2VydmljZXNcclxuZXhwb3J0IHsgVWlCcmVhZGNydW1iU2VydmljZSB9IGZyb20gJy4vYnJlYWRjcnVtYi5zZXJ2aWNlJztcclxuXHJcbi8vIFR5cGVzICYgVG9rZW5zXHJcbmV4cG9ydCB7XHJcbiAgVWlCcmVhZGNydW1iSXRlbSxcclxuICBVaUJyZWFkY3J1bWJDb25maWcsXHJcbiAgVWlMYWJlbFJlc29sdmVyRm4sXHJcbiAgVUlfQlJFQURDUlVNQl9MQUJFTF9SRVNPTFZFUixcclxufSBmcm9tICcuL3BhZ2UtaGVhZGVyLnR5cGVzJztcclxuIl19
@@ -0,0 +1,243 @@
1
+ import { ChangeDetectorRef, Component, DestroyRef, inject, Input, ChangeDetectionStrategy, ViewEncapsulation, } from '@angular/core';
2
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
+ import { ActivatedRoute, NavigationEnd, Router, RouterLink } from '@angular/router';
4
+ import { Title } from '@angular/platform-browser';
5
+ import { filter } from 'rxjs/operators';
6
+ import { LucideAngularModule } from 'lucide-angular';
7
+ import { UiBreadcrumbService } from './breadcrumb.service';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "lucide-angular";
10
+ /**
11
+ * Page header component that renders a breadcrumb navigation trail
12
+ * and a page title. Integrates with `UiBreadcrumbService` to
13
+ * automatically derive breadcrumbs from Angular route configuration.
14
+ *
15
+ * The breadcrumb trail is generated from route `data` properties:
16
+ * - `data.id` — unique route identifier
17
+ * - `data.title` — display label
18
+ * - `data.breadcrumbs` — ordered array of parent route IDs
19
+ *
20
+ * @selector ui-page-header
21
+ *
22
+ * @example
23
+ * ```html
24
+ * <!-- Auto breadcrumbs from route data -->
25
+ * <ui-page-header />
26
+ *
27
+ * <!-- With explicit title override -->
28
+ * <ui-page-header title="Custom Title" />
29
+ *
30
+ * <!-- With document title update -->
31
+ * <ui-page-header [updateDocumentTitle]="true" titleSuffix=" | My App" />
32
+ * ```
33
+ */
34
+ export class UiPageHeaderComponent {
35
+ constructor() {
36
+ /** Override the auto-detected page title. When empty, title is derived from the last breadcrumb. */
37
+ this.title = '';
38
+ /** Route path for the Home breadcrumb link. */
39
+ this.homeRoute = '/';
40
+ /** Whether to display the Home link at the start of the trail. */
41
+ this.showHome = true;
42
+ /** When `true`, updates `document.title` on each navigation. */
43
+ this.updateDocumentTitle = false;
44
+ /** Suffix appended to `document.title` (e.g. `' | My App'`). Only used when `updateDocumentTitle` is `true`. */
45
+ this.titleSuffix = '';
46
+ /** @internal */
47
+ this.breadcrumbs = [];
48
+ this.router = inject(Router);
49
+ this.activatedRoute = inject(ActivatedRoute);
50
+ this.titleService = inject(Title);
51
+ this.breadcrumbService = inject(UiBreadcrumbService);
52
+ this.destroyRef = inject(DestroyRef);
53
+ this.cdr = inject(ChangeDetectorRef);
54
+ }
55
+ /** Resolved page title: explicit `title` input wins, otherwise last breadcrumb label. */
56
+ get displayTitle() {
57
+ if (this.title)
58
+ return this.title;
59
+ if (this.breadcrumbs.length > 0) {
60
+ return this.breadcrumbs[this.breadcrumbs.length - 1].label;
61
+ }
62
+ return '';
63
+ }
64
+ ngOnInit() {
65
+ this.refresh();
66
+ this.router.events
67
+ .pipe(filter((event) => event instanceof NavigationEnd), takeUntilDestroyed(this.destroyRef))
68
+ .subscribe(() => this.refresh());
69
+ }
70
+ /**
71
+ * Navigates to the previous breadcrumb (parent route).
72
+ * @param fallbackUrl - URL to navigate to when no parent exists (default: homeRoute).
73
+ */
74
+ navigateBack(fallbackUrl) {
75
+ this.breadcrumbService.navigateBack(fallbackUrl ?? this.homeRoute);
76
+ }
77
+ /** @internal */
78
+ refresh() {
79
+ this.breadcrumbs = this.breadcrumbService.getBreadcrumbsForRoute(this.activatedRoute);
80
+ if (this.updateDocumentTitle) {
81
+ const title = this.displayTitle;
82
+ if (title) {
83
+ this.titleService.setTitle(`${title}${this.titleSuffix}`);
84
+ }
85
+ }
86
+ this.cdr.markForCheck();
87
+ }
88
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiPageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
89
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UiPageHeaderComponent, isStandalone: true, selector: "ui-page-header", inputs: { title: "title", homeRoute: "homeRoute", showHome: "showHome", updateDocumentTitle: "updateDocumentTitle", titleSuffix: "titleSuffix" }, host: { classAttribute: "ui-page-header-host" }, ngImport: i0, template: `
90
+ <header class="ui-page-header">
91
+ <nav aria-label="Breadcrumb" class="ui-page-header__nav">
92
+ <ol
93
+ class="ui-page-header__breadcrumb"
94
+ itemscope
95
+ itemtype="https://schema.org/BreadcrumbList"
96
+ >
97
+ @if (showHome) {
98
+ <li
99
+ class="ui-page-header__item"
100
+ itemprop="itemListElement"
101
+ itemscope
102
+ itemtype="https://schema.org/ListItem"
103
+ >
104
+ <a
105
+ itemprop="item"
106
+ [routerLink]="homeRoute"
107
+ class="ui-page-header__link"
108
+ aria-label="Home"
109
+ >
110
+ <lucide-icon name="home" [size]="14" aria-hidden="true" />
111
+ <span itemprop="name" class="ui-page-header__text">Home</span>
112
+ </a>
113
+ <meta itemprop="position" content="1" />
114
+ <span class="ui-page-header__separator" aria-hidden="true">
115
+ <lucide-icon name="chevron-right" [size]="14" />
116
+ </span>
117
+ </li>
118
+ }
119
+ @for (crumb of breadcrumbs; track crumb.url; let i = $index) {
120
+ <li
121
+ class="ui-page-header__item"
122
+ [class.ui-page-header__item--current]="crumb.isLast"
123
+ itemprop="itemListElement"
124
+ itemscope
125
+ itemtype="https://schema.org/ListItem"
126
+ >
127
+ @if (!crumb.isLast) {
128
+ <a
129
+ itemprop="item"
130
+ [routerLink]="crumb.url"
131
+ class="ui-page-header__link"
132
+ >
133
+ <span itemprop="name" class="ui-page-header__text">{{ crumb.label }}</span>
134
+ </a>
135
+ <span class="ui-page-header__separator" aria-hidden="true">
136
+ <lucide-icon name="chevron-right" [size]="14" />
137
+ </span>
138
+ } @else {
139
+ <span
140
+ itemprop="name"
141
+ class="ui-page-header__text ui-page-header__text--current"
142
+ aria-current="page"
143
+ >
144
+ {{ crumb.label }}
145
+ </span>
146
+ }
147
+ <meta itemprop="position" [attr.content]="showHome ? i + 2 : i + 1" />
148
+ </li>
149
+ }
150
+ </ol>
151
+ </nav>
152
+
153
+ <h1 class="ui-page-header__title" id="page-title">
154
+ {{ displayTitle }}
155
+ </h1>
156
+ </header>
157
+ `, isInline: true, styles: [".ui-page-header-host{display:block}.ui-page-header{margin-bottom:var(--ui-spacing-5)}.ui-page-header__nav{margin-bottom:var(--ui-spacing-2)}.ui-page-header__breadcrumb{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0;font-family:var(--ui-font-family);font-size:var(--ui-font-size-sm);line-height:var(--ui-line-height-normal);gap:var(--ui-spacing-1)}.ui-page-header__item{display:inline-flex;align-items:center;gap:var(--ui-spacing-1)}a.ui-page-header__link lucide-icon{transform:translateY(2px)!important}span.ui-page-header__separator lucide-icon{transform:translateY(3px)!important}.ui-page-header__link{display:inline-flex;align-items:center;gap:4px;text-decoration:none;color:var(--ui-color-primary);border-radius:var(--ui-radius-sm);padding:2px 4px;margin:-2px -4px;transition:color var(--ui-transition-fast),background-color var(--ui-transition-fast)}.ui-page-header__link:hover{color:var(--ui-color-primary-hover);text-decoration:underline}.ui-page-header__link:focus{outline:none}.ui-page-header__link:focus-visible{outline:var(--ui-focus-ring-width) solid var(--ui-focus-ring-color);outline-offset:var(--ui-focus-ring-offset)}.ui-page-header__text{white-space:nowrap}.ui-page-header__text--current{font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text)}.ui-page-header__separator{display:inline-flex;align-items:center;color:var(--ui-color-text-muted);flex-shrink:0}.ui-page-header__title{margin:0;font-family:var(--ui-font-family);font-size:var(--ui-font-size-2xl);font-weight:var(--ui-font-weight-bold);color:var(--ui-color-text);line-height:var(--ui-line-height-tight)}.ui-page-header__title:focus{outline:none}@media (min-width: 640px){.ui-page-header__title{font-size:var(--ui-font-size-xl)}.ui-page-header__breadcrumb{font-size:var(--ui-font-size-xs)}}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
158
+ }
159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiPageHeaderComponent, decorators: [{
160
+ type: Component,
161
+ args: [{ selector: 'ui-page-header', standalone: true, imports: [RouterLink, LucideAngularModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
162
+ class: 'ui-page-header-host',
163
+ }, template: `
164
+ <header class="ui-page-header">
165
+ <nav aria-label="Breadcrumb" class="ui-page-header__nav">
166
+ <ol
167
+ class="ui-page-header__breadcrumb"
168
+ itemscope
169
+ itemtype="https://schema.org/BreadcrumbList"
170
+ >
171
+ @if (showHome) {
172
+ <li
173
+ class="ui-page-header__item"
174
+ itemprop="itemListElement"
175
+ itemscope
176
+ itemtype="https://schema.org/ListItem"
177
+ >
178
+ <a
179
+ itemprop="item"
180
+ [routerLink]="homeRoute"
181
+ class="ui-page-header__link"
182
+ aria-label="Home"
183
+ >
184
+ <lucide-icon name="home" [size]="14" aria-hidden="true" />
185
+ <span itemprop="name" class="ui-page-header__text">Home</span>
186
+ </a>
187
+ <meta itemprop="position" content="1" />
188
+ <span class="ui-page-header__separator" aria-hidden="true">
189
+ <lucide-icon name="chevron-right" [size]="14" />
190
+ </span>
191
+ </li>
192
+ }
193
+ @for (crumb of breadcrumbs; track crumb.url; let i = $index) {
194
+ <li
195
+ class="ui-page-header__item"
196
+ [class.ui-page-header__item--current]="crumb.isLast"
197
+ itemprop="itemListElement"
198
+ itemscope
199
+ itemtype="https://schema.org/ListItem"
200
+ >
201
+ @if (!crumb.isLast) {
202
+ <a
203
+ itemprop="item"
204
+ [routerLink]="crumb.url"
205
+ class="ui-page-header__link"
206
+ >
207
+ <span itemprop="name" class="ui-page-header__text">{{ crumb.label }}</span>
208
+ </a>
209
+ <span class="ui-page-header__separator" aria-hidden="true">
210
+ <lucide-icon name="chevron-right" [size]="14" />
211
+ </span>
212
+ } @else {
213
+ <span
214
+ itemprop="name"
215
+ class="ui-page-header__text ui-page-header__text--current"
216
+ aria-current="page"
217
+ >
218
+ {{ crumb.label }}
219
+ </span>
220
+ }
221
+ <meta itemprop="position" [attr.content]="showHome ? i + 2 : i + 1" />
222
+ </li>
223
+ }
224
+ </ol>
225
+ </nav>
226
+
227
+ <h1 class="ui-page-header__title" id="page-title">
228
+ {{ displayTitle }}
229
+ </h1>
230
+ </header>
231
+ `, styles: [".ui-page-header-host{display:block}.ui-page-header{margin-bottom:var(--ui-spacing-5)}.ui-page-header__nav{margin-bottom:var(--ui-spacing-2)}.ui-page-header__breadcrumb{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0;font-family:var(--ui-font-family);font-size:var(--ui-font-size-sm);line-height:var(--ui-line-height-normal);gap:var(--ui-spacing-1)}.ui-page-header__item{display:inline-flex;align-items:center;gap:var(--ui-spacing-1)}a.ui-page-header__link lucide-icon{transform:translateY(2px)!important}span.ui-page-header__separator lucide-icon{transform:translateY(3px)!important}.ui-page-header__link{display:inline-flex;align-items:center;gap:4px;text-decoration:none;color:var(--ui-color-primary);border-radius:var(--ui-radius-sm);padding:2px 4px;margin:-2px -4px;transition:color var(--ui-transition-fast),background-color var(--ui-transition-fast)}.ui-page-header__link:hover{color:var(--ui-color-primary-hover);text-decoration:underline}.ui-page-header__link:focus{outline:none}.ui-page-header__link:focus-visible{outline:var(--ui-focus-ring-width) solid var(--ui-focus-ring-color);outline-offset:var(--ui-focus-ring-offset)}.ui-page-header__text{white-space:nowrap}.ui-page-header__text--current{font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text)}.ui-page-header__separator{display:inline-flex;align-items:center;color:var(--ui-color-text-muted);flex-shrink:0}.ui-page-header__title{margin:0;font-family:var(--ui-font-family);font-size:var(--ui-font-size-2xl);font-weight:var(--ui-font-weight-bold);color:var(--ui-color-text);line-height:var(--ui-line-height-tight)}.ui-page-header__title:focus{outline:none}@media (min-width: 640px){.ui-page-header__title{font-size:var(--ui-font-size-xl)}.ui-page-header__breadcrumb{font-size:var(--ui-font-size-xs)}}\n"] }]
232
+ }], propDecorators: { title: [{
233
+ type: Input
234
+ }], homeRoute: [{
235
+ type: Input
236
+ }], showHome: [{
237
+ type: Input
238
+ }], updateDocumentTitle: [{
239
+ type: Input
240
+ }], titleSuffix: [{
241
+ type: Input
242
+ }] } });
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9wYWdlLWhlYWRlci9wYWdlLWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBRzNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQWlGSCxNQUFNLE9BQU8scUJBQXFCO0lBaEZsQztRQWlGRSxvR0FBb0c7UUFDM0YsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVwQiwrQ0FBK0M7UUFDdEMsY0FBUyxHQUFHLEdBQUcsQ0FBQztRQUV6QixrRUFBa0U7UUFDekQsYUFBUSxHQUFHLElBQUksQ0FBQztRQUV6QixnRUFBZ0U7UUFDdkQsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRXJDLGdIQUFnSDtRQUN2RyxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUUxQixnQkFBZ0I7UUFDaEIsZ0JBQVcsR0FBdUIsRUFBRSxD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aGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRGVzdHJveVJlZixcclxuICBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEx1Y2lkZUFuZ3VsYXJNb2R1bGUgfSBmcm9tICdsdWNpZGUtYW5ndWxhcic7XHJcbmltcG9ydCB7IFVpQnJlYWRjcnVtYlNlcnZpY2UgfSBmcm9tICcuL2JyZWFkY3J1bWIuc2VydmljZSc7XHJcbmltcG9ydCB7IFVpQnJlYWRjcnVtYkl0ZW0gfSBmcm9tICcuL3BhZ2UtaGVhZGVyLnR5cGVzJztcclxuXHJcbi8qKlxyXG4gKiBQYWdlIGhlYWRlciBjb21wb25lbnQgdGhhdCByZW5kZXJzIGEgYnJlYWRjcnVtYiBuYXZpZ2F0aW9uIHRyYWlsXHJcbiAqIGFuZCBhIHBhZ2UgdGl0bGUuIEludGVncmF0ZXMgd2l0aCBgVWlCcmVhZGNydW1iU2VydmljZWAgdG9cclxuICogYXV0b21hdGljYWxseSBkZXJpdmUgYnJlYWRjcnVtYnMgZnJvbSBBbmd1bGFyIHJvdXRlIGNvbmZpZ3VyYXRpb24uXHJcbiAqXHJcbiAqIFRoZSBicmVhZGNydW1iIHRyYWlsIGlzIGdlbmVyYXRlZCBmcm9tIHJvdXRlIGBkYXRhYCBwcm9wZXJ0aWVzOlxyXG4gKiAtIGBkYXRhLmlkYCDigJQgdW5pcXVlIHJvdXRlIGlkZW50aWZpZXJcclxuICogLSBgZGF0YS50aXRsZWAg4oCUIGRpc3BsYXkgbGFiZWxcclxuICogLSBgZGF0YS5icmVhZGNydW1ic2Ag4oCUIG9yZGVyZWQgYXJyYXkgb2YgcGFyZW50IHJvdXRlIElEc1xyXG4gKlxyXG4gKiBAc2VsZWN0b3IgdWktcGFnZS1oZWFkZXJcclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8IS0tIEF1dG8gYnJlYWRjcnVtYnMgZnJvbSByb3V0ZSBkYXRhIC0tPlxyXG4gKiA8dWktcGFnZS1oZWFkZXIgLz5cclxuICpcclxuICogPCEtLSBXaXRoIGV4cGxpY2l0IHRpdGxlIG92ZXJyaWRlIC0tPlxyXG4gKiA8dWktcGFnZS1oZWFkZXIgdGl0bGU9XCJDdXN0b20gVGl0bGVcIiAvPlxyXG4gKlxyXG4gKiA8IS0tIFdpdGggZG9jdW1lbnQgdGl0bGUgdXBkYXRlIC0tPlxyXG4gKiA8dWktcGFnZS1oZWFkZXIgW3VwZGF0ZURvY3VtZW50VGl0bGVdPVwidHJ1ZVwiIHRpdGxlU3VmZml4PVwiIHwgTXkgQXBwXCIgLz5cclxuICogYGBgXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VpLXBhZ2UtaGVhZGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtSb3V0ZXJMaW5rLCBMdWNpZGVBbmd1bGFyTW9kdWxlXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGhvc3Q6IHtcclxuICAgIGNsYXNzOiAndWktcGFnZS1oZWFkZXItaG9zdCcsXHJcbiAgfSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGhlYWRlciBjbGFzcz1cInVpLXBhZ2UtaGVhZGVyXCI+XHJcbiAgICAgIDxuYXYgYXJpYS1sYWJlbD1cIkJyZWFkY3J1bWJcIiBjbGFzcz1cInVpLXBhZ2UtaGVhZGVyX19uYXZcIj5cclxuICAgICAgICA8b2xcclxuICAgICAgICAgIGNsYXNzPVwidWktcGFnZS1oZWFkZXJfX2JyZWFkY3J1bWJcIlxyXG4gICAgICAgICAgaXRlbXNjb3BlXHJcbiAgICAgICAgICBpdGVtdHlwZT1cImh0dHBzOi8vc2NoZW1hLm9yZy9CcmVhZGNydW1iTGlzdFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgQGlmIChzaG93SG9tZSkge1xyXG4gICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICBjbGFzcz1cInVpLXBhZ2UtaGVhZGVyX19pdGVtXCJcclxuICAgICAgICAgICAgICBpdGVtcHJvcD1cIml0ZW1MaXN0RWxlbWVudFwiXHJcbiAgICAgICAgICAgICAgaXRlbXNjb3BlXHJcbiAgICAgICAgICAgICAgaXRlbXR5cGU9XCJodHRwczovL3NjaGVtYS5vcmcvTGlzdEl0ZW1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgIGl0ZW1wcm9wPVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJob21lUm91dGVcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1aS1wYWdlLWhlYWRlcl9fbGlua1wiXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiSG9tZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGx1Y2lkZS1pY29uIG5hbWU9XCJob21lXCIgW3NpemVdPVwiMTRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gaXRlbXByb3A9XCJuYW1lXCIgY2xhc3M9XCJ1aS1wYWdlLWhlYWRlcl9fdGV4dFwiPkhvbWU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDxtZXRhIGl0ZW1wcm9wPVwicG9zaXRpb25cIiBjb250ZW50PVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1aS1wYWdlLWhlYWRlcl9fc2VwYXJhdG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bHVjaWRlLWljb24gbmFtZT1cImNoZXZyb24tcmlnaHRcIiBbc2l6ZV09XCIxNFwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgQGZvciAoY3J1bWIgb2YgYnJlYWRjcnVtYnM7IHRyYWNrIGNydW1iLnVybDsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ1aS1wYWdlLWhlYWRlcl9faXRlbVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLnVpLXBhZ2UtaGVhZGVyX19pdGVtLS1jdXJyZW50XT1cImNydW1iLmlzTGFzdFwiXHJcbiAgICAgICAgICAgICAgaXRlbXByb3A9XCJpdGVtTGlzdEVsZW1lbnRcIlxyXG4gICAgICAgICAgICAgIGl0ZW1zY29wZVxyXG4gICAgICAgICAgICAgIGl0ZW10eXBlPVwiaHR0cHM6Ly9zY2hlbWEub3JnL0xpc3RJdGVtXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIEBpZiAoIWNydW1iLmlzTGFzdCkge1xyXG4gICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgaXRlbXByb3A9XCJpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiY3J1bWIudXJsXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1aS1wYWdlLWhlYWRlcl9fbGlua1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGl0ZW1wcm9wPVwibmFtZVwiIGNsYXNzPVwidWktcGFnZS1oZWFkZXJfX3RleHRcIj57eyBjcnVtYi5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidWktcGFnZS1oZWFkZXJfX3NlcGFyYXRvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bHVjaWRlLWljb24gbmFtZT1cImNoZXZyb24tcmlnaHRcIiBbc2l6ZV09XCIxNFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBpdGVtcHJvcD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInVpLXBhZ2UtaGVhZGVyX190ZXh0IHVpLXBhZ2UtaGVhZGVyX190ZXh0LS1jdXJyZW50XCJcclxuICAgICAgICAgICAgICAgICAgYXJpYS1jdXJyZW50PVwicGFnZVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGNydW1iLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDxtZXRhIGl0ZW1wcm9wPVwicG9zaXRpb25cIiBbYXR0ci5jb250ZW50XT1cInNob3dIb21lID8gaSArIDIgOiBpICsgMVwiIC8+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9vbD5cclxuICAgICAgPC9uYXY+XHJcblxyXG4gICAgICA8aDEgY2xhc3M9XCJ1aS1wYWdlLWhlYWRlcl9fdGl0bGVcIiBpZD1cInBhZ2UtdGl0bGVcIj5cclxuICAgICAgICB7eyBkaXNwbGF5VGl0bGUgfX1cclxuICAgICAgPC9oMT5cclxuICAgIDwvaGVhZGVyPlxyXG4gIGAsXHJcbiAgc3R5bGVVcmw6ICcuL3BhZ2UtaGVhZGVyLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpUGFnZUhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLyoqIE92ZXJyaWRlIHRoZSBhdXRvLWRldGVjdGVkIHBhZ2UgdGl0bGUuIFdoZW4gZW1wdHksIHRpdGxlIGlzIGRlcml2ZWQgZnJvbSB0aGUgbGFzdCBicmVhZGNydW1iLiAqL1xyXG4gIEBJbnB1dCgpIHRpdGxlID0gJyc7XHJcblxyXG4gIC8qKiBSb3V0ZSBwYXRoIGZvciB0aGUgSG9tZSBicmVhZGNydW1iIGxpbmsuICovXHJcbiAgQElucHV0KCkgaG9tZVJvdXRlID0gJy8nO1xyXG5cclxuICAvKiogV2hldGhlciB0byBkaXNwbGF5IHRoZSBIb21lIGxpbmsgYXQgdGhlIHN0YXJ0IG9mIHRoZSB0cmFpbC4gKi9cclxuICBASW5wdXQoKSBzaG93SG9tZSA9IHRydWU7XHJcblxyXG4gIC8qKiBXaGVuIGB0cnVlYCwgdXBkYXRlcyBgZG9jdW1lbnQudGl0bGVgIG9uIGVhY2ggbmF2aWdhdGlvbi4gKi9cclxuICBASW5wdXQoKSB1cGRhdGVEb2N1bWVudFRpdGxlID0gZmFsc2U7XHJcblxyXG4gIC8qKiBTdWZmaXggYXBwZW5kZWQgdG8gYGRvY3VtZW50LnRpdGxlYCAoZS5nLiBgJyB8IE15IEFwcCdgKS4gT25seSB1c2VkIHdoZW4gYHVwZGF0ZURvY3VtZW50VGl0bGVgIGlzIGB0cnVlYC4gKi9cclxuICBASW5wdXQoKSB0aXRsZVN1ZmZpeCA9ICcnO1xyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgYnJlYWRjcnVtYnM6IFVpQnJlYWRjcnVtYkl0ZW1bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdGl0bGVTZXJ2aWNlID0gaW5qZWN0KFRpdGxlKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGJyZWFkY3J1bWJTZXJ2aWNlID0gaW5qZWN0KFVpQnJlYWRjcnVtYlNlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gIC8qKiBSZXNvbHZlZCBwYWdlIHRpdGxlOiBleHBsaWNpdCBgdGl0bGVgIGlucHV0IHdpbnMsIG90aGVyd2lzZSBsYXN0IGJyZWFkY3J1bWIgbGFiZWwuICovXHJcbiAgZ2V0IGRpc3BsYXlUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMudGl0bGUpIHJldHVybiB0aGlzLnRpdGxlO1xyXG4gICAgaWYgKHRoaXMuYnJlYWRjcnVtYnMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5icmVhZGNydW1ic1t0aGlzLmJyZWFkY3J1bWJzLmxlbmd0aCAtIDFdLmxhYmVsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlZnJlc2goKTtcclxuXHJcbiAgICB0aGlzLnJvdXRlci5ldmVudHNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaCgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgYnJlYWRjcnVtYiAocGFyZW50IHJvdXRlKS5cclxuICAgKiBAcGFyYW0gZmFsbGJhY2tVcmwgLSBVUkwgdG8gbmF2aWdhdGUgdG8gd2hlbiBubyBwYXJlbnQgZXhpc3RzIChkZWZhdWx0OiBob21lUm91dGUpLlxyXG4gICAqL1xyXG4gIG5hdmlnYXRlQmFjayhmYWxsYmFja1VybD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5icmVhZGNydW1iU2VydmljZS5uYXZpZ2F0ZUJhY2soZmFsbGJhY2tVcmwgPz8gdGhpcy5ob21lUm91dGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByaXZhdGUgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYnJlYWRjcnVtYnMgPSB0aGlzLmJyZWFkY3J1bWJTZXJ2aWNlLmdldEJyZWFkY3J1bWJzRm9yUm91dGUodGhpcy5hY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICBpZiAodGhpcy51cGRhdGVEb2N1bWVudFRpdGxlKSB7XHJcbiAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5kaXNwbGF5VGl0bGU7XHJcbiAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKGAke3RpdGxlfSR7dGhpcy50aXRsZVN1ZmZpeH1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @module ng-ui-system/page-header
3
+ * Types and interfaces for UiPageHeader and UiBreadcrumbService.
4
+ */
5
+ import { InjectionToken } from '@angular/core';
6
+ /**
7
+ * Injection token for providing a custom label resolver to UiBreadcrumbService.
8
+ *
9
+ * When not provided, parameters are displayed as-is (identity function).
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * // In your app.config.ts or module providers:
14
+ * { provide: UI_BREADCRUMB_LABEL_RESOLVER, useValue: myLabelResolver }
15
+ * ```
16
+ */
17
+ export const UI_BREADCRUMB_LABEL_RESOLVER = new InjectionToken('UI_BREADCRUMB_LABEL_RESOLVER', {
18
+ providedIn: 'root',
19
+ factory: () => (_name, value) => value,
20
+ });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1oZWFkZXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy11aS1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL3BhZ2UtaGVhZGVyL3BhZ2UtaGVhZGVyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFvRi9DOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FBb0IsOEJBQThCLEVBQUU7SUFDaEgsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSztDQUN2RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQG1vZHVsZSBuZy11aS1zeXN0ZW0vcGFnZS1oZWFkZXJcclxuICogVHlwZXMgYW5kIGludGVyZmFjZXMgZm9yIFVpUGFnZUhlYWRlciBhbmQgVWlCcmVhZGNydW1iU2VydmljZS5cclxuICovXHJcblxyXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIFNpbmdsZSBicmVhZGNydW1iIGl0ZW0gcmVuZGVyZWQgaW4gdGhlIG5hdmlnYXRpb24gdHJhaWwuXHJcbiAqXHJcbiAqIEB1c2FnZU5vdGVzXHJcbiAqICMjIyBTdHJ1Y3R1cmVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBpdGVtOiBVaUJyZWFkY3J1bWJJdGVtID0ge1xyXG4gKiAgIGxhYmVsOiAnRGFzaGJvYXJkJyxcclxuICogICB1cmw6ICcvZGFzaGJvYXJkJyxcclxuICogICBpc0xhc3Q6IGZhbHNlLFxyXG4gKiB9O1xyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVWlCcmVhZGNydW1iSXRlbSB7XHJcbiAgLyoqIERpc3BsYXkgdGV4dCBmb3IgdGhlIGJyZWFkY3J1bWIgbGluay4gKi9cclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIC8qKiBOYXZpZ2F0aW9uIFVSTCAoQW5ndWxhciBSb3V0ZXIgcGF0aCkuICovXHJcbiAgdXJsOiBzdHJpbmc7XHJcbiAgLyoqIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCAoY3VycmVudCkgYnJlYWRjcnVtYiBpbiB0aGUgdHJhaWwuICovXHJcbiAgaXNMYXN0OiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJuYWwgcm91dGUgY29uZmlndXJhdGlvbiBzdG9yZWQgYnkgVWlCcmVhZGNydW1iU2VydmljZS5cclxuICogQnVpbHQgZnJvbSBBbmd1bGFyIHJvdXRlIGBkYXRhYCBwcm9wZXJ0aWVzLlxyXG4gKlxyXG4gKiBAdXNhZ2VOb3Rlc1xyXG4gKiAjIyMgUm91dGUgZGF0YSBjb252ZW50aW9uXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICoge1xyXG4gKiAgIHBhdGg6ICd1c2Vycy86dXNlcklkJyxcclxuICogICBkYXRhOiB7XHJcbiAqICAgICBpZDogJ3VzZXItZGV0YWlsJyxcclxuICogICAgIHRpdGxlOiAnRGV0dGFnbGlvIHV0ZW50ZScsXHJcbiAqICAgICBicmVhZGNydW1iczogWyd1c2Vycy1saXN0J10sXHJcbiAqICAgfSxcclxuICogICBjb21wb25lbnQ6IFVzZXJEZXRhaWxDb21wb25lbnQsXHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpQnJlYWRjcnVtYkNvbmZpZyB7XHJcbiAgLyoqIFVuaXF1ZSByb3V0ZSBpZGVudGlmaWVyIChmcm9tIGByb3V0ZS5kYXRhLmlkYCkuICovXHJcbiAgaWQ6IHN0cmluZztcclxuICAvKiogUmVzb2x2ZWQgcm91dGUgcGF0aCBwYXR0ZXJuIChtYXkgY29udGFpbiBgOnBhcmFtYCBwbGFjZWhvbGRlcnMpLiAqL1xyXG4gIHBhdGg6IHN0cmluZztcclxuICAvKiogRGlzcGxheSBsYWJlbCAoZnJvbSBgcm91dGUuZGF0YS50aXRsZWAgb3IgZmFsbGJhY2spLiAqL1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgLyoqIE9yZGVyZWQgYXJyYXkgb2YgcGFyZW50IHJvdXRlIElEcyBmb3IgYnVpbGRpbmcgdGhlIGJyZWFkY3J1bWIgY2hhaW4uICovXHJcbiAgcGFyZW50SWRzOiBzdHJpbmdbXTtcclxuICAvKiogRnVsbHkgcmVzb2x2ZWQgVVJMIGNhcHR1cmVkIGF0IG5hdmlnYXRpb24gdGltZS4gKi9cclxuICBmdWxsUGF0aD86IHN0cmluZztcclxuICAvKiogUmF3IHJvdXRlIGRhdGEgbWV0YWRhdGEuICovXHJcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG59XHJcblxyXG4vKipcclxuICogRnVuY3Rpb24gc2lnbmF0dXJlIGZvciByZXNvbHZpbmcgcm91dGUgcGFyYW1ldGVyIHZhbHVlcyB0byBodW1hbi1yZWFkYWJsZSBsYWJlbHMuXHJcbiAqXHJcbiAqIENvbnN1bWVycyBjYW4gcHJvdmlkZSBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB2aWEgYFVJX0JSRUFEQ1JVTUJfTEFCRUxfUkVTT0xWRVJgXHJcbiAqIHRvIHRyYW5zbGF0ZSBjcnlwdGljIHBhcmFtZXRlciB2YWx1ZXMgKGUuZy4gVVVJRHMsIHNsdWdzKSBpbnRvIHVzZXItZnJpZW5kbHkgdGV4dC5cclxuICpcclxuICogQHBhcmFtIHBhcmFtTmFtZSAtIFRoZSByb3V0ZSBwYXJhbWV0ZXIgbmFtZSAoZS5nLiBgJ3VzZXJJZCdgKS5cclxuICogQHBhcmFtIHBhcmFtVmFsdWUgLSBUaGUgcmF3IHBhcmFtZXRlciB2YWx1ZSBmcm9tIHRoZSBVUkwgKGUuZy4gYCdhYmMtMTIzJ2ApLlxyXG4gKiBAcmV0dXJucyBBIGh1bWFuLXJlYWRhYmxlIGxhYmVsLCBvciB0aGUgb3JpZ2luYWwgdmFsdWUgaWYgbm8gbWFwcGluZyBleGlzdHMuXHJcbiAqXHJcbiAqIEB1c2FnZU5vdGVzXHJcbiAqICMjIyBDdXN0b20gcmVzb2x2ZXJcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBteVJlc29sdmVyOiBVaUxhYmVsUmVzb2x2ZXJGbiA9IChuYW1lLCB2YWx1ZSkgPT4ge1xyXG4gKiAgIGlmIChuYW1lID09PSAnc3RhdHVzJykge1xyXG4gKiAgICAgcmV0dXJuIHsgcGVuZGluZzogJ0luIGF0dGVzYScsIGFjdGl2ZTogJ0F0dGl2bycgfVt2YWx1ZV0gPz8gdmFsdWU7XHJcbiAqICAgfVxyXG4gKiAgIHJldHVybiB2YWx1ZTtcclxuICogfTtcclxuICpcclxuICogcHJvdmlkZXJzOiBbXHJcbiAqICAgeyBwcm92aWRlOiBVSV9CUkVBRENSVU1CX0xBQkVMX1JFU09MVkVSLCB1c2VWYWx1ZTogbXlSZXNvbHZlciB9LFxyXG4gKiBdXHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgVWlMYWJlbFJlc29sdmVyRm4gPSAocGFyYW1OYW1lOiBzdHJpbmcsIHBhcmFtVmFsdWU6IHN0cmluZykgPT4gc3RyaW5nO1xyXG5cclxuLyoqXHJcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgcHJvdmlkaW5nIGEgY3VzdG9tIGxhYmVsIHJlc29sdmVyIHRvIFVpQnJlYWRjcnVtYlNlcnZpY2UuXHJcbiAqXHJcbiAqIFdoZW4gbm90IHByb3ZpZGVkLCBwYXJhbWV0ZXJzIGFyZSBkaXNwbGF5ZWQgYXMtaXMgKGlkZW50aXR5IGZ1bmN0aW9uKS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiAvLyBJbiB5b3VyIGFwcC5jb25maWcudHMgb3IgbW9kdWxlIHByb3ZpZGVyczpcclxuICogeyBwcm92aWRlOiBVSV9CUkVBRENSVU1CX0xBQkVMX1JFU09MVkVSLCB1c2VWYWx1ZTogbXlMYWJlbFJlc29sdmVyIH1cclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVUlfQlJFQURDUlVNQl9MQUJFTF9SRVNPTFZFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxVaUxhYmVsUmVzb2x2ZXJGbj4oJ1VJX0JSRUFEQ1JVTUJfTEFCRUxfUkVTT0xWRVInLCB7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG4gIGZhY3Rvcnk6ICgpID0+IChfbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2YWx1ZSxcclxufSk7XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export { UiPaginatedTableComponent } from './paginated-table.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy11aS1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgVWlQYWdpbmF0ZWRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vcGFnaW5hdGVkLXRhYmxlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7XHJcbiAgVWlUYWJsZUNvbHVtbixcclxuICBVaVRhYmxlU29ydEV2ZW50LFxyXG4gIFVpVGFibGVQYWdlRXZlbnQsXHJcbn0gZnJvbSAnLi90YWJsZS50eXBlcyc7XHJcbiJdfQ==