cloud-ide-element 0.0.1 → 1.0.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 (50) hide show
  1. package/README.md +271 -24
  2. package/esm2022/lib/components/confirmation-modal/confirmation-modal.component.mjs +182 -0
  3. package/esm2022/lib/components/data-grid/data-grid.component.mjs +1363 -0
  4. package/esm2022/lib/components/data-grid/data-grid.types.mjs +37 -0
  5. package/esm2022/lib/components/dropdown/dropdown.component.mjs +396 -0
  6. package/esm2022/lib/components/global-notifications/global-notifications.component.mjs +30 -0
  7. package/esm2022/lib/components/json-editor/json-editor.component.mjs +521 -0
  8. package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +33 -0
  9. package/esm2022/lib/components/toast-notification/toast-notification.component.mjs +152 -0
  10. package/esm2022/lib/elements/button/cide-ele-button.component.mjs +249 -0
  11. package/esm2022/lib/elements/file-input/file-input.component.mjs +83 -0
  12. package/esm2022/lib/elements/icon/icon.component.mjs +5 -3
  13. package/esm2022/lib/elements/input/input.component.mjs +34 -20
  14. package/esm2022/lib/elements/select/select.component.mjs +471 -0
  15. package/esm2022/lib/elements/tab/cide-ele-tab.component.mjs +74 -0
  16. package/esm2022/lib/elements/textarea/textarea.component.mjs +157 -0
  17. package/esm2022/lib/services/confirmation.service.mjs +151 -0
  18. package/esm2022/lib/services/dropdown-manager.service.mjs +93 -0
  19. package/esm2022/lib/services/notification.service.mjs +196 -0
  20. package/esm2022/lib/utils/directives/resizer/resizer.directive.mjs +231 -0
  21. package/esm2022/lib/utils/directives/tooltip/tooltip.directive.mjs +294 -0
  22. package/esm2022/lib/utils/services/elements/elements.service.mjs +9 -7
  23. package/esm2022/public-api.mjs +23 -2
  24. package/fesm2022/cloud-ide-element.mjs +4646 -47
  25. package/fesm2022/cloud-ide-element.mjs.map +1 -1
  26. package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +16 -0
  27. package/lib/components/data-grid/data-grid.component.d.ts +244 -0
  28. package/lib/components/data-grid/data-grid.types.d.ts +146 -0
  29. package/lib/components/dropdown/dropdown.component.d.ts +75 -0
  30. package/lib/components/global-notifications/global-notifications.component.d.ts +5 -0
  31. package/lib/components/json-editor/json-editor.component.d.ts +116 -0
  32. package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +11 -0
  33. package/lib/components/toast-notification/toast-notification.component.d.ts +13 -0
  34. package/lib/elements/button/cide-ele-button.component.d.ts +85 -0
  35. package/lib/elements/file-input/file-input.component.d.ts +25 -0
  36. package/lib/elements/input/input.component.d.ts +7 -4
  37. package/lib/elements/select/select.component.d.ts +91 -0
  38. package/lib/elements/tab/cide-ele-tab.component.d.ts +26 -0
  39. package/lib/elements/textarea/textarea.component.d.ts +47 -0
  40. package/lib/services/confirmation.service.d.ts +65 -0
  41. package/lib/services/dropdown-manager.service.d.ts +22 -0
  42. package/lib/services/notification.service.d.ts +81 -0
  43. package/lib/utils/directives/resizer/resizer.directive.d.ts +44 -0
  44. package/lib/utils/directives/tooltip/tooltip.directive.d.ts +43 -0
  45. package/package.json +32 -4
  46. package/public-api.d.ts +18 -1
  47. package/src/lib/assets/css/cide-ele-style.scss +85 -0
  48. package/src/lib/assets/css/cide-ele-variable.scss +336 -0
  49. package/esm2022/lib/elements/button/button.component.mjs +0 -60
  50. package/lib/elements/button/button.component.d.ts +0 -27
