@modochats/widget 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/.github/workflows/build-and-publish.yml +174 -0
  2. package/.vscode/settings.json +3 -0
  3. package/.yarn/install-state.gz +0 -0
  4. package/README.md +163 -0
  5. package/cdn-dist/README.md +42 -0
  6. package/cdn-dist/modo-web-component.js +1344 -0
  7. package/cdn-dist/modo-web-component.min.js +1 -0
  8. package/cdn-dist/package.json +27 -0
  9. package/dist/src/app.d.ts +29 -0
  10. package/dist/src/app.js +1 -0
  11. package/dist/src/app.js.map +1 -0
  12. package/dist/src/constants/index.d.ts +9 -0
  13. package/dist/src/constants/index.js +1 -0
  14. package/dist/src/constants/index.js.map +1 -0
  15. package/dist/src/constants/regex.d.ts +2 -0
  16. package/dist/src/constants/regex.js +1 -0
  17. package/dist/src/constants/regex.js.map +1 -0
  18. package/dist/src/index.d.ts +9 -0
  19. package/dist/src/index.js +1 -0
  20. package/dist/src/index.js.map +1 -0
  21. package/dist/src/models/chatbot.d.ts +23 -0
  22. package/dist/src/models/chatbot.js +1 -0
  23. package/dist/src/models/chatbot.js.map +1 -0
  24. package/dist/src/models/conversation.d.ts +22 -0
  25. package/dist/src/models/conversation.js +1 -0
  26. package/dist/src/models/conversation.js.map +1 -0
  27. package/dist/src/models/customer-data.d.ts +31 -0
  28. package/dist/src/models/customer-data.js +1 -0
  29. package/dist/src/models/customer-data.js.map +1 -0
  30. package/dist/src/models/message-utils.d.ts +12 -0
  31. package/dist/src/models/message-utils.js +1 -0
  32. package/dist/src/models/message-utils.js.map +1 -0
  33. package/dist/src/services/chat/conversation.d.ts +22 -0
  34. package/dist/src/services/chat/conversation.js +1 -0
  35. package/dist/src/services/chat/conversation.js.map +1 -0
  36. package/dist/src/services/chat/message-utils.d.ts +12 -0
  37. package/dist/src/services/chat/message-utils.js +1 -0
  38. package/dist/src/services/chat/message-utils.js.map +1 -0
  39. package/dist/src/services/chat/model.d.ts +27 -0
  40. package/dist/src/services/chat/model.js +1 -0
  41. package/dist/src/services/chat/model.js.map +1 -0
  42. package/dist/src/services/chatbot/chatbot.d.ts +23 -0
  43. package/dist/src/services/chatbot/chatbot.js +1 -0
  44. package/dist/src/services/chatbot/chatbot.js.map +1 -0
  45. package/dist/src/services/checker.d.ts +3 -0
  46. package/dist/src/services/checker.js +1 -0
  47. package/dist/src/services/checker.js.map +1 -0
  48. package/dist/src/services/listeners/adders.d.ts +3 -0
  49. package/dist/src/services/listeners/adders.js +1 -0
  50. package/dist/src/services/listeners/adders.js.map +1 -0
  51. package/dist/src/services/listeners/fn.d.ts +3 -0
  52. package/dist/src/services/listeners/fn.js +1 -0
  53. package/dist/src/services/listeners/fn.js.map +1 -0
  54. package/dist/src/services/socket/utils.d.ts +2 -0
  55. package/dist/src/services/socket/utils.js +1 -0
  56. package/dist/src/services/socket/utils.js.map +1 -0
  57. package/dist/src/services/ui/fn.d.ts +13 -0
  58. package/dist/src/services/ui/fn.js +1 -0
  59. package/dist/src/services/ui/fn.js.map +1 -0
  60. package/dist/src/services/ui/html.d.ts +3 -0
  61. package/dist/src/services/ui/html.js +1 -0
  62. package/dist/src/services/ui/html.js.map +1 -0
  63. package/dist/src/services/user/customer-data.d.ts +31 -0
  64. package/dist/src/services/user/customer-data.js +1 -0
  65. package/dist/src/services/user/customer-data.js.map +1 -0
  66. package/dist/src/services/voice-chat/model.d.ts +12 -0
  67. package/dist/src/services/voice-chat/model.js +1 -0
  68. package/dist/src/services/voice-chat/model.js.map +1 -0
  69. package/dist/src/services/voice-chat/utils.d.ts +9 -0
  70. package/dist/src/services/voice-chat/utils.js +1 -0
  71. package/dist/src/services/voice-chat/utils.js.map +1 -0
  72. package/dist/src/tools/fetch.d.ts +2 -0
  73. package/dist/src/tools/fetch.js +1 -0
  74. package/dist/src/tools/fetch.js.map +1 -0
  75. package/dist/src/types/app.d.ts +17 -0
  76. package/dist/src/types/app.js.map +1 -0
  77. package/dist/src/types/conversation.d.ts +14 -0
  78. package/dist/src/types/conversation.js +1 -0
  79. package/dist/src/types/conversation.js.map +1 -0
  80. package/dist/src/types/socket.d.ts +6 -0
  81. package/dist/src/types/socket.js +1 -0
  82. package/dist/src/types/socket.js.map +1 -0
  83. package/dist/src/types/window.d.ts +9 -0
  84. package/dist/src/types/window.js +1 -0
  85. package/dist/src/types/window.js.map +1 -0
  86. package/dist/src/utils/audio.d.ts +3 -0
  87. package/dist/src/utils/audio.js +1 -0
  88. package/dist/src/utils/audio.js.map +1 -0
  89. package/dist/src/utils/browser.d.ts +2 -0
  90. package/dist/src/utils/browser.js +1 -0
  91. package/dist/src/utils/browser.js.map +1 -0
  92. package/dist/src/utils/fetch.d.ts +18 -0
  93. package/dist/src/utils/fetch.js +1 -0
  94. package/dist/src/utils/fetch.js.map +1 -0
  95. package/dist/src/utils/uuid.d.ts +6 -0
  96. package/dist/src/utils/uuid.js +1 -0
  97. package/dist/src/utils/uuid.js.map +1 -0
  98. package/dist/types/src/app.d.ts +30 -0
  99. package/dist/types/src/app.d.ts.map +1 -0
  100. package/dist/types/src/constants/index.d.ts +10 -0
  101. package/dist/types/src/constants/index.d.ts.map +1 -0
  102. package/dist/types/src/constants/regex.d.ts +3 -0
  103. package/dist/types/src/constants/regex.d.ts.map +1 -0
  104. package/dist/types/src/index.d.ts +10 -0
  105. package/dist/types/src/index.d.ts.map +1 -0
  106. package/dist/types/src/models/chatbot.d.ts +24 -0
  107. package/dist/types/src/models/chatbot.d.ts.map +1 -0
  108. package/dist/types/src/models/conversation.d.ts +23 -0
  109. package/dist/types/src/models/conversation.d.ts.map +1 -0
  110. package/dist/types/src/models/customer-data.d.ts +32 -0
  111. package/dist/types/src/models/customer-data.d.ts.map +1 -0
  112. package/dist/types/src/models/message-utils.d.ts +13 -0
  113. package/dist/types/src/models/message-utils.d.ts.map +1 -0
  114. package/dist/types/src/services/chat/conversation.d.ts +23 -0
  115. package/dist/types/src/services/chat/conversation.d.ts.map +1 -0
  116. package/dist/types/src/services/chat/message-utils.d.ts +13 -0
  117. package/dist/types/src/services/chat/message-utils.d.ts.map +1 -0
  118. package/dist/types/src/services/chat/model.d.ts +28 -0
  119. package/dist/types/src/services/chat/model.d.ts.map +1 -0
  120. package/dist/types/src/services/chatbot/chatbot.d.ts +24 -0
  121. package/dist/types/src/services/chatbot/chatbot.d.ts.map +1 -0
  122. package/dist/types/src/services/checker.d.ts +4 -0
  123. package/dist/types/src/services/checker.d.ts.map +1 -0
  124. package/dist/types/src/services/listeners/adders.d.ts +4 -0
  125. package/dist/types/src/services/listeners/adders.d.ts.map +1 -0
  126. package/dist/types/src/services/listeners/fn.d.ts +4 -0
  127. package/dist/types/src/services/listeners/fn.d.ts.map +1 -0
  128. package/dist/types/src/services/socket/utils.d.ts +3 -0
  129. package/dist/types/src/services/socket/utils.d.ts.map +1 -0
  130. package/dist/types/src/services/ui/fn.d.ts +14 -0
  131. package/dist/types/src/services/ui/fn.d.ts.map +1 -0
  132. package/dist/types/src/services/ui/html.d.ts +4 -0
  133. package/dist/types/src/services/ui/html.d.ts.map +1 -0
  134. package/dist/types/src/services/user/customer-data.d.ts +32 -0
  135. package/dist/types/src/services/user/customer-data.d.ts.map +1 -0
  136. package/dist/types/src/services/voice-chat/model.d.ts +13 -0
  137. package/dist/types/src/services/voice-chat/model.d.ts.map +1 -0
  138. package/dist/types/src/services/voice-chat/utils.d.ts +10 -0
  139. package/dist/types/src/services/voice-chat/utils.d.ts.map +1 -0
  140. package/dist/types/src/tools/fetch.d.ts +3 -0
  141. package/dist/types/src/tools/fetch.d.ts.map +1 -0
  142. package/dist/types/src/types/app.d.ts +18 -0
  143. package/dist/types/src/types/app.d.ts.map +1 -0
  144. package/dist/types/src/types/conversation.d.ts +15 -0
  145. package/dist/types/src/types/conversation.d.ts.map +1 -0
  146. package/dist/types/src/types/socket.d.ts +7 -0
  147. package/dist/types/src/types/socket.d.ts.map +1 -0
  148. package/dist/types/src/types/window.d.ts +10 -0
  149. package/dist/types/src/types/window.d.ts.map +1 -0
  150. package/dist/types/src/utils/audio.d.ts +4 -0
  151. package/dist/types/src/utils/audio.d.ts.map +1 -0
  152. package/dist/types/src/utils/browser.d.ts +3 -0
  153. package/dist/types/src/utils/browser.d.ts.map +1 -0
  154. package/dist/types/src/utils/fetch.d.ts +19 -0
  155. package/dist/types/src/utils/fetch.d.ts.map +1 -0
  156. package/dist/types/src/utils/uuid.d.ts +7 -0
  157. package/dist/types/src/utils/uuid.d.ts.map +1 -0
  158. package/package.json +76 -0
  159. package/rollup.config.js +18 -0
  160. package/rollup.dev.config.js +22 -0
  161. package/scripts/create-umd-bundle.js +213 -0
  162. package/scripts/terser-minify.js +112 -0
  163. package/src/app.ts +117 -0
  164. package/src/constants/index.ts +21 -0
  165. package/src/constants/regex.ts +2 -0
  166. package/src/index.ts +16 -0
  167. package/src/services/chat/conversation.ts +135 -0
  168. package/src/services/chat/message-utils.ts +221 -0
  169. package/src/services/chat/model.ts +139 -0
  170. package/src/services/chatbot/chatbot.ts +66 -0
  171. package/src/services/checker.ts +10 -0
  172. package/src/services/listeners/adders.ts +178 -0
  173. package/src/services/listeners/fn.ts +77 -0
  174. package/src/services/socket/utils.ts +9 -0
  175. package/src/services/ui/fn.ts +254 -0
  176. package/src/services/ui/html.ts +192 -0
  177. package/src/services/user/customer-data.ts +78 -0
  178. package/src/services/voice-chat/model.ts +79 -0
  179. package/src/services/voice-chat/utils.ts +137 -0
  180. package/src/tools/fetch.ts +7 -0
  181. package/src/types/app.ts +17 -0
  182. package/src/types/conversation.ts +14 -0
  183. package/src/types/socket.ts +7 -0
  184. package/src/types/window.ts +12 -0
  185. package/src/utils/audio.ts +67 -0
  186. package/src/utils/browser.ts +4 -0
  187. package/src/utils/fetch.ts +98 -0
  188. package/src/utils/uuid.ts +13 -0
  189. package/temp/audio/new-message.mp3 +0 -0
  190. package/temp/audio/on-hold.mp3 +0 -0
  191. package/temp/audio-processor.js +261 -0
  192. package/temp/css/index.css +2283 -0
  193. package/temp/dev.html +87 -0
  194. package/temp/index.html +16 -0
  195. package/tsconfig.json +119 -0
