@takazudo/zdtp 0.6.0 → 0.7.0
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 +59 -0
- package/PORTABLE-CONTRACT.md +112 -0
- package/README.md +93 -0
- package/dist/astro/host-adapter.js +1 -1
- package/dist/components/color-picker/color-field.d.ts +3 -1
- package/dist/components/color-picker/color-picker.d.ts +3 -1
- package/dist/components/color-picker/custom-slider.d.ts +2 -1
- package/dist/dashboard/index.d.ts +4 -0
- package/dist/dashboard/index.js +408 -0
- package/dist/dashboard/model.d.ts +7 -0
- package/dist/dashboard/styles.css +328 -0
- package/dist/dashboard/token-dashboard.d.ts +27 -0
- package/dist/dashboard/types.d.ts +64 -0
- package/dist/{index-LYsbHWcy.js → index-BcqHRoxf.js} +1 -1
- package/dist/{index-DWs1XPfy.js → index-CUWkR-Gb.js} +4006 -3935
- package/dist/index.js +2 -2
- package/dist/testing.js +1 -1
- package/dist/{tweak-state-Dzr5kDhX.js → tweak-state-Dhjqig0C.js} +8 -8
- package/dist/utils/resolve-css-color.d.ts +12 -0
- package/dist/zdtp.css +1 -1
- package/package.json +8 -1
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/* Static dashboard chrome deliberately uses no inventory custom properties.
|
|
2
|
+
The namespace and div/span markup protect documentation hosts from tag resets. */
|
|
3
|
+
.zdtp-dashboard,
|
|
4
|
+
.zdtp-dashboard * {
|
|
5
|
+
box-sizing: border-box;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.zdtp-dashboard {
|
|
9
|
+
--zdtp-dashboard-bg: light-dark(#f8fafc, #151b24);
|
|
10
|
+
--zdtp-dashboard-fg: light-dark(#182131, #edf2f7);
|
|
11
|
+
--zdtp-dashboard-muted: light-dark(#536174, #acb9cb);
|
|
12
|
+
--zdtp-dashboard-border: light-dark(#dce1e8, #465367);
|
|
13
|
+
--zdtp-dashboard-card-bg: light-dark(#fff, #202936);
|
|
14
|
+
--zdtp-dashboard-diag-bg: light-dark(#fff5e6, #3b2c18);
|
|
15
|
+
--zdtp-dashboard-diag-fg: light-dark(#704612, #ffdaa3);
|
|
16
|
+
--zdtp-dashboard-diag-accent: light-dark(#9d641a, #e4ad5c);
|
|
17
|
+
--zdtp-dashboard-focus: light-dark(#245caa, #6488b8);
|
|
18
|
+
--zdtp-dashboard-ruler-major: light-dark(#8290a3, #a3b2c7);
|
|
19
|
+
--zdtp-dashboard-ruler-minor: light-dark(#c4ccd7, #63748c);
|
|
20
|
+
--zdtp-dashboard-bar: light-dark(#526c92, #9dbbe6);
|
|
21
|
+
--zdtp-dashboard-sample-bg: light-dark(#fff, #39475b);
|
|
22
|
+
--zdtp-dashboard-sample-border: light-dark(#8290a3, #a3b2c7);
|
|
23
|
+
--zdtp-dashboard-transparent: light-dark(transparent, transparent);
|
|
24
|
+
min-inline-size: 0;
|
|
25
|
+
max-inline-size: 100%;
|
|
26
|
+
border: 1px solid var(--zdtp-dashboard-border);
|
|
27
|
+
border-radius: 10px;
|
|
28
|
+
background: var(--zdtp-dashboard-bg);
|
|
29
|
+
color: var(--zdtp-dashboard-fg);
|
|
30
|
+
font: 400 14px/1.5 system-ui, sans-serif;
|
|
31
|
+
letter-spacing: normal;
|
|
32
|
+
text-align: start;
|
|
33
|
+
text-transform: none;
|
|
34
|
+
white-space: normal;
|
|
35
|
+
overflow-wrap: anywhere;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.zdtp-dashboard[data-chrome='light'] { color-scheme: light; }
|
|
39
|
+
.zdtp-dashboard[data-chrome='dark'] { color-scheme: dark; }
|
|
40
|
+
.zdtp-dashboard[data-chrome='host'] { color-scheme: inherit; }
|
|
41
|
+
|
|
42
|
+
.zdtp-dashboard :where(div, span) {
|
|
43
|
+
min-inline-size: 0;
|
|
44
|
+
margin: 0;
|
|
45
|
+
padding: 0;
|
|
46
|
+
border: 0;
|
|
47
|
+
font: inherit;
|
|
48
|
+
color: inherit;
|
|
49
|
+
letter-spacing: inherit;
|
|
50
|
+
text-transform: none;
|
|
51
|
+
box-shadow: none;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.zdtp-dashboard__header {
|
|
55
|
+
display: grid;
|
|
56
|
+
gap: 8px;
|
|
57
|
+
padding: 20px;
|
|
58
|
+
border-block-end: 1px solid var(--zdtp-dashboard-border);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.zdtp-dashboard__title {
|
|
62
|
+
font-size: 22px;
|
|
63
|
+
font-weight: 700;
|
|
64
|
+
line-height: 1.25;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.zdtp-dashboard__summary {
|
|
68
|
+
display: flex;
|
|
69
|
+
flex-wrap: wrap;
|
|
70
|
+
align-items: baseline;
|
|
71
|
+
gap: 4px 16px;
|
|
72
|
+
color: var(--zdtp-dashboard-muted);
|
|
73
|
+
font-size: 12px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.zdtp-dashboard__count {
|
|
77
|
+
color: var(--zdtp-dashboard-fg);
|
|
78
|
+
font-weight: 600;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.zdtp-dashboard__inventory {
|
|
82
|
+
display: grid;
|
|
83
|
+
gap: 32px;
|
|
84
|
+
padding: 20px;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.zdtp-dashboard__tab {
|
|
88
|
+
display: grid;
|
|
89
|
+
gap: 20px;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.zdtp-dashboard__tab-header {
|
|
93
|
+
display: flex;
|
|
94
|
+
flex-wrap: wrap;
|
|
95
|
+
align-items: baseline;
|
|
96
|
+
gap: 4px 12px;
|
|
97
|
+
padding-block-end: 8px;
|
|
98
|
+
border-block-end: 1px solid var(--zdtp-dashboard-border);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.zdtp-dashboard__tab-title {
|
|
102
|
+
font-size: 18px;
|
|
103
|
+
font-weight: 700;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.zdtp-dashboard__tab-count {
|
|
107
|
+
color: var(--zdtp-dashboard-muted);
|
|
108
|
+
font-size: 12px;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.zdtp-dashboard__tier {
|
|
112
|
+
display: grid;
|
|
113
|
+
gap: 10px;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.zdtp-dashboard__tier-title {
|
|
117
|
+
font-weight: 600;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.zdtp-dashboard__grid {
|
|
121
|
+
display: grid;
|
|
122
|
+
grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr));
|
|
123
|
+
gap: 12px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.zdtp-dashboard__token {
|
|
127
|
+
display: flex;
|
|
128
|
+
flex-direction: column;
|
|
129
|
+
border: 1px solid var(--zdtp-dashboard-border);
|
|
130
|
+
border-radius: 6px;
|
|
131
|
+
background: var(--zdtp-dashboard-card-bg);
|
|
132
|
+
color: var(--zdtp-dashboard-fg);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.zdtp-dashboard__token-content {
|
|
136
|
+
display: grid;
|
|
137
|
+
align-content: start;
|
|
138
|
+
gap: 5px;
|
|
139
|
+
padding: 12px;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.zdtp-dashboard__name {
|
|
143
|
+
font-weight: 600;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.zdtp-dashboard__variable,
|
|
147
|
+
.zdtp-dashboard__value,
|
|
148
|
+
.zdtp-dashboard__reference {
|
|
149
|
+
font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
|
|
150
|
+
font-size: 12px;
|
|
151
|
+
white-space: pre-wrap;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.zdtp-dashboard__variable,
|
|
155
|
+
.zdtp-dashboard__reference {
|
|
156
|
+
color: var(--zdtp-dashboard-muted);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.zdtp-dashboard__value {
|
|
160
|
+
padding-block-start: 5px;
|
|
161
|
+
color: var(--zdtp-dashboard-fg);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.zdtp-dashboard__diagnostic {
|
|
165
|
+
margin-block-start: 3px;
|
|
166
|
+
padding: 8px;
|
|
167
|
+
border-inline-start: 2px solid var(--zdtp-dashboard-diag-accent);
|
|
168
|
+
background: var(--zdtp-dashboard-diag-bg);
|
|
169
|
+
color: var(--zdtp-dashboard-diag-fg);
|
|
170
|
+
font-size: 12px;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.zdtp-dashboard__preview {
|
|
174
|
+
display: flex;
|
|
175
|
+
block-size: 88px;
|
|
176
|
+
border-block-end: 1px solid var(--zdtp-dashboard-border);
|
|
177
|
+
border-start-start-radius: 5px;
|
|
178
|
+
border-start-end-radius: 5px;
|
|
179
|
+
overflow: hidden;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* The inner well owns specimen paint and mode; borders and scrolling stay outside. */
|
|
183
|
+
.zdtp-dashboard__preview > .zdtp-dashboard__specimen {
|
|
184
|
+
display: flex;
|
|
185
|
+
align-items: center;
|
|
186
|
+
flex: 1;
|
|
187
|
+
padding: 16px;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
:where(.zdtp-dashboard[data-mode='light']) .zdtp-dashboard__preview > .zdtp-dashboard__specimen {
|
|
191
|
+
background: #eef1f5;
|
|
192
|
+
color: #182131;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.zdtp-dashboard[data-mode='dark'] .zdtp-dashboard__preview > .zdtp-dashboard__specimen {
|
|
196
|
+
background: #222936;
|
|
197
|
+
color: #f1f5f9;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.zdtp-dashboard__sample {
|
|
201
|
+
display: block;
|
|
202
|
+
flex: none;
|
|
203
|
+
max-inline-size: 100%;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.zdtp-dashboard__preview--color > .zdtp-dashboard__specimen {
|
|
207
|
+
padding: 0;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
:where(.zdtp-dashboard[data-mode='light']) .zdtp-dashboard__preview--color > .zdtp-dashboard__specimen {
|
|
211
|
+
background: repeating-conic-gradient(#e2e6eb 0% 25%, #fff 0% 50%) 0 / 16px 16px;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.zdtp-dashboard[data-mode='dark'] .zdtp-dashboard__preview--color > .zdtp-dashboard__specimen {
|
|
215
|
+
background: repeating-conic-gradient(#3e4652 0% 25%, #252c37 0% 50%) 0 / 16px 16px;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.zdtp-dashboard__sample--color {
|
|
219
|
+
inline-size: 100%;
|
|
220
|
+
block-size: 100%;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.zdtp-dashboard__sample--bar {
|
|
224
|
+
block-size: 16px;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.zdtp-dashboard__sample--radius,
|
|
228
|
+
.zdtp-dashboard__sample--shadow {
|
|
229
|
+
inline-size: 64px;
|
|
230
|
+
block-size: 48px;
|
|
231
|
+
background: var(--zdtp-dashboard-sample-bg);
|
|
232
|
+
border: 1px solid var(--zdtp-dashboard-sample-border);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.zdtp-dashboard__sample--family,
|
|
236
|
+
.zdtp-dashboard__sample--weight,
|
|
237
|
+
.zdtp-dashboard__sample--line-height {
|
|
238
|
+
font-size: 18px;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.zdtp-dashboard__sample--line-height {
|
|
242
|
+
white-space: pre-line;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.zdtp-dashboard__empty {
|
|
246
|
+
color: var(--zdtp-dashboard-muted);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* Wide rows use their embedding width, including narrow documentation columns. */
|
|
250
|
+
.zdtp-dashboard { container: zdtp-dashboard / inline-size; }
|
|
251
|
+
.zdtp-dashboard__token--wide {
|
|
252
|
+
grid-column: 1 / -1;
|
|
253
|
+
display: grid;
|
|
254
|
+
grid-template-columns: minmax(0, 1fr);
|
|
255
|
+
border-radius: 0;
|
|
256
|
+
}
|
|
257
|
+
.zdtp-dashboard__token--wide > .zdtp-dashboard__token-content { order: -1; }
|
|
258
|
+
.zdtp-dashboard__scroll {
|
|
259
|
+
max-inline-size: 100%;
|
|
260
|
+
overflow: auto;
|
|
261
|
+
overscroll-behavior-inline: contain;
|
|
262
|
+
}
|
|
263
|
+
.zdtp-dashboard__scroll:focus-visible {
|
|
264
|
+
outline: 2px solid var(--zdtp-dashboard-focus);
|
|
265
|
+
/* Paint outside the mode-scoped well, against surrounding chrome. */
|
|
266
|
+
outline-offset: 0;
|
|
267
|
+
}
|
|
268
|
+
.zdtp-dashboard__ruler-wrap { padding: 12px; }
|
|
269
|
+
.zdtp-dashboard__ruler-caption,
|
|
270
|
+
.zdtp-dashboard__preview-unavailable {
|
|
271
|
+
color: var(--zdtp-dashboard-muted);
|
|
272
|
+
font-size: 12px;
|
|
273
|
+
padding: 12px;
|
|
274
|
+
}
|
|
275
|
+
.zdtp-dashboard__ruler-caption { padding: 0 0 8px; }
|
|
276
|
+
.zdtp-dashboard__ruler {
|
|
277
|
+
position: relative;
|
|
278
|
+
block-size: 64px;
|
|
279
|
+
padding-block-start: 36px;
|
|
280
|
+
background:
|
|
281
|
+
repeating-linear-gradient(to right, var(--zdtp-dashboard-ruler-major) 0 1px, var(--zdtp-dashboard-transparent) 1px 64px) left 24px / 100% 12px no-repeat,
|
|
282
|
+
repeating-linear-gradient(to right, var(--zdtp-dashboard-ruler-minor) 0 1px, var(--zdtp-dashboard-transparent) 1px 8px) left 30px / 100% 6px no-repeat;
|
|
283
|
+
}
|
|
284
|
+
.zdtp-dashboard__ruler-origin { position: absolute; inset-block-start: 0; inset-inline-start: 0; font-size: 12px; }
|
|
285
|
+
.zdtp-dashboard__sample--bar {
|
|
286
|
+
max-inline-size: none;
|
|
287
|
+
min-inline-size: 0;
|
|
288
|
+
border: 0;
|
|
289
|
+
padding: 0;
|
|
290
|
+
background: var(--zdtp-dashboard-bar);
|
|
291
|
+
}
|
|
292
|
+
.zdtp-dashboard__palette {
|
|
293
|
+
display: flex;
|
|
294
|
+
gap: 0;
|
|
295
|
+
inline-size: max-content;
|
|
296
|
+
min-inline-size: 100%;
|
|
297
|
+
}
|
|
298
|
+
.zdtp-dashboard__palette > .zdtp-dashboard__token {
|
|
299
|
+
display: grid;
|
|
300
|
+
grid-template-rows: minmax(88px, auto) 1fr;
|
|
301
|
+
align-content: start;
|
|
302
|
+
flex: 1 0 156px;
|
|
303
|
+
inline-size: 156px;
|
|
304
|
+
border-radius: 0;
|
|
305
|
+
}
|
|
306
|
+
.zdtp-dashboard__palette > .zdtp-dashboard__token > .zdtp-dashboard__token-content { grid-row: 2; }
|
|
307
|
+
.zdtp-dashboard__palette .zdtp-dashboard__preview { border-radius: 0; }
|
|
308
|
+
.zdtp-dashboard__preview--typography {
|
|
309
|
+
display: block;
|
|
310
|
+
block-size: auto;
|
|
311
|
+
border: 0;
|
|
312
|
+
border-radius: 0;
|
|
313
|
+
}
|
|
314
|
+
.zdtp-dashboard__preview--typography > .zdtp-dashboard__specimen {
|
|
315
|
+
display: block;
|
|
316
|
+
padding: 20px;
|
|
317
|
+
min-block-size: 100%;
|
|
318
|
+
}
|
|
319
|
+
.zdtp-dashboard__preview--typography > .zdtp-dashboard__specimen > .zdtp-dashboard__sample {
|
|
320
|
+
font: 400 18px/1.6 system-ui, sans-serif;
|
|
321
|
+
letter-spacing: normal;
|
|
322
|
+
white-space: pre-wrap;
|
|
323
|
+
overflow-wrap: anywhere;
|
|
324
|
+
max-inline-size: 100%;
|
|
325
|
+
}
|
|
326
|
+
@container zdtp-dashboard (min-width: 640px) {
|
|
327
|
+
.zdtp-dashboard__token--wide { grid-template-columns: 220px minmax(0, 1fr); }
|
|
328
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { JSX } from 'preact';
|
|
2
|
+
import type { TabConfig, TierConfig } from "../tokens/tier-model.js";
|
|
3
|
+
import type { DashboardChrome, DashboardMode } from "./types.js";
|
|
4
|
+
/** Visual samples are independent from the panel's editor kind. */
|
|
5
|
+
export type DashboardPreviewKind = NonNullable<TierConfig['preview']> | 'color' | 'shadow' | 'text';
|
|
6
|
+
export interface TokenDashboardProps {
|
|
7
|
+
tabs: readonly TabConfig[];
|
|
8
|
+
/** Selects declared per-mode defaults. Does not read the host or panel mode. */
|
|
9
|
+
mode?: DashboardMode;
|
|
10
|
+
/** Selects chrome appearance (shell, cards, labels, borders, diagnostics and
|
|
11
|
+
* focus/scroll affordances), independently of mode's declared defaults.
|
|
12
|
+
* 'host' inherits the host's effective color-scheme. Defaults to 'light'. */
|
|
13
|
+
chrome?: DashboardChrome;
|
|
14
|
+
title?: string;
|
|
15
|
+
/** Static multiline typography specimen. Empty strings are preserved. */
|
|
16
|
+
previewText?: string;
|
|
17
|
+
/** Optional root ID. Supply distinct IDs when rendering multiple instances. */
|
|
18
|
+
id?: string;
|
|
19
|
+
/** Per-variable sample choices, including text-editor colors and shadows. */
|
|
20
|
+
previewOverrides?: Readonly<Record<string, DashboardPreviewKind>>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A complete, read-only inventory of declared defaults. Works with Preact's
|
|
24
|
+
* server renderer without hydration, browser globals, or panel configuration.
|
|
25
|
+
* Include @takazudo/zdtp/dashboard/styles.css through the host's CSS pipeline.
|
|
26
|
+
*/
|
|
27
|
+
export declare function TokenDashboard({ tabs, mode, chrome, title, id, previewOverrides, previewText, }: TokenDashboardProps): JSX.Element;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { TierConfig, TierValueKind } from "../tokens/tier-model.js";
|
|
2
|
+
/** Internal, render-independent description of declared token defaults. */
|
|
3
|
+
export type DashboardMode = 'light' | 'dark';
|
|
4
|
+
/** Appearance of the dashboard chrome, independent of declared token mode. */
|
|
5
|
+
export type DashboardChrome = 'light' | 'dark' | 'host';
|
|
6
|
+
export interface DashboardDiagnostic {
|
|
7
|
+
code: string;
|
|
8
|
+
severity: 'warning' | 'error';
|
|
9
|
+
message: string;
|
|
10
|
+
rowKey?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface DashboardReference {
|
|
13
|
+
key: string;
|
|
14
|
+
cssVar: string;
|
|
15
|
+
label: string;
|
|
16
|
+
}
|
|
17
|
+
export interface DashboardRow {
|
|
18
|
+
/** Positional identity stays unique even when a manifest repeats identifiers. */
|
|
19
|
+
key: string;
|
|
20
|
+
tabId: string;
|
|
21
|
+
tierId: string;
|
|
22
|
+
itemId: string;
|
|
23
|
+
label: string;
|
|
24
|
+
cssVar: string;
|
|
25
|
+
kind: TierValueKind['kind'];
|
|
26
|
+
source: 'item' | 'base-role';
|
|
27
|
+
defaultValue: string;
|
|
28
|
+
/** Human-readable selected-mode declaration, including explicit semantic overrides. */
|
|
29
|
+
declaredValue: string;
|
|
30
|
+
/** Safe local CSS declaration; null for an invalid or ambiguous declaration. */
|
|
31
|
+
cssValue: string | null;
|
|
32
|
+
/**
|
|
33
|
+
* Follows direct declared references only, never computes CSS. Expressions
|
|
34
|
+
* remain expressions. Null means invalid or dependent on unknown context;
|
|
35
|
+
* the renderer must not show a value preview in that case.
|
|
36
|
+
*/
|
|
37
|
+
resolvedValue: string | null;
|
|
38
|
+
references: DashboardReference[];
|
|
39
|
+
diagnostics: DashboardDiagnostic[];
|
|
40
|
+
}
|
|
41
|
+
export interface DashboardTier {
|
|
42
|
+
key: string;
|
|
43
|
+
id: string;
|
|
44
|
+
label: string;
|
|
45
|
+
/** Nonsemantic, non-reference, color-only source tier. */
|
|
46
|
+
palette?: boolean;
|
|
47
|
+
preview?: TierConfig['preview'];
|
|
48
|
+
previewBase?: string;
|
|
49
|
+
rows: DashboardRow[];
|
|
50
|
+
}
|
|
51
|
+
export interface DashboardTab {
|
|
52
|
+
key: string;
|
|
53
|
+
id: string;
|
|
54
|
+
label: string;
|
|
55
|
+
tiers: DashboardTier[];
|
|
56
|
+
}
|
|
57
|
+
export interface DashboardModel {
|
|
58
|
+
mode: DashboardMode;
|
|
59
|
+
tabs: DashboardTab[];
|
|
60
|
+
rows: DashboardRow[];
|
|
61
|
+
/** Declare these on each preview scope, never on :root or the document. */
|
|
62
|
+
declarations: Readonly<Record<string, string>>;
|
|
63
|
+
diagnostics: DashboardDiagnostic[];
|
|
64
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as y, jsxs as K, Fragment as kt } from "preact/jsx-runtime";
|
|
2
2
|
import { useEffect as P, useState as Y, useRef as O, useMemo as J, useCallback as X } from "preact/hooks";
|
|
3
|
-
import { b as ft, p as wt, u as ht, a as Ne, A as bt, Z as gt } from "./index-
|
|
3
|
+
import { b as ft, p as wt, u as ht, a as Ne, A as bt, Z as gt } from "./index-CUWkR-Gb.js";
|
|
4
4
|
import { g as vt, m as j } from "./panel-config-Crn5QJGy.js";
|
|
5
5
|
const xt = (e, o) => {
|
|
6
6
|
const t = new Array(e.length + o.length);
|