@axzydev/axzy_ui_system 1.2.7 → 1.2.9
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 +105 -53
- package/dist/index.cjs +576 -398
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +1463 -86
- package/dist/index.d.ts +1463 -86
- package/dist/index.js +597 -417
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/App.tsx +26 -54
- package/src/components/alert/alert.doc.mdx +48 -0
- package/src/components/alert/alert.props.ts +7 -0
- package/src/components/alert/alert.tsx +8 -0
- package/src/components/avatar/avatar.doc.mdx +48 -0
- package/src/components/avatar/avatar.props.ts +8 -0
- package/src/components/avatar/avatar.tsx +25 -5
- package/src/components/badget/badget.doc.mdx +46 -0
- package/src/components/badget/badget.props.ts +6 -0
- package/src/components/badget/badget.tsx +11 -0
- package/src/components/breadcrumbs/breadcrumbs.doc.mdx +57 -0
- package/src/components/breadcrumbs/breadcrumbs.props.ts +6 -0
- package/src/components/breadcrumbs/breadcrumbs.tsx +12 -0
- package/src/components/button/button.doc.mdx +59 -0
- package/src/components/button/button.props.ts +12 -0
- package/src/components/button/button.tsx +11 -0
- package/src/components/calendar/calendar.doc.mdx +75 -0
- package/src/components/calendar/calendar.props.ts +27 -7
- package/src/components/calendar/calendar.tsx +13 -0
- package/src/components/card/card.doc.mdx +54 -0
- package/src/components/card/card.props.ts +11 -0
- package/src/components/card/card.tsx +13 -0
- package/src/components/checkbox/checkbox.doc.mdx +54 -0
- package/src/components/checkbox/checkbox.props.ts +7 -0
- package/src/components/checkbox/checkbox.tsx +9 -0
- package/src/components/confirm-dialog/confirm-dialog.doc.mdx +60 -0
- package/src/components/confirm-dialog/confirm-dialog.props.ts +9 -0
- package/src/components/confirm-dialog/confirm-dialog.tsx +19 -0
- package/src/components/data-table/ITDataTable.doc.mdx +59 -0
- package/src/components/data-table/dataTable.props.ts +15 -0
- package/src/components/data-table/dataTable.tsx +178 -73
- package/src/components/date-picker/date-picker.doc.mdx +65 -0
- package/src/components/date-picker/date-picker.props.ts +17 -0
- package/src/components/date-picker/datePicker.tsx +31 -1
- package/src/components/dialog/dialog.doc.mdx +54 -0
- package/src/components/dialog/dialog.props.ts +7 -0
- package/src/components/dialog/dialog.tsx +26 -0
- package/src/components/divider/divider.doc.mdx +42 -0
- package/src/components/divider/divider.props.ts +5 -0
- package/src/components/divider/divider.tsx +16 -0
- package/src/components/drawer/drawer.doc.mdx +59 -0
- package/src/components/drawer/drawer.props.ts +9 -0
- package/src/components/drawer/drawer.tsx +20 -0
- package/src/components/dropfile/dropfile.doc.mdx +59 -0
- package/src/components/dropfile/dropfile.props.ts +41 -0
- package/src/components/dropfile/dropfile.tsx +21 -33
- package/src/components/empty-state/empty-state.doc.mdx +50 -0
- package/src/components/empty-state/empty-state.props.ts +5 -0
- package/src/components/empty-state/empty-state.tsx +16 -0
- package/src/components/flex/flex.doc.mdx +59 -0
- package/src/components/flex/flex.props.ts +13 -0
- package/src/components/flex/flex.tsx +15 -0
- package/src/components/form-builder/fieldRenderer.tsx +52 -2
- package/src/components/form-builder/formBuilder.doc.mdx +124 -0
- package/src/components/form-builder/formBuilder.props.ts +12 -2
- package/src/components/form-builder/formBuilder.tsx +31 -0
- package/src/components/form-header/form-header.doc.mdx +38 -0
- package/src/components/form-header/form-header.props.ts +3 -0
- package/src/components/form-header/form-header.stories.tsx +53 -0
- package/src/components/form-header/form-header.tsx +11 -0
- package/src/components/grid/grid.doc.mdx +54 -0
- package/src/components/grid/grid.props.ts +13 -0
- package/src/components/grid/grid.tsx +19 -0
- package/src/components/image/image.doc.mdx +44 -0
- package/src/components/image/image.props.ts +5 -0
- package/src/components/image/image.stories.tsx +49 -0
- package/src/components/image/image.tsx +19 -0
- package/src/components/input/input.doc.mdx +70 -0
- package/src/components/input/input.props.ts +34 -2
- package/src/components/input/input.tsx +29 -0
- package/src/components/layout/layout.doc.mdx +51 -0
- package/src/components/layout/layout.props.ts +5 -0
- package/src/components/layout/layout.tsx +29 -2
- package/src/components/loader/loader.doc.mdx +43 -0
- package/src/components/loader/loader.props.ts +4 -0
- package/src/components/loader/loader.tsx +17 -0
- package/src/components/navbar/navbar.doc.mdx +77 -0
- package/src/components/navbar/navbar.props.ts +37 -1
- package/src/components/navbar/navbar.stories.tsx +84 -0
- package/src/components/navbar/navbar.tsx +27 -0
- package/src/components/page/page.doc.mdx +80 -0
- package/src/components/page/page.props.ts +21 -0
- package/src/components/page/page.tsx +18 -0
- package/src/components/page-header/page-header.doc.mdx +54 -0
- package/src/components/page-header/page-header.props.ts +9 -0
- package/src/components/page-header/page-header.tsx +15 -0
- package/src/components/pagination/pagination.doc.mdx +62 -0
- package/src/components/pagination/pagination.props.ts +11 -32
- package/src/components/pagination/pagination.tsx +17 -0
- package/src/components/popover/popover.doc.mdx +53 -0
- package/src/components/popover/popover.props.ts +8 -0
- package/src/components/popover/popover.tsx +13 -0
- package/src/components/progress/progress.doc.mdx +48 -0
- package/src/components/progress/progress.props.ts +8 -0
- package/src/components/progress/progress.tsx +9 -0
- package/src/components/radio/radio.doc.mdx +62 -0
- package/src/components/radio/radio.props.ts +11 -0
- package/src/components/radio/radio.tsx +18 -0
- package/src/components/search-select/search-select.doc.mdx +72 -0
- package/src/components/search-select/search-select.props.ts +23 -18
- package/src/components/search-select/search-select.tsx +27 -2
- package/src/components/searchTable/searchTable.doc.mdx +79 -0
- package/src/components/searchTable/searchTable.props.ts +42 -3
- package/src/components/searchTable/searchTable.stories.tsx +74 -0
- package/src/components/searchTable/searchTable.tsx +23 -0
- package/src/components/segmented-control/segmented-control.doc.mdx +60 -0
- package/src/components/segmented-control/segmented-control.props.ts +12 -0
- package/src/components/segmented-control/segmented-control.tsx +15 -0
- package/src/components/select/select.doc.mdx +75 -0
- package/src/components/select/select.props.ts +22 -0
- package/src/components/select/select.tsx +2 -5
- package/src/components/sidebar/sidebar.doc.mdx +86 -0
- package/src/components/sidebar/sidebar.props.ts +22 -0
- package/src/components/sidebar/sidebar.tsx +22 -0
- package/src/components/skeleton/skeleton.doc.mdx +43 -0
- package/src/components/skeleton/skeleton.props.ts +8 -0
- package/src/components/skeleton/skeleton.tsx +10 -0
- package/src/components/slide/slide.doc.mdx +46 -0
- package/src/components/slide/slide.props.ts +11 -24
- package/src/components/slide/slide.tsx +10 -1
- package/src/components/slider/slider.doc.mdx +49 -0
- package/src/components/slider/slider.props.ts +9 -0
- package/src/components/slider/slider.tsx +15 -0
- package/src/components/stack/stack.doc.mdx +126 -0
- package/src/components/stack/stack.props.ts +18 -0
- package/src/components/stack/stack.stories.tsx +221 -16
- package/src/components/stack/stack.tsx +21 -0
- package/src/components/stat-card/stat-card.doc.mdx +48 -0
- package/src/components/stat-card/stat-card.props.ts +9 -0
- package/src/components/stat-card/stat-card.tsx +10 -0
- package/src/components/stepper/stepper.doc.mdx +54 -0
- package/src/components/stepper/stepper.props.ts +11 -1
- package/src/components/stepper/stepper.tsx +15 -0
- package/src/components/table/table.doc.mdx +58 -0
- package/src/components/table/table.props.ts +17 -0
- package/src/components/table/table.tsx +199 -84
- package/src/components/tabs/tabs.doc.mdx +52 -0
- package/src/components/tabs/tabs.props.ts +11 -0
- package/src/components/tabs/tabs.tsx +14 -0
- package/src/components/text/text.doc.mdx +41 -0
- package/src/components/text/text.props.ts +5 -0
- package/src/components/text/text.stories.tsx +67 -0
- package/src/components/text/text.tsx +10 -0
- package/src/components/textarea/textarea.doc.mdx +64 -0
- package/src/components/textarea/textarea.props.ts +11 -0
- package/src/components/textarea/textarea.tsx +16 -0
- package/src/components/theme-provider/themeProvider.doc.mdx +75 -0
- package/src/components/theme-provider/themeProvider.props.ts +3 -0
- package/src/components/theme-provider/themeProvider.stories.tsx +59 -0
- package/src/components/theme-provider/themeProvider.tsx +14 -0
- package/src/components/time-picker/timePicker.doc.mdx +68 -0
- package/src/components/time-picker/timePicker.props.ts +14 -0
- package/src/components/time-picker/timePicker.tsx +22 -1
- package/src/components/toast/toast.doc.mdx +50 -0
- package/src/components/toast/toast.props.ts +5 -0
- package/src/components/toast/toast.tsx +21 -0
- package/src/components/tooltip/tooltip.doc.mdx +47 -0
- package/src/components/tooltip/tooltip.props.ts +6 -0
- package/src/components/tooltip/tooltip.tsx +19 -0
- package/src/components/topbar/topbar.doc.mdx +69 -0
- package/src/components/topbar/topbar.props.ts +15 -0
- package/src/components/topbar/topbar.tsx +38 -0
- package/src/components/triple-filter/tripleFilter.doc.mdx +62 -0
- package/src/components/triple-filter/tripleFilter.props.ts +7 -0
- package/src/components/triple-filter/tripleFilter.tsx +32 -0
- package/src/index.css +2 -0
- package/src/showcases/DataShowcases.tsx +529 -45
- package/src/showcases/FormShowcases.tsx +399 -29
- package/src/showcases/GettingStartedShowcase.tsx +207 -0
- package/src/showcases/HomeShowcase.tsx +252 -272
- package/src/showcases/LayoutPrimitivesShowcases.tsx +1224 -248
- package/src/showcases/PageShowcases.tsx +688 -391
- package/src/showcases/ShowcaseLayout.tsx +237 -73
- package/src/showcases/StructureShowcases.tsx +846 -73
- package/src/types/table.types.ts +1 -1
- package/src/utils/styles.ts +2 -1
|
@@ -1,87 +1,75 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { FaSearch } from "react-icons/fa";
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
import { FaCloud, FaCode, FaDatabase, FaDownload, FaGithub, FaLayerGroup, FaLinkedin, FaMapMarkerAlt, FaMobileAlt, FaSearch, FaServer, FaMedium } from "react-icons/fa";
|
|
3
|
+
import ITBadget from "../components/badget/badget";
|
|
4
|
+
import ITButton from "../components/button/button";
|
|
5
|
+
import ITCard from "../components/card/card";
|
|
6
|
+
import ITDivider from "../components/divider/divider";
|
|
7
|
+
import ITFlex from "../components/flex/flex";
|
|
8
|
+
import ITGrid from "../components/grid/grid";
|
|
9
|
+
import ITStack from "../components/stack/stack";
|
|
10
|
+
import ITText from "../components/text/text";
|
|
3
11
|
|
|
4
12
|
export const HomeShowcase = () => {
|
|
5
13
|
const [techSearch, setTechSearch] = useState("");
|
|
6
14
|
const [selectedCategory, setSelectedCategory] = useState("all");
|
|
7
15
|
|
|
8
16
|
const LANGUAGES = [
|
|
9
|
-
{
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
name: "JavaScript",
|
|
16
|
-
icon: "https://raw.githubusercontent.com/devicons/devicon/master/icons/javascript/javascript-original.svg",
|
|
17
|
-
color: "#f7df1e"
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
name: "C#",
|
|
21
|
-
icon: "https://raw.githubusercontent.com/devicons/devicon/master/icons/csharp/csharp-original.svg",
|
|
22
|
-
color: "#178600"
|
|
23
|
-
}
|
|
17
|
+
{ name: "TypeScript", icon: "https://icongr.am/devicon/typescript-original.svg?size=128&color=currentColor" },
|
|
18
|
+
{ name: "JavaScript", icon: "https://icongr.am/devicon/javascript-original.svg?size=128&color=currentColor" },
|
|
19
|
+
{ name: "C#", icon: "https://icongr.am/devicon/csharp-original.svg?size=128&color=currentColor" },
|
|
20
|
+
{ name: "Python", icon: "https://icongr.am/devicon/python-original.svg?size=128&color=currentColor" },
|
|
21
|
+
{ name: "Kotlin", icon: "https://devicons.railway.app/i/kotlin.svg" },
|
|
22
|
+
{ name: "Dart", icon: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/dart/dart-original.svg" },
|
|
24
23
|
];
|
|
25
24
|
|
|
26
25
|
const FRAMEWORKS = [
|
|
27
|
-
{
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
color: "#61dafb"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
name: "Ionic",
|
|
39
|
-
icon: "https://icongr.am/devicon/ionic-original.svg?size=128&color=currentColor",
|
|
40
|
-
color: "#3880ff"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
name: ".NET / ASP.NET",
|
|
44
|
-
icon: "https://icongr.am/devicon/dot-net-original.svg?size=128&color=currentColor",
|
|
45
|
-
color: "#512bd4"
|
|
46
|
-
}
|
|
26
|
+
{ name: "Angular", icon: "https://icongr.am/devicon/angularjs-original.svg?size=128&color=currentColor" },
|
|
27
|
+
{ name: "React", icon: "https://icongr.am/devicon/react-original.svg?size=128&color=currentColor" },
|
|
28
|
+
{ name: "Ionic", icon: "https://icongr.am/devicon/ionic-original.svg?size=128&color=currentColor" },
|
|
29
|
+
{ name: ".NET", icon: "https://icongr.am/devicon/dot-net-original.svg?size=128&color=currentColor" },
|
|
30
|
+
{ name: "Node.js", icon: "https://icongr.am/devicon/nodejs-original.svg?size=128&color=currentColor" },
|
|
31
|
+
{ name: "Flutter", icon: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/flutter/flutter-original.svg" },
|
|
32
|
+
{ name: "Express", icon: "https://icongr.am/devicon/express-original-wordmark.svg?size=128&color=currentColor" },
|
|
33
|
+
{ name: "Electron", icon: "https://icongr.am/devicon/electron-original.svg?size=128&color=currentColor" },
|
|
47
34
|
];
|
|
48
35
|
|
|
49
36
|
const TECH_STACK = [
|
|
50
|
-
{ name: "
|
|
37
|
+
{ name: "TypeScript", icon: "https://icongr.am/devicon/typescript-original.svg?size=128&color=currentColor", category: "frontend" },
|
|
38
|
+
{ name: "JavaScript", icon: "https://icongr.am/devicon/javascript-original.svg?size=128&color=currentColor", category: "frontend" },
|
|
51
39
|
{ name: "Angular", icon: "https://icongr.am/devicon/angularjs-original.svg?size=128&color=currentColor", category: "frontend" },
|
|
52
|
-
{ name: "
|
|
40
|
+
{ name: "React", icon: "https://icongr.am/devicon/react-original.svg?size=128&color=currentColor", category: "frontend" },
|
|
41
|
+
{ name: "Redux", icon: "https://devicons.railway.app/i/redux.svg", category: "frontend" },
|
|
42
|
+
{ name: "HTML5", icon: "https://icongr.am/devicon/html5-original.svg?size=128&color=currentColor", category: "frontend" },
|
|
53
43
|
{ name: "CSS3", icon: "https://icongr.am/devicon/css3-original.svg?size=128&color=currentColor", category: "frontend" },
|
|
54
44
|
{ name: "Sass", icon: "https://icongr.am/devicon/sass-original.svg?size=128&color=currentColor", category: "frontend" },
|
|
55
|
-
{ name: "
|
|
56
|
-
{ name: "
|
|
45
|
+
{ name: "C#", icon: "https://icongr.am/devicon/csharp-original.svg?size=128&color=currentColor", category: "backend" },
|
|
46
|
+
{ name: "Python", icon: "https://icongr.am/devicon/python-original.svg?size=128&color=currentColor", category: "backend" },
|
|
47
|
+
{ name: "Node.js", icon: "https://icongr.am/devicon/nodejs-original.svg?size=128&color=currentColor", category: "backend" },
|
|
57
48
|
{ name: "Express", icon: "https://icongr.am/devicon/express-original-wordmark.svg?size=128&color=currentColor", category: "backend" },
|
|
58
|
-
{ name: "
|
|
59
|
-
{ name: "GitHub", icon: "https://icongr.am/devicon/github-original.svg?size=128&color=currentColor", category: "devops", darkInvert: false },
|
|
60
|
-
{ name: "GitLab", icon: "https://icongr.am/devicon/gitlab-original.svg?size=128&color=currentColor", category: "devops" },
|
|
61
|
-
{ name: "HTML5", icon: "https://icongr.am/devicon/html5-original.svg?size=128&color=currentColor", category: "frontend" },
|
|
49
|
+
{ name: ".NET Core", icon: "https://icongr.am/devicon/dot-net-original.svg?size=128&color=currentColor", category: "backend" },
|
|
62
50
|
{ name: "MongoDB", icon: "https://icongr.am/devicon/mongodb-original.svg?size=128&color=currentColor", category: "database" },
|
|
63
51
|
{ name: "MySQL", icon: "https://icongr.am/devicon/mysql-original-wordmark.svg?size=128&color=currentColor", category: "database" },
|
|
64
|
-
{ name: "
|
|
65
|
-
{ name: "React", icon: "https://icongr.am/devicon/react-original.svg?size=128&color=currentColor", category: "frontend" },
|
|
66
|
-
{ name: "Android", icon: "https://icongr.am/devicon/android-original.svg?size=128&color=currentColor", category: "mobile" },
|
|
67
|
-
{ name: "Python", icon: "https://icongr.am/devicon/python-original.svg?size=128&color=currentColor", category: "backend" },
|
|
68
|
-
{ name: "TypeScript", icon: "https://icongr.am/devicon/typescript-original.svg?size=128&color=currentColor", category: "frontend" },
|
|
52
|
+
{ name: "Flutter", icon: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/flutter/flutter-original.svg", category: "mobile" },
|
|
69
53
|
{ name: "Kotlin", icon: "https://devicons.railway.app/i/kotlin.svg", category: "mobile" },
|
|
54
|
+
{ name: "Android", icon: "https://icongr.am/devicon/android-original.svg?size=128&color=currentColor", category: "mobile" },
|
|
55
|
+
{ name: "Ionic", icon: "https://icongr.am/devicon/ionic-original.svg?size=128&color=currentColor", category: "mobile" },
|
|
56
|
+
{ name: "Docker", icon: "https://icongr.am/devicon/docker-original.svg?size=128&color=currentColor", category: "devops" },
|
|
57
|
+
{ name: "Git", icon: "https://icongr.am/devicon/git-original.svg?size=128&color=currentColor", category: "devops" },
|
|
58
|
+
{ name: "GitHub", icon: "https://icongr.am/devicon/github-original.svg?size=128&color=currentColor", category: "devops" },
|
|
59
|
+
{ name: "GitLab", icon: "https://icongr.am/devicon/gitlab-original.svg?size=128&color=currentColor", category: "devops" },
|
|
70
60
|
{ name: "npm", icon: "https://devicons.railway.app/i/npm.svg", category: "devops" },
|
|
71
|
-
{ name: "
|
|
72
|
-
{ name: "Yarn", icon: "https://cdn.iconscout.com/icon/free/png-512/free-yarn-34-1174974.png?f=webp&w=512", category: "devops" },
|
|
61
|
+
{ name: "Electron", icon: "https://icongr.am/devicon/electron-original.svg?size=128&color=currentColor", category: "desktop" },
|
|
73
62
|
{ name: "Visual Studio", icon: "https://icongr.am/devicon/visualstudio-plain.svg?size=128&color=currentColor", category: "tools" },
|
|
74
|
-
{ name: "
|
|
75
|
-
{ name: "Jest", icon: "https://cdn.iconscout.com/icon/free/png-512/free-jest-3521517-2945020.png?f=webp&w=512", category: "testing" }
|
|
63
|
+
{ name: "Jest", icon: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/jest/jest-plain.svg", category: "testing" },
|
|
76
64
|
];
|
|
77
65
|
|
|
78
66
|
const categoriesList = [
|
|
79
|
-
{ id: "all", name: "Todos" },
|
|
80
|
-
{ id: "frontend", name: "Frontend" },
|
|
81
|
-
{ id: "backend", name: "Backend" },
|
|
82
|
-
{ id: "mobile", name: "Móvil" },
|
|
83
|
-
{ id: "database", name: "Bases de Datos" },
|
|
84
|
-
{ id: "devops", name: "DevOps" }
|
|
67
|
+
{ id: "all", name: "Todos", icon: <FaLayerGroup size={10} /> },
|
|
68
|
+
{ id: "frontend", name: "Frontend", icon: <FaCode size={10} /> },
|
|
69
|
+
{ id: "backend", name: "Backend", icon: <FaServer size={10} /> },
|
|
70
|
+
{ id: "mobile", name: "Móvil", icon: <FaMobileAlt size={10} /> },
|
|
71
|
+
{ id: "database", name: "Bases de Datos", icon: <FaDatabase size={10} /> },
|
|
72
|
+
{ id: "devops", name: "DevOps", icon: <FaCloud size={10} /> },
|
|
85
73
|
];
|
|
86
74
|
|
|
87
75
|
const filteredTech = TECH_STACK.filter(tech => {
|
|
@@ -91,234 +79,226 @@ export const HomeShowcase = () => {
|
|
|
91
79
|
});
|
|
92
80
|
|
|
93
81
|
return (
|
|
94
|
-
<
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
.animate-float {
|
|
102
|
-
animation: float 4s ease-in-out infinite;
|
|
103
|
-
}
|
|
104
|
-
@keyframes float-slow {
|
|
105
|
-
0%, 100% { transform: translateY(0px) rotate(0deg); }
|
|
106
|
-
50% { transform: translateY(-15px) rotate(2deg); }
|
|
107
|
-
}
|
|
108
|
-
.animate-float-slow {
|
|
109
|
-
animation: float-slow 6s ease-in-out infinite;
|
|
110
|
-
}
|
|
111
|
-
.animate-fade-in {
|
|
112
|
-
animation: fadeIn 0.5s ease-out forwards;
|
|
113
|
-
}
|
|
114
|
-
@keyframes fadeIn {
|
|
115
|
-
from { opacity: 0; transform: translateY(10px); }
|
|
116
|
-
to { opacity: 1; transform: translateY(0); }
|
|
117
|
-
}
|
|
118
|
-
` }} />
|
|
119
|
-
|
|
120
|
-
{/* Hero Section */}
|
|
121
|
-
<div className="relative overflow-hidden rounded-3xl bg-gradient-to-br from-white/70 to-slate-50/50 dark:from-slate-900/60 dark:to-slate-950/40 border border-slate-100 dark:border-slate-800/80 backdrop-blur-md p-8 md:p-12 shadow-sm">
|
|
122
|
-
<div className="absolute top-0 right-0 w-80 h-80 bg-primary-500/10 rounded-full blur-3xl -z-10 pointer-events-none" />
|
|
123
|
-
<div className="absolute bottom-0 left-0 w-80 h-80 bg-purple-500/5 rounded-full blur-3xl -z-10 pointer-events-none" />
|
|
82
|
+
<ITStack spacing={10}>
|
|
83
|
+
{/* ─── HERO ─── */}
|
|
84
|
+
<ITCard className="overflow-hidden border-0 bg-gradient-to-br from-slate-50 via-white to-primary-50/20 dark:from-slate-950 dark:via-slate-900 dark:to-primary-950/10 shadow-sm">
|
|
85
|
+
<div className="relative">
|
|
86
|
+
<div className="absolute -top-40 -right-40 w-[500px] h-[500px] bg-primary-500/5 rounded-full blur-[120px] pointer-events-none" />
|
|
87
|
+
<div className="absolute -bottom-40 -left-40 w-[500px] h-[500px] bg-purple-500/5 rounded-full blur-[120px] pointer-events-none" />
|
|
124
88
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
</h1>
|
|
138
|
-
</div>
|
|
89
|
+
<ITGrid container spacing={8} className="items-center relative z-10">
|
|
90
|
+
{/* Photo */}
|
|
91
|
+
<ITGrid item xs={12} md={5} className="flex justify-center md:justify-start">
|
|
92
|
+
<ITStack spacing={4} alignItems="center">
|
|
93
|
+
<div className="relative">
|
|
94
|
+
<div className="w-56 h-56 md:w-64 md:h-64 rounded-full shadow-xl overflow-hidden ring-2 ring-slate-200 dark:ring-slate-700">
|
|
95
|
+
<img
|
|
96
|
+
src="/personalFoto.jpg"
|
|
97
|
+
alt="Asael Amaroaqui"
|
|
98
|
+
className="w-full h-full object-cover"
|
|
99
|
+
/>
|
|
100
|
+
</div>
|
|
139
101
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
Desarrollador Fullstack con 4+ años de experiencia desarrollando aplicaciones web usando{" "}
|
|
144
|
-
<strong className="text-primary-500 font-semibold">TypeScript</strong>,{" "}
|
|
145
|
-
<strong className="text-purple-500 font-semibold">Angular 8+</strong>,{" "}
|
|
146
|
-
<strong className="text-indigo-500 font-semibold">JavaScript</strong>, y{" "}
|
|
147
|
-
<strong className="text-blue-500 font-semibold">ReactJS</strong>. Apasionado de los lenguajes de programación modernos
|
|
148
|
-
y las nuevas técnicas de desarrollo. Autodidacta y me encantan los nuevos retos.
|
|
149
|
-
</p>
|
|
150
|
-
</div>
|
|
151
|
-
|
|
152
|
-
<div className="flex flex-wrap gap-3 pt-2">
|
|
153
|
-
<span className="flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-xl bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 font-mono">
|
|
154
|
-
💼 Fullstack Developer
|
|
155
|
-
</span>
|
|
156
|
-
<span className="flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-xl bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 font-mono">
|
|
157
|
-
📅 4+ Años Exp
|
|
158
|
-
</span>
|
|
159
|
-
<span className="flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-xl bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 font-mono">
|
|
160
|
-
🚀 React & Angular
|
|
161
|
-
</span>
|
|
162
|
-
</div>
|
|
163
|
-
</div>
|
|
164
|
-
|
|
165
|
-
{/* Illustration/Image */}
|
|
166
|
-
<div className="lg:col-span-5 flex justify-center">
|
|
167
|
-
<div className="relative group">
|
|
168
|
-
{/* Decorative backglow */}
|
|
169
|
-
<div className="absolute inset-0 bg-gradient-to-tr from-primary-500 to-purple-500 rounded-full blur-2xl opacity-20 group-hover:opacity-35 transition-opacity duration-500" />
|
|
102
|
+
</div>
|
|
103
|
+
</ITStack>
|
|
104
|
+
</ITGrid>
|
|
170
105
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
106
|
+
{/* Text */}
|
|
107
|
+
<ITGrid item xs={12} md={7}>
|
|
108
|
+
<ITStack spacing={5}>
|
|
109
|
+
<ITStack spacing={2}>
|
|
110
|
+
<ITBadget label="Portafolio Personal" color="primary" variant="outlined" className="w-fit" />
|
|
111
|
+
<ITText as="h1" className="text-4xl md:text-5xl font-bold tracking-tight text-slate-900 dark:text-white">
|
|
112
|
+
Hola, soy <span className="text-primary-600 dark:text-primary-400">Asael Amaroaqui</span>
|
|
113
|
+
</ITText>
|
|
114
|
+
<ITText as="p" muted className="text-base leading-relaxed max-w-xl">
|
|
115
|
+
Fullstack Developer con 4+ años de experiencia creando aplicaciones web modernas.
|
|
116
|
+
Especializado en TypeScript, Angular y React. Apasionado por la arquitectura limpia,
|
|
117
|
+
el código escalable y las tecnologías emergentes.
|
|
118
|
+
</ITText>
|
|
119
|
+
</ITStack>
|
|
185
120
|
|
|
186
|
-
{/*
|
|
187
|
-
<
|
|
188
|
-
<
|
|
189
|
-
<
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
<
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
<
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
</
|
|
204
|
-
</
|
|
205
|
-
</
|
|
206
|
-
</
|
|
207
|
-
</div>
|
|
208
|
-
</div>
|
|
209
|
-
</div>
|
|
210
|
-
</div>
|
|
211
|
-
</div>
|
|
121
|
+
{/* Stats */}
|
|
122
|
+
<ITFlex gap={6} wrap="wrap">
|
|
123
|
+
<ITFlex align="center" gap={3}>
|
|
124
|
+
<div className="w-10 h-10 rounded-xl bg-primary-100 dark:bg-primary-950/40 flex items-center justify-center text-primary-600 dark:text-primary-400">
|
|
125
|
+
<FaCode size={16} />
|
|
126
|
+
</div>
|
|
127
|
+
<div>
|
|
128
|
+
<ITText as="div" className="text-lg font-bold text-slate-800 dark:text-white">4+</ITText>
|
|
129
|
+
<ITText as="div" muted className="text-xs font-medium">Años exp.</ITText>
|
|
130
|
+
</div>
|
|
131
|
+
</ITFlex>
|
|
132
|
+
<ITFlex align="center" gap={3}>
|
|
133
|
+
<div className="w-10 h-10 rounded-xl bg-purple-100 dark:bg-purple-950/40 flex items-center justify-center text-purple-600 dark:text-purple-400">
|
|
134
|
+
<FaMapMarkerAlt size={16} />
|
|
135
|
+
</div>
|
|
136
|
+
<div>
|
|
137
|
+
<ITText as="div" className="text-lg font-bold text-slate-800 dark:text-white">Remoto</ITText>
|
|
138
|
+
<ITText as="div" muted className="text-xs font-medium">Disponible</ITText>
|
|
139
|
+
</div>
|
|
140
|
+
</ITFlex>
|
|
141
|
+
</ITFlex>
|
|
212
142
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
143
|
+
{/* CTAs */}
|
|
144
|
+
<ITFlex gap={2.5} wrap="wrap" align="center">
|
|
145
|
+
<a href="/Martin_Amaro_CV_ES_2026.pdf" download>
|
|
146
|
+
<ITButton variant="filled" color="primary" size="small">
|
|
147
|
+
<ITFlex align="center" gap={2}>
|
|
148
|
+
<FaDownload size={12} />
|
|
149
|
+
Descargar CV
|
|
150
|
+
</ITFlex>
|
|
151
|
+
</ITButton>
|
|
152
|
+
</a>
|
|
153
|
+
<ITText as="span" muted className="text-xs">|</ITText>
|
|
154
|
+
<a href="https://github.com/maag070208" target="_blank" rel="noopener noreferrer">
|
|
155
|
+
<ITButton variant="text" color="gray" size="small">
|
|
156
|
+
<ITFlex align="center" gap={1.5}>
|
|
157
|
+
<FaGithub size={14} />
|
|
158
|
+
GitHub
|
|
159
|
+
</ITFlex>
|
|
160
|
+
</ITButton>
|
|
161
|
+
</a>
|
|
162
|
+
<a href="https://www.linkedin.com/in/maag070208/" target="_blank" rel="noopener noreferrer">
|
|
163
|
+
<ITButton variant="text" color="gray" size="small">
|
|
164
|
+
<ITFlex align="center" gap={1.5}>
|
|
165
|
+
<FaLinkedin size={14} />
|
|
166
|
+
LinkedIn
|
|
167
|
+
</ITFlex>
|
|
168
|
+
</ITButton>
|
|
169
|
+
</a>
|
|
170
|
+
<a href="https://medium.com/@axzydev" target="_blank" rel="noopener noreferrer">
|
|
171
|
+
<ITButton variant="text" color="gray" size="small">
|
|
172
|
+
<ITFlex align="center" gap={1.5}>
|
|
173
|
+
<FaMedium size={14} />
|
|
174
|
+
Medium
|
|
175
|
+
</ITFlex>
|
|
176
|
+
</ITButton>
|
|
177
|
+
</a>
|
|
178
|
+
</ITFlex>
|
|
179
|
+
</ITStack>
|
|
180
|
+
</ITGrid>
|
|
181
|
+
</ITGrid>
|
|
233
182
|
</div>
|
|
183
|
+
</ITCard>
|
|
234
184
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
185
|
+
{/* ─── SKILLS ─── */}
|
|
186
|
+
<ITGrid container spacing={6}>
|
|
187
|
+
<ITGrid item xs={12} md={6}>
|
|
188
|
+
<ITCard title="Lenguajes" className="border-slate-200/60 dark:border-slate-800/60 shadow-sm">
|
|
189
|
+
<ITStack spacing={4}>
|
|
190
|
+
<ITGrid container spacing={3}>
|
|
191
|
+
{LANGUAGES.map((lang) => (
|
|
192
|
+
<ITGrid item xs={4} sm={4} key={lang.name}>
|
|
193
|
+
<div className="group flex flex-col items-center gap-2.5 p-3.5 rounded-xl bg-white/80 dark:bg-slate-900/60 border border-slate-100 dark:border-slate-800 hover:border-primary-400/40 hover:shadow-md hover:-translate-y-0.5 transition-all duration-200">
|
|
194
|
+
<div className="w-10 h-10 flex items-center justify-center rounded-lg bg-slate-50 dark:bg-slate-950/40 border border-slate-100 dark:border-slate-800/80 group-hover:scale-110 transition-transform duration-200">
|
|
195
|
+
<img src={lang.icon} alt={lang.name} className="w-7 h-7 object-contain" />
|
|
196
|
+
</div>
|
|
197
|
+
<ITText as="span" className="text-[11px] font-semibold text-slate-600 dark:text-slate-300 text-center">
|
|
198
|
+
{lang.name}
|
|
199
|
+
</ITText>
|
|
200
|
+
</div>
|
|
201
|
+
</ITGrid>
|
|
202
|
+
))}
|
|
203
|
+
</ITGrid>
|
|
204
|
+
</ITStack>
|
|
205
|
+
</ITCard>
|
|
206
|
+
</ITGrid>
|
|
255
207
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
208
|
+
<ITGrid item xs={12} md={6}>
|
|
209
|
+
<ITCard title="Frameworks" className="border-slate-200/60 dark:border-slate-800/60 shadow-sm">
|
|
210
|
+
<ITStack spacing={4}>
|
|
211
|
+
<ITGrid container spacing={2}>
|
|
212
|
+
{FRAMEWORKS.map((fw) => (
|
|
213
|
+
<ITGrid item xs={3} key={fw.name}>
|
|
214
|
+
<div className="group flex flex-col items-center gap-2 p-3 rounded-xl bg-white/80 dark:bg-slate-900/60 border border-slate-100 dark:border-slate-800 hover:border-purple-400/40 hover:shadow-md hover:-translate-y-0.5 transition-all duration-200">
|
|
215
|
+
<div className="w-9 h-9 flex items-center justify-center rounded-lg bg-slate-50 dark:bg-slate-950/40 border border-slate-100 dark:border-slate-800/80 group-hover:scale-110 transition-transform duration-200">
|
|
216
|
+
<img src={fw.icon} alt={fw.name} className="w-6 h-6 object-contain" />
|
|
217
|
+
</div>
|
|
218
|
+
<ITText as="span" className="text-[10px] font-semibold text-slate-600 dark:text-slate-300 text-center leading-tight truncate w-full">
|
|
219
|
+
{fw.name}
|
|
220
|
+
</ITText>
|
|
221
|
+
</div>
|
|
222
|
+
</ITGrid>
|
|
223
|
+
))}
|
|
224
|
+
</ITGrid>
|
|
225
|
+
</ITStack>
|
|
226
|
+
</ITCard>
|
|
227
|
+
</ITGrid>
|
|
228
|
+
</ITGrid>
|
|
263
229
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
230
|
+
{/* ─── TECH STACK ─── */}
|
|
231
|
+
<ITCard
|
|
232
|
+
title="Stack Tecnológico"
|
|
233
|
+
className="border-slate-200/60 dark:border-slate-800/60 shadow-sm"
|
|
234
|
+
>
|
|
235
|
+
<ITStack spacing={5}>
|
|
236
|
+
{/* Filters */}
|
|
237
|
+
<ITFlex align="center" justify="between" wrap="wrap" gap={4}>
|
|
238
|
+
<ITFlex gap={2} wrap="wrap">
|
|
239
|
+
{categoriesList.map((cat) => (
|
|
240
|
+
<button
|
|
241
|
+
key={cat.id}
|
|
242
|
+
onClick={() => setSelectedCategory(cat.id)}
|
|
243
|
+
className={`inline-flex items-center gap-1.5 px-3.5 py-1.5 rounded-lg text-xs font-semibold transition-all ${
|
|
244
|
+
selectedCategory === cat.id
|
|
245
|
+
? "bg-primary-100 dark:bg-primary-900/40 text-primary-700 dark:text-primary-300 shadow-sm border border-primary-200 dark:border-primary-800"
|
|
246
|
+
: "bg-slate-100 dark:bg-slate-800 hover:bg-slate-200 dark:hover:bg-slate-700 text-slate-500 dark:text-slate-400 border border-transparent"
|
|
247
|
+
}`}
|
|
248
|
+
>
|
|
249
|
+
{cat.icon}
|
|
250
|
+
{cat.name}
|
|
251
|
+
</button>
|
|
252
|
+
))}
|
|
253
|
+
</ITFlex>
|
|
254
|
+
<div className="relative w-full sm:w-56">
|
|
255
|
+
<FaSearch className="absolute left-3 top-1/2 -translate-y-1/2 text-slate-400" size={12} />
|
|
267
256
|
<input
|
|
268
257
|
type="text"
|
|
269
|
-
placeholder="
|
|
258
|
+
placeholder="Buscar tecnología..."
|
|
270
259
|
value={techSearch}
|
|
271
260
|
onChange={(e) => setTechSearch(e.target.value)}
|
|
272
|
-
className="w-full
|
|
261
|
+
className="w-full bg-white dark:bg-slate-900/80 text-slate-800 dark:text-white pl-8 pr-4 py-2 text-xs rounded-xl outline-none focus:ring-2 focus:ring-primary-500/50 border border-slate-200 dark:border-slate-700 transition-all"
|
|
273
262
|
/>
|
|
274
|
-
<FaSearch className="absolute left-2.5 top-2.5 text-slate-400" size={11} />
|
|
275
263
|
</div>
|
|
276
|
-
</
|
|
277
|
-
</div>
|
|
264
|
+
</ITFlex>
|
|
278
265
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
{categoriesList.map((cat) => (
|
|
282
|
-
<button
|
|
283
|
-
key={cat.id}
|
|
284
|
-
onClick={() => setSelectedCategory(cat.id)}
|
|
285
|
-
className={`px-3 py-1.5 rounded-lg text-xs font-semibold transition-all ${selectedCategory === cat.id
|
|
286
|
-
? "bg-primary-500 text-white shadow-sm"
|
|
287
|
-
: "bg-slate-100/80 hover:bg-slate-200/80 dark:bg-slate-800/80 dark:hover:bg-slate-700/80 text-slate-600 dark:text-slate-300"
|
|
288
|
-
}`}
|
|
289
|
-
>
|
|
290
|
-
{cat.name}
|
|
291
|
-
</button>
|
|
292
|
-
))}
|
|
293
|
-
</div>
|
|
266
|
+
{/* Divider */}
|
|
267
|
+
<ITDivider />
|
|
294
268
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
</
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
269
|
+
{/* Tech Grid */}
|
|
270
|
+
{filteredTech.length > 0 ? (
|
|
271
|
+
<ITGrid container spacing={2}>
|
|
272
|
+
{filteredTech.map((tech, index) => (
|
|
273
|
+
<ITGrid item xs={3} sm={2} md={2} lg={1} key={`${tech.name}-${index}`}>
|
|
274
|
+
<div className="group flex flex-col items-center gap-2 p-3 rounded-xl bg-white/60 dark:bg-slate-900/40 border border-slate-100 dark:border-slate-800/50 hover:border-primary-400/30 hover:shadow-md hover:-translate-y-1 transition-all duration-200 cursor-pointer">
|
|
275
|
+
<div className="w-10 h-10 flex items-center justify-center rounded-lg bg-white dark:bg-slate-900 border border-slate-100 dark:border-slate-800/60 group-hover:scale-110 group-hover:rotate-3 transition-all duration-200">
|
|
276
|
+
<img
|
|
277
|
+
src={tech.icon}
|
|
278
|
+
alt={tech.name}
|
|
279
|
+
className="w-7 h-7 object-contain"
|
|
280
|
+
/>
|
|
281
|
+
</div>
|
|
282
|
+
<ITText as="span" className="text-[9px] font-semibold text-slate-500 dark:text-slate-400 text-center truncate w-full group-hover:text-slate-700 dark:group-hover:text-slate-200 transition-colors">
|
|
283
|
+
{tech.name}
|
|
284
|
+
</ITText>
|
|
285
|
+
</div>
|
|
286
|
+
</ITGrid>
|
|
287
|
+
))}
|
|
288
|
+
</ITGrid>
|
|
289
|
+
) : (
|
|
290
|
+
<div className="text-center py-12">
|
|
291
|
+
<ITText muted className="text-sm">No se encontraron tecnologías para "{techSearch}"</ITText>
|
|
292
|
+
</div>
|
|
293
|
+
)}
|
|
294
|
+
|
|
295
|
+
{/* Footer count */}
|
|
296
|
+
<ITDivider />
|
|
297
|
+
<ITText as="div" muted className="text-xs text-center">
|
|
298
|
+
{filteredTech.length} de {TECH_STACK.length} tecnologías
|
|
299
|
+
</ITText>
|
|
300
|
+
</ITStack>
|
|
301
|
+
</ITCard>
|
|
302
|
+
</ITStack>
|
|
323
303
|
);
|
|
324
304
|
};
|