@@ -0,0 +1,174 @@
1
+ name: Build and Publish to CDN
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ permissions:
10
+ contents: write
11
+
12
+ jobs:
13
+ build:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - name: Checkout code
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Setup Node.js
21
+ uses: actions/setup-node@v4
22
+ with:
23
+ node-version: "23"
24
+
25
+ - name: Install dependencies
26
+ run: npm install
27
+
28
+ - name: Build project
29
+ run: npm run build:cdn
30
+
31
+ - name: Create build artifacts
32
+ run: |
33
+ mkdir -p build-artifacts
34
+ cp -r dist build-artifacts/
35
+ cp -r temp build-artifacts/
36
+ cp -r cdn-dist build-artifacts/
37
+ cp package.json build-artifacts/
38
+ cp README.md build-artifacts/
39
+
40
+ - name: Upload build artifacts
41
+ uses: actions/upload-artifact@v4
42
+ with:
43
+ name: build-files
44
+ path: build-artifacts/
45
+ retention-days: 30
46
+
47
+ publish-cdn:
48
+ needs: build
49
+ runs-on: ubuntu-latest
50
+ if: github.ref == 'refs/heads/main' && github.event_name == 'push' && !contains(github.event.head_commit.message, 'Add CDN distribution files for build')
51
+
52
+ steps:
53
+ - name: Checkout code
54
+ uses: actions/checkout@v4
55
+
56
+ - name: Download build artifacts
57
+ uses: actions/download-artifact@v4
58
+ with:
59
+ name: build-files
60
+ path: build-artifacts/
61
+
62
+ - name: Setup Node.js
63
+ uses: actions/setup-node@v4
64
+ with:
65
+ node-version: "23"
66
+
67
+ - name: Use CDN-ready files
68
+ run: |
69
+ # The CDN files are already created by the build:cdn script
70
+ echo "Using pre-built CDN files from cdn-dist/"
71
+ ls -la build-artifacts/cdn-dist/
72
+
73
+ - name: Commit CDN files to repository
74
+ env:
75
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
76
+ run: |
77
+ # Copy CDN files to the repository root
78
+ cp -r build-artifacts/cdn-dist/ ./
79
+
80
+ # Configure git
81
+ git config --local user.email "action@github.com"
82
+ git config --local user.name "GitHub Action"
83
+
84
+ # Add and commit CDN files
85
+ git add cdn-dist/
86
+ git commit -m "Add CDN distribution files for build ${{ github.run_number }}" || echo "No changes to commit"
87
+
88
+ # Push to repository
89
+ git push https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git main
90
+
91
+ - name: Create GitHub Release
92
+ id: create_release
93
+ uses: actions/create-release@v1
94
+ env:
95
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
96
+ with:
97
+ tag_name: v${{ github.run_number }}
98
+ release_name: Release v${{ github.run_number }}
99
+ body: |
100
+ ## Build ${{ github.run_number }}
101
+
102
+ ### Files included:
103
+ - modo-web-component.js - Legacy UMD bundle
104
+ --modo-widget.js - UMD bundle
105
+ --modo-widget.min.js - Minified UMD bundle
106
+ - modo-web-component.min.js - Legacy Minified UMD bundle
107
+ - dist/ - Full distribution files
108
+
109
+ ### CDN Usage:
110
+ jsDelivr (Recommended):
111
+ <script src="https://cdn.jsdelivr.net/gh/${{ github.repository }}@main/cdn-dist/modo-widget.min.js"></script>
112
+ <script src="https://cdn.jsdelivr.net/gh/${{ github.repository }}@main/cdn-dist/modo-web-component.min.js"></script> (legacy)
113
+
114
+ GitHub Raw:
115
+ <script src="https://raw.githubusercontent.com/${{ github.repository }}/main/cdn-dist/modochat-wifget.min.js"></script>
116
+ <script src="https://raw.githubusercontent.com/${{ github.repository }}/main/cdn-dist/modo-web-component.min.js"></script> (legacy)
117
+
118
+ draft: false
119
+ prerelease: false
120
+
121
+ - name: Upload Release Assets
122
+ uses: actions/upload-release-asset@v1
123
+ env:
124
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
125
+ with:
126
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
127
+ asset_path: ./build-artifacts/cdn-dist/modo-widget.js
128
+ asset_name: modo-widget.js
129
+ asset_content_type: application/javascript
130
+
131
+ - name: Upload Release Assets Legacy
132
+ uses: actions/upload-release-asset@v1
133
+ env:
134
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
135
+ with:
136
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
137
+ asset_path: ./build-artifacts/cdn-dist/modo-web-component.js
138
+ asset_name: modo-web-component.js
139
+ asset_content_type: application/javascript
140
+
141
+ - name: Upload Minified Release Asset
142
+ uses: actions/upload-release-asset@v1
143
+ env:
144
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
145
+ with:
146
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
147
+ asset_path: ./build-artifacts/cdn-dist/modo-widget.min.js
148
+ asset_name: modo-widget.min.js
149
+ asset_content_type: application/javascript
150
+
151
+ - name: Upload Minified Release Asset Legacy
152
+ uses: actions/upload-release-asset@v1
153
+ env:
154
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
155
+ with:
156
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
157
+ asset_path: ./build-artifacts/cdn-dist/modo-web-component.min.js
158
+ asset_name: modo-web-component.min.js
159
+ asset_content_type: application/javascript
160
+
161
+ - name: Upload Dist Folder
162
+ run: |
163
+ cd build-artifacts/cdn-dist
164
+ tar -czf dist.tar.gz dist/
165
+
166
+ - name: Upload Dist Archive
167
+ uses: actions/upload-release-asset@v1
168
+ env:
169
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
170
+ with:
171
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
172
+ asset_path: ./build-artifacts/cdn-dist/dist.tar.gz
173
+ asset_name: dist.tar.gz
174
+ asset_content_type: application/gzip
@@ -0,0 +1,3 @@
1
+ {
2
+ "cSpell.words": ["Modochat"]
3
+ }
Binary file
package/README.md ADDED
@@ -0,0 +1,163 @@
1
+ # Modo Widget
2
+
3
+ A responsive web chat widget for customer support.
4
+
5
+ ## Features
6
+
7
+ - 🌙 Dark/Light theme support with customizable colors
8
+ - 🌐 RTL (Persian/Farsi) language support
9
+ - 📱 Mobile responsive design
10
+ - 💬 Real-time chat functionality with WebSocket connections
11
+ - 🔗 WebSocket connection status indicator
12
+ - 📝 Markdown message support
13
+ - 🎤 Voice chat capabilities
14
+ - 🖥️ Fullscreen mode option
15
+ - 🎨 Customizable position (left/right), primary and foreground colors
16
+ - 👤 User data management and updates
17
+ - ⚡ TypeScript + Modern JavaScript
18
+ - 🔄 Auto-initialization support
19
+
20
+ ## Configuration Options
21
+
22
+ The widget can be customized with the following options:
23
+
24
+ | Option | Type | Default | Description |
25
+ | ----------------- | --------------------- | ----------- | ---------------------------------------------- |
26
+ | `position` | `"left" \| "right"` | `"right"` | Position of the chat widget on the screen |
27
+ | `theme` | `"dark" \| "light"` | `"dark"` | Theme mode (dark or light) |
28
+ | `primaryColor` | `string` | `"#667eea"` | Primary color for the widget |
29
+ | `title` | `string` | `""` | Title displayed in the chat header |
30
+ | `foregroundColor` | `string` | `"#fff"` | Foreground text color |
31
+ | `userData` | `Record<string, any>` | `undefined` | Custom user data object |
32
+ | `autoInit` | `boolean` | `false` | Whether to automatically initialize the widget |
33
+ | `fullScreen` | `boolean` | `false` | Enable fullscreen mode |
34
+
35
+ ## Quick Start
36
+
37
+ ### Development
38
+
39
+ 1. **Install dependencies**
40
+
41
+ ```bash
42
+ yarn install
43
+ ```
44
+
45
+ 2. **Start development server**
46
+
47
+ ```bash
48
+ yarn dev:full
49
+ ```
50
+
51
+ This runs TypeScript compiler, Rollup bundler, and live server concurrently.
52
+
53
+ 3. **Open browser** Navigate to `http://localhost:3000`
54
+
55
+ ### Production Build
56
+
57
+ ```bash
58
+ yarn build
59
+ ```
60
+
61
+ This will:
62
+
63
+ - Compile TypeScript to JavaScript
64
+ - Minify the code
65
+ - Bundle with Rollup
66
+ - Output to `bundle.js`
67
+
68
+ ## Project Structure
69
+
70
+ ```
71
+ ├── src/ # Source code
72
+ │ ├── app.ts # Main application entry
73
+ │ ├── models/ # Data models
74
+ │ ├── services/ # UI and business logic
75
+ │ ├── utils/ # Helper utilities
76
+ │ └── types/ # TypeScript types
77
+ ├── temp/ # Development files
78
+ │ ├── css/ # Compiled styles
79
+ │ └── dev.html # Development HTML
80
+ ├── scripts/ # Build scripts
81
+ └── bundle.js # Production bundle
82
+ ```
83
+
84
+ ## Available Scripts
85
+
86
+ | Script | Description |
87
+ | ----------------- | ------------------------------ |
88
+ | `yarn dev:full` | Full development environment |
89
+ | `yarn dev:ts` | TypeScript compiler watch mode |
90
+ | `yarn dev:rollup` | Rollup bundler watch mode |
91
+ | `yarn dev:server` | Live development server |
92
+ | `yarn build` | Production build |
93
+ | `yarn compile` | Compile TypeScript |
94
+ | `yarn minify` | Minify JavaScript |
95
+
96
+ ## Usage
97
+
98
+ Include the widget in your HTML:
99
+
100
+ ```html
101
+ <!DOCTYPE html>
102
+ <html lang="en">
103
+ <head>
104
+ <meta charset="UTF-8" />
105
+ <title>Your Website</title>
106
+ </head>
107
+ <body>
108
+ <!-- Your website content -->
109
+
110
+ <script src="https://cdn.jsdelivr.net/gh/modochats/webcomponent@main/cdn-dist/modo-web-component.min.js"></script>
111
+ <script>
112
+ // Initialize the chat widget
113
+ const widget = new ModoWidget("your-public-key", {
114
+ position: "right",
115
+ theme: "dark",
116
+ primaryColor: "#667eea",
117
+ title: "Chat with Us",
118
+ foregroundColor: "#ffffff",
119
+ userData: {name: "John Doe", email: "john@example.com"},
120
+ autoInit: true,
121
+ fullScreen: false
122
+ });
123
+ </script>
124
+ </body>
125
+ </html>
126
+ ```
127
+
128
+ ### Initialization Options
129
+
130
+ Pass configuration options as the second parameter to the `ModoWidget` constructor. All options are optional except the public key.
131
+
132
+ Example with minimal options:
133
+
134
+ ```javascript
135
+ const widget = new ModoWidget("your-public-key");
136
+ widget.init(); // Manual initialization if autoInit is false
137
+ ```
138
+
139
+ ## API Methods
140
+
141
+ Once initialized, you can interact with the widget instance:
142
+
143
+ ### Update User Data
144
+
145
+ Update or add custom user data dynamically:
146
+
147
+ ```javascript
148
+ await widget.updateUserData({
149
+ name: "Jane Doe",
150
+ email: "jane@example.com"
151
+ });
152
+ ```
153
+
154
+ This method merges the new data with existing user data and updates it on the server.
155
+
156
+ ## Requirements
157
+
158
+ - Node.js 16+
159
+ - Yarn package manager
160
+
161
+ ## License
162
+
163
+ ISC
@@ -0,0 +1,42 @@
1
+ # Modo Web Component
2
+
3
+ A lightweight web component library.
4
+
5
+ ## CDN Usage
6
+
7
+ ### jsDelivr
8
+ ```html
9
+ <script src="https://cdn.jsdelivr.net/gh/your-username/modo-web-component@main/cdn-dist/modo-web-component.min.js"></script>
10
+ ```
11
+
12
+ ### GitHub Raw
13
+ ```html
14
+ <script src="https://raw.githubusercontent.com/your-username/modo-web-component/main/cdn-dist/modo-web-component.min.js"></script>
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ```javascript
20
+ // Initialize the chat widget
21
+ const chat = new ModoChat('your-public-key', {
22
+ position: 'right', // 'left' or 'right'
23
+ theme: 'dark', // 'dark' or 'light'
24
+ primaryColor: '#667eea',
25
+ title: 'پشتیبانی چت'
26
+ });
27
+ ```
28
+
29
+ ## Features
30
+
31
+ - 🌙 Dark/Light theme support
32
+ - 🌐 RTL (Persian/Farsi) language support
33
+ - 📱 Mobile responsive design
34
+ - 💬 Real-time chat functionality
35
+ - 🔗 WebSocket connection status
36
+ - 📝 Markdown message support
37
+
38
+ ## Files
39
+
40
+ - `modo-web-component.js` - Development version
41
+ - `modo-web-component.min.js` - Production version (minified)
42
+ - `dist/` - Full distribution files