@luckydraw/cumulus 0.27.31 → 0.27.33

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.
@@ -44,12 +44,14 @@
44
44
 
45
45
  // ─── Styles ─────────────────────────────────────────────────────────────────
46
46
  var STYLES = [
47
- /* box-sizing applies everywhere including blex desired for consistent layout */
48
- '.cumulus-widget *, .cumulus-standalone-root * { box-sizing: border-box; }',
47
+ /* box-sizing reset exclude blex block internals so blex CSS isn't overridden */
48
+ '.cumulus-widget *:not(.blex-block-container *), .cumulus-standalone-root *:not(.blex-block-container *) { box-sizing: border-box; }',
49
49
  /* Zero-specificity reset: any class selector (widget or blex) overrides this naturally */
50
- ':where(.cumulus-widget, .cumulus-standalone-root) :where(*) { margin: 0; padding: 0; }',
51
- /* Blex blocks inherit text theme from widget */
52
- '.blex-block-container { color: #e0e0e0; font-family: inherit; font-size: inherit; line-height: 1.5; isolation: isolate; }',
50
+ ':where(.cumulus-widget, .cumulus-standalone-root) :where(*:not(.blex-block-container *)) { margin: 0; padding: 0; }',
51
+ /* Blex container: isolate from widget styles, let blex own its internals */
52
+ '.blex-block-container { isolation: isolate; }',
53
+ /* Restore browser defaults for blex internals that the widget reset may have affected */
54
+ '.blex-block-container * { box-sizing: content-box; }',
53
55
 
54
56
  '.cumulus-widget {',
55
57
  ' font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;',
@@ -214,6 +216,198 @@
214
216
  ' min-height: auto;',
215
217
  '}',
216
218
 
219
+ /* ── Blex block-type styles (stopgap — blex IIFE missing these) ── */
220
+
221
+ /* Status block */
222
+ '.blex-status { display: flex; flex-direction: column; gap: 6px; padding: 12px 16px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; font-family: system-ui, sans-serif; }',
223
+ '.blex-status__entry { display: flex; align-items: center; gap: 10px; padding: 6px 0; border-bottom: 1px solid #2a2a2a; }',
224
+ '.blex-status__entry:last-child { border-bottom: none; }',
225
+ '.blex-status__key { font-size: 13px; color: #999; min-width: 120px; }',
226
+ '.blex-status__value { font-size: 13px; color: #e0e0e0; flex: 1; }',
227
+ '.blex-status__indicator { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }',
228
+ '.blex-status__indicator--ok { background: #22c55e; box-shadow: 0 0 6px #22c55e55; }',
229
+ '.blex-status__indicator--warning { background: #f59e0b; box-shadow: 0 0 6px #f59e0b55; }',
230
+ '.blex-status__indicator--error { background: #ef4444; box-shadow: 0 0 6px #ef444455; }',
231
+
232
+ /* Metric block */
233
+ '.blex-metric { display: flex; flex-direction: column; align-items: center; padding: 20px 16px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; text-align: center; font-family: system-ui, sans-serif; }',
234
+ '.blex-metric__value { font-size: 42px; font-weight: 700; color: #e0e0e0; line-height: 1.1; }',
235
+ '.blex-metric__label { font-size: 13px; color: #888; margin-top: 4px; text-transform: uppercase; letter-spacing: 0.05em; }',
236
+ '.blex-metric__trend { font-size: 14px; margin-top: 6px; color: #888; }',
237
+ '.blex-metric__trend--up { color: #22c55e; }',
238
+ '.blex-metric__trend--down { color: #ef4444; }',
239
+
240
+ /* Progress block */
241
+ '.blex-progress { padding: 12px 16px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; font-family: system-ui, sans-serif; }',
242
+ '.blex-progress__title { font-size: 14px; font-weight: 600; color: #e0e0e0; margin-bottom: 12px; }',
243
+ '.blex-progress__steps { display: flex; flex-direction: column; gap: 0; }',
244
+ '.blex-progress__step { display: flex; align-items: flex-start; gap: 12px; padding: 8px 0; position: relative; }',
245
+ '.blex-progress__indicator { width: 24px; height: 24px; border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 12px; font-weight: 700; border: 2px solid #333; background: #1e1e1e; color: #666; position: relative; z-index: 1; }',
246
+ '.blex-progress__step--completed .blex-progress__indicator { background: #22c55e; border-color: #22c55e; color: #fff; }',
247
+ '.blex-progress__step--active .blex-progress__indicator { background: #0066cc; border-color: #0066cc; color: #fff; }',
248
+ '.blex-progress__content { padding-top: 2px; }',
249
+ '.blex-progress__label { font-size: 14px; color: #e0e0e0; }',
250
+ '.blex-progress__step--completed .blex-progress__label { color: #888; }',
251
+ '.blex-progress__step--active .blex-progress__label { font-weight: 600; }',
252
+ '.blex-progress__step--pending .blex-progress__label { color: #666; }',
253
+ '.blex-progress__description { font-size: 12px; color: #666; margin-top: 2px; }',
254
+
255
+ /* Confirm block */
256
+ '.blex-confirm { padding: 16px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; font-family: system-ui, sans-serif; }',
257
+ '.blex-confirm__message { font-size: 14px; color: #e0e0e0; margin-bottom: 12px; }',
258
+ '.blex-confirm__buttons { display: flex; gap: 8px; }',
259
+ '.blex-confirm__button { padding: 8px 16px; border-radius: 6px; border: 1px solid #444; background: #2a2a2a; color: #e0e0e0; cursor: pointer; font-size: 13px; transition: background 0.15s; }',
260
+ '.blex-confirm__button:hover { background: #3a3a3a; }',
261
+ '.blex-confirm__button:first-child { background: #0066cc; border-color: #0066cc; color: #fff; }',
262
+ '.blex-confirm__button:first-child:hover { background: #0077ee; }',
263
+
264
+ /* Poll block */
265
+ '.blex-poll { padding: 16px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; font-family: system-ui, sans-serif; }',
266
+ '.blex-poll__question { font-size: 15px; font-weight: 600; color: #e0e0e0; margin-bottom: 12px; }',
267
+ '.blex-poll__options { display: flex; flex-direction: column; gap: 6px; list-style: none; margin-bottom: 12px; }',
268
+ '.blex-poll__option { padding: 10px 14px; border-radius: 6px; border: 1px solid #444; background: #2a2a2a; color: #e0e0e0; cursor: pointer; font-size: 13px; transition: all 0.15s; }',
269
+ '.blex-poll__option:hover { background: #333; border-color: #555; }',
270
+ '.blex-poll__option--selected { background: #0066cc22; border-color: #0066cc; color: #60a5fa; }',
271
+ '.blex-poll__writein { width: 100%; padding: 8px 12px; border-radius: 6px; border: 1px solid #444; background: #2a2a2a; color: #e0e0e0; font-size: 13px; margin-bottom: 8px; outline: none; }',
272
+ '.blex-poll__writein:focus { border-color: #0066cc; }',
273
+ '.blex-poll__submit { padding: 8px 20px; border-radius: 6px; border: none; background: #0066cc; color: #fff; cursor: pointer; font-size: 13px; font-weight: 600; }',
274
+ '.blex-poll__submit:hover { background: #0077ee; }',
275
+
276
+ /* Table block */
277
+ '.blex-table { width: 100%; border-collapse: collapse; font-family: system-ui, sans-serif; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; overflow: hidden; }',
278
+ '.blex-table__header { display: flex; background: #2a2a2a; border-bottom: 1px solid #333; }',
279
+ '.blex-table__header-cell { flex: 1; padding: 10px 14px; font-size: 12px; font-weight: 600; color: #999; text-transform: uppercase; letter-spacing: 0.03em; cursor: pointer; user-select: none; }',
280
+ '.blex-table__header-cell:hover { color: #ccc; }',
281
+ '.blex-table__row { display: flex; border-bottom: 1px solid #2a2a2a; transition: background 0.1s; cursor: pointer; }',
282
+ '.blex-table__row:last-child { border-bottom: none; }',
283
+ '.blex-table__row:hover { background: #252525; }',
284
+ '.blex-table__row--selected { background: #0066cc22; }',
285
+ '.blex-table__cell { flex: 1; padding: 10px 14px; font-size: 13px; color: #e0e0e0; }',
286
+
287
+ /* Code block */
288
+ '.blex-code { position: relative; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; overflow: hidden; font-family: ui-monospace, "Cascadia Code", Menlo, monospace; }',
289
+ '.blex-code__copy { position: absolute; top: 8px; right: 8px; padding: 4px 10px; border-radius: 4px; border: 1px solid #444; background: #2a2a2a; color: #999; cursor: pointer; font-size: 11px; z-index: 1; }',
290
+ '.blex-code__copy:hover { color: #e0e0e0; background: #333; }',
291
+ '.blex-code__gutter { display: flex; }',
292
+ '.blex-code__content { padding: 12px 16px; overflow-x: auto; font-size: 13px; line-height: 1.5; color: #e0e0e0; }',
293
+ '.blex-code__line { display: block; }',
294
+ '.blex-code__line-number { display: inline-block; width: 3em; text-align: right; padding-right: 12px; color: #555; user-select: none; }',
295
+ '.blex-code__line--selected { background: #0066cc33; }',
296
+
297
+ /* Diff block */
298
+ '.blex-diff { background: #1e1e1e; border: 1px solid #333; border-radius: 8px; overflow: hidden; font-family: system-ui, sans-serif; }',
299
+ '.blex-diff__header { display: flex; align-items: center; gap: 8px; padding: 8px 14px; background: #2a2a2a; border-bottom: 1px solid #333; font-size: 13px; color: #999; }',
300
+ '.blex-diff__hunks { font-family: ui-monospace, Menlo, monospace; font-size: 13px; }',
301
+ '.blex-diff__hunk { border-bottom: 1px solid #2a2a2a; }',
302
+ '.blex-diff__hunk-header { padding: 4px 14px; background: #1a1a2e; color: #8888cc; font-size: 12px; }',
303
+ '.blex-diff__line { padding: 2px 14px; white-space: pre-wrap; }',
304
+ '.blex-diff__line--add { background: #22c55e15; color: #4ade80; }',
305
+ '.blex-diff__line--remove { background: #ef444415; color: #f87171; }',
306
+ '.blex-diff__line--context { color: #888; }',
307
+ '.blex-diff__actions { display: flex; gap: 8px; padding: 8px 14px; background: #2a2a2a; border-top: 1px solid #333; }',
308
+ '.blex-diff__toggle, .blex-diff__apply, .blex-diff__reject { padding: 6px 14px; border-radius: 4px; border: 1px solid #444; background: #2a2a2a; color: #e0e0e0; cursor: pointer; font-size: 12px; }',
309
+ '.blex-diff__apply { background: #22c55e22; border-color: #22c55e; color: #4ade80; }',
310
+ '.blex-diff__reject { background: #ef444422; border-color: #ef4444; color: #f87171; }',
311
+
312
+ /* File tree block */
313
+ '.blex-file-tree { padding: 12px 16px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; font-family: ui-monospace, Menlo, monospace; font-size: 13px; }',
314
+ '.blex-file-tree__label { display: flex; align-items: center; gap: 6px; padding: 3px 0; cursor: pointer; color: #e0e0e0; }',
315
+ '.blex-file-tree__label:hover { color: #60a5fa; }',
316
+ '.blex-file-tree__toggle { width: 16px; text-align: center; color: #666; }',
317
+ '.blex-file-tree__children { margin-left: 20px; }',
318
+ '.blex-file-tree__size { color: #666; font-size: 11px; margin-left: auto; }',
319
+
320
+ /* Form block */
321
+ '.blex-form { padding: 16px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; font-family: system-ui, sans-serif; }',
322
+ '.blex-form__title { font-size: 15px; font-weight: 600; color: #e0e0e0; margin-bottom: 14px; }',
323
+ '.blex-form__field { margin-bottom: 12px; }',
324
+ '.blex-form__label { display: block; font-size: 13px; color: #999; margin-bottom: 4px; }',
325
+ '.blex-form__input { width: 100%; padding: 8px 12px; border-radius: 6px; border: 1px solid #444; background: #2a2a2a; color: #e0e0e0; font-size: 13px; outline: none; }',
326
+ '.blex-form__input:focus { border-color: #0066cc; }',
327
+ '.blex-form__checkbox { margin-right: 8px; }',
328
+ '.blex-form__error { font-size: 12px; color: #ef4444; margin-top: 2px; }',
329
+ '.blex-form__submit { padding: 10px 20px; border-radius: 6px; border: none; background: #0066cc; color: #fff; cursor: pointer; font-size: 14px; font-weight: 600; width: 100%; margin-top: 8px; }',
330
+ '.blex-form__submit:hover { background: #0077ee; }',
331
+
332
+ /* Terminal block */
333
+ '.blex-terminal { background: #0d0d0d; border: 1px solid #333; border-radius: 8px; overflow: hidden; font-family: ui-monospace, Menlo, monospace; font-size: 13px; }',
334
+ '.blex-terminal__command { display: flex; align-items: center; gap: 8px; padding: 10px 14px; background: #1a1a1a; border-bottom: 1px solid #2a2a2a; }',
335
+ '.blex-terminal__prompt { color: #22c55e; }',
336
+ '.blex-terminal__output { padding: 10px 14px; color: #e0e0e0; white-space: pre-wrap; max-height: 300px; overflow-y: auto; }',
337
+ '.blex-terminal__toggle { padding: 4px 10px; border-radius: 4px; border: 1px solid #333; background: #1a1a1a; color: #888; cursor: pointer; font-size: 11px; margin: 0 14px 10px; }',
338
+ '.blex-terminal__copy { position: absolute; top: 8px; right: 8px; padding: 4px 10px; border-radius: 4px; border: 1px solid #333; background: #1a1a1a; color: #888; cursor: pointer; font-size: 11px; }',
339
+
340
+ /* Timeline block */
341
+ '.blex-timeline { padding: 16px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; font-family: system-ui, sans-serif; }',
342
+ '.blex-timeline__title { font-size: 15px; font-weight: 600; color: #e0e0e0; margin-bottom: 14px; }',
343
+ '.blex-timeline__list { display: flex; flex-direction: column; gap: 0; position: relative; padding-left: 24px; }',
344
+ '.blex-timeline__list::before { content: ""; position: absolute; left: 7px; top: 8px; bottom: 8px; width: 2px; background: #333; }',
345
+ '.blex-timeline__item { display: flex; gap: 16px; padding: 8px 0; position: relative; }',
346
+ '.blex-timeline__dot { width: 12px; height: 12px; border-radius: 50%; background: #0066cc; flex-shrink: 0; margin-top: 4px; position: absolute; left: -21px; z-index: 1; }',
347
+ '.blex-timeline__content { flex: 1; }',
348
+ '.blex-timeline__time { font-size: 11px; color: #666; margin-bottom: 2px; }',
349
+ '.blex-timeline__event-title { font-size: 14px; color: #e0e0e0; font-weight: 500; }',
350
+ '.blex-timeline__description { font-size: 13px; color: #888; margin-top: 2px; }',
351
+
352
+ /* Layout block */
353
+ '.blex-layout { display: grid; gap: 12px; }',
354
+ '.blex-layout--columns { grid-template-columns: repeat(var(--blex-layout-cols, 2), 1fr); }',
355
+ '.blex-layout--grid { grid-template-columns: repeat(var(--blex-layout-cols, 2), 1fr); }',
356
+ '.blex-layout__child { min-width: 0; }',
357
+
358
+ /* Kanban block */
359
+ '.blex-kanban { display: flex; gap: 12px; padding: 12px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; overflow-x: auto; font-family: system-ui, sans-serif; }',
360
+ '.blex-kanban__column { flex: 1; min-width: 200px; background: #252525; border-radius: 6px; padding: 10px; display: flex; flex-direction: column; gap: 8px; }',
361
+ '.blex-kanban__column-title { font-size: 12px; font-weight: 700; color: #999; text-transform: uppercase; letter-spacing: 0.05em; padding: 4px 6px; }',
362
+ '.blex-kanban__item { padding: 10px 12px; background: #2a2a2a; border: 1px solid #3a3a3a; border-radius: 6px; cursor: grab; transition: all 0.15s; }',
363
+ '.blex-kanban__item:hover { border-color: #555; background: #303030; }',
364
+ '.blex-kanban__item-title { font-size: 13px; color: #e0e0e0; font-weight: 500; }',
365
+ '.blex-kanban__item-subtitle { font-size: 12px; color: #888; margin-top: 3px; }',
366
+ '.blex-kanban__item-tags { display: flex; gap: 4px; margin-top: 6px; flex-wrap: wrap; }',
367
+ '.blex-kanban__tag { font-size: 10px; padding: 2px 6px; border-radius: 3px; background: #0066cc22; color: #60a5fa; }',
368
+
369
+ /* Calendar block */
370
+ '.blex-calendar { padding: 12px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; font-family: system-ui, sans-serif; }',
371
+ '.blex-calendar__header { display: flex; align-items: center; justify-content: space-between; padding: 8px 4px; margin-bottom: 8px; }',
372
+ '.blex-calendar__title { font-size: 15px; font-weight: 600; color: #e0e0e0; }',
373
+ '.blex-calendar__nav { display: flex; gap: 4px; }',
374
+ '.blex-calendar__nav-btn { padding: 4px 10px; border-radius: 4px; border: 1px solid #444; background: #2a2a2a; color: #e0e0e0; cursor: pointer; font-size: 13px; }',
375
+ '.blex-calendar__grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 1px; }',
376
+ '.blex-calendar__day-header { text-align: center; font-size: 11px; color: #666; padding: 6px; font-weight: 600; }',
377
+ '.blex-calendar__day { min-height: 60px; padding: 4px 6px; background: #252525; border-radius: 4px; font-size: 12px; color: #888; }',
378
+ '.blex-calendar__day--today { background: #0066cc22; color: #60a5fa; }',
379
+ '.blex-calendar__day--other-month { opacity: 0.4; }',
380
+ '.blex-calendar__event { font-size: 10px; padding: 2px 4px; border-radius: 3px; margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: #fff; cursor: pointer; }',
381
+
382
+ /* Gallery block */
383
+ '.blex-gallery { padding: 12px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; }',
384
+ '.blex-gallery--grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }',
385
+ '.blex-gallery__image { border-radius: 6px; overflow: hidden; cursor: pointer; aspect-ratio: 1; }',
386
+ '.blex-gallery__image img { width: 100%; height: 100%; object-fit: cover; }',
387
+ '.blex-gallery__caption { font-size: 11px; color: #888; margin-top: 4px; text-align: center; font-family: system-ui, sans-serif; }',
388
+
389
+ /* Image block */
390
+ '.blex-image { padding: 12px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; text-align: center; font-family: system-ui, sans-serif; }',
391
+ '.blex-image__img { max-width: 100%; border-radius: 6px; cursor: zoom-in; }',
392
+ '.blex-image__caption { font-size: 13px; color: #888; margin-top: 8px; }',
393
+ '.blex-image__actions { display: flex; justify-content: center; gap: 8px; margin-top: 8px; }',
394
+ '.blex-image__btn { padding: 4px 12px; border-radius: 4px; border: 1px solid #444; background: #2a2a2a; color: #999; cursor: pointer; font-size: 12px; }',
395
+ '.blex-image__btn:hover { color: #e0e0e0; background: #333; }',
396
+ '.blex-image__overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.85); display: flex; align-items: center; justify-content: center; z-index: 10000; cursor: zoom-out; }',
397
+
398
+ /* SVG block */
399
+ '.blex-svg { padding: 12px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; font-family: system-ui, sans-serif; }',
400
+ '.blex-svg__title { font-size: 14px; color: #999; margin-bottom: 8px; }',
401
+ '.blex-svg__content { display: flex; justify-content: center; }',
402
+ '.blex-svg__content svg { max-width: 100%; }',
403
+ '.blex-svg__actions { display: flex; gap: 8px; margin-top: 8px; justify-content: center; }',
404
+ '.blex-svg__btn { padding: 4px 12px; border-radius: 4px; border: 1px solid #444; background: #2a2a2a; color: #999; cursor: pointer; font-size: 12px; }',
405
+ '.blex-svg__btn:hover { color: #e0e0e0; background: #333; }',
406
+
407
+ /* Mermaid block */
408
+ '.blex-mermaid { padding: 12px; background: #1e1e1e; border: 1px solid #333; border-radius: 8px; text-align: center; }',
409
+ '.blex-mermaid svg { max-width: 100%; }',
410
+
217
411
  /* Headings */
218
412
  '.cumulus-msg h1,.cumulus-msg h2,.cumulus-msg h3,.cumulus-msg h4,.cumulus-msg h5,.cumulus-msg h6 {',
219
413
  ' font-weight: 600; margin: 0.7em 0 0.3em; line-height: 1.3; color: #e8e8e8;',
@@ -3538,9 +3732,10 @@
3538
3732
  var _streamingRow = null;
3539
3733
  function updateStreamingOnly() {
3540
3734
  if (!state.streaming) {
3541
- // Not streaming — fall back to full rebuild (cleans up stale streaming row)
3735
+ // Not streaming — just clear the streaming row reference.
3736
+ // Do NOT trigger a full rebuild here — the 'done' handler already did that.
3737
+ // A full rebuild would destroy blex blocks that are rendering asynchronously.
3542
3738
  _streamingRow = null;
3543
- renderPanelMessages();
3544
3739
  return;
3545
3740
  }
3546
3741
  if (!_streamingRow) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luckydraw/cumulus",
3
- "version": "0.27.31",
3
+ "version": "0.27.33",
4
4
  "description": "RLM-based CLI chat wrapper for Claude with external history context management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",