@w6w/ui 0.1.1 → 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.
- package/CHANGELOG.md +27 -0
- package/README.md +7 -5
- package/dist/AppPicker.d.ts +48 -2
- package/dist/CanvasLayer.d.ts +38 -0
- package/dist/{CodeBlock-Dot3Pd7P.js → CodeBlock-BqXDA35P.js} +2 -2
- package/dist/{CodeBlock-Dot3Pd7P.js.map → CodeBlock-BqXDA35P.js.map} +1 -1
- package/dist/{CodeBlock-CZu4TFSi.cjs → CodeBlock-CulfbnZD.cjs} +2 -2
- package/dist/{CodeBlock-CZu4TFSi.cjs.map → CodeBlock-CulfbnZD.cjs.map} +1 -1
- package/dist/ConfirmModal-Ln99S9NT.js +7919 -0
- package/dist/ConfirmModal-Ln99S9NT.js.map +1 -0
- package/dist/ConfirmModal-fjHW5rN-.cjs +14 -0
- package/dist/ConfirmModal-fjHW5rN-.cjs.map +1 -0
- package/dist/ConnectionHeader.d.ts +19 -0
- package/dist/Copyable-DA6eiU7w.cjs +2 -0
- package/dist/Copyable-DA6eiU7w.cjs.map +1 -0
- package/dist/{Copyable-1niV9gUa.js → Copyable-F4NTaG77.js} +91 -15
- package/dist/Copyable-F4NTaG77.js.map +1 -0
- package/dist/EditConnectionModal.d.ts +26 -0
- package/dist/JsonEditor.d.ts +8 -0
- package/dist/Markdown.d.ts +25 -0
- package/dist/ParamsForm.d.ts +7 -1
- package/dist/StepBuilderModal.d.ts +23 -5
- package/dist/WorkflowFlowEditor.d.ts +14 -3
- package/dist/app-pages.d.ts +5 -0
- package/dist/canvas-types.d.ts +36 -0
- package/dist/canvas-utils.d.ts +44 -0
- package/dist/code.cjs +1 -1
- package/dist/code.mjs +2 -2
- package/dist/components/AuthFieldsForm.d.ts +19 -1
- package/dist/components/BudgetMeter.d.ts +15 -0
- package/dist/components/CallableList.d.ts +58 -0
- package/dist/components/Combobox.d.ts +8 -1
- package/dist/components/ConnectionList.d.ts +43 -0
- package/dist/components/CredentialPicker.d.ts +35 -0
- package/dist/components/DataTable.d.ts +27 -0
- package/dist/components/EmptyState.d.ts +9 -0
- package/dist/components/ListItem.d.ts +16 -6
- package/dist/components/ReliabilityChart.d.ts +10 -0
- package/dist/components/ReliabilityList.d.ts +47 -0
- package/dist/components/icons.d.ts +1 -1
- package/dist/connection-app-meta.d.ts +32 -0
- package/dist/dynamic-fields.d.ts +60 -0
- package/dist/editor-theme.d.ts +24 -0
- package/dist/flow-fanout.d.ts +2 -2
- package/dist/flow-types.d.ts +18 -1
- package/dist/flow-utils.d.ts +10 -3
- package/dist/flow.cjs +2 -2
- package/dist/flow.cjs.map +1 -1
- package/dist/flow.d.ts +9 -0
- package/dist/flow.mjs +1519 -1138
- package/dist/flow.mjs.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +30 -2
- package/dist/index.mjs +2053 -1005
- package/dist/index.mjs.map +1 -1
- package/dist/note-markdown.d.ts +22 -0
- package/dist/provider.d.ts +73 -5
- package/dist/reliability-board-layout.d.ts +121 -0
- package/dist/resolve-params.d.ts +5 -0
- package/dist/run-visuals.d.ts +4 -1
- package/dist/step-problems.d.ts +34 -0
- package/dist/types.d.ts +117 -3
- package/dist/use-dynamic-fields.d.ts +23 -0
- package/package.json +5 -3
- package/src/styles/_budget-meter.scss +46 -0
- package/src/styles/_callable-list.scss +69 -0
- package/src/styles/_canvas.scss +318 -0
- package/src/styles/_connections.scss +88 -0
- package/src/styles/_data-table.scss +55 -0
- package/src/styles/_empty-state.scss +21 -0
- package/src/styles/_flow.scss +11 -0
- package/src/styles/_fx.scss +23 -0
- package/src/styles/_layout.scss +10 -0
- package/src/styles/_lists.scss +4 -0
- package/src/styles/_markdown.scss +20 -0
- package/src/styles/_reliability.scss +339 -0
- package/src/styles/_tester.scss +1 -14
- package/src/styles.css +1142 -17
- package/src/styles.scss +8 -0
- package/dist/ConfirmModal-8avl9Nv8.cjs +0 -11
- package/dist/ConfirmModal-8avl9Nv8.cjs.map +0 -1
- package/dist/ConfirmModal-CD-P8mhN.js +0 -6335
- package/dist/ConfirmModal-CD-P8mhN.js.map +0 -1
- package/dist/Copyable-1niV9gUa.js.map +0 -1
- package/dist/Copyable-CYZU1o4X.cjs +0 -2
- 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
|
|
@@ -2378,6 +2413,11 @@ button.w6w-list-item {
|
|
|
2378
2413
|
font-size: var(--w6w-fs-sm);
|
|
2379
2414
|
}
|
|
2380
2415
|
|
|
2416
|
+
a.w6w-list-item {
|
|
2417
|
+
text-decoration: none;
|
|
2418
|
+
color: inherit;
|
|
2419
|
+
}
|
|
2420
|
+
|
|
2381
2421
|
.w6w-list-item:hover {
|
|
2382
2422
|
background: var(--w6w-panel-2);
|
|
2383
2423
|
}
|
|
@@ -3439,6 +3479,17 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
3439
3479
|
white-space: nowrap;
|
|
3440
3480
|
}
|
|
3441
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
|
+
|
|
3442
3493
|
/* The ordinary (success) ports — bumped from the library's own 6px default
|
|
3443
3494
|
(2026-08-30: "ports must have consistent size") to match the error port
|
|
3444
3495
|
below exactly. `:not(.w6w-handle-multi)`: the multi-input handle is its
|
|
@@ -3643,7 +3694,7 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
3643
3694
|
|
|
3644
3695
|
/* Host-embedded ActionTestForm (studio's ConnectionTesterModal wraps it in its
|
|
3645
3696
|
OWN full modal). The widget then fills that modal as a full-height flex column:
|
|
3646
|
-
the params
|
|
3697
|
+
the params / result / saved-tests cards scroll, and the action bar is a bottom-pinned,
|
|
3647
3698
|
non-scrolling footer. These classes are only applied in `embedded` mode, so the
|
|
3648
3699
|
inline / own-pop-out layout is untouched. */
|
|
3649
3700
|
.w6w-tester-embedded-root {
|
|
@@ -3664,22 +3715,6 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
3664
3715
|
overflow: auto;
|
|
3665
3716
|
}
|
|
3666
3717
|
|
|
3667
|
-
.w6w-tester-embedded-cols {
|
|
3668
|
-
display: flex;
|
|
3669
|
-
gap: var(--w6w-sp-4);
|
|
3670
|
-
align-items: flex-start;
|
|
3671
|
-
}
|
|
3672
|
-
|
|
3673
|
-
.w6w-tester-embedded-main {
|
|
3674
|
-
flex: 1;
|
|
3675
|
-
min-width: 0;
|
|
3676
|
-
}
|
|
3677
|
-
|
|
3678
|
-
.w6w-tester-embedded-rail {
|
|
3679
|
-
width: 260px;
|
|
3680
|
-
flex-shrink: 0;
|
|
3681
|
-
}
|
|
3682
|
-
|
|
3683
3718
|
/* The action bar as a pinned footer: kept out of the scroll region and separated
|
|
3684
3719
|
with a top border so Run / Save / Delete stay visible however long the params. */
|
|
3685
3720
|
.w6w-tester-actions-footer {
|
|
@@ -4892,3 +4927,1093 @@ dialog.w6w-modal.w6w-modal-fullscreen .w6w-modal-header {
|
|
|
4892
4927
|
font-size: var(--w6w-fs-xs);
|
|
4893
4928
|
white-space: nowrap;
|
|
4894
4929
|
}
|
|
4930
|
+
|
|
4931
|
+
/* --- ReliabilityList / ReliabilityChart ---------------------------------- */
|
|
4932
|
+
/* The service-reliability board: "needs attention" cards, a calls x p95
|
|
4933
|
+
scatter and the services table. State colour throughout comes from the
|
|
4934
|
+
shared `--w6w-health-*` tokens via HealthStatusPill and UptimeStrip (and,
|
|
4935
|
+
for the scatter, read directly) — never from a colour written here.
|
|
4936
|
+
Every navigation site (card, service cell, scatter point) may be an `<a>`,
|
|
4937
|
+
a `<button>` or a plain element, so the shared rules reset all three. */
|
|
4938
|
+
.w6w-rel-section {
|
|
4939
|
+
margin-bottom: var(--w6w-sp-6);
|
|
4940
|
+
}
|
|
4941
|
+
|
|
4942
|
+
.w6w-rel-heading {
|
|
4943
|
+
margin: 0 0 var(--w6w-sp-2);
|
|
4944
|
+
display: flex;
|
|
4945
|
+
align-items: baseline;
|
|
4946
|
+
justify-content: space-between;
|
|
4947
|
+
gap: var(--w6w-sp-3);
|
|
4948
|
+
}
|
|
4949
|
+
|
|
4950
|
+
.w6w-rel-intro {
|
|
4951
|
+
margin: 0 0 var(--w6w-sp-2);
|
|
4952
|
+
}
|
|
4953
|
+
|
|
4954
|
+
.w6w-rel-card {
|
|
4955
|
+
background: var(--w6w-panel);
|
|
4956
|
+
border: 1px solid var(--w6w-border);
|
|
4957
|
+
border-radius: var(--w6w-radius);
|
|
4958
|
+
padding: var(--w6w-sp-4);
|
|
4959
|
+
}
|
|
4960
|
+
|
|
4961
|
+
.w6w-rel-card h4 {
|
|
4962
|
+
margin: 0 0 var(--w6w-sp-2);
|
|
4963
|
+
}
|
|
4964
|
+
|
|
4965
|
+
.w6w-rel-tag {
|
|
4966
|
+
display: inline-block;
|
|
4967
|
+
background: var(--w6w-panel-2);
|
|
4968
|
+
border: 1px solid var(--w6w-border);
|
|
4969
|
+
border-radius: 999px;
|
|
4970
|
+
padding: var(--w6w-sp-0-5) var(--w6w-sp-2);
|
|
4971
|
+
font-size: var(--w6w-fs-xs);
|
|
4972
|
+
color: var(--w6w-muted);
|
|
4973
|
+
margin-right: var(--w6w-sp-1);
|
|
4974
|
+
}
|
|
4975
|
+
|
|
4976
|
+
.w6w-rel-group + .w6w-rel-group {
|
|
4977
|
+
margin-top: var(--w6w-sp-5);
|
|
4978
|
+
}
|
|
4979
|
+
|
|
4980
|
+
.w6w-rel-group-head {
|
|
4981
|
+
margin: 0 0 var(--w6w-sp-2);
|
|
4982
|
+
font-size: var(--w6w-fs-sm);
|
|
4983
|
+
}
|
|
4984
|
+
|
|
4985
|
+
/* The "N more — view all" line under a capped section. */
|
|
4986
|
+
.w6w-rel-more-note {
|
|
4987
|
+
margin: var(--w6w-sp-2) 0 0;
|
|
4988
|
+
}
|
|
4989
|
+
|
|
4990
|
+
/* --- "Needs attention" callout — a few dense cards, not table rows -------- */
|
|
4991
|
+
.w6w-rel-issues {
|
|
4992
|
+
display: grid;
|
|
4993
|
+
/* `auto-fit`, not `auto-fill`: with fewer cards than fit the row, `auto-fill`
|
|
4994
|
+
keeps empty width-reserving tracks and the cards stop short of the edge. */
|
|
4995
|
+
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
|
4996
|
+
gap: var(--w6w-sp-2);
|
|
4997
|
+
}
|
|
4998
|
+
|
|
4999
|
+
.w6w-rel-issue-card {
|
|
5000
|
+
display: flex;
|
|
5001
|
+
flex-direction: column;
|
|
5002
|
+
gap: var(--w6w-sp-2);
|
|
5003
|
+
padding: var(--w6w-sp-3);
|
|
5004
|
+
background: var(--w6w-panel);
|
|
5005
|
+
border: 1px solid var(--w6w-border);
|
|
5006
|
+
/* Same `--w6w-health-*` tokens as the pills inside, so the stripe cannot
|
|
5007
|
+
drift from the pill beside it. `down` on either signal escalates it. */
|
|
5008
|
+
border-left: 3px solid var(--w6w-health-degraded);
|
|
5009
|
+
border-radius: var(--w6w-radius);
|
|
5010
|
+
color: inherit;
|
|
5011
|
+
text-decoration: none;
|
|
5012
|
+
/* button reset (the card is a <button> when only `onOpen` is given) */
|
|
5013
|
+
font: inherit;
|
|
5014
|
+
text-align: left;
|
|
5015
|
+
width: 100%;
|
|
5016
|
+
cursor: pointer;
|
|
5017
|
+
}
|
|
5018
|
+
|
|
5019
|
+
div.w6w-rel-issue-card {
|
|
5020
|
+
cursor: default;
|
|
5021
|
+
}
|
|
5022
|
+
|
|
5023
|
+
.w6w-rel-issue-card:has(.w6w-health-pill-down) {
|
|
5024
|
+
border-left-color: var(--w6w-health-down);
|
|
5025
|
+
}
|
|
5026
|
+
|
|
5027
|
+
a.w6w-rel-issue-card:hover,
|
|
5028
|
+
a.w6w-rel-issue-card:focus-visible,
|
|
5029
|
+
button.w6w-rel-issue-card:hover,
|
|
5030
|
+
button.w6w-rel-issue-card:focus-visible {
|
|
5031
|
+
border-color: var(--w6w-accent);
|
|
5032
|
+
}
|
|
5033
|
+
|
|
5034
|
+
.w6w-rel-issue-head {
|
|
5035
|
+
display: flex;
|
|
5036
|
+
align-items: center;
|
|
5037
|
+
gap: var(--w6w-sp-2);
|
|
5038
|
+
}
|
|
5039
|
+
|
|
5040
|
+
.w6w-rel-issue-head-text {
|
|
5041
|
+
display: flex;
|
|
5042
|
+
flex-direction: column;
|
|
5043
|
+
gap: var(--w6w-sp-0-5);
|
|
5044
|
+
min-width: 0;
|
|
5045
|
+
}
|
|
5046
|
+
|
|
5047
|
+
.w6w-rel-issue-signals {
|
|
5048
|
+
display: flex;
|
|
5049
|
+
gap: var(--w6w-sp-4);
|
|
5050
|
+
}
|
|
5051
|
+
|
|
5052
|
+
.w6w-rel-issue-signal {
|
|
5053
|
+
display: flex;
|
|
5054
|
+
flex-direction: column;
|
|
5055
|
+
gap: var(--w6w-sp-0-5);
|
|
5056
|
+
}
|
|
5057
|
+
|
|
5058
|
+
/* --- Performance scatter — calls x p95, one point per API ----------------- */
|
|
5059
|
+
.w6w-rel-scatter svg {
|
|
5060
|
+
display: block;
|
|
5061
|
+
width: 100%;
|
|
5062
|
+
height: auto;
|
|
5063
|
+
}
|
|
5064
|
+
|
|
5065
|
+
/* SVG shapes have no fill unless one is set here; without it the plot
|
|
5066
|
+
renders as SVG's default opaque black regardless of theme. */
|
|
5067
|
+
.w6w-rel-scatter-plot-bg {
|
|
5068
|
+
fill: var(--w6w-panel-2);
|
|
5069
|
+
}
|
|
5070
|
+
|
|
5071
|
+
.w6w-rel-scatter-grid {
|
|
5072
|
+
stroke: var(--w6w-border);
|
|
5073
|
+
stroke-width: 1;
|
|
5074
|
+
}
|
|
5075
|
+
|
|
5076
|
+
.w6w-rel-scatter-axis-label {
|
|
5077
|
+
fill: var(--w6w-muted);
|
|
5078
|
+
font-size: var(--w6w-fs-xs);
|
|
5079
|
+
}
|
|
5080
|
+
|
|
5081
|
+
.w6w-rel-scatter-axis-title {
|
|
5082
|
+
fill: var(--w6w-muted);
|
|
5083
|
+
font-size: var(--w6w-fs-xs);
|
|
5084
|
+
}
|
|
5085
|
+
|
|
5086
|
+
/* The point's coloured ring — carries exec status. */
|
|
5087
|
+
.w6w-rel-scatter-ring {
|
|
5088
|
+
fill: var(--w6w-panel);
|
|
5089
|
+
stroke-width: 2;
|
|
5090
|
+
}
|
|
5091
|
+
|
|
5092
|
+
.w6w-rel-scatter-ring-ok {
|
|
5093
|
+
stroke: var(--w6w-health-ok);
|
|
5094
|
+
}
|
|
5095
|
+
|
|
5096
|
+
.w6w-rel-scatter-ring-degraded {
|
|
5097
|
+
stroke: var(--w6w-health-degraded);
|
|
5098
|
+
}
|
|
5099
|
+
|
|
5100
|
+
.w6w-rel-scatter-ring-down {
|
|
5101
|
+
stroke: var(--w6w-health-down);
|
|
5102
|
+
}
|
|
5103
|
+
|
|
5104
|
+
.w6w-rel-scatter-ring-unknown {
|
|
5105
|
+
stroke: var(--w6w-health-unknown);
|
|
5106
|
+
}
|
|
5107
|
+
|
|
5108
|
+
.w6w-rel-scatter-point-link {
|
|
5109
|
+
cursor: pointer;
|
|
5110
|
+
}
|
|
5111
|
+
|
|
5112
|
+
.w6w-rel-scatter-point-link:hover .w6w-rel-scatter-ring,
|
|
5113
|
+
.w6w-rel-scatter-point-link:focus-visible .w6w-rel-scatter-ring {
|
|
5114
|
+
stroke-width: 3;
|
|
5115
|
+
}
|
|
5116
|
+
|
|
5117
|
+
.w6w-rel-scatter-point {
|
|
5118
|
+
stroke: var(--w6w-panel);
|
|
5119
|
+
stroke-width: 1.5;
|
|
5120
|
+
fill-opacity: 0.85;
|
|
5121
|
+
}
|
|
5122
|
+
|
|
5123
|
+
.w6w-rel-scatter-point-ok {
|
|
5124
|
+
fill: var(--w6w-health-ok);
|
|
5125
|
+
}
|
|
5126
|
+
|
|
5127
|
+
.w6w-rel-scatter-point-degraded {
|
|
5128
|
+
fill: var(--w6w-health-degraded);
|
|
5129
|
+
}
|
|
5130
|
+
|
|
5131
|
+
.w6w-rel-scatter-point-down {
|
|
5132
|
+
fill: var(--w6w-health-down);
|
|
5133
|
+
}
|
|
5134
|
+
|
|
5135
|
+
.w6w-rel-scatter-point-unknown {
|
|
5136
|
+
fill: var(--w6w-health-unknown);
|
|
5137
|
+
}
|
|
5138
|
+
|
|
5139
|
+
.w6w-rel-scatter-note {
|
|
5140
|
+
margin: var(--w6w-sp-1) 0 0;
|
|
5141
|
+
}
|
|
5142
|
+
|
|
5143
|
+
/* --- The full roster — one real <table> ------------------------------------ */
|
|
5144
|
+
.w6w-rel-table-wrap {
|
|
5145
|
+
overflow-x: auto;
|
|
5146
|
+
}
|
|
5147
|
+
|
|
5148
|
+
.w6w-rel-table {
|
|
5149
|
+
width: 100%;
|
|
5150
|
+
border-collapse: collapse;
|
|
5151
|
+
}
|
|
5152
|
+
|
|
5153
|
+
.w6w-rel-table th {
|
|
5154
|
+
padding: var(--w6w-sp-2) var(--w6w-sp-3);
|
|
5155
|
+
text-align: left;
|
|
5156
|
+
font-size: var(--w6w-fs-xs);
|
|
5157
|
+
font-weight: var(--w6w-fw-semibold);
|
|
5158
|
+
color: var(--w6w-muted);
|
|
5159
|
+
border-bottom: 1px solid var(--w6w-border);
|
|
5160
|
+
white-space: nowrap;
|
|
5161
|
+
}
|
|
5162
|
+
|
|
5163
|
+
.w6w-rel-table td {
|
|
5164
|
+
padding: var(--w6w-sp-2-5) var(--w6w-sp-3);
|
|
5165
|
+
border-bottom: 1px solid var(--w6w-border);
|
|
5166
|
+
vertical-align: top;
|
|
5167
|
+
}
|
|
5168
|
+
|
|
5169
|
+
/* Inside a compact card there is no rule under the last row. */
|
|
5170
|
+
.w6w-rel-card .w6w-rel-table tbody tr:last-child td {
|
|
5171
|
+
border-bottom: none;
|
|
5172
|
+
}
|
|
5173
|
+
|
|
5174
|
+
.w6w-rel-table tbody tr:hover {
|
|
5175
|
+
background: var(--w6w-panel-2);
|
|
5176
|
+
}
|
|
5177
|
+
|
|
5178
|
+
/* A row's own stripe — same tokens and escalation as the issue card; both the
|
|
5179
|
+
tier and the state that select the token are decided server-side. */
|
|
5180
|
+
.w6w-rel-tr.w6w-rel-attention {
|
|
5181
|
+
box-shadow: inset 3px 0 0 var(--w6w-health-degraded);
|
|
5182
|
+
}
|
|
5183
|
+
|
|
5184
|
+
.w6w-rel-tr.w6w-rel-attention:has(.w6w-health-pill-down) {
|
|
5185
|
+
box-shadow: inset 3px 0 0 var(--w6w-health-down);
|
|
5186
|
+
}
|
|
5187
|
+
|
|
5188
|
+
.w6w-rel-tr[data-attention=recent] {
|
|
5189
|
+
box-shadow: inset 3px 0 0 var(--w6w-health-unknown);
|
|
5190
|
+
}
|
|
5191
|
+
|
|
5192
|
+
.w6w-rel-open {
|
|
5193
|
+
display: flex;
|
|
5194
|
+
align-items: center;
|
|
5195
|
+
gap: var(--w6w-sp-2);
|
|
5196
|
+
color: inherit;
|
|
5197
|
+
text-decoration: none;
|
|
5198
|
+
/* button reset (the cell is a <button> when only `onOpen` is given) */
|
|
5199
|
+
font: inherit;
|
|
5200
|
+
text-align: left;
|
|
5201
|
+
background: none;
|
|
5202
|
+
border: 0;
|
|
5203
|
+
padding: 0;
|
|
5204
|
+
}
|
|
5205
|
+
|
|
5206
|
+
a.w6w-rel-open,
|
|
5207
|
+
button.w6w-rel-open {
|
|
5208
|
+
cursor: pointer;
|
|
5209
|
+
}
|
|
5210
|
+
|
|
5211
|
+
.w6w-rel-td-service-text {
|
|
5212
|
+
display: flex;
|
|
5213
|
+
flex-direction: column;
|
|
5214
|
+
gap: var(--w6w-sp-0-5);
|
|
5215
|
+
min-width: 0;
|
|
5216
|
+
}
|
|
5217
|
+
|
|
5218
|
+
.w6w-rel-td-service strong {
|
|
5219
|
+
overflow-wrap: anywhere;
|
|
5220
|
+
}
|
|
5221
|
+
|
|
5222
|
+
a.w6w-rel-open:hover strong,
|
|
5223
|
+
a.w6w-rel-open:focus-visible strong,
|
|
5224
|
+
button.w6w-rel-open:hover strong,
|
|
5225
|
+
button.w6w-rel-open:focus-visible strong {
|
|
5226
|
+
color: var(--w6w-accent);
|
|
5227
|
+
}
|
|
5228
|
+
|
|
5229
|
+
.w6w-rel-td-uptime {
|
|
5230
|
+
min-width: 220px;
|
|
5231
|
+
}
|
|
5232
|
+
|
|
5233
|
+
.w6w-rel-td-uptime .w6w-uptime-strip {
|
|
5234
|
+
max-width: 260px;
|
|
5235
|
+
}
|
|
5236
|
+
|
|
5237
|
+
/* A single short value ("397 ms" / "—"); no caption, whose varying length
|
|
5238
|
+
destabilised this column's `auto` layout. */
|
|
5239
|
+
.w6w-rel-td-p95 {
|
|
5240
|
+
white-space: nowrap;
|
|
5241
|
+
}
|
|
5242
|
+
|
|
5243
|
+
/* Both signals stacked as one line each ("Ops: <pill>" / "API: <pill>") rather
|
|
5244
|
+
than two columns, so the table fits a smaller screen without scrolling. */
|
|
5245
|
+
.w6w-rel-td-status {
|
|
5246
|
+
display: flex;
|
|
5247
|
+
flex-direction: column;
|
|
5248
|
+
gap: var(--w6w-sp-1);
|
|
5249
|
+
min-width: 140px;
|
|
5250
|
+
}
|
|
5251
|
+
|
|
5252
|
+
.w6w-rel-status-row {
|
|
5253
|
+
display: flex;
|
|
5254
|
+
align-items: center;
|
|
5255
|
+
flex-wrap: wrap;
|
|
5256
|
+
gap: var(--w6w-sp-1-5);
|
|
5257
|
+
}
|
|
5258
|
+
|
|
5259
|
+
.w6w-rel-status-label {
|
|
5260
|
+
min-width: 28px;
|
|
5261
|
+
}
|
|
5262
|
+
|
|
5263
|
+
/* Within a status ROW the signal reads inline, beside its label — the issue
|
|
5264
|
+
card's own use of `.w6w-rel-signal` (label above pill) is unaffected. */
|
|
5265
|
+
.w6w-rel-status-row .w6w-rel-signal {
|
|
5266
|
+
flex-direction: row;
|
|
5267
|
+
align-items: center;
|
|
5268
|
+
flex-wrap: wrap;
|
|
5269
|
+
}
|
|
5270
|
+
|
|
5271
|
+
/* One labelled signal inside a state cell/card — label ABOVE its pill, so two
|
|
5272
|
+
labelled pills in a narrow column do not wrap unpredictably. */
|
|
5273
|
+
.w6w-rel-signal {
|
|
5274
|
+
display: flex;
|
|
5275
|
+
flex-direction: column;
|
|
5276
|
+
align-items: flex-start;
|
|
5277
|
+
gap: var(--w6w-sp-0-5);
|
|
5278
|
+
min-width: 0;
|
|
5279
|
+
}
|
|
5280
|
+
|
|
5281
|
+
.w6w-rel-vendor-msg {
|
|
5282
|
+
color: var(--w6w-muted);
|
|
5283
|
+
/* The API's own incident title — clamped, full text in the row's `title`, so
|
|
5284
|
+
one verbose status page cannot stretch a board row. */
|
|
5285
|
+
display: -webkit-box;
|
|
5286
|
+
-webkit-line-clamp: 2;
|
|
5287
|
+
-webkit-box-orient: vertical;
|
|
5288
|
+
overflow: hidden;
|
|
5289
|
+
overflow-wrap: anywhere;
|
|
5290
|
+
}
|
|
5291
|
+
|
|
5292
|
+
/* A service the account never called: no strip, just a note. */
|
|
5293
|
+
.w6w-rel-idle-note {
|
|
5294
|
+
font-size: var(--w6w-fs-xs);
|
|
5295
|
+
font-style: italic;
|
|
5296
|
+
color: var(--w6w-text);
|
|
5297
|
+
}
|
|
5298
|
+
|
|
5299
|
+
.w6w-rel-allclear {
|
|
5300
|
+
margin-bottom: var(--w6w-sp-4);
|
|
5301
|
+
}
|
|
5302
|
+
|
|
5303
|
+
.w6w-rel-allclear p {
|
|
5304
|
+
margin: 0 0 var(--w6w-sp-1-5);
|
|
5305
|
+
}
|
|
5306
|
+
|
|
5307
|
+
@media (max-width: 900px) {
|
|
5308
|
+
/* The table scrolls inside `.w6w-rel-table-wrap` rather than reflowing —
|
|
5309
|
+
4 columns of pills and a strip cannot usefully stack. */
|
|
5310
|
+
.w6w-rel-table {
|
|
5311
|
+
min-width: 600px;
|
|
5312
|
+
}
|
|
5313
|
+
}
|
|
5314
|
+
/* "Show all services →" when only `onShowAll` is given: a <button> that reads as the link. */
|
|
5315
|
+
.w6w-rel-show-all {
|
|
5316
|
+
font: inherit;
|
|
5317
|
+
background: none;
|
|
5318
|
+
border: 0;
|
|
5319
|
+
padding: 0;
|
|
5320
|
+
color: inherit;
|
|
5321
|
+
cursor: pointer;
|
|
5322
|
+
}
|
|
5323
|
+
|
|
5324
|
+
.w6w-rel-show-all:hover,
|
|
5325
|
+
.w6w-rel-show-all:focus-visible {
|
|
5326
|
+
color: var(--w6w-accent);
|
|
5327
|
+
}
|
|
5328
|
+
|
|
5329
|
+
.w6w-callable-list {
|
|
5330
|
+
display: flex;
|
|
5331
|
+
flex-direction: column;
|
|
5332
|
+
gap: var(--w6w-sp-4);
|
|
5333
|
+
}
|
|
5334
|
+
|
|
5335
|
+
.w6w-callable-list-head {
|
|
5336
|
+
display: flex;
|
|
5337
|
+
justify-content: space-between;
|
|
5338
|
+
align-items: flex-start;
|
|
5339
|
+
gap: var(--w6w-sp-4);
|
|
5340
|
+
}
|
|
5341
|
+
|
|
5342
|
+
.w6w-callable-list-heading {
|
|
5343
|
+
display: flex;
|
|
5344
|
+
flex-direction: column;
|
|
5345
|
+
gap: var(--w6w-sp-1);
|
|
5346
|
+
min-width: 0;
|
|
5347
|
+
}
|
|
5348
|
+
|
|
5349
|
+
.w6w-callable-list-title {
|
|
5350
|
+
margin: 0;
|
|
5351
|
+
}
|
|
5352
|
+
|
|
5353
|
+
.w6w-callable-list-description {
|
|
5354
|
+
margin: 0;
|
|
5355
|
+
}
|
|
5356
|
+
|
|
5357
|
+
.w6w-callable-list-toggle {
|
|
5358
|
+
display: flex;
|
|
5359
|
+
align-items: center;
|
|
5360
|
+
gap: var(--w6w-sp-2);
|
|
5361
|
+
cursor: pointer;
|
|
5362
|
+
}
|
|
5363
|
+
|
|
5364
|
+
.w6w-callable-list-actions {
|
|
5365
|
+
display: flex;
|
|
5366
|
+
gap: var(--w6w-sp-2);
|
|
5367
|
+
flex-shrink: 0;
|
|
5368
|
+
white-space: nowrap;
|
|
5369
|
+
}
|
|
5370
|
+
|
|
5371
|
+
.w6w-callable-list-body {
|
|
5372
|
+
border: 1px solid var(--w6w-border);
|
|
5373
|
+
border-radius: 8px;
|
|
5374
|
+
background: var(--w6w-panel);
|
|
5375
|
+
overflow: hidden;
|
|
5376
|
+
}
|
|
5377
|
+
|
|
5378
|
+
.w6w-callable-list-main {
|
|
5379
|
+
display: flex;
|
|
5380
|
+
flex-direction: column;
|
|
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%;
|
|
5391
|
+
}
|
|
5392
|
+
|
|
5393
|
+
.w6w-callable-list-trail {
|
|
5394
|
+
display: inline-flex;
|
|
5395
|
+
align-items: center;
|
|
5396
|
+
gap: var(--w6w-sp-2);
|
|
5397
|
+
}
|
|
5398
|
+
|
|
5399
|
+
.w6w-callable-list-badge {
|
|
5400
|
+
padding: var(--w6w-sp-0-5) var(--w6w-sp-2);
|
|
5401
|
+
border-radius: 999px;
|
|
5402
|
+
border: 1px solid var(--w6w-border);
|
|
5403
|
+
color: var(--w6w-muted);
|
|
5404
|
+
font-size: var(--w6w-fs-xs);
|
|
5405
|
+
}
|
|
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
|
+
|
|
5476
|
+
/* Connections (D-12u): ConnectionList, ConnectionHeader and the state tags they share. */
|
|
5477
|
+
.w6w-connection-list {
|
|
5478
|
+
display: flex;
|
|
5479
|
+
flex-direction: column;
|
|
5480
|
+
gap: var(--w6w-sp-3);
|
|
5481
|
+
}
|
|
5482
|
+
|
|
5483
|
+
.w6w-connection-list-head {
|
|
5484
|
+
display: flex;
|
|
5485
|
+
justify-content: space-between;
|
|
5486
|
+
align-items: flex-start;
|
|
5487
|
+
gap: var(--w6w-sp-4);
|
|
5488
|
+
}
|
|
5489
|
+
|
|
5490
|
+
.w6w-connection-list-heading {
|
|
5491
|
+
min-width: 0;
|
|
5492
|
+
}
|
|
5493
|
+
|
|
5494
|
+
.w6w-connection-list-actions {
|
|
5495
|
+
display: flex;
|
|
5496
|
+
gap: var(--w6w-sp-2);
|
|
5497
|
+
flex-shrink: 0;
|
|
5498
|
+
}
|
|
5499
|
+
|
|
5500
|
+
.w6w-connection-cell-name {
|
|
5501
|
+
display: inline-flex;
|
|
5502
|
+
align-items: center;
|
|
5503
|
+
gap: var(--w6w-sp-2);
|
|
5504
|
+
}
|
|
5505
|
+
|
|
5506
|
+
.w6w-connection-row-actions {
|
|
5507
|
+
display: flex;
|
|
5508
|
+
gap: var(--w6w-sp-1-5);
|
|
5509
|
+
flex-shrink: 0;
|
|
5510
|
+
}
|
|
5511
|
+
|
|
5512
|
+
.w6w-connection-name {
|
|
5513
|
+
margin-right: var(--w6w-sp-2);
|
|
5514
|
+
}
|
|
5515
|
+
|
|
5516
|
+
/* State tags (connected / needs attention / invalid). */
|
|
5517
|
+
.w6w-connection-tag {
|
|
5518
|
+
display: inline-block;
|
|
5519
|
+
background: var(--w6w-panel-2);
|
|
5520
|
+
border: 1px solid var(--w6w-border);
|
|
5521
|
+
border-radius: 999px;
|
|
5522
|
+
padding: var(--w6w-sp-0-5) var(--w6w-sp-2);
|
|
5523
|
+
font-size: var(--w6w-fs-xs);
|
|
5524
|
+
margin-right: var(--w6w-sp-1);
|
|
5525
|
+
}
|
|
5526
|
+
|
|
5527
|
+
.w6w-connection-tag-warn {
|
|
5528
|
+
color: #ffb86b;
|
|
5529
|
+
border-color: #ffb86b;
|
|
5530
|
+
}
|
|
5531
|
+
|
|
5532
|
+
.w6w-connection-tag-danger {
|
|
5533
|
+
color: var(--w6w-danger);
|
|
5534
|
+
border-color: var(--w6w-danger);
|
|
5535
|
+
}
|
|
5536
|
+
|
|
5537
|
+
/* ConnectionHeader */
|
|
5538
|
+
.w6w-connection-header {
|
|
5539
|
+
display: flex;
|
|
5540
|
+
align-items: center;
|
|
5541
|
+
gap: var(--w6w-sp-3);
|
|
5542
|
+
}
|
|
5543
|
+
|
|
5544
|
+
.w6w-connection-header-main {
|
|
5545
|
+
flex: 1;
|
|
5546
|
+
min-width: 0;
|
|
5547
|
+
}
|
|
5548
|
+
|
|
5549
|
+
.w6w-connection-header-title {
|
|
5550
|
+
margin: 0;
|
|
5551
|
+
}
|
|
5552
|
+
|
|
5553
|
+
.w6w-connection-header-meta {
|
|
5554
|
+
margin: 0;
|
|
5555
|
+
}
|
|
5556
|
+
|
|
5557
|
+
.w6w-connection-header-actions {
|
|
5558
|
+
display: flex;
|
|
5559
|
+
gap: var(--w6w-sp-1-5);
|
|
5560
|
+
align-items: center;
|
|
5561
|
+
}
|
|
5562
|
+
|
|
5563
|
+
/* The id's copy button appears on hover/focus only. */
|
|
5564
|
+
.w6w-connection-id-copy.w6w-copyable {
|
|
5565
|
+
display: inline-flex;
|
|
5566
|
+
width: auto;
|
|
5567
|
+
min-width: 0;
|
|
5568
|
+
vertical-align: middle;
|
|
5569
|
+
}
|
|
5570
|
+
|
|
5571
|
+
.w6w-connection-id-copy .w6w-copyable-btn {
|
|
5572
|
+
opacity: 0;
|
|
5573
|
+
}
|
|
5574
|
+
|
|
5575
|
+
.w6w-connection-id-copy:hover .w6w-copyable-btn,
|
|
5576
|
+
.w6w-connection-id-copy:focus-within .w6w-copyable-btn {
|
|
5577
|
+
opacity: 1;
|
|
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
|
+
}
|