@skillcdn/console 0.1.9 → 0.1.10

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 (138) hide show
  1. package/README.md +5 -5
  2. package/dist/api.d.ts +5 -5
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +4 -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 +255 -10
  8. package/dist/cli/cli.js.map +1 -1
  9. package/dist/cli/format.d.ts +9 -1
  10. package/dist/cli/format.d.ts.map +1 -1
  11. package/dist/cli/format.js +80 -0
  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 +62 -7
  15. package/dist/cli/help.js.map +1 -1
  16. package/dist/client.d.ts +31 -4
  17. package/dist/client.d.ts.map +1 -1
  18. package/dist/client.js +19 -3
  19. package/dist/client.js.map +1 -1
  20. package/dist/components/board.d.ts +27 -1
  21. package/dist/components/board.d.ts.map +1 -1
  22. package/dist/components/board.js +75 -7
  23. package/dist/components/board.js.map +1 -1
  24. package/dist/components/calendar.d.ts +34 -0
  25. package/dist/components/calendar.d.ts.map +1 -0
  26. package/dist/components/calendar.js +96 -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 +14 -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 +12 -0
  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/task-form.d.ts +5 -1
  44. package/dist/components/task-form.d.ts.map +1 -1
  45. package/dist/components/task-form.js +13 -1
  46. package/dist/components/task-form.js.map +1 -1
  47. package/dist/components/task-list.d.ts +16 -0
  48. package/dist/components/task-list.d.ts.map +1 -0
  49. package/dist/components/task-list.js +14 -0
  50. package/dist/components/task-list.js.map +1 -0
  51. package/dist/components/task-view.d.ts +9 -1
  52. package/dist/components/task-view.d.ts.map +1 -1
  53. package/dist/components/task-view.js +10 -4
  54. package/dist/components/task-view.js.map +1 -1
  55. package/dist/components/ui.d.ts +30 -1
  56. package/dist/components/ui.d.ts.map +1 -1
  57. package/dist/components/ui.js +60 -0
  58. package/dist/components/ui.js.map +1 -1
  59. package/dist/components/work.d.ts +10 -0
  60. package/dist/components/work.d.ts.map +1 -0
  61. package/dist/components/work.js +29 -0
  62. package/dist/components/work.js.map +1 -0
  63. package/dist/console.css +511 -0
  64. package/dist/console.d.ts +8 -0
  65. package/dist/console.d.ts.map +1 -1
  66. package/dist/console.js +124 -8
  67. package/dist/console.js.map +1 -1
  68. package/dist/data.d.ts +14 -1
  69. package/dist/data.d.ts.map +1 -1
  70. package/dist/data.js +36 -2
  71. package/dist/data.js.map +1 -1
  72. package/dist/dates.d.ts +39 -0
  73. package/dist/dates.d.ts.map +1 -0
  74. package/dist/dates.js +120 -0
  75. package/dist/dates.js.map +1 -0
  76. package/dist/i18n/en.d.ts +162 -1
  77. package/dist/i18n/en.d.ts.map +1 -1
  78. package/dist/i18n/en.js +174 -1
  79. package/dist/i18n/en.js.map +1 -1
  80. package/dist/i18n/ko.d.ts.map +1 -1
  81. package/dist/i18n/ko.js +169 -1
  82. package/dist/i18n/ko.js.map +1 -1
  83. package/dist/index.d.ts +10 -4
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +10 -4
  86. package/dist/index.js.map +1 -1
  87. package/dist/limits.d.ts +5 -0
  88. package/dist/limits.d.ts.map +1 -1
  89. package/dist/limits.js +5 -0
  90. package/dist/limits.js.map +1 -1
  91. package/dist/router.d.ts +50 -1
  92. package/dist/router.d.ts.map +1 -1
  93. package/dist/router.js +74 -1
  94. package/dist/router.js.map +1 -1
  95. package/dist/routes.d.ts +7 -1
  96. package/dist/routes.d.ts.map +1 -1
  97. package/dist/routes.js +9 -0
  98. package/dist/routes.js.map +1 -1
  99. package/dist/schemas.d.ts +366 -0
  100. package/dist/schemas.d.ts.map +1 -1
  101. package/dist/schemas.js +112 -3
  102. package/dist/schemas.js.map +1 -1
  103. package/dist/vocabulary.d.ts +15 -1
  104. package/dist/vocabulary.d.ts.map +1 -1
  105. package/dist/vocabulary.js +26 -0
  106. package/dist/vocabulary.js.map +1 -1
  107. package/docs/specs/cli.md +11 -4
  108. package/docs/specs/rest.md +33 -8
  109. package/package.json +1 -1
  110. package/skills/working-the-board/SKILL.md +7 -6
  111. package/src/api.ts +30 -0
  112. package/src/cli/cli.ts +311 -10
  113. package/src/cli/format.ts +88 -0
  114. package/src/cli/help.ts +69 -7
  115. package/src/client.ts +70 -2
  116. package/src/components/board.tsx +205 -12
  117. package/src/components/calendar.tsx +255 -0
  118. package/src/components/categories.tsx +209 -0
  119. package/src/components/decision-list.tsx +62 -5
  120. package/src/components/event-feed.tsx +12 -0
  121. package/src/components/goals.tsx +264 -0
  122. package/src/components/task-form.tsx +78 -1
  123. package/src/components/task-list.tsx +61 -0
  124. package/src/components/task-view.tsx +74 -3
  125. package/src/components/ui.tsx +116 -1
  126. package/src/components/work.tsx +83 -0
  127. package/src/console.tsx +337 -4
  128. package/src/data.ts +63 -8
  129. package/src/dates.ts +143 -0
  130. package/src/i18n/en.ts +184 -1
  131. package/src/i18n/ko.ts +175 -1
  132. package/src/index.ts +58 -1
  133. package/src/limits.ts +5 -0
  134. package/src/router.ts +119 -6
  135. package/src/routes.ts +10 -0
  136. package/src/schemas.ts +141 -1
  137. package/src/styles/console.css +511 -0
  138. package/src/vocabulary.ts +33 -0
