@axzydev/axzy_ui_system 1.2.6 → 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.
- package/dist/index.cjs +777 -535
- 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 +1470 -87
- package/dist/index.d.ts +1470 -87
- package/dist/index.js +799 -555
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/App.tsx +19 -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 +26 -2
- 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 +41 -17
- 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 +78 -46
- package/src/components/page/page.doc.mdx +80 -0
- package/src/components/page/page.props.ts +25 -0
- package/src/components/page/page.tsx +35 -7
- package/src/components/page-header/page-header.doc.mdx +54 -0
- package/src/components/page-header/page-header.props.ts +11 -0
- package/src/components/page-header/page-header.stories.tsx +14 -0
- package/src/components/page-header/page-header.tsx +50 -15
- 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 +17 -0
- package/src/showcases/DataShowcases.tsx +529 -45
- package/src/showcases/FormShowcases.tsx +399 -29
- package/src/showcases/HomeShowcase.tsx +252 -272
- package/src/showcases/LayoutPrimitivesShowcases.tsx +1224 -248
- package/src/showcases/PageShowcases.tsx +868 -151
- package/src/showcases/ShowcaseLayout.tsx +237 -73
- package/src/showcases/StructureShowcases.tsx +1039 -97
- package/src/types/table.types.ts +1 -1
- 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
|
|
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 ? "
|
|
23
|
+
<span>{copied ? "Copied!" : "Copy"}</span>
|
|
23
24
|
</button>
|
|
24
25
|
</div>
|
|
25
|
-
<pre className=
|
|
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 [
|
|
51
|
-
const
|
|
52
|
-
|
|
71
|
+
const [activeTab, setActiveTab] = useState<"controls" | "docs">("controls");
|
|
72
|
+
const [sandboxView, setSandboxView] = useState<SandboxView>("preview");
|
|
53
73
|
return (
|
|
54
|
-
<div className="space-y-
|
|
74
|
+
<div className="space-y-6 animate-fadeIn">
|
|
55
75
|
{/* Title block */}
|
|
56
|
-
<div className="flex flex-col md:flex-row md:items-
|
|
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
|
-
|
|
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
|
-
<
|
|
103
|
-
{/*
|
|
104
|
-
<
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
-
|
|
118
|
-
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
</
|
|
127
|
-
</
|
|
128
|
-
</
|
|
286
|
+
</div>
|
|
287
|
+
</ITGrid>
|
|
288
|
+
</ITGrid>
|
|
129
289
|
|
|
290
|
+
{/* Gallery */}
|
|
130
291
|
{gallery && (
|
|
131
|
-
<
|
|
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
|
-
</
|
|
299
|
+
</div>
|
|
136
300
|
)}
|
|
137
301
|
</div>
|
|
138
302
|
);
|