@w6w/ui 0.2.0 → 0.2.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 (78) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/AppPicker.d.ts +47 -2
  3. package/dist/CanvasLayer.d.ts +38 -0
  4. package/dist/{CodeBlock-Dot3Pd7P.js → CodeBlock-BqXDA35P.js} +2 -2
  5. package/dist/{CodeBlock-Dot3Pd7P.js.map → CodeBlock-BqXDA35P.js.map} +1 -1
  6. package/dist/{CodeBlock-CZu4TFSi.cjs → CodeBlock-CulfbnZD.cjs} +2 -2
  7. package/dist/{CodeBlock-CZu4TFSi.cjs.map → CodeBlock-CulfbnZD.cjs.map} +1 -1
  8. package/dist/ConfirmModal-Ln99S9NT.js +7919 -0
  9. package/dist/ConfirmModal-Ln99S9NT.js.map +1 -0
  10. package/dist/ConfirmModal-fjHW5rN-.cjs +14 -0
  11. package/dist/ConfirmModal-fjHW5rN-.cjs.map +1 -0
  12. package/dist/Copyable-DA6eiU7w.cjs +2 -0
  13. package/dist/Copyable-DA6eiU7w.cjs.map +1 -0
  14. package/dist/{Copyable-1niV9gUa.js → Copyable-F4NTaG77.js} +91 -15
  15. package/dist/Copyable-F4NTaG77.js.map +1 -0
  16. package/dist/EditConnectionModal.d.ts +6 -1
  17. package/dist/JsonEditor.d.ts +8 -0
  18. package/dist/Markdown.d.ts +25 -0
  19. package/dist/ParamsForm.d.ts +7 -1
  20. package/dist/StepBuilderModal.d.ts +23 -5
  21. package/dist/WorkflowFlowEditor.d.ts +14 -3
  22. package/dist/app-pages.d.ts +2 -0
  23. package/dist/canvas-types.d.ts +36 -0
  24. package/dist/canvas-utils.d.ts +44 -0
  25. package/dist/code.cjs +1 -1
  26. package/dist/code.mjs +2 -2
  27. package/dist/components/AuthFieldsForm.d.ts +11 -0
  28. package/dist/components/BudgetMeter.d.ts +15 -0
  29. package/dist/components/CallableList.d.ts +3 -2
  30. package/dist/components/Combobox.d.ts +8 -1
  31. package/dist/components/ConnectionList.d.ts +2 -3
  32. package/dist/components/CredentialPicker.d.ts +35 -0
  33. package/dist/components/DataTable.d.ts +27 -0
  34. package/dist/components/EmptyState.d.ts +9 -0
  35. package/dist/components/icons.d.ts +1 -1
  36. package/dist/dynamic-fields.d.ts +60 -0
  37. package/dist/editor-theme.d.ts +24 -0
  38. package/dist/flow-fanout.d.ts +2 -2
  39. package/dist/flow-types.d.ts +18 -1
  40. package/dist/flow-utils.d.ts +10 -3
  41. package/dist/flow.cjs +2 -2
  42. package/dist/flow.cjs.map +1 -1
  43. package/dist/flow.d.ts +9 -0
  44. package/dist/flow.mjs +1519 -1138
  45. package/dist/flow.mjs.map +1 -1
  46. package/dist/index.cjs +1 -1
  47. package/dist/index.cjs.map +1 -1
  48. package/dist/index.d.ts +14 -2
  49. package/dist/index.mjs +1362 -1123
  50. package/dist/index.mjs.map +1 -1
  51. package/dist/note-markdown.d.ts +22 -0
  52. package/dist/provider.d.ts +56 -7
  53. package/dist/resolve-params.d.ts +5 -0
  54. package/dist/run-visuals.d.ts +4 -1
  55. package/dist/step-problems.d.ts +34 -0
  56. package/dist/types.d.ts +109 -3
  57. package/dist/use-dynamic-fields.d.ts +23 -0
  58. package/package.json +4 -2
  59. package/src/styles/_budget-meter.scss +46 -0
  60. package/src/styles/_callable-list.scss +15 -6
  61. package/src/styles/_canvas.scss +318 -0
  62. package/src/styles/_connections.scss +2 -14
  63. package/src/styles/_data-table.scss +55 -0
  64. package/src/styles/_empty-state.scss +21 -0
  65. package/src/styles/_flow.scss +11 -0
  66. package/src/styles/_fx.scss +23 -0
  67. package/src/styles/_layout.scss +10 -0
  68. package/src/styles/_markdown.scss +20 -0
  69. package/src/styles/_tester.scss +1 -14
  70. package/src/styles.css +572 -39
  71. package/src/styles.scss +5 -0
  72. package/dist/ConfirmModal-ChoiGy2K.cjs +0 -11
  73. package/dist/ConfirmModal-ChoiGy2K.cjs.map +0 -1
  74. package/dist/ConfirmModal-Wx3i8F1n.js +0 -6359
  75. package/dist/ConfirmModal-Wx3i8F1n.js.map +0 -1
  76. package/dist/Copyable-1niV9gUa.js.map +0 -1
  77. package/dist/Copyable-CYZU1o4X.cjs +0 -2
  78. package/dist/Copyable-CYZU1o4X.cjs.map +0 -1
