@ikenga/pkg-tasks 0.2.0 → 0.4.1
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/dist/app.js +31 -74
- package/dist/features/tasks/create-task-form.js +159 -0
- package/dist/features/tasks/done-view.js +161 -0
- package/dist/features/tasks/sweeper-view.js +170 -0
- package/dist/features/tasks/task-detail-pane.js +92 -21
- package/dist/features/tasks/task-row.js +6 -6
- package/dist/features/tasks/tasks-view.js +307 -97
- package/dist/index.html +14 -2
- package/dist/lib/app-kit-css.js +3 -0
- package/dist/lib/assignees.js +137 -0
- package/dist/lib/bridge.js +24 -1
- package/dist/lib/esm-sh.d.ts +0 -4
- package/dist/lib/queries.js +89 -4
- package/dist/lib/shared.js +1 -1
- package/dist/lib/tasks-css.js +4 -5
- package/dist/lib/tokens-css.js +3 -5
- package/dist/lib/ui.js +5 -0
- package/dist/tasks.css +41 -313
- package/manifest.json +4 -11
- package/package.json +7 -4
- package/LICENSE +0 -201
- package/dist/features/tasks/view-tabs.js +0 -38
- package/dist/lib/supabase.js +0 -35
package/dist/tasks.css
CHANGED
|
@@ -1,41 +1,15 @@
|
|
|
1
|
-
/* Tasks screen —
|
|
2
|
-
*
|
|
1
|
+
/* Tasks screen — domain RESIDUE only (P3 inc-3).
|
|
2
|
+
* The kit primitives — .frame*, .ip-head / .ip-topline / .ip-title / .ip-body /
|
|
3
|
+
* .ip-desc / .ip-progress* / .ip-action-bar*, .dense-row*, .tk-badge,
|
|
4
|
+
* .tk-execmode — now come from the vendored @ikenga/tokens app-kit-css (injected
|
|
5
|
+
* before this file by app.js, in cascade order tokens -> app-kit -> this).
|
|
6
|
+
* What remains here is the Tasks-specific vocabulary the kit does not own:
|
|
7
|
+
* the filter bar, master/detail split shell, group dividers, the inspector
|
|
8
|
+
* field-grid / meta-row / timeline / source + evidence chips, the agenda +
|
|
9
|
+
* triage layouts, the (deferred) feedback states, and the local button.
|
|
3
10
|
*/
|
|
4
11
|
|
|
5
|
-
/* === Frame
|
|
6
|
-
.tk-frame {
|
|
7
|
-
border: 1px solid var(--border);
|
|
8
|
-
border-radius: var(--radius-lg);
|
|
9
|
-
background: var(--bg-surface);
|
|
10
|
-
overflow: hidden;
|
|
11
|
-
box-shadow: var(--shadow-2);
|
|
12
|
-
display: flex;
|
|
13
|
-
flex-direction: column;
|
|
14
|
-
min-height: 0;
|
|
15
|
-
}
|
|
16
|
-
.tk-frame-head {
|
|
17
|
-
display: flex;
|
|
18
|
-
align-items: flex-start;
|
|
19
|
-
justify-content: space-between;
|
|
20
|
-
gap: var(--space-4);
|
|
21
|
-
padding: var(--space-4) var(--space-5);
|
|
22
|
-
border-bottom: 1px solid var(--border-soft);
|
|
23
|
-
background: linear-gradient(180deg, var(--tint-bg-active, var(--bg-surface)) 0%, var(--bg-surface) 100%);
|
|
24
|
-
}
|
|
25
|
-
.tk-frame-title-wrap { display: flex; align-items: center; gap: var(--space-2); }
|
|
26
|
-
.tk-frame-title-mark { width: 18px; height: 18px; color: var(--tint-fg-active, var(--primary)); }
|
|
27
|
-
.tk-frame-title {
|
|
28
|
-
font-family: var(--font-display);
|
|
29
|
-
font-weight: 500;
|
|
30
|
-
font-size: var(--text-h3);
|
|
31
|
-
margin: 0;
|
|
32
|
-
color: var(--fg);
|
|
33
|
-
}
|
|
34
|
-
.tk-frame-sub {
|
|
35
|
-
margin-top: 2px;
|
|
36
|
-
font-size: var(--text-caption);
|
|
37
|
-
color: var(--fg-muted);
|
|
38
|
-
}
|
|
12
|
+
/* === Frame (residue: the auto-closed count chip) ============ */
|
|
39
13
|
.tk-frame-count {
|
|
40
14
|
font-family: var(--font-mono);
|
|
41
15
|
font-size: 12px;
|
|
@@ -205,75 +179,11 @@
|
|
|
205
179
|
gap: 6px;
|
|
206
180
|
}
|
|
207
181
|
|
|
208
|
-
/* === Task row
|
|
209
|
-
.
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
padding: var(--space-3) var(--space-3) var(--space-3) var(--space-4);
|
|
214
|
-
border-bottom: 1px solid var(--border-soft);
|
|
215
|
-
cursor: pointer;
|
|
216
|
-
position: relative;
|
|
217
|
-
background: transparent;
|
|
218
|
-
text-align: left;
|
|
219
|
-
width: 100%;
|
|
220
|
-
border-left: 0;
|
|
221
|
-
border-right: 0;
|
|
222
|
-
border-top: 0;
|
|
223
|
-
font: inherit;
|
|
224
|
-
color: inherit;
|
|
225
|
-
transition: background var(--motion-fast) var(--ease-calm);
|
|
226
|
-
}
|
|
227
|
-
.tk-row:hover { background: var(--bg-raised); }
|
|
228
|
-
.tk-row.is-on { background: var(--bg-raised); }
|
|
229
|
-
.tk-row.is-on::before {
|
|
230
|
-
content: '';
|
|
231
|
-
position: absolute;
|
|
232
|
-
left: 0;
|
|
233
|
-
top: 8px;
|
|
234
|
-
bottom: 8px;
|
|
235
|
-
width: 2px;
|
|
236
|
-
border-radius: 2px;
|
|
237
|
-
background: var(--tint-fg-active, var(--primary));
|
|
238
|
-
}
|
|
239
|
-
.tk-row .pri-dot {
|
|
240
|
-
width: 8px;
|
|
241
|
-
height: 8px;
|
|
242
|
-
border-radius: 50%;
|
|
243
|
-
margin-top: 5px;
|
|
244
|
-
background: var(--fg-faint);
|
|
245
|
-
flex-shrink: 0;
|
|
246
|
-
}
|
|
247
|
-
.tk-row .pri-dot.is-critical {
|
|
248
|
-
background: var(--danger);
|
|
249
|
-
box-shadow: 0 0 0 2px color-mix(in srgb, var(--danger) 20%, transparent);
|
|
250
|
-
}
|
|
251
|
-
.tk-row .pri-dot.is-high { background: var(--achievement); }
|
|
252
|
-
.tk-row .pri-dot.is-medium { background: var(--systemic); }
|
|
253
|
-
.tk-row .pri-dot.is-low { background: var(--fg-faint); }
|
|
254
|
-
.tk-row .body {
|
|
255
|
-
min-width: 0;
|
|
256
|
-
display: flex;
|
|
257
|
-
flex-direction: column;
|
|
258
|
-
gap: 4px;
|
|
259
|
-
}
|
|
260
|
-
.tk-row .title {
|
|
261
|
-
font-size: var(--text-body-sm);
|
|
262
|
-
color: var(--fg);
|
|
263
|
-
font-weight: 500;
|
|
264
|
-
line-height: 1.35;
|
|
265
|
-
overflow: hidden;
|
|
266
|
-
text-overflow: ellipsis;
|
|
267
|
-
display: -webkit-box;
|
|
268
|
-
-webkit-line-clamp: 2;
|
|
269
|
-
-webkit-box-orient: vertical;
|
|
270
|
-
}
|
|
271
|
-
.tk-row.is-completed .title {
|
|
272
|
-
color: var(--fg-muted);
|
|
273
|
-
text-decoration: line-through;
|
|
274
|
-
text-decoration-thickness: 1px;
|
|
275
|
-
}
|
|
276
|
-
.tk-row .meta {
|
|
182
|
+
/* === Task row (residue: the meta strip + category micro-label;
|
|
183
|
+
.dense-row / .dense-row-dot / -body / -title / -right / -due now kit-owned.
|
|
184
|
+
The kit's .dense-row-meta tightens the chip gap to 4px; Tasks keeps 6px,
|
|
185
|
+
so .meta stays a domain child here rather than adopting .dense-row-meta.) */
|
|
186
|
+
.dense-row--task .meta {
|
|
277
187
|
display: flex;
|
|
278
188
|
flex-wrap: wrap;
|
|
279
189
|
align-items: center;
|
|
@@ -283,7 +193,7 @@
|
|
|
283
193
|
color: var(--fg-faint);
|
|
284
194
|
letter-spacing: 0.04em;
|
|
285
195
|
}
|
|
286
|
-
.
|
|
196
|
+
.dense-row--task .meta .cat {
|
|
287
197
|
background: var(--bg-base);
|
|
288
198
|
border: 1px solid var(--border-soft);
|
|
289
199
|
color: var(--fg-muted);
|
|
@@ -291,62 +201,9 @@
|
|
|
291
201
|
border-radius: var(--radius-xs);
|
|
292
202
|
text-transform: lowercase;
|
|
293
203
|
}
|
|
294
|
-
.tk-row .right {
|
|
295
|
-
display: flex;
|
|
296
|
-
flex-direction: column;
|
|
297
|
-
align-items: flex-end;
|
|
298
|
-
gap: 4px;
|
|
299
|
-
flex-shrink: 0;
|
|
300
|
-
}
|
|
301
|
-
.tk-row .due {
|
|
302
|
-
font-family: var(--font-mono);
|
|
303
|
-
font-size: 10px;
|
|
304
|
-
color: var(--fg-muted);
|
|
305
|
-
letter-spacing: 0.04em;
|
|
306
|
-
white-space: nowrap;
|
|
307
|
-
}
|
|
308
|
-
.tk-row .due.is-overdue { color: var(--danger); font-weight: 500; }
|
|
309
|
-
.tk-row .due.is-today { color: var(--achievement); }
|
|
310
204
|
|
|
311
|
-
/* === Status badge
|
|
312
|
-
|
|
313
|
-
display: inline-flex;
|
|
314
|
-
align-items: center;
|
|
315
|
-
gap: 4px;
|
|
316
|
-
font-family: var(--font-mono);
|
|
317
|
-
font-size: 9.5px;
|
|
318
|
-
letter-spacing: 0.08em;
|
|
319
|
-
text-transform: uppercase;
|
|
320
|
-
padding: 2px 6px;
|
|
321
|
-
border-radius: var(--radius-xs);
|
|
322
|
-
border: 1px solid var(--border-soft);
|
|
323
|
-
color: var(--fg-muted);
|
|
324
|
-
background: var(--bg-base);
|
|
325
|
-
white-space: nowrap;
|
|
326
|
-
}
|
|
327
|
-
.tk-badge.is-pending { color: var(--fg-muted); }
|
|
328
|
-
.tk-badge.is-in_progress {
|
|
329
|
-
color: var(--live);
|
|
330
|
-
background: var(--live-soft);
|
|
331
|
-
border-color: color-mix(in srgb, var(--live) 30%, var(--border-soft));
|
|
332
|
-
}
|
|
333
|
-
.tk-badge.is-blocked {
|
|
334
|
-
color: var(--danger);
|
|
335
|
-
background: color-mix(in srgb, var(--danger) 12%, transparent);
|
|
336
|
-
border-color: color-mix(in srgb, var(--danger) 30%, var(--border-soft));
|
|
337
|
-
}
|
|
338
|
-
.tk-badge.is-completed {
|
|
339
|
-
color: var(--live);
|
|
340
|
-
background: var(--live-soft);
|
|
341
|
-
border-color: color-mix(in srgb, var(--live) 30%, var(--border-soft));
|
|
342
|
-
}
|
|
343
|
-
.tk-badge.is-cancelled { color: var(--fg-faint); }
|
|
344
|
-
.tk-badge .dot {
|
|
345
|
-
width: 5px;
|
|
346
|
-
height: 5px;
|
|
347
|
-
border-radius: 50%;
|
|
348
|
-
background: currentColor;
|
|
349
|
-
}
|
|
205
|
+
/* === Status badge — kit-owned (.tk-badge + states live in app-kit-css,
|
|
206
|
+
11-badge-tag-chip; byte-identical, so removed here to avoid a duplicate). */
|
|
350
207
|
|
|
351
208
|
/* === Auto-close badge ======================================= */
|
|
352
209
|
.tk-autoclose {
|
|
@@ -408,64 +265,20 @@
|
|
|
408
265
|
background: var(--agent);
|
|
409
266
|
}
|
|
410
267
|
|
|
411
|
-
/* === Exec mode pill
|
|
412
|
-
|
|
413
|
-
font-family: var(--font-mono);
|
|
414
|
-
font-size: 9px;
|
|
415
|
-
letter-spacing: 0.06em;
|
|
416
|
-
text-transform: uppercase;
|
|
417
|
-
color: var(--fg-faint);
|
|
418
|
-
border: 1px dashed var(--border-soft);
|
|
419
|
-
padding: 1px 5px;
|
|
420
|
-
border-radius: var(--radius-xs);
|
|
421
|
-
background: transparent;
|
|
422
|
-
}
|
|
423
|
-
.tk-execmode.is-autonomous {
|
|
424
|
-
color: var(--agent);
|
|
425
|
-
border-color: color-mix(in srgb, var(--agent) 30%, var(--border-soft));
|
|
426
|
-
}
|
|
427
|
-
.tk-execmode.is-approval_required {
|
|
428
|
-
color: var(--achievement);
|
|
429
|
-
border-color: color-mix(in srgb, var(--achievement) 35%, var(--border-soft));
|
|
430
|
-
}
|
|
431
|
-
.tk-execmode.is-report {
|
|
432
|
-
color: var(--systemic);
|
|
433
|
-
border-color: color-mix(in srgb, var(--systemic) 30%, var(--border-soft));
|
|
434
|
-
}
|
|
268
|
+
/* === Exec mode pill — kit-owned (.tk-execmode + states live in app-kit-css,
|
|
269
|
+
34-ux-mode-action-surfaces; byte-identical, removed here to avoid a dup). */
|
|
435
270
|
|
|
436
|
-
/* === Detail panel
|
|
437
|
-
.
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
}
|
|
442
|
-
.tk-det-topline {
|
|
443
|
-
display: flex;
|
|
444
|
-
align-items: center;
|
|
445
|
-
justify-content: space-between;
|
|
446
|
-
gap: var(--space-3);
|
|
447
|
-
margin-bottom: 8px;
|
|
448
|
-
font-family: var(--font-mono);
|
|
449
|
-
font-size: 10.5px;
|
|
450
|
-
color: var(--fg-faint);
|
|
451
|
-
letter-spacing: 0.04em;
|
|
452
|
-
}
|
|
453
|
-
.tk-det-topline .id {
|
|
271
|
+
/* === Detail panel (residue: the id chip + meta-row; .ip-head / .ip-topline /
|
|
272
|
+
.ip-topline-actions / .ip-title now kit-owned via inspector-detail).
|
|
273
|
+
The kit's .ip-topline-id pads 2px 8px; Tasks keeps the shipped 2px 6px,
|
|
274
|
+
so the id chip stays a domain child re-scoped under the kit .ip-topline. */
|
|
275
|
+
.ip-topline .id {
|
|
454
276
|
background: var(--bg-base);
|
|
455
277
|
border: 1px solid var(--border-soft);
|
|
456
278
|
padding: 2px 6px;
|
|
457
279
|
border-radius: var(--radius-xs);
|
|
458
280
|
color: var(--fg);
|
|
459
281
|
}
|
|
460
|
-
.tk-det-actions { display: flex; gap: 4px; align-items: center; }
|
|
461
|
-
.tk-det-title {
|
|
462
|
-
font-family: var(--font-display);
|
|
463
|
-
font-weight: 500;
|
|
464
|
-
font-size: var(--text-h3);
|
|
465
|
-
margin: 0;
|
|
466
|
-
color: var(--fg);
|
|
467
|
-
line-height: 1.25;
|
|
468
|
-
}
|
|
469
282
|
.tk-det-meta-row {
|
|
470
283
|
display: flex;
|
|
471
284
|
flex-wrap: wrap;
|
|
@@ -491,13 +304,6 @@
|
|
|
491
304
|
}
|
|
492
305
|
.tk-det-meta-row .due-text { color: var(--fg-muted); }
|
|
493
306
|
.tk-det-meta-row .due-text.is-overdue { color: var(--danger); }
|
|
494
|
-
.tk-det-body {
|
|
495
|
-
padding: var(--space-5);
|
|
496
|
-
display: flex;
|
|
497
|
-
flex-direction: column;
|
|
498
|
-
gap: var(--space-5);
|
|
499
|
-
flex: 1;
|
|
500
|
-
}
|
|
501
307
|
.tk-det-grid {
|
|
502
308
|
display: grid;
|
|
503
309
|
grid-template-columns: 110px 1fr;
|
|
@@ -561,34 +367,8 @@
|
|
|
561
367
|
background: transparent;
|
|
562
368
|
}
|
|
563
369
|
|
|
564
|
-
.
|
|
565
|
-
|
|
566
|
-
color: var(--fg-muted);
|
|
567
|
-
line-height: 1.6;
|
|
568
|
-
background: var(--bg-surface);
|
|
569
|
-
border: 1px solid var(--border-soft);
|
|
570
|
-
border-radius: var(--radius-md);
|
|
571
|
-
padding: var(--space-3) var(--space-4);
|
|
572
|
-
white-space: pre-wrap;
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
/* === Progress bar =========================================== */
|
|
576
|
-
.tk-progress {
|
|
577
|
-
flex: 1;
|
|
578
|
-
height: 6px;
|
|
579
|
-
background: var(--bg-sunken);
|
|
580
|
-
border-radius: 3px;
|
|
581
|
-
overflow: hidden;
|
|
582
|
-
border: 1px solid var(--border-soft);
|
|
583
|
-
min-width: 120px;
|
|
584
|
-
}
|
|
585
|
-
.tk-progress > span {
|
|
586
|
-
display: block;
|
|
587
|
-
height: 100%;
|
|
588
|
-
background: var(--live);
|
|
589
|
-
border-radius: 3px;
|
|
590
|
-
transition: width var(--motion-fast) var(--ease-calm);
|
|
591
|
-
}
|
|
370
|
+
/* === Description + progress bar — kit-owned (.ip-desc and .ip-progress /
|
|
371
|
+
.ip-progress-fill live in app-kit-css, inspector-detail). */
|
|
592
372
|
|
|
593
373
|
/* === Evidence card ========================================== */
|
|
594
374
|
.tk-evidence {
|
|
@@ -754,19 +534,11 @@
|
|
|
754
534
|
}
|
|
755
535
|
.tk-tl-item .actor.is-agent { color: var(--agent); }
|
|
756
536
|
|
|
757
|
-
/* === Action footer
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
background: var(--bg-sunken);
|
|
761
|
-
padding: var(--space-3) var(--space-5);
|
|
762
|
-
display: flex;
|
|
763
|
-
align-items: center;
|
|
764
|
-
gap: var(--space-2);
|
|
765
|
-
margin-top: auto;
|
|
766
|
-
}
|
|
767
|
-
.tk-action-bar .spacer { flex: 1; }
|
|
537
|
+
/* === Action footer — kit-owned (.ip-action-bar / .ip-action-bar-spacer live
|
|
538
|
+
in app-kit-css, inspector-detail). Only rendered for density != full,
|
|
539
|
+
which the shipped pane never uses. */
|
|
768
540
|
|
|
769
|
-
/* === Empty state in detail
|
|
541
|
+
/* === Empty state in detail (residue; feedback-state migration deferred) ==== */
|
|
770
542
|
.tk-empty {
|
|
771
543
|
flex: 1;
|
|
772
544
|
display: grid;
|
|
@@ -778,60 +550,17 @@
|
|
|
778
550
|
text-transform: uppercase;
|
|
779
551
|
}
|
|
780
552
|
|
|
781
|
-
/* === Density variants
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
.tk-detail-pane.is-side .tk-det-head { padding: var(--space-3); }
|
|
787
|
-
.tk-detail-pane.is-side .tk-det-title { font-size: 13.5px; line-height: 1.35; }
|
|
788
|
-
.tk-detail-pane.is-side .tk-det-body { padding: var(--space-3); gap: var(--space-3); }
|
|
789
|
-
.tk-detail-pane.is-side .tk-det-grid { display: none; }
|
|
790
|
-
.tk-detail-pane.is-side .tk-section-label { margin-bottom: 4px; }
|
|
553
|
+
/* === Density variants ($taskId standalone) + in-pane view switcher: REMOVED.
|
|
554
|
+
The density variants are dead (the shipped pane is always density="full");
|
|
555
|
+
the .ip-tabs/.ip-tab switcher was dropped pre-ship (views live in the
|
|
556
|
+
shell side-menu). The kit's .tabs/.tab part covers underline tabs if a
|
|
557
|
+
future view needs them. */
|
|
791
558
|
|
|
792
|
-
/*
|
|
793
|
-
.
|
|
794
|
-
|
|
795
|
-
align-items: center;
|
|
796
|
-
gap: 0;
|
|
797
|
-
padding: 0 var(--space-3);
|
|
798
|
-
height: var(--tab-h, 38px);
|
|
799
|
-
border-bottom: 1px solid var(--border-soft);
|
|
800
|
-
background: var(--bg-sunken);
|
|
801
|
-
}
|
|
802
|
-
.ip-tab {
|
|
803
|
-
height: var(--tab-h, 38px);
|
|
804
|
-
padding: 0 var(--space-3);
|
|
805
|
-
display: inline-flex;
|
|
806
|
-
align-items: center;
|
|
807
|
-
gap: 6px;
|
|
808
|
-
font-family: var(--font-body);
|
|
809
|
-
font-size: var(--text-body-sm);
|
|
810
|
-
color: var(--fg-faint);
|
|
811
|
-
border: 0;
|
|
812
|
-
background: transparent;
|
|
813
|
-
cursor: pointer;
|
|
814
|
-
border-bottom: 2px solid transparent;
|
|
815
|
-
margin-bottom: -1px;
|
|
816
|
-
}
|
|
817
|
-
.ip-tab svg { width: 13px; height: 13px; opacity: 0.8; }
|
|
818
|
-
.ip-tab:hover { color: var(--fg-muted); }
|
|
819
|
-
.ip-tab.is-on { color: var(--fg); border-bottom-color: var(--tint-fg-active, var(--primary)); }
|
|
820
|
-
.ip-tab.is-on svg { opacity: 1; color: var(--tint-fg-active, var(--primary)); }
|
|
821
|
-
.ip-tab:focus-visible,
|
|
559
|
+
/* Keyboard focus ring for the residue interactive elements. The kit's
|
|
560
|
+
.dense-row:focus-visible already covers task rows; the toggle + group head
|
|
561
|
+
are domain residue, so keep their ring here. */
|
|
822
562
|
.tk-toggle:focus-visible,
|
|
823
|
-
.tk-group-head:focus-visible
|
|
824
|
-
.tk-row:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }
|
|
825
|
-
.ip-tab-badge {
|
|
826
|
-
font-family: var(--font-mono);
|
|
827
|
-
font-size: 9.5px;
|
|
828
|
-
line-height: 1;
|
|
829
|
-
color: var(--achievement);
|
|
830
|
-
background: var(--achievement-soft);
|
|
831
|
-
border: 1px solid color-mix(in srgb, var(--achievement) 30%, var(--border-soft));
|
|
832
|
-
border-radius: var(--radius-pill, 999px);
|
|
833
|
-
padding: 2px 5px;
|
|
834
|
-
}
|
|
563
|
+
.tk-group-head:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }
|
|
835
564
|
|
|
836
565
|
/* === Agenda / Today (D-2) =================================== */
|
|
837
566
|
/* AgendaView root — rendered directly inside .tk-frame (which is overflow:hidden),
|
|
@@ -946,14 +675,13 @@
|
|
|
946
675
|
* chrome around the locked .tk-* / .ag-* / .tr-* visuals. With no Tailwind in
|
|
947
676
|
* the no-build pkg, those are reproduced here as a tiny, scoped utility set
|
|
948
677
|
* (named after their Tailwind origin so the htm transcription reads 1:1).
|
|
949
|
-
* Everything load-bearing is still a .tk
|
|
678
|
+
* Everything load-bearing is still a .tk-, .ag-, .tr- rule above. */
|
|
950
679
|
|
|
951
680
|
/* Root layout shell (was: `flex h-full flex-col p-5`) */
|
|
952
681
|
.tk-screen {
|
|
953
682
|
display: flex;
|
|
954
683
|
height: 100%;
|
|
955
684
|
flex-direction: column;
|
|
956
|
-
padding: var(--space-5);
|
|
957
685
|
}
|
|
958
686
|
|
|
959
687
|
/* Loading / error / empty inline states (was Tailwind utility soup) */
|
package/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "com.ikenga.tasks",
|
|
3
3
|
"name": "Tasks",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.0",
|
|
5
5
|
"ikenga_api": "1",
|
|
6
6
|
"kind": "embedded",
|
|
7
7
|
"author": { "name": "Royalti", "key": "royalti" },
|
|
@@ -27,27 +27,20 @@
|
|
|
27
27
|
"script-src": ["'self'", "'unsafe-inline'", "https://esm.sh"],
|
|
28
28
|
"style-src": ["'self'", "'unsafe-inline'", "https://esm.sh"],
|
|
29
29
|
"font-src": ["'self'", "https://esm.sh", "data:"],
|
|
30
|
-
"connect-src": [
|
|
31
|
-
"'self'",
|
|
32
|
-
"https://esm.sh",
|
|
33
|
-
"https://*.supabase.co",
|
|
34
|
-
"wss://*.supabase.co"
|
|
35
|
-
]
|
|
30
|
+
"connect-src": ["'self'", "https://esm.sh"]
|
|
36
31
|
}
|
|
37
32
|
},
|
|
38
33
|
|
|
39
34
|
"capabilities": {
|
|
40
|
-
"sqlite": { "db": "ikenga.local" }
|
|
41
|
-
"supabase": { "required": true }
|
|
35
|
+
"sqlite": { "db": "ikenga.local" }
|
|
42
36
|
},
|
|
43
37
|
|
|
44
38
|
"permissions": {
|
|
45
39
|
"shell.execute": [],
|
|
46
40
|
"fs.read": [],
|
|
47
41
|
"fs.write": [],
|
|
48
|
-
"net": ["https://esm.sh"
|
|
42
|
+
"net": ["https://esm.sh"],
|
|
49
43
|
"sqlite.tables": ["tasks"],
|
|
50
|
-
"supabase.tables": ["tasks", "task_comments"],
|
|
51
44
|
"vault.keys": []
|
|
52
45
|
}
|
|
53
46
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ikenga/pkg-tasks",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Tasks — List, Agenda, Triage over the production tasks schema. Multi-file iframe pkg
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"description": "Tasks — List, Agenda, Triage over the production tasks schema. Multi-file iframe pkg; deterministic CSS vendoring build.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -18,7 +18,10 @@
|
|
|
18
18
|
"README.md"
|
|
19
19
|
],
|
|
20
20
|
"scripts": {
|
|
21
|
-
"build": "
|
|
21
|
+
"build": "node scripts/build.mjs",
|
|
22
22
|
"typecheck": "tsc -p tsconfig.dev.json"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@ikenga/tokens": "^0.3.0"
|
|
23
26
|
}
|
|
24
|
-
}
|
|
27
|
+
}
|