@morphika/andami 0.5.0 → 0.5.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/README.md +151 -36
- package/app/admin/assets/page.tsx +6 -6
- package/app/admin/database/page.tsx +302 -302
- package/app/admin/error.tsx +53 -53
- package/app/admin/layout.tsx +320 -327
- package/app/admin/navigation/page.tsx +255 -255
- package/app/admin/pages/[slug]/page.tsx +6 -6
- package/app/admin/pages/page.tsx +11 -11
- package/app/admin/projects/page.tsx +14 -14
- package/app/admin/setup/page.tsx +1 -1
- package/app/admin/styles/page.tsx +1 -1
- package/components/admin/MetadataEditor.tsx +6 -6
- package/components/admin/nav-builder/NavBuilder.tsx +1 -1
- package/components/admin/nav-builder/NavBuilderGrid.tsx +3 -3
- package/components/admin/nav-builder/NavGridCell.tsx +48 -48
- package/components/admin/nav-builder/NavGridItem.tsx +4 -4
- package/components/admin/nav-builder/NavItemSettings.tsx +331 -331
- package/components/admin/nav-builder/NavItemTypePicker.tsx +102 -102
- package/components/admin/nav-builder/NavLivePreview.tsx +1 -1
- package/components/admin/nav-builder/NavMobileLivePreview.tsx +226 -226
- package/components/admin/nav-builder/NavMobileSettings.tsx +242 -242
- package/components/admin/nav-builder/NavSettingsFields.tsx +514 -514
- package/components/admin/setup-wizard/BrandingStep.tsx +3 -3
- package/components/admin/setup-wizard/DatabaseStep.tsx +2 -2
- package/components/admin/setup-wizard/DoneStep.tsx +1 -1
- package/components/admin/setup-wizard/SetupWizard.tsx +4 -4
- package/components/admin/setup-wizard/StorageStep.tsx +2 -2
- package/components/admin/setup-wizard/WelcomeStep.tsx +2 -2
- package/components/admin/styles/ColorsEditor.tsx +2 -2
- package/components/admin/styles/FontsEditor.tsx +6 -6
- package/components/admin/styles/GridLayoutEditor.tsx +9 -9
- package/components/admin/styles/LinksButtonsEditor.tsx +5 -5
- package/components/admin/styles/TypographyEditor.tsx +6 -6
- package/components/admin/styles/shared.tsx +68 -68
- package/components/blocks/AudioBlockRenderer.tsx +286 -0
- package/components/blocks/BeforeAfterBlockRenderer.tsx +274 -0
- package/components/blocks/MarqueeBlockRenderer.tsx +316 -0
- package/components/blocks/ProjectCarouselBlockRenderer.tsx +1 -1
- package/components/builder/BlockCardIcons.tsx +316 -227
- package/components/builder/BlockTypePicker.tsx +3 -1
- package/components/builder/BubbleIcons.tsx +90 -0
- package/components/builder/BuilderCanvas.tsx +2 -0
- package/components/builder/CanvasMinimap.tsx +2 -2
- package/components/builder/CoverSectionCanvas.tsx +363 -275
- package/components/builder/DeviceFrame.tsx +1 -1
- package/components/builder/DndWrapper.tsx +3 -3
- package/components/builder/InsertionLines.tsx +1 -1
- package/components/builder/SectionCardIcons.tsx +421 -320
- package/components/builder/SectionEditorBar.tsx +1 -1
- package/components/builder/SectionTypePicker.tsx +4 -4
- package/components/builder/SectionV2Canvas.tsx +20 -4
- package/components/builder/SectionV2Column.tsx +74 -68
- package/components/builder/SortableBlock.tsx +93 -73
- package/components/builder/SortableRow.tsx +27 -26
- package/components/builder/VirtualAssetGrid.tsx +2 -2
- package/components/builder/asset-browser/R2BrowserContent.tsx +34 -17
- package/components/builder/asset-browser/helpers.ts +4 -0
- package/components/builder/asset-browser/types.ts +2 -1
- package/components/builder/blockStyles.tsx +192 -173
- package/components/builder/color-picker/AlphaSlider.tsx +141 -141
- package/components/builder/color-picker/ColorInputs.tsx +105 -105
- package/components/builder/color-picker/EyedropperButton.tsx +74 -74
- package/components/builder/color-picker/HueSlider.tsx +124 -124
- package/components/builder/color-picker/SaturationCanvas.tsx +142 -142
- package/components/builder/color-picker/SwatchBar.tsx +93 -93
- package/components/builder/editors/AudioBlockEditor.tsx +242 -0
- package/components/builder/editors/BeforeAfterBlockEditor.tsx +360 -0
- package/components/builder/editors/ButtonBlockEditor.tsx +4 -4
- package/components/builder/editors/EnterAnimationPicker.tsx +2 -2
- package/components/builder/editors/HoverEffectPicker.tsx +2 -2
- package/components/builder/editors/ImageBlockEditor.tsx +2 -2
- package/components/builder/editors/ImageGridBlockEditor.tsx +4 -4
- package/components/builder/editors/MarqueeBlockEditor.tsx +621 -0
- package/components/builder/editors/ProjectCarouselBlockEditor.tsx +443 -443
- package/components/builder/editors/ProjectGridEditor.tsx +9 -9
- package/components/builder/editors/SpacerBlockEditor.tsx +5 -5
- package/components/builder/editors/StaggerSettings.tsx +109 -109
- package/components/builder/editors/TextBlockEditor.tsx +3 -3
- package/components/builder/editors/TextStylePicker.tsx +1 -1
- package/components/builder/editors/VideoBlockEditor.tsx +2 -2
- package/components/builder/editors/index.ts +11 -10
- package/components/builder/editors/shared.tsx +7 -7
- package/components/builder/live-preview/LiveAudioPreview.tsx +120 -0
- package/components/builder/live-preview/LiveBeforeAfterPreview.tsx +176 -0
- package/components/builder/live-preview/LiveImageGridPreview.tsx +10 -2
- package/components/builder/live-preview/LiveImagePreview.tsx +1 -1
- package/components/builder/live-preview/LiveMarqueePreview.tsx +39 -0
- package/components/builder/live-preview/LiveProjectCarouselPreview.tsx +1 -1
- package/components/builder/live-preview/LiveVideoPreview.tsx +1 -1
- package/components/builder/live-preview/ProjectCardWrapper.tsx +291 -291
- package/components/builder/settings-panel/AnimationTab.tsx +138 -138
- package/components/builder/settings-panel/BlockLayoutTab.tsx +7 -7
- package/components/builder/settings-panel/CardEntranceSection.tsx +114 -114
- package/components/builder/settings-panel/ColumnV2Settings.tsx +5 -5
- package/components/builder/settings-panel/CoverSectionLayoutTab.tsx +71 -71
- package/components/builder/settings-panel/CoverSectionSettings.tsx +335 -335
- package/components/builder/settings-panel/PageSettings.tsx +3 -3
- package/components/builder/settings-panel/ParallaxSlideSettings.tsx +2 -2
- package/components/builder/settings-panel/SectionV2AnimationTab.tsx +4 -4
- package/components/builder/settings-panel/SectionV2LayoutTab.tsx +356 -356
- package/components/builder/settings-panel/SectionV2Settings.tsx +14 -14
- package/components/builder/settings-panel/TRBLInputs.tsx +1 -1
- package/lib/animation/enter-types.ts +3 -0
- package/lib/animation/hover-effect-presets.ts +210 -210
- package/lib/animation/hover-effect-types.ts +3 -0
- package/lib/builder/block-registrations.ts +468 -335
- package/lib/builder/constants.ts +111 -111
- package/lib/builder/store-sections.ts +2 -2
- package/lib/builder/types-slices.ts +414 -414
- package/lib/builder/types.ts +6 -1
- package/lib/config/index.ts +27 -27
- package/lib/sanity/types.ts +156 -1
- package/lib/version.ts +1 -1
- package/package.json +1 -1
- package/sanity/schemas/blocks/audioBlock.ts +69 -0
- package/sanity/schemas/blocks/beforeAfterBlock.ts +121 -0
- package/sanity/schemas/blocks/index.ts +12 -9
- package/sanity/schemas/blocks/marqueeBlock.ts +292 -0
- package/sanity/schemas/index.ts +120 -111
- package/styles/admin.css +85 -85
- package/styles/animations.css +237 -237
- package/styles/base.css +114 -114
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { defineField, defineType } from "sanity";
|
|
2
|
+
import { blockLayoutField, blockAnimationFields } from "./blockLayout";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* marqueeBlock — horizontal infinite-scroll ticker.
|
|
6
|
+
*
|
|
7
|
+
* Signature portfolio element. Supports mixed content (text, images,
|
|
8
|
+
* separators) scrolling horizontally at a configurable speed, with
|
|
9
|
+
* pause-on-hover and a hollow-text "outline" typography option for the
|
|
10
|
+
* classic portfolio look.
|
|
11
|
+
*
|
|
12
|
+
* Treated as a **section-level block** (same semantics as
|
|
13
|
+
* projectGridBlock / projectCarouselBlock): lives inside a full-width
|
|
14
|
+
* column of a pageSectionV2 and is added via the "+ Add Section" modal,
|
|
15
|
+
* not the "+ Add Block" picker. Unlike the two project-related section
|
|
16
|
+
* blocks, Marquee is available on **both pages and projects** — the
|
|
17
|
+
* "AVAILABLE FOR WORK" band fits naturally on `/work/[slug]` too.
|
|
18
|
+
*
|
|
19
|
+
* Performance: the renderer uses pure CSS @keyframes + IntersectionObserver
|
|
20
|
+
* to pause the animation when off-screen. Zero JS in the hot path, zero
|
|
21
|
+
* CPU off-screen. Respects `prefers-reduced-motion`.
|
|
22
|
+
*
|
|
23
|
+
* Hover effects deliberately disabled (enterPresets only): a block that
|
|
24
|
+
* is already moving doesn't benefit from scale/tilt hover effects — would
|
|
25
|
+
* fight the motion.
|
|
26
|
+
*/
|
|
27
|
+
export const marqueeBlock = defineType({
|
|
28
|
+
name: "marqueeBlock",
|
|
29
|
+
title: "Marquee",
|
|
30
|
+
type: "object",
|
|
31
|
+
fields: [
|
|
32
|
+
// ─── Content (items array) ────────────────────────────────
|
|
33
|
+
defineField({
|
|
34
|
+
name: "items",
|
|
35
|
+
title: "Items",
|
|
36
|
+
type: "array",
|
|
37
|
+
description:
|
|
38
|
+
"Ordered list of text, images and separators. They repeat in order indefinitely as the marquee scrolls.",
|
|
39
|
+
of: [
|
|
40
|
+
{
|
|
41
|
+
type: "object",
|
|
42
|
+
name: "marqueeText",
|
|
43
|
+
title: "Text",
|
|
44
|
+
fields: [
|
|
45
|
+
defineField({
|
|
46
|
+
name: "text",
|
|
47
|
+
title: "Text",
|
|
48
|
+
type: "string",
|
|
49
|
+
validation: (Rule) => Rule.required().min(1),
|
|
50
|
+
}),
|
|
51
|
+
],
|
|
52
|
+
preview: {
|
|
53
|
+
select: { title: "text" },
|
|
54
|
+
prepare: ({ title }: { title?: string }) => ({
|
|
55
|
+
title: title || "(empty text)",
|
|
56
|
+
subtitle: "Text",
|
|
57
|
+
}),
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
type: "object",
|
|
62
|
+
name: "marqueeImage",
|
|
63
|
+
title: "Image",
|
|
64
|
+
fields: [
|
|
65
|
+
defineField({
|
|
66
|
+
name: "asset_path",
|
|
67
|
+
title: "Asset path",
|
|
68
|
+
type: "string",
|
|
69
|
+
description: "Relative path to the image file",
|
|
70
|
+
validation: (Rule) => Rule.required(),
|
|
71
|
+
}),
|
|
72
|
+
defineField({
|
|
73
|
+
name: "alt",
|
|
74
|
+
title: "Alt text",
|
|
75
|
+
type: "string",
|
|
76
|
+
}),
|
|
77
|
+
defineField({
|
|
78
|
+
name: "border_radius",
|
|
79
|
+
title: "Border radius (px)",
|
|
80
|
+
type: "number",
|
|
81
|
+
initialValue: 0,
|
|
82
|
+
validation: (Rule) => Rule.min(0).max(200),
|
|
83
|
+
}),
|
|
84
|
+
defineField({
|
|
85
|
+
name: "width",
|
|
86
|
+
title: "Width (px)",
|
|
87
|
+
type: "number",
|
|
88
|
+
description:
|
|
89
|
+
"Fixed width. Leave empty to derive from the row height and image aspect ratio.",
|
|
90
|
+
validation: (Rule) => Rule.min(16).max(1200),
|
|
91
|
+
}),
|
|
92
|
+
],
|
|
93
|
+
preview: {
|
|
94
|
+
select: { title: "alt", subtitle: "asset_path" },
|
|
95
|
+
prepare: ({ title, subtitle }: { title?: string; subtitle?: string }) => ({
|
|
96
|
+
title: title || "(no alt)",
|
|
97
|
+
subtitle: `Image · ${subtitle || "no asset"}`,
|
|
98
|
+
}),
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: "object",
|
|
103
|
+
name: "marqueeSeparator",
|
|
104
|
+
title: "Separator",
|
|
105
|
+
fields: [
|
|
106
|
+
defineField({
|
|
107
|
+
name: "character",
|
|
108
|
+
title: "Character",
|
|
109
|
+
type: "string",
|
|
110
|
+
description:
|
|
111
|
+
"Any character (or emoji) used as a divider. Common: • · — / ▸ ★",
|
|
112
|
+
initialValue: "•",
|
|
113
|
+
validation: (Rule) => Rule.required().min(1).max(4),
|
|
114
|
+
}),
|
|
115
|
+
],
|
|
116
|
+
preview: {
|
|
117
|
+
select: { title: "character" },
|
|
118
|
+
prepare: ({ title }: { title?: string }) => ({
|
|
119
|
+
title: title || "•",
|
|
120
|
+
subtitle: "Separator",
|
|
121
|
+
}),
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
}),
|
|
126
|
+
|
|
127
|
+
// ─── Motion ───────────────────────────────────────────────
|
|
128
|
+
defineField({
|
|
129
|
+
name: "direction",
|
|
130
|
+
title: "Direction",
|
|
131
|
+
type: "string",
|
|
132
|
+
description: "Horizontal scroll direction",
|
|
133
|
+
options: {
|
|
134
|
+
list: [
|
|
135
|
+
{ title: "Left →", value: "left" },
|
|
136
|
+
{ title: "← Right", value: "right" },
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
initialValue: "left",
|
|
140
|
+
}),
|
|
141
|
+
defineField({
|
|
142
|
+
name: "speed",
|
|
143
|
+
title: "Speed (px/s)",
|
|
144
|
+
type: "number",
|
|
145
|
+
description:
|
|
146
|
+
"Scroll speed in pixels per second. Decouples from content length (a 20s loop feels radically different with 10 items vs 100).",
|
|
147
|
+
initialValue: 60,
|
|
148
|
+
validation: (Rule) => Rule.min(5).max(600),
|
|
149
|
+
}),
|
|
150
|
+
defineField({
|
|
151
|
+
name: "pause_on_hover",
|
|
152
|
+
title: "Pause on hover",
|
|
153
|
+
type: "boolean",
|
|
154
|
+
initialValue: true,
|
|
155
|
+
}),
|
|
156
|
+
|
|
157
|
+
// ─── Typography (text + separator items) ──────────────────
|
|
158
|
+
defineField({
|
|
159
|
+
name: "font_size",
|
|
160
|
+
title: "Font size",
|
|
161
|
+
type: "string",
|
|
162
|
+
description: "Size scale for text and separator items",
|
|
163
|
+
options: {
|
|
164
|
+
list: [
|
|
165
|
+
{ title: "S", value: "s" },
|
|
166
|
+
{ title: "Base", value: "base" },
|
|
167
|
+
{ title: "L", value: "l" },
|
|
168
|
+
{ title: "XL", value: "xl" },
|
|
169
|
+
{ title: "2XL", value: "2xl" },
|
|
170
|
+
{ title: "3XL", value: "3xl" },
|
|
171
|
+
{ title: "4XL", value: "4xl" },
|
|
172
|
+
{ title: "5XL", value: "5xl" },
|
|
173
|
+
{ title: "6XL", value: "6xl" },
|
|
174
|
+
],
|
|
175
|
+
},
|
|
176
|
+
initialValue: "3xl",
|
|
177
|
+
}),
|
|
178
|
+
defineField({
|
|
179
|
+
name: "font_weight",
|
|
180
|
+
title: "Font weight",
|
|
181
|
+
type: "string",
|
|
182
|
+
options: {
|
|
183
|
+
list: [
|
|
184
|
+
{ title: "Normal", value: "400" },
|
|
185
|
+
{ title: "Medium", value: "500" },
|
|
186
|
+
{ title: "Bold", value: "700" },
|
|
187
|
+
{ title: "Black", value: "900" },
|
|
188
|
+
],
|
|
189
|
+
},
|
|
190
|
+
initialValue: "700",
|
|
191
|
+
}),
|
|
192
|
+
defineField({
|
|
193
|
+
name: "color",
|
|
194
|
+
title: "Text color",
|
|
195
|
+
type: "string",
|
|
196
|
+
description: "Hex or palette token",
|
|
197
|
+
initialValue: "#111111",
|
|
198
|
+
}),
|
|
199
|
+
defineField({
|
|
200
|
+
name: "text_style",
|
|
201
|
+
title: "Text style",
|
|
202
|
+
type: "string",
|
|
203
|
+
description:
|
|
204
|
+
"Outline renders hollow text via -webkit-text-stroke — the classic portfolio signature look.",
|
|
205
|
+
options: {
|
|
206
|
+
list: [
|
|
207
|
+
{ title: "Solid", value: "solid" },
|
|
208
|
+
{ title: "Outline (hollow)", value: "outline" },
|
|
209
|
+
{ title: "Italic outline", value: "italic-outline" },
|
|
210
|
+
],
|
|
211
|
+
},
|
|
212
|
+
initialValue: "solid",
|
|
213
|
+
}),
|
|
214
|
+
defineField({
|
|
215
|
+
name: "letter_spacing",
|
|
216
|
+
title: "Letter spacing (em)",
|
|
217
|
+
type: "number",
|
|
218
|
+
description: "Extra tracking between letters — in em units",
|
|
219
|
+
initialValue: 0,
|
|
220
|
+
validation: (Rule) => Rule.min(-0.1).max(0.5),
|
|
221
|
+
}),
|
|
222
|
+
defineField({
|
|
223
|
+
name: "text_transform",
|
|
224
|
+
title: "Text transform",
|
|
225
|
+
type: "string",
|
|
226
|
+
options: {
|
|
227
|
+
list: [
|
|
228
|
+
{ title: "None", value: "none" },
|
|
229
|
+
{ title: "UPPERCASE", value: "uppercase" },
|
|
230
|
+
{ title: "lowercase", value: "lowercase" },
|
|
231
|
+
],
|
|
232
|
+
},
|
|
233
|
+
initialValue: "uppercase",
|
|
234
|
+
}),
|
|
235
|
+
|
|
236
|
+
// ─── Layout ───────────────────────────────────────────────
|
|
237
|
+
defineField({
|
|
238
|
+
name: "gap",
|
|
239
|
+
title: "Gap between items (px)",
|
|
240
|
+
type: "number",
|
|
241
|
+
initialValue: 48,
|
|
242
|
+
validation: (Rule) => Rule.min(0).max(200),
|
|
243
|
+
}),
|
|
244
|
+
defineField({
|
|
245
|
+
name: "row_height",
|
|
246
|
+
title: "Row height (px)",
|
|
247
|
+
type: "number",
|
|
248
|
+
description: "Height of the marquee band. Determines image item height.",
|
|
249
|
+
initialValue: 120,
|
|
250
|
+
validation: (Rule) => Rule.min(24).max(600),
|
|
251
|
+
}),
|
|
252
|
+
defineField({
|
|
253
|
+
name: "padding_y",
|
|
254
|
+
title: "Vertical padding (px)",
|
|
255
|
+
type: "number",
|
|
256
|
+
initialValue: 16,
|
|
257
|
+
validation: (Rule) => Rule.min(0).max(200),
|
|
258
|
+
}),
|
|
259
|
+
defineField({
|
|
260
|
+
name: "background_color",
|
|
261
|
+
title: "Background color",
|
|
262
|
+
type: "string",
|
|
263
|
+
description: "Hex or palette token. Leave empty for transparent.",
|
|
264
|
+
}),
|
|
265
|
+
|
|
266
|
+
// ─── Standard block fields ────────────────────────────────
|
|
267
|
+
...blockAnimationFields,
|
|
268
|
+
blockLayoutField,
|
|
269
|
+
],
|
|
270
|
+
preview: {
|
|
271
|
+
select: {
|
|
272
|
+
direction: "direction",
|
|
273
|
+
speed: "speed",
|
|
274
|
+
items: "items",
|
|
275
|
+
},
|
|
276
|
+
prepare: ({
|
|
277
|
+
direction,
|
|
278
|
+
speed,
|
|
279
|
+
items,
|
|
280
|
+
}: {
|
|
281
|
+
direction?: string;
|
|
282
|
+
speed?: number;
|
|
283
|
+
items?: unknown[];
|
|
284
|
+
}) => {
|
|
285
|
+
const count = Array.isArray(items) ? items.length : 0;
|
|
286
|
+
const arrow = direction === "right" ? "←" : "→";
|
|
287
|
+
return {
|
|
288
|
+
title: `Marquee (${count} items ${arrow} ${speed ?? 60}px/s)`,
|
|
289
|
+
};
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
});
|
package/sanity/schemas/index.ts
CHANGED
|
@@ -1,111 +1,120 @@
|
|
|
1
|
-
import page from "./page";
|
|
2
|
-
import pageSectionV2 from "./pageSectionV2";
|
|
3
|
-
import customSection from "./customSection";
|
|
4
|
-
import customSectionInstance from "./customSectionInstance";
|
|
5
|
-
import siteSettings from "./siteSettings";
|
|
6
|
-
import siteStyles from "./siteStyles";
|
|
7
|
-
import assetRegistry from "./assetRegistry";
|
|
8
|
-
import enterAnimationConfig from "./objects/enterAnimationConfig";
|
|
9
|
-
import hoverEffectConfig from "./objects/hoverEffectConfig";
|
|
10
|
-
import typewriterConfig from "./objects/typewriterConfig";
|
|
11
|
-
import parallaxSlide from "./objects/parallaxSlide";
|
|
12
|
-
import parallaxGroup from "./objects/parallaxGroup";
|
|
13
|
-
import coverSection from "./objects/coverSection";
|
|
14
|
-
import {
|
|
15
|
-
textBlock,
|
|
16
|
-
imageBlock,
|
|
17
|
-
imageGridBlock,
|
|
18
|
-
videoBlock,
|
|
19
|
-
spacerBlock,
|
|
20
|
-
buttonBlock,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
export {
|
|
30
|
-
default as
|
|
31
|
-
} from "./
|
|
32
|
-
export {
|
|
33
|
-
default as
|
|
34
|
-
} from "./
|
|
35
|
-
export {
|
|
36
|
-
default as
|
|
37
|
-
} from "./
|
|
38
|
-
export {
|
|
39
|
-
default as
|
|
40
|
-
} from "./
|
|
41
|
-
export {
|
|
42
|
-
default as
|
|
43
|
-
} from "./
|
|
44
|
-
export {
|
|
45
|
-
default as
|
|
46
|
-
} from "./
|
|
47
|
-
export {
|
|
48
|
-
default as
|
|
49
|
-
} from "./
|
|
50
|
-
export {
|
|
51
|
-
default as
|
|
52
|
-
} from "./objects/
|
|
53
|
-
export {
|
|
54
|
-
default as
|
|
55
|
-
} from "./objects/
|
|
56
|
-
export {
|
|
57
|
-
default as
|
|
58
|
-
} from "./objects/
|
|
59
|
-
export {
|
|
60
|
-
default as
|
|
61
|
-
} from "./objects/
|
|
62
|
-
export {
|
|
63
|
-
default as
|
|
64
|
-
} from "./objects/
|
|
65
|
-
export {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
//
|
|
97
|
-
textBlock
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
1
|
+
import page from "./page";
|
|
2
|
+
import pageSectionV2 from "./pageSectionV2";
|
|
3
|
+
import customSection from "./customSection";
|
|
4
|
+
import customSectionInstance from "./customSectionInstance";
|
|
5
|
+
import siteSettings from "./siteSettings";
|
|
6
|
+
import siteStyles from "./siteStyles";
|
|
7
|
+
import assetRegistry from "./assetRegistry";
|
|
8
|
+
import enterAnimationConfig from "./objects/enterAnimationConfig";
|
|
9
|
+
import hoverEffectConfig from "./objects/hoverEffectConfig";
|
|
10
|
+
import typewriterConfig from "./objects/typewriterConfig";
|
|
11
|
+
import parallaxSlide from "./objects/parallaxSlide";
|
|
12
|
+
import parallaxGroup from "./objects/parallaxGroup";
|
|
13
|
+
import coverSection from "./objects/coverSection";
|
|
14
|
+
import {
|
|
15
|
+
textBlock,
|
|
16
|
+
imageBlock,
|
|
17
|
+
imageGridBlock,
|
|
18
|
+
videoBlock,
|
|
19
|
+
spacerBlock,
|
|
20
|
+
buttonBlock,
|
|
21
|
+
beforeAfterBlock,
|
|
22
|
+
audioBlock,
|
|
23
|
+
projectGridBlock,
|
|
24
|
+
projectCarouselBlock,
|
|
25
|
+
marqueeBlock,
|
|
26
|
+
} from "./blocks";
|
|
27
|
+
|
|
28
|
+
// Re-export individual schemas for granular use by instances
|
|
29
|
+
export {
|
|
30
|
+
default as page,
|
|
31
|
+
} from "./page";
|
|
32
|
+
export {
|
|
33
|
+
default as siteSettings,
|
|
34
|
+
} from "./siteSettings";
|
|
35
|
+
export {
|
|
36
|
+
default as siteStyles,
|
|
37
|
+
} from "./siteStyles";
|
|
38
|
+
export {
|
|
39
|
+
default as assetRegistry,
|
|
40
|
+
} from "./assetRegistry";
|
|
41
|
+
export {
|
|
42
|
+
default as pageSectionV2,
|
|
43
|
+
} from "./pageSectionV2";
|
|
44
|
+
export {
|
|
45
|
+
default as customSection,
|
|
46
|
+
} from "./customSection";
|
|
47
|
+
export {
|
|
48
|
+
default as customSectionInstance,
|
|
49
|
+
} from "./customSectionInstance";
|
|
50
|
+
export {
|
|
51
|
+
default as enterAnimationConfig,
|
|
52
|
+
} from "./objects/enterAnimationConfig";
|
|
53
|
+
export {
|
|
54
|
+
default as hoverEffectConfig,
|
|
55
|
+
} from "./objects/hoverEffectConfig";
|
|
56
|
+
export {
|
|
57
|
+
default as typewriterConfig,
|
|
58
|
+
} from "./objects/typewriterConfig";
|
|
59
|
+
export {
|
|
60
|
+
default as parallaxSlide,
|
|
61
|
+
} from "./objects/parallaxSlide";
|
|
62
|
+
export {
|
|
63
|
+
default as parallaxGroup,
|
|
64
|
+
} from "./objects/parallaxGroup";
|
|
65
|
+
export {
|
|
66
|
+
default as coverSection,
|
|
67
|
+
} from "./objects/coverSection";
|
|
68
|
+
export {
|
|
69
|
+
textBlock,
|
|
70
|
+
imageBlock,
|
|
71
|
+
imageGridBlock,
|
|
72
|
+
videoBlock,
|
|
73
|
+
spacerBlock,
|
|
74
|
+
buttonBlock,
|
|
75
|
+
beforeAfterBlock,
|
|
76
|
+
audioBlock,
|
|
77
|
+
projectGridBlock,
|
|
78
|
+
projectCarouselBlock,
|
|
79
|
+
marqueeBlock,
|
|
80
|
+
} from "./blocks";
|
|
81
|
+
|
|
82
|
+
export const schemaTypes = [
|
|
83
|
+
// Documents
|
|
84
|
+
page,
|
|
85
|
+
siteSettings,
|
|
86
|
+
siteStyles,
|
|
87
|
+
assetRegistry,
|
|
88
|
+
|
|
89
|
+
// Structural objects
|
|
90
|
+
pageSectionV2,
|
|
91
|
+
customSection,
|
|
92
|
+
customSectionInstance,
|
|
93
|
+
|
|
94
|
+
// Reusable objects
|
|
95
|
+
enterAnimationConfig, // Enter animation system (Session 117)
|
|
96
|
+
hoverEffectConfig, // Unified hover effect system (Session 117)
|
|
97
|
+
typewriterConfig, // Typewriter config for textBlock (Session 117)
|
|
98
|
+
parallaxSlide, // Parallax V2 slide (Session 123)
|
|
99
|
+
parallaxGroup, // Parallax V2 group (Session 123)
|
|
100
|
+
coverSection, // Cover Section — proportional rows (Session 176)
|
|
101
|
+
|
|
102
|
+
// Blocks (11)
|
|
103
|
+
textBlock,
|
|
104
|
+
imageBlock,
|
|
105
|
+
imageGridBlock,
|
|
106
|
+
videoBlock,
|
|
107
|
+
spacerBlock,
|
|
108
|
+
buttonBlock,
|
|
109
|
+
beforeAfterBlock,
|
|
110
|
+
audioBlock,
|
|
111
|
+
projectGridBlock,
|
|
112
|
+
projectCarouselBlock,
|
|
113
|
+
marqueeBlock,
|
|
114
|
+
];
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Named alias for instance consumption.
|
|
118
|
+
* Instances import this and pass to composeSchemas().
|
|
119
|
+
*/
|
|
120
|
+
export const coreSchemas = schemaTypes;
|