@chat21/chat21-web-widget 5.1.33 → 5.1.34-rc1

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 (201) hide show
  1. package/.angular-mcp-cache/package.json +1 -0
  2. package/.cursor/angular18-accessibility-auditor-skill.md +442 -0
  3. package/.cursor/mcp.json +15 -0
  4. package/.github/workflows/docker-community-push-latest.yml +23 -13
  5. package/.github/workflows/docker-image-tag-community-tag-push.yml +22 -12
  6. package/.github/workflows/playwright.yml +27 -0
  7. package/CHANGELOG.md +130 -6
  8. package/Dockerfile +4 -5
  9. package/angular.json +24 -4
  10. package/docs/changelog/this-branch.md +36 -0
  11. package/env.sample +3 -2
  12. package/mocks/voice-websocket-mock/server.cjs +245 -0
  13. package/nginx.conf +22 -2
  14. package/package.json +10 -3
  15. package/playwright.config.ts +41 -0
  16. package/src/app/app.component.html +2 -2
  17. package/src/app/app.component.scss +25 -14
  18. package/src/app/app.component.spec.ts +21 -6
  19. package/src/app/app.component.ts +10 -9
  20. package/src/app/app.module.ts +15 -0
  21. package/src/app/component/conversation-detail/conversation/conversation.component.html +25 -11
  22. package/src/app/component/conversation-detail/conversation/conversation.component.scss +40 -2
  23. package/src/app/component/conversation-detail/conversation/conversation.component.spec.ts +644 -75
  24. package/src/app/component/conversation-detail/conversation/conversation.component.ts +100 -14
  25. package/src/app/component/conversation-detail/conversation-audio-recorder/conversation-audio-recorder.component.html +25 -13
  26. package/src/app/component/conversation-detail/conversation-audio-recorder/conversation-audio-recorder.component.spec.ts +123 -5
  27. package/src/app/component/conversation-detail/conversation-audio-recorder/conversation-audio-recorder.component.ts +1 -0
  28. package/src/app/component/conversation-detail/conversation-content/conversation-content.component.html +23 -10
  29. package/src/app/component/conversation-detail/conversation-content/conversation-content.component.scss +33 -2
  30. package/src/app/component/conversation-detail/conversation-content/conversation-content.component.spec.ts +242 -149
  31. package/src/app/component/conversation-detail/conversation-content/conversation-content.component.ts +8 -6
  32. package/src/app/component/conversation-detail/conversation-emojii/conversation-emojii.component.spec.ts +53 -3
  33. package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.html +200 -96
  34. package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.scss +211 -6
  35. package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.spec.ts +452 -78
  36. package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.ts +291 -76
  37. package/src/app/component/conversation-detail/conversation-header/conversation-header.component.html +113 -53
  38. package/src/app/component/conversation-detail/conversation-header/conversation-header.component.scss +12 -4
  39. package/src/app/component/conversation-detail/conversation-header/conversation-header.component.spec.ts +274 -29
  40. package/src/app/component/conversation-detail/conversation-internal-frame/conversation-internal-frame.component.html +23 -9
  41. package/src/app/component/conversation-detail/conversation-internal-frame/conversation-internal-frame.component.spec.ts +80 -8
  42. package/src/app/component/conversation-detail/conversation-preview/conversation-preview.component.html +29 -23
  43. package/src/app/component/conversation-detail/conversation-preview/conversation-preview.component.spec.ts +185 -16
  44. package/src/app/component/conversation-detail/conversation-preview/conversation-preview.component.ts +34 -14
  45. package/src/app/component/conversation-detail/stream-audio-spectrum/stream-audio-spectrum.component.html +46 -0
  46. package/src/app/component/conversation-detail/stream-audio-spectrum/stream-audio-spectrum.component.scss +83 -0
  47. package/src/app/component/conversation-detail/stream-audio-spectrum/stream-audio-spectrum.component.ts +192 -0
  48. package/src/app/component/error-alert/error-alert.component.spec.ts +65 -5
  49. package/src/app/component/eyeeye-catcher-card/eyeeye-catcher-card.component.html +16 -7
  50. package/src/app/component/eyeeye-catcher-card/eyeeye-catcher-card.component.scss +21 -0
  51. package/src/app/component/eyeeye-catcher-card/eyeeye-catcher-card.component.spec.ts +89 -7
  52. package/src/app/component/form/form-builder/form-builder.component.html +1 -1
  53. package/src/app/component/form/form-builder/form-builder.component.spec.ts +163 -21
  54. package/src/app/component/form/inputs/form-checkbox/form-checkbox.component.html +8 -4
  55. package/src/app/component/form/inputs/form-checkbox/form-checkbox.component.scss +10 -5
  56. package/src/app/component/form/inputs/form-checkbox/form-checkbox.component.spec.ts +90 -16
  57. package/src/app/component/form/inputs/form-checkbox/form-checkbox.component.ts +26 -0
  58. package/src/app/component/form/inputs/form-label/form-label.component.spec.ts +45 -11
  59. package/src/app/component/form/inputs/form-radio-button/form-radio-button.component.spec.ts +24 -6
  60. package/src/app/component/form/inputs/form-select/form-select.component.spec.ts +14 -5
  61. package/src/app/component/form/inputs/form-text/form-text.component.html +14 -12
  62. package/src/app/component/form/inputs/form-text/form-text.component.scss +11 -1
  63. package/src/app/component/form/inputs/form-text/form-text.component.spec.ts +113 -17
  64. package/src/app/component/form/inputs/form-text/form-text.component.ts +35 -3
  65. package/src/app/component/form/inputs/form-textarea/form-textarea.component.html +13 -11
  66. package/src/app/component/form/inputs/form-textarea/form-textarea.component.scss +6 -5
  67. package/src/app/component/form/inputs/form-textarea/form-textarea.component.spec.ts +149 -13
  68. package/src/app/component/form/inputs/form-textarea/form-textarea.component.ts +26 -0
  69. package/src/app/component/form/prechat-form/prechat-form.component.html +14 -11
  70. package/src/app/component/form/prechat-form/prechat-form.component.spec.ts +102 -10
  71. package/src/app/component/form/prechat-form/prechat-form.component.ts +8 -1
  72. package/src/app/component/form/prechat-form-test-mock.ts +35 -0
  73. package/src/app/component/home/home.component.html +38 -31
  74. package/src/app/component/home/home.component.scss +4 -2
  75. package/src/app/component/home/home.component.spec.ts +226 -11
  76. package/src/app/component/home-conversations/home-conversations.component.html +30 -26
  77. package/src/app/component/home-conversations/home-conversations.component.scss +3 -0
  78. package/src/app/component/home-conversations/home-conversations.component.spec.ts +212 -36
  79. package/src/app/component/last-message/last-message.component.html +15 -9
  80. package/src/app/component/last-message/last-message.component.scss +16 -2
  81. package/src/app/component/last-message/last-message.component.spec.ts +204 -23
  82. package/src/app/component/last-message/last-message.component.ts +4 -1
  83. package/src/app/component/launcher-button/launcher-button.component.html +8 -13
  84. package/src/app/component/launcher-button/launcher-button.component.spec.ts +104 -8
  85. package/src/app/component/list-all-conversations/list-all-conversations.component.html +12 -17
  86. package/src/app/component/list-all-conversations/list-all-conversations.component.scss +2 -0
  87. package/src/app/component/list-conversations/list-conversations.component.html +22 -22
  88. package/src/app/component/menu-options/menu-options.component.html +30 -20
  89. package/src/app/component/menu-options/menu-options.component.spec.ts +125 -9
  90. package/src/app/component/message/audio/audio.component.html +13 -15
  91. package/src/app/component/message/audio/audio.component.spec.ts +140 -5
  92. package/src/app/component/message/audio/audio.component.ts +1 -5
  93. package/src/app/component/message/audio-sync/audio-sync.component.html +18 -0
  94. package/src/app/component/message/audio-sync/audio-sync.component.scss +65 -0
  95. package/src/app/component/message/audio-sync/audio-sync.component.spec.ts +103 -0
  96. package/src/app/component/message/audio-sync/audio-sync.component.ts +643 -0
  97. package/src/app/component/message/avatar/avatar.component.html +2 -2
  98. package/src/app/component/message/avatar/avatar.component.spec.ts +99 -7
  99. package/src/app/component/message/bubble-message/bubble-message.component.html +43 -51
  100. package/src/app/component/message/bubble-message/bubble-message.component.scss +59 -1
  101. package/src/app/component/message/bubble-message/bubble-message.component.spec.ts +154 -57
  102. package/src/app/component/message/bubble-message/bubble-message.component.ts +152 -109
  103. package/src/app/component/message/buttons/action-button/action-button.component.html +3 -4
  104. package/src/app/component/message/buttons/action-button/action-button.component.spec.ts +49 -5
  105. package/src/app/component/message/buttons/link-button/link-button.component.scss +5 -8
  106. package/src/app/component/message/buttons/link-button/link-button.component.spec.ts +50 -5
  107. package/src/app/component/message/buttons/text-button/text-button.component.spec.ts +44 -5
  108. package/src/app/component/message/carousel/carousel.component.html +29 -16
  109. package/src/app/component/message/carousel/carousel.component.scss +20 -8
  110. package/src/app/component/message/carousel/carousel.component.spec.ts +80 -3
  111. package/src/app/component/message/carousel/carousel.component.ts +16 -0
  112. package/src/app/component/message/frame/frame.component.html +9 -4
  113. package/src/app/component/message/frame/frame.component.spec.ts +34 -15
  114. package/src/app/component/message/frame/frame.component.ts +7 -2
  115. package/src/app/component/message/html/html.component.html +1 -1
  116. package/src/app/component/message/html/html.component.scss +1 -1
  117. package/src/app/component/message/html/html.component.spec.ts +24 -7
  118. package/src/app/component/message/image/image.component.html +12 -10
  119. package/src/app/component/message/image/image.component.scss +16 -0
  120. package/src/app/component/message/image/image.component.spec.ts +101 -15
  121. package/src/app/component/message/image/image.component.ts +90 -51
  122. package/src/app/component/message/info-message/info-message.component.spec.ts +26 -14
  123. package/src/app/component/message/json-sources/json-sources.component.html +38 -0
  124. package/src/app/component/message/json-sources/json-sources.component.scss +201 -0
  125. package/src/app/component/message/json-sources/json-sources.component.ts +89 -0
  126. package/src/app/component/message/like-unlike/like-unlike.component.html +7 -9
  127. package/src/app/component/message/like-unlike/like-unlike.component.spec.ts +31 -3
  128. package/src/app/component/message/return-receipt/return-receipt.component.spec.ts +38 -17
  129. package/src/app/component/message/text/text.component.html +3 -3
  130. package/src/app/component/message/text/text.component.scss +80 -86
  131. package/src/app/component/message/text/text.component.spec.ts +106 -13
  132. package/src/app/component/message-attachment/message-attachment.component.spec.ts +134 -13
  133. package/src/app/component/selection-department/selection-department.component.html +21 -23
  134. package/src/app/component/selection-department/selection-department.component.spec.ts +159 -14
  135. package/src/app/component/selection-department/selection-department.component.ts +8 -1
  136. package/src/app/component/send-button/send-button.component.html +5 -13
  137. package/src/app/component/send-button/send-button.component.spec.ts +2 -2
  138. package/src/app/component/star-rating-widget/star-rating-widget.component.html +51 -81
  139. package/src/app/directives/tooltip.directive.spec.ts +8 -4
  140. package/src/app/modals/confirm-close/confirm-close.component.html +20 -8
  141. package/src/app/modals/confirm-close/confirm-close.component.scss +3 -0
  142. package/src/app/modals/confirm-close/confirm-close.component.spec.ts +13 -4
  143. package/src/app/modals/confirm-close/confirm-close.component.ts +8 -1
  144. package/src/app/pipe/html-entites-encode.pipe.spec.ts +35 -2
  145. package/src/app/pipe/marked.pipe.spec.ts +38 -2
  146. package/src/app/pipe/marked.pipe.ts +51 -41
  147. package/src/app/providers/app-config.service.ts +4 -2
  148. package/src/app/providers/brand.service.spec.ts +23 -2
  149. package/src/app/providers/brand.service.ts +1 -1
  150. package/src/app/providers/global-settings.service.spec.ts +1009 -14
  151. package/src/app/providers/global-settings.service.ts +82 -2
  152. package/src/app/providers/json-sources-parser.service.ts +175 -0
  153. package/src/app/providers/translator.service.ts +26 -6
  154. package/src/app/providers/tts-audio-playback-coordinator.service.spec.ts +117 -0
  155. package/src/app/providers/tts-audio-playback-coordinator.service.ts +109 -0
  156. package/src/app/providers/url-preview.service.ts +82 -0
  157. package/src/app/providers/voice/STT&TTS/openai-voice.config.ts +12 -0
  158. package/src/app/providers/voice/STT&TTS/openai-voice.provider.ts +171 -0
  159. package/src/app/providers/voice/STT&TTS/speech-provider.abstract.ts +39 -0
  160. package/src/app/providers/voice/audio.types.ts +40 -0
  161. package/src/app/providers/voice/vad.service.spec.ts +28 -0
  162. package/src/app/providers/voice/vad.service.ts +70 -0
  163. package/src/app/providers/voice/voice-streaming.service.spec.ts +23 -0
  164. package/src/app/providers/voice/voice-streaming.service.ts +702 -0
  165. package/src/app/providers/voice/voice-streaming.types.ts +112 -0
  166. package/src/app/providers/voice/voice.service.spec.ts +227 -0
  167. package/src/app/providers/voice/voice.service.ts +973 -0
  168. package/src/app/sass/_variables.scss +3 -0
  169. package/src/app/sass/animations.scss +19 -1
  170. package/src/app/shims/onnxruntime-web-wasm.ts +4 -0
  171. package/src/app/utils/globals.ts +21 -1
  172. package/src/app/utils/json-sources-utils.ts +27 -0
  173. package/src/app/utils/url-utils.ts +98 -0
  174. package/src/app/utils/utils-resources.ts +1 -1
  175. package/src/assets/i18n/en.json +106 -99
  176. package/src/assets/i18n/es.json +107 -100
  177. package/src/assets/i18n/fr.json +107 -100
  178. package/src/assets/i18n/it.json +107 -98
  179. package/src/assets/onnx/ort-wasm-simd-threaded.mjs +59 -0
  180. package/src/assets/onnx/ort-wasm-simd-threaded.wasm +0 -0
  181. package/src/assets/sounds/keyboard.mp3 +0 -0
  182. package/src/assets/twp/chatbot-panel.html +3 -1
  183. package/src/assets/twp/index-dev.html +18 -0
  184. package/src/assets/twp/tiledesk_widget_files/widget-css-override-example.css +14 -0
  185. package/src/assets/vad/silero_vad_legacy.onnx +0 -0
  186. package/src/assets/vad/vad.worklet.bundle.min.js +1 -0
  187. package/src/chat21-core/models/message.ts +2 -1
  188. package/src/chat21-core/providers/chat-manager.spec.ts +72 -0
  189. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +3 -2
  190. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +12 -0
  191. package/src/chat21-core/providers/scripts/script.service.spec.ts +12 -2
  192. package/src/chat21-core/providers/tiledesk/tiledesk-requests.service.ts +1 -1
  193. package/src/chat21-core/utils/constants.ts +4 -0
  194. package/src/chat21-core/utils/utils-message.ts +45 -6
  195. package/src/chat21-core/utils/utils.ts +5 -2
  196. package/src/widget-config-template.json +4 -1
  197. package/src/widget-config.json +4 -1
  198. package/tests/widget-form-rich.spec.ts +67 -0
  199. package/tests/widget-index-dev-settings.spec.ts +52 -0
  200. package/tests/widget-twp-iframe.spec.ts +39 -0
  201. package/tsconfig.json +5 -0
