zero-query 1.2.5 → 1.2.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.
- package/README.md +18 -0
- package/cli/scaffold/webrtc/app/components/video-room.js +511 -101
- package/cli/scaffold/webrtc/global.css +229 -32
- package/dist/zquery.dist.zip +0 -0
- package/dist/zquery.js +3 -3
- package/dist/zquery.min.js +2 -2
- package/package.json +1 -1
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
--panel: #151821;
|
|
7
7
|
--panel-2: #1c2030;
|
|
8
8
|
--border: #262b38;
|
|
9
|
+
--border-hi: #3a4258;
|
|
9
10
|
--text: #e8ecf3;
|
|
10
11
|
--text-muted: #8a93a6;
|
|
11
12
|
--accent: #5b8def;
|
|
@@ -43,7 +44,7 @@ main { flex: 1 1 auto; min-height: 0; }
|
|
|
43
44
|
/* ---- Lobby (pre-join) -------------------------------------------------- */
|
|
44
45
|
|
|
45
46
|
.lobby {
|
|
46
|
-
max-width:
|
|
47
|
+
max-width: 620px;
|
|
47
48
|
margin: 4rem auto;
|
|
48
49
|
padding: 2rem;
|
|
49
50
|
background: var(--panel);
|
|
@@ -51,7 +52,7 @@ main { flex: 1 1 auto; min-height: 0; }
|
|
|
51
52
|
border-radius: 0.75rem;
|
|
52
53
|
}
|
|
53
54
|
.lobby h1 { margin: 0 0 0.5rem; font-size: 1.4rem; }
|
|
54
|
-
.lobby .lead { color: var(--text-muted); line-height: 1.
|
|
55
|
+
.lobby .lead { color: var(--text-muted); line-height: 1.55; margin: 0.4rem 0; }
|
|
55
56
|
.lobby code { background: #0d101a; padding: 0.1rem 0.35rem; border-radius: 0.25rem; }
|
|
56
57
|
|
|
57
58
|
.join-form {
|
|
@@ -86,22 +87,45 @@ button {
|
|
|
86
87
|
font-weight: 600;
|
|
87
88
|
cursor: pointer;
|
|
88
89
|
font-family: inherit;
|
|
90
|
+
transition: background .15s, border-color .15s, transform .05s;
|
|
91
|
+
display: inline-flex;
|
|
92
|
+
align-items: center;
|
|
93
|
+
gap: 0.4rem;
|
|
94
|
+
line-height: 1;
|
|
89
95
|
}
|
|
90
|
-
button
|
|
96
|
+
button .icon { flex: 0 0 auto; display: block; }
|
|
97
|
+
button:hover { background: #232939; border-color: var(--border-hi); }
|
|
98
|
+
button:active { transform: translateY(1px); }
|
|
99
|
+
button:disabled { opacity: 0.55; cursor: not-allowed; }
|
|
91
100
|
button.primary { background: var(--accent); border-color: transparent; color: #fff; }
|
|
92
101
|
button.primary:hover { filter: brightness(1.1); }
|
|
93
102
|
button.leave { background: var(--danger); border-color: transparent; color: #fff; }
|
|
94
103
|
button.off { background: #3a2030; color: #f3b6c2; }
|
|
95
104
|
button.active { background: var(--accent-2); border-color: transparent; color: #fff; }
|
|
105
|
+
button.ghost { background: transparent; }
|
|
96
106
|
|
|
97
107
|
.status { color: var(--text-muted); font-size: 0.9rem; margin: 0.5rem 0 0; }
|
|
98
108
|
.status.error { color: var(--danger); }
|
|
99
109
|
|
|
110
|
+
.device-hint {
|
|
111
|
+
color: var(--warn);
|
|
112
|
+
background: rgba(245, 158, 11, 0.08);
|
|
113
|
+
border: 1px solid rgba(245, 158, 11, 0.25);
|
|
114
|
+
padding: 0.5rem 0.75rem;
|
|
115
|
+
border-radius: 0.375rem;
|
|
116
|
+
font-size: 0.85rem;
|
|
117
|
+
margin-top: 0.75rem;
|
|
118
|
+
display: flex;
|
|
119
|
+
align-items: center;
|
|
120
|
+
gap: 0.5rem;
|
|
121
|
+
}
|
|
122
|
+
.device-hint .icon { flex: 0 0 auto; }
|
|
123
|
+
|
|
100
124
|
/* ---- Room layout (in-call) -------------------------------------------- */
|
|
101
125
|
|
|
102
126
|
.room {
|
|
103
127
|
display: grid;
|
|
104
|
-
grid-template-columns: 220px 1fr
|
|
128
|
+
grid-template-columns: 220px 1fr 300px;
|
|
105
129
|
height: 100%;
|
|
106
130
|
min-height: 0;
|
|
107
131
|
}
|
|
@@ -125,14 +149,24 @@ button.active { background: var(--accent-2); border-color: transparent; c
|
|
|
125
149
|
border-radius: 0.375rem;
|
|
126
150
|
font-size: 0.9rem;
|
|
127
151
|
}
|
|
128
|
-
.roster-row.
|
|
129
|
-
.roster-row
|
|
152
|
+
.roster-row.broken { color: var(--danger); }
|
|
153
|
+
.roster-row.me { color: var(--accent); }
|
|
154
|
+
.roster-row .who { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
155
|
+
.roster-row .who small { color: var(--text-muted); font-weight: normal; }
|
|
130
156
|
.roster-row .dot {
|
|
131
157
|
width: 8px; height: 8px; border-radius: 50%;
|
|
132
158
|
background: var(--accent-2);
|
|
133
159
|
flex: 0 0 auto;
|
|
134
160
|
}
|
|
135
161
|
.roster-row .dot.off { background: var(--text-muted); }
|
|
162
|
+
.roster-row .roster-icons {
|
|
163
|
+
display: inline-flex;
|
|
164
|
+
align-items: center;
|
|
165
|
+
gap: 0.25rem;
|
|
166
|
+
color: var(--text-muted);
|
|
167
|
+
white-space: nowrap;
|
|
168
|
+
}
|
|
169
|
+
.roster-row.me .roster-icons { color: var(--accent); }
|
|
136
170
|
|
|
137
171
|
.sidebar .leave { margin-top: 0.5rem; }
|
|
138
172
|
|
|
@@ -145,34 +179,113 @@ button.active { background: var(--accent-2); border-color: transparent; c
|
|
|
145
179
|
background: var(--bg);
|
|
146
180
|
}
|
|
147
181
|
|
|
148
|
-
.
|
|
182
|
+
.stage-area {
|
|
183
|
+
flex: 1 1 auto;
|
|
184
|
+
min-height: 0;
|
|
185
|
+
display: flex;
|
|
186
|
+
flex-direction: column;
|
|
187
|
+
gap: 0.5rem;
|
|
188
|
+
padding: 0.6rem;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* Main tile area - flexes to fill remaining space. */
|
|
192
|
+
.stage-main {
|
|
149
193
|
flex: 1 1 auto;
|
|
150
194
|
min-height: 0;
|
|
151
|
-
overflow-y: auto;
|
|
152
|
-
padding: 0.75rem;
|
|
153
195
|
display: grid;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
196
|
+
gap: 0.5rem;
|
|
197
|
+
align-content: stretch;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/* Tile-count adaptive grids. */
|
|
201
|
+
.stage-main-1 { grid-template-columns: 1fr; grid-template-rows: 1fr; }
|
|
202
|
+
.stage-main-2 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr; }
|
|
203
|
+
.stage-main-4 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; }
|
|
204
|
+
.stage-main-6 { grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; }
|
|
205
|
+
.stage-main-9 { grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 1fr 1fr 1fr; }
|
|
206
|
+
|
|
207
|
+
/* Camera-only mode keeps a 16:9 floor so tiny grids don't span the screen. */
|
|
208
|
+
.room:not(.has-focus) .stage-main {
|
|
209
|
+
align-content: start;
|
|
210
|
+
grid-auto-rows: minmax(180px, 1fr);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/* Strip of thumbnails for the non-focused tiles when a screen is on stage. */
|
|
214
|
+
.stage-strip {
|
|
215
|
+
flex: 0 0 auto;
|
|
216
|
+
display: flex;
|
|
217
|
+
gap: 0.5rem;
|
|
218
|
+
overflow-x: auto;
|
|
219
|
+
padding-bottom: 0.25rem;
|
|
220
|
+
scrollbar-width: thin;
|
|
221
|
+
}
|
|
222
|
+
.stage-strip::-webkit-scrollbar { height: 6px; }
|
|
223
|
+
.stage-strip::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
|
|
224
|
+
|
|
225
|
+
.stage-empty {
|
|
226
|
+
flex: 1 1 auto;
|
|
227
|
+
display: flex; flex-direction: column;
|
|
228
|
+
align-items: center; justify-content: center;
|
|
229
|
+
color: var(--text-muted);
|
|
230
|
+
border: 1px dashed var(--border);
|
|
231
|
+
border-radius: 0.5rem;
|
|
157
232
|
}
|
|
233
|
+
.stage-empty .empty-title { font-size: 1rem; color: var(--text); margin-bottom: 0.25rem; }
|
|
234
|
+
.stage-empty .empty-sub { font-size: 0.85rem; }
|
|
235
|
+
|
|
236
|
+
/* ---- Tiles ------------------------------------------------------------- */
|
|
237
|
+
|
|
158
238
|
.tile {
|
|
159
239
|
background: #000;
|
|
160
240
|
border: 1px solid var(--border);
|
|
161
241
|
border-radius: 0.5rem;
|
|
162
242
|
overflow: hidden;
|
|
163
|
-
aspect-ratio: 16 / 9;
|
|
164
243
|
position: relative;
|
|
244
|
+
min-height: 0;
|
|
165
245
|
}
|
|
166
|
-
.tile.self
|
|
167
|
-
.tile
|
|
168
|
-
.tile
|
|
246
|
+
.tile.self { border-color: var(--accent); }
|
|
247
|
+
.tile.tile-screen { border-color: var(--accent-2); }
|
|
248
|
+
.tile video {
|
|
249
|
+
width: 100%; height: 100%;
|
|
250
|
+
object-fit: cover; background: #000;
|
|
251
|
+
display: block;
|
|
252
|
+
}
|
|
253
|
+
.tile.tile-screen video { object-fit: contain; background: #000; }
|
|
254
|
+
.tile.tile-cam video { object-fit: cover; }
|
|
255
|
+
|
|
256
|
+
.tile.thumb {
|
|
257
|
+
flex: 0 0 auto;
|
|
258
|
+
width: 200px;
|
|
259
|
+
aspect-ratio: 16 / 9;
|
|
260
|
+
}
|
|
261
|
+
.tile.tile-strip { /* alias of .thumb so future tweaks have a hook */ }
|
|
262
|
+
|
|
263
|
+
.tile .label {
|
|
169
264
|
position: absolute;
|
|
170
|
-
left: 0.
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
265
|
+
left: 0.45rem; bottom: 0.45rem;
|
|
266
|
+
display: inline-flex; align-items: center; gap: 0.35rem;
|
|
267
|
+
background: rgba(0, 0, 0, 0.62);
|
|
268
|
+
padding: 0.18rem 0.5rem;
|
|
269
|
+
border-radius: 999px;
|
|
270
|
+
font-size: 0.78rem;
|
|
271
|
+
backdrop-filter: blur(4px);
|
|
175
272
|
}
|
|
273
|
+
.tile .label-name { font-weight: 600; }
|
|
274
|
+
.tile .chip {
|
|
275
|
+
display: inline-flex;
|
|
276
|
+
align-items: center;
|
|
277
|
+
gap: 0.2rem;
|
|
278
|
+
font-size: 0.78rem;
|
|
279
|
+
line-height: 1;
|
|
280
|
+
padding: 0.2rem 0.35rem;
|
|
281
|
+
border-radius: 999px;
|
|
282
|
+
background: rgba(255,255,255,0.08);
|
|
283
|
+
}
|
|
284
|
+
.tile .chip .icon { display: block; }
|
|
285
|
+
.tile .chip-on { background: rgba(22,163,74,0.25); }
|
|
286
|
+
.tile .chip-off { background: rgba(225,69,92,0.25); }
|
|
287
|
+
.tile .chip-screen { background: rgba(91,141,239,0.25); }
|
|
288
|
+
|
|
176
289
|
.tile .camoff {
|
|
177
290
|
position: absolute; inset: 0;
|
|
178
291
|
display: flex; align-items: center; justify-content: center;
|
|
@@ -181,23 +294,52 @@ button.active { background: var(--accent-2); border-color: transparent; c
|
|
|
181
294
|
font-size: 0.95rem;
|
|
182
295
|
}
|
|
183
296
|
|
|
297
|
+
.tile .pin-btn {
|
|
298
|
+
position: absolute;
|
|
299
|
+
top: 0.4rem; right: 0.4rem;
|
|
300
|
+
width: 28px; height: 28px;
|
|
301
|
+
padding: 0; line-height: 1;
|
|
302
|
+
border-radius: 6px;
|
|
303
|
+
background: rgba(0, 0, 0, 0.5);
|
|
304
|
+
border: 1px solid rgba(255,255,255,0.15);
|
|
305
|
+
color: #fff;
|
|
306
|
+
display: inline-flex;
|
|
307
|
+
align-items: center;
|
|
308
|
+
justify-content: center;
|
|
309
|
+
gap: 0;
|
|
310
|
+
opacity: 0;
|
|
311
|
+
transition: opacity .15s;
|
|
312
|
+
}
|
|
313
|
+
.tile.self .pin-btn,
|
|
314
|
+
.tile.tile-main .pin-btn { opacity: 1; background: rgba(0, 0, 0, 0.4); }
|
|
315
|
+
.tile:hover .pin-btn { opacity: 1; }
|
|
316
|
+
|
|
317
|
+
.tile.thumb .label { font-size: 0.72rem; padding: 0.1rem 0.4rem; }
|
|
318
|
+
.tile.thumb .chip { display: none; }
|
|
319
|
+
|
|
320
|
+
/* ---- Controls ---------------------------------------------------------- */
|
|
321
|
+
|
|
184
322
|
.controls {
|
|
185
323
|
flex: 0 0 auto;
|
|
186
|
-
display: flex; gap: 0.5rem; align-items: center;
|
|
187
|
-
padding: 0.75rem;
|
|
324
|
+
display: flex; gap: 0.5rem; align-items: center; flex-wrap: wrap;
|
|
325
|
+
padding: 0.6rem 0.75rem;
|
|
188
326
|
background: var(--panel);
|
|
189
327
|
border-top: 1px solid var(--border);
|
|
190
328
|
}
|
|
329
|
+
.ctl-group { display: inline-flex; gap: 0.35rem; align-items: center; }
|
|
191
330
|
.controls .status-inline {
|
|
192
331
|
margin-left: auto;
|
|
193
332
|
color: var(--text-muted);
|
|
194
|
-
font-size: 0.
|
|
333
|
+
font-size: 0.82rem;
|
|
195
334
|
text-align: right;
|
|
196
|
-
max-width:
|
|
335
|
+
max-width: 55%;
|
|
336
|
+
overflow: hidden;
|
|
337
|
+
text-overflow: ellipsis;
|
|
338
|
+
white-space: nowrap;
|
|
197
339
|
}
|
|
198
340
|
.controls .status-inline.error { color: var(--danger); }
|
|
199
341
|
|
|
200
|
-
/* ---- Chat
|
|
342
|
+
/* ---- Chat -------------------------------------------------------------- */
|
|
201
343
|
|
|
202
344
|
.chat {
|
|
203
345
|
background: var(--panel);
|
|
@@ -210,6 +352,9 @@ button.active { background: var(--accent-2); border-color: transparent; c
|
|
|
210
352
|
padding: 0.75rem 1rem;
|
|
211
353
|
border-bottom: 1px solid var(--border);
|
|
212
354
|
font-weight: 600;
|
|
355
|
+
display: flex;
|
|
356
|
+
align-items: center;
|
|
357
|
+
gap: 0.5rem;
|
|
213
358
|
}
|
|
214
359
|
.chat-log {
|
|
215
360
|
flex: 1 1 auto;
|
|
@@ -219,10 +364,31 @@ button.active { background: var(--accent-2); border-color: transparent; c
|
|
|
219
364
|
flex-direction: column;
|
|
220
365
|
gap: 0.5rem;
|
|
221
366
|
}
|
|
222
|
-
.chat-log .empty {
|
|
223
|
-
|
|
367
|
+
.chat-log .empty {
|
|
368
|
+
display: flex;
|
|
369
|
+
flex-direction: column;
|
|
370
|
+
align-items: center;
|
|
371
|
+
gap: 0.4rem;
|
|
372
|
+
color: var(--text-muted);
|
|
373
|
+
font-size: 0.9rem;
|
|
374
|
+
text-align: center;
|
|
375
|
+
margin: auto 0;
|
|
376
|
+
}
|
|
377
|
+
.msg {
|
|
378
|
+
background: rgba(255,255,255,0.02);
|
|
379
|
+
padding: 0.35rem 0.5rem;
|
|
380
|
+
border-radius: 0.4rem;
|
|
381
|
+
border-left: 2px solid var(--border);
|
|
382
|
+
}
|
|
383
|
+
.msg.mine { border-left-color: var(--accent-2); background: rgba(22,163,74,0.06); }
|
|
384
|
+
.msg-head {
|
|
385
|
+
display: flex; justify-content: space-between; align-items: baseline; gap: 0.5rem;
|
|
386
|
+
margin-bottom: 0.1rem;
|
|
387
|
+
}
|
|
388
|
+
.msg .who { color: var(--accent); font-weight: 600; font-size: 0.82rem; }
|
|
224
389
|
.msg.mine .who { color: var(--accent-2); }
|
|
225
|
-
.msg .
|
|
390
|
+
.msg .when { color: var(--text-muted); font-size: 0.7rem; }
|
|
391
|
+
.msg .text { word-wrap: break-word; font-size: 0.9rem; line-height: 1.4; }
|
|
226
392
|
|
|
227
393
|
.chat-form {
|
|
228
394
|
flex: 0 0 auto;
|
|
@@ -233,6 +399,7 @@ button.active { background: var(--accent-2); border-color: transparent; c
|
|
|
233
399
|
}
|
|
234
400
|
.chat-form input {
|
|
235
401
|
flex: 1 1 auto;
|
|
402
|
+
min-width: 0;
|
|
236
403
|
background: #0d101a;
|
|
237
404
|
color: var(--text);
|
|
238
405
|
border: 1px solid var(--border);
|
|
@@ -243,8 +410,38 @@ button.active { background: var(--accent-2); border-color: transparent; c
|
|
|
243
410
|
|
|
244
411
|
/* ---- Responsive tweaks ------------------------------------------------- */
|
|
245
412
|
|
|
413
|
+
@media (max-width: 1100px) {
|
|
414
|
+
.room { grid-template-columns: 200px 1fr 260px; }
|
|
415
|
+
}
|
|
246
416
|
@media (max-width: 900px) {
|
|
247
|
-
.room {
|
|
248
|
-
|
|
249
|
-
|
|
417
|
+
.room {
|
|
418
|
+
grid-template-columns: 1fr;
|
|
419
|
+
grid-template-rows: auto 1fr auto;
|
|
420
|
+
}
|
|
421
|
+
.sidebar {
|
|
422
|
+
flex-direction: row;
|
|
423
|
+
align-items: center;
|
|
424
|
+
gap: 0.5rem;
|
|
425
|
+
padding: 0.5rem 0.75rem;
|
|
426
|
+
border-right: none;
|
|
427
|
+
border-bottom: 1px solid var(--border);
|
|
428
|
+
}
|
|
429
|
+
.sidebar .room-meta { border: none; padding: 0; flex: 0 0 auto; }
|
|
430
|
+
.sidebar .roster { display: none; }
|
|
431
|
+
.sidebar .leave { margin: 0 0 0 auto; padding: 0.4rem 0.7rem; font-size: 0.85rem; }
|
|
432
|
+
.chat {
|
|
433
|
+
border-left: none;
|
|
434
|
+
border-top: 1px solid var(--border);
|
|
435
|
+
max-height: 42vh;
|
|
436
|
+
}
|
|
437
|
+
.tile.thumb { width: 140px; }
|
|
438
|
+
.controls { padding: 0.5rem; }
|
|
439
|
+
.controls .status-inline { max-width: 100%; flex: 1 1 100%; text-align: left; margin: 0.25rem 0 0; }
|
|
440
|
+
}
|
|
441
|
+
@media (max-width: 540px) {
|
|
442
|
+
.stage-main-2 { grid-template-columns: 1fr; grid-template-rows: 1fr 1fr; }
|
|
443
|
+
.stage-main-4,
|
|
444
|
+
.stage-main-6,
|
|
445
|
+
.stage-main-9 { grid-template-columns: 1fr 1fr; grid-auto-rows: minmax(140px, 1fr); grid-template-rows: none; }
|
|
446
|
+
.tile.thumb { width: 120px; }
|
|
250
447
|
}
|
package/dist/zquery.dist.zip
CHANGED
|
Binary file
|
package/dist/zquery.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* zQuery (zeroQuery) v1.2.
|
|
2
|
+
* zQuery (zeroQuery) v1.2.7
|
|
3
3
|
* Lightweight Frontend Library
|
|
4
4
|
* https://github.com/tonywied17/zero-query
|
|
5
5
|
* (c) 2026 Anthony Wiedman - MIT License
|
|
@@ -10449,9 +10449,9 @@ $.TurnError = TurnError;
|
|
|
10449
10449
|
$.E2eeError = E2eeError;
|
|
10450
10450
|
|
|
10451
10451
|
// --- Meta ------------------------------------------------------------------
|
|
10452
|
-
$.version = '1.2.
|
|
10452
|
+
$.version = '1.2.7';
|
|
10453
10453
|
$.libSize = '~130 KB';
|
|
10454
|
-
$.unitTests = {"passed":2348,"failed":0,"total":2534,"suites":620,"duration":
|
|
10454
|
+
$.unitTests = {"passed":2348,"failed":0,"total":2534,"suites":620,"duration":8702,"ok":true};
|
|
10455
10455
|
$.meta = {}; // populated at build time by CLI bundler
|
|
10456
10456
|
|
|
10457
10457
|
// --- Environment detection -------------------------------------------------
|