@ponchia/ui 0.6.6 → 0.6.8
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 +175 -6
- package/README.md +38 -25
- package/annotations/index.d.ts.map +1 -1
- package/annotations/index.js +21 -3
- package/behaviors/carousel.d.ts.map +1 -1
- package/behaviors/carousel.js +91 -32
- package/behaviors/combobox.d.ts.map +1 -1
- package/behaviors/combobox.js +117 -43
- package/behaviors/command.d.ts.map +1 -1
- package/behaviors/command.js +74 -14
- package/behaviors/connectors.d.ts.map +1 -1
- package/behaviors/connectors.js +92 -9
- package/behaviors/crosshair.d.ts.map +1 -1
- package/behaviors/crosshair.js +47 -1
- package/behaviors/dialog.d.ts.map +1 -1
- package/behaviors/dialog.js +37 -16
- package/behaviors/disclosure.d.ts.map +1 -1
- package/behaviors/disclosure.js +33 -3
- package/behaviors/dismissible.d.ts.map +1 -1
- package/behaviors/dismissible.js +3 -2
- package/behaviors/forms.d.ts.map +1 -1
- package/behaviors/forms.js +78 -5
- package/behaviors/glyph.d.ts.map +1 -1
- package/behaviors/glyph.js +17 -2
- package/behaviors/index.d.ts +2 -0
- package/behaviors/index.d.ts.map +1 -1
- package/behaviors/index.js +2 -0
- package/behaviors/inert.js +3 -2
- package/behaviors/internal.d.ts +2 -1
- package/behaviors/internal.d.ts.map +1 -1
- package/behaviors/internal.js +25 -4
- package/behaviors/legend.d.ts +0 -5
- package/behaviors/legend.d.ts.map +1 -1
- package/behaviors/legend.js +78 -14
- package/behaviors/menu.d.ts.map +1 -1
- package/behaviors/menu.js +13 -8
- package/behaviors/modal.d.ts.map +1 -1
- package/behaviors/modal.js +77 -19
- package/behaviors/popover.d.ts +4 -3
- package/behaviors/popover.d.ts.map +1 -1
- package/behaviors/popover.js +89 -9
- package/behaviors/sources.d.ts.map +1 -1
- package/behaviors/sources.js +14 -2
- package/behaviors/splitter.d.ts +26 -0
- package/behaviors/splitter.d.ts.map +1 -0
- package/behaviors/splitter.js +239 -0
- package/behaviors/spotlight.d.ts.map +1 -1
- package/behaviors/spotlight.js +28 -2
- package/behaviors/table.d.ts.map +1 -1
- package/behaviors/table.js +105 -13
- package/behaviors/tabs.d.ts.map +1 -1
- package/behaviors/tabs.js +82 -18
- package/behaviors/theme.d.ts.map +1 -1
- package/behaviors/theme.js +26 -6
- package/classes/classes.json +230 -4
- package/classes/index.d.ts +64 -3
- package/classes/index.js +56 -2
- package/classes/vscode.css-custom-data.json +1 -1
- package/connectors/index.d.ts +39 -6
- package/connectors/index.d.ts.map +1 -1
- package/connectors/index.js +67 -9
- package/css/analytical.css +3 -1
- package/css/annotations.css +12 -0
- package/css/app.css +4 -4
- package/css/clamp.css +92 -0
- package/css/crosshair.css +27 -2
- package/css/feedback.css +2 -30
- package/css/figure.css +102 -0
- package/css/highlights.css +50 -0
- package/css/interval.css +90 -0
- package/css/navigation.css +12 -0
- package/css/primitives.css +2 -3
- package/css/report-kit.css +38 -0
- package/css/report.css +23 -4
- package/css/sidenote.css +12 -2
- package/css/site.css +2 -1
- package/css/sources.css +5 -0
- package/css/state.css +120 -1
- package/css/table.css +4 -0
- package/css/tokens.css +25 -9
- package/css/workbench.css +101 -8
- package/dist/bronto.css +1 -1
- package/dist/css/analytical.css +1 -1
- package/dist/css/annotations.css +1 -1
- package/dist/css/app.css +1 -1
- package/dist/css/clamp.css +1 -0
- package/dist/css/crosshair.css +1 -1
- package/dist/css/feedback.css +1 -1
- package/dist/css/figure.css +1 -0
- package/dist/css/highlights.css +1 -0
- package/dist/css/interval.css +1 -0
- package/dist/css/navigation.css +1 -1
- package/dist/css/primitives.css +1 -1
- package/dist/css/report-kit.css +1 -0
- package/dist/css/report.css +1 -1
- package/dist/css/sidenote.css +1 -1
- package/dist/css/site.css +1 -1
- package/dist/css/sources.css +1 -1
- package/dist/css/state.css +1 -1
- package/dist/css/table.css +1 -1
- package/dist/css/tokens.css +1 -1
- package/dist/css/workbench.css +1 -1
- package/docs/adr/0001-color-system.md +3 -2
- package/docs/adr/0002-scope-and-2026-baseline.md +1 -1
- package/docs/annotations.md +12 -1
- package/docs/architecture.md +105 -48
- package/docs/clamp.md +49 -0
- package/docs/command.md +4 -1
- package/docs/connectors.md +16 -0
- package/docs/contrast.md +34 -24
- package/docs/crosshair.md +1 -1
- package/docs/d2.md +37 -0
- package/docs/dots.md +4 -1
- package/docs/figure.md +71 -0
- package/docs/frontier-primitives.md +25 -24
- package/docs/glyphs.md +11 -0
- package/docs/highlights.md +52 -0
- package/docs/interop/tailwind.md +148 -0
- package/docs/interval.md +55 -0
- package/docs/legends.md +3 -2
- package/docs/mermaid.md +6 -0
- package/docs/migrations/0.2-to-0.3.md +80 -0
- package/docs/migrations/0.3-to-0.4.md +48 -0
- package/docs/migrations/0.4-to-0.5.md +96 -0
- package/docs/migrations/0.5-to-0.6.md +82 -0
- package/docs/package-contract.md +44 -6
- package/docs/reference.md +78 -5
- package/docs/reporting.md +126 -60
- package/docs/sidenote.md +7 -1
- package/docs/sources.md +1 -1
- package/docs/stability.md +23 -5
- package/docs/state.md +67 -10
- package/docs/theming.md +12 -4
- package/docs/usage.md +47 -13
- package/docs/vega.md +4 -4
- package/docs/workbench.md +59 -18
- package/llms.txt +89 -16
- package/package.json +82 -6
- package/qwik/index.d.ts +1 -0
- package/qwik/index.d.ts.map +1 -1
- package/qwik/index.js +26 -21
- package/react/index.d.ts +1 -0
- package/react/index.d.ts.map +1 -1
- package/react/index.js +4 -1
- package/schemas/report-claims.v1.schema.json +137 -0
- package/solid/index.d.ts +2 -0
- package/solid/index.d.ts.map +1 -1
- package/solid/index.js +3 -0
- package/svelte/index.d.ts +114 -0
- package/svelte/index.d.ts.map +1 -0
- package/svelte/index.js +193 -0
- package/tailwind.css +87 -0
- package/tokens/figma.variables.json +2241 -0
- package/tokens/index.js +1 -1
- package/tokens/index.json +2 -2
- package/tokens/resolved.json +3 -3
- package/tokens/tokens.dtcg.json +1 -1
- package/vue/index.d.ts +116 -0
- package/vue/index.d.ts.map +1 -0
- package/vue/index.js +228 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
report-kit — convenience roll-up for static/PDF report consumers.
|
|
3
|
+
|
|
4
|
+
Import the default bundle first, then this opt-in kit:
|
|
5
|
+
|
|
6
|
+
@import '@ponchia/ui';
|
|
7
|
+
@import '@ponchia/ui/css/report-kit.css';
|
|
8
|
+
|
|
9
|
+
This file deliberately excludes app workbench/command surfaces. Reports can
|
|
10
|
+
still import narrower leaves one by one; this roll-up is the no-build,
|
|
11
|
+
copy-paste path for complete static reports.
|
|
12
|
+
========================================================================== */
|
|
13
|
+
|
|
14
|
+
@import url('./report.css') layer(bronto);
|
|
15
|
+
@import url('./dataviz.css') layer(bronto);
|
|
16
|
+
@import url('./figure.css') layer(bronto);
|
|
17
|
+
@import url('./annotations.css') layer(bronto);
|
|
18
|
+
@import url('./legend.css') layer(bronto);
|
|
19
|
+
@import url('./marks.css') layer(bronto);
|
|
20
|
+
@import url('./connectors.css') layer(bronto);
|
|
21
|
+
@import url('./spotlight.css') layer(bronto);
|
|
22
|
+
@import url('./crosshair.css') layer(bronto);
|
|
23
|
+
@import url('./selection.css') layer(bronto);
|
|
24
|
+
@import url('./sources.css') layer(bronto);
|
|
25
|
+
@import url('./generated.css') layer(bronto);
|
|
26
|
+
@import url('./state.css') layer(bronto);
|
|
27
|
+
@import url('./interval.css') layer(bronto);
|
|
28
|
+
@import url('./clamp.css') layer(bronto);
|
|
29
|
+
@import url('./highlights.css') layer(bronto);
|
|
30
|
+
@import url('./diff.css') layer(bronto);
|
|
31
|
+
@import url('./code.css') layer(bronto);
|
|
32
|
+
@import url('./spark.css') layer(bronto);
|
|
33
|
+
@import url('./bullet.css') layer(bronto);
|
|
34
|
+
@import url('./sidenote.css') layer(bronto);
|
|
35
|
+
@import url('./textref.css') layer(bronto);
|
|
36
|
+
@import url('./term.css') layer(bronto);
|
|
37
|
+
@import url('./toc.css') layer(bronto);
|
|
38
|
+
@import url('./tree.css') layer(bronto);
|
package/css/report.css
CHANGED
|
@@ -274,7 +274,7 @@
|
|
|
274
274
|
|
|
275
275
|
.ui-report__finding-title {
|
|
276
276
|
color: var(--text);
|
|
277
|
-
font-size: var(--text-
|
|
277
|
+
font-size: var(--text-base);
|
|
278
278
|
font-weight: 650;
|
|
279
279
|
line-height: 1.25;
|
|
280
280
|
}
|
|
@@ -480,7 +480,7 @@
|
|
|
480
480
|
|
|
481
481
|
.ui-evidence-item__value {
|
|
482
482
|
color: var(--text);
|
|
483
|
-
font-size: var(--text-
|
|
483
|
+
font-size: var(--text-base);
|
|
484
484
|
font-weight: 650;
|
|
485
485
|
}
|
|
486
486
|
|
|
@@ -510,13 +510,20 @@
|
|
|
510
510
|
padding-block: var(--space-sm);
|
|
511
511
|
}
|
|
512
512
|
|
|
513
|
+
.ui-report__action > :not(.ui-report__action-status) {
|
|
514
|
+
grid-column: 1;
|
|
515
|
+
}
|
|
516
|
+
|
|
513
517
|
.ui-report__action-status {
|
|
514
|
-
align-self: start;
|
|
515
518
|
color: var(--text-dim);
|
|
516
519
|
font-family: var(--mono);
|
|
517
520
|
font-size: var(--text-2xs);
|
|
521
|
+
grid-column: 2;
|
|
522
|
+
grid-row: 1;
|
|
518
523
|
letter-spacing: var(--tracking-wide);
|
|
524
|
+
place-self: start end;
|
|
519
525
|
text-transform: uppercase;
|
|
526
|
+
white-space: nowrap;
|
|
520
527
|
}
|
|
521
528
|
|
|
522
529
|
.ui-report__action-title,
|
|
@@ -556,6 +563,12 @@
|
|
|
556
563
|
.ui-report__action {
|
|
557
564
|
grid-template-columns: 1fr;
|
|
558
565
|
}
|
|
566
|
+
|
|
567
|
+
.ui-report__action-status {
|
|
568
|
+
grid-column: 1;
|
|
569
|
+
grid-row: auto;
|
|
570
|
+
place-self: auto start;
|
|
571
|
+
}
|
|
559
572
|
}
|
|
560
573
|
|
|
561
574
|
.ui-report__sources,
|
|
@@ -720,6 +733,9 @@
|
|
|
720
733
|
margin-block-start: var(--space-sm);
|
|
721
734
|
}
|
|
722
735
|
|
|
736
|
+
/* Stat tiles and table rows are guarded at the item level (the tile / the
|
|
737
|
+
row), not the container — a long statgrid or table may legitimately span
|
|
738
|
+
pages, but a sliced tile or row is unreadable. */
|
|
723
739
|
.ui-report__cover,
|
|
724
740
|
.ui-report__head,
|
|
725
741
|
.ui-report__decision,
|
|
@@ -730,7 +746,10 @@
|
|
|
730
746
|
.ui-report__toc,
|
|
731
747
|
.ui-claim,
|
|
732
748
|
.ui-evidence-item,
|
|
733
|
-
.ui-report__action
|
|
749
|
+
.ui-report__action,
|
|
750
|
+
.ui-stat,
|
|
751
|
+
.ui-statgrid > *,
|
|
752
|
+
tr {
|
|
734
753
|
break-inside: avoid;
|
|
735
754
|
}
|
|
736
755
|
|
package/css/sidenote.css
CHANGED
|
@@ -14,11 +14,21 @@
|
|
|
14
14
|
same breakpoint. Place each note in the DOM right after its `.ui-sidenote__ref`.
|
|
15
15
|
========================================================================== */
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
/* The two knobs are ROOT-scoped on purpose: the documented host contract has
|
|
18
|
+
the CONTAINER reserve the gutter with
|
|
19
|
+
`padding-inline-end: calc(var(--sidenote-width) + var(--sidenote-gap))`,
|
|
20
|
+
and custom properties do not flow upward — declared only on the notes,
|
|
21
|
+
that calc is invalid on any ancestor and silently resolves to NO gutter
|
|
22
|
+
(the floated notes then spill past the page edge). Root scope makes the
|
|
23
|
+
documented calc work anywhere, and overriding either var on the container
|
|
24
|
+
re-sizes the notes and the gutter together. */
|
|
25
|
+
:root {
|
|
19
26
|
--sidenote-width: 12rem;
|
|
20
27
|
--sidenote-gap: 2rem;
|
|
28
|
+
}
|
|
21
29
|
|
|
30
|
+
.ui-sidenote,
|
|
31
|
+
.ui-marginnote {
|
|
22
32
|
border-inline-start: 2px solid var(--line);
|
|
23
33
|
color: var(--text-dim);
|
|
24
34
|
display: block;
|
package/css/site.css
CHANGED
|
@@ -318,10 +318,11 @@
|
|
|
318
318
|
padding: 0.28rem 0.6rem;
|
|
319
319
|
}
|
|
320
320
|
|
|
321
|
+
/* Tone rides the tint + border; text stays neutral-readable. */
|
|
321
322
|
.ui-tag--accent {
|
|
322
323
|
background: var(--accent-soft);
|
|
323
324
|
border-color: color-mix(in srgb, var(--accent) 42%, var(--line));
|
|
324
|
-
color: var(--
|
|
325
|
+
color: var(--text-soft);
|
|
325
326
|
}
|
|
326
327
|
|
|
327
328
|
/* --- Meta row — date · author · read-time, dot-separated --- */
|
package/css/sources.css
CHANGED
package/css/state.css
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
Serious apps spend a lot of time in states like saving, saved, queued,
|
|
5
5
|
offline, stale, conflicted, locked, and reviewed — usually improvised per
|
|
6
6
|
product, so even good apps feel inconsistent. This is the canonical set:
|
|
7
|
-
a labelled state object with a rationed tone,
|
|
7
|
+
a labelled state object with a rationed tone, a page/document sync bar, and
|
|
8
|
+
a persistent background-job row.
|
|
8
9
|
|
|
9
10
|
The state is carried by a tone dot AND an author-written label, never colour
|
|
10
11
|
alone (WCAG 1.4.1) — the label is the canonical wording (see docs/state.md).
|
|
@@ -112,10 +113,128 @@
|
|
|
112
113
|
padding-block: var(--space-xs);
|
|
113
114
|
}
|
|
114
115
|
|
|
116
|
+
/* Background job — persistent progress/status for asynchronous work. The host
|
|
117
|
+
owns polling, retries, cancellation, and partial-failure semantics; Bronto
|
|
118
|
+
paints the durable row so long-running work is not hidden in a toast. */
|
|
119
|
+
.ui-job {
|
|
120
|
+
--job-progress: 0%;
|
|
121
|
+
--job-tone: var(--text-dim);
|
|
122
|
+
|
|
123
|
+
background: var(--panel);
|
|
124
|
+
border: 1px solid var(--line);
|
|
125
|
+
border-inline-start: 2px solid var(--job-tone);
|
|
126
|
+
border-radius: var(--radius-md);
|
|
127
|
+
display: grid;
|
|
128
|
+
gap: var(--space-sm);
|
|
129
|
+
padding: var(--space-md);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.ui-job__head {
|
|
133
|
+
align-items: start;
|
|
134
|
+
display: flex;
|
|
135
|
+
flex-wrap: wrap;
|
|
136
|
+
gap: var(--space-xs) var(--space-md);
|
|
137
|
+
justify-content: space-between;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.ui-job__title {
|
|
141
|
+
color: var(--text);
|
|
142
|
+
font-family: var(--display);
|
|
143
|
+
font-size: var(--text-sm);
|
|
144
|
+
letter-spacing: var(--tracking-wide);
|
|
145
|
+
margin: 0;
|
|
146
|
+
text-transform: uppercase;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.ui-job__meta {
|
|
150
|
+
color: var(--text-dim);
|
|
151
|
+
font-family: var(--mono);
|
|
152
|
+
font-size: var(--text-2xs);
|
|
153
|
+
letter-spacing: var(--tracking-wide);
|
|
154
|
+
text-transform: uppercase;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.ui-job__body {
|
|
158
|
+
color: var(--text-soft);
|
|
159
|
+
margin: 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.ui-job__progress {
|
|
163
|
+
background: var(--panel-soft);
|
|
164
|
+
border: 1px solid var(--line);
|
|
165
|
+
border-radius: var(--radius-pill);
|
|
166
|
+
block-size: 0.5rem;
|
|
167
|
+
overflow: hidden;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.ui-job__bar {
|
|
171
|
+
background: var(--job-tone);
|
|
172
|
+
block-size: 100%;
|
|
173
|
+
display: block;
|
|
174
|
+
inline-size: clamp(0%, var(--job-progress), 100%);
|
|
175
|
+
min-inline-size: 1px;
|
|
176
|
+
print-color-adjust: exact;
|
|
177
|
+
transition: inline-size var(--duration-base) var(--ease-standard);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.ui-job__actions {
|
|
181
|
+
align-items: center;
|
|
182
|
+
display: flex;
|
|
183
|
+
flex-wrap: wrap;
|
|
184
|
+
gap: var(--space-xs);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.ui-job--compact {
|
|
188
|
+
gap: var(--space-xs);
|
|
189
|
+
padding: var(--space-sm);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.ui-job--queued {
|
|
193
|
+
--job-tone: var(--text-dim);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.ui-job--running {
|
|
197
|
+
--job-tone: var(--accent);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.ui-job--blocked {
|
|
201
|
+
--job-tone: var(--warning);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.ui-job--failed {
|
|
205
|
+
--job-tone: var(--danger);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.ui-job--complete {
|
|
209
|
+
--job-tone: var(--success);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.ui-job--running .ui-job__bar {
|
|
213
|
+
background-image: linear-gradient(
|
|
214
|
+
90deg,
|
|
215
|
+
var(--job-tone),
|
|
216
|
+
color-mix(in srgb, var(--job-tone) 62%, var(--panel))
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
@media (prefers-reduced-motion: reduce) {
|
|
221
|
+
.ui-job__bar {
|
|
222
|
+
transition: none;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
115
226
|
/* Forced colours: the tone dot collapses to a system colour, so the
|
|
116
227
|
author-written label remains the state channel (it already must be). */
|
|
117
228
|
@media (forced-colors: active) {
|
|
118
229
|
.ui-state::before {
|
|
119
230
|
background: CanvasText;
|
|
120
231
|
}
|
|
232
|
+
|
|
233
|
+
.ui-job {
|
|
234
|
+
border-inline-start-color: CanvasText;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.ui-job__bar {
|
|
238
|
+
background: CanvasText;
|
|
239
|
+
}
|
|
121
240
|
}
|
package/css/table.css
CHANGED
package/css/tokens.css
CHANGED
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
--text-dim: #a0a0a0;
|
|
167
167
|
--accent: #ff3b41;
|
|
168
168
|
--accent-ramp-end: #000000;
|
|
169
|
-
--accent-strong: color-mix(in srgb, var(--accent)
|
|
169
|
+
--accent-strong: color-mix(in srgb, var(--accent) 80%, #fff);
|
|
170
170
|
--accent-text: var(--accent-strong);
|
|
171
171
|
--on-accent: var(--button-text);
|
|
172
172
|
--accent-soft: color-mix(in srgb, var(--accent) 14%, transparent);
|
|
@@ -205,7 +205,7 @@
|
|
|
205
205
|
--text-dim: #a0a0a0;
|
|
206
206
|
--accent: #ff3b41;
|
|
207
207
|
--accent-ramp-end: #000000;
|
|
208
|
-
--accent-strong: color-mix(in srgb, var(--accent)
|
|
208
|
+
--accent-strong: color-mix(in srgb, var(--accent) 80%, #fff);
|
|
209
209
|
--accent-text: var(--accent-strong);
|
|
210
210
|
--on-accent: var(--button-text);
|
|
211
211
|
--accent-soft: color-mix(in srgb, var(--accent) 14%, transparent);
|
|
@@ -237,16 +237,16 @@
|
|
|
237
237
|
/* --------------------------------------------------------------------------
|
|
238
238
|
Theming contract — the public override surface.
|
|
239
239
|
|
|
240
|
-
Re-brand a whole project
|
|
241
|
-
|
|
240
|
+
Re-brand a whole project by setting ONE knob; the rest of the accent
|
|
241
|
+
family derives from it via color-mix:
|
|
242
242
|
|
|
243
243
|
:root { --accent: #2f6df6; } // brand it blue, everywhere
|
|
244
|
-
.promo { --accent: #16a34a; } // or just a subtree
|
|
245
244
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
245
|
+
Scoped --accent overrides recolor direct accent uses in that subtree, but
|
|
246
|
+
the derived family is declared at :root and is a root-level skin contract.
|
|
247
|
+
For full rebrands, override per theme at :root as shown in docs/theming.md.
|
|
248
|
+
The other documented knobs: the --space-* scale (or the [data-density]
|
|
249
|
+
presets below), --radius-*, and the font vars (--display / --mono / --sans).
|
|
250
250
|
|
|
251
251
|
Density and contrast are CSS-only presets (not part of the JS token
|
|
252
252
|
model): opt in with [data-density] / [data-contrast] on any element.
|
|
@@ -360,9 +360,25 @@
|
|
|
360
360
|
--line: #d9d9d9;
|
|
361
361
|
--line-strong: #b3b3b3;
|
|
362
362
|
--success: #2f7d4f;
|
|
363
|
+
--success-soft: rgb(47, 125, 79, 0.12);
|
|
363
364
|
--danger: #c01622;
|
|
365
|
+
--danger-soft: rgb(192, 22, 34, 0.1);
|
|
364
366
|
--warning: #806414;
|
|
367
|
+
--warning-soft: rgb(128, 100, 20, 0.13);
|
|
365
368
|
--info: #1f63c4;
|
|
369
|
+
--info-soft: rgb(31, 99, 196, 0.12);
|
|
366
370
|
--accent: #d71921;
|
|
371
|
+
--bg-accent: color-mix(in srgb, var(--accent) 6%, transparent);
|
|
372
|
+
--accent-ramp-end: #ffffff;
|
|
373
|
+
--accent-strong: color-mix(in srgb, var(--accent) 83%, #000);
|
|
374
|
+
--accent-text: var(--accent-strong);
|
|
375
|
+
--accent-soft: color-mix(in srgb, var(--accent) 10%, transparent);
|
|
376
|
+
--button-text: #ffffff;
|
|
377
|
+
--on-accent: var(--button-text);
|
|
378
|
+
--field-dot: rgb(17, 17, 17, 0.16);
|
|
379
|
+
--field-dot-hot: rgb(17, 17, 17, 0.4);
|
|
380
|
+
--field-dot-accent: color-mix(in srgb, var(--accent) 78%, transparent);
|
|
381
|
+
--focus-ring: var(--accent);
|
|
382
|
+
--code-bg: rgb(17, 17, 17, 0.05);
|
|
367
383
|
}
|
|
368
384
|
}
|
package/css/workbench.css
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/* ==========================================================================
|
|
2
|
-
workbench — opt-in inspector / property / selection-bar primitives.
|
|
3
|
-
|
|
4
|
-
Real tools need inspectors, property rows,
|
|
5
|
-
|
|
6
|
-
builds its own half-consistent workbench. This is the low-risk
|
|
7
|
-
layout and affordances
|
|
8
|
-
|
|
9
|
-
consumer needs them. Not imported by core.css.
|
|
2
|
+
workbench — opt-in inspector / property / selection-bar / splitter primitives.
|
|
3
|
+
|
|
4
|
+
Real tools need inspectors, property rows, a bar of actions on the current
|
|
5
|
+
selection, and resizable panes. Generic kits stop at cards/tables/forms, so
|
|
6
|
+
every app builds its own half-consistent workbench. This is the low-risk
|
|
7
|
+
core: layout and affordances, plus a tiny optional ARIA splitter behavior.
|
|
8
|
+
Not imported by core.css.
|
|
10
9
|
========================================================================== */
|
|
11
10
|
|
|
12
11
|
/* --- Inspector — a panel of details for the selected object. --- */
|
|
@@ -81,3 +80,97 @@
|
|
|
81
80
|
flex-wrap: wrap;
|
|
82
81
|
gap: var(--space-xs);
|
|
83
82
|
}
|
|
83
|
+
|
|
84
|
+
/* --- Splitter — two panes separated by a focusable ARIA separator handle. --- */
|
|
85
|
+
.ui-splitter {
|
|
86
|
+
--splitter-pos: 50%;
|
|
87
|
+
--splitter-handle: 0.75rem;
|
|
88
|
+
--splitter-pane-min: 0px;
|
|
89
|
+
|
|
90
|
+
background: var(--panel);
|
|
91
|
+
border: 1px solid var(--line);
|
|
92
|
+
border-radius: var(--radius-md);
|
|
93
|
+
display: grid;
|
|
94
|
+
grid-template-columns:
|
|
95
|
+
minmax(var(--splitter-pane-min), var(--splitter-pos))
|
|
96
|
+
var(--splitter-handle)
|
|
97
|
+
minmax(0, 1fr);
|
|
98
|
+
min-block-size: 18rem;
|
|
99
|
+
overflow: hidden;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.ui-splitter--vertical {
|
|
103
|
+
grid-template-columns:
|
|
104
|
+
minmax(var(--splitter-pane-min), var(--splitter-pos))
|
|
105
|
+
var(--splitter-handle)
|
|
106
|
+
minmax(0, 1fr);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.ui-splitter--horizontal {
|
|
110
|
+
grid-template-columns: 1fr;
|
|
111
|
+
grid-template-rows:
|
|
112
|
+
minmax(var(--splitter-pane-min), var(--splitter-pos))
|
|
113
|
+
var(--splitter-handle)
|
|
114
|
+
minmax(0, 1fr);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.ui-splitter__pane {
|
|
118
|
+
min-block-size: 0;
|
|
119
|
+
min-inline-size: 0;
|
|
120
|
+
overflow: auto;
|
|
121
|
+
padding: var(--space-md);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.ui-splitter__handle {
|
|
125
|
+
align-self: stretch;
|
|
126
|
+
background: var(--panel-strong);
|
|
127
|
+
border-block: 0;
|
|
128
|
+
border-inline: 1px solid var(--line);
|
|
129
|
+
cursor: col-resize;
|
|
130
|
+
display: grid;
|
|
131
|
+
min-inline-size: var(--splitter-handle);
|
|
132
|
+
place-items: center;
|
|
133
|
+
touch-action: none;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.ui-splitter__handle::before {
|
|
137
|
+
background: var(--line-strong);
|
|
138
|
+
border-radius: var(--radius-pill);
|
|
139
|
+
block-size: 2.5rem;
|
|
140
|
+
content: "";
|
|
141
|
+
inline-size: 2px;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.ui-splitter__handle:hover::before,
|
|
145
|
+
.ui-splitter__handle.is-active::before,
|
|
146
|
+
.ui-splitter__handle[aria-valuenow]:focus-visible::before {
|
|
147
|
+
background: var(--accent);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.ui-splitter__handle:focus-visible {
|
|
151
|
+
outline: 2px solid var(--focus-ring);
|
|
152
|
+
outline-offset: -2px;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.ui-splitter--horizontal .ui-splitter__handle {
|
|
156
|
+
border-block: 1px solid var(--line);
|
|
157
|
+
border-inline: 0;
|
|
158
|
+
cursor: row-resize;
|
|
159
|
+
min-block-size: var(--splitter-handle);
|
|
160
|
+
min-inline-size: 0;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.ui-splitter--horizontal .ui-splitter__handle::before {
|
|
164
|
+
block-size: 2px;
|
|
165
|
+
inline-size: 2.5rem;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
@media (forced-colors: active) {
|
|
169
|
+
.ui-splitter__handle {
|
|
170
|
+
border-color: CanvasText;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.ui-splitter__handle::before {
|
|
174
|
+
background: CanvasText;
|
|
175
|
+
}
|
|
176
|
+
}
|