@sinequa/atomic-angular 0.0.140 → 0.1.3

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 (207) hide show
  1. package/README.md +145 -0
  2. package/components/no-result/i18n/en.json +5 -0
  3. package/components/no-result/i18n/fr.json +5 -0
  4. package/components/sort-selector/i18n/en.json +3 -0
  5. package/components/sort-selector/i18n/fr.json +3 -0
  6. package/components/source/i18n/en.json +3 -0
  7. package/components/source/i18n/fr.json +3 -0
  8. package/features/alerts/i18n/en.json +33 -0
  9. package/features/alerts/i18n/fr.json +33 -0
  10. package/features/bookmarks/i18n/en.json +11 -0
  11. package/features/bookmarks/i18n/fr.json +11 -0
  12. package/features/collections/i18n/en.json +17 -0
  13. package/features/collections/i18n/fr.json +16 -0
  14. package/features/dialogs/i18n/en.json +15 -0
  15. package/features/dialogs/i18n/fr.json +15 -0
  16. package/features/did-you-mean/i18n/en.json +5 -0
  17. package/features/did-you-mean/i18n/fr.json +5 -0
  18. package/features/drawer/i18n/en.json +22 -0
  19. package/features/drawer/i18n/fr.json +22 -0
  20. package/features/export/i18n/en.json +7 -0
  21. package/features/export/i18n/fr.json +7 -0
  22. package/features/feedback/i18n/en.json +26 -0
  23. package/features/feedback/i18n/fr.json +26 -0
  24. package/features/filters/i18n/en.json +14 -0
  25. package/features/filters/i18n/fr.json +14 -0
  26. package/features/labels/i18n/en.json +8 -0
  27. package/features/labels/i18n/fr.json +8 -0
  28. package/features/recent-searches/i18n/en.json +6 -0
  29. package/features/recent-searches/i18n/fr.json +6 -0
  30. package/features/saved-searches/i18n/en.json +8 -0
  31. package/features/saved-searches/i18n/fr.json +8 -0
  32. package/features/sign-in/i18n/en.json +12 -0
  33. package/features/sign-in/i18n/fr.json +14 -0
  34. package/fesm2022/sinequa-atomic-angular.mjs +7948 -2383
  35. package/fesm2022/sinequa-atomic-angular.mjs.map +1 -1
  36. package/index.d.ts +6036 -3
  37. package/package.json +68 -10
  38. package/assets/tailwind.css +0 -248
  39. package/esm2022/lib/assistant/index.mjs +0 -2
  40. package/esm2022/lib/assistant/signalR.web.service.mjs +0 -81
  41. package/esm2022/lib/components/dropdown.mjs +0 -127
  42. package/esm2022/lib/components/index.mjs +0 -5
  43. package/esm2022/lib/components/menu/index.mjs +0 -3
  44. package/esm2022/lib/components/menu/menu-item.mjs +0 -22
  45. package/esm2022/lib/components/menu/menu.mjs +0 -99
  46. package/esm2022/lib/components/metadata/index.mjs +0 -2
  47. package/esm2022/lib/components/metadata/metadata.component.mjs +0 -65
  48. package/esm2022/lib/components/theme/index.mjs +0 -3
  49. package/esm2022/lib/components/theme/theme-selector.component.mjs +0 -67
  50. package/esm2022/lib/components/theme/theme-toggle.component.mjs +0 -67
  51. package/esm2022/lib/directives/index.mjs +0 -5
  52. package/esm2022/lib/directives/infinite-scroll.directive.mjs +0 -47
  53. package/esm2022/lib/directives/select-article-on-click.directive.mjs +0 -39
  54. package/esm2022/lib/directives/show-bookmark.directive.mjs +0 -55
  55. package/esm2022/lib/directives/theme-provider.directive.mjs +0 -31
  56. package/esm2022/lib/guards/auth.guard.mjs +0 -27
  57. package/esm2022/lib/guards/index.mjs +0 -3
  58. package/esm2022/lib/guards/initialization.guard.mjs +0 -41
  59. package/esm2022/lib/interceptors/audit.interceptor.mjs +0 -23
  60. package/esm2022/lib/interceptors/auth.interceptor.mjs +0 -49
  61. package/esm2022/lib/interceptors/body.interceptor.mjs +0 -24
  62. package/esm2022/lib/interceptors/error.interceptor.mjs +0 -35
  63. package/esm2022/lib/interceptors/index.mjs +0 -7
  64. package/esm2022/lib/interceptors/toast.interceptor.mjs +0 -27
  65. package/esm2022/lib/models/aggregation.mjs +0 -2
  66. package/esm2022/lib/models/article-metadata.mjs +0 -2
  67. package/esm2022/lib/models/autocomplete.mjs +0 -2
  68. package/esm2022/lib/models/custom-json.mjs +0 -2
  69. package/esm2022/lib/models/filter-dropdown.mjs +0 -2
  70. package/esm2022/lib/models/index.mjs +0 -7
  71. package/esm2022/lib/models/user-settings.mjs +0 -2
  72. package/esm2022/lib/pipes/highlight-word.pipe.mjs +0 -33
  73. package/esm2022/lib/pipes/index.mjs +0 -3
  74. package/esm2022/lib/pipes/source-icon.pipe.mjs +0 -43
  75. package/esm2022/lib/providers/eager-provider.mjs +0 -24
  76. package/esm2022/lib/providers/index.mjs +0 -2
  77. package/esm2022/lib/public-api.mjs +0 -19
  78. package/esm2022/lib/resolvers/index.mjs +0 -2
  79. package/esm2022/lib/resolvers/query-name-resolver.mjs +0 -14
  80. package/esm2022/lib/resources/index.mjs +0 -2
  81. package/esm2022/lib/resources/themes.mjs +0 -53
  82. package/esm2022/lib/services/application.service.mjs +0 -245
  83. package/esm2022/lib/services/autocomplete.service.mjs +0 -85
  84. package/esm2022/lib/services/drawer/backdrop.service.mjs +0 -23
  85. package/esm2022/lib/services/drawer/drawer-stack.service.mjs +0 -152
  86. package/esm2022/lib/services/drawer/drawer.service.mjs +0 -38
  87. package/esm2022/lib/services/index.mjs +0 -12
  88. package/esm2022/lib/services/label.service.mjs +0 -161
  89. package/esm2022/lib/services/navigation.service.mjs +0 -59
  90. package/esm2022/lib/services/saved-searches.service.mjs +0 -75
  91. package/esm2022/lib/services/search.service.mjs +0 -89
  92. package/esm2022/lib/services/selection-history.service.mjs +0 -92
  93. package/esm2022/lib/services/selection.service.mjs +0 -87
  94. package/esm2022/lib/stores/aggregations.store.mjs +0 -62
  95. package/esm2022/lib/stores/app.store.mjs +0 -265
  96. package/esm2022/lib/stores/application.store.mjs +0 -93
  97. package/esm2022/lib/stores/index.mjs +0 -9
  98. package/esm2022/lib/stores/principal.store.mjs +0 -47
  99. package/esm2022/lib/stores/query-params.store.mjs +0 -208
  100. package/esm2022/lib/stores/selection.store.mjs +0 -46
  101. package/esm2022/lib/stores/theme.store.mjs +0 -116
  102. package/esm2022/lib/stores/user-settings.store.mjs +0 -272
  103. package/esm2022/lib/tokens/highlights.mjs +0 -32
  104. package/esm2022/lib/tokens/index.mjs +0 -2
  105. package/esm2022/lib/utils/debounced-signal.mjs +0 -38
  106. package/esm2022/lib/utils/index.mjs +0 -8
  107. package/esm2022/lib/utils/inline-worker.mjs +0 -40
  108. package/esm2022/lib/utils/query.mjs +0 -58
  109. package/esm2022/lib/utils/routes.mjs +0 -28
  110. package/esm2022/lib/utils/tailwind-utils.mjs +0 -6
  111. package/esm2022/lib/utils/theme-body-hook.mjs +0 -18
  112. package/esm2022/lib/utils/theme-registry.mjs +0 -6
  113. package/esm2022/lib/web-services/aggregations.service.mjs +0 -104
  114. package/esm2022/lib/web-services/app.service.mjs +0 -48
  115. package/esm2022/lib/web-services/audit.service.mjs +0 -122
  116. package/esm2022/lib/web-services/index.mjs +0 -10
  117. package/esm2022/lib/web-services/json-method-plugin.service.mjs +0 -54
  118. package/esm2022/lib/web-services/preview.service.mjs +0 -327
  119. package/esm2022/lib/web-services/principal.service.mjs +0 -46
  120. package/esm2022/lib/web-services/query.service.mjs +0 -123
  121. package/esm2022/lib/web-services/text-chunck.service.mjs +0 -46
  122. package/esm2022/public-api.mjs +0 -5
  123. package/esm2022/sinequa-atomic-angular.mjs +0 -5
  124. package/lib/assistant/index.d.ts +0 -1
  125. package/lib/assistant/signalR.web.service.d.ts +0 -46
  126. package/lib/components/dropdown.d.ts +0 -50
  127. package/lib/components/index.d.ts +0 -4
  128. package/lib/components/menu/index.d.ts +0 -2
  129. package/lib/components/menu/menu-item.d.ts +0 -8
  130. package/lib/components/menu/menu.d.ts +0 -24
  131. package/lib/components/metadata/index.d.ts +0 -1
  132. package/lib/components/metadata/metadata.component.d.ts +0 -24
  133. package/lib/components/theme/index.d.ts +0 -2
  134. package/lib/components/theme/theme-selector.component.d.ts +0 -70
  135. package/lib/components/theme/theme-toggle.component.d.ts +0 -10
  136. package/lib/directives/index.d.ts +0 -4
  137. package/lib/directives/infinite-scroll.directive.d.ts +0 -30
  138. package/lib/directives/select-article-on-click.directive.d.ts +0 -14
  139. package/lib/directives/show-bookmark.directive.d.ts +0 -52
  140. package/lib/directives/theme-provider.directive.d.ts +0 -20
  141. package/lib/guards/auth.guard.d.ts +0 -7
  142. package/lib/guards/index.d.ts +0 -2
  143. package/lib/guards/initialization.guard.d.ts +0 -20
  144. package/lib/interceptors/audit.interceptor.d.ts +0 -13
  145. package/lib/interceptors/auth.interceptor.d.ts +0 -14
  146. package/lib/interceptors/body.interceptor.d.ts +0 -11
  147. package/lib/interceptors/error.interceptor.d.ts +0 -9
  148. package/lib/interceptors/index.d.ts +0 -5
  149. package/lib/interceptors/toast.interceptor.d.ts +0 -13
  150. package/lib/models/aggregation.d.ts +0 -12
  151. package/lib/models/article-metadata.d.ts +0 -5
  152. package/lib/models/autocomplete.d.ts +0 -5
  153. package/lib/models/custom-json.d.ts +0 -58
  154. package/lib/models/filter-dropdown.d.ts +0 -10
  155. package/lib/models/index.d.ts +0 -6
  156. package/lib/models/user-settings.d.ts +0 -32
  157. package/lib/pipes/highlight-word.pipe.d.ts +0 -22
  158. package/lib/pipes/index.d.ts +0 -2
  159. package/lib/pipes/source-icon.pipe.d.ts +0 -54
  160. package/lib/providers/eager-provider.d.ts +0 -11
  161. package/lib/providers/index.d.ts +0 -1
  162. package/lib/public-api.d.ts +0 -15
  163. package/lib/resolvers/index.d.ts +0 -1
  164. package/lib/resolvers/query-name-resolver.d.ts +0 -9
  165. package/lib/resources/index.d.ts +0 -1
  166. package/lib/resources/themes.d.ts +0 -51
  167. package/lib/services/application.service.d.ts +0 -178
  168. package/lib/services/autocomplete.service.d.ts +0 -91
  169. package/lib/services/drawer/backdrop.service.d.ts +0 -9
  170. package/lib/services/drawer/drawer-stack.service.d.ts +0 -70
  171. package/lib/services/drawer/drawer.service.d.ts +0 -15
  172. package/lib/services/index.d.ts +0 -11
  173. package/lib/services/label.service.d.ts +0 -117
  174. package/lib/services/navigation.service.d.ts +0 -33
  175. package/lib/services/saved-searches.service.d.ts +0 -145
  176. package/lib/services/search.service.d.ts +0 -155
  177. package/lib/services/selection-history.service.d.ts +0 -50
  178. package/lib/services/selection.service.d.ts +0 -127
  179. package/lib/stores/aggregations.store.d.ts +0 -50
  180. package/lib/stores/app.store.d.ts +0 -208
  181. package/lib/stores/application.store.d.ts +0 -106
  182. package/lib/stores/index.d.ts +0 -8
  183. package/lib/stores/principal.store.d.ts +0 -53
  184. package/lib/stores/query-params.store.d.ts +0 -187
  185. package/lib/stores/selection.store.d.ts +0 -62
  186. package/lib/stores/theme.store.d.ts +0 -55
  187. package/lib/stores/user-settings.store.d.ts +0 -161
  188. package/lib/tokens/highlights.d.ts +0 -8
  189. package/lib/tokens/index.d.ts +0 -1
  190. package/lib/utils/debounced-signal.d.ts +0 -25
  191. package/lib/utils/index.d.ts +0 -7
  192. package/lib/utils/inline-worker.d.ts +0 -11
  193. package/lib/utils/query.d.ts +0 -26
  194. package/lib/utils/routes.d.ts +0 -16
  195. package/lib/utils/tailwind-utils.d.ts +0 -2
  196. package/lib/utils/theme-body-hook.d.ts +0 -6
  197. package/lib/utils/theme-registry.d.ts +0 -3
  198. package/lib/web-services/aggregations.service.d.ts +0 -60
  199. package/lib/web-services/app.service.d.ts +0 -30
  200. package/lib/web-services/audit.service.d.ts +0 -75
  201. package/lib/web-services/index.d.ts +0 -9
  202. package/lib/web-services/json-method-plugin.service.d.ts +0 -41
  203. package/lib/web-services/preview.service.d.ts +0 -295
  204. package/lib/web-services/principal.service.d.ts +0 -28
  205. package/lib/web-services/query.service.d.ts +0 -29
  206. package/lib/web-services/text-chunck.service.d.ts +0 -22
  207. package/public-api.d.ts +0 -1
