@skillcdn/console 0.1.9 → 0.1.11

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 (162) hide show
  1. package/README.md +6 -6
  2. package/dist/api.d.ts +6 -5
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +5 -4
  5. package/dist/api.js.map +1 -1
  6. package/dist/cli/cli.d.ts.map +1 -1
  7. package/dist/cli/cli.js +303 -18
  8. package/dist/cli/cli.js.map +1 -1
  9. package/dist/cli/format.d.ts +11 -1
  10. package/dist/cli/format.d.ts.map +1 -1
  11. package/dist/cli/format.js +87 -6
  12. package/dist/cli/format.js.map +1 -1
  13. package/dist/cli/help.d.ts.map +1 -1
  14. package/dist/cli/help.js +70 -14
  15. package/dist/cli/help.js.map +1 -1
  16. package/dist/client.d.ts +44 -8
  17. package/dist/client.d.ts.map +1 -1
  18. package/dist/client.js +32 -4
  19. package/dist/client.js.map +1 -1
  20. package/dist/components/board.d.ts +24 -1
  21. package/dist/components/board.d.ts.map +1 -1
  22. package/dist/components/board.js +66 -5
  23. package/dist/components/board.js.map +1 -1
  24. package/dist/components/calendar.d.ts +54 -0
  25. package/dist/components/calendar.d.ts.map +1 -0
  26. package/dist/components/calendar.js +156 -0
  27. package/dist/components/calendar.js.map +1 -0
  28. package/dist/components/categories.d.ts +13 -0
  29. package/dist/components/categories.d.ts.map +1 -0
  30. package/dist/components/categories.js +52 -0
  31. package/dist/components/categories.js.map +1 -0
  32. package/dist/components/decision-list.d.ts +10 -0
  33. package/dist/components/decision-list.d.ts.map +1 -1
  34. package/dist/components/decision-list.js +16 -1
  35. package/dist/components/decision-list.js.map +1 -1
  36. package/dist/components/event-feed.d.ts.map +1 -1
  37. package/dist/components/event-feed.js +23 -7
  38. package/dist/components/event-feed.js.map +1 -1
  39. package/dist/components/goals.d.ts +35 -0
  40. package/dist/components/goals.d.ts.map +1 -0
  41. package/dist/components/goals.js +45 -0
  42. package/dist/components/goals.js.map +1 -0
  43. package/dist/components/paged.d.ts +14 -0
  44. package/dist/components/paged.d.ts.map +1 -0
  45. package/dist/components/paged.js +28 -0
  46. package/dist/components/paged.js.map +1 -0
  47. package/dist/components/projects.d.ts +22 -2
  48. package/dist/components/projects.d.ts.map +1 -1
  49. package/dist/components/projects.js +35 -7
  50. package/dist/components/projects.js.map +1 -1
  51. package/dist/components/runs.d.ts.map +1 -1
  52. package/dist/components/runs.js +2 -2
  53. package/dist/components/runs.js.map +1 -1
  54. package/dist/components/shell.d.ts +2 -1
  55. package/dist/components/shell.d.ts.map +1 -1
  56. package/dist/components/shell.js +1 -1
  57. package/dist/components/shell.js.map +1 -1
  58. package/dist/components/task-form.d.ts +5 -1
  59. package/dist/components/task-form.d.ts.map +1 -1
  60. package/dist/components/task-form.js +13 -1
  61. package/dist/components/task-form.js.map +1 -1
  62. package/dist/components/task-list.d.ts +16 -0
  63. package/dist/components/task-list.d.ts.map +1 -0
  64. package/dist/components/task-list.js +16 -0
  65. package/dist/components/task-list.js.map +1 -0
  66. package/dist/components/task-view.d.ts +9 -1
  67. package/dist/components/task-view.d.ts.map +1 -1
  68. package/dist/components/task-view.js +10 -4
  69. package/dist/components/task-view.js.map +1 -1
  70. package/dist/components/ui.d.ts +30 -1
  71. package/dist/components/ui.d.ts.map +1 -1
  72. package/dist/components/ui.js +60 -0
  73. package/dist/components/ui.js.map +1 -1
  74. package/dist/components/work.d.ts +10 -0
  75. package/dist/components/work.d.ts.map +1 -0
  76. package/dist/components/work.js +33 -0
  77. package/dist/components/work.js.map +1 -0
  78. package/dist/console.css +658 -0
  79. package/dist/console.d.ts +8 -0
  80. package/dist/console.d.ts.map +1 -1
  81. package/dist/console.js +145 -13
  82. package/dist/console.js.map +1 -1
  83. package/dist/data.d.ts +19 -3
  84. package/dist/data.d.ts.map +1 -1
  85. package/dist/data.js +51 -4
  86. package/dist/data.js.map +1 -1
  87. package/dist/dates.d.ts +39 -0
  88. package/dist/dates.d.ts.map +1 -0
  89. package/dist/dates.js +120 -0
  90. package/dist/dates.js.map +1 -0
  91. package/dist/i18n/en.d.ts +172 -5
  92. package/dist/i18n/en.d.ts.map +1 -1
  93. package/dist/i18n/en.js +183 -6
  94. package/dist/i18n/en.js.map +1 -1
  95. package/dist/i18n/ko.d.ts.map +1 -1
  96. package/dist/i18n/ko.js +178 -6
  97. package/dist/i18n/ko.js.map +1 -1
  98. package/dist/index.d.ts +12 -5
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +12 -5
  101. package/dist/index.js.map +1 -1
  102. package/dist/limits.d.ts +11 -0
  103. package/dist/limits.d.ts.map +1 -1
  104. package/dist/limits.js +11 -0
  105. package/dist/limits.js.map +1 -1
  106. package/dist/marks.d.ts +12 -0
  107. package/dist/marks.d.ts.map +1 -0
  108. package/dist/marks.js +31 -0
  109. package/dist/marks.js.map +1 -0
  110. package/dist/router.d.ts +51 -1
  111. package/dist/router.d.ts.map +1 -1
  112. package/dist/router.js +80 -1
  113. package/dist/router.js.map +1 -1
  114. package/dist/routes.d.ts +14 -1
  115. package/dist/routes.d.ts.map +1 -1
  116. package/dist/routes.js +17 -0
  117. package/dist/routes.js.map +1 -1
  118. package/dist/schemas.d.ts +489 -3
  119. package/dist/schemas.d.ts.map +1 -1
  120. package/dist/schemas.js +150 -9
  121. package/dist/schemas.js.map +1 -1
  122. package/dist/vocabulary.d.ts +21 -1
  123. package/dist/vocabulary.d.ts.map +1 -1
  124. package/dist/vocabulary.js +31 -0
  125. package/dist/vocabulary.js.map +1 -1
  126. package/docs/specs/cli.md +17 -8
  127. package/docs/specs/rest.md +48 -17
  128. package/package.json +1 -1
  129. package/skills/working-the-board/SKILL.md +7 -6
  130. package/src/api.ts +42 -0
  131. package/src/cli/cli.ts +362 -18
  132. package/src/cli/format.ts +96 -6
  133. package/src/cli/help.ts +77 -15
  134. package/src/client.ts +98 -7
  135. package/src/components/board.tsx +173 -13
  136. package/src/components/calendar.tsx +367 -0
  137. package/src/components/categories.tsx +209 -0
  138. package/src/components/decision-list.tsx +67 -5
  139. package/src/components/event-feed.tsx +46 -27
  140. package/src/components/goals.tsx +264 -0
  141. package/src/components/paged.tsx +39 -0
  142. package/src/components/projects.tsx +128 -10
  143. package/src/components/runs.tsx +7 -1
  144. package/src/components/shell.tsx +5 -2
  145. package/src/components/task-form.tsx +78 -1
  146. package/src/components/task-list.tsx +64 -0
  147. package/src/components/task-view.tsx +75 -4
  148. package/src/components/ui.tsx +116 -1
  149. package/src/components/work.tsx +93 -0
  150. package/src/console.tsx +376 -9
  151. package/src/data.ts +83 -12
  152. package/src/dates.ts +143 -0
  153. package/src/i18n/en.ts +193 -6
  154. package/src/i18n/ko.ts +184 -6
  155. package/src/index.ts +62 -1
  156. package/src/limits.ts +11 -0
  157. package/src/marks.ts +40 -0
  158. package/src/router.ts +131 -6
  159. package/src/routes.ts +19 -0
  160. package/src/schemas.ts +187 -7
  161. package/src/styles/console.css +658 -0
  162. package/src/vocabulary.ts +43 -0
