@aakash58/chatbot 1.1.15 → 1.1.17

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 (167) hide show
  1. package/esm2022/aakash58-chatbot.mjs +5 -0
  2. package/esm2022/lib/app/chat/chat-ui-state.service.mjs +170 -0
  3. package/esm2022/lib/app/chat/chat.service.mjs +445 -0
  4. package/esm2022/lib/app/chat/components/chat-button/chat-button.component.mjs +50 -0
  5. package/esm2022/lib/app/chat/components/chat-footer/chat-footer.component.mjs +12 -0
  6. package/esm2022/lib/app/chat/components/chat-header/chat-header.component.mjs +66 -0
  7. package/esm2022/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.mjs +186 -0
  8. package/esm2022/lib/app/chat/components/chat-window/chat-window.component.mjs +312 -0
  9. package/esm2022/lib/app/chat/components/message-input/message-input.component.mjs +36 -0
  10. package/esm2022/lib/app/chat/components/message-list/message-list.component.mjs +115 -0
  11. package/esm2022/lib/app/chat/model/chat-history.model.mjs +2 -0
  12. package/esm2022/lib/app/chat/model/chat-request.model.mjs +2 -0
  13. package/esm2022/lib/app/chat/model/chat-response.model.mjs +2 -0
  14. package/esm2022/lib/app/chat/model/chat-session.model.mjs +2 -0
  15. package/esm2022/lib/app/chat/model/chat-stream-message.model.mjs +2 -0
  16. package/esm2022/lib/app/chat/model/chat-stream-response.model.mjs +2 -0
  17. package/esm2022/lib/app/chat/services/chat-api.service.mjs +61 -0
  18. package/esm2022/lib/app/chat/services/chat-audio.service.mjs +50 -0
  19. package/esm2022/lib/app/chat/services/chat-history.service.mjs +252 -0
  20. package/esm2022/lib/app/login/login-form.component.mjs +46 -0
  21. package/esm2022/lib/app/personalization/personalization-dialog.component.mjs +194 -0
  22. package/esm2022/lib/app/personalization/personalization.service.mjs +149 -0
  23. package/esm2022/lib/app/personalization/sections/account/account-section.component.mjs +122 -0
  24. package/esm2022/lib/app/personalization/sections/preferences/color-picker-dialog.component.mjs +86 -0
  25. package/esm2022/lib/app/personalization/sections/preferences/preferences-section.component.mjs +115 -0
  26. package/esm2022/lib/app/personalization/sections/profile/profile-section.component.mjs +29 -0
  27. package/esm2022/lib/app/personalization/sections/settings/setting-section.component.mjs +30 -0
  28. package/esm2022/lib/app/personalization/sections/terms/terms-section.component.mjs +12 -0
  29. package/esm2022/lib/constant/doohbot-constant.mjs +28 -0
  30. package/esm2022/lib/constant/html-entities.mjs +9 -0
  31. package/esm2022/lib/constant/utf8.mjs +10 -0
  32. package/esm2022/lib/core/app-const.mjs +61 -0
  33. package/esm2022/lib/core/auth/account-api.service.mjs +40 -0
  34. package/esm2022/lib/core/auth/auth.service.mjs +391 -0
  35. package/esm2022/lib/core/auth/models/auth-result.model.mjs +3 -0
  36. package/esm2022/lib/core/auth/models/federated-login-request.model.mjs +6 -0
  37. package/esm2022/lib/core/auth/models/login-request.model.mjs +6 -0
  38. package/esm2022/lib/core/auth/storage.service.mjs +110 -0
  39. package/esm2022/lib/core/directives/draggable/draggable-dialog.directive.mjs +112 -0
  40. package/esm2022/lib/core/directives/fullscreen/fullscreen.directive.mjs +55 -0
  41. package/esm2022/lib/core/directives/resizable/resizable-dialog.directive.mjs +179 -0
  42. package/esm2022/lib/core/environments/environment.mjs +15 -0
  43. package/esm2022/lib/core/environments/environment.prod.mjs +15 -0
  44. package/esm2022/lib/core/helpers/crypto-helper.service.mjs +52 -0
  45. package/esm2022/lib/core/http/http-stream.service.mjs +97 -0
  46. package/esm2022/lib/core/http/http.service.mjs +103 -0
  47. package/esm2022/lib/core/interceptors/auth.interceptor.mjs +96 -0
  48. package/esm2022/lib/core/interceptors/license.interceptor.mjs +44 -0
  49. package/esm2022/lib/core/models/api-config.model.mjs +18 -0
  50. package/esm2022/lib/core/models/api-request.model.mjs +2 -0
  51. package/esm2022/lib/core/models/api-response.model.mjs +8 -0
  52. package/esm2022/lib/core/models/doohbot-config.model.mjs +18 -0
  53. package/esm2022/lib/core/models/license.model.mjs +2 -0
  54. package/esm2022/lib/core/models/message.mjs +2 -0
  55. package/esm2022/lib/core/models/theme-config.model.mjs +2 -0
  56. package/esm2022/lib/core/services/core-config.service.mjs +52 -0
  57. package/esm2022/lib/core/services/license.service.mjs +145 -0
  58. package/esm2022/lib/core/services/markdown.service.mjs +64 -0
  59. package/esm2022/lib/core/services/theme.service.mjs +248 -0
  60. package/esm2022/lib/core/types/auth-mode.type.mjs +2 -0
  61. package/esm2022/lib/core/types/auth-status.type.mjs +5 -0
  62. package/esm2022/lib/core/types/chat-stream.type.mjs +2 -0
  63. package/esm2022/lib/core/types/message-role.type.mjs +2 -0
  64. package/esm2022/lib/core/types/prompt-mode.type.mjs +5 -0
  65. package/esm2022/lib/core/types/snackbar-error.type.mjs +5 -0
  66. package/esm2022/lib/core/types/tenant-resolution-strategy.type.mjs +2 -0
  67. package/esm2022/lib/core/utils/logger.service.mjs +42 -0
  68. package/esm2022/lib/doohbot-input.mjs +20 -0
  69. package/esm2022/lib/doohbot.component.mjs +444 -0
  70. package/esm2022/lib/predefined_messages.mjs +15 -0
  71. package/esm2022/lib/shared/chips/chips.component.mjs +28 -0
  72. package/esm2022/lib/shared/dialog/dialog.component.mjs +36 -0
  73. package/esm2022/lib/shared/dialog/dialog.service.mjs +64 -0
  74. package/esm2022/lib/shared/dialog/dialog.utils.mjs +85 -0
  75. package/esm2022/lib/shared/dropdown-menu/dropdown-menu.component.mjs +29 -0
  76. package/esm2022/lib/shared/input-dialog/input-dialog.component.mjs +38 -0
  77. package/esm2022/lib/shared/menu-item/menu-item.component.mjs +24 -0
  78. package/esm2022/lib/shared/pipes/simple-markdown.pipe.mjs +27 -0
  79. package/esm2022/lib/shared/snackbar/snackbar.component.mjs +43 -0
  80. package/esm2022/lib/shared/snackbar/snackbar.service.mjs +46 -0
  81. package/esm2022/lib/shared/snackbar/snackbar.utils.mjs +43 -0
  82. package/esm2022/public-api.mjs +37 -0
  83. package/fesm2022/aakash58-chatbot.mjs +1114 -867
  84. package/fesm2022/aakash58-chatbot.mjs.map +1 -1
  85. package/index.d.ts +3 -377
  86. package/lib/app/chat/chat-ui-state.service.d.ts +96 -0
  87. package/lib/app/chat/chat.service.d.ts +88 -0
  88. package/lib/app/chat/components/chat-button/chat-button.component.d.ts +16 -0
  89. package/lib/app/chat/components/chat-footer/chat-footer.component.d.ts +5 -0
  90. package/lib/app/chat/components/chat-header/chat-header.component.d.ts +24 -0
  91. package/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.d.ts +49 -0
  92. package/lib/app/chat/components/chat-window/chat-window.component.d.ts +107 -0
  93. package/lib/app/chat/components/message-input/message-input.component.d.ts +12 -0
  94. package/lib/app/chat/components/message-list/message-list.component.d.ts +40 -0
  95. package/lib/app/chat/model/chat-history.model.d.ts +51 -0
  96. package/lib/app/chat/model/chat-request.model.d.ts +10 -0
  97. package/lib/app/chat/model/chat-response.model.d.ts +9 -0
  98. package/lib/app/chat/model/chat-session.model.d.ts +12 -0
  99. package/lib/app/chat/model/chat-stream-message.model.d.ts +5 -0
  100. package/lib/app/chat/model/chat-stream-response.model.d.ts +10 -0
  101. package/lib/app/chat/services/chat-api.service.d.ts +30 -0
  102. package/lib/app/chat/services/chat-audio.service.d.ts +19 -0
  103. package/lib/app/chat/services/chat-history.service.d.ts +53 -0
  104. package/lib/app/login/login-form.component.d.ts +20 -0
  105. package/lib/app/personalization/personalization-dialog.component.d.ts +53 -0
  106. package/lib/app/personalization/personalization.service.d.ts +66 -0
  107. package/lib/app/personalization/sections/account/account-section.component.d.ts +30 -0
  108. package/lib/app/personalization/sections/preferences/color-picker-dialog.component.d.ts +17 -0
  109. package/lib/app/personalization/sections/preferences/preferences-section.component.d.ts +27 -0
  110. package/lib/app/personalization/sections/profile/profile-section.component.d.ts +17 -0
  111. package/lib/app/personalization/sections/settings/setting-section.component.d.ts +10 -0
  112. package/lib/app/personalization/sections/terms/terms-section.component.d.ts +5 -0
  113. package/lib/constant/doohbot-constant.d.ts +12 -0
  114. package/lib/constant/html-entities.d.ts +8 -0
  115. package/lib/constant/utf8.d.ts +9 -0
  116. package/lib/core/app-const.d.ts +11 -0
  117. package/lib/core/auth/account-api.service.d.ts +20 -0
  118. package/lib/core/auth/auth.service.d.ts +90 -0
  119. package/lib/core/auth/models/auth-result.model.d.ts +4 -0
  120. package/lib/core/auth/models/federated-login-request.model.d.ts +5 -0
  121. package/lib/core/auth/models/login-request.model.d.ts +6 -0
  122. package/lib/core/auth/storage.service.d.ts +21 -0
  123. package/lib/core/directives/draggable/draggable-dialog.directive.d.ts +23 -0
  124. package/lib/core/directives/fullscreen/fullscreen.directive.d.ts +14 -0
  125. package/lib/core/directives/resizable/resizable-dialog.directive.d.ts +30 -0
  126. package/lib/core/environments/environment.d.ts +7 -0
  127. package/lib/core/environments/environment.prod.d.ts +7 -0
  128. package/lib/core/helpers/crypto-helper.service.d.ts +12 -0
  129. package/lib/core/http/http-stream.service.d.ts +18 -0
  130. package/lib/core/http/http.service.d.ts +20 -0
  131. package/lib/core/interceptors/auth.interceptor.d.ts +18 -0
  132. package/lib/core/interceptors/license.interceptor.d.ts +11 -0
  133. package/lib/core/models/api-config.model.d.ts +58 -0
  134. package/lib/core/models/api-request.model.d.ts +77 -0
  135. package/lib/core/models/api-response.model.d.ts +6 -0
  136. package/lib/core/models/doohbot-config.model.d.ts +81 -0
  137. package/lib/core/models/license.model.d.ts +23 -0
  138. package/lib/core/models/message.d.ts +16 -0
  139. package/lib/core/models/theme-config.model.d.ts +28 -0
  140. package/lib/core/services/core-config.service.d.ts +23 -0
  141. package/lib/core/services/license.service.d.ts +33 -0
  142. package/lib/core/services/markdown.service.d.ts +8 -0
  143. package/lib/core/services/theme.service.d.ts +40 -0
  144. package/lib/core/types/auth-mode.type.d.ts +4 -0
  145. package/lib/core/types/auth-status.type.d.ts +4 -0
  146. package/lib/core/types/chat-stream.type.d.ts +4 -0
  147. package/lib/core/types/message-role.type.d.ts +4 -0
  148. package/lib/core/types/prompt-mode.type.d.ts +4 -0
  149. package/lib/core/types/snackbar-error.type.d.ts +4 -0
  150. package/lib/core/types/tenant-resolution-strategy.type.d.ts +4 -0
  151. package/lib/core/utils/logger.service.d.ts +11 -0
  152. package/lib/doohbot-input.d.ts +19 -0
  153. package/lib/doohbot.component.d.ts +108 -0
  154. package/lib/predefined_messages.d.ts +2 -0
  155. package/lib/shared/chips/chips.component.d.ts +10 -0
  156. package/lib/shared/dialog/dialog.component.d.ts +19 -0
  157. package/lib/shared/dialog/dialog.service.d.ts +29 -0
  158. package/lib/shared/dialog/dialog.utils.d.ts +41 -0
  159. package/lib/shared/dropdown-menu/dropdown-menu.component.d.ts +11 -0
  160. package/lib/shared/input-dialog/input-dialog.component.d.ts +20 -0
  161. package/lib/shared/menu-item/menu-item.component.d.ts +9 -0
  162. package/lib/shared/pipes/simple-markdown.pipe.d.ts +10 -0
  163. package/lib/shared/snackbar/snackbar.component.d.ts +14 -0
  164. package/lib/shared/snackbar/snackbar.service.d.ts +19 -0
  165. package/lib/shared/snackbar/snackbar.utils.d.ts +33 -0
  166. package/package.json +4 -2
  167. package/public-api.d.ts +11 -0
