sitepaige-mcp-server 1.2.5 → 1.2.7
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/components/slideshow.tsx +40 -34
- package/defaultapp/globals.css +4 -0
- package/dist/blueprintWriter.js +5 -0
- package/dist/blueprintWriter.js.map +1 -1
- package/dist/components/slideshow.tsx +40 -34
- package/dist/constants/backgrounds.js +62 -0
- package/dist/constants/backgrounds.js.map +1 -0
- package/dist/defaultapp/globals.css +4 -0
- package/dist/generators/background-generator.js +73 -0
- package/dist/generators/background-generator.js.map +1 -0
- package/dist/generators/design.js +60 -1
- package/dist/generators/design.js.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/package.json +2 -1
- package/transpiler/transpiler.cjs +187 -37
package/components/slideshow.tsx
CHANGED
|
@@ -79,7 +79,8 @@ export default function Slideshow({
|
|
|
79
79
|
if (!images || images.length === 0) {
|
|
80
80
|
return (
|
|
81
81
|
<div
|
|
82
|
-
className="relative w-full flex items-center justify-center bg-black rounded-lg"
|
|
82
|
+
className="relative h-full w-full flex items-center justify-center bg-black rounded-lg"
|
|
83
|
+
style={{ minHeight: height || 400 }}
|
|
83
84
|
>
|
|
84
85
|
<p className="text-gray-400">No images in slideshow</p>
|
|
85
86
|
</div>
|
|
@@ -97,18 +98,21 @@ export default function Slideshow({
|
|
|
97
98
|
|
|
98
99
|
return (
|
|
99
100
|
<div
|
|
100
|
-
className="relative w-full overflow-hidden rounded-lg bg-black"
|
|
101
|
-
|
|
102
|
-
onMouseLeave={() => setIsHovered(false)}
|
|
101
|
+
className="relative h-full w-full overflow-hidden rounded-lg bg-black"
|
|
102
|
+
style={{ minHeight: height || 400 }}
|
|
103
103
|
>
|
|
104
104
|
{/* Main image display */}
|
|
105
|
-
<div
|
|
105
|
+
<div
|
|
106
|
+
className="relative w-full h-full flex items-center justify-center"
|
|
107
|
+
onMouseEnter={() => setIsHovered(true)}
|
|
108
|
+
onMouseLeave={() => setIsHovered(false)}
|
|
109
|
+
>
|
|
106
110
|
{animationType === 'fade' ? (
|
|
107
111
|
// Fade animation - render all images with opacity transitions
|
|
108
112
|
images.map((imageId, index) => (
|
|
109
113
|
<div
|
|
110
114
|
key={imageId}
|
|
111
|
-
className={`absolute inset-0 flex items-center justify-center transition-opacity duration-1000 ${
|
|
115
|
+
className={`absolute inset-0 flex items-center justify-center transition-opacity duration-1000 pointer-events-none ${
|
|
112
116
|
index === currentIndex ? 'opacity-100' : 'opacity-0'
|
|
113
117
|
}`}
|
|
114
118
|
>
|
|
@@ -120,7 +124,7 @@ export default function Slideshow({
|
|
|
120
124
|
<img
|
|
121
125
|
src={getImageSrc(imageId)}
|
|
122
126
|
alt={`Slide ${index + 1}`}
|
|
123
|
-
className="w-full h-full object-cover"
|
|
127
|
+
className="w-full h-full object-cover pointer-events-none"
|
|
124
128
|
onError={() => {
|
|
125
129
|
setImageLoadErrors(prev => ({ ...prev, [imageId]: true }));
|
|
126
130
|
}}
|
|
@@ -138,39 +142,43 @@ export default function Slideshow({
|
|
|
138
142
|
<img
|
|
139
143
|
src={getImageSrc(currentImageId)}
|
|
140
144
|
alt={`Slide ${currentIndex + 1}`}
|
|
141
|
-
className="w-full h-full object-cover"
|
|
145
|
+
className="w-full h-full object-cover pointer-events-none"
|
|
142
146
|
onError={() => {
|
|
143
147
|
setImageLoadErrors(prev => ({ ...prev, [currentImageId]: true }));
|
|
144
148
|
}}
|
|
145
149
|
/>
|
|
146
150
|
)
|
|
147
151
|
)}
|
|
152
|
+
|
|
153
|
+
{/* Gradient overlay for better text visibility */}
|
|
154
|
+
<div className="absolute inset-0 bg-gradient-to-t from-black/30 to-transparent pointer-events-none" />
|
|
155
|
+
|
|
156
|
+
{/* Navigation arrows - only show if more than one image */}
|
|
157
|
+
{images.length > 1 && isHovered && (
|
|
158
|
+
<>
|
|
159
|
+
<button
|
|
160
|
+
onClick={handlePrevious}
|
|
161
|
+
className={`absolute left-4 top-1/2 -translate-y-1/2 p-2 rounded-full bg-black/50 backdrop-blur-sm border-2 border-white text-white transition-all duration-200 transform hover:scale-110 ${
|
|
162
|
+
isHovered ? 'opacity-100 pointer-events-auto' : 'opacity-0 pointer-events-none'
|
|
163
|
+
}`}
|
|
164
|
+
aria-label="Previous slide"
|
|
165
|
+
>
|
|
166
|
+
<ChevronLeft className="w-6 h-6" />
|
|
167
|
+
</button>
|
|
168
|
+
|
|
169
|
+
<button
|
|
170
|
+
onClick={handleNext}
|
|
171
|
+
className={`absolute right-4 top-1/2 -translate-y-1/2 p-2 rounded-full bg-black/50 backdrop-blur-sm border-2 border-white text-white transition-all duration-200 transform hover:scale-110 ${
|
|
172
|
+
isHovered ? 'opacity-100 pointer-events-auto' : 'opacity-0 pointer-events-none'
|
|
173
|
+
}`}
|
|
174
|
+
aria-label="Next slide"
|
|
175
|
+
>
|
|
176
|
+
<ChevronRight className="w-6 h-6" />
|
|
177
|
+
</button>
|
|
178
|
+
</>
|
|
179
|
+
)}
|
|
148
180
|
</div>
|
|
149
181
|
|
|
150
|
-
{/* Gradient overlay for better text visibility */}
|
|
151
|
-
<div className="absolute inset-0 bg-gradient-to-t from-black/30 to-transparent pointer-events-none" />
|
|
152
|
-
|
|
153
|
-
{/* Navigation arrows - only show if more than one image and on hover */}
|
|
154
|
-
{images.length > 1 && isHovered && (
|
|
155
|
-
<>
|
|
156
|
-
<button
|
|
157
|
-
onClick={handlePrevious}
|
|
158
|
-
className="absolute left-4 top-1/2 -translate-y-1/2 p-2 rounded-full !bg-transparent border-2 border-white text-white transition-all duration-200 transform hover:scale-110"
|
|
159
|
-
aria-label="Previous slide"
|
|
160
|
-
>
|
|
161
|
-
<ChevronLeft className="w-6 h-6" />
|
|
162
|
-
</button>
|
|
163
|
-
|
|
164
|
-
<button
|
|
165
|
-
onClick={handleNext}
|
|
166
|
-
className="absolute right-4 top-1/2 -translate-y-1/2 p-2 rounded-full !bg-transparent border-2 border-white text-white transition-all duration-200 transform hover:scale-110"
|
|
167
|
-
aria-label="Next slide"
|
|
168
|
-
>
|
|
169
|
-
<ChevronRight className="w-6 h-6" />
|
|
170
|
-
</button>
|
|
171
|
-
</>
|
|
172
|
-
)}
|
|
173
|
-
|
|
174
182
|
{/* Slide indicators */}
|
|
175
183
|
{images.length > 1 && (
|
|
176
184
|
<div className="absolute bottom-4 left-1/2 -translate-x-1/2 flex gap-2">
|
|
@@ -188,8 +196,6 @@ export default function Slideshow({
|
|
|
188
196
|
))}
|
|
189
197
|
</div>
|
|
190
198
|
)}
|
|
191
|
-
|
|
192
|
-
|
|
193
199
|
</div>
|
|
194
200
|
);
|
|
195
201
|
}
|
package/defaultapp/globals.css
CHANGED
package/dist/blueprintWriter.js
CHANGED
|
@@ -7,6 +7,7 @@ import { writeApis } from "./generators/apis.js";
|
|
|
7
7
|
import { processBlueprintImages } from "./generators/images.js";
|
|
8
8
|
import { writeDefaultApp } from "./generators/defaultapp.js";
|
|
9
9
|
import { updateGlobalCSS } from "./generators/design.js";
|
|
10
|
+
import { generateBackgrounds } from "./generators/background-generator.js";
|
|
10
11
|
import { writeArchitectureDoc } from "./generators/architecture.js";
|
|
11
12
|
import path from "node:path";
|
|
12
13
|
import { ensureDir } from "./generators/utils.js";
|
|
@@ -62,6 +63,8 @@ export async function writeProjectFromBlueprint(project, options) {
|
|
|
62
63
|
const viewMap = await writeViews(targetDir, bpWithImages, projectCode, project.AuthProviders);
|
|
63
64
|
// Get the collected view styles
|
|
64
65
|
const viewStyles = getViewStyles();
|
|
66
|
+
// Generate background gradient/overlay if needed
|
|
67
|
+
generateBackgrounds(bpWithImages.design);
|
|
65
68
|
await updateGlobalCSS(targetDir, bpWithImages, viewStyles);
|
|
66
69
|
await writePages(targetDir, bpWithImages, viewMap);
|
|
67
70
|
await writeApis(targetDir, bpWithImages, projectCode);
|
|
@@ -120,6 +123,8 @@ export async function writeProjectPagesOnly(project, options) {
|
|
|
120
123
|
const viewMap = await writeViews(targetDir, bpWithImages, projectCode, project.AuthProviders);
|
|
121
124
|
// Get the collected view styles
|
|
122
125
|
const viewStyles = getViewStyles();
|
|
126
|
+
// Generate background gradient/overlay if needed
|
|
127
|
+
generateBackgrounds(bpWithImages.design);
|
|
123
128
|
await updateGlobalCSS(targetDir, bpWithImages, viewStyles);
|
|
124
129
|
await writePages(targetDir, bpWithImages, viewMap);
|
|
125
130
|
// Conditionally write APIs based on writeApis option AND if they exist in code
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprintWriter.js","sourceRoot":"","sources":["../src/blueprintWriter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"blueprintWriter.js","sourceRoot":"","sources":["../src/blueprintWriter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,GAAG,MAAM,kBAAkB,CAAC;AAEnC,uCAAuC;AACvC,KAAK,UAAU,QAAQ,CAAC,OAAe;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC7C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAChG,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;YAChE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;AACH,CAAC;AAqBD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,OAAqB,EAAE,OAAqB;IAC1F,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,SAAS,CAAC,SAAS,CAAC,CAAC;IAErB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACpC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAEjC,MAAM,QAAQ,CAAC,iDAAiD,GAAG,IAAI,CAAC,SAAS,CAAC;QAChF,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS;QACjC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI;KACxB,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,QAAQ,CAAC,oEAAoE,CAAC,CAAC;QACrF,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,QAAQ,CAAC,qDAAqD,GAAG,IAAI,CAAC,SAAS,CAAC;QACpF,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI;QAC3B,SAAS,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;QACxC,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK;QAC7B,UAAU,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;KAC3C,CAAC,CAAC,CAAC;IAEJ,oDAAoD;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;IAC9C,MAAM,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC;IACnF,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACtC,6CAA6C;IAC7C,MAAM,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC;IACrE,MAAM,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC;IAC/E,MAAM,0BAA0B,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC;IAC3F,6FAA6F;IAC7F,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9F,gCAAgC;IAChC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,iDAAiD;IACjD,mBAAmB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAEzC,MAAM,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAEtD,mCAAmC;IACnC,MAAM,oBAAoB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACtD,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAqB,EAAE,OAAqB;IACtF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,SAAS,CAAC,SAAS,CAAC,CAAC;IAErB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACpC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAEjC,MAAM,QAAQ,CAAC,+CAA+C,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9E,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC,CAAC;IAEJ,MAAM,QAAQ,CAAC,6CAA6C,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5E,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS;QACjC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI;KACxB,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,QAAQ,CAAC,iDAAiD,GAAG,IAAI,CAAC,SAAS,CAAC;YAChF,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI;YAC3B,SAAS,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;YACxC,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK;YAC7B,UAAU,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;SAC3C,CAAC,CAAC,CAAC;IACN,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,CAAC,0DAA0D,CAAC,CAAC;IAC7E,CAAC;IAED,oDAAoD;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;IAC9C,MAAM,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC;IACnF,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACtC,6CAA6C;IAC7C,MAAM,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC;IACrE,MAAM,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE5C,iEAAiE;IACjE,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAClE,IAAI,OAAO,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;QACnC,MAAM,QAAQ,CAAC,qFAAqF,CAAC,CAAC;QACtG,MAAM,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC;QAC/E,MAAM,0BAA0B,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC;IAC7F,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,CAAC,gEAAgE,GAAG,OAAO,CAAC,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC;IAC1I,CAAC;IAED,6FAA6F;IAC7F,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9F,gCAAgC;IAChC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,iDAAiD;IACjD,mBAAmB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAEzC,MAAM,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC3D,MAAM,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAEnD,+EAA+E;IAC/E,MAAM,OAAO,GAAG,WAAW,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/E,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,QAAQ,CAAC,sEAAsE,CAAC,CAAC;QACvF,MAAM,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,CAAC,mDAAmD,GAAG,OAAO,CAAC,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC;IACzH,CAAC;IAED,+DAA+D;AACjE,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAqB,EAAE,OAAqB;IACxF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAElD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACpC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAEjC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,oCAAoC;IACpC,MAAM,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC;IAC7E,MAAM,0BAA0B,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC;IACzF,MAAM,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAEnD,0DAA0D;IAC1D,MAAM,oBAAoB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB,EACjB,QAAoC,EACpC,QAAgB,EAChB,UAAkB;IAElB,gDAAgD;IAChD,MAAM,YAAY,GAAG;QACnB,OAAO,EAAE,gBAAgB;QACzB,OAAO,EAAE,gBAAgB;QACzB,MAAM,EAAE,eAAe;KACxB,CAAC;IAEF,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC7D,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEpB,qCAAqC;IACrC,IAAI,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IAE7D,yDAAyD;IACzD,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE/C,+CAA+C;IAC/C,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,SAAS,GAAG,MAAM,CAAC;IACrB,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,SAAS,GAAG,MAAM,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,MAAM,CAAC;IACrB,CAAC;IAED,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;IAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,oCAAoC;QACpC,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAElE,0CAA0C;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAClD,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEtC,MAAM,QAAQ,CAAC,4BAA4B,QAAQ,UAAU,QAAQ,EAAE,CAAC,CAAC;QAEzE,8CAA8C;QAC9C,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,CAAC,oCAAoC,QAAQ,SAAS,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;QAC1F,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -79,7 +79,8 @@ export default function Slideshow({
|
|
|
79
79
|
if (!images || images.length === 0) {
|
|
80
80
|
return (
|
|
81
81
|
<div
|
|
82
|
-
className="relative w-full flex items-center justify-center bg-black rounded-lg"
|
|
82
|
+
className="relative h-full w-full flex items-center justify-center bg-black rounded-lg"
|
|
83
|
+
style={{ minHeight: height || 400 }}
|
|
83
84
|
>
|
|
84
85
|
<p className="text-gray-400">No images in slideshow</p>
|
|
85
86
|
</div>
|
|
@@ -97,18 +98,21 @@ export default function Slideshow({
|
|
|
97
98
|
|
|
98
99
|
return (
|
|
99
100
|
<div
|
|
100
|
-
className="relative w-full overflow-hidden rounded-lg bg-black"
|
|
101
|
-
|
|
102
|
-
onMouseLeave={() => setIsHovered(false)}
|
|
101
|
+
className="relative h-full w-full overflow-hidden rounded-lg bg-black"
|
|
102
|
+
style={{ minHeight: height || 400 }}
|
|
103
103
|
>
|
|
104
104
|
{/* Main image display */}
|
|
105
|
-
<div
|
|
105
|
+
<div
|
|
106
|
+
className="relative w-full h-full flex items-center justify-center"
|
|
107
|
+
onMouseEnter={() => setIsHovered(true)}
|
|
108
|
+
onMouseLeave={() => setIsHovered(false)}
|
|
109
|
+
>
|
|
106
110
|
{animationType === 'fade' ? (
|
|
107
111
|
// Fade animation - render all images with opacity transitions
|
|
108
112
|
images.map((imageId, index) => (
|
|
109
113
|
<div
|
|
110
114
|
key={imageId}
|
|
111
|
-
className={`absolute inset-0 flex items-center justify-center transition-opacity duration-1000 ${
|
|
115
|
+
className={`absolute inset-0 flex items-center justify-center transition-opacity duration-1000 pointer-events-none ${
|
|
112
116
|
index === currentIndex ? 'opacity-100' : 'opacity-0'
|
|
113
117
|
}`}
|
|
114
118
|
>
|
|
@@ -120,7 +124,7 @@ export default function Slideshow({
|
|
|
120
124
|
<img
|
|
121
125
|
src={getImageSrc(imageId)}
|
|
122
126
|
alt={`Slide ${index + 1}`}
|
|
123
|
-
className="w-full h-full object-cover"
|
|
127
|
+
className="w-full h-full object-cover pointer-events-none"
|
|
124
128
|
onError={() => {
|
|
125
129
|
setImageLoadErrors(prev => ({ ...prev, [imageId]: true }));
|
|
126
130
|
}}
|
|
@@ -138,39 +142,43 @@ export default function Slideshow({
|
|
|
138
142
|
<img
|
|
139
143
|
src={getImageSrc(currentImageId)}
|
|
140
144
|
alt={`Slide ${currentIndex + 1}`}
|
|
141
|
-
className="w-full h-full object-cover"
|
|
145
|
+
className="w-full h-full object-cover pointer-events-none"
|
|
142
146
|
onError={() => {
|
|
143
147
|
setImageLoadErrors(prev => ({ ...prev, [currentImageId]: true }));
|
|
144
148
|
}}
|
|
145
149
|
/>
|
|
146
150
|
)
|
|
147
151
|
)}
|
|
152
|
+
|
|
153
|
+
{/* Gradient overlay for better text visibility */}
|
|
154
|
+
<div className="absolute inset-0 bg-gradient-to-t from-black/30 to-transparent pointer-events-none" />
|
|
155
|
+
|
|
156
|
+
{/* Navigation arrows - only show if more than one image */}
|
|
157
|
+
{images.length > 1 && isHovered && (
|
|
158
|
+
<>
|
|
159
|
+
<button
|
|
160
|
+
onClick={handlePrevious}
|
|
161
|
+
className={`absolute left-4 top-1/2 -translate-y-1/2 p-2 rounded-full bg-black/50 backdrop-blur-sm border-2 border-white text-white transition-all duration-200 transform hover:scale-110 ${
|
|
162
|
+
isHovered ? 'opacity-100 pointer-events-auto' : 'opacity-0 pointer-events-none'
|
|
163
|
+
}`}
|
|
164
|
+
aria-label="Previous slide"
|
|
165
|
+
>
|
|
166
|
+
<ChevronLeft className="w-6 h-6" />
|
|
167
|
+
</button>
|
|
168
|
+
|
|
169
|
+
<button
|
|
170
|
+
onClick={handleNext}
|
|
171
|
+
className={`absolute right-4 top-1/2 -translate-y-1/2 p-2 rounded-full bg-black/50 backdrop-blur-sm border-2 border-white text-white transition-all duration-200 transform hover:scale-110 ${
|
|
172
|
+
isHovered ? 'opacity-100 pointer-events-auto' : 'opacity-0 pointer-events-none'
|
|
173
|
+
}`}
|
|
174
|
+
aria-label="Next slide"
|
|
175
|
+
>
|
|
176
|
+
<ChevronRight className="w-6 h-6" />
|
|
177
|
+
</button>
|
|
178
|
+
</>
|
|
179
|
+
)}
|
|
148
180
|
</div>
|
|
149
181
|
|
|
150
|
-
{/* Gradient overlay for better text visibility */}
|
|
151
|
-
<div className="absolute inset-0 bg-gradient-to-t from-black/30 to-transparent pointer-events-none" />
|
|
152
|
-
|
|
153
|
-
{/* Navigation arrows - only show if more than one image and on hover */}
|
|
154
|
-
{images.length > 1 && isHovered && (
|
|
155
|
-
<>
|
|
156
|
-
<button
|
|
157
|
-
onClick={handlePrevious}
|
|
158
|
-
className="absolute left-4 top-1/2 -translate-y-1/2 p-2 rounded-full !bg-transparent border-2 border-white text-white transition-all duration-200 transform hover:scale-110"
|
|
159
|
-
aria-label="Previous slide"
|
|
160
|
-
>
|
|
161
|
-
<ChevronLeft className="w-6 h-6" />
|
|
162
|
-
</button>
|
|
163
|
-
|
|
164
|
-
<button
|
|
165
|
-
onClick={handleNext}
|
|
166
|
-
className="absolute right-4 top-1/2 -translate-y-1/2 p-2 rounded-full !bg-transparent border-2 border-white text-white transition-all duration-200 transform hover:scale-110"
|
|
167
|
-
aria-label="Next slide"
|
|
168
|
-
>
|
|
169
|
-
<ChevronRight className="w-6 h-6" />
|
|
170
|
-
</button>
|
|
171
|
-
</>
|
|
172
|
-
)}
|
|
173
|
-
|
|
174
182
|
{/* Slide indicators */}
|
|
175
183
|
{images.length > 1 && (
|
|
176
184
|
<div className="absolute bottom-4 left-1/2 -translate-x-1/2 flex gap-2">
|
|
@@ -188,8 +196,6 @@ export default function Slideshow({
|
|
|
188
196
|
))}
|
|
189
197
|
</div>
|
|
190
198
|
)}
|
|
191
|
-
|
|
192
|
-
|
|
193
199
|
</div>
|
|
194
200
|
);
|
|
195
201
|
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export const BACKGROUND_OVERLAYS = [
|
|
2
|
+
{
|
|
3
|
+
id: 'dots',
|
|
4
|
+
name: 'Dots',
|
|
5
|
+
description: 'Subtle dot grid pattern',
|
|
6
|
+
svgTemplate: `<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg"><circle cx="10" cy="10" r="1.5" fill="{{COLOR}}"/></svg>`
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
id: 'diagonal-lines',
|
|
10
|
+
name: 'Diagonal Lines',
|
|
11
|
+
description: 'Thin diagonal stripes',
|
|
12
|
+
svgTemplate: `<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><path d="M-1,5 L5,-1 M-1,21 L21,-1 M11,21 L21,11" stroke="{{COLOR}}" stroke-width="1"/></svg>`
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
id: 'grid',
|
|
16
|
+
name: 'Grid',
|
|
17
|
+
description: 'Fine grid mesh pattern',
|
|
18
|
+
svgTemplate: `<svg width="40" height="40" xmlns="http://www.w3.org/2000/svg"><path d="M40,0 L0,0 L0,40" fill="none" stroke="{{COLOR}}" stroke-width="1"/></svg>`
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: 'waves',
|
|
22
|
+
name: 'Waves',
|
|
23
|
+
description: 'Soft wave pattern',
|
|
24
|
+
svgTemplate: `<svg width="100" height="20" xmlns="http://www.w3.org/2000/svg"><path d="M0 10 Q 25 20 50 10 T 100 10" fill="none" stroke="{{COLOR}}" stroke-width="1.5"/></svg>`
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: 'crosshatch',
|
|
28
|
+
name: 'Crosshatch',
|
|
29
|
+
description: 'Light crosshatch texture',
|
|
30
|
+
svgTemplate: `<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg"><path d="M0,0 L20,20 M20,0 L0,20" stroke="{{COLOR}}" stroke-width="1"/></svg>`
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
id: 'circles',
|
|
34
|
+
name: 'Circles',
|
|
35
|
+
description: 'Concentric circle ripples',
|
|
36
|
+
svgTemplate: `<svg width="60" height="60" xmlns="http://www.w3.org/2000/svg"><circle cx="30" cy="30" r="10" fill="none" stroke="{{COLOR}}"/><circle cx="30" cy="30" r="20" fill="none" stroke="{{COLOR}}"/></svg>`
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'noise',
|
|
40
|
+
name: 'Noise',
|
|
41
|
+
description: 'Subtle noise grain texture',
|
|
42
|
+
svgTemplate: `<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg"><filter id="noise"><feTurbulence type="fractalNoise" baseFrequency="0.65" numOctaves="3" stitchTiles="stitch"/></filter><rect width="100%" height="100%" filter="url(#noise)" opacity="0.4" fill="{{COLOR}}"/></svg>`
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: 'geometric',
|
|
46
|
+
name: 'Geometric',
|
|
47
|
+
description: 'Abstract geometric shapes',
|
|
48
|
+
svgTemplate: `<svg width="80" height="80" xmlns="http://www.w3.org/2000/svg"><polygon points="40,10 70,40 40,70 10,40" fill="none" stroke="{{COLOR}}" stroke-width="1.5"/></svg>`
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'hexagons',
|
|
52
|
+
name: 'Hexagons',
|
|
53
|
+
description: 'Honeycomb pattern',
|
|
54
|
+
svgTemplate: `<svg width="56" height="100" xmlns="http://www.w3.org/2000/svg"><path d="M28 0 L56 16.5 L56 49.5 L28 66 L0 49.5 L0 16.5 Z" fill="none" stroke="{{COLOR}}" stroke-width="1"/></svg>`
|
|
55
|
+
}
|
|
56
|
+
];
|
|
57
|
+
export function getBackgroundOverlay(id) {
|
|
58
|
+
if (!id)
|
|
59
|
+
return undefined;
|
|
60
|
+
return BACKGROUND_OVERLAYS.find(o => o.id === id);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=backgrounds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backgrounds.js","sourceRoot":"","sources":["../../src/constants/backgrounds.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,mBAAmB,GAAwB;IACtD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,yBAAyB;QACtC,WAAW,EAAE,yHAAyH;KACvI;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,uBAAuB;QACpC,WAAW,EAAE,8JAA8J;KAC5K;IACD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,wBAAwB;QACrC,WAAW,EAAE,mJAAmJ;KACjK;IACD;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,mBAAmB;QAChC,WAAW,EAAE,kKAAkK;KAChL;IACD;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,0BAA0B;QACvC,WAAW,EAAE,8IAA8I;KAC5J;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,2BAA2B;QACxC,WAAW,EAAE,qMAAqM;KACnN;IACD;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE,uRAAuR;KACrS;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,2BAA2B;QACxC,WAAW,EAAE,oKAAoK;KAClL;IACD;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,mBAAmB;QAChC,WAAW,EAAE,oLAAoL;KAClM;CACF,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,EAAiB;IACpD,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1B,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { BACKGROUND_OVERLAYS } from "../constants/backgrounds.js";
|
|
2
|
+
function hexToRgb(hex) {
|
|
3
|
+
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
4
|
+
return result ? {
|
|
5
|
+
r: parseInt(result[1], 16),
|
|
6
|
+
g: parseInt(result[2], 16),
|
|
7
|
+
b: parseInt(result[3], 16)
|
|
8
|
+
} : null;
|
|
9
|
+
}
|
|
10
|
+
function adjustColor(hex, amount) {
|
|
11
|
+
const rgb = hexToRgb(hex);
|
|
12
|
+
if (!rgb)
|
|
13
|
+
return hex;
|
|
14
|
+
const r = Math.max(0, Math.min(255, rgb.r + amount));
|
|
15
|
+
const g = Math.max(0, Math.min(255, rgb.g + amount));
|
|
16
|
+
const b = Math.max(0, Math.min(255, rgb.b + amount));
|
|
17
|
+
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
|
|
18
|
+
}
|
|
19
|
+
// Check if color is dark to decide on gradient strategy
|
|
20
|
+
function isColorDark(hex) {
|
|
21
|
+
const rgb = hexToRgb(hex);
|
|
22
|
+
if (!rgb)
|
|
23
|
+
return false;
|
|
24
|
+
// Relative luminance
|
|
25
|
+
return (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255 < 0.5;
|
|
26
|
+
}
|
|
27
|
+
export function generateBackgrounds(design) {
|
|
28
|
+
// Only generate if explicitly requested via heroLayout/designStyle
|
|
29
|
+
const layout = design.heroLayout;
|
|
30
|
+
// Check for 'gradient-hero' or 'centered-simple' which uses overlay
|
|
31
|
+
if (layout !== 'gradient-hero' && layout !== 'centered-simple') {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const baseColor = design.backgroundColor || '#ffffff';
|
|
35
|
+
const isDark = isColorDark(baseColor);
|
|
36
|
+
// Generate Gradient if missing and style is gradient-hero
|
|
37
|
+
if (layout === 'gradient-hero' && !design.backgroundGradient) {
|
|
38
|
+
// Shift end color slightly
|
|
39
|
+
// For dark theme: lighter end color? or darker?
|
|
40
|
+
// Docs: "Slightly shifted version of the base color (preserves contrast)"
|
|
41
|
+
// Docs: "Third Color: The accent color with low opacity for subtle glow effects"
|
|
42
|
+
const shiftAmount = isDark ? 20 : -20;
|
|
43
|
+
const endColor = adjustColor(baseColor, shiftAmount);
|
|
44
|
+
const accentColor = design.accentColor || '#516ab8';
|
|
45
|
+
// Randomly select gradient type
|
|
46
|
+
const rand = Math.random();
|
|
47
|
+
if (rand < 0.5) {
|
|
48
|
+
// Linear (50%)
|
|
49
|
+
// "Vertical direction, solid until 55%, then gradual transition"
|
|
50
|
+
// Angles: [180, 170, 190, 175, 185]
|
|
51
|
+
const angles = [180, 170, 190, 175, 185];
|
|
52
|
+
const angle = angles[Math.floor(Math.random() * angles.length)];
|
|
53
|
+
design.backgroundGradient = `linear-gradient(${angle}deg, ${baseColor} 0%, ${baseColor} 55%, ${endColor} 85%, ${accentColor}15 100%)`;
|
|
54
|
+
}
|
|
55
|
+
else if (rand < 0.75) {
|
|
56
|
+
// Radial (25%)
|
|
57
|
+
// "Ellipse at bottom right, #6366f120 0%, #1e1e38 30%, #1a1a2e 70%"
|
|
58
|
+
design.backgroundGradient = `radial-gradient(ellipse at bottom right, ${accentColor}20 0%, ${endColor} 30%, ${baseColor} 70%)`;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// Multi-stop linear (25%)
|
|
62
|
+
// "Solid at top, gentle transition in lower half"
|
|
63
|
+
design.backgroundGradient = `linear-gradient(180deg, ${baseColor} 0%, ${baseColor} 50%, ${endColor} 80%, ${accentColor}12 100%)`;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Generate Overlay if missing (for both gradient-hero and centered-simple)
|
|
67
|
+
if (!design.backgroundOverlay) {
|
|
68
|
+
// "Random selection from available patterns"
|
|
69
|
+
const randomOverlay = BACKGROUND_OVERLAYS[Math.floor(Math.random() * BACKGROUND_OVERLAYS.length)];
|
|
70
|
+
design.backgroundOverlay = randomOverlay.id;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=background-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-generator.js","sourceRoot":"","sources":["../../src/generators/background-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,43 @@
|
|
|
1
1
|
import { getDesign } from "../types.js";
|
|
2
|
+
import { getBackgroundOverlay } from "../constants/backgrounds.js";
|
|
2
3
|
import fs from 'fs';
|
|
3
4
|
import fsp from 'fs/promises';
|
|
4
5
|
import path from 'path';
|
|
5
6
|
function isUuidV4Like(s) {
|
|
6
7
|
return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(s);
|
|
7
8
|
}
|
|
9
|
+
// Helper to determine if a color is dark (luminance < 0.5)
|
|
10
|
+
function isColorDark(hexColor) {
|
|
11
|
+
if (!hexColor)
|
|
12
|
+
return false;
|
|
13
|
+
const hex = hexColor.replace('#', '');
|
|
14
|
+
// Handle shorthand hex like #fff
|
|
15
|
+
const fullHex = hex.length === 3
|
|
16
|
+
? hex.split('').map(c => c + c).join('')
|
|
17
|
+
: hex;
|
|
18
|
+
const r = parseInt(fullHex.substring(0, 2), 16);
|
|
19
|
+
const g = parseInt(fullHex.substring(2, 4), 16);
|
|
20
|
+
const b = parseInt(fullHex.substring(4, 6), 16);
|
|
21
|
+
if (isNaN(r) || isNaN(g) || isNaN(b))
|
|
22
|
+
return false;
|
|
23
|
+
// Relative luminance formula
|
|
24
|
+
const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
|
25
|
+
return luminance < 0.5;
|
|
26
|
+
}
|
|
27
|
+
function getBackgroundOverlayCss(id, backgroundColor = '#ffffff') {
|
|
28
|
+
const overlay = getBackgroundOverlay(id || null);
|
|
29
|
+
if (!overlay)
|
|
30
|
+
return '';
|
|
31
|
+
// Determine if background is dark or light
|
|
32
|
+
const isDark = isColorDark(backgroundColor);
|
|
33
|
+
// Use contrasting color with low opacity
|
|
34
|
+
const patternColor = isDark
|
|
35
|
+
? 'rgba(255,255,255,0.08)' // White for dark backgrounds
|
|
36
|
+
: 'rgba(0,0,0,0.06)'; // Black for light backgrounds
|
|
37
|
+
// Replace placeholder and encode as data URL
|
|
38
|
+
const svg = overlay.svgTemplate.replace(/\{\{COLOR\}\}/g, patternColor);
|
|
39
|
+
return `url("data:image/svg+xml,${encodeURIComponent(svg)}")`;
|
|
40
|
+
}
|
|
8
41
|
export function writeFavicon(targetDir, favicon) {
|
|
9
42
|
const publicDir = path.join(targetDir, 'public');
|
|
10
43
|
// Ensure public directory exists
|
|
@@ -115,15 +148,41 @@ export async function updateGlobalCSS(targetDir, blueprint, viewStyles = []) {
|
|
|
115
148
|
const fontImport = `@import url('https://fonts.googleapis.com/css2?family=${design.textFont || 'Roboto'}&family=${design.titleFont || 'Roboto'}&family=${design.logoFont || 'Roboto'}&display=swap');`;
|
|
116
149
|
// Replace the content between the CLAUDE IMPORTS comments
|
|
117
150
|
cssContent = cssContent.replace(/\/\* CLAUDE IMPORTS \*\/[\s\S]*?\/\* END CLAUDE IMPORTS \*\//, `/* CLAUDE IMPORTS */\n${fontImport}\n/* END CLAUDE IMPORTS */`);
|
|
151
|
+
// Calculate background styles
|
|
152
|
+
const overlayCss = getBackgroundOverlayCss(design.backgroundOverlay, design.backgroundColor);
|
|
153
|
+
const backgroundGradient = design.backgroundGradient ? `background: ${design.backgroundGradient};` : '';
|
|
118
154
|
// Create the CSS content to insert
|
|
119
155
|
const viewStylesContent = viewStyles.length > 0 ? '\n/* PER-VIEW STYLES */\n' + viewStyles.join('\n') + '\n/* END PER-VIEW STYLES */\n' : '';
|
|
120
156
|
const cssToInsert = `
|
|
121
157
|
body {
|
|
122
|
-
background: ${design.backgroundColor || 'white'};
|
|
158
|
+
background: ${design.backgroundColor || 'white'};
|
|
159
|
+
${backgroundGradient}
|
|
123
160
|
color: ${design.textColor || 'black'};
|
|
124
161
|
font-family: ${design.textFont || 'Roboto'}, sans-serif;
|
|
125
162
|
font-size: ${textFontSizeValue};
|
|
163
|
+
min-height: 100vh;
|
|
164
|
+
position: relative;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
${overlayCss ? `
|
|
168
|
+
body::before {
|
|
169
|
+
content: '';
|
|
170
|
+
position: absolute;
|
|
171
|
+
top: 0;
|
|
172
|
+
left: 0;
|
|
173
|
+
right: 0;
|
|
174
|
+
bottom: 0;
|
|
175
|
+
background-image: ${overlayCss};
|
|
176
|
+
background-repeat: repeat;
|
|
177
|
+
pointer-events: none;
|
|
178
|
+
z-index: 0;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
body > * {
|
|
182
|
+
position: relative;
|
|
183
|
+
z-index: 1;
|
|
126
184
|
}
|
|
185
|
+
` : ''}
|
|
127
186
|
|
|
128
187
|
h1 {
|
|
129
188
|
color: ${design.titleColor || 'inherit'};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/generators/design.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/generators/design.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -88,6 +88,9 @@ export function getDesign(blueprint) {
|
|
|
88
88
|
textColor: blueprint.design.textColor ?? defaultDesign.textColor,
|
|
89
89
|
accentColor: blueprint.design.accentColor ?? defaultDesign.accentColor,
|
|
90
90
|
backgroundColor: blueprint.design.backgroundColor ?? defaultDesign.backgroundColor,
|
|
91
|
+
backgroundGradient: blueprint.design.backgroundGradient,
|
|
92
|
+
backgroundImage: blueprint.design.backgroundImage,
|
|
93
|
+
backgroundOverlay: blueprint.design.backgroundOverlay,
|
|
91
94
|
accentTextColor: blueprint.design.accentTextColor ?? defaultDesign.accentTextColor,
|
|
92
95
|
useGradient: blueprint.design.useGradient ?? defaultDesign.useGradient,
|
|
93
96
|
gradientColor: blueprint.design.gradientColor ?? defaultDesign.gradientColor,
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sitepaige-mcp-server",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "MCP server for generating web applications using SitePaige AI. Generate frontend (FREE/12 credits) then optionally add backend (50 credits)",
|
|
6
6
|
"keywords": [
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
"@babel/types": "^7.28.4",
|
|
57
57
|
"@bragdoc/cli": "^1.3.1",
|
|
58
58
|
"@modelcontextprotocol/sdk": "^1.17.5",
|
|
59
|
+
"lucide-react": "^0.554.0",
|
|
59
60
|
"undici": "^6.19.8",
|
|
60
61
|
"zod": "^3.23.8"
|
|
61
62
|
},
|
|
@@ -580,6 +580,145 @@ function pageNameLookup(pages, pageId) {
|
|
|
580
580
|
// This handles cases where the page ID is passed directly as the page name
|
|
581
581
|
return pageId.toLowerCase().replace(/[^a-zA-Z0-9]/g, '_');
|
|
582
582
|
}
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Helper to convert text content to an array of JSX nodes (Text + Links)
|
|
586
|
+
* @param {string} text - The text to process
|
|
587
|
+
* @returns {Array} - Array of AST nodes
|
|
588
|
+
*/
|
|
589
|
+
function createNodesFromText(text) {
|
|
590
|
+
if (!text) return [];
|
|
591
|
+
|
|
592
|
+
// Check for URLs
|
|
593
|
+
const urlRegex = /(https?:\/\/[^\s]+)/g;
|
|
594
|
+
if (!urlRegex.test(text)) {
|
|
595
|
+
return [t.jsxText(text)];
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
const parts = text.split(urlRegex);
|
|
599
|
+
const nodes = [];
|
|
600
|
+
|
|
601
|
+
parts.forEach(part => {
|
|
602
|
+
if (!part) return;
|
|
603
|
+
|
|
604
|
+
if (part.match(/^https?:\/\//)) {
|
|
605
|
+
// It's a URL
|
|
606
|
+
const link = t.jsxElement(
|
|
607
|
+
t.jsxOpeningElement(
|
|
608
|
+
t.jsxIdentifier('a'),
|
|
609
|
+
[
|
|
610
|
+
t.jsxAttribute(t.jsxIdentifier('href'), t.stringLiteral(part)),
|
|
611
|
+
t.jsxAttribute(t.jsxIdentifier('target'), t.stringLiteral('_blank')),
|
|
612
|
+
t.jsxAttribute(t.jsxIdentifier('rel'), t.stringLiteral('noopener noreferrer')),
|
|
613
|
+
]
|
|
614
|
+
),
|
|
615
|
+
t.jsxClosingElement(t.jsxIdentifier('a')),
|
|
616
|
+
[t.jsxText(part)]
|
|
617
|
+
);
|
|
618
|
+
nodes.push(link);
|
|
619
|
+
} else {
|
|
620
|
+
// Text
|
|
621
|
+
nodes.push(t.jsxText(part));
|
|
622
|
+
}
|
|
623
|
+
});
|
|
624
|
+
|
|
625
|
+
return nodes;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
/**
|
|
629
|
+
* Converts window.processText calls to text or JSX with links
|
|
630
|
+
* @param {Object} path - The AST path
|
|
631
|
+
* @param {Object} dictionary - The text dictionary
|
|
632
|
+
*/
|
|
633
|
+
function convertWindowProcessText(path, dictionary) {
|
|
634
|
+
// Check for window.processText
|
|
635
|
+
if (!path.node.callee || path.node.callee.type !== 'MemberExpression') return;
|
|
636
|
+
|
|
637
|
+
const callee = path.node.callee;
|
|
638
|
+
if (!callee.object || callee.object.name !== 'window' ||
|
|
639
|
+
!callee.property || callee.property.name !== 'processText') return;
|
|
640
|
+
|
|
641
|
+
const args = path.node.arguments;
|
|
642
|
+
if (args.length === 0) {
|
|
643
|
+
path.replaceWith(t.stringLiteral(""));
|
|
644
|
+
return;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// Handle template literals (remove them as per original logic)
|
|
648
|
+
if (args[0].type === 'TemplateLiteral') {
|
|
649
|
+
path.replaceWith(t.stringLiteral(""));
|
|
650
|
+
return;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
// Get key
|
|
654
|
+
let key = "";
|
|
655
|
+
if (args[0].type === 'StringLiteral') {
|
|
656
|
+
key = args[0].value;
|
|
657
|
+
} else {
|
|
658
|
+
path.replaceWith(t.stringLiteral(""));
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
// Get default text
|
|
663
|
+
let defaultText = "";
|
|
664
|
+
if (args.length > 1 && args[1].type === 'StringLiteral') {
|
|
665
|
+
defaultText = args[1].value;
|
|
666
|
+
// Restore https/http for logic
|
|
667
|
+
defaultText = defaultText.replace(/\[httpsstart\]/g, 'https://').replace(/\[httpstart\]/g, 'http://');
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
// Lookup
|
|
671
|
+
const lowercaseId = key.toLowerCase();
|
|
672
|
+
const textContent = dictionary[lowercaseId] || dictionary[key];
|
|
673
|
+
|
|
674
|
+
let finalText = textContent !== undefined ? textContent : defaultText;
|
|
675
|
+
|
|
676
|
+
if (!finalText) {
|
|
677
|
+
path.replaceWith(t.stringLiteral(""));
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
// Check if we are in a prop where JSX is not allowed
|
|
682
|
+
if (path.parentPath.isJSXExpressionContainer() && path.parentPath.parentPath.isJSXAttribute()) {
|
|
683
|
+
// Don't convert to JSX in props, return string
|
|
684
|
+
path.replaceWith(t.stringLiteral(finalText));
|
|
685
|
+
return;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
// CRITICAL FIX: Only convert to JSX links if we are in a valid JSX child position.
|
|
689
|
+
// If we are in an expression (assignment, function arg, return statement not in JSX),
|
|
690
|
+
// we MUST return the string, otherwise logic breaks.
|
|
691
|
+
// e.g. const url = window.processText(...) -> const url = <Fragment>...</Fragment> (BAD)
|
|
692
|
+
|
|
693
|
+
const isJsxChild = path.parentPath.isJSXElement() || path.parentPath.isJSXFragment() || path.parentPath.isJSXExpressionContainer();
|
|
694
|
+
|
|
695
|
+
// Special case: If inside JSXExpressionContainer, check if that container is a child of JSXElement
|
|
696
|
+
// path.parentPath.isJSXExpressionContainer() is true for both props and children.
|
|
697
|
+
// We already handled props above (parentPath.parentPath.isJSXAttribute).
|
|
698
|
+
// So if we are here and it is JSXExpressionContainer, it's likely a child expression { window.processText() }
|
|
699
|
+
|
|
700
|
+
// If NOT in JSX context (e.g. variable assignment, alert(), window.open()), return plain string.
|
|
701
|
+
if (!isJsxChild) {
|
|
702
|
+
path.replaceWith(t.stringLiteral(finalText));
|
|
703
|
+
return;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
// Get nodes (Text + Links)
|
|
707
|
+
const nodes = createNodesFromText(finalText);
|
|
708
|
+
|
|
709
|
+
if (nodes.length === 1 && t.isJSXText(nodes[0])) {
|
|
710
|
+
path.replaceWith(t.stringLiteral(nodes[0].value));
|
|
711
|
+
return;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
const fragment = t.jsxFragment(
|
|
715
|
+
t.jsxOpeningFragment(),
|
|
716
|
+
t.jsxClosingFragment(),
|
|
717
|
+
nodes
|
|
718
|
+
);
|
|
719
|
+
|
|
720
|
+
path.replaceWith(fragment);
|
|
721
|
+
}
|
|
583
722
|
/**
|
|
584
723
|
* Removes all comments from the code
|
|
585
724
|
* @param {string} code - The source code with comments
|
|
@@ -616,43 +755,7 @@ function transpileCode(code, pages, dictionary = {}) {
|
|
|
616
755
|
});
|
|
617
756
|
|
|
618
757
|
// First handle template literals - these shouldn't be sent by frontend, so remove them entirely
|
|
619
|
-
//
|
|
620
|
-
code = code.replace(/window\.processText\(\s*`[^]*?`\s*(?:,\s*[^)]+)?\s*\)/g, function(match) {
|
|
621
|
-
// Frontend shouldn't send template literals, return empty string
|
|
622
|
-
return '""';
|
|
623
|
-
});
|
|
624
|
-
|
|
625
|
-
// Then handle static strings - window.processText calls with actual text content from dictionary
|
|
626
|
-
// Handle both single parameter: window.processText("key")
|
|
627
|
-
// and two parameter: window.processText("key", "default") formats
|
|
628
|
-
// Updated regex to handle escaped quotes within strings
|
|
629
|
-
code = code.replace(/window\.processText\(\s*(['"`])([^]*?)\1\s*(?:,\s*(['"`])([^]*?)\3)?\s*\)/g, function(match, quote1, dictionaryId, quote2, defaultText) {
|
|
630
|
-
// Skip if this contains template literal syntax (shouldn't happen after first pass, but be safe)
|
|
631
|
-
if (dictionaryId.includes('${')) {
|
|
632
|
-
return match;
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
// Try lowercase version of the key first (system expects lowercase keys)
|
|
636
|
-
const lowercaseId = dictionaryId.toLowerCase();
|
|
637
|
-
const textContent = dictionary[lowercaseId] || dictionary[dictionaryId];
|
|
638
|
-
let finalText;
|
|
639
|
-
|
|
640
|
-
if (textContent !== undefined) {
|
|
641
|
-
// Use dictionary value if found
|
|
642
|
-
finalText = textContent;
|
|
643
|
-
} else if (defaultText !== undefined) {
|
|
644
|
-
// Use default text if dictionary key not found but default provided
|
|
645
|
-
finalText = defaultText;
|
|
646
|
-
|
|
647
|
-
} else {
|
|
648
|
-
// No dictionary value and no default - remove the window.processText call entirely
|
|
649
|
-
// Return empty string to remove it from the output
|
|
650
|
-
return '""';
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
// Escape the text content for safe inclusion in JavaScript
|
|
654
|
-
return JSON.stringify(finalText);
|
|
655
|
-
});
|
|
758
|
+
// Logic moved to AST traversal in convertWindowProcessText
|
|
656
759
|
|
|
657
760
|
// Replace window.fetchTest with standard fetch
|
|
658
761
|
code = code.replace(/window\.fetchTest/g, "fetch");
|
|
@@ -678,6 +781,53 @@ function transpileCode(code, pages, dictionary = {}) {
|
|
|
678
781
|
plugins: ['jsx', 'typescript'],
|
|
679
782
|
});
|
|
680
783
|
|
|
784
|
+
// Pass 1: Process window.processText calls (convert to text or JSX with links)
|
|
785
|
+
traverse(ast, {
|
|
786
|
+
CallExpression(path) {
|
|
787
|
+
convertWindowProcessText(path, dictionary);
|
|
788
|
+
},
|
|
789
|
+
JSXText(path) {
|
|
790
|
+
// Handle window.processText appearing as text content (not in curly braces)
|
|
791
|
+
const text = path.node.value;
|
|
792
|
+
const regex = /window\.processText\(\s*(['"`])([^]*?)\1\s*(?:,\s*(['"`])([^]*?)\3)?\s*\)/g;
|
|
793
|
+
|
|
794
|
+
if (!regex.test(text)) return;
|
|
795
|
+
|
|
796
|
+
const nodes = [];
|
|
797
|
+
let lastIndex = 0;
|
|
798
|
+
regex.lastIndex = 0;
|
|
799
|
+
|
|
800
|
+
let match;
|
|
801
|
+
while ((match = regex.exec(text)) !== null) {
|
|
802
|
+
// Add text before match
|
|
803
|
+
if (match.index > lastIndex) {
|
|
804
|
+
nodes.push(t.jsxText(text.slice(lastIndex, match.index)));
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
const [fullMatch, quote1, dictionaryId, quote2, defaultText] = match;
|
|
808
|
+
|
|
809
|
+
const lowercaseId = dictionaryId.toLowerCase();
|
|
810
|
+
const textContent = dictionary[lowercaseId] || dictionary[dictionaryId];
|
|
811
|
+
let finalText = textContent !== undefined ? textContent : (defaultText || "");
|
|
812
|
+
|
|
813
|
+
// Restore https/http (in case defaultText had them)
|
|
814
|
+
finalText = finalText.replace(/\[httpsstart\]/g, 'https://').replace(/\[httpstart\]/g, 'http://');
|
|
815
|
+
|
|
816
|
+
// Convert finalText to nodes (Text + Links)
|
|
817
|
+
nodes.push(...createNodesFromText(finalText));
|
|
818
|
+
|
|
819
|
+
lastIndex = regex.lastIndex;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
// Add remaining text
|
|
823
|
+
if (lastIndex < text.length) {
|
|
824
|
+
nodes.push(t.jsxText(text.slice(lastIndex)));
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
path.replaceWithMultiple(nodes);
|
|
828
|
+
}
|
|
829
|
+
});
|
|
830
|
+
|
|
681
831
|
// Add React import if needed
|
|
682
832
|
addReactImport(ast);
|
|
683
833
|
|