package/dist/console.css CHANGED
@@ -1197,6 +1197,7 @@ table {
1197
1197
  flex: 1 1 0;
1198
1198
  grid-auto-flow: column;
1199
1199
  grid-auto-columns: minmax(var(--sc-column-width), 1fr);
1200
+ grid-template-rows: minmax(0, 1fr);
1200
1201
  gap: var(--sc-space-3);
1201
1202
  min-height: 24rem;
1202
1203
  overflow-x: auto;
@@ -1209,6 +1210,8 @@ table {
1209
1210
  display: flex;
1210
1211
  flex-direction: column;
1211
1212
  min-height: 0;
1213
+ /* The body scrolls; the column clips, so that nothing of it reaches the board's own scrolling. */
1214
+ overflow: hidden;
1212
1215
  border-radius: var(--sc-radius-xl);
1213
1216
  scroll-snap-align: start;
1214
1217
  }
@@ -2351,6 +2354,633 @@ table {
2351
2354
  }
2352
2355
  }
2353
2356
 
2357
+ /* The schedule, the roadmap and the categories (ADR-0019). */
2358
+
2359
+ /* The colours a category may be shown in: names, painted here and nowhere else. Each is a
2360
+ dark fill with a light line and text, so that a badge reads on the glass. */
2361
+ .sc-category-gray {
2362
+ --sc-category-line: #aeb7c4;
2363
+ --sc-category-fill: #2a3240;
2364
+ }
2365
+
2366
+ .sc-category-blue {
2367
+ --sc-category-line: #8fb6ff;
2368
+ --sc-category-fill: #1a2d52;
2369
+ }
2370
+
2371
+ .sc-category-green {
2372
+ --sc-category-line: #6fd3a0;
2373
+ --sc-category-fill: #143326;
2374
+ }
2375
+
2376
+ .sc-category-orange {
2377
+ --sc-category-line: #ffb77a;
2378
+ --sc-category-fill: #3a2414;
2379
+ }
2380
+
2381
+ .sc-category-pink {
2382
+ --sc-category-line: #ff9ac2;
2383
+ --sc-category-fill: #3b1a2b;
2384
+ }
2385
+
2386
+ .sc-category-purple {
2387
+ --sc-category-line: #c4a4ff;
2388
+ --sc-category-fill: #2b1f4a;
2389
+ }
2390
+
2391
+ .sc-category-teal {
2392
+ --sc-category-line: #7ad7d4;
2393
+ --sc-category-fill: #10343a;
2394
+ }
2395
+
2396
+ .sc-category-yellow {
2397
+ --sc-category-line: #f0d36a;
2398
+ --sc-category-fill: #3a3012;
2399
+ }
2400
+
2401
+ .sc-badge-category {
2402
+ border-color: color-mix(in srgb, var(--sc-category-line) 45%, transparent);
2403
+ background: var(--sc-category-fill);
2404
+ color: var(--sc-category-line);
2405
+ }
2406
+
2407
+ .sc-category-swatch,
2408
+ .sc-calendar-dot {
2409
+ display: inline-block;
2410
+ flex: none;
2411
+ width: 0.625rem;
2412
+ height: 0.625rem;
2413
+ border-radius: 50%;
2414
+ background: var(--sc-category-line, var(--sc-color-text-faint));
2415
+ }
2416
+
2417
+ /* The filters above the board: a quiet row of controls, as wide as its words. */
2418
+ .sc-filters {
2419
+ display: flex;
2420
+ flex-wrap: wrap;
2421
+ align-items: center;
2422
+ gap: var(--sc-space-2) var(--sc-space-3);
2423
+ margin-bottom: var(--sc-space-3);
2424
+ }
2425
+
2426
+ .sc-filters .sc-field-inline {
2427
+ flex: none;
2428
+ }
2429
+
2430
+ .sc-filters .sc-input {
2431
+ min-height: 2rem;
2432
+ padding-block: 0;
2433
+ font-size: var(--sc-text-sm);
2434
+ }
2435
+
2436
+ .sc-filters-count {
2437
+ font-size: var(--sc-text-sm);
2438
+ }
2439
+
2440
+ /* Tasks as rows, where the columns are not the point. */
2441
+ .sc-task-rows {
2442
+ display: grid;
2443
+ gap: var(--sc-space-2);
2444
+ margin: 0;
2445
+ padding: 0;
2446
+ list-style: none;
2447
+ }
2448
+
2449
+ .sc-task-row {
2450
+ display: flex;
2451
+ flex-wrap: wrap;
2452
+ align-items: center;
2453
+ gap: var(--sc-space-2) var(--sc-space-3);
2454
+ padding: var(--sc-space-2) var(--sc-space-3);
2455
+ border: var(--sc-border);
2456
+ border-radius: var(--sc-radius-md);
2457
+ background: var(--sc-color-sheet);
2458
+ font-size: var(--sc-text-sm);
2459
+ }
2460
+
2461
+ .sc-task-row-title {
2462
+ flex: 1 1 14rem;
2463
+ min-width: 0;
2464
+ color: var(--sc-color-text);
2465
+ font-weight: var(--sc-weight-medium);
2466
+ text-decoration: none;
2467
+ overflow-wrap: anywhere;
2468
+ }
2469
+
2470
+ .sc-task-row-title:hover {
2471
+ color: var(--sc-color-accent);
2472
+ }
2473
+
2474
+ .sc-task-row-project {
2475
+ color: var(--sc-color-text-faint);
2476
+ font-size: var(--sc-text-xs);
2477
+ }
2478
+
2479
+ .sc-task-row-meta {
2480
+ display: flex;
2481
+ flex-wrap: wrap;
2482
+ align-items: center;
2483
+ gap: var(--sc-space-1);
2484
+ margin-left: auto;
2485
+ }
2486
+
2487
+ /* The calendar: the month as a table, a cell a day, the tasks due in it one line each. */
2488
+ .sc-calendar {
2489
+ display: grid;
2490
+ gap: var(--sc-space-3);
2491
+ }
2492
+
2493
+ .sc-calendar-head {
2494
+ display: flex;
2495
+ flex-wrap: wrap;
2496
+ align-items: center;
2497
+ justify-content: space-between;
2498
+ gap: var(--sc-space-2);
2499
+ }
2500
+
2501
+ .sc-calendar-month {
2502
+ font-size: var(--sc-text-lg);
2503
+ }
2504
+
2505
+ .sc-calendar-nav {
2506
+ display: flex;
2507
+ gap: var(--sc-space-1);
2508
+ }
2509
+
2510
+ .sc-calendar-grid {
2511
+ width: 100%;
2512
+ border-collapse: separate;
2513
+ border-spacing: 0.25rem;
2514
+ table-layout: fixed;
2515
+ }
2516
+
2517
+ .sc-calendar-grid th {
2518
+ padding: var(--sc-space-1);
2519
+ color: var(--sc-color-text-faint);
2520
+ font-size: var(--sc-text-xs);
2521
+ font-weight: var(--sc-weight-medium);
2522
+ letter-spacing: 0.04em;
2523
+ text-align: left;
2524
+ text-transform: uppercase;
2525
+ }
2526
+
2527
+ .sc-calendar-cell {
2528
+ height: 7rem;
2529
+ padding: var(--sc-space-1) var(--sc-space-2);
2530
+ border: var(--sc-border);
2531
+ border-radius: var(--sc-radius-md);
2532
+ background: var(--sc-color-sheet);
2533
+ vertical-align: top;
2534
+ }
2535
+
2536
+ .sc-calendar-cell-outside {
2537
+ background: transparent;
2538
+ color: var(--sc-color-text-faint);
2539
+ }
2540
+
2541
+ .sc-calendar-cell-today {
2542
+ border-color: var(--sc-color-accent);
2543
+ box-shadow: inset 0 0 0 1px var(--sc-color-accent);
2544
+ }
2545
+
2546
+ .sc-calendar-day {
2547
+ display: block;
2548
+ margin-bottom: var(--sc-space-1);
2549
+ font-size: var(--sc-text-xs);
2550
+ font-weight: var(--sc-weight-medium);
2551
+ }
2552
+
2553
+ .sc-calendar-cell-today .sc-calendar-day {
2554
+ color: var(--sc-color-accent);
2555
+ }
2556
+
2557
+ .sc-calendar-task {
2558
+ display: flex;
2559
+ align-items: center;
2560
+ gap: var(--sc-space-1);
2561
+ margin-top: 2px;
2562
+ padding: 1px var(--sc-space-1);
2563
+ border-radius: var(--sc-radius-sm);
2564
+ color: var(--sc-color-text);
2565
+ font-size: var(--sc-text-xs);
2566
+ line-height: 1.4;
2567
+ text-decoration: none;
2568
+ }
2569
+
2570
+ .sc-calendar-task:hover {
2571
+ background: var(--sc-color-sheet-hover);
2572
+ color: var(--sc-color-text);
2573
+ }
2574
+
2575
+ .sc-calendar-task-title {
2576
+ overflow: hidden;
2577
+ text-overflow: ellipsis;
2578
+ white-space: nowrap;
2579
+ }
2580
+
2581
+ .sc-calendar-over {
2582
+ color: var(--sc-color-text-faint);
2583
+ text-decoration: line-through;
2584
+ }
2585
+
2586
+ .sc-calendar-late {
2587
+ color: var(--sc-color-danger);
2588
+ }
2589
+
2590
+ /* A task planned across days lies across them: a bar in a lane of its own, in its category's
2591
+ colour, reaching over the gap between the cells so that it reads as one. */
2592
+ .sc-calendar-lane,
2593
+ .sc-calendar-bar {
2594
+ display: flex;
2595
+ align-items: center;
2596
+ height: 1.125rem;
2597
+ margin-top: 2px;
2598
+ }
2599
+
2600
+ .sc-calendar-bar {
2601
+ margin-inline: calc(-1 * var(--sc-space-2) - 0.125rem - 1px);
2602
+ padding-inline: var(--sc-space-2);
2603
+ border-block: 1px solid color-mix(in srgb, var(--sc-category-line) 45%, transparent);
2604
+ background: var(--sc-category-fill);
2605
+ color: var(--sc-category-line);
2606
+ font-size: var(--sc-text-xs);
2607
+ line-height: 1;
2608
+ text-decoration: none;
2609
+ overflow: hidden;
2610
+ white-space: nowrap;
2611
+ }
2612
+
2613
+ .sc-calendar-bar:hover {
2614
+ filter: brightness(1.15);
2615
+ }
2616
+
2617
+ .sc-calendar-bar-begins {
2618
+ margin-left: 0;
2619
+ border-left: 1px solid color-mix(in srgb, var(--sc-category-line) 45%, transparent);
2620
+ border-start-start-radius: var(--sc-radius-full);
2621
+ border-end-start-radius: var(--sc-radius-full);
2622
+ }
2623
+
2624
+ .sc-calendar-bar-ends {
2625
+ margin-right: 0;
2626
+ border-right: 1px solid color-mix(in srgb, var(--sc-category-line) 45%, transparent);
2627
+ border-start-end-radius: var(--sc-radius-full);
2628
+ border-end-end-radius: var(--sc-radius-full);
2629
+ }
2630
+
2631
+ .sc-calendar-bar.sc-calendar-late {
2632
+ border-color: color-mix(in srgb, var(--sc-color-danger) 70%, transparent);
2633
+ color: var(--sc-color-danger);
2634
+ }
2635
+
2636
+ .sc-calendar-bar.sc-calendar-over {
2637
+ opacity: 0.55;
2638
+ }
2639
+
2640
+ .sc-calendar-legend {
2641
+ display: flex;
2642
+ flex-wrap: wrap;
2643
+ gap: var(--sc-space-1) var(--sc-space-4);
2644
+ margin: 0;
2645
+ color: var(--sc-color-text-muted);
2646
+ font-size: var(--sc-text-xs);
2647
+ }
2648
+
2649
+ .sc-calendar-legend div {
2650
+ display: flex;
2651
+ align-items: center;
2652
+ gap: var(--sc-space-1);
2653
+ }
2654
+
2655
+ .sc-calendar-legend dt {
2656
+ display: flex;
2657
+ align-items: center;
2658
+ }
2659
+
2660
+ .sc-calendar-legend dd {
2661
+ margin: 0;
2662
+ }
2663
+
2664
+ .sc-calendar-task-start {
2665
+ color: var(--sc-color-text-muted);
2666
+ }
2667
+
2668
+ .sc-calendar-task-start::before {
2669
+ content: "\203A";
2670
+ color: var(--sc-color-text-faint);
2671
+ }
2672
+
2673
+ /* The button under a list shown a page at a time. */
2674
+ .sc-show-more {
2675
+ margin-top: var(--sc-space-3);
2676
+ }
2677
+
2678
+ /* A project's mark: its symbol on its colour. */
2679
+ .sc-mark {
2680
+ display: inline-flex;
2681
+ flex: none;
2682
+ align-items: center;
2683
+ justify-content: center;
2684
+ border-radius: var(--sc-radius-sm);
2685
+ background: var(--sc-category-fill);
2686
+ color: var(--sc-category-line);
2687
+ font-weight: var(--sc-weight-bold);
2688
+ line-height: 1;
2689
+ vertical-align: middle;
2690
+ }
2691
+
2692
+ .sc-mark-sm {
2693
+ width: 1.125rem;
2694
+ height: 1.125rem;
2695
+ margin-right: var(--sc-space-1);
2696
+ font-size: 0.625rem;
2697
+ }
2698
+
2699
+ .sc-mark-md {
2700
+ width: 2rem;
2701
+ height: 2rem;
2702
+ border-radius: var(--sc-radius-md);
2703
+ font-size: var(--sc-text-sm);
2704
+ }
2705
+
2706
+ .sc-mark-lg {
2707
+ width: 3rem;
2708
+ height: 3rem;
2709
+ border-radius: var(--sc-radius-lg);
2710
+ font-size: var(--sc-text-xl);
2711
+ }
2712
+
2713
+ .sc-mark-row {
2714
+ align-items: end;
2715
+ }
2716
+
2717
+ /* A project's own image, in place of the symbol, filling the mark. */
2718
+ .sc-mark-pictured {
2719
+ padding: 0;
2720
+ overflow: hidden;
2721
+ background: var(--sc-color-bg-inset);
2722
+ }
2723
+
2724
+ .sc-mark-image {
2725
+ display: block;
2726
+ width: 100%;
2727
+ height: 100%;
2728
+ object-fit: cover;
2729
+ }
2730
+
2731
+ .sc-input-file {
2732
+ padding-block: calc(var(--sc-space-2) - 2px);
2733
+ font-size: var(--sc-text-sm);
2734
+ }
2735
+
2736
+ .sc-calendar-below {
2737
+ display: grid;
2738
+ align-items: start;
2739
+ gap: var(--sc-space-5);
2740
+ margin-top: var(--sc-space-5);
2741
+ }
2742
+
2743
+ @media (min-width: 64rem) {
2744
+ .sc-calendar-below {
2745
+ grid-template-columns: 1fr 1fr;
2746
+ }
2747
+ }
2748
+
2749
+ /* The record of the decisions: a row each. */
2750
+ .sc-decision-log {
2751
+ display: grid;
2752
+ gap: var(--sc-space-2);
2753
+ margin: 0;
2754
+ padding: 0;
2755
+ list-style: none;
2756
+ }
2757
+
2758
+ .sc-decision-row {
2759
+ display: grid;
2760
+ grid-template-columns: minmax(0, 1fr);
2761
+ gap: var(--sc-space-1) var(--sc-space-3);
2762
+ padding: var(--sc-space-2) var(--sc-space-3);
2763
+ border: var(--sc-border);
2764
+ border-radius: var(--sc-radius-md);
2765
+ background: var(--sc-color-sheet);
2766
+ font-size: var(--sc-text-sm);
2767
+ }
2768
+
2769
+ @media (min-width: 40rem) {
2770
+ .sc-decision-row {
2771
+ grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) auto;
2772
+ align-items: center;
2773
+ }
2774
+ }
2775
+
2776
+ .sc-decision-row-question {
2777
+ overflow-wrap: anywhere;
2778
+ }
2779
+
2780
+ .sc-decision-row-question a {
2781
+ color: var(--sc-color-text);
2782
+ text-decoration: none;
2783
+ }
2784
+
2785
+ .sc-decision-row-question a:hover {
2786
+ color: var(--sc-color-accent);
2787
+ }
2788
+
2789
+ .sc-decision-row-answer {
2790
+ color: var(--sc-color-success);
2791
+ font-weight: var(--sc-weight-medium);
2792
+ overflow-wrap: anywhere;
2793
+ }
2794
+
2795
+ .sc-decision-row-meta {
2796
+ display: flex;
2797
+ flex-wrap: wrap;
2798
+ align-items: center;
2799
+ gap: var(--sc-space-2);
2800
+ color: var(--sc-color-text-muted);
2801
+ }
2802
+
2803
+ /* Who has what: a small table, the late numbers in the danger colour. */
2804
+ .sc-workload {
2805
+ width: 100%;
2806
+ max-width: var(--sc-width-prose);
2807
+ border-collapse: collapse;
2808
+ font-size: var(--sc-text-sm);
2809
+ }
2810
+
2811
+ .sc-workload th,
2812
+ .sc-workload td {
2813
+ padding: var(--sc-space-2) var(--sc-space-3);
2814
+ border-bottom: var(--sc-border);
2815
+ text-align: left;
2816
+ }
2817
+
2818
+ .sc-workload thead th {
2819
+ color: var(--sc-color-text-faint);
2820
+ font-size: var(--sc-text-xs);
2821
+ font-weight: var(--sc-weight-medium);
2822
+ letter-spacing: 0.04em;
2823
+ text-transform: uppercase;
2824
+ }
2825
+
2826
+ .sc-workload tbody th {
2827
+ font-weight: var(--sc-weight-normal);
2828
+ }
2829
+
2830
+ .sc-workload tbody th a {
2831
+ color: var(--sc-color-text);
2832
+ text-decoration: none;
2833
+ }
2834
+
2835
+ .sc-workload tbody th a:hover {
2836
+ color: var(--sc-color-accent);
2837
+ }
2838
+
2839
+ .sc-workload td {
2840
+ font-variant-numeric: tabular-nums;
2841
+ }
2842
+
2843
+ .sc-workload-soon {
2844
+ color: var(--sc-color-warning);
2845
+ }
2846
+
2847
+ .sc-workload-late {
2848
+ color: var(--sc-color-danger);
2849
+ font-weight: var(--sc-weight-bold);
2850
+ }
2851
+
2852
+ /* The roadmap: a goal a pane, with how far it is as a bar. */
2853
+ .sc-goals {
2854
+ display: grid;
2855
+ gap: var(--sc-space-3);
2856
+ max-width: var(--sc-width-prose);
2857
+ margin: 0;
2858
+ padding: 0;
2859
+ list-style: none;
2860
+ }
2861
+
2862
+ .sc-goal {
2863
+ display: grid;
2864
+ gap: var(--sc-space-3);
2865
+ padding: var(--sc-space-4) var(--sc-space-5);
2866
+ border: var(--sc-border);
2867
+ border-radius: var(--sc-radius-xl);
2868
+ background: var(--sc-glass-surface);
2869
+ backdrop-filter: var(--sc-glass-backdrop);
2870
+ }
2871
+
2872
+ .sc-goal-done {
2873
+ opacity: 0.75;
2874
+ }
2875
+
2876
+ .sc-goal-dropped {
2877
+ opacity: 0.55;
2878
+ }
2879
+
2880
+ .sc-goal-head {
2881
+ display: flex;
2882
+ flex-wrap: wrap;
2883
+ align-items: center;
2884
+ gap: var(--sc-space-2);
2885
+ }
2886
+
2887
+ .sc-goal-title {
2888
+ flex: 1 1 12rem;
2889
+ color: var(--sc-color-text);
2890
+ font-size: var(--sc-text-lg);
2891
+ font-weight: var(--sc-weight-medium);
2892
+ text-decoration: none;
2893
+ overflow-wrap: anywhere;
2894
+ }
2895
+
2896
+ .sc-goal-title:hover {
2897
+ color: var(--sc-color-accent);
2898
+ }
2899
+
2900
+ .sc-progress {
2901
+ display: grid;
2902
+ gap: var(--sc-space-1);
2903
+ }
2904
+
2905
+ .sc-progress-bar {
2906
+ display: flex;
2907
+ height: 0.5rem;
2908
+ overflow: hidden;
2909
+ border-radius: var(--sc-radius-full);
2910
+ background: var(--sc-color-bg-inset);
2911
+ }
2912
+
2913
+ .sc-progress-done {
2914
+ background: var(--sc-color-success);
2915
+ }
2916
+
2917
+ .sc-progress-working {
2918
+ background: var(--sc-color-accent);
2919
+ }
2920
+
2921
+ .sc-progress-words {
2922
+ color: var(--sc-color-text-muted);
2923
+ font-size: var(--sc-text-xs);
2924
+ }
2925
+
2926
+ .sc-goal-tasks {
2927
+ margin-top: var(--sc-space-3);
2928
+ }
2929
+
2930
+ .sc-goal-tasks-state {
2931
+ margin-bottom: var(--sc-space-2);
2932
+ color: var(--sc-color-text-faint);
2933
+ font-size: var(--sc-text-xs);
2934
+ font-weight: var(--sc-weight-medium);
2935
+ letter-spacing: 0.04em;
2936
+ text-transform: uppercase;
2937
+ }
2938
+
2939
+ /* The categories: a row each, with its name and its colour open to an administrator. */
2940
+ .sc-categories {
2941
+ display: grid;
2942
+ gap: var(--sc-space-4);
2943
+ max-width: var(--sc-width-prose);
2944
+ }
2945
+
2946
+ .sc-category-list {
2947
+ display: grid;
2948
+ gap: var(--sc-space-2);
2949
+ margin: 0;
2950
+ padding: 0;
2951
+ list-style: none;
2952
+ }
2953
+
2954
+ .sc-category-row {
2955
+ display: flex;
2956
+ flex-wrap: wrap;
2957
+ align-items: center;
2958
+ gap: var(--sc-space-2) var(--sc-space-3);
2959
+ padding: var(--sc-space-2) var(--sc-space-3);
2960
+ border: var(--sc-border);
2961
+ border-radius: var(--sc-radius-md);
2962
+ background: var(--sc-color-sheet);
2963
+ }
2964
+
2965
+ .sc-category-form {
2966
+ display: flex;
2967
+ flex: 1;
2968
+ flex-wrap: wrap;
2969
+ align-items: center;
2970
+ gap: var(--sc-space-2) var(--sc-space-3);
2971
+ }
2972
+
2973
+ .sc-category-form .sc-field-inline {
2974
+ flex: 1 1 10rem;
2975
+ }
2976
+
2977
+ /* What is on a person's plate. */
2978
+ .sc-work {
2979
+ display: grid;
2980
+ gap: var(--sc-space-6);
2981
+ max-width: var(--sc-width-prose);
2982
+ }
2983
+
2354
2984
  /* Small screens. */