@@ -0,0 +1,15 @@
1
+ export const PredefinedMessages = [
2
+ 'How do I create a new DOOH proposal in Doohclick?',
3
+ 'Can the buyer see internal notes I add in Doohclick?',
4
+ // 'What happens after a buyer approves a proposal?',
5
+ // 'Why would an SR hide the pipeline value in a proposal?',
6
+ // 'Are additional services like ad formatting included in the base campaign cost?',
7
+ 'How to create a proposal?',
8
+ ];
9
+ export const SuggestedMessages = [
10
+ 'Hi! How can I help?',
11
+ 'Check your activity?',
12
+ 'Need account help?',
13
+ 'Quick tips to start.',
14
+ ];
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZGVmaW5lZF9tZXNzYWdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9wcmVkZWZpbmVkX21lc3NhZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLG1EQUFtRDtJQUNuRCxzREFBc0Q7SUFDdEQscURBQXFEO0lBQ3JELDREQUE0RDtJQUM1RCxvRkFBb0Y7SUFDcEYsMkJBQTJCO0NBQzVCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUMvQixxQkFBcUI7SUFDckIsc0JBQXNCO0lBQ3RCLG9CQUFvQjtJQUNwQixzQkFBc0I7Q0FDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBQcmVkZWZpbmVkTWVzc2FnZXMgPSBbXHJcbiAgJ0hvdyBkbyBJIGNyZWF0ZSBhIG5ldyBET09IIHByb3Bvc2FsIGluIERvb2hjbGljaz8nLFxyXG4gICdDYW4gdGhlIGJ1eWVyIHNlZSBpbnRlcm5hbCBub3RlcyBJIGFkZCBpbiBEb29oY2xpY2s/JyxcclxuICAvLyAnV2hhdCBoYXBwZW5zIGFmdGVyIGEgYnV5ZXIgYXBwcm92ZXMgYSBwcm9wb3NhbD8nLFxyXG4gIC8vICdXaHkgd291bGQgYW4gU1IgaGlkZSB0aGUgcGlwZWxpbmUgdmFsdWUgaW4gYSBwcm9wb3NhbD8nLFxyXG4gIC8vICdBcmUgYWRkaXRpb25hbCBzZXJ2aWNlcyBsaWtlIGFkIGZvcm1hdHRpbmcgaW5jbHVkZWQgaW4gdGhlIGJhc2UgY2FtcGFpZ24gY29zdD8nLFxyXG4gICdIb3cgdG8gY3JlYXRlIGEgcHJvcG9zYWw/JyxcclxuXTtcclxuZXhwb3J0IGNvbnN0IFN1Z2dlc3RlZE1lc3NhZ2VzID0gW1xyXG4gICdIaSEgSG93IGNhbiBJIGhlbHA/JyxcclxuICAnQ2hlY2sgeW91ciBhY3Rpdml0eT8nLFxyXG4gICdOZWVkIGFjY291bnQgaGVscD8nLFxyXG4gICdRdWljayB0aXBzIHRvIHN0YXJ0LicsXHJcbl07XHJcbiJdfQ==
@@ -0,0 +1,28 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ export class Chips {
5
+ constructor() {
6
+ this.messages = []; // messages array
7
+ this.disabled = false;
8
+ this.chipClick = new EventEmitter(); // emit clicked chip
9
+ }
10
+ onChipClick(msg) {
11
+ if (this.disabled)
12
+ return;
13
+ this.chipClick.emit(msg);
14
+ }
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: Chips, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
16
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: Chips, isStandalone: true, selector: "app-chips", inputs: { messages: "messages", disabled: "disabled" }, outputs: { chipClick: "chipClick" }, ngImport: i0, template: "@if (messages.length > 0) {\r\n <div class=\"predefined-chips\">\r\n @for (msg of messages; track msg) {\r\n <button class=\"chip\" (click)=\"onChipClick(msg)\">\r\n {{ msg }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n", styles: [".predefined-chips{display:flex;flex-wrap:wrap;gap:8px;padding:10px;font:var(--font-family)}.chip{background-color:rgba(var(--primary-color),.2);border:1px solid var(--primary-color);border-radius:16px;padding:6px 12px;cursor:pointer;font-size:.9rem;font:var(--font-family);transition:background-color .3s ease;color:var(--text-color)}.chip:hover,.chip.active{background-color:var(--primary-color);color:var(--white)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: Chips, decorators: [{
19
+ type: Component,
20
+ args: [{ selector: 'app-chips', standalone: true, imports: [CommonModule], template: "@if (messages.length > 0) {\r\n <div class=\"predefined-chips\">\r\n @for (msg of messages; track msg) {\r\n <button class=\"chip\" (click)=\"onChipClick(msg)\">\r\n {{ msg }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n", styles: [".predefined-chips{display:flex;flex-wrap:wrap;gap:8px;padding:10px;font:var(--font-family)}.chip{background-color:rgba(var(--primary-color),.2);border:1px solid var(--primary-color);border-radius:16px;padding:6px 12px;cursor:pointer;font-size:.9rem;font:var(--font-family);transition:background-color .3s ease;color:var(--text-color)}.chip:hover,.chip.active{background-color:var(--primary-color);color:var(--white)}\n"] }]
21
+ }], propDecorators: { messages: [{
22
+ type: Input
23
+ }], disabled: [{
24
+ type: Input
25
+ }], chipClick: [{
26
+ type: Output
27
+ }] } });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9vaGJvdC9zcmMvbGliL3NoYXJlZC9jaGlwcy9jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvc2hhcmVkL2NoaXBzL2NoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQVMvQyxNQUFNLE9BQU8sS0FBSztJQVBsQjtRQVFXLGFBQVEsR0FBYSxFQUFFLENBQUMsQ0FBQyxpQkFBaUI7UUFDMUMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNoQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQyxDQUFDLG9CQUFvQjtLQU12RTtJQUpDLFdBQVcsQ0FBQyxHQUFXO1FBQ3JCLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7K0dBUlUsS0FBSzttR0FBTCxLQUFLLGtLQ1ZsQixrUEFTQSwyZERIWSxZQUFZOzs0RkFJWCxLQUFLO2tCQVBqQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUM7OEJBS2QsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY2hpcHMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NoaXBzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jaGlwcy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hpcHMge1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdOyAvLyBtZXNzYWdlcyBhcnJheVxyXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIGNoaXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpOyAvLyBlbWl0IGNsaWNrZWQgY2hpcFxyXG5cclxuICBvbkNoaXBDbGljayhtc2c6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgIHRoaXMuY2hpcENsaWNrLmVtaXQobXNnKTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgPGRpdiBjbGFzcz1cInByZWRlZmluZWQtY2hpcHNcIj5cclxuICAgIEBmb3IgKG1zZyBvZiBtZXNzYWdlczsgdHJhY2sgbXNnKSB7XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJjaGlwXCIgKGNsaWNrKT1cIm9uQ2hpcENsaWNrKG1zZylcIj5cclxuICAgICAgICB7eyBtc2cgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbn1cclxuIl19
@@ -0,0 +1,36 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/dialog";
8
+ import * as i2 from "@angular/material/button";
9
+ import * as i3 from "@angular/material/icon";
10
+ export class DialogComponent {
11
+ constructor(dialogRef, data) {
12
+ this.dialogRef = dialogRef;
13
+ this.data = data;
14
+ // Set defaults
15
+ this.data.confirmText = this.data.confirmText || 'Confirm';
16
+ this.data.cancelText = this.data.cancelText || 'Cancel';
17
+ this.data.confirmButtonColor = this.data.confirmButtonColor || 'warn';
18
+ this.data.icon = this.data.icon || 'warning';
19
+ }
20
+ onCancel() {
21
+ this.dialogRef.close(false);
22
+ }
23
+ onConfirm() {
24
+ this.dialogRef.close(true);
25
+ }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
27
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DialogComponent, isStandalone: true, selector: "app-dialog", ngImport: i0, template: "<div class=\"dialog-container\">\r\n <div class=\"dialog-header\">\r\n <mat-icon class=\"dialog-icon\" [class.warn-icon]=\"data.confirmButtonColor === 'warn'\">\r\n {{ data.icon }}\r\n </mat-icon>\r\n <h2 mat-dialog-title>{{ data.title }}</h2>\r\n </div>\r\n\r\n <mat-dialog-content>\r\n <p class=\"dialog-message\">{{ data.message }}</p>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-button class=\"cancel-btn\" (click)=\"onCancel()\" type=\"button\">\r\n {{ data.cancelText }}\r\n </button>\r\n <button\r\n mat-raised-button\r\n class=\"confirm-btn\"\r\n [class.warn-btn]=\"data.confirmButtonColor === 'warn'\"\r\n [class.primary-btn]=\"data.confirmButtonColor === 'primary'\"\r\n [class.accent-btn]=\"data.confirmButtonColor === 'accent'\"\r\n (click)=\"onConfirm()\"\r\n type=\"button\"\r\n >\r\n {{ data.confirmText }}\r\n </button>\r\n </mat-dialog-actions>\r\n</div>\r\n", styles: [".dialog-container{padding:0;min-width:320px;max-width:500px}.dialog-container .dialog-header{display:flex;align-items:center;gap:12px;padding:24px 24px 16px;margin-bottom:0}.dialog-container .dialog-header .dialog-icon{font-size:32px;width:32px;height:32px;color:var(--primary-color)}.dialog-container .dialog-header .dialog-icon.warn-icon{color:var(--red)}.dialog-container .dialog-header h2{margin:0;font-size:20px;font-weight:600;color:var(--secondary-text-color)}.dialog-container mat-dialog-content{padding:0 24px 24px;margin:0}.dialog-container mat-dialog-content .dialog-message{margin:0;font-size:14px;line-height:1.6;color:var(--text-color)}.dialog-container mat-dialog-actions{padding:12px 24px 24px;margin:0;gap:12px}.dialog-container mat-dialog-actions .cancel-btn{color:var(--secondary-text-color, var(--grey));transition:all .2s ease}.dialog-container mat-dialog-actions .cancel-btn:hover{background-color:var(--hover-bg)}.dialog-container mat-dialog-actions .confirm-btn{font-weight:500;transition:all .2s ease}.dialog-container mat-dialog-actions .confirm-btn.warn-btn{background-color:var(--red);color:var(--white)}.dialog-container mat-dialog-actions .confirm-btn.warn-btn:hover{background-color:var(--red)}.dialog-container mat-dialog-actions .confirm-btn.primary-btn{background-color:var(--primary-color);color:var(--white)}.dialog-container mat-dialog-actions .confirm-btn.primary-btn:hover{background-color:var(--primary-color)}.dialog-container mat-dialog-actions .confirm-btn.accent-btn{background-color:var(--light-red);color:var(--white)}.dialog-container mat-dialog-actions .confirm-btn.accent-btn:hover{background-color:var(--light-red)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogComponent, decorators: [{
30
+ type: Component,
31
+ args: [{ selector: 'app-dialog', standalone: true, imports: [CommonModule, MatDialogModule, MatButtonModule, MatIconModule], template: "<div class=\"dialog-container\">\r\n <div class=\"dialog-header\">\r\n <mat-icon class=\"dialog-icon\" [class.warn-icon]=\"data.confirmButtonColor === 'warn'\">\r\n {{ data.icon }}\r\n </mat-icon>\r\n <h2 mat-dialog-title>{{ data.title }}</h2>\r\n </div>\r\n\r\n <mat-dialog-content>\r\n <p class=\"dialog-message\">{{ data.message }}</p>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-button class=\"cancel-btn\" (click)=\"onCancel()\" type=\"button\">\r\n {{ data.cancelText }}\r\n </button>\r\n <button\r\n mat-raised-button\r\n class=\"confirm-btn\"\r\n [class.warn-btn]=\"data.confirmButtonColor === 'warn'\"\r\n [class.primary-btn]=\"data.confirmButtonColor === 'primary'\"\r\n [class.accent-btn]=\"data.confirmButtonColor === 'accent'\"\r\n (click)=\"onConfirm()\"\r\n type=\"button\"\r\n >\r\n {{ data.confirmText }}\r\n </button>\r\n </mat-dialog-actions>\r\n</div>\r\n", styles: [".dialog-container{padding:0;min-width:320px;max-width:500px}.dialog-container .dialog-header{display:flex;align-items:center;gap:12px;padding:24px 24px 16px;margin-bottom:0}.dialog-container .dialog-header .dialog-icon{font-size:32px;width:32px;height:32px;color:var(--primary-color)}.dialog-container .dialog-header .dialog-icon.warn-icon{color:var(--red)}.dialog-container .dialog-header h2{margin:0;font-size:20px;font-weight:600;color:var(--secondary-text-color)}.dialog-container mat-dialog-content{padding:0 24px 24px;margin:0}.dialog-container mat-dialog-content .dialog-message{margin:0;font-size:14px;line-height:1.6;color:var(--text-color)}.dialog-container mat-dialog-actions{padding:12px 24px 24px;margin:0;gap:12px}.dialog-container mat-dialog-actions .cancel-btn{color:var(--secondary-text-color, var(--grey));transition:all .2s ease}.dialog-container mat-dialog-actions .cancel-btn:hover{background-color:var(--hover-bg)}.dialog-container mat-dialog-actions .confirm-btn{font-weight:500;transition:all .2s ease}.dialog-container mat-dialog-actions .confirm-btn.warn-btn{background-color:var(--red);color:var(--white)}.dialog-container mat-dialog-actions .confirm-btn.warn-btn:hover{background-color:var(--red)}.dialog-container mat-dialog-actions .confirm-btn.primary-btn{background-color:var(--primary-color);color:var(--white)}.dialog-container mat-dialog-actions .confirm-btn.primary-btn:hover{background-color:var(--primary-color)}.dialog-container mat-dialog-actions .confirm-btn.accent-btn{background-color:var(--light-red);color:var(--white)}.dialog-container mat-dialog-actions .confirm-btn.accent-btn:hover{background-color:var(--light-red)}\n"] }]
32
+ }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
33
+ type: Inject,
34
+ args: [MAT_DIALOG_DATA]
35
+ }] }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9zaGFyZWQvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvc2hhcmVkL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBa0J2RCxNQUFNLE9BQU8sZUFBZTtJQUMxQixZQUNTLFNBQXdDLEVBQ2YsSUFBZ0I7UUFEekMsY0FBUyxHQUFULFNBQVMsQ0FBK0I7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFZO1FBRWhELGVBQWU7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUM7UUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxNQUFNLENBQUM7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDOytHQWxCVSxlQUFlLDhDQUdoQixlQUFlO21HQUhkLGVBQWUsc0VDdEI1Qix5K0JBNkJBLDRyRERYWSxZQUFZLDhCQUFFLGVBQWUseWJBQUUsZUFBZSwyTkFBRSxhQUFhOzs0RkFJNUQsZUFBZTtrQkFQM0IsU0FBUzsrQkFDRSxZQUFZLGNBQ1YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDOzswQkFPckUsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nRGF0YSB7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgY29uZmlybVRleHQ/OiBzdHJpbmc7XHJcbiAgY2FuY2VsVGV4dD86IHN0cmluZztcclxuICBjb25maXJtQnV0dG9uQ29sb3I/OiAncHJpbWFyeScgfCAnYWNjZW50JyB8ICd3YXJuJztcclxuICBpY29uPzogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kaWFsb2cnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0RGlhbG9nTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nQ29tcG9uZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxEaWFsb2dDb21wb25lbnQ+LFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBEaWFsb2dEYXRhLFxyXG4gICkge1xyXG4gICAgLy8gU2V0IGRlZmF1bHRzXHJcbiAgICB0aGlzLmRhdGEuY29uZmlybVRleHQgPSB0aGlzLmRhdGEuY29uZmlybVRleHQgfHwgJ0NvbmZpcm0nO1xyXG4gICAgdGhpcy5kYXRhLmNhbmNlbFRleHQgPSB0aGlzLmRhdGEuY2FuY2VsVGV4dCB8fCAnQ2FuY2VsJztcclxuICAgIHRoaXMuZGF0YS5jb25maXJtQnV0dG9uQ29sb3IgPSB0aGlzLmRhdGEuY29uZmlybUJ1dHRvbkNvbG9yIHx8ICd3YXJuJztcclxuICAgIHRoaXMuZGF0YS5pY29uID0gdGhpcy5kYXRhLmljb24gfHwgJ3dhcm5pbmcnO1xyXG4gIH1cclxuXHJcbiAgb25DYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBvbkNvbmZpcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0cnVlKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImRpYWxvZy1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWhlYWRlclwiPlxyXG4gICAgPG1hdC1pY29uIGNsYXNzPVwiZGlhbG9nLWljb25cIiBbY2xhc3Mud2Fybi1pY29uXT1cImRhdGEuY29uZmlybUJ1dHRvbkNvbG9yID09PSAnd2FybidcIj5cclxuICAgICAge3sgZGF0YS5pY29uIH19XHJcbiAgICA8L21hdC1pY29uPlxyXG4gICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+e3sgZGF0YS50aXRsZSB9fTwvaDI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgICA8cCBjbGFzcz1cImRpYWxvZy1tZXNzYWdlXCI+e3sgZGF0YS5tZXNzYWdlIH19PC9wPlxyXG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG5cclxuICA8bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJjYW5jZWwtYnRuXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgIHt7IGRhdGEuY2FuY2VsVGV4dCB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiY29uZmlybS1idG5cIlxyXG4gICAgICBbY2xhc3Mud2Fybi1idG5dPVwiZGF0YS5jb25maXJtQnV0dG9uQ29sb3IgPT09ICd3YXJuJ1wiXHJcbiAgICAgIFtjbGFzcy5wcmltYXJ5LWJ0bl09XCJkYXRhLmNvbmZpcm1CdXR0b25Db2xvciA9PT0gJ3ByaW1hcnknXCJcclxuICAgICAgW2NsYXNzLmFjY2VudC1idG5dPVwiZGF0YS5jb25maXJtQnV0dG9uQ29sb3IgPT09ICdhY2NlbnQnXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQ29uZmlybSgpXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICA+XHJcbiAgICAgIHt7IGRhdGEuY29uZmlybVRleHQgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,64 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { DialogComponent } from './dialog.component';
3
+ import { InputDialogComponent } from '../input-dialog/input-dialog.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/material/dialog";
6
+ export class DialogService {
7
+ constructor(dialog) {
8
+ this.dialog = dialog;
9
+ }
10
+ /**
11
+ * Opens a confirmation dialog with customizable options
12
+ * @param data Configuration for the dialog
13
+ * @returns Observable that emits true if confirmed, false if cancelled
14
+ */
15
+ open(data) {
16
+ const dialogRef = this.dialog.open(DialogComponent, {
17
+ width: '400px',
18
+ data: data,
19
+ disableClose: false,
20
+ autoFocus: true,
21
+ restoreFocus: true,
22
+ });
23
+ return dialogRef.afterClosed();
24
+ }
25
+ /**
26
+ * Convenience method for delete confirmation dialogs
27
+ * @param itemName Name of the item being deleted
28
+ * @returns Observable that emits true if confirmed, false if cancelled
29
+ */
30
+ confirmDelete(itemName = 'this item') {
31
+ return this.open({
32
+ title: 'Confirm Delete',
33
+ message: `Are you sure you want to delete ${itemName}? This action cannot be undone.`,
34
+ confirmText: 'Delete',
35
+ cancelText: 'Cancel',
36
+ confirmButtonColor: 'warn',
37
+ icon: 'delete_forever',
38
+ });
39
+ }
40
+ /**
41
+ * Opens a dialog with an input field
42
+ * @param data Configuration for the input dialog
43
+ * @returns Observable that emits the input value if confirmed, null if cancelled
44
+ */
45
+ openInput(data) {
46
+ const dialogRef = this.dialog.open(InputDialogComponent, {
47
+ width: '400px',
48
+ data: data,
49
+ disableClose: false,
50
+ autoFocus: true,
51
+ restoreFocus: true,
52
+ });
53
+ return dialogRef.afterClosed();
54
+ }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable }); }
56
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogService, providedIn: 'root' }); }
57
+ }
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogService, decorators: [{
59
+ type: Injectable,
60
+ args: [{
61
+ providedIn: 'root',
62
+ }]
63
+ }], ctorParameters: () => [{ type: i1.MatDialog }] });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvc2hhcmVkL2RpYWxvZy9kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQW1CLE1BQU0sd0NBQXdDLENBQUM7OztBQUsvRixNQUFNLE9BQU8sYUFBYTtJQUN4QixZQUFvQixNQUFpQjtRQUFqQixXQUFNLEdBQU4sTUFBTSxDQUFXO0lBQUksQ0FBQztJQUUxQzs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLElBQWdCO1FBQ25CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNsRCxLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsWUFBWSxFQUFFLEtBQUs7WUFDbkIsU0FBUyxFQUFFLElBQUk7WUFDZixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxXQUFtQixXQUFXO1FBQzFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztZQUNmLEtBQUssRUFBRSxnQkFBZ0I7WUFDdkIsT0FBTyxFQUFFLG1DQUFtQyxRQUFRLGlDQUFpQztZQUNyRixXQUFXLEVBQUUsUUFBUTtZQUNyQixVQUFVLEVBQUUsUUFBUTtZQUNwQixrQkFBa0IsRUFBRSxNQUFNO1lBQzFCLElBQUksRUFBRSxnQkFBZ0I7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsSUFBcUI7UUFDN0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDdkQsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLFlBQVksRUFBRSxLQUFLO1lBQ25CLFNBQVMsRUFBRSxJQUFJO1lBQ2YsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakMsQ0FBQzsrR0FuRFUsYUFBYTttSEFBYixhQUFhLGNBRlosTUFBTTs7NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRGlhbG9nQ29tcG9uZW50LCBEaWFsb2dEYXRhIH0gZnJvbSAnLi9kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW5wdXREaWFsb2dDb21wb25lbnQsIElucHV0RGlhbG9nRGF0YSB9IGZyb20gJy4uL2lucHV0LWRpYWxvZy9pbnB1dC1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbnMgYSBjb25maXJtYXRpb24gZGlhbG9nIHdpdGggY3VzdG9taXphYmxlIG9wdGlvbnNcclxuICAgKiBAcGFyYW0gZGF0YSBDb25maWd1cmF0aW9uIGZvciB0aGUgZGlhbG9nXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRydWUgaWYgY29uZmlybWVkLCBmYWxzZSBpZiBjYW5jZWxsZWRcclxuICAgKi9cclxuICBvcGVuKGRhdGE6IERpYWxvZ0RhdGEpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiAnNDAwcHgnLFxyXG4gICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBhdXRvRm9jdXM6IHRydWUsXHJcbiAgICAgIHJlc3RvcmVGb2N1czogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZGVsZXRlIGNvbmZpcm1hdGlvbiBkaWFsb2dzXHJcbiAgICogQHBhcmFtIGl0ZW1OYW1lIE5hbWUgb2YgdGhlIGl0ZW0gYmVpbmcgZGVsZXRlZFxyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0cnVlIGlmIGNvbmZpcm1lZCwgZmFsc2UgaWYgY2FuY2VsbGVkXHJcbiAgICovXHJcbiAgY29uZmlybURlbGV0ZShpdGVtTmFtZTogc3RyaW5nID0gJ3RoaXMgaXRlbScpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLm9wZW4oe1xyXG4gICAgICB0aXRsZTogJ0NvbmZpcm0gRGVsZXRlJyxcclxuICAgICAgbWVzc2FnZTogYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgJHtpdGVtTmFtZX0/IFRoaXMgYWN0aW9uIGNhbm5vdCBiZSB1bmRvbmUuYCxcclxuICAgICAgY29uZmlybVRleHQ6ICdEZWxldGUnLFxyXG4gICAgICBjYW5jZWxUZXh0OiAnQ2FuY2VsJyxcclxuICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiAnd2FybicsXHJcbiAgICAgIGljb246ICdkZWxldGVfZm9yZXZlcicsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW5zIGEgZGlhbG9nIHdpdGggYW4gaW5wdXQgZmllbGRcclxuICAgKiBAcGFyYW0gZGF0YSBDb25maWd1cmF0aW9uIGZvciB0aGUgaW5wdXQgZGlhbG9nXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBpbnB1dCB2YWx1ZSBpZiBjb25maXJtZWQsIG51bGwgaWYgY2FuY2VsbGVkXHJcbiAgICovXHJcbiAgb3BlbklucHV0KGRhdGE6IElucHV0RGlhbG9nRGF0YSk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihJbnB1dERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzQwMHB4JyxcclxuICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcclxuICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Utility class for common dialog operations
3
+ * Provides reusable dialog configurations for consistency across the application
4
+ */
5
+ export class DialogUtils {
6
+ /**
7
+ * Show a logout confirmation dialog
8
+ * @param dialogService The DialogService instance
9
+ * @returns Observable that emits true if confirmed, false if cancelled
10
+ */
11
+ static confirmLogout(dialogService) {
12
+ return dialogService.open({
13
+ title: 'Logout',
14
+ message: 'Are you sure you want to logout?',
15
+ confirmText: 'Logout',
16
+ cancelText: 'Cancel',
17
+ icon: 'logout',
18
+ confirmButtonColor: 'warn',
19
+ });
20
+ }
21
+ /**
22
+ * Show a reset confirmation dialog
23
+ * @param dialogService The DialogService instance
24
+ * @param itemName Optional name of what is being reset (default: 'preferences')
25
+ * @returns Observable that emits true if confirmed, false if cancelled
26
+ */
27
+ static confirmReset(dialogService, itemName = 'preferences') {
28
+ return dialogService.open({
29
+ title: 'Reset to Defaults',
30
+ message: `Are you sure you want to reset ${itemName} to default settings? This action cannot be undone.`,
31
+ confirmText: 'Reset',
32
+ cancelText: 'Cancel',
33
+ icon: 'restart_alt',
34
+ confirmButtonColor: 'warn',
35
+ });
36
+ }
37
+ /**
38
+ * Show a delete confirmation dialog
39
+ * @param dialogService The DialogService instance
40
+ * @param itemName Name of the item being deleted
41
+ * @returns Observable that emits true if confirmed, false if cancelled
42
+ */
43
+ static confirmDelete(dialogService, itemName = 'this item') {
44
+ return dialogService.open({
45
+ title: 'Confirm Delete',
46
+ message: `Are you sure you want to delete ${itemName}? This action cannot be undone.`,
47
+ confirmText: 'Delete',
48
+ cancelText: 'Cancel',
49
+ confirmButtonColor: 'warn',
50
+ icon: 'delete_forever',
51
+ });
52
+ }
53
+ /**
54
+ * Show a clear all confirmation dialog
55
+ * @param dialogService The DialogService instance
56
+ * @param itemName Name of what is being cleared (e.g., 'chat history', 'all sessions')
57
+ * @returns Observable that emits true if confirmed, false if cancelled
58
+ */
59
+ static confirmClearAll(dialogService, itemName = 'all items') {
60
+ return dialogService.open({
61
+ title: 'Clear All',
62
+ message: `Are you sure you want to clear ${itemName}? This action cannot be undone.`,
63
+ confirmText: 'Clear All',
64
+ cancelText: 'Cancel',
65
+ confirmButtonColor: 'warn',
66
+ icon: 'delete_sweep',
67
+ });
68
+ }
69
+ /**
70
+ * Show a discard changes confirmation dialog
71
+ * @param dialogService The DialogService instance
72
+ * @returns Observable that emits true if confirmed, false if cancelled
73
+ */
74
+ static confirmDiscardChanges(dialogService) {
75
+ return dialogService.open({
76
+ title: 'Discard Changes',
77
+ message: 'You have unsaved changes. Are you sure you want to discard them?',
78
+ confirmText: 'Discard',
79
+ cancelText: 'Keep Editing',
80
+ confirmButtonColor: 'warn',
81
+ icon: 'warning',
82
+ });
83
+ }
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9vaGJvdC9zcmMvbGliL3NoYXJlZC9kaWFsb2cvZGlhbG9nLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBOzs7R0FHRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBQ3BCOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQTRCO1FBQzdDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztZQUN0QixLQUFLLEVBQUUsUUFBUTtZQUNmLE9BQU8sRUFBRSxrQ0FBa0M7WUFDM0MsV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLFFBQVE7WUFDcEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxrQkFBa0IsRUFBRSxNQUFNO1NBQzdCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQ2YsYUFBNEIsRUFDNUIsV0FBbUIsYUFBYTtRQUVoQyxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDdEIsS0FBSyxFQUFFLG1CQUFtQjtZQUMxQixPQUFPLEVBQUUsa0NBQWtDLFFBQVEscURBQXFEO1lBQ3hHLFdBQVcsRUFBRSxPQUFPO1lBQ3BCLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLElBQUksRUFBRSxhQUFhO1lBQ25CLGtCQUFrQixFQUFFLE1BQU07U0FDN0IsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FDaEIsYUFBNEIsRUFDNUIsV0FBbUIsV0FBVztRQUU5QixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDdEIsS0FBSyxFQUFFLGdCQUFnQjtZQUN2QixPQUFPLEVBQUUsbUNBQW1DLFFBQVEsaUNBQWlDO1lBQ3JGLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLGtCQUFrQixFQUFFLE1BQU07WUFDMUIsSUFBSSxFQUFFLGdCQUFnQjtTQUN6QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUNsQixhQUE0QixFQUM1QixXQUFtQixXQUFXO1FBRTlCLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztZQUN0QixLQUFLLEVBQUUsV0FBVztZQUNsQixPQUFPLEVBQUUsa0NBQWtDLFFBQVEsaUNBQWlDO1lBQ3BGLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLGtCQUFrQixFQUFFLE1BQU07WUFDMUIsSUFBSSxFQUFFLGNBQWM7U0FDdkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsYUFBNEI7UUFDckQsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ3RCLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsT0FBTyxFQUFFLGtFQUFrRTtZQUMzRSxXQUFXLEVBQUUsU0FBUztZQUN0QixVQUFVLEVBQUUsY0FBYztZQUMxQixrQkFBa0IsRUFBRSxNQUFNO1lBQzFCLElBQUksRUFBRSxTQUFTO1NBQ2xCLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuLyoqXHJcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIGNvbW1vbiBkaWFsb2cgb3BlcmF0aW9uc1xyXG4gKiBQcm92aWRlcyByZXVzYWJsZSBkaWFsb2cgY29uZmlndXJhdGlvbnMgZm9yIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgYXBwbGljYXRpb25cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dVdGlscyB7XHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBsb2dvdXQgY29uZmlybWF0aW9uIGRpYWxvZ1xyXG4gICAgICogQHBhcmFtIGRpYWxvZ1NlcnZpY2UgVGhlIERpYWxvZ1NlcnZpY2UgaW5zdGFuY2VcclxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0cnVlIGlmIGNvbmZpcm1lZCwgZmFsc2UgaWYgY2FuY2VsbGVkXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjb25maXJtTG9nb3V0KGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gZGlhbG9nU2VydmljZS5vcGVuKHtcclxuICAgICAgICAgICAgdGl0bGU6ICdMb2dvdXQnLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGxvZ291dD8nLFxyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogJ0xvZ291dCcsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6ICdDYW5jZWwnLFxyXG4gICAgICAgICAgICBpY29uOiAnbG9nb3V0JyxcclxuICAgICAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiAnd2FybicsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IGEgcmVzZXQgY29uZmlybWF0aW9uIGRpYWxvZ1xyXG4gICAgICogQHBhcmFtIGRpYWxvZ1NlcnZpY2UgVGhlIERpYWxvZ1NlcnZpY2UgaW5zdGFuY2VcclxuICAgICAqIEBwYXJhbSBpdGVtTmFtZSBPcHRpb25hbCBuYW1lIG9mIHdoYXQgaXMgYmVpbmcgcmVzZXQgKGRlZmF1bHQ6ICdwcmVmZXJlbmNlcycpXHJcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdHJ1ZSBpZiBjb25maXJtZWQsIGZhbHNlIGlmIGNhbmNlbGxlZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY29uZmlybVJlc2V0KFxyXG4gICAgICAgIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgaXRlbU5hbWU6IHN0cmluZyA9ICdwcmVmZXJlbmNlcydcclxuICAgICk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBkaWFsb2dTZXJ2aWNlLm9wZW4oe1xyXG4gICAgICAgICAgICB0aXRsZTogJ1Jlc2V0IHRvIERlZmF1bHRzJyxcclxuICAgICAgICAgICAgbWVzc2FnZTogYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXNldCAke2l0ZW1OYW1lfSB0byBkZWZhdWx0IHNldHRpbmdzPyBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLmAsXHJcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiAnUmVzZXQnLFxyXG4gICAgICAgICAgICBjYW5jZWxUZXh0OiAnQ2FuY2VsJyxcclxuICAgICAgICAgICAgaWNvbjogJ3Jlc3RhcnRfYWx0JyxcclxuICAgICAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiAnd2FybicsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IGEgZGVsZXRlIGNvbmZpcm1hdGlvbiBkaWFsb2dcclxuICAgICAqIEBwYXJhbSBkaWFsb2dTZXJ2aWNlIFRoZSBEaWFsb2dTZXJ2aWNlIGluc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0gaXRlbU5hbWUgTmFtZSBvZiB0aGUgaXRlbSBiZWluZyBkZWxldGVkXHJcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdHJ1ZSBpZiBjb25maXJtZWQsIGZhbHNlIGlmIGNhbmNlbGxlZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY29uZmlybURlbGV0ZShcclxuICAgICAgICBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIGl0ZW1OYW1lOiBzdHJpbmcgPSAndGhpcyBpdGVtJ1xyXG4gICAgKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZ1NlcnZpY2Uub3Blbih7XHJcbiAgICAgICAgICAgIHRpdGxlOiAnQ29uZmlybSBEZWxldGUnLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSAke2l0ZW1OYW1lfT8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS5gLFxyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogJ0RlbGV0ZScsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6ICdDYW5jZWwnLFxyXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6ICd3YXJuJyxcclxuICAgICAgICAgICAgaWNvbjogJ2RlbGV0ZV9mb3JldmVyJyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBjbGVhciBhbGwgY29uZmlybWF0aW9uIGRpYWxvZ1xyXG4gICAgICogQHBhcmFtIGRpYWxvZ1NlcnZpY2UgVGhlIERpYWxvZ1NlcnZpY2UgaW5zdGFuY2VcclxuICAgICAqIEBwYXJhbSBpdGVtTmFtZSBOYW1lIG9mIHdoYXQgaXMgYmVpbmcgY2xlYXJlZCAoZS5nLiwgJ2NoYXQgaGlzdG9yeScsICdhbGwgc2Vzc2lvbnMnKVxyXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRydWUgaWYgY29uZmlybWVkLCBmYWxzZSBpZiBjYW5jZWxsZWRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNvbmZpcm1DbGVhckFsbChcclxuICAgICAgICBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIGl0ZW1OYW1lOiBzdHJpbmcgPSAnYWxsIGl0ZW1zJ1xyXG4gICAgKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZ1NlcnZpY2Uub3Blbih7XHJcbiAgICAgICAgICAgIHRpdGxlOiAnQ2xlYXIgQWxsJyxcclxuICAgICAgICAgICAgbWVzc2FnZTogYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbGVhciAke2l0ZW1OYW1lfT8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS5gLFxyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogJ0NsZWFyIEFsbCcsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6ICdDYW5jZWwnLFxyXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6ICd3YXJuJyxcclxuICAgICAgICAgICAgaWNvbjogJ2RlbGV0ZV9zd2VlcCcsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IGEgZGlzY2FyZCBjaGFuZ2VzIGNvbmZpcm1hdGlvbiBkaWFsb2dcclxuICAgICAqIEBwYXJhbSBkaWFsb2dTZXJ2aWNlIFRoZSBEaWFsb2dTZXJ2aWNlIGluc3RhbmNlXHJcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdHJ1ZSBpZiBjb25maXJtZWQsIGZhbHNlIGlmIGNhbmNlbGxlZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY29uZmlybURpc2NhcmRDaGFuZ2VzKGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gZGlhbG9nU2VydmljZS5vcGVuKHtcclxuICAgICAgICAgICAgdGl0bGU6ICdEaXNjYXJkIENoYW5nZXMnLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiAnWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzY2FyZCB0aGVtPycsXHJcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiAnRGlzY2FyZCcsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6ICdLZWVwIEVkaXRpbmcnLFxyXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6ICd3YXJuJyxcclxuICAgICAgICAgICAgaWNvbjogJ3dhcm5pbmcnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuIl19
@@ -0,0 +1,29 @@
1
+ import { Component, ContentChildren, ViewChild, } from '@angular/core';
2
+ import { MenuItem } from '../menu-item/menu-item.component';
3
+ import * as i0 from "@angular/core";
4
+ export class DropdownMenu {
5
+ ngAfterContentInit() {
6
+ // Subscribe to all menu item selections
7
+ this.menuItems.forEach((item) => {
8
+ item.selected.subscribe(() => {
9
+ this.close();
10
+ });
11
+ });
12
+ }
13
+ close() {
14
+ this.detailsRef.nativeElement.open = false;
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropdownMenu, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DropdownMenu, isStandalone: true, selector: "app-dropdown-menu", queries: [{ propertyName: "menuItems", predicate: MenuItem }], viewQueries: [{ propertyName: "detailsRef", first: true, predicate: ["details"], descendants: true }], ngImport: i0, template: "<details class=\"dropdown-menu\" #details>\r\n <summary role=\"button\" class=\"dropdown-trigger\">\r\n <ng-content select=\"[trigger]\"></ng-content>\r\n </summary>\r\n <ul class=\"dropdown-list\">\r\n <ng-content></ng-content>\r\n </ul>\r\n</details>\r\n\r\n<!-- ussage example:\r\n<app-dropdown-menu>\r\n <span trigger>\u2630 Menu</span>\r\n\r\n <app-menu-item href=\"/profile\" (selected)=\"doSomething('profile')\">\r\n My Profile\r\n </app-menu-item>\r\n \r\n <app-menu-item href=\"/settings\" (selected)=\"doSomething('settings')\">\r\n Settings\r\n </app-menu-item>\r\n \r\n <app-menu-item href=\"#\" (selected)=\"logout()\">\r\n Logout\r\n </app-menu-item>\r\n</app-dropdown-menu> -->\r\n\r\n<!-- \r\n Note: The above usage example is commented out to avoid rendering issues.\r\n It demonstrates how to use the DropdownMenu component with MenuItem components as options.\r\n-->\r\n", styles: [".dropdown-menu{position:relative;display:inline-block;margin:0;padding:0}.dropdown-menu summary{list-style:none;cursor:pointer;outline:none}.dropdown-menu summary::-webkit-details-marker{display:none}.dropdown-list{position:absolute;top:100%;left:0;margin:8px 0 0;padding:8px 0;width:180px;background:var(--background-color);border-radius:6px;box-shadow:var(--border-shadow-color);z-index:1000;list-style:none}.dropdown-list:before{content:\"\";position:absolute;top:-6px;left:16px;width:0;height:0;border:6px solid transparent;border-bottom-color:var(--background-color)}.dropdown-list li a{display:block;padding:8px 16px;color:var(--primary-color);text-decoration:none}.dropdown-list li a:hover{background:var(--red);color:var(--secondary-color)}\n"] }); }
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropdownMenu, decorators: [{
20
+ type: Component,
21
+ args: [{ selector: 'app-dropdown-menu', standalone: true, imports: [], template: "<details class=\"dropdown-menu\" #details>\r\n <summary role=\"button\" class=\"dropdown-trigger\">\r\n <ng-content select=\"[trigger]\"></ng-content>\r\n </summary>\r\n <ul class=\"dropdown-list\">\r\n <ng-content></ng-content>\r\n </ul>\r\n</details>\r\n\r\n<!-- ussage example:\r\n<app-dropdown-menu>\r\n <span trigger>\u2630 Menu</span>\r\n\r\n <app-menu-item href=\"/profile\" (selected)=\"doSomething('profile')\">\r\n My Profile\r\n </app-menu-item>\r\n \r\n <app-menu-item href=\"/settings\" (selected)=\"doSomething('settings')\">\r\n Settings\r\n </app-menu-item>\r\n \r\n <app-menu-item href=\"#\" (selected)=\"logout()\">\r\n Logout\r\n </app-menu-item>\r\n</app-dropdown-menu> -->\r\n\r\n<!-- \r\n Note: The above usage example is commented out to avoid rendering issues.\r\n It demonstrates how to use the DropdownMenu component with MenuItem components as options.\r\n-->\r\n", styles: [".dropdown-menu{position:relative;display:inline-block;margin:0;padding:0}.dropdown-menu summary{list-style:none;cursor:pointer;outline:none}.dropdown-menu summary::-webkit-details-marker{display:none}.dropdown-list{position:absolute;top:100%;left:0;margin:8px 0 0;padding:8px 0;width:180px;background:var(--background-color);border-radius:6px;box-shadow:var(--border-shadow-color);z-index:1000;list-style:none}.dropdown-list:before{content:\"\";position:absolute;top:-6px;left:16px;width:0;height:0;border:6px solid transparent;border-bottom-color:var(--background-color)}.dropdown-list li a{display:block;padding:8px 16px;color:var(--primary-color);text-decoration:none}.dropdown-list li a:hover{background:var(--red);color:var(--secondary-color)}\n"] }]
22
+ }], propDecorators: { detailsRef: [{
23
+ type: ViewChild,
24
+ args: ['details']
25
+ }], menuItems: [{
26
+ type: ContentChildren,
27
+ args: [MenuItem]
28
+ }] } });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvc2hhcmVkL2Ryb3Bkb3duLW1lbnUvZHJvcGRvd24tbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvc2hhcmVkL2Ryb3Bkb3duLW1lbnUvZHJvcGRvd24tbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULGVBQWUsRUFHZixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQVM1RCxNQUFNLE9BQU8sWUFBWTtJQUt2QixrQkFBa0I7UUFDaEIsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMzQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQzdDLENBQUM7K0dBaEJVLFlBQVk7bUdBQVosWUFBWSx1R0FHTixRQUFRLG9JQ3BCM0IsMDVCQThCQTs7NEZEYmEsWUFBWTtrQkFQeEIsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLEVBQUU7OEJBS1csVUFBVTtzQkFBL0IsU0FBUzt1QkFBQyxTQUFTO2dCQUVPLFNBQVM7c0JBQW5DLGVBQWU7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi9tZW51LWl0ZW0vbWVudS1pdGVtLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1kcm9wZG93bi1tZW51JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi1tZW51LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZHJvcGRvd24tbWVudS5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wZG93bk1lbnUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcclxuICBAVmlld0NoaWxkKCdkZXRhaWxzJykgZGV0YWlsc1JlZiE6IEVsZW1lbnRSZWY8SFRNTERldGFpbHNFbGVtZW50PjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihNZW51SXRlbSkgbWVudUl0ZW1zITogUXVlcnlMaXN0PE1lbnVJdGVtPjtcclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgLy8gU3Vic2NyaWJlIHRvIGFsbCBtZW51IGl0ZW0gc2VsZWN0aW9uc1xyXG4gICAgdGhpcy5tZW51SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLnNlbGVjdGVkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRldGFpbHNSZWYubmF0aXZlRWxlbWVudC5vcGVuID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIjxkZXRhaWxzIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiICNkZXRhaWxzPlxyXG4gIDxzdW1tYXJ5IHJvbGU9XCJidXR0b25cIiBjbGFzcz1cImRyb3Bkb3duLXRyaWdnZXJcIj5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0cmlnZ2VyXVwiPjwvbmctY29udGVudD5cclxuICA8L3N1bW1hcnk+XHJcbiAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbGlzdFwiPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvdWw+XHJcbjwvZGV0YWlscz5cclxuXHJcbjwhLS0gdXNzYWdlIGV4YW1wbGU6XHJcbjxhcHAtZHJvcGRvd24tbWVudT5cclxuICA8c3BhbiB0cmlnZ2VyPuKYsCBNZW51PC9zcGFuPlxyXG5cclxuICA8YXBwLW1lbnUtaXRlbSBocmVmPVwiL3Byb2ZpbGVcIiAoc2VsZWN0ZWQpPVwiZG9Tb21ldGhpbmcoJ3Byb2ZpbGUnKVwiPlxyXG4gICAgTXkgUHJvZmlsZVxyXG4gIDwvYXBwLW1lbnUtaXRlbT5cclxuICBcclxuICA8YXBwLW1lbnUtaXRlbSBocmVmPVwiL3NldHRpbmdzXCIgKHNlbGVjdGVkKT1cImRvU29tZXRoaW5nKCdzZXR0aW5ncycpXCI+XHJcbiAgICBTZXR0aW5nc1xyXG4gIDwvYXBwLW1lbnUtaXRlbT5cclxuICBcclxuICA8YXBwLW1lbnUtaXRlbSBocmVmPVwiI1wiIChzZWxlY3RlZCk9XCJsb2dvdXQoKVwiPlxyXG4gICAgTG9nb3V0XHJcbiAgPC9hcHAtbWVudS1pdGVtPlxyXG48L2FwcC1kcm9wZG93bi1tZW51PiAtLT5cclxuXHJcbjwhLS0gXHJcbiAgTm90ZTogVGhlIGFib3ZlIHVzYWdlIGV4YW1wbGUgaXMgY29tbWVudGVkIG91dCB0byBhdm9pZCByZW5kZXJpbmcgaXNzdWVzLlxyXG4gIEl0IGRlbW9uc3RyYXRlcyBob3cgdG8gdXNlIHRoZSBEcm9wZG93bk1lbnUgY29tcG9uZW50IHdpdGggTWVudUl0ZW0gY29tcG9uZW50cyBhcyBvcHRpb25zLlxyXG4tLT5cclxuIl19
@@ -0,0 +1,38 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import { FormsModule } from '@angular/forms';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/dialog";
8
+ import * as i2 from "@angular/material/button";
9
+ import * as i3 from "@angular/forms";
10
+ export class InputDialogComponent {
11
+ constructor(dialogRef, data) {
12
+ this.dialogRef = dialogRef;
13
+ this.data = data;
14
+ this.value = data.initialValue;
15
+ // Set defaults
16
+ this.data.confirmText = this.data.confirmText || 'Save';
17
+ this.data.cancelText = this.data.cancelText || 'Cancel';
18
+ this.data.placeholder = this.data.placeholder || 'Enter value...';
19
+ }
20
+ onCancel() {
21
+ this.dialogRef.close(null);
22
+ }
23
+ onConfirm() {
24
+ if (this.value && this.value.trim()) {
25
+ this.dialogRef.close(this.value.trim());
26
+ }
27
+ }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
29
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: InputDialogComponent, isStandalone: true, selector: "app-input-dialog", ngImport: i0, template: "<div class=\"dialog-container\">\r\n <h2 mat-dialog-title>{{ data.title }}</h2>\r\n <mat-dialog-content>\r\n <p class=\"dialog-message\">{{ data.message }}</p>\r\n <div class=\"input-group\">\r\n <input type=\"text\" class=\"dialog-input\" [(ngModel)]=\"value\" [placeholder]=\"data.placeholder\"\r\n (keyup.enter)=\"onConfirm()\" focus=\"true\" />\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-button class=\"cancel-btn\" (click)=\"onCancel()\">{{ data.cancelText }}</button>\r\n <button mat-flat-button color=\"primary\" class=\"confirm-btn\" [disabled]=\"!value.trim()\" (click)=\"onConfirm()\">\r\n {{ data.confirmText }}\r\n </button>\r\n </mat-dialog-actions>\r\n</div>", styles: [".dialog-container{padding:8px}.dialog-message{color:var(--secondary-text-color);margin-bottom:20px;font-size:14px}.input-group{margin-bottom:20px}.dialog-input{width:100%;padding:12px 16px;border:1px solid var(--border-color);border-radius:8px;background:var(--input-bg);color:var(--text-color);font-size:14px;font-family:inherit;transition:all .2s;box-sizing:border-box}.dialog-input:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 2px #2196f31a;background:#fff}.cancel-btn{border-radius:8px;font-weight:500}.confirm-btn{border-radius:8px;font-weight:500;margin-left:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputDialogComponent, decorators: [{
32
+ type: Component,
33
+ args: [{ selector: 'app-input-dialog', standalone: true, imports: [CommonModule, MatDialogModule, MatButtonModule, FormsModule], template: "<div class=\"dialog-container\">\r\n <h2 mat-dialog-title>{{ data.title }}</h2>\r\n <mat-dialog-content>\r\n <p class=\"dialog-message\">{{ data.message }}</p>\r\n <div class=\"input-group\">\r\n <input type=\"text\" class=\"dialog-input\" [(ngModel)]=\"value\" [placeholder]=\"data.placeholder\"\r\n (keyup.enter)=\"onConfirm()\" focus=\"true\" />\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-button class=\"cancel-btn\" (click)=\"onCancel()\">{{ data.cancelText }}</button>\r\n <button mat-flat-button color=\"primary\" class=\"confirm-btn\" [disabled]=\"!value.trim()\" (click)=\"onConfirm()\">\r\n {{ data.confirmText }}\r\n </button>\r\n </mat-dialog-actions>\r\n</div>", styles: [".dialog-container{padding:8px}.dialog-message{color:var(--secondary-text-color);margin-bottom:20px;font-size:14px}.input-group{margin-bottom:20px}.dialog-input{width:100%;padding:12px 16px;border:1px solid var(--border-color);border-radius:8px;background:var(--input-bg);color:var(--text-color);font-size:14px;font-family:inherit;transition:all .2s;box-sizing:border-box}.dialog-input:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 2px #2196f31a;background:#fff}.cancel-btn{border-radius:8px;font-weight:500}.confirm-btn{border-radius:8px;font-weight:500;margin-left:8px}\n"] }]
34
+ }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
35
+ type: Inject,
36
+ args: [MAT_DIALOG_DATA]
37
+ }] }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9zaGFyZWQvaW5wdXQtZGlhbG9nL2lucHV0LWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvc2hhcmVkL2lucHV0LWRpYWxvZy9pbnB1dC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBa0I3QyxNQUFNLE9BQU8sb0JBQW9CO0lBRzdCLFlBQ1csU0FBNkMsRUFDcEIsSUFBcUI7UUFEOUMsY0FBUyxHQUFULFNBQVMsQ0FBb0M7UUFDcEIsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFFckQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQy9CLGVBQWU7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUM7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLGdCQUFnQixDQUFDO0lBQ3RFLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7U0FDM0M7SUFDTCxDQUFDOytHQXRCUSxvQkFBb0IsOENBS2pCLGVBQWU7bUdBTGxCLG9CQUFvQiw0RUN0QmpDLGl6QkFlTSw2b0JER1EsWUFBWSw4QkFBRSxlQUFlLHliQUFFLGVBQWUsMk5BQUUsV0FBVzs7NEZBSTVELG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDSSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsV0FBVyxDQUFDOzswQkFTakUsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbnB1dERpYWxvZ0RhdGEge1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIGluaXRpYWxWYWx1ZTogc3RyaW5nO1xyXG4gICAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbiAgICBjb25maXJtVGV4dD86IHN0cmluZztcclxuICAgIGNhbmNlbFRleHQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtaW5wdXQtZGlhbG9nJyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXREaWFsb2dNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9pbnB1dC1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIElucHV0RGlhbG9nQ29tcG9uZW50IHtcclxuICAgIHB1YmxpYyB2YWx1ZTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxJbnB1dERpYWxvZ0NvbXBvbmVudD4sXHJcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBJbnB1dERpYWxvZ0RhdGEsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YS5pbml0aWFsVmFsdWU7XHJcbiAgICAgICAgLy8gU2V0IGRlZmF1bHRzXHJcbiAgICAgICAgdGhpcy5kYXRhLmNvbmZpcm1UZXh0ID0gdGhpcy5kYXRhLmNvbmZpcm1UZXh0IHx8ICdTYXZlJztcclxuICAgICAgICB0aGlzLmRhdGEuY2FuY2VsVGV4dCA9IHRoaXMuZGF0YS5jYW5jZWxUZXh0IHx8ICdDYW5jZWwnO1xyXG4gICAgICAgIHRoaXMuZGF0YS5wbGFjZWhvbGRlciA9IHRoaXMuZGF0YS5wbGFjZWhvbGRlciB8fCAnRW50ZXIgdmFsdWUuLi4nO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FuY2VsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ29uZmlybSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLnRyaW0oKSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLnZhbHVlLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkaWFsb2ctY29udGFpbmVyXCI+XHJcbiAgICA8aDIgbWF0LWRpYWxvZy10aXRsZT57eyBkYXRhLnRpdGxlIH19PC9oMj5cclxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJkaWFsb2ctbWVzc2FnZVwiPnt7IGRhdGEubWVzc2FnZSB9fTwvcD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJkaWFsb2ctaW5wdXRcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgW3BsYWNlaG9sZGVyXT1cImRhdGEucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQ29uZmlybSgpXCIgZm9jdXM9XCJ0cnVlXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gICAgPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idG5cIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPnt7IGRhdGEuY2FuY2VsVGV4dCB9fTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiY29uZmlybS1idG5cIiBbZGlzYWJsZWRdPVwiIXZhbHVlLnRyaW0oKVwiIChjbGljayk9XCJvbkNvbmZpcm0oKVwiPlxyXG4gICAgICAgICAgICB7eyBkYXRhLmNvbmZpcm1UZXh0IH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuPC9kaXY+Il19
@@ -0,0 +1,24 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class MenuItem {
4
+ constructor() {
5
+ this.href = '#';
6
+ this.selected = new EventEmitter();
7
+ }
8
+ onClick(event) {
9
+ // Optional: prevent default if used for actions, not navigation
10
+ // event.preventDefault();
11
+ this.selected.emit();
12
+ }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MenuItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MenuItem, isStandalone: true, selector: "app-menu-item", inputs: { href: "href" }, outputs: { selected: "selected" }, ngImport: i0, template: "<li>\r\n <a [href]=\"href\" (click)=\"onClick($event)\">\r\n <ng-content></ng-content>\r\n </a>\r\n</li>\r\n", styles: [""] }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MenuItem, decorators: [{
17
+ type: Component,
18
+ args: [{ selector: 'app-menu-item', standalone: true, imports: [], template: "<li>\r\n <a [href]=\"href\" (click)=\"onClick($event)\">\r\n <ng-content></ng-content>\r\n </a>\r\n</li>\r\n" }]
19
+ }], propDecorators: { href: [{
20
+ type: Input
21
+ }], selected: [{
22
+ type: Output
23
+ }] } });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9zaGFyZWQvbWVudS1pdGVtL21lbnUtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvc2hhcmVkL21lbnUtaXRlbS9tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTdkUsTUFBTSxPQUFPLFFBQVE7SUFQckI7UUFRVyxTQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ1YsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7S0FRL0M7SUFOQyxPQUFPLENBQUMsS0FBWTtRQUNsQixnRUFBZ0U7UUFDaEUsMEJBQTBCO1FBRTFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQzsrR0FUVSxRQUFRO21HQUFSLFFBQVEsc0lDVHJCLG1IQUtBOzs0RkRJYSxRQUFRO2tCQVBwQixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsRUFBRTs4QkFLRixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1tZW51LWl0ZW0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW10sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUtaXRlbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL21lbnUtaXRlbS5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51SXRlbSB7XHJcbiAgQElucHV0KCkgaHJlZiA9ICcjJztcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIG9uQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAvLyBPcHRpb25hbDogcHJldmVudCBkZWZhdWx0IGlmIHVzZWQgZm9yIGFjdGlvbnMsIG5vdCBuYXZpZ2F0aW9uXHJcbiAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCgpO1xyXG4gIH1cclxufVxyXG4iLCI8bGk+XHJcbiAgPGEgW2hyZWZdPVwiaHJlZlwiIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIj5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICA8L2E+XHJcbjwvbGk+XHJcbiJdfQ==
@@ -0,0 +1,27 @@
1
+ import { Pipe, inject } from '@angular/core';
2
+ import { DomSanitizer } from '@angular/platform-browser';
3
+ import { MarkdownService } from '../../core/services/markdown.service';
4
+ import * as i0 from "@angular/core";
5
+ export class MarkdownPipe {
6
+ constructor() {
7
+ this.markdownService = inject(MarkdownService);
8
+ this.sanitizer = inject(DomSanitizer);
9
+ }
10
+ transform(value) {
11
+ if (!value)
12
+ return '';
13
+ const html = this.markdownService.convert(value);
14
+ return this.sanitizer.bypassSecurityTrustHtml(html);
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MarkdownPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
17
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: MarkdownPipe, isStandalone: true, name: "Markdown" }); }
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MarkdownPipe, decorators: [{
20
+ type: Pipe,
21
+ args: [{
22
+ name: 'Markdown',
23
+ standalone: true,
24
+ pure: true,
25
+ }]
26
+ }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLW1hcmtkb3duLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvc2hhcmVkL3BpcGVzL3NpbXBsZS1tYXJrZG93bi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOztBQU92RSxNQUFNLE9BQU8sWUFBWTtJQUx6QjtRQU1VLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLGNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7S0FPMUM7SUFMQyxTQUFTLENBQUMsS0FBZ0M7UUFDeEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQzsrR0FSVSxZQUFZOzZHQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBTHhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUUsSUFBSTtpQkFDWCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IE1hcmtkb3duU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbWFya2Rvd24uc2VydmljZSc7XHJcblxyXG5AUGlwZSh7XHJcbiAgbmFtZTogJ01hcmtkb3duJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHB1cmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXJrZG93blBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICBwcml2YXRlIG1hcmtkb3duU2VydmljZSA9IGluamVjdChNYXJrZG93blNlcnZpY2UpO1xyXG4gIHByaXZhdGUgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XHJcblxyXG4gIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IFNhZmVIdG1sIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcclxuICAgIGNvbnN0IGh0bWwgPSB0aGlzLm1hcmtkb3duU2VydmljZS5jb252ZXJ0KHZhbHVlKTtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,43 @@
1
+ import { Component, inject } from '@angular/core';
2
+ import { MatIconModule } from '@angular/material/icon';
3
+ import { CommonModule } from '@angular/common';
4
+ import { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/material/icon";
7
+ import * as i2 from "@angular/common";
8
+ export class SnackBar {
9
+ constructor() {
10
+ this.snackBarRef = inject(MatSnackBarRef);
11
+ this.data = inject(MAT_SNACK_BAR_DATA);
12
+ this.message = null;
13
+ this.type = 'error';
14
+ }
15
+ ngOnInit() {
16
+ this.message = this.data.message;
17
+ this.type = this.data.type || 'error';
18
+ }
19
+ close() {
20
+ this.snackBarRef.dismiss();
21
+ }
22
+ get icon() {
23
+ switch (this.type) {
24
+ case 'success':
25
+ return 'check_circle';
26
+ case 'error':
27
+ return 'error';
28
+ case 'warn':
29
+ return 'warning';
30
+ case 'info':
31
+ return 'info';
32
+ default:
33
+ return 'info';
34
+ }
35
+ }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SnackBar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
37
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SnackBar, isStandalone: true, selector: "app-snackbar", ngImport: i0, template: "<div class=\"snackbar-message\" [ngClass]=\"'type-' + type\">\r\n <div class=\"error-content\">\r\n <mat-icon class=\"alert-icon\">{{ icon }}</mat-icon>\r\n <span class=\"error-text\">{{ message }}</span>\r\n </div>\r\n <mat-icon class=\"close-icon\" (click)=\"close()\">close</mat-icon>\r\n</div>\r\n", styles: [".snackbar-message{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;border-radius:6px;color:var(--white);font-size:12px;box-shadow:var(--border-shadow-color);font-family:var(--font-family);width:100%;max-width:360px;box-sizing:border-box;background-color:var(--background-color);border:1px solid transparent}.snackbar-message.type-error{background-color:color-mix(in srgb,var(--red),var(--white) 60%);border-color:var(--red)}.snackbar-message.type-error .alert-icon{color:var(--red)}.snackbar-message.type-error .close-icon:hover{background-color:var(--red)}.snackbar-message.type-success{background-color:color-mix(in srgb,var(--green),var(--white) 60%);border-color:var(--green)}.snackbar-message.type-success .alert-icon{color:var(--green)}.snackbar-message.type-success .close-icon:hover{background-color:var(--green)}.snackbar-message.type-warn{background-color:color-mix(in srgb,var(--orange),var(--white) 60%);border-color:var(--orange)}.snackbar-message.type-warn .alert-icon{color:var(--orange)}.snackbar-message.type-warn .close-icon:hover{background-color:var(--orange)}.snackbar-message.type-info{background-color:color-mix(in srgb,var(--blue),var(--white) 60%);border-color:var(--blue)}.snackbar-message.type-info .alert-icon{color:var(--blue)}.snackbar-message.type-info .close-icon:hover{background-color:var(--blue)}.error-content{display:flex;align-items:center;gap:10px;min-width:0;flex:1}.alert-icon{font-size:18px;flex-shrink:0;display:flex;align-items:center}.error-text{flex:1;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--black)}.close-icon{color:var(--black);cursor:pointer;font-size:18px;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;opacity:.7;flex-shrink:0}.close-icon:hover{opacity:1;background-color:var(--red)}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SnackBar, decorators: [{
40
+ type: Component,
41
+ args: [{ selector: 'app-snackbar', standalone: true, imports: [MatIconModule, CommonModule], template: "<div class=\"snackbar-message\" [ngClass]=\"'type-' + type\">\r\n <div class=\"error-content\">\r\n <mat-icon class=\"alert-icon\">{{ icon }}</mat-icon>\r\n <span class=\"error-text\">{{ message }}</span>\r\n </div>\r\n <mat-icon class=\"close-icon\" (click)=\"close()\">close</mat-icon>\r\n</div>\r\n", styles: [".snackbar-message{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;border-radius:6px;color:var(--white);font-size:12px;box-shadow:var(--border-shadow-color);font-family:var(--font-family);width:100%;max-width:360px;box-sizing:border-box;background-color:var(--background-color);border:1px solid transparent}.snackbar-message.type-error{background-color:color-mix(in srgb,var(--red),var(--white) 60%);border-color:var(--red)}.snackbar-message.type-error .alert-icon{color:var(--red)}.snackbar-message.type-error .close-icon:hover{background-color:var(--red)}.snackbar-message.type-success{background-color:color-mix(in srgb,var(--green),var(--white) 60%);border-color:var(--green)}.snackbar-message.type-success .alert-icon{color:var(--green)}.snackbar-message.type-success .close-icon:hover{background-color:var(--green)}.snackbar-message.type-warn{background-color:color-mix(in srgb,var(--orange),var(--white) 60%);border-color:var(--orange)}.snackbar-message.type-warn .alert-icon{color:var(--orange)}.snackbar-message.type-warn .close-icon:hover{background-color:var(--orange)}.snackbar-message.type-info{background-color:color-mix(in srgb,var(--blue),var(--white) 60%);border-color:var(--blue)}.snackbar-message.type-info .alert-icon{color:var(--blue)}.snackbar-message.type-info .close-icon:hover{background-color:var(--blue)}.error-content{display:flex;align-items:center;gap:10px;min-width:0;flex:1}.alert-icon{font-size:18px;flex-shrink:0;display:flex;align-items:center}.error-text{flex:1;text-align:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--black)}.close-icon{color:var(--black);cursor:pointer;font-size:18px;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;opacity:.7;flex-shrink:0}.close-icon:hover{opacity:1;background-color:var(--red)}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}\n"] }]
42
+ }] });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9vaGJvdC9zcmMvbGliL3NoYXJlZC9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvc2hhcmVkL3NuYWNrYmFyL3NuYWNrYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBVWpGLE1BQU0sT0FBTyxRQUFRO0lBUHJCO1FBUVUsZ0JBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckMsU0FBSSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRW5DLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLFNBQUksR0FBa0IsT0FBTyxDQUFDO0tBeUJ0QztJQXZCQyxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQztJQUN4QyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxjQUFjLENBQUM7WUFDeEIsS0FBSyxPQUFPO2dCQUNWLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLEtBQUssTUFBTTtnQkFDVCxPQUFPLFNBQVMsQ0FBQztZQUNuQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxNQUFNLENBQUM7WUFDaEI7Z0JBQ0UsT0FBTyxNQUFNLENBQUM7U0FDakI7SUFDSCxDQUFDOytHQTdCVSxRQUFRO21HQUFSLFFBQVEsd0VDYnJCLHdUQU9BLHcrRERJWSxhQUFhLG1MQUFFLFlBQVk7OzRGQUUxQixRQUFRO2tCQVBwQixTQUFTOytCQUNFLGNBQWMsY0FHWixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1BVF9TTkFDS19CQVJfREFUQSwgTWF0U25hY2tCYXJSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBTbmFja0JhckVycm9yIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy9zbmFja2Jhci1lcnJvci50eXBlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNuYWNrYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc25hY2tiYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NuYWNrYmFyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTWF0SWNvbk1vZHVsZSwgQ29tbW9uTW9kdWxlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNuYWNrQmFyIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIHNuYWNrQmFyUmVmID0gaW5qZWN0KE1hdFNuYWNrQmFyUmVmKTtcclxuICBwcml2YXRlIGRhdGEgPSBpbmplY3QoTUFUX1NOQUNLX0JBUl9EQVRBKTtcclxuXHJcbiAgcHVibGljIG1lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyB0eXBlOiBTbmFja0JhckVycm9yID0gJ2Vycm9yJztcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSB0aGlzLmRhdGEubWVzc2FnZTtcclxuICAgIHRoaXMudHlwZSA9IHRoaXMuZGF0YS50eXBlIHx8ICdlcnJvcic7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpIHtcclxuICAgIHRoaXMuc25hY2tCYXJSZWYuZGlzbWlzcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGljb24oKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxyXG4gICAgICAgIHJldHVybiAnY2hlY2tfY2lyY2xlJztcclxuICAgICAgY2FzZSAnZXJyb3InOlxyXG4gICAgICAgIHJldHVybiAnZXJyb3InO1xyXG4gICAgICBjYXNlICd3YXJuJzpcclxuICAgICAgICByZXR1cm4gJ3dhcm5pbmcnO1xyXG4gICAgICBjYXNlICdpbmZvJzpcclxuICAgICAgICByZXR1cm4gJ2luZm8nO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnaW5mbyc7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbmFja2Jhci1tZXNzYWdlXCIgW25nQ2xhc3NdPVwiJ3R5cGUtJyArIHR5cGVcIj5cclxuICA8ZGl2IGNsYXNzPVwiZXJyb3ItY29udGVudFwiPlxyXG4gICAgPG1hdC1pY29uIGNsYXNzPVwiYWxlcnQtaWNvblwiPnt7IGljb24gfX08L21hdC1pY29uPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJlcnJvci10ZXh0XCI+e3sgbWVzc2FnZSB9fTwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8bWF0LWljb24gY2xhc3M9XCJjbG9zZS1pY29uXCIgKGNsaWNrKT1cImNsb3NlKClcIj5jbG9zZTwvbWF0LWljb24+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,46 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { MatSnackBar } from '@angular/material/snack-bar';
3
+ import { SnackBar } from './snackbar.component';
4
+ import { SnackbarUtils } from './snackbar.utils';
5
+ import * as i0 from "@angular/core";
6
+ export class SnackbarService {
7
+ constructor() {
8
+ this.snackBar = inject(MatSnackBar);
9
+ SnackbarUtils.init(this);
10
+ }
11
+ // Generic show method
12
+ show(message, duration, type) {
13
+ this.snackBar.openFromComponent(SnackBar, {
14
+ duration: duration,
15
+ data: { message, type },
16
+ horizontalPosition: 'end',
17
+ verticalPosition: 'bottom',
18
+ panelClass: [`snackbar-${type}`]
19
+ });
20
+ }
21
+ // Convenience methods
22
+ success(message, duration = 3000) {
23
+ this.show(message, duration, 'success');
24
+ }
25
+ warn(message, duration = 5000) {
26
+ this.show(message, duration, 'warn');
27
+ }
28
+ error(message, duration = 5000) {
29
+ this.show(message, duration, 'error');
30
+ }
31
+ info(message, duration = 4000) {
32
+ this.show(message, duration, 'info');
33
+ }
34
+ clear() {
35
+ this.snackBar.dismiss();
36
+ }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SnackbarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
38
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SnackbarService, providedIn: 'root' }); }
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SnackbarService, decorators: [{
41
+ type: Injectable,
42
+ args: [{
43
+ providedIn: 'root',
44
+ }]
45
+ }], ctorParameters: () => [] });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9zaGFyZWQvc25hY2tiYXIvc25hY2tiYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFXakQsTUFBTSxPQUFPLGVBQWU7SUFHMUI7UUFGUSxhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBR3JDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELHNCQUFzQjtJQUNkLElBQUksQ0FBQyxPQUFlLEVBQUUsUUFBZ0IsRUFBRSxJQUFtQjtRQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRTtZQUN4QyxRQUFRLEVBQUUsUUFBUTtZQUNsQixJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1lBQ3ZCLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsZ0JBQWdCLEVBQUUsUUFBUTtZQUMxQixVQUFVLEVBQUUsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsT0FBTyxDQUFDLE9BQWUsRUFBRSxXQUFtQixJQUFJO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxXQUFtQixJQUFJO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQWUsRUFBRSxXQUFtQixJQUFJO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxXQUFtQixJQUFJO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDMUIsQ0FBQzsrR0FyQ1UsZUFBZTttSEFBZixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBTbmFja0JhckVycm9yIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy9zbmFja2Jhci1lcnJvci50eXBlJztcclxuaW1wb3J0IHsgU25hY2tCYXIgfSBmcm9tICcuL3NuYWNrYmFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNuYWNrYmFyVXRpbHMgfSBmcm9tICcuL3NuYWNrYmFyLnV0aWxzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU25hY2tiYXJDb25maWcge1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBkdXJhdGlvbj86IG51bWJlcjtcclxuICB0eXBlOiBTbmFja0JhckVycm9yO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU25hY2tiYXJTZXJ2aWNlIHtcclxuICBwcml2YXRlIHNuYWNrQmFyID0gaW5qZWN0KE1hdFNuYWNrQmFyKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBTbmFja2JhclV0aWxzLmluaXQodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyBHZW5lcmljIHNob3cgbWV0aG9kXHJcbiAgcHJpdmF0ZSBzaG93KG1lc3NhZ2U6IHN0cmluZywgZHVyYXRpb246IG51bWJlciwgdHlwZTogU25hY2tCYXJFcnJvcikge1xyXG4gICAgdGhpcy5zbmFja0Jhci5vcGVuRnJvbUNvbXBvbmVudChTbmFja0Jhciwge1xyXG4gICAgICBkdXJhdGlvbjogZHVyYXRpb24sXHJcbiAgICAgIGRhdGE6IHsgbWVzc2FnZSwgdHlwZSB9LFxyXG4gICAgICBob3Jpem9udGFsUG9zaXRpb246ICdlbmQnLFxyXG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uOiAnYm90dG9tJyxcclxuICAgICAgcGFuZWxDbGFzczogW2BzbmFja2Jhci0ke3R5cGV9YF1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29udmVuaWVuY2UgbWV0aG9kc1xyXG4gIHN1Y2Nlc3MobWVzc2FnZTogc3RyaW5nLCBkdXJhdGlvbjogbnVtYmVyID0gMzAwMCkge1xyXG4gICAgdGhpcy5zaG93KG1lc3NhZ2UsIGR1cmF0aW9uLCAnc3VjY2VzcycpO1xyXG4gIH1cclxuXHJcbiAgd2FybihtZXNzYWdlOiBzdHJpbmcsIGR1cmF0aW9uOiBudW1iZXIgPSA1MDAwKSB7XHJcbiAgICB0aGlzLnNob3cobWVzc2FnZSwgZHVyYXRpb24sICd3YXJuJyk7XHJcbiAgfVxyXG5cclxuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGR1cmF0aW9uOiBudW1iZXIgPSA1MDAwKSB7XHJcbiAgICB0aGlzLnNob3cobWVzc2FnZSwgZHVyYXRpb24sICdlcnJvcicpO1xyXG4gIH1cclxuXHJcbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGR1cmF0aW9uOiBudW1iZXIgPSA0MDAwKSB7XHJcbiAgICB0aGlzLnNob3cobWVzc2FnZSwgZHVyYXRpb24sICdpbmZvJyk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuc25hY2tCYXIuZGlzbWlzcygpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Utility class for common snackbar operations
3
+ * Provides reusable snackbar configurations for consistency across the application
4
+ */
5
+ export class SnackbarUtils {
6
+ static { this.service = null; }
7
+ /**
8
+ * Initialize the utility with a SnackbarService instance
9
+ * @param service The SnackbarService instance
10
+ */
11
+ static init(service) {
12
+ this.service = service;
13
+ }
14
+ /**
15
+ * Show a success snackbar
16
+ * @param message The message to show
17
+ */
18
+ static success(message) {
19
+ this.service?.success(message);
20
+ }
21
+ /**
22
+ * Show an error snackbar
23
+ * @param message The message to show
24
+ */
25
+ static error(message) {
26
+ this.service?.error(message);
27
+ }
28
+ /**
29
+ * Show a warning snackbar
30
+ * @param message The message to show
31
+ */
32
+ static warn(message) {
33
+ this.service?.warn(message);
34
+ }
35
+ /**
36
+ * Show an info snackbar
37
+ * @param message The message to show
38
+ */
39
+ static info(message) {
40
+ this.service?.info(message);
41
+ }
42
+ }
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvc2hhcmVkL3NuYWNrYmFyL3NuYWNrYmFyLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7R0FHRztBQUNILE1BQU0sT0FBTyxhQUFhO2FBQ1AsWUFBTyxHQUEyQixJQUFJLENBQUM7SUFFdEQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUF3QjtRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFlO1FBQzFCLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQWU7UUFDeEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBZTtRQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFlO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTbmFja2JhclNlcnZpY2UgfSBmcm9tICcuL3NuYWNrYmFyLnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIGNvbW1vbiBzbmFja2JhciBvcGVyYXRpb25zXHJcbiAqIFByb3ZpZGVzIHJldXNhYmxlIHNuYWNrYmFyIGNvbmZpZ3VyYXRpb25zIGZvciBjb25zaXN0ZW5jeSBhY3Jvc3MgdGhlIGFwcGxpY2F0aW9uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU25hY2tiYXJVdGlscyB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBzZXJ2aWNlOiBTbmFja2JhclNlcnZpY2UgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemUgdGhlIHV0aWxpdHkgd2l0aCBhIFNuYWNrYmFyU2VydmljZSBpbnN0YW5jZVxyXG4gICAgICogQHBhcmFtIHNlcnZpY2UgVGhlIFNuYWNrYmFyU2VydmljZSBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5pdChzZXJ2aWNlOiBTbmFja2JhclNlcnZpY2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBhIHN1Y2Nlc3Mgc25hY2tiYXJcclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIHNob3dcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHN1Y2Nlc3MobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlPy5zdWNjZXNzKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBhbiBlcnJvciBzbmFja2JhclxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gc2hvd1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZXJyb3IobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlPy5lcnJvcihtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSB3YXJuaW5nIHNuYWNrYmFyXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBzaG93XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VydmljZT8ud2FybihtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYW4gaW5mbyBzbmFja2JhclxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gc2hvd1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5mbyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2U/LmluZm8obWVzc2FnZSk7XHJcbiAgICB9XHJcbn1cclxuIl19