@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.
Files changed (153) hide show
  1. package/dist/ai/slots.d.ts +33 -0
  2. package/dist/ai/slots.d.ts.map +1 -0
  3. package/dist/ai/slots.js +139 -0
  4. package/dist/ai/slots.js.map +1 -0
  5. package/dist/assets.d.ts +42 -0
  6. package/dist/assets.d.ts.map +1 -0
  7. package/dist/assets.js +36 -0
  8. package/dist/assets.js.map +1 -0
  9. package/dist/cms/apply-bindings.d.ts +9 -0
  10. package/dist/cms/apply-bindings.d.ts.map +1 -0
  11. package/dist/cms/apply-bindings.js +128 -0
  12. package/dist/cms/apply-bindings.js.map +1 -0
  13. package/dist/cms/get-context.d.ts +9 -0
  14. package/dist/cms/get-context.d.ts.map +1 -0
  15. package/dist/cms/get-context.js +13 -0
  16. package/dist/cms/get-context.js.map +1 -0
  17. package/dist/cms/index.d.ts +4 -0
  18. package/dist/cms/index.d.ts.map +1 -0
  19. package/dist/cms/index.js +4 -0
  20. package/dist/cms/index.js.map +1 -0
  21. package/dist/cms/types.d.ts +116 -0
  22. package/dist/cms/types.d.ts.map +1 -0
  23. package/dist/cms/types.js +2 -0
  24. package/dist/cms/types.js.map +1 -0
  25. package/dist/components/base-blocks.d.ts +13 -0
  26. package/dist/components/base-blocks.d.ts.map +1 -0
  27. package/dist/components/base-blocks.js +157 -0
  28. package/dist/components/base-blocks.js.map +1 -0
  29. package/dist/components/containers.d.ts +8 -0
  30. package/dist/components/containers.d.ts.map +1 -0
  31. package/dist/components/containers.js +142 -0
  32. package/dist/components/containers.js.map +1 -0
  33. package/dist/components/index.d.ts +11 -0
  34. package/dist/components/index.d.ts.map +1 -0
  35. package/dist/components/index.js +17 -0
  36. package/dist/components/index.js.map +1 -0
  37. package/dist/components/interactive.client.d.ts +12 -0
  38. package/dist/components/interactive.client.d.ts.map +1 -0
  39. package/dist/components/interactive.client.js +43 -0
  40. package/dist/components/interactive.client.js.map +1 -0
  41. package/dist/components/metadata.d.ts +20 -0
  42. package/dist/components/metadata.d.ts.map +1 -0
  43. package/dist/components/metadata.js +9 -0
  44. package/dist/components/metadata.js.map +1 -0
  45. package/dist/components/shared-fields.d.ts +11 -0
  46. package/dist/components/shared-fields.d.ts.map +1 -0
  47. package/dist/components/shared-fields.js +37 -0
  48. package/dist/components/shared-fields.js.map +1 -0
  49. package/dist/editor/context.d.ts +79 -0
  50. package/dist/editor/context.d.ts.map +1 -0
  51. package/dist/editor/context.js +12 -0
  52. package/dist/editor/context.js.map +1 -0
  53. package/dist/editor/index.d.ts +5 -0
  54. package/dist/editor/index.d.ts.map +1 -0
  55. package/dist/editor/index.js +5 -0
  56. package/dist/editor/index.js.map +1 -0
  57. package/dist/editor/overrides.d.ts +3 -0
  58. package/dist/editor/overrides.d.ts.map +1 -0
  59. package/dist/editor/overrides.js +379 -0
  60. package/dist/editor/overrides.js.map +1 -0
  61. package/dist/editor/theme-editor.d.ts +46 -0
  62. package/dist/editor/theme-editor.d.ts.map +1 -0
  63. package/dist/editor/theme-editor.js +169 -0
  64. package/dist/editor/theme-editor.js.map +1 -0
  65. package/dist/editor/unified-editor.d.ts +25 -0
  66. package/dist/editor/unified-editor.d.ts.map +1 -0
  67. package/dist/editor/unified-editor.js +229 -0
  68. package/dist/editor/unified-editor.js.map +1 -0
  69. package/dist/editor/use-theme-runtime.d.ts +8 -0
  70. package/dist/editor/use-theme-runtime.d.ts.map +1 -0
  71. package/dist/editor/use-theme-runtime.js +77 -0
  72. package/dist/editor/use-theme-runtime.js.map +1 -0
  73. package/dist/fields/basic-fields.d.ts +14 -0
  74. package/dist/fields/basic-fields.d.ts.map +1 -0
  75. package/dist/fields/basic-fields.js +46 -0
  76. package/dist/fields/basic-fields.js.map +1 -0
  77. package/dist/fields/color-field.d.ts +3 -0
  78. package/dist/fields/color-field.d.ts.map +1 -0
  79. package/dist/fields/color-field.js +97 -0
  80. package/dist/fields/color-field.js.map +1 -0
  81. package/dist/fields/color-scheme-field.d.ts +81 -0
  82. package/dist/fields/color-scheme-field.d.ts.map +1 -0
  83. package/dist/fields/color-scheme-field.js +234 -0
  84. package/dist/fields/color-scheme-field.js.map +1 -0
  85. package/dist/fields/index.d.ts +6 -0
  86. package/dist/fields/index.d.ts.map +1 -0
  87. package/dist/fields/index.js +4 -0
  88. package/dist/fields/index.js.map +1 -0
  89. package/dist/fields/media-field.d.ts +10 -0
  90. package/dist/fields/media-field.d.ts.map +1 -0
  91. package/dist/fields/media-field.js +495 -0
  92. package/dist/fields/media-field.js.map +1 -0
  93. package/dist/fields/normalize-config.d.ts +3 -0
  94. package/dist/fields/normalize-config.d.ts.map +1 -0
  95. package/dist/fields/normalize-config.js +81 -0
  96. package/dist/fields/normalize-config.js.map +1 -0
  97. package/dist/fields/range-field.d.ts +9 -0
  98. package/dist/fields/range-field.d.ts.map +1 -0
  99. package/dist/fields/range-field.js +53 -0
  100. package/dist/fields/range-field.js.map +1 -0
  101. package/dist/fields/spacing-field.d.ts +7 -0
  102. package/dist/fields/spacing-field.d.ts.map +1 -0
  103. package/dist/fields/spacing-field.js +40 -0
  104. package/dist/fields/spacing-field.js.map +1 -0
  105. package/dist/fields/suda-fields.d.ts +45 -0
  106. package/dist/fields/suda-fields.d.ts.map +1 -0
  107. package/dist/fields/suda-fields.js +91 -0
  108. package/dist/fields/suda-fields.js.map +1 -0
  109. package/dist/index.d.ts +12 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +15 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/manifest.d.ts +47 -0
  114. package/dist/manifest.d.ts.map +1 -0
  115. package/dist/manifest.js +39 -0
  116. package/dist/manifest.js.map +1 -0
  117. package/dist/registry/filesystem.d.ts +27 -0
  118. package/dist/registry/filesystem.d.ts.map +1 -0
  119. package/dist/registry/filesystem.js +162 -0
  120. package/dist/registry/filesystem.js.map +1 -0
  121. package/dist/registry.d.ts +13 -0
  122. package/dist/registry.d.ts.map +1 -0
  123. package/dist/registry.js +2 -0
  124. package/dist/registry.js.map +1 -0
  125. package/dist/render/chrome.d.ts +18 -0
  126. package/dist/render/chrome.d.ts.map +1 -0
  127. package/dist/render/chrome.js +36 -0
  128. package/dist/render/chrome.js.map +1 -0
  129. package/dist/render/index.d.ts +4 -0
  130. package/dist/render/index.d.ts.map +1 -0
  131. package/dist/render/index.js +4 -0
  132. package/dist/render/index.js.map +1 -0
  133. package/dist/render/render.d.ts +21 -0
  134. package/dist/render/render.d.ts.map +1 -0
  135. package/dist/render/render.js +50 -0
  136. package/dist/render/render.js.map +1 -0
  137. package/dist/render/slot.d.ts +14 -0
  138. package/dist/render/slot.d.ts.map +1 -0
  139. package/dist/render/slot.js +14 -0
  140. package/dist/render/slot.js.map +1 -0
  141. package/dist/runtime.d.ts +8 -0
  142. package/dist/runtime.d.ts.map +1 -0
  143. package/dist/runtime.js +10 -0
  144. package/dist/runtime.js.map +1 -0
  145. package/dist/server.d.ts +13 -0
  146. package/dist/server.d.ts.map +1 -0
  147. package/dist/server.js +16 -0
  148. package/dist/server.js.map +1 -0
  149. package/dist/types.d.ts +171 -0
  150. package/dist/types.d.ts.map +1 -0
  151. package/dist/types.js +2 -0
  152. package/dist/types.js.map +1 -0
  153. package/package.json +68 -0