2355
2985
 
2356
2986
  @media (max-width: 40rem) {
@@ -2410,6 +3040,34 @@ table {
2410
3040
  grid-auto-columns: min(var(--sc-column-width), 85vw);
2411
3041
  }
2412
3042
 
3043
+ /* A phone's calendar has room for a dot per task and no more; the lists below say the rest. */
3044
+ .sc-calendar-grid {
3045
+ border-spacing: 2px;
3046
+ }
3047
+
3048
+ .sc-calendar-cell {
3049
+ height: 3.25rem;
3050
+ padding: 2px var(--sc-space-1);
3051
+ }
3052
+
3053
+ .sc-calendar-task {
3054
+ display: inline-flex;
3055
+ margin: 1px 2px 0 0;
3056
+ padding: 0;
3057
+ }
3058
+
3059
+ .sc-calendar-task-title,
3060
+ .sc-calendar-task-start {
3061
+ display: none;
3062
+ }
3063
+
3064
+ .sc-calendar-lane,
3065
+ .sc-calendar-bar {
3066
+ height: 4px;
3067
+ padding: 0;
3068
+ border: 0;
3069
+ }
3070
+
2413
3071
  .sc-feed-item {
2414
3072
  grid-template-columns: 1fr;
2415
3073
  gap: var(--sc-space-1);
package/dist/console.d.ts CHANGED
@@ -1,8 +1,11 @@
1
1
  import { type ComponentType } from "react";
2
2
  import { type ConsoleClient } from "./api.js";
3
3
  import { type BoardProps } from "./components/board.js";
4
+ import { type CalendarProps } from "./components/calendar.js";
5
+ import { type CategoryListProps } from "./components/categories.js";
4
6
  import { type DecisionListProps } from "./components/decision-list.js";
5
7
  import { type EventFeedProps } from "./components/event-feed.js";
8
+ import { type GoalListProps } from "./components/goals.js";
6
9
  import { type PeopleListProps } from "./components/people.js";
7
10
  import { type MemberListProps, type ProjectListProps } from "./components/projects.js";
8
11
  import { type Brand, type ShellProps } from "./components/shell.js";
@@ -10,6 +13,7 @@ import { type SignInProps } from "./components/sign-in.js";
10
13
  import { type SkillListProps } from "./components/skills.js";
11
14
  import { type TaskViewProps } from "./components/task-view.js";
12
15
  import { type TokenListProps } from "./components/tokens.js";
16
+ import { type WorkListProps } from "./components/work.js";
13
17
  import { type LanguagePack } from "./i18n/index.js";
14
18
  import { type Route } from "./router.js";
15
19
  /** The components a custom console may replace, each with the props the default one takes. */
@@ -25,6 +29,10 @@ export interface ConsoleComponents {
25
29
  readonly SkillList: ComponentType<SkillListProps>;
26
30
  readonly ProjectList: ComponentType<ProjectListProps>;
27
31
  readonly MemberList: ComponentType<MemberListProps>;
32
+ readonly Calendar: ComponentType<CalendarProps>;
33
+ readonly GoalList: ComponentType<GoalListProps>;
34
+ readonly WorkList: ComponentType<WorkListProps>;
35
+ readonly CategoryList: ComponentType<CategoryListProps>;
28
36
  }
29
37
  export declare const DEFAULT_COMPONENTS: ConsoleComponents;
30
38
  export interface ConsoleConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.tsx"],"names":[],"mappings":"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"}