viberoom 0.5.2 → 0.5.4
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/NOTICE +8 -2
- package/README.md +1 -1
- package/dist/hub.js +55 -2
- package/dist/main.js +10 -0
- package/dist/room.js +43 -3
- package/dist/server.js +41 -1
- package/dist/templates.js +27 -3
- package/dist/update.js +95 -0
- package/package.json +1 -1
- package/templates/wren-and-quinn/template.json +28 -0
- package/ui/app.css +61 -19
- package/ui/app.js +306 -14
- package/ui/fonts/fira-code-cyrillic-ext.woff2 +0 -0
- package/ui/fonts/fira-code-cyrillic.woff2 +0 -0
- package/ui/fonts/fira-code-latin-ext.woff2 +0 -0
- package/ui/fonts/fira-code-latin.woff2 +0 -0
- package/ui/fonts/fira-code.css +5 -0
- package/ui/fonts/inter-cyrillic-ext.woff2 +0 -0
- package/ui/fonts/inter-cyrillic.woff2 +0 -0
- package/ui/fonts/inter-latin-ext.woff2 +0 -0
- package/ui/fonts/inter-latin.woff2 +0 -0
- package/ui/fonts/inter.css +5 -0
- package/ui/fonts/jetbrains-mono-cyrillic-ext.woff2 +0 -0
- package/ui/fonts/jetbrains-mono-cyrillic.woff2 +0 -0
- package/ui/fonts/jetbrains-mono-latin-ext.woff2 +0 -0
- package/ui/fonts/jetbrains-mono-latin.woff2 +0 -0
- package/ui/fonts/jetbrains-mono.css +5 -0
- package/ui/fonts/noto-sans-cyrillic-ext.woff2 +0 -0
- package/ui/fonts/noto-sans-cyrillic.woff2 +0 -0
- package/ui/fonts/noto-sans-latin-ext.woff2 +0 -0
- package/ui/fonts/noto-sans-latin.woff2 +0 -0
- package/ui/fonts/noto-sans.css +5 -0
- package/ui/fonts/source-code-pro-cyrillic-ext.woff2 +0 -0
- package/ui/fonts/source-code-pro-cyrillic.woff2 +0 -0
- package/ui/fonts/source-code-pro-latin-ext.woff2 +0 -0
- package/ui/fonts/source-code-pro-latin.woff2 +0 -0
- package/ui/fonts/source-code-pro.css +5 -0
- package/ui/index.html +11 -0
- package/ui/theme.css +44 -18
- package/templates/forge-and-lumen/template.json +0 -28
package/ui/app.css
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
.rail-room:hover .room-mark { opacity: 1; transform: translateY(-1px); }
|
|
36
36
|
.rail-room.active, .rail-room.active:hover { background: transparent; box-shadow: none; }
|
|
37
37
|
.rail-room.active .room-mark { opacity: 1; box-shadow: 0 0 0 2px var(--bg), 0 0 0 4px var(--primary); }
|
|
38
|
-
.rail-room .rail-count { background:
|
|
38
|
+
.rail-room .rail-count { background: var(--unread-grad); min-width: 18px; text-align: center; z-index: 2; }
|
|
39
39
|
.rail-room .rail-count.bump { animation: badge-pop 360ms var(--ease-pop); }
|
|
40
40
|
@keyframes badge-pop { 0% { transform: scale(0.6); } 55% { transform: scale(1.3); } 100% { transform: scale(1); } }
|
|
41
41
|
.shell.rail-open .rail-items { align-items: stretch; padding: 0 14px; }
|
|
@@ -44,7 +44,15 @@
|
|
|
44
44
|
.rail-toggle { width: 44px; height: 24px; margin-top: 8px; border-radius: 8px; border: 0; background: transparent; color: var(--faint); display: grid; place-content: center; padding: 0; align-self: center; transition: background var(--t-fast), color var(--t-fast); }
|
|
45
45
|
.rail-toggle .i { width: 16px; height: 16px; }
|
|
46
46
|
.rail-toggle:hover { background: #fff; color: var(--primary); }
|
|
47
|
-
.rail-foot { margin-top: auto; display: flex; flex-direction: column; gap: 0; align-items: center; }
|
|
47
|
+
.rail-foot { position: relative; margin-top: auto; display: flex; flex-direction: column; gap: 0; align-items: center; }
|
|
48
|
+
.update-pop { position: absolute; left: 12px; bottom: calc(100% - 2px); z-index: 30; display: flex; gap: 6px; align-items: flex-start; width: 250px; padding: 10px 8px 10px 14px; background: #fff; border-radius: 18px 18px 18px 6px; box-shadow: 0 10px 28px -12px rgba(28, 27, 51, 0.45), var(--shadow-tile); font-size: 12.5px; font-weight: 600; color: var(--ink-2); animation: bubble-in 0.45s var(--ease-out); }
|
|
49
|
+
.update-pop::after { content: ""; position: absolute; left: 14px; bottom: -6px; width: 12px; height: 12px; background: #fff; border-radius: 0 0 3px 0; transform: rotate(45deg); box-shadow: 3px 3px 4px -3px rgba(28, 27, 51, 0.25); }
|
|
50
|
+
.update-pop .up-main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 8px; }
|
|
51
|
+
.update-pop .up-text { line-height: 1.4; }
|
|
52
|
+
.update-pop .up-text b { color: var(--ink); }
|
|
53
|
+
.update-pop .up-go { align-self: flex-start; }
|
|
54
|
+
.update-pop .up-side { flex: none; display: flex; flex-direction: column; gap: 2px; }
|
|
55
|
+
.update-pop .icon-btn.sm { width: 26px; height: 26px; }
|
|
48
56
|
.shell.rail-open .rail-foot { align-items: stretch; padding: 0 14px; }
|
|
49
57
|
.rail-item { position: relative; display: flex; align-items: center; justify-content: center; gap: 10px; width: 44px; height: 44px; padding: 0; border: 0; background: transparent; border-radius: 14px; color: var(--muted); font-weight: 800; font-size: 13px; white-space: nowrap; transition: background var(--t-fast), color var(--t-fast), box-shadow var(--t-fast); }
|
|
50
58
|
.shell.rail-open .rail-item { width: auto; justify-content: flex-start; padding: 0 12px 0 0; }
|
|
@@ -214,9 +222,9 @@
|
|
|
214
222
|
.timeline { position: absolute; right: 6px; top: 78px; bottom: calc(var(--composer-h, 60px) + 36px); width: 18px; z-index: 4; }
|
|
215
223
|
.tl-ticks { position: absolute; inset: 0; }
|
|
216
224
|
.tl-view { position: absolute; left: 2px; right: 2px; border-radius: 6px; background: rgba(91, 91, 240, 0.07); pointer-events: none; transition: top 80ms linear, height 80ms linear; }
|
|
217
|
-
.tl-tick { position: absolute; left: 3px; width: 12px; height: 5px; border-radius: 3px; background:
|
|
225
|
+
.tl-tick { position: absolute; left: 3px; width: 12px; height: 5px; border-radius: 3px; background: var(--tick-mine); cursor: pointer; transition: background var(--t-fast), transform var(--t-fast); }
|
|
218
226
|
.tl-tick:hover, .tl-tick.active { background: var(--primary); transform: scaleX(1.25); }
|
|
219
|
-
.tl-tick.in-view { background:
|
|
227
|
+
.tl-tick.in-view { background: var(--tick-mine-view); }
|
|
220
228
|
.tl-tick.pinned { background: var(--primary); }
|
|
221
229
|
.tl-row.current.pinned { background: var(--lav-2); }
|
|
222
230
|
.tl-row.pinned { opacity: 1; color: var(--ink); }
|
|
@@ -224,9 +232,9 @@
|
|
|
224
232
|
.tl-row .tl-pin .i { width: 14px; height: 14px; }
|
|
225
233
|
.timeline.left { left: 6px; right: auto; }
|
|
226
234
|
.timeline.left .tl-view { background: rgba(28, 27, 51, 0.05); }
|
|
227
|
-
.timeline.left .tl-tick { background: color-mix(in srgb, var(--tick,
|
|
228
|
-
.timeline.left .tl-tick.in-view { background: color-mix(in srgb, var(--tick,
|
|
229
|
-
.timeline.left .tl-tick.pinned, .timeline.left .tl-tick:hover, .timeline.left .tl-tick.active { background: var(--tick,
|
|
235
|
+
.timeline.left .tl-tick { background: color-mix(in srgb, var(--tick, var(--tick-fallback)) 35%, #fff); }
|
|
236
|
+
.timeline.left .tl-tick.in-view { background: color-mix(in srgb, var(--tick, var(--tick-fallback)) 60%, #fff); }
|
|
237
|
+
.timeline.left .tl-tick.pinned, .timeline.left .tl-tick:hover, .timeline.left .tl-tick.active { background: var(--tick, var(--tick-fallback)); }
|
|
230
238
|
.timeline.left .tl-pop { left: 26px; right: auto; }
|
|
231
239
|
.tl-pop::before { content: ""; position: absolute; top: -6px; bottom: -6px; right: -6px; width: 6px; }
|
|
232
240
|
.timeline.left .tl-pop::before { right: auto; left: -6px; }
|
|
@@ -265,25 +273,25 @@
|
|
|
265
273
|
.jump-latest:hover { background: var(--soft); }
|
|
266
274
|
.done-notes { position: absolute; left: 30px; bottom: 96px; z-index: 5; display: flex; flex-direction: column-reverse; gap: 6px; }
|
|
267
275
|
.done-note { display: inline-flex; align-items: center; gap: 8px; max-width: 230px; padding: 6px 12px 6px 8px; border: 0; border-radius: 14px; background: var(--warm); color: var(--warm-ink); font: inherit; text-align: left; cursor: pointer; box-shadow: var(--shadow-pop); animation: rise var(--t-base) var(--ease-out); overflow: hidden; }
|
|
268
|
-
.done-note:hover { background:
|
|
276
|
+
.done-note:hover { background: var(--note-hover); }
|
|
269
277
|
.done-note .avatar { flex: none; }
|
|
270
278
|
.done-go { display: inline-flex; align-items: center; gap: 8px; min-width: 0; padding: 6px 4px 6px 8px; border: 0; background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer; }
|
|
271
|
-
.done-go:hover { background:
|
|
279
|
+
.done-go:hover { background: var(--note-hover); }
|
|
272
280
|
.done-go .avatar { flex: none; }
|
|
273
281
|
.done-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.25; }
|
|
274
282
|
.done-text b { font-size: 12px; font-weight: 800; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
275
283
|
.done-text small { font-size: 11px; font-weight: 600; opacity: 0.8; white-space: nowrap; }
|
|
276
284
|
.done-x { border: 0; background: transparent; color: inherit; opacity: 0.6; font-size: 15px; line-height: 1; padding: 0 9px; cursor: pointer; }
|
|
277
|
-
.done-x:hover { opacity: 1; background:
|
|
285
|
+
.done-x:hover { opacity: 1; background: var(--note-hover); }
|
|
278
286
|
.jump-latest .i { width: 16px; height: 16px; }
|
|
279
287
|
.bubble { max-width: 100%; background: #fff; border-radius: 6px 18px 18px 18px; padding: 12px 16px; min-width: 0; font-size: 14.5px; font-weight: 600; line-height: 1.55; color: var(--ink-2); box-shadow: 0 2px 0 rgba(28, 27, 51, 0.06), 0 1px 3px rgba(28, 27, 51, 0.04); }
|
|
280
288
|
.msg.mine .bubble { background: var(--grad-primary); color: #fff; border-radius: 18px 18px 6px 18px; box-shadow: 0 8px 18px -10px rgba(91, 91, 240, 0.7); padding: 11px 16px; }
|
|
281
289
|
.msg.mine .bubble .text { color: #fff; }
|
|
282
|
-
.msg.mine.waiting .bubble { background:
|
|
290
|
+
.msg.mine.waiting .bubble { background: var(--attention-grad); box-shadow: var(--attention-shadow); }
|
|
283
291
|
.bubble .waiting { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 10px; padding-top: 8px; border-top: 1px solid rgba(255, 255, 255, 0.35); font-size: 13px; font-weight: 600; color: rgba(255, 255, 255, 0.92); }
|
|
284
292
|
.bubble .waiting .i { width: 14px; height: 14px; vertical-align: -2px; }
|
|
285
293
|
.bubble .waiting-text { flex: 1; min-width: 160px; }
|
|
286
|
-
.bubble .waiting-stop { border: 0; border-radius: 10px; padding: 6px 12px; background: rgba(255, 255, 255, 0.92); color:
|
|
294
|
+
.bubble .waiting-stop { border: 0; border-radius: 10px; padding: 6px 12px; background: rgba(255, 255, 255, 0.92); color: var(--attention-ink); font-weight: 800; font-size: 12.5px; cursor: pointer; }
|
|
287
295
|
.bubble .waiting-stop:hover:not(:disabled) { background: #fff; }
|
|
288
296
|
.bubble .waiting-stop:disabled { opacity: 0.7; cursor: default; }
|
|
289
297
|
.msg.mine .mention { background: rgba(255, 255, 255, 0.22); color: #fff !important; padding: 1px 7px; border-radius: 6px; font-weight: 800; }
|
|
@@ -361,10 +369,17 @@ table.csv tbody tr:nth-child(even) td { background: rgba(91, 91, 240, 0.03); }
|
|
|
361
369
|
.bubble .text.clamped { max-height: 9.2em; overflow: hidden; -webkit-mask-image: linear-gradient(180deg, #000 70%, transparent); mask-image: linear-gradient(180deg, #000 70%, transparent); }
|
|
362
370
|
.bubble .more { background: none; border: 0; color: var(--primary); font-weight: 800; padding: 2px 0; font-size: 13px; }
|
|
363
371
|
.msg.mine .bubble .more { color: #fff; }
|
|
364
|
-
.bubble .pending {
|
|
372
|
+
.bubble .pending { display: inline-flex; align-items: center; gap: 4px; height: 1.55em; vertical-align: text-bottom; }
|
|
373
|
+
.bubble .pending i { width: 5px; height: 5px; border-radius: 50%; background: var(--muted); opacity: 0.25; animation: think 1.4s ease-in-out infinite; }
|
|
374
|
+
.bubble .pending i:nth-child(2) { animation-delay: 0.2s; }
|
|
375
|
+
.bubble .pending i:nth-child(3) { animation-delay: 0.4s; }
|
|
376
|
+
@keyframes think { 0%, 60%, 100% { opacity: 0.25; transform: translateY(0); } 30% { opacity: 1; transform: translateY(-2px); } }
|
|
365
377
|
.mention { font-weight: 800; }
|
|
366
|
-
.
|
|
367
|
-
|
|
378
|
+
.working { display: inline-block; width: 19px; height: 15px; color: var(--faint); margin-left: 5px; vertical-align: -3px; overflow: visible; }
|
|
379
|
+
.working .forearm { animation: type 0.14s ease-in-out infinite alternate; transform-box: view-box; transform-origin: 23px 27px; }
|
|
380
|
+
.working .body { animation: bob 0.28s ease-in-out infinite alternate; }
|
|
381
|
+
@keyframes type { from { transform: rotate(-16deg); } to { transform: rotate(4deg); } }
|
|
382
|
+
@keyframes bob { from { transform: translateY(0); } to { transform: translateY(-0.8px); } }
|
|
368
383
|
.thought { margin: 2px 0 6px; font-size: 12px; font-weight: 600; color: var(--muted); }
|
|
369
384
|
.thought summary { cursor: pointer; }
|
|
370
385
|
.thought-text { white-space: pre-wrap; padding: 4px 0 0 8px; border-left: 2px solid var(--lav-2); margin-top: 4px; }
|
|
@@ -403,8 +418,8 @@ table.csv tbody tr:nth-child(even) td { background: rgba(91, 91, 240, 0.03); }
|
|
|
403
418
|
.head .edit-btn .i, .head .pin-btn .i { width: 14px; height: 14px; }
|
|
404
419
|
.msg:hover .head .edit-btn, .head .edit-btn:focus, .msg:hover .head .pin-btn, .head .pin-btn:focus { opacity: 1; }
|
|
405
420
|
.head .edit-btn:hover { color: var(--primary); }
|
|
406
|
-
.head .pin-btn:hover { color:
|
|
407
|
-
.msg.pinned .head .pin-btn { opacity: 1; color:
|
|
421
|
+
.head .pin-btn:hover { color: var(--attention); }
|
|
422
|
+
.msg.pinned .head .pin-btn { opacity: 1; color: var(--attention); }
|
|
408
423
|
.edit-box { margin: 4px 0 6px; }
|
|
409
424
|
.msg .bubble-col:has(> .bubble > .edit-box:not([hidden])) { width: 100%; }
|
|
410
425
|
.msg .bubble:has(> .edit-box:not([hidden])) { width: min(760px, 100%); }
|
|
@@ -428,7 +443,7 @@ table.csv tbody tr:nth-child(even) td { background: rgba(91, 91, 240, 0.03); }
|
|
|
428
443
|
.perm-result { color: var(--muted); font-size: 12px; }
|
|
429
444
|
.visibility-divider { display: flex; align-items: center; gap: 10px; margin: 4px 0; }
|
|
430
445
|
.visibility-divider .vd-line { flex: 1; height: 8px; background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='8' viewBox='0 0 16 8'><path d='M0 4 Q4 0 8 4 T16 4' fill='none' stroke='%23f472b6' stroke-width='1.6'/></svg>") repeat-x center / 16px 8px; opacity: 0.7; }
|
|
431
|
-
.visibility-divider .vd-label { color:
|
|
446
|
+
.visibility-divider .vd-label { color: var(--unseen-ink); background: var(--unseen-bg); border-radius: var(--r-pill); padding: 4px 12px; font-size: 11px; font-weight: 800; white-space: nowrap; max-width: 70%; overflow: hidden; text-overflow: ellipsis; }
|
|
432
447
|
.msg.hidden { justify-content: center; }
|
|
433
448
|
.hidden-turn { max-width: 720px; width: 100%; background: var(--soft); border-radius: 12px; padding: 6px 12px; font-size: 12px; font-weight: 600; color: var(--muted); }
|
|
434
449
|
.hidden-turn summary { cursor: pointer; list-style: none; }
|
|
@@ -562,6 +577,31 @@ table.csv tbody tr:nth-child(even) td { background: rgba(91, 91, 240, 0.03); }
|
|
|
562
577
|
.tpl-meta { color: var(--muted); font-size: 12px; font-weight: 600; }
|
|
563
578
|
.tpl-item .avatar-stack { margin-top: 2px; }
|
|
564
579
|
.tpl-rec { background: var(--warm); color: var(--warm-ink); font-size: 10px; padding: 1px 7px; }
|
|
580
|
+
.tpl-mine { background: var(--lav); color: var(--primary); font-size: 10px; padding: 1px 7px; }
|
|
581
|
+
.tpl-runs { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
582
|
+
.stp-preview { display: flex; flex-direction: column; gap: 10px; max-height: 48vh; overflow: auto; padding-right: 4px; margin: 4px 0 10px; }
|
|
583
|
+
.stp-section { background: var(--soft); border-radius: 14px; padding: 10px 12px; }
|
|
584
|
+
.section.template { background: var(--lav); margin: 22px 0 14px; padding: 16px 18px 18px; box-sizing: border-box; width: 100%; overflow: hidden; }
|
|
585
|
+
.section.template > h4 { color: var(--primary); }
|
|
586
|
+
.stp-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 12px; }
|
|
587
|
+
.stp-grid .field { margin-bottom: 8px; }
|
|
588
|
+
.stp-grid .field.wide { grid-column: 1 / -1; }
|
|
589
|
+
.stp-grid .switch { margin: 2px 0 8px; }
|
|
590
|
+
.stp-vm { display: grid; grid-template-columns: 36px 1fr; gap: 10px; align-items: start; padding: 10px 0 4px; border-top: 1px solid var(--lav-2); }
|
|
591
|
+
.stp-vm-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 0 10px; }
|
|
592
|
+
.stp-vm-fields .field { margin-bottom: 8px; }
|
|
593
|
+
.stp-vm-fields .field.wide { grid-column: 1 / -1; }
|
|
594
|
+
.stp-vm-fields .field textarea { min-height: 54px; }
|
|
595
|
+
.stp-vm-top { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
|
|
596
|
+
.stp-vm-top b { flex: 1; }
|
|
597
|
+
.stp-section h5 { margin: 0 0 6px; font-size: 11px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; color: var(--faint); }
|
|
598
|
+
.stp-section .kv { font-size: 12.5px; }
|
|
599
|
+
.stp-section ul { margin: 0; padding-left: 18px; color: var(--ink-2); font-size: 13px; font-weight: 600; }
|
|
600
|
+
.stp-vm { display: grid; grid-template-columns: 36px 1fr; gap: 10px; align-items: start; padding: 8px 0; border-top: 1px solid var(--lav-2); }
|
|
601
|
+
.stp-vm:first-of-type { border-top: 0; padding-top: 2px; }
|
|
602
|
+
.stp-vm-head { display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; }
|
|
603
|
+
.stp-vm-role { color: var(--muted); font-size: 12.5px; font-weight: 600; line-height: 1.45; margin-top: 3px; }
|
|
604
|
+
.stp-vm .chips { margin-top: 5px; }
|
|
565
605
|
.tpl-check { display: grid; place-items: center; width: 18px; height: 18px; border-radius: 50%; background: var(--primary); color: #fff; opacity: 0; transition: opacity var(--t-fast); }
|
|
566
606
|
.tpl-check .i { width: 12px; height: 12px; }
|
|
567
607
|
.tpl-item.on .tpl-check { opacity: 1; }
|
|
@@ -591,8 +631,10 @@ table.csv tbody tr:nth-child(even) td { background: rgba(91, 91, 240, 0.03); }
|
|
|
591
631
|
.check-list.locked { pointer-events: none; opacity: 0.6; }
|
|
592
632
|
.msg.system.done { justify-content: center; }
|
|
593
633
|
.done-row { display: inline-flex; align-items: center; gap: 8px; padding: 6px 14px 6px 8px; border: 0; border-radius: var(--r-pill); background: var(--warm); color: var(--warm-ink); font: inherit; font-size: 12px; font-weight: 800; cursor: pointer; box-shadow: var(--edge); }
|
|
594
|
-
.done-row:hover { background:
|
|
634
|
+
.done-row:hover { background: var(--note-hover); }
|
|
595
635
|
.done-notes { flex-direction: column; }
|
|
596
636
|
.done-note.new { background: var(--card); color: var(--ink-2); }
|
|
597
637
|
.done-note.new:hover { background: var(--soft); }
|
|
598
638
|
.meta .seen-by { color: var(--primary); font-weight: 800; margin-left: 6px; }
|
|
639
|
+
.section.template .stp-row { justify-content: center; margin: 6px 0 0; }
|
|
640
|
+
.section.template .field-note { margin: -2px 0 12px; }
|