@acorex/components 20.8.32 โ 20.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/conversation/README.md +462 -2
- package/conversation/index.d.ts +5400 -485
- package/fesm2022/acorex-components-calendar.mjs +3 -2
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs +13711 -0
- package/fesm2022/acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-attachment.component-Ri-Jx210.mjs +119 -0
- package/fesm2022/acorex-components-conversation-audio-attachment.component-Ri-Jx210.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs +59 -0
- package/fesm2022/acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-picker.component-CqrKBDIF.mjs +432 -0
- package/fesm2022/acorex-components-conversation-audio-picker.component-CqrKBDIF.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-renderer.component-CO8owVrA.mjs +177 -0
- package/fesm2022/acorex-components-conversation-audio-renderer.component-CO8owVrA.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio.payload-CLnYjmYY.mjs +54 -0
- package/fesm2022/acorex-components-conversation-audio.payload-CLnYjmYY.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs +101 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-audio.file-type-D-hIBwQ2.mjs +100 -0
- package/fesm2022/acorex-components-conversation-conversation-audio.file-type-D-hIBwQ2.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-file.file-type-DQUy3C64.mjs +121 -0
- package/fesm2022/acorex-components-conversation-conversation-file.file-type-DQUy3C64.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-image.file-type-Bd_SkwR0.mjs +84 -0
- package/fesm2022/acorex-components-conversation-conversation-image.file-type-Bd_SkwR0.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BalIIAFB.mjs +238 -0
- package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BalIIAFB.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs +1080 -0
- package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs +102 -0
- package/fesm2022/acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-voice.file-type-v3rFWDv6.mjs +90 -0
- package/fesm2022/acorex-components-conversation-conversation-voice.file-type-v3rFWDv6.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs +1840 -0
- package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-fallback-renderer.component-DOQkZWwP.mjs +44 -0
- package/fesm2022/acorex-components-conversation-fallback-renderer.component-DOQkZWwP.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file-composer.payload-azPSH99m.mjs +64 -0
- package/fesm2022/acorex-components-conversation-file-composer.payload-azPSH99m.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file-picker.component-cmUkgSF3.mjs +468 -0
- package/fesm2022/acorex-components-conversation-file-picker.component-cmUkgSF3.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file-renderer.component-CpUgRTR4.mjs +125 -0
- package/fesm2022/acorex-components-conversation-file-renderer.component-CpUgRTR4.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file.payload-DXwzNWxT.mjs +50 -0
- package/fesm2022/acorex-components-conversation-file.payload-DXwzNWxT.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs +21 -0
- package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-attachment.component-BZto5LFo.mjs +77 -0
- package/fesm2022/acorex-components-conversation-image-attachment.component-BZto5LFo.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-picker.component-G9EEOyDg.mjs +407 -0
- package/fesm2022/acorex-components-conversation-image-picker.component-G9EEOyDg.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-renderer.component-Bwa6rG6C.mjs +83 -0
- package/fesm2022/acorex-components-conversation-image-renderer.component-Bwa6rG6C.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs +180 -0
- package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-index-DtGEWeKN.mjs +266 -0
- package/fesm2022/acorex-components-conversation-index-DtGEWeKN.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-location-picker.component-Cx993j_c.mjs +149 -0
- package/fesm2022/acorex-components-conversation-location-picker.component-Cx993j_c.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-location-renderer.component-BiynmAJw.mjs +118 -0
- package/fesm2022/acorex-components-conversation-location-renderer.component-BiynmAJw.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs +17 -0
- package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-a7OSpfB1.mjs +140 -0
- package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-a7OSpfB1.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-D_eAnM6v.mjs +33 -0
- package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-D_eAnM6v.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-message-renderer-state.component-DSnNoz1N.mjs +172 -0
- package/fesm2022/acorex-components-conversation-message-renderer-state.component-DSnNoz1N.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs +224 -0
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-pagination-demo-data-DRr9PXjJ.mjs +81 -0
- package/fesm2022/acorex-components-conversation-pagination-demo-data-DRr9PXjJ.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs +91 -0
- package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-toolbar.component-CpyS0j6P.mjs +537 -0
- package/fesm2022/acorex-components-conversation-picker-toolbar.component-CpyS0j6P.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs +163 -0
- package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs +68 -0
- package/fesm2022/acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-renderer-shared.styles-Digah3Zn.mjs +95 -0
- package/fesm2022/acorex-components-conversation-renderer-shared.styles-Digah3Zn.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-search.component-96NI2ERG.mjs +187 -0
- package/fesm2022/acorex-components-conversation-search.component-96NI2ERG.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-send-message-media--Rbrne7k.mjs +170 -0
- package/fesm2022/acorex-components-conversation-send-message-media--Rbrne7k.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-shared-storage.seed-zFjNXfKF.mjs +750 -0
- package/fesm2022/acorex-components-conversation-shared-storage.seed-zFjNXfKF.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-sticker-renderer.component-BZgx_Ylk.mjs +103 -0
- package/fesm2022/acorex-components-conversation-sticker-renderer.component-BZgx_Ylk.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-system-renderer.component-D1Aj-LuF.mjs +55 -0
- package/fesm2022/acorex-components-conversation-system-renderer.component-D1Aj-LuF.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-text-renderer.component-Cxvwjr2p.mjs +109 -0
- package/fesm2022/acorex-components-conversation-text-renderer.component-Cxvwjr2p.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-attachment.component-DBY_4Ri2.mjs +105 -0
- package/fesm2022/acorex-components-conversation-video-attachment.component-DBY_4Ri2.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs +62 -0
- package/fesm2022/acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-picker.component-D1JYwEm_.mjs +446 -0
- package/fesm2022/acorex-components-conversation-video-picker.component-D1JYwEm_.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-renderer.component-iwf2bU29.mjs +181 -0
- package/fesm2022/acorex-components-conversation-video-renderer.component-iwf2bU29.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video.payload-DfBEjqQ4.mjs +54 -0
- package/fesm2022/acorex-components-conversation-video.payload-DfBEjqQ4.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs +17 -0
- package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-voice-recorder.component-P8J_5OH0.mjs +328 -0
- package/fesm2022/acorex-components-conversation-voice-recorder.component-P8J_5OH0.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-voice-renderer.component-CZpEqbXL.mjs +270 -0
- package/fesm2022/acorex-components-conversation-voice-renderer.component-CZpEqbXL.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation.mjs +1 -1402
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +2 -2
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-rest-api-generator.mjs +2 -2
- package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler-picker.mjs +22 -14
- package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-step-wizard.mjs +2 -2
- package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
- package/fesm2022/acorex-components-tree-view-legacy.mjs +2 -2
- package/fesm2022/acorex-components-tree-view-legacy.mjs.map +1 -1
- package/package.json +35 -39
- package/scheduler-picker/index.d.ts +2 -0
- package/conversation2/README.md +0 -463
- package/conversation2/index.d.ts +0 -6410
- package/fesm2022/acorex-components-conversation2.mjs +0 -22331
- package/fesm2022/acorex-components-conversation2.mjs.map +0 -1
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acorex/components",
|
|
3
|
-
"version": "20.
|
|
3
|
+
"version": "20.9.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@acorex/core": "20.
|
|
6
|
-
"@acorex/cdk": "20.
|
|
5
|
+
"@acorex/core": "20.9.0",
|
|
6
|
+
"@acorex/cdk": "20.9.0",
|
|
7
7
|
"polytype": ">=0.17.0",
|
|
8
8
|
"angular-imask": ">=7.6.1",
|
|
9
9
|
"gridstack": ">=12.0.0",
|
|
@@ -60,14 +60,14 @@
|
|
|
60
60
|
"types": "./accordion/index.d.ts",
|
|
61
61
|
"default": "./fesm2022/acorex-components-accordion.mjs"
|
|
62
62
|
},
|
|
63
|
-
"./action-sheet": {
|
|
64
|
-
"types": "./action-sheet/index.d.ts",
|
|
65
|
-
"default": "./fesm2022/acorex-components-action-sheet.mjs"
|
|
66
|
-
},
|
|
67
63
|
"./alert": {
|
|
68
64
|
"types": "./alert/index.d.ts",
|
|
69
65
|
"default": "./fesm2022/acorex-components-alert.mjs"
|
|
70
66
|
},
|
|
67
|
+
"./action-sheet": {
|
|
68
|
+
"types": "./action-sheet/index.d.ts",
|
|
69
|
+
"default": "./fesm2022/acorex-components-action-sheet.mjs"
|
|
70
|
+
},
|
|
71
71
|
"./aspect-ratio": {
|
|
72
72
|
"types": "./aspect-ratio/index.d.ts",
|
|
73
73
|
"default": "./fesm2022/acorex-components-aspect-ratio.mjs"
|
|
@@ -96,26 +96,26 @@
|
|
|
96
96
|
"types": "./breadcrumbs/index.d.ts",
|
|
97
97
|
"default": "./fesm2022/acorex-components-breadcrumbs.mjs"
|
|
98
98
|
},
|
|
99
|
-
"./button": {
|
|
100
|
-
"types": "./button/index.d.ts",
|
|
101
|
-
"default": "./fesm2022/acorex-components-button.mjs"
|
|
102
|
-
},
|
|
103
99
|
"./button-group": {
|
|
104
100
|
"types": "./button-group/index.d.ts",
|
|
105
101
|
"default": "./fesm2022/acorex-components-button-group.mjs"
|
|
106
102
|
},
|
|
103
|
+
"./button": {
|
|
104
|
+
"types": "./button/index.d.ts",
|
|
105
|
+
"default": "./fesm2022/acorex-components-button.mjs"
|
|
106
|
+
},
|
|
107
107
|
"./calendar": {
|
|
108
108
|
"types": "./calendar/index.d.ts",
|
|
109
109
|
"default": "./fesm2022/acorex-components-calendar.mjs"
|
|
110
110
|
},
|
|
111
|
-
"./check-box": {
|
|
112
|
-
"types": "./check-box/index.d.ts",
|
|
113
|
-
"default": "./fesm2022/acorex-components-check-box.mjs"
|
|
114
|
-
},
|
|
115
111
|
"./chips": {
|
|
116
112
|
"types": "./chips/index.d.ts",
|
|
117
113
|
"default": "./fesm2022/acorex-components-chips.mjs"
|
|
118
114
|
},
|
|
115
|
+
"./check-box": {
|
|
116
|
+
"types": "./check-box/index.d.ts",
|
|
117
|
+
"default": "./fesm2022/acorex-components-check-box.mjs"
|
|
118
|
+
},
|
|
119
119
|
"./circular-progress": {
|
|
120
120
|
"types": "./circular-progress/index.d.ts",
|
|
121
121
|
"default": "./fesm2022/acorex-components-circular-progress.mjs"
|
|
@@ -148,10 +148,6 @@
|
|
|
148
148
|
"types": "./conversation/index.d.ts",
|
|
149
149
|
"default": "./fesm2022/acorex-components-conversation.mjs"
|
|
150
150
|
},
|
|
151
|
-
"./conversation2": {
|
|
152
|
-
"types": "./conversation2/index.d.ts",
|
|
153
|
-
"default": "./fesm2022/acorex-components-conversation2.mjs"
|
|
154
|
-
},
|
|
155
151
|
"./cron-job": {
|
|
156
152
|
"types": "./cron-job/index.d.ts",
|
|
157
153
|
"default": "./fesm2022/acorex-components-cron-job.mjs"
|
|
@@ -260,6 +256,10 @@
|
|
|
260
256
|
"types": "./loading/index.d.ts",
|
|
261
257
|
"default": "./fesm2022/acorex-components-loading.mjs"
|
|
262
258
|
},
|
|
259
|
+
"./loading-dialog": {
|
|
260
|
+
"types": "./loading-dialog/index.d.ts",
|
|
261
|
+
"default": "./fesm2022/acorex-components-loading-dialog.mjs"
|
|
262
|
+
},
|
|
263
263
|
"./map": {
|
|
264
264
|
"types": "./map/index.d.ts",
|
|
265
265
|
"default": "./fesm2022/acorex-components-map.mjs"
|
|
@@ -268,10 +268,6 @@
|
|
|
268
268
|
"types": "./media-viewer/index.d.ts",
|
|
269
269
|
"default": "./fesm2022/acorex-components-media-viewer.mjs"
|
|
270
270
|
},
|
|
271
|
-
"./loading-dialog": {
|
|
272
|
-
"types": "./loading-dialog/index.d.ts",
|
|
273
|
-
"default": "./fesm2022/acorex-components-loading-dialog.mjs"
|
|
274
|
-
},
|
|
275
271
|
"./menu": {
|
|
276
272
|
"types": "./menu/index.d.ts",
|
|
277
273
|
"default": "./fesm2022/acorex-components-menu.mjs"
|
|
@@ -300,14 +296,14 @@
|
|
|
300
296
|
"types": "./otp/index.d.ts",
|
|
301
297
|
"default": "./fesm2022/acorex-components-otp.mjs"
|
|
302
298
|
},
|
|
303
|
-
"./paint": {
|
|
304
|
-
"types": "./paint/index.d.ts",
|
|
305
|
-
"default": "./fesm2022/acorex-components-paint.mjs"
|
|
306
|
-
},
|
|
307
299
|
"./page": {
|
|
308
300
|
"types": "./page/index.d.ts",
|
|
309
301
|
"default": "./fesm2022/acorex-components-page.mjs"
|
|
310
302
|
},
|
|
303
|
+
"./paint": {
|
|
304
|
+
"types": "./paint/index.d.ts",
|
|
305
|
+
"default": "./fesm2022/acorex-components-paint.mjs"
|
|
306
|
+
},
|
|
311
307
|
"./password-box": {
|
|
312
308
|
"types": "./password-box/index.d.ts",
|
|
313
309
|
"default": "./fesm2022/acorex-components-password-box.mjs"
|
|
@@ -324,14 +320,14 @@
|
|
|
324
320
|
"types": "./picker/index.d.ts",
|
|
325
321
|
"default": "./fesm2022/acorex-components-picker.mjs"
|
|
326
322
|
},
|
|
327
|
-
"./popup": {
|
|
328
|
-
"types": "./popup/index.d.ts",
|
|
329
|
-
"default": "./fesm2022/acorex-components-popup.mjs"
|
|
330
|
-
},
|
|
331
323
|
"./popover": {
|
|
332
324
|
"types": "./popover/index.d.ts",
|
|
333
325
|
"default": "./fesm2022/acorex-components-popover.mjs"
|
|
334
326
|
},
|
|
327
|
+
"./popup": {
|
|
328
|
+
"types": "./popup/index.d.ts",
|
|
329
|
+
"default": "./fesm2022/acorex-components-popup.mjs"
|
|
330
|
+
},
|
|
335
331
|
"./progress-bar": {
|
|
336
332
|
"types": "./progress-bar/index.d.ts",
|
|
337
333
|
"default": "./fesm2022/acorex-components-progress-bar.mjs"
|
|
@@ -396,26 +392,26 @@
|
|
|
396
392
|
"types": "./select-box/index.d.ts",
|
|
397
393
|
"default": "./fesm2022/acorex-components-select-box.mjs"
|
|
398
394
|
},
|
|
399
|
-
"./selection-list-2": {
|
|
400
|
-
"types": "./selection-list-2/index.d.ts",
|
|
401
|
-
"default": "./fesm2022/acorex-components-selection-list-2.mjs"
|
|
402
|
-
},
|
|
403
395
|
"./selection-list": {
|
|
404
396
|
"types": "./selection-list/index.d.ts",
|
|
405
397
|
"default": "./fesm2022/acorex-components-selection-list.mjs"
|
|
406
398
|
},
|
|
399
|
+
"./selection-list-2": {
|
|
400
|
+
"types": "./selection-list-2/index.d.ts",
|
|
401
|
+
"default": "./fesm2022/acorex-components-selection-list-2.mjs"
|
|
402
|
+
},
|
|
407
403
|
"./side-menu": {
|
|
408
404
|
"types": "./side-menu/index.d.ts",
|
|
409
405
|
"default": "./fesm2022/acorex-components-side-menu.mjs"
|
|
410
406
|
},
|
|
411
|
-
"./slider": {
|
|
412
|
-
"types": "./slider/index.d.ts",
|
|
413
|
-
"default": "./fesm2022/acorex-components-slider.mjs"
|
|
414
|
-
},
|
|
415
407
|
"./skeleton": {
|
|
416
408
|
"types": "./skeleton/index.d.ts",
|
|
417
409
|
"default": "./fesm2022/acorex-components-skeleton.mjs"
|
|
418
410
|
},
|
|
411
|
+
"./slider": {
|
|
412
|
+
"types": "./slider/index.d.ts",
|
|
413
|
+
"default": "./fesm2022/acorex-components-slider.mjs"
|
|
414
|
+
},
|
|
419
415
|
"./sliding-item": {
|
|
420
416
|
"types": "./sliding-item/index.d.ts",
|
|
421
417
|
"default": "./fesm2022/acorex-components-sliding-item.mjs"
|
|
@@ -855,6 +855,8 @@ declare class AXSchedulerPickerService {
|
|
|
855
855
|
* Parses standard cron format: minute hour day month weekday
|
|
856
856
|
*/
|
|
857
857
|
fromCronExpression(cron: string): Promise<AXSchedulerPickerValue | null>;
|
|
858
|
+
/** cron-parser v5 field values may include special chars (L, W, โฆ); keep numbers only. */
|
|
859
|
+
private cronFieldNumericValues;
|
|
858
860
|
/**
|
|
859
861
|
* Analyze a cron field to extract interval and values
|
|
860
862
|
*/
|
package/conversation2/README.md
DELETED
|
@@ -1,463 +0,0 @@
|
|
|
1
|
-
# @acorex/components/conversation2
|
|
2
|
-
|
|
3
|
-
A modern, fully-featured conversation/chat component for Angular 18+. Built with signals, standalone components, and extensibility in mind.
|
|
4
|
-
|
|
5
|
-
## ๐ Features
|
|
6
|
-
|
|
7
|
-
- **Real-time Messaging** - Live message updates with WebSocket support
|
|
8
|
-
- **Multiple Message Types** - Text, images, videos, audio, voice, files, locations, stickers, contacts
|
|
9
|
-
- **Rich Interactions** - Reactions, replies, message editing, deletion, forwarding
|
|
10
|
-
- **Group & Private Chats** - Support for 1-on-1 and group conversations
|
|
11
|
-
- **Typing Indicators** - Real-time typing status
|
|
12
|
-
- **Read Receipts** - Message delivery and read status
|
|
13
|
-
- **Infinite Scroll** - Efficient pagination for message history
|
|
14
|
-
- **Search** - Search within conversations and messages
|
|
15
|
-
- **Extensible** - Plugin system for custom message renderers and actions
|
|
16
|
-
- **Responsive** - Mobile-friendly design
|
|
17
|
-
- **Accessibility** - ARIA labels and keyboard navigation
|
|
18
|
-
|
|
19
|
-
## ๐ฆ Installation
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
npm install @acorex/components/conversation2
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## ๐ง Peer Dependencies
|
|
26
|
-
|
|
27
|
-
This package requires the following peer dependencies:
|
|
28
|
-
|
|
29
|
-
### Required Angular Dependencies
|
|
30
|
-
|
|
31
|
-
```json
|
|
32
|
-
{
|
|
33
|
-
"@angular/common": "^18.0.0",
|
|
34
|
-
"@angular/core": "^18.0.0",
|
|
35
|
-
"@angular/forms": "^18.0.0",
|
|
36
|
-
"rxjs": "^7.8.0"
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### Required Acorex Dependencies
|
|
41
|
-
|
|
42
|
-
#### Core Packages
|
|
43
|
-
|
|
44
|
-
- `@acorex/cdk/common` - Common utilities and directives
|
|
45
|
-
- `@acorex/core/date-time` - Date and time formatting
|
|
46
|
-
- `@acorex/core/format` - General formatting utilities
|
|
47
|
-
|
|
48
|
-
#### Component Packages
|
|
49
|
-
|
|
50
|
-
- `@acorex/components/avatar` - User avatars
|
|
51
|
-
- `@acorex/components/badge` - Notification badges
|
|
52
|
-
- `@acorex/components/button` - Button components
|
|
53
|
-
- `@acorex/components/decorators` - Decorative elements
|
|
54
|
-
- `@acorex/components/dialog` - Dialog service
|
|
55
|
-
- `@acorex/components/dropdown` - Dropdown panels
|
|
56
|
-
- `@acorex/components/image` - Image components
|
|
57
|
-
- `@acorex/components/label` - Label components
|
|
58
|
-
- `@acorex/components/loading` - Loading indicators
|
|
59
|
-
- `@acorex/components/menu` - Context menus
|
|
60
|
-
- `@acorex/components/popover` - Popover components
|
|
61
|
-
- `@acorex/components/popup` - Popup service
|
|
62
|
-
- `@acorex/components/search-box` - Search functionality
|
|
63
|
-
- `@acorex/components/select-box` - Select dropdowns
|
|
64
|
-
- `@acorex/components/tabs` - Tab components
|
|
65
|
-
- `@acorex/components/text-area` - Text input areas
|
|
66
|
-
- `@acorex/components/text-box` - Text input boxes
|
|
67
|
-
- `@acorex/components/toast` - Toast notifications
|
|
68
|
-
- `@acorex/components/tooltip` - Tooltips
|
|
69
|
-
- `@acorex/components/uploader` - File upload functionality
|
|
70
|
-
|
|
71
|
-
## ๐ฏ Quick Start
|
|
72
|
-
|
|
73
|
-
> **New to Conversation2?** Check out our [5-Minute Quick Start Guide](./docs/QUICK-START.md) for the fastest way to get started!
|
|
74
|
-
|
|
75
|
-
### Detailed Setup
|
|
76
|
-
|
|
77
|
-
### 1. Standalone Application (Recommended)
|
|
78
|
-
|
|
79
|
-
```typescript
|
|
80
|
-
import { ApplicationConfig } from '@angular/core';
|
|
81
|
-
import {
|
|
82
|
-
provideConversation,
|
|
83
|
-
AXIndexedDBUserApi,
|
|
84
|
-
AXIndexedDBConversationApi,
|
|
85
|
-
AXIndexedDBMessageApi,
|
|
86
|
-
AXIndexedDBRealtimeApi,
|
|
87
|
-
} from '@acorex/components/conversation2';
|
|
88
|
-
|
|
89
|
-
export const appConfig: ApplicationConfig = {
|
|
90
|
-
providers: [
|
|
91
|
-
MyAppUploaderService,
|
|
92
|
-
provideConversation({
|
|
93
|
-
userApi: AXIndexedDBUserApi,
|
|
94
|
-
conversationApi: AXIndexedDBConversationApi,
|
|
95
|
-
messageApi: AXIndexedDBMessageApi,
|
|
96
|
-
realtimeApi: AXIndexedDBRealtimeApi, // optional
|
|
97
|
-
config: {
|
|
98
|
-
messagePageSize: 50,
|
|
99
|
-
conversationPageSize: 30,
|
|
100
|
-
},
|
|
101
|
-
registry: {
|
|
102
|
-
// Optional: Register custom message renderers, actions, etc.
|
|
103
|
-
},
|
|
104
|
-
}),
|
|
105
|
-
],
|
|
106
|
-
};
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### 2. NgModule Application (Legacy)
|
|
110
|
-
|
|
111
|
-
```typescript
|
|
112
|
-
import { NgModule } from '@angular/core';
|
|
113
|
-
import {
|
|
114
|
-
AXConversation2Module,
|
|
115
|
-
AXIndexedDBUserApi,
|
|
116
|
-
AXIndexedDBConversationApi,
|
|
117
|
-
AXIndexedDBMessageApi,
|
|
118
|
-
AXIndexedDBRealtimeApi,
|
|
119
|
-
} from '@acorex/components/conversation2';
|
|
120
|
-
|
|
121
|
-
@NgModule({
|
|
122
|
-
imports: [
|
|
123
|
-
AXConversation2Module.forRoot({
|
|
124
|
-
userApi: AXIndexedDBUserApi,
|
|
125
|
-
conversationApi: AXIndexedDBConversationApi,
|
|
126
|
-
messageApi: AXIndexedDBMessageApi,
|
|
127
|
-
realtimeApi: AXIndexedDBRealtimeApi,
|
|
128
|
-
config: { /* ... */ },
|
|
129
|
-
}),
|
|
130
|
-
],
|
|
131
|
-
})
|
|
132
|
-
export class AppModule {}
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### 3. Use in Template
|
|
136
|
-
|
|
137
|
-
```html
|
|
138
|
-
<ax-conversation-container></ax-conversation-container>
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
## ๐ API Implementation
|
|
142
|
-
|
|
143
|
-
You must provide an API implementation that extends `AXConversationApi`:
|
|
144
|
-
|
|
145
|
-
```typescript
|
|
146
|
-
import { Injectable } from '@angular/core';
|
|
147
|
-
import { HttpClient } from '@angular/common/http';
|
|
148
|
-
import { AXConversationApi, AXPagination, AXPaginatedResult } from '@acorex/components/conversation2';
|
|
149
|
-
|
|
150
|
-
@Injectable()
|
|
151
|
-
export class MyConversationApi extends AXConversationApi {
|
|
152
|
-
constructor(private http: HttpClient) {
|
|
153
|
-
super();
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
async connect(): Promise<void> {
|
|
157
|
-
// Initialize WebSocket connection
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
async fetchConversations(pagination: AXPagination): Promise<AXPaginatedResult<AXConversation>> {
|
|
161
|
-
const response = await this.http.get('/api/conversations', {
|
|
162
|
-
params: { page: pagination.page, pageSize: pagination.pageSize }
|
|
163
|
-
}).toPromise();
|
|
164
|
-
return response;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Implement other required methods...
|
|
168
|
-
}
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### Built-in API Implementations
|
|
172
|
-
|
|
173
|
-
#### IndexedDB API (Development/Demo)
|
|
174
|
-
|
|
175
|
-
```typescript
|
|
176
|
-
import {
|
|
177
|
-
provideConversation,
|
|
178
|
-
AXIndexedDBUserApi,
|
|
179
|
-
AXIndexedDBConversationApi,
|
|
180
|
-
AXIndexedDBMessageApi,
|
|
181
|
-
AXIndexedDBRealtimeApi,
|
|
182
|
-
} from '@acorex/components/conversation2';
|
|
183
|
-
|
|
184
|
-
// Provides in-memory storage with sample data
|
|
185
|
-
// Perfect for development and demos
|
|
186
|
-
provideConversation({
|
|
187
|
-
userApi: AXIndexedDBUserApi,
|
|
188
|
-
conversationApi: AXIndexedDBConversationApi,
|
|
189
|
-
messageApi: AXIndexedDBMessageApi,
|
|
190
|
-
realtimeApi: AXIndexedDBRealtimeApi,
|
|
191
|
-
});
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
Register a service that subscribes to `AXUploaderService.onUpload`, `onResolveUrl`, and `onDeleteMedia` (see showcase `AXShowcaseConversationIndexedDbUploaderService`).
|
|
195
|
-
|
|
196
|
-
#### IndexedDB with AI API (AI-Powered Demo)
|
|
197
|
-
|
|
198
|
-
```typescript
|
|
199
|
-
import {
|
|
200
|
-
provideConversation,
|
|
201
|
-
AXIndexedDBUserApi,
|
|
202
|
-
AXIndexedDBConversationApi,
|
|
203
|
-
AXIndexedDBMessageAIApi,
|
|
204
|
-
AXIndexedDBRealtimeApi,
|
|
205
|
-
} from '@acorex/components/conversation2';
|
|
206
|
-
|
|
207
|
-
// Includes AI-powered auto-responses via message API
|
|
208
|
-
provideConversation({
|
|
209
|
-
userApi: AXIndexedDBUserApi,
|
|
210
|
-
conversationApi: AXIndexedDBConversationApi,
|
|
211
|
-
messageApi: AXIndexedDBMessageAIApi,
|
|
212
|
-
realtimeApi: AXIndexedDBRealtimeApi,
|
|
213
|
-
});
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
## โ๏ธ Configuration
|
|
217
|
-
|
|
218
|
-
### Conversation Config
|
|
219
|
-
|
|
220
|
-
```typescript
|
|
221
|
-
interface AXConversationConfig {
|
|
222
|
-
// Pagination
|
|
223
|
-
messagePageSize?: number; // Default: 50
|
|
224
|
-
conversationPageSize?: number; // Default: 30
|
|
225
|
-
infiniteScrollThreshold?: number; // Default: 200px
|
|
226
|
-
scrollThreshold?: number; // Default: 100px
|
|
227
|
-
|
|
228
|
-
// UI Behavior
|
|
229
|
-
messageHighlightDuration?: number; // Default: 2000ms
|
|
230
|
-
typingIndicatorTimeout?: number; // Default: 3000ms
|
|
231
|
-
}
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
### Registry Configuration
|
|
235
|
-
|
|
236
|
-
```typescript
|
|
237
|
-
interface AXRegistryConfiguration {
|
|
238
|
-
messageRenderers?: AXMessageRenderer[];
|
|
239
|
-
messageActions?: AXMessageAction[];
|
|
240
|
-
composerActions?: AXComposerAction[];
|
|
241
|
-
composerTabs?: AXComposerTab[];
|
|
242
|
-
conversationTabs?: AXConversationTab[];
|
|
243
|
-
infoBarActions?: AXInfoBarAction[];
|
|
244
|
-
conversationItemActions?: AXConversationItemAction[];
|
|
245
|
-
}
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
## ๐จ Customization
|
|
249
|
-
|
|
250
|
-
### Custom Message Renderer
|
|
251
|
-
|
|
252
|
-
```typescript
|
|
253
|
-
import { Component, input } from '@angular/core';
|
|
254
|
-
import { AXMessageRenderer } from '@acorex/components/conversation2';
|
|
255
|
-
|
|
256
|
-
@Component({
|
|
257
|
-
selector: 'my-custom-renderer',
|
|
258
|
-
template: `<div>{{ message().payload.customData }}</div>`
|
|
259
|
-
})
|
|
260
|
-
export class MyCustomRendererComponent {
|
|
261
|
-
message = input.required<AXMessage>();
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
const myRenderer: AXMessageRenderer = {
|
|
265
|
-
type: 'custom',
|
|
266
|
-
component: MyCustomRendererComponent,
|
|
267
|
-
priority: 100
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
// Register in config
|
|
271
|
-
provideConversation({
|
|
272
|
-
api: MyApi,
|
|
273
|
-
registry: {
|
|
274
|
-
messageRenderers: [myRenderer]
|
|
275
|
-
}
|
|
276
|
-
});
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
### Custom Message Action
|
|
280
|
-
|
|
281
|
-
```typescript
|
|
282
|
-
const forwardAction: AXMessageAction = {
|
|
283
|
-
id: 'forward',
|
|
284
|
-
label: 'Forward',
|
|
285
|
-
icon: 'forward',
|
|
286
|
-
shortcut: 'Ctrl+F',
|
|
287
|
-
enabled: (message, user) => message.senderId === user.id,
|
|
288
|
-
execute: async (message, service) => {
|
|
289
|
-
// Forward logic
|
|
290
|
-
}
|
|
291
|
-
};
|
|
292
|
-
|
|
293
|
-
provideConversation({
|
|
294
|
-
api: MyApi,
|
|
295
|
-
registry: {
|
|
296
|
-
messageActions: [forwardAction]
|
|
297
|
-
}
|
|
298
|
-
});
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
## ๐ฑ Components
|
|
302
|
-
|
|
303
|
-
### Main Components
|
|
304
|
-
|
|
305
|
-
- `<ax-conversation-container>` - Full conversation UI with sidebar, messages, and composer
|
|
306
|
-
- `<ax-conversation-sidebar>` - Conversation list sidebar
|
|
307
|
-
- `<ax-conversation-message-list>` - Message list with virtual scrolling
|
|
308
|
-
- `<ax-conversation-composer>` - Message input area
|
|
309
|
-
- `<ax-conversation-info-bar>` - Conversation header with actions
|
|
310
|
-
|
|
311
|
-
### Usage Examples
|
|
312
|
-
|
|
313
|
-
```html
|
|
314
|
-
<!-- Full conversation UI -->
|
|
315
|
-
<ax-conversation-container></ax-conversation-container>
|
|
316
|
-
|
|
317
|
-
<!-- Custom layout -->
|
|
318
|
-
<div class="my-chat-layout">
|
|
319
|
-
<ax-conversation-sidebar></ax-conversation-sidebar>
|
|
320
|
-
<div class="chat-main">
|
|
321
|
-
<ax-conversation-info-bar></ax-conversation-info-bar>
|
|
322
|
-
<ax-conversation-message-list></ax-conversation-message-list>
|
|
323
|
-
<ax-conversation-composer></ax-conversation-composer>
|
|
324
|
-
</div>
|
|
325
|
-
</div>
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
## ๐ญ Services
|
|
329
|
-
|
|
330
|
-
### AXConversationService
|
|
331
|
-
|
|
332
|
-
Main service for conversation operations:
|
|
333
|
-
|
|
334
|
-
```typescript
|
|
335
|
-
import { inject } from '@angular/core';
|
|
336
|
-
import { AXConversationService } from '@acorex/components/conversation2';
|
|
337
|
-
|
|
338
|
-
export class MyComponent {
|
|
339
|
-
private conversationService = inject(AXConversationService);
|
|
340
|
-
|
|
341
|
-
async sendMessage() {
|
|
342
|
-
await this.conversationService.sendMessage({
|
|
343
|
-
conversationId: 'conv-123',
|
|
344
|
-
type: 'text',
|
|
345
|
-
payload: { text: 'Hello!' }
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
async createConversation() {
|
|
350
|
-
const conv = await this.conversationService.createConversation(
|
|
351
|
-
['user-1', 'user-2'],
|
|
352
|
-
'private'
|
|
353
|
-
);
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
## ๐งช Testing
|
|
359
|
-
|
|
360
|
-
```typescript
|
|
361
|
-
import { TestBed } from '@angular/core/testing';
|
|
362
|
-
import { provideConversation, AXConversationService } from '@acorex/components/conversation2';
|
|
363
|
-
import { MockUserApi, MockConversationApi, MockMessageApi } from './mocks/mock-apis';
|
|
364
|
-
|
|
365
|
-
describe('MyComponent', () => {
|
|
366
|
-
beforeEach(() => {
|
|
367
|
-
TestBed.configureTestingModule({
|
|
368
|
-
providers: [
|
|
369
|
-
provideConversation({
|
|
370
|
-
userApi: MockUserApi,
|
|
371
|
-
conversationApi: MockConversationApi,
|
|
372
|
-
messageApi: MockMessageApi,
|
|
373
|
-
}),
|
|
374
|
-
],
|
|
375
|
-
});
|
|
376
|
-
});
|
|
377
|
-
|
|
378
|
-
it('should send message', async () => {
|
|
379
|
-
const service = TestBed.inject(AXConversationService);
|
|
380
|
-
const message = await service.sendMessage({
|
|
381
|
-
conversationId: 'test',
|
|
382
|
-
type: 'text',
|
|
383
|
-
payload: { text: 'Test' },
|
|
384
|
-
});
|
|
385
|
-
expect(message).toBeDefined();
|
|
386
|
-
});
|
|
387
|
-
});
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
## ๐ฏ Message Types
|
|
391
|
-
|
|
392
|
-
Supported message types out of the box:
|
|
393
|
-
|
|
394
|
-
- **text** - Plain text messages
|
|
395
|
-
- **image** - Image messages with thumbnails
|
|
396
|
-
- **video** - Video messages with playback
|
|
397
|
-
- **audio** - Audio file messages
|
|
398
|
-
- **voice** - Voice recordings
|
|
399
|
-
- **file** - Generic file attachments
|
|
400
|
-
- **location** - Location sharing
|
|
401
|
-
- **sticker** - Sticker messages
|
|
402
|
-
- **contact** - Contact card sharing
|
|
403
|
-
- **system** - System notifications
|
|
404
|
-
|
|
405
|
-
## ๐ Security Considerations
|
|
406
|
-
|
|
407
|
-
- **API Keys**: Never hardcode API keys in source code. Use environment variables or injection tokens.
|
|
408
|
-
- **File Upload**: Validate file types and sizes on both client and server.
|
|
409
|
-
- **XSS Protection**: All user content is sanitized by default.
|
|
410
|
-
- **Authentication**: Implement proper authentication in your API layer.
|
|
411
|
-
|
|
412
|
-
## ๐ Performance Tips
|
|
413
|
-
|
|
414
|
-
1. **Virtual Scrolling**: Enabled by default for large message lists
|
|
415
|
-
2. **Lazy Loading**: Images and media are loaded on demand
|
|
416
|
-
3. **Pagination**: Messages are loaded in pages to reduce initial load
|
|
417
|
-
4. **Debouncing**: Typing indicators are debounced to reduce network traffic
|
|
418
|
-
5. **Memoization**: Use computed signals for expensive calculations
|
|
419
|
-
|
|
420
|
-
## ๐ Troubleshooting
|
|
421
|
-
|
|
422
|
-
### Common Issues
|
|
423
|
-
|
|
424
|
-
**Issue**: Messages not appearing
|
|
425
|
-
|
|
426
|
-
- Check if API is connected: `conversationService.connectionStatus$()`
|
|
427
|
-
- Verify API implementation returns correct data structure
|
|
428
|
-
|
|
429
|
-
**Issue**: File upload fails
|
|
430
|
-
|
|
431
|
-
- Check composer file-type catalogs and per-action `uploadConstraints` (`allowedMimeTypes`, `minSize`, `maxSize`)
|
|
432
|
-
- Register a handler service subscribed to `AXUploaderService.onUpload` (and resolve/delete events) with progress and `AbortSignal` support
|
|
433
|
-
|
|
434
|
-
**Issue**: Styling issues
|
|
435
|
-
|
|
436
|
-
- Ensure all Acorex component styles are imported
|
|
437
|
-
- Check for CSS conflicts with global styles
|
|
438
|
-
|
|
439
|
-
## ๐ Additional Resources
|
|
440
|
-
|
|
441
|
-
- [Quick Start Guide](./docs/QUICK-START.md) - Get started in 5 minutes
|
|
442
|
-
- [Architecture Overview](./docs/ARCHITECTURE-OVERVIEW.md) - Understand the module structure
|
|
443
|
-
- [API Documentation](./docs/ARCHITECTURE-APIS.md) - Implement custom backends
|
|
444
|
-
- [Component Guide](./docs/ARCHITECTURE-COMPONENTS.md) - Learn about components
|
|
445
|
-
- [Plugin System](./docs/ARCHITECTURE-PLUGINS.md) - Extend functionality
|
|
446
|
-
- [Usage Guide](./docs/USAGE-GUIDE.md) - Advanced usage patterns
|
|
447
|
-
|
|
448
|
-
## ๐ค Contributing
|
|
449
|
-
|
|
450
|
-
Contributions are welcome! Please read our [Contributing Guide](./CONTRIBUTING.md) for details.
|
|
451
|
-
|
|
452
|
-
## ๐ License
|
|
453
|
-
|
|
454
|
-
MIT License - see LICENSE file for details
|
|
455
|
-
|
|
456
|
-
## ๐ Changelog
|
|
457
|
-
|
|
458
|
-
See [CHANGELOG.md](./CHANGELOG.md) for version history and updates.
|
|
459
|
-
|
|
460
|
-
## ๐ฌ Support
|
|
461
|
-
|
|
462
|
-
- GitHub Issues: [Report a bug](https://github.com/acorexui/acorex-ui/issues)
|
|
463
|
-
- Discussions: [Ask questions](https://github.com/acorexui/acorex-ui/discussions)
|