@@ -0,0 +1,37 @@
1
+ // Data Grid Configuration Types for CideEleDataGrid Component
2
+ // Default configurations
3
+ export const DEFAULT_GRID_CONFIG = {
4
+ pagination: {
5
+ enabled: true,
6
+ pageSize: 10,
7
+ pageSizeOptions: [10, 25, 50, 100],
8
+ showQuickJump: true,
9
+ showPageInfo: true,
10
+ showRefresh: true
11
+ },
12
+ search: {
13
+ enabled: true,
14
+ placeholder: 'Search...',
15
+ searchableColumns: [],
16
+ debounceMs: 300
17
+ },
18
+ loading: {
19
+ useDefer: true,
20
+ skeletonRows: 5,
21
+ showOverlay: false
22
+ },
23
+ scroll: {
24
+ enabled: false,
25
+ maxHeight: '400px',
26
+ minHeight: '200px',
27
+ stickyHeader: true,
28
+ virtualScroll: false,
29
+ rowHeight: 40
30
+ },
31
+ responsive: true,
32
+ striped: false,
33
+ bordered: true,
34
+ compact: true,
35
+ fullHeight: true
36
+ };
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWVsZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZ3JpZC9kYXRhLWdyaWQudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOERBQThEO0FBMEs5RCx5QkFBeUI7QUFDekIsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQStCO0lBQzdELFVBQVUsRUFBRTtRQUNWLE9BQU8sRUFBRSxJQUFJO1FBQ2IsUUFBUSxFQUFFLEVBQUU7UUFDWixlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7UUFDbEMsYUFBYSxFQUFFLElBQUk7UUFDbkIsWUFBWSxFQUFFLElBQUk7UUFDbEIsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRCxNQUFNLEVBQUU7UUFDTixPQUFPLEVBQUUsSUFBSTtRQUNiLFdBQVcsRUFBRSxXQUFXO1FBQ3hCLGlCQUFpQixFQUFFLEVBQUU7UUFDckIsVUFBVSxFQUFFLEdBQUc7S0FDaEI7SUFDRCxPQUFPLEVBQUU7UUFDUCxRQUFRLEVBQUUsSUFBSTtRQUNkLFlBQVksRUFBRSxDQUFDO1FBQ2YsV0FBVyxFQUFFLEtBQUs7S0FDbkI7SUFDRCxNQUFNLEVBQUU7UUFDTixPQUFPLEVBQUUsS0FBSztRQUNkLFNBQVMsRUFBRSxPQUFPO1FBQ2xCLFNBQVMsRUFBRSxPQUFPO1FBQ2xCLFlBQVksRUFBRSxJQUFJO1FBQ2xCLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLFNBQVMsRUFBRSxFQUFFO0tBQ2Q7SUFDRCxVQUFVLEVBQUUsSUFBSTtJQUNoQixPQUFPLEVBQUUsS0FBSztJQUNkLFFBQVEsRUFBRSxJQUFJO0lBQ2QsT0FBTyxFQUFFLElBQUk7SUFDYixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRGF0YSBHcmlkIENvbmZpZ3VyYXRpb24gVHlwZXMgZm9yIENpZGVFbGVEYXRhR3JpZCBDb21wb25lbnRcblxuZXhwb3J0IHR5cGUgQ29sdW1uVHlwZSA9ICd0ZXh0JyB8ICdudW1iZXInIHwgJ2RhdGUnIHwgJ2Jvb2xlYW4nIHwgJ3N0YXR1cycgfCAnYWN0aW9ucycgfCAnY3VzdG9tJyB8ICdvcmRlcic7XG5leHBvcnQgdHlwZSBDb2x1bW5XaWR0aCA9ICd4cycgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnIHwgJ2F1dG8nIHwgc3RyaW5nO1xuZXhwb3J0IHR5cGUgVGV4dEFsaWduID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRDb2x1bW4ge1xuICBrZXk6IHN0cmluZztcbiAgaGVhZGVyOiBzdHJpbmc7XG4gIHR5cGU6IENvbHVtblR5cGU7XG4gIHdpZHRoPzogQ29sdW1uV2lkdGg7XG4gIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIHRydW5jYXRlPzogYm9vbGVhbjtcbiAgYWxpZ24/OiBUZXh0QWxpZ247XG4gIHJlbmRlcmVyPzogc3RyaW5nOyAvLyBGb3IgY3VzdG9tIHJlbmRlcmluZ1xuICB2YWx1ZUdldHRlcj86IHN0cmluZzsgLy8gUGF0aCB0byBuZXN0ZWQgcHJvcGVydHkgKGUuZy4sICdjb250YWN0LmVtYWlsJylcbiAgZm9ybWF0dGVyPzogR3JpZEZvcm1hdHRlcjtcbiAgYWN0aW9ucz86IEdyaWRBY3Rpb25bXTtcbiAgc3RhdHVzQ29uZmlnPzogU3RhdHVzQ29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRGb3JtYXR0ZXIge1xuICB0eXBlOiAnZGF0ZScgfCAnY3VycmVuY3knIHwgJ3BlcmNlbnRhZ2UnIHwgJ2N1c3RvbSc7XG4gIGZvcm1hdD86IHN0cmluZzsgLy8gRGF0ZSBmb3JtYXQsIGN1cnJlbmN5IGNvZGUsIGV0Yy5cbiAgY3VzdG9tRnVuY3Rpb24/OiBzdHJpbmc7IC8vIE5hbWUgb2YgY3VzdG9tIGZvcm1hdHRlciBmdW5jdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXR1c0NvbmZpZyB7XG4gIGFjdGl2ZVZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuICBhY3RpdmVMYWJlbDogc3RyaW5nO1xuICBpbmFjdGl2ZUxhYmVsOiBzdHJpbmc7XG4gIGFjdGl2ZUNsYXNzOiBzdHJpbmc7XG4gIGluYWN0aXZlQ2xhc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmlkQWN0aW9uIHtcbiAga2V5OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgdmFyaWFudDogJ2dob3N0JyB8ICdwcmltYXJ5JyB8ICdvdXRsaW5lJyB8ICdkYW5nZXInO1xuICB0b29sdGlwPzogc3RyaW5nO1xuICBjb25kaXRpb24/OiBzdHJpbmc7IC8vIENvbmRpdGlvbiB0byBzaG93IGFjdGlvbiAoZS5nLiwgJ2VudGl0eS5pc0FjdGl2ZScpXG4gIG9uQ2xpY2s6IHN0cmluZzsgLy8gRnVuY3Rpb24gbmFtZSB0byBjYWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFBhZ2luYXRpb25Db25maWcge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBwYWdlU2l6ZTogbnVtYmVyO1xuICBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdO1xuICBzaG93UXVpY2tKdW1wOiBib29sZWFuO1xuICBzaG93UGFnZUluZm86IGJvb2xlYW47XG4gIHNob3dSZWZyZXNoOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRTZWFyY2hDb25maWcge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBzZWFyY2hhYmxlQ29sdW1uczogc3RyaW5nW107IC8vIENvbHVtbiBrZXlzIHRvIHNlYXJjaCBpblxuICBkZWJvdW5jZU1zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRFeHBvcnRDb25maWcge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBmb3JtYXRzOiAoJ2NzdicgfCAnZXhjZWwnIHwgJ3BkZicpW107XG4gIGZpbGVuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRMb2FkaW5nQ29uZmlnIHtcbiAgdXNlRGVmZXI6IGJvb2xlYW47XG4gIHNrZWxldG9uUm93czogbnVtYmVyO1xuICBzaG93T3ZlcmxheTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmlkU2Nyb2xsQ29uZmlnIHtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgbWF4SGVpZ2h0Pzogc3RyaW5nOyAvLyBlLmcuLCAnNDAwcHgnLCAnNTB2aCcsICdjYWxjKDEwMHZoIC0gMjAwcHgpJ1xuICBtaW5IZWlnaHQ/OiBzdHJpbmc7IC8vIGUuZy4sICcyMDBweCdcbiAgc3RpY2t5SGVhZGVyPzogYm9vbGVhbjsgLy8gS2VlcCBoZWFkZXIgdmlzaWJsZSB3aGVuIHNjcm9sbGluZ1xuICB2aXJ0dWFsU2Nyb2xsPzogYm9vbGVhbjsgLy8gRW5hYmxlIHZpcnR1YWwgc2Nyb2xsaW5nIGZvciBsYXJnZSBkYXRhc2V0c1xuICByb3dIZWlnaHQ/OiBudW1iZXI7IC8vIEhlaWdodCBvZiBlYWNoIHJvdyBpbiBwaXhlbHMgKGZvciB2aXJ0dWFsIHNjcm9sbClcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmlkVHJlZUNvbmZpZyB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIHByaW1hcnlLZXk6IHN0cmluZzsgLy8gUHJpbWFyeSBrZXkgZmllbGQgbmFtZSAoZS5nLiwgJ19pZCcpXG4gIGZvcmVpZ25LZXk6IHN0cmluZzsgLy8gRm9yZWlnbiBrZXkgZmllbGQgbmFtZSAoZS5nLiwgJ3N5bWVfaWRfc3ltZScpXG4gIGNoaWxkcmVuS2V5Pzogc3RyaW5nOyAvLyBDaGlsZHJlbiBhcnJheSBmaWVsZCBuYW1lIChkZWZhdWx0OiAnY2hpbGRyZW4nKVxuICBsZXZlbEtleT86IHN0cmluZzsgLy8gTGV2ZWwgZmllbGQgbmFtZSAoZGVmYXVsdDogJ2xldmVsJylcbiAgZXhwYW5kZWRLZXk/OiBzdHJpbmc7IC8vIEV4cGFuZGVkIHN0YXRlIGZpZWxkIG5hbWUgKGRlZmF1bHQ6ICdpc0V4cGFuZGVkJylcbiAgaGFzQ2hpbGRyZW5LZXk/OiBzdHJpbmc7IC8vIEhhcyBjaGlsZHJlbiBmaWVsZCBuYW1lIChkZWZhdWx0OiAnaGFzQ2hpbGRyZW4nKVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWREcmFnRHJvcENvbmZpZyB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGRyYWdIYW5kbGU/OiBzdHJpbmc7IC8vIENTUyBzZWxlY3RvciBmb3IgZHJhZyBoYW5kbGUgKGRlZmF1bHQ6ICd0cicpXG4gIG9yZGVyRmllbGQ/OiBzdHJpbmc7IC8vIEZpZWxkIG5hbWUgZm9yIHN0b3Jpbmcgb3JkZXIgKGRlZmF1bHQ6ICdvcmRlcicpXG4gIGRyYWdDbGFzcz86IHN0cmluZzsgLy8gQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIGRyYWdnZWQgZWxlbWVudFxuICBkcm9wQ2xhc3M/OiBzdHJpbmc7IC8vIENTUyBjbGFzcyB0byBhcHBseSB0byBkcm9wIHRhcmdldFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRDb25maWd1cmF0aW9uPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAvLyBCYXNpYyBDb25maWd1cmF0aW9uXG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBzdWJ0aXRsZT86IHN0cmluZztcbiAgY29sdW1uczogR3JpZENvbHVtbltdO1xuICBcbiAgLy8gRGF0YSBDb25maWd1cmF0aW9uXG4gIGRhdGE6IFRbXTtcbiAgdHJhY2tCeT86IHN0cmluZzsgLy8gUHJvcGVydHkgdG8gdHJhY2sgaXRlbXMgYnkgKGRlZmF1bHQ6ICdpZCcgb3IgJ19pZCcpXG4gIFxuICAvLyBGZWF0dXJlIENvbmZpZ3VyYXRpb25cbiAgcGFnaW5hdGlvbjogR3JpZFBhZ2luYXRpb25Db25maWc7XG4gIHNlYXJjaDogR3JpZFNlYXJjaENvbmZpZztcbiAgZXhwb3J0PzogR3JpZEV4cG9ydENvbmZpZztcbiAgbG9hZGluZzogR3JpZExvYWRpbmdDb25maWc7XG4gIHNjcm9sbD86IEdyaWRTY3JvbGxDb25maWc7XG4gIHRyZWU/OiBHcmlkVHJlZUNvbmZpZzsgLy8gVHJlZSBzdHJ1Y3R1cmUgY29uZmlndXJhdGlvblxuICBkcmFnRHJvcD86IEdyaWREcmFnRHJvcENvbmZpZzsgLy8gRHJhZyBhbmQgZHJvcCBjb25maWd1cmF0aW9uXG4gIFxuICAvLyBTdHlsaW5nIENvbmZpZ3VyYXRpb25cbiAgcmVzcG9uc2l2ZTogYm9vbGVhbjtcbiAgc3RyaXBlZD86IGJvb2xlYW47XG4gIGJvcmRlcmVkPzogYm9vbGVhbjtcbiAgY29tcGFjdD86IGJvb2xlYW47XG4gIGZ1bGxIZWlnaHQ/OiBib29sZWFuOyAvLyBFbmFibGUgZnVsbCBoZWlnaHQgbW9kZSBmb3IgZW1wdHkgdGFibGVzXG4gIFxuICAvLyBFdmVudCBIYW5kbGVycyAoZnVuY3Rpb24gbmFtZXMpXG4gIG9uUm93Q2xpY2s/OiBzdHJpbmc7XG4gIG9uU29ydD86IHN0cmluZztcbiAgb25QYWdlQ2hhbmdlPzogc3RyaW5nO1xuICBvblNlYXJjaD86IHN0cmluZztcbiAgb25SZWZyZXNoPzogc3RyaW5nO1xuICBvbkV4cG9ydD86IHN0cmluZztcbiAgb25Sb3dSZW9yZGVyPzogc3RyaW5nOyAvLyBSb3cgcmVvcmRlciBldmVudCBoYW5kbGVyXG4gIFxuICAvLyBDdXN0b20gQ2xhc3Nlc1xuICB0YWJsZUNsYXNzPzogc3RyaW5nO1xuICBoZWFkZXJDbGFzcz86IHN0cmluZztcbiAgcm93Q2xhc3M/OiBzdHJpbmc7XG4gIGNlbGxDbGFzcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmlkU3RhdGU8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGN1cnJlbnRQYWdlOiBudW1iZXI7XG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIHRvdGFsSXRlbXM6IG51bWJlcjtcbiAgdG90YWxQYWdlczogbnVtYmVyO1xuICBzZWFyY2hRdWVyeTogc3RyaW5nO1xuICBzb3J0Q29sdW1uPzogc3RyaW5nO1xuICBzb3J0RGlyZWN0aW9uPzogJ2FzYycgfCAnZGVzYyc7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGlzUmVmcmVzaGluZzogYm9vbGVhbjtcbiAgc2VsZWN0ZWRSb3dzOiBUW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZEV2ZW50PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICB0eXBlOiAncm93Q2xpY2snIHwgJ3NvcnQnIHwgJ3BhZ2VDaGFuZ2UnIHwgJ3NlYXJjaCcgfCAncmVmcmVzaCcgfCAnZXhwb3J0JyB8ICdhY3Rpb24nIHwgJ3Jvd1Jlb3JkZXInO1xuICBkYXRhOiBUIHwgVFtdIHwgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHtcbiAgICBzb3VyY2VJdGVtOiBUO1xuICAgIHNvdXJjZUluZGV4OiBudW1iZXI7XG4gICAgdGFyZ2V0SXRlbTogVDtcbiAgICB0YXJnZXRJbmRleDogbnVtYmVyO1xuICAgIG5ld09yZGVyOiBUW107XG4gIH07XG4gIGNvbHVtbj86IEdyaWRDb2x1bW47XG4gIGFjdGlvbj86IEdyaWRBY3Rpb247XG59XG5cbi8vIERlZmF1bHQgY29uZmlndXJhdGlvbnNcbmV4cG9ydCBjb25zdCBERUZBVUxUX0dSSURfQ09ORklHOiBQYXJ0aWFsPEdyaWRDb25maWd1cmF0aW9uPiA9IHtcbiAgcGFnaW5hdGlvbjoge1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgcGFnZVNpemU6IDEwLFxuICAgIHBhZ2VTaXplT3B0aW9uczogWzEwLCAyNSwgNTAsIDEwMF0sXG4gICAgc2hvd1F1aWNrSnVtcDogdHJ1ZSxcbiAgICBzaG93UGFnZUluZm86IHRydWUsXG4gICAgc2hvd1JlZnJlc2g6IHRydWVcbiAgfSxcbiAgc2VhcmNoOiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBwbGFjZWhvbGRlcjogJ1NlYXJjaC4uLicsXG4gICAgc2VhcmNoYWJsZUNvbHVtbnM6IFtdLFxuICAgIGRlYm91bmNlTXM6IDMwMFxuICB9LFxuICBsb2FkaW5nOiB7XG4gICAgdXNlRGVmZXI6IHRydWUsXG4gICAgc2tlbGV0b25Sb3dzOiA1LFxuICAgIHNob3dPdmVybGF5OiBmYWxzZVxuICB9LFxuICBzY3JvbGw6IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBtYXhIZWlnaHQ6ICc0MDBweCcsXG4gICAgbWluSGVpZ2h0OiAnMjAwcHgnLFxuICAgIHN0aWNreUhlYWRlcjogdHJ1ZSxcbiAgICB2aXJ0dWFsU2Nyb2xsOiBmYWxzZSxcbiAgICByb3dIZWlnaHQ6IDQwXG4gIH0sXG4gIHJlc3BvbnNpdmU6IHRydWUsXG4gIHN0cmlwZWQ6IGZhbHNlLFxuICBib3JkZXJlZDogdHJ1ZSxcbiAgY29tcGFjdDogdHJ1ZSxcbiAgZnVsbEhlaWdodDogdHJ1ZVxufTtcblxuLy8gVXRpbGl0eSB0eXBlcyBmb3IgdHlwZSBzYWZldHlcbmV4cG9ydCB0eXBlIEdyaWRFdmVudEhhbmRsZXI8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IChldmVudDogR3JpZEV2ZW50PFQ+KSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgR3JpZEN1c3RvbVJlbmRlcmVyPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSAodmFsdWU6IHVua25vd24sIHJvdzogVCwgY29sdW1uOiBHcmlkQ29sdW1uKSA9PiBzdHJpbmc7XG5leHBvcnQgdHlwZSBHcmlkQ3VzdG9tRm9ybWF0dGVyID0gKHZhbHVlOiB1bmtub3duLCBmb3JtYXQ/OiBzdHJpbmcpID0+IHN0cmluZzsgIl19
@@ -0,0 +1,396 @@
1
+ import { Component, Input, Output, EventEmitter, signal, viewChild, HostListener, DestroyRef, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { CideIconComponent } from '../../elements/icon/icon.component';
4
+ import { DropdownManagerService } from '../../services/dropdown-manager.service';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ export class CideEleDropdownComponent {
8
+ constructor() {
9
+ this.destroyRef = inject(DestroyRef);
10
+ this.dropdownManager = inject(DropdownManagerService);
11
+ this.dropdownId = `dropdown-${Math.random().toString(36).substr(2, 9)}`;
12
+ // ViewChild for container reference
13
+ this.dropdownContainer = viewChild.required('dropdownContainer');
14
+ this.dropdownMenu = viewChild('dropdownMenu');
15
+ this._items = [];
16
+ this.config = {};
17
+ // Outputs
18
+ this.itemClick = new EventEmitter();
19
+ this.dropdownToggle = new EventEmitter();
20
+ // Signals
21
+ this.isOpen = signal(false);
22
+ this.currentPosition = signal({
23
+ vertical: 'bottom',
24
+ horizontal: 'right',
25
+ spaceAvailable: { top: 0, bottom: 0, left: 0, right: 0 }
26
+ });
27
+ }
28
+ // Inputs
29
+ set items(value) {
30
+ this._items = value;
31
+ }
32
+ get items() {
33
+ return this._items;
34
+ }
35
+ ngOnInit() {
36
+ // Setup cleanup on destroy
37
+ this.destroyRef.onDestroy(() => {
38
+ this.dropdownManager.unregisterDropdown(this.dropdownId);
39
+ });
40
+ }
41
+ ngOnDestroy() {
42
+ this.dropdownManager.unregisterDropdown(this.dropdownId);
43
+ }
44
+ // Methods
45
+ getTriggerClasses() {
46
+ const baseClasses = 'tw-inline-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-rounded-full tw-transition-all tw-duration-150 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-offset-2 focus:tw-ring-blue-500';
47
+ const colorClasses = this.config?.triggerColor || 'tw-text-gray-400';
48
+ const hoverColorClasses = this.config?.triggerHoverColor || 'hover:tw-text-gray-600';
49
+ const hoverBgClasses = this.config?.triggerHoverBgColor || 'hover:tw-bg-gray-100';
50
+ return `${baseClasses} ${colorClasses} ${hoverColorClasses} ${hoverBgClasses}`;
51
+ }
52
+ getTriggerIconClasses() {
53
+ return this.config?.triggerColor || 'tw-text-gray-400';
54
+ }
55
+ getMenuClasses() {
56
+ const baseClasses = 'tw-absolute tw-z-50 tw-rounded-md tw-bg-white tw-shadow-lg tw-ring-1 tw-ring-black tw-ring-opacity-5 focus:tw-outline-none tw-transition-all tw-duration-150';
57
+ const widthClass = this.config?.menuWidth || 'tw-w-44';
58
+ return `${baseClasses} ${widthClass}`;
59
+ }
60
+ getMenuStyles() {
61
+ const position = this.currentPosition();
62
+ const offsetX = this.config?.offsetX || 0;
63
+ const offsetY = this.config?.offsetY || 4;
64
+ let styles = 'position: absolute; z-index: 9999;';
65
+ // Vertical positioning
66
+ if (position.vertical === 'bottom') {
67
+ styles += `top: calc(100% + ${offsetY}px);`;
68
+ }
69
+ else {
70
+ styles += `bottom: calc(100% + ${offsetY}px);`;
71
+ }
72
+ // Horizontal positioning
73
+ if (position.horizontal === 'right') {
74
+ styles += `right: ${offsetX}px;`;
75
+ }
76
+ else {
77
+ styles += `left: ${offsetX}px;`;
78
+ }
79
+ return styles;
80
+ }
81
+ calculatePosition() {
82
+ const container = this.dropdownContainer();
83
+ if (!container) {
84
+ return {
85
+ vertical: 'bottom',
86
+ horizontal: 'right',
87
+ spaceAvailable: { top: 0, bottom: 0, left: 0, right: 0 }
88
+ };
89
+ }
90
+ const rect = container.nativeElement.getBoundingClientRect();
91
+ const viewport = {
92
+ width: window.innerWidth,
93
+ height: window.innerHeight
94
+ };
95
+ // Calculate available space in each direction
96
+ const spaceAvailable = {
97
+ top: rect.top,
98
+ bottom: viewport.height - rect.bottom,
99
+ left: rect.left,
100
+ right: viewport.width - rect.right
101
+ };
102
+ // Estimated dropdown menu dimensions (adjust based on your needs)
103
+ const menuWidth = this.getMenuWidth();
104
+ const menuHeight = this.getEstimatedMenuHeight();
105
+ // Determine vertical position
106
+ let vertical = 'bottom';
107
+ if (this.config?.forcePosition === 'top' || this.config?.forcePosition === 'bottom') {
108
+ vertical = this.config.forcePosition;
109
+ }
110
+ else {
111
+ // Check if there's enough space below
112
+ if (spaceAvailable.bottom < menuHeight && spaceAvailable.top > menuHeight) {
113
+ vertical = 'top';
114
+ }
115
+ }
116
+ // Determine horizontal position
117
+ let horizontal = 'right';
118
+ if (this.config?.forcePosition === 'left' || this.config?.forcePosition === 'right') {
119
+ horizontal = this.config.forcePosition;
120
+ }
121
+ else if (this.config?.menuPosition === 'left') {
122
+ horizontal = 'left';
123
+ }
124
+ else if (this.config?.menuPosition === 'auto') {
125
+ // Auto-detect best horizontal position
126
+ if (spaceAvailable.right < menuWidth && spaceAvailable.left > menuWidth) {
127
+ horizontal = 'left';
128
+ }
129
+ }
130
+ return {
131
+ vertical,
132
+ horizontal,
133
+ spaceAvailable
134
+ };
135
+ }
136
+ getMenuWidth() {
137
+ // Parse width from config or use default
138
+ const configWidth = this.config?.menuWidth || 'tw-w-44';
139
+ if (configWidth.includes('tw-w-')) {
140
+ const widthMap = {
141
+ 'tw-w-32': 128, 'tw-w-36': 144, 'tw-w-40': 160,
142
+ 'tw-w-44': 176, 'tw-w-48': 192, 'tw-w-52': 208,
143
+ 'tw-w-56': 224, 'tw-w-60': 240, 'tw-w-64': 256
144
+ };
145
+ return widthMap[configWidth] || 176;
146
+ }
147
+ return 176; // Default width
148
+ }
149
+ getEstimatedMenuHeight() {
150
+ // Estimate height based on number of items
151
+ const itemHeight = 40; // Approximate height per item
152
+ const padding = 8; // Top and bottom padding
153
+ return (this.items.length * itemHeight) + padding;
154
+ }
155
+ toggleDropdown(event) {
156
+ console.log('🔵 toggleDropdown called');
157
+ event.stopPropagation();
158
+ if (!this.isOpen()) {
159
+ this.openDropdown();
160
+ }
161
+ else {
162
+ this.closeDropdown();
163
+ }
164
+ }
165
+ openDropdown() {
166
+ // Calculate position before opening
167
+ const newPosition = this.calculatePosition();
168
+ this.currentPosition.set(newPosition);
169
+ this.isOpen.set(true);
170
+ // Register with dropdown manager
171
+ const dropdownInstance = {
172
+ id: this.dropdownId,
173
+ close: () => this.closeDropdown(),
174
+ element: this.dropdownContainer().nativeElement
175
+ };
176
+ this.dropdownManager.registerDropdown(dropdownInstance);
177
+ console.log('🔵 Dropdown opened:', this.dropdownId);
178
+ console.log('🔵 Position:', this.currentPosition());
179
+ this.dropdownToggle.emit(true);
180
+ }
181
+ testMouseDown(item) {
182
+ console.log('🔵 Mouse down detected: ' + item.label);
183
+ // Don't close dropdown on mousedown
184
+ }
185
+ onItemClick(item, event) {
186
+ console.log('🔵 Dropdown onItemClick called with:', item);
187
+ // Simple event handling
188
+ event.stopPropagation();
189
+ if (item.disabled || item.divider) {
190
+ console.log('🔵 Item is disabled or divider, returning');
191
+ return;
192
+ }
193
+ console.log('🔵 Emitting itemClick event');
194
+ this.itemClick.emit(item);
195
+ // Close dropdown after a small delay to ensure click is processed
196
+ setTimeout(() => {
197
+ this.closeDropdown();
198
+ }, 50);
199
+ }
200
+ closeDropdown() {
201
+ console.log('🔵 closeDropdown called, setting isOpen to false');
202
+ this.isOpen.set(false);
203
+ this.dropdownManager.unregisterDropdown(this.dropdownId);
204
+ this.dropdownToggle.emit(false);
205
+ }
206
+ getItemClasses(item) {
207
+ if (item.divider) {
208
+ return 'tw-border-t tw-border-gray-200 tw-my-1';
209
+ }
210
+ const baseClasses = 'tw-flex tw-items-center tw-w-full tw-px-3 tw-py-2 tw-text-sm tw-transition-colors tw-duration-150';
211
+ if (item.disabled) {
212
+ return `${baseClasses} tw-text-gray-400 tw-cursor-not-allowed`;
213
+ }
214
+ const textColor = item.textColor || 'tw-text-gray-700';
215
+ const hoverBg = item.hoverBgColor || 'hover:tw-bg-gray-100';
216
+ const hoverText = item.textColor || 'hover:tw-text-gray-900';
217
+ return `${baseClasses} ${textColor} ${hoverBg} ${hoverText}`;
218
+ }
219
+ // Host listeners for window events (position recalculation only)
220
+ // Note: Click outside and escape key handling is now managed by DropdownManagerService
221
+ onWindowResize() {
222
+ if (this.isOpen()) {
223
+ // Recalculate position on window resize
224
+ const newPosition = this.calculatePosition();
225
+ this.currentPosition.set(newPosition);
226
+ }
227
+ }
228
+ onWindowScroll() {
229
+ if (this.isOpen()) {
230
+ // Recalculate position on scroll
231
+ const newPosition = this.calculatePosition();
232
+ this.currentPosition.set(newPosition);
233
+ }
234
+ }
235
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
236
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: CideEleDropdownComponent, isStandalone: true, selector: "cide-ele-dropdown", inputs: { items: "items", config: "config", triggerTemplate: "triggerTemplate", menuTemplate: "menuTemplate" }, outputs: { itemClick: "itemClick", dropdownToggle: "dropdownToggle" }, host: { listeners: { "window:resize": "onWindowResize()", "window:scroll": "onWindowScroll($event)" } }, viewQueries: [{ propertyName: "dropdownContainer", first: true, predicate: ["dropdownContainer"], descendants: true, isSignal: true }, { propertyName: "dropdownMenu", first: true, predicate: ["dropdownMenu"], descendants: true, isSignal: true }], ngImport: i0, template: `
237
+ <div class="tw-relative" #dropdownContainer>
238
+ <!-- Trigger Button -->
239
+ <button
240
+ type="button"
241
+ class="dropdown-trigger tw-inline-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-rounded-full tw-text-gray-400 hover:tw-text-gray-600 hover:tw-bg-gray-100 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-offset-2 focus:tw-ring-blue-500 tw-transition-all tw-duration-150"
242
+ [class]="getTriggerClasses()"
243
+ (click)="toggleDropdown($event)"
244
+ [title]="config.triggerIcon === 'more_vert' ? 'More actions' : 'Options'">
245
+
246
+ <!-- Custom Trigger Template -->
247
+ @if (triggerTemplate) {
248
+ <ng-container *ngTemplateOutlet="triggerTemplate; context: { $implicit: isOpen() }">
249
+ </ng-container>
250
+ } @else {
251
+ <!-- Default Trigger -->
252
+ <cide-ele-icon
253
+ [class]="getTriggerIconClasses()"
254
+ [size]="config.triggerSize || 'sm'">
255
+ {{ config.triggerIcon || 'more_vert' }}
256
+ </cide-ele-icon>
257
+ }
258
+ </button>
259
+
260
+ <!-- Dropdown Menu -->
261
+ @if (isOpen()) {
262
+ <div
263
+ #dropdownMenu
264
+ class="dropdown-menu tw-absolute tw-z-50 tw-bg-white tw-shadow-lg tw-border tw-border-gray-200 tw-rounded-md tw-text-black"
265
+ [class]="getMenuClasses()"
266
+ [style]="getMenuStyles()"
267
+ role="menu">
268
+
269
+ <!-- Custom Menu Template -->
270
+ @if (menuTemplate) {
271
+ <ng-container *ngTemplateOutlet="menuTemplate; context: { $implicit: items }">
272
+ </ng-container>
273
+ } @else {
274
+ <!-- Default Menu -->
275
+ <div class="tw-py-1" role="none">
276
+ @for (item of items; track item.id) {
277
+ <button
278
+ type="button"
279
+ class="tw-flex tw-items-center tw-w-full tw-px-3 tw-py-2 tw-text-sm tw-text-gray-700 hover:tw-bg-gray-100 hover:tw-text-gray-900 tw-transition-colors tw-duration-150"
280
+ [disabled]="item.disabled"
281
+ (click)="onItemClick(item, $event)"
282
+ [attr.data-item-id]="item.id">
283
+
284
+ <!-- Item Icon -->
285
+ @if (item.icon) {
286
+ <cide-ele-icon
287
+ class="tw-w-4 tw-h-4 tw-mr-2"
288
+ [class]="item.iconColor || 'tw-text-gray-400'"
289
+ size="xs">
290
+ {{ item.icon }}
291
+ </cide-ele-icon>
292
+ }
293
+
294
+ <!-- Item Label -->
295
+ <span [class]="item.textColor || 'tw-text-gray-700'">
296
+ {{ item.label }}
297
+ </span>
298
+ </button>
299
+ }
300
+ </div>
301
+ }
302
+ </div>
303
+ }
304
+ `, isInline: true, styles: [".dropdown-menu{transform-origin:top right}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }] }); }
305
+ }
306
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleDropdownComponent, decorators: [{
307
+ type: Component,
308
+ args: [{ selector: 'cide-ele-dropdown', standalone: true, imports: [CommonModule, CideIconComponent], template: `
309
+ <div class="tw-relative" #dropdownContainer>
310
+ <!-- Trigger Button -->
311
+ <button
312
+ type="button"
313
+ class="dropdown-trigger tw-inline-flex tw-items-center tw-justify-center tw-w-6 tw-h-6 tw-rounded-full tw-text-gray-400 hover:tw-text-gray-600 hover:tw-bg-gray-100 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-offset-2 focus:tw-ring-blue-500 tw-transition-all tw-duration-150"
314
+ [class]="getTriggerClasses()"
315
+ (click)="toggleDropdown($event)"
316
+ [title]="config.triggerIcon === 'more_vert' ? 'More actions' : 'Options'">
317
+
318
+ <!-- Custom Trigger Template -->
319
+ @if (triggerTemplate) {
320
+ <ng-container *ngTemplateOutlet="triggerTemplate; context: { $implicit: isOpen() }">
321
+ </ng-container>
322
+ } @else {
323
+ <!-- Default Trigger -->
324
+ <cide-ele-icon
325
+ [class]="getTriggerIconClasses()"
326
+ [size]="config.triggerSize || 'sm'">
327
+ {{ config.triggerIcon || 'more_vert' }}
328
+ </cide-ele-icon>
329
+ }
330
+ </button>
331
+
332
+ <!-- Dropdown Menu -->
333
+ @if (isOpen()) {
334
+ <div
335
+ #dropdownMenu
336
+ class="dropdown-menu tw-absolute tw-z-50 tw-bg-white tw-shadow-lg tw-border tw-border-gray-200 tw-rounded-md tw-text-black"
337
+ [class]="getMenuClasses()"
338
+ [style]="getMenuStyles()"
339
+ role="menu">
340
+
341
+ <!-- Custom Menu Template -->
342
+ @if (menuTemplate) {
343
+ <ng-container *ngTemplateOutlet="menuTemplate; context: { $implicit: items }">
344
+ </ng-container>
345
+ } @else {
346
+ <!-- Default Menu -->
347
+ <div class="tw-py-1" role="none">
348
+ @for (item of items; track item.id) {
349
+ <button
350
+ type="button"
351
+ class="tw-flex tw-items-center tw-w-full tw-px-3 tw-py-2 tw-text-sm tw-text-gray-700 hover:tw-bg-gray-100 hover:tw-text-gray-900 tw-transition-colors tw-duration-150"
352
+ [disabled]="item.disabled"
353
+ (click)="onItemClick(item, $event)"
354
+ [attr.data-item-id]="item.id">
355
+
356
+ <!-- Item Icon -->
357
+ @if (item.icon) {
358
+ <cide-ele-icon
359
+ class="tw-w-4 tw-h-4 tw-mr-2"
360
+ [class]="item.iconColor || 'tw-text-gray-400'"
361
+ size="xs">
362
+ {{ item.icon }}
363
+ </cide-ele-icon>
364
+ }
365
+
366
+ <!-- Item Label -->
367
+ <span [class]="item.textColor || 'tw-text-gray-700'">
368
+ {{ item.label }}
369
+ </span>
370
+ </button>
371
+ }
372
+ </div>
373
+ }
374
+ </div>
375
+ }
376
+ `, styles: [".dropdown-menu{transform-origin:top right}\n"] }]
377
+ }], propDecorators: { items: [{
378
+ type: Input
379
+ }], config: [{
380
+ type: Input
381
+ }], triggerTemplate: [{
382
+ type: Input
383
+ }], menuTemplate: [{
384
+ type: Input
385
+ }], itemClick: [{
386
+ type: Output
387
+ }], dropdownToggle: [{
388
+ type: Output
389
+ }], onWindowResize: [{
390
+ type: HostListener,
391
+ args: ['window:resize']
392
+ }], onWindowScroll: [{
393
+ type: HostListener,
394
+ args: ['window:scroll', ['$event']]
395
+ }] } });
396
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWVsZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQTJCLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN4SyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNCQUFzQixFQUFvQixNQUFNLHlDQUF5QyxDQUFDOzs7QUFxSG5HLE1BQU0sT0FBTyx3QkFBd0I7SUEvRXJDO1FBZ0ZZLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsb0JBQWUsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNqRCxlQUFVLEdBQUcsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUUzRSxvQ0FBb0M7UUFDcEMsc0JBQWlCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBYSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3hFLGlCQUFZLEdBQUcsU0FBUyxDQUFhLGNBQWMsQ0FBQyxDQUFDO1FBUzdDLFdBQU0sR0FBbUIsRUFBRSxDQUFDO1FBRTNCLFdBQU0sR0FBbUIsRUFBRSxDQUFDO1FBSXJDLFVBQVU7UUFDQSxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFDN0MsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXZELFVBQVU7UUFDVixXQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLG9CQUFlLEdBQUcsTUFBTSxDQUFtQjtZQUN2QyxRQUFRLEVBQUUsUUFBUTtZQUNsQixVQUFVLEVBQUUsT0FBTztZQUNuQixjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1NBQzNELENBQUMsQ0FBQztLQWlQTjtJQXhRSyxTQUFTO0lBQ2IsSUFBYSxLQUFLLENBQUMsS0FBcUI7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUNDLElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBbUJELFFBQVE7UUFDSiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsVUFBVTtJQUNWLGlCQUFpQjtRQUNiLE1BQU0sV0FBVyxHQUFHLHNNQUFzTSxDQUFDO1FBRTNOLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxJQUFJLGtCQUFrQixDQUFDO1FBQ3JFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsSUFBSSx3QkFBd0IsQ0FBQztRQUNyRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLG1CQUFtQixJQUFJLHNCQUFzQixDQUFDO1FBRWxGLE9BQU8sR0FBRyxXQUFXLElBQUksWUFBWSxJQUFJLGlCQUFpQixJQUFJLGNBQWMsRUFBRSxDQUFDO0lBQ25GLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksSUFBSSxrQkFBa0IsQ0FBQztJQUMzRCxDQUFDO0lBRUQsY0FBYztRQUNWLE1BQU0sV0FBVyxHQUFHLDhKQUE4SixDQUFDO1FBQ25MLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxJQUFJLFNBQVMsQ0FBQztRQUV2RCxPQUFPLEdBQUcsV0FBVyxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxhQUFhO1FBQ1QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUM7UUFFMUMsSUFBSSxNQUFNLEdBQUcsb0NBQW9DLENBQUM7UUFFbEQsdUJBQXVCO1FBQ3ZCLElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksb0JBQW9CLE9BQU8sTUFBTSxDQUFDO1FBQ2hELENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxJQUFJLHVCQUF1QixPQUFPLE1BQU0sQ0FBQztRQUNuRCxDQUFDO1FBRUQseUJBQXlCO1FBQ3pCLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksVUFBVSxPQUFPLEtBQUssQ0FBQztRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sSUFBSSxTQUFTLE9BQU8sS0FBSyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2IsT0FBTztnQkFDSCxRQUFRLEVBQUUsUUFBUTtnQkFDbEIsVUFBVSxFQUFFLE9BQU87Z0JBQ25CLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7YUFDM0QsQ0FBQztRQUNOLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0QsTUFBTSxRQUFRLEdBQUc7WUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDeEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXO1NBQzdCLENBQUM7UUFFRiw4Q0FBOEM7UUFDOUMsTUFBTSxjQUFjLEdBQUc7WUFDbkIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDckMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUs7U0FDckMsQ0FBQztRQUVGLGtFQUFrRTtRQUNsRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFakQsOEJBQThCO1FBQzlCLElBQUksUUFBUSxHQUFxQixRQUFRLENBQUM7UUFDMUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEYsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQ3pDLENBQUM7YUFBTSxDQUFDO1lBQ0osc0NBQXNDO1lBQ3RDLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxVQUFVLElBQUksY0FBYyxDQUFDLEdBQUcsR0FBRyxVQUFVLEVBQUUsQ0FBQztnQkFDeEUsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUNyQixDQUFDO1FBQ0wsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLFVBQVUsR0FBcUIsT0FBTyxDQUFDO1FBQzNDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ2xGLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUMzQyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM5QyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzlDLHVDQUF1QztZQUN2QyxJQUFJLGNBQWMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxFQUFFLENBQUM7Z0JBQ3RFLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDeEIsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPO1lBQ0gsUUFBUTtZQUNSLFVBQVU7WUFDVixjQUFjO1NBQ2pCLENBQUM7SUFDTixDQUFDO0lBRU8sWUFBWTtRQUNoQix5Q0FBeUM7UUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksU0FBUyxDQUFDO1FBQ3hELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUE4QjtnQkFDeEMsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHO2dCQUM5QyxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUc7Z0JBQzlDLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRzthQUNqRCxDQUFDO1lBQ0YsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQjtJQUNoQyxDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLDJDQUEyQztRQUMzQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyw4QkFBOEI7UUFDckQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMseUJBQXlCO1FBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDdEQsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFZO1FBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN4QyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztJQUVPLFlBQVk7UUFDaEIsb0NBQW9DO1FBQ3BDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRCLGlDQUFpQztRQUNqQyxNQUFNLGdCQUFnQixHQUFxQjtZQUN2QyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDbkIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLGFBQWE7U0FDbEQsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV4RCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUgsYUFBYSxDQUFDLElBQWtCO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELG9DQUFvQztJQUN4QyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQWtCLEVBQUUsS0FBWTtRQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTFELHdCQUF3QjtRQUN4QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7WUFDekQsT0FBTztRQUNYLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsa0VBQWtFO1FBQ2xFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVDLGFBQWE7UUFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFrQjtRQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLE9BQU8sd0NBQXdDLENBQUM7UUFDcEQsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLG1HQUFtRyxDQUFDO1FBRXhILElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sR0FBRyxXQUFXLHlDQUF5QyxDQUFDO1FBQ25FLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLGtCQUFrQixDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksc0JBQXNCLENBQUM7UUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSx3QkFBd0IsQ0FBQztRQUU3RCxPQUFPLEdBQUcsV0FBVyxJQUFJLFNBQVMsSUFBSSxPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVELGlFQUFpRTtJQUNqRSx1RkFBdUY7SUFHdkYsY0FBYztRQUNWLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDaEIsd0NBQXdDO1lBQ3hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDTCxDQUFDO0lBR0QsY0FBYztRQUNWLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDaEIsaUNBQWlDO1lBQ2pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDTCxDQUFDOzhHQWhSUSx3QkFBd0I7a0dBQXhCLHdCQUF3QixvbUJBM0V2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFvRVYscUhBckVVLFlBQVksc01BQUUsaUJBQWlCOzsyRkE0RWhDLHdCQUF3QjtrQkEvRXBDLFNBQVM7K0JBQ0ksbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxZQUNoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFvRVY7OEJBaUJXLEtBQUs7c0JBQWpCLEtBQUs7Z0JBUUssTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBeU9QLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlO2dCQVU3QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIHNpZ25hbCwgdmlld0NoaWxkLCBUZW1wbGF0ZVJlZiwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBEZXN0cm95UmVmLCBpbmplY3QsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2lkZUljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IERyb3Bkb3duTWFuYWdlclNlcnZpY2UsIERyb3Bkb3duSW5zdGFuY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcm9wZG93bi1tYW5hZ2VyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duSXRlbSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGljb24/OiBzdHJpbmc7XG4gICAgaWNvbkNvbG9yPzogc3RyaW5nO1xuICAgIHRleHRDb2xvcj86IHN0cmluZztcbiAgICBob3ZlckJnQ29sb3I/OiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGRpdmlkZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duQ29uZmlnIHtcbiAgICB0cmlnZ2VySWNvbj86IHN0cmluZztcbiAgICB0cmlnZ2VyU2l6ZT86ICd4cycgfCAnc20nIHwgJ21kJyB8ICdsZyc7XG4gICAgdHJpZ2dlckNvbG9yPzogc3RyaW5nO1xuICAgIHRyaWdnZXJIb3ZlckNvbG9yPzogc3RyaW5nO1xuICAgIHRyaWdnZXJIb3ZlckJnQ29sb3I/OiBzdHJpbmc7XG4gICAgbWVudVdpZHRoPzogc3RyaW5nO1xuICAgIG1lbnVQb3NpdGlvbj86ICdsZWZ0JyB8ICdyaWdodCcgfCAnYXV0byc7XG4gICAgc2hvd0Fycm93PzogYm9vbGVhbjtcbiAgICBmb3JjZVBvc2l0aW9uPzogJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCc7XG4gICAgb2Zmc2V0WD86IG51bWJlcjtcbiAgICBvZmZzZXRZPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duUG9zaXRpb24ge1xuICAgIHZlcnRpY2FsOiAndG9wJyB8ICdib3R0b20nO1xuICAgIGhvcml6b250YWw6ICdsZWZ0JyB8ICdyaWdodCc7XG4gICAgc3BhY2VBdmFpbGFibGU6IHtcbiAgICAgICAgdG9wOiBudW1iZXI7XG4gICAgICAgIGJvdHRvbTogbnVtYmVyO1xuICAgICAgICBsZWZ0OiBudW1iZXI7XG4gICAgICAgIHJpZ2h0OiBudW1iZXI7XG4gICAgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjaWRlLWVsZS1kcm9wZG93bicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDaWRlSWNvbkNvbXBvbmVudF0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwidHctcmVsYXRpdmVcIiAjZHJvcGRvd25Db250YWluZXI+XG4gICAgICA8IS0tIFRyaWdnZXIgQnV0dG9uIC0tPlxuICAgICAgPGJ1dHRvbiBcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXRyaWdnZXIgdHctaW5saW5lLWZsZXggdHctaXRlbXMtY2VudGVyIHR3LWp1c3RpZnktY2VudGVyIHR3LXctNiB0dy1oLTYgdHctcm91bmRlZC1mdWxsIHR3LXRleHQtZ3JheS00MDAgaG92ZXI6dHctdGV4dC1ncmF5LTYwMCBob3Zlcjp0dy1iZy1ncmF5LTEwMCBmb2N1czp0dy1vdXRsaW5lLW5vbmUgZm9jdXM6dHctcmluZy0yIGZvY3VzOnR3LXJpbmctb2Zmc2V0LTIgZm9jdXM6dHctcmluZy1ibHVlLTUwMCB0dy10cmFuc2l0aW9uLWFsbCB0dy1kdXJhdGlvbi0xNTBcIlxuICAgICAgICBbY2xhc3NdPVwiZ2V0VHJpZ2dlckNsYXNzZXMoKVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigkZXZlbnQpXCJcbiAgICAgICAgW3RpdGxlXT1cImNvbmZpZy50cmlnZ2VySWNvbiA9PT0gJ21vcmVfdmVydCcgPyAnTW9yZSBhY3Rpb25zJyA6ICdPcHRpb25zJ1wiPlxuICAgICAgICBcbiAgICAgICAgICAgICAgICAgPCEtLSBDdXN0b20gVHJpZ2dlciBUZW1wbGF0ZSAtLT5cbiAgICAgICAgIEBpZiAodHJpZ2dlclRlbXBsYXRlKSB7XG4gICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmlnZ2VyVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpc09wZW4oKSB9XCI+XG4gICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgIDwhLS0gRGVmYXVsdCBUcmlnZ2VyIC0tPlxuICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiBcbiAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0VHJpZ2dlckljb25DbGFzc2VzKClcIlxuICAgICAgICAgICAgIFtzaXplXT1cImNvbmZpZy50cmlnZ2VyU2l6ZSB8fCAnc20nXCI+XG4gICAgICAgICAgICAge3sgY29uZmlnLnRyaWdnZXJJY29uIHx8ICdtb3JlX3ZlcnQnIH19XG4gICAgICAgICAgIDwvY2lkZS1lbGUtaWNvbj5cbiAgICAgICAgIH1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgXG4gICAgICAgICAgICAgPCEtLSBEcm9wZG93biBNZW51IC0tPlxuICAgICAgIEBpZiAoaXNPcGVuKCkpIHtcbiAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICNkcm9wZG93bk1lbnVcbiAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IHR3LWFic29sdXRlIHR3LXotNTAgdHctYmctd2hpdGUgdHctc2hhZG93LWxnIHR3LWJvcmRlciB0dy1ib3JkZXItZ3JheS0yMDAgdHctcm91bmRlZC1tZCB0dy10ZXh0LWJsYWNrXCJcbiAgICAgICAgICAgW2NsYXNzXT1cImdldE1lbnVDbGFzc2VzKClcIlxuICAgICAgICAgICBbc3R5bGVdPVwiZ2V0TWVudVN0eWxlcygpXCJcbiAgICAgICAgICAgcm9sZT1cIm1lbnVcIj5cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgIDwhLS0gQ3VzdG9tIE1lbnUgVGVtcGxhdGUgLS0+XG4gICAgICAgICBAaWYgKG1lbnVUZW1wbGF0ZSkge1xuICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbXMgfVwiPlxuICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICA8IS0tIERlZmF1bHQgTWVudSAtLT5cbiAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LXB5LTFcIiByb2xlPVwibm9uZVwiPlxuICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LWZsZXggdHctaXRlbXMtY2VudGVyIHR3LXctZnVsbCB0dy1weC0zIHR3LXB5LTIgdHctdGV4dC1zbSB0dy10ZXh0LWdyYXktNzAwIGhvdmVyOnR3LWJnLWdyYXktMTAwIGhvdmVyOnR3LXRleHQtZ3JheS05MDAgdHctdHJhbnNpdGlvbi1jb2xvcnMgdHctZHVyYXRpb24tMTUwXCJcbiAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtaXRlbS1pZF09XCJpdGVtLmlkXCI+XG4gICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICA8IS0tIEl0ZW0gSWNvbiAtLT5cbiAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiBcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctdy00IHR3LWgtNCB0dy1tci0yXCJcbiAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJpdGVtLmljb25Db2xvciB8fCAndHctdGV4dC1ncmF5LTQwMCdcIlxuICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInhzXCI+XG4gICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmljb24gfX1cbiAgICAgICAgICAgICAgICAgICA8L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgIDwhLS0gSXRlbSBMYWJlbCAtLT5cbiAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIml0ZW0udGV4dENvbG9yIHx8ICd0dy10ZXh0LWdyYXktNzAwJ1wiPlxuICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICA8L2Rpdj5cbiAgICAgfVxuICAgYCxcbiAgICBzdHlsZXM6IFtgXG4gICAgLmRyb3Bkb3duLW1lbnUge1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0O1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgQ2lkZUVsZURyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIGRyb3Bkb3duTWFuYWdlciA9IGluamVjdChEcm9wZG93bk1hbmFnZXJTZXJ2aWNlKTtcbiAgICBwcml2YXRlIGRyb3Bkb3duSWQgPSBgZHJvcGRvd24tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDtcblxuICAgIC8vIFZpZXdDaGlsZCBmb3IgY29udGFpbmVyIHJlZmVyZW5jZVxuICAgIGRyb3Bkb3duQ29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdkcm9wZG93bkNvbnRhaW5lcicpO1xuICAgIGRyb3Bkb3duTWVudSA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZHJvcGRvd25NZW51Jyk7XG5cbiAgICAgIC8vIElucHV0c1xuICBASW5wdXQoKSBzZXQgaXRlbXModmFsdWU6IERyb3Bkb3duSXRlbVtdKSB7XG4gICAgICB0aGlzLl9pdGVtcyA9IHZhbHVlO1xuICB9XG4gICAgZ2V0IGl0ZW1zKCk6IERyb3Bkb3duSXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICAgIH1cbiAgICBwcml2YXRlIF9pdGVtczogRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIGNvbmZpZzogRHJvcGRvd25Db25maWcgPSB7fTtcbiAgICBASW5wdXQoKSB0cmlnZ2VyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogYm9vbGVhbiB9PjtcbiAgICBASW5wdXQoKSBtZW51VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogRHJvcGRvd25JdGVtW10gfT47XG5cbiAgICAvLyBPdXRwdXRzXG4gICAgQE91dHB1dCgpIGl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RHJvcGRvd25JdGVtPigpO1xuICAgIEBPdXRwdXQoKSBkcm9wZG93blRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8vIFNpZ25hbHNcbiAgICBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICAgIGN1cnJlbnRQb3NpdGlvbiA9IHNpZ25hbDxEcm9wZG93blBvc2l0aW9uPih7XG4gICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ3JpZ2h0JyxcbiAgICAgICAgc3BhY2VBdmFpbGFibGU6IHsgdG9wOiAwLCBib3R0b206IDAsIGxlZnQ6IDAsIHJpZ2h0OiAwIH1cbiAgICB9KTtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBTZXR1cCBjbGVhbnVwIG9uIGRlc3Ryb3lcbiAgICAgICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duTWFuYWdlci51bnJlZ2lzdGVyRHJvcGRvd24odGhpcy5kcm9wZG93bklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25NYW5hZ2VyLnVucmVnaXN0ZXJEcm9wZG93bih0aGlzLmRyb3Bkb3duSWQpO1xuICAgIH1cblxuICAgIC8vIE1ldGhvZHNcbiAgICBnZXRUcmlnZ2VyQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBiYXNlQ2xhc3NlcyA9ICd0dy1pbmxpbmUtZmxleCB0dy1pdGVtcy1jZW50ZXIgdHctanVzdGlmeS1jZW50ZXIgdHctdy02IHR3LWgtNiB0dy1yb3VuZGVkLWZ1bGwgdHctdHJhbnNpdGlvbi1hbGwgdHctZHVyYXRpb24tMTUwIGZvY3VzOnR3LW91dGxpbmUtbm9uZSBmb2N1czp0dy1yaW5nLTIgZm9jdXM6dHctcmluZy1vZmZzZXQtMiBmb2N1czp0dy1yaW5nLWJsdWUtNTAwJztcblxuICAgICAgICBjb25zdCBjb2xvckNsYXNzZXMgPSB0aGlzLmNvbmZpZz8udHJpZ2dlckNvbG9yIHx8ICd0dy10ZXh0LWdyYXktNDAwJztcbiAgICAgICAgY29uc3QgaG92ZXJDb2xvckNsYXNzZXMgPSB0aGlzLmNvbmZpZz8udHJpZ2dlckhvdmVyQ29sb3IgfHwgJ2hvdmVyOnR3LXRleHQtZ3JheS02MDAnO1xuICAgICAgICBjb25zdCBob3ZlckJnQ2xhc3NlcyA9IHRoaXMuY29uZmlnPy50cmlnZ2VySG92ZXJCZ0NvbG9yIHx8ICdob3Zlcjp0dy1iZy1ncmF5LTEwMCc7XG5cbiAgICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc2VzfSAke2NvbG9yQ2xhc3Nlc30gJHtob3ZlckNvbG9yQ2xhc3Nlc30gJHtob3ZlckJnQ2xhc3Nlc31gO1xuICAgIH1cblxuICAgIGdldFRyaWdnZXJJY29uQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWc/LnRyaWdnZXJDb2xvciB8fCAndHctdGV4dC1ncmF5LTQwMCc7XG4gICAgfVxuXG4gICAgZ2V0TWVudUNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgYmFzZUNsYXNzZXMgPSAndHctYWJzb2x1dGUgdHctei01MCB0dy1yb3VuZGVkLW1kIHR3LWJnLXdoaXRlIHR3LXNoYWRvdy1sZyB0dy1yaW5nLTEgdHctcmluZy1ibGFjayB0dy1yaW5nLW9wYWNpdHktNSBmb2N1czp0dy1vdXRsaW5lLW5vbmUgdHctdHJhbnNpdGlvbi1hbGwgdHctZHVyYXRpb24tMTUwJztcbiAgICAgICAgY29uc3Qgd2lkdGhDbGFzcyA9IHRoaXMuY29uZmlnPy5tZW51V2lkdGggfHwgJ3R3LXctNDQnO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc2VzfSAke3dpZHRoQ2xhc3N9YDtcbiAgICB9XG5cbiAgICBnZXRNZW51U3R5bGVzKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5jdXJyZW50UG9zaXRpb24oKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IHRoaXMuY29uZmlnPy5vZmZzZXRYIHx8IDA7XG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSB0aGlzLmNvbmZpZz8ub2Zmc2V0WSB8fCA0O1xuICAgICAgICBcbiAgICAgICAgbGV0IHN0eWxlcyA9ICdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDk5OTk7JztcbiAgICAgICAgXG4gICAgICAgIC8vIFZlcnRpY2FsIHBvc2l0aW9uaW5nXG4gICAgICAgIGlmIChwb3NpdGlvbi52ZXJ0aWNhbCA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHN0eWxlcyArPSBgdG9wOiBjYWxjKDEwMCUgKyAke29mZnNldFl9cHgpO2A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHlsZXMgKz0gYGJvdHRvbTogY2FsYygxMDAlICsgJHtvZmZzZXRZfXB4KTtgO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBIb3Jpem9udGFsIHBvc2l0aW9uaW5nXG4gICAgICAgIGlmIChwb3NpdGlvbi5ob3Jpem9udGFsID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICBzdHlsZXMgKz0gYHJpZ2h0OiAke29mZnNldFh9cHg7YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0eWxlcyArPSBgbGVmdDogJHtvZmZzZXRYfXB4O2A7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUG9zaXRpb24oKTogRHJvcGRvd25Qb3NpdGlvbiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZHJvcGRvd25Db250YWluZXIoKTtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmVydGljYWw6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgIGhvcml6b250YWw6ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgc3BhY2VBdmFpbGFibGU6IHsgdG9wOiAwLCBib3R0b206IDAsIGxlZnQ6IDAsIHJpZ2h0OiAwIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWN0ID0gY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0ge1xuICAgICAgICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgYXZhaWxhYmxlIHNwYWNlIGluIGVhY2ggZGlyZWN0aW9uXG4gICAgICAgIGNvbnN0IHNwYWNlQXZhaWxhYmxlID0ge1xuICAgICAgICAgICAgdG9wOiByZWN0LnRvcCxcbiAgICAgICAgICAgIGJvdHRvbTogdmlld3BvcnQuaGVpZ2h0IC0gcmVjdC5ib3R0b20sXG4gICAgICAgICAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgICAgICAgICByaWdodDogdmlld3BvcnQud2lkdGggLSByZWN0LnJpZ2h0XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRXN0aW1hdGVkIGRyb3Bkb3duIG1lbnUgZGltZW5zaW9ucyAoYWRqdXN0IGJhc2VkIG9uIHlvdXIgbmVlZHMpXG4gICAgICAgIGNvbnN0IG1lbnVXaWR0aCA9IHRoaXMuZ2V0TWVudVdpZHRoKCk7XG4gICAgICAgIGNvbnN0IG1lbnVIZWlnaHQgPSB0aGlzLmdldEVzdGltYXRlZE1lbnVIZWlnaHQoKTtcblxuICAgICAgICAvLyBEZXRlcm1pbmUgdmVydGljYWwgcG9zaXRpb25cbiAgICAgICAgbGV0IHZlcnRpY2FsOiAndG9wJyB8ICdib3R0b20nID0gJ2JvdHRvbSc7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZz8uZm9yY2VQb3NpdGlvbiA9PT0gJ3RvcCcgfHwgdGhpcy5jb25maWc/LmZvcmNlUG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICB2ZXJ0aWNhbCA9IHRoaXMuY29uZmlnLmZvcmNlUG9zaXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGVub3VnaCBzcGFjZSBiZWxvd1xuICAgICAgICAgICAgaWYgKHNwYWNlQXZhaWxhYmxlLmJvdHRvbSA8IG1lbnVIZWlnaHQgJiYgc3BhY2VBdmFpbGFibGUudG9wID4gbWVudUhlaWdodCkge1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsID0gJ3RvcCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZXRlcm1pbmUgaG9yaXpvbnRhbCBwb3NpdGlvbiAgXG4gICAgICAgIGxldCBob3Jpem9udGFsOiAnbGVmdCcgfCAncmlnaHQnID0gJ3JpZ2h0JztcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5mb3JjZVBvc2l0aW9uID09PSAnbGVmdCcgfHwgdGhpcy5jb25maWc/LmZvcmNlUG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIGhvcml6b250YWwgPSB0aGlzLmNvbmZpZy5mb3JjZVBvc2l0aW9uO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnPy5tZW51UG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgaG9yaXpvbnRhbCA9ICdsZWZ0JztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZz8ubWVudVBvc2l0aW9uID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIC8vIEF1dG8tZGV0ZWN0IGJlc3QgaG9yaXpvbnRhbCBwb3NpdGlvblxuICAgICAgICAgICAgaWYgKHNwYWNlQXZhaWxhYmxlLnJpZ2h0IDwgbWVudVdpZHRoICYmIHNwYWNlQXZhaWxhYmxlLmxlZnQgPiBtZW51V2lkdGgpIHtcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsID0gJ2xlZnQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZlcnRpY2FsLFxuICAgICAgICAgICAgaG9yaXpvbnRhbCxcbiAgICAgICAgICAgIHNwYWNlQXZhaWxhYmxlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNZW51V2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgLy8gUGFyc2Ugd2lkdGggZnJvbSBjb25maWcgb3IgdXNlIGRlZmF1bHRcbiAgICAgICAgY29uc3QgY29uZmlnV2lkdGggPSB0aGlzLmNvbmZpZz8ubWVudVdpZHRoIHx8ICd0dy13LTQ0JztcbiAgICAgICAgaWYgKGNvbmZpZ1dpZHRoLmluY2x1ZGVzKCd0dy13LScpKSB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aE1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgICAgICAgICAgICAgICAndHctdy0zMic6IDEyOCwgJ3R3LXctMzYnOiAxNDQsICd0dy13LTQwJzogMTYwLFxuICAgICAgICAgICAgICAgICd0dy13LTQ0JzogMTc2LCAndHctdy00OCc6IDE5MiwgJ3R3LXctNTInOiAyMDgsXG4gICAgICAgICAgICAgICAgJ3R3LXctNTYnOiAyMjQsICd0dy13LTYwJzogMjQwLCAndHctdy02NCc6IDI1NlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB3aWR0aE1hcFtjb25maWdXaWR0aF0gfHwgMTc2O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAxNzY7IC8vIERlZmF1bHQgd2lkdGhcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVzdGltYXRlZE1lbnVIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgLy8gRXN0aW1hdGUgaGVpZ2h0IGJhc2VkIG9uIG51bWJlciBvZiBpdGVtc1xuICAgICAgICBjb25zdCBpdGVtSGVpZ2h0ID0gNDA7IC8vIEFwcHJveGltYXRlIGhlaWdodCBwZXIgaXRlbVxuICAgICAgICBjb25zdCBwYWRkaW5nID0gODsgLy8gVG9wIGFuZCBib3R0b20gcGFkZGluZ1xuICAgICAgICByZXR1cm4gKHRoaXMuaXRlbXMubGVuZ3RoICogaXRlbUhlaWdodCkgKyBwYWRkaW5nO1xuICAgIH1cblxuICAgIHRvZ2dsZURyb3Bkb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmxvZygn8J+UtSB0b2dnbGVEcm9wZG93biBjYWxsZWQnKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkRyb3Bkb3duKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb3BlbkRyb3Bkb3duKCk6IHZvaWQge1xuICAgICAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb24gYmVmb3JlIG9wZW5pbmdcbiAgICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSB0aGlzLmNhbGN1bGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMuY3VycmVudFBvc2l0aW9uLnNldChuZXdQb3NpdGlvbik7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmlzT3Blbi5zZXQodHJ1ZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBSZWdpc3RlciB3aXRoIGRyb3Bkb3duIG1hbmFnZXJcbiAgICAgICAgY29uc3QgZHJvcGRvd25JbnN0YW5jZTogRHJvcGRvd25JbnN0YW5jZSA9IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmRyb3Bkb3duSWQsXG4gICAgICAgICAgICBjbG9zZTogKCkgPT4gdGhpcy5jbG9zZURyb3Bkb3duKCksXG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLmRyb3Bkb3duQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudFxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5kcm9wZG93bk1hbmFnZXIucmVnaXN0ZXJEcm9wZG93bihkcm9wZG93bkluc3RhbmNlKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnNvbGUubG9nKCfwn5S1IERyb3Bkb3duIG9wZW5lZDonLCB0aGlzLmRyb3Bkb3duSWQpO1xuICAgICAgICBjb25zb2xlLmxvZygn8J+UtSBQb3NpdGlvbjonLCB0aGlzLmN1cnJlbnRQb3NpdGlvbigpKTtcbiAgICAgICAgdGhpcy5kcm9wZG93blRvZ2dsZS5lbWl0KHRydWUpO1xuICAgIH1cblxuICB0ZXN0TW91c2VEb3duKGl0ZW06IERyb3Bkb3duSXRlbSk6IHZvaWQge1xuICAgICAgY29uc29sZS5sb2coJ/CflLUgTW91c2UgZG93biBkZXRlY3RlZDogJyArIGl0ZW0ubGFiZWwpO1xuICAgICAgLy8gRG9uJ3QgY2xvc2UgZHJvcGRvd24gb24gbW91c2Vkb3duXG4gIH1cblxuICBvbkl0ZW1DbGljayhpdGVtOiBEcm9wZG93bkl0ZW0sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgY29uc29sZS5sb2coJ/CflLUgRHJvcGRvd24gb25JdGVtQ2xpY2sgY2FsbGVkIHdpdGg6JywgaXRlbSk7XG5cbiAgICAgIC8vIFNpbXBsZSBldmVudCBoYW5kbGluZ1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIGlmIChpdGVtLmRpc2FibGVkIHx8IGl0ZW0uZGl2aWRlcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5S1IEl0ZW0gaXMgZGlzYWJsZWQgb3IgZGl2aWRlciwgcmV0dXJuaW5nJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZygn8J+UtSBFbWl0dGluZyBpdGVtQ2xpY2sgZXZlbnQnKTtcbiAgICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQoaXRlbSk7XG5cbiAgICAgIC8vIENsb3NlIGRyb3Bkb3duIGFmdGVyIGEgc21hbGwgZGVsYXkgdG8gZW5zdXJlIGNsaWNrIGlzIHByb2Nlc3NlZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICB9LCA1MCk7XG4gIH1cblxuICAgIGNsb3NlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgICAgIGNvbnNvbGUubG9nKCfwn5S1IGNsb3NlRHJvcGRvd24gY2FsbGVkLCBzZXR0aW5nIGlzT3BlbiB0byBmYWxzZScpO1xuICAgICAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmRyb3Bkb3duTWFuYWdlci51bnJlZ2lzdGVyRHJvcGRvd24odGhpcy5kcm9wZG93bklkKTtcbiAgICAgICAgdGhpcy5kcm9wZG93blRvZ2dsZS5lbWl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBnZXRJdGVtQ2xhc3NlcyhpdGVtOiBEcm9wZG93bkl0ZW0pOiBzdHJpbmcge1xuICAgICAgICBpZiAoaXRlbS5kaXZpZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3R3LWJvcmRlci10IHR3LWJvcmRlci1ncmF5LTIwMCB0dy1teS0xJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gJ3R3LWZsZXggdHctaXRlbXMtY2VudGVyIHR3LXctZnVsbCB0dy1weC0zIHR3LXB5LTIgdHctdGV4dC1zbSB0dy10cmFuc2l0aW9uLWNvbG9ycyB0dy1kdXJhdGlvbi0xNTAnO1xuXG4gICAgICAgIGlmIChpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7YmFzZUNsYXNzZXN9IHR3LXRleHQtZ3JheS00MDAgdHctY3Vyc29yLW5vdC1hbGxvd2VkYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRleHRDb2xvciA9IGl0ZW0udGV4dENvbG9yIHx8ICd0dy10ZXh0LWdyYXktNzAwJztcbiAgICAgICAgY29uc3QgaG92ZXJCZyA9IGl0ZW0uaG92ZXJCZ0NvbG9yIHx8ICdob3Zlcjp0dy1iZy1ncmF5LTEwMCc7XG4gICAgICAgIGNvbnN0IGhvdmVyVGV4dCA9IGl0ZW0udGV4dENvbG9yIHx8ICdob3Zlcjp0dy10ZXh0LWdyYXktOTAwJztcblxuICAgICAgICByZXR1cm4gYCR7YmFzZUNsYXNzZXN9ICR7dGV4dENvbG9yfSAke2hvdmVyQmd9ICR7aG92ZXJUZXh0fWA7XG4gICAgfVxuXG4gICAgLy8gSG9zdCBsaXN0ZW5lcnMgZm9yIHdpbmRvdyBldmVudHMgKHBvc2l0aW9uIHJlY2FsY3VsYXRpb24gb25seSlcbiAgICAvLyBOb3RlOiBDbGljayBvdXRzaWRlIGFuZCBlc2NhcGUga2V5IGhhbmRsaW5nIGlzIG5vdyBtYW5hZ2VkIGJ5IERyb3Bkb3duTWFuYWdlclNlcnZpY2VcblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICAgIG9uV2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgICAgICAgLy8gUmVjYWxjdWxhdGUgcG9zaXRpb24gb24gd2luZG93IHJlc2l6ZVxuICAgICAgICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSB0aGlzLmNhbGN1bGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQb3NpdGlvbi5zZXQobmV3UG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFsnJGV2ZW50J10pXG4gICAgb25XaW5kb3dTY3JvbGwoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICAgICAgICAvLyBSZWNhbGN1bGF0ZSBwb3NpdGlvbiBvbiBzY3JvbGxcbiAgICAgICAgICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gdGhpcy5jYWxjdWxhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UG9zaXRpb24uc2V0KG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbn0gIl19
@@ -0,0 +1,30 @@
1
+ import { Component } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { CideEleConfirmationModalComponent } from '../confirmation-modal/confirmation-modal.component';
4
+ import { CideEleToastNotificationComponent } from '../toast-notification/toast-notification.component';
5
+ import * as i0 from "@angular/core";
6
+ export class CideEleGlobalNotificationsComponent {
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleGlobalNotificationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideEleGlobalNotificationsComponent, isStandalone: true, selector: "cide-ele-global-notifications", ngImport: i0, template: `
9
+ <!-- Global Confirmation Modal -->
10
+ <cide-ele-confirmation-modal></cide-ele-confirmation-modal>
11
+
12
+ <!-- Global Toast Notifications -->
13
+ <cide-ele-toast-notification></cide-ele-toast-notification>
14
+ `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CideEleConfirmationModalComponent, selector: "cide-ele-confirmation-modal" }, { kind: "component", type: CideEleToastNotificationComponent, selector: "cide-ele-toast-notification" }] }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideEleGlobalNotificationsComponent, decorators: [{
17
+ type: Component,
18
+ args: [{ selector: 'cide-ele-global-notifications', standalone: true, imports: [
19
+ CommonModule,
20
+ CideEleConfirmationModalComponent,
21
+ CideEleToastNotificationComponent
22
+ ], template: `
23
+ <!-- Global Confirmation Modal -->
24
+ <cide-ele-confirmation-modal></cide-ele-confirmation-modal>
25
+
26
+ <!-- Global Toast Notifications -->
27
+ <cide-ele-toast-notification></cide-ele-toast-notification>
28
+ `, styles: [":host{display:contents}\n"] }]
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLW5vdGlmaWNhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWVsZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2dsb2JhbC1ub3RpZmljYXRpb25zL2dsb2JhbC1ub3RpZmljYXRpb25zLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN2RyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7QUF3QnZHLE1BQU0sT0FBTyxtQ0FBbUM7OEdBQW5DLG1DQUFtQztrR0FBbkMsbUNBQW1DLHlGQWRwQzs7Ozs7O0dBTVQsa0dBVkMsWUFBWSwrQkFDWixpQ0FBaUMsd0VBQ2pDLGlDQUFpQzs7MkZBZ0J4QixtQ0FBbUM7a0JBdEIvQyxTQUFTOytCQUNFLCtCQUErQixjQUM3QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixpQ0FBaUM7d0JBQ2pDLGlDQUFpQztxQkFDbEMsWUFDUzs7Ozs7O0dBTVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2lkZUVsZUNvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybWF0aW9uLW1vZGFsL2NvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaWRlRWxlVG9hc3ROb3RpZmljYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi90b2FzdC1ub3RpZmljYXRpb24vdG9hc3Qtbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NpZGUtZWxlLWdsb2JhbC1ub3RpZmljYXRpb25zJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIENpZGVFbGVDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCxcclxuICAgIENpZGVFbGVUb2FzdE5vdGlmaWNhdGlvbkNvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDwhLS0gR2xvYmFsIENvbmZpcm1hdGlvbiBNb2RhbCAtLT5cclxuICAgIDxjaWRlLWVsZS1jb25maXJtYXRpb24tbW9kYWw+PC9jaWRlLWVsZS1jb25maXJtYXRpb24tbW9kYWw+XHJcbiAgICBcclxuICAgIDwhLS0gR2xvYmFsIFRvYXN0IE5vdGlmaWNhdGlvbnMgLS0+XHJcbiAgICA8Y2lkZS1lbGUtdG9hc3Qtbm90aWZpY2F0aW9uPjwvY2lkZS1lbGUtdG9hc3Qtbm90aWZpY2F0aW9uPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gICAgLyogR2xvYmFsIHN0eWxlcyBmb3Igbm90aWZpY2F0aW9ucyAqL1xyXG4gICAgOmhvc3Qge1xyXG4gICAgICBkaXNwbGF5OiBjb250ZW50cztcclxuICAgIH1cclxuICBgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2lkZUVsZUdsb2JhbE5vdGlmaWNhdGlvbnNDb21wb25lbnQge1xyXG4gIC8vIFRoaXMgY29tcG9uZW50IHNlcnZlcyBhcyBhIGNvbnRhaW5lciBmb3IgZ2xvYmFsIG5vdGlmaWNhdGlvbnNcclxuICAvLyBJdCBkb2Vzbid0IG5lZWQgYW55IGxvZ2ljIGFzIHRoZSBzZXJ2aWNlcyBoYW5kbGUgZXZlcnl0aGluZ1xyXG59XHJcblxyXG4iXX0=