@deneb-ui/ui 2.0.94 → 2.0.96
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 +119 -0
- package/dist/DenebComponentStyles.js +7 -0
- package/dist/EditableCustomerReviews.d.ts +2 -1
- package/dist/EditableCustomerReviews.js +2 -2
- package/dist/EditableFAQAccordion.d.ts +3 -2
- package/dist/EditableFAQAccordion.js +2 -1
- package/dist/EditableGoogleFeedback.js +1 -1
- package/dist/EditableHero.js +2 -2
- package/dist/EditableProductCard.d.ts +15 -71
- package/dist/EditableProductCard.js +176 -27
- package/dist/EditableProductDetail.d.ts +11 -6
- package/dist/EditableProductDetail.js +24 -9
- package/dist/EditableProductGrid.d.ts +4 -1
- package/dist/EditableProductGrid.js +3 -3
- package/dist/EditableProductShowcase.js +1 -1
- package/dist/EditableSection.d.ts +32 -7
- package/dist/EditableSection.js +20 -7
- package/dist/EditableTestimonialSection.js +1 -1
- package/dist/EditableText.d.ts +5 -1
- package/dist/EditableText.js +2 -2
- package/dist/SiteDataProvider.js +16 -5
- package/dist/TrustBadges.js +1 -1
- package/dist/cart/useCart.d.ts +3 -0
- package/dist/cart/useCart.js +20 -9
- package/dist/examples/CompleteStorefrontExample.d.ts +11 -0
- package/dist/examples/CompleteStorefrontExample.js +97 -0
- package/dist/examples/ProductPricingExample.d.ts +9 -0
- package/dist/examples/ProductPricingExample.js +99 -0
- package/dist/examples/SectionLayoutExample.d.ts +7 -0
- package/dist/examples/SectionLayoutExample.js +17 -0
- package/dist/examples/index.d.ts +3 -0
- package/dist/examples/index.js +19 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/utils/productOptions.d.ts +57 -40
- package/dist/utils/productOptions.js +249 -62
- package/package.json +2 -2
package/dist/EditableSection.js
CHANGED
|
@@ -7,25 +7,38 @@ const responsive_1 = require("./utils/responsive");
|
|
|
7
7
|
const SECTION_PADDING_MAP = responsive_1.RESPONSIVE_SECTION_PADDING;
|
|
8
8
|
/**
|
|
9
9
|
* EditableSection standardizes section spacing and automatically applies the required
|
|
10
|
-
* `data-design-section`
|
|
10
|
+
* `data-design-section` and `data-section-id` markers for 100% fivora contract compliance,
|
|
11
|
+
* with first-class support for section deletion/hiding and instant centering.
|
|
11
12
|
*/
|
|
12
|
-
function EditableSection({ as: Component =
|
|
13
|
+
function EditableSection({ as: Component = "section", name, padding = "lg", bg, color, maxWidth, border, align, center, hidden, order, container, containerClassName = "", className = "", style, id, children, ...props }) {
|
|
13
14
|
const resolvedPadding = padding !== undefined ? (SECTION_PADDING_MAP[String(padding)] || String(padding)) : undefined;
|
|
14
15
|
const resolvedBorder = border === true
|
|
15
|
-
?
|
|
16
|
-
: typeof border ===
|
|
16
|
+
? "1px solid var(--border-color, rgba(226, 232, 240, 0.8))"
|
|
17
|
+
: typeof border === "string"
|
|
17
18
|
? border
|
|
18
19
|
: undefined;
|
|
19
20
|
const stylePath = `${name}.section`;
|
|
20
|
-
const { cssVars: styleVars } = (0, useComponentStyle_1.useComponentStyle)(stylePath,
|
|
21
|
+
const { cssVars: styleVars } = (0, useComponentStyle_1.useComponentStyle)(stylePath, "section");
|
|
22
|
+
const resolvedAlign = align || (center ? "center" : undefined);
|
|
21
23
|
const sectionStyle = {
|
|
22
24
|
...(resolvedPadding ? { padding: resolvedPadding } : {}),
|
|
23
25
|
...(bg ? { background: bg } : {}),
|
|
24
26
|
...(color ? { color } : {}),
|
|
25
|
-
...(maxWidth !== undefined ? { maxWidth, marginLeft:
|
|
27
|
+
...(maxWidth !== undefined && !container ? { maxWidth, marginLeft: "auto", marginRight: "auto" } : {}),
|
|
26
28
|
...(resolvedBorder ? { borderBottom: resolvedBorder } : {}),
|
|
29
|
+
...(resolvedAlign ? { textAlign: resolvedAlign } : {}),
|
|
30
|
+
...(hidden ? { display: "none" } : {}),
|
|
31
|
+
...(order !== undefined && order !== "" ? { order: Number(order) } : {}),
|
|
27
32
|
...styleVars,
|
|
28
33
|
...style,
|
|
29
34
|
};
|
|
30
|
-
|
|
35
|
+
const content = container ? ((0, jsx_runtime_1.jsx)("div", { className: `deneb-section-container ${containerClassName}`.trim(), style: {
|
|
36
|
+
maxWidth: maxWidth !== undefined ? maxWidth : "1280px",
|
|
37
|
+
marginLeft: "auto",
|
|
38
|
+
marginRight: "auto",
|
|
39
|
+
paddingLeft: "1rem",
|
|
40
|
+
paddingRight: "1rem",
|
|
41
|
+
...(resolvedAlign === "center" ? { display: "flex", flexDirection: "column", alignItems: "center" } : {}),
|
|
42
|
+
}, children: children })) : (children);
|
|
43
|
+
return ((0, jsx_runtime_1.jsx)(Component, { id: id || name, "data-design-section": name, "data-section-id": name, "data-section-visible": hidden ? "false" : "true", "data-preview-style-target": stylePath, "data-preview-style-type": "section", className: `deneb-section editable-section ${className}`.trim(), style: sectionStyle, ...props, children: content }));
|
|
31
44
|
}
|
|
@@ -111,7 +111,7 @@ function EditableTestimonialSection({ basePath = 'testimonials', badge = 'WORDS
|
|
|
111
111
|
const effectiveSubheading = subheading ?? contentRecord[basePath]?.subheading ?? 'Reflections and feedback from verified customers and dedicated regulars.';
|
|
112
112
|
const hasCustomPy = /(^|\s)(p|py|pt)-/.test(className);
|
|
113
113
|
const defaultPadding = hasCustomPy ? '' : 'py-6 sm:py-8';
|
|
114
|
-
return ((0, jsx_runtime_1.jsx)("section", { "data-preview-page-key": basePath, "data-design-section": basePath, className: `editable-testimonial-section w-full ${defaultPadding} px-3 sm:px-6 lg:px-8 ${className}`.trim(), style: style, ...props, children: (0, jsx_runtime_1.jsxs)("div", { className: "w-full mx-auto", children: [(0, jsx_runtime_1.jsxs)("div", { className: "text-center max-w-3xl mx-auto space-y-3 mb-6 sm:mb-8 px-2", children: [badge && ((0, jsx_runtime_1.jsx)("div", { className: "inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-slate-100 text-slate-800 border border-slate-200 dark:bg-slate-800/80 dark:text-lime-400 dark:border-lime-400/20 text-xs uppercase tracking-widest font-black shadow-sm", children: (0, jsx_runtime_1.jsx)("span", { "data-preview-field-path": `testimonials.badge`, children: badge }) })), (0, jsx_runtime_1.jsx)("h2", { "data-preview-field-path": `testimonials.heading`, className: "font-heading text-2xl xs:text-3xl sm:text-4xl lg:text-5xl font-black text-slate-900 dark:text-white tracking-tight", children: effectiveHeading }), (0, jsx_runtime_1.jsx)("p", { "data-preview-field-path": `testimonials.subheading`, className: "text-xs sm:text-base text-slate-600 dark:text-slate-400 leading-relaxed max-w-2xl mx-auto", children: effectiveSubheading })] }), (0, jsx_runtime_1.jsx)("div", { "data-preview-list-path": `testimonials.testimonials`, className: "grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-5 sm:gap-7 [grid-template-columns:repeat(auto-fit,minmax(min(100%,290px),1fr))] w-full", children: items.map((item, index) => ((0, jsx_runtime_1.jsx)(TestimonialCard, { item: item, index: index, maxStars: maxStars, cardClassName: cardClassName }, item.id || String(index)))) })] }) }));
|
|
114
|
+
return ((0, jsx_runtime_1.jsx)("section", { id: props.id || basePath || "testimonials", "data-section-id": props["data-section-id"] || basePath || "testimonials", "data-preview-page-key": basePath, "data-design-section": basePath, className: `editable-testimonial-section w-full ${defaultPadding} px-3 sm:px-6 lg:px-8 ${className}`.trim(), style: style, ...props, children: (0, jsx_runtime_1.jsxs)("div", { className: "w-full mx-auto", children: [(0, jsx_runtime_1.jsxs)("div", { className: "text-center max-w-3xl mx-auto space-y-3 mb-6 sm:mb-8 px-2", children: [badge && ((0, jsx_runtime_1.jsx)("div", { className: "inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-slate-100 text-slate-800 border border-slate-200 dark:bg-slate-800/80 dark:text-lime-400 dark:border-lime-400/20 text-xs uppercase tracking-widest font-black shadow-sm", children: (0, jsx_runtime_1.jsx)("span", { "data-preview-field-path": `testimonials.badge`, children: badge }) })), (0, jsx_runtime_1.jsx)("h2", { "data-preview-field-path": `testimonials.heading`, className: "font-heading text-2xl xs:text-3xl sm:text-4xl lg:text-5xl font-black text-slate-900 dark:text-white tracking-tight", children: effectiveHeading }), (0, jsx_runtime_1.jsx)("p", { "data-preview-field-path": `testimonials.subheading`, className: "text-xs sm:text-base text-slate-600 dark:text-slate-400 leading-relaxed max-w-2xl mx-auto", children: effectiveSubheading })] }), (0, jsx_runtime_1.jsx)("div", { "data-preview-list-path": `testimonials.testimonials`, className: "grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-5 sm:gap-7 [grid-template-columns:repeat(auto-fit,minmax(min(100%,290px),1fr))] w-full", children: items.map((item, index) => ((0, jsx_runtime_1.jsx)(TestimonialCard, { item: item, index: index, maxStars: maxStars, cardClassName: cardClassName }, item.id || String(index)))) })] }) }));
|
|
115
115
|
}
|
|
116
116
|
// Canonical alias
|
|
117
117
|
exports.TestimonialSection = EditableTestimonialSection;
|
package/dist/EditableText.d.ts
CHANGED
|
@@ -27,6 +27,10 @@ export interface EditableTextProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
27
27
|
* Field path in siteData (e.g. "home.heroTitle").
|
|
28
28
|
*/
|
|
29
29
|
id?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Field path alias (e.g. "hero.title").
|
|
32
|
+
*/
|
|
33
|
+
fieldPath?: string;
|
|
30
34
|
/**
|
|
31
35
|
* Explicit fivora visual editing attribute for strict static analysis.
|
|
32
36
|
*/
|
|
@@ -81,7 +85,7 @@ export interface EditableTextProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
81
85
|
* EditableText provides full typography controls (color, size, weight, line-height, alignment, transform, variants)
|
|
82
86
|
* alongside strict Fivora visual editing bindings.
|
|
83
87
|
*/
|
|
84
|
-
export declare function EditableText({ id, 'data-preview-field-path': previewFieldPath, defaultValue, placeholder, children, as: ComponentOverride, variant, color, size, weight, lineHeight, align, transform, letterSpacing, fontFamily, style, className, ...props }: EditableTextProps): React.JSX.Element;
|
|
88
|
+
export declare function EditableText({ id, 'data-preview-field-path': previewFieldPath, fieldPath, defaultValue, placeholder, children, as: ComponentOverride, variant, color, size, weight, lineHeight, align, transform, letterSpacing, fontFamily, style, className, ...props }: EditableTextProps): React.JSX.Element;
|
|
85
89
|
export interface EditableHeadingProps extends Omit<EditableTextProps, 'variant'> {
|
|
86
90
|
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
87
91
|
}
|
package/dist/EditableText.js
CHANGED
|
@@ -106,8 +106,8 @@ function toCssUnit(value) {
|
|
|
106
106
|
* EditableText provides full typography controls (color, size, weight, line-height, alignment, transform, variants)
|
|
107
107
|
* alongside strict Fivora visual editing bindings.
|
|
108
108
|
*/
|
|
109
|
-
function EditableText({ id, 'data-preview-field-path': previewFieldPath, defaultValue, placeholder, children, as: ComponentOverride, variant, color, size, weight, lineHeight, align, transform, letterSpacing, fontFamily, style, className = '', ...props }) {
|
|
110
|
-
const path = previewFieldPath || id;
|
|
109
|
+
function EditableText({ id, 'data-preview-field-path': previewFieldPath, fieldPath, defaultValue, placeholder, children, as: ComponentOverride, variant, color, size, weight, lineHeight, align, transform, letterSpacing, fontFamily, style, className = '', ...props }) {
|
|
110
|
+
const path = previewFieldPath || fieldPath || id;
|
|
111
111
|
const rawContent = children !== undefined ? children : defaultValue;
|
|
112
112
|
const isContentEmpty = rawContent === undefined ||
|
|
113
113
|
rawContent === null ||
|
package/dist/SiteDataProvider.js
CHANGED
|
@@ -718,11 +718,14 @@ function normalizeProductItem(p) {
|
|
|
718
718
|
: p.rate;
|
|
719
719
|
let numPrice = rawPrice;
|
|
720
720
|
if (typeof rawPrice === "string" && rawPrice.trim()) {
|
|
721
|
-
const
|
|
722
|
-
if (
|
|
723
|
-
const
|
|
724
|
-
if (
|
|
725
|
-
|
|
721
|
+
const isRangeStr = rawPrice.includes("-") || rawPrice.includes("–") || rawPrice.includes("—") || /\bto\b/i.test(rawPrice);
|
|
722
|
+
if (!isRangeStr) {
|
|
723
|
+
const match = rawPrice.match(/-?\d+(?:,\d{3})*(?:\.\d+)?|-?\d+(?:\.\d+)?/);
|
|
724
|
+
if (match) {
|
|
725
|
+
const parsed = parseFloat(match[0].replace(/,/g, ""));
|
|
726
|
+
if (!isNaN(parsed) && Number.isFinite(parsed)) {
|
|
727
|
+
numPrice = parsed;
|
|
728
|
+
}
|
|
726
729
|
}
|
|
727
730
|
}
|
|
728
731
|
}
|
|
@@ -757,6 +760,10 @@ function normalizeProductItem(p) {
|
|
|
757
760
|
(Array.isArray(p.images) ? p.images[0] : undefined);
|
|
758
761
|
const badgeCandidate = p.badge ?? p.tag ?? p.label ?? p.badgeText ?? p.chip;
|
|
759
762
|
const descCandidate = p.description ?? p.desc ?? p.details ?? p.shortDescription ?? p.subtitle;
|
|
763
|
+
const explicitMin = p.minPrice ?? customData.minPrice;
|
|
764
|
+
const explicitMax = p.maxPrice ?? customData.maxPrice;
|
|
765
|
+
const explicitRange = p.priceRange ?? customData.priceRange;
|
|
766
|
+
const isRange = Boolean(p.isPriceRange || customData.isPriceRange || (explicitMax && explicitMin));
|
|
760
767
|
return {
|
|
761
768
|
...customData,
|
|
762
769
|
...p,
|
|
@@ -764,6 +771,10 @@ function normalizeProductItem(p) {
|
|
|
764
771
|
title: titleCandidate,
|
|
765
772
|
productName: (titleCandidate ?? nameCandidate),
|
|
766
773
|
itemTitle: (titleCandidate ?? nameCandidate),
|
|
774
|
+
minPrice: explicitMin !== undefined ? explicitMin : undefined,
|
|
775
|
+
maxPrice: explicitMax !== undefined ? explicitMax : undefined,
|
|
776
|
+
priceRange: explicitRange !== undefined ? explicitRange : undefined,
|
|
777
|
+
isPriceRange: isRange,
|
|
767
778
|
...(numPrice !== undefined
|
|
768
779
|
? {
|
|
769
780
|
price: numPrice,
|
package/dist/TrustBadges.js
CHANGED
|
@@ -58,7 +58,7 @@ function TrustBadges({ fieldPath = 'content.trustBadges', title, subtitle, badge
|
|
|
58
58
|
return ((0, jsx_runtime_1.jsx)("svg", { className: "w-6 h-6 text-slate-700", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }));
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
|
-
return ((0, jsx_runtime_1.jsxs)("section", { className: `w-full py-8 my-4 ${className}`, "data-preview-field-path": fieldPath, style: style, children: [(title || subtitle) && ((0, jsx_runtime_1.jsxs)("div", { className: "text-center mb-8", children: [title && ((0, jsx_runtime_1.jsx)("h3", { className: "text-xl sm:text-2xl font-bold tracking-tight text-slate-900 dark:text-white", children: title })), subtitle && ((0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-sm text-slate-600 dark:text-slate-400 max-w-xl mx-auto", children: subtitle }))] })), (0, jsx_runtime_1.jsx)("div", { className: variant === 'inline'
|
|
61
|
+
return ((0, jsx_runtime_1.jsxs)("section", { id: "trust-badges", "data-design-section": "trust-badges", "data-section-id": "trust-badges", className: `w-full py-8 my-4 ${className}`, "data-preview-field-path": fieldPath, style: style, children: [(title || subtitle) && ((0, jsx_runtime_1.jsxs)("div", { className: "text-center mb-8", children: [title && ((0, jsx_runtime_1.jsx)("h3", { className: "text-xl sm:text-2xl font-bold tracking-tight text-slate-900 dark:text-white", children: title })), subtitle && ((0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-sm text-slate-600 dark:text-slate-400 max-w-xl mx-auto", children: subtitle }))] })), (0, jsx_runtime_1.jsx)("div", { className: variant === 'inline'
|
|
62
62
|
? 'flex flex-wrap items-center justify-around gap-6'
|
|
63
63
|
: 'deneb-trust-grid grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 sm:gap-6', children: badges.map((badge) => ((0, jsx_runtime_1.jsxs)("div", { className: `flex items-start gap-4 p-5 rounded-2xl transition-all duration-200 hover:-translate-y-0.5 ${variant === 'cards'
|
|
64
64
|
? 'bg-white border border-slate-200/80 shadow-sm hover:shadow-md dark:bg-slate-900/60 dark:border-slate-800 dark:hover:border-slate-700'
|
package/dist/cart/useCart.d.ts
CHANGED
|
@@ -19,6 +19,9 @@ export declare function getProductWhatsAppUrl(product: {
|
|
|
19
19
|
title?: string;
|
|
20
20
|
brand?: string;
|
|
21
21
|
price?: string | number;
|
|
22
|
+
size?: string | number;
|
|
23
|
+
color?: string;
|
|
24
|
+
option?: string | number;
|
|
22
25
|
[key: string]: unknown;
|
|
23
26
|
}, whatsappNumber: string, options?: {
|
|
24
27
|
storeName?: string;
|
package/dist/cart/useCart.js
CHANGED
|
@@ -31,19 +31,30 @@ function formatCurrency(amount, currency = 'LKR') {
|
|
|
31
31
|
return `${currency} ${formatted}`;
|
|
32
32
|
}
|
|
33
33
|
function getProductWhatsAppUrl(product, whatsappNumber, options) {
|
|
34
|
-
const cleanNumber = (whatsappNumber ||
|
|
35
|
-
const title = product.name || product.title ||
|
|
36
|
-
const brand = product.brand ? ` (Brand: ${product.brand})` :
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
const cleanNumber = (whatsappNumber || "").replace(/\D/g, "");
|
|
35
|
+
const title = product.name || product.title || "Product";
|
|
36
|
+
const brand = product.brand ? ` (Brand: ${product.brand})` : "";
|
|
37
|
+
const variantParts = [];
|
|
38
|
+
if (product.size)
|
|
39
|
+
variantParts.push(`Size: ${product.size}`);
|
|
40
|
+
if (product.color && product.color !== "Standard")
|
|
41
|
+
variantParts.push(`Color: ${product.color}`);
|
|
42
|
+
if (product.option && product.option !== product.size)
|
|
43
|
+
variantParts.push(`Option: ${product.option}`);
|
|
44
|
+
const variantStr = variantParts.length > 0 ? ` [${variantParts.join(", ")}]` : "";
|
|
45
|
+
const rawPriceStr = typeof product.price === "string" && product.price.trim() ? product.price.trim() : "";
|
|
46
|
+
const priceNum = typeof product.price === "number" ? product.price : parseNumericPrice(product.price);
|
|
47
|
+
const priceStr = rawPriceStr
|
|
48
|
+
? `\nPrice: ${rawPriceStr}`
|
|
49
|
+
: (priceNum > 0 ? `\nPrice: ${formatCurrency(priceNum, options?.currency || "LKR")}` : "");
|
|
50
|
+
const store = options?.storeName ? ` at ${options.storeName}` : "";
|
|
40
51
|
const message = [
|
|
41
52
|
`Hello${store}! 👋`,
|
|
42
53
|
`I am interested in this product:`,
|
|
43
|
-
`*${title}*${brand}${priceStr}`,
|
|
44
|
-
|
|
54
|
+
`*${title}*${brand}${variantStr}${priceStr}`,
|
|
55
|
+
"",
|
|
45
56
|
`Could you please share more details, availability, and ordering instructions? Thank you!`,
|
|
46
|
-
].join(
|
|
57
|
+
].join("\n");
|
|
47
58
|
return `https://wa.me/${cleanNumber}?text=${encodeURIComponent(message)}`;
|
|
48
59
|
}
|
|
49
60
|
const CartContext = (0, react_1.createContext)(null);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Complete Storefront Page Template Example.
|
|
4
|
+
*
|
|
5
|
+
* Demonstrates a fully modular, production-ready Fivora storefront layout where:
|
|
6
|
+
* 1. Every top-level block is wrapped in an `<EditableSection>` with `name`, `data-design-section`, and `data-section-id`.
|
|
7
|
+
* 2. Visual layout controls (center alignment, hide/delete section, background styling) work natively.
|
|
8
|
+
* 3. Products seamlessly handle both single fixed pricing and dynamic variant ranges with interactive apparel swatches.
|
|
9
|
+
*/
|
|
10
|
+
export declare function CompleteStorefrontExample(): React.JSX.Element;
|
|
11
|
+
export default CompleteStorefrontExample;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CompleteStorefrontExample = CompleteStorefrontExample;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const EditableSection_1 = require("../EditableSection");
|
|
6
|
+
const EditableText_1 = require("../EditableText");
|
|
7
|
+
const EditableProductGrid_1 = require("../EditableProductGrid");
|
|
8
|
+
const EditableCustomerReviews_1 = require("../EditableCustomerReviews");
|
|
9
|
+
const EditableFAQAccordion_1 = require("../EditableFAQAccordion");
|
|
10
|
+
const TrustBadges_1 = require("../TrustBadges");
|
|
11
|
+
/**
|
|
12
|
+
* Complete Storefront Page Template Example.
|
|
13
|
+
*
|
|
14
|
+
* Demonstrates a fully modular, production-ready Fivora storefront layout where:
|
|
15
|
+
* 1. Every top-level block is wrapped in an `<EditableSection>` with `name`, `data-design-section`, and `data-section-id`.
|
|
16
|
+
* 2. Visual layout controls (center alignment, hide/delete section, background styling) work natively.
|
|
17
|
+
* 3. Products seamlessly handle both single fixed pricing and dynamic variant ranges with interactive apparel swatches.
|
|
18
|
+
*/
|
|
19
|
+
function CompleteStorefrontExample() {
|
|
20
|
+
const sampleProducts = [
|
|
21
|
+
{
|
|
22
|
+
id: 'prod-1',
|
|
23
|
+
name: 'Structured Linen Overshirt',
|
|
24
|
+
minPrice: 3200,
|
|
25
|
+
maxPrice: 4600,
|
|
26
|
+
priceRange: 'LKR 3,200 – LKR 4,600',
|
|
27
|
+
isPriceRange: true,
|
|
28
|
+
currency: 'LKR',
|
|
29
|
+
imageUrl: '/images/linen-shirt.jpg',
|
|
30
|
+
badge: 'Bestseller',
|
|
31
|
+
colors: [
|
|
32
|
+
{ name: 'Oatmeal', hex: '#e2d9cc', imageUrl: '/images/linen-shirt.jpg' },
|
|
33
|
+
{ name: 'Forest Green', hex: '#2d4739', imageUrl: '/images/linen-shirt-green.jpg' },
|
|
34
|
+
],
|
|
35
|
+
sizes: ['S', 'M', 'L', 'XL'],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'prod-2',
|
|
39
|
+
name: 'Minimalist Silver Bangle',
|
|
40
|
+
price: 5200,
|
|
41
|
+
compareAtPrice: 6500,
|
|
42
|
+
currency: 'LKR',
|
|
43
|
+
imageUrl: '/images/silver-bangle.jpg',
|
|
44
|
+
badge: '925 Sterling',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: 'prod-3',
|
|
48
|
+
name: 'Pleated Silk Scarf',
|
|
49
|
+
minPrice: 1900,
|
|
50
|
+
maxPrice: 2800,
|
|
51
|
+
priceRange: 'LKR 1,900 – LKR 2,800',
|
|
52
|
+
isPriceRange: true,
|
|
53
|
+
currency: 'LKR',
|
|
54
|
+
imageUrl: '/images/silk-scarf.jpg',
|
|
55
|
+
colors: [
|
|
56
|
+
{ name: 'Crimson', hex: '#991b1b', imageUrl: '/images/silk-scarf.jpg' },
|
|
57
|
+
{ name: 'Goldenrod', hex: '#d97706', imageUrl: '/images/silk-scarf-gold.jpg' },
|
|
58
|
+
],
|
|
59
|
+
sizes: ['Standard', 'Oversized'],
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
const sampleReviews = [
|
|
63
|
+
{
|
|
64
|
+
id: 'rev-1',
|
|
65
|
+
author: 'Dilshan Perera',
|
|
66
|
+
rating: 5,
|
|
67
|
+
comment: 'Exceptional linen quality and fast delivery. The color swatch matched reality perfectly.',
|
|
68
|
+
date: '2 days ago',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
id: 'rev-2',
|
|
72
|
+
author: 'Ananya Sharma',
|
|
73
|
+
rating: 5,
|
|
74
|
+
comment: 'Super easy WhatsApp ordering process! Customer support replied within minutes.',
|
|
75
|
+
date: '1 week ago',
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
const sampleFaqs = [
|
|
79
|
+
{
|
|
80
|
+
id: 'faq-1',
|
|
81
|
+
question: 'How do clothing size options and price ranges work?',
|
|
82
|
+
answer: 'Items with multiple materials or sizes display our transparent price range. Selecting your color swatch and size chip will immediately resolve the exact checkout price.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: 'faq-2',
|
|
86
|
+
question: 'Can I hide or reorder sections in the visual editor?',
|
|
87
|
+
answer: 'Yes! Every section in this template is annotated with data-design-section. Shop owners can center content, change colors, or hide unwanted sections with 1-click in the visual editor.',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: 'faq-3',
|
|
91
|
+
question: 'What delivery options are supported?',
|
|
92
|
+
answer: 'We support island-wide tracked door-to-door courier delivery and prompt Cash-on-Delivery payment options.',
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "min-h-screen bg-white text-gray-900 font-sans", children: [(0, jsx_runtime_1.jsx)(EditableSection_1.EditableSection, { name: "announcement-bar", container: true, className: "bg-indigo-900 text-white text-xs py-2 px-4 text-center font-medium", children: (0, jsx_runtime_1.jsx)("span", { children: "Complimentary islandwide delivery on all orders above LKR 10,000" }) }), (0, jsx_runtime_1.jsx)(EditableSection_1.EditableSection, { name: "hero", align: "center", container: true, className: "py-20 px-6 bg-gradient-to-b from-indigo-50/50 via-white to-white", children: (0, jsx_runtime_1.jsxs)("div", { className: "max-w-3xl mx-auto text-center", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-xs uppercase font-bold tracking-widest text-indigo-600 bg-indigo-100/80 px-3 py-1 rounded-full", children: "Modern Ceylon Atelier" }), (0, jsx_runtime_1.jsx)(EditableText_1.EditableText, { as: "h1", fieldPath: "hero.title", className: "text-4xl sm:text-6xl font-extrabold text-gray-950 mt-5 tracking-tight leading-tight", children: "Timeless Apparel & Handcrafted Essentials" }), (0, jsx_runtime_1.jsx)(EditableText_1.EditableText, { as: "p", fieldPath: "hero.subtitle", className: "text-base sm:text-lg text-gray-600 mt-4 max-w-xl mx-auto leading-relaxed", children: "Designed with natural fibers, organic silhouettes, and responsive interactive previewing." }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-8 flex flex-wrap justify-center gap-4", children: [(0, jsx_runtime_1.jsx)("a", { href: "#products", className: "px-6 py-3.5 bg-indigo-600 text-white font-semibold rounded-xl hover:bg-indigo-700 shadow-sm transition", children: "Shop New Arrivals" }), (0, jsx_runtime_1.jsx)("a", { href: "#reviews", className: "px-6 py-3.5 bg-white text-gray-700 border border-gray-200 font-semibold rounded-xl hover:bg-gray-50 transition", children: "Read Customer Stories" })] })] }) }), (0, jsx_runtime_1.jsx)(EditableSection_1.EditableSection, { name: "trust-badges", container: true, className: "border-y border-gray-100 bg-gray-50/60 py-6 px-6", children: (0, jsx_runtime_1.jsx)(TrustBadges_1.TrustBadges, {}) }), (0, jsx_runtime_1.jsx)(EditableSection_1.EditableSection, { name: "products", id: "products", container: true, className: "py-20 px-6", children: (0, jsx_runtime_1.jsx)(EditableProductGrid_1.EditableProductGrid, { products: sampleProducts, title: "Curated Seasonal Essentials", subtitle: "Explore garments with dynamic variant pricing, interactive color swatches, and instant WhatsApp checkout.", listPath: "products", whatsappPhone: "+94771234567", currency: "LKR" }) }), (0, jsx_runtime_1.jsx)(EditableSection_1.EditableSection, { name: "customer-reviews", id: "reviews", container: true, className: "py-16 px-6 bg-gray-50/70 rounded-3xl my-8 mx-auto max-w-7xl", children: (0, jsx_runtime_1.jsx)(EditableCustomerReviews_1.EditableCustomerReviews, { reviews: sampleReviews, title: "Loved by Discerning Shoppers", subtitle: "Verified feedback from boutique buyers across Colombo, Kandy, and Galle.", listPath: "reviews" }) }), (0, jsx_runtime_1.jsxs)(EditableSection_1.EditableSection, { name: "faq", container: true, className: "py-16 px-6 max-w-4xl mx-auto", children: [(0, jsx_runtime_1.jsxs)("div", { className: "text-center mb-10", children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-3xl font-bold text-gray-900", children: "Frequently Asked Questions" }), (0, jsx_runtime_1.jsx)("p", { className: "text-gray-500 text-sm mt-2", children: "Everything you need to know about our products and order process." })] }), (0, jsx_runtime_1.jsx)(EditableFAQAccordion_1.EditableFAQAccordion, { faqs: sampleFaqs, listPath: "faqs" })] }), (0, jsx_runtime_1.jsx)(EditableSection_1.EditableSection, { name: "footer", container: true, className: "border-t border-gray-200 bg-gray-950 text-gray-400 py-12 px-6", children: (0, jsx_runtime_1.jsxs)("div", { className: "max-w-7xl mx-auto flex flex-col sm:flex-row items-center justify-between gap-6 text-sm", children: [(0, jsx_runtime_1.jsx)("p", { children: "\u00A9 2026 Fivora Atelier Storefront. All rights reserved." }), (0, jsx_runtime_1.jsxs)("div", { className: "flex gap-6", children: [(0, jsx_runtime_1.jsx)("a", { href: "#", className: "hover:text-white transition", children: "Privacy Policy" }), (0, jsx_runtime_1.jsx)("a", { href: "#", className: "hover:text-white transition", children: "Terms of Service" }), (0, jsx_runtime_1.jsx)("a", { href: "#products", className: "hover:text-white transition", children: "Shop All" })] })] }) })] }));
|
|
96
|
+
}
|
|
97
|
+
exports.default = CompleteStorefrontExample;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Example demonstrating Deneb UI's Dual Product Pricing & Apparel Variants:
|
|
4
|
+
* 1. Single Fixed Price products (e.g. Handcrafted Leather Wallet).
|
|
5
|
+
* 2. Dynamic Price Range products (e.g. Linen Shirt with multiple tier options).
|
|
6
|
+
* 3. Interactive Color Swatches with instant photo-switching and size chips.
|
|
7
|
+
*/
|
|
8
|
+
export declare function ProductPricingExample(): React.JSX.Element;
|
|
9
|
+
export default ProductPricingExample;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProductPricingExample = ProductPricingExample;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const EditableSection_1 = require("../EditableSection");
|
|
6
|
+
const EditableProductCard_1 = require("../EditableProductCard");
|
|
7
|
+
/**
|
|
8
|
+
* Example demonstrating Deneb UI's Dual Product Pricing & Apparel Variants:
|
|
9
|
+
* 1. Single Fixed Price products (e.g. Handcrafted Leather Wallet).
|
|
10
|
+
* 2. Dynamic Price Range products (e.g. Linen Shirt with multiple tier options).
|
|
11
|
+
* 3. Interactive Color Swatches with instant photo-switching and size chips.
|
|
12
|
+
*/
|
|
13
|
+
function ProductPricingExample() {
|
|
14
|
+
const sampleProducts = [
|
|
15
|
+
{
|
|
16
|
+
id: 'prod-fixed-1',
|
|
17
|
+
name: 'Artisan Leather Cardholder',
|
|
18
|
+
description: 'Hand-stitched full-grain Italian leather with RFID protection.',
|
|
19
|
+
price: 3800,
|
|
20
|
+
compareAtPrice: 4500,
|
|
21
|
+
currency: 'LKR',
|
|
22
|
+
imageUrl: '/images/leather-cardholder.jpg',
|
|
23
|
+
badge: 'Best Seller',
|
|
24
|
+
stock: 15,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: 'prod-apparel-range-2',
|
|
28
|
+
name: 'Relaxed Linen Resort Shirt',
|
|
29
|
+
description: 'Pure organic French linen with pearl buttons. Available in 3 earth tones.',
|
|
30
|
+
minPrice: 2800,
|
|
31
|
+
maxPrice: 4800,
|
|
32
|
+
priceRange: 'LKR 2,800 – LKR 4,800',
|
|
33
|
+
isPriceRange: true,
|
|
34
|
+
currency: 'LKR',
|
|
35
|
+
imageUrl: '/images/linen-navy.jpg',
|
|
36
|
+
badge: 'New Season',
|
|
37
|
+
colors: [
|
|
38
|
+
{
|
|
39
|
+
name: 'Midnight Navy',
|
|
40
|
+
hex: '#0f2942',
|
|
41
|
+
imageUrl: '/images/linen-navy.jpg',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Olive Sage',
|
|
45
|
+
hex: '#4d6840',
|
|
46
|
+
imageUrl: '/images/linen-olive.jpg',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Terracotta Sand',
|
|
50
|
+
hex: '#c26d4f',
|
|
51
|
+
imageUrl: '/images/linen-terracotta.jpg',
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
sizes: ['S', 'M', 'L', 'XL'],
|
|
55
|
+
variants: [
|
|
56
|
+
{ color: 'Midnight Navy', size: 'S', price: 2800 },
|
|
57
|
+
{ color: 'Midnight Navy', size: 'M', price: 2800 },
|
|
58
|
+
{ color: 'Midnight Navy', size: 'L', price: 3200 },
|
|
59
|
+
{ color: 'Midnight Navy', size: 'XL', price: 3500 },
|
|
60
|
+
{ color: 'Olive Sage', size: 'S', price: 3800 },
|
|
61
|
+
{ color: 'Olive Sage', size: 'M', price: 3800 },
|
|
62
|
+
{ color: 'Olive Sage', size: 'L', price: 4200 },
|
|
63
|
+
{ color: 'Terracotta Sand', size: 'M', price: 4500 },
|
|
64
|
+
{ color: 'Terracotta Sand', size: 'XL', price: 4800 },
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'prod-apparel-range-3',
|
|
69
|
+
name: 'Merino Wool Knit Cardigan',
|
|
70
|
+
description: 'Ultra-soft extrafine Australian merino wool with ribbed cuffs.',
|
|
71
|
+
minPrice: 6500,
|
|
72
|
+
maxPrice: 8500,
|
|
73
|
+
priceRange: 'LKR 6,500 – LKR 8,500',
|
|
74
|
+
isPriceRange: true,
|
|
75
|
+
currency: 'LKR',
|
|
76
|
+
imageUrl: '/images/knit-charcoal.jpg',
|
|
77
|
+
colors: [
|
|
78
|
+
{
|
|
79
|
+
name: 'Charcoal Grey',
|
|
80
|
+
hex: '#334155',
|
|
81
|
+
imageUrl: '/images/knit-charcoal.jpg',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'Cream Oatmeal',
|
|
85
|
+
hex: '#f1f5f9',
|
|
86
|
+
imageUrl: '/images/knit-cream.jpg',
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
sizes: ['M', 'L', 'XL'],
|
|
90
|
+
variants: [
|
|
91
|
+
{ color: 'Charcoal Grey', size: 'M', price: 6500 },
|
|
92
|
+
{ color: 'Charcoal Grey', size: 'L', price: 7200 },
|
|
93
|
+
{ color: 'Cream Oatmeal', size: 'L', price: 8500 },
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
];
|
|
97
|
+
return ((0, jsx_runtime_1.jsxs)(EditableSection_1.EditableSection, { name: "products", container: true, className: "py-16 px-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "text-center max-w-xl mx-auto mb-12", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-xs uppercase font-bold tracking-widest text-indigo-600 bg-indigo-50 px-3 py-1 rounded-full", children: "Live Storefront Products" }), (0, jsx_runtime_1.jsx)("h2", { className: "text-3xl font-extrabold text-gray-900 mt-3 tracking-tight", children: "Crafted For Longevity & Style" }), (0, jsx_runtime_1.jsx)("p", { className: "text-gray-500 mt-2 text-sm leading-relaxed", children: "Select apparel colors to dynamically update product photos, view variant prices, or configure orders via direct WhatsApp checkout." })] }), (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8", children: sampleProducts.map((product, index) => ((0, jsx_runtime_1.jsx)(EditableProductCard_1.EditableProductCard, { item: product, itemPath: `products[${index}]`, whatsappPhone: "+94771234567", currency: "LKR", showOptions: true, allowInteractiveSwatches: true }, product.id))) })] }));
|
|
98
|
+
}
|
|
99
|
+
exports.default = ProductPricingExample;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Example demonstrating how to use Deneb UI's `<EditableSection>`
|
|
4
|
+
* with full visual-editing annotations, 1-click centering, and hiding/deletion controls.
|
|
5
|
+
*/
|
|
6
|
+
export declare function SectionLayoutExample(): React.JSX.Element;
|
|
7
|
+
export default SectionLayoutExample;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SectionLayoutExample = SectionLayoutExample;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const EditableSection_1 = require("../EditableSection");
|
|
7
|
+
const EditableText_1 = require("../EditableText");
|
|
8
|
+
/**
|
|
9
|
+
* Example demonstrating how to use Deneb UI's `<EditableSection>`
|
|
10
|
+
* with full visual-editing annotations, 1-click centering, and hiding/deletion controls.
|
|
11
|
+
*/
|
|
12
|
+
function SectionLayoutExample() {
|
|
13
|
+
const [isPromoHidden, setIsPromoHidden] = (0, react_1.useState)(false);
|
|
14
|
+
const [heroAlign, setHeroAlign] = (0, react_1.useState)('center');
|
|
15
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "space-y-12 py-8", children: [(0, jsx_runtime_1.jsxs)(EditableSection_1.EditableSection, { name: "hero", align: heroAlign, container: true, className: "py-16 px-6 bg-gradient-to-b from-gray-50 to-white rounded-2xl", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-xs uppercase font-bold tracking-wider text-indigo-600 bg-indigo-50 px-3 py-1 rounded-full", children: "Featured Collection 2026" }), (0, jsx_runtime_1.jsx)(EditableText_1.EditableText, { as: "h1", fieldPath: "hero.title", className: "text-4xl md:text-5xl font-extrabold text-gray-900 mt-4 tracking-tight", children: "Curated Luxury & Tailored Aesthetics" }), (0, jsx_runtime_1.jsx)(EditableText_1.EditableText, { as: "p", fieldPath: "hero.subtitle", className: "text-lg text-gray-600 max-w-2xl mx-auto mt-3 leading-relaxed", children: "Experience handcrafted garments and jewelry engineered with organic textures, responsive layouts, and precision styling." }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-8 flex gap-4 justify-center", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: "px-6 py-3 bg-indigo-600 text-white font-medium rounded-xl hover:bg-indigo-700 transition", children: "Explore Catalogue" }), (0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => setHeroAlign(current => current === 'center' ? 'left' : 'center'), className: "px-4 py-3 bg-white text-gray-700 border border-gray-300 font-medium rounded-xl hover:bg-gray-50 transition text-sm", children: ["Toggle Alignment (", heroAlign, ")"] })] })] }), (0, jsx_runtime_1.jsx)(EditableSection_1.EditableSection, { name: "promotions", hidden: isPromoHidden, container: true, className: "py-8 px-6 bg-amber-500 text-white rounded-2xl shadow-sm text-center", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-xl font-bold", children: "Limited Seasonal Clearance" }), (0, jsx_runtime_1.jsx)("p", { className: "text-amber-100 text-sm mt-1", children: "Save up to 40% on selected cashmere and silk silhouettes." })] }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setIsPromoHidden(true), className: "text-xs bg-white text-amber-900 font-semibold px-4 py-2 rounded-lg hover:bg-amber-100 transition", title: "In visual editor, this sets display: 'none' via section blueprint", children: "Hide This Section (Test)" })] }) }), isPromoHidden && ((0, jsx_runtime_1.jsx)("div", { className: "text-center py-4", children: (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setIsPromoHidden(false), className: "text-sm text-indigo-600 underline font-medium hover:text-indigo-800", children: "\u21BA Restore Hidden Promotions Section" }) })), (0, jsx_runtime_1.jsxs)(EditableSection_1.EditableSection, { name: "features", container: true, className: "py-12 px-6", children: [(0, jsx_runtime_1.jsx)(EditableText_1.EditableText, { as: "h2", fieldPath: "features.heading", className: "text-3xl font-bold text-gray-900 mb-8", children: "Why Choose Fivora Storefronts" }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-8", children: [(0, jsx_runtime_1.jsxs)("div", { className: "p-6 bg-gray-50 rounded-xl border border-gray-100", children: [(0, jsx_runtime_1.jsx)("h4", { className: "font-semibold text-lg text-gray-900", children: "Live Visual Blueprint" }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-gray-600 mt-2", children: "Every section is targetable by ID or section name for instant styling, reordering, and centering." })] }), (0, jsx_runtime_1.jsxs)("div", { className: "p-6 bg-gray-50 rounded-xl border border-gray-100", children: [(0, jsx_runtime_1.jsx)("h4", { className: "font-semibold text-lg text-gray-900", children: "Dual Pricing Engine" }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-gray-600 mt-2", children: "Supports both fixed prices and dynamic variant-driven ranges with interactive color swatches." })] }), (0, jsx_runtime_1.jsxs)("div", { className: "p-6 bg-gray-50 rounded-xl border border-gray-100", children: [(0, jsx_runtime_1.jsx)("h4", { className: "font-semibold text-lg text-gray-900", children: "Zero-Config Static Export" }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-gray-600 mt-2", children: "Pre-rendered HTML output with strict contract verification and blazing-fast mobile response." })] })] })] })] }));
|
|
16
|
+
}
|
|
17
|
+
exports.default = SectionLayoutExample;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./SectionLayoutExample"), exports);
|
|
18
|
+
__exportStar(require("./ProductPricingExample"), exports);
|
|
19
|
+
__exportStar(require("./CompleteStorefrontExample"), exports);
|
package/dist/index.d.ts
CHANGED
|
@@ -103,3 +103,4 @@ export declare const DENEB_FRAMEWORK_VERSION = "2.0.0";
|
|
|
103
103
|
export declare const DENEB_AUTHOR = "Chamika Gayashan & Induranga Kawishwara";
|
|
104
104
|
export { THEME_PALETTES, GLOBAL_FONT_OPTIONS, FONT_PAIRINGS, isDarkColor, getAutoContrastTextColor, toHexColor, normalizeHexColor, parseVisualCustomization, customizationToTheme, mergeVisualCustomizationIntoTheme, generateThemeVariables, } from '@deneb-ui/core';
|
|
105
105
|
export type { ThemePalette, FontPairing, GlobalFontOption, VisualCustomization, VisualCustomizationColors, VisualCustomizationTypography, VisualCustomizationSpacing, VisualCustomizationLayout, VisualCustomizationComponents, VisualCustomizationSectionOverride, VisualCustomizationElementStyle, TemplateThemeShape, } from '@deneb-ui/core';
|
|
106
|
+
export * from './examples';
|
package/dist/index.js
CHANGED
|
@@ -198,3 +198,5 @@ Object.defineProperty(exports, "parseVisualCustomization", { enumerable: true, g
|
|
|
198
198
|
Object.defineProperty(exports, "customizationToTheme", { enumerable: true, get: function () { return core_3.customizationToTheme; } });
|
|
199
199
|
Object.defineProperty(exports, "mergeVisualCustomizationIntoTheme", { enumerable: true, get: function () { return core_3.mergeVisualCustomizationIntoTheme; } });
|
|
200
200
|
Object.defineProperty(exports, "generateThemeVariables", { enumerable: true, get: function () { return core_3.generateThemeVariables; } });
|
|
201
|
+
// Export reference examples
|
|
202
|
+
__exportStar(require("./examples"), exports);
|