@sudajs/theme-engine 0.0.2
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/dist/ai/slots.d.ts +33 -0
- package/dist/ai/slots.d.ts.map +1 -0
- package/dist/ai/slots.js +139 -0
- package/dist/ai/slots.js.map +1 -0
- package/dist/assets.d.ts +42 -0
- package/dist/assets.d.ts.map +1 -0
- package/dist/assets.js +36 -0
- package/dist/assets.js.map +1 -0
- package/dist/cms/apply-bindings.d.ts +9 -0
- package/dist/cms/apply-bindings.d.ts.map +1 -0
- package/dist/cms/apply-bindings.js +128 -0
- package/dist/cms/apply-bindings.js.map +1 -0
- package/dist/cms/get-context.d.ts +9 -0
- package/dist/cms/get-context.d.ts.map +1 -0
- package/dist/cms/get-context.js +13 -0
- package/dist/cms/get-context.js.map +1 -0
- package/dist/cms/index.d.ts +4 -0
- package/dist/cms/index.d.ts.map +1 -0
- package/dist/cms/index.js +4 -0
- package/dist/cms/index.js.map +1 -0
- package/dist/cms/types.d.ts +116 -0
- package/dist/cms/types.d.ts.map +1 -0
- package/dist/cms/types.js +2 -0
- package/dist/cms/types.js.map +1 -0
- package/dist/components/base-blocks.d.ts +13 -0
- package/dist/components/base-blocks.d.ts.map +1 -0
- package/dist/components/base-blocks.js +157 -0
- package/dist/components/base-blocks.js.map +1 -0
- package/dist/components/containers.d.ts +8 -0
- package/dist/components/containers.d.ts.map +1 -0
- package/dist/components/containers.js +142 -0
- package/dist/components/containers.js.map +1 -0
- package/dist/components/index.d.ts +11 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +17 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/interactive.client.d.ts +12 -0
- package/dist/components/interactive.client.d.ts.map +1 -0
- package/dist/components/interactive.client.js +43 -0
- package/dist/components/interactive.client.js.map +1 -0
- package/dist/components/metadata.d.ts +20 -0
- package/dist/components/metadata.d.ts.map +1 -0
- package/dist/components/metadata.js +9 -0
- package/dist/components/metadata.js.map +1 -0
- package/dist/components/shared-fields.d.ts +11 -0
- package/dist/components/shared-fields.d.ts.map +1 -0
- package/dist/components/shared-fields.js +37 -0
- package/dist/components/shared-fields.js.map +1 -0
- package/dist/editor/context.d.ts +79 -0
- package/dist/editor/context.d.ts.map +1 -0
- package/dist/editor/context.js +12 -0
- package/dist/editor/context.js.map +1 -0
- package/dist/editor/index.d.ts +5 -0
- package/dist/editor/index.d.ts.map +1 -0
- package/dist/editor/index.js +5 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/editor/overrides.d.ts +3 -0
- package/dist/editor/overrides.d.ts.map +1 -0
- package/dist/editor/overrides.js +379 -0
- package/dist/editor/overrides.js.map +1 -0
- package/dist/editor/theme-editor.d.ts +46 -0
- package/dist/editor/theme-editor.d.ts.map +1 -0
- package/dist/editor/theme-editor.js +169 -0
- package/dist/editor/theme-editor.js.map +1 -0
- package/dist/editor/unified-editor.d.ts +25 -0
- package/dist/editor/unified-editor.d.ts.map +1 -0
- package/dist/editor/unified-editor.js +229 -0
- package/dist/editor/unified-editor.js.map +1 -0
- package/dist/editor/use-theme-runtime.d.ts +8 -0
- package/dist/editor/use-theme-runtime.d.ts.map +1 -0
- package/dist/editor/use-theme-runtime.js +77 -0
- package/dist/editor/use-theme-runtime.js.map +1 -0
- package/dist/fields/basic-fields.d.ts +14 -0
- package/dist/fields/basic-fields.d.ts.map +1 -0
- package/dist/fields/basic-fields.js +46 -0
- package/dist/fields/basic-fields.js.map +1 -0
- package/dist/fields/color-field.d.ts +3 -0
- package/dist/fields/color-field.d.ts.map +1 -0
- package/dist/fields/color-field.js +97 -0
- package/dist/fields/color-field.js.map +1 -0
- package/dist/fields/color-scheme-field.d.ts +81 -0
- package/dist/fields/color-scheme-field.d.ts.map +1 -0
- package/dist/fields/color-scheme-field.js +234 -0
- package/dist/fields/color-scheme-field.js.map +1 -0
- package/dist/fields/index.d.ts +6 -0
- package/dist/fields/index.d.ts.map +1 -0
- package/dist/fields/index.js +4 -0
- package/dist/fields/index.js.map +1 -0
- package/dist/fields/media-field.d.ts +10 -0
- package/dist/fields/media-field.d.ts.map +1 -0
- package/dist/fields/media-field.js +495 -0
- package/dist/fields/media-field.js.map +1 -0
- package/dist/fields/normalize-config.d.ts +3 -0
- package/dist/fields/normalize-config.d.ts.map +1 -0
- package/dist/fields/normalize-config.js +81 -0
- package/dist/fields/normalize-config.js.map +1 -0
- package/dist/fields/range-field.d.ts +9 -0
- package/dist/fields/range-field.d.ts.map +1 -0
- package/dist/fields/range-field.js +53 -0
- package/dist/fields/range-field.js.map +1 -0
- package/dist/fields/spacing-field.d.ts +7 -0
- package/dist/fields/spacing-field.d.ts.map +1 -0
- package/dist/fields/spacing-field.js +40 -0
- package/dist/fields/spacing-field.js.map +1 -0
- package/dist/fields/suda-fields.d.ts +45 -0
- package/dist/fields/suda-fields.d.ts.map +1 -0
- package/dist/fields/suda-fields.js +91 -0
- package/dist/fields/suda-fields.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +47 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +39 -0
- package/dist/manifest.js.map +1 -0
- package/dist/registry/filesystem.d.ts +27 -0
- package/dist/registry/filesystem.d.ts.map +1 -0
- package/dist/registry/filesystem.js +162 -0
- package/dist/registry/filesystem.js.map +1 -0
- package/dist/registry.d.ts +13 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +2 -0
- package/dist/registry.js.map +1 -0
- package/dist/render/chrome.d.ts +18 -0
- package/dist/render/chrome.d.ts.map +1 -0
- package/dist/render/chrome.js +36 -0
- package/dist/render/chrome.js.map +1 -0
- package/dist/render/index.d.ts +4 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +4 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/render.d.ts +21 -0
- package/dist/render/render.d.ts.map +1 -0
- package/dist/render/render.js +50 -0
- package/dist/render/render.js.map +1 -0
- package/dist/render/slot.d.ts +14 -0
- package/dist/render/slot.d.ts.map +1 -0
- package/dist/render/slot.js +14 -0
- package/dist/render/slot.js.map +1 -0
- package/dist/runtime.d.ts +8 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +10 -0
- package/dist/runtime.js.map +1 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +16 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +171 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Config, Data } from "@puckeditor/core";
|
|
2
|
+
import type { LayoutData, PageData } from "../types";
|
|
3
|
+
interface SplitResult {
|
|
4
|
+
layoutData: LayoutData;
|
|
5
|
+
pageData: PageData;
|
|
6
|
+
}
|
|
7
|
+
type ThemeEditorConfigLike = {
|
|
8
|
+
pageConfig: Config;
|
|
9
|
+
layoutConfig: Config;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Builds an editor-only Puck config that can edit both layout chrome and page
|
|
13
|
+
* sections in one canvas.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createUnifiedThemeEditorConfig(theme: ThemeEditorConfigLike): Config;
|
|
16
|
+
/**
|
|
17
|
+
* Composes page + layout persisted documents into one editor document.
|
|
18
|
+
*/
|
|
19
|
+
export declare function composeUnifiedThemeEditorData(layoutData: unknown, pageData: unknown): Data;
|
|
20
|
+
/**
|
|
21
|
+
* Splits a unified editor document back into layout + page persisted documents.
|
|
22
|
+
*/
|
|
23
|
+
export declare function splitUnifiedThemeEditorData(unifiedData: Data): SplitResult;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=unified-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unified-editor.d.ts","sourceRoot":"","sources":["../../src/editor/unified-editor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAItE,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAkBrD,UAAU,WAAW;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,KAAK,qBAAqB,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAuIF;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,qBAAqB,GAC3B,MAAM,CAkCR;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,OAAO,EACnB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAyCN;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,CA+D1E"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { normalizeSudaConfig } from "../fields/normalize-config";
|
|
3
|
+
const PAGE_OUTLET_TYPE = "PageOutlet";
|
|
4
|
+
const PAGE_SLOT_FIELD = "page";
|
|
5
|
+
const PAGE_META_FIELD = "__suda_page";
|
|
6
|
+
function isRecord(value) {
|
|
7
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
8
|
+
}
|
|
9
|
+
function isPageMeta(value) {
|
|
10
|
+
return isRecord(value);
|
|
11
|
+
}
|
|
12
|
+
function asContentArray(data) {
|
|
13
|
+
const candidate = isRecord(data) ? data.content : undefined;
|
|
14
|
+
if (!Array.isArray(candidate)) {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
return candidate
|
|
18
|
+
.filter((item) => {
|
|
19
|
+
return isRecord(item) && typeof item.type === "string";
|
|
20
|
+
})
|
|
21
|
+
.map((item) => ({
|
|
22
|
+
type: item.type,
|
|
23
|
+
props: isRecord(item.props) ? item.props : {},
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
function asZones(data) {
|
|
27
|
+
const candidate = isRecord(data) ? data.zones : undefined;
|
|
28
|
+
if (!isRecord(candidate)) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const entries = Object.entries(candidate)
|
|
32
|
+
.map(([key, zoneValue]) => {
|
|
33
|
+
if (!Array.isArray(zoneValue)) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const nodes = zoneValue
|
|
37
|
+
.filter((node) => {
|
|
38
|
+
return isRecord(node) && typeof node.type === "string";
|
|
39
|
+
})
|
|
40
|
+
.map((node) => ({
|
|
41
|
+
type: node.type,
|
|
42
|
+
props: isRecord(node.props) ? node.props : {},
|
|
43
|
+
}));
|
|
44
|
+
return [key, nodes];
|
|
45
|
+
})
|
|
46
|
+
.filter((entry) => entry !== null);
|
|
47
|
+
return Object.fromEntries(entries);
|
|
48
|
+
}
|
|
49
|
+
function asRoot(data) {
|
|
50
|
+
const candidate = isRecord(data) ? data.root : undefined;
|
|
51
|
+
if (isRecord(candidate) && isRecord(candidate.props)) {
|
|
52
|
+
return { ...candidate, props: candidate.props };
|
|
53
|
+
}
|
|
54
|
+
return { props: {} };
|
|
55
|
+
}
|
|
56
|
+
function createPageOutletEditorComponent(component, pageComponentTypes) {
|
|
57
|
+
const existingFields = isRecord(component.fields)
|
|
58
|
+
? component.fields
|
|
59
|
+
: {};
|
|
60
|
+
if (PAGE_SLOT_FIELD in existingFields) {
|
|
61
|
+
throw new Error(`Cannot enable unified editor: ${PAGE_OUTLET_TYPE} already declares a "${PAGE_SLOT_FIELD}" field.`);
|
|
62
|
+
}
|
|
63
|
+
const fields = {
|
|
64
|
+
...existingFields,
|
|
65
|
+
[PAGE_SLOT_FIELD]: {
|
|
66
|
+
type: "slot",
|
|
67
|
+
label: "Page content",
|
|
68
|
+
allow: pageComponentTypes,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
const existingDefaults = isRecord(component.defaultProps)
|
|
72
|
+
? (component.defaultProps)
|
|
73
|
+
: {};
|
|
74
|
+
const defaultProps = {
|
|
75
|
+
...existingDefaults,
|
|
76
|
+
[PAGE_SLOT_FIELD]: [],
|
|
77
|
+
};
|
|
78
|
+
const editorComponent = {
|
|
79
|
+
...component,
|
|
80
|
+
render: (props) => {
|
|
81
|
+
const pageSlot = isRecord(props)
|
|
82
|
+
? props[PAGE_SLOT_FIELD]
|
|
83
|
+
: undefined;
|
|
84
|
+
const PageSlot = pageSlot;
|
|
85
|
+
return _jsx("main", { className: "site-main", children: PageSlot ? _jsx(PageSlot, {}) : null });
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
editorComponent.fields = fields;
|
|
89
|
+
editorComponent.defaultProps = defaultProps;
|
|
90
|
+
return editorComponent;
|
|
91
|
+
}
|
|
92
|
+
function mergeComponentMaps(pageComponents, layoutComponents) {
|
|
93
|
+
const merged = { ...pageComponents };
|
|
94
|
+
for (const [type, component] of Object.entries(layoutComponents)) {
|
|
95
|
+
if (type in merged && type !== PAGE_OUTLET_TYPE) {
|
|
96
|
+
throw new Error(`Cannot enable unified editor: duplicated component type "${type}" across page/layout configs.`);
|
|
97
|
+
}
|
|
98
|
+
if (type === PAGE_OUTLET_TYPE) {
|
|
99
|
+
merged[type] = createPageOutletEditorComponent(component, Object.keys(pageComponents));
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
merged[type] = component;
|
|
103
|
+
}
|
|
104
|
+
return merged;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Builds an editor-only Puck config that can edit both layout chrome and page
|
|
108
|
+
* sections in one canvas.
|
|
109
|
+
*/
|
|
110
|
+
export function createUnifiedThemeEditorConfig(theme) {
|
|
111
|
+
const pageConfig = normalizeSudaConfig(theme.pageConfig);
|
|
112
|
+
const layoutConfig = normalizeSudaConfig(theme.layoutConfig);
|
|
113
|
+
const pageComponents = isRecord(pageConfig.components)
|
|
114
|
+
? pageConfig.components
|
|
115
|
+
: {};
|
|
116
|
+
const layoutComponents = isRecord(layoutConfig.components)
|
|
117
|
+
? layoutConfig.components
|
|
118
|
+
: {};
|
|
119
|
+
if (!(PAGE_OUTLET_TYPE in layoutComponents)) {
|
|
120
|
+
throw new Error(`Cannot enable unified editor: layout config is missing ${PAGE_OUTLET_TYPE}.`);
|
|
121
|
+
}
|
|
122
|
+
const components = mergeComponentMaps(pageComponents, layoutComponents);
|
|
123
|
+
const unified = {
|
|
124
|
+
components,
|
|
125
|
+
};
|
|
126
|
+
if (layoutConfig.root !== undefined) {
|
|
127
|
+
const rootConfig = layoutConfig.root;
|
|
128
|
+
const rootHasLabel = isRecord(rootConfig) && typeof rootConfig.label === "string";
|
|
129
|
+
unified.root = rootHasLabel ? rootConfig : { ...rootConfig, label: "Theme settings" };
|
|
130
|
+
}
|
|
131
|
+
if (pageConfig.categories !== undefined) {
|
|
132
|
+
unified.categories = pageConfig.categories;
|
|
133
|
+
}
|
|
134
|
+
return unified;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Composes page + layout persisted documents into one editor document.
|
|
138
|
+
*/
|
|
139
|
+
export function composeUnifiedThemeEditorData(layoutData, pageData) {
|
|
140
|
+
const pageContent = asContentArray(pageData);
|
|
141
|
+
const layoutContent = asContentArray(layoutData);
|
|
142
|
+
const mappedContent = layoutContent.map((item) => {
|
|
143
|
+
if (item.type !== PAGE_OUTLET_TYPE) {
|
|
144
|
+
return item;
|
|
145
|
+
}
|
|
146
|
+
const nextProps = {
|
|
147
|
+
...(isRecord(item.props) ? item.props : {}),
|
|
148
|
+
[PAGE_SLOT_FIELD]: pageContent,
|
|
149
|
+
};
|
|
150
|
+
const pageMeta = {
|
|
151
|
+
root: asRoot(pageData),
|
|
152
|
+
};
|
|
153
|
+
const pageZones = asZones(pageData);
|
|
154
|
+
if (pageZones !== undefined) {
|
|
155
|
+
pageMeta.zones = pageZones;
|
|
156
|
+
}
|
|
157
|
+
nextProps[PAGE_META_FIELD] = pageMeta;
|
|
158
|
+
return { ...item, props: nextProps };
|
|
159
|
+
});
|
|
160
|
+
const outletCount = mappedContent.filter((item) => item.type === PAGE_OUTLET_TYPE).length;
|
|
161
|
+
if (outletCount !== 1) {
|
|
162
|
+
throw new Error(`Cannot compose unified editor data: expected exactly 1 ${PAGE_OUTLET_TYPE}, received ${outletCount}.`);
|
|
163
|
+
}
|
|
164
|
+
const result = {
|
|
165
|
+
root: asRoot(layoutData),
|
|
166
|
+
content: mappedContent,
|
|
167
|
+
};
|
|
168
|
+
const layoutZones = asZones(layoutData);
|
|
169
|
+
if (layoutZones !== undefined && Object.keys(layoutZones).length > 0) {
|
|
170
|
+
result.zones = layoutZones;
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Splits a unified editor document back into layout + page persisted documents.
|
|
176
|
+
*/
|
|
177
|
+
export function splitUnifiedThemeEditorData(unifiedData) {
|
|
178
|
+
const unifiedContent = asContentArray(unifiedData);
|
|
179
|
+
const nextLayoutContent = [];
|
|
180
|
+
let pageContent = null;
|
|
181
|
+
let pageMeta;
|
|
182
|
+
let outletCount = 0;
|
|
183
|
+
for (const item of unifiedContent) {
|
|
184
|
+
if (item.type !== PAGE_OUTLET_TYPE) {
|
|
185
|
+
nextLayoutContent.push(item);
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
outletCount += 1;
|
|
189
|
+
const props = isRecord(item.props) ? item.props : {};
|
|
190
|
+
if (pageMeta === undefined && isPageMeta(props[PAGE_META_FIELD])) {
|
|
191
|
+
pageMeta = props[PAGE_META_FIELD];
|
|
192
|
+
}
|
|
193
|
+
const maybeSlot = props[PAGE_SLOT_FIELD];
|
|
194
|
+
pageContent = Array.isArray(maybeSlot)
|
|
195
|
+
? maybeSlot
|
|
196
|
+
.filter((node) => {
|
|
197
|
+
return isRecord(node) && typeof node.type === "string";
|
|
198
|
+
})
|
|
199
|
+
.map((node) => ({
|
|
200
|
+
type: node.type,
|
|
201
|
+
props: isRecord(node.props) ? node.props : {},
|
|
202
|
+
}))
|
|
203
|
+
: [];
|
|
204
|
+
const nextProps = { ...props };
|
|
205
|
+
delete nextProps[PAGE_SLOT_FIELD];
|
|
206
|
+
delete nextProps[PAGE_META_FIELD];
|
|
207
|
+
const nextItem = { ...item, props: nextProps };
|
|
208
|
+
nextLayoutContent.push(nextItem);
|
|
209
|
+
}
|
|
210
|
+
if (outletCount !== 1 || pageContent === null) {
|
|
211
|
+
throw new Error(`Cannot split unified editor data: expected exactly 1 ${PAGE_OUTLET_TYPE}, received ${outletCount}.`);
|
|
212
|
+
}
|
|
213
|
+
const zones = asZones(unifiedData);
|
|
214
|
+
const layoutData = {
|
|
215
|
+
root: asRoot(unifiedData),
|
|
216
|
+
content: nextLayoutContent,
|
|
217
|
+
...(zones !== undefined && Object.keys(zones).length > 0 ? { zones } : {}),
|
|
218
|
+
};
|
|
219
|
+
const pageRoot = asRoot(pageMeta);
|
|
220
|
+
const pageZones = asZones(pageMeta);
|
|
221
|
+
const pageData = {
|
|
222
|
+
root: pageRoot,
|
|
223
|
+
content: pageContent,
|
|
224
|
+
...(pageZones !== undefined ? { zones: pageZones } : {}),
|
|
225
|
+
};
|
|
226
|
+
const splitResult = { layoutData, pageData };
|
|
227
|
+
return splitResult;
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=unified-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unified-editor.js","sourceRoot":"","sources":["../../src/editor/unified-editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ThemeModule } from "../types";
|
|
2
|
+
export interface ThemeRuntimeState {
|
|
3
|
+
theme: ThemeModule | null;
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
error: string | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function useThemeRuntime(runtimeUrl: string | null): ThemeRuntimeState;
|
|
8
|
+
//# sourceMappingURL=use-theme-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-theme-runtime.d.ts","sourceRoot":"","sources":["../../src/editor/use-theme-runtime.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAI5C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AA4BD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB,CAuD5E"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import * as ReactJsxRuntime from "react/jsx-runtime";
|
|
5
|
+
import * as ReactDom from "react-dom";
|
|
6
|
+
import * as ReactDomClient from "react-dom/client";
|
|
7
|
+
const runtimeCache = new Map();
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval -- Preserve runtime URL imports from TS/bundler static rewrites.
|
|
9
|
+
const nativeImport = new Function("specifier", "return import(specifier)");
|
|
10
|
+
function installHostReactGlobals() {
|
|
11
|
+
const host = globalThis;
|
|
12
|
+
host.__SUDA_REACT__ = React;
|
|
13
|
+
host.__SUDA_REACT_JSX_RUNTIME__ = ReactJsxRuntime;
|
|
14
|
+
host.__SUDA_REACT_DOM__ = ReactDom;
|
|
15
|
+
host.__SUDA_REACT_DOM_CLIENT__ = ReactDomClient;
|
|
16
|
+
}
|
|
17
|
+
function loadRuntime(runtimeUrl) {
|
|
18
|
+
const existing = runtimeCache.get(runtimeUrl);
|
|
19
|
+
if (existing) {
|
|
20
|
+
return existing;
|
|
21
|
+
}
|
|
22
|
+
installHostReactGlobals();
|
|
23
|
+
const loading = nativeImport(runtimeUrl);
|
|
24
|
+
runtimeCache.set(runtimeUrl, loading);
|
|
25
|
+
return loading;
|
|
26
|
+
}
|
|
27
|
+
export function useThemeRuntime(runtimeUrl) {
|
|
28
|
+
const [state, setState] = useState({
|
|
29
|
+
theme: null,
|
|
30
|
+
isLoading: Boolean(runtimeUrl),
|
|
31
|
+
error: runtimeUrl ? null : "Theme version is missing.",
|
|
32
|
+
});
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
let cancelled = false;
|
|
35
|
+
if (!runtimeUrl) {
|
|
36
|
+
setState({
|
|
37
|
+
theme: null,
|
|
38
|
+
isLoading: false,
|
|
39
|
+
error: "Theme version is missing; publish or re-activate the theme.",
|
|
40
|
+
});
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
setState({ theme: null, isLoading: true, error: null });
|
|
44
|
+
void loadRuntime(runtimeUrl)
|
|
45
|
+
.then((runtime) => {
|
|
46
|
+
if (cancelled) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (!runtime.default) {
|
|
50
|
+
setState({
|
|
51
|
+
theme: null,
|
|
52
|
+
isLoading: false,
|
|
53
|
+
error: "Theme runtime did not export a default ThemeModule.",
|
|
54
|
+
});
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
setState({ theme: runtime.default, isLoading: false, error: null });
|
|
58
|
+
})
|
|
59
|
+
.catch((error) => {
|
|
60
|
+
if (cancelled) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const reason = error instanceof Error ? error.message : "unknown import error";
|
|
64
|
+
const suffix = process.env.NODE_ENV === "development" ? ` (${reason})` : "";
|
|
65
|
+
setState({
|
|
66
|
+
theme: null,
|
|
67
|
+
isLoading: false,
|
|
68
|
+
error: `Theme client runtime failed to load. Build this theme artifact before editing.${suffix}`,
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
return () => {
|
|
72
|
+
cancelled = true;
|
|
73
|
+
};
|
|
74
|
+
}, [runtimeUrl]);
|
|
75
|
+
return state;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=use-theme-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-theme-runtime.js","sourceRoot":"","sources":["../../src/editor/use-theme-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Field } from "@puckeditor/core";
|
|
2
|
+
export type SelectOption = {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string;
|
|
5
|
+
};
|
|
6
|
+
export type MenuItem = {
|
|
7
|
+
label: string;
|
|
8
|
+
url: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function fontField(label?: string, options?: SelectOption[]): Field<string>;
|
|
11
|
+
export declare function iconField(label?: string): Field<string>;
|
|
12
|
+
export declare function urlField(label?: string): Field<string>;
|
|
13
|
+
export declare function menuField(label?: string): Field<MenuItem[]>;
|
|
14
|
+
//# sourceMappingURL=basic-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-fields.d.ts","sourceRoot":"","sources":["../../src/fields/basic-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAgBF,wBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,YAAY,EAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,CAShG;AAED,wBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CASvD;AAED,wBAAgB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAStD;AAED,wBAAgB,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAc3D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const DEFAULT_FONTS = [
|
|
2
|
+
{ label: "System", value: "system" },
|
|
3
|
+
{ label: "Serif", value: "serif" },
|
|
4
|
+
{ label: "Sans", value: "sans" },
|
|
5
|
+
{ label: "Mono", value: "mono" },
|
|
6
|
+
];
|
|
7
|
+
function withLabel(field, label) {
|
|
8
|
+
if (label !== undefined) {
|
|
9
|
+
field.label = label;
|
|
10
|
+
}
|
|
11
|
+
return field;
|
|
12
|
+
}
|
|
13
|
+
export function fontField(label, options = DEFAULT_FONTS) {
|
|
14
|
+
return withLabel({
|
|
15
|
+
type: "select",
|
|
16
|
+
metadata: { sudaField: "font" },
|
|
17
|
+
options,
|
|
18
|
+
}, label);
|
|
19
|
+
}
|
|
20
|
+
export function iconField(label) {
|
|
21
|
+
return withLabel({
|
|
22
|
+
type: "text",
|
|
23
|
+
metadata: { sudaField: "icon" },
|
|
24
|
+
placeholder: "icon-name",
|
|
25
|
+
}, label);
|
|
26
|
+
}
|
|
27
|
+
export function urlField(label) {
|
|
28
|
+
return withLabel({
|
|
29
|
+
type: "text",
|
|
30
|
+
metadata: { sudaField: "url" },
|
|
31
|
+
placeholder: "https://example.com",
|
|
32
|
+
}, label);
|
|
33
|
+
}
|
|
34
|
+
export function menuField(label) {
|
|
35
|
+
return withLabel({
|
|
36
|
+
type: "array",
|
|
37
|
+
metadata: { sudaField: "menu" },
|
|
38
|
+
arrayFields: {
|
|
39
|
+
label: { type: "text", label: "Label" },
|
|
40
|
+
url: { type: "text", label: "URL" },
|
|
41
|
+
},
|
|
42
|
+
defaultItemProps: { label: "Menu item", url: "/" },
|
|
43
|
+
getItemSummary: (item) => item.label,
|
|
44
|
+
}, label);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=basic-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-fields.js","sourceRoot":"","sources":["../../src/fields/basic-fields.ts"],"names":[],"mappings":"AAYA,MAAM,aAAa,GAAmB;IACpC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAClC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAChC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;CACjC,CAAC;AAEF,SAAS,SAAS,CAAkB,KAAQ,EAAE,KAAc;IAC1D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,UAA0B,aAAa;IAC/E,OAAO,SAAS,CACd;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;QAC/B,OAAO;KACR,EACD,KAAK,CACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,SAAS,CACd;QACE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;QAC/B,WAAW,EAAE,WAAW;KACzB,EACD,KAAK,CACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,SAAS,CACd;QACE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;QAC9B,WAAW,EAAE,qBAAqB;KACnC,EACD,KAAK,CACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,SAAS,CACd;QACE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;QAC/B,WAAW,EAAE;YACX,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;YACvC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;SACpC;QACD,gBAAgB,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE;QAClD,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK;KACrC,EACD,KAAK,CACN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-field.d.ts","sourceRoot":"","sources":["../../src/fields/color-field.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAyJpD,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAS9D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
const BORDER = "1px solid var(--puck-color-grey-09, #dcdcdc)";
|
|
5
|
+
const CONTROL_HEIGHT = 28;
|
|
6
|
+
const CONTROL_WIDTH = 160;
|
|
7
|
+
const controlBase = {
|
|
8
|
+
height: CONTROL_HEIGHT,
|
|
9
|
+
padding: "0 8px",
|
|
10
|
+
border: BORDER,
|
|
11
|
+
borderRadius: 4,
|
|
12
|
+
fontSize: 12,
|
|
13
|
+
background: "var(--puck-color-white, #fff)",
|
|
14
|
+
color: "var(--puck-color-black, #111)",
|
|
15
|
+
boxSizing: "border-box",
|
|
16
|
+
};
|
|
17
|
+
const PRESET_COLORS = [
|
|
18
|
+
"#000000", "#444444", "#888888", "#bbbbbb", "#ffffff",
|
|
19
|
+
"#ef4444", "#f97316", "#eab308", "#22c55e", "#3b82f6",
|
|
20
|
+
"#8b5cf6", "#ec4899",
|
|
21
|
+
];
|
|
22
|
+
function ColorFieldRender({ value, onChange, }) {
|
|
23
|
+
const [open, setOpen] = useState(false);
|
|
24
|
+
const current = value ?? "";
|
|
25
|
+
const swatchValue = /^#[0-9a-fA-F]{6}$/.test(current) ? current : "#000000";
|
|
26
|
+
return (_jsxs("div", { "data-suda-field-layout": "inline", style: { position: "relative", width: CONTROL_WIDTH }, children: [_jsxs("button", { type: "button", onClick: () => setOpen((s) => !s), style: {
|
|
27
|
+
...controlBase,
|
|
28
|
+
width: CONTROL_WIDTH,
|
|
29
|
+
display: "flex",
|
|
30
|
+
alignItems: "center",
|
|
31
|
+
gap: 6,
|
|
32
|
+
cursor: "pointer",
|
|
33
|
+
padding: "0 8px",
|
|
34
|
+
}, children: [_jsx("span", { style: {
|
|
35
|
+
width: 16,
|
|
36
|
+
height: 16,
|
|
37
|
+
borderRadius: 3,
|
|
38
|
+
border: BORDER,
|
|
39
|
+
background: current || "#000",
|
|
40
|
+
flexShrink: 0,
|
|
41
|
+
} }), _jsx("span", { style: {
|
|
42
|
+
flex: 1,
|
|
43
|
+
overflow: "hidden",
|
|
44
|
+
textOverflow: "ellipsis",
|
|
45
|
+
whiteSpace: "nowrap",
|
|
46
|
+
fontSize: 12,
|
|
47
|
+
fontFamily: "monospace",
|
|
48
|
+
textAlign: "left",
|
|
49
|
+
}, children: current || "—" })] }), open ? (_jsxs(_Fragment, { children: [_jsx("div", { style: { position: "fixed", inset: 0, zIndex: 9998 }, onClick: () => setOpen(false) }), _jsxs("div", { style: {
|
|
50
|
+
position: "absolute",
|
|
51
|
+
right: 0,
|
|
52
|
+
top: CONTROL_HEIGHT + 4,
|
|
53
|
+
zIndex: 9999,
|
|
54
|
+
background: "#fff",
|
|
55
|
+
border: BORDER,
|
|
56
|
+
borderRadius: 8,
|
|
57
|
+
padding: 12,
|
|
58
|
+
boxShadow: "0 8px 32px rgba(0,0,0,0.14)",
|
|
59
|
+
width: 220,
|
|
60
|
+
display: "flex",
|
|
61
|
+
flexDirection: "column",
|
|
62
|
+
gap: 10,
|
|
63
|
+
}, children: [_jsx("input", { type: "color", value: swatchValue, style: {
|
|
64
|
+
width: "100%",
|
|
65
|
+
height: 36,
|
|
66
|
+
border: "none",
|
|
67
|
+
padding: 0,
|
|
68
|
+
cursor: "pointer",
|
|
69
|
+
borderRadius: 4,
|
|
70
|
+
}, onChange: (e) => onChange(e.target.value) }), _jsx("div", { style: {
|
|
71
|
+
display: "grid",
|
|
72
|
+
gridTemplateColumns: "repeat(6, 1fr)",
|
|
73
|
+
gap: 4,
|
|
74
|
+
}, children: PRESET_COLORS.map((c) => (_jsx("button", { type: "button", title: c, onClick: () => {
|
|
75
|
+
onChange(c);
|
|
76
|
+
setOpen(false);
|
|
77
|
+
}, style: {
|
|
78
|
+
width: "100%",
|
|
79
|
+
aspectRatio: "1",
|
|
80
|
+
background: c,
|
|
81
|
+
border: current === c ? "2px solid #1f6feb" : BORDER,
|
|
82
|
+
borderRadius: 3,
|
|
83
|
+
cursor: "pointer",
|
|
84
|
+
padding: 0,
|
|
85
|
+
} }, c))) }), _jsx("input", { type: "text", placeholder: "#000000 or var(--token)", value: current, style: { ...controlBase, width: "100%", fontFamily: "monospace" }, onChange: (e) => onChange(e.target.value) })] })] })) : null] }));
|
|
86
|
+
}
|
|
87
|
+
export function colorField(label) {
|
|
88
|
+
const field = {
|
|
89
|
+
type: "custom",
|
|
90
|
+
render: ({ value, onChange }) => _jsx(ColorFieldRender, { value: value, onChange: onChange }),
|
|
91
|
+
};
|
|
92
|
+
if (label !== undefined) {
|
|
93
|
+
field.label = label;
|
|
94
|
+
}
|
|
95
|
+
return field;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=color-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-field.js","sourceRoot":"","sources":["../../src/fields/color-field.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { CustomField } from "@puckeditor/core";
|
|
2
|
+
/**
|
|
3
|
+
* Standard semantic color tokens, modelled after the shadcn/Tailwind palette.
|
|
4
|
+
* Theme packages map these to whatever local variables they need.
|
|
5
|
+
*/
|
|
6
|
+
export interface SudaThemeColorTokens {
|
|
7
|
+
background: string;
|
|
8
|
+
foreground: string;
|
|
9
|
+
card: string;
|
|
10
|
+
primary: string;
|
|
11
|
+
primaryForeground: string;
|
|
12
|
+
secondary: string;
|
|
13
|
+
secondaryForeground: string;
|
|
14
|
+
accent: string;
|
|
15
|
+
accentForeground: string;
|
|
16
|
+
muted: string;
|
|
17
|
+
mutedForeground: string;
|
|
18
|
+
border: string;
|
|
19
|
+
input: string;
|
|
20
|
+
ring: string;
|
|
21
|
+
destructive: string;
|
|
22
|
+
}
|
|
23
|
+
/** Token keys, ordered for deterministic CSS output. */
|
|
24
|
+
export declare const SUDA_COLOR_TOKEN_KEYS: readonly (keyof SudaThemeColorTokens)[];
|
|
25
|
+
export interface SudaColorSchemePreset {
|
|
26
|
+
/** Stable id, e.g. "default" / "sunset". `custom` is reserved. */
|
|
27
|
+
id: string;
|
|
28
|
+
label: string;
|
|
29
|
+
tokens: SudaThemeColorTokens;
|
|
30
|
+
}
|
|
31
|
+
/** Persisted value of `colorSchemeField`. */
|
|
32
|
+
export interface SudaColorSchemeValue {
|
|
33
|
+
/** Currently active scheme id (preset id or `custom`). */
|
|
34
|
+
active: string;
|
|
35
|
+
/** Snapshot of resolved tokens for each known scheme, including `custom`. */
|
|
36
|
+
schemes: Record<string, SudaThemeColorTokens>;
|
|
37
|
+
}
|
|
38
|
+
export interface CreateThemeCssVariablesOptions {
|
|
39
|
+
/** Variable name prefix. Defaults to `--suda-color-`. */
|
|
40
|
+
prefix?: string;
|
|
41
|
+
/** Output format. `"string"` returns CSS declarations; `"style"` returns a style object. */
|
|
42
|
+
format?: "string" | "style";
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Convert a token map to CSS variables.
|
|
46
|
+
*
|
|
47
|
+
* - `format: "string"` (default) returns a sequence of declarations such as
|
|
48
|
+
* `--suda-color-primary: #ff6b2c;\n--suda-color-primary-foreground: #fff;`.
|
|
49
|
+
* - `format: "style"` returns a `Record<string, string>` suitable for a React
|
|
50
|
+
* `style` prop.
|
|
51
|
+
*/
|
|
52
|
+
export declare function createThemeCssVariables(tokens: SudaThemeColorTokens, options?: CreateThemeCssVariablesOptions): string | Record<string, string>;
|
|
53
|
+
export interface ColorSchemeFieldOptions {
|
|
54
|
+
/**
|
|
55
|
+
* Built-in presets (color schemes) the theme ships. The first preset is used
|
|
56
|
+
* as the default `active` scheme when the field has no value.
|
|
57
|
+
*/
|
|
58
|
+
presets: SudaColorSchemePreset[];
|
|
59
|
+
/** Initial `custom` tokens. Defaults to a clone of the first preset. */
|
|
60
|
+
customDefaults?: SudaThemeColorTokens;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Build the default value for a `colorSchemeField`. Presets are normalised
|
|
64
|
+
* into `schemes`, plus a `custom` slot seeded from `customDefaults` (or the
|
|
65
|
+
* first preset).
|
|
66
|
+
*/
|
|
67
|
+
export declare function createColorSchemeDefault(options: ColorSchemeFieldOptions): SudaColorSchemeValue;
|
|
68
|
+
/**
|
|
69
|
+
* Resolve the active token map from a `colorSchemeField` value. Unknown
|
|
70
|
+
* `active` ids fall back to the first preset, and missing tokens fall back to
|
|
71
|
+
* the preset defaults so renders stay stable.
|
|
72
|
+
*/
|
|
73
|
+
export declare function resolveColorSchemeTokens(value: SudaColorSchemeValue | undefined, options: ColorSchemeFieldOptions): SudaThemeColorTokens;
|
|
74
|
+
/**
|
|
75
|
+
* A Puck custom field for editing a theme color scheme. Stores
|
|
76
|
+
* `{ active, schemes }`; the value is intended to be passed to
|
|
77
|
+
* `resolveColorSchemeTokens` and `createThemeCssVariables` from the theme's
|
|
78
|
+
* root render.
|
|
79
|
+
*/
|
|
80
|
+
export declare function colorSchemeField(label: string | undefined, options: ColorSchemeFieldOptions): CustomField<SudaColorSchemeValue>;
|
|
81
|
+
//# sourceMappingURL=color-scheme-field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-scheme-field.d.ts","sourceRoot":"","sources":["../../src/fields/color-scheme-field.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,EAAE,SAAS,CAAC,MAAM,oBAAoB,CAAC,EAgBxE,CAAC;AAoBF,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB;IACnC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAC/C;AAQD,MAAM,WAAW,8BAA8B;IAC7C,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4FAA4F;IAC5F,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE,8BAAmC,GAC3C,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAejC;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,wEAAwE;IACxE,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AA2BD;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,uBAAuB,GAC/B,oBAAoB,CAkBtB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,oBAAoB,GAAG,SAAS,EACvC,OAAO,EAAE,uBAAuB,GAC/B,oBAAoB,CAYtB;AA4JD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,uBAAuB,GAC/B,WAAW,CAAC,oBAAoB,CAAC,CAenC"}
|