@deneb-ui/ui 2.0.0 → 2.0.3
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/EditableAnnouncementBar.d.ts +27 -0
- package/dist/EditableAnnouncementBar.js +92 -0
- package/dist/EditableCategoryPills.d.ts +21 -0
- package/dist/EditableCategoryPills.js +113 -0
- package/dist/EditableFooter.d.ts +1 -1
- package/dist/EditableFooter.js +1 -1
- package/dist/EditableNavbar.d.ts +1 -1
- package/dist/EditableNavbar.js +1 -1
- package/dist/contact/FloatingContactWidget.d.ts +21 -0
- package/dist/contact/FloatingContactWidget.js +68 -0
- package/dist/contact/index.d.ts +1 -0
- package/dist/contact/index.js +1 -0
- package/dist/index.d.ts +9 -4
- package/dist/index.js +12 -4
- package/dist/utils/urls.d.ts +1 -1
- package/dist/utils/urls.js +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
> **DENEB UI — Build beautiful interfaces, effortlessly.**
|
|
6
6
|
> The premier visual-first React component ecosystem.
|
|
7
|
-
> Created by **Chamika Gayashan
|
|
7
|
+
> Created by **Chamika Gayashan & Induranga Kawishwara**.
|
|
8
8
|
|
|
9
9
|
[](https://github.com/chamikathereal)
|
|
10
10
|
[](https://opensource.org/licenses/MIT)
|
|
@@ -178,5 +178,5 @@ export default function HomePage() {
|
|
|
178
178
|
|
|
179
179
|
## Author & Credits
|
|
180
180
|
|
|
181
|
-
Created and architected by **Chamika Gayashan
|
|
181
|
+
Created and architected by **Chamika Gayashan & Induranga Kawishwara**.
|
|
182
182
|
Built for the global React and storefront developer ecosystem.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface EditableAnnouncementBarProps {
|
|
3
|
+
fieldPath?: string;
|
|
4
|
+
defaultText?: string;
|
|
5
|
+
defaultBadge?: string;
|
|
6
|
+
defaultLinkText?: string;
|
|
7
|
+
defaultLinkUrl?: string;
|
|
8
|
+
dismissible?: boolean;
|
|
9
|
+
className?: string;
|
|
10
|
+
style?: React.CSSProperties;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* DENEB UI — Visual-First Announcement Bar
|
|
14
|
+
*
|
|
15
|
+
* High-converting top promotional ribbon for store announcements,
|
|
16
|
+
* coupon codes, and limited-time offers.
|
|
17
|
+
*
|
|
18
|
+
* Features:
|
|
19
|
+
* - Live bidirectional Fivora editing bindings (`data-preview-field-path`)
|
|
20
|
+
* - Auto-resolves from site-data.json (`site.announcement` or custom path)
|
|
21
|
+
* - Dismissible button with clean client animation
|
|
22
|
+
* - Tailwind CSS + resilient inline styling fallbacks
|
|
23
|
+
*
|
|
24
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
25
|
+
*/
|
|
26
|
+
export declare function EditableAnnouncementBar({ fieldPath, defaultText, defaultBadge, defaultLinkText, defaultLinkUrl, dismissible, className, style, }: EditableAnnouncementBarProps): React.JSX.Element | null;
|
|
27
|
+
export declare const AnnouncementBar: typeof EditableAnnouncementBar;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnnouncementBar = void 0;
|
|
4
|
+
exports.EditableAnnouncementBar = EditableAnnouncementBar;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const SiteDataProvider_1 = require("./SiteDataProvider");
|
|
8
|
+
/**
|
|
9
|
+
* DENEB UI — Visual-First Announcement Bar
|
|
10
|
+
*
|
|
11
|
+
* High-converting top promotional ribbon for store announcements,
|
|
12
|
+
* coupon codes, and limited-time offers.
|
|
13
|
+
*
|
|
14
|
+
* Features:
|
|
15
|
+
* - Live bidirectional Fivora editing bindings (`data-preview-field-path`)
|
|
16
|
+
* - Auto-resolves from site-data.json (`site.announcement` or custom path)
|
|
17
|
+
* - Dismissible button with clean client animation
|
|
18
|
+
* - Tailwind CSS + resilient inline styling fallbacks
|
|
19
|
+
*
|
|
20
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
21
|
+
*/
|
|
22
|
+
function EditableAnnouncementBar({ fieldPath = 'site.announcement', defaultText = 'Free worldwide shipping on all orders over $50 — Use code: DENEB10', defaultBadge = 'PROMO', defaultLinkText, defaultLinkUrl, dismissible = true, className = '', style = {}, }) {
|
|
23
|
+
const { siteData } = (0, SiteDataProvider_1.useSiteData)();
|
|
24
|
+
const [isDismissed, setIsDismissed] = (0, react_1.useState)(false);
|
|
25
|
+
// Resolve dynamic values from siteData if present
|
|
26
|
+
const announcementData = siteData?.site?.announcement;
|
|
27
|
+
const isEnabled = announcementData?.enabled !== false;
|
|
28
|
+
const text = announcementData?.text || defaultText;
|
|
29
|
+
const badge = announcementData?.badge || defaultBadge;
|
|
30
|
+
const linkText = announcementData?.linkText || defaultLinkText;
|
|
31
|
+
const linkUrl = announcementData?.linkUrl || defaultLinkUrl;
|
|
32
|
+
if (isDismissed || !isEnabled) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const containerStyle = {
|
|
36
|
+
position: 'relative',
|
|
37
|
+
zIndex: 40,
|
|
38
|
+
backgroundColor: 'var(--color-primary, #0f172a)',
|
|
39
|
+
color: '#ffffff',
|
|
40
|
+
fontSize: '0.8125rem',
|
|
41
|
+
lineHeight: '1.25rem',
|
|
42
|
+
fontWeight: 500,
|
|
43
|
+
padding: '0.5rem 1rem',
|
|
44
|
+
display: 'flex',
|
|
45
|
+
alignItems: 'center',
|
|
46
|
+
justifyContent: 'center',
|
|
47
|
+
textAlign: 'center',
|
|
48
|
+
transition: 'all 0.2s ease',
|
|
49
|
+
...style,
|
|
50
|
+
};
|
|
51
|
+
const badgeStyle = {
|
|
52
|
+
backgroundColor: 'rgba(255, 255, 255, 0.2)',
|
|
53
|
+
color: '#ffffff',
|
|
54
|
+
padding: '0.125rem 0.5rem',
|
|
55
|
+
borderRadius: '9999px',
|
|
56
|
+
fontSize: '0.6875rem',
|
|
57
|
+
fontWeight: 700,
|
|
58
|
+
letterSpacing: '0.05em',
|
|
59
|
+
textTransform: 'uppercase',
|
|
60
|
+
marginRight: '0.5rem',
|
|
61
|
+
display: 'inline-flex',
|
|
62
|
+
alignItems: 'center',
|
|
63
|
+
};
|
|
64
|
+
const linkStyle = {
|
|
65
|
+
marginLeft: '0.5rem',
|
|
66
|
+
textDecoration: 'underline',
|
|
67
|
+
fontWeight: 600,
|
|
68
|
+
color: '#ffffff',
|
|
69
|
+
display: 'inline-flex',
|
|
70
|
+
alignItems: 'center',
|
|
71
|
+
};
|
|
72
|
+
const closeButtonStyle = {
|
|
73
|
+
position: 'absolute',
|
|
74
|
+
right: '0.75rem',
|
|
75
|
+
top: '50%',
|
|
76
|
+
transform: 'translateY(-50%)',
|
|
77
|
+
background: 'none',
|
|
78
|
+
border: 'none',
|
|
79
|
+
color: 'rgba(255, 255, 255, 0.7)',
|
|
80
|
+
cursor: 'pointer',
|
|
81
|
+
padding: '0.25rem',
|
|
82
|
+
display: 'flex',
|
|
83
|
+
alignItems: 'center',
|
|
84
|
+
justifyContent: 'center',
|
|
85
|
+
borderRadius: '0.25rem',
|
|
86
|
+
transition: 'color 0.15s ease',
|
|
87
|
+
};
|
|
88
|
+
const hasDynamicField = Boolean(fieldPath && siteData?.site?.announcement);
|
|
89
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `deneb-announcement-bar relative z-40 bg-slate-900 text-white text-xs md:text-sm font-medium px-4 py-2 flex items-center justify-center text-center ${className}`, style: containerStyle, children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-center flex-wrap gap-1.5 max-w-7xl mx-auto pr-6", children: [badge && ((0, jsx_runtime_1.jsx)("span", { className: "deneb-announcement-badge bg-white/20 text-white px-2 py-0.5 rounded-full text-[10px] font-bold tracking-wider uppercase inline-flex items-center", style: badgeStyle, ...(hasDynamicField ? { 'data-preview-field-path': `${fieldPath}.badge` } : { 'data-preview-static': 'announcement-badge' }), children: badge })), (0, jsx_runtime_1.jsx)("span", { className: "deneb-announcement-text", ...(hasDynamicField ? { 'data-preview-field-path': `${fieldPath}.text` } : { 'data-preview-static': 'announcement-text' }), children: text }), linkText && linkUrl && ((0, jsx_runtime_1.jsxs)("a", { href: linkUrl, className: "deneb-announcement-link underline font-semibold text-white hover:opacity-90 transition-opacity ml-1 inline-flex items-center gap-1", style: linkStyle, ...(hasDynamicField ? { 'data-preview-field-path': `${fieldPath}.linkText` } : { 'data-preview-static': 'announcement-link' }), children: [linkText, " \u2192"] }))] }), dismissible && ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setIsDismissed(true), style: closeButtonStyle, "aria-label": "Dismiss announcement", className: "hover:text-white transition-colors", "data-preview-static": "announcement-dismiss", children: (0, jsx_runtime_1.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: [(0, jsx_runtime_1.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), (0, jsx_runtime_1.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] }) }))] }));
|
|
90
|
+
}
|
|
91
|
+
// Canonical alias
|
|
92
|
+
exports.AnnouncementBar = EditableAnnouncementBar;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface EditableCategoryPillsProps {
|
|
3
|
+
categories?: string[];
|
|
4
|
+
fieldPath?: string;
|
|
5
|
+
selectedCategory?: string;
|
|
6
|
+
onSelectCategory?: (category: string) => void;
|
|
7
|
+
allLabel?: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
style?: React.CSSProperties;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* DENEB UI — Category Pills Filter Bar
|
|
13
|
+
*
|
|
14
|
+
* High-converting horizontal filter ribbon for catalog and shop pages.
|
|
15
|
+
* Supports live active tab switching, smooth horizontal scrolling,
|
|
16
|
+
* and visual editing annotations.
|
|
17
|
+
*
|
|
18
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
19
|
+
*/
|
|
20
|
+
export declare function EditableCategoryPills({ categories, fieldPath, selectedCategory: controlledSelected, onSelectCategory, allLabel, className, style, }: EditableCategoryPillsProps): React.JSX.Element;
|
|
21
|
+
export declare const CategoryPills: typeof EditableCategoryPills;
|
|
@@ -0,0 +1,113 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.CategoryPills = void 0;
|
|
37
|
+
exports.EditableCategoryPills = EditableCategoryPills;
|
|
38
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
39
|
+
const react_1 = __importStar(require("react"));
|
|
40
|
+
const SiteDataProvider_1 = require("./SiteDataProvider");
|
|
41
|
+
const DEFAULT_CATEGORIES = ['All', 'Featured', 'New Arrivals', 'Best Sellers', 'Sale'];
|
|
42
|
+
/**
|
|
43
|
+
* DENEB UI — Category Pills Filter Bar
|
|
44
|
+
*
|
|
45
|
+
* High-converting horizontal filter ribbon for catalog and shop pages.
|
|
46
|
+
* Supports live active tab switching, smooth horizontal scrolling,
|
|
47
|
+
* and visual editing annotations.
|
|
48
|
+
*
|
|
49
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
50
|
+
*/
|
|
51
|
+
function EditableCategoryPills({ categories, fieldPath = 'categories', selectedCategory: controlledSelected, onSelectCategory, allLabel = 'All', className = '', style = {}, }) {
|
|
52
|
+
const { siteData } = (0, SiteDataProvider_1.useSiteData)();
|
|
53
|
+
const [internalSelected, setInternalSelected] = (0, react_1.useState)(allLabel);
|
|
54
|
+
const activeCategory = controlledSelected !== undefined ? controlledSelected : internalSelected;
|
|
55
|
+
// Resolve list of categories
|
|
56
|
+
const resolvedCategories = react_1.default.useMemo(() => {
|
|
57
|
+
if (categories && categories.length > 0) {
|
|
58
|
+
return categories.includes(allLabel) ? categories : [allLabel, ...categories];
|
|
59
|
+
}
|
|
60
|
+
const rawCategories = siteData?.categories;
|
|
61
|
+
if (Array.isArray(rawCategories) && rawCategories.length > 0) {
|
|
62
|
+
const cats = rawCategories.map((c) => (typeof c === 'string' ? c : c.name || String(c)));
|
|
63
|
+
return cats.includes(allLabel) ? cats : [allLabel, ...cats];
|
|
64
|
+
}
|
|
65
|
+
// Infer categories from products array if present
|
|
66
|
+
const rawProducts = siteData?.products;
|
|
67
|
+
if (Array.isArray(rawProducts) && rawProducts.length > 0) {
|
|
68
|
+
const inferred = Array.from(new Set(rawProducts.map((p) => p.category).filter(Boolean)));
|
|
69
|
+
if (inferred.length > 0) {
|
|
70
|
+
return [allLabel, ...inferred];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return DEFAULT_CATEGORIES;
|
|
74
|
+
}, [categories, siteData, allLabel]);
|
|
75
|
+
const handleSelect = (category) => {
|
|
76
|
+
if (controlledSelected === undefined) {
|
|
77
|
+
setInternalSelected(category);
|
|
78
|
+
}
|
|
79
|
+
if (onSelectCategory) {
|
|
80
|
+
onSelectCategory(category);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
return ((0, jsx_runtime_1.jsx)("nav", { className: `deneb-category-pills flex items-center gap-2 overflow-x-auto py-2 no-scrollbar ${className}`, style: {
|
|
84
|
+
display: 'flex',
|
|
85
|
+
alignItems: 'center',
|
|
86
|
+
gap: '0.5rem',
|
|
87
|
+
overflowX: 'auto',
|
|
88
|
+
paddingTop: '0.5rem',
|
|
89
|
+
paddingBottom: '0.5rem',
|
|
90
|
+
scrollbarWidth: 'none',
|
|
91
|
+
msOverflowStyle: 'none',
|
|
92
|
+
...style,
|
|
93
|
+
}, "data-preview-field-path": fieldPath, "aria-label": "Product categories", children: resolvedCategories.map((cat, idx) => {
|
|
94
|
+
const isSelected = activeCategory.toLowerCase() === cat.toLowerCase();
|
|
95
|
+
return ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => handleSelect(cat), className: `deneb-pill px-4 py-2 rounded-full text-xs md:text-sm font-semibold whitespace-nowrap transition-all duration-200 border ${isSelected
|
|
96
|
+
? 'bg-slate-900 text-white border-slate-900 shadow-sm scale-105'
|
|
97
|
+
: 'bg-white text-slate-600 border-slate-200 hover:border-slate-300 hover:text-slate-900 hover:bg-slate-50'}`, style: {
|
|
98
|
+
padding: '0.5rem 1rem',
|
|
99
|
+
borderRadius: '9999px',
|
|
100
|
+
fontSize: '0.8125rem',
|
|
101
|
+
fontWeight: 600,
|
|
102
|
+
whiteSpace: 'nowrap',
|
|
103
|
+
cursor: 'pointer',
|
|
104
|
+
transition: 'all 0.2s ease',
|
|
105
|
+
border: isSelected ? '1px solid var(--color-primary, #0f172a)' : '1px solid #e2e8f0',
|
|
106
|
+
backgroundColor: isSelected ? 'var(--color-primary, #0f172a)' : '#ffffff',
|
|
107
|
+
color: isSelected ? '#ffffff' : '#475569',
|
|
108
|
+
boxShadow: isSelected ? '0 1px 3px rgba(0,0,0,0.1)' : 'none',
|
|
109
|
+
}, "data-preview-field-path": `${fieldPath}.${idx}`, "aria-pressed": isSelected, children: cat }, `${cat}-${idx}`));
|
|
110
|
+
}) }));
|
|
111
|
+
}
|
|
112
|
+
// Canonical alias
|
|
113
|
+
exports.CategoryPills = EditableCategoryPills;
|
package/dist/EditableFooter.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export interface EditableFooterProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
25
25
|
* - Route Filtering Compliance (`data-target-page` wrappers)
|
|
26
26
|
* - Tailored Tailwind CSS utility classes + resilient inline CSS fallbacks
|
|
27
27
|
*
|
|
28
|
-
* Created by Chamika Gayashan
|
|
28
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
29
29
|
*/
|
|
30
30
|
export declare function EditableFooter({ defaultLinks, links, basePath, showNewsletter, className, style, ...props }: EditableFooterProps): React.JSX.Element;
|
|
31
31
|
export declare const Footer: typeof EditableFooter;
|
package/dist/EditableFooter.js
CHANGED
|
@@ -27,7 +27,7 @@ const DEFAULT_FOOTER_PAGES = [
|
|
|
27
27
|
* - Route Filtering Compliance (`data-target-page` wrappers)
|
|
28
28
|
* - Tailored Tailwind CSS utility classes + resilient inline CSS fallbacks
|
|
29
29
|
*
|
|
30
|
-
* Created by Chamika Gayashan
|
|
30
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
31
31
|
*/
|
|
32
32
|
function EditableFooter({ defaultLinks = DEFAULT_FOOTER_PAGES, links, basePath = '', showNewsletter = true, className = '', style, ...props }) {
|
|
33
33
|
const siteData = (0, SiteDataProvider_1.useSiteData)();
|
package/dist/EditableNavbar.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface EditableNavbarProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
21
21
|
* - Responsive mobile toggle and drawer menu
|
|
22
22
|
* - Tailwind CSS classes + resilient inline CSS fallbacks
|
|
23
23
|
*
|
|
24
|
-
* Created by Chamika Gayashan
|
|
24
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
25
25
|
*/
|
|
26
26
|
export declare function EditableNavbar({ defaultLinks, sticky, activeRoute, basePath, className, style, ...props }: EditableNavbarProps): React.JSX.Element;
|
|
27
27
|
export declare const Navbar: typeof EditableNavbar;
|
package/dist/EditableNavbar.js
CHANGED
|
@@ -23,7 +23,7 @@ const DEFAULT_PAGES = [
|
|
|
23
23
|
* - Responsive mobile toggle and drawer menu
|
|
24
24
|
* - Tailwind CSS classes + resilient inline CSS fallbacks
|
|
25
25
|
*
|
|
26
|
-
* Created by Chamika Gayashan
|
|
26
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
27
27
|
*/
|
|
28
28
|
function EditableNavbar({ defaultLinks = DEFAULT_PAGES, sticky = true, activeRoute, basePath = '', className = '', style, ...props }) {
|
|
29
29
|
const siteData = (0, SiteDataProvider_1.useSiteData)();
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface FloatingContactWidgetProps {
|
|
3
|
+
fieldPath?: string;
|
|
4
|
+
defaultPhone?: string;
|
|
5
|
+
defaultWhatsApp?: string;
|
|
6
|
+
defaultEmail?: string;
|
|
7
|
+
defaultMessage?: string;
|
|
8
|
+
position?: 'bottom-right' | 'bottom-left';
|
|
9
|
+
className?: string;
|
|
10
|
+
style?: React.CSSProperties;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* DENEB UI — Floating Contact Widget
|
|
14
|
+
*
|
|
15
|
+
* Sticky conversion powerhouse widget for e-commerce and local commerce storefronts.
|
|
16
|
+
* Sits elegantly in the corner of the screen across desktop and mobile, offering
|
|
17
|
+
* instant 1-click WhatsApp chat, phone calls, and email inquiries.
|
|
18
|
+
*
|
|
19
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
20
|
+
*/
|
|
21
|
+
export declare function FloatingContactWidget({ fieldPath, defaultPhone, defaultWhatsApp, defaultEmail, defaultMessage, position, className, style, }: FloatingContactWidgetProps): React.JSX.Element | null;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FloatingContactWidget = FloatingContactWidget;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const SiteDataProvider_1 = require("../SiteDataProvider");
|
|
7
|
+
const urls_1 = require("../utils/urls");
|
|
8
|
+
/**
|
|
9
|
+
* DENEB UI — Floating Contact Widget
|
|
10
|
+
*
|
|
11
|
+
* Sticky conversion powerhouse widget for e-commerce and local commerce storefronts.
|
|
12
|
+
* Sits elegantly in the corner of the screen across desktop and mobile, offering
|
|
13
|
+
* instant 1-click WhatsApp chat, phone calls, and email inquiries.
|
|
14
|
+
*
|
|
15
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
16
|
+
*/
|
|
17
|
+
function FloatingContactWidget({ fieldPath = 'contact', defaultPhone, defaultWhatsApp, defaultEmail, defaultMessage = 'Hello! I have an inquiry about your products.', position = 'bottom-right', className = '', style = {}, }) {
|
|
18
|
+
const { siteData } = (0, SiteDataProvider_1.useSiteData)();
|
|
19
|
+
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
|
|
20
|
+
const contactData = siteData?.contact || {};
|
|
21
|
+
const phone = contactData.phone || defaultPhone || '';
|
|
22
|
+
const whatsapp = contactData.whatsapp || defaultWhatsApp || phone;
|
|
23
|
+
const email = contactData.email || defaultEmail || '';
|
|
24
|
+
const storeName = siteData?.site?.name || 'Support';
|
|
25
|
+
const hasWhatsApp = Boolean(whatsapp && whatsapp.trim().length > 0);
|
|
26
|
+
const hasPhone = Boolean(phone && phone.trim().length > 0);
|
|
27
|
+
const hasEmail = Boolean(email && email.trim().length > 0);
|
|
28
|
+
// If no contact channel exists, hide cleanly
|
|
29
|
+
if (!hasWhatsApp && !hasPhone && !hasEmail) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const isRight = position === 'bottom-right';
|
|
33
|
+
const containerStyle = {
|
|
34
|
+
position: 'fixed',
|
|
35
|
+
bottom: '1.5rem',
|
|
36
|
+
[isRight ? 'right' : 'left']: '1.5rem',
|
|
37
|
+
zIndex: 50,
|
|
38
|
+
fontFamily: 'inherit',
|
|
39
|
+
...style,
|
|
40
|
+
};
|
|
41
|
+
const bubbleStyle = {
|
|
42
|
+
backgroundColor: '#25D366', // Official WhatsApp green
|
|
43
|
+
color: '#ffffff',
|
|
44
|
+
width: '3.5rem',
|
|
45
|
+
height: '3.5rem',
|
|
46
|
+
borderRadius: '9999px',
|
|
47
|
+
boxShadow: '0 10px 25px -5px rgba(37, 211, 102, 0.4), 0 8px 10px -6px rgba(0, 0, 0, 0.1)',
|
|
48
|
+
display: 'flex',
|
|
49
|
+
alignItems: 'center',
|
|
50
|
+
justifyContent: 'center',
|
|
51
|
+
cursor: 'pointer',
|
|
52
|
+
border: 'none',
|
|
53
|
+
transition: 'transform 0.2s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.2s ease',
|
|
54
|
+
};
|
|
55
|
+
const menuStyle = {
|
|
56
|
+
position: 'absolute',
|
|
57
|
+
bottom: '4.25rem',
|
|
58
|
+
[isRight ? 'right' : 'left']: '0',
|
|
59
|
+
width: '18rem',
|
|
60
|
+
backgroundColor: '#ffffff',
|
|
61
|
+
borderRadius: '1rem',
|
|
62
|
+
boxShadow: '0 20px 25px -5px rgba(0, 0, 0, 0.15), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',
|
|
63
|
+
border: '1px solid rgba(226, 232, 240, 0.8)',
|
|
64
|
+
overflow: 'hidden',
|
|
65
|
+
animation: 'deneb-pop 0.2s cubic-bezier(0.16, 1, 0.3, 1)',
|
|
66
|
+
};
|
|
67
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `deneb-floating-contact fixed z-50 bottom-6 ${isRight ? 'right-6' : 'left-6'} ${className}`, style: containerStyle, "data-preview-field-path": fieldPath, children: [isOpen && ((0, jsx_runtime_1.jsxs)("div", { className: "deneb-contact-popup absolute bottom-16 bg-white rounded-2xl shadow-2xl border border-slate-200 w-72 overflow-hidden text-slate-800", style: menuStyle, children: [(0, jsx_runtime_1.jsxs)("div", { className: "bg-slate-900 text-white p-4 flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h4", { className: "font-bold text-sm leading-tight text-white", children: storeName }), (0, jsx_runtime_1.jsxs)("p", { className: "text-xs text-emerald-400 font-medium flex items-center gap-1.5 mt-0.5", children: [(0, jsx_runtime_1.jsx)("span", { className: "w-2 h-2 rounded-full bg-emerald-400 animate-pulse" }), "Online & Ready to Help"] })] }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setIsOpen(false), className: "text-slate-400 hover:text-white p-1 rounded transition-colors", "aria-label": "Close contact drawer", children: (0, jsx_runtime_1.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: [(0, jsx_runtime_1.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), (0, jsx_runtime_1.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "p-3 space-y-2 text-sm bg-slate-50", children: [hasWhatsApp && ((0, jsx_runtime_1.jsxs)("a", { href: (0, urls_1.createWhatsAppUrl)(whatsapp, defaultMessage), target: "_blank", rel: "noopener noreferrer", className: "flex items-center gap-3 p-2.5 rounded-xl bg-white border border-slate-200/80 hover:border-emerald-400 hover:shadow-sm transition-all text-slate-800", "data-preview-field-path": `${fieldPath}.whatsapp`, children: [(0, jsx_runtime_1.jsx)("div", { className: "w-9 h-9 rounded-lg bg-emerald-50 text-emerald-600 flex items-center justify-center flex-shrink-0", children: (0, jsx_runtime_1.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "currentColor", 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-.582 2.128 2.182-.573c.978.58 1.911.928 3.145.929 3.178 0 5.767-2.587 5.768-5.766.001-3.187-2.575-5.77-5.764-5.771zm3.392 8.244c-.144.405-.837.774-1.17.824-.312.045-.694.062-1.116-.073-.266-.086-.61-.225-1.047-.417-1.854-.814-3.056-2.695-3.15-2.819-.092-.124-.755-.999-.755-1.907 0-.909.479-1.353.649-1.536.17-.183.371-.23.495-.23.124 0 .248.002.355.008.113.006.265-.043.414.316.155.372.531 1.296.577 1.39.046.094.077.204.015.328-.061.124-.092.202-.184.31-.092.108-.195.241-.278.324-.093.093-.19.195-.082.381.109.186.483.797 1.037 1.289.713.633 1.314.829 1.501.922.186.093.295.078.404-.047.11-.124.467-.543.591-.729.124-.186.248-.155.418-.093.17.062 1.082.51 1.268.603.186.093.31.14.356.217.046.077.046.449-.098.854z" }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1 min-w-0", children: [(0, jsx_runtime_1.jsx)("div", { className: "font-semibold text-slate-900 text-xs", children: "Chat on WhatsApp" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[11px] text-slate-500 truncate", children: whatsapp })] })] })), hasPhone && ((0, jsx_runtime_1.jsxs)("a", { href: (0, urls_1.createPhoneUrl)(phone), className: "flex items-center gap-3 p-2.5 rounded-xl bg-white border border-slate-200/80 hover:border-blue-400 hover:shadow-sm transition-all text-slate-800", "data-preview-field-path": `${fieldPath}.phone`, children: [(0, jsx_runtime_1.jsx)("div", { className: "w-9 h-9 rounded-lg bg-blue-50 text-blue-600 flex items-center justify-center flex-shrink-0", children: (0, jsx_runtime_1.jsx)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: (0, jsx_runtime_1.jsx)("path", { d: "M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z" }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1 min-w-0", children: [(0, jsx_runtime_1.jsx)("div", { className: "font-semibold text-slate-900 text-xs", children: "Direct Call" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[11px] text-slate-500 truncate", children: phone })] })] })), hasEmail && ((0, jsx_runtime_1.jsxs)("a", { href: (0, urls_1.createEmailUrl)(email, `Inquiry: ${storeName}`), className: "flex items-center gap-3 p-2.5 rounded-xl bg-white border border-slate-200/80 hover:border-purple-400 hover:shadow-sm transition-all text-slate-800", "data-preview-field-path": `${fieldPath}.email`, children: [(0, jsx_runtime_1.jsx)("div", { className: "w-9 h-9 rounded-lg bg-purple-50 text-purple-600 flex items-center justify-center flex-shrink-0", children: (0, jsx_runtime_1.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [(0, jsx_runtime_1.jsx)("path", { d: "M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z" }), (0, jsx_runtime_1.jsx)("polyline", { points: "22,6 12,13 2,6" })] }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1 min-w-0", children: [(0, jsx_runtime_1.jsx)("div", { className: "font-semibold text-slate-900 text-xs", children: "Send Email" }), (0, jsx_runtime_1.jsx)("div", { className: "text-[11px] text-slate-500 truncate", children: email })] })] }))] })] })), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setIsOpen(!isOpen), style: bubbleStyle, className: "deneb-bubble hover:scale-105 active:scale-95 flex items-center justify-center focus:outline-none", "aria-label": "Toggle contact channels", children: isOpen ? ((0, jsx_runtime_1.jsxs)("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: [(0, jsx_runtime_1.jsx)("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), (0, jsx_runtime_1.jsx)("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] })) : ((0, jsx_runtime_1.jsx)("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "currentColor", 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-.582 2.128 2.182-.573c.978.58 1.911.928 3.145.929 3.178 0 5.767-2.587 5.768-5.766.001-3.187-2.575-5.77-5.764-5.771zm3.392 8.244c-.144.405-.837.774-1.17.824-.312.045-.694.062-1.116-.073-.266-.086-.61-.225-1.047-.417-1.854-.814-3.056-2.695-3.15-2.819-.092-.124-.755-.999-.755-1.907 0-.909.479-1.353.649-1.536.17-.183.371-.23.495-.23.124 0 .248.002.355.008.113.006.265-.043.414.316.155.372.531 1.296.577 1.39.046.094.077.204.015.328-.061.124-.092.202-.184.31-.092.108-.195.241-.278.324-.093.093-.19.195-.082.381.109.186.483.797 1.037 1.289.713.633 1.314.829 1.501.922.186.093.295.078.404-.047.11-.124.467-.543.591-.729.124-.186.248-.155.418-.093.17.062 1.082.51 1.268.603.186.093.31.14.356.217.046.077.046.449-.098.854z" }) })) })] }));
|
|
68
|
+
}
|
package/dist/contact/index.d.ts
CHANGED
package/dist/contact/index.js
CHANGED
|
@@ -19,3 +19,4 @@ __exportStar(require("./WhatsAppButton"), exports);
|
|
|
19
19
|
__exportStar(require("./PhoneButton"), exports);
|
|
20
20
|
__exportStar(require("./EmailButton"), exports);
|
|
21
21
|
__exportStar(require("./ContactActions"), exports);
|
|
22
|
+
__exportStar(require("./FloatingContactWidget"), exports);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* DENEB UI — The Visual-First React Framework for High-Converting Storefronts
|
|
3
|
-
* Created by Chamika Gayashan
|
|
3
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
4
4
|
*/
|
|
5
5
|
export * from './EditableText';
|
|
6
6
|
export * from './EditableImage';
|
|
@@ -19,6 +19,8 @@ export * from './EditableNavbar';
|
|
|
19
19
|
export * from './EditableFooter';
|
|
20
20
|
export * from './EditableHero';
|
|
21
21
|
export * from './EditableDialog';
|
|
22
|
+
export * from './EditableAnnouncementBar';
|
|
23
|
+
export * from './EditableCategoryPills';
|
|
22
24
|
export * from './ThemeStyles';
|
|
23
25
|
export * from './SiteDataProvider';
|
|
24
26
|
export * from './utils';
|
|
@@ -49,13 +51,16 @@ export { EditableContactForm as ContactForm } from './EditableContactForm';
|
|
|
49
51
|
export { EditableNavbar as Navbar, EditableNavbar as Header } from './EditableNavbar';
|
|
50
52
|
export { EditableFooter as Footer } from './EditableFooter';
|
|
51
53
|
export { EditableHeroCentered as Hero, EditableHeroSplit as HeroSplit } from './EditableHero';
|
|
54
|
+
export { EditableAnnouncementBar as AnnouncementBar } from './EditableAnnouncementBar';
|
|
55
|
+
export { EditableCategoryPills as CategoryPills } from './EditableCategoryPills';
|
|
56
|
+
export { FloatingContactWidget } from './contact/FloatingContactWidget';
|
|
52
57
|
/**
|
|
53
58
|
* DENEB UI Framework Metadata
|
|
54
|
-
* Developed by Chamika Gayashan
|
|
59
|
+
* Developed by Chamika Gayashan & Induranga Kawishwara
|
|
55
60
|
*/
|
|
56
61
|
export declare const DENEB_FRAMEWORK_NAME = "DENEB UI";
|
|
57
62
|
export declare const DENEB_FRAMEWORK_VERSION = "2.0.0";
|
|
58
|
-
export declare const DENEB_AUTHOR = "Chamika Gayashan
|
|
63
|
+
export declare const DENEB_AUTHOR = "Chamika Gayashan & Induranga Kawishwara";
|
|
59
64
|
export declare const CEEG_FRAMEWORK_NAME = "DENEB UI";
|
|
60
65
|
export declare const CEEG_FRAMEWORK_VERSION = "2.0.0";
|
|
61
|
-
export declare const CEEG_AUTHOR = "Chamika Gayashan
|
|
66
|
+
export declare const CEEG_AUTHOR = "Chamika Gayashan & Induranga Kawishwara";
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* DENEB UI — The Visual-First React Framework for High-Converting Storefronts
|
|
4
|
-
* Created by Chamika Gayashan
|
|
4
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
5
5
|
*/
|
|
6
6
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
7
|
if (k2 === undefined) k2 = k;
|
|
@@ -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.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.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);
|
|
@@ -36,6 +36,8 @@ __exportStar(require("./EditableNavbar"), exports);
|
|
|
36
36
|
__exportStar(require("./EditableFooter"), exports);
|
|
37
37
|
__exportStar(require("./EditableHero"), exports);
|
|
38
38
|
__exportStar(require("./EditableDialog"), exports);
|
|
39
|
+
__exportStar(require("./EditableAnnouncementBar"), exports);
|
|
40
|
+
__exportStar(require("./EditableCategoryPills"), exports);
|
|
39
41
|
__exportStar(require("./ThemeStyles"), exports);
|
|
40
42
|
__exportStar(require("./SiteDataProvider"), exports);
|
|
41
43
|
// Smart template components & actions
|
|
@@ -93,13 +95,19 @@ Object.defineProperty(exports, "Footer", { enumerable: true, get: function () {
|
|
|
93
95
|
var EditableHero_1 = require("./EditableHero");
|
|
94
96
|
Object.defineProperty(exports, "Hero", { enumerable: true, get: function () { return EditableHero_1.EditableHeroCentered; } });
|
|
95
97
|
Object.defineProperty(exports, "HeroSplit", { enumerable: true, get: function () { return EditableHero_1.EditableHeroSplit; } });
|
|
98
|
+
var EditableAnnouncementBar_1 = require("./EditableAnnouncementBar");
|
|
99
|
+
Object.defineProperty(exports, "AnnouncementBar", { enumerable: true, get: function () { return EditableAnnouncementBar_1.EditableAnnouncementBar; } });
|
|
100
|
+
var EditableCategoryPills_1 = require("./EditableCategoryPills");
|
|
101
|
+
Object.defineProperty(exports, "CategoryPills", { enumerable: true, get: function () { return EditableCategoryPills_1.EditableCategoryPills; } });
|
|
102
|
+
var FloatingContactWidget_1 = require("./contact/FloatingContactWidget");
|
|
103
|
+
Object.defineProperty(exports, "FloatingContactWidget", { enumerable: true, get: function () { return FloatingContactWidget_1.FloatingContactWidget; } });
|
|
96
104
|
/**
|
|
97
105
|
* DENEB UI Framework Metadata
|
|
98
|
-
* Developed by Chamika Gayashan
|
|
106
|
+
* Developed by Chamika Gayashan & Induranga Kawishwara
|
|
99
107
|
*/
|
|
100
108
|
exports.DENEB_FRAMEWORK_NAME = 'DENEB UI';
|
|
101
109
|
exports.DENEB_FRAMEWORK_VERSION = '2.0.0';
|
|
102
|
-
exports.DENEB_AUTHOR = 'Chamika Gayashan
|
|
110
|
+
exports.DENEB_AUTHOR = 'Chamika Gayashan & Induranga Kawishwara';
|
|
103
111
|
// Backward compatibility alias
|
|
104
112
|
exports.CEEG_FRAMEWORK_NAME = exports.DENEB_FRAMEWORK_NAME;
|
|
105
113
|
exports.CEEG_FRAMEWORK_VERSION = exports.DENEB_FRAMEWORK_VERSION;
|
package/dist/utils/urls.d.ts
CHANGED
package/dist/utils/urls.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* DENEB UI — URL & Action Helpers
|
|
4
|
-
* Created by Chamika Gayashan
|
|
4
|
+
* Created by Chamika Gayashan & Induranga Kawishwara
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.createWhatsAppUrl = createWhatsAppUrl;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deneb-ui/ui",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"description": "DENEB UI - The
|
|
3
|
+
"version": "2.0.3",
|
|
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": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"nextjs",
|
|
27
27
|
"react"
|
|
28
28
|
],
|
|
29
|
-
"author": "Chamika Gayashan
|
|
29
|
+
"author": "Chamika Gayashan & Induranga Kawishwara",
|
|
30
30
|
"license": "MIT",
|
|
31
31
|
"dependencies": {},
|
|
32
32
|
"peerDependencies": {
|