@oddkin/workbench 0.0.0-stage → 1.0.0-beta.1
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/LICENSE +21 -0
- package/README.md +66 -2
- package/dist/app/card-previews.d.ts +14 -0
- package/dist/app/card-previews.d.ts.map +1 -0
- package/dist/app/card-previews.js +140 -0
- package/dist/app/card-previews.js.map +1 -0
- package/dist/app/copy.d.ts +48 -0
- package/dist/app/copy.d.ts.map +1 -0
- package/dist/app/copy.js +52 -0
- package/dist/app/copy.js.map +1 -0
- package/dist/app/define.d.ts +3 -0
- package/dist/app/define.d.ts.map +1 -0
- package/dist/app/define.js +10 -0
- package/dist/app/define.js.map +1 -0
- package/dist/app/details.d.ts +22 -0
- package/dist/app/details.d.ts.map +1 -0
- package/dist/app/details.js +17 -0
- package/dist/app/details.js.map +1 -0
- package/dist/app/index.d.ts +12 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +9 -0
- package/dist/app/index.js.map +1 -0
- package/dist/app/routes.d.ts +26 -0
- package/dist/app/routes.d.ts.map +1 -0
- package/dist/app/routes.js +96 -0
- package/dist/app/routes.js.map +1 -0
- package/dist/app/search.d.ts +17 -0
- package/dist/app/search.d.ts.map +1 -0
- package/dist/app/search.js +52 -0
- package/dist/app/search.js.map +1 -0
- package/dist/app/shell.d.ts +29 -0
- package/dist/app/shell.d.ts.map +1 -0
- package/dist/app/shell.js +478 -0
- package/dist/app/shell.js.map +1 -0
- package/dist/app/styles.d.ts +2 -0
- package/dist/app/styles.d.ts.map +1 -0
- package/dist/app/styles.js +356 -0
- package/dist/app/styles.js.map +1 -0
- package/dist/app/theme-studio.d.ts +12 -0
- package/dist/app/theme-studio.d.ts.map +1 -0
- package/dist/app/theme-studio.js +14 -0
- package/dist/app/theme-studio.js.map +1 -0
- package/dist/app/views.d.ts +38 -0
- package/dist/app/views.d.ts.map +1 -0
- package/dist/app/views.js +252 -0
- package/dist/app/views.js.map +1 -0
- package/dist/config/index.d.ts +170 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +148 -0
- package/dist/config/index.js.map +1 -0
- package/dist/conformance/button.d.ts +2 -0
- package/dist/conformance/button.d.ts.map +1 -0
- package/dist/conformance/button.js +233 -0
- package/dist/conformance/button.js.map +1 -0
- package/dist/conformance/index.d.ts +107 -0
- package/dist/conformance/index.d.ts.map +1 -0
- package/dist/conformance/index.js +60 -0
- package/dist/conformance/index.js.map +1 -0
- package/dist/data/build.d.ts +36 -0
- package/dist/data/build.d.ts.map +1 -0
- package/dist/data/build.js +260 -0
- package/dist/data/build.js.map +1 -0
- package/dist/data/import-map.d.ts +59 -0
- package/dist/data/import-map.d.ts.map +1 -0
- package/dist/data/import-map.js +195 -0
- package/dist/data/import-map.js.map +1 -0
- package/dist/data/index.d.ts +14 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +10 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/theme-studio.d.ts +21 -0
- package/dist/data/theme-studio.d.ts.map +1 -0
- package/dist/data/theme-studio.js +112 -0
- package/dist/data/theme-studio.js.map +1 -0
- package/dist/data/types.d.ts +187 -0
- package/dist/data/types.d.ts.map +1 -0
- package/dist/data/types.js +4 -0
- package/dist/data/types.js.map +1 -0
- package/dist/examples/index.d.ts +101 -0
- package/dist/examples/index.d.ts.map +1 -0
- package/dist/examples/index.js +106 -0
- package/dist/examples/index.js.map +1 -0
- package/dist/frame/index.d.ts +9 -0
- package/dist/frame/index.d.ts.map +1 -0
- package/dist/frame/index.js +482 -0
- package/dist/frame/index.js.map +1 -0
- package/dist/internal/diagnostics.d.ts +17 -0
- package/dist/internal/diagnostics.d.ts.map +1 -0
- package/dist/internal/diagnostics.js +19 -0
- package/dist/internal/diagnostics.js.map +1 -0
- package/dist/node/bin.d.ts +3 -0
- package/dist/node/bin.d.ts.map +1 -0
- package/dist/node/bin.js +12 -0
- package/dist/node/bin.js.map +1 -0
- package/dist/node/cli.d.ts +17 -0
- package/dist/node/cli.d.ts.map +1 -0
- package/dist/node/cli.js +198 -0
- package/dist/node/cli.js.map +1 -0
- package/dist/node/config.d.ts +28 -0
- package/dist/node/config.d.ts.map +1 -0
- package/dist/node/config.js +80 -0
- package/dist/node/config.js.map +1 -0
- package/dist/node/example-modules.d.ts +8 -0
- package/dist/node/example-modules.d.ts.map +1 -0
- package/dist/node/example-modules.js +28 -0
- package/dist/node/example-modules.js.map +1 -0
- package/dist/node/generated.d.ts +19 -0
- package/dist/node/generated.d.ts.map +1 -0
- package/dist/node/generated.js +109 -0
- package/dist/node/generated.js.map +1 -0
- package/dist/node/html.d.ts +35 -0
- package/dist/node/html.d.ts.map +1 -0
- package/dist/node/html.js +51 -0
- package/dist/node/html.js.map +1 -0
- package/dist/node/index.d.ts +24 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +15 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/inputs.d.ts +26 -0
- package/dist/node/inputs.d.ts.map +1 -0
- package/dist/node/inputs.js +282 -0
- package/dist/node/inputs.js.map +1 -0
- package/dist/node/packages.d.ts +35 -0
- package/dist/node/packages.d.ts.map +1 -0
- package/dist/node/packages.js +87 -0
- package/dist/node/packages.js.map +1 -0
- package/dist/node/preload.d.ts +10 -0
- package/dist/node/preload.d.ts.map +1 -0
- package/dist/node/preload.js +61 -0
- package/dist/node/preload.js.map +1 -0
- package/dist/node/server.d.ts +42 -0
- package/dist/node/server.d.ts.map +1 -0
- package/dist/node/server.js +410 -0
- package/dist/node/server.js.map +1 -0
- package/dist/node/static.d.ts +43 -0
- package/dist/node/static.d.ts.map +1 -0
- package/dist/node/static.js +157 -0
- package/dist/node/static.js.map +1 -0
- package/dist/node/workbench.d.ts +43 -0
- package/dist/node/workbench.d.ts.map +1 -0
- package/dist/node/workbench.js +204 -0
- package/dist/node/workbench.js.map +1 -0
- package/dist/pages/build.d.ts +22 -0
- package/dist/pages/build.d.ts.map +1 -0
- package/dist/pages/build.js +363 -0
- package/dist/pages/build.js.map +1 -0
- package/dist/pages/defaults.d.ts +16 -0
- package/dist/pages/defaults.d.ts.map +1 -0
- package/dist/pages/defaults.js +88 -0
- package/dist/pages/defaults.js.map +1 -0
- package/dist/pages/index.d.ts +14 -0
- package/dist/pages/index.d.ts.map +1 -0
- package/dist/pages/index.js +10 -0
- package/dist/pages/index.js.map +1 -0
- package/dist/pages/navigation.d.ts +48 -0
- package/dist/pages/navigation.d.ts.map +1 -0
- package/dist/pages/navigation.js +83 -0
- package/dist/pages/navigation.js.map +1 -0
- package/dist/pages/types.d.ts +148 -0
- package/dist/pages/types.d.ts.map +1 -0
- package/dist/pages/types.js +3 -0
- package/dist/pages/types.js.map +1 -0
- package/dist/panels/catalog-define.d.ts +3 -0
- package/dist/panels/catalog-define.d.ts.map +1 -0
- package/dist/panels/catalog-define.js +7 -0
- package/dist/panels/catalog-define.js.map +1 -0
- package/dist/panels/catalog-layout-styles.d.ts +2 -0
- package/dist/panels/catalog-layout-styles.d.ts.map +1 -0
- package/dist/panels/catalog-layout-styles.js +54 -0
- package/dist/panels/catalog-layout-styles.js.map +1 -0
- package/dist/panels/catalog-styles.d.ts +2 -0
- package/dist/panels/catalog-styles.d.ts.map +1 -0
- package/dist/panels/catalog-styles.js +106 -0
- package/dist/panels/catalog-styles.js.map +1 -0
- package/dist/panels/catalog.d.ts +37 -0
- package/dist/panels/catalog.d.ts.map +1 -0
- package/dist/panels/catalog.js +74 -0
- package/dist/panels/catalog.js.map +1 -0
- package/dist/panels/component-define.d.ts +3 -0
- package/dist/panels/component-define.d.ts.map +1 -0
- package/dist/panels/component-define.js +6 -0
- package/dist/panels/component-define.js.map +1 -0
- package/dist/panels/component-detail.d.ts +49 -0
- package/dist/panels/component-detail.d.ts.map +1 -0
- package/dist/panels/component-detail.js +1352 -0
- package/dist/panels/component-detail.js.map +1 -0
- package/dist/panels/component.d.ts +17 -0
- package/dist/panels/component.d.ts.map +1 -0
- package/dist/panels/component.js +10 -0
- package/dist/panels/component.js.map +1 -0
- package/dist/panels/example-styles.d.ts +2 -0
- package/dist/panels/example-styles.d.ts.map +1 -0
- package/dist/panels/example-styles.js +343 -0
- package/dist/panels/example-styles.js.map +1 -0
- package/dist/panels/foundation-define.d.ts +3 -0
- package/dist/panels/foundation-define.d.ts.map +1 -0
- package/dist/panels/foundation-define.js +6 -0
- package/dist/panels/foundation-define.js.map +1 -0
- package/dist/panels/foundation-detail.d.ts +23 -0
- package/dist/panels/foundation-detail.d.ts.map +1 -0
- package/dist/panels/foundation-detail.js +216 -0
- package/dist/panels/foundation-detail.js.map +1 -0
- package/dist/panels/foundation.d.ts +15 -0
- package/dist/panels/foundation.d.ts.map +1 -0
- package/dist/panels/foundation.js +9 -0
- package/dist/panels/foundation.js.map +1 -0
- package/dist/panels/model.d.ts +184 -0
- package/dist/panels/model.d.ts.map +1 -0
- package/dist/panels/model.js +488 -0
- package/dist/panels/model.js.map +1 -0
- package/dist/panels/styles.d.ts +3 -0
- package/dist/panels/styles.d.ts.map +1 -0
- package/dist/panels/styles.js +265 -0
- package/dist/panels/styles.js.map +1 -0
- package/dist/panels/theme-model.d.ts +69 -0
- package/dist/panels/theme-model.d.ts.map +1 -0
- package/dist/panels/theme-model.js +166 -0
- package/dist/panels/theme-model.js.map +1 -0
- package/dist/panels/theme-studio.d.ts +32 -0
- package/dist/panels/theme-studio.d.ts.map +1 -0
- package/dist/panels/theme-studio.js +375 -0
- package/dist/panels/theme-studio.js.map +1 -0
- package/dist/preview/frame.d.ts +44 -0
- package/dist/preview/frame.d.ts.map +1 -0
- package/dist/preview/frame.js +260 -0
- package/dist/preview/frame.js.map +1 -0
- package/dist/preview/index.d.ts +26 -0
- package/dist/preview/index.d.ts.map +1 -0
- package/dist/preview/index.js +58 -0
- package/dist/preview/index.js.map +1 -0
- package/dist/preview/theme-generation.d.ts +33 -0
- package/dist/preview/theme-generation.d.ts.map +1 -0
- package/dist/preview/theme-generation.js +48 -0
- package/dist/preview/theme-generation.js.map +1 -0
- package/dist/protocol/index.d.ts +222 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +272 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/testing/index.d.ts +47 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +145 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +118 -4
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Styles for panel content (catalog, component and foundation details). Every rule is scoped to
|
|
3
|
+
* `.wb-content`, so the same sheet works inside a panel's shadow root and in the shell's light DOM.
|
|
4
|
+
* Values come from Oddkin tokens, inherited from the host document.
|
|
5
|
+
*/
|
|
6
|
+
import { css } from '@oddkin/core/styles';
|
|
7
|
+
export const panelHostStyles = css `
|
|
8
|
+
:host {
|
|
9
|
+
display: block;
|
|
10
|
+
color: var(--odd-color-text-primary);
|
|
11
|
+
font-family: var(--odd-font-family-sans);
|
|
12
|
+
font-size: var(--odd-font-size-md);
|
|
13
|
+
line-height: var(--odd-line-height-normal);
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
export const contentStyles = css `
|
|
17
|
+
.wb-content {
|
|
18
|
+
container: wb-content / inline-size;
|
|
19
|
+
min-inline-size: 0;
|
|
20
|
+
}
|
|
21
|
+
.wb-content :focus-visible {
|
|
22
|
+
outline: var(--odd-focus-width) solid var(--odd-color-focus-ring);
|
|
23
|
+
outline-offset: var(--odd-focus-offset);
|
|
24
|
+
}
|
|
25
|
+
.wb-content a {
|
|
26
|
+
color: var(--odd-color-link);
|
|
27
|
+
}
|
|
28
|
+
.wb-content code,
|
|
29
|
+
.wb-content pre {
|
|
30
|
+
font-family: var(--odd-font-family-mono);
|
|
31
|
+
font-size: 0.9em;
|
|
32
|
+
}
|
|
33
|
+
.wb-content input,
|
|
34
|
+
.wb-content select,
|
|
35
|
+
.wb-content textarea,
|
|
36
|
+
.wb-content button {
|
|
37
|
+
font: inherit;
|
|
38
|
+
color: inherit;
|
|
39
|
+
}
|
|
40
|
+
.wb-content input:not([type='checkbox']),
|
|
41
|
+
.wb-content select,
|
|
42
|
+
.wb-content textarea {
|
|
43
|
+
max-inline-size: 100%;
|
|
44
|
+
padding: var(--odd-space-2xs) var(--odd-space-xs);
|
|
45
|
+
background: var(--odd-color-surface-default);
|
|
46
|
+
border: var(--odd-border-width-default) solid var(--odd-color-border-strong);
|
|
47
|
+
border-radius: var(--odd-radius-sm);
|
|
48
|
+
}
|
|
49
|
+
.wb-content button {
|
|
50
|
+
padding: var(--odd-space-2xs) var(--odd-space-sm);
|
|
51
|
+
background: var(--odd-color-surface-default);
|
|
52
|
+
border: var(--odd-border-width-default) solid var(--odd-color-border-strong);
|
|
53
|
+
border-radius: var(--odd-radius-sm);
|
|
54
|
+
cursor: pointer;
|
|
55
|
+
}
|
|
56
|
+
/* Space between the sections shown: a host's tabs may hide some (the panel's sections property). */
|
|
57
|
+
.wb-content > section:not([hidden]) ~ section {
|
|
58
|
+
margin-block-start: var(--odd-space-2xl);
|
|
59
|
+
}
|
|
60
|
+
.wb-content h2 {
|
|
61
|
+
margin: 0 0 var(--odd-space-sm);
|
|
62
|
+
font-size: var(--odd-font-size-xl);
|
|
63
|
+
font-weight: var(--odd-font-weight-semibold);
|
|
64
|
+
}
|
|
65
|
+
.wb-content h3 {
|
|
66
|
+
margin: var(--odd-space-lg) 0 var(--odd-space-xs);
|
|
67
|
+
font-size: var(--odd-font-size-lg);
|
|
68
|
+
font-weight: var(--odd-font-weight-semibold);
|
|
69
|
+
}
|
|
70
|
+
.wb-content .wb-muted,
|
|
71
|
+
.wb-content .wb-meta {
|
|
72
|
+
color: var(--odd-color-text-secondary);
|
|
73
|
+
}
|
|
74
|
+
.wb-content .wb-meta {
|
|
75
|
+
font-size: var(--odd-font-size-sm);
|
|
76
|
+
}
|
|
77
|
+
.wb-content .wb-not-documented {
|
|
78
|
+
color: var(--odd-color-text-secondary);
|
|
79
|
+
font-style: italic;
|
|
80
|
+
}
|
|
81
|
+
/* Coverage markers (data-coverage) wrap an item without adding layout. */
|
|
82
|
+
.wb-content [data-coverage] {
|
|
83
|
+
display: contents;
|
|
84
|
+
}
|
|
85
|
+
.wb-content .wb-visually-hidden {
|
|
86
|
+
position: absolute;
|
|
87
|
+
inline-size: 1px;
|
|
88
|
+
block-size: 1px;
|
|
89
|
+
overflow: hidden;
|
|
90
|
+
clip-path: inset(50%);
|
|
91
|
+
white-space: nowrap;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* Tables: stacked rows on narrow containers. */
|
|
95
|
+
.wb-content .wb-table-wrap {
|
|
96
|
+
overflow-x: auto;
|
|
97
|
+
}
|
|
98
|
+
.wb-content table {
|
|
99
|
+
inline-size: 100%;
|
|
100
|
+
border-collapse: collapse;
|
|
101
|
+
font-size: var(--odd-font-size-sm);
|
|
102
|
+
}
|
|
103
|
+
.wb-content caption {
|
|
104
|
+
padding-block-end: var(--odd-space-xs);
|
|
105
|
+
color: var(--odd-color-text-secondary);
|
|
106
|
+
text-align: start;
|
|
107
|
+
}
|
|
108
|
+
.wb-content th,
|
|
109
|
+
.wb-content td {
|
|
110
|
+
padding: var(--odd-space-xs);
|
|
111
|
+
border-block-end: var(--odd-border-width-default) solid var(--odd-color-border-default);
|
|
112
|
+
text-align: start;
|
|
113
|
+
vertical-align: top;
|
|
114
|
+
}
|
|
115
|
+
.wb-content th {
|
|
116
|
+
font-weight: var(--odd-font-weight-semibold);
|
|
117
|
+
}
|
|
118
|
+
.wb-content td small {
|
|
119
|
+
display: block;
|
|
120
|
+
color: var(--odd-color-text-secondary);
|
|
121
|
+
}
|
|
122
|
+
@container wb-content (width < 40rem) {
|
|
123
|
+
.wb-content .wb-stack thead {
|
|
124
|
+
position: absolute;
|
|
125
|
+
inline-size: 1px;
|
|
126
|
+
block-size: 1px;
|
|
127
|
+
overflow: hidden;
|
|
128
|
+
clip-path: inset(50%);
|
|
129
|
+
}
|
|
130
|
+
.wb-content .wb-stack tr {
|
|
131
|
+
display: grid;
|
|
132
|
+
gap: var(--odd-space-2xs);
|
|
133
|
+
padding-block: var(--odd-space-sm);
|
|
134
|
+
border-block-end: var(--odd-border-width-default) solid var(--odd-color-border-default);
|
|
135
|
+
}
|
|
136
|
+
.wb-content .wb-stack td {
|
|
137
|
+
display: grid;
|
|
138
|
+
grid-template-columns: 7rem minmax(0, 1fr);
|
|
139
|
+
gap: var(--odd-space-xs);
|
|
140
|
+
padding: 0;
|
|
141
|
+
border: 0;
|
|
142
|
+
}
|
|
143
|
+
.wb-content .wb-stack td::before {
|
|
144
|
+
content: attr(data-label);
|
|
145
|
+
color: var(--odd-color-text-secondary);
|
|
146
|
+
font-weight: var(--odd-font-weight-semibold);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.wb-content .wb-toolbar {
|
|
151
|
+
display: flex;
|
|
152
|
+
flex-wrap: wrap;
|
|
153
|
+
align-items: end;
|
|
154
|
+
gap: var(--odd-space-sm) var(--odd-space-md);
|
|
155
|
+
margin-block-end: var(--odd-space-sm);
|
|
156
|
+
}
|
|
157
|
+
.wb-content .wb-toolbar label {
|
|
158
|
+
display: grid;
|
|
159
|
+
gap: var(--odd-space-2xs);
|
|
160
|
+
color: var(--odd-color-text-secondary);
|
|
161
|
+
font-size: var(--odd-font-size-sm);
|
|
162
|
+
}
|
|
163
|
+
.wb-content .wb-previews {
|
|
164
|
+
display: grid;
|
|
165
|
+
grid-template-columns: minmax(0, 1fr);
|
|
166
|
+
gap: var(--odd-space-md);
|
|
167
|
+
}
|
|
168
|
+
.wb-content .wb-previews.wb-pair {
|
|
169
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
|
|
170
|
+
}
|
|
171
|
+
.wb-content .wb-preview {
|
|
172
|
+
min-inline-size: 0;
|
|
173
|
+
border: var(--odd-border-width-default) solid var(--odd-color-border-default);
|
|
174
|
+
border-radius: var(--odd-radius-md);
|
|
175
|
+
background: var(--odd-color-surface-default);
|
|
176
|
+
}
|
|
177
|
+
.wb-content .wb-preview > p {
|
|
178
|
+
margin: 0;
|
|
179
|
+
padding: var(--odd-space-2xs) var(--odd-space-xs);
|
|
180
|
+
color: var(--odd-color-text-secondary);
|
|
181
|
+
font-size: var(--odd-font-size-xs);
|
|
182
|
+
}
|
|
183
|
+
.wb-content .wb-preview iframe {
|
|
184
|
+
display: block;
|
|
185
|
+
inline-size: 100%;
|
|
186
|
+
block-size: 14rem;
|
|
187
|
+
border: 0;
|
|
188
|
+
}
|
|
189
|
+
.wb-content .wb-status:empty {
|
|
190
|
+
display: none;
|
|
191
|
+
}
|
|
192
|
+
.wb-content [role='alert'] {
|
|
193
|
+
color: var(--odd-color-danger-foreground, var(--odd-color-text-primary));
|
|
194
|
+
}
|
|
195
|
+
.wb-content .wb-code {
|
|
196
|
+
overflow-x: auto;
|
|
197
|
+
margin: var(--odd-space-xs) 0 0;
|
|
198
|
+
padding: var(--odd-space-sm);
|
|
199
|
+
background: var(--odd-color-surface-sunken);
|
|
200
|
+
border-radius: var(--odd-radius-sm);
|
|
201
|
+
white-space: pre;
|
|
202
|
+
}
|
|
203
|
+
.wb-content .wb-log {
|
|
204
|
+
max-block-size: 14rem;
|
|
205
|
+
overflow: auto;
|
|
206
|
+
margin: 0;
|
|
207
|
+
padding: 0;
|
|
208
|
+
list-style: none;
|
|
209
|
+
font-size: var(--odd-font-size-sm);
|
|
210
|
+
}
|
|
211
|
+
.wb-content .wb-log li {
|
|
212
|
+
padding-block: var(--odd-space-2xs);
|
|
213
|
+
border-block-end: var(--odd-border-width-default) solid var(--odd-color-border-default);
|
|
214
|
+
}
|
|
215
|
+
.wb-content .wb-cell-controls {
|
|
216
|
+
display: flex;
|
|
217
|
+
flex-wrap: wrap;
|
|
218
|
+
align-items: center;
|
|
219
|
+
gap: var(--odd-space-2xs) var(--odd-space-xs);
|
|
220
|
+
}
|
|
221
|
+
.wb-content .wb-error {
|
|
222
|
+
color: var(--odd-color-danger-foreground, var(--odd-color-text-primary));
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/* Theme Studio */
|
|
226
|
+
.wb-content fieldset.wb-group {
|
|
227
|
+
border: var(--odd-border-width-default) solid var(--odd-color-border-default);
|
|
228
|
+
border-radius: var(--odd-radius-sm);
|
|
229
|
+
padding: var(--odd-space-md);
|
|
230
|
+
}
|
|
231
|
+
.wb-content .wb-field {
|
|
232
|
+
display: grid;
|
|
233
|
+
gap: var(--odd-space-2xs);
|
|
234
|
+
margin-block: var(--odd-space-sm);
|
|
235
|
+
}
|
|
236
|
+
.wb-content .wb-json textarea {
|
|
237
|
+
inline-size: 100%;
|
|
238
|
+
box-sizing: border-box;
|
|
239
|
+
}
|
|
240
|
+
.wb-content .wb-swatch {
|
|
241
|
+
display: inline-block;
|
|
242
|
+
inline-size: 1.5rem;
|
|
243
|
+
block-size: 1.5rem;
|
|
244
|
+
border: var(--odd-border-width-default) solid var(--odd-color-border-strong);
|
|
245
|
+
border-radius: var(--odd-radius-sm);
|
|
246
|
+
}
|
|
247
|
+
.wb-content .wb-list {
|
|
248
|
+
margin: 0;
|
|
249
|
+
padding-inline-start: var(--odd-space-lg);
|
|
250
|
+
}
|
|
251
|
+
.wb-content .wb-bar {
|
|
252
|
+
display: block;
|
|
253
|
+
block-size: 0.75rem;
|
|
254
|
+
min-inline-size: 1px;
|
|
255
|
+
max-inline-size: 100%;
|
|
256
|
+
background: var(--odd-color-action-default);
|
|
257
|
+
border-radius: var(--odd-radius-sm);
|
|
258
|
+
}
|
|
259
|
+
@media (forced-colors: active) {
|
|
260
|
+
.wb-content .wb-bar {
|
|
261
|
+
background: CanvasText;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
`;
|
|
265
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/panels/styles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAA;;;;;;;;CAQjC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwP/B,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Studio's editor model (workbench.md §6.3), DOM-free: the form fields a draft offers, in
|
|
3
|
+
* groups that follow the design file's variable collections (theme inputs, then role overrides
|
|
4
|
+
* with one column per mode), and immutable edits by configuration path. The form and the JSON
|
|
5
|
+
* editor change the same draft; nothing here generates tokens.
|
|
6
|
+
*/
|
|
7
|
+
export type ConfigPath = readonly string[];
|
|
8
|
+
type Json = null | boolean | number | string | Json[] | {
|
|
9
|
+
[key: string]: Json;
|
|
10
|
+
};
|
|
11
|
+
/** How a value enters the theme (workbench.md §6.3). */
|
|
12
|
+
export type ValueOrigin = 'foundation input' | 'explicit override';
|
|
13
|
+
export interface ThemeField {
|
|
14
|
+
readonly path: ConfigPath;
|
|
15
|
+
readonly label: string;
|
|
16
|
+
readonly kind: 'color' | 'length' | 'number' | 'integer' | 'text';
|
|
17
|
+
readonly origin: ValueOrigin;
|
|
18
|
+
readonly value: string | number | undefined;
|
|
19
|
+
}
|
|
20
|
+
export interface OverrideRow {
|
|
21
|
+
readonly token: string;
|
|
22
|
+
/** One cell per mode; a single value applies to every mode. */
|
|
23
|
+
readonly cells: readonly ThemeField[];
|
|
24
|
+
}
|
|
25
|
+
export interface ThemeFieldGroup {
|
|
26
|
+
readonly id: string;
|
|
27
|
+
readonly title: string;
|
|
28
|
+
readonly note?: string;
|
|
29
|
+
readonly fields: readonly ThemeField[];
|
|
30
|
+
readonly rows?: readonly OverrideRow[];
|
|
31
|
+
readonly modes?: readonly string[];
|
|
32
|
+
}
|
|
33
|
+
export declare function getPath(value: unknown, path: ConfigPath): unknown;
|
|
34
|
+
/** A copy of `value` with `path` set; `undefined` removes the key. Untouched branches are shared. */
|
|
35
|
+
export declare function setPath(value: unknown, path: ConfigPath, next: unknown): unknown;
|
|
36
|
+
export declare const pathText: (path: ConfigPath) => string;
|
|
37
|
+
/** The form over a draft: only fields that apply to it (e.g. the chosen spacing strategy). */
|
|
38
|
+
export declare function themeFields(config: unknown): ThemeFieldGroup[];
|
|
39
|
+
/** A form entry as the configuration value it writes; empty clears the key. */
|
|
40
|
+
export declare function fieldValue(field: ThemeField, input: string): string | number | undefined;
|
|
41
|
+
export interface DraftParse {
|
|
42
|
+
readonly ok: boolean;
|
|
43
|
+
readonly value?: Json;
|
|
44
|
+
readonly message?: string;
|
|
45
|
+
}
|
|
46
|
+
/** The JSON editor's text as a draft; a syntax error never replaces the current draft. */
|
|
47
|
+
export declare function parseDraft(text: string): DraftParse;
|
|
48
|
+
/** Export file names for a draft loaded from `source`: `./oddkin.theme.json` → `oddkin.theme.*`. */
|
|
49
|
+
export declare function exportNames(source: string | undefined): {
|
|
50
|
+
config: string;
|
|
51
|
+
css: string;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Why the draft cannot be exported now, or '' when it can. An export is always the draft shown,
|
|
55
|
+
* once the generator has accepted it: never an older draft presented as the latest.
|
|
56
|
+
*/
|
|
57
|
+
export declare function exportBlocked(state: {
|
|
58
|
+
readonly generator: boolean;
|
|
59
|
+
/** The JSON editor's text does not parse, so the draft is not what it shows. */
|
|
60
|
+
readonly jsonError: boolean;
|
|
61
|
+
/** Why generation is unavailable, or ''. */
|
|
62
|
+
readonly unavailable: string;
|
|
63
|
+
/** A newer draft than the last result is being generated. */
|
|
64
|
+
readonly pending: boolean;
|
|
65
|
+
/** The last result's validity; undefined before the first. */
|
|
66
|
+
readonly ok: boolean | undefined;
|
|
67
|
+
}): string;
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=theme-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-model.d.ts","sourceRoot":"","sources":["../../src/panels/theme-model.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,SAAS,MAAM,EAAE,CAAC;AAC3C,KAAK,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAEhF,wDAAwD;AACxD,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAEnE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IAClE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAKD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAOjE;AAED,qGAAqG;AACrG,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAShF;AAED,eAAO,MAAM,QAAQ,SAAU,UAAU,WAAyB,CAAC;AA+BnE,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,EAAE,CAqE9D;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAQxF;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,0FAA0F;AAC1F,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CASnD;AAED,oGAAoG;AACpG,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAGvF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,4CAA4C;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,SAAS,CAAC;CAClC,GAAG,MAAM,CAMT"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Studio's editor model (workbench.md §6.3), DOM-free: the form fields a draft offers, in
|
|
3
|
+
* groups that follow the design file's variable collections (theme inputs, then role overrides
|
|
4
|
+
* with one column per mode), and immutable edits by configuration path. The form and the JSON
|
|
5
|
+
* editor change the same draft; nothing here generates tokens.
|
|
6
|
+
*/
|
|
7
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
8
|
+
export function getPath(value, path) {
|
|
9
|
+
let current = value;
|
|
10
|
+
for (const key of path) {
|
|
11
|
+
if (!isRecord(current))
|
|
12
|
+
return undefined;
|
|
13
|
+
current = current[key];
|
|
14
|
+
}
|
|
15
|
+
return current;
|
|
16
|
+
}
|
|
17
|
+
/** A copy of `value` with `path` set; `undefined` removes the key. Untouched branches are shared. */
|
|
18
|
+
export function setPath(value, path, next) {
|
|
19
|
+
const [key, ...rest] = path;
|
|
20
|
+
if (key === undefined)
|
|
21
|
+
return next;
|
|
22
|
+
const record = isRecord(value) ? value : {};
|
|
23
|
+
const child = rest.length ? setPath(record[key], rest, next) : next;
|
|
24
|
+
const copy = { ...record };
|
|
25
|
+
if (child === undefined)
|
|
26
|
+
delete copy[key];
|
|
27
|
+
else
|
|
28
|
+
copy[key] = child;
|
|
29
|
+
return copy;
|
|
30
|
+
}
|
|
31
|
+
export const pathText = (path) => `/${path.join('/')}`;
|
|
32
|
+
const scalar = (value) => typeof value === 'string' || typeof value === 'number' ? value : undefined;
|
|
33
|
+
const BRAND = [
|
|
34
|
+
['brand', 'primary', 'Brand primary'],
|
|
35
|
+
['brand', 'neutral', 'Neutral'],
|
|
36
|
+
['status', 'danger', 'Danger'],
|
|
37
|
+
['status', 'success', 'Success'],
|
|
38
|
+
['status', 'warning', 'Warning'],
|
|
39
|
+
['status', 'info', 'Info'],
|
|
40
|
+
];
|
|
41
|
+
const SPACING = {
|
|
42
|
+
multiples: [
|
|
43
|
+
['unit', 'Unit', 'length'],
|
|
44
|
+
['snap', 'Snap to', 'length'],
|
|
45
|
+
],
|
|
46
|
+
ratio: [
|
|
47
|
+
['base', 'Base', 'length'],
|
|
48
|
+
['ratio', 'Ratio', 'number'],
|
|
49
|
+
['stepsBelow', 'Steps below', 'integer'],
|
|
50
|
+
['stepsAbove', 'Steps above', 'integer'],
|
|
51
|
+
['snap', 'Snap to', 'length'],
|
|
52
|
+
],
|
|
53
|
+
explicit: [['snap', 'Snap to', 'length']],
|
|
54
|
+
};
|
|
55
|
+
/** The form over a draft: only fields that apply to it (e.g. the chosen spacing strategy). */
|
|
56
|
+
export function themeFields(config) {
|
|
57
|
+
const groups = [
|
|
58
|
+
{
|
|
59
|
+
id: 'inputs',
|
|
60
|
+
title: 'Theme inputs',
|
|
61
|
+
note: 'Foundation inputs: ramps and roles are generated from them.',
|
|
62
|
+
fields: BRAND.map(([group, key, label]) => ({
|
|
63
|
+
path: [group, key],
|
|
64
|
+
label,
|
|
65
|
+
kind: 'color',
|
|
66
|
+
origin: 'foundation input',
|
|
67
|
+
value: scalar(getPath(config, [group, key])),
|
|
68
|
+
})),
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
const spacing = getPath(config, ['spacing']);
|
|
72
|
+
const strategy = isRecord(spacing) ? spacing['strategy'] : undefined;
|
|
73
|
+
groups.push({
|
|
74
|
+
id: 'spacing',
|
|
75
|
+
title: 'Spacing',
|
|
76
|
+
note: typeof strategy === 'string' && SPACING[strategy]
|
|
77
|
+
? `Strategy: ${strategy}. Change the strategy or its steps in the JSON editor.`
|
|
78
|
+
: 'No spacing strategy configured: the generator default applies. Add `spacing` in the JSON editor.',
|
|
79
|
+
fields: (typeof strategy === 'string' ? (SPACING[strategy] ?? []) : []).map(([key, label, kind]) => ({
|
|
80
|
+
path: ['spacing', key],
|
|
81
|
+
label,
|
|
82
|
+
kind,
|
|
83
|
+
origin: 'foundation input',
|
|
84
|
+
value: scalar(getPath(config, ['spacing', key])),
|
|
85
|
+
})),
|
|
86
|
+
});
|
|
87
|
+
const overrides = getPath(config, ['overrides']);
|
|
88
|
+
const entries = isRecord(overrides) ? Object.entries(overrides) : [];
|
|
89
|
+
const modes = [
|
|
90
|
+
...new Set(entries.flatMap(([, value]) => (isRecord(value) ? Object.keys(value) : []))),
|
|
91
|
+
];
|
|
92
|
+
groups.push({
|
|
93
|
+
id: 'overrides',
|
|
94
|
+
title: 'Role overrides',
|
|
95
|
+
note: entries.length
|
|
96
|
+
? 'Explicit overrides win over generated values. Values are colours, lengths, or {aliases}.'
|
|
97
|
+
: 'No explicit overrides: every role is generated.',
|
|
98
|
+
fields: [],
|
|
99
|
+
modes,
|
|
100
|
+
rows: entries.map(([token, value]) => ({
|
|
101
|
+
token,
|
|
102
|
+
cells: isRecord(value)
|
|
103
|
+
? modes.map((mode) => ({
|
|
104
|
+
path: ['overrides', token, mode],
|
|
105
|
+
label: `${token} (${mode})`,
|
|
106
|
+
kind: 'text',
|
|
107
|
+
origin: 'explicit override',
|
|
108
|
+
value: scalar(value[mode]),
|
|
109
|
+
}))
|
|
110
|
+
: [
|
|
111
|
+
{
|
|
112
|
+
path: ['overrides', token],
|
|
113
|
+
label: token,
|
|
114
|
+
kind: 'text',
|
|
115
|
+
origin: 'explicit override',
|
|
116
|
+
value: scalar(value),
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
})),
|
|
120
|
+
});
|
|
121
|
+
return groups;
|
|
122
|
+
}
|
|
123
|
+
/** A form entry as the configuration value it writes; empty clears the key. */
|
|
124
|
+
export function fieldValue(field, input) {
|
|
125
|
+
const text = input.trim();
|
|
126
|
+
if (text === '')
|
|
127
|
+
return undefined;
|
|
128
|
+
if (field.kind === 'number' || field.kind === 'integer') {
|
|
129
|
+
const number = Number(text);
|
|
130
|
+
return Number.isFinite(number) ? number : text;
|
|
131
|
+
}
|
|
132
|
+
return text;
|
|
133
|
+
}
|
|
134
|
+
/** The JSON editor's text as a draft; a syntax error never replaces the current draft. */
|
|
135
|
+
export function parseDraft(text) {
|
|
136
|
+
try {
|
|
137
|
+
const value = JSON.parse(text);
|
|
138
|
+
return isRecord(value)
|
|
139
|
+
? { ok: true, value }
|
|
140
|
+
: { ok: false, message: 'A theme configuration is a JSON object.' };
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
return { ok: false, message: error instanceof Error ? error.message : String(error) };
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/** Export file names for a draft loaded from `source`: `./oddkin.theme.json` → `oddkin.theme.*`. */
|
|
147
|
+
export function exportNames(source) {
|
|
148
|
+
const stem = (source?.split(/[\\/]/).pop() ?? '').replace(/\.(?:json|[cm]?[jt]s)$/i, '');
|
|
149
|
+
return { config: `${stem || 'theme'}.json`, css: `${stem || 'theme'}.css` };
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Why the draft cannot be exported now, or '' when it can. An export is always the draft shown,
|
|
153
|
+
* once the generator has accepted it: never an older draft presented as the latest.
|
|
154
|
+
*/
|
|
155
|
+
export function exportBlocked(state) {
|
|
156
|
+
if (!state.generator)
|
|
157
|
+
return 'Export needs the theme generator (see Method and limits).';
|
|
158
|
+
if (state.jsonError)
|
|
159
|
+
return 'The JSON has an error: fix it to export the draft shown.';
|
|
160
|
+
if (state.unavailable)
|
|
161
|
+
return `Generation unavailable: ${state.unavailable}`;
|
|
162
|
+
if (state.pending || state.ok === undefined)
|
|
163
|
+
return 'Generating the latest draft…';
|
|
164
|
+
return state.ok ? '' : 'This draft is invalid: fix it to export.';
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=theme-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-model.js","sourceRoot":"","sources":["../../src/panels/theme-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Studio content (workbench.md §6, workbench-pages.md §8): one draft of the library's theme
|
|
3
|
+
* configuration, edited through a form and a JSON editor; generated in a Worker by the library's
|
|
4
|
+
* own generator; applied to light and dark specimen frames as a preview-owned stylesheet, so the
|
|
5
|
+
* real components update in place (no remount). An invalid draft keeps the last valid theme and
|
|
6
|
+
* lists the generator's diagnostics with their configuration paths.
|
|
7
|
+
*/
|
|
8
|
+
import { OddkinElement } from '@oddkin/core/element';
|
|
9
|
+
import { type Scope } from '@oddkin/core/scope';
|
|
10
|
+
import type { StyleInput } from '@oddkin/core/styles';
|
|
11
|
+
import type { ThemeStudioPageData } from '../data/types.js';
|
|
12
|
+
import { type IsolatedPreview } from '../preview/frame.js';
|
|
13
|
+
import { type ThemeGeneration } from '../preview/theme-generation.js';
|
|
14
|
+
declare const ThemeStudioElement_base: import("@oddkin/core/element").WithProps<typeof OddkinElement, {
|
|
15
|
+
readonly page: import("@oddkin/core/element").PropDefinition<ThemeStudioPageData | undefined>;
|
|
16
|
+
readonly frameUrl: import("@oddkin/core/element").PropDefinition<string>;
|
|
17
|
+
}>;
|
|
18
|
+
export declare class ThemeStudioElement extends ThemeStudioElement_base {
|
|
19
|
+
#private;
|
|
20
|
+
static styles: StyleInput;
|
|
21
|
+
constructor();
|
|
22
|
+
/** The current draft (for tests and embedding); read-only snapshot. */
|
|
23
|
+
get draft(): unknown;
|
|
24
|
+
/** Light and dark specimen frames, in that order. */
|
|
25
|
+
get previews(): readonly IsolatedPreview[];
|
|
26
|
+
/** Generation counters: requests sent, superseded, and results applied. */
|
|
27
|
+
get generation(): ThemeGeneration['stats'] | undefined;
|
|
28
|
+
protected connected(scope: Scope): void;
|
|
29
|
+
protected render(): import("@oddkin/core/template").TemplateResult;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=theme-studio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-studio.d.ts","sourceRoot":"","sources":["../../src/panels/theme-studio.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAQ,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,gCAAgC,CAAC;;;;;AAgBxC,qBAAa,kBAAmB,SAAQ,uBAMtC;;IACA,OAAgB,MAAM,EAAE,UAAU,CAAoC;IAsBtE,cAGC;IAED,uEAAuE;IACvE,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,qDAAqD;IACrD,IAAI,QAAQ,IAAI,SAAS,eAAe,EAAE,CAEzC;IAED,2EAA2E;IAC3E,IAAI,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,CAErD;IAED,UAAmB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAc/C;IA4LD,UAAmB,MAAM,mDAqLxB;CACF"}
|