@axzydev/axzy_ui_system 1.2.7 → 1.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/index.cjs +576 -398
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.css +1 -1
  4. package/dist/index.css.map +1 -1
  5. package/dist/index.d.cts +1463 -86
  6. package/dist/index.d.ts +1463 -86
  7. package/dist/index.js +597 -417
  8. package/dist/index.js.map +1 -1
  9. package/package.json +1 -1
  10. package/src/App.tsx +19 -54
  11. package/src/components/alert/alert.doc.mdx +48 -0
  12. package/src/components/alert/alert.props.ts +7 -0
  13. package/src/components/alert/alert.tsx +8 -0
  14. package/src/components/avatar/avatar.doc.mdx +48 -0
  15. package/src/components/avatar/avatar.props.ts +8 -0
  16. package/src/components/avatar/avatar.tsx +25 -5
  17. package/src/components/badget/badget.doc.mdx +46 -0
  18. package/src/components/badget/badget.props.ts +6 -0
  19. package/src/components/badget/badget.tsx +11 -0
  20. package/src/components/breadcrumbs/breadcrumbs.doc.mdx +57 -0
  21. package/src/components/breadcrumbs/breadcrumbs.props.ts +6 -0
  22. package/src/components/breadcrumbs/breadcrumbs.tsx +12 -0
  23. package/src/components/button/button.doc.mdx +59 -0
  24. package/src/components/button/button.props.ts +12 -0
  25. package/src/components/button/button.tsx +11 -0
  26. package/src/components/calendar/calendar.doc.mdx +75 -0
  27. package/src/components/calendar/calendar.props.ts +27 -7
  28. package/src/components/calendar/calendar.tsx +13 -0
  29. package/src/components/card/card.doc.mdx +54 -0
  30. package/src/components/card/card.props.ts +11 -0
  31. package/src/components/card/card.tsx +13 -0
  32. package/src/components/checkbox/checkbox.doc.mdx +54 -0
  33. package/src/components/checkbox/checkbox.props.ts +7 -0
  34. package/src/components/checkbox/checkbox.tsx +9 -0
  35. package/src/components/confirm-dialog/confirm-dialog.doc.mdx +60 -0
  36. package/src/components/confirm-dialog/confirm-dialog.props.ts +9 -0
  37. package/src/components/confirm-dialog/confirm-dialog.tsx +19 -0
  38. package/src/components/data-table/ITDataTable.doc.mdx +59 -0
  39. package/src/components/data-table/dataTable.props.ts +15 -0
  40. package/src/components/data-table/dataTable.tsx +178 -73
  41. package/src/components/date-picker/date-picker.doc.mdx +65 -0
  42. package/src/components/date-picker/date-picker.props.ts +17 -0
  43. package/src/components/date-picker/datePicker.tsx +31 -1
  44. package/src/components/dialog/dialog.doc.mdx +54 -0
  45. package/src/components/dialog/dialog.props.ts +7 -0
  46. package/src/components/dialog/dialog.tsx +26 -0
  47. package/src/components/divider/divider.doc.mdx +42 -0
  48. package/src/components/divider/divider.props.ts +5 -0
  49. package/src/components/divider/divider.tsx +16 -0
  50. package/src/components/drawer/drawer.doc.mdx +59 -0
  51. package/src/components/drawer/drawer.props.ts +9 -0
  52. package/src/components/drawer/drawer.tsx +20 -0
  53. package/src/components/dropfile/dropfile.doc.mdx +59 -0
  54. package/src/components/dropfile/dropfile.props.ts +41 -0
  55. package/src/components/dropfile/dropfile.tsx +21 -33
  56. package/src/components/empty-state/empty-state.doc.mdx +50 -0
  57. package/src/components/empty-state/empty-state.props.ts +5 -0
  58. package/src/components/empty-state/empty-state.tsx +16 -0
  59. package/src/components/flex/flex.doc.mdx +59 -0
  60. package/src/components/flex/flex.props.ts +13 -0
  61. package/src/components/flex/flex.tsx +15 -0
  62. package/src/components/form-builder/fieldRenderer.tsx +52 -2
  63. package/src/components/form-builder/formBuilder.doc.mdx +124 -0
  64. package/src/components/form-builder/formBuilder.props.ts +12 -2
  65. package/src/components/form-builder/formBuilder.tsx +31 -0
  66. package/src/components/form-header/form-header.doc.mdx +38 -0
  67. package/src/components/form-header/form-header.props.ts +3 -0
  68. package/src/components/form-header/form-header.stories.tsx +53 -0
  69. package/src/components/form-header/form-header.tsx +11 -0
  70. package/src/components/grid/grid.doc.mdx +54 -0
  71. package/src/components/grid/grid.props.ts +13 -0
  72. package/src/components/grid/grid.tsx +19 -0
  73. package/src/components/image/image.doc.mdx +44 -0
  74. package/src/components/image/image.props.ts +5 -0
  75. package/src/components/image/image.stories.tsx +49 -0
  76. package/src/components/image/image.tsx +19 -0
  77. package/src/components/input/input.doc.mdx +70 -0
  78. package/src/components/input/input.props.ts +34 -2
  79. package/src/components/input/input.tsx +29 -0
  80. package/src/components/layout/layout.doc.mdx +51 -0
  81. package/src/components/layout/layout.props.ts +5 -0
  82. package/src/components/layout/layout.tsx +29 -2
  83. package/src/components/loader/loader.doc.mdx +43 -0
  84. package/src/components/loader/loader.props.ts +4 -0
  85. package/src/components/loader/loader.tsx +17 -0
  86. package/src/components/navbar/navbar.doc.mdx +77 -0
  87. package/src/components/navbar/navbar.props.ts +37 -1
  88. package/src/components/navbar/navbar.stories.tsx +84 -0
  89. package/src/components/navbar/navbar.tsx +27 -0
  90. package/src/components/page/page.doc.mdx +80 -0
  91. package/src/components/page/page.props.ts +21 -0
  92. package/src/components/page/page.tsx +18 -0
  93. package/src/components/page-header/page-header.doc.mdx +54 -0
  94. package/src/components/page-header/page-header.props.ts +9 -0
  95. package/src/components/page-header/page-header.tsx +15 -0
  96. package/src/components/pagination/pagination.doc.mdx +62 -0
  97. package/src/components/pagination/pagination.props.ts +11 -32
  98. package/src/components/pagination/pagination.tsx +17 -0
  99. package/src/components/popover/popover.doc.mdx +53 -0
  100. package/src/components/popover/popover.props.ts +8 -0
  101. package/src/components/popover/popover.tsx +13 -0
  102. package/src/components/progress/progress.doc.mdx +48 -0
  103. package/src/components/progress/progress.props.ts +8 -0
  104. package/src/components/progress/progress.tsx +9 -0
  105. package/src/components/radio/radio.doc.mdx +62 -0
  106. package/src/components/radio/radio.props.ts +11 -0
  107. package/src/components/radio/radio.tsx +18 -0
  108. package/src/components/search-select/search-select.doc.mdx +72 -0
  109. package/src/components/search-select/search-select.props.ts +23 -18
  110. package/src/components/search-select/search-select.tsx +27 -2
  111. package/src/components/searchTable/searchTable.doc.mdx +79 -0
  112. package/src/components/searchTable/searchTable.props.ts +42 -3
  113. package/src/components/searchTable/searchTable.stories.tsx +74 -0
  114. package/src/components/searchTable/searchTable.tsx +23 -0
  115. package/src/components/segmented-control/segmented-control.doc.mdx +60 -0
  116. package/src/components/segmented-control/segmented-control.props.ts +12 -0
  117. package/src/components/segmented-control/segmented-control.tsx +15 -0
  118. package/src/components/select/select.doc.mdx +75 -0
  119. package/src/components/select/select.props.ts +22 -0
  120. package/src/components/select/select.tsx +2 -5
  121. package/src/components/sidebar/sidebar.doc.mdx +86 -0
  122. package/src/components/sidebar/sidebar.props.ts +22 -0
  123. package/src/components/sidebar/sidebar.tsx +22 -0
  124. package/src/components/skeleton/skeleton.doc.mdx +43 -0
  125. package/src/components/skeleton/skeleton.props.ts +8 -0
  126. package/src/components/skeleton/skeleton.tsx +10 -0
  127. package/src/components/slide/slide.doc.mdx +46 -0
  128. package/src/components/slide/slide.props.ts +11 -24
  129. package/src/components/slide/slide.tsx +10 -1
  130. package/src/components/slider/slider.doc.mdx +49 -0
  131. package/src/components/slider/slider.props.ts +9 -0
  132. package/src/components/slider/slider.tsx +15 -0
  133. package/src/components/stack/stack.doc.mdx +126 -0
  134. package/src/components/stack/stack.props.ts +18 -0
  135. package/src/components/stack/stack.stories.tsx +221 -16
  136. package/src/components/stack/stack.tsx +21 -0
  137. package/src/components/stat-card/stat-card.doc.mdx +48 -0
  138. package/src/components/stat-card/stat-card.props.ts +9 -0
  139. package/src/components/stat-card/stat-card.tsx +10 -0
  140. package/src/components/stepper/stepper.doc.mdx +54 -0
  141. package/src/components/stepper/stepper.props.ts +11 -1
  142. package/src/components/stepper/stepper.tsx +15 -0
  143. package/src/components/table/table.doc.mdx +58 -0
  144. package/src/components/table/table.props.ts +17 -0
  145. package/src/components/table/table.tsx +199 -84
  146. package/src/components/tabs/tabs.doc.mdx +52 -0
  147. package/src/components/tabs/tabs.props.ts +11 -0
  148. package/src/components/tabs/tabs.tsx +14 -0
  149. package/src/components/text/text.doc.mdx +41 -0
  150. package/src/components/text/text.props.ts +5 -0
  151. package/src/components/text/text.stories.tsx +67 -0
  152. package/src/components/text/text.tsx +10 -0
  153. package/src/components/textarea/textarea.doc.mdx +64 -0
  154. package/src/components/textarea/textarea.props.ts +11 -0
  155. package/src/components/textarea/textarea.tsx +16 -0
  156. package/src/components/theme-provider/themeProvider.doc.mdx +75 -0
  157. package/src/components/theme-provider/themeProvider.props.ts +3 -0
  158. package/src/components/theme-provider/themeProvider.stories.tsx +59 -0
  159. package/src/components/theme-provider/themeProvider.tsx +14 -0
  160. package/src/components/time-picker/timePicker.doc.mdx +68 -0
  161. package/src/components/time-picker/timePicker.props.ts +14 -0
  162. package/src/components/time-picker/timePicker.tsx +22 -1
  163. package/src/components/toast/toast.doc.mdx +50 -0
  164. package/src/components/toast/toast.props.ts +5 -0
  165. package/src/components/toast/toast.tsx +21 -0
  166. package/src/components/tooltip/tooltip.doc.mdx +47 -0
  167. package/src/components/tooltip/tooltip.props.ts +6 -0
  168. package/src/components/tooltip/tooltip.tsx +19 -0
  169. package/src/components/topbar/topbar.doc.mdx +69 -0
  170. package/src/components/topbar/topbar.props.ts +15 -0
  171. package/src/components/topbar/topbar.tsx +38 -0
  172. package/src/components/triple-filter/tripleFilter.doc.mdx +62 -0
  173. package/src/components/triple-filter/tripleFilter.props.ts +7 -0
  174. package/src/components/triple-filter/tripleFilter.tsx +32 -0
  175. package/src/index.css +2 -0
  176. package/src/showcases/DataShowcases.tsx +529 -45
  177. package/src/showcases/FormShowcases.tsx +399 -29
  178. package/src/showcases/HomeShowcase.tsx +252 -272
  179. package/src/showcases/LayoutPrimitivesShowcases.tsx +1224 -248
  180. package/src/showcases/PageShowcases.tsx +688 -391
  181. package/src/showcases/ShowcaseLayout.tsx +237 -73
  182. package/src/showcases/StructureShowcases.tsx +846 -73
  183. package/src/types/table.types.ts +1 -1
  184. package/src/utils/styles.ts +2 -1