@@ -0,0 +1,157 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { resolveAsset } from "./metadata";
3
+ import { alignField } from "./shared-fields";
4
+ /**
5
+ * The whitelist of base "block" component types that may be inserted into
6
+ * container slots. Containers reference this list in their slot `allow`.
7
+ */
8
+ export const BASE_BLOCK_TYPES = [
9
+ "Text",
10
+ "Heading",
11
+ "RichText",
12
+ "Image",
13
+ "Button",
14
+ "Spacer",
15
+ ];
16
+ function metadataOf(props) {
17
+ return props.puck?.metadata;
18
+ }
19
+ const Text = {
20
+ label: "Text",
21
+ fields: {
22
+ text: { type: "textarea", label: "Text" },
23
+ align: alignField("Align"),
24
+ size: { type: "text", label: "Font size (e.g. 16px)" },
25
+ color: { type: "text", label: "Color" },
26
+ },
27
+ defaultProps: {
28
+ text: "Add your text here.",
29
+ align: "left",
30
+ size: "16px",
31
+ color: "inherit",
32
+ },
33
+ render: ({ text, align, size, color }) => (_jsx("p", { className: "te-text", style: { textAlign: align, fontSize: size, color, margin: 0 }, children: text })),
34
+ };
35
+ const Heading = {
36
+ label: "Heading",
37
+ fields: {
38
+ text: { type: "text", label: "Heading" },
39
+ level: {
40
+ type: "select",
41
+ label: "Level",
42
+ options: [
43
+ { label: "H1", value: "h1" },
44
+ { label: "H2", value: "h2" },
45
+ { label: "H3", value: "h3" },
46
+ { label: "H4", value: "h4" },
47
+ ],
48
+ },
49
+ align: alignField("Align"),
50
+ color: { type: "text", label: "Color" },
51
+ },
52
+ defaultProps: {
53
+ text: "Heading",
54
+ level: "h2",
55
+ align: "left",
56
+ color: "inherit",
57
+ },
58
+ render: ({ text, level, align, color }) => {
59
+ const Tag = level;
60
+ return (_jsx(Tag, { className: "te-heading", style: { textAlign: align, color, margin: 0 }, children: text }));
61
+ },
62
+ };
63
+ const RichText = {
64
+ label: "Rich text",
65
+ fields: {
66
+ html: { type: "textarea", label: "HTML" },
67
+ },
68
+ defaultProps: {
69
+ html: "<p>Rich <strong>text</strong> content.</p>",
70
+ },
71
+ // HTML is authored by trusted project editors; rendered as-is by design.
72
+ render: ({ html }) => (_jsx("div", { className: "te-richtext", dangerouslySetInnerHTML: { __html: html } })),
73
+ };
74
+ const Image = {
75
+ label: "Image",
76
+ fields: {
77
+ image: { type: "image", label: "Image" },
78
+ alt: { type: "text", label: "Alt text" },
79
+ rounded: {
80
+ type: "radio",
81
+ label: "Rounded",
82
+ options: [
83
+ { label: "No", value: false },
84
+ { label: "Yes", value: true },
85
+ ],
86
+ },
87
+ maxWidth: { type: "text", label: "Max width (e.g. 480px)" },
88
+ },
89
+ defaultProps: {
90
+ image: "",
91
+ alt: "",
92
+ rounded: false,
93
+ maxWidth: "100%",
94
+ },
95
+ render: (props) => {
96
+ const { image, alt, rounded, maxWidth } = props;
97
+ const url = resolveAsset(metadataOf(props), image);
98
+ const style = {
99
+ maxWidth,
100
+ width: "100%",
101
+ height: "auto",
102
+ borderRadius: rounded ? 12 : 0,
103
+ display: "block",
104
+ };
105
+ if (!url) {
106
+ return (_jsx("div", { className: "te-image te-image--empty", style: { ...style, minHeight: 120, background: "#f0f0f0" } }));
107
+ }
108
+ return _jsx("img", { className: "te-image", src: url, alt: alt, style: style });
109
+ },
110
+ };
111
+ const Button = {
112
+ label: "Button",
113
+ fields: {
114
+ label: { type: "text", label: "Label" },
115
+ href: { type: "text", label: "Link" },
116
+ variant: {
117
+ type: "select",
118
+ label: "Variant",
119
+ options: [
120
+ { label: "Primary", value: "primary" },
121
+ { label: "Secondary", value: "secondary" },
122
+ { label: "Ghost", value: "ghost" },
123
+ ],
124
+ },
125
+ align: alignField("Align"),
126
+ },
127
+ defaultProps: {
128
+ label: "Learn more",
129
+ href: "#",
130
+ variant: "primary",
131
+ align: "left",
132
+ },
133
+ render: ({ label, href, variant, align }) => (_jsx("div", { style: { textAlign: align }, children: _jsx("a", { className: `te-button te-button--${variant}`, href: href, children: label }) })),
134
+ };
135
+ const Spacer = {
136
+ label: "Spacer",
137
+ fields: {
138
+ height: { type: "text", label: "Height (e.g. 48px)" },
139
+ },
140
+ defaultProps: { height: "48px" },
141
+ render: ({ height }) => (_jsx("div", { className: "te-spacer", style: { height }, "aria-hidden": true })),
142
+ };
143
+ /**
144
+ * Returns the base block components keyed by type. These are the only
145
+ * components allowed inside container slots (see {@link BASE_BLOCK_TYPES}).
146
+ */
147
+ export function createBaseBlocks() {
148
+ return {
149
+ Text: Text,
150
+ Heading: Heading,
151
+ RichText: RichText,
152
+ Image: Image,
153
+ Button: Button,
154
+ Spacer: Spacer,
155
+ };
156
+ }
157
+ //# sourceMappingURL=base-blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-blocks.js","sourceRoot":"","sources":["../../src/components/base-blocks.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ComponentConfig } from "@puckeditor/core";
2
+ /**
3
+ * The container components. Each exposes one or more slots restricted to the
4
+ * base block whitelist ({@link BASE_BLOCK_TYPES}).
5
+ */
6
+ export declare function createContainers(): Record<string, ComponentConfig>;
7
+ export declare const CONTAINER_TYPES: readonly ["TwoColumn", "CardGrid", "Accordion", "Tabs", "Carousel"];
8
+ //# sourceMappingURL=containers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../../src/components/containers.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,kBAAkB,CAAC;AA4MvE;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAQlE;AAED,eAAO,MAAM,eAAe,qEAAsE,CAAC"}
@@ -0,0 +1,142 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BASE_BLOCK_TYPES } from "./base-blocks";
3
+ import { CarouselView, TabsView } from "./interactive.client";
4
+ const ALLOW = [...BASE_BLOCK_TYPES];
5
+ function slotField(label) {
6
+ return { type: "slot", label, allow: ALLOW };
7
+ }
8
+ const ratioColumns = {
9
+ "1-1": "1fr 1fr",
10
+ "1-2": "1fr 2fr",
11
+ "2-1": "2fr 1fr",
12
+ };
13
+ const TwoColumn = {
14
+ label: "Two columns",
15
+ fields: {
16
+ left: slotField("Left column"),
17
+ right: slotField("Right column"),
18
+ gap: { type: "text", label: "Gap (e.g. 32px)" },
19
+ ratio: {
20
+ type: "select",
21
+ label: "Ratio",
22
+ options: [
23
+ { label: "1 : 1", value: "1-1" },
24
+ { label: "1 : 2", value: "1-2" },
25
+ { label: "2 : 1", value: "2-1" },
26
+ ],
27
+ },
28
+ },
29
+ defaultProps: { left: [], right: [], gap: "32px", ratio: "1-1" },
30
+ render: (props) => {
31
+ const { left, right, gap, ratio } = props;
32
+ const Left = left;
33
+ const Right = right;
34
+ return (_jsxs("div", { className: "te-two-column", style: {
35
+ display: "grid",
36
+ gridTemplateColumns: ratioColumns[ratio],
37
+ gap,
38
+ }, children: [_jsx("div", { children: _jsx(Left, {}) }), _jsx("div", { children: _jsx(Right, {}) })] }));
39
+ },
40
+ };
41
+ const CardGrid = {
42
+ label: "Card grid",
43
+ fields: {
44
+ items: slotField("Cards"),
45
+ columns: {
46
+ type: "number",
47
+ label: "Columns",
48
+ min: 1,
49
+ max: 6,
50
+ },
51
+ gap: { type: "text", label: "Gap (e.g. 24px)" },
52
+ },
53
+ defaultProps: { items: [], columns: 3, gap: "24px" },
54
+ render: (props) => {
55
+ const { items, columns, gap } = props;
56
+ const Items = items;
57
+ const style = {
58
+ display: "grid",
59
+ gridTemplateColumns: `repeat(${Math.max(1, columns)}, minmax(0, 1fr))`,
60
+ gap,
61
+ };
62
+ return (_jsx("div", { className: "te-card-grid", style: style, children: _jsx(Items, {}) }));
63
+ },
64
+ };
65
+ const Accordion = {
66
+ label: "Accordion",
67
+ fields: {
68
+ items: {
69
+ type: "array",
70
+ label: "Items",
71
+ getItemSummary: (item) => item.title || "Item",
72
+ arrayFields: {
73
+ title: { type: "text", label: "Title" },
74
+ content: slotField("Content"),
75
+ },
76
+ defaultItemProps: { title: "Question", content: [] },
77
+ },
78
+ },
79
+ defaultProps: {
80
+ items: [{ title: "Question", content: [] }],
81
+ },
82
+ render: (props) => {
83
+ const { items } = props;
84
+ return (_jsx("div", { className: "te-accordion", children: items.map((item, index) => {
85
+ const Content = item.content;
86
+ return (_jsxs("details", { className: "te-accordion__item", children: [_jsx("summary", { className: "te-accordion__title", children: item.title }), _jsx("div", { className: "te-accordion__content", children: _jsx(Content, {}) })] }, index));
87
+ }) }));
88
+ },
89
+ };
90
+ const Tabs = {
91
+ label: "Tabs",
92
+ fields: {
93
+ items: {
94
+ type: "array",
95
+ label: "Tabs",
96
+ getItemSummary: (item) => item.label || "Tab",
97
+ arrayFields: {
98
+ label: { type: "text", label: "Label" },
99
+ content: slotField("Content"),
100
+ },
101
+ defaultItemProps: { label: "Tab", content: [] },
102
+ },
103
+ },
104
+ defaultProps: {
105
+ items: [{ label: "Tab", content: [] }],
106
+ },
107
+ render: (props) => {
108
+ const { items } = props;
109
+ return (_jsx(TabsView, { tabs: items.map((item) => {
110
+ const Content = item.content;
111
+ return { label: item.label, panel: _jsx(Content, {}) };
112
+ }) }));
113
+ },
114
+ };
115
+ const Carousel = {
116
+ label: "Carousel",
117
+ fields: {
118
+ items: slotField("Slides"),
119
+ },
120
+ defaultProps: { items: [] },
121
+ render: (props) => {
122
+ const { items } = props;
123
+ const Items = items;
124
+ // Render the slot once; the client view handles horizontal scroll/snap.
125
+ return _jsx(CarouselView, { items: [_jsx(Items, {}, "slot")] });
126
+ },
127
+ };
128
+ /**
129
+ * The container components. Each exposes one or more slots restricted to the
130
+ * base block whitelist ({@link BASE_BLOCK_TYPES}).
131
+ */
132
+ export function createContainers() {
133
+ return {
134
+ TwoColumn,
135
+ CardGrid,
136
+ Accordion,
137
+ Tabs,
138
+ Carousel,
139
+ };
140
+ }
141
+ export const CONTAINER_TYPES = ["TwoColumn", "CardGrid", "Accordion", "Tabs", "Carousel"];
142
+ //# sourceMappingURL=containers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"containers.js","sourceRoot":"","sources":["../../src/components/containers.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { BASE_BLOCK_TYPES, createBaseBlocks, type BaseBlockType } from "./base-blocks";
2
+ export { createContainers, CONTAINER_TYPES } from "./containers";
3
+ export { type ThemeRenderMetadata, resolveAsset } from "./metadata";
4
+ export { alignField, fontWeightField } from "./shared-fields";
5
+ import type { ComponentConfig } from "@puckeditor/core";
6
+ /**
7
+ * Convenience helper returning all engine-provided components (base blocks +
8
+ * containers) keyed by type, ready to spread into a theme's `pageConfig.components`.
9
+ */
10
+ export declare function createEngineComponents(): Record<string, ComponentConfig>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKxD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAKxE"}
@@ -0,0 +1,17 @@
1
+ export { BASE_BLOCK_TYPES, createBaseBlocks } from "./base-blocks";
2
+ export { createContainers, CONTAINER_TYPES } from "./containers";
3
+ export { resolveAsset } from "./metadata";
4
+ export { alignField, fontWeightField } from "./shared-fields";
5
+ import { createBaseBlocks } from "./base-blocks";
6
+ import { createContainers } from "./containers";
7
+ /**
8
+ * Convenience helper returning all engine-provided components (base blocks +
9
+ * containers) keyed by type, ready to spread into a theme's `pageConfig.components`.
10
+ */
11
+ export function createEngineComponents() {
12
+ return {
13
+ ...createBaseBlocks(),
14
+ ...createContainers(),
15
+ };
16
+ }
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAsB,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAA4B,YAAY,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAI9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,GAAG,gBAAgB,EAAE;QACrB,GAAG,gBAAgB,EAAE;KACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type ReactNode } from "react";
2
+ export interface TabItem {
3
+ label: string;
4
+ panel: ReactNode;
5
+ }
6
+ export declare function TabsView({ tabs }: {
7
+ tabs: TabItem[];
8
+ }): React.ReactElement;
9
+ export declare function CarouselView({ items }: {
10
+ items: ReactNode[];
11
+ }): React.ReactElement;
12
+ //# sourceMappingURL=interactive.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.client.d.ts","sourceRoot":"","sources":["../../src/components/interactive.client.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAuBjD,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAwB1E;AAgBD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAUlF"}
@@ -0,0 +1,43 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ const tabListStyle = {
5
+ display: "flex",
6
+ gap: 4,
7
+ borderBottom: "1px solid #e5e5e5",
8
+ marginBottom: 16,
9
+ flexWrap: "wrap",
10
+ };
11
+ function tabButtonStyle(active) {
12
+ return {
13
+ appearance: "none",
14
+ border: "none",
15
+ background: "none",
16
+ padding: "8px 14px",
17
+ cursor: "pointer",
18
+ fontWeight: active ? 600 : 400,
19
+ borderBottom: active ? "2px solid currentColor" : "2px solid transparent",
20
+ color: "inherit",
21
+ };
22
+ }
23
+ export function TabsView({ tabs }) {
24
+ const [active, setActive] = useState(0);
25
+ const current = tabs[active] ?? tabs[0];
26
+ return (_jsxs("div", { className: "te-tabs", children: [_jsx("div", { role: "tablist", style: tabListStyle, children: tabs.map((tab, index) => (_jsx("button", { type: "button", role: "tab", "aria-selected": index === active, style: tabButtonStyle(index === active), onClick: () => setActive(index), children: tab.label || `Tab ${index + 1}` }, index))) }), _jsx("div", { role: "tabpanel", className: "te-tabs__panel", children: current?.panel })] }));
27
+ }
28
+ const carouselTrackStyle = {
29
+ display: "flex",
30
+ gap: 16,
31
+ overflowX: "auto",
32
+ scrollSnapType: "x mandatory",
33
+ paddingBottom: 8,
34
+ };
35
+ const carouselItemStyle = {
36
+ flex: "0 0 auto",
37
+ scrollSnapAlign: "start",
38
+ minWidth: "min(80%, 320px)",
39
+ };
40
+ export function CarouselView({ items }) {
41
+ return (_jsx("div", { className: "te-carousel", style: carouselTrackStyle, children: items.map((item, index) => (_jsx("div", { className: "te-carousel__item", style: carouselItemStyle, children: item }, index))) }));
42
+ }
43
+ //# sourceMappingURL=interactive.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.client.js","sourceRoot":"","sources":["../../src/components/interactive.client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAkB,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjD,MAAM,YAAY,GAAwB;IACxC,OAAO,EAAE,MAAM;IACf,GAAG,EAAE,CAAC;IACN,YAAY,EAAE,mBAAmB;IACjC,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,MAAM;CACjB,CAAC;AAEF,SAAS,cAAc,CAAC,MAAe;IACrC,OAAO;QACL,UAAU,EAAE,MAAM;QAClB,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QAC9B,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,uBAAuB;QACzE,KAAK,EAAE,SAAS;KACjB,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAuB;IACpD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CACL,eAAK,SAAS,EAAC,SAAS,aACtB,cAAK,IAAI,EAAC,SAAS,EAAC,KAAK,EAAE,YAAY,YACpC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CACxB,iBAEE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,KAAK,mBACK,KAAK,KAAK,MAAM,EAC/B,KAAK,EAAE,cAAc,CAAC,KAAK,KAAK,MAAM,CAAC,EACvC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,YAE9B,GAAG,CAAC,KAAK,IAAI,OAAO,KAAK,GAAG,CAAC,EAAE,IAP3B,KAAK,CAQH,CACV,CAAC,GACE,EACN,cAAK,IAAI,EAAC,UAAU,EAAC,SAAS,EAAC,gBAAgB,YAC5C,OAAO,EAAE,KAAK,GACX,IACF,CACP,CAAC;AACJ,CAAC;AAED,MAAM,kBAAkB,GAAwB;IAC9C,OAAO,EAAE,MAAM;IACf,GAAG,EAAE,EAAE;IACP,SAAS,EAAE,MAAM;IACjB,cAAc,EAAE,aAAa;IAC7B,aAAa,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,iBAAiB,GAAwB;IAC7C,IAAI,EAAE,UAAU;IAChB,eAAe,EAAE,OAAO;IACxB,QAAQ,EAAE,iBAAiB;CAC5B,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAA0B;IAC5D,OAAO,CACL,cAAK,SAAS,EAAC,aAAa,EAAC,KAAK,EAAE,kBAAkB,YACnD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1B,cAAiB,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,iBAAiB,YACpE,IAAI,IADG,KAAK,CAET,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Metadata passed through Puck (`<Puck metadata>` / `<Render metadata>`) and
3
+ * read by component `render` functions via `puck.metadata`. Lets render-time
4
+ * code resolve asset path strings to concrete URLs without bundling host
5
+ * concerns into the theme.
6
+ *
7
+ * `cms` is typed as `unknown` here to avoid a circular import with
8
+ * `../cms/types`. Components should retrieve the typed CMS context via
9
+ * `getCmsContext(metadata)` from `@sudajs/theme-engine/runtime`.
10
+ */
11
+ export interface ThemeRenderMetadata {
12
+ resolveAssetUrl?: (value: string | undefined) => string | undefined;
13
+ /** True while rendering inside the editor canvas. */
14
+ isEditor?: boolean;
15
+ /** Optional CMS render context. Read via `getCmsContext`. */
16
+ cms?: unknown;
17
+ [key: string]: unknown;
18
+ }
19
+ export declare function resolveAsset(metadata: ThemeRenderMetadata | undefined, value: string | undefined): string | undefined;
20
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/components/metadata.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,CAAC;IACpE,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,mBAAmB,GAAG,SAAS,EACzC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,GAAG,SAAS,CAMpB"}
@@ -0,0 +1,9 @@
1
+ import { resolveAssetPath } from "../assets";
2
+ export function resolveAsset(metadata, value) {
3
+ if (!value) {
4
+ return undefined;
5
+ }
6
+ const resolved = metadata?.resolveAssetUrl?.(value);
7
+ return resolved ?? resolveAssetPath(value);
8
+ }
9
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/components/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAqB7C,MAAM,UAAU,YAAY,CAC1B,QAAyC,EACzC,KAAyB;IAEzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,EAAE,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,QAAQ,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { SelectField } from "@puckeditor/core";
2
+ /**
3
+ * A select field for CSS `text-align`. Shared across base blocks so alignment
4
+ * controls stay consistent.
5
+ */
6
+ export declare function alignField(label?: string): SelectField;
7
+ /**
8
+ * A select field for common CSS font weights.
9
+ */
10
+ export declare function fontWeightField(label?: string): SelectField;
11
+ //# sourceMappingURL=shared-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-fields.d.ts","sourceRoot":"","sources":["../../src/components/shared-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAatD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAc3D"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * A select field for CSS `text-align`. Shared across base blocks so alignment
3
+ * controls stay consistent.
4
+ */
5
+ export function alignField(label) {
6
+ const field = {
7
+ type: "select",
8
+ options: [
9
+ { label: "Left", value: "left" },
10
+ { label: "Center", value: "center" },
11
+ { label: "Right", value: "right" },
12
+ ],
13
+ };
14
+ if (label !== undefined) {
15
+ field.label = label;
16
+ }
17
+ return field;
18
+ }
19
+ /**
20
+ * A select field for common CSS font weights.
21
+ */
22
+ export function fontWeightField(label) {
23
+ const field = {
24
+ type: "select",
25
+ options: [
26
+ { label: "Normal", value: "400" },
27
+ { label: "Medium", value: "500" },
28
+ { label: "Semibold", value: "600" },
29
+ { label: "Bold", value: "700" },
30
+ ],
31
+ };
32
+ if (label !== undefined) {
33
+ field.label = label;
34
+ }
35
+ return field;
36
+ }
37
+ //# sourceMappingURL=shared-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-fields.js","sourceRoot":"","sources":["../../src/components/shared-fields.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,MAAM,KAAK,GAAgB;QACzB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YAChC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;YACpC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;SACnC;KACF,CAAC;IACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,MAAM,KAAK,GAAgB;QACzB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;YACjC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;YACjC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE;YACnC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;SAChC;KACF,CAAC;IACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { type ThemeAssetSummary, type ThemeUnsplashAssetSummary } from "../assets";
2
+ export type { ThemeAssetSummary, ThemeUnsplashAssetSummary } from "../assets";
3
+ export type ThemeMediaListParams = {
4
+ kind?: "image" | "video" | "file" | "media";
5
+ search?: string;
6
+ page?: number;
7
+ perPage?: number;
8
+ };
9
+ export type ThemeMediaListResult = {
10
+ items: ThemeAssetSummary[];
11
+ page: number;
12
+ perPage: number;
13
+ total?: number;
14
+ hasMore: boolean;
15
+ };
16
+ export type ThemeUnsplashListResult = {
17
+ items: ThemeUnsplashAssetSummary[];
18
+ page: number;
19
+ perPage: number;
20
+ total?: number;
21
+ hasMore: boolean;
22
+ };
23
+ /**
24
+ * Localised strings for the media picker UI. Themes / engine code never
25
+ * hardcode locale strings; the host (workspace) injects the active locale.
26
+ */
27
+ export interface ThemeMediaPickerMessages {
28
+ emptySelectImage: string;
29
+ emptySelectVideo: string;
30
+ emptySelectMedia: string;
31
+ browseUnsplash: string;
32
+ selectedLabel: string;
33
+ clearSelection: string;
34
+ dialogTitle: string;
35
+ tabMyAssets: string;
36
+ tabStockImages: string;
37
+ searchPlaceholder: string;
38
+ uploadButton: string;
39
+ uploadHint: string;
40
+ uploadDropzone: string;
41
+ loading: string;
42
+ loadingMore: string;
43
+ loadMore: string;
44
+ loadError: string;
45
+ retry: string;
46
+ emptyAssets: string;
47
+ emptyUnsplash: string;
48
+ unsplashFooter: string;
49
+ popularSearches: string;
50
+ close: string;
51
+ }
52
+ export interface ThemeEditorContextValue {
53
+ /** Initial known project media the media field can pick from. */
54
+ assets: ThemeAssetSummary[];
55
+ /** Resolves an asset path / URL to a concrete URL for previews. */
56
+ resolveAssetUrl: (value: string | undefined) => string | undefined;
57
+ listMedia?: (params: ThemeMediaListParams) => Promise<ThemeMediaListResult>;
58
+ uploadMedia?: (file: File, params?: {
59
+ kind?: ThemeMediaListParams["kind"];
60
+ }) => Promise<ThemeAssetSummary>;
61
+ listUnsplash?: (params: {
62
+ query?: string;
63
+ page?: number;
64
+ perPage?: number;
65
+ }) => Promise<ThemeUnsplashListResult>;
66
+ /**
67
+ * Opens the host's uploader and resolves with the uploaded asset, or `null`
68
+ * if the user cancelled. Optional: when absent, the media field only allows
69
+ * picking existing assets / entering a URL.
70
+ */
71
+ requestUpload?: () => Promise<ThemeAssetSummary | null>;
72
+ /** i18n strings for the media picker UI. Optional fallback to defaults. */
73
+ messages?: ThemeMediaPickerMessages;
74
+ /** Whether to automatically switch to the outline tab when a component is selected. */
75
+ autoSwitchOutline?: boolean;
76
+ }
77
+ export declare const ThemeEditorContext: import("react").Context<ThemeEditorContextValue>;
78
+ export declare function useThemeEditorContext(): ThemeEditorContextValue;
79
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/editor/context.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { createContext, useContext } from "react";
3
+ import { resolveAssetPath, } from "../assets";
4
+ const noopResolve = (value) => resolveAssetPath(value);
5
+ export const ThemeEditorContext = createContext({
6
+ assets: [],
7
+ resolveAssetUrl: noopResolve,
8
+ });
9
+ export function useThemeEditorContext() {
10
+ return useContext(ThemeEditorContext);
11
+ }
12
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/editor/context.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,EACL,gBAAgB,GAGjB,MAAM,WAAW,CAAC;AAoFnB,MAAM,WAAW,GAAG,CAAC,KAAyB,EAAsB,EAAE,CACpE,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAE1B,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAA0B;IACvE,MAAM,EAAE,EAAE;IACV,eAAe,EAAE,WAAW;CAC7B,CAAC,CAAC;AAEH,MAAM,UAAU,qBAAqB;IACnC,OAAO,UAAU,CAAC,kBAAkB,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { SUDA_THEME_SETTINGS_ACTION, ThemeEditor, type ThemeEditorProps } from "./theme-editor";
2
+ export { composeUnifiedThemeEditorData, createUnifiedThemeEditorConfig, splitUnifiedThemeEditorData, } from "./unified-editor";
3
+ export { ThemeEditorContext, useThemeEditorContext, type ThemeEditorContextValue, type ThemeMediaListParams, type ThemeMediaListResult, type ThemeMediaPickerMessages, type ThemeUnsplashListResult, } from "./context";
4
+ export { useThemeRuntime, type ThemeRuntimeState } from "./use-theme-runtime";
5
+ //# sourceMappingURL=index.d.ts.map