@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.
Files changed (186) hide show
  1. package/README.md +105 -53
  2. package/dist/index.cjs +576 -398
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.css +1 -1
  5. package/dist/index.css.map +1 -1
  6. package/dist/index.d.cts +1463 -86
  7. package/dist/index.d.ts +1463 -86
  8. package/dist/index.js +597 -417
  9. package/dist/index.js.map +1 -1
  10. package/package.json +1 -1
  11. package/src/App.tsx +26 -54
  12. package/src/components/alert/alert.doc.mdx +48 -0
  13. package/src/components/alert/alert.props.ts +7 -0
  14. package/src/components/alert/alert.tsx +8 -0
  15. package/src/components/avatar/avatar.doc.mdx +48 -0
  16. package/src/components/avatar/avatar.props.ts +8 -0
  17. package/src/components/avatar/avatar.tsx +25 -5
  18. package/src/components/badget/badget.doc.mdx +46 -0
  19. package/src/components/badget/badget.props.ts +6 -0
  20. package/src/components/badget/badget.tsx +11 -0
  21. package/src/components/breadcrumbs/breadcrumbs.doc.mdx +57 -0
  22. package/src/components/breadcrumbs/breadcrumbs.props.ts +6 -0
  23. package/src/components/breadcrumbs/breadcrumbs.tsx +12 -0
  24. package/src/components/button/button.doc.mdx +59 -0
  25. package/src/components/button/button.props.ts +12 -0
  26. package/src/components/button/button.tsx +11 -0
  27. package/src/components/calendar/calendar.doc.mdx +75 -0
  28. package/src/components/calendar/calendar.props.ts +27 -7
  29. package/src/components/calendar/calendar.tsx +13 -0
  30. package/src/components/card/card.doc.mdx +54 -0
  31. package/src/components/card/card.props.ts +11 -0
  32. package/src/components/card/card.tsx +13 -0
  33. package/src/components/checkbox/checkbox.doc.mdx +54 -0
  34. package/src/components/checkbox/checkbox.props.ts +7 -0
  35. package/src/components/checkbox/checkbox.tsx +9 -0
  36. package/src/components/confirm-dialog/confirm-dialog.doc.mdx +60 -0
  37. package/src/components/confirm-dialog/confirm-dialog.props.ts +9 -0
  38. package/src/components/confirm-dialog/confirm-dialog.tsx +19 -0
  39. package/src/components/data-table/ITDataTable.doc.mdx +59 -0
  40. package/src/components/data-table/dataTable.props.ts +15 -0
  41. package/src/components/data-table/dataTable.tsx +178 -73
  42. package/src/components/date-picker/date-picker.doc.mdx +65 -0
  43. package/src/components/date-picker/date-picker.props.ts +17 -0
  44. package/src/components/date-picker/datePicker.tsx +31 -1
  45. package/src/components/dialog/dialog.doc.mdx +54 -0
  46. package/src/components/dialog/dialog.props.ts +7 -0
  47. package/src/components/dialog/dialog.tsx +26 -0
  48. package/src/components/divider/divider.doc.mdx +42 -0
  49. package/src/components/divider/divider.props.ts +5 -0
  50. package/src/components/divider/divider.tsx +16 -0
  51. package/src/components/drawer/drawer.doc.mdx +59 -0
  52. package/src/components/drawer/drawer.props.ts +9 -0
  53. package/src/components/drawer/drawer.tsx +20 -0
  54. package/src/components/dropfile/dropfile.doc.mdx +59 -0
  55. package/src/components/dropfile/dropfile.props.ts +41 -0
  56. package/src/components/dropfile/dropfile.tsx +21 -33
  57. package/src/components/empty-state/empty-state.doc.mdx +50 -0
  58. package/src/components/empty-state/empty-state.props.ts +5 -0
  59. package/src/components/empty-state/empty-state.tsx +16 -0
  60. package/src/components/flex/flex.doc.mdx +59 -0
  61. package/src/components/flex/flex.props.ts +13 -0
  62. package/src/components/flex/flex.tsx +15 -0
  63. package/src/components/form-builder/fieldRenderer.tsx +52 -2
  64. package/src/components/form-builder/formBuilder.doc.mdx +124 -0
  65. package/src/components/form-builder/formBuilder.props.ts +12 -2
  66. package/src/components/form-builder/formBuilder.tsx +31 -0
  67. package/src/components/form-header/form-header.doc.mdx +38 -0
  68. package/src/components/form-header/form-header.props.ts +3 -0
  69. package/src/components/form-header/form-header.stories.tsx +53 -0
  70. package/src/components/form-header/form-header.tsx +11 -0
  71. package/src/components/grid/grid.doc.mdx +54 -0
  72. package/src/components/grid/grid.props.ts +13 -0
  73. package/src/components/grid/grid.tsx +19 -0
  74. package/src/components/image/image.doc.mdx +44 -0
  75. package/src/components/image/image.props.ts +5 -0
  76. package/src/components/image/image.stories.tsx +49 -0
  77. package/src/components/image/image.tsx +19 -0
  78. package/src/components/input/input.doc.mdx +70 -0
  79. package/src/components/input/input.props.ts +34 -2
  80. package/src/components/input/input.tsx +29 -0
  81. package/src/components/layout/layout.doc.mdx +51 -0
  82. package/src/components/layout/layout.props.ts +5 -0
  83. package/src/components/layout/layout.tsx +29 -2
  84. package/src/components/loader/loader.doc.mdx +43 -0
  85. package/src/components/loader/loader.props.ts +4 -0
  86. package/src/components/loader/loader.tsx +17 -0
  87. package/src/components/navbar/navbar.doc.mdx +77 -0
  88. package/src/components/navbar/navbar.props.ts +37 -1
  89. package/src/components/navbar/navbar.stories.tsx +84 -0
  90. package/src/components/navbar/navbar.tsx +27 -0
  91. package/src/components/page/page.doc.mdx +80 -0
  92. package/src/components/page/page.props.ts +21 -0
  93. package/src/components/page/page.tsx +18 -0
  94. package/src/components/page-header/page-header.doc.mdx +54 -0
  95. package/src/components/page-header/page-header.props.ts +9 -0
  96. package/src/components/page-header/page-header.tsx +15 -0
  97. package/src/components/pagination/pagination.doc.mdx +62 -0
  98. package/src/components/pagination/pagination.props.ts +11 -32
  99. package/src/components/pagination/pagination.tsx +17 -0
  100. package/src/components/popover/popover.doc.mdx +53 -0
  101. package/src/components/popover/popover.props.ts +8 -0
  102. package/src/components/popover/popover.tsx +13 -0
  103. package/src/components/progress/progress.doc.mdx +48 -0
  104. package/src/components/progress/progress.props.ts +8 -0
  105. package/src/components/progress/progress.tsx +9 -0
  106. package/src/components/radio/radio.doc.mdx +62 -0
  107. package/src/components/radio/radio.props.ts +11 -0
  108. package/src/components/radio/radio.tsx +18 -0
  109. package/src/components/search-select/search-select.doc.mdx +72 -0
  110. package/src/components/search-select/search-select.props.ts +23 -18
  111. package/src/components/search-select/search-select.tsx +27 -2
  112. package/src/components/searchTable/searchTable.doc.mdx +79 -0
  113. package/src/components/searchTable/searchTable.props.ts +42 -3
  114. package/src/components/searchTable/searchTable.stories.tsx +74 -0
  115. package/src/components/searchTable/searchTable.tsx +23 -0
  116. package/src/components/segmented-control/segmented-control.doc.mdx +60 -0
  117. package/src/components/segmented-control/segmented-control.props.ts +12 -0
  118. package/src/components/segmented-control/segmented-control.tsx +15 -0
  119. package/src/components/select/select.doc.mdx +75 -0
  120. package/src/components/select/select.props.ts +22 -0
  121. package/src/components/select/select.tsx +2 -5
  122. package/src/components/sidebar/sidebar.doc.mdx +86 -0
  123. package/src/components/sidebar/sidebar.props.ts +22 -0
  124. package/src/components/sidebar/sidebar.tsx +22 -0
  125. package/src/components/skeleton/skeleton.doc.mdx +43 -0
  126. package/src/components/skeleton/skeleton.props.ts +8 -0
  127. package/src/components/skeleton/skeleton.tsx +10 -0
  128. package/src/components/slide/slide.doc.mdx +46 -0
  129. package/src/components/slide/slide.props.ts +11 -24
  130. package/src/components/slide/slide.tsx +10 -1
  131. package/src/components/slider/slider.doc.mdx +49 -0
  132. package/src/components/slider/slider.props.ts +9 -0
  133. package/src/components/slider/slider.tsx +15 -0
  134. package/src/components/stack/stack.doc.mdx +126 -0
  135. package/src/components/stack/stack.props.ts +18 -0
  136. package/src/components/stack/stack.stories.tsx +221 -16
  137. package/src/components/stack/stack.tsx +21 -0
  138. package/src/components/stat-card/stat-card.doc.mdx +48 -0
  139. package/src/components/stat-card/stat-card.props.ts +9 -0
  140. package/src/components/stat-card/stat-card.tsx +10 -0
  141. package/src/components/stepper/stepper.doc.mdx +54 -0
  142. package/src/components/stepper/stepper.props.ts +11 -1
  143. package/src/components/stepper/stepper.tsx +15 -0
  144. package/src/components/table/table.doc.mdx +58 -0
  145. package/src/components/table/table.props.ts +17 -0
  146. package/src/components/table/table.tsx +199 -84
  147. package/src/components/tabs/tabs.doc.mdx +52 -0
  148. package/src/components/tabs/tabs.props.ts +11 -0
  149. package/src/components/tabs/tabs.tsx +14 -0
  150. package/src/components/text/text.doc.mdx +41 -0
  151. package/src/components/text/text.props.ts +5 -0
  152. package/src/components/text/text.stories.tsx +67 -0
  153. package/src/components/text/text.tsx +10 -0
  154. package/src/components/textarea/textarea.doc.mdx +64 -0
  155. package/src/components/textarea/textarea.props.ts +11 -0
  156. package/src/components/textarea/textarea.tsx +16 -0
  157. package/src/components/theme-provider/themeProvider.doc.mdx +75 -0
  158. package/src/components/theme-provider/themeProvider.props.ts +3 -0
  159. package/src/components/theme-provider/themeProvider.stories.tsx +59 -0
  160. package/src/components/theme-provider/themeProvider.tsx +14 -0
  161. package/src/components/time-picker/timePicker.doc.mdx +68 -0
  162. package/src/components/time-picker/timePicker.props.ts +14 -0
  163. package/src/components/time-picker/timePicker.tsx +22 -1
  164. package/src/components/toast/toast.doc.mdx +50 -0
  165. package/src/components/toast/toast.props.ts +5 -0
  166. package/src/components/toast/toast.tsx +21 -0
  167. package/src/components/tooltip/tooltip.doc.mdx +47 -0
  168. package/src/components/tooltip/tooltip.props.ts +6 -0
  169. package/src/components/tooltip/tooltip.tsx +19 -0
  170. package/src/components/topbar/topbar.doc.mdx +69 -0
  171. package/src/components/topbar/topbar.props.ts +15 -0
  172. package/src/components/topbar/topbar.tsx +38 -0
  173. package/src/components/triple-filter/tripleFilter.doc.mdx +62 -0
  174. package/src/components/triple-filter/tripleFilter.props.ts +7 -0
  175. package/src/components/triple-filter/tripleFilter.tsx +32 -0
  176. package/src/index.css +2 -0
  177. package/src/showcases/DataShowcases.tsx +529 -45
  178. package/src/showcases/FormShowcases.tsx +399 -29
  179. package/src/showcases/GettingStartedShowcase.tsx +207 -0
  180. package/src/showcases/HomeShowcase.tsx +252 -272
  181. package/src/showcases/LayoutPrimitivesShowcases.tsx +1224 -248
  182. package/src/showcases/PageShowcases.tsx +688 -391
  183. package/src/showcases/ShowcaseLayout.tsx +237 -73
  184. package/src/showcases/StructureShowcases.tsx +846 -73
  185. package/src/types/table.types.ts +1 -1
  186. package/src/utils/styles.ts +2 -1