@@ -0,0 +1 @@
1
+ {"private":true,"name":"angular-mcp-cache"}
@@ -0,0 +1,442 @@
1
+ # Angular 18 Accessibility Auditor Skill
2
+
3
+ ## Role
4
+
5
+ You are an expert Angular 18 architect and accessibility auditor specialized in:
6
+
7
+ - Angular standalone architecture
8
+ - Dynamic bootstrap systems (`launch.js`)
9
+ - iframe-hosted Angular applications
10
+ - WCAG 2.2 AA compliance
11
+ - WAI-ARIA best practices
12
+ - Semantic HTML validation
13
+ - Keyboard navigation analysis
14
+ - Screen reader compatibility
15
+ - Component API inspection
16
+ - UI accessibility remediation
17
+
18
+ Your task is to inspect an Angular 18 project loaded through an iframe and bootstrapped by a `launch.js` file.
19
+
20
+ ---
21
+
22
+ # Objectives
23
+
24
+ Analyze the entire Angular application and produce:
25
+
26
+ 1. Full component inventory
27
+ 2. Component hierarchy map
28
+ 3. Inputs and Outputs analysis
29
+ 4. Accessibility audit
30
+ 5. WCAG 2.2 violations
31
+ 6. ARIA compliance report
32
+ 7. Keyboard navigation issues
33
+ 8. Screen reader compatibility issues
34
+ 9. Semantic HTML problems
35
+ 10. Accessibility remediation suggestions
36
+ 11. Severity classification
37
+ 12. Suggested code fixes
38
+
39
+ ---
40
+
41
+ # Project Context
42
+
43
+ The Angular application:
44
+
45
+ - Uses Angular 18
46
+ - Is bootstrapped dynamically through `launch.js`
47
+ - Is rendered inside an iframe
48
+ - May use standalone components
49
+ - May use signals
50
+ - May use lazy routes
51
+ - May use custom UI libraries
52
+ - May use Shadow DOM
53
+ - May use dynamic rendering
54
+
55
+ You must inspect:
56
+
57
+ - `launch.js`
58
+ - `main.ts`
59
+ - `app.config.ts`
60
+ - routing configuration
61
+ - all Angular components
62
+ - templates (`.html`)
63
+ - inline templates
64
+ - directives
65
+ - pipes
66
+ - services involved in UI rendering
67
+
68
+ ---
69
+
70
+ # Mandatory Analysis Rules
71
+
72
+ ## Component Discovery
73
+
74
+ You MUST identify:
75
+
76
+ - selector
77
+ - standalone or module-based
78
+ - templateUrl or inline template
79
+ - styleUrls
80
+ - imported dependencies
81
+ - nested components
82
+ - dynamic component rendering
83
+ - projected content (`ng-content`)
84
+ - structural directives
85
+
86
+ For every component extract:
87
+
88
+ ```ts
89
+ @Input()
90
+ @Output()
91
+ signal()
92
+ computed()
93
+ effect()
94
+ viewChild()
95
+ contentChild()
96
+ hostBinding()
97
+ hostListener()
98
+ ```
99
+
100
+ ---
101
+
102
+ # Accessibility Audit Rules
103
+
104
+ For every component evaluate:
105
+
106
+ ## 1. Semantic HTML
107
+
108
+ Detect misuse or absence of:
109
+
110
+ - button
111
+ - nav
112
+ - main
113
+ - section
114
+ - article
115
+ - header
116
+ - footer
117
+ - aside
118
+ - label
119
+ - fieldset
120
+ - legend
121
+ - table semantics
122
+
123
+ Flag:
124
+
125
+ - clickable divs
126
+ - clickable spans
127
+ - missing labels
128
+ - invalid heading hierarchy
129
+ - missing alt text
130
+ - empty buttons
131
+ - duplicate IDs
132
+
133
+ ---
134
+
135
+ ## 2. WCAG 2.2 Compliance
136
+
137
+ Evaluate against:
138
+
139
+ ### Perceivable
140
+
141
+ - text alternatives
142
+ - contrast risks
143
+ - resize behavior
144
+ - responsive accessibility
145
+
146
+ ### Operable
147
+
148
+ - keyboard navigation
149
+ - focus trapping
150
+ - tab order
151
+ - focus visibility
152
+ - skip links
153
+ - hover-only interactions
154
+
155
+ ### Understandable
156
+
157
+ - label clarity
158
+ - form instructions
159
+ - error messages
160
+ - consistent navigation
161
+
162
+ ### Robust
163
+
164
+ - ARIA validity
165
+ - semantic correctness
166
+ - screen reader compatibility
167
+
168
+ ---
169
+
170
+ ## 3. ARIA Validation
171
+
172
+ Validate:
173
+
174
+ - aria-label
175
+ - aria-labelledby
176
+ - aria-describedby
177
+ - aria-hidden
178
+ - role
179
+ - live regions
180
+ - dialog accessibility
181
+ - menu accessibility
182
+ - tabs accessibility
183
+ - accordion accessibility
184
+
185
+ Detect:
186
+
187
+ - invalid ARIA roles
188
+ - redundant ARIA
189
+ - conflicting ARIA attributes
190
+ - inaccessible custom controls
191
+
192
+ ---
193
+
194
+ ## 4. Forms Accessibility
195
+
196
+ Check:
197
+
198
+ - labels association
199
+ - required indicators
200
+ - error handling
201
+ - aria-invalid
202
+ - autocomplete
203
+ - focus management
204
+ - keyboard operability
205
+
206
+ ---
207
+
208
+ ## 5. Keyboard Navigation
209
+
210
+ Detect:
211
+
212
+ - inaccessible controls
213
+ - tabindex misuse
214
+ - focus loss
215
+ - inaccessible modal dialogs
216
+ - inaccessible dropdowns
217
+ - inaccessible popovers
218
+
219
+ ---
220
+
221
+ ## 6. Dynamic UI Accessibility
222
+
223
+ Because the app is iframe-hosted and dynamically bootstrapped:
224
+
225
+ Analyze:
226
+
227
+ - iframe title
228
+ - focus transfer into iframe
229
+ - dynamic DOM rendering
230
+ - lazy-loaded accessibility
231
+ - async content announcements
232
+ - Angular CDK overlays
233
+ - dialogs
234
+ - portals
235
+
236
+ ---
237
+
238
+ # Severity Levels
239
+
240
+ Each issue must include:
241
+
242
+ | Severity | Meaning |
243
+ |---|---|
244
+ | Critical | Blocks accessibility completely |
245
+ | High | Serious usability issue |
246
+ | Medium | Partial accessibility degradation |
247
+ | Low | Minor improvement |
248
+
249
+ ---
250
+
251
+ # Output Format
252
+
253
+ Always produce output in this structure:
254
+
255
+ # Angular Accessibility Audit Report
256
+
257
+ ## Project Overview
258
+
259
+ - Angular version
260
+ - Bootstrap mode
261
+ - iframe integration
262
+ - routing strategy
263
+ - standalone usage
264
+
265
+ ---
266
+
267
+ # Component Inventory
268
+
269
+ ## Component: ExampleComponent
270
+
271
+ ### Metadata
272
+
273
+ - Selector:
274
+ - Standalone:
275
+ - Template:
276
+ - Style:
277
+ - Inputs:
278
+ - Outputs:
279
+
280
+ ### Accessibility Findings
281
+
282
+ | Severity | Rule | Problem | Recommendation |
283
+ |---|---|---|---|
284
+
285
+ ### WCAG 2.2 Violations
286
+
287
+ | WCAG Ref | Description |
288
+ |---|---|
289
+
290
+ ### ARIA Findings
291
+
292
+ | Type | Issue |
293
+ |---|---|
294
+
295
+ ### Keyboard Accessibility
296
+
297
+ | Issue | Recommendation |
298
+ |---|---|
299
+
300
+ ### Suggested Fix
301
+
302
+ ```html
303
+ <!-- before -->
304
+ <div (click)="save()"></div>
305
+
306
+ <!-- after -->
307
+ <button type="button" (click)="save()">
308
+ Save
309
+ </button>
310
+ ```
311
+
312
+ ---
313
+
314
+ # Global Accessibility Issues
315
+
316
+ ## Routing Accessibility
317
+
318
+ ## Dialog Accessibility
319
+
320
+ ## Overlay Accessibility
321
+
322
+ ## Focus Management
323
+
324
+ ## Screen Reader Compatibility
325
+
326
+ ---
327
+
328
+ # Final Accessibility Score
329
+
330
+ | Area | Score |
331
+ |---|---|
332
+ | Semantic HTML | |
333
+ | Keyboard Accessibility | |
334
+ | ARIA Compliance | |
335
+ | Forms Accessibility | |
336
+ | WCAG 2.2 Compliance | |
337
+
338
+ ---
339
+
340
+ # Final Recommendations
341
+
342
+ Provide:
343
+
344
+ 1. Immediate fixes
345
+ 2. Structural improvements
346
+ 3. Refactoring recommendations
347
+ 4. Angular CDK accessibility recommendations
348
+ 5. aria-live recommendations
349
+ 6. Focus management improvements
350
+ 7. Design system accessibility improvements
351
+
352
+ ---
353
+
354
+ # Additional Technical Requirements
355
+
356
+ When analyzing Angular 18 code:
357
+
358
+ - Understand signals API
359
+ - Understand standalone components
360
+ - Understand control flow syntax:
361
+ - @if
362
+ - @for
363
+ - @switch
364
+ - Understand deferred loading
365
+ - Understand hydration
366
+ - Understand SSR accessibility implications
367
+ - Understand Angular CDK a11y utilities
368
+
369
+ ---
370
+
371
+ # Accessibility Best Practices Reference
372
+
373
+ Use these standards as authoritative references:
374
+
375
+ - WCAG 2.2 AA
376
+ - WAI-ARIA 1.2
377
+ - HTML Living Standard
378
+ - Angular CDK Accessibility
379
+ - MDN Accessibility Guidelines
380
+
381
+ ---
382
+
383
+ # Behavioral Instructions
384
+
385
+ You must:
386
+
387
+ - Be extremely strict
388
+ - Never assume accessibility exists unless verified
389
+ - Prefer semantic HTML over ARIA
390
+ - Explain WHY something is inaccessible
391
+ - Suggest production-grade fixes
392
+ - Consider screen readers:
393
+ - NVDA
394
+ - JAWS
395
+ - VoiceOver
396
+ - Consider keyboard-only users
397
+ - Consider low vision users
398
+ - Consider cognitive accessibility
399
+
400
+ ---
401
+
402
+ # Extra Analysis
403
+
404
+ If possible also detect:
405
+
406
+ - inaccessible animations
407
+ - reduced-motion support
408
+ - color dependency issues
409
+ - inaccessible charts
410
+ - inaccessible SVGs
411
+ - inaccessible icons
412
+ - missing i18n accessibility
413
+ - RTL accessibility problems
414
+
415
+ ---
416
+
417
+ # Advanced Angular-Specific Checks
418
+
419
+ Validate:
420
+
421
+ - CDK Dialog accessibility
422
+ - Material accessibility
423
+ - OverlayContainer focus management
424
+ - Dynamic component injection
425
+ - Renderer2 misuse
426
+ - HostListener keyboard traps
427
+ - signal-driven DOM updates
428
+ - custom form controls
429
+ - ControlValueAccessor accessibility
430
+
431
+ ---
432
+
433
+ # Final Rule
434
+
435
+ Never provide generic accessibility advice.
436
+
437
+ Every finding MUST reference:
438
+
439
+ - the exact component
440
+ - the exact template section
441
+ - the exact issue
442
+ - the exact remediation
@@ -0,0 +1,15 @@
1
+ {
2
+ "mcpServers": {
3
+ "angular-cli": {
4
+ "command": "/Users/gabriele95/.angular-mcp-runner/run-angular-mcp.sh",
5
+ "args": []
6
+ },
7
+ "playwright": {
8
+ "command": "npx",
9
+ "args": ["-y", "@playwright/mcp@latest", "--caps=testing"],
10
+ "env": {
11
+ "PATH": "/Users/gabriele95/.nvm/versions/node/v20.19.2/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
12
+ }
13
+ }
14
+ }
15
+ }
@@ -1,10 +1,10 @@
1
1
  name: Docker Image Community latest CI
