@scalemule/chat 0.0.5 → 0.0.7

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 (85) hide show
  1. package/dist/{ChatClient-COmdEJ11.d.ts → ChatClient-DQPHdUHX.d.cts} +21 -2
  2. package/dist/{ChatClient-BoZaTtyM.d.cts → ChatClient-DtUKF-4c.d.ts} +21 -2
  3. package/dist/chat.embed.global.js +1 -1
  4. package/dist/chat.umd.global.js +288 -12
  5. package/dist/{chunk-ZLMMNFZL.js → chunk-5O5YLRJL.js} +386 -16
  6. package/dist/chunk-GTMAK3IA.js +285 -0
  7. package/dist/chunk-TRCELAZQ.cjs +287 -0
  8. package/dist/{chunk-YDLRISR7.cjs → chunk-W2PWFS3E.cjs} +386 -15
  9. package/dist/constants.d.ts +9 -0
  10. package/dist/constants.d.ts.map +1 -0
  11. package/dist/core/ChatClient.d.ts +96 -0
  12. package/dist/core/ChatClient.d.ts.map +1 -0
  13. package/dist/core/EventEmitter.d.ts +11 -0
  14. package/dist/core/EventEmitter.d.ts.map +1 -0
  15. package/dist/core/MessageCache.d.ts +18 -0
  16. package/dist/core/MessageCache.d.ts.map +1 -0
  17. package/dist/core/OfflineQueue.d.ts +19 -0
  18. package/dist/core/OfflineQueue.d.ts.map +1 -0
  19. package/dist/element.cjs +542 -51
  20. package/dist/element.d.ts +2 -2
  21. package/dist/element.d.ts.map +1 -0
  22. package/dist/element.js +541 -50
  23. package/dist/embed/index.d.ts +2 -0
  24. package/dist/embed/index.d.ts.map +1 -0
  25. package/dist/factory.d.ts +8 -0
  26. package/dist/factory.d.ts.map +1 -0
  27. package/dist/iframe.d.cts +1 -1
  28. package/dist/iframe.d.ts +3 -5
  29. package/dist/iframe.d.ts.map +1 -0
  30. package/dist/index.cjs +34 -5
  31. package/dist/index.d.cts +93 -4
  32. package/dist/index.d.ts +8 -77
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +29 -4
  35. package/dist/react-components/ChatInput.d.ts +16 -0
  36. package/dist/react-components/ChatInput.d.ts.map +1 -0
  37. package/dist/react-components/ChatMessageItem.d.ts +13 -0
  38. package/dist/react-components/ChatMessageItem.d.ts.map +1 -0
  39. package/dist/react-components/ChatMessageList.d.ts +15 -0
  40. package/dist/react-components/ChatMessageList.d.ts.map +1 -0
  41. package/dist/react-components/ChatThread.d.ts +12 -0
  42. package/dist/react-components/ChatThread.d.ts.map +1 -0
  43. package/dist/react-components/ConversationList.d.ts +13 -0
  44. package/dist/react-components/ConversationList.d.ts.map +1 -0
  45. package/dist/react-components/EmojiPicker.d.ts +8 -0
  46. package/dist/react-components/EmojiPicker.d.ts.map +1 -0
  47. package/dist/react-components/index.d.ts +8 -0
  48. package/dist/react-components/index.d.ts.map +1 -0
  49. package/dist/react-components/theme.d.ts +19 -0
  50. package/dist/react-components/theme.d.ts.map +1 -0
  51. package/dist/react-components/utils.d.ts +4 -0
  52. package/dist/react-components/utils.d.ts.map +1 -0
  53. package/dist/react.cjs +1212 -50
  54. package/dist/react.d.cts +100 -4
  55. package/dist/react.d.ts +38 -15
  56. package/dist/react.d.ts.map +1 -0
  57. package/dist/react.js +1164 -13
  58. package/dist/shared/ChatController.d.ts +65 -0
  59. package/dist/shared/ChatController.d.ts.map +1 -0
  60. package/dist/shared/upload.d.ts +3 -0
  61. package/dist/shared/upload.d.ts.map +1 -0
  62. package/dist/support-widget.global.js +485 -157
  63. package/dist/support.d.ts +99 -0
  64. package/dist/support.d.ts.map +1 -0
  65. package/dist/transport/HttpTransport.d.ts +20 -0
  66. package/dist/transport/HttpTransport.d.ts.map +1 -0
  67. package/dist/transport/WebSocketTransport.d.ts +78 -0
  68. package/dist/transport/WebSocketTransport.d.ts.map +1 -0
  69. package/dist/{types-BmD7f1gV.d.cts → types-COPVrm3K.d.cts} +25 -1
  70. package/dist/{types-BmD7f1gV.d.ts → types-COPVrm3K.d.ts} +25 -1
  71. package/dist/types.d.ts +271 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/umd.d.ts +6 -0
  74. package/dist/umd.d.ts.map +1 -0
  75. package/dist/version.d.ts +2 -0
  76. package/dist/version.d.ts.map +1 -0
  77. package/dist/widget/icons.d.ts +8 -0
  78. package/dist/widget/icons.d.ts.map +1 -0
  79. package/dist/widget/index.d.ts +2 -0
  80. package/dist/widget/index.d.ts.map +1 -0
  81. package/dist/widget/storage.d.ts +5 -0
  82. package/dist/widget/storage.d.ts.map +1 -0
  83. package/dist/widget/styles.d.ts +3 -0
  84. package/dist/widget/styles.d.ts.map +1 -0
  85. package/package.json +5 -2
