dynim-core 1.0.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 (86) hide show
  1. package/README.md +290 -0
  2. package/dist/builder/ai-prompt-popover.d.ts +26 -0
  3. package/dist/builder/ai-prompt-popover.d.ts.map +1 -0
  4. package/dist/builder/ai-prompt-popover.js +180 -0
  5. package/dist/builder/builder-client.d.ts +48 -0
  6. package/dist/builder/builder-client.d.ts.map +1 -0
  7. package/dist/builder/builder-client.js +157 -0
  8. package/dist/builder/builder.d.ts +41 -0
  9. package/dist/builder/builder.d.ts.map +1 -0
  10. package/dist/builder/builder.js +537 -0
  11. package/dist/builder/bundle-manager.d.ts +60 -0
  12. package/dist/builder/bundle-manager.d.ts.map +1 -0
  13. package/dist/builder/bundle-manager.js +357 -0
  14. package/dist/builder/classifier/classname-analyzer.d.ts +6 -0
  15. package/dist/builder/classifier/classname-analyzer.d.ts.map +1 -0
  16. package/dist/builder/classifier/classname-analyzer.js +107 -0
  17. package/dist/builder/classifier/index.d.ts +20 -0
  18. package/dist/builder/classifier/index.d.ts.map +1 -0
  19. package/dist/builder/classifier/index.js +181 -0
  20. package/dist/builder/classifier/semantic-analyzer.d.ts +24 -0
  21. package/dist/builder/classifier/semantic-analyzer.d.ts.map +1 -0
  22. package/dist/builder/classifier/semantic-analyzer.js +94 -0
  23. package/dist/builder/classifier/size-analyzer.d.ts +7 -0
  24. package/dist/builder/classifier/size-analyzer.d.ts.map +1 -0
  25. package/dist/builder/classifier/size-analyzer.js +120 -0
  26. package/dist/builder/classifier/visual-analyzer.d.ts +6 -0
  27. package/dist/builder/classifier/visual-analyzer.d.ts.map +1 -0
  28. package/dist/builder/classifier/visual-analyzer.js +158 -0
  29. package/dist/builder/client.d.ts +22 -0
  30. package/dist/builder/client.d.ts.map +1 -0
  31. package/dist/builder/client.js +54 -0
  32. package/dist/builder/code-client.d.ts +101 -0
  33. package/dist/builder/code-client.d.ts.map +1 -0
  34. package/dist/builder/code-client.js +418 -0
  35. package/dist/builder/diff-state.d.ts +24 -0
  36. package/dist/builder/diff-state.d.ts.map +1 -0
  37. package/dist/builder/diff-state.js +134 -0
  38. package/dist/builder/dom-scanner.d.ts +20 -0
  39. package/dist/builder/dom-scanner.d.ts.map +1 -0
  40. package/dist/builder/dom-scanner.js +102 -0
  41. package/dist/builder/drag-engine.d.ts +41 -0
  42. package/dist/builder/drag-engine.d.ts.map +1 -0
  43. package/dist/builder/drag-engine.js +686 -0
  44. package/dist/builder/editor-overlays.d.ts +31 -0
  45. package/dist/builder/editor-overlays.d.ts.map +1 -0
  46. package/dist/builder/editor-overlays.js +202 -0
  47. package/dist/builder/editor-state.d.ts +50 -0
  48. package/dist/builder/editor-state.d.ts.map +1 -0
  49. package/dist/builder/editor-state.js +132 -0
  50. package/dist/builder/element-utils.d.ts +43 -0
  51. package/dist/builder/element-utils.d.ts.map +1 -0
  52. package/dist/builder/element-utils.js +227 -0
  53. package/dist/builder/fiber-capture.d.ts +28 -0
  54. package/dist/builder/fiber-capture.d.ts.map +1 -0
  55. package/dist/builder/fiber-capture.js +264 -0
  56. package/dist/builder/freeze-overlay.d.ts +26 -0
  57. package/dist/builder/freeze-overlay.d.ts.map +1 -0
  58. package/dist/builder/freeze-overlay.js +213 -0
  59. package/dist/builder/history-state.d.ts +41 -0
  60. package/dist/builder/history-state.d.ts.map +1 -0
  61. package/dist/builder/history-state.js +76 -0
  62. package/dist/builder/index.d.ts +62 -0
  63. package/dist/builder/index.d.ts.map +1 -0
  64. package/dist/builder/index.js +92 -0
  65. package/dist/builder/state.d.ts +27 -0
  66. package/dist/builder/state.d.ts.map +1 -0
  67. package/dist/builder/state.js +50 -0
  68. package/dist/builder/style-applier.d.ts +61 -0
  69. package/dist/builder/style-applier.d.ts.map +1 -0
  70. package/dist/builder/style-applier.js +311 -0
  71. package/dist/builder/tree-state.d.ts +71 -0
  72. package/dist/builder/tree-state.d.ts.map +1 -0
  73. package/dist/builder/tree-state.js +168 -0
  74. package/dist/builder/widget.d.ts +29 -0
  75. package/dist/builder/widget.d.ts.map +1 -0
  76. package/dist/builder/widget.js +181 -0
  77. package/dist/index.d.ts +11 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +12 -0
  80. package/package.json +25 -0
  81. package/src/styles/base.css +378 -0
  82. package/src/styles/builder.css +422 -0
  83. package/src/styles/editor.css +131 -0
  84. package/src/styles/themes/dark.css +24 -0
  85. package/src/styles/themes/light.css +21 -0
  86. package/src/styles/variables.css +63 -0