@@ -2351,6 +2351,496 @@ table {
2351
2351
  }
2352
2352
  }
2353
2353
 
2354
+ /* The schedule, the roadmap and the categories (ADR-0019). */
2355
+
2356
+ /* The colours a category may be shown in: names, painted here and nowhere else. Each is a
2357
+ dark fill with a light line and text, so that a badge reads on the glass. */
2358
+ .sc-category-gray {
2359
+ --sc-category-line: #aeb7c4;
2360
+ --sc-category-fill: #2a3240;
2361
+ }
2362
+
2363
+ .sc-category-blue {
2364
+ --sc-category-line: #8fb6ff;
2365
+ --sc-category-fill: #1a2d52;
2366
+ }
2367
+
2368
+ .sc-category-green {
2369
+ --sc-category-line: #6fd3a0;
2370
+ --sc-category-fill: #143326;
2371
+ }
2372
+
2373
+ .sc-category-orange {
2374
+ --sc-category-line: #ffb77a;
2375
+ --sc-category-fill: #3a2414;
2376
+ }
2377
+
2378
+ .sc-category-pink {
2379
+ --sc-category-line: #ff9ac2;
2380
+ --sc-category-fill: #3b1a2b;
2381
+ }
2382
+
2383
+ .sc-category-purple {
2384
+ --sc-category-line: #c4a4ff;
2385
+ --sc-category-fill: #2b1f4a;
2386
+ }
2387
+
2388
+ .sc-category-teal {
2389
+ --sc-category-line: #7ad7d4;
2390
+ --sc-category-fill: #10343a;
2391
+ }
2392
+
2393
+ .sc-category-yellow {
2394
+ --sc-category-line: #f0d36a;
2395
+ --sc-category-fill: #3a3012;
2396
+ }
2397
+
2398
+ .sc-badge-category {
2399
+ border-color: color-mix(in srgb, var(--sc-category-line) 45%, transparent);
2400
+ background: var(--sc-category-fill);
2401
+ color: var(--sc-category-line);
2402
+ }
2403
+
2404
+ .sc-category-swatch,
2405
+ .sc-calendar-dot {
2406
+ display: inline-block;
2407
+ flex: none;
2408
+ width: 0.625rem;
2409
+ height: 0.625rem;
2410
+ border-radius: 50%;
2411
+ background: var(--sc-category-line, var(--sc-color-text-faint));
2412
+ }
2413
+
2414
+ /* The filters above the board: a quiet row of controls, as wide as its words. */
2415
+ .sc-filters {
2416
+ display: flex;
2417
+ flex-wrap: wrap;
2418
+ align-items: center;
2419
+ gap: var(--sc-space-2) var(--sc-space-3);
2420
+ margin-bottom: var(--sc-space-3);
2421
+ }
2422
+
2423
+ .sc-filters .sc-field-inline {
2424
+ flex: none;
2425
+ }
2426
+
2427
+ .sc-filters .sc-input {
2428
+ min-height: 2rem;
2429
+ padding-block: 0;
2430
+ font-size: var(--sc-text-sm);
2431
+ }
2432
+
2433
+ .sc-filters-count {
2434
+ font-size: var(--sc-text-sm);
2435
+ }
2436
+
2437
+ /* Tasks as rows, where the columns are not the point. */
2438
+ .sc-task-rows {
2439
+ display: grid;
2440
+ gap: var(--sc-space-2);
2441
+ margin: 0;
2442
+ padding: 0;
2443
+ list-style: none;
2444
+ }
2445
+
2446
+ .sc-task-row {
2447
+ display: flex;
2448
+ flex-wrap: wrap;
2449
+ align-items: center;
2450
+ gap: var(--sc-space-2) var(--sc-space-3);
2451
+ padding: var(--sc-space-2) var(--sc-space-3);
2452
+ border: var(--sc-border);
2453
+ border-radius: var(--sc-radius-md);
2454
+ background: var(--sc-color-sheet);
2455
+ font-size: var(--sc-text-sm);
2456
+ }
2457
+
2458
+ .sc-task-row-title {
2459
+ flex: 1 1 14rem;
2460
+ min-width: 0;
2461
+ color: var(--sc-color-text);
2462
+ font-weight: var(--sc-weight-medium);
2463
+ text-decoration: none;
2464
+ overflow-wrap: anywhere;
2465
+ }
2466
+
2467
+ .sc-task-row-title:hover {
2468
+ color: var(--sc-color-accent);
2469
+ }
2470
+
2471
+ .sc-task-row-project {
2472
+ color: var(--sc-color-text-faint);
2473
+ font-size: var(--sc-text-xs);
2474
+ }
2475
+
2476
+ .sc-task-row-meta {
2477
+ display: flex;
2478
+ flex-wrap: wrap;
2479
+ align-items: center;
2480
+ gap: var(--sc-space-1);
2481
+ margin-left: auto;
2482
+ }
2483
+
2484
+ /* The calendar: the month as a table, a cell a day, the tasks due in it one line each. */
2485
+ .sc-calendar {
2486
+ display: grid;
2487
+ gap: var(--sc-space-3);
2488
+ }
2489
+
2490
+ .sc-calendar-head {
2491
+ display: flex;
2492
+ flex-wrap: wrap;
2493
+ align-items: center;
2494
+ justify-content: space-between;
2495
+ gap: var(--sc-space-2);
2496
+ }
2497
+
2498
+ .sc-calendar-month {
2499
+ font-size: var(--sc-text-lg);
2500
+ }
2501
+
2502
+ .sc-calendar-nav {
2503
+ display: flex;
2504
+ gap: var(--sc-space-1);
2505
+ }
2506
+
2507
+ .sc-calendar-grid {
2508
+ width: 100%;
2509
+ border-collapse: separate;
2510
+ border-spacing: 0.25rem;
2511
+ table-layout: fixed;
2512
+ }
2513
+
2514
+ .sc-calendar-grid th {
2515
+ padding: var(--sc-space-1);
2516
+ color: var(--sc-color-text-faint);
2517
+ font-size: var(--sc-text-xs);
2518
+ font-weight: var(--sc-weight-medium);
2519
+ letter-spacing: 0.04em;
2520
+ text-align: left;
2521
+ text-transform: uppercase;
2522
+ }
2523
+
2524
+ .sc-calendar-cell {
2525
+ height: 7rem;
2526
+ padding: var(--sc-space-1) var(--sc-space-2);
2527
+ border: var(--sc-border);
2528
+ border-radius: var(--sc-radius-md);
2529
+ background: var(--sc-color-sheet);
2530
+ vertical-align: top;
2531
+ }
2532
+
2533
+ .sc-calendar-cell-outside {
2534
+ background: transparent;
2535
+ color: var(--sc-color-text-faint);
2536
+ }
2537
+
2538
+ .sc-calendar-cell-today {
2539
+ border-color: var(--sc-color-accent);
2540
+ box-shadow: inset 0 0 0 1px var(--sc-color-accent);
2541
+ }
2542
+
2543
+ .sc-calendar-day {
2544
+ display: block;
2545
+ margin-bottom: var(--sc-space-1);
2546
+ font-size: var(--sc-text-xs);
2547
+ font-weight: var(--sc-weight-medium);
2548
+ }
2549
+
2550
+ .sc-calendar-cell-today .sc-calendar-day {
2551
+ color: var(--sc-color-accent);
2552
+ }
2553
+
2554
+ .sc-calendar-task {
2555
+ display: flex;
2556
+ align-items: center;
2557
+ gap: var(--sc-space-1);
2558
+ margin-top: 2px;
2559
+ padding: 1px var(--sc-space-1);
2560
+ border-radius: var(--sc-radius-sm);
2561
+ color: var(--sc-color-text);
2562
+ font-size: var(--sc-text-xs);
2563
+ line-height: 1.4;
2564
+ text-decoration: none;
2565
+ }
2566
+
2567
+ .sc-calendar-task:hover {
2568
+ background: var(--sc-color-sheet-hover);
2569
+ color: var(--sc-color-text);
2570
+ }
2571
+
2572
+ .sc-calendar-task-title {
2573
+ overflow: hidden;
2574
+ text-overflow: ellipsis;
2575
+ white-space: nowrap;
2576
+ }
2577
+
2578
+ .sc-calendar-task-over {
2579
+ color: var(--sc-color-text-faint);
2580
+ text-decoration: line-through;
2581
+ }
2582
+
2583
+ .sc-calendar-task-late {
2584
+ color: var(--sc-color-danger);
2585
+ }
2586
+
2587
+ .sc-calendar-task-start {
2588
+ color: var(--sc-color-text-muted);
2589
+ }
2590
+
2591
+ .sc-calendar-task-start::before {
2592
+ content: "\203A";
2593
+ color: var(--sc-color-text-faint);
2594
+ }
2595
+
2596
+ .sc-calendar-below {
2597
+ display: grid;
2598
+ align-items: start;
2599
+ gap: var(--sc-space-5);
2600
+ margin-top: var(--sc-space-5);
2601
+ }
2602
+
2603
+ @media (min-width: 64rem) {
2604
+ .sc-calendar-below {
2605
+ grid-template-columns: 1fr 1fr;
2606
+ }
2607
+ }
2608
+
2609
+ /* The record of the decisions: a row each. */
2610
+ .sc-decision-log {
2611
+ display: grid;
2612
+ gap: var(--sc-space-2);
2613
+ margin: 0;
2614
+ padding: 0;
2615
+ list-style: none;
2616
+ }
2617
+
2618
+ .sc-decision-row {
2619
+ display: grid;
2620
+ grid-template-columns: minmax(0, 1fr);
2621
+ gap: var(--sc-space-1) var(--sc-space-3);
2622
+ padding: var(--sc-space-2) var(--sc-space-3);
2623
+ border: var(--sc-border);
2624
+ border-radius: var(--sc-radius-md);
2625
+ background: var(--sc-color-sheet);
2626
+ font-size: var(--sc-text-sm);
2627
+ }
2628
+
2629
+ @media (min-width: 40rem) {
2630
+ .sc-decision-row {
2631
+ grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) auto;
2632
+ align-items: center;
2633
+ }
2634
+ }
2635
+
2636
+ .sc-decision-row-question {
2637
+ overflow-wrap: anywhere;
2638
+ }
2639
+
2640
+ .sc-decision-row-question a {
2641
+ color: var(--sc-color-text);
2642
+ text-decoration: none;
2643
+ }
2644
+
2645
+ .sc-decision-row-question a:hover {
2646
+ color: var(--sc-color-accent);
2647
+ }
2648
+
2649
+ .sc-decision-row-answer {
2650
+ color: var(--sc-color-success);
2651
+ font-weight: var(--sc-weight-medium);
2652
+ overflow-wrap: anywhere;
2653
+ }
2654
+
2655
+ .sc-decision-row-meta {
2656
+ display: flex;
2657
+ flex-wrap: wrap;
2658
+ align-items: center;
2659
+ gap: var(--sc-space-2);
2660
+ color: var(--sc-color-text-muted);
2661
+ }
2662
+
2663
+ /* Who has what: a small table, the late numbers in the danger colour. */
2664
+ .sc-workload {
2665
+ width: 100%;
2666
+ max-width: var(--sc-width-prose);
2667
+ border-collapse: collapse;
2668
+ font-size: var(--sc-text-sm);
2669
+ }
2670
+
2671
+ .sc-workload th,
2672
+ .sc-workload td {
2673
+ padding: var(--sc-space-2) var(--sc-space-3);
2674
+ border-bottom: var(--sc-border);
2675
+ text-align: left;
2676
+ }
2677
+
2678
+ .sc-workload thead th {
2679
+ color: var(--sc-color-text-faint);
2680
+ font-size: var(--sc-text-xs);
2681
+ font-weight: var(--sc-weight-medium);
2682
+ letter-spacing: 0.04em;
2683
+ text-transform: uppercase;
2684
+ }
2685
+
2686
+ .sc-workload tbody th {
2687
+ font-weight: var(--sc-weight-normal);
2688
+ }
2689
+
2690
+ .sc-workload tbody th a {
2691
+ color: var(--sc-color-text);
2692
+ text-decoration: none;
2693
+ }
2694
+
2695
+ .sc-workload tbody th a:hover {
2696
+ color: var(--sc-color-accent);
2697
+ }
2698
+
2699
+ .sc-workload td {
2700
+ font-variant-numeric: tabular-nums;
2701
+ }
2702
+
2703
+ .sc-workload-soon {
2704
+ color: var(--sc-color-warning);
2705
+ }
2706
+
2707
+ .sc-workload-late {
2708
+ color: var(--sc-color-danger);
2709
+ font-weight: var(--sc-weight-bold);
2710
+ }
2711
+
2712
+ /* The roadmap: a goal a pane, with how far it is as a bar. */
2713
+ .sc-goals {
2714
+ display: grid;
2715
+ gap: var(--sc-space-3);
2716
+ max-width: var(--sc-width-prose);
2717
+ margin: 0;
2718
+ padding: 0;
2719
+ list-style: none;
2720
+ }
2721
+
2722
+ .sc-goal {
2723
+ display: grid;
2724
+ gap: var(--sc-space-3);
2725
+ padding: var(--sc-space-4) var(--sc-space-5);
2726
+ border: var(--sc-border);
2727
+ border-radius: var(--sc-radius-xl);
2728
+ background: var(--sc-glass-surface);
2729
+ backdrop-filter: var(--sc-glass-backdrop);
2730
+ }
2731
+
2732
+ .sc-goal-done {
2733
+ opacity: 0.75;
2734
+ }
2735
+
2736
+ .sc-goal-dropped {
2737
+ opacity: 0.55;
2738
+ }
2739
+
2740
+ .sc-goal-head {
2741
+ display: flex;
2742
+ flex-wrap: wrap;
2743
+ align-items: center;
2744
+ gap: var(--sc-space-2);
2745
+ }
2746
+
2747
+ .sc-goal-title {
2748
+ flex: 1 1 12rem;
2749
+ color: var(--sc-color-text);
2750
+ font-size: var(--sc-text-lg);
2751
+ font-weight: var(--sc-weight-medium);
2752
+ text-decoration: none;
2753
+ overflow-wrap: anywhere;
2754
+ }
2755
+
2756
+ .sc-goal-title:hover {
2757
+ color: var(--sc-color-accent);
2758
+ }
2759
+
2760
+ .sc-progress {
2761
+ display: grid;
2762
+ gap: var(--sc-space-1);
2763
+ }
2764
+
2765
+ .sc-progress-bar {
2766
+ display: flex;
2767
+ height: 0.5rem;
2768
+ overflow: hidden;
2769
+ border-radius: var(--sc-radius-full);
2770
+ background: var(--sc-color-bg-inset);
2771
+ }
2772
+
2773
+ .sc-progress-done {
2774
+ background: var(--sc-color-success);
2775
+ }
2776
+
2777
+ .sc-progress-working {
2778
+ background: var(--sc-color-accent);
2779
+ }
2780
+
2781
+ .sc-progress-words {
2782
+ color: var(--sc-color-text-muted);
2783
+ font-size: var(--sc-text-xs);
2784
+ }
2785
+
2786
+ .sc-goal-tasks {
2787
+ margin-top: var(--sc-space-3);
2788
+ }
2789
+
2790
+ .sc-goal-tasks-state {
2791
+ margin-bottom: var(--sc-space-2);
2792
+ color: var(--sc-color-text-faint);
2793
+ font-size: var(--sc-text-xs);
2794
+ font-weight: var(--sc-weight-medium);
2795
+ letter-spacing: 0.04em;
2796
+ text-transform: uppercase;
2797
+ }
2798
+
2799
+ /* The categories: a row each, with its name and its colour open to an administrator. */
2800
+ .sc-categories {
2801
+ display: grid;
2802
+ gap: var(--sc-space-4);
2803
+ max-width: var(--sc-width-prose);
2804
+ }
2805
+
2806
+ .sc-category-list {
2807
+ display: grid;
2808
+ gap: var(--sc-space-2);
2809
+ margin: 0;
2810
+ padding: 0;
2811
+ list-style: none;
2812
+ }
2813
+
2814
+ .sc-category-row {
2815
+ display: flex;
2816
+ flex-wrap: wrap;
2817
+ align-items: center;
2818
+ gap: var(--sc-space-2) var(--sc-space-3);
2819
+ padding: var(--sc-space-2) var(--sc-space-3);
2820
+ border: var(--sc-border);
2821
+ border-radius: var(--sc-radius-md);
2822
+ background: var(--sc-color-sheet);
2823
+ }
2824
+
2825
+ .sc-category-form {
2826
+ display: flex;
2827
+ flex: 1;
2828
+ flex-wrap: wrap;
2829
+ align-items: center;
2830
+ gap: var(--sc-space-2) var(--sc-space-3);
2831
+ }
2832
+
2833
+ .sc-category-form .sc-field-inline {
2834
+ flex: 1 1 10rem;
2835
+ }
2836
+
2837
+ /* What is on a person's plate. */
2838
+ .sc-work {
2839
+ display: grid;
2840
+ gap: var(--sc-space-6);
2841
+ max-width: var(--sc-width-prose);
2842
+ }
2843
+
2354
2844
  /* Small screens. */
