Files
2026-09-25 10:23:21 -04:00

1592 lines
43 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* @ds-bundle: {"format":3,"namespace":"CubeCraftCreationsDesignSystem_0c419c","components":[{"name":"Badge","sourcePath":"components/core/Badge.jsx"},{"name":"Button","sourcePath":"components/core/Button.jsx"},{"name":"Tag","sourcePath":"components/core/Tag.jsx"},{"name":"CategoryCard","sourcePath":"components/product/CategoryCard.jsx"},{"name":"ProductCard","sourcePath":"components/product/ProductCard.jsx"}],"sourceHashes":{"components/core/Badge.jsx":"eefcaedfbeea","components/core/Button.jsx":"0eb42e02c6a7","components/core/Tag.jsx":"782d692151ad","components/product/CategoryCard.jsx":"dfd98900f67f","components/product/ProductCard.jsx":"b08c05b76a55","ui_kits/storefront/CartDrawer.jsx":"c712060e601b","ui_kits/storefront/Header.jsx":"9ef823c5a991","ui_kits/storefront/HomePage.jsx":"bc8a40adc9f7","ui_kits/storefront/ProductDetailPage.jsx":"32e235afbc57","ui_kits/storefront/ShopPage.jsx":"6ec746ad6888"},"inlinedExternals":[],"unexposedExports":[]} */
(() => {
const __ds_ns = (window.CubeCraftCreationsDesignSystem_0c419c = window.CubeCraftCreationsDesignSystem_0c419c || {});
const __ds_scope = {};
(__ds_ns.__errors = __ds_ns.__errors || []);
// components/core/Badge.jsx
try { (() => {
/**
* CubeCraft Creations — Badge
* Compact status indicator. Use for "New", "Sale", category tags, order status.
*/
function Badge({
children,
variant = 'brand',
size = 'md',
dot = false
}) {
const base = {
display: 'inline-flex',
alignItems: 'center',
gap: '5px',
fontFamily: "'Nunito', system-ui, sans-serif",
fontWeight: 700,
borderRadius: '9999px',
lineHeight: 1,
whiteSpace: 'nowrap'
};
const sizes = {
sm: {
padding: '3px 8px',
fontSize: '10px',
letterSpacing: '0.06em'
},
md: {
padding: '4px 10px',
fontSize: '11px',
letterSpacing: '0.05em'
},
lg: {
padding: '5px 12px',
fontSize: '12px',
letterSpacing: '0.04em'
}
};
const variants = {
brand: {
background: 'linear-gradient(135deg,#3B3AB8,#A035CC)',
color: '#fff'
},
blue: {
background: '#EBEBF8',
color: '#3B3AB8'
},
purple: {
background: '#F6EAFD',
color: '#A035CC'
},
neutral: {
background: '#F4F4F6',
color: '#52525E'
},
success: {
background: '#DCFCE7',
color: '#16A34A'
},
warning: {
background: '#FEF3C7',
color: '#D97706'
},
error: {
background: '#FEE2E2',
color: '#DC2626'
},
dark: {
background: '#18181D',
color: '#fff'
},
outline: {
background: 'transparent',
color: '#3B3AB8',
border: '1.5px solid #3B3AB8'
}
};
const style = {
...base,
...sizes[size],
...variants[variant],
textTransform: 'uppercase'
};
return /*#__PURE__*/React.createElement("span", {
style: style
}, dot && /*#__PURE__*/React.createElement("span", {
style: {
width: size === 'sm' ? 5 : 6,
height: size === 'sm' ? 5 : 6,
borderRadius: '50%',
background: 'currentColor',
flexShrink: 0,
opacity: 0.85
}
}), children);
}
Object.assign(__ds_scope, { Badge });
})(); } catch (e) { __ds_ns.__errors.push({ path: "components/core/Badge.jsx", error: String((e && e.message) || e) }); }
// components/core/Button.jsx
try { (() => {
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
/**
* CubeCraft Creations — Button
* Primary interactive element. Supports gradient, solid, outline, and ghost variants.
*/
function Button({
children,
variant = 'gradient',
size = 'md',
disabled = false,
fullWidth = false,
icon = null,
iconPosition = 'left',
onClick,
type = 'button',
href,
...rest
}) {
const base = {
display: 'inline-flex',
alignItems: 'center',
justifyContent: 'center',
gap: '6px',
fontFamily: "'Nunito', system-ui, sans-serif",
fontWeight: 700,
letterSpacing: '0.02em',
borderRadius: '9999px',
border: 'none',
cursor: disabled ? 'not-allowed' : 'pointer',
opacity: disabled ? 0.5 : 1,
transition: 'all 200ms cubic-bezier(0,0,0.2,1)',
textDecoration: 'none',
whiteSpace: 'nowrap',
width: fullWidth ? '100%' : undefined,
lineHeight: 1
};
const sizes = {
sm: {
padding: '8px 16px',
fontSize: '13px'
},
md: {
padding: '11px 22px',
fontSize: '14px'
},
lg: {
padding: '14px 28px',
fontSize: '16px'
},
xl: {
padding: '17px 36px',
fontSize: '18px'
}
};
const variants = {
gradient: {
background: 'linear-gradient(135deg, #3B3AB8 0%, #A035CC 100%)',
color: '#ffffff',
boxShadow: '0 4px 20px rgba(59,58,184,0.25)'
},
primary: {
background: '#3B3AB8',
color: '#ffffff',
boxShadow: '0 2px 8px rgba(59,58,184,0.20)'
},
secondary: {
background: '#F4F4F6',
color: '#18181D',
boxShadow: 'none'
},
outline: {
background: 'transparent',
color: '#3B3AB8',
border: '2px solid #3B3AB8',
boxShadow: 'none'
},
ghost: {
background: 'transparent',
color: '#3B3AB8',
boxShadow: 'none'
},
danger: {
background: '#DC2626',
color: '#ffffff',
boxShadow: '0 2px 8px rgba(220,38,38,0.20)'
}
};
const style = {
...base,
...sizes[size],
...variants[variant]
};
const content = /*#__PURE__*/React.createElement(React.Fragment, null, icon && iconPosition === 'left' && icon, children, icon && iconPosition === 'right' && icon);
const handleMouseEnter = e => {
if (disabled) return;
e.currentTarget.style.transform = 'scale(1.03)';
e.currentTarget.style.filter = 'brightness(1.08)';
};
const handleMouseLeave = e => {
e.currentTarget.style.transform = 'scale(1)';
e.currentTarget.style.filter = 'brightness(1)';
};
const handleMouseDown = e => {
if (disabled) return;
e.currentTarget.style.transform = 'scale(0.97)';
};
const handleMouseUp = e => {
e.currentTarget.style.transform = 'scale(1.03)';
};
if (href && !disabled) {
return /*#__PURE__*/React.createElement("a", _extends({
href: href,
style: style,
onMouseEnter: handleMouseEnter,
onMouseLeave: handleMouseLeave,
onMouseDown: handleMouseDown,
onMouseUp: handleMouseUp
}, rest), content);
}
return /*#__PURE__*/React.createElement("button", _extends({
type: type,
disabled: disabled,
onClick: onClick,
style: style,
onMouseEnter: handleMouseEnter,
onMouseLeave: handleMouseLeave,
onMouseDown: handleMouseDown,
onMouseUp: handleMouseUp
}, rest), content);
}
Object.assign(__ds_scope, { Button });
})(); } catch (e) { __ds_ns.__errors.push({ path: "components/core/Button.jsx", error: String((e && e.message) || e) }); }
// components/core/Tag.jsx
try { (() => {
/**
* CubeCraft Creations — Tag
* Soft pill for content categorization (product categories, filter chips, skill tags).
*/
function Tag({
children,
active = false,
onClick,
onRemove,
color = 'default'
}) {
const isInteractive = !!onClick;
const colors = {
default: {
bg: active ? '#EBEBF8' : '#F4F4F6',
text: active ? '#3B3AB8' : '#52525E',
border: active ? '#CDCDF0' : '#E4E4EA'
},
blue: {
bg: '#EBEBF8',
text: '#3B3AB8',
border: '#CDCDF0'
},
purple: {
bg: '#F6EAFD',
text: '#A035CC',
border: '#E8CBFA'
},
green: {
bg: '#DCFCE7',
text: '#16A34A',
border: '#BBF7D0'
},
orange: {
bg: '#FEF3C7',
text: '#D97706',
border: '#FDE68A'
}
};
const c = colors[color] || colors.default;
const style = {
display: 'inline-flex',
alignItems: 'center',
gap: '5px',
padding: '5px 12px',
borderRadius: '9999px',
background: c.bg,
color: c.text,
border: `1px solid ${c.border}`,
fontFamily: "'Nunito', system-ui, sans-serif",
fontWeight: 600,
fontSize: '13px',
cursor: isInteractive ? 'pointer' : 'default',
transition: 'all 150ms ease-out',
userSelect: 'none',
lineHeight: 1.3
};
return /*#__PURE__*/React.createElement("span", {
style: style,
onClick: onClick,
onMouseEnter: isInteractive ? e => {
e.currentTarget.style.filter = 'brightness(0.95)';
} : undefined,
onMouseLeave: isInteractive ? e => {
e.currentTarget.style.filter = 'brightness(1)';
} : undefined
}, children, onRemove && /*#__PURE__*/React.createElement("span", {
onClick: e => {
e.stopPropagation();
onRemove();
},
style: {
display: 'inline-flex',
alignItems: 'center',
marginLeft: 2,
opacity: 0.6,
cursor: 'pointer',
fontSize: '14px',
lineHeight: 1
}
}, "\xD7"));
}
Object.assign(__ds_scope, { Tag });
})(); } catch (e) { __ds_ns.__errors.push({ path: "components/core/Tag.jsx", error: String((e && e.message) || e) }); }
// components/product/CategoryCard.jsx
try { (() => {
/**
* CubeCraft Creations — CategoryCard
* Full-width feature card for homepage category sections.
*/
function CategoryCard({
image,
title,
description,
ctaLabel = 'Shop now',
href = '#',
align = 'left',
badge
}) {
const [hovered, setHovered] = React.useState(false);
return /*#__PURE__*/React.createElement("a", {
href: href,
style: {
display: 'flex',
flexDirection: align === 'right' ? 'row-reverse' : 'row',
borderRadius: '20px',
overflow: 'hidden',
border: '1px solid #E4E4EA',
background: '#fff',
textDecoration: 'none',
fontFamily: "'Nunito', system-ui, sans-serif",
transition: 'all 220ms cubic-bezier(0,0,0.2,1)',
boxShadow: hovered ? '0 8px 32px rgba(0,0,0,0.12)' : '0 2px 8px rgba(0,0,0,0.06)',
transform: hovered ? 'translateY(-2px)' : 'none',
minHeight: '240px'
},
onMouseEnter: () => setHovered(true),
onMouseLeave: () => setHovered(false)
}, /*#__PURE__*/React.createElement("div", {
style: {
flex: '0 0 45%',
overflow: 'hidden',
position: 'relative'
}
}, image && /*#__PURE__*/React.createElement("img", {
src: image,
alt: title,
style: {
width: '100%',
height: '100%',
objectFit: 'cover',
transition: 'transform 400ms cubic-bezier(0.34,1.56,0.64,1)',
transform: hovered ? 'scale(1.05)' : 'scale(1)'
}
})), /*#__PURE__*/React.createElement("div", {
style: {
flex: 1,
padding: '36px 40px',
display: 'flex',
flexDirection: 'column',
justifyContent: 'center',
gap: '12px'
}
}, badge && /*#__PURE__*/React.createElement("span", {
style: {
display: 'inline-flex',
alignSelf: 'flex-start',
background: 'linear-gradient(135deg,#3B3AB8,#A035CC)',
color: '#fff',
padding: '3px 10px',
borderRadius: '9999px',
fontSize: '10px',
fontWeight: 800,
letterSpacing: '0.07em',
textTransform: 'uppercase'
}
}, badge), /*#__PURE__*/React.createElement("div", {
style: {
fontSize: '30px',
fontWeight: 800,
color: '#18181D',
lineHeight: 1.2,
letterSpacing: '-0.01em'
}
}, title), description && /*#__PURE__*/React.createElement("div", {
style: {
fontSize: '15px',
fontWeight: 400,
color: '#52525E',
lineHeight: 1.6
}
}, description), /*#__PURE__*/React.createElement("div", {
style: {
marginTop: 8,
display: 'inline-flex',
alignItems: 'center',
gap: 6
}
}, /*#__PURE__*/React.createElement("span", {
style: {
padding: '10px 22px',
borderRadius: '9999px',
background: 'linear-gradient(135deg,#3B3AB8,#A035CC)',
color: '#fff',
fontWeight: 700,
fontSize: '14px',
letterSpacing: '0.02em',
boxShadow: '0 4px 16px rgba(59,58,184,0.25)'
}
}, ctaLabel))));
}
Object.assign(__ds_scope, { CategoryCard });
})(); } catch (e) { __ds_ns.__errors.push({ path: "components/product/CategoryCard.jsx", error: String((e && e.message) || e) }); }
// components/product/ProductCard.jsx
try { (() => {
/**
* CubeCraft Creations — ProductCard
* Standard product grid card for shop listings.
*/
function ProductCard({
image,
name,
price,
originalPrice,
badge,
category,
onAddToCart,
onWishlist,
wishlisted = false,
href = '#'
}) {
const [hovered, setHovered] = React.useState(false);
const [imgHovered, setImgHovered] = React.useState(false);
return /*#__PURE__*/React.createElement("div", {
style: {
background: '#fff',
borderRadius: '16px',
border: '1px solid #E4E4EA',
overflow: 'hidden',
transition: 'all 220ms cubic-bezier(0,0,0.2,1)',
boxShadow: hovered ? '0 8px 24px rgba(0,0,0,0.12)' : '0 2px 6px rgba(0,0,0,0.06)',
transform: hovered ? 'translateY(-3px)' : 'translateY(0)',
display: 'flex',
flexDirection: 'column',
fontFamily: "'Nunito', system-ui, sans-serif",
cursor: 'pointer'
},
onMouseEnter: () => setHovered(true),
onMouseLeave: () => setHovered(false)
}, /*#__PURE__*/React.createElement("a", {
href: href,
style: {
display: 'block',
position: 'relative',
aspectRatio: '1',
overflow: 'hidden',
background: '#F4F4F6',
textDecoration: 'none'
},
onMouseEnter: () => setImgHovered(true),
onMouseLeave: () => setImgHovered(false)
}, image && /*#__PURE__*/React.createElement("img", {
src: image,
alt: name,
style: {
width: '100%',
height: '100%',
objectFit: 'cover',
transition: 'transform 350ms cubic-bezier(0.34,1.56,0.64,1)',
transform: imgHovered ? 'scale(1.06)' : 'scale(1)'
}
}), /*#__PURE__*/React.createElement("div", {
style: {
position: 'absolute',
top: 10,
left: 10,
display: 'flex',
gap: 6,
flexWrap: 'wrap'
}
}, badge && /*#__PURE__*/React.createElement("span", {
style: {
background: 'linear-gradient(135deg,#3B3AB8,#A035CC)',
color: '#fff',
padding: '3px 9px',
borderRadius: '9999px',
fontSize: '10px',
fontWeight: 800,
letterSpacing: '0.06em',
textTransform: 'uppercase',
boxShadow: '0 2px 8px rgba(59,58,184,0.3)'
}
}, badge)), onWishlist && /*#__PURE__*/React.createElement("button", {
onClick: e => {
e.preventDefault();
e.stopPropagation();
onWishlist();
},
style: {
position: 'absolute',
top: 8,
right: 8,
width: 32,
height: 32,
borderRadius: '50%',
background: 'rgba(255,255,255,0.9)',
border: 'none',
cursor: 'pointer',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: '15px',
transition: 'all 150ms ease-out',
backdropFilter: 'blur(4px)'
}
}, wishlisted ? '♥' : '♡')), /*#__PURE__*/React.createElement("div", {
style: {
padding: '14px 16px 16px',
display: 'flex',
flexDirection: 'column',
gap: 6,
flex: 1
}
}, category && /*#__PURE__*/React.createElement("div", {
style: {
fontSize: '10px',
fontWeight: 700,
letterSpacing: '0.07em',
textTransform: 'uppercase',
color: '#A035CC'
}
}, category), /*#__PURE__*/React.createElement("a", {
href: href,
style: {
fontWeight: 700,
fontSize: '15px',
color: '#18181D',
textDecoration: 'none',
lineHeight: 1.3
}
}, name), /*#__PURE__*/React.createElement("div", {
style: {
display: 'flex',
alignItems: 'baseline',
gap: 8,
marginTop: 2
}
}, /*#__PURE__*/React.createElement("span", {
style: {
fontWeight: 800,
fontSize: '17px',
color: '#3B3AB8'
}
}, "$", price), originalPrice && /*#__PURE__*/React.createElement("span", {
style: {
fontWeight: 600,
fontSize: '13px',
color: '#9898A8',
textDecoration: 'line-through'
}
}, "$", originalPrice)), onAddToCart && /*#__PURE__*/React.createElement("button", {
onClick: e => {
e.stopPropagation();
onAddToCart();
},
style: {
marginTop: 8,
padding: '9px 16px',
borderRadius: '9999px',
background: 'linear-gradient(135deg,#3B3AB8,#A035CC)',
color: '#fff',
border: 'none',
fontFamily: "'Nunito', system-ui, sans-serif",
fontWeight: 700,
fontSize: '13px',
letterSpacing: '0.02em',
cursor: 'pointer',
transition: 'all 200ms ease-out',
boxShadow: '0 4px 14px rgba(59,58,184,0.22)'
},
onMouseEnter: e => {
e.currentTarget.style.filter = 'brightness(1.08)';
e.currentTarget.style.transform = 'scale(1.02)';
},
onMouseLeave: e => {
e.currentTarget.style.filter = 'brightness(1)';
e.currentTarget.style.transform = 'scale(1)';
}
}, "Add to cart")));
}
Object.assign(__ds_scope, { ProductCard });
})(); } catch (e) { __ds_ns.__errors.push({ path: "components/product/ProductCard.jsx", error: String((e && e.message) || e) }); }
// ui_kits/storefront/CartDrawer.jsx
try { (() => {
// CubeCraft Creations — Cart Drawer
Object.assign(window, {
CartDrawer: function CartDrawer({
open,
onClose,
cartItems,
onRemove
}) {
const {
Button
} = window.CubeCraft;
const total = cartItems.reduce((sum, item) => sum + parseFloat(item.price) * item.qty, 0);
return React.createElement(React.Fragment, null,
// Overlay
open && React.createElement('div', {
onClick: onClose,
style: {
position: 'fixed',
inset: 0,
background: 'rgba(9,9,11,0.5)',
zIndex: 300,
transition: 'opacity 200ms ease-out'
}
}),
// Drawer
React.createElement('div', {
style: {
position: 'fixed',
top: 0,
right: 0,
bottom: 0,
width: 400,
background: '#fff',
zIndex: 400,
boxShadow: '-8px 0 40px rgba(0,0,0,0.15)',
transform: open ? 'translateX(0)' : 'translateX(100%)',
transition: 'transform 300ms cubic-bezier(0.34,1.56,0.64,1)',
display: 'flex',
flexDirection: 'column',
fontFamily: "'Nunito', system-ui, sans-serif"
}
},
// Header
React.createElement('div', {
style: {
padding: '24px 24px 20px',
borderBottom: '1px solid #E4E4EA',
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between'
}
}, React.createElement('div', {
style: {
fontWeight: 800,
fontSize: 20,
color: '#18181D'
}
}, `Cart (${cartItems.reduce((s, i) => s + i.qty, 0)})`), React.createElement('button', {
onClick: onClose,
style: {
width: 32,
height: 32,
borderRadius: '50%',
background: '#F4F4F6',
border: 'none',
cursor: 'pointer',
fontSize: 18,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
color: '#52525E'
}
}, '×')),
// Items
React.createElement('div', {
style: {
flex: 1,
overflowY: 'auto',
padding: '16px 24px'
}
}, cartItems.length === 0 ? React.createElement('div', {
style: {
textAlign: 'center',
padding: '60px 20px',
color: '#9898A8'
}
}, React.createElement('div', {
style: {
fontSize: 40,
marginBottom: 12
}
}, '🛒'), React.createElement('div', {
style: {
fontWeight: 700,
fontSize: 16
}
}, 'Your cart is empty'), React.createElement('div', {
style: {
fontSize: 14,
marginTop: 4
}
}, 'Add something handcrafted and lovely!')) : cartItems.map((item, i) => React.createElement('div', {
key: i,
style: {
display: 'flex',
gap: 14,
padding: '16px 0',
borderBottom: '1px solid #F4F4F6',
alignItems: 'center'
}
}, React.createElement('div', {
style: {
width: 64,
height: 64,
borderRadius: 12,
overflow: 'hidden',
background: '#F4F4F6',
flexShrink: 0
}
}, item.image && React.createElement('img', {
src: item.image,
style: {
width: '100%',
height: '100%',
objectFit: 'cover'
}
})), React.createElement('div', {
style: {
flex: 1
}
}, React.createElement('div', {
style: {
fontWeight: 700,
fontSize: 14,
color: '#18181D',
marginBottom: 2
}
}, item.name), React.createElement('div', {
style: {
fontSize: 12,
color: '#A035CC',
fontWeight: 700
}
}, item.category), React.createElement('div', {
style: {
fontWeight: 800,
fontSize: 15,
color: '#3B3AB8',
marginTop: 4
}
}, `$${item.price} × ${item.qty}`)), React.createElement('button', {
onClick: () => onRemove(i),
style: {
background: 'none',
border: 'none',
cursor: 'pointer',
color: '#9898A8',
fontSize: 18,
padding: 4
}
}, '×')))),
// Footer
cartItems.length > 0 && React.createElement('div', {
style: {
padding: '20px 24px',
borderTop: '1px solid #E4E4EA'
}
}, React.createElement('div', {
style: {
display: 'flex',
justifyContent: 'space-between',
marginBottom: 16,
fontWeight: 800,
fontSize: 18
}
}, React.createElement('span', {
style: {
color: '#18181D'
}
}, 'Total'), React.createElement('span', {
style: {
color: '#3B3AB8'
}
}, `$${total.toFixed(2)}`)), React.createElement(Button, {
variant: 'gradient',
size: 'lg',
fullWidth: true
}, 'Checkout'), React.createElement('div', {
style: {
textAlign: 'center',
marginTop: 10,
fontSize: 12,
color: '#9898A8',
fontWeight: 600
}
}, 'Free shipping on orders over $50'))));
}
});
})(); } catch (e) { __ds_ns.__errors.push({ path: "ui_kits/storefront/CartDrawer.jsx", error: String((e && e.message) || e) }); }
// ui_kits/storefront/Header.jsx
try { (() => {
// CubeCraft Creations — Storefront Header
// Nav bar with logo, links, cart, and search
Object.assign(window, {
StorefrontHeader: function StorefrontHeader({
page,
setPage,
cartCount,
onCartOpen
}) {
const [menuOpen, setMenuOpen] = React.useState(false);
const navLinks = [{
label: 'Shop All',
key: 'shop'
}, {
label: '3D Prints',
key: 'shop',
filter: '3D Prints'
}, {
label: 'Crochet',
key: 'shop',
filter: 'Crochet'
}, {
label: 'Apparel',
key: 'shop',
filter: 'Apparel'
}];
const headerStyle = {
position: 'sticky',
top: 0,
zIndex: 200,
background: 'rgba(255,255,255,0.95)',
backdropFilter: 'blur(12px)',
borderBottom: '1px solid #E4E4EA',
fontFamily: "'Nunito', system-ui, sans-serif"
};
return React.createElement('header', {
style: headerStyle
}, React.createElement('div', {
style: {
maxWidth: 1280,
margin: '0 auto',
padding: '0 32px',
height: 68,
display: 'flex',
alignItems: 'center',
gap: 32
}
},
// Logo
React.createElement('img', {
src: '../../assets/logos/Header_Logo.png',
alt: 'CubeCraft Creations',
style: {
height: 40,
cursor: 'pointer',
flexShrink: 0
},
onClick: () => setPage({
key: 'home'
})
}),
// Nav links
React.createElement('nav', {
style: {
display: 'flex',
gap: 4,
flex: 1
}
}, navLinks.map((link, i) => React.createElement('button', {
key: i,
onClick: () => setPage({
key: link.key,
filter: link.filter
}),
style: {
background: 'none',
border: 'none',
cursor: 'pointer',
fontFamily: "'Nunito', system-ui, sans-serif",
fontWeight: 600,
fontSize: 15,
color: page.key === link.key ? '#3B3AB8' : '#52525E',
padding: '6px 14px',
borderRadius: 9999,
transition: 'all 150ms ease-out'
},
onMouseEnter: e => {
e.currentTarget.style.background = '#F4F4F6';
e.currentTarget.style.color = '#3B3AB8';
},
onMouseLeave: e => {
e.currentTarget.style.background = 'none';
e.currentTarget.style.color = page.key === link.key ? '#3B3AB8' : '#52525E';
}
}, link.label))),
// Actions
React.createElement('div', {
style: {
display: 'flex',
gap: 8,
alignItems: 'center'
}
},
// Search
React.createElement('button', {
style: {
width: 38,
height: 38,
borderRadius: '50%',
background: 'none',
border: '1px solid #E4E4EA',
cursor: 'pointer',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: 16
}
}, '🔍'),
// Cart
React.createElement('button', {
onClick: onCartOpen,
style: {
position: 'relative',
width: 38,
height: 38,
borderRadius: '50%',
background: 'linear-gradient(135deg,#3B3AB8,#A035CC)',
border: 'none',
cursor: 'pointer',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: 16,
color: '#fff'
}
}, '🛒', cartCount > 0 && React.createElement('span', {
style: {
position: 'absolute',
top: -4,
right: -4,
width: 18,
height: 18,
borderRadius: '50%',
background: '#DC2626',
color: '#fff',
fontSize: 10,
fontWeight: 800,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
border: '2px solid #fff'
}
}, cartCount)))));
}
});
})(); } catch (e) { __ds_ns.__errors.push({ path: "ui_kits/storefront/Header.jsx", error: String((e && e.message) || e) }); }
// ui_kits/storefront/HomePage.jsx
try { (() => {
// CubeCraft Creations — Homepage View
Object.assign(window, {
HomePage: function HomePage({
setPage,
products,
onAddToCart
}) {
const {
ProductCard,
CategoryCard,
Button,
Badge
} = window.CubeCraft;
const featured = products.slice(0, 4);
return React.createElement('div', {
style: {
fontFamily: "'Nunito', system-ui, sans-serif"
}
},
// ── Hero ──────────────────────────────────────────────────
React.createElement('section', {
style: {
background: '#fff',
padding: '72px 0 48px'
}
}, React.createElement('div', {
style: {
maxWidth: 1280,
margin: '0 auto',
padding: '0 32px',
display: 'flex',
alignItems: 'center',
gap: 64
}
},
// Hero copy
React.createElement('div', {
style: {
flex: '0 0 520px'
}
}, React.createElement('div', {
style: {
display: 'inline-flex',
marginBottom: 20
}
}, React.createElement(Badge, {
variant: 'brand'
}, 'New Pet Rocks Drop')), React.createElement('h1', {
style: {
fontFamily: "'Nunito', system-ui, sans-serif",
fontWeight: 800,
fontSize: 56,
lineHeight: 1.1,
letterSpacing: '-0.03em',
margin: '0 0 20px',
background: 'linear-gradient(135deg,#3B3AB8,#A035CC)',
WebkitBackgroundClip: 'text',
WebkitTextFillColor: 'transparent',
backgroundClip: 'text'
}
}, 'Made with creativity. Crafted with heart.'), React.createElement('p', {
style: {
fontSize: 18,
color: '#52525E',
lineHeight: 1.65,
margin: '0 0 36px',
fontWeight: 400
}
}, 'Handcrafted crochet, custom 3D prints, and branded gear — every piece made by real hands with real care.'), React.createElement('div', {
style: {
display: 'flex',
gap: 12,
alignItems: 'center'
}
}, React.createElement(Button, {
variant: 'gradient',
size: 'lg',
onClick: () => setPage({
key: 'shop'
})
}, 'Shop All Products'), React.createElement(Button, {
variant: 'ghost',
size: 'lg',
onClick: () => setPage({
key: 'shop',
filter: '3D Prints'
})
}, 'See Pet Rocks →'))),
// Hero image
React.createElement('div', {
style: {
flex: 1,
borderRadius: 24,
overflow: 'hidden',
aspectRatio: '4/3',
background: '#F4F4F6'
}
}, React.createElement('img', {
src: '../../assets/images/cubecraft_hero_mock_petrocks_v1.png',
alt: 'Pet Rocks hero',
style: {
width: '100%',
height: '100%',
objectFit: 'cover'
}
})))),
// ── Categories ───────────────────────────────────────────
React.createElement('section', {
style: {
background: '#F4F4F6',
padding: '64px 0'
}
}, React.createElement('div', {
style: {
maxWidth: 1280,
margin: '0 auto',
padding: '0 32px'
}
}, React.createElement('h2', {
style: {
fontWeight: 800,
fontSize: 32,
color: '#18181D',
margin: '0 0 32px',
letterSpacing: '-0.01em'
}
}, 'Shop by category'), React.createElement('div', {
style: {
display: 'flex',
flexDirection: 'column',
gap: 20
}
}, React.createElement(CategoryCard, {
image: '../../assets/images/cubecraft_3dprints_category_image.png',
title: '3D Prints',
description: 'Fresh off the Bambu Lab — expressive Pet Rocks and custom collectibles ready for your shelf.',
ctaLabel: 'Shop 3D Prints',
badge: 'Now shipping',
href: '#'
}), React.createElement(CategoryCard, {
image: '../../assets/images/Crocheted_Items.png',
title: 'Crocheted Items',
description: 'Handmade with yarn and love. Hats, plushes, and seasonal favorites.',
ctaLabel: 'Shop Crochet',
align: 'right',
href: '#'
}), React.createElement(CategoryCard, {
image: '../../assets/images/apparel_category_image.png',
title: 'Apparel',
description: 'Wear the brand. Logo tees and more, printed on quality blanks.',
ctaLabel: 'Shop Apparel',
href: '#'
})))),
// ── Featured Products ────────────────────────────────────
React.createElement('section', {
style: {
background: '#fff',
padding: '64px 0'
}
}, React.createElement('div', {
style: {
maxWidth: 1280,
margin: '0 auto',
padding: '0 32px'
}
}, React.createElement('div', {
style: {
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
marginBottom: 32
}
}, React.createElement('h2', {
style: {
fontWeight: 800,
fontSize: 32,
color: '#18181D',
margin: 0,
letterSpacing: '-0.01em'
}
}, 'Featured picks'), React.createElement(Button, {
variant: 'ghost',
onClick: () => setPage({
key: 'shop'
})
}, 'View all →')), React.createElement('div', {
style: {
display: 'grid',
gridTemplateColumns: 'repeat(4, 1fr)',
gap: 20
}
}, featured.map(p => React.createElement(ProductCard, {
key: p.id,
image: p.image,
name: p.name,
price: p.price,
originalPrice: p.originalPrice,
badge: p.badge,
category: p.category,
onAddToCart: () => onAddToCart(p),
onWishlist: () => {}
}))))),
// ── Brand strip ──────────────────────────────────────────
React.createElement('section', {
style: {
background: 'linear-gradient(135deg,#3B3AB8,#A035CC)',
padding: '56px 32px',
textAlign: 'center'
}
}, React.createElement('img', {
src: '../../assets/logos/CubeCraftCreations_Logo_Official_No_BG.png',
alt: 'CubeCraft Creations',
style: {
height: 80,
filter: 'brightness(0) invert(1)',
marginBottom: 20
}
}), React.createElement('p', {
style: {
color: 'rgba(255,255,255,0.85)',
fontSize: 20,
fontWeight: 600,
margin: 0
}
}, 'Made with creativity. Crafted with heart.')));
}
});
})(); } catch (e) { __ds_ns.__errors.push({ path: "ui_kits/storefront/HomePage.jsx", error: String((e && e.message) || e) }); }
// ui_kits/storefront/ProductDetailPage.jsx
try { (() => {
// CubeCraft Creations — Product Detail Page
Object.assign(window, {
ProductDetailPage: function ProductDetailPage({
product,
onAddToCart,
onBack
}) {
const {
Button,
Badge,
Tag
} = window.CubeCraft;
const [qty, setQty] = React.useState(1);
const [added, setAdded] = React.useState(false);
const handleAdd = () => {
for (let i = 0; i < qty; i++) onAddToCart(product);
setAdded(true);
setTimeout(() => setAdded(false), 2000);
};
return React.createElement('div', {
style: {
fontFamily: "'Nunito', system-ui, sans-serif",
background: '#fff',
minHeight: '100vh'
}
},
// Breadcrumb
React.createElement('div', {
style: {
padding: '16px 32px',
maxWidth: 1280,
margin: '0 auto'
}
}, React.createElement('button', {
onClick: onBack,
style: {
background: 'none',
border: 'none',
cursor: 'pointer',
color: '#3B3AB8',
fontFamily: "'Nunito',sans-serif",
fontWeight: 600,
fontSize: 14,
display: 'flex',
alignItems: 'center',
gap: 6,
padding: 0
}
}, '← Back to shop')),
// Main content
React.createElement('div', {
style: {
maxWidth: 1280,
margin: '0 auto',
padding: '16px 32px 64px',
display: 'grid',
gridTemplateColumns: '1fr 1fr',
gap: 64
}
},
// Image
React.createElement('div', {
style: {
borderRadius: 24,
overflow: 'hidden',
aspectRatio: '1',
background: '#F4F4F6'
}
}, product.image && React.createElement('img', {
src: product.image,
alt: product.name,
style: {
width: '100%',
height: '100%',
objectFit: 'cover'
}
})),
// Info
React.createElement('div', {
style: {
display: 'flex',
flexDirection: 'column',
gap: 20,
paddingTop: 8
}
}, React.createElement('div', {
style: {
display: 'flex',
gap: 8,
flexWrap: 'wrap'
}
}, product.badge && React.createElement(Badge, {
variant: 'brand'
}, product.badge), React.createElement(Badge, {
variant: 'blue'
}, product.category)), React.createElement('h1', {
style: {
fontWeight: 800,
fontSize: 40,
color: '#18181D',
lineHeight: 1.15,
letterSpacing: '-0.02em',
margin: 0
}
}, product.name), React.createElement('div', {
style: {
display: 'flex',
alignItems: 'baseline',
gap: 12
}
}, React.createElement('span', {
style: {
fontWeight: 800,
fontSize: 32,
color: '#3B3AB8'
}
}, `$${product.price}`), product.originalPrice && React.createElement('span', {
style: {
fontWeight: 600,
fontSize: 18,
color: '#9898A8',
textDecoration: 'line-through'
}
}, `$${product.originalPrice}`), product.originalPrice && React.createElement(Badge, {
variant: 'error',
size: 'sm'
}, 'Sale')), React.createElement('p', {
style: {
fontSize: 16,
color: '#52525E',
lineHeight: 1.65,
margin: 0
}
}, product.description || 'Handcrafted with care by the CubeCraft Creations team. Every piece is made to order and finished by hand — no two are exactly alike.'),
// Tags
React.createElement('div', {
style: {
display: 'flex',
gap: 8,
flexWrap: 'wrap'
}
}, React.createElement(Tag, {
color: 'blue'
}, 'Handmade'), React.createElement(Tag, {
color: 'purple'
}, 'Made to order'), React.createElement(Tag, {
color: 'green'
}, 'In stock')), React.createElement('div', {
style: {
width: '100%',
height: 1,
background: '#E4E4EA'
}
}),
// Quantity + Add to Cart
React.createElement('div', {
style: {
display: 'flex',
gap: 12,
alignItems: 'center'
}
}, React.createElement('div', {
style: {
display: 'flex',
alignItems: 'center',
border: '1px solid #E4E4EA',
borderRadius: 9999,
overflow: 'hidden'
}
}, React.createElement('button', {
onClick: () => setQty(q => Math.max(1, q - 1)),
style: {
width: 40,
height: 44,
background: 'none',
border: 'none',
cursor: 'pointer',
fontSize: 18,
fontWeight: 600,
color: '#3B3AB8'
}
}, '−'), React.createElement('span', {
style: {
width: 36,
textAlign: 'center',
fontWeight: 700,
fontSize: 16
}
}, qty), React.createElement('button', {
onClick: () => setQty(q => q + 1),
style: {
width: 40,
height: 44,
background: 'none',
border: 'none',
cursor: 'pointer',
fontSize: 18,
fontWeight: 600,
color: '#3B3AB8'
}
}, '+')), React.createElement(Button, {
variant: added ? 'primary' : 'gradient',
size: 'lg',
fullWidth: true,
onClick: handleAdd
}, added ? '✓ Added to cart!' : 'Add to cart')), React.createElement('div', {
style: {
fontSize: 13,
color: '#70707E',
fontWeight: 600,
display: 'flex',
gap: 16
}
}, React.createElement('span', null, '🚚 Free shipping on orders over $50'), React.createElement('span', null, '♻️ Made to order')))));
}
});
})(); } catch (e) { __ds_ns.__errors.push({ path: "ui_kits/storefront/ProductDetailPage.jsx", error: String((e && e.message) || e) }); }
// ui_kits/storefront/ShopPage.jsx
try { (() => {
// CubeCraft Creations — Shop / Product Listing View
Object.assign(window, {
ShopPage: function ShopPage({
initialFilter,
products,
onAddToCart,
onSelectProduct
}) {
const {
ProductCard,
Tag,
Badge
} = window.CubeCraft;
const [activeFilter, setActiveFilter] = React.useState(initialFilter || 'All');
const filters = ['All', '3D Prints', 'Crochet', 'Apparel'];
const filtered = activeFilter === 'All' ? products : products.filter(p => p.category === activeFilter);
return React.createElement('div', {
style: {
fontFamily: "'Nunito', system-ui, sans-serif",
background: '#F4F4F6',
minHeight: '100vh'
}
},
// Page header
React.createElement('div', {
style: {
background: '#fff',
borderBottom: '1px solid #E4E4EA',
padding: '32px 32px 0'
}
}, React.createElement('div', {
style: {
maxWidth: 1280,
margin: '0 auto'
}
}, React.createElement('h1', {
style: {
fontWeight: 800,
fontSize: 36,
color: '#18181D',
margin: '0 0 20px',
letterSpacing: '-0.02em'
}
}, activeFilter === 'All' ? 'Shop All' : activeFilter),
// Filter tabs
React.createElement('div', {
style: {
display: 'flex',
gap: 8
}
}, filters.map(f => React.createElement('button', {
key: f,
onClick: () => setActiveFilter(f),
style: {
padding: '10px 20px',
borderRadius: '12px 12px 0 0',
border: 'none',
cursor: 'pointer',
fontFamily: "'Nunito', system-ui, sans-serif",
fontWeight: 700,
fontSize: 14,
background: activeFilter === f ? '#F4F4F6' : 'transparent',
color: activeFilter === f ? '#3B3AB8' : '#52525E',
transition: 'all 150ms ease-out',
borderBottom: activeFilter === f ? '3px solid #3B3AB8' : '3px solid transparent'
}
}, f))))),
// Product grid
React.createElement('div', {
style: {
maxWidth: 1280,
margin: '0 auto',
padding: '32px 32px'
}
}, React.createElement('div', {
style: {
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
marginBottom: 24
}
}, React.createElement('span', {
style: {
fontSize: 14,
color: '#70707E',
fontWeight: 600
}
}, `${filtered.length} products`), React.createElement('div', {
style: {
display: 'flex',
gap: 8,
alignItems: 'center'
}
}, React.createElement('span', {
style: {
fontSize: 13,
color: '#70707E',
fontWeight: 600
}
}, 'Sort:'), React.createElement('select', {
style: {
fontFamily: "'Nunito', system-ui, sans-serif",
fontWeight: 600,
fontSize: 13,
border: '1px solid #E4E4EA',
borderRadius: 9999,
padding: '6px 14px',
background: '#fff',
color: '#18181D',
cursor: 'pointer'
}
}, React.createElement('option', null, 'Featured'), React.createElement('option', null, 'Price: Low to High'), React.createElement('option', null, 'Price: High to Low'), React.createElement('option', null, 'Newest')))), React.createElement('div', {
style: {
display: 'grid',
gridTemplateColumns: 'repeat(4, 1fr)',
gap: 20
}
}, filtered.map(p => React.createElement('div', {
key: p.id,
onClick: () => onSelectProduct(p),
style: {
cursor: 'pointer'
}
}, React.createElement(ProductCard, {
image: p.image,
name: p.name,
price: p.price,
originalPrice: p.originalPrice,
badge: p.badge,
category: p.category,
onAddToCart: e => {
onAddToCart(p);
},
onWishlist: () => {}
}))))));
}
});
})(); } catch (e) { __ds_ns.__errors.push({ path: "ui_kits/storefront/ShopPage.jsx", error: String((e && e.message) || e) }); }
__ds_ns.Badge = __ds_scope.Badge;
__ds_ns.Button = __ds_scope.Button;
__ds_ns.Tag = __ds_scope.Tag;
__ds_ns.CategoryCard = __ds_scope.CategoryCard;
__ds_ns.ProductCard = __ds_scope.ProductCard;
})();