@@ -0,0 +1,3 @@
1
+ /** All CSS for the support widget, injected into Shadow DOM. */
2
+ export declare const WIDGET_STYLES = "\n:host {\n all: initial;\n --sm-primary: #2563eb;\n --sm-primary-hover: #1d4ed8;\n --sm-primary-disabled: #93c5fd;\n --sm-primary-text: #ffffff;\n --sm-badge-bg: #ef4444;\n --sm-bubble-left: auto;\n --sm-bubble-right: 20px;\n --sm-panel-left: auto;\n --sm-panel-right: 20px;\n --sm-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n font-family: var(--sm-font-family);\n font-size: 14px;\n line-height: 1.5;\n color: #111827;\n}\n\n* {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n\n.sm-bubble {\n position: fixed;\n bottom: 20px;\n left: var(--sm-bubble-left);\n right: var(--sm-bubble-right);\n width: 60px;\n height: 60px;\n border-radius: 999px;\n background: var(--sm-primary);\n color: var(--sm-primary-text);\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 12px 30px rgba(15, 23, 42, 0.22);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n z-index: 999999;\n}\n\n.sm-bubble:hover {\n transform: translateY(-1px) scale(1.03);\n box-shadow: 0 18px 36px rgba(15, 23, 42, 0.28);\n}\n\n.sm-bubble .sm-badge {\n position: absolute;\n top: -4px;\n right: -4px;\n min-width: 20px;\n height: 20px;\n border-radius: 999px;\n background: var(--sm-badge-bg);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 6px;\n font-size: 11px;\n font-weight: 700;\n}\n\n.sm-panel {\n position: fixed;\n bottom: 90px;\n left: var(--sm-panel-left);\n right: var(--sm-panel-right);\n width: 380px;\n max-height: min(560px, calc(100vh - 110px));\n background: #ffffff;\n border-radius: 18px;\n box-shadow: 0 24px 48px rgba(15, 23, 42, 0.18);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n z-index: 999998;\n animation: sm-slide-up 0.22s ease;\n}\n\n@keyframes sm-slide-up {\n from { opacity: 0; transform: translateY(14px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.sm-panel.sm-hidden {\n display: none;\n}\n\n.sm-header {\n background: var(--sm-primary);\n color: var(--sm-primary-text);\n padding: 16px 18px;\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n}\n\n.sm-header-copy {\n min-width: 0;\n}\n\n.sm-header-title {\n font-size: 16px;\n font-weight: 700;\n}\n\n.sm-header-status {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 4px;\n font-size: 12px;\n opacity: 0.92;\n}\n\n.sm-status-dot {\n width: 10px;\n height: 10px;\n border-radius: 999px;\n background: rgba(255, 255, 255, 0.65);\n}\n\n.sm-status-dot-online {\n background: #22c55e;\n box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.18);\n}\n\n.sm-status-dot-away {\n background: #cbd5e1;\n}\n\n.sm-header-subtitle {\n font-size: 12px;\n opacity: 0.82;\n margin-top: 6px;\n max-width: 250px;\n}\n\n.sm-header-actions {\n display: flex;\n gap: 6px;\n}\n\n.sm-header-btn {\n background: none;\n border: none;\n color: inherit;\n cursor: pointer;\n border-radius: 10px;\n padding: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.86;\n}\n\n.sm-header-btn:hover {\n opacity: 1;\n background: rgba(255, 255, 255, 0.12);\n}\n\n.sm-error {\n padding: 10px 14px;\n background: #fef2f2;\n border-bottom: 1px solid #fecaca;\n color: #b91c1c;\n font-size: 12px;\n}\n\n.sm-body {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.sm-prechat {\n padding: 20px 18px 18px;\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n.sm-prechat-title {\n font-size: 18px;\n font-weight: 700;\n color: #111827;\n}\n\n.sm-prechat-desc {\n font-size: 13px;\n color: #6b7280;\n}\n\n.sm-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.sm-field label {\n font-size: 13px;\n font-weight: 600;\n color: #374151;\n}\n\n.sm-field input,\n.sm-field textarea,\n.sm-input {\n border: 1px solid #d1d5db;\n border-radius: 14px;\n padding: 10px 12px;\n font-size: 14px;\n font-family: inherit;\n color: #111827;\n outline: none;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n background: #fff;\n}\n\n.sm-field input:focus,\n.sm-field textarea:focus,\n.sm-input:focus {\n border-color: var(--sm-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);\n}\n\n.sm-field textarea {\n resize: vertical;\n min-height: 92px;\n}\n\n.sm-prechat-actions {\n display: flex;\n gap: 10px;\n align-items: center;\n}\n\n.sm-submit-btn,\n.sm-send-btn {\n border: none;\n cursor: pointer;\n background: var(--sm-primary);\n color: var(--sm-primary-text);\n transition: background 0.15s ease, opacity 0.15s ease;\n}\n\n.sm-submit-btn:hover,\n.sm-send-btn:hover {\n background: var(--sm-primary-hover);\n}\n\n.sm-submit-btn:disabled,\n.sm-send-btn:disabled {\n background: var(--sm-primary-disabled);\n cursor: not-allowed;\n}\n\n.sm-submit-btn {\n flex: 1;\n border-radius: 14px;\n padding: 12px;\n font-size: 14px;\n font-weight: 700;\n}\n\n.sm-chat-shell {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n background: #f8fafc;\n}\n\n.sm-chat-shell.sm-dragging {\n background: rgba(37, 99, 235, 0.05);\n}\n\n.sm-messages {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.sm-date-divider {\n align-self: center;\n font-size: 11px;\n font-weight: 600;\n color: #6b7280;\n background: rgba(148, 163, 184, 0.16);\n padding: 4px 10px;\n border-radius: 999px;\n}\n\n.sm-unread-divider {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 11px;\n font-weight: 700;\n color: var(--sm-primary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.sm-unread-divider::before,\n.sm-unread-divider::after {\n content: '';\n flex: 1;\n height: 1px;\n background: rgba(37, 99, 235, 0.24);\n}\n\n.sm-msg {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-width: 84%;\n}\n\n.sm-msg-visitor {\n align-self: flex-end;\n}\n\n.sm-msg-rep {\n align-self: flex-start;\n}\n\n.sm-msg-system {\n align-self: center;\n max-width: 92%;\n}\n\n.sm-msg-row {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n}\n\n.sm-msg-bubble {\n padding: 10px 12px;\n border-radius: 16px;\n line-height: 1.4;\n word-break: break-word;\n background: #f3f4f6;\n color: #111827;\n}\n\n.sm-msg-content {\n white-space: pre-wrap;\n}\n\n.sm-msg-visitor .sm-msg-bubble {\n background: var(--sm-primary);\n color: var(--sm-primary-text);\n border-bottom-right-radius: 6px;\n}\n\n.sm-msg-rep .sm-msg-bubble {\n border-bottom-left-radius: 6px;\n}\n\n.sm-msg-system .sm-msg-bubble {\n background: transparent;\n color: #94a3b8;\n font-size: 12px;\n text-align: center;\n padding: 2px 8px;\n}\n\n.sm-msg-action {\n border: 1px solid #e5e7eb;\n background: #ffffff;\n color: #6b7280;\n border-radius: 999px;\n width: 28px;\n height: 28px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n flex-shrink: 0;\n}\n\n.sm-msg-action:hover {\n color: var(--sm-primary);\n border-color: rgba(37, 99, 235, 0.24);\n}\n\n.sm-msg-time {\n font-size: 11px;\n color: #94a3b8;\n}\n\n.sm-msg-visitor .sm-msg-time {\n text-align: right;\n}\n\n.sm-reactions {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.sm-reaction-badge {\n border: 1px solid #e5e7eb;\n background: #ffffff;\n color: #374151;\n border-radius: 999px;\n padding: 4px 8px;\n font-size: 12px;\n cursor: pointer;\n}\n\n.sm-reaction-badge-active {\n border-color: rgba(37, 99, 235, 0.32);\n background: rgba(37, 99, 235, 0.08);\n color: var(--sm-primary);\n}\n\n.sm-reaction-picker {\n display: inline-flex;\n gap: 6px;\n padding: 6px;\n border-radius: 999px;\n border: 1px solid #e5e7eb;\n background: #ffffff;\n box-shadow: 0 12px 28px rgba(15, 23, 42, 0.12);\n}\n\n.sm-reaction-picker-btn {\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: 999px;\n width: 30px;\n height: 30px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 17px;\n}\n\n.sm-attachment {\n display: block;\n margin-top: 8px;\n border-radius: 12px;\n max-width: 100%;\n}\n\n.sm-attachment-image,\n.sm-attachment-video {\n max-width: 260px;\n}\n\n.sm-attachment-audio {\n width: 100%;\n}\n\n.sm-attachment-link {\n color: inherit;\n text-decoration: underline;\n font-size: 13px;\n}\n\n.sm-typing {\n min-height: 22px;\n padding: 0 16px 10px;\n font-size: 12px;\n color: #6b7280;\n}\n\n.sm-typing-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.sm-typing-indicator span:nth-child(-n+3) {\n width: 6px;\n height: 6px;\n border-radius: 999px;\n background: #94a3b8;\n animation: sm-bounce 1.2s infinite ease-in-out;\n}\n\n.sm-typing-indicator span:nth-child(2) {\n animation-delay: 0.15s;\n}\n\n.sm-typing-indicator span:nth-child(3) {\n animation-delay: 0.3s;\n}\n\n@keyframes sm-bounce {\n 0%, 80%, 100% { transform: scale(0.85); opacity: 0.5; }\n 40% { transform: scale(1); opacity: 1; }\n}\n\n.sm-upload-list {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 0 16px 10px;\n}\n\n.sm-upload-chip {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n max-width: 100%;\n border-radius: 999px;\n border: 1px solid #e5e7eb;\n background: #ffffff;\n padding: 6px 10px;\n font-size: 12px;\n color: #374151;\n}\n\n.sm-upload-chip-error {\n border-color: #fecaca;\n background: #fef2f2;\n color: #b91c1c;\n}\n\n.sm-upload-name {\n max-width: 140px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.sm-upload-progress {\n color: #6b7280;\n}\n\n.sm-upload-chip-error .sm-upload-progress {\n color: inherit;\n}\n\n.sm-upload-remove {\n border: none;\n background: transparent;\n color: inherit;\n cursor: pointer;\n font-size: 14px;\n line-height: 1;\n}\n\n.sm-input-area {\n display: flex;\n align-items: flex-end;\n gap: 10px;\n padding: 12px 16px 16px;\n border-top: 1px solid #e5e7eb;\n background: #ffffff;\n}\n\n.sm-input {\n flex: 1;\n min-height: 44px;\n max-height: 100px;\n resize: none;\n overflow-y: auto;\n line-height: 1.4;\n}\n\n.sm-attach-btn {\n width: 42px;\n height: 42px;\n border-radius: 14px;\n border: 1px solid #d1d5db;\n background: #ffffff;\n color: #374151;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.sm-attach-btn:hover {\n border-color: rgba(37, 99, 235, 0.28);\n color: var(--sm-primary);\n}\n\n.sm-send-btn {\n width: 42px;\n height: 42px;\n border-radius: 14px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.sm-footer {\n text-align: center;\n padding: 8px;\n font-size: 11px;\n color: #94a3b8;\n}\n\n.sm-footer a {\n color: #6b7280;\n text-decoration: none;\n}\n\n.sm-footer a:hover {\n text-decoration: underline;\n}\n\n@media (max-width: 440px) {\n .sm-panel {\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n max-height: 100vh;\n border-radius: 18px 18px 0 0;\n }\n}\n";
3
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/widget/styles.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAEhE,eAAO,MAAM,aAAa,6hWAwnBzB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scalemule/chat",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "ScaleMule standalone chat SDK — real-time messaging, presence, typing indicators",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -34,7 +34,9 @@
34
34
  "LICENSE"
35
35
  ],
36
36
  "scripts": {
37
- "build": "tsup",
37
+ "build": "tsup && npm run build:types && npm run check:budgets",
38
+ "build:types": "tsc --emitDeclarationOnly --project tsconfig.json",
39
+ "check:budgets": "node ./scripts/check-bundle-budgets.mjs",
38
40
  "dev": "tsup --watch",
39
41
  "typecheck": "tsc --noEmit",
40
42
  "lint": "eslint src/",
@@ -52,6 +54,7 @@
52
54
  "devDependencies": {
53
55
  "@types/react": "^18.0.0",
54
56
  "@types/react-dom": "^18.0.0",
57
+ "jsdom": "^26.0.0",
55
58
  "tsup": "^8.0.0",
56
59
  "typescript": "^5.4.0",
57
60
  "vitest": "^2.0.0"