package/src/styles.css CHANGED
@@ -914,6 +914,15 @@ svg.react-flow__connectionline {
914
914
  * uncoordinated ones exist across the four repos today).
915
915
  */
916
916
  /* Layout helpers */
917
+ /* A vertical column whose direct children are cards/panels. ONE gap, from the
918
+ shared spacing scale — never a per-screen number and never a second gap: do
919
+ not add this class to a container whose parent already gaps its children. */
920
+ .w6w-card-stack {
921
+ display: flex;
922
+ flex-direction: column;
923
+ gap: var(--w6w-sp-4);
924
+ }
925
+
917
926
  .w6w-stack {
918
927
  display: flex;
919
928
  flex-direction: column;
@@ -1804,6 +1813,32 @@ select optgroup {
1804
1813
  color: var(--w6w-accent);
1805
1814
  }
1806
1815
 
1816
+ /* The json param's ƒx rides INSIDE the editor box, top-right, as the editor's
1817
+ `overlay` (same mechanism as the `copyable` button in `_step-config.scss`).
1818
+ Opaque backdrop because it sits on line 1; the text keeps right padding so
1819
+ it is never covered; with `copyable` on it steps left of the copy button. */
1820
+ .w6w-json-editor > .w6w-expr-fx {
1821
+ position: absolute;
1822
+ top: var(--w6w-sp-1);
1823
+ right: var(--w6w-sp-1);
1824
+ z-index: 1;
1825
+ border: none;
1826
+ background: var(--w6w-panel);
1827
+ border-radius: 6px;
1828
+ }
1829
+
1830
+ .w6w-json-editor:has(> .w6w-expr-fx) .cm-content {
1831
+ padding-right: var(--w6w-sp-10);
1832
+ }
1833
+
1834
+ .w6w-json-editor:has(> .w6w-copyable-btn) > .w6w-expr-fx {
1835
+ right: calc(var(--w6w-sp-1) * 2 + var(--w6w-sp-8));
1836
+ }
1837
+
1838
+ .w6w-json-editor:has(> .w6w-copyable-btn):has(> .w6w-expr-fx) .cm-content {
1839
+ padding-right: var(--w6w-sp-20);
1840
+ }
1841
+
1807
1842
  /* Copyable — an in-box copy affordance decorating a value-displaying control
1808
1843
  (an <input>, a <textarea>, or CodeBlock's <pre>). Mirrors `.w6w-fx-wrap`
1809
1844
  (`_fx.scss:1-88`): the WRAPPER owns the box chrome and every child it holds
@@ -3444,6 +3479,17 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
3444
3479
  white-space: nowrap;
3445
3480
  }
3446
3481
 
3482
+ /* A trigger node's card (ControlNodeCard, `isTrigger`) — a half-pill: fully
3483
+ rounded entry (left) edge, the ordinary 4px corner on the exit (right) edge,
3484
+ so a run's start reads apart from the steps it feeds. No radius token
3485
+ exists beyond --w6w-radius (10px), hence the literals. Wider left inset
3486
+ clears the curve. */
3487
+ .w6w-flow .w6w-node-trigger {
3488
+ border-radius: 999px 4px 4px 999px;
3489
+ /* lint-tokens-allow: 14px right inset matches the non-trigger card's inline padding */
3490
+ padding: var(--w6w-sp-1-5) 14px var(--w6w-sp-1-5) var(--w6w-sp-4);
3491
+ }
3492
+
3447
3493
  /* The ordinary (success) ports — bumped from the library's own 6px default
3448
3494
  (2026-08-30: "ports must have consistent size") to match the error port
3449
3495
  below exactly. `:not(.w6w-handle-multi)`: the multi-input handle is its
@@ -3648,7 +3694,7 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
3648
3694
 
3649
3695
  /* Host-embedded ActionTestForm (studio's ConnectionTesterModal wraps it in its
3650
3696
  OWN full modal). The widget then fills that modal as a full-height flex column:
3651
- the params + saved-tests region scrolls, and the action bar is a bottom-pinned,
3697
+ the params / result / saved-tests cards scroll, and the action bar is a bottom-pinned,
3652
3698
  non-scrolling footer. These classes are only applied in `embedded` mode, so the
3653
3699
  inline / own-pop-out layout is untouched. */
3654
3700
  .w6w-tester-embedded-root {
@@ -3669,22 +3715,6 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
3669
3715
  overflow: auto;
3670
3716
  }
3671
3717
 
3672
- .w6w-tester-embedded-cols {
3673
- display: flex;
3674
- gap: var(--w6w-sp-4);
3675
- align-items: flex-start;
3676
- }
3677
-
3678
- .w6w-tester-embedded-main {
3679
- flex: 1;
3680
- min-width: 0;
3681
- }
3682
-
3683
- .w6w-tester-embedded-rail {
3684
- width: 260px;
3685
- flex-shrink: 0;
3686
- }
3687
-
3688
3718
  /* The action bar as a pinned footer: kept out of the scroll region and separated
3689
3719
  with a top border so Run / Save / Delete stay visible however long the params. */
3690
3720
  .w6w-tester-actions-footer {
@@ -5341,16 +5371,23 @@ button.w6w-rel-open:focus-visible strong {
5341
5371
  .w6w-callable-list-body {
5342
5372
  border: 1px solid var(--w6w-border);
5343
5373
  border-radius: 8px;
5344
- padding: var(--w6w-sp-2);
5374
+ background: var(--w6w-panel);
5375
+ overflow: hidden;
5345
5376
  }
5346
5377
 
5347
- .w6w-callable-list-rows {
5348
- list-style: none;
5349
- margin: 0;
5350
- padding: 0;
5378
+ .w6w-callable-list-main {
5351
5379
  display: flex;
5352
5380
  flex-direction: column;
5353
- gap: var(--w6w-sp-1);
5381
+ gap: var(--w6w-sp-0-5);
5382
+ min-width: 0;
5383
+ text-align: left;
5384
+ }
5385
+
5386
+ .w6w-callable-list-open {
5387
+ all: unset;
5388
+ cursor: pointer;
5389
+ display: block;
5390
+ width: 100%;
5354
5391
  }
5355
5392
 
5356
5393
  .w6w-callable-list-trail {
@@ -5367,6 +5404,75 @@ button.w6w-rel-open:focus-visible strong {
5367
5404
  font-size: var(--w6w-fs-xs);
5368
5405
  }
5369
5406
 
5407
+ .w6w-callable-list-row-desc {
5408
+ display: block;
5409
+ }
5410
+
5411
+ /* The frame is the ONLY element of a DataTable that draws an outer border and a
5412
+ radius (T-3). `overflow: hidden` clips the cells at the rounded corners, so
5413
+ the table below never needs an outer edge of its own. */
5414
+ .w6w-data-table-frame {
5415
+ border: 1px solid var(--w6w-border);
5416
+ border-radius: var(--w6w-radius);
5417
+ background: var(--w6w-panel);
5418
+ overflow: hidden;
5419
+ }
5420
+
5421
+ /* No outer border here (T-3): the frame above already draws it. */
5422
+ .w6w-data-table {
5423
+ width: 100%;
5424
+ border-collapse: collapse;
5425
+ color: var(--w6w-text);
5426
+ }
5427
+
5428
+ /* Inner separators only (T-3): a right border on every cell but the last column
5429
+ and a bottom border on every row but the last. First column, first row, last
5430
+ column and last row therefore paint nothing on the outside — one border per
5431
+ outer edge, from the frame. */
5432
+ .w6w-data-table th,
5433
+ .w6w-data-table td {
5434
+ border-right: 1px solid var(--w6w-border);
5435
+ border-bottom: 1px solid var(--w6w-border);
5436
+ padding: var(--w6w-sp-2) var(--w6w-sp-3);
5437
+ text-align: left;
5438
+ vertical-align: middle;
5439
+ }
5440
+
5441
+ .w6w-data-table th:last-child,
5442
+ .w6w-data-table td:last-child {
5443
+ border-right: 0;
5444
+ }
5445
+
5446
+ .w6w-data-table tbody tr:last-child > td {
5447
+ border-bottom: 0;
5448
+ }
5449
+
5450
+ /* Header-only table (rows=[] + loading, e.g. a list still fetching): there is no
5451
+ `tbody tr:last-child` to strip, so the header's bottom border would sit right
5452
+ on top of the frame's own bottom edge and paint it twice. With no body row the
5453
+ header is the last row, so it paints no bottom border — the frame supplies it. */
5454
+ .w6w-data-table:not(:has(tbody tr)) th {
5455
+ border-bottom: 0;
5456
+ }
5457
+
5458
+ .w6w-data-table th {
5459
+ color: var(--w6w-muted);
5460
+ }
5461
+
5462
+ .w6w-data-table-row-clickable {
5463
+ cursor: pointer;
5464
+ }
5465
+
5466
+ .w6w-data-table-row-clickable:hover {
5467
+ background: var(--w6w-panel-2);
5468
+ }
5469
+
5470
+ .w6w-data-table-link {
5471
+ display: block;
5472
+ color: inherit;
5473
+ text-decoration: none;
5474
+ }
5475
+
5370
5476
  /* Connections (D-12u): ConnectionList, ConnectionHeader and the state tags they share. */
5371
5477
  .w6w-connection-list {
5372
5478
  display: flex;
@@ -5391,26 +5497,12 @@ button.w6w-rel-open:focus-visible strong {
5391
5497
  flex-shrink: 0;
5392
5498
  }
5393
5499
 
5394
- .w6w-connection-rows {
5395
- list-style: none;
5396
- margin: 0;
5397
- padding: 0;
5398
- display: flex;
5399
- flex-direction: column;
5400
- gap: var(--w6w-sp-1);
5401
- }
5402
-
5403
- .w6w-connection-row {
5404
- display: flex;
5500
+ .w6w-connection-cell-name {
5501
+ display: inline-flex;
5405
5502
  align-items: center;
5406
5503
  gap: var(--w6w-sp-2);
5407
5504
  }
5408
5505
 
5409
- .w6w-connection-row-main {
5410
- flex: 1;
5411
- min-width: 0;
5412
- }
5413
-
5414
5506
  .w6w-connection-row-actions {
5415
5507
  display: flex;
5416
5508
  gap: var(--w6w-sp-1-5);
@@ -5484,3 +5576,444 @@ button.w6w-rel-open:focus-visible strong {
5484
5576
  .w6w-connection-id-copy:focus-within .w6w-copyable-btn {
5485
5577
  opacity: 1;
5486
5578
  }
5579
+
5580
+ .w6w-empty-state {
5581
+ position: relative;
5582
+ min-height: 10rem;
5583
+ background: var(--w6w-panel);
5584
+ color: var(--w6w-text);
5585
+ border: 1px solid var(--w6w-border);
5586
+ }
5587
+
5588
+ .w6w-empty-state-inner {
5589
+ position: absolute;
5590
+ top: 50%;
5591
+ left: 50%;
5592
+ transform: translate(-50%, -50%);
5593
+ display: flex;
5594
+ flex-direction: column;
5595
+ align-items: center;
5596
+ gap: var(--w6w-sp-2);
5597
+ text-align: center;
5598
+ }
5599
+
5600
+ .w6w-empty-state-body {
5601
+ color: var(--w6w-muted);
5602
+ }
5603
+
5604
+ .w6w-canvas-layer {
5605
+ position: absolute;
5606
+ top: 0;
5607
+ left: 0;
5608
+ width: 0;
5609
+ height: 0;
5610
+ overflow: visible;
5611
+ pointer-events: none;
5612
+ }
5613
+
5614
+ .w6w-canvas-section,
5615
+ .w6w-canvas-note {
5616
+ position: absolute;
5617
+ box-sizing: border-box;
5618
+ border: 1px solid var(--w6w-canvas-color, var(--w6w-border));
5619
+ border-radius: var(--w6w-radius, 6px);
5620
+ background: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-panel)) 14%, transparent);
5621
+ pointer-events: none;
5622
+ }
5623
+
5624
+ .w6w-canvas-note {
5625
+ border-color: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-border)) 55%, var(--w6w-panel));
5626
+ background: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-panel)) 32%, var(--w6w-panel));
5627
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
5628
+ }
5629
+
5630
+ .w6w-canvas-note.selected,
5631
+ .w6w-canvas-section.selected {
5632
+ outline: 2px solid var(--w6w-accent);
5633
+ outline-offset: 2px;
5634
+ }
5635
+
5636
+ .w6w-canvas-note-body {
5637
+ pointer-events: auto;
5638
+ color: var(--w6w-text);
5639
+ }
5640
+
5641
+ .w6w-canvas-section-title {
5642
+ position: absolute;
5643
+ max-width: 320px;
5644
+ overflow: hidden;
5645
+ padding: var(--w6w-sp-0-5) var(--w6w-sp-1-5);
5646
+ border-radius: 6px;
5647
+ color: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-text)) 55%, var(--w6w-text));
5648
+ font-size: var(--w6w-fs-sm);
5649
+ font-weight: var(--w6w-fw-semibold);
5650
+ text-overflow: ellipsis;
5651
+ white-space: nowrap;
5652
+ }
5653
+
5654
+ .w6w-canvas-section-title.editable {
5655
+ pointer-events: auto;
5656
+ cursor: grab;
5657
+ touch-action: none;
5658
+ }
5659
+
5660
+ .w6w-canvas-section-title.editable:hover {
5661
+ background: color-mix(in srgb, var(--w6w-canvas-color, var(--w6w-panel)) 18%, transparent);
5662
+ }
5663
+
5664
+ .w6w-canvas-note-body {
5665
+ box-sizing: border-box;
5666
+ height: 100%;
5667
+ overflow: auto;
5668
+ padding: var(--w6w-sp-3) var(--w6w-sp-3);
5669
+ font-size: var(--w6w-fs-sm);
5670
+ line-height: var(--w6w-lh-normal);
5671
+ overflow-wrap: anywhere;
5672
+ }
5673
+ .w6w-canvas-note-body h1,
5674
+ .w6w-canvas-note-body h2,
5675
+ .w6w-canvas-note-body h3,
5676
+ .w6w-canvas-note-body h4,
5677
+ .w6w-canvas-note-body h5,
5678
+ .w6w-canvas-note-body h6,
5679
+ .w6w-canvas-note-body p,
5680
+ .w6w-canvas-note-body ul,
5681
+ .w6w-canvas-note-body ol {
5682
+ margin: 0 0 var(--w6w-sp-1);
5683
+ }
5684
+ .w6w-canvas-note-body h1 {
5685
+ font-size: var(--w6w-fs-2xl);
5686
+ line-height: var(--w6w-lh-tight);
5687
+ }
5688
+ .w6w-canvas-note-body h2 {
5689
+ font-size: var(--w6w-fs-xl);
5690
+ line-height: var(--w6w-lh-tight);
5691
+ }
5692
+ .w6w-canvas-note-body h3 {
5693
+ font-size: var(--w6w-fs-lg);
5694
+ line-height: var(--w6w-lh-tight);
5695
+ }
5696
+ .w6w-canvas-note-body h4,
5697
+ .w6w-canvas-note-body h5,
5698
+ .w6w-canvas-note-body h6 {
5699
+ font-size: var(--w6w-fs-base);
5700
+ }
5701
+
5702
+ .w6w-canvas-note-editor {
5703
+ outline: none;
5704
+ cursor: text;
5705
+ }
5706
+ .w6w-canvas-note-editor > div,
5707
+ .w6w-canvas-note-editor > h1,
5708
+ .w6w-canvas-note-editor > h2,
5709
+ .w6w-canvas-note-editor > h3,
5710
+ .w6w-canvas-note-editor > h4,
5711
+ .w6w-canvas-note-editor > h5,
5712
+ .w6w-canvas-note-editor > h6 {
5713
+ margin: 0;
5714
+ }
5715
+
5716
+ .w6w-note-resize {
5717
+ position: absolute;
5718
+ right: var(--w6w-sp-0-5);
5719
+ bottom: var(--w6w-sp-0-5);
5720
+ width: 14px;
5721
+ height: 14px;
5722
+ cursor: nwse-resize;
5723
+ pointer-events: auto;
5724
+ touch-action: none;
5725
+ opacity: 0;
5726
+ background: linear-gradient(135deg, transparent 45%, var(--w6w-muted) 45% 52%, transparent 52% 70%, var(--w6w-muted) 70% 77%, transparent 77%);
5727
+ }
5728
+
5729
+ .w6w-canvas-note:hover .w6w-note-resize,
5730
+ .w6w-canvas-note.selected .w6w-note-resize,
5731
+ .w6w-canvas-section.selected .w6w-note-resize {
5732
+ opacity: 1;
5733
+ }
5734
+
5735
+ .w6w-canvas-note-empty {
5736
+ color: var(--w6w-muted);
5737
+ font-style: italic;
5738
+ }
5739
+
5740
+ .w6w-note-toolbar {
5741
+ position: absolute;
5742
+ display: flex;
5743
+ align-items: center;
5744
+ gap: var(--w6w-sp-0-5);
5745
+ padding: var(--w6w-sp-1);
5746
+ background: var(--w6w-panel);
5747
+ color: var(--w6w-text);
5748
+ border: 1px solid var(--w6w-border);
5749
+ border-radius: 10px;
5750
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.18);
5751
+ font-size: var(--w6w-fs-sm);
5752
+ white-space: nowrap;
5753
+ pointer-events: auto;
5754
+ }
5755
+ .w6w-note-toolbar .w6w-icon-btn {
5756
+ gap: var(--w6w-sp-1);
5757
+ padding: var(--w6w-sp-1-5);
5758
+ color: var(--w6w-text);
5759
+ }
5760
+
5761
+ .w6w-note-toolbar-group {
5762
+ position: relative;
5763
+ display: inline-flex;
5764
+ }
5765
+
5766
+ .w6w-note-toolbar-sep {
5767
+ align-self: stretch;
5768
+ width: 1px;
5769
+ margin: var(--w6w-sp-0-5) var(--w6w-sp-0-5);
5770
+ background: var(--w6w-border);
5771
+ }
5772
+
5773
+ .w6w-note-grip {
5774
+ cursor: grab;
5775
+ touch-action: none;
5776
+ }
5777
+
5778
+ .w6w-note-grip:active {
5779
+ cursor: grabbing;
5780
+ }
5781
+
5782
+ .w6w-note-toolbar .w6w-section-title-input {
5783
+ flex: none;
5784
+ width: auto;
5785
+ margin: 0;
5786
+ padding: var(--w6w-sp-1) var(--w6w-sp-1-5);
5787
+ border: 1px solid transparent;
5788
+ border-radius: 6px;
5789
+ background: transparent;
5790
+ color: inherit;
5791
+ font: inherit;
5792
+ font-weight: var(--w6w-fw-semibold);
5793
+ }
5794
+
5795
+ .w6w-note-toolbar .w6w-section-title-input:hover {
5796
+ border-color: var(--w6w-border);
5797
+ }
5798
+
5799
+ .w6w-note-toolbar .w6w-section-title-input:focus {
5800
+ border-color: var(--w6w-accent);
5801
+ outline: none;
5802
+ }
5803
+
5804
+ .w6w-note-size-btn {
5805
+ font-weight: var(--w6w-fw-semibold);
5806
+ }
5807
+
5808
+ .w6w-note-delete:hover {
5809
+ color: var(--w6w-danger);
5810
+ }
5811
+
5812
+ .w6w-note-swatch {
5813
+ width: 16px;
5814
+ height: 16px;
5815
+ border-radius: 50%;
5816
+ background: var(--w6w-canvas-color);
5817
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.15);
5818
+ }
5819
+
5820
+ .w6w-note-menu {
5821
+ position: absolute;
5822
+ top: calc(100% + var(--w6w-sp-2));
5823
+ left: 0;
5824
+ z-index: 1;
5825
+ display: flex;
5826
+ padding: var(--w6w-sp-1);
5827
+ background: var(--w6w-panel);
5828
+ border: 1px solid var(--w6w-border);
5829
+ border-radius: 10px;
5830
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.18);
5831
+ }
5832
+
5833
+ .w6w-note-menu-colors {
5834
+ display: grid;
5835
+ grid-template-columns: repeat(5, 24px);
5836
+ gap: var(--w6w-sp-1-5);
5837
+ padding: var(--w6w-sp-2);
5838
+ }
5839
+
5840
+ .w6w-note-swatch-btn {
5841
+ position: relative;
5842
+ width: 24px;
5843
+ height: 24px;
5844
+ padding: 0;
5845
+ border: 2px solid transparent;
5846
+ border-radius: 50%;
5847
+ background: var(--w6w-canvas-color);
5848
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.15);
5849
+ cursor: pointer;
5850
+ }
5851
+
5852
+ .w6w-note-swatch-btn.active {
5853
+ border-color: var(--w6w-panel);
5854
+ box-shadow: 0 0 0 2px var(--w6w-accent);
5855
+ }
5856
+
5857
+ .w6w-note-swatch-custom {
5858
+ overflow: hidden;
5859
+ background: conic-gradient(#f87171, #facc15, #4ade80, #60a5fa, #a78bfa, #f87171);
5860
+ }
5861
+ .w6w-note-swatch-custom input {
5862
+ position: absolute;
5863
+ inset: 0;
5864
+ width: 100%;
5865
+ height: 100%;
5866
+ opacity: 0;
5867
+ cursor: pointer;
5868
+ }
5869
+
5870
+ .w6w-note-menu-sizes {
5871
+ flex-direction: column;
5872
+ min-width: 150px;
5873
+ }
5874
+
5875
+ .w6w-note-menu-item {
5876
+ padding: var(--w6w-sp-1) var(--w6w-sp-2);
5877
+ border: 0;
5878
+ border-radius: 6px;
5879
+ background: transparent;
5880
+ color: inherit;
5881
+ text-align: left;
5882
+ font-weight: var(--w6w-fw-semibold);
5883
+ cursor: pointer;
5884
+ }
5885
+
5886
+ .w6w-note-menu-item:hover {
5887
+ background: var(--w6w-panel-2);
5888
+ }
5889
+
5890
+ .w6w-note-size-1 {
5891
+ font-size: var(--w6w-fs-xl);
5892
+ }
5893
+
5894
+ .w6w-note-size-2 {
5895
+ font-size: var(--w6w-fs-lg);
5896
+ }
5897
+
5898
+ .w6w-note-size-3 {
5899
+ font-size: var(--w6w-fs-base);
5900
+ }
5901
+
5902
+ .w6w-note-size-0 {
5903
+ font-size: var(--w6w-fs-sm);
5904
+ font-weight: var(--w6w-fw-regular);
5905
+ }
5906
+
5907
+ .w6w-flow-tools {
5908
+ display: flex;
5909
+ align-items: center;
5910
+ gap: var(--w6w-sp-1-5);
5911
+ }
5912
+
5913
+ .w6w-flow-tool {
5914
+ padding: var(--w6w-sp-2);
5915
+ background: var(--w6w-panel);
5916
+ color: var(--w6w-text);
5917
+ border: 1px solid var(--w6w-border);
5918
+ }
5919
+
5920
+ .w6w-flow-tool.active {
5921
+ border-color: var(--w6w-accent);
5922
+ color: var(--w6w-accent);
5923
+ background: color-mix(in srgb, var(--w6w-accent) 12%, var(--w6w-panel));
5924
+ }
5925
+
5926
+ .w6w-section-draw {
5927
+ position: absolute;
5928
+ inset: 0;
5929
+ z-index: 4;
5930
+ cursor: crosshair;
5931
+ touch-action: none;
5932
+ }
5933
+
5934
+ .w6w-section-draw-rect {
5935
+ position: absolute;
5936
+ box-sizing: border-box;
5937
+ border: 2px dashed var(--w6w-accent);
5938
+ border-radius: var(--w6w-radius, 6px);
5939
+ background: color-mix(in srgb, var(--w6w-accent) 10%, transparent);
5940
+ pointer-events: none;
5941
+ }
5942
+
5943
+ /* BudgetMeter — usage-vs-limit bar with a reserved segment.
5944
+ *
5945
+ * Token-only: every colour is a --w6w-* custom property, so a host restyles
5946
+ * the meter (including the over-limit state) by overriding tokens, never by
5947
+ * targeting a hex value here. */
5948
+ .w6w-budget-meter {
5949
+ display: flex;
5950
+ flex-direction: column;
5951
+ gap: var(--w6w-sp-1);
5952
+ }
5953
+
5954
+ .w6w-budget-meter-head {
5955
+ display: flex;
5956
+ align-items: baseline;
5957
+ justify-content: space-between;
5958
+ gap: var(--w6w-sp-2);
5959
+ color: var(--w6w-muted);
5960
+ }
5961
+
5962
+ .w6w-budget-meter-label {
5963
+ color: var(--w6w-text);
5964
+ }
5965
+
5966
+ .w6w-budget-meter-value {
5967
+ font-variant-numeric: tabular-nums;
5968
+ }
5969
+
5970
+ .w6w-budget-meter-track {
5971
+ display: flex;
5972
+ width: 100%;
5973
+ height: 8px;
5974
+ overflow: hidden;
5975
+ background: var(--w6w-panel-2);
5976
+ border: 1px solid var(--w6w-border);
5977
+ border-radius: var(--w6w-radius);
5978
+ }
5979
+
5980
+ .w6w-budget-meter-used {
5981
+ height: 100%;
5982
+ background: var(--w6w-accent);
5983
+ }
5984
+
5985
+ .w6w-budget-meter-reserved {
5986
+ height: 100%;
5987
+ background: var(--w6w-health-degraded);
5988
+ }
5989
+
5990
+ .w6w-budget-meter-over .w6w-budget-meter-used {
5991
+ background: var(--w6w-danger);
5992
+ }
5993
+
5994
+ .w6w-budget-meter-over .w6w-budget-meter-value {
5995
+ color: var(--w6w-danger);
5996
+ }
5997
+
5998
+ /* Markdown: the leading YAML frontmatter, collapsed above the rendered body. The body itself
5999
+ is unstyled here — the host styles it through the `className` it passes. */
6000
+ .w6w-md-frontmatter {
6001
+ margin-bottom: var(--w6w-sp-2);
6002
+ border: 1px solid var(--w6w-border);
6003
+ border-radius: 8px;
6004
+ padding: var(--w6w-sp-1-5) var(--w6w-sp-2-5);
6005
+ font-size: var(--w6w-fs-sm);
6006
+ }
6007
+
6008
+ .w6w-md-frontmatter > summary {
6009
+ cursor: pointer;
6010
+ color: var(--w6w-muted);
6011
+ }
6012
+
6013
+ .w6w-md-frontmatter > pre {
6014
+ margin: var(--w6w-sp-2) 0 0;
6015
+ overflow-x: auto;
6016
+ font-family: var(--w6w-font-mono);
6017
+ white-space: pre-wrap;
6018
+ overflow-wrap: anywhere;
6019
+ }
package/src/styles.scss CHANGED
@@ -61,4 +61,9 @@
61
61
  @use "styles/server-resources";
62
62
  @use "styles/reliability";
63
63
  @use "styles/callable-list";
64
+ @use "styles/data-table";
64
65
  @use "styles/connections";
66
+ @use "styles/empty-state";
67
+ @use "styles/canvas";
68
+ @use "styles/budget-meter";
69
+ @use "styles/markdown";