2355
2845
 
2356
2846
  @media (max-width: 40rem) {
@@ -2410,6 +2900,27 @@ table {
2410
2900
  grid-auto-columns: min(var(--sc-column-width), 85vw);
2411
2901
  }
2412
2902
 
2903
+ /* A phone's calendar has room for a dot per task and no more; the lists below say the rest. */
2904
+ .sc-calendar-grid {
2905
+ border-spacing: 2px;
2906
+ }
2907
+
2908
+ .sc-calendar-cell {
2909
+ height: 3.25rem;
2910
+ padding: 2px var(--sc-space-1);
2911
+ }
2912
+
2913
+ .sc-calendar-task {
2914
+ display: inline-flex;
2915
+ margin: 1px 2px 0 0;
2916
+ padding: 0;
2917
+ }
2918
+
2919
+ .sc-calendar-task-title,
2920
+ .sc-calendar-task-start {
2921
+ display: none;
2922
+ }
2923
+
2413
2924
  .sc-feed-item {
2414
2925
  grid-template-columns: 1fr;
2415
2926
  gap: var(--sc-space-1);
package/src/vocabulary.ts CHANGED
@@ -14,11 +14,39 @@ export const TASK_STATES = [
14
14
 
15
15
  export type TaskState = (typeof TASK_STATES)[number];
16
16
 
17
+ /** The states a task is still open in: not done, not dropped. */
18
+ export const OPEN_TASK_STATES: readonly TaskState[] = ["idea", "ready", "in_progress", "in_review"];
19
+
17
20
  /** How much a task matters next to the others, in rising order. */
18
21
  export const TASK_PRIORITIES = ["low", "normal", "high", "urgent"] as const;
19
22
 
20
23
  export type TaskPriority = (typeof TASK_PRIORITIES)[number];
21
24
 
25
+ /**
26
+ * The states of a goal on the roadmap (ADR-0019): planned for later, being worked towards,
27
+ * reached, or let go. A person says which; the tasks under it say how far it is.
28
+ */
29
+ export const GOAL_STATES = ["planned", "active", "done", "dropped"] as const;
30
+
31
+ export type GoalState = (typeof GOAL_STATES)[number];
32
+
33
+ /**
34
+ * The colours a category may be shown in: names, so that a custom console paints them in its
35
+ * own tokens and no value an administrator typed reaches a stylesheet.
36
+ */
37
+ export const CATEGORY_COLORS = [
38
+ "gray",
39
+ "blue",
40
+ "green",
41
+ "orange",
42
+ "pink",
43
+ "purple",
44
+ "teal",
45
+ "yellow",
46
+ ] as const;
47
+
48
+ export type CategoryColor = (typeof CATEGORY_COLORS)[number];
49
+
22
50
  /** The identity providers people may sign in through: the git host, and Google (Workspace). */
23
51
  export const PROVIDER_KEYS = ["gh", "google"] as const;
24
52
 
@@ -85,11 +113,16 @@ export type SkillsStatus = (typeof SKILLS_STATUSES)[number];
85
113
  export const EVENT_KINDS = [
86
114
  "person.joined",
87
115
  "person.role_changed",
116
+ "category.created",
117
+ "category.updated",
118
+ "category.removed",
88
119
  "project.created",
89
120
  "project.updated",
90
121
  "project.member_added",
91
122
  "project.member_changed",
92
123
  "project.member_removed",
124
+ "goal.created",
125
+ "goal.updated",
93
126
  "task.created",
94
127
  "task.updated",
95
128
  "task.moved",