@@ -1,87 +1,75 @@
1
- import React, { useState } from "react";
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
- name: "TypeScript",
11
- icon: "https://raw.githubusercontent.com/devicons/devicon/master/icons/typescript/typescript-original.svg",
12
- color: "#3178c6"
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
- name: "Angular",
29
- icon: "https://icongr.am/devicon/angularjs-original.svg?size=128&color=currentColor",
30
- color: "#dd0031"
31
- },
32
- {
33
- name: "React",
34
- icon: "https://icongr.am/devicon/react-original.svg?size=128&color=currentColor",
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: "Docker", icon: "https://icongr.am/devicon/docker-original.svg?size=128&color=currentColor", category: "devops" },
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: "C#", icon: "https://icongr.am/devicon/csharp-original.svg?size=128&color=currentColor", category: "backend" },
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: ".NET Core", icon: "https://icongr.am/devicon/dot-net-original.svg?size=128&color=currentColor", category: "backend" },
56
- { name: "Electron", icon: "https://icongr.am/devicon/electron-original.svg?size=128&color=currentColor", category: "desktop" },
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: "Git", icon: "https://icongr.am/devicon/git-original.svg?size=128&color=currentColor", category: "devops" },
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: "Node.js", icon: "https://icongr.am/devicon/nodejs-original.svg?size=128&color=currentColor", category: "backend" },
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: "Redux", icon: "https://devicons.railway.app/i/redux.svg", category: "frontend" },
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: "Flutter", icon: "https://cdn.iconscout.com/icon/free/png-512/free-flutter-2038877-1720090.png?f=webp&w=512", category: "mobile" },
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
- <div className="space-y-10 animate-fade-in">
95
- <style dangerouslySetInnerHTML={{
96
- __html: `
97
- @keyframes float {
98
- 0%, 100% { transform: translateY(0px); }
99
- 50% { transform: translateY(-10px); }
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
- <div className="grid grid-cols-1 lg:grid-cols-12 gap-8 items-center">
126
- {/* Text content */}
127
- <div className="lg:col-span-7 space-y-6">
128
- <div className="space-y-2">
129
- <span className="px-3 py-1 text-xs font-semibold rounded-full bg-primary-100 dark:bg-primary-950/40 text-primary-600 dark:text-primary-400 border border-primary-200/30">
130
- Portafolio Personal
131
- </span>
132
- <h1 className="text-3xl md:text-5xl font-black tracking-tight text-slate-800 dark:text-white leading-tight">
133
- Hola 👋, soy <br />
134
- <span className="bg-gradient-to-r from-primary-500 via-purple-500 to-indigo-500 bg-clip-text text-transparent">
135
- Asael Amaro
136
- </span>
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
- <div className="space-y-4">
141
- <h2 className="text-xl font-bold text-slate-700 dark:text-slate-200">Sobre mí</h2>
142
- <p className="text-slate-600 dark:text-slate-300 leading-relaxed text-base font-normal">
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
- <div className="relative rounded-2xl overflow-hidden bg-slate-100/50 dark:bg-slate-950/20 p-4 border border-slate-200/30 dark:border-slate-800/40 backdrop-blur-sm">
172
- <img
173
- src="/animations/developer.gif"
174
- alt="Developer Illustration"
175
- className="w-full max-w-[280px] aspect-square object-cover rounded-xl shadow-inner animate-float"
176
- onError={(e) => {
177
- e.currentTarget.style.display = "none";
178
- const container = e.currentTarget.parentElement;
179
- if (container) {
180
- const fallback = container.querySelector(".svg-fallback");
181
- if (fallback) fallback.classList.remove("hidden");
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
- {/* Fallback SVG embedded */}
187
- <div className="svg-fallback hidden w-full max-w-[280px] aspect-square flex items-center justify-center">
188
- <svg className="w-full aspect-square" viewBox="0 0 200 200" fill="none">
189
- <circle cx="100" cy="100" r="70" fill="url(#heroGlow)" opacity="0.2" />
190
- <rect x="50" y="70" width="100" height="70" rx="8" fill="#1e293b" stroke="#475569" strokeWidth="4" />
191
- <rect x="58" y="78" width="84" height="46" rx="4" fill="#0f172a" />
192
- <line x1="66" y1="88" x2="100" y2="88" stroke="#3b82f6" strokeWidth="3" strokeLinecap="round" />
193
- <line x1="66" y1="98" x2="120" y2="98" stroke="#10b981" strokeWidth="3" strokeLinecap="round" />
194
- <line x1="66" y1="108" x2="90" y2="108" stroke="#8b5cf6" strokeWidth="3" strokeLinecap="round" />
195
- <circle cx="130" cy="88" r="6" fill="#f59e0b" />
196
- <path d="M 40 140 L 160 140 L 170 148 L 30 148 Z" fill="#334155" />
197
- <rect x="154" y="120" width="12" height="18" rx="2" fill="#ef4444" />
198
- <path d="M 166 124 C 170 124 170 130 166 130" stroke="#ef4444" strokeWidth="2" fill="none" />
199
- <defs>
200
- <radialGradient id="heroGlow" cx="50%" cy="50%" r="50%">
201
- <stop offset="0%" stopColor="#3b82f6" />
202
- <stop offset="100%" stopColor="#a855f7" stopOpacity="0" />
203
- </radialGradient>
204
- </defs>
205
- </svg>
206
- </div>
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
- {/* Languages & Frameworks Sections */}
214
- <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
215
- {/* Languages */}
216
- <div className="p-6 rounded-2xl bg-white/70 dark:bg-slate-900/60 border border-slate-100 dark:border-slate-800 backdrop-blur-md shadow-sm space-y-4">
217
- <h2 className="text-xl font-bold text-slate-800 dark:text-white flex items-center gap-2">
218
- <span className="text-lg">🛠️</span> Lenguajes Principales
219
- </h2>
220
- <div className="grid grid-cols-3 gap-4">
221
- {LANGUAGES.map((lang) => (
222
- <div
223
- key={lang.name}
224
- className="group relative flex flex-col items-center gap-3 p-4 rounded-xl bg-slate-50/50 dark:bg-slate-950/20 border border-slate-200/50 dark:border-slate-800/40 hover:border-primary-500/40 transition-all duration-300 hover:scale-105 hover:shadow-sm"
225
- >
226
- <div className="w-12 h-12 flex items-center justify-center rounded-xl bg-white dark:bg-slate-900 shadow-sm border border-slate-100 dark:border-slate-800/80 group-hover:rotate-6 transition-transform duration-300">
227
- <img src={lang.icon} alt={lang.name} className="w-8 h-8 object-contain" />
228
- </div>
229
- <span className="text-xs font-semibold text-slate-700 dark:text-slate-200">{lang.name}</span>
230
- </div>
231
- ))}
232
- </div>
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
- {/* Frameworks */}
236
- <div className="p-6 rounded-2xl bg-white/70 dark:bg-slate-900/60 border border-slate-100 dark:border-slate-800 backdrop-blur-md shadow-sm space-y-4">
237
- <h2 className="text-xl font-bold text-slate-800 dark:text-white flex items-center gap-2">
238
- <span className="text-lg">🚀</span> Frameworks
239
- </h2>
240
- <div className="grid grid-cols-4 gap-3">
241
- {FRAMEWORKS.map((fw) => (
242
- <div
243
- key={fw.name}
244
- className="group relative flex flex-col items-center gap-2 p-3 rounded-xl bg-slate-50/50 dark:bg-slate-950/20 border border-slate-200/50 dark:border-slate-800/40 hover:border-primary-500/40 transition-all duration-300 hover:scale-105 hover:shadow-sm"
245
- >
246
- <div className="w-10 h-10 flex items-center justify-center rounded-xl bg-white dark:bg-slate-900 shadow-sm border border-slate-100 dark:border-slate-800/80 group-hover:-rotate-6 transition-transform duration-300">
247
- <img src={fw.icon} alt={fw.name} className="w-6 h-6 object-contain" />
248
- </div>
249
- <span className="text-[10px] font-semibold text-slate-700 dark:text-slate-200 text-center truncate w-full">{fw.name}</span>
250
- </div>
251
- ))}
252
- </div>
253
- </div>
254
- </div>
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
- {/* Tech Stack Grid Section */}
257
- <div className="p-6 md:p-8 rounded-3xl bg-white/70 dark:bg-slate-900/60 border border-slate-100 dark:border-slate-800 backdrop-blur-md shadow-sm space-y-6">
258
- <div className="flex flex-col md:flex-row md:items-center justify-between gap-4">
259
- <div>
260
- <h2 className="text-2xl font-extrabold text-slate-800 dark:text-white">Tech Stack</h2>
261
- <p className="text-xs text-slate-500">Mi conjunto completo de herramientas, frameworks y tecnologías.</p>
262
- </div>
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
- <div className="flex flex-col sm:flex-row gap-3">
265
- {/* Search Input */}
266
- <div className="relative">
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="Filtrar tecnologías..."
258
+ placeholder="Buscar tecnología..."
270
259
  value={techSearch}
271
260
  onChange={(e) => setTechSearch(e.target.value)}
272
- className="w-full sm:w-60 bg-slate-50 dark:bg-slate-950/40 text-slate-800 dark:text-white pl-8 pr-4 py-1.5 text-xs rounded-xl outline-none focus:ring-2 focus:ring-primary-500 border border-slate-200/60 dark:border-slate-800/80 transition-all"
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
- </div>
277
- </div>
264
+ </ITFlex>
278
265
 
279
- {/* Category Pill Filters */}
280
- <div className="flex flex-wrap gap-2 pb-2 border-b border-slate-100 dark:border-slate-800/60">
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
- {/* Tech Grid */}
296
- {filteredTech.length > 0 ? (
297
- <div className="grid grid-cols-3 sm:grid-cols-4 md:grid-cols-6 lg:grid-cols-8 gap-4">
298
- {filteredTech.map((tech, index) => (
299
- <div
300
- key={`${tech.name}-${index}`}
301
- className="group relative flex flex-col items-center justify-center p-4 rounded-xl bg-slate-50/40 dark:bg-slate-950/10 border border-slate-200/30 dark:border-slate-800/20 hover:border-primary-500/40 transition-all duration-300 hover:scale-110 hover:-translate-y-1 hover:shadow-md cursor-pointer"
302
- >
303
- <div className="w-12 h-12 flex items-center justify-center rounded-xl bg-white dark:bg-slate-900 border border-slate-100 dark:border-slate-800/50 shadow-inner group-hover:rotate-3 transition-transform">
304
- <img
305
- src={tech.icon}
306
- alt={tech.name}
307
- className={`w-8 h-8 object-contain ${tech.darkInvert ? "dark:invert" : ""}`}
308
- />
309
- </div>
310
- <span className="mt-2.5 text-[10px] font-semibold text-slate-600 dark:text-slate-300 text-center select-none truncate w-full">
311
- {tech.name}
312
- </span>
313
- </div>
314
- ))}
315
- </div>
316
- ) : (
317
- <div className="text-center py-10 text-slate-400 dark:text-slate-500 text-sm">
318
- No se encontraron tecnologías que coincidan con la búsqueda.
319
- </div>
320
- )}
321
- </div>
322
- </div>
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
  };