@@ -1,9 +1,10 @@
1
1
  import React, { useState } from "react";
2
- import { FaCheck, FaCopy } from "react-icons/fa";
2
+ import { FaCheck, FaCopy, FaBookOpen, FaCog, FaCode, FaEye } from "react-icons/fa";
3
3
  import ITCard from "../components/card/card";
4
+ import ITGrid from "../components/grid/grid";
4
5
  import { useITTheme } from "../components/theme-provider/themeProvider";
5
6
 
6
- export const CodeViewer: React.FC<{ code: string }> = ({ code }) => {
7
+ export const CodeViewer: React.FC<{ code: string; compact?: boolean }> = ({ code, compact }) => {
7
8
  const [copied, setCopied] = useState(false);
8
9
  const handleCopy = () => {
9
10
  navigator.clipboard.writeText(code);
@@ -11,7 +12,7 @@ export const CodeViewer: React.FC<{ code: string }> = ({ code }) => {
11
12
  setTimeout(() => setCopied(false), 2000);
12
13
  };
13
14
  return (
14
- <div className="relative mt-4 rounded-xl overflow-hidden bg-slate-950 text-slate-200 border border-slate-800 shadow-inner">
15
+ <div className="relative rounded-xl overflow-hidden bg-slate-950 text-slate-200 border border-slate-800 shadow-inner">
15
16
  <div className="flex justify-between items-center px-4 py-2 bg-slate-900 border-b border-slate-800">
16
17
  <span className="text-[10px] uppercase font-bold tracking-wider text-slate-400 font-mono">JSX Code</span>
17
18
  <button
@@ -19,16 +20,32 @@ export const CodeViewer: React.FC<{ code: string }> = ({ code }) => {
19
20
  className="text-slate-400 hover:text-white transition-colors flex items-center gap-1.5 text-xs py-1 px-2 rounded hover:bg-slate-800"
20
21
  >
21
22
  {copied ? <FaCheck size={11} className="text-emerald-500" /> : <FaCopy size={11} />}
22
- <span>{copied ? "Copiado!" : "Copiar"}</span>
23
+ <span>{copied ? "Copied!" : "Copy"}</span>
23
24
  </button>
24
25
  </div>
25
- <pre className="p-4 text-xs font-mono overflow-x-auto leading-relaxed whitespace-pre-wrap">
26
+ <pre className={`p-4 text-xs font-mono overflow-x-auto leading-relaxed whitespace-pre-wrap ${compact ? "max-h-[420px]" : ""} overflow-y-auto`}>
26
27
  <code>{code}</code>
27
28
  </pre>
28
29
  </div>
29
30
  );
30
31
  };
31
32
 
33
+ export interface PropDocEntry {
34
+ name: string;
35
+ type: string;
36
+ default?: string;
37
+ description: string;
38
+ required?: boolean;
39
+ }
40
+
41
+ export interface ComponentDoc {
42
+ summary: string;
43
+ description?: string;
44
+ examples?: string[];
45
+ props: PropDocEntry[];
46
+ notes?: string[];
47
+ }
48
+
32
49
  export interface ShowcaseLayoutProps {
33
50
  title: string;
34
51
  description: string;
@@ -36,103 +53,250 @@ export interface ShowcaseLayoutProps {
36
53
  controls: React.ReactNode;
37
54
  code: string;
38
55
  gallery?: React.ReactNode;
56
+ doc?: ComponentDoc;
39
57
  }
40
58
 
59
+ type SandboxView = "preview" | "code";
60
+
41
61
  export const ShowcaseLayout: React.FC<ShowcaseLayoutProps> = ({
42
62
  title,
43
63
  description,
44
64
  demo,
45
65
  controls,
46
66
  code,
47
- gallery
67
+ gallery,
68
+ doc
48
69
  }) => {
49
70
  const { resolvedTheme } = useITTheme();
50
- const [localTheme, setLocalTheme] = useState<"light" | "dark" | "default">("default");
51
- const activeTheme = localTheme === "default" ? resolvedTheme : localTheme;
52
-
71
+ const [activeTab, setActiveTab] = useState<"controls" | "docs">("controls");
72
+ const [sandboxView, setSandboxView] = useState<SandboxView>("preview");
53
73
  return (
54
- <div className="space-y-8 animate-fadeIn">
74
+ <div className="space-y-6 animate-fadeIn">
55
75
  {/* Title block */}
56
- <div className="flex flex-col md:flex-row md:items-center justify-between gap-4">
57
- <div>
76
+ <div className="flex flex-col md:flex-row md:items-start justify-between gap-4">
77
+ <div className="flex-1 min-w-0">
58
78
  <h1 className="text-3xl font-extrabold text-slate-800 dark:text-white tracking-tight flex items-center gap-3">
59
79
  {title}
60
- <span className={`text-[10px] px-2 py-0.5 rounded-full font-semibold border ${activeTheme === "dark"
61
- ? "bg-slate-800 text-slate-200 border-slate-700"
62
- : "bg-slate-100 text-slate-700 border-slate-200"
63
- }`}>
64
- {activeTheme === "dark" ? "Sandbox Oscuro 🌙" : "Sandbox Claro ☀️"}
65
- </span>
66
80
  </h1>
67
81
  <p className="text-slate-500 dark:text-slate-400 mt-1.5 text-sm md:text-base">{description}</p>
68
82
  </div>
69
83
 
70
- {/* Local Sandbox Theme Switcher */}
71
- <div className="flex items-center gap-1 bg-slate-100 dark:bg-slate-800 p-1 rounded-xl border border-slate-200 dark:border-slate-700">
72
- <button
73
- onClick={() => setLocalTheme("default")}
74
- className={`px-3 py-1 text-xs font-medium rounded-lg transition-all ${localTheme === "default"
75
- ? "bg-white dark:bg-slate-700 text-slate-800 dark:text-white shadow-sm border border-slate-200 dark:border-slate-600"
76
- : "text-slate-500 hover:text-slate-800 dark:hover:text-slate-200 border border-transparent"
77
- }`}
78
- >
79
- Auto
80
- </button>
81
- <button
82
- onClick={() => setLocalTheme("light")}
83
- className={`px-3 py-1 text-xs font-medium rounded-lg transition-all ${localTheme === "light"
84
- ? "bg-white dark:bg-slate-700 text-slate-800 dark:text-white shadow-sm border border-slate-200 dark:border-slate-600"
85
- : "text-slate-500 hover:text-slate-800 dark:hover:text-slate-200 border border-transparent"
86
- }`}
87
- >
88
- Claro
89
- </button>
90
- <button
91
- onClick={() => setLocalTheme("dark")}
92
- className={`px-3 py-1 text-xs font-medium rounded-lg transition-all ${localTheme === "dark"
93
- ? "bg-white dark:bg-slate-700 text-slate-800 dark:text-white shadow-sm border border-slate-200 dark:border-slate-600"
94
- : "text-slate-500 hover:text-slate-800 dark:hover:text-slate-200 border border-transparent"
95
- }`}
96
- >
97
- Oscuro
98
- </button>
99
- </div>
84
+
100
85
  </div>
101
86
 
102
- <div className="grid grid-cols-1 lg:grid-cols-3 gap-8">
103
- {/* Interactive Sandbox & Code */}
104
- <div className="lg:col-span-2 space-y-6">
105
- <ITCard title="Sandbox Interactivo" className="shadow-lg border-slate-100 dark:border-slate-800">
106
- <div
107
- data-theme={activeTheme}
108
- className={`p-6 min-h-[180px] rounded-2xl border border-dashed transition-all duration-300 flex items-center justify-center ${activeTheme === "dark"
109
- ? "dark bg-slate-950 border-slate-800 text-slate-200"
110
- : "light bg-white border-slate-200 text-slate-800"
111
- }`}
112
- >
113
- <div className="w-full flex justify-center">{demo}</div>
87
+ <ITGrid container columns={12} spacing={6}>
88
+ {/* ── MAIN: Unified Sandbox (Preview / Code tabs) ── */}
89
+ <ITGrid item as="main" xs={12} md={8} className="space-y-4">
90
+ {/* Unified Sandbox */}
91
+ <div className="bg-white dark:bg-slate-900 rounded-xl border border-slate-200 dark:border-slate-700 shadow-sm overflow-hidden">
92
+ {/* Sandbox header */}
93
+ <div className="flex items-center justify-between px-4 py-2 border-b border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-800/50">
94
+ <div className="flex items-center gap-2">
95
+ <span className="w-2 h-2 rounded-full bg-red-400" />
96
+ <span className="w-2 h-2 rounded-full bg-amber-400" />
97
+ <span className="w-2 h-2 rounded-full bg-emerald-400" />
98
+ <span className="ml-2 text-[10px] font-bold uppercase tracking-wider text-slate-500 dark:text-slate-400">
99
+ Interactive Sandbox
100
+ </span>
101
+ </div>
102
+
103
+ {/* View toggle: Preview / Code */}
104
+ <div className="flex items-center gap-1 bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 p-0.5 rounded-lg">
105
+ <button
106
+ onClick={() => setSandboxView("preview")}
107
+ className={`flex items-center gap-1.5 px-2.5 py-1 text-[11px] font-semibold rounded-md transition-all ${
108
+ sandboxView === "preview"
109
+ ? "bg-primary-100 dark:bg-primary-900/40 text-primary-700 dark:text-primary-300"
110
+ : "text-slate-500 hover:text-slate-700 dark:text-slate-400 dark:hover:text-slate-200"
111
+ }`}
112
+ >
113
+ <FaEye size={10} />
114
+ Preview
115
+ </button>
116
+ <button
117
+ onClick={() => setSandboxView("code")}
118
+ className={`flex items-center gap-1.5 px-2.5 py-1 text-[11px] font-semibold rounded-md transition-all ${
119
+ sandboxView === "code"
120
+ ? "bg-primary-100 dark:bg-primary-900/40 text-primary-700 dark:text-primary-300"
121
+ : "text-slate-500 hover:text-slate-700 dark:text-slate-400 dark:hover:text-slate-200"
122
+ }`}
123
+ >
124
+ <FaCode size={10} />
125
+ Code
126
+ </button>
127
+ </div>
114
128
  </div>
115
- </ITCard>
116
129
 
117
- <CodeViewer code={code} />
118
- </div>
130
+ {/* Sandbox content */}
131
+ {sandboxView === "preview" ? (
132
+ <div
133
+ data-theme={resolvedTheme}
134
+ className="p-6 md:p-10 min-h-[320px] flex items-center justify-center transition-all duration-300 bg-white dark:bg-slate-950"
135
+ >
136
+ <div className="w-full flex justify-center">{demo}</div>
137
+ </div>
138
+ ) : (
139
+ <div className="p-3 bg-slate-50 dark:bg-slate-800/50">
140
+ <CodeViewer code={code} compact />
141
+ </div>
142
+ )}
143
+ </div>
144
+ </ITGrid>
145
+
146
+ {/* ── RIGHT SIDEBAR: Configs / Docs ── */}
147
+ <ITGrid item as="aside" xs={12} md={4}>
148
+ <div className="md:sticky md:top-4">
149
+ <div className="bg-white dark:bg-slate-900 rounded-xl border border-slate-200 dark:border-slate-700 shadow-sm overflow-hidden">
150
+ {/* Tab bar */}
151
+ {doc ? (
152
+ <div className="flex border-b border-slate-200 dark:border-slate-700">
153
+ <button
154
+ onClick={() => setActiveTab("controls")}
155
+ className={`flex-1 flex items-center justify-center gap-1.5 py-2.5 text-xs font-semibold transition-colors ${
156
+ activeTab === "controls"
157
+ ? "text-primary-600 border-b-2 border-primary-600 bg-primary-50/40 dark:bg-primary-950/20 dark:text-primary-400 dark:border-primary-400"
158
+ : "text-slate-500 hover:text-slate-700 dark:text-slate-400 dark:hover:text-slate-200"
159
+ }`}
160
+ >
161
+ <FaCog size={11} />
162
+ Properties
163
+ </button>
164
+ <button
165
+ onClick={() => setActiveTab("docs")}
166
+ className={`flex-1 flex items-center justify-center gap-1.5 py-2.5 text-xs font-semibold transition-colors ${
167
+ activeTab === "docs"
168
+ ? "text-primary-600 border-b-2 border-primary-600 bg-primary-50/40 dark:bg-primary-950/20 dark:text-primary-400 dark:border-primary-400"
169
+ : "text-slate-500 hover:text-slate-700 dark:text-slate-400 dark:hover:text-slate-200"
170
+ }`}
171
+ >
172
+ <FaBookOpen size={11} />
173
+ Docs
174
+ </button>
175
+ </div>
176
+ ) : null}
177
+
178
+ {/* Controls Tab */}
179
+ {activeTab === "controls" && (
180
+ <div className="p-4 space-y-4 max-h-[calc(100vh-160px)] overflow-y-auto">
181
+ <div className="space-y-4">{controls}</div>
182
+ </div>
183
+ )}
184
+
185
+ {/* Documentation Tab */}
186
+ {doc && activeTab === "docs" && (
187
+ <div className="p-4 space-y-5 max-h-[calc(100vh-160px)] overflow-y-auto">
188
+ {/* Description */}
189
+ <div>
190
+ <h3 className="text-[10px] font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">
191
+ Overview
192
+ </h3>
193
+ <p className="text-xs text-slate-700 dark:text-slate-300 leading-relaxed">
194
+ {doc.summary}
195
+ </p>
196
+ {doc.description && (
197
+ <p className="text-[11px] text-slate-500 dark:text-slate-400 leading-relaxed mt-2">
198
+ {doc.description}
199
+ </p>
200
+ )}
201
+ </div>
202
+
203
+ {/* Props Table */}
204
+ <div>
205
+ <h3 className="text-[10px] font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">
206
+ Props
207
+ </h3>
208
+ <div className="overflow-x-auto rounded-lg border border-slate-200 dark:border-slate-700">
209
+ <table className="w-full text-[11px]">
210
+ <thead>
211
+ <tr className="bg-slate-50 dark:bg-slate-800">
212
+ <th className="text-left px-2 py-1.5 font-semibold text-slate-600 dark:text-slate-300 whitespace-nowrap">Prop</th>
213
+ <th className="text-left px-2 py-1.5 font-semibold text-slate-600 dark:text-slate-300 whitespace-nowrap">Type</th>
214
+ <th className="text-left px-2 py-1.5 font-semibold text-slate-600 dark:text-slate-300 whitespace-nowrap">Default</th>
215
+ </tr>
216
+ </thead>
217
+ <tbody>
218
+ {doc.props.map((prop, i) => (
219
+ <tr
220
+ key={prop.name}
221
+ className={`border-t border-slate-100 dark:border-slate-800 ${
222
+ i % 2 === 0 ? "bg-white dark:bg-slate-900" : "bg-slate-50/50 dark:bg-slate-800/50"
223
+ }`}
224
+ >
225
+ <td className="px-2 py-1.5 font-mono font-semibold text-primary-700 dark:text-primary-400 whitespace-nowrap">
226
+ {prop.name}
227
+ {prop.required ? <span className="text-danger-500 ml-0.5">*</span> : null}
228
+ </td>
229
+ <td className="px-2 py-1.5 font-mono text-slate-600 dark:text-slate-400 text-[10px]">
230
+ {prop.type}
231
+ </td>
232
+ <td className="px-2 py-1.5 font-mono text-slate-400 dark:text-slate-500 text-[10px]">
233
+ {prop.default || "—"}
234
+ </td>
235
+ </tr>
236
+ ))}
237
+ </tbody>
238
+ </table>
239
+ </div>
240
+ {/* Detailed descriptions below the compact table */}
241
+ <div className="mt-2 space-y-1.5">
242
+ {doc.props.map((prop) => (
243
+ <div key={prop.name} className="text-[11px]">
244
+ <span className="font-mono font-semibold text-primary-700 dark:text-primary-400">{prop.name}</span>
245
+ <span className="text-slate-500 dark:text-slate-400"> — {prop.description}</span>
246
+ </div>
247
+ ))}
248
+ </div>
249
+ </div>
250
+
251
+ {/* Usage Examples */}
252
+ {doc.examples && doc.examples.length > 0 && (
253
+ <div>
254
+ <h3 className="text-[10px] font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">
255
+ Usage Examples
256
+ </h3>
257
+ {doc.examples.map((example, i) => (
258
+ <div key={i} className="mb-2 last:mb-0">
259
+ <pre className="p-2 rounded-lg bg-slate-950 text-slate-200 text-[10px] font-mono overflow-x-auto leading-relaxed">
260
+ <code>{example}</code>
261
+ </pre>
262
+ </div>
263
+ ))}
264
+ </div>
265
+ )}
119
266
 
120
- {/* Controls */}
121
- <div className="space-y-6">
122
- <ITCard title="Propiedades / Controles" className="shadow-lg border-slate-100 dark:border-slate-800">
123
- <div className="space-y-4">
124
- {controls}
267
+ {/* Notes */}
268
+ {doc.notes && doc.notes.length > 0 && (
269
+ <div>
270
+ <h3 className="text-[10px] font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">
271
+ Notes
272
+ </h3>
273
+ <ul className="space-y-1">
274
+ {doc.notes.map((note, i) => (
275
+ <li key={i} className="text-[11px] text-slate-600 dark:text-slate-400 flex items-start gap-2">
276
+ <span className="text-primary-500 mt-0.5 shrink-0">•</span>
277
+ <span>{note}</span>
278
+ </li>
279
+ ))}
280
+ </ul>
281
+ </div>
282
+ )}
283
+ </div>
284
+ )}
125
285
  </div>
126
- </ITCard>
127
- </div>
128
- </div>
286
+ </div>
287
+ </ITGrid>
288
+ </ITGrid>
129
289
 
290
+ {/* Gallery */}
130
291
  {gallery && (
131
- <ITCard title="Variaciones y Estados (Galería)" className="shadow-lg border-slate-100 dark:border-slate-800">
292
+ <div className="bg-white dark:bg-slate-900 rounded-xl border border-slate-200 dark:border-slate-700 shadow-sm overflow-hidden">
293
+ <div className="px-4 py-2 border-b border-slate-200 dark:border-slate-700">
294
+ <span className="text-[10px] font-bold uppercase tracking-wider text-slate-500 dark:text-slate-400">Variations & States (Gallery)</span>
295
+ </div>
132
296
  <div className="p-4">
133
297
  {gallery}
134
298
  </div>
135
- </ITCard>
299
+ </div>
136
300
  )}
137
301
  </div>
138
302
  );