@@ -0,0 +1,422 @@
1
+ /**
2
+ * Builder Mode Styles
3
+ * Floating pill bar (Cluely-style) for builder mode
4
+ */
5
+
6
+ /* ===========================================
7
+ BUILDER CONTAINER
8
+ =========================================== */
9
+
10
+ .builder {
11
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
12
+ }
13
+
14
+ /* ===========================================
15
+ TOP BAR - Floating Pill Style
16
+ =========================================== */
17
+
18
+ .builder-bar {
19
+ position: fixed;
20
+ top: 12px;
21
+ left: 50%;
22
+ transform: translateX(-50%) translateY(-20px);
23
+ height: 44px;
24
+ background: rgba(0, 0, 0, 0.08);
25
+ backdrop-filter: blur(20px) saturate(180%);
26
+ -webkit-backdrop-filter: blur(20px) saturate(180%);
27
+ display: flex;
28
+ align-items: center;
29
+ gap: 12px;
30
+ padding: 0 8px 0 24px;
31
+ z-index: 10005 !important;
32
+ border-radius: 22px;
33
+ border: 1px solid rgba(255, 255, 255, 0.15);
34
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.1);
35
+
36
+ /* Animation - hidden by default */
37
+ opacity: 0;
38
+ pointer-events: none;
39
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1),
40
+ opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
41
+ }
42
+
43
+ .builder--active .builder-bar {
44
+ transform: translateX(-50%) translateY(0);
45
+ opacity: 1;
46
+ pointer-events: auto;
47
+ }
48
+
49
+ /* Logo/status section */
50
+ .builder-bar__logo {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: 8px;
54
+ color: #ffffff;
55
+ font-weight: 500;
56
+ font-size: 14px;
57
+ }
58
+
59
+ .builder-bar__icon {
60
+ color: #3b82f6;
61
+ width: 16px;
62
+ height: 16px;
63
+ }
64
+
65
+ /* Divider */
66
+ .builder-bar__divider {
67
+ width: 1px;
68
+ height: 20px;
69
+ background: rgba(255, 255, 255, 0.15);
70
+ margin: 0 4px;
71
+ }
72
+
73
+ /* Actions section */
74
+ .builder-bar__actions {
75
+ display: flex;
76
+ align-items: center;
77
+ gap: 4px;
78
+ }
79
+
80
+ /* Buttons */
81
+ .builder-bar__btn {
82
+ display: flex;
83
+ align-items: center;
84
+ justify-content: center;
85
+ gap: 6px;
86
+ padding: 6px 16px;
87
+ border: none;
88
+ border-radius: 16px;
89
+ font-family: inherit;
90
+ font-size: 13px;
91
+ font-weight: 500;
92
+ cursor: pointer;
93
+ transition: all 0.15s ease;
94
+ pointer-events: auto;
95
+ position: relative;
96
+ z-index: 1;
97
+ }
98
+
99
+ .builder-bar__btn--save {
100
+ background: #3b82f6;
101
+ color: #ffffff;
102
+ }
103
+
104
+ .builder-bar__btn--save:hover:not(:disabled) {
105
+ background: #2563eb;
106
+ }
107
+
108
+ .builder-bar__btn--save:active:not(:disabled) {
109
+ transform: scale(0.96);
110
+ }
111
+
112
+ .builder-bar__btn--saved {
113
+ background: #22c55e !important;
114
+ }
115
+
116
+ .builder-bar__btn--preview {
117
+ background: rgba(255, 255, 255, 0.08);
118
+ color: #94a3b8;
119
+ }
120
+
121
+ .builder-bar__btn--preview:hover {
122
+ background: rgba(255, 255, 255, 0.12);
123
+ color: #ffffff;
124
+ }
125
+
126
+ .builder-bar__btn--preview:active {
127
+ transform: scale(0.96);
128
+ }
129
+
130
+ .builder-bar__btn--exit {
131
+ background: rgba(255, 255, 255, 0.08);
132
+ color: #94a3b8;
133
+ }
134
+
135
+ .builder-bar__btn--exit:hover {
136
+ background: rgba(255, 255, 255, 0.12);
137
+ color: #ffffff;
138
+ }
139
+
140
+ .builder-bar__btn--exit:active {
141
+ transform: scale(0.96);
142
+ }
143
+
144
+ /* Undo button - contextual appearance */
145
+ .builder-bar__btn--undo {
146
+ padding: 6px 10px;
147
+ background: rgba(255, 255, 255, 0.08);
148
+ color: #94a3b8;
149
+ animation: undoSlideIn 0.2s ease-out;
150
+ }
151
+
152
+ .builder-bar__btn--undo:hover {
153
+ background: rgba(255, 255, 255, 0.12);
154
+ color: #ffffff;
155
+ }
156
+
157
+ @keyframes undoSlideIn {
158
+ from {
159
+ opacity: 0;
160
+ transform: translateX(-8px);
161
+ }
162
+ to {
163
+ opacity: 1;
164
+ transform: translateX(0);
165
+ }
166
+ }
167
+
168
+ /* Disabled state for all buttons */
169
+ .builder-bar__btn:disabled {
170
+ opacity: 0.35;
171
+ cursor: not-allowed;
172
+ pointer-events: none;
173
+ }
174
+
175
+ .builder-bar__btn.builder-bar__btn--save:disabled {
176
+ background: rgba(100, 116, 139, 0.5) !important;
177
+ color: rgba(255, 255, 255, 0.4) !important;
178
+ opacity: 1 !important;
179
+ }
180
+
181
+ /* ===========================================
182
+ UNSAVED CHANGES MODAL
183
+ =========================================== */
184
+
185
+ .builder-modal {
186
+ position: fixed;
187
+ top: 0;
188
+ left: 0;
189
+ right: 0;
190
+ bottom: 0;
191
+ width: 100vw;
192
+ height: 100vh;
193
+ z-index: 10010 !important;
194
+ display: flex;
195
+ align-items: center;
196
+ justify-content: center;
197
+ pointer-events: auto;
198
+ }
199
+
200
+ .builder-modal__backdrop {
201
+ position: fixed;
202
+ top: 0;
203
+ left: 0;
204
+ right: 0;
205
+ bottom: 0;
206
+ background: rgba(0, 0, 0, 0.5);
207
+ backdrop-filter: blur(4px);
208
+ -webkit-backdrop-filter: blur(4px);
209
+ }
210
+
211
+ .builder-modal__dialog {
212
+ position: fixed;
213
+ top: 50%;
214
+ left: 50%;
215
+ transform: translate(-50%, -50%);
216
+ background: #1e293b;
217
+ border-radius: 16px;
218
+ padding: 24px;
219
+ min-width: 320px;
220
+ max-width: 400px;
221
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
222
+ border: 1px solid rgba(255, 255, 255, 0.1);
223
+ z-index: 10011;
224
+ pointer-events: auto;
225
+ }
226
+
227
+ .builder-modal__title {
228
+ font-size: 18px;
229
+ font-weight: 600;
230
+ color: #ffffff;
231
+ margin-bottom: 8px;
232
+ }
233
+
234
+ .builder-modal__message {
235
+ font-size: 14px;
236
+ color: #94a3b8;
237
+ margin-bottom: 24px;
238
+ line-height: 1.5;
239
+ }
240
+
241
+ .builder-modal__actions {
242
+ display: flex;
243
+ gap: 8px;
244
+ justify-content: flex-end;
245
+ }
246
+
247
+ .builder-modal__btn {
248
+ padding: 8px 16px;
249
+ border: none;
250
+ border-radius: 8px;
251
+ font-family: inherit;
252
+ font-size: 13px;
253
+ font-weight: 500;
254
+ cursor: pointer;
255
+ transition: all 0.15s ease;
256
+ }
257
+
258
+ .builder-modal__btn--cancel {
259
+ background: rgba(255, 255, 255, 0.08);
260
+ color: #94a3b8;
261
+ }
262
+
263
+ .builder-modal__btn--cancel:hover {
264
+ background: rgba(255, 255, 255, 0.12);
265
+ color: #ffffff;
266
+ }
267
+
268
+ .builder-modal__btn--discard {
269
+ background: rgba(239, 68, 68, 0.15);
270
+ color: #ef4444;
271
+ }
272
+
273
+ .builder-modal__btn--discard:hover {
274
+ background: rgba(239, 68, 68, 0.25);
275
+ }
276
+
277
+ .builder-modal__btn--save {
278
+ background: #3b82f6;
279
+ color: #ffffff;
280
+ }
281
+
282
+ .builder-modal__btn--save:hover {
283
+ background: #2563eb;
284
+ }
285
+
286
+ /* ===========================================
287
+ RESPONSIVE
288
+ =========================================== */
289
+
290
+ /* ===========================================
291
+ EDITOR OVERLAYS - Dark Reader Protection
292
+ Uses !important to prevent browser extensions
293
+ from overriding these critical visual styles
294
+ =========================================== */
295
+
296
+ #__editor-overlays__ {
297
+ position: fixed !important;
298
+ inset: 0 !important;
299
+ pointer-events: none !important;
300
+ z-index: 10000 !important;
301
+ }
302
+
303
+ /* Hover overlay - blue */
304
+ .editor-hover-overlay.active {
305
+ position: fixed !important;
306
+ border: 2px solid #0ea5e9 !important;
307
+ background: rgba(14, 165, 233, 0.1) !important;
308
+ pointer-events: none !important;
309
+ z-index: 10000 !important;
310
+ box-sizing: border-box !important;
311
+ }
312
+
313
+ /* Selection overlay - purple */
314
+ .editor-selection-overlay.active {
315
+ position: fixed !important;
316
+ border: 2px solid #8b5cf6 !important;
317
+ background: rgba(139, 92, 246, 0.1) !important;
318
+ pointer-events: none !important;
319
+ z-index: 9999 !important;
320
+ box-sizing: border-box !important;
321
+ }
322
+
323
+ /* Drag ghost - purple dashed */
324
+ .editor-drag-ghost.active {
325
+ position: fixed !important;
326
+ border: 2px dashed #8b5cf6 !important;
327
+ background: rgba(139, 92, 246, 0.1) !important;
328
+ border-radius: 4px !important;
329
+ pointer-events: none !important;
330
+ z-index: 10004 !important;
331
+ box-sizing: border-box !important;
332
+ opacity: 0.8 !important;
333
+ }
334
+
335
+ /* Drop target highlight - subtle green fill */
336
+ .editor-drop-target.active {
337
+ position: fixed !important;
338
+ background: rgba(34, 197, 94, 0.1) !important;
339
+ border-radius: 3px !important;
340
+ pointer-events: none !important;
341
+ z-index: 10001 !important;
342
+ box-sizing: border-box !important;
343
+ }
344
+
345
+ /* Drop line - green indicator */
346
+ .editor-drop-line.active {
347
+ position: fixed !important;
348
+ background: #22c55e !important;
349
+ border-radius: 2px !important;
350
+ pointer-events: none !important;
351
+ z-index: 10002 !important;
352
+ box-shadow: 0 0 8px rgba(34, 197, 94, 0.5) !important;
353
+ }
354
+
355
+ /* Tooltip */
356
+ .editor-tooltip.active {
357
+ position: fixed !important;
358
+ background: #1e1e1e !important;
359
+ color: #fff !important;
360
+ padding: 4px 8px !important;
361
+ border-radius: 4px !important;
362
+ font-size: 11px !important;
363
+ font-family: 'SF Mono', Monaco, 'Courier New', monospace !important;
364
+ white-space: nowrap !important;
365
+ pointer-events: none !important;
366
+ z-index: 10001 !important;
367
+ max-width: 400px !important;
368
+ overflow: hidden !important;
369
+ text-overflow: ellipsis !important;
370
+ box-shadow: 0 2px 8px rgba(0,0,0,0.3) !important;
371
+ }
372
+
373
+ /* Parent highlight */
374
+ .editor-parent-highlight.active {
375
+ position: fixed !important;
376
+ pointer-events: none !important;
377
+ z-index: 10000 !important;
378
+ box-sizing: border-box !important;
379
+ }
380
+
381
+ /* ===========================================
382
+ RESPONSIVE
383
+ =========================================== */
384
+
385
+ @media (max-width: 480px) {
386
+ .builder-bar {
387
+ top: 8px;
388
+ height: 40px;
389
+ padding: 0 4px 0 12px;
390
+ border-radius: 20px;
391
+ }
392
+
393
+ .builder-bar__logo span {
394
+ display: none;
395
+ }
396
+
397
+ .builder-bar__btn {
398
+ padding: 5px 10px;
399
+ font-size: 12px;
400
+ border-radius: 14px;
401
+ }
402
+
403
+ .builder-bar__btn svg {
404
+ width: 14px;
405
+ height: 14px;
406
+ }
407
+
408
+ .builder-modal__dialog {
409
+ min-width: auto;
410
+ margin: 16px;
411
+ padding: 20px;
412
+ }
413
+
414
+ .builder-modal__actions {
415
+ flex-direction: column;
416
+ }
417
+
418
+ .builder-modal__btn {
419
+ width: 100%;
420
+ padding: 12px 16px;
421
+ }
422
+ }
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Editor styles - Visual overlays for the drag-and-drop editor
3
+ * Matches the original drag&drop folder styling
4
+ */
5
+
6
+ :root {
7
+ --editor-accent-blue: #0ea5e9;
8
+ --editor-accent-purple: #8b5cf6;
9
+ --editor-accent-green: #22c55e;
10
+ }
11
+
12
+ /* Freeze overlay - captures events but allows scroll */
13
+ #__editor-freeze-overlay__,
14
+ .editor-freeze-overlay {
15
+ position: fixed;
16
+ inset: 0;
17
+ z-index: 9998;
18
+ background: transparent;
19
+ cursor: default;
20
+ }
21
+
22
+ /* Overlay container */
23
+ #__editor-overlays__ {
24
+ position: fixed;
25
+ inset: 0;
26
+ pointer-events: none;
27
+ z-index: 10000;
28
+ }
29
+
30
+ /* Hover overlay - blue with fill (like original) */
31
+ .editor-hover-overlay {
32
+ position: fixed;
33
+ border: 2px solid var(--editor-accent-blue);
34
+ background: rgba(14, 165, 233, 0.1);
35
+ pointer-events: none;
36
+ z-index: 10000;
37
+ box-sizing: border-box;
38
+ }
39
+
40
+ /* Selection overlay - purple with fill (like original) */
41
+ .editor-selection-overlay {
42
+ position: fixed;
43
+ border: 2px solid var(--editor-accent-purple);
44
+ background: rgba(139, 92, 246, 0.1);
45
+ pointer-events: none;
46
+ z-index: 9999;
47
+ box-sizing: border-box;
48
+ }
49
+
50
+ /* Drag ghost - purple dashed */
51
+ .editor-drag-ghost {
52
+ position: fixed;
53
+ border: 2px dashed var(--editor-accent-purple);
54
+ background: rgba(139, 92, 246, 0.1);
55
+ border-radius: 4px;
56
+ pointer-events: none;
57
+ z-index: 10004;
58
+ box-sizing: border-box;
59
+ opacity: 0.8;
60
+ }
61
+
62
+ /* Drop target highlight - green tint */
63
+ .editor-drop-target {
64
+ position: fixed;
65
+ background: rgba(34, 197, 94, 0.1);
66
+ border-radius: 3px;
67
+ pointer-events: none;
68
+ z-index: 10001;
69
+ box-sizing: border-box;
70
+ }
71
+
72
+ /* Parent highlight - disabled, not used in original */
73
+ .editor-parent-highlight {
74
+ display: none !important;
75
+ }
76
+
77
+ /* Drop indicator line - green */
78
+ .editor-drop-line {
79
+ position: fixed;
80
+ background: var(--editor-accent-green);
81
+ border-radius: 2px;
82
+ pointer-events: none;
83
+ z-index: 10002;
84
+ box-shadow: 0 0 8px rgba(34, 197, 94, 0.5);
85
+ }
86
+
87
+ /* No-drop indicator - red dashed border for invalid drop zones */
88
+ .editor-no-drop-indicator {
89
+ position: fixed;
90
+ border: 2px dashed #ef4444;
91
+ background: rgba(239, 68, 68, 0.1);
92
+ border-radius: 4px;
93
+ pointer-events: none;
94
+ z-index: 10003;
95
+ box-sizing: border-box;
96
+ }
97
+
98
+ /* Tooltip - selector info */
99
+ .editor-tooltip {
100
+ position: fixed;
101
+ background: #1e1e1e;
102
+ color: #fff;
103
+ padding: 4px 8px;
104
+ border-radius: 4px;
105
+ font-size: 11px;
106
+ font-family: 'SF Mono', Monaco, 'Courier New', monospace;
107
+ white-space: nowrap;
108
+ pointer-events: none;
109
+ z-index: 10001;
110
+ max-width: 400px;
111
+ overflow: hidden;
112
+ text-overflow: ellipsis;
113
+ box-shadow: 0 2px 8px rgba(0,0,0,0.3);
114
+ }
115
+
116
+ /* Cursor states */
117
+ .editor-freeze-overlay[data-dragging="true"] {
118
+ cursor: grabbing !important;
119
+ }
120
+
121
+ /* Wrappers created by drag-and-drop (minimal styling) */
122
+ [data-dnd-wrapper] {
123
+ /* No visual styling - just structural */
124
+ }
125
+
126
+ /* Builder mode active state */
127
+ body.builder-mode-active {
128
+ /* Prevent selection during builder mode */
129
+ user-select: none;
130
+ -webkit-user-select: none;
131
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Dark theme
3
+ */
4
+
5
+ .chatbot--dark {
6
+ --chat-bg: #1f2937;
7
+ --chat-border: #374151;
8
+ --chat-text: #f9fafb;
9
+ --chat-text-muted: #9ca3af;
10
+
11
+ --message-user-bg: #3b82f6;
12
+ --message-user-text: #ffffff;
13
+ --message-bot-bg: #374151;
14
+ --message-bot-text: #f9fafb;
15
+
16
+ --input-bg: #111827;
17
+ --input-border: #374151;
18
+ --input-focus: #60a5fa;
19
+
20
+ --button-bg: #3b82f6;
21
+ --button-hover: #60a5fa;
22
+
23
+ --chat-shadow: 0 4px 24px rgba(0, 0, 0, 0.4);
24
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Light theme (default)
3
+ */
4
+
5
+ .chatbot--light {
6
+ --chat-bg: #ffffff;
7
+ --chat-border: #e5e7eb;
8
+ --chat-text: #1f2937;
9
+ --chat-text-muted: #6b7280;
10
+
11
+ --message-user-bg: #3b82f6;
12
+ --message-user-text: #ffffff;
13
+ --message-bot-bg: #f3f4f6;
14
+ --message-bot-text: #1f2937;
15
+
16
+ --input-bg: #f9fafb;
17
+ --input-border: #e5e7eb;
18
+
19
+ --button-bg: #3b82f6;
20
+ --button-hover: #2563eb;
21
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * CSS Custom Properties for theming
3
+ * Override these to customize the chatbot appearance
4
+ */
5
+
6
+ .chatbot {
7
+ /* Container */
8
+ --chat-width: 380px;
9
+ --chat-height: 520px;
10
+ --chat-radius: 16px;
11
+ --chat-shadow: 0 4px 24px rgba(0, 0, 0, 0.15);
12
+
13
+ /* Floating launcher */
14
+ --launcher-size: 56px;
15
+ --launcher-bg: #3b82f6;
16
+ --launcher-hover: #2563eb;
17
+ --launcher-text: #ffffff;
18
+ --launcher-shadow: 0 4px 12px rgba(59, 130, 246, 0.4);
19
+
20
+ /* Floating position offset */
21
+ --chat-offset: 20px;
22
+
23
+ /* Colors */
24
+ --chat-bg: #ffffff;
25
+ --chat-border: #e5e7eb;
26
+ --chat-text: #1f2937;
27
+ --chat-text-muted: #6b7280;
28
+
29
+ /* Header */
30
+ --header-bg: #3b82f6;
31
+ --header-text: #ffffff;
32
+ --header-height: 56px;
33
+
34
+ /* Messages */
35
+ --message-user-bg: #3b82f6;
36
+ --message-user-text: #ffffff;
37
+ --message-bot-bg: #f3f4f6;
38
+ --message-bot-text: #1f2937;
39
+ --message-radius: 12px;
40
+ --message-padding: 12px 16px;
41
+ --message-gap: 8px;
42
+
43
+ /* Input */
44
+ --input-bg: #f9fafb;
45
+ --input-border: #e5e7eb;
46
+ --input-focus: #3b82f6;
47
+ --input-radius: 24px;
48
+ --input-height: 48px;
49
+
50
+ /* Button */
51
+ --button-bg: #3b82f6;
52
+ --button-hover: #2563eb;
53
+ --button-text: #ffffff;
54
+
55
+ /* Typography */
56
+ --chat-font: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
57
+ --chat-font-size: 14px;
58
+ --chat-line-height: 1.5;
59
+
60
+ /* Animation */
61
+ --chat-transition: 0.2s ease;
62
+ --popup-transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
63
+ }