@deneb-ui/ui 2.0.6 → 2.0.8
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 +2 -2
- package/dist/CookieConsentBanner.d.ts +31 -0
- package/dist/CookieConsentBanner.js +77 -0
- package/dist/ProductQuickView.d.ts +37 -0
- package/dist/ProductQuickView.js +63 -0
- package/dist/StickyMobileBar.d.ts +38 -0
- package/dist/StickyMobileBar.js +91 -0
- package/dist/TrustBadges.d.ts +31 -0
- package/dist/TrustBadges.js +66 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +13 -1
- package/package.json +10 -1
package/README.md
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
> **DENEB UI — Build beautiful interfaces, effortlessly.**
|
|
6
6
|
> The premier visual-first React component ecosystem.
|
|
7
|
-
>
|
|
7
|
+
> Proudly presented by **DENEB-UI Collaborate with FIVORA**.
|
|
8
8
|
|
|
9
|
-
[](https://github.com/
|
|
9
|
+
[](https://github.com/deneb-ui/ui)
|
|
10
10
|
[](https://opensource.org/licenses/MIT)
|
|
11
11
|
|
|
12
12
|
---
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface CookieConsentBannerProps {
|
|
3
|
+
fieldPath?: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
message?: string;
|
|
6
|
+
privacyPolicyUrl?: string;
|
|
7
|
+
privacyPolicyLabel?: string;
|
|
8
|
+
acceptLabel?: string;
|
|
9
|
+
declineLabel?: string;
|
|
10
|
+
position?: 'bottom' | 'bottom-left' | 'bottom-right';
|
|
11
|
+
storageKey?: string;
|
|
12
|
+
onAccept?: () => void;
|
|
13
|
+
onDecline?: () => void;
|
|
14
|
+
className?: string;
|
|
15
|
+
style?: React.CSSProperties;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* DENEB UI — Cookie & Privacy Consent Banner
|
|
19
|
+
*
|
|
20
|
+
* GDPR / ePrivacy compliant cookie banner with smooth animation,
|
|
21
|
+
* local storage persistence, and live visual customization.
|
|
22
|
+
*
|
|
23
|
+
* Features:
|
|
24
|
+
* - Persistent consent state in localStorage (`deneb_cookie_consent`)
|
|
25
|
+
* - Non-intrusive modern floating dock design
|
|
26
|
+
* - Configurable position (bottom, bottom-left, bottom-right)
|
|
27
|
+
* - Accessible keyboard focus management
|
|
28
|
+
*
|
|
29
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
30
|
+
*/
|
|
31
|
+
export declare function CookieConsentBanner({ fieldPath, title, message, privacyPolicyUrl, privacyPolicyLabel, acceptLabel, declineLabel, position, storageKey, onAccept, onDecline, className, style, }: CookieConsentBannerProps): React.JSX.Element | null;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CookieConsentBanner = CookieConsentBanner;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
/**
|
|
7
|
+
* DENEB UI — Cookie & Privacy Consent Banner
|
|
8
|
+
*
|
|
9
|
+
* GDPR / ePrivacy compliant cookie banner with smooth animation,
|
|
10
|
+
* local storage persistence, and live visual customization.
|
|
11
|
+
*
|
|
12
|
+
* Features:
|
|
13
|
+
* - Persistent consent state in localStorage (`deneb_cookie_consent`)
|
|
14
|
+
* - Non-intrusive modern floating dock design
|
|
15
|
+
* - Configurable position (bottom, bottom-left, bottom-right)
|
|
16
|
+
* - Accessible keyboard focus management
|
|
17
|
+
*
|
|
18
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
19
|
+
*/
|
|
20
|
+
function CookieConsentBanner({ fieldPath = 'site.cookieConsent', title = 'We Value Your Privacy', message = 'We use cookies and similar technologies to enhance your browsing experience, serve personalized content, and analyze our traffic. By clicking "Accept All", you consent to our use of cookies.', privacyPolicyUrl = '/privacy', privacyPolicyLabel = 'Privacy Policy', acceptLabel = 'Accept All', declineLabel = 'Decline Non-Essential', position = 'bottom-right', storageKey = 'deneb_cookie_consent', onAccept, onDecline, className = '', style = {}, }) {
|
|
21
|
+
const [isVisible, setIsVisible] = (0, react_1.useState)(false);
|
|
22
|
+
(0, react_1.useEffect)(() => {
|
|
23
|
+
try {
|
|
24
|
+
const stored = localStorage.getItem(storageKey);
|
|
25
|
+
if (!stored) {
|
|
26
|
+
// Delay slightly for smooth entrance
|
|
27
|
+
const timer = setTimeout(() => setIsVisible(true), 800);
|
|
28
|
+
return () => clearTimeout(timer);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// localStorage may be blocked in some sandboxes
|
|
33
|
+
setIsVisible(true);
|
|
34
|
+
}
|
|
35
|
+
}, [storageKey]);
|
|
36
|
+
const handleAccept = () => {
|
|
37
|
+
try {
|
|
38
|
+
localStorage.setItem(storageKey, 'accepted');
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// ignore
|
|
42
|
+
}
|
|
43
|
+
setIsVisible(false);
|
|
44
|
+
if (onAccept)
|
|
45
|
+
onAccept();
|
|
46
|
+
};
|
|
47
|
+
const handleDecline = () => {
|
|
48
|
+
try {
|
|
49
|
+
localStorage.setItem(storageKey, 'declined');
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// ignore
|
|
53
|
+
}
|
|
54
|
+
setIsVisible(false);
|
|
55
|
+
if (onDecline)
|
|
56
|
+
onDecline();
|
|
57
|
+
};
|
|
58
|
+
if (!isVisible) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const getPositionClasses = () => {
|
|
62
|
+
switch (position) {
|
|
63
|
+
case 'bottom':
|
|
64
|
+
return 'bottom-0 left-0 right-0 p-4 sm:p-6';
|
|
65
|
+
case 'bottom-left':
|
|
66
|
+
return 'bottom-4 left-4 sm:bottom-6 sm:left-6 max-w-md';
|
|
67
|
+
case 'bottom-right':
|
|
68
|
+
default:
|
|
69
|
+
return 'bottom-4 right-4 sm:bottom-6 sm:right-6 max-w-md';
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
return ((0, jsx_runtime_1.jsx)("aside", { role: "region", "aria-label": "Cookie consent banner", className: `fixed z-50 transition-all duration-300 ${getPositionClasses()} ${className}`, "data-preview-field-path": fieldPath, style: style, children: (0, jsx_runtime_1.jsxs)("div", { className: "relative overflow-hidden rounded-3xl p-6 bg-white/95 backdrop-blur-md border border-slate-200/80 shadow-2xl", style: {
|
|
73
|
+
boxShadow: '0 20px 40px -15px rgba(0, 0, 0, 0.15)',
|
|
74
|
+
}, children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-start gap-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex-shrink-0 p-2.5 rounded-2xl bg-amber-50 border border-amber-100/60 text-amber-600", children: (0, jsx_runtime_1.jsx)("svg", { className: "w-6 h-6", fill: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10c0-.34-.02-.67-.06-1-.73.57-1.64.91-2.63.91-2.4 0-4.34-1.94-4.34-4.34 0-.99.34-1.9.91-2.63-.33-.04-.66-.06-1-.06-1.15 0-2.22.39-3.08 1.05-.62-.83-.92-1.89-.92-3.05 0-.4.04-.79.11-1.17C12.67 2.04 12.34 2 12 2zm-3 8a1.5 1.5 0 100 3 1.5 1.5 0 000-3zm6 4a1.5 1.5 0 100 3 1.5 1.5 0 000-3zm-4 4a1.5 1.5 0 100 3 1.5 1.5 0 000-3z" }) }) }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h4", { className: "text-base font-bold text-slate-900 leading-tight", children: title }), (0, jsx_runtime_1.jsxs)("p", { className: "mt-2 text-xs sm:text-sm text-slate-600 leading-relaxed", children: [message, ' ', privacyPolicyUrl && ((0, jsx_runtime_1.jsx)("a", { href: privacyPolicyUrl, className: "font-medium text-slate-900 underline underline-offset-2 hover:text-primary transition-colors", children: privacyPolicyLabel }))] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-5 flex flex-wrap items-center justify-end gap-3 pt-4 border-t border-slate-100", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", onClick: handleDecline, className: "px-4 py-2 rounded-xl text-xs sm:text-sm font-semibold text-slate-600 hover:text-slate-900 hover:bg-slate-100 border border-transparent transition-all", children: declineLabel }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: handleAccept, className: "px-5 py-2.5 rounded-xl text-xs sm:text-sm font-bold text-white shadow-md transition-all duration-200 active:scale-95 hover:brightness-110", style: {
|
|
75
|
+
backgroundColor: 'var(--color-primary, #0f172a)',
|
|
76
|
+
}, children: acceptLabel })] })] }) }));
|
|
77
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface ProductQuickViewItem {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
price: string | number;
|
|
6
|
+
originalPrice?: string | number;
|
|
7
|
+
currency?: string;
|
|
8
|
+
badge?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
imageUrl?: string;
|
|
11
|
+
gallery?: string[];
|
|
12
|
+
inStock?: boolean;
|
|
13
|
+
rating?: number;
|
|
14
|
+
reviewCount?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ProductQuickViewProps {
|
|
17
|
+
product: ProductQuickViewItem | null;
|
|
18
|
+
isOpen: boolean;
|
|
19
|
+
onClose: () => void;
|
|
20
|
+
onAddToCart?: (product: ProductQuickViewItem, quantity: number) => void;
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* DENEB UI — Product Quick View Modal
|
|
25
|
+
*
|
|
26
|
+
* High-converting instant lightbox inspection modal for products.
|
|
27
|
+
* Enables shoppers to inspect details and buy without leaving page flow.
|
|
28
|
+
*
|
|
29
|
+
* Features:
|
|
30
|
+
* - Image gallery thumbnail preview
|
|
31
|
+
* - Live quantity counter with bounds protection
|
|
32
|
+
* - Accessible keyboard interaction (Esc key to close)
|
|
33
|
+
* - Backdrop blur with smooth animation
|
|
34
|
+
*
|
|
35
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
36
|
+
*/
|
|
37
|
+
export declare function ProductQuickView({ product, isOpen, onClose, onAddToCart, className, }: ProductQuickViewProps): React.JSX.Element | null;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProductQuickView = ProductQuickView;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
/**
|
|
7
|
+
* DENEB UI — Product Quick View Modal
|
|
8
|
+
*
|
|
9
|
+
* High-converting instant lightbox inspection modal for products.
|
|
10
|
+
* Enables shoppers to inspect details and buy without leaving page flow.
|
|
11
|
+
*
|
|
12
|
+
* Features:
|
|
13
|
+
* - Image gallery thumbnail preview
|
|
14
|
+
* - Live quantity counter with bounds protection
|
|
15
|
+
* - Accessible keyboard interaction (Esc key to close)
|
|
16
|
+
* - Backdrop blur with smooth animation
|
|
17
|
+
*
|
|
18
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
19
|
+
*/
|
|
20
|
+
function ProductQuickView({ product, isOpen, onClose, onAddToCart, className = '', }) {
|
|
21
|
+
const [quantity, setQuantity] = (0, react_1.useState)(1);
|
|
22
|
+
const [selectedImage, setSelectedImage] = (0, react_1.useState)('');
|
|
23
|
+
(0, react_1.useEffect)(() => {
|
|
24
|
+
if (product) {
|
|
25
|
+
setQuantity(1);
|
|
26
|
+
setSelectedImage(product.imageUrl || (product.gallery && product.gallery[0]) || '');
|
|
27
|
+
}
|
|
28
|
+
}, [product]);
|
|
29
|
+
// Handle ESC key to close
|
|
30
|
+
(0, react_1.useEffect)(() => {
|
|
31
|
+
const handleKeyDown = (e) => {
|
|
32
|
+
if (e.key === 'Escape' && isOpen) {
|
|
33
|
+
onClose();
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
if (isOpen) {
|
|
37
|
+
window.addEventListener('keydown', handleKeyDown);
|
|
38
|
+
document.body.style.overflow = 'hidden';
|
|
39
|
+
}
|
|
40
|
+
return () => {
|
|
41
|
+
window.removeEventListener('keydown', handleKeyDown);
|
|
42
|
+
document.body.style.overflow = 'unset';
|
|
43
|
+
};
|
|
44
|
+
}, [isOpen, onClose]);
|
|
45
|
+
if (!isOpen || !product) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
const images = product.gallery && product.gallery.length > 0 ? product.gallery : [product.imageUrl || ''];
|
|
49
|
+
const currency = product.currency || '$';
|
|
50
|
+
const handleAddToCart = () => {
|
|
51
|
+
if (onAddToCart) {
|
|
52
|
+
onAddToCart(product, quantity);
|
|
53
|
+
}
|
|
54
|
+
onClose();
|
|
55
|
+
};
|
|
56
|
+
return ((0, jsx_runtime_1.jsx)("div", { role: "dialog", "aria-modal": "true", className: `fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6 bg-black/60 backdrop-blur-sm transition-opacity duration-200 ${className}`, onClick: (e) => {
|
|
57
|
+
if (e.target === e.currentTarget)
|
|
58
|
+
onClose();
|
|
59
|
+
}, children: (0, jsx_runtime_1.jsxs)("div", { className: "relative w-full max-w-2xl overflow-hidden rounded-3xl bg-white shadow-2xl border border-slate-100 flex flex-col md:flex-row max-h-[90vh]", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", onClick: onClose, className: "absolute top-4 right-4 z-10 p-2 text-slate-400 hover:text-slate-700 bg-white/80 hover:bg-white rounded-full shadow-sm backdrop-blur transition-colors", "aria-label": "Close modal", children: (0, jsx_runtime_1.jsx)("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "md:w-1/2 p-6 flex flex-col items-center justify-center bg-slate-50 border-b md:border-b-0 md:border-r border-slate-100", children: [(0, jsx_runtime_1.jsxs)("div", { className: "relative w-full aspect-square rounded-2xl overflow-hidden bg-white shadow-sm flex items-center justify-center", children: [product.badge && ((0, jsx_runtime_1.jsx)("span", { className: "absolute top-3 left-3 px-2.5 py-1 text-xs font-bold text-white bg-red-500 rounded-lg shadow-sm", children: product.badge })), selectedImage ? ((0, jsx_runtime_1.jsx)("img", { src: selectedImage, alt: product.title, className: "w-full h-full object-cover" })) : ((0, jsx_runtime_1.jsx)("div", { className: "text-slate-300 text-sm", children: "No image available" }))] }), images.length > 1 && ((0, jsx_runtime_1.jsx)("div", { className: "flex gap-2 mt-4 overflow-x-auto max-w-full pb-1", children: images.map((img, idx) => ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setSelectedImage(img), className: `w-12 h-12 rounded-lg overflow-hidden border-2 transition-all flex-shrink-0 ${selectedImage === img ? 'border-primary shadow-sm' : 'border-slate-200 opacity-60 hover:opacity-100'}`, children: (0, jsx_runtime_1.jsx)("img", { src: img, alt: "", className: "w-full h-full object-cover" }) }, idx))) }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "md:w-1/2 p-6 flex flex-col justify-between overflow-y-auto", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [(0, jsx_runtime_1.jsx)("span", { className: `inline-flex items-center px-2 py-0.5 rounded text-xs font-semibold ${product.inStock !== false ? 'bg-emerald-50 text-emerald-700' : 'bg-rose-50 text-rose-700'}`, children: product.inStock !== false ? 'In Stock' : 'Out of Stock' }), product.rating && ((0, jsx_runtime_1.jsxs)("span", { className: "text-xs text-amber-500 flex items-center gap-1 font-medium", children: ["\u2605 ", product.rating, " ", product.reviewCount ? `(${product.reviewCount})` : ''] }))] }), (0, jsx_runtime_1.jsx)("h3", { className: "text-xl font-bold text-slate-900 leading-tight", children: product.title }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-3 flex items-baseline gap-2", children: [(0, jsx_runtime_1.jsxs)("span", { className: "text-2xl font-black text-slate-900", children: [currency, product.price] }), product.originalPrice && ((0, jsx_runtime_1.jsxs)("span", { className: "text-sm font-semibold text-slate-400 line-through", children: [currency, product.originalPrice] }))] }), product.description && ((0, jsx_runtime_1.jsx)("p", { className: "mt-4 text-sm text-slate-600 leading-relaxed", children: product.description }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "mt-6 pt-6 border-t border-slate-100", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-sm font-medium text-slate-700", children: "Quantity" }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center rounded-xl border border-slate-200 bg-slate-50 p-1", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setQuantity((q) => Math.max(1, q - 1)), className: "w-8 h-8 flex items-center justify-center rounded-lg hover:bg-white text-slate-600 font-bold transition-colors", children: "-" }), (0, jsx_runtime_1.jsx)("span", { className: "w-10 text-center font-bold text-sm text-slate-800", children: quantity }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setQuantity((q) => q + 1), className: "w-8 h-8 flex items-center justify-center rounded-lg hover:bg-white text-slate-600 font-bold transition-colors", children: "+" })] })] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", disabled: product.inStock === false, onClick: handleAddToCart, className: "w-full py-3.5 px-4 rounded-xl font-bold text-sm text-white shadow-lg transition-all duration-200 active:scale-98 disabled:opacity-50 disabled:cursor-not-allowed hover:brightness-110 flex items-center justify-center gap-2", style: {
|
|
60
|
+
backgroundColor: 'var(--color-primary, #0f172a)',
|
|
61
|
+
boxShadow: '0 4px 14px rgba(15, 23, 42, 0.25)',
|
|
62
|
+
}, children: [(0, jsx_runtime_1.jsx)("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z" }) }), "Add to Cart"] })] })] })] }) }));
|
|
63
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface StickyMobileBarAction {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
href: string;
|
|
6
|
+
icon?: 'phone' | 'whatsapp' | 'cart' | 'message' | 'shop' | 'custom';
|
|
7
|
+
customIcon?: React.ReactNode;
|
|
8
|
+
isPrimary?: boolean;
|
|
9
|
+
onClick?: () => void;
|
|
10
|
+
badge?: string | number;
|
|
11
|
+
}
|
|
12
|
+
export interface StickyMobileBarProps {
|
|
13
|
+
fieldPath?: string;
|
|
14
|
+
actions?: StickyMobileBarAction[];
|
|
15
|
+
showOnDesktop?: boolean;
|
|
16
|
+
className?: string;
|
|
17
|
+
style?: React.CSSProperties;
|
|
18
|
+
phone?: string;
|
|
19
|
+
whatsapp?: string;
|
|
20
|
+
primaryActionLabel?: string;
|
|
21
|
+
primaryActionHref?: string;
|
|
22
|
+
onPrimaryAction?: () => void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* DENEB UI — Sticky Mobile Commerce Action Bar
|
|
26
|
+
*
|
|
27
|
+
* High-converting persistent bottom action dock for mobile shoppers.
|
|
28
|
+
* Provides instant 1-tap Call, WhatsApp, and Buy/Checkout access.
|
|
29
|
+
*
|
|
30
|
+
* Features:
|
|
31
|
+
* - Automatically pulls store phone & WhatsApp from SiteData
|
|
32
|
+
* - Responsive: docks fixed at bottom on mobile (lg:hidden by default)
|
|
33
|
+
* - Ultra-crisp inline SVG icons (zero external icon library dependencies)
|
|
34
|
+
* - Glassmorphism backdrop blur with high contrast touch targets
|
|
35
|
+
*
|
|
36
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
37
|
+
*/
|
|
38
|
+
export declare function StickyMobileBar({ fieldPath, actions, showOnDesktop, className, style, phone: propPhone, whatsapp: propWhatsapp, primaryActionLabel, primaryActionHref, onPrimaryAction, }: StickyMobileBarProps): React.JSX.Element;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StickyMobileBar = StickyMobileBar;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const SiteDataProvider_1 = require("./SiteDataProvider");
|
|
6
|
+
/**
|
|
7
|
+
* DENEB UI — Sticky Mobile Commerce Action Bar
|
|
8
|
+
*
|
|
9
|
+
* High-converting persistent bottom action dock for mobile shoppers.
|
|
10
|
+
* Provides instant 1-tap Call, WhatsApp, and Buy/Checkout access.
|
|
11
|
+
*
|
|
12
|
+
* Features:
|
|
13
|
+
* - Automatically pulls store phone & WhatsApp from SiteData
|
|
14
|
+
* - Responsive: docks fixed at bottom on mobile (lg:hidden by default)
|
|
15
|
+
* - Ultra-crisp inline SVG icons (zero external icon library dependencies)
|
|
16
|
+
* - Glassmorphism backdrop blur with high contrast touch targets
|
|
17
|
+
*
|
|
18
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
19
|
+
*/
|
|
20
|
+
function StickyMobileBar({ fieldPath, actions, showOnDesktop = false, className = '', style = {}, phone: propPhone, whatsapp: propWhatsapp, primaryActionLabel = 'Shop Now', primaryActionHref = '#products', onPrimaryAction, }) {
|
|
21
|
+
const { siteData } = (0, SiteDataProvider_1.useSiteData)();
|
|
22
|
+
// Resolve merchant contacts from siteData if not explicitly provided
|
|
23
|
+
const merchant = siteData?.merchant || {};
|
|
24
|
+
const phone = propPhone || merchant.phone || merchant.supportPhone || '';
|
|
25
|
+
const whatsapp = propWhatsapp || merchant.whatsapp || merchant.phone || '';
|
|
26
|
+
// Default action buttons if custom actions array is not provided
|
|
27
|
+
const resolvedActions = actions || [
|
|
28
|
+
...(phone
|
|
29
|
+
? [
|
|
30
|
+
{
|
|
31
|
+
id: 'call',
|
|
32
|
+
label: 'Call Us',
|
|
33
|
+
href: `tel:${phone.replace(/[^0-9+]/g, '')}`,
|
|
34
|
+
icon: 'phone',
|
|
35
|
+
},
|
|
36
|
+
]
|
|
37
|
+
: []),
|
|
38
|
+
...(whatsapp
|
|
39
|
+
? [
|
|
40
|
+
{
|
|
41
|
+
id: 'whatsapp',
|
|
42
|
+
label: 'WhatsApp',
|
|
43
|
+
href: `https://wa.me/${whatsapp.replace(/[^0-9]/g, '')}?text=${encodeURIComponent('Hello! I would like to inquire about your products.')}`,
|
|
44
|
+
icon: 'whatsapp',
|
|
45
|
+
},
|
|
46
|
+
]
|
|
47
|
+
: []),
|
|
48
|
+
{
|
|
49
|
+
id: 'primary',
|
|
50
|
+
label: primaryActionLabel,
|
|
51
|
+
href: primaryActionHref,
|
|
52
|
+
isPrimary: true,
|
|
53
|
+
onClick: onPrimaryAction,
|
|
54
|
+
icon: 'cart',
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
const renderIcon = (icon, custom) => {
|
|
58
|
+
if (custom)
|
|
59
|
+
return custom;
|
|
60
|
+
switch (icon) {
|
|
61
|
+
case 'phone':
|
|
62
|
+
return ((0, jsx_runtime_1.jsx)("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z" }) }));
|
|
63
|
+
case 'whatsapp':
|
|
64
|
+
return ((0, jsx_runtime_1.jsx)("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { d: "M12.031 6.172c-3.181 0-5.767 2.586-5.768 5.766-.001 1.298.38 2.27 1.019 3.287l-.711 2.598 2.669-.699c.969.54 1.772.82 2.791.82 3.183 0 5.769-2.587 5.769-5.767.001-3.182-2.584-5.765-5.769-5.765zm0 10.375c-.947 0-1.874-.255-2.684-.736l-.192-.114-1.992.522.532-1.942-.125-.199a4.618 4.618 0 01-.707-2.473c.001-2.548 2.073-4.62 4.622-4.62 2.549 0 4.622 2.072 4.622 4.62 0 2.549-2.073 4.62-4.622 4.62z" }) }));
|
|
65
|
+
case 'cart':
|
|
66
|
+
return ((0, jsx_runtime_1.jsx)("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z" }) }));
|
|
67
|
+
case 'shop':
|
|
68
|
+
return ((0, jsx_runtime_1.jsx)("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" }) }));
|
|
69
|
+
default:
|
|
70
|
+
return ((0, jsx_runtime_1.jsx)("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 10V3L4 14h7v7l9-11h-7z" }) }));
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
return ((0, jsx_runtime_1.jsx)("aside", { className: `fixed bottom-0 left-0 right-0 z-50 p-2 sm:p-3 transition-transform duration-300 ${showOnDesktop ? 'block' : 'lg:hidden'} ${className}`, "data-preview-field-path": fieldPath, style: {
|
|
74
|
+
backgroundColor: 'rgba(255, 255, 255, 0.92)',
|
|
75
|
+
backdropFilter: 'blur(12px)',
|
|
76
|
+
WebkitBackdropFilter: 'blur(12px)',
|
|
77
|
+
borderTop: '1px solid rgba(226, 232, 240, 0.8)',
|
|
78
|
+
boxShadow: '0 -4px 20px rgba(0, 0, 0, 0.08)',
|
|
79
|
+
...style,
|
|
80
|
+
}, children: (0, jsx_runtime_1.jsx)("div", { className: "max-w-md mx-auto flex items-center justify-between gap-2", children: resolvedActions.map((action) => {
|
|
81
|
+
const isPrimary = action.isPrimary;
|
|
82
|
+
return ((0, jsx_runtime_1.jsxs)("a", { href: action.href, onClick: action.onClick, className: `relative flex items-center justify-center gap-2 rounded-xl text-sm font-semibold transition-all duration-200 active:scale-95 ${isPrimary
|
|
83
|
+
? 'flex-1 py-3 px-4 text-white shadow-md hover:brightness-110'
|
|
84
|
+
: 'py-2.5 px-3 text-slate-700 bg-slate-100 hover:bg-slate-200 border border-slate-200/60'}`, style: isPrimary
|
|
85
|
+
? {
|
|
86
|
+
backgroundColor: 'var(--color-primary, #0f172a)',
|
|
87
|
+
boxShadow: '0 4px 12px rgba(15, 23, 42, 0.25)',
|
|
88
|
+
}
|
|
89
|
+
: {}, children: [action.badge && ((0, jsx_runtime_1.jsx)("span", { className: "absolute -top-1.5 -right-1.5 px-1.5 py-0.5 text-[10px] font-bold text-white bg-red-500 rounded-full", children: action.badge })), renderIcon(action.icon, action.customIcon), (0, jsx_runtime_1.jsx)("span", { className: "truncate", children: action.label })] }, action.id));
|
|
90
|
+
}) }) }));
|
|
91
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface TrustBadgeItem {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
description: string;
|
|
6
|
+
icon?: 'shipping' | 'security' | 'guarantee' | 'support' | 'eco' | 'custom';
|
|
7
|
+
customIcon?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export interface TrustBadgesProps {
|
|
10
|
+
fieldPath?: string;
|
|
11
|
+
title?: string;
|
|
12
|
+
subtitle?: string;
|
|
13
|
+
badges?: TrustBadgeItem[];
|
|
14
|
+
variant?: 'grid' | 'inline' | 'cards';
|
|
15
|
+
className?: string;
|
|
16
|
+
style?: React.CSSProperties;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* DENEB UI — Trust & Guarantee Badges
|
|
20
|
+
*
|
|
21
|
+
* High-converting proof component for e-commerce checkouts and product pages.
|
|
22
|
+
* Increases conversion rates by answering buyer objections proactively.
|
|
23
|
+
*
|
|
24
|
+
* Features:
|
|
25
|
+
* - 4 built-in e-commerce assurance icons (Shipping, Security, Guarantee, Support)
|
|
26
|
+
* - 3 modern layout variants: 'grid', 'inline', and 'cards'
|
|
27
|
+
* - Responsive mobile to desktop grid layout
|
|
28
|
+
*
|
|
29
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
30
|
+
*/
|
|
31
|
+
export declare function TrustBadges({ fieldPath, title, subtitle, badges, variant, className, style, }: TrustBadgesProps): React.JSX.Element;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TrustBadges = TrustBadges;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const DEFAULT_BADGES = [
|
|
6
|
+
{
|
|
7
|
+
id: 'shipping',
|
|
8
|
+
title: 'Fast & Free Delivery',
|
|
9
|
+
description: 'Complimentary shipping on orders over $50 with real-time tracking.',
|
|
10
|
+
icon: 'shipping',
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
id: 'security',
|
|
14
|
+
title: '100% Secure Checkout',
|
|
15
|
+
description: 'Bank-grade 256-bit SSL encryption. We protect your payment details.',
|
|
16
|
+
icon: 'security',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: 'guarantee',
|
|
20
|
+
title: '30-Day Money Back',
|
|
21
|
+
description: 'Hassle-free 30-day return policy. Shop with complete peace of mind.',
|
|
22
|
+
icon: 'guarantee',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'support',
|
|
26
|
+
title: '24/7 Expert Support',
|
|
27
|
+
description: 'Friendly, responsive customer care via Live Chat, WhatsApp, & Phone.',
|
|
28
|
+
icon: 'support',
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* DENEB UI — Trust & Guarantee Badges
|
|
33
|
+
*
|
|
34
|
+
* High-converting proof component for e-commerce checkouts and product pages.
|
|
35
|
+
* Increases conversion rates by answering buyer objections proactively.
|
|
36
|
+
*
|
|
37
|
+
* Features:
|
|
38
|
+
* - 4 built-in e-commerce assurance icons (Shipping, Security, Guarantee, Support)
|
|
39
|
+
* - 3 modern layout variants: 'grid', 'inline', and 'cards'
|
|
40
|
+
* - Responsive mobile to desktop grid layout
|
|
41
|
+
*
|
|
42
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
43
|
+
*/
|
|
44
|
+
function TrustBadges({ fieldPath = 'content.trustBadges', title, subtitle, badges = DEFAULT_BADGES, variant = 'cards', className = '', style = {}, }) {
|
|
45
|
+
const renderIcon = (badge) => {
|
|
46
|
+
if (badge.customIcon)
|
|
47
|
+
return badge.customIcon;
|
|
48
|
+
switch (badge.icon) {
|
|
49
|
+
case 'shipping':
|
|
50
|
+
return ((0, jsx_runtime_1.jsx)("svg", { className: "w-6 h-6 text-emerald-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 16V6a1 1 0 00-1-1H4a1 1 0 00-1 1v10a1 1 0 001 1h1m8-1a1 1 0 01-1 1H9m4-1V8a1 1 0 011-1h2.586a1 1 0 01.707.293l3.414 3.414a1 1 0 01.293.707V16a1 1 0 01-1 1h-1m-6-1a1 1 0 001 1h1M5 17a2 2 0 104 0m-4 0a2 2 0 114 0m6 0a2 2 0 104 0m-4 0a2 2 0 114 0" }) }));
|
|
51
|
+
case 'security':
|
|
52
|
+
return ((0, jsx_runtime_1.jsx)("svg", { className: "w-6 h-6 text-indigo-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" }) }));
|
|
53
|
+
case 'guarantee':
|
|
54
|
+
return ((0, jsx_runtime_1.jsx)("svg", { className: "w-6 h-6 text-amber-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z" }) }));
|
|
55
|
+
case 'support':
|
|
56
|
+
return ((0, jsx_runtime_1.jsx)("svg", { className: "w-6 h-6 text-sky-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z" }) }));
|
|
57
|
+
default:
|
|
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
|
+
}
|
|
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", children: title })), subtitle && ((0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-sm text-slate-600 max-w-xl mx-auto", children: subtitle }))] })), (0, jsx_runtime_1.jsx)("div", { className: variant === 'inline'
|
|
62
|
+
? 'flex flex-wrap items-center justify-around gap-6'
|
|
63
|
+
: '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
|
+
? 'bg-white border border-slate-200/80 shadow-sm hover:shadow-md'
|
|
65
|
+
: 'bg-transparent'}`, children: [(0, jsx_runtime_1.jsx)("div", { className: "flex-shrink-0 p-2.5 rounded-xl bg-slate-50 border border-slate-100 flex items-center justify-center", children: renderIcon(badge) }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h4", { className: "text-sm font-semibold text-slate-900 leading-tight", children: badge.title }), (0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-xs text-slate-500 leading-relaxed", children: badge.description })] })] }, badge.id))) })] }));
|
|
66
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -21,6 +21,10 @@ export * from './EditableHero';
|
|
|
21
21
|
export * from './EditableDialog';
|
|
22
22
|
export * from './EditableAnnouncementBar';
|
|
23
23
|
export * from './EditableCategoryPills';
|
|
24
|
+
export * from './StickyMobileBar';
|
|
25
|
+
export * from './TrustBadges';
|
|
26
|
+
export * from './ProductQuickView';
|
|
27
|
+
export * from './CookieConsentBanner';
|
|
24
28
|
export * from './ThemeStyles';
|
|
25
29
|
export * from './SiteDataProvider';
|
|
26
30
|
export * from './utils';
|
|
@@ -53,6 +57,10 @@ export { EditableFooter as Footer } from './EditableFooter';
|
|
|
53
57
|
export { EditableHeroCentered as Hero, EditableHeroSplit as HeroSplit } from './EditableHero';
|
|
54
58
|
export { EditableAnnouncementBar as AnnouncementBar } from './EditableAnnouncementBar';
|
|
55
59
|
export { EditableCategoryPills as CategoryPills } from './EditableCategoryPills';
|
|
60
|
+
export { StickyMobileBar } from './StickyMobileBar';
|
|
61
|
+
export { TrustBadges } from './TrustBadges';
|
|
62
|
+
export { ProductQuickView } from './ProductQuickView';
|
|
63
|
+
export { CookieConsentBanner } from './CookieConsentBanner';
|
|
56
64
|
export { FloatingContactWidget } from './contact/FloatingContactWidget';
|
|
57
65
|
/**
|
|
58
66
|
* DENEB UI Framework Metadata
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
18
18
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
19
|
};
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.CEEG_AUTHOR = exports.CEEG_FRAMEWORK_VERSION = exports.CEEG_FRAMEWORK_NAME = exports.DENEB_AUTHOR = exports.DENEB_FRAMEWORK_VERSION = exports.DENEB_FRAMEWORK_NAME = exports.FloatingContactWidget = exports.CategoryPills = exports.AnnouncementBar = exports.HeroSplit = exports.Hero = exports.Footer = exports.Header = exports.Navbar = exports.ContactForm = exports.FAQ = exports.Accordion = exports.TestimonialCard = exports.PricingCard = exports.ServiceCard = exports.ProductCard = exports.List = exports.Box = exports.Section = exports.Grid = exports.Image = exports.Quote = exports.Badge = exports.Paragraph = exports.Heading = exports.Text = exports.Dialog = exports.Card = exports.Button = void 0;
|
|
21
|
+
exports.CEEG_AUTHOR = exports.CEEG_FRAMEWORK_VERSION = exports.CEEG_FRAMEWORK_NAME = exports.DENEB_AUTHOR = exports.DENEB_FRAMEWORK_VERSION = exports.DENEB_FRAMEWORK_NAME = exports.FloatingContactWidget = exports.CookieConsentBanner = exports.ProductQuickView = exports.TrustBadges = exports.StickyMobileBar = exports.CategoryPills = exports.AnnouncementBar = exports.HeroSplit = exports.Hero = exports.Footer = exports.Header = exports.Navbar = exports.ContactForm = exports.FAQ = exports.Accordion = exports.TestimonialCard = exports.PricingCard = exports.ServiceCard = exports.ProductCard = exports.List = exports.Box = exports.Section = exports.Grid = exports.Image = exports.Quote = exports.Badge = exports.Paragraph = exports.Heading = exports.Text = exports.Dialog = exports.Card = exports.Button = void 0;
|
|
22
22
|
__exportStar(require("./EditableText"), exports);
|
|
23
23
|
__exportStar(require("./EditableImage"), exports);
|
|
24
24
|
__exportStar(require("./EditableList"), exports);
|
|
@@ -38,6 +38,10 @@ __exportStar(require("./EditableHero"), exports);
|
|
|
38
38
|
__exportStar(require("./EditableDialog"), exports);
|
|
39
39
|
__exportStar(require("./EditableAnnouncementBar"), exports);
|
|
40
40
|
__exportStar(require("./EditableCategoryPills"), exports);
|
|
41
|
+
__exportStar(require("./StickyMobileBar"), exports);
|
|
42
|
+
__exportStar(require("./TrustBadges"), exports);
|
|
43
|
+
__exportStar(require("./ProductQuickView"), exports);
|
|
44
|
+
__exportStar(require("./CookieConsentBanner"), exports);
|
|
41
45
|
__exportStar(require("./ThemeStyles"), exports);
|
|
42
46
|
__exportStar(require("./SiteDataProvider"), exports);
|
|
43
47
|
// Smart template components & actions
|
|
@@ -99,6 +103,14 @@ var EditableAnnouncementBar_1 = require("./EditableAnnouncementBar");
|
|
|
99
103
|
Object.defineProperty(exports, "AnnouncementBar", { enumerable: true, get: function () { return EditableAnnouncementBar_1.EditableAnnouncementBar; } });
|
|
100
104
|
var EditableCategoryPills_1 = require("./EditableCategoryPills");
|
|
101
105
|
Object.defineProperty(exports, "CategoryPills", { enumerable: true, get: function () { return EditableCategoryPills_1.EditableCategoryPills; } });
|
|
106
|
+
var StickyMobileBar_1 = require("./StickyMobileBar");
|
|
107
|
+
Object.defineProperty(exports, "StickyMobileBar", { enumerable: true, get: function () { return StickyMobileBar_1.StickyMobileBar; } });
|
|
108
|
+
var TrustBadges_1 = require("./TrustBadges");
|
|
109
|
+
Object.defineProperty(exports, "TrustBadges", { enumerable: true, get: function () { return TrustBadges_1.TrustBadges; } });
|
|
110
|
+
var ProductQuickView_1 = require("./ProductQuickView");
|
|
111
|
+
Object.defineProperty(exports, "ProductQuickView", { enumerable: true, get: function () { return ProductQuickView_1.ProductQuickView; } });
|
|
112
|
+
var CookieConsentBanner_1 = require("./CookieConsentBanner");
|
|
113
|
+
Object.defineProperty(exports, "CookieConsentBanner", { enumerable: true, get: function () { return CookieConsentBanner_1.CookieConsentBanner; } });
|
|
102
114
|
var FloatingContactWidget_1 = require("./contact/FloatingContactWidget");
|
|
103
115
|
Object.defineProperty(exports, "FloatingContactWidget", { enumerable: true, get: function () { return FloatingContactWidget_1.FloatingContactWidget; } });
|
|
104
116
|
/**
|
package/package.json
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deneb-ui/ui",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.8",
|
|
4
4
|
"description": "DENEB UI - The premier visual-first React component framework for the modern web. Created by Chamika Gayashan & Induranga Kawishwara.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"publishConfig": {
|
|
8
8
|
"access": "public"
|
|
9
9
|
},
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/deneb-ui/core.git",
|
|
13
|
+
"directory": "packages/deneb-ui"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/deneb-ui/core#readme",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/deneb-ui/core/issues"
|
|
18
|
+
},
|
|
10
19
|
"files": [
|
|
11
20
|
"dist",
|
|
12
21
|
"README.md"
|