@decido/ui 0.0.0
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/.eslintrc.cjs +10 -0
- package/.turbo/turbo-build.log +13 -0
- package/.turbo/turbo-lint.log +54 -0
- package/dist/components/DebugPanel.d.ts +3 -0
- package/dist/components/DebugPanel.js +195 -0
- package/dist/components/DebugPanelManager.d.ts +3 -0
- package/dist/components/DebugPanelManager.js +20 -0
- package/dist/components/DecidoButton.d.ts +11 -0
- package/dist/components/DecidoButton.js +15 -0
- package/dist/components/LoginView.d.ts +6 -0
- package/dist/components/LoginView.js +36 -0
- package/dist/components/WelcomeView.d.ts +6 -0
- package/dist/components/WelcomeView.js +16 -0
- package/dist/components/base/BaseComponent.d.ts +12 -0
- package/dist/components/base/BaseComponent.js +43 -0
- package/dist/components/base/BaseComponentBacjup.d.ts +12 -0
- package/dist/components/base/BaseComponentBacjup.js +43 -0
- package/dist/components/base/BaseComponentLit.d.ts +9 -0
- package/dist/components/base/BaseComponentLit.js +30 -0
- package/dist/components/base/shared-styles.d.ts +4 -0
- package/dist/components/base/shared-styles.js +18 -0
- package/dist/components/index.d.ts +6 -0
- package/dist/components/index.js +7 -0
- package/dist/components/landing/index.d.ts +11 -0
- package/dist/components/landing/index.js +11 -0
- package/dist/components/landing/landing-button.d.ts +9 -0
- package/dist/components/landing/landing-button.js +5 -0
- package/dist/components/landing/landing-card.d.ts +6 -0
- package/dist/components/landing/landing-card.js +5 -0
- package/dist/components/landing/landing-cta.d.ts +10 -0
- package/dist/components/landing/landing-cta.js +5 -0
- package/dist/components/landing/landing-feature-card.d.ts +35 -0
- package/dist/components/landing/landing-feature-card.js +35 -0
- package/dist/components/landing/landing-footer.d.ts +18 -0
- package/dist/components/landing/landing-footer.js +7 -0
- package/dist/components/landing/landing-header.d.ts +21 -0
- package/dist/components/landing/landing-header.js +7 -0
- package/dist/components/landing/landing-hero.d.ts +22 -0
- package/dist/components/landing/landing-hero.js +10 -0
- package/dist/components/landing/landing-page.d.ts +3 -0
- package/dist/components/landing/landing-page.js +34 -0
- package/dist/components/landing/landing-section.d.ts +14 -0
- package/dist/components/landing/landing-section.js +8 -0
- package/dist/components/landing/landing-testimonial-card.d.ts +11 -0
- package/dist/components/landing/landing-testimonial-card.js +9 -0
- package/dist/components/landing/landing-waitlist.d.ts +27 -0
- package/dist/components/landing/landing-waitlist.js +18 -0
- package/dist/components/theming/ColorPicker.d.ts +8 -0
- package/dist/components/theming/ColorPicker.js +19 -0
- package/dist/components/theming/ThemePanel.d.ts +5 -0
- package/dist/components/theming/ThemePanel.js +12 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +19 -0
- package/dist/utils/counter.d.ts +1 -0
- package/dist/utils/counter.js +9 -0
- package/eslint.config.js +11 -0
- package/package.json +47 -0
- package/src/components/DebugPanel.tsx +347 -0
- package/src/components/DebugPanelManager.tsx +40 -0
- package/src/components/DecidoButton.tsx +43 -0
- package/src/components/LoginView.tsx +85 -0
- package/src/components/WelcomeView.tsx +47 -0
- package/src/components/base/landing.css +477 -0
- package/src/components/base/shared-styles.ts +21 -0
- package/src/components/index.ts +7 -0
- package/src/components/landing/index.tsx +11 -0
- package/src/components/landing/landing-button.tsx +26 -0
- package/src/components/landing/landing-card.tsx +15 -0
- package/src/components/landing/landing-cta.tsx +42 -0
- package/src/components/landing/landing-feature-card.tsx +149 -0
- package/src/components/landing/landing-footer.tsx +66 -0
- package/src/components/landing/landing-header.tsx +55 -0
- package/src/components/landing/landing-hero.tsx +94 -0
- package/src/components/landing/landing-page.tsx +143 -0
- package/src/components/landing/landing-section.tsx +42 -0
- package/src/components/landing/landing-testimonial-card.tsx +50 -0
- package/src/components/landing/landing-waitlist.tsx +115 -0
- package/src/components/theming/ColorPicker.tsx +40 -0
- package/src/components/theming/ThemePanel.tsx +43 -0
- package/src/css/base.css +483 -0
- package/src/css/components.css +309 -0
- package/src/css/debug-panel.css +1368 -0
- package/src/css/layout.css +289 -0
- package/src/css/login-view.css +45 -0
- package/src/css/style.css +20 -0
- package/src/css/welcome-view.css +56 -0
- package/src/css/workbench.css +383 -0
- package/src/globals.d.ts +8 -0
- package/src/index.ts +24 -0
- package/src/utils/counter.d.ts.map +1 -0
- package/src/utils/counter.js +9 -0
- package/src/utils/counter.ts +9 -0
- package/src/vite-env.d.ts +1 -0
- package/tailwind.config.js +7 -0
- package/tsconfig.json +35 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface LandingButtonProps {
|
|
3
|
+
text: string;
|
|
4
|
+
icon?: string;
|
|
5
|
+
href?: string;
|
|
6
|
+
onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;
|
|
7
|
+
}
|
|
8
|
+
declare const LandingButton: React.FC<LandingButtonProps>;
|
|
9
|
+
export default LandingButton;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const LandingButton = ({ text, icon, href = '#', onClick, }) => {
|
|
3
|
+
return (_jsx("a", { href: href, onClick: onClick, className: "btn-premium px-6 py-3 rounded-xl font-semibold text-sm inline-block", children: _jsxs("span", { className: "relative z-10 flex items-center justify-center", children: [icon && _jsx("i", { className: `${icon} mr-2` }), text] }) }));
|
|
4
|
+
};
|
|
5
|
+
export default LandingButton;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const LandingCta = ({ title, subtitle, buttonText, trustText, onButtonClick, }) => {
|
|
3
|
+
return (_jsx("section", { className: "py-40 bg-linear-to-br from-purple-900/30 via-blue-900/30 to-cyan-900/30 relative overflow-hidden", children: _jsx("div", { className: "container mx-auto px-6 text-center relative z-10", children: _jsxs("div", { className: "max-w-5xl mx-auto scroll-reveal", children: [_jsx("h2", { className: "text-6xl md:text-8xl font-black mb-12 leading-tight", dangerouslySetInnerHTML: { __html: title } }), _jsx("p", { className: "text-xl md:text-2xl text-gray-300 mb-16 leading-relaxed", dangerouslySetInnerHTML: { __html: subtitle } }), _jsx("button", { onClick: onButtonClick, className: "btn-premium text-white font-black py-8 px-16 rounded-3xl text-2xl mb-8 inline-flex items-center group hover:scale-105 transition-all duration-300", children: _jsxs("span", { className: "relative z-10 flex items-center", children: [_jsx("i", { className: "fas fa-rocket mr-4 text-3xl" }), buttonText, _jsx("i", { className: "fas fa-arrow-right ml-4 text-3xl group-hover:translate-x-2 transition-transform" })] }) }), _jsx("p", { className: "text-sm text-gray-400 mt-8", children: trustText })] }) }) }));
|
|
4
|
+
};
|
|
5
|
+
export default LandingCta;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface DemoLine {
|
|
3
|
+
color: string;
|
|
4
|
+
prefix: string;
|
|
5
|
+
text: string;
|
|
6
|
+
}
|
|
7
|
+
interface DemoTask {
|
|
8
|
+
color: string;
|
|
9
|
+
label: string;
|
|
10
|
+
time: string;
|
|
11
|
+
text: string;
|
|
12
|
+
}
|
|
13
|
+
interface DemoMoodInsight {
|
|
14
|
+
icon: string;
|
|
15
|
+
color: string;
|
|
16
|
+
text: string;
|
|
17
|
+
}
|
|
18
|
+
interface Demo {
|
|
19
|
+
title: string;
|
|
20
|
+
lines?: DemoLine[];
|
|
21
|
+
tasks?: DemoTask[];
|
|
22
|
+
moods?: any;
|
|
23
|
+
insights?: DemoMoodInsight[];
|
|
24
|
+
}
|
|
25
|
+
interface LandingFeatureCardProps {
|
|
26
|
+
data: {
|
|
27
|
+
icon: string;
|
|
28
|
+
title: string;
|
|
29
|
+
description: string;
|
|
30
|
+
powered_by: string;
|
|
31
|
+
demo?: Demo;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
declare const LandingFeatureCard: React.FC<LandingFeatureCardProps>;
|
|
35
|
+
export default LandingFeatureCard;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import LandingCard from './landing-card'; // Assuming LandingCard is now a React component
|
|
3
|
+
const LandingFeatureCard = ({ data }) => {
|
|
4
|
+
const getIconWrapperClass = () => {
|
|
5
|
+
if (data.icon.includes('fa-brain'))
|
|
6
|
+
return 'from-cyan-500 via-cyan-600 to-cyan-700';
|
|
7
|
+
if (data.icon.includes('fa-journal-whills'))
|
|
8
|
+
return 'from-yellow-500 via-orange-500 to-red-500';
|
|
9
|
+
return 'from-purple-500 via-purple-600 to-purple-700';
|
|
10
|
+
};
|
|
11
|
+
const getTaglineBorderClass = () => {
|
|
12
|
+
if (data.icon.includes('fa-brain'))
|
|
13
|
+
return 'bg-cyan-900/30 border-cyan-500/30 text-cyan-300';
|
|
14
|
+
if (data.icon.includes('fa-journal-whills'))
|
|
15
|
+
return 'bg-yellow-900/30 border-yellow-500/30 text-yellow-300';
|
|
16
|
+
return 'bg-purple-900/30 border-purple-500/30 text-purple-300';
|
|
17
|
+
};
|
|
18
|
+
const renderDemo = () => {
|
|
19
|
+
const { demo } = data;
|
|
20
|
+
if (!demo)
|
|
21
|
+
return null;
|
|
22
|
+
if (demo.lines) {
|
|
23
|
+
return (_jsxs("div", { className: "glass rounded-2xl p-6 text-left mb-6 font-mono text-sm space-y-3", children: [_jsxs("div", { className: "text-green-400 mb-4 flex items-center", children: [_jsx("i", { className: "fas fa-terminal mr-3" }), demo.title] }), demo.lines.map((line, index) => (_jsxs("div", { className: "flex items-start", children: [_jsx("span", { className: `${line.color} mr-3`, children: line.prefix }), _jsx("span", { className: "text-gray-300", children: line.text })] }, index)))] }));
|
|
24
|
+
}
|
|
25
|
+
if (demo.tasks) {
|
|
26
|
+
return (_jsxs("div", { className: "glass rounded-2xl p-6 mb-6 space-y-3", children: [_jsxs("div", { className: "flex items-center justify-between mb-4", children: [_jsx("span", { className: "text-sm font-semibold text-gray-300", children: demo.title }), _jsxs("div", { className: "flex items-center", children: [_jsx("div", { className: "w-2 h-2 bg-green-400 rounded-full animate-pulse mr-2" }), _jsx("span", { className: "text-xs text-green-400 font-mono", children: "ACTIVO" })] })] }), demo.tasks.map((task, index) => (_jsxs("div", { className: `bg-${task.color}-900/40 border border-${task.color}-500/30 rounded-lg p-3 text-sm`, children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: `text-${task.color}-300`, dangerouslySetInnerHTML: { __html: task.label } }), _jsx("span", { className: "text-xs text-gray-400", children: task.time })] }), _jsx("div", { className: "text-gray-300 mt-1", children: task.text })] }, index)))] }));
|
|
27
|
+
}
|
|
28
|
+
if (demo.moods) {
|
|
29
|
+
return (_jsxs("div", { className: "glass rounded-2xl p-6 mb-6", children: [_jsx("div", { className: "text-sm text-gray-300 mb-4 font-semibold", children: demo.title }), _jsxs("div", { className: "flex items-end justify-between h-20 mb-4 px-2", children: [_jsx("div", { className: "w-4 bg-red-400 rounded-t", style: { height: '30%' } }), _jsx("div", { className: "w-4 bg-yellow-400 rounded-t", style: { height: '50%' } }), _jsx("div", { className: "w-4 bg-green-400 rounded-t", style: { height: '70%' } }), _jsx("div", { className: "w-4 bg-green-400 rounded-t", style: { height: '65%' } }), _jsx("div", { className: "w-4 bg-blue-400 rounded-t", style: { height: '80%' } }), _jsx("div", { className: "w-4 bg-purple-400 rounded-t", style: { height: '85%' } }), _jsx("div", { className: "w-4 bg-cyan-400 rounded-t", style: { height: '75%' } })] }), _jsx("div", { className: "text-xs text-gray-400 text-left space-y-2", children: demo.insights?.map((insight, index) => (_jsxs("div", { className: "flex items-center", children: [_jsx("i", { className: `${insight.icon} ${insight.color} mr-2` }), _jsx("span", { children: insight.text })] }, index))) })] }));
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
};
|
|
33
|
+
return (_jsx(LandingCard, { children: _jsxs("div", { className: "feature-card glass-premium rounded-3xl p-10 text-center h-full flex flex-col", children: [_jsxs("div", { className: "flex-grow", children: [_jsx("div", { className: `w-20 h-20 bg-linear-to-br ${getIconWrapperClass()} rounded-3xl flex items-center justify-center mx-auto mb-6 shadow-2xl animate-pulse-glow`, children: _jsx("i", { className: `${data.icon} text-3xl text-white` }) }), _jsx("h3", { className: "text-3xl font-bold mb-4 gradient-text", children: data.title }), _jsx("p", { className: "text-lg text-gray-300 leading-relaxed mb-8", dangerouslySetInnerHTML: { __html: data.description } }), renderDemo()] }), _jsx("div", { className: "bg-purple-900/30 rounded-xl p-4 border border-purple-500/30 mt-auto", children: _jsxs("div", { className: `text-sm font-semibold ${getTaglineBorderClass()}`, children: [_jsx("i", { className: "fas fa-magic mr-2" }), data.powered_by] }) })] }) }));
|
|
34
|
+
};
|
|
35
|
+
export default LandingFeatureCard;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface SocialLink {
|
|
3
|
+
href: string;
|
|
4
|
+
icon: string;
|
|
5
|
+
}
|
|
6
|
+
interface FooterLink {
|
|
7
|
+
href: string;
|
|
8
|
+
text: string;
|
|
9
|
+
}
|
|
10
|
+
interface LandingFooterProps {
|
|
11
|
+
data: {
|
|
12
|
+
socials?: SocialLink[];
|
|
13
|
+
copyright: string;
|
|
14
|
+
links?: FooterLink[];
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
declare const LandingFooter: React.FC<LandingFooterProps>;
|
|
18
|
+
export default LandingFooter;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const LandingFooter = ({ data }) => {
|
|
3
|
+
if (!data)
|
|
4
|
+
return null;
|
|
5
|
+
return (_jsx("footer", { className: 'py-20 bg-gray-900 border-t border-gray-800 relative', children: _jsxs("div", { className: 'container mx-auto px-6', children: [_jsxs("div", { className: 'text-center mb-12', children: [_jsxs("div", { className: 'flex items-center justify-center space-x-4 mb-6', children: [_jsx("div", { className: 'w-12 h-12 bg-linear-to-br from-purple-500 via-blue-500 to-cyan-500 rounded-xl flex items-center justify-center shadow-xl', children: _jsx("i", { className: 'fas fa-brain text-white text-xl' }) }), _jsxs("div", { children: [_jsx("div", { className: 'text-2xl font-bold gradient-text', children: "Decido" }), _jsx("div", { className: 'text-sm text-gray-400 font-mono', children: "Tu Arquitecto de Vida IA" })] })] }), _jsx("p", { className: 'text-gray-400 max-w-2xl mx-auto mb-8', children: "Construyendo el futuro del crecimiento personal, una vida transformada a la vez." }), _jsx("div", { className: 'flex items-center justify-center space-x-8 text-gray-400', children: data.socials?.map((social, index) => (_jsx("a", { href: social.href, className: 'hover:text-white transition-colors hover:scale-110 transform', children: _jsx("i", { className: `${social.icon} text-2xl` }) }, index))) })] }), _jsx("div", { className: 'border-t border-gray-800 pt-8 text-center', children: _jsxs("div", { className: 'flex flex-col md:flex-row items-center justify-between text-gray-500 text-sm', children: [_jsx("p", { children: data.copyright }), _jsx("div", { className: 'flex items-center space-x-6 mt-4 md:mt-0', children: data.links?.map((link, index) => (_jsx("a", { href: link.href, className: 'hover:text-white transition-colors', children: link.text }, index))) })] }) })] }) }));
|
|
6
|
+
};
|
|
7
|
+
export default LandingFooter;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface NavLink {
|
|
3
|
+
href: string;
|
|
4
|
+
text: string;
|
|
5
|
+
}
|
|
6
|
+
interface LandingHeaderProps {
|
|
7
|
+
data: {
|
|
8
|
+
logo?: {
|
|
9
|
+
icon: string;
|
|
10
|
+
text: string;
|
|
11
|
+
version: string;
|
|
12
|
+
};
|
|
13
|
+
links?: NavLink[];
|
|
14
|
+
cta?: {
|
|
15
|
+
text: string;
|
|
16
|
+
onClick: () => void;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
declare const LandingHeader: React.FC<LandingHeaderProps>;
|
|
21
|
+
export default LandingHeader;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const LandingHeader = ({ data }) => {
|
|
3
|
+
if (!data)
|
|
4
|
+
return null;
|
|
5
|
+
return (_jsx("nav", { className: 'fixed top-0 w-full z-40 transition-all duration-300', id: 'navbar', children: _jsx("div", { className: 'container mx-auto px-6 py-4', children: _jsxs("div", { className: 'flex items-center justify-between', children: [_jsxs("div", { className: 'flex items-center space-x-3', children: [_jsx("div", { className: 'w-10 h-10 bg-linear-to-br from-purple-500 via-blue-500 to-cyan-500 rounded-xl flex items-center justify-center shadow-lg animate-pulse-glow', children: _jsx("i", { className: `${data.logo?.icon} text-white` }) }), _jsxs("div", { children: [_jsx("div", { className: 'text-xl font-bold gradient-text', children: data.logo?.text }), _jsx("div", { className: 'text-xs text-gray-400 font-mono', children: data.logo?.version })] })] }), _jsx("div", { className: 'hidden md:flex items-center space-x-8', children: data.links?.map((link, index) => (_jsx("a", { href: link.href, className: 'text-gray-300 hover:text-white transition-colors font-medium', children: link.text }, index))) }), _jsx("button", { onClick: data.cta?.onClick, className: "btn-premium px-6 py-3 rounded-xl font-semibold text-sm", children: _jsx("span", { className: "relative z-10", children: data.cta?.text }) })] }) }) }));
|
|
6
|
+
};
|
|
7
|
+
export default LandingHeader;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface Announcement {
|
|
3
|
+
badge: string;
|
|
4
|
+
status: string;
|
|
5
|
+
}
|
|
6
|
+
interface Stat {
|
|
7
|
+
id?: string;
|
|
8
|
+
value: string;
|
|
9
|
+
label: string;
|
|
10
|
+
sublabel: string;
|
|
11
|
+
}
|
|
12
|
+
interface LandingHeroProps {
|
|
13
|
+
data: {
|
|
14
|
+
announcement?: Announcement;
|
|
15
|
+
title?: string[];
|
|
16
|
+
subtitle?: string;
|
|
17
|
+
typing_text?: string;
|
|
18
|
+
stats?: Stat[];
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
declare const LandingHero: React.FC<LandingHeroProps>;
|
|
22
|
+
export default LandingHero;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const LandingHero = ({ data }) => {
|
|
3
|
+
if (!data)
|
|
4
|
+
return null;
|
|
5
|
+
const scrollToFeatures = () => {
|
|
6
|
+
document.getElementById('features')?.scrollIntoView({ behavior: 'smooth' });
|
|
7
|
+
};
|
|
8
|
+
return (_jsxs("section", { className: "hero-bg min-h-screen flex items-center justify-center relative overflow-hidden", children: [_jsxs("div", { className: "absolute inset-0 overflow-hidden", children: [_jsx("div", { className: "particle particle-1", style: { top: '20%', left: '10%' } }), _jsx("div", { className: "particle particle-2", style: { top: '60%', left: '80%' } }), _jsx("div", { className: "particle particle-3", style: { top: '80%', left: '20%' } }), _jsx("div", { className: "particle particle-1", style: { top: '30%', left: '70%', animationDelay: '1s' } }), _jsx("div", { className: "particle particle-2", style: { top: '70%', left: '15%', animationDelay: '3s' } }), _jsx("div", { className: "particle particle-3", style: { top: '40%', left: '85%', animationDelay: '5s' } })] }), _jsx("div", { className: "container mx-auto px-6 relative z-20 pt-20", children: _jsxs("div", { className: "text-center max-w-7xl mx-auto", children: [_jsx("div", { className: "scroll-reveal inline-flex items-center glass-premium rounded-full px-8 py-4 mb-12", children: _jsxs("div", { className: "flex items-center", children: [_jsx("div", { className: "w-3 h-3 bg-linear-to-r from-green-400 to-emerald-400 rounded-full mr-4 animate-pulse" }), _jsx("span", { className: "text-sm font-medium mr-3", children: _jsx("span", { className: "gradient-text font-bold", children: data.announcement?.badge }) }), _jsx("div", { className: "bg-red-500 text-white text-xs px-2 py-1 rounded-full font-bold", children: data.announcement?.status })] }) }), _jsx("div", { className: "mb-16", children: data.title?.map((line, index) => (_jsx("h1", { className: "text-6xl md:text-8xl lg:text-9xl font-black mb-8 leading-tight scroll-reveal", style: { animationDelay: `${index * 0.2}s` }, dangerouslySetInnerHTML: { __html: line } }, index))) }), _jsxs("div", { className: "mb-16 scroll-reveal", style: { animationDelay: '0.4s' }, children: [_jsx("div", { className: "text-2xl md:text-4xl text-gray-300 mb-6 leading-relaxed max-w-5xl mx-auto", dangerouslySetInnerHTML: { __html: data.subtitle || '' } }), _jsx("div", { className: "text-lg md:text-xl text-gray-400 font-mono mb-8", children: _jsx("span", { className: "typing-text", children: data.typing_text }) })] }), _jsx("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-8 mb-16 scroll-reveal", style: { animationDelay: '0.6s' }, children: data.stats?.map((stat, index) => (_jsxs("div", { className: "glass-premium rounded-2xl p-6 hover:scale-105 transition-transform", children: [_jsx("div", { className: "text-4xl font-black gradient-text mb-2", id: stat.id || '', children: stat.value }), _jsx("div", { className: "text-sm text-gray-400 font-mono uppercase tracking-wide", children: stat.label }), _jsx("div", { className: "text-xs text-gray-500 mt-1", children: stat.sublabel })] }, index))) }), _jsx("div", { className: "scroll-reveal animate-bounce", style: { animationDelay: '1s' }, children: _jsxs("div", { className: "inline-flex flex-col items-center text-gray-400 hover:text-white transition-colors cursor-pointer", onClick: scrollToFeatures, children: [_jsx("span", { className: "text-sm font-mono mb-2", children: "Descubre m\u00E1s" }), _jsx("i", { className: "fas fa-chevron-down text-2xl" })] }) })] }) })] }));
|
|
9
|
+
};
|
|
10
|
+
export default LandingHero;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import LandingHeader from './landing-header';
|
|
4
|
+
import LandingHero from './landing-hero';
|
|
5
|
+
import LandingWaitlist from './landing-waitlist';
|
|
6
|
+
import LandingSection from './landing-section';
|
|
7
|
+
import LandingFeatureCard from './landing-feature-card';
|
|
8
|
+
import LandingTestimonialCard from './landing-testimonial-card';
|
|
9
|
+
import LandingCta from './landing-cta';
|
|
10
|
+
import LandingFooter from './landing-footer';
|
|
11
|
+
const LandingPage = () => {
|
|
12
|
+
const [data, setData] = useState(null);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
const fetchLandingData = async () => {
|
|
15
|
+
try {
|
|
16
|
+
const response = await fetch('/data.json');
|
|
17
|
+
const jsonData = await response.json();
|
|
18
|
+
setData(jsonData);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
console.error('Error fetching landing data:', error);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
fetchLandingData();
|
|
25
|
+
}, []);
|
|
26
|
+
if (!data) {
|
|
27
|
+
return null; // El preloader del index.html se encargará de la espera
|
|
28
|
+
}
|
|
29
|
+
const scrollToWaitlist = () => {
|
|
30
|
+
document.getElementById('waitlist-section')?.scrollIntoView({ behavior: 'smooth' });
|
|
31
|
+
};
|
|
32
|
+
return (_jsxs(_Fragment, { children: [_jsx(LandingHeader, { data: { ...data.navigation, cta: { text: data.navigation.cta.text, onClick: scrollToWaitlist } } }), _jsxs("main", { children: [_jsx(LandingHero, { data: data.hero }), _jsx("div", { className: "container mx-auto px-6", children: _jsx(LandingWaitlist, { data: data.waitlist }) }), _jsx(LandingSection, { data: data.features, children: _jsx("div", { className: "grid lg:grid-cols-3 gap-12 max-w-8xl mx-auto", children: data.features.main_features.map((feature, index) => (_jsx("div", { className: "scroll-reveal", style: { animationDelay: `${index * 0.1}s` }, children: _jsx(LandingFeatureCard, { data: feature }) }, index))) }) }), _jsxs(LandingSection, { data: data.integral_system, children: [_jsx("div", { className: "grid lg:grid-cols-2 gap-12 max-w-7xl mx-auto mb-32", children: data.integral_system.features.map((feature, index) => (_jsxs("div", { className: "feature-card glass-premium rounded-3xl p-10 scroll-reveal-left", children: [_jsxs("div", { className: "flex items-start mb-6", children: [_jsx("div", { className: "w-20 h-20 bg-linear-to-br from-orange-500 to-yellow-500 rounded-3xl flex-shrink-0 flex items-center justify-center mr-8 shadow-2xl animate-pulse-glow", children: _jsx("i", { className: `${feature.icon} text-4xl text-white` }) }), _jsxs("div", { children: [_jsx("h3", { className: "text-3xl font-bold mb-3 gradient-text", children: feature.title }), _jsx("p", { className: "text-lg text-gray-300 leading-relaxed", children: feature.description })] })] }), _jsx("div", { className: "bg-yellow-900/30 rounded-xl p-4 border border-yellow-500/30", children: _jsxs("div", { className: "text-sm text-yellow-300 font-semibold text-center", children: [_jsx("i", { className: "fas fa-flag-checkered mr-2" }), feature.tagline] }) })] }, index))) }), _jsxs("div", { className: "mt-32 text-center scroll-reveal", children: [_jsx("h3", { className: "text-4xl font-bold mb-12", dangerouslySetInnerHTML: { __html: data.integral_system.gamification.title } }), _jsx("p", { className: "text-xl text-gray-300 max-w-3xl mx-auto mb-16", children: data.integral_system.gamification.subtitle }), _jsx("div", { className: "grid md:grid-cols-3 gap-8 max-w-5xl mx-auto", children: data.integral_system.gamification.cards.map((card, index) => (_jsxs("div", { className: "glass-strong rounded-2xl p-6", children: [_jsx("div", { className: "text-yellow-400 text-5xl mb-4", children: _jsx("i", { className: card.icon }) }), _jsx("h4", { className: "text-xl font-bold mb-2", children: card.title }), _jsx("p", { className: "text-gray-400", children: card.description }), _jsx("div", { className: "mt-4 bg-gray-900/50 rounded-full p-3 font-mono text-lg", dangerouslySetInnerHTML: { __html: card.stat } })] }, index))) })] })] }), _jsx(LandingSection, { data: data.testimonials, children: _jsx("div", { className: "grid lg:grid-cols-3 gap-12 max-w-7xl mx-auto", children: data.testimonials.reviews.map((testimonial, index) => (_jsx("div", { className: "scroll-reveal", style: { animationDelay: `${index * 0.1}s` }, children: _jsx(LandingTestimonialCard, { data: testimonial }) }, index))) }) }), _jsx(LandingSection, { data: data.pricing, children: _jsxs("div", { className: "max-w-5xl mx-auto", children: [_jsx("div", { className: "glass-premium rounded-3xl p-12 mb-16 scroll-reveal" }), _jsx("div", { className: "glass-premium rounded-3xl p-12 text-center scroll-reveal" })] }) }), _jsx(LandingCta, { title: data.cta.title, subtitle: data.cta.subtitle, buttonText: data.cta.button_text, trustText: data.cta.trust_text, onButtonClick: scrollToWaitlist })] }), _jsx(LandingFooter, { data: data.footer })] }));
|
|
33
|
+
};
|
|
34
|
+
export default LandingPage;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface LandingSectionProps {
|
|
3
|
+
data?: {
|
|
4
|
+
id?: string;
|
|
5
|
+
header?: {
|
|
6
|
+
badge?: string;
|
|
7
|
+
title: string;
|
|
8
|
+
subtitle: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
declare const LandingSection: React.FC<LandingSectionProps>;
|
|
14
|
+
export default LandingSection;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const LandingSection = ({ data, children }) => {
|
|
3
|
+
if (!data?.header) {
|
|
4
|
+
return _jsx(_Fragment, { children: children });
|
|
5
|
+
}
|
|
6
|
+
return (_jsx("section", { id: data.id, className: 'py-40 bg-linear-to-b from-gray-900/50 to-gray-800/50 relative', children: _jsxs("div", { className: 'container mx-auto px-6', children: [_jsxs("div", { className: 'text-center mb-32 scroll-reveal', children: [data.header.badge && (_jsx("div", { className: 'inline-block mb-6', children: _jsx("span", { className: 'bg-linear-to-r from-purple-500/20 to-cyan-500/20 border border-purple-500/30 rounded-full px-8 py-3 text-sm font-mono font-bold uppercase tracking-wider', children: data.header.badge }) })), _jsx("h2", { className: 'text-5xl md:text-7xl font-black mb-8 leading-tight', dangerouslySetInnerHTML: { __html: data.header.title } }), _jsx("p", { className: 'text-xl md:text-2xl text-gray-300 max-w-4xl mx-auto leading-relaxed', dangerouslySetInnerHTML: { __html: data.header.subtitle } })] }), children] }) }));
|
|
7
|
+
};
|
|
8
|
+
export default LandingSection;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface LandingTestimonialCardProps {
|
|
3
|
+
data: {
|
|
4
|
+
author: string;
|
|
5
|
+
role: string;
|
|
6
|
+
quote: string;
|
|
7
|
+
tagline: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
declare const LandingTestimonialCard: React.FC<LandingTestimonialCardProps>;
|
|
11
|
+
export default LandingTestimonialCard;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import LandingCard from './landing-card'; // Assuming LandingCard is now a React component
|
|
3
|
+
const LandingTestimonialCard = ({ data }) => {
|
|
4
|
+
if (!data)
|
|
5
|
+
return null;
|
|
6
|
+
const authorInitials = data.author?.split(' ').map(n => n[0]).join('');
|
|
7
|
+
return (_jsx(LandingCard, { children: _jsxs("div", { className: "glass-premium rounded-3xl p-10 hover:scale-105 transition-all duration-500 h-full flex flex-col", children: [_jsxs("div", { className: "flex-grow", children: [_jsxs("div", { className: "flex items-center mb-8", children: [_jsx("div", { className: "w-16 h-16 bg-linear-to-br from-purple-500 to-pink-500 rounded-full flex items-center justify-center mr-6 text-xl font-bold shadow-xl flex-shrink-0", children: authorInitials }), _jsxs("div", { children: [_jsx("h4", { className: "text-xl font-bold text-white", children: data.author }), _jsx("p", { className: "text-gray-400", children: data.role }), _jsx("div", { className: "flex text-yellow-400 mt-2", children: [...Array(5)].map((_, i) => (_jsx("i", { className: "fas fa-star" }, i))) })] })] }), _jsx("blockquote", { className: "text-gray-300 text-lg italic leading-relaxed mb-6", dangerouslySetInnerHTML: { __html: `"${data.quote}"` } })] }), _jsx("div", { className: "bg-purple-900/30 rounded-xl p-4 border border-purple-500/30 mt-auto", children: _jsxs("div", { className: "text-sm text-purple-300 font-semibold", children: [_jsx("i", { className: "fas fa-trophy mr-2" }), data.tagline] }) })] }) }));
|
|
8
|
+
};
|
|
9
|
+
export default LandingTestimonialCard;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface FormData {
|
|
3
|
+
placeholder: string;
|
|
4
|
+
button_text: string;
|
|
5
|
+
}
|
|
6
|
+
interface SuccessData {
|
|
7
|
+
title: string;
|
|
8
|
+
subtitle: string;
|
|
9
|
+
message: string;
|
|
10
|
+
}
|
|
11
|
+
interface TrustIndicator {
|
|
12
|
+
icon: string;
|
|
13
|
+
color: string;
|
|
14
|
+
text: string;
|
|
15
|
+
}
|
|
16
|
+
interface LandingWaitlistProps {
|
|
17
|
+
data: {
|
|
18
|
+
title: string;
|
|
19
|
+
subtitle: string;
|
|
20
|
+
urgency: string;
|
|
21
|
+
form: FormData;
|
|
22
|
+
success: SuccessData;
|
|
23
|
+
trust_indicators: TrustIndicator[];
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
declare const LandingWaitlist: React.FC<LandingWaitlistProps>;
|
|
27
|
+
export default LandingWaitlist;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import LandingCard from './landing-card'; // Assuming LandingCard is now a React component
|
|
4
|
+
const LandingWaitlist = ({ data }) => {
|
|
5
|
+
const [email, setEmail] = useState('');
|
|
6
|
+
const [showSuccess, setShowSuccess] = useState(false);
|
|
7
|
+
const handleSubmit = (e) => {
|
|
8
|
+
e.preventDefault();
|
|
9
|
+
// Here you would typically send the email to your backend
|
|
10
|
+
console.log('Submitting email:', email);
|
|
11
|
+
setShowSuccess(true);
|
|
12
|
+
setEmail(''); // Clear the input
|
|
13
|
+
};
|
|
14
|
+
if (!data)
|
|
15
|
+
return null;
|
|
16
|
+
return (_jsx("div", { id: "waitlist-section", className: "scroll-reveal max-w-2xl mx-auto mb-20", style: { animationDelay: '0.8s' }, children: _jsxs(LandingCard, { children: [_jsx("div", { className: "absolute inset-0 bg-linear-to-br from-purple-900/20 via-transparent to-cyan-900/20" }), _jsxs("div", { className: "relative z-10", children: [_jsxs("div", { className: "text-center mb-8", children: [_jsx("h3", { className: "text-3xl font-bold mb-4", children: _jsx("span", { className: "gradient-text", children: data.title }) }), _jsx("p", { className: "text-gray-300 text-lg", children: data.subtitle }), _jsxs("div", { className: "inline-flex items-center mt-4 bg-yellow-900/30 border border-yellow-500/30 rounded-full px-4 py-2 text-sm", children: [_jsx("i", { className: "fas fa-fire text-yellow-400 mr-2" }), _jsx("span", { className: "text-yellow-300", dangerouslySetInnerHTML: { __html: data.urgency } })] })] }), !showSuccess ? (_jsxs("form", { id: "waitlistForm", className: "form-premium space-y-6", onSubmit: handleSubmit, children: [_jsxs("div", { className: "relative group", children: [_jsx("div", { className: "absolute inset-y-0 left-0 pl-6 flex items-center pointer-events-none", children: _jsx("i", { className: "fas fa-envelope text-gray-400 group-focus-within:text-purple-400 transition-colors" }) }), _jsx("input", { type: "email", id: "email", required: true, placeholder: data.form.placeholder, value: email, onChange: (e) => setEmail(e.target.value), className: "w-full pl-14 pr-6 py-6 rounded-2xl text-white placeholder-gray-400 text-lg font-medium focus:outline-none" })] }), _jsx("button", { type: "submit", className: "btn-premium w-full text-white font-bold py-6 px-8 rounded-2xl text-lg relative overflow-hidden group", children: _jsxs("span", { className: "relative z-10 flex items-center justify-center", children: [_jsx("i", { className: "fas fa-rocket mr-3" }), data.form.button_text, _jsx("i", { className: "fas fa-arrow-right ml-3 group-hover:translate-x-1 transition-transform" })] }) })] })) : (_jsx("div", { id: "successMessage", className: "mt-8", children: _jsxs("div", { className: "bg-linear-to-r from-green-900/40 to-emerald-900/40 border-2 border-green-500/30 rounded-3xl p-8 text-center", children: [_jsx("div", { className: "text-6xl mb-4", children: "\uD83C\uDF89" }), _jsx("h4", { className: "text-2xl font-bold text-green-400 mb-3", children: data.success.title }), _jsx("p", { className: "text-green-300 mb-4 text-lg", children: data.success.subtitle }), _jsx("div", { className: "bg-green-900/30 rounded-xl p-4", children: _jsxs("p", { className: "text-sm text-green-300", children: [_jsx("i", { className: "fas fa-check-circle mr-2" }), data.success.message] }) })] }) })), _jsx("div", { className: "mt-8 text-center", children: _jsx("div", { className: "flex flex-wrap items-center justify-center gap-6 text-sm text-gray-400", children: data.trust_indicators.map((indicator, index) => (_jsxs("div", { className: "flex items-center", children: [_jsx("i", { className: `${indicator.icon} mr-2 ${indicator.color}` }), _jsx("span", { children: indicator.text })] }, index))) }) })] })] }) }));
|
|
17
|
+
};
|
|
18
|
+
export default LandingWaitlist;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { useTheme } from '@decido/ui-kit';
|
|
4
|
+
const ColorPicker = ({ label, tokenName, value }) => {
|
|
5
|
+
const [color, setColor] = useState(value);
|
|
6
|
+
const { setToken } = useTheme();
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
setColor(value);
|
|
9
|
+
}, [value]);
|
|
10
|
+
const handleInput = (e) => {
|
|
11
|
+
const newValue = e.target.value;
|
|
12
|
+
setColor(newValue);
|
|
13
|
+
// setToken expects the key name without the --ds- prefix, as defined in useTheme.ts
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
setToken(tokenName, newValue);
|
|
16
|
+
};
|
|
17
|
+
return (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { htmlFor: `color-input-${tokenName}`, children: label }), _jsx("input", { id: `color-input-${tokenName}`, type: "color", className: "w-10 h-8 border-none bg-transparent cursor-pointer", value: color, onChange: handleInput })] }));
|
|
18
|
+
};
|
|
19
|
+
export default ColorPicker;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useTheme } from '@decido/ui-kit';
|
|
3
|
+
import ColorPicker from './ColorPicker';
|
|
4
|
+
import DecidoButton from '../DecidoButton';
|
|
5
|
+
const ThemePanel = () => {
|
|
6
|
+
const { currentThemeId, getAllPresets, setTheme } = useTheme();
|
|
7
|
+
const presets = getAllPresets();
|
|
8
|
+
return (_jsxs("div", { className: "p-6 glass-card rounded-2xl space-y-8", children: [_jsxs("div", { children: [_jsx("h3", { className: "font-bold text-lg mb-4", children: "Temas Disponibles (Aura)" }), _jsx("div", { className: "flex gap-4 flex-wrap", children: presets.map(preset => (
|
|
9
|
+
//@ts-ignore
|
|
10
|
+
_jsx(DecidoButton, { onClick: () => setTheme(preset.id), className: `btn-secondary ${currentThemeId === preset.id ? 'ring-2 ring-primary' : ''}`, children: preset.name }, preset.id))) })] }), _jsxs("div", { children: [_jsx("h3", { className: "font-bold text-lg mb-4", children: "Personalizaci\u00F3n Manual" }), _jsxs("div", { className: "space-y-3", children: [_jsx(ColorPicker, { label: "Superficie Primaria", tokenName: "surface-primary", value: "#0a0a0f" }), _jsx(ColorPicker, { label: "Acento Principal", tokenName: "accent-blue", value: "#4a9eff" }), _jsx(ColorPicker, { label: "Texto Principal", tokenName: "text-primary", value: "#e8e8f0" })] })] })] }));
|
|
11
|
+
};
|
|
12
|
+
export default ThemePanel;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Este es el punto de entrada público para la librería @decido/ui-kit.
|
|
3
|
+
* Exporta las clases de los componentes para que puedan ser usadas para tipado
|
|
4
|
+
* o extensión en otros paquetes, e importa los archivos para asegurar
|
|
5
|
+
* que se ejecute `customElements.define` (efecto secundario).
|
|
6
|
+
*/
|
|
7
|
+
import WelcomeView from './components/WelcomeView';
|
|
8
|
+
import LoginView from './components/LoginView';
|
|
9
|
+
import DebugPanel from './components/DebugPanel';
|
|
10
|
+
import DebugPanelManager from './components/DebugPanelManager';
|
|
11
|
+
import ColorPicker from './components/theming/ColorPicker';
|
|
12
|
+
import ThemePanel from './components/theming/ThemePanel';
|
|
13
|
+
export { WelcomeView, LoginView, DebugPanel, DebugPanelManager, ColorPicker, ThemePanel };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// utils
|
|
2
|
+
/**
|
|
3
|
+
* Este es el punto de entrada público para la librería @decido/ui-kit.
|
|
4
|
+
* Exporta las clases de los componentes para que puedan ser usadas para tipado
|
|
5
|
+
* o extensión en otros paquetes, e importa los archivos para asegurar
|
|
6
|
+
* que se ejecute `customElements.define` (efecto secundario).
|
|
7
|
+
*/
|
|
8
|
+
// --- Componentes Reutilizables ---
|
|
9
|
+
// Se exportan tanto la clase (para tipado) como el módulo (para registro).
|
|
10
|
+
// export * from './components/card/DecidoCard.js';
|
|
11
|
+
import WelcomeView from './components/WelcomeView';
|
|
12
|
+
import LoginView from './components/LoginView';
|
|
13
|
+
import DebugPanel from './components/DebugPanel';
|
|
14
|
+
import DebugPanelManager from './components/DebugPanelManager';
|
|
15
|
+
import ColorPicker from './components/theming/ColorPicker';
|
|
16
|
+
import ThemePanel from './components/theming/ThemePanel';
|
|
17
|
+
export { WelcomeView, LoginView, DebugPanel, DebugPanelManager, ColorPicker, ThemePanel };
|
|
18
|
+
// --- Componentes Complejos o de Secciones ---
|
|
19
|
+
// (Puede que solo necesites importarlos para registro si no se usan directamente)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function setupCounter(element: HTMLButtonElement): void;
|
package/eslint.config.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@decido/ui",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts"
|
|
11
|
+
},
|
|
12
|
+
"./base.css": "./src/css/base.css",
|
|
13
|
+
"./layout.css": "./src/css/layout.css",
|
|
14
|
+
"./landing.css": "./src/components/base/landing.css",
|
|
15
|
+
"./style.css": "./src/css/style.css"
|
|
16
|
+
},
|
|
17
|
+
"license": "UNLICENSED",
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@types/react": "^18.3.3",
|
|
20
|
+
"@types/react-dom": "^18.3.0",
|
|
21
|
+
"autoprefixer": "10",
|
|
22
|
+
"eslint": "^9.31.0",
|
|
23
|
+
"postcss": "8",
|
|
24
|
+
"tailwindcss": "3",
|
|
25
|
+
"typescript": "5.5.4",
|
|
26
|
+
"react": "^18.3.1",
|
|
27
|
+
"react-dom": "^18.3.1"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@fortawesome/fontawesome-free": "^6.7.2",
|
|
31
|
+
"@decido/shell-vscode-core": "1.0.0",
|
|
32
|
+
"@decido/ui-kit": "2.0.0",
|
|
33
|
+
"@decido/core": "0.1.0"
|
|
34
|
+
},
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"react": "^18.0.0",
|
|
37
|
+
"react-dom": "^18.0.0"
|
|
38
|
+
},
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsup src/index.ts --format esm --dts --minify --clean",
|
|
44
|
+
"dev": "tsc -w",
|
|
45
|
+
"clean": "rimraf dist"
|
|
46
|
+
}
|
|
47
|
+
}
|