@@ -1,272 +0,0 @@
1
- import { withDevtools } from '@angular-architects/ngrx-toolkit';
2
- import { patchState, signalStore, signalStoreFeature, withMethods, withState } from '@ngrx/signals';
3
- import { deleteUserSettings, fetchUserSettings, patchUserSettings } from '@sinequa/atomic';
4
- const initialState = {
5
- bookmarks: [],
6
- recentSearches: [],
7
- savedSearches: [],
8
- assistants: {},
9
- language: undefined,
10
- };
11
- export const UserSettingsStore = signalStore({ providedIn: 'root' }, withDevtools('UserSettings'), withState(initialState), withUserSettingsFeatures(), withBookmarkFeatures(), withRecentSearchFeatures(), withSavedSearchFeatures(), withAssistantFeatures());
12
- export function withUserSettingsFeatures() {
13
- return signalStoreFeature(withState(initialState), withMethods((store) => ({
14
- /**
15
- * Initializes the user settings store by fetching the user settings from the backend API
16
- * and patching the store with the retrieved settings.
17
- *
18
- * @returns {Promise<void>} A promise that resolves when the initialization is complete.
19
- */
20
- async initialize() {
21
- // Fetch the user settings from the backend API and patch the store with the result
22
- const settings = await fetchUserSettings();
23
- patchState(store, settings);
24
- },
25
- /**
26
- * Resets the user settings to the initial state.
27
- *
28
- * This method performs the following actions:
29
- * 1. Deletes the current user settings.
30
- * 2. Patches the state with the initial state.
31
- *
32
- * @returns {Promise<void>} A promise that resolves when the reset operation is complete.
33
- */
34
- async reset() {
35
- // Reset the user settings to the initial state
36
- await deleteUserSettings();
37
- patchState(store, initialState);
38
- },
39
- })));
40
- }
41
- export function withBookmarkFeatures() {
42
- return signalStoreFeature(withState(initialState), withMethods((store) => ({
43
- /**
44
- * Updates the user's bookmarks in the store and optionally logs audit events.
45
- *
46
- * @param bookmarks - An array of bookmarks to update in the user settings.
47
- * @param auditEvents - Optional audit events to log during the update.
48
- * @returns A promise that resolves when the update is complete.
49
- */
50
- async updateBookmarks(bookmarks, auditEvents) {
51
- await patchUserSettings({ bookmarks }, auditEvents);
52
- patchState(store, (state) => {
53
- return { ...state, bookmarks: [...bookmarks] };
54
- });
55
- },
56
- /**
57
- * Adds an article to the bookmarks if it is not already bookmarked.
58
- *
59
- * @param article - The article to be bookmarked.
60
- * @param queryName - Optional name of the query associated with the bookmark.
61
- * @returns A promise that resolves when the bookmark has been added.
62
- */
63
- async bookmark(article, queryName) {
64
- if (!article.id)
65
- return;
66
- if (this.isBookmarked(article))
67
- return;
68
- const bookmark = {
69
- id: article.id,
70
- label: article.title,
71
- source: article.collection[0],
72
- author: article.authors?.[0],
73
- queryName,
74
- };
75
- await this.updateBookmarks([...store.bookmarks(), bookmark], {
76
- type: "Basket_AddDoc",
77
- detail: {
78
- docid: article.id
79
- }
80
- });
81
- },
82
- /**
83
- * Removes a bookmark by its ID.
84
- *
85
- * @param id - The ID of the bookmark to remove.
86
- * @returns A promise that resolves when the bookmark has been removed and the bookmarks have been updated.
87
- *
88
- * @remarks
89
- * - If the provided ID is falsy, the function will return immediately.
90
- * - If the bookmark with the given ID is not found, the function will return immediately.
91
- * - The function updates the bookmarks and logs the removal action with a type of "Basket_RemoveDoc".
92
- */
93
- async unbookmark(id) {
94
- if (!id)
95
- return;
96
- const bookmarks = store.bookmarks();
97
- const index = bookmarks?.findIndex((bookmark) => bookmark.id === id);
98
- if (index === -1)
99
- return;
100
- bookmarks.splice(index, 1);
101
- await this.updateBookmarks([...bookmarks], {
102
- type: "Basket_RemoveDoc",
103
- detail: {
104
- docid: id
105
- }
106
- });
107
- },
108
- /**
109
- * Checks if the given article is bookmarked.
110
- *
111
- * @param article - An optional partial article object to check.
112
- * @returns `true` if the article is bookmarked, `false` otherwise.
113
- */
114
- isBookmarked(article) {
115
- if (!article || !article.id)
116
- return false;
117
- const bookmarks = store.bookmarks();
118
- return !!bookmarks?.find((bookmark) => bookmark.id === article.id);
119
- },
120
- /**
121
- * Toggles the bookmark status of a given article.
122
- *
123
- * This method checks if the article is currently bookmarked. If it is,
124
- * it removes the bookmark. If it is not, it adds a bookmark.
125
- *
126
- * @param article - The article to toggle the bookmark status for.
127
- * @returns A promise that resolves when the bookmark status has been toggled.
128
- */
129
- async toggleBookmark(article) {
130
- const isBookmarked = await this.isBookmarked(article);
131
- if (isBookmarked)
132
- this.unbookmark(article.id);
133
- else
134
- this.bookmark(article);
135
- },
136
- })));
137
- }
138
- export function withRecentSearchFeatures() {
139
- return signalStoreFeature(withState(initialState), withMethods((store) => ({
140
- /**
141
- * Deletes a recent search entry from the user's recent searches list.
142
- *
143
- * @param {number} index - The index of the recent search to delete.
144
- * @returns {Promise<void>} A promise that resolves when the recent search has been deleted and the state has been updated.
145
- */
146
- async deleteRecentSearch(index) {
147
- const recentSearches = store.recentSearches();
148
- if (recentSearches) {
149
- const recentSearchToDelete = recentSearches.splice(index, 1)[0];
150
- await patchUserSettings({ recentSearches }, {
151
- type: "RecentQuery_Delete",
152
- detail: {
153
- recentQuery: recentSearchToDelete.queryParams?.text
154
- }
155
- });
156
- patchState(store, (state) => {
157
- return { ...state, recentSearches: [...recentSearches] };
158
- });
159
- }
160
- },
161
- /**
162
- * Updates the recent searches in the user settings.
163
- *
164
- * @param recentSearches - An array of recent searches to be updated in the user settings.
165
- * @param auditEvents - Optional audit events to be logged during the update.
166
- * @returns A promise that resolves when the recent searches have been updated.
167
- */
168
- async updateRecentSearches(recentSearches, auditEvents) {
169
- await patchUserSettings({ recentSearches }, auditEvents);
170
- patchState(store, (state) => {
171
- return { ...state, recentSearches: [...recentSearches] };
172
- });
173
- },
174
- /**
175
- * Adds the current search to the recent searches list.
176
- *
177
- * This method checks if a search with the same label already exists in the recent searches.
178
- * If it does, it updates the existing search with the new query parameters and date.
179
- * If it does not, it adds a new search to the recent searches list.
180
- *
181
- * @param queryParams - The parameters of the current search.
182
- * @returns A promise that resolves when the recent searches have been updated.
183
- */
184
- async addCurrentSearch(queryParams) {
185
- // fist search if the search is already in the recent searches with the same label
186
- const recentSearches = store.recentSearches();
187
- const existingSearch = recentSearches.find((search) => search.label === queryParams.text);
188
- const url = window.location.hash.substring(1);
189
- const path = url.split('?')[0];
190
- if (existingSearch) {
191
- await this.updateRecentSearches([
192
- { ...existingSearch,
193
- date: new Date().toISOString(),
194
- url,
195
- path,
196
- queryParams,
197
- filterCount: queryParams.filters?.length
198
- },
199
- ...recentSearches.filter((search) => search.label !== queryParams.text),
200
- ], {
201
- type: "RecentQuery_Update",
202
- detail: {
203
- recentQuery: queryParams.text
204
- }
205
- });
206
- }
207
- else {
208
- const recentSearch = {
209
- url,
210
- path,
211
- display: queryParams.text,
212
- label: queryParams.text,
213
- filterCount: queryParams.filters?.length,
214
- date: new Date().toISOString(),
215
- queryParams
216
- };
217
- await this.updateRecentSearches([recentSearch, ...store.recentSearches()], {
218
- type: "RecentQuery_Add",
219
- detail: {
220
- recentQuery: queryParams.text
221
- }
222
- });
223
- }
224
- },
225
- })));
226
- }
227
- export function withSavedSearchFeatures() {
228
- return signalStoreFeature(withState(initialState), withMethods((store) => ({
229
- async deleteSavedSearch(index) {
230
- const savedSearches = store.savedSearches();
231
- if (savedSearches) {
232
- const savedSearchToDelete = savedSearches.splice(index, 1)[0];
233
- await patchUserSettings({ savedSearches }, {
234
- type: "SavedQuery_Delete",
235
- detail: {
236
- savedQuery: savedSearchToDelete.display
237
- }
238
- });
239
- patchState(store, (state) => {
240
- return { ...state, savedSearches: [...savedSearches] };
241
- });
242
- }
243
- },
244
- async updateSavedSearches(savedSearches) {
245
- await patchUserSettings({ savedSearches }, {
246
- type: "SavedQuery_Add",
247
- detail: {
248
- savedQuery: savedSearches[0].display
249
- }
250
- });
251
- patchState(store, (state) => {
252
- return { ...state, savedSearches: [...savedSearches] };
253
- });
254
- },
255
- })));
256
- }
257
- export function withAssistantFeatures() {
258
- return signalStoreFeature(withState(initialState), withMethods((store) => ({
259
- async updateAssistantSettings(assistantSettings) {
260
- patchState(store, (state) => {
261
- return { ...state, assistants: assistantSettings };
262
- });
263
- },
264
- async updateLanguage(language, auditEvents) {
265
- await patchUserSettings({ language }, auditEvents);
266
- patchState(store, (state) => {
267
- return { ...state, language };
268
- });
269
- },
270
- })));
271
- }
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zZXR0aW5ncy5zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvc3RvcmVzL3VzZXItc2V0dGluZ3Muc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEcsT0FBTyxFQUF3QixrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBZSxNQUFNLGlCQUFpQixDQUFDO0FBTTlILE1BQU0sWUFBWSxHQUFpQjtJQUNqQyxTQUFTLEVBQUUsRUFBRTtJQUNiLGNBQWMsRUFBRSxFQUFFO0lBQ2xCLGFBQWEsRUFBRSxFQUFFO0lBQ2pCLFVBQVUsRUFBRSxFQUFFO0lBQ2QsUUFBUSxFQUFFLFNBQVM7Q0FDcEIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FDMUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEVBQ3RCLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFDNUIsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUN2Qix3QkFBd0IsRUFBRSxFQUMxQixvQkFBb0IsRUFBRSxFQUN0Qix3QkFBd0IsRUFBRSxFQUMxQix1QkFBdUIsRUFBRSxFQUN6QixxQkFBcUIsRUFBRSxDQUN4QixDQUFBO0FBRUQsTUFBTSxVQUFVLHdCQUF3QjtJQUN0QyxPQUFPLGtCQUFrQixDQUN2QixTQUFTLENBQUMsWUFBWSxDQUFDLEVBQ3ZCLFdBQVcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0Qjs7Ozs7V0FLRztRQUNILEtBQUssQ0FBQyxVQUFVO1lBQ2QsbUZBQW1GO1lBQ25GLE1BQU0sUUFB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S0FBSyxDQUFDLHVCQUF1QixDQUFDLGlCQUE2QztZQUN6RSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFCLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztZQUNyRCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQWtDLEVBQUUsV0FBeUI7WUFDaEYsTUFBTSxpQkFBaUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ25ELFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDMUIsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztLQUNGLENBQUMsQ0FBQyxDQUNKLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2l0aERldnRvb2xzIH0gZnJvbSAnQGFuZ3VsYXItYXJjaGl0ZWN0cy9uZ3J4LXRvb2xraXQnO1xuaW1wb3J0IHsgcGF0Y2hTdGF0ZSwgc2lnbmFsU3RvcmUsIHNpZ25hbFN0b3JlRmVhdHVyZSwgd2l0aE1ldGhvZHMsIHdpdGhTdGF0ZSB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuXG5pbXBvcnQgeyBBcnRpY2xlLCBBdWRpdEV2ZW50cywgZGVsZXRlVXNlclNldHRpbmdzLCBmZXRjaFVzZXJTZXR0aW5ncywgcGF0Y2hVc2VyU2V0dGluZ3MsIFF1ZXJ5UGFyYW1zIH0gZnJvbSAnQHNpbmVxdWEvYXRvbWljJztcblxuaW1wb3J0IHsgUmVjZW50U2VhcmNoLCBVc2VyU2V0dGluZ3MgfSBmcm9tICcuLi9tb2RlbHMvdXNlci1zZXR0aW5ncyc7XG5cblxuXG5jb25zdCBpbml0aWFsU3RhdGU6IFVzZXJTZXR0aW5ncyA9IHtcbiAgYm9va21hcmtzOiBbXSxcbiAgcmVjZW50U2VhcmNoZXM6IFtdLFxuICBzYXZlZFNlYXJjaGVzOiBbXSxcbiAgYXNzaXN0YW50czoge30sXG4gIGxhbmd1YWdlOiB1bmRlZmluZWQsXG59O1xuXG5leHBvcnQgY29uc3QgVXNlclNldHRpbmdzU3RvcmUgPSBzaWduYWxTdG9yZShcbiAgeyBwcm92aWRlZEluOiAncm9vdCcgfSxcbiAgd2l0aERldnRvb2xzKCdVc2VyU2V0dGluZ3MnKSxcbiAgd2l0aFN0YXRlKGluaXRpYWxTdGF0ZSksXG4gIHdpdGhVc2VyU2V0dGluZ3NGZWF0dXJlcygpLFxuICB3aXRoQm9va21hcmtGZWF0dXJlcygpLFxuICB3aXRoUmVjZW50U2VhcmNoRmVhdHVyZXMoKSxcbiAgd2l0aFNhdmVkU2VhcmNoRmVhdHVyZXMoKSxcbiAgd2l0aEFzc2lzdGFudEZlYXR1cmVzKClcbilcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhVc2VyU2V0dGluZ3NGZWF0dXJlcygpIHtcbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoU3RhdGUoaW5pdGlhbFN0YXRlKSxcbiAgICB3aXRoTWV0aG9kcygoc3RvcmUpID0+ICh7XG4gICAgICAvKipcbiAgICAgICAqIEluaXRpYWxpemVzIHRoZSB1c2VyIHNldHRpbmdzIHN0b3JlIGJ5IGZldGNoaW5nIHRoZSB1c2VyIHNldHRpbmdzIGZyb20gdGhlIGJhY2tlbmQgQVBJXG4gICAgICAgKiBhbmQgcGF0Y2hpbmcgdGhlIHN0b3JlIHdpdGggdGhlIHJldHJpZXZlZCBzZXR0aW5ncy5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIEZldGNoIHRoZSB1c2VyIHNldHRpbmdzIGZyb20gdGhlIGJhY2tlbmQgQVBJIGFuZCBwYXRjaCB0aGUgc3RvcmUgd2l0aCB0aGUgcmVzdWx0XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gYXdhaXQgZmV0Y2hVc2VyU2V0dGluZ3M8VXNlclNldHRpbmdzPigpO1xuICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBzZXR0aW5ncyk7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBSZXNldHMgdGhlIHVzZXIgc2V0dGluZ3MgdG8gdGhlIGluaXRpYWwgc3RhdGUuXG4gICAgICAgKlxuICAgICAgICogVGhpcyBtZXRob2QgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuICAgICAgICogMS4gRGVsZXRlcyB0aGUgY3VycmVudCB1c2VyIHNldHRpbmdzLlxuICAgICAgICogMi4gUGF0Y2hlcyB0aGUgc3RhdGUgd2l0aCB0aGUgaW5pdGlhbCBzdGF0ZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcmVzZXQgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgICovXG4gICAgICBhc3luYyByZXNldCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gUmVzZXQgdGhlIHVzZXIgc2V0dGluZ3MgdG8gdGhlIGluaXRpYWwgc3RhdGVcbiAgICAgICAgYXdhaXQgZGVsZXRlVXNlclNldHRpbmdzKCk7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIGluaXRpYWxTdGF0ZSk7XG4gICAgICB9LFxuICAgIH0pKSxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aEJvb2ttYXJrRmVhdHVyZXMoKSB7XG4gIHJldHVybiBzaWduYWxTdG9yZUZlYXR1cmUoXG4gICAgd2l0aFN0YXRlKGluaXRpYWxTdGF0ZSksXG4gICAgd2l0aE1ldGhvZHMoKHN0b3JlKSA9PiAoe1xuICAgICAgLyoqXG4gICAgICAgKiBVcGRhdGVzIHRoZSB1c2VyJ3MgYm9va21hcmtzIGluIHRoZSBzdG9yZSBhbmQgb3B0aW9uYWxseSBsb2dzIGF1ZGl0IGV2ZW50cy5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gYm9va21hcmtzIC0gQW4gYXJyYXkgb2YgYm9va21hcmtzIHRvIHVwZGF0ZSBpbiB0aGUgdXNlciBzZXR0aW5ncy5cbiAgICAgICAqIEBwYXJhbSBhdWRpdEV2ZW50cyAtIE9wdGlvbmFsIGF1ZGl0IGV2ZW50cyB0byBsb2cgZHVyaW5nIHRoZSB1cGRhdGUuXG4gICAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB1cGRhdGUgaXMgY29tcGxldGUuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIHVwZGF0ZUJvb2ttYXJrcyhib29rbWFya3M6IFVzZXJTZXR0aW5nc1snYm9va21hcmtzJ10sIGF1ZGl0RXZlbnRzPzogQXVkaXRFdmVudHMpIHtcbiAgICAgICAgYXdhaXQgcGF0Y2hVc2VyU2V0dGluZ3MoeyBib29rbWFya3MgfSwgYXVkaXRFdmVudHMpO1xuICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgYm9va21hcmtzOiBbLi4uYm9va21hcmtzXSB9O1xuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogQWRkcyBhbiBhcnRpY2xlIHRvIHRoZSBib29rbWFya3MgaWYgaXQgaXMgbm90IGFscmVhZHkgYm9va21hcmtlZC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gYXJ0aWNsZSAtIFRoZSBhcnRpY2xlIHRvIGJlIGJvb2ttYXJrZWQuXG4gICAgICAgKiBAcGFyYW0gcXVlcnlOYW1lIC0gT3B0aW9uYWwgbmFtZSBvZiB0aGUgcXVlcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBib29rbWFyay5cbiAgICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGJvb2ttYXJrIGhhcyBiZWVuIGFkZGVkLlxuICAgICAgICovXG4gICAgICBhc3luYyBib29rbWFyayhhcnRpY2xlOiBBcnRpY2xlLCBxdWVyeU5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFhcnRpY2xlLmlkKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuaXNCb29rbWFya2VkKGFydGljbGUpKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgYm9va21hcmsgPSB7XG4gICAgICAgICAgaWQ6IGFydGljbGUuaWQsXG4gICAgICAgICAgbGFiZWw6IGFydGljbGUudGl0bGUsXG4gICAgICAgICAgc291cmNlOiBhcnRpY2xlLmNvbGxlY3Rpb25bMF0sXG4gICAgICAgICAgYXV0aG9yOiBhcnRpY2xlLmF1dGhvcnM/LlswXSxcbiAgICAgICAgICBxdWVyeU5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQm9va21hcmtzKFsuLi5zdG9yZS5ib29rbWFya3MoKSwgYm9va21hcmtdLCB7XG4gICAgICAgICAgdHlwZTogXCJCYXNrZXRfQWRkRG9jXCIsXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBkb2NpZDogYXJ0aWNsZS5pZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBSZW1vdmVzIGEgYm9va21hcmsgYnkgaXRzIElELlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBpZCAtIFRoZSBJRCBvZiB0aGUgYm9va21hcmsgdG8gcmVtb3ZlLlxuICAgICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYm9va21hcmsgaGFzIGJlZW4gcmVtb3ZlZCBhbmQgdGhlIGJvb2ttYXJrcyBoYXZlIGJlZW4gdXBkYXRlZC5cbiAgICAgICAqXG4gICAgICAgKiBAcmVtYXJrc1xuICAgICAgICogLSBJZiB0aGUgcHJvdmlkZWQgSUQgaXMgZmFsc3ksIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBpbW1lZGlhdGVseS5cbiAgICAgICAqIC0gSWYgdGhlIGJvb2ttYXJrIHdpdGggdGhlIGdpdmVuIElEIGlzIG5vdCBmb3VuZCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LlxuICAgICAgICogLSBUaGUgZnVuY3Rpb24gdXBkYXRlcyB0aGUgYm9va21hcmtzIGFuZCBsb2dzIHRoZSByZW1vdmFsIGFjdGlvbiB3aXRoIGEgdHlwZSBvZiBcIkJhc2tldF9SZW1vdmVEb2NcIi5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgdW5ib29rbWFyayhpZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghaWQpIHJldHVybjtcblxuICAgICAgICBjb25zdCBib29rbWFya3MgPSBzdG9yZS5ib29rbWFya3MoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBib29rbWFya3M/LmZpbmRJbmRleCgoYm9va21hcmspID0+IGJvb2ttYXJrLmlkID09PSBpZCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgICAgIGJvb2ttYXJrcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUJvb2ttYXJrcyhbLi4uYm9va21hcmtzXSwge1xuICAgICAgICAgIHR5cGU6IFwiQmFza2V0X1JlbW92ZURvY1wiLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgZG9jaWQ6IGlkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJ0aWNsZSBpcyBib29rbWFya2VkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSBhcnRpY2xlIC0gQW4gb3B0aW9uYWwgcGFydGlhbCBhcnRpY2xlIG9iamVjdCB0byBjaGVjay5cbiAgICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJ0aWNsZSBpcyBib29rbWFya2VkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgICAqL1xuICAgICAgaXNCb29rbWFya2VkKGFydGljbGU6IFBhcnRpYWw8QXJ0aWNsZT4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFhcnRpY2xlIHx8ICFhcnRpY2xlLmlkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGJvb2ttYXJrcyA9IHN0b3JlLmJvb2ttYXJrcygpO1xuXG4gICAgICAgIHJldHVybiAhIWJvb2ttYXJrcz8uZmluZCgoYm9va21hcmspID0+IGJvb2ttYXJrLmlkID09PSBhcnRpY2xlLmlkKTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIFRvZ2dsZXMgdGhlIGJvb2ttYXJrIHN0YXR1cyBvZiBhIGdpdmVuIGFydGljbGUuXG4gICAgICAgKlxuICAgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBhcnRpY2xlIGlzIGN1cnJlbnRseSBib29rbWFya2VkLiBJZiBpdCBpcyxcbiAgICAgICAqIGl0IHJlbW92ZXMgdGhlIGJvb2ttYXJrLiBJZiBpdCBpcyBub3QsIGl0IGFkZHMgYSBib29rbWFyay5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gYXJ0aWNsZSAtIFRoZSBhcnRpY2xlIHRvIHRvZ2dsZSB0aGUgYm9va21hcmsgc3RhdHVzIGZvci5cbiAgICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGJvb2ttYXJrIHN0YXR1cyBoYXMgYmVlbiB0b2dnbGVkLlxuICAgICAgICovXG4gICAgICBhc3luYyB0b2dnbGVCb29rbWFyayhhcnRpY2xlOiBBcnRpY2xlKSB7XG4gICAgICAgIGNvbnN0IGlzQm9va21hcmtlZCA9IGF3YWl0IHRoaXMuaXNCb29rbWFya2VkKGFydGljbGUpO1xuXG4gICAgICAgIGlmIChpc0Jvb2ttYXJrZWQpXG4gICAgICAgICAgdGhpcy51bmJvb2ttYXJrKGFydGljbGUuaWQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpcy5ib29rbWFyayhhcnRpY2xlKTtcbiAgICAgIH0sXG4gICAgfSkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZWNlbnRTZWFyY2hGZWF0dXJlcygpIHtcbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoU3RhdGUoaW5pdGlhbFN0YXRlKSxcbiAgICB3aXRoTWV0aG9kcygoc3RvcmUpID0+ICh7XG4gICAgICAvKipcbiAgICAgICAqIERlbGV0ZXMgYSByZWNlbnQgc2VhcmNoIGVudHJ5IGZyb20gdGhlIHVzZXIncyByZWNlbnQgc2VhcmNoZXMgbGlzdC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHJlY2VudCBzZWFyY2ggdG8gZGVsZXRlLlxuICAgICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlY2VudCBzZWFyY2ggaGFzIGJlZW4gZGVsZXRlZCBhbmQgdGhlIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGRlbGV0ZVJlY2VudFNlYXJjaChpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHJlY2VudFNlYXJjaGVzID0gc3RvcmUucmVjZW50U2VhcmNoZXMoKTtcbiAgICAgICAgaWYgKHJlY2VudFNlYXJjaGVzKSB7XG4gICAgICAgICAgY29uc3QgcmVjZW50U2VhcmNoVG9EZWxldGUgPSByZWNlbnRTZWFyY2hlcy5zcGxpY2UoaW5kZXgsIDEpWzBdO1xuICAgICAgICAgIGF3YWl0IHBhdGNoVXNlclNldHRpbmdzKHsgcmVjZW50U2VhcmNoZXMgfSwge1xuICAgICAgICAgICAgdHlwZTogXCJSZWNlbnRRdWVyeV9EZWxldGVcIixcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICByZWNlbnRRdWVyeTogcmVjZW50U2VhcmNoVG9EZWxldGUucXVlcnlQYXJhbXM/LnRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHJlY2VudFNlYXJjaGVzOiBbLi4ucmVjZW50U2VhcmNoZXNdIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogVXBkYXRlcyB0aGUgcmVjZW50IHNlYXJjaGVzIGluIHRoZSB1c2VyIHNldHRpbmdzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSByZWNlbnRTZWFyY2hlcyAtIEFuIGFycmF5IG9mIHJlY2VudCBzZWFyY2hlcyB0byBiZSB1cGRhdGVkIGluIHRoZSB1c2VyIHNldHRpbmdzLlxuICAgICAgICogQHBhcmFtIGF1ZGl0RXZlbnRzIC0gT3B0aW9uYWwgYXVkaXQgZXZlbnRzIHRvIGJlIGxvZ2dlZCBkdXJpbmcgdGhlIHVwZGF0ZS5cbiAgICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlY2VudCBzZWFyY2hlcyBoYXZlIGJlZW4gdXBkYXRlZC5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgdXBkYXRlUmVjZW50U2VhcmNoZXMocmVjZW50U2VhcmNoZXM6IFVzZXJTZXR0aW5nc1sncmVjZW50U2VhcmNoZXMnXSwgYXVkaXRFdmVudHM/OiBBdWRpdEV2ZW50cykge1xuICAgICAgICBhd2FpdCBwYXRjaFVzZXJTZXR0aW5ncyh7IHJlY2VudFNlYXJjaGVzIH0sIGF1ZGl0RXZlbnRzKTtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHJlY2VudFNlYXJjaGVzOiBbLi4ucmVjZW50U2VhcmNoZXNdIH07XG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBBZGRzIHRoZSBjdXJyZW50IHNlYXJjaCB0byB0aGUgcmVjZW50IHNlYXJjaGVzIGxpc3QuXG4gICAgICAgKlxuICAgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgc2VhcmNoIHdpdGggdGhlIHNhbWUgbGFiZWwgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlY2VudCBzZWFyY2hlcy5cbiAgICAgICAqIElmIGl0IGRvZXMsIGl0IHVwZGF0ZXMgdGhlIGV4aXN0aW5nIHNlYXJjaCB3aXRoIHRoZSBuZXcgcXVlcnkgcGFyYW1ldGVycyBhbmQgZGF0ZS5cbiAgICAgICAqIElmIGl0IGRvZXMgbm90LCBpdCBhZGRzIGEgbmV3IHNlYXJjaCB0byB0aGUgcmVjZW50IHNlYXJjaGVzIGxpc3QuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgb2YgdGhlIGN1cnJlbnQgc2VhcmNoLlxuICAgICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcmVjZW50IHNlYXJjaGVzIGhhdmUgYmVlbiB1cGRhdGVkLlxuICAgICAgICovXG4gICAgICBhc3luYyBhZGRDdXJyZW50U2VhcmNoKHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtcykge1xuICAgICAgICAvLyBmaXN0IHNlYXJjaCBpZiB0aGUgc2VhcmNoIGlzIGFscmVhZHkgaW4gdGhlIHJlY2VudCBzZWFyY2hlcyB3aXRoIHRoZSBzYW1lIGxhYmVsXG4gICAgICAgIGNvbnN0IHJlY2VudFNlYXJjaGVzID0gc3RvcmUucmVjZW50U2VhcmNoZXMoKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdTZWFyY2ggPSByZWNlbnRTZWFyY2hlcy5maW5kKChzZWFyY2gpID0+IHNlYXJjaC5sYWJlbCA9PT0gcXVlcnlQYXJhbXMudGV4dCk7XG5cbiAgICAgICAgY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKDEpO1xuICAgICAgICBjb25zdCBwYXRoID0gdXJsLnNwbGl0KCc/JylbMF07XG4gICAgICAgIGlmIChleGlzdGluZ1NlYXJjaCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUmVjZW50U2VhcmNoZXMoW1xuICAgICAgICAgICAgeyAuLi5leGlzdGluZ1NlYXJjaCxcbiAgICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICBmaWx0ZXJDb3VudDogcXVlcnlQYXJhbXMuZmlsdGVycz8ubGVuZ3RoXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4ucmVjZW50U2VhcmNoZXMuZmlsdGVyKChzZWFyY2gpID0+IHNlYXJjaC5sYWJlbCAhPT0gcXVlcnlQYXJhbXMudGV4dCksXG4gICAgICAgICAgXSwge1xuICAgICAgICAgICAgdHlwZTogXCJSZWNlbnRRdWVyeV9VcGRhdGVcIixcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICByZWNlbnRRdWVyeTogcXVlcnlQYXJhbXMudGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlY2VudFNlYXJjaCA9IHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBkaXNwbGF5OiBxdWVyeVBhcmFtcy50ZXh0LFxuICAgICAgICAgICAgbGFiZWw6IHF1ZXJ5UGFyYW1zLnRleHQsXG4gICAgICAgICAgICBmaWx0ZXJDb3VudDogcXVlcnlQYXJhbXMuZmlsdGVycz8ubGVuZ3RoLFxuICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXNcbiAgICAgICAgICB9IGFzIFJlY2VudFNlYXJjaDtcblxuICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUmVjZW50U2VhcmNoZXMoW3JlY2VudFNlYXJjaCwgLi4uc3RvcmUucmVjZW50U2VhcmNoZXMoKV0sIHtcbiAgICAgICAgICAgIHR5cGU6IFwiUmVjZW50UXVlcnlfQWRkXCIsXG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgcmVjZW50UXVlcnk6IHF1ZXJ5UGFyYW1zLnRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNhdmVkU2VhcmNoRmVhdHVyZXMoKSB7XG4gIHJldHVybiBzaWduYWxTdG9yZUZlYXR1cmUoXG4gICAgd2l0aFN0YXRlKGluaXRpYWxTdGF0ZSksXG4gICAgd2l0aE1ldGhvZHMoKHN0b3JlKSA9PiAoe1xuICAgICAgYXN5bmMgZGVsZXRlU2F2ZWRTZWFyY2goaW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBzYXZlZFNlYXJjaGVzID0gc3RvcmUuc2F2ZWRTZWFyY2hlcygpO1xuICAgICAgICBpZiAoc2F2ZWRTZWFyY2hlcykge1xuICAgICAgICAgIGNvbnN0IHNhdmVkU2VhcmNoVG9EZWxldGUgPSBzYXZlZFNlYXJjaGVzLnNwbGljZShpbmRleCwgMSlbMF07XG4gICAgICAgICAgYXdhaXQgcGF0Y2hVc2VyU2V0dGluZ3MoeyBzYXZlZFNlYXJjaGVzIH0sIHtcbiAgICAgICAgICAgIHR5cGU6IFwiU2F2ZWRRdWVyeV9EZWxldGVcIixcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBzYXZlZFF1ZXJ5OiBzYXZlZFNlYXJjaFRvRGVsZXRlLmRpc3BsYXlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNhdmVkU2VhcmNoZXM6IFsuLi5zYXZlZFNlYXJjaGVzXSB9O1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3luYyB1cGRhdGVTYXZlZFNlYXJjaGVzKHNhdmVkU2VhcmNoZXM6IFVzZXJTZXR0aW5nc1snc2F2ZWRTZWFyY2hlcyddKSB7XG4gICAgICAgIGF3YWl0IHBhdGNoVXNlclNldHRpbmdzKHsgc2F2ZWRTZWFyY2hlcyB9LCB7XG4gICAgICAgICAgdHlwZTogXCJTYXZlZFF1ZXJ5X0FkZFwiLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgc2F2ZWRRdWVyeTogc2F2ZWRTZWFyY2hlc1swXS5kaXNwbGF5XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNhdmVkU2VhcmNoZXM6IFsuLi5zYXZlZFNlYXJjaGVzXSB9O1xuICAgICAgICB9KVxuICAgICAgfSxcbiAgICB9KSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aEFzc2lzdGFudEZlYXR1cmVzKCkge1xuICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuICAgIHdpdGhTdGF0ZShpbml0aWFsU3RhdGUpLFxuICAgIHdpdGhNZXRob2RzKChzdG9yZSkgPT4gKHtcbiAgICAgIGFzeW5jIHVwZGF0ZUFzc2lzdGFudFNldHRpbmdzKGFzc2lzdGFudFNldHRpbmdzOiBVc2VyU2V0dGluZ3NbJ2Fzc2lzdGFudHMnXSkge1xuICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgYXNzaXN0YW50czogYXNzaXN0YW50U2V0dGluZ3MgfTtcbiAgICAgICAgfSlcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIHVwZGF0ZUxhbmd1YWdlKGxhbmd1YWdlOiBVc2VyU2V0dGluZ3NbJ2xhbmd1YWdlJ10sIGF1ZGl0RXZlbnRzPzogQXVkaXRFdmVudHMpIHtcbiAgICAgICAgYXdhaXQgcGF0Y2hVc2VyU2V0dGluZ3MoeyBsYW5ndWFnZSB9LCBhdWRpdEV2ZW50cyk7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBsYW5ndWFnZSB9O1xuICAgICAgICB9KVxuICAgICAgfSxcbiAgICB9KSlcbiAgKVxufSJdfQ==
@@ -1,32 +0,0 @@
1
- import { InjectionToken } from "@angular/core";
2
- // pre-configured highlights's colors
3
- export const HIGHLIGHTS = new InjectionToken('highlights', {
4
- factory: () => [
5
- {
6
- name: 'company',
7
- color: 'white',
8
- bgColor: '#FF7675'
9
- },
10
- {
11
- name: 'geo',
12
- color: 'white',
13
- bgColor: '#74B9FF'
14
- },
15
- {
16
- name: 'person',
17
- color: 'white',
18
- bgColor: '#00ABB5'
19
- },
20
- {
21
- name: 'extractslocations',
22
- color: 'black',
23
- bgColor: '#fffacd'
24
- },
25
- {
26
- name: 'matchlocations',
27
- color: 'black',
28
- bgColor: '#ff0'
29
- }
30
- ],
31
- });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvdG9rZW5zL2hpZ2hsaWdodHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMvQyxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBYyxDQUFxQixZQUFZLEVBQUU7SUFDN0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2I7WUFDRSxJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUssRUFBRSxPQUFPO1lBQ2QsT0FBTyxFQUFFLFNBQVM7U0FDbkI7UUFDRDtZQUNFLElBQUksRUFBRSxLQUFLO1lBQ1gsS0FBSyxFQUFFLE9BQU87WUFDZCxPQUFPLEVBQUUsU0FBUztTQUNuQjtRQUNEO1lBQ0UsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsT0FBTztZQUNkLE9BQU8sRUFBRSxTQUFTO1NBQ25CO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLEtBQUssRUFBRSxPQUFPO1lBQ2QsT0FBTyxFQUFFLFNBQVM7U0FDbkI7UUFDRDtZQUNFLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsS0FBSyxFQUFFLE9BQU87WUFDZCxPQUFPLEVBQUUsTUFBTTtTQUNoQjtLQUNGO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5leHBvcnQgdHlwZSBQcmV2aWV3SGlnaGxpZ2h0TmFtZSA9ICdjb21wYW55JyB8ICdnZW8nIHwgJ3BlcnNvbicgfCAnZXh0cmFjdHNsb2NhdGlvbnMnIHwgJ21hdGNobG9jYXRpb25zJztcbmV4cG9ydCB0eXBlIFByZXZpZXdIaWdobGlnaHQgPSB7XG4gIG5hbWU6IFByZXZpZXdIaWdobGlnaHROYW1lLFxuICBjb2xvcjogc3RyaW5nLFxuICBiZ0NvbG9yOiBzdHJpbmdcbn07XG5cbi8vIHByZS1jb25maWd1cmVkIGhpZ2hsaWdodHMncyBjb2xvcnNcbmV4cG9ydCBjb25zdCBISUdITElHSFRTID0gbmV3IEluamVjdGlvblRva2VuPFByZXZpZXdIaWdobGlnaHRbXT4oJ2hpZ2hsaWdodHMnLCB7XG4gIGZhY3Rvcnk6ICgpID0+IFtcbiAgICB7XG4gICAgICBuYW1lOiAnY29tcGFueScsXG4gICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgIGJnQ29sb3I6ICcjRkY3Njc1J1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2dlbycsXG4gICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgIGJnQ29sb3I6ICcjNzRCOUZGJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BlcnNvbicsXG4gICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgIGJnQ29sb3I6ICcjMDBBQkI1J1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2V4dHJhY3RzbG9jYXRpb25zJyxcbiAgICAgIGNvbG9yOiAnYmxhY2snLFxuICAgICAgYmdDb2xvcjogJyNmZmZhY2QnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnbWF0Y2hsb2NhdGlvbnMnLFxuICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgICBiZ0NvbG9yOiAnI2ZmMCdcbiAgICB9XG4gIF0sXG59KTtcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export * from "./highlights";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3Rva2Vucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2hpZ2hsaWdodHNcIjtcclxuIl19
@@ -1,38 +0,0 @@
1
- import { effect, signal } from "@angular/core";
2
- /**
3
- * Creates a debounced signal that updates its value after a specified timeout.
4
- *
5
- * @template T - The type of the signal value.
6
- * @param Signal<T> input - The input signal whose value will be debounced.
7
- * @param number [timeOutMs=0] - The debounce timeout in milliseconds. Defaults to 0.
8
- * @returns Signal<T> - A new signal that updates its value after the specified debounce timeout.
9
- *
10
- * @example
11
- * ```ts
12
- * const input = signal('');
13
- * const debounced = debouncedSignal(input, 1000);
14
- *
15
- * contructor() {
16
- * effect(() => {
17
- * console.log(debounced());
18
- * // will log the input value after 1 second of inactivity.
19
- * });
20
- * }
21
- * ...
22
- * <input [ngModel]="input()" (ngModelChange)="input.set($event)">
23
- * ```
24
- */
25
- export function debouncedSignal(input, timeOutMs = 0) {
26
- const debounceSignal = signal(input());
27
- let timeout;
28
- effect((onCleanUp) => {
29
- const value = input();
30
- clearTimeout(timeout);
31
- timeout = setTimeout(() => {
32
- debounceSignal.set(value);
33
- }, timeOutMs);
34
- onCleanUp(() => clearTimeout(timeout));
35
- });
36
- return debounceSignal;
37
- }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVib3VuY2VkLXNpZ25hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvdXRpbHMvZGVib3VuY2VkLXNpZ25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUksS0FBZ0IsRUFBRSxTQUFTLEdBQUcsQ0FBQztJQUNoRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2QyxJQUFJLE9BQVksQ0FBQztJQUNqQixNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNuQixNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUN0QixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEIsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDZCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZWZmZWN0LCBzaWduYWwsIFNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBzaWduYWwgdGhhdCB1cGRhdGVzIGl0cyB2YWx1ZSBhZnRlciBhIHNwZWNpZmllZCB0aW1lb3V0LlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBzaWduYWwgdmFsdWUuXHJcbiAqIEBwYXJhbSBTaWduYWw8VD4gaW5wdXQgLSBUaGUgaW5wdXQgc2lnbmFsIHdob3NlIHZhbHVlIHdpbGwgYmUgZGVib3VuY2VkLlxyXG4gKiBAcGFyYW0gbnVtYmVyIFt0aW1lT3V0TXM9MF0gLSBUaGUgZGVib3VuY2UgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuIERlZmF1bHRzIHRvIDAuXHJcbiAqIEByZXR1cm5zIFNpZ25hbDxUPiAtIEEgbmV3IHNpZ25hbCB0aGF0IHVwZGF0ZXMgaXRzIHZhbHVlIGFmdGVyIHRoZSBzcGVjaWZpZWQgZGVib3VuY2UgdGltZW91dC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3QgaW5wdXQgPSBzaWduYWwoJycpO1xyXG4gKiBjb25zdCBkZWJvdW5jZWQgPSBkZWJvdW5jZWRTaWduYWwoaW5wdXQsIDEwMDApO1xyXG4gKlxyXG4gKiBjb250cnVjdG9yKCkge1xyXG4gKiAgZWZmZWN0KCgpID0+IHtcclxuICogICBjb25zb2xlLmxvZyhkZWJvdW5jZWQoKSk7XHJcbiAqICAgLy8gd2lsbCBsb2cgdGhlIGlucHV0IHZhbHVlIGFmdGVyIDEgc2Vjb25kIG9mIGluYWN0aXZpdHkuXHJcbiAqICB9KTtcclxuICogfVxyXG4gKiAuLi5cclxuICogPGlucHV0IFtuZ01vZGVsXT1cImlucHV0KClcIiAobmdNb2RlbENoYW5nZSk9XCJpbnB1dC5zZXQoJGV2ZW50KVwiPlxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZWRTaWduYWw8VD4oaW5wdXQ6IFNpZ25hbDxUPiwgdGltZU91dE1zID0gMCk6IFNpZ25hbDxUPiB7XHJcbiAgY29uc3QgZGVib3VuY2VTaWduYWwgPSBzaWduYWwoaW5wdXQoKSk7XHJcbiAgbGV0IHRpbWVvdXQ6IGFueTtcclxuICBlZmZlY3QoKG9uQ2xlYW5VcCkgPT4ge1xyXG4gICAgY29uc3QgdmFsdWUgPSBpbnB1dCgpO1xyXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBkZWJvdW5jZVNpZ25hbC5zZXQodmFsdWUpO1xyXG4gICAgfSwgdGltZU91dE1zKTtcclxuICAgIG9uQ2xlYW5VcCgoKSA9PiBjbGVhclRpbWVvdXQodGltZW91dCkpXHJcbiAgfSk7XHJcbiAgcmV0dXJuIGRlYm91bmNlU2lnbmFsO1xyXG59Il19
@@ -1,8 +0,0 @@
1
- export * from './inline-worker';
2
- export * from './query';
3
- export * from './routes';
4
- export * from './tailwind-utils';
5
- export * from './theme-body-hook';
6
- export * from './theme-registry';
7
- export * from './debounced-signal';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW5saW5lLXdvcmtlcic7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vcm91dGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdGFpbHdpbmQtdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi90aGVtZS1ib2R5LWhvb2snO1xuZXhwb3J0ICogZnJvbSAnLi90aGVtZS1yZWdpc3RyeSc7XG5leHBvcnQgKiBmcm9tICcuL2RlYm91bmNlZC1zaWduYWwnOyJdfQ==
@@ -1,40 +0,0 @@
1
- import { Subject } from 'rxjs';
2
- export class InlineWorker {
3
- constructor(func) {
4
- this.onMessage = new Subject();
5
- this.onError = new Subject();
6
- const WORKER_ENABLED = !!(Worker);
7
- if (WORKER_ENABLED) {
8
- const functionBody = func.toString().replace(/^[^{]*{\s*/, '').replace(/\s*}[^}]*$/, '');
9
- try {
10
- this.worker = new Worker(URL.createObjectURL(new Blob([functionBody], { type: 'text/javascript' })));
11
- this.worker.onmessage = (data) => {
12
- this.onMessage.next(data);
13
- };
14
- this.worker.onerror = (data) => {
15
- this.onError.next(data);
16
- };
17
- }
18
- catch (e) {
19
- throw new Error('WebWorker is not enabled');
20
- }
21
- }
22
- else {
23
- throw new Error('WebWorker is not enabled');
24
- }
25
- }
26
- postMessage(data) {
27
- this.worker.postMessage(data);
28
- }
29
- onmessage() {
30
- return this.onMessage.asObservable();
31
- }
32
- onerror() {
33
- return this.onError.asObservable();
34
- }
35
- terminate() {
36
- if (this.worker)
37
- this.worker.terminate();
38
- }
39
- }
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXdvcmtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvdXRpbHMvaW5saW5lLXdvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE1BQU0sT0FBTyxZQUFZO0lBTXZCLFlBQVksSUFBZ0I7UUFIcEIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFnQixDQUFDO1FBQ3hDLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRzFDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxDLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUV6RixJQUFJLENBQUM7Z0JBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUMxQyxJQUFJLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FDdEQsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixDQUFDLENBQUM7Z0JBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLENBQUMsQ0FBQztZQUNKLENBQUM7WUFBQyxPQUFNLENBQUMsRUFBQyxDQUFDO2dCQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBRUgsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsSUFBYTtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzNDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNsYXNzIElubGluZVdvcmtlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2VyOiBXb3JrZXI7XG5cbiAgcHJpdmF0ZSBvbk1lc3NhZ2UgPSBuZXcgU3ViamVjdDxNZXNzYWdlRXZlbnQ+KCk7XG4gIHByaXZhdGUgb25FcnJvciA9IG5ldyBTdWJqZWN0PEVycm9yRXZlbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IoZnVuYzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IFdPUktFUl9FTkFCTEVEID0gISEoV29ya2VyKTtcblxuICAgIGlmIChXT1JLRVJfRU5BQkxFRCkge1xuICAgICAgY29uc3QgZnVuY3Rpb25Cb2R5ID0gZnVuYy50b1N0cmluZygpLnJlcGxhY2UoL15bXntdKntcXHMqLywgJycpLnJlcGxhY2UoL1xccyp9W159XSokLywgJycpO1xuXG4gICAgICB0cnkge1xuXG4gICAgICAgIHRoaXMud29ya2VyID0gbmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKFxuICAgICAgICAgIG5ldyBCbG9iKFtmdW5jdGlvbkJvZHldLCB7IHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnIH0pXG4gICAgICAgICkpO1xuXG4gICAgICAgIHRoaXMud29ya2VyLm9ubWVzc2FnZSA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbk1lc3NhZ2UubmV4dChkYXRhKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLndvcmtlci5vbmVycm9yID0gKGRhdGEpID0+IHtcbiAgICAgICAgICB0aGlzLm9uRXJyb3IubmV4dChkYXRhKTtcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignV2ViV29ya2VyIGlzIG5vdCBlbmFibGVkJyk7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJXb3JrZXIgaXMgbm90IGVuYWJsZWQnKTtcbiAgICB9XG4gIH1cblxuICBwb3N0TWVzc2FnZShkYXRhOiB1bmtub3duKSB7XG4gICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2UoZGF0YSk7XG4gIH1cblxuICBvbm1lc3NhZ2UoKTogT2JzZXJ2YWJsZTxNZXNzYWdlRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5vbk1lc3NhZ2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBvbmVycm9yKCk6IE9ic2VydmFibGU8RXJyb3JFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLm9uRXJyb3IuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICB0ZXJtaW5hdGUoKSB7XG4gICAgaWYgKHRoaXMud29ya2VyKSB0aGlzLndvcmtlci50ZXJtaW5hdGUoKTtcbiAgfVxufSJdfQ==
@@ -1,58 +0,0 @@
1
- import { assertInInjectionContext, inject } from '@angular/core';
2
- import { ActivatedRoute, Router } from '@angular/router';
3
- import { getQueryParamsFromUrl } from '@sinequa/atomic';
4
- /**
5
- * Retrieves the query name from the current route.
6
- *
7
- * @remarks
8
- * This function must be used within an injection context.
9
- *
10
- * This function traverses the route tree recursively to find the query name.
11
- * It first checks for a query parameter `t` in the route's snapshot. If the query name is not found
12
- * in the route data, it attempts to find it in the child routes of the "search" route.
13
- * If the query name is still not found, it falls back to the `queryName` defined in the route's data.
14
- *
15
- * @returns {string | undefined} The query name if found, otherwise `undefined`.
16
- */
17
- export function getQueryNameFromRoute() {
18
- assertInInjectionContext(getQueryNameFromRoute);
19
- const route = inject(ActivatedRoute);
20
- const routes = inject(Router);
21
- const recursive = (route) => {
22
- if (route?.firstChild)
23
- return recursive(route.firstChild);
24
- // Get query name from route data
25
- const { t } = route.snapshot.queryParams;
26
- // ! This is a workaround for the case where the queryName is not defined in the route data
27
- // "search" is the parent route of the search results, and "t" is the query parameter for the tab
28
- const { queryName } = routes.config.filter(p => p.path === "search")[0].children?.find(route => route.path === t)?.data || {};
29
- if (queryName)
30
- return queryName;
31
- // fallback to queryName from route data
32
- if (route?.snapshot.data['queryName'])
33
- return route.snapshot.data['queryName'];
34
- return undefined;
35
- };
36
- return recursive(route);
37
- }
38
- /**
39
- * Builds a query object based on the provided partial query.
40
- * If any properties are missing in the partial query, default values are used.
41
- *
42
- * @remarks
43
- * This function must be used within an injection context.
44
- *
45
- * @param query - The partial query object.
46
- * @returns The complete query object.
47
- */
48
- export function buildQuery(query) {
49
- assertInInjectionContext(buildQuery);
50
- const name = query?.name || getQueryNameFromRoute();
51
- const params = getQueryParamsFromUrl(window.location.toString());
52
- return {
53
- ...params, // default values retrieved from the URL
54
- ...query, // override with query
55
- name, // override with query name
56
- };
57
- }
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3V0aWxzL3F1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUscUJBQXFCLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUsvRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLHdCQUF3QixDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFaEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUU3QixNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQXFCLEVBQXNCLEVBQUU7UUFDOUQsSUFBSSxLQUFLLEVBQUUsVUFBVTtZQUFFLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxRCxpQ0FBaUM7UUFDakMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3pDLDJGQUEyRjtRQUMzRixpR0FBaUc7UUFDakcsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzlILElBQUksU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRWhDLHdDQUF3QztRQUN4QyxJQUFJLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFL0UsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFBO0lBRUQsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBc0I7SUFDL0Msd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFckMsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0lBQ3BELE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNqRSxPQUFRO1FBQ04sR0FBRyxNQUFNLEVBQUcsd0NBQXdDO1FBQ3BELEdBQUcsS0FBSyxFQUFJLHNCQUFzQjtRQUNsQyxJQUFJLEVBQVEsMkJBQTJCO0tBQzlCLENBQUE7QUFFYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBnZXRRdWVyeVBhcmFtc0Zyb21VcmwsIFF1ZXJ5IH0gZnJvbSAnQHNpbmVxdWEvYXRvbWljJztcblxuaW1wb3J0IHsgUXVlcnlQYXJhbXNTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcyc7XG5cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHF1ZXJ5IG5hbWUgZnJvbSB0aGUgY3VycmVudCByb3V0ZS5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgd2l0aGluIGFuIGluamVjdGlvbiBjb250ZXh0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSByb3V0ZSB0cmVlIHJlY3Vyc2l2ZWx5IHRvIGZpbmQgdGhlIHF1ZXJ5IG5hbWUuXG4gKiBJdCBmaXJzdCBjaGVja3MgZm9yIGEgcXVlcnkgcGFyYW1ldGVyIGB0YCBpbiB0aGUgcm91dGUncyBzbmFwc2hvdC4gSWYgdGhlIHF1ZXJ5IG5hbWUgaXMgbm90IGZvdW5kXG4gKiBpbiB0aGUgcm91dGUgZGF0YSwgaXQgYXR0ZW1wdHMgdG8gZmluZCBpdCBpbiB0aGUgY2hpbGQgcm91dGVzIG9mIHRoZSBcInNlYXJjaFwiIHJvdXRlLlxuICogSWYgdGhlIHF1ZXJ5IG5hbWUgaXMgc3RpbGwgbm90IGZvdW5kLCBpdCBmYWxscyBiYWNrIHRvIHRoZSBgcXVlcnlOYW1lYCBkZWZpbmVkIGluIHRoZSByb3V0ZSdzIGRhdGEuXG4gKlxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gVGhlIHF1ZXJ5IG5hbWUgaWYgZm91bmQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXJ5TmFtZUZyb21Sb3V0ZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoZ2V0UXVlcnlOYW1lRnJvbVJvdXRlKTtcblxuICBjb25zdCByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIGNvbnN0IHJvdXRlcyA9IGluamVjdChSb3V0ZXIpXG5cbiAgY29uc3QgcmVjdXJzaXZlID0gKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHJvdXRlPy5maXJzdENoaWxkKSByZXR1cm4gcmVjdXJzaXZlKHJvdXRlLmZpcnN0Q2hpbGQpO1xuXG4gICAgLy8gR2V0IHF1ZXJ5IG5hbWUgZnJvbSByb3V0ZSBkYXRhXG4gICAgY29uc3QgeyB0IH0gPSByb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICAvLyAhIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgcXVlcnlOYW1lIGlzIG5vdCBkZWZpbmVkIGluIHRoZSByb3V0ZSBkYXRhXG4gICAgLy8gXCJzZWFyY2hcIiBpcyB0aGUgcGFyZW50IHJvdXRlIG9mIHRoZSBzZWFyY2ggcmVzdWx0cywgYW5kIFwidFwiIGlzIHRoZSBxdWVyeSBwYXJhbWV0ZXIgZm9yIHRoZSB0YWJcbiAgICBjb25zdCB7IHF1ZXJ5TmFtZSB9ID0gcm91dGVzLmNvbmZpZy5maWx0ZXIocCA9PiBwLnBhdGggPT09IFwic2VhcmNoXCIpWzBdLmNoaWxkcmVuPy5maW5kKHJvdXRlID0+IHJvdXRlLnBhdGggPT09IHQpPy5kYXRhIHx8IHt9O1xuICAgIGlmIChxdWVyeU5hbWUpIHJldHVybiBxdWVyeU5hbWU7XG5cbiAgICAvLyBmYWxsYmFjayB0byBxdWVyeU5hbWUgZnJvbSByb3V0ZSBkYXRhXG4gICAgaWYgKHJvdXRlPy5zbmFwc2hvdC5kYXRhWydxdWVyeU5hbWUnXSkgcmV0dXJuIHJvdXRlLnNuYXBzaG90LmRhdGFbJ3F1ZXJ5TmFtZSddO1xuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiByZWN1cnNpdmUocm91dGUpO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHF1ZXJ5IG9iamVjdCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFydGlhbCBxdWVyeS5cbiAqIElmIGFueSBwcm9wZXJ0aWVzIGFyZSBtaXNzaW5nIGluIHRoZSBwYXJ0aWFsIHF1ZXJ5LCBkZWZhdWx0IHZhbHVlcyBhcmUgdXNlZC5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgd2l0aGluIGFuIGluamVjdGlvbiBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBxdWVyeSAtIFRoZSBwYXJ0aWFsIHF1ZXJ5IG9iamVjdC5cbiAqIEByZXR1cm5zIFRoZSBjb21wbGV0ZSBxdWVyeSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFF1ZXJ5KHF1ZXJ5PzogUGFydGlhbDxRdWVyeT4pOiBRdWVyeSB7XG4gIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChidWlsZFF1ZXJ5KTtcblxuICBjb25zdCBuYW1lID0gcXVlcnk/Lm5hbWUgfHwgZ2V0UXVlcnlOYW1lRnJvbVJvdXRlKCk7XG4gIGNvbnN0IHBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zRnJvbVVybCh3aW5kb3cubG9jYXRpb24udG9TdHJpbmcoKSk7XG4gIHJldHVybiAoe1xuICAgIC4uLnBhcmFtcywgIC8vIGRlZmF1bHQgdmFsdWVzIHJldHJpZXZlZCBmcm9tIHRoZSBVUkxcbiAgICAuLi5xdWVyeSwgICAvLyBvdmVycmlkZSB3aXRoIHF1ZXJ5XG4gICAgbmFtZSwgICAgICAgLy8gb3ZlcnJpZGUgd2l0aCBxdWVyeSBuYW1lXG4gIH0gYXMgUXVlcnkpXG5cbn1cbiJdfQ==
@@ -1,28 +0,0 @@
1
- import { assertInInjectionContext, inject } from "@angular/core";
2
- import { ActivatedRoute, Router } from "@angular/router";
3
- /**
4
- * Retrieves the current path from the Angular `ActivatedRoute` service.
5
- *
6
- * @returns {string | undefined} The current path as a string, or `undefined` if the path cannot be determined.
7
- */
8
- export function getCurrentPath() {
9
- assertInInjectionContext(getCurrentPath);
10
- const route = inject(ActivatedRoute);
11
- return route?.snapshot.url.toString();
12
- }
13
- /**
14
- * Retrieves the current query name based on the current path and router configuration.
15
- *
16
- * This function asserts that it is being called within an injection context and then
17
- * uses Angular's dependency injection to get the router configuration. It matches the
18
- * current path against the router's configuration to find the corresponding query name.
19
- *
20
- * @returns {string | undefined} The name of the current query if found, otherwise undefined.
21
- */
22
- export function getCurrentQueryName() {
23
- assertInInjectionContext(getCurrentQueryName);
24
- const routes = inject(Router).config;
25
- const path = getCurrentPath();
26
- return routes.find(r => r.path === 'search')?.children?.find(r => r.path === path)?.data?.['queryName'];
27
- }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXRvbWljLWFuZ3VsYXIvc3JjL2xpYi91dGlscy9yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3pEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1Qix3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUV6QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFckMsT0FBTyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QyxDQUFDO0FBSUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLHdCQUF3QixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUVyQyxNQUFNLElBQUksR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUU5QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG5cclxuLyoqXHJcbiAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBwYXRoIGZyb20gdGhlIEFuZ3VsYXIgYEFjdGl2YXRlZFJvdXRlYCBzZXJ2aWNlLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgY3VycmVudCBwYXRoIGFzIGEgc3RyaW5nLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgcGF0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50UGF0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChnZXRDdXJyZW50UGF0aCk7XHJcblxyXG4gIGNvbnN0IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcclxuXHJcbiAgcmV0dXJuIHJvdXRlPy5zbmFwc2hvdC51cmwudG9TdHJpbmcoKTtcclxufVxyXG5cclxuXHJcblxyXG4vKipcclxuICogUmV0cmlldmVzIHRoZSBjdXJyZW50IHF1ZXJ5IG5hbWUgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGF0aCBhbmQgcm91dGVyIGNvbmZpZ3VyYXRpb24uXHJcbiAqXHJcbiAqIFRoaXMgZnVuY3Rpb24gYXNzZXJ0cyB0aGF0IGl0IGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQgYW5kIHRoZW5cclxuICogdXNlcyBBbmd1bGFyJ3MgZGVwZW5kZW5jeSBpbmplY3Rpb24gdG8gZ2V0IHRoZSByb3V0ZXIgY29uZmlndXJhdGlvbi4gSXQgbWF0Y2hlcyB0aGVcclxuICogY3VycmVudCBwYXRoIGFnYWluc3QgdGhlIHJvdXRlcidzIGNvbmZpZ3VyYXRpb24gdG8gZmluZCB0aGUgY29ycmVzcG9uZGluZyBxdWVyeSBuYW1lLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBxdWVyeSBpZiBmb3VuZCwgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50UXVlcnlOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGdldEN1cnJlbnRRdWVyeU5hbWUpO1xyXG5cclxuICBjb25zdCByb3V0ZXMgPSBpbmplY3QoUm91dGVyKS5jb25maWc7XHJcblxyXG4gIGNvbnN0IHBhdGggPSBnZXRDdXJyZW50UGF0aCgpO1xyXG5cclxuICByZXR1cm4gcm91dGVzLmZpbmQociA9PiByLnBhdGggPT09ICdzZWFyY2gnKT8uY2hpbGRyZW4/LmZpbmQociA9PiByLnBhdGggPT09IHBhdGgpPy5kYXRhPy5bJ3F1ZXJ5TmFtZSddO1xyXG59Il19
@@ -1,6 +0,0 @@
1
- import { clsx } from 'clsx';
2
- import { twMerge } from 'tailwind-merge';
3
- export function cn(...inputs) {
4
- return twMerge(clsx(inputs));
5
- }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFpbHdpbmQtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3V0aWxzL3RhaWx3aW5kLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6QyxNQUFNLFVBQVUsRUFBRSxDQUFDLEdBQUcsTUFBb0I7SUFDeEMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ2xhc3NWYWx1ZSwgY2xzeCB9IGZyb20gJ2Nsc3gnO1xyXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNuKC4uLmlucHV0czogQ2xhc3NWYWx1ZVtdKSB7XHJcbiAgcmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKTtcclxufVxyXG4iXX0=
@@ -1,18 +0,0 @@
1
- import { effect, inject, runInInjectionContext } from "@angular/core";
2
- import { applyThemeToNativeElement, ThemeStore } from "../stores";
3
- export function withThemeBodyHook(app, params) {
4
- runInInjectionContext(app.injector, () => {
5
- const themeStore = inject(ThemeStore);
6
- const { scope, theme } = params || { scope: 'application', theme: 'Default' };
7
- themeStore.setCurrentTheme(scope, theme);
8
- applyThemeToNativeElement(window.document.body, themeStore.scopes()?.[scope]?.cssVars?.light);
9
- effect(() => {
10
- const bodyScope = themeStore.scopes()?.[scope];
11
- const vars = bodyScope.darkMode ? bodyScope.cssVars.dark : bodyScope.cssVars.light;
12
- if (vars)
13
- applyThemeToNativeElement(window.document.body, vars);
14
- });
15
- });
16
- return app;
17
- }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtYm9keS1ob29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXRvbWljLWFuZ3VsYXIvc3JjL2xpYi91dGlscy90aGVtZS1ib2R5LWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixNQUFNLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFPbEUsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixHQUFtQixFQUNuQixNQUEyQztJQUUzQyxxQkFBcUIsQ0FDbkIsR0FBRyxDQUFDLFFBQVEsRUFDWixHQUFHLEVBQUU7UUFDSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUU5RSxVQUFVLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV6Qyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFOUYsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUVuRixJQUFJLElBQUk7Z0JBQUUseUJBQXlCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQ0YsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBlZmZlY3QsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgYXBwbHlUaGVtZVRvTmF0aXZlRWxlbWVudCwgVGhlbWVTdG9yZSB9IGZyb20gXCIuLi9zdG9yZXNcIjtcblxuZXhwb3J0IHR5cGUgVGhlbWVCb2R5SG9va1BhcmFtZXRlcnMgPSB7XG4gIHNjb3BlOiBzdHJpbmc7XG4gIHRoZW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRoZW1lQm9keUhvb2soXG4gIGFwcDogQXBwbGljYXRpb25SZWYsXG4gIHBhcmFtczogVGhlbWVCb2R5SG9va1BhcmFtZXRlcnMgfCB1bmRlZmluZWRcbik6IEFwcGxpY2F0aW9uUmVmIHtcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0KFxuICAgIGFwcC5pbmplY3RvcixcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCB0aGVtZVN0b3JlID0gaW5qZWN0KFRoZW1lU3RvcmUpO1xuICAgICAgY29uc3QgeyBzY29wZSwgdGhlbWUgfSA9IHBhcmFtcyB8fCB7IHNjb3BlOiAnYXBwbGljYXRpb24nLCB0aGVtZTogJ0RlZmF1bHQnIH07XG5cbiAgICAgIHRoZW1lU3RvcmUuc2V0Q3VycmVudFRoZW1lKHNjb3BlLCB0aGVtZSk7XG5cbiAgICAgIGFwcGx5VGhlbWVUb05hdGl2ZUVsZW1lbnQod2luZG93LmRvY3VtZW50LmJvZHksIHRoZW1lU3RvcmUuc2NvcGVzKCk/LltzY29wZV0/LmNzc1ZhcnM/LmxpZ2h0KTtcblxuICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgYm9keVNjb3BlID0gdGhlbWVTdG9yZS5zY29wZXMoKT8uW3Njb3BlXTtcbiAgICAgICAgY29uc3QgdmFycyA9IGJvZHlTY29wZS5kYXJrTW9kZSA/IGJvZHlTY29wZS5jc3NWYXJzLmRhcmsgOiBib2R5U2NvcGUuY3NzVmFycy5saWdodDtcblxuICAgICAgICBpZiAodmFycykgYXBwbHlUaGVtZVRvTmF0aXZlRWxlbWVudCh3aW5kb3cuZG9jdW1lbnQuYm9keSwgdmFycyk7XG4gICAgICB9KVxuICAgIH1cbiAgKTtcblxuICByZXR1cm4gYXBwO1xufVxuIl19
@@ -1,6 +0,0 @@
1
- import { THEMES } from "../resources";
2
- export function withThemes(app, themes) {
3
- themes.forEach(theme => THEMES.push(theme));
4
- return app;
5
- }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3V0aWxzL3RoZW1lLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBUyxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFtQixFQUFFLE1BQWU7SUFDN0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU1QyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IFRoZW1lLCBUSEVNRVMgfSBmcm9tIFwiLi4vcmVzb3VyY2VzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGhlbWVzKGFwcDogQXBwbGljYXRpb25SZWYsIHRoZW1lczogVGhlbWVbXSk6IEFwcGxpY2F0aW9uUmVmIHtcbiAgdGhlbWVzLmZvckVhY2godGhlbWUgPT4gVEhFTUVTLnB1c2godGhlbWUpKTtcblxuICByZXR1cm4gYXBwO1xufVxuIl19