2
2
 
3
- on:
4
- push:
3
+ on:
4
+ push:
5
5
  branches: [ master ]
6
- pull_request:
7
- branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
8
 
9
9
  jobs:
10
10
  push_to_registry:
@@ -12,12 +12,22 @@ jobs:
12
12
  runs-on: ubuntu-latest
13
13
 
14
14
  steps:
15
- - uses: actions/checkout@v2
16
- name: Check out the repo
17
- - uses: docker/build-push-action@v1
18
- with:
19
- username: ${{ secrets.DOCKERHUB_USERNAME }}
20
- password: ${{ secrets.DOCKERHUB_TOKEN }}
21
- repository: chat21/chat21-web-widget
22
- push: true
23
- tags: latest
15
+ - name: Check out the repo
16
+ uses: actions/checkout@v2
17
+
18
+ - name: Set up Docker Buildx
19
+ uses: docker/setup-buildx-action@v2
20
+
21
+ - name: Log in to Docker Hub
22
+ uses: docker/login-action@v2
23
+ with:
24
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
25
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
26
+
27
+ - name: Build and push multiarch Docker image
28
+ uses: docker/build-push-action@v3
29
+ with:
30
+ context: .
31
+ push: true
32
+ platforms: linux/amd64,linux/arm64
33
+ tags: chat21/chat21-web-widget:latest
@@ -3,20 +3,30 @@ name: Publish Docker Community image tags
3
3
  on:
4
4
  push:
5
5
  tags:
6
- - '**' # Push events to every tag including hierarchical tags like
7
- jobs:
6
+ - '**' # Trigger su qualsiasi tag
8
7
 
8
+ jobs:
9
9
  push_to_registry:
10
10
  name: Push Docker image to Docker Hub
11
11
  runs-on: ubuntu-latest
12
+
12
13
  steps:
13
- - name: Check out the repo
14
- uses: actions/checkout@v2
15
- - name: Push to Docker Hub
16
- uses: docker/build-push-action@v1
17
- with:
18
- username: ${{ secrets.DOCKERHUB_USERNAME }}
19
- password: ${{ secrets.DOCKERHUB_TOKEN }}
20
- repository: chat21/chat21-web-widget
21
- push: true
22
- tag_with_ref: true
14
+ - name: Check out the repo
15
+ uses: actions/checkout@v2
16
+
17
+ - name: Set up Docker Buildx
18
+ uses: docker/setup-buildx-action@v2
19
+
20
+ - name: Log in to Docker Hub
21
+ uses: docker/login-action@v2
22
+ with:
23
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
24
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
25
+
26
+ - name: Build and push multiarch Docker image
27
+ uses: docker/build-push-action@v3
28
+ with:
29
+ context: .
30
+ push: true
31
+ platforms: linux/amd64,linux/arm64
32
+ tags: chat21/chat21-web-widget:${{ github.ref_name }}
@@ -0,0 +1,27 @@
1
+ name: Playwright Tests
2
+ on:
3
+ push:
4
+ branches: [ main, master ]
5
+ pull_request:
6
+ branches: [ main, master ]
7
+ jobs:
8
+ test:
9
+ timeout-minutes: 60
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - uses: actions/setup-node@v4
14
+ with:
15
+ node-version: lts/*
16
+ - name: Install dependencies
17
+ run: npm ci
18
+ - name: Install Playwright Browsers
19
+ run: npx playwright install --with-deps
20
+ - name: Run Playwright tests
21
+ run: npx playwright test
22
+ - uses: actions/upload-artifact@v4
23
+ if: ${{ !cancelled() }}
24
+ with:
25
+ name: playwright-report
26
+ path: playwright-report/
